diff options
author | 2022-02-27 23:20:10 -0800 | |
---|---|---|
committer | 2022-02-27 23:20:10 -0800 | |
commit | 50560e169ca39c0b4ec163cb32897baf7620aa69 (patch) | |
tree | 83eb721bfd4a0318874c1f69d254a4fd9446512b /src/api/demo/pages/scan.tsx | |
parent | 36c249e9c1fc6e0000d23ae0055eed54a5437c74 (diff) | |
download | bun-50560e169ca39c0b4ec163cb32897baf7620aa69.tar.gz bun-50560e169ca39c0b4ec163cb32897baf7620aa69.tar.zst bun-50560e169ca39c0b4ec163cb32897baf7620aa69.zip |
WASM
Diffstat (limited to 'src/api/demo/pages/scan.tsx')
-rw-r--r-- | src/api/demo/pages/scan.tsx | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/api/demo/pages/scan.tsx b/src/api/demo/pages/scan.tsx new file mode 100644 index 000000000..819a597b9 --- /dev/null +++ b/src/api/demo/pages/scan.tsx @@ -0,0 +1,71 @@ +import Head from "next/head"; +import Image from "next/image"; +import styles from "../styles/Home.module.css"; + +import React from "react"; + +if (typeof window !== "undefined") { + globalThis.Scan = await import("../lib/scan"); + 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" + ), + defaultFile: "magic-string.js", + }, + }; +} + +var textDecoder = new TextDecoder(); +export default function Home({ code, defaultFile }) { + const fileNameRef = React.useRef(); + const [lexer, setLexer] = React.useState(""); + const [bunResult, setBunResult] = React.useState(""); + const [file, setFile] = React.useState(defaultFile); + React.useEffect(() => { + globalThis.Scan.start(); + }, []); + + const runBuild = React.useCallback( + (event) => { + globalThis.Scan.transform( + event.target.value, + fileNameRef.current.value + ).then((result) => { + setLexer(JSON.stringify(result.lexer, null, 2)); + setBunResult(JSON.stringify(result.bun, null, 2)); + }, console.error); + }, + [fileNameRef, setBunResult, setLexer] + ); + return ( + <div className={styles.container}> + <Head> + <title>Next.js</title> + <meta name="description" content="Generated by create next app" /> + <link rel="icon" href="/favicon.ico" /> + </Head> + + <main className={styles.main}> + <div> + <input + autoComplete="filename" + type="text" + placeholder="filename" + value={file} + onChange={(event) => setFile(event.target.value)} + ref={fileNameRef} + /> + <textarea onChange={runBuild} defaultValue={code}></textarea> + + <textarea readOnly value={bunResult}></textarea> + <textarea readOnly value={lexer}></textarea> + </div> + </main> + </div> + ); +} |