diff options
Diffstat (limited to 'src/api/demo/pages/index.tsx')
-rw-r--r-- | src/api/demo/pages/index.tsx | 105 |
1 files changed, 53 insertions, 52 deletions
diff --git a/src/api/demo/pages/index.tsx b/src/api/demo/pages/index.tsx index 4d60b4084..7274b3d39 100644 --- a/src/api/demo/pages/index.tsx +++ b/src/api/demo/pages/index.tsx @@ -1,70 +1,71 @@ import Head from "next/head"; import Image from "next/image"; import styles from "../styles/Home.module.css"; -import "../lib/api.ts"; -export default function Home() { +import React from "react"; + +if (typeof window !== "undefined") { + globalThis.Run = await import("../lib/run"); + await import("../lib/api.ts"); +} + +export async function getStaticProps(ctx) { + return { + props: { + code: Bun.readFile( + "/Users/jarred/Build/es-module-lexer/test/samples/magic-string.js" + ), + }, + }; +} + +var textDecoder = new TextDecoder(); +export default function Home({ code }) { + const fileNameRef = React.useRef(); + const [esbuildResult, setEsbuildResult] = React.useState(""); + const [bunResult, setBunResult] = React.useState(""); + const [swcResult, setSWCResult] = React.useState(""); + React.useEffect(() => { + globalThis.Run.start(); + }, []); + + const runBuild = React.useCallback( + (event) => { + globalThis.Run.transform( + event.target.value, + fileNameRef.current.value + ).then((result) => { + setEsbuildResult(result.esbuild.code); + setBunResult(textDecoder.decode(result.bun.files[0].data)); + setSWCResult(result.swc.code); + }, console.error); + }, + [fileNameRef, setEsbuildResult, setBunResult, setSWCResult] + ); return ( <div className={styles.container}> <Head> - <title>Create Next App</title> + <title>Next.js</title> <meta name="description" content="Generated by create next app" /> <link rel="icon" href="/favicon.ico" /> </Head> <main className={styles.main}> - <h1 className={styles.title}> - Welcome to <a href="https://nextjs.org">Next.js!</a> - </h1> - - <p className={styles.description}> - Get started by editing{" "} - <code className={styles.code}>pages/index.js</code> - </p> - - <div className={styles.grid}> - <a href="https://nextjs.org/docs" className={styles.card}> - <h2>Documentation →</h2> - <p>Find in-depth information about Next.js features and API.</p> - </a> + <div> + <input + autoComplete="filename" + type="text" + placeholder="filename" + defaultValue="input.tsx" + ref={fileNameRef} + /> + <textarea onChange={runBuild} defaultValue={code}></textarea> - <a href="https://nextjs.org/learn" className={styles.card}> - <h2>Learn →</h2> - <p>Learn about Next.js in an interactive course with quizzes!</p> - </a> - - <a - href="https://github.com/vercel/next.js/tree/master/examples" - className={styles.card} - > - <h2>Examples →</h2> - <p>Discover and deploy boilerplate example Next.js projects.</p> - </a> - - <a - href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app" - className={styles.card} - > - <h2>Deploy →</h2> - <p> - Instantly deploy your Next.js site to a public URL with Vercel. - </p> - </a> + <textarea readOnly value={esbuildResult}></textarea> + <textarea readOnly value={bunResult}></textarea> + <textarea readOnly value={swcResult}></textarea> </div> </main> - - <footer className={styles.footer}> - <a - href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app" - target="_blank" - rel="noopener noreferrer" - > - Powered by{" "} - <span className={styles.logo}> - <Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} /> - </span> - </a> - </footer> </div> ); } |