diff options
author | 2022-08-05 02:37:34 -0500 | |
---|---|---|
committer | 2022-08-05 00:37:34 -0700 | |
commit | 95294d245c87bf135c715a46c9559805f39d90ef (patch) | |
tree | 2f2794ddb57448737952bfd6b8802b1f9e5bc4fa | |
parent | c5b600ad483b9276e8dc651dd4f35ecd7b56f8a1 (diff) | |
download | bun-95294d245c87bf135c715a46c9559805f39d90ef.tar.gz bun-95294d245c87bf135c715a46c9559805f39d90ef.tar.zst bun-95294d245c87bf135c715a46c9559805f39d90ef.zip |
Convert landing page to zero-JS Next.js application. (#945)
-rw-r--r-- | packages/bun-landing/.gitignore | 43 | ||||
-rw-r--r-- | packages/bun-landing/README.md | 25 | ||||
-rw-r--r-- | packages/bun-landing/build.tsx | 17 | ||||
-rwxr-xr-x | packages/bun-landing/bun.lockb | bin | 3913 -> 12479 bytes | |||
-rw-r--r-- | packages/bun-landing/bunfig.toml | 1 | ||||
-rw-r--r-- | packages/bun-landing/components/CodeBlock.tsx | 15 | ||||
-rw-r--r-- | packages/bun-landing/components/Layout.tsx | 93 | ||||
-rw-r--r-- | packages/bun-landing/next.config.js | 11 | ||||
-rw-r--r-- | packages/bun-landing/package.json | 21 | ||||
-rw-r--r-- | packages/bun-landing/pages/_app.tsx | 6 | ||||
-rw-r--r-- | packages/bun-landing/pages/index.tsx (renamed from packages/bun-landing/page.tsx) | 181 | ||||
-rw-r--r-- | packages/bun-landing/public/index.css | 915 | ||||
-rw-r--r-- | packages/bun-landing/public/index.html | 980 | ||||
-rw-r--r-- | packages/bun-landing/public/ssr.tsx | 0 | ||||
-rw-r--r-- | packages/bun-landing/react-dom-server.bun.production.min.js | 2082 | ||||
-rw-r--r-- | packages/bun-landing/ssr.tsx | 34 | ||||
-rw-r--r-- | packages/bun-landing/styles/global.css (renamed from packages/bun-landing/index.css) | 0 | ||||
-rw-r--r-- | packages/bun-landing/tsconfig.json | 22 |
18 files changed, 262 insertions, 4184 deletions
diff --git a/packages/bun-landing/.gitignore b/packages/bun-landing/.gitignore new file mode 100644 index 000000000..b318aa2ae --- /dev/null +++ b/packages/bun-landing/.gitignore @@ -0,0 +1,43 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ +next-env.d.ts + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +**/*.trace +**/*.zip +**/*.tar.gz +**/*.tgz +**/*.log +package-lock.json +**/*.bun
\ No newline at end of file diff --git a/packages/bun-landing/README.md b/packages/bun-landing/README.md new file mode 100644 index 000000000..0f83c5574 --- /dev/null +++ b/packages/bun-landing/README.md @@ -0,0 +1,25 @@ +# bun.sh + +This is the landing page for the bun.sh site and documentation. + +## Running Locally + +Install dependencies + +```bash +bun install +``` + +Run the development server: + +```bash +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +## Building + +```bash +bun run build +```
\ No newline at end of file diff --git a/packages/bun-landing/build.tsx b/packages/bun-landing/build.tsx deleted file mode 100644 index 732700d81..000000000 --- a/packages/bun-landing/build.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { file, serve } from "bun"; -import "shiki"; -import { renderToReadableStream } from "../../test/bun.js/reactdom-bun"; - -import liveReload from "bun-livereload"; -import { join } from "path"; - -const { default: Page } = await import("./page.tsx"); -const build = await new Response( - await renderToReadableStream(<Page inlineCSS />) -).text(); - -await Bun.write(import.meta.dir + "/public/index.html", build); -await Bun.write( - import.meta.dir + "/public/index.css", - Bun.file(import.meta.dir + "/index.css") -); diff --git a/packages/bun-landing/bun.lockb b/packages/bun-landing/bun.lockb Binary files differindex 2303c71d8..c6b3744c9 100755 --- a/packages/bun-landing/bun.lockb +++ b/packages/bun-landing/bun.lockb diff --git a/packages/bun-landing/bunfig.toml b/packages/bun-landing/bunfig.toml new file mode 100644 index 000000000..f191e4e10 --- /dev/null +++ b/packages/bun-landing/bunfig.toml @@ -0,0 +1 @@ +framework = "next" diff --git a/packages/bun-landing/components/CodeBlock.tsx b/packages/bun-landing/components/CodeBlock.tsx new file mode 100644 index 000000000..43618f2a0 --- /dev/null +++ b/packages/bun-landing/components/CodeBlock.tsx @@ -0,0 +1,15 @@ +import * as shiki from "shiki"; + +// because we don't want to wait for it to reload everytime this page reloads +globalThis._highlighter ||= await shiki.getHighlighter({ + theme: "dracula", +}); + +const highlighter = globalThis._highlighter as shiki.Highlighter; + +export default function CodeBlock({ children, lang = "js" }) { + const html = highlighter.codeToHtml(children.trim(), { lang }); + return ( + <div className="CodeBlock" dangerouslySetInnerHTML={{ __html: html }} /> + ); +};
\ No newline at end of file diff --git a/packages/bun-landing/components/Layout.tsx b/packages/bun-landing/components/Layout.tsx new file mode 100644 index 000000000..2e50ce3d8 --- /dev/null +++ b/packages/bun-landing/components/Layout.tsx @@ -0,0 +1,93 @@ +import Head from "next/head"; + +export default function Layout({ children }) { + return ( + <> + <Head> + <meta charSet="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta + property="og:title" + content="Bun is a fast all-in-one JavaScript runtime" + /> + <title>Bun is a fast all-in-one JavaScript runtime</title> + <meta + property="og:description" + content={`Bundle, transpile, install and run JavaScript & TypeScript + projects – all in Bun. Bun is a new JavaScript runtime with + a native bundler, transpiler, task runner and npm client built-in.`} + /> + <meta name="og:locale" content="en_US" /> + <meta name="twitter:site" content="@jarredsumner" /> + <meta name="twitter:card" content="summary_large_image" /> + <meta property="og:image" content="https://bun.sh/share.png" /> + <meta + name="description" + content={`Bundle, transpile, install and run JavaScript & TypeScript + projects – all in Bun. Bun is a new JavaScript runtime with + a native bundler, transpiler, task runner and npm client built-in.`} + /> + <meta name="theme-color" content="#fbf0df" /> + <link rel="manifest" href="manifest.json" /> + <link + rel="icon" + type="image/png" + sizes="256x256" + href="/logo-square.png" + /> + <link + rel="icon" + type="image/png" + sizes="32x32" + href="/logo-square@32px.png" + /> + <link + rel="icon" + type="image/png" + sizes="16x16" + href="/logo-square@16px.png" + /> + </Head> + <body> + <div id="header-wrap"> + <header> + <a href="/" id="logo-link" aria-label="home"> + <img height="61px" src="/logo.svg" alt="Bun logo" id="logo" /> + <img + height="31.65px" + src="/Bun.png" + srcSet="/Bun.png 1x, /Bun@2x.png 2x" + alt="Bun" + id="logo-text" + /> + </a> + + <nav className="Navigation"> + <ul> + <li> + <a + className="NavText" + href="https://github.com/oven-sh/bun#Reference" + > + Docs + </a> + </li> + <li> + <a className="NavText" href="https://bun.sh/discord"> + Discord + </a> + </li> + <li> + <a className="NavText" href="https://github.com/oven-sh/bun"> + GitHub + </a> + </li> + </ul> + </nav> + </header> + </div> + {children} + </body> + </> + ); +} diff --git a/packages/bun-landing/next.config.js b/packages/bun-landing/next.config.js new file mode 100644 index 000000000..5a8ff89b2 --- /dev/null +++ b/packages/bun-landing/next.config.js @@ -0,0 +1,11 @@ +module.exports = { + reactStrictMode: true, + typescript: { + ignoreBuildErrors: true, + }, + webpack: (config) => { + // support shiki top level await + config.experiments = { ...config.experiments, ...{ topLevelAwait: true }}; + return config; + }, +}; diff --git a/packages/bun-landing/package.json b/packages/bun-landing/package.json index e71b0db13..c67c236d4 100644 --- a/packages/bun-landing/package.json +++ b/packages/bun-landing/package.json @@ -1,9 +1,20 @@ { + "scripts": { + "dev": "next", + "build": "next build", + "start": "next start" + }, "dependencies": { - "bun-livereload": "1.0.2", - "bun-types": "latest", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "shiki": "^0.10.1" + "next": "12.2.3", + "react": "^18", + "react-dom": "^18", + "react-is": "^17.0.2", + "shiki": "0.10.1" + }, + "devDependencies": { + "@types/react": "^18", + "@types/node": "latest", + "bun-framework-next": "^12", + "typescript": "latest" } }
\ No newline at end of file diff --git a/packages/bun-landing/pages/_app.tsx b/packages/bun-landing/pages/_app.tsx new file mode 100644 index 000000000..416778949 --- /dev/null +++ b/packages/bun-landing/pages/_app.tsx @@ -0,0 +1,6 @@ +import Layout from "../components/Layout"; +import "../styles/global.css"; + +export default function MyApp({ Component, pageProps }) { + return <Layout><Component {...pageProps} /></Layout>; +}
\ No newline at end of file diff --git a/packages/bun-landing/page.tsx b/packages/bun-landing/pages/index.tsx index 12d688862..ff57649a6 100644 --- a/packages/bun-landing/page.tsx +++ b/packages/bun-landing/pages/index.tsx @@ -1,21 +1,4 @@ -import { readFileSync } from "fs"; -import * as shiki from "shiki"; - -const DOCS = "https://github.com/oven-sh/bun#Reference"; - -// because we don't want to wait for it to reload everytime this page reloads -globalThis._highlighter ||= await shiki.getHighlighter({ - theme: "dracula", -}); - -const highlighter = globalThis._highlighter as shiki.Highlighter; - -const CodeBlock = ({ children, lang = "js" }) => { - const html = highlighter.codeToHtml(children.trim(), { lang }); - return ( - <div className="CodeBlock" dangerouslySetInnerHTML={{ __html: html }} /> - ); -}; +import CodeBlock from "../components/CodeBlock"; const Command = ({ children, href, Tag = href ? "a" : "span" }) => ( <Tag target="_blank" href={href} className="Tag Tag--Command"> @@ -118,7 +101,7 @@ const Zig = () => ( <polygon points="46,22 28,44 19,30" /> <polygon points="46,22 33,33 28,44 22,44 22,95 31,95 20,100 12,117 0,117 0,22" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="31,95 12,117 4,106" /> </g> @@ -126,12 +109,12 @@ const Zig = () => ( <polygon points="56,22 62,36 37,44" /> <polygon points="56,22 111,22 111,44 37,44 56,32" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="116,95 97,117 90,104" /> <polygon points="116,95 100,104 97,117 42,117 42,95" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="150,0 52,117 3,140 101,22" /> </g> @@ -139,7 +122,7 @@ const Zig = () => ( <polygon points="141,22 140,40 122,45" /> <polygon points="153,22 153,117 106,117 120,105 125,95 131,95 131,45 122,45 132,36 141,22" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="125,95 130,110 106,117" /> </g> @@ -148,25 +131,19 @@ const Zig = () => ( <g> <polygon points="260,22 260,37 229,40 177,40 177,22" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="260,37 207,99 207,103 176,103 229,40 229,37" /> <polygon points="261,99 261,117 176,117 176,103 206,99" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> </g> - <rect - x="272" - y="22" - shape-rendering="crispEdges" - width="22" - height="95" - /> + <rect x="272" y="22" shapeRendering="crispEdges" width="22" height="95" /> <g> <polygon points="394,67 394,106 376,106 376,81 360,70 346,67" - shape-rendering="crispEdges" + shapeRendering="crispEdges" /> <polygon points="360,68 376,81 346,67" /> <path @@ -215,101 +192,9 @@ const Group = ({ children, ...props }) => ( </div> ); -export default ({ inlineCSS }) => ( - <html lang="en"> - <head> - <meta charSet="UTF-8" /> - - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta - property="og:title" - content="Bun is a fast all-in-one JavaScript runtime" - /> - <meta - property="og:description" - content={`Bundle, transpile, install and run JavaScript & TypeScript - projects – all in Bun. Bun is a new JavaScript runtime with - a native bundler, transpiler, task runner and npm client built-in.`} - /> - <meta name="og:locale" content="en_US" /> - <meta name="twitter:site" content="@jarredsumner" /> - <meta name="twitter:card" content="summary_large_image" /> - <meta property="og:image" content="https://bun.sh/share.png" /> - <meta - name="description" - content={`Bundle, transpile, install and run JavaScript & TypeScript - projects – all in Bun. Bun is a new JavaScript runtime with - a native bundler, transpiler, task runner and npm client built-in.`} - /> - <meta name="theme-color" content="#fbf0df" /> - <link rel="manifest" href="manifest.json" /> - <link - rel="icon" - type="image/png" - sizes="256x256" - href="/logo-square.png" - /> - <link - rel="icon" - type="image/png" - sizes="32x32" - href="/logo-square@32px.png" - /> - <link - rel="icon" - type="image/png" - sizes="16x16" - href="/logo-square@16px.png" - /> - - <title>Bun is a fast all-in-one JavaScript runtime</title> - - {inlineCSS ? ( - <style - dangerouslySetInnerHTML={{ - __html: readFileSync(import.meta.dir + "/index.css", "utf8"), - }} - ></style> - ) : ( - <link rel="stylesheet" href="/index.css" /> - )} - </head> - - <body> - <div id="header-wrap"> - <header> - <a href="/" id="logo-link" aria-label="home"> - <img height="61px" src="/logo.svg" alt="Bun logo" id="logo" /> - <img - height="31.65px" - src="/Bun.png" - srcSet="/Bun.png 1x, /Bun@2x.png 2x" - alt="Bun" - id="logo-text" - /> - </a> - - <nav className="Navigation"> - <ul> - <li> - <a className="NavText" href={DOCS}> - Docs - </a> - </li> - <li> - <a className="NavText" href="https://bun.sh/discord"> - Discord - </a> - </li> - <li> - <a className="NavText" href="https://github.com/oven-sh/bun"> - GitHub - </a> - </li> - </ul> - </nav> - </header> - </div> +export default function LandingPage() { + return ( + <> <div id="pitch"> <main> <div id="pitch-content"> @@ -580,8 +465,8 @@ export default ({ inlineCSS }) => ( </li> <li> <NodeJS>node_modules</NodeJS> bun implements Node.js' module - resolution algorithm, so you can use npm packages in Bun. ESM - and CommonJS are supported, but Bun internally uses ESM + resolution algorithm, so you can use npm packages in Bun. ESM and + CommonJS are supported, but Bun internally uses ESM </li> <li> In Bun, every file is transpiled.{" "} @@ -589,8 +474,7 @@ export default ({ inlineCSS }) => ( work </li> <li> - Bun supports <code className="">"paths"</code>,{" "} - <code>"jsxImportSource"</code> + Bun supports <code>"paths"</code>, <code>"jsxImportSource"</code> and more from <TypeScript>tsconfig.json</TypeScript> files </li> <li> @@ -602,9 +486,9 @@ export default ({ inlineCSS }) => ( to write, copy, pipe, send and clone files </li> <li> - Bun automatically loads environment variables from{" "} - <Bun>.env</Bun> files. No more{" "} - <code class="mono">require("dotenv").config()</code> + Bun automatically loads environment variables from <Bun>.env</Bun>{" "} + files. No more{" "} + <code className="mono">require("dotenv").config()</code> </li> <li> Bun ships with a fast SQLite3 client built-in{" "} @@ -628,9 +512,9 @@ export default ({ inlineCSS }) => ( low-overhead foreign function interface </li> <li> - <NodeJS>node:fs</NodeJS> <NodeJS>node:path</NodeJS> Bun - natively supports a growing list of Node.js core modules along - with globals like Buffer and process + <NodeJS>node:fs</NodeJS> <NodeJS>node:path</NodeJS> Bun natively + supports a growing list of Node.js core modules along with globals + like Buffer and process </li> </ul> @@ -725,8 +609,9 @@ export default { <a href="https://github.com/oven-sh/bun/tree/main/examples"> more examples </a>{" "} - and check out <a href={DOCS}>the docs</a>. If you have any questions - or want help, join{" "} + and check out{" "} + <a href="https://github.com/oven-sh/bun#Reference">the docs</a>. If + you have any questions or want help, join{" "} <a href="https://bun.sh/discord">Bun's Discord</a>. </p> @@ -754,8 +639,9 @@ export default { <Group> <Command>bun install</Command> <p> - <code classsName="mono">bun install</code> is an npm-compatible package manager. You probably - will be surprised by how much faster copying files can get. + <code classsName="mono">bun install</code> is an npm-compatible + package manager. You probably will be surprised by how much faster + copying files can get. </p> <strong> Replace <code className="mono">yarn</code> with{" "} @@ -764,7 +650,8 @@ export default { </strong> <br /> <div> - <code className="mono">bun install</code> uses the fastest system calls available to copy files. + <code className="mono">bun install</code> uses the fastest system + calls available to copy files. </div> </Group> <Group> @@ -851,6 +738,10 @@ for (const el of document.querySelectorAll(".InstallBox-copy")) { }} /> <div className="Built">Built with Bun {process.version}</div> - </body> - </html> -); + </> + ); +} + +export const config = { + unstable_runtimeJS: false, +}; diff --git a/packages/bun-landing/public/index.css b/packages/bun-landing/public/index.css deleted file mode 100644 index d8cd2798b..000000000 --- a/packages/bun-landing/public/index.css +++ /dev/null @@ -1,915 +0,0 @@ -:root { - --black: #0b0a08; - --blue: #00a6e1; - --orange: #f89b4b; - --orange-light: #d4d3d2; - - --monospace-font: "Fira Code", "Hack", "Source Code Pro", "SF Mono", - "Inconsolata", monospace; - - --dark-border: rgba(200, 200, 25, 0.2); - --max-width: 1152px; - - --system-font: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", - Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; - - --horizontal-padding: 3rem; - --vertical-padding: 4rem; - --line-height: 1.4; -} - -* { - box-sizing: border-box; -} - -head, -body, -:root { - margin: 0 auto; - padding: 0; - font-family: var(--system-font); -} - -body { - background-color: #fbf0df; -} - -a { - color: inherit; - text-decoration: none; - transition: transform 0.1s linear; -} - -a:visited { - color: inherit; -} - -a:hover { - text-decoration: underline; - transform: scale(1.06, 1.06); - transform-origin: middle center; -} - -#header-wrap, -#pitch { - background-color: var(--black); - color: #fbf0df; - width: 100%; -} - -#logo-link { - width: fit-content; - display: flex; - gap: 24px; - align-items: center; -} - -main { - width: auto; - - margin: 0 auto; - max-width: var(--max-width); - display: grid; - grid-template-columns: auto auto; - overflow-y: hidden; -} - -main, -header, -#explain-section { - margin: 0 auto; - max-width: var(--max-width); - padding: 0 var(--horizontal-padding); -} - -#cards-wrap, -#usecases, -main, -header { - padding: var(--vertical-padding) var(--horizontal-padding); -} - -#pitch-content { - max-width: 600px; -} - -.tagline { - margin-top: 0; - line-height: 1; - font-size: 36pt; -} - -.subtitle { - font-size: 1.2rem; -} - -.Navigation ul { - white-space: nowrap; - display: flex; - gap: 2rem; - list-style: none; -} - -.NavText { - color: #fbf0df; - display: block; - font-weight: 500; - font-size: 1.2rem; -} - -#HeaderInstallButton { - margin-left: 2.4rem; -} - -#pitch main { - gap: 2rem; -} - -#logo { - max-width: 70px; - margin: auto 0; -} - -#logo-text { - max-width: 96px; -} - -header { - display: grid; - grid-template-columns: auto max-content; - background-color: var(--black); - padding: 1.5rem 3rem; - align-items: center; - color: white; -} - -#HeaderInstallButton:hover { - cursor: pointer; - transform: scale(1.06); -} - -#HeaderInstallButton { - transition: transform 0.1s linear; - background: #00a6e1; - padding: 8px 16px; - border-radius: 100px; - color: black; - font-weight: 500; -} - -.InstallBox { - margin-top: 2rem; - background: #15140e; - padding: 24px 24px; - border-radius: 24px; - user-select: none; - -webkit-user-select: none; - -webkit-user-drag: none; - -moz-user-select: none; -} - -.InstallBox-label-heading { - font-size: 1.4rem; - margin-bottom: 1rem; - font-weight: 500; - font-weight: 500; -} - -.InstallBox-label-subtitle { - font-size: 0.9rem; - color: var(--orange-light); -} - -#usecases-section { - background: linear-gradient(12deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.2)), - conic-gradient( - from 6.27deg at 46.95% 50.05%, - #ff8181 0deg, - #e5f067 75deg, - #6dd9ba 155.62deg, - #67f0ae 168.75deg, - #8b67f0 243.75deg, - #f067e2 300deg, - #e967e3 334.49deg, - #f06767 348.9deg, - #ff8181 360deg - ); - color: white; - font-family: var(--monospace-font); - contain: paint; - - font-size: 24pt; - font-weight: bold; -} - -#usecases-section { - padding: 0; - margin: 0; -} - -#usecases { - padding-top: 1rem; - padding-bottom: 1rem; -} - -#usecases-section h1 { - background: linear-gradient(90deg, #ff0000 0%, #faff00 50.52%, #0500ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); - font-family: Helvetica; - margin: 0; - padding: 0; -} - -.InstallBox-code-box { - background-color: rgb(37, 36, 32); - padding: 4px 16px; - position: relative; - border-radius: 8px; - text-align: center; - align-items: center; - border: 1px solid var(--orange); - margin-top: 1rem; - display: flex; - justify-content: space-between; - align-content: center; - white-space: nowrap; - margin-bottom: 1rem; - font-family: var(--monospace-font); -} - -.InstallBox-curl { - user-select: all; - -webkit-user-select: text; - pointer-events: auto; - white-space: nowrap; - cursor: text; - display: inline-flex; - padding: 12px 8px; - gap: 2ch; -} - -.InstallBox-curl::before { - display: block; - content: "$" / ""; - color: var(--orange); - pointer-events: none; - width: 1ch; - height: 1ch; -} - -.InstallBox-view-source-link { - color: var(--orange-light); -} - -.InstallBox-copy { - height: 100%; - display: flex; - align-items: center; - color: var(--orange-light); - transition: transform 0.05s linear; - transition-property: color, transform; - transform-origin: center center; - cursor: pointer; - background: transparent; - border: none; - font-size: inherit; - font-family: inherit; -} - -.InstallBox-copy:hover { - color: var(--blue); - transform: scale(1.06); -} - -.InstallBox-copy:active { - transform: scale(1.12); -} - -.Tabs { - display: grid; - grid-template-columns: repeat(3, 1fr); - margin-left: auto; - margin-right: auto; - justify-content: center; - align-items: center; - width: min-content; - white-space: nowrap; - padding: 0; -} - -.Tab { - width: min-content; - border: none; - background-color: transparent; - font-family: var(--monospace-font); - text-align: center; - border-bottom: 1px solid #ccc; - cursor: pointer; - padding: 16px; - color: inherit; - font-size: inherit; -} - -.Tab:hover, -.Graphs--active-react .Tab[data-tab="react"], -.Graphs--active-sqlite .Tab[data-tab="sqlite"], -.Graphs--active-ffi .Tab[data-tab="ffi"] { - border-bottom-color: aquamarine; - background-color: rgba(130, 216, 247, 0.1); - border-right-color: aquamarine; - border-left-color: aquamarine; -} - -.BarGraph { - padding: 24px; - display: flex; - flex-direction: column; -} - -.BarGraph-heading { - font-weight: 500; - font-size: 1.5rem; - margin: 0; -} - -.BarGraphList { - flex: 1; - position: relative; - list-style-type: none; - padding: 0; -} - -.BarGraph, -.ActiveTab, -.Graphs { - height: auto; -} - -.BarGraph-subheading { - font-size: 0.9rem; - color: rgb(135, 134, 134); - margin: 0; -} - -.BarGraphList { - margin-top: 1rem; - display: grid; - grid-template-columns: repeat(var(--count), 1fr); - font-variant-numeric: tabular-nums; - font-family: var(--monospace-font); - justify-content: center; - align-items: flex-start; - height: 100%; - background-color: #080808; -} - -.BarGraphKey { - display: grid; - text-align: center; - margin-top: 1rem; - grid-template-columns: repeat(var(--count), 1fr); -} - -.BarGraphBar { - --primary: 70px; - --opposite: 100%; -} - -.BarGraph, -.BarGraphBar-label, -.BarGraphItem { - --level: calc(var(--amount) / var(--max)); - --inverse: calc(1 / var(--level)); -} - -.BarGraphBar { - margin: 0 auto; - width: var(--primary); - height: var(--opposite); - background-color: rgb(93, 89, 134); - position: relative; - height: calc(200px * var(--level)); -} - -.BarGraphItem { - border-right: 1px dashed var(--dark-border); - border-top: 1px dashed var(--dark-border); - border-bottom: 1px dashed var(--dark-border); - min-height: 200px; - display: flex; - flex-direction: column; - justify-content: flex-end; -} - -.BarGraphItem--deno { - border-right-color: transparent; -} - -.BarGraph--vertical .BarGraphBar { - max-width: 90%; -} - -.BarGraphBar-label { - color: white; - font-variant-numeric: tabular-nums; - font-family: var(--monospace-font); - width: 100%; - text-align: center; - position: relative; - display: flex; - justify-content: center; -} - -.CardContent { - position: relative; -} - -.BarGraph--vertical .BarGraphBar-label { - transform: scaleX(var(--inverse)); - bottom: 0; - right: 0; -} - -.BarGraph--horizontal .BarGraphBar-label { - top: -22px; -} - -.BarGraphItem--bun .BarGraphBar { - background-color: rgb(249, 241, 225); - box-shadow: inset 1px 1px 3px rgb(204, 198, 187); - background-image: url("/logo.svg"); - background-repeat: no-repeat; - background-size: 56px 48.8px; - background-position: 6px 20%; -} - -.BarGraph--vertical .BarGraphItem--bun { - border-top-right-radius: 12px; - border-bottom-right-radius: 12px; -} - -.BarGraph--horizontal .BarGraphItem--bun { - border-top-left-radius: 12px; - border-top-right-radius: 12px; -} - -.BarGraph--vertical .BarGraphBar { - height: var(--primary); - width: var(--opposite); - transform: scaleX(var(--level)); - transform-origin: bottom left; - max-height: 40px; - margin-top: 1rem; - margin-bottom: 1rem; -} - -.BarGraph--vertical .BarGraphList, -.BarGraph--vertical .BarGraphKey--vertical { - grid-template-columns: 1fr; - grid-template-rows: repeat(var(--count), 1fr); -} - -.BarGraph--vertical .BarGraphList { - direction: rtl; -} - -.BarGraphKeyItem-label { - color: white; -} - -.BarGraphKeyItem-value { - color: #7a7a7a; - margin-top: 0.5rem; -} - -.BarGraphKeyItem-viewSource { - margin-top: 0.5rem; - color: #7a7a7a; - text-transform: lowercase; - font-weight: thin; - font-size: 0.8rem; -} - -.BarGraphKeyItem:hover { - text-decoration: none; -} - -.BarGraphKeyItem:hover .BarGraphKeyItem-viewSource { - color: var(--orange-light); -} - -.DemphasizedLabel { - text-transform: uppercase; - white-space: nowrap; -} - -#frameworks { - display: flex; -} - -.FrameworksGroup { - display: grid; - grid-template-rows: auto 40px; - gap: 0.5rem; -} - -.DemphasizedLabel { - color: #7a7a7a; - font-weight: 300; -} - -.FrameworksList { - display: grid; - grid-template-columns: repeat(2, 40px); - gap: 3.5rem; - align-items: center; -} - -#cards { - display: grid; -} - -#explain ul { - font-size: 1.2rem; -} - -#explain li { - margin-bottom: 1rem; - line-height: var(--line-height); -} - -.Tag { - --background: rgba(31, 31, 132, 0.15); - background-color: var(--background); - border-radius: 8px; - padding: 3px 8px; - color: black; - text-decoration: none !important; - display: inline-block; - font-family: var(--monospace-font) !important; -} - -.mono { - font-family: var(--monospace-font); -} - -.Tag--Command { - --background: #111; - font-weight: medium; - color: rgb(163, 255, 133); -} - -.Tag--Command:before { - content: "❯" / ""; - color: rgba(255, 255, 255, 0.35); - margin-top: auto; - margin-bottom: auto; - margin-right: 1ch; - margin-left: 0.5ch; - display: inline-block; - transform: translateY(-1px); -} - -.Tag--WebAPI { - --background: #29b6f6; - box-shadow: inset -1px -1px 3px rgb(231, 187, 73); -} - -.Tag--NodeJS { - --background: rgb(130, 172, 108); -} - -.Tag--TypeScript { - --background: rgb(69, 119, 192); - color: white; -} - -.Tag--React { - color: rgb(130, 216, 247); - --background: #333; -} - -.Tag--React:before { - color: rgba(130, 216, 247, 0.5); - content: "<" / ""; -} - -.Tag--React:after { - color: rgba(130, 216, 247, 0.5); - content: ">" / ""; -} - -.Tag--Bun { - --background: #e600e5; - color: white; -} - -.mono { - font-family: var(--monospace-font); - border-radius: 6px; - color: rgb(0, 103, 19); -} - -@media (min-width: 931px) { - .InstallBox--mobile { - display: none; - } -} - -#explain { - max-width: 650px; - margin: 0 auto; -} - -@media (max-width: 930px) { - header { - padding: 24px 16px; - } - .InstallBox--desktop { - display: none; - } - - #logo { - width: 48px; - } - - :root { - --max-width: 100%; - --horizontal-padding: 16px; - --vertical-padding: 2rem; - --line-height: 1.6; - } - - main { - grid-template-columns: auto; - grid-template-rows: auto auto auto; - } - - #explain li { - line-height: var(--line-height); - margin-bottom: 1.5rem; - } - - ul { - padding: 0; - list-style: none; - } - - .Tabs { - margin-left: 0; - } - - .Graphs, - .BarGraph, - .BarGraphList { - max-width: auto; - } - - .BarGraph { - padding: 24px 0; - } - - #pitch-content { - max-width: auto; - } - - #pitch main { - gap: 1rem; - } - - .InstallBox { - margin-top: 0; - } - - .tagline { - font-size: 32pt; - } - - #logo-text, - #HeaderInstallButton { - display: none; - } -} - -.InstallBox--mobile { - border-radius: 0; -} - -@media (max-width: 599px) { - .InstallBox-copy { - display: none; - } - - .InstallBox-code-box { - font-size: 0.8rem; - } -} - -@media (max-width: 360px) { - .tagline { - font-size: 22pt; - } -} - -#explain p { - line-height: var(--line-height); - font-size: 1.2rem; -} - -#explain p a { - text-decoration: underline; -} - -.Zig { - transform: translateY(15%); -} - -.CodeBlock .shiki { - padding: 1rem; - border-radius: 8px; - font-family: var(--monospace-font); - font-size: 1rem; -} - -.Identifier { - font-family: var(--monospace-font); - font-size: 1rem; - color: #50fa7b !important; - background-color: #282a36; - padding: 0.25rem; - border-radius: 8px; - text-decoration: none !important; -} - -.PerformanceClaim { - text-decoration: dashed underline 2px #000 !important; - text-decoration-skip-ink: auto !important; -} - -.BarGraph--react, -.BarGraph--ffi, -.BarGraph--sqlite { - display: none; -} - -.Graphs--active-react .BarGraph--react, -.Graphs--active-ffi .BarGraph--ffi, -.Graphs--active-sqlite .BarGraph--sqlite { - display: block; -} - -@media (min-width: 930px) { - .Graphs { - margin-left: auto; - } - - .BarGraph-subheading, - .BarGraph-heading { - text-align: center; - } - .BarGraph-heading { - margin-bottom: 0.25rem; - } - - .BarGraphKeyItem-label { - width: 130px; - } -} - -@media (max-width: 929px) { - .InstallBox-code-box { - width: fit-content; - } - - .CodeBlock .shiki { - padding: 24px 16px; - margin: calc(-1 * var(--horizontal-padding)); - width: calc( - 100vw - var(--horizontal-padding) - var(--horizontal-padding) -2px - ); - white-space: pre-wrap; - box-sizing: border-box; - border-radius: 0; - font-size: 0.8rem; - } - - .logo-link { - gap: 0; - } - - header { - grid-template-columns: min-content auto; - gap: 2rem; - } - - .tagline, - .subtitle, - .BarGraph-heading, - .BarGraph-subheading { - padding: 0 var(--horizontal-padding); - } - - main { - padding-left: 0; - padding-right: 0; - text-align: left; - } - - .InstallBox { - padding: 24px 16px; - margin-bottom: -32px; - } - - .tagline { - font-size: 30pt; - } - - .Tag--Command { - display: block; - width: fit-content; - margin-bottom: 1rem; - } - - .Tabs { - margin: 0; - gap: 0rem; - width: 100%; - border-top: 1px solid rgba(200, 200, 200, 0.1); - } - - .Tab { - width: 100%; - border-bottom-color: #333; - } - - #pitch-content { - max-width: 100%; - } - - .Graphs--active-react .Tab[data-tab="react"], - .Graphs--active-sqlite .Tab[data-tab="sqlite"], - .Graphs--active-ffi .Tab[data-tab="ffi"] { - background-color: rgba(100, 100, 100, 0.1); - } -} - -#explain p > code { - white-space: pre; - padding: 1px 2px; -} - -.Group { - display: block; -} - -.Tag--Command { - display: block; - width: fit-content; - margin-bottom: 0.5rem; - padding: 8px 12px; -} - -.Label-replace { - font-weight: 500; -} - -.Label-text { - margin-top: 0.5rem; - margin-bottom: 1rem; -} - -#batteries { - padding-left: 0; -} - -.Group { - margin-bottom: 2rem; -} - -.Group strong { - display: block; -} - -.Built { - text-align: center; - margin-top: 4rem; - margin-bottom: 2rem; - color: #333; -} - -img { - object-fit: contain; -} - -.visually-hidden { - clip: rect(0 0 0 0); - clip-path: inset(50%); - height: 1px; - overflow: hidden; - position: absolute; - white-space: nowrap; - width: 1px; -} diff --git a/packages/bun-landing/public/index.html b/packages/bun-landing/public/index.html deleted file mode 100644 index 82e8624e6..000000000 --- a/packages/bun-landing/public/index.html +++ /dev/null @@ -1,980 +0,0 @@ -<!DOCTYPE html><html lang="en"><head><meta charSet="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta property="og:title" content="Bun is a fast all-in-one JavaScript runtime"/><meta property="og:description" content="Bundle, transpile, install and run JavaScript & TypeScript - projects – all in Bun. Bun is a new JavaScript runtime with - a native bundler, transpiler, task runner and npm client built-in."/><meta name="og:locale" content="en_US"/><meta name="twitter:site" content="@jarredsumner"/><meta name="twitter:card" content="summary_large_image"/><meta property="og:image" content="https://bun.sh/share.png"/><meta name="description" content="Bundle, transpile, install and run JavaScript & TypeScript - projects – all in Bun. Bun is a new JavaScript runtime with - a native bundler, transpiler, task runner and npm client built-in."/><meta name="theme-color" content="#fbf0df"/><link rel="manifest" href="manifest.json"/><link rel="icon" type="image/png" sizes="256x256" href="/logo-square.png"/><link rel="icon" type="image/png" sizes="32x32" href="/logo-square@32px.png"/><link rel="icon" type="image/png" sizes="16x16" href="/logo-square@16px.png"/><title>Bun is a fast all-in-one JavaScript runtime</title><style>:root { - --black: #0b0a08; - --blue: #00a6e1; - --orange: #f89b4b; - --orange-light: #d4d3d2; - - --monospace-font: "Fira Code", "Hack", "Source Code Pro", "SF Mono", - "Inconsolata", monospace; - - --dark-border: rgba(200, 200, 25, 0.2); - --max-width: 1152px; - - --system-font: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", - Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; - - --horizontal-padding: 3rem; - --vertical-padding: 4rem; - --line-height: 1.4; -} - -* { - box-sizing: border-box; -} - -head, -body, -:root { - margin: 0 auto; - padding: 0; - font-family: var(--system-font); -} - -body { - background-color: #fbf0df; -} - -a { - color: inherit; - text-decoration: none; - transition: transform 0.1s linear; -} - -a:visited { - color: inherit; -} - -a:hover { - text-decoration: underline; - transform: scale(1.06, 1.06); - transform-origin: middle center; -} - -#header-wrap, -#pitch { - background-color: var(--black); - color: #fbf0df; - width: 100%; -} - -#logo-link { - width: fit-content; - display: flex; - gap: 24px; - align-items: center; -} - -main { - width: auto; - - margin: 0 auto; - max-width: var(--max-width); - display: grid; - grid-template-columns: auto auto; - overflow-y: hidden; -} - -main, -header, -#explain-section { - margin: 0 auto; - max-width: var(--max-width); - padding: 0 var(--horizontal-padding); -} - -#cards-wrap, -#usecases, -main, -header { - padding: var(--vertical-padding) var(--horizontal-padding); -} - -#pitch-content { - max-width: 600px; -} - -.tagline { - margin-top: 0; - line-height: 1; - font-size: 36pt; -} - -.subtitle { - font-size: 1.2rem; -} - -.Navigation ul { - white-space: nowrap; - display: flex; - gap: 2rem; - list-style: none; -} - -.NavText { - color: #fbf0df; - display: block; - font-weight: 500; - font-size: 1.2rem; -} - -#HeaderInstallButton { - margin-left: 2.4rem; -} - -#pitch main { - gap: 2rem; -} - -#logo { - max-width: 70px; - margin: auto 0; -} - -#logo-text { - max-width: 96px; -} - -header { - display: grid; - grid-template-columns: auto max-content; - background-color: var(--black); - padding: 1.5rem 3rem; - align-items: center; - color: white; -} - -#HeaderInstallButton:hover { - cursor: pointer; - transform: scale(1.06); -} - -#HeaderInstallButton { - transition: transform 0.1s linear; - background: #00a6e1; - padding: 8px 16px; - border-radius: 100px; - color: black; - font-weight: 500; -} - -.InstallBox { - margin-top: 2rem; - background: #15140e; - padding: 24px 24px; - border-radius: 24px; - user-select: none; - -webkit-user-select: none; - -webkit-user-drag: none; - -moz-user-select: none; -} - -.InstallBox-label-heading { - font-size: 1.4rem; - margin-bottom: 1rem; - font-weight: 500; - font-weight: 500; -} - -.InstallBox-label-subtitle { - font-size: 0.9rem; - color: var(--orange-light); -} - -#usecases-section { - background: linear-gradient(12deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.2)), - conic-gradient( - from 6.27deg at 46.95% 50.05%, - #ff8181 0deg, - #e5f067 75deg, - #6dd9ba 155.62deg, - #67f0ae 168.75deg, - #8b67f0 243.75deg, - #f067e2 300deg, - #e967e3 334.49deg, - #f06767 348.9deg, - #ff8181 360deg - ); - color: white; - font-family: var(--monospace-font); - contain: paint; - - font-size: 24pt; - font-weight: bold; -} - -#usecases-section { - padding: 0; - margin: 0; -} - -#usecases { - padding-top: 1rem; - padding-bottom: 1rem; -} - -#usecases-section h1 { - background: linear-gradient(90deg, #ff0000 0%, #faff00 50.52%, #0500ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); - font-family: Helvetica; - margin: 0; - padding: 0; -} - -.InstallBox-code-box { - background-color: rgb(37, 36, 32); - padding: 4px 16px; - position: relative; - border-radius: 8px; - text-align: center; - align-items: center; - border: 1px solid var(--orange); - margin-top: 1rem; - display: flex; - justify-content: space-between; - align-content: center; - white-space: nowrap; - margin-bottom: 1rem; - font-family: var(--monospace-font); -} - -.InstallBox-curl { - user-select: all; - -webkit-user-select: text; - pointer-events: auto; - white-space: nowrap; - cursor: text; - display: inline-flex; - padding: 12px 8px; - gap: 2ch; -} - -.InstallBox-curl::before { - display: block; - content: "$" / ""; - color: var(--orange); - pointer-events: none; - width: 1ch; - height: 1ch; -} - -.InstallBox-view-source-link { - color: var(--orange-light); -} - -.InstallBox-copy { - height: 100%; - display: flex; - align-items: center; - color: var(--orange-light); - transition: transform 0.05s linear; - transition-property: color, transform; - transform-origin: center center; - cursor: pointer; - background: transparent; - border: none; - font-size: inherit; - font-family: inherit; -} - -.InstallBox-copy:hover { - color: var(--blue); - transform: scale(1.06); -} - -.InstallBox-copy:active { - transform: scale(1.12); -} - -.Tabs { - display: grid; - grid-template-columns: repeat(3, 1fr); - margin-left: auto; - margin-right: auto; - justify-content: center; - align-items: center; - width: min-content; - white-space: nowrap; - padding: 0; -} - -.Tab { - width: min-content; - border: none; - background-color: transparent; - font-family: var(--monospace-font); - text-align: center; - border-bottom: 1px solid #ccc; - cursor: pointer; - padding: 16px; - color: inherit; - font-size: inherit; -} - -.Tab:hover, -.Graphs--active-react .Tab[data-tab="react"], -.Graphs--active-sqlite .Tab[data-tab="sqlite"], -.Graphs--active-ffi .Tab[data-tab="ffi"] { - border-bottom-color: aquamarine; - background-color: rgba(130, 216, 247, 0.1); - border-right-color: aquamarine; - border-left-color: aquamarine; -} - -.BarGraph { - padding: 24px; - display: flex; - flex-direction: column; -} - -.BarGraph-heading { - font-weight: 500; - font-size: 1.5rem; - margin: 0; -} - -.BarGraphList { - flex: 1; - position: relative; - list-style-type: none; - padding: 0; -} - -.BarGraph, -.ActiveTab, -.Graphs { - height: auto; -} - -.BarGraph-subheading { - font-size: 0.9rem; - color: rgb(135, 134, 134); - margin: 0; -} - -.BarGraphList { - margin-top: 1rem; - display: grid; - grid-template-columns: repeat(var(--count), 1fr); - font-variant-numeric: tabular-nums; - font-family: var(--monospace-font); - justify-content: center; - align-items: flex-start; - height: 100%; - background-color: #080808; -} - -.BarGraphKey { - display: grid; - text-align: center; - margin-top: 1rem; - grid-template-columns: repeat(var(--count), 1fr); -} - -.BarGraphBar { - --primary: 70px; - --opposite: 100%; -} - -.BarGraph, -.BarGraphBar-label, -.BarGraphItem { - --level: calc(var(--amount) / var(--max)); - --inverse: calc(1 / var(--level)); -} - -.BarGraphBar { - margin: 0 auto; - width: var(--primary); - height: var(--opposite); - background-color: rgb(93, 89, 134); - position: relative; - height: calc(200px * var(--level)); -} - -.BarGraphItem { - border-right: 1px dashed var(--dark-border); - border-top: 1px dashed var(--dark-border); - border-bottom: 1px dashed var(--dark-border); - min-height: 200px; - display: flex; - flex-direction: column; - justify-content: flex-end; -} - -.BarGraphItem--deno { - border-right-color: transparent; -} - -.BarGraph--vertical .BarGraphBar { - max-width: 90%; -} - -.BarGraphBar-label { - color: white; - font-variant-numeric: tabular-nums; - font-family: var(--monospace-font); - width: 100%; - text-align: center; - position: relative; - display: flex; - justify-content: center; -} - -.CardContent { - position: relative; -} - -.BarGraph--vertical .BarGraphBar-label { - transform: scaleX(var(--inverse)); - bottom: 0; - right: 0; -} - -.BarGraph--horizontal .BarGraphBar-label { - top: -22px; -} - -.BarGraphItem--bun .BarGraphBar { - background-color: rgb(249, 241, 225); - box-shadow: inset 1px 1px 3px rgb(204, 198, 187); - background-image: url("/logo.svg"); - background-repeat: no-repeat; - background-size: 56px 48.8px; - background-position: 6px 20%; -} - -.BarGraph--vertical .BarGraphItem--bun { - border-top-right-radius: 12px; - border-bottom-right-radius: 12px; -} - -.BarGraph--horizontal .BarGraphItem--bun { - border-top-left-radius: 12px; - border-top-right-radius: 12px; -} - -.BarGraph--vertical .BarGraphBar { - height: var(--primary); - width: var(--opposite); - transform: scaleX(var(--level)); - transform-origin: bottom left; - max-height: 40px; - margin-top: 1rem; - margin-bottom: 1rem; -} - -.BarGraph--vertical .BarGraphList, -.BarGraph--vertical .BarGraphKey--vertical { - grid-template-columns: 1fr; - grid-template-rows: repeat(var(--count), 1fr); -} - -.BarGraph--vertical .BarGraphList { - direction: rtl; -} - -.BarGraphKeyItem-label { - color: white; -} - -.BarGraphKeyItem-value { - color: #7a7a7a; - margin-top: 0.5rem; -} - -.BarGraphKeyItem-viewSource { - margin-top: 0.5rem; - color: #7a7a7a; - text-transform: lowercase; - font-weight: thin; - font-size: 0.8rem; -} - -.BarGraphKeyItem:hover { - text-decoration: none; -} - -.BarGraphKeyItem:hover .BarGraphKeyItem-viewSource { - color: var(--orange-light); -} - -.DemphasizedLabel { - text-transform: uppercase; - white-space: nowrap; -} - -#frameworks { - display: flex; -} - -.FrameworksGroup { - display: grid; - grid-template-rows: auto 40px; - gap: 0.5rem; -} - -.DemphasizedLabel { - color: #7a7a7a; - font-weight: 300; -} - -.FrameworksList { - display: grid; - grid-template-columns: repeat(2, 40px); - gap: 3.5rem; - align-items: center; -} - -#cards { - display: grid; -} - -#explain ul { - font-size: 1.2rem; -} - -#explain li { - margin-bottom: 1rem; - line-height: var(--line-height); -} - -.Tag { - --background: rgba(31, 31, 132, 0.15); - background-color: var(--background); - border-radius: 8px; - padding: 3px 8px; - color: black; - text-decoration: none !important; - display: inline-block; - font-family: var(--monospace-font) !important; -} - -.mono { - font-family: var(--monospace-font); -} - -.Tag--Command { - --background: #111; - font-weight: medium; - color: rgb(163, 255, 133); -} - -.Tag--Command:before { - content: "❯" / ""; - color: rgba(255, 255, 255, 0.35); - margin-top: auto; - margin-bottom: auto; - margin-right: 1ch; - margin-left: 0.5ch; - display: inline-block; - transform: translateY(-1px); -} - -.Tag--WebAPI { - --background: #29b6f6; - box-shadow: inset -1px -1px 3px rgb(231, 187, 73); -} - -.Tag--NodeJS { - --background: rgb(130, 172, 108); -} - -.Tag--TypeScript { - --background: rgb(69, 119, 192); - color: white; -} - -.Tag--React { - color: rgb(130, 216, 247); - --background: #333; -} - -.Tag--React:before { - color: rgba(130, 216, 247, 0.5); - content: "<" / ""; -} - -.Tag--React:after { - color: rgba(130, 216, 247, 0.5); - content: ">" / ""; -} - -.Tag--Bun { - --background: #e600e5; - color: white; -} - -.mono { - font-family: var(--monospace-font); - border-radius: 6px; - color: rgb(0, 103, 19); -} - -@media (min-width: 931px) { - .InstallBox--mobile { - display: none; - } -} - -#explain { - max-width: 650px; - margin: 0 auto; -} - -@media (max-width: 930px) { - header { - padding: 24px 16px; - } - .InstallBox--desktop { - display: none; - } - - #logo { - width: 48px; - } - - :root { - --max-width: 100%; - --horizontal-padding: 16px; - --vertical-padding: 2rem; - --line-height: 1.6; - } - - main { - grid-template-columns: auto; - grid-template-rows: auto auto auto; - } - - #explain li { - line-height: var(--line-height); - margin-bottom: 1.5rem; - } - - ul { - padding: 0; - list-style: none; - } - - .Tabs { - margin-left: 0; - } - - .Graphs, - .BarGraph, - .BarGraphList { - max-width: auto; - } - - .BarGraph { - padding: 24px 0; - } - - #pitch-content { - max-width: auto; - } - - #pitch main { - gap: 1rem; - } - - .InstallBox { - margin-top: 0; - } - - .tagline { - font-size: 32pt; - } - - #logo-text, - #HeaderInstallButton { - display: none; - } -} - -.InstallBox--mobile { - border-radius: 0; -} - -@media (max-width: 599px) { - .InstallBox-copy { - display: none; - } - - .InstallBox-code-box { - font-size: 0.8rem; - } -} - -@media (max-width: 360px) { - .tagline { - font-size: 22pt; - } -} - -#explain p { - line-height: var(--line-height); - font-size: 1.2rem; -} - -#explain p a { - text-decoration: underline; -} - -.Zig { - transform: translateY(15%); -} - -.CodeBlock .shiki { - padding: 1rem; - border-radius: 8px; - font-family: var(--monospace-font); - font-size: 1rem; -} - -.Identifier { - font-family: var(--monospace-font); - font-size: 1rem; - color: #50fa7b !important; - background-color: #282a36; - padding: 0.25rem; - border-radius: 8px; - text-decoration: none !important; -} - -.PerformanceClaim { - text-decoration: dashed underline 2px #000 !important; - text-decoration-skip-ink: auto !important; -} - -.BarGraph--react, -.BarGraph--ffi, -.BarGraph--sqlite { - display: none; -} - -.Graphs--active-react .BarGraph--react, -.Graphs--active-ffi .BarGraph--ffi, -.Graphs--active-sqlite .BarGraph--sqlite { - display: block; -} - -@media (min-width: 930px) { - .Graphs { - margin-left: auto; - } - - .BarGraph-subheading, - .BarGraph-heading { - text-align: center; - } - .BarGraph-heading { - margin-bottom: 0.25rem; - } - - .BarGraphKeyItem-label { - width: 130px; - } -} - -@media (max-width: 929px) { - .InstallBox-code-box { - width: fit-content; - } - - .CodeBlock .shiki { - padding: 24px 16px; - margin: calc(-1 * var(--horizontal-padding)); - width: calc( - 100vw - var(--horizontal-padding) - var(--horizontal-padding) -2px - ); - white-space: pre-wrap; - box-sizing: border-box; - border-radius: 0; - font-size: 0.8rem; - } - - .logo-link { - gap: 0; - } - - header { - grid-template-columns: min-content auto; - gap: 2rem; - } - - .tagline, - .subtitle, - .BarGraph-heading, - .BarGraph-subheading { - padding: 0 var(--horizontal-padding); - } - - main { - padding-left: 0; - padding-right: 0; - text-align: left; - } - - .InstallBox { - padding: 24px 16px; - margin-bottom: -32px; - } - - .tagline { - font-size: 30pt; - } - - .Tag--Command { - display: block; - width: fit-content; - margin-bottom: 1rem; - } - - .Tabs { - margin: 0; - gap: 0rem; - width: 100%; - border-top: 1px solid rgba(200, 200, 200, 0.1); - } - - .Tab { - width: 100%; - border-bottom-color: #333; - } - - #pitch-content { - max-width: 100%; - } - - .Graphs--active-react .Tab[data-tab="react"], - .Graphs--active-sqlite .Tab[data-tab="sqlite"], - .Graphs--active-ffi .Tab[data-tab="ffi"] { - background-color: rgba(100, 100, 100, 0.1); - } -} - -#explain p > code { - white-space: pre; - padding: 1px 2px; -} - -.Group { - display: block; -} - -.Tag--Command { - display: block; - width: fit-content; - margin-bottom: 0.5rem; - padding: 8px 12px; -} - -.Label-replace { - font-weight: 500; -} - -.Label-text { - margin-top: 0.5rem; - margin-bottom: 1rem; -} - -#batteries { - padding-left: 0; -} - -.Group { - margin-bottom: 2rem; -} - -.Group strong { - display: block; -} - -.Built { - text-align: center; - margin-top: 4rem; - margin-bottom: 2rem; - color: #333; -} - -img { - object-fit: contain; -} - -.visually-hidden { - clip: rect(0 0 0 0); - clip-path: inset(50%); - height: 1px; - overflow: hidden; - position: absolute; - white-space: nowrap; - width: 1px; -} -</style></head><body><div id="header-wrap"><header><a href="/" id="logo-link" aria-label="home"><img height="61px" src="/logo.svg" alt="Bun logo" id="logo"/><img height="31.65px" src="/Bun.png" srcSet="/Bun.png 1x, /Bun@2x.png 2x" alt="Bun" id="logo-text"/></a><nav class="Navigation"><ul><li><a class="NavText" href="https://github.com/oven-sh/bun#Reference">Docs</a></li><li><a class="NavText" href="https://bun.sh/discord">Discord</a></li><li><a class="NavText" href="https://github.com/oven-sh/bun">GitHub</a></li></ul></nav></header></div><div id="pitch"><main><div id="pitch-content"><h1 class="tagline">Bun is a fast all-in-one JavaScript runtime</h1><p class="subtitle">Bundle, transpile, install and run JavaScript & TypeScript projects — all in Bun. Bun is a new JavaScript runtime with a native bundler, transpiler, task runner and npm client built-in.</p><div class="InstallBox InstallBox--desktop"><div class="InstallBox-label"><div class="InstallBox-label-heading">Install Bun CLI <!-- -->v0.1.5<!-- --> (beta)<!-- --></div><div class="InstallBox-label-subtitle">macOS x64 & Silicon, Linux x64, Windows Subsystem for Linux</div></div><div class="InstallBox-code-box"><div class="InstallBox-curl">curl https://bun.sh/install | bash</div><button class="InstallBox-copy" aria-label="Copy installation script">copy</button></div><a class="InstallBox-view-source-link" target="_blank" href="https://bun.sh/install">Show script source</a></div></div><div class="Graphs Graphs--active-react"><div class="Tabs" role="tablist"><button data-tab="react" id="tab-react" aria-controls="react-tab-content" class="Tab" role="tab" aria-selected="true" tabindex="0">Bun.serve</button><button data-tab="sqlite" id="tab-sqlite" aria-controls="sqlite-tab-content" class="Tab" role="tab" tabindex="-1">bun:sqlite</button><button data-tab="ffi" id="tab-ffi" aria-controls="ffi-tab-content" class="Tab" role="tab" tabindex="-1">bun:ffi</button></div><div id="active-tab" class="ActiveTab"><div role="tabpanel" tabindex="0" id="react-tab-content" aria-labelledby="tab-react" class="BarGraph BarGraph--react BarGraph--horizontal BarGraph--dark"><h2 class="BarGraph-heading">Server-side rendering React</h2><p class="BarGraph-subheading">HTTP requests per second (Linux AMD64)</p><ul style="--count:3" class="BarGraphList"><li class="BarGraphItem BarGraphItem--bun" style="--amount:48936;--max:61170"><div class="visually-hidden">bun: 48,936 requests per second</div><div style="--amount:48936;--max:61170" class="BarGraphBar" aria-hidden="true"><div style="--amount:48936;--max:61170" class="BarGraphBar-label">48,936</div></div></li><li class="BarGraphItem BarGraphItem--node" style="--amount:16288;--max:61170"><div class="visually-hidden">node: 16,288 requests per second</div><div style="--amount:16288;--max:61170" class="BarGraphBar" aria-hidden="true"><div style="--amount:16288;--max:61170" class="BarGraphBar-label">16,288</div></div></li><li class="BarGraphItem BarGraphItem--deno" style="--amount:15786;--max:61170"><div class="visually-hidden">deno: 15,786 requests per second</div><div style="--amount:15786;--max:61170" class="BarGraphBar" aria-hidden="true"><div style="--amount:15786;--max:61170" class="BarGraphBar-label">15,786</div></div></li></ul><div style="--count:3" class="BarGraphKey"><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/react-hello-world/react-hello-world.jsx" target="_blank" class="BarGraphKeyItem" aria-label="bun benchmark source"><div class="BarGraphKeyItem-label">bun</div><div class="BarGraphKeyItem-value">v0.1.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/react-hello-world/react-hello-world.node.jsx" target="_blank" class="BarGraphKeyItem" aria-label="node benchmark source"><div class="BarGraphKeyItem-label">node</div><div class="BarGraphKeyItem-value">v18.1.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/react-hello-world/react-hello-world.deno.jsx" target="_blank" class="BarGraphKeyItem" aria-label="deno benchmark source"><div class="BarGraphKeyItem-label">deno</div><div class="BarGraphKeyItem-value">v1.23.2</div><div class="BarGraphKeyItem-viewSource">View source</div></a></div></div><div role="tabpanel" tabindex="-1" id="sqlite-tab-content" aria-labelledby="tab-sqlite" class="BarGraph--sqlite BarGraph BarGraph--horizontal BarGraph--dark"><h2 class="BarGraph-heading">Load a huge table</h2><p class="BarGraph-subheading">Average queries per second</p><ul style="--count:3" class="BarGraphList"><li class="BarGraphItem BarGraphItem--bun" style="--amount:60.24;--max:76"><div class="visually-hidden">bun: 60.24 queries per second</div><div style="--amount:60.24;--max:76" class="BarGraphBar" aria-hidden="true"><div style="--amount:60.24;--max:76" class="BarGraphBar-label">60.24</div></div></li><li class="BarGraphItem BarGraphItem--better-sqlite3" style="--amount:23.28;--max:76"><div class="visually-hidden">better-sqlite3: 23.28 queries per second</div><div style="--amount:23.28;--max:76" class="BarGraphBar" aria-hidden="true"><div style="--amount:23.28;--max:76" class="BarGraphBar-label">23.28</div></div></li><li class="BarGraphItem BarGraphItem--deno" style="--amount:9.55;--max:76"><div class="visually-hidden">deno: 9.55 queries per second</div><div style="--amount:9.55;--max:76" class="BarGraphBar" aria-hidden="true"><div style="--amount:9.55;--max:76" class="BarGraphBar-label">9.55</div></div></li></ul><div style="--count:3" class="BarGraphKey"><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/sqlite/bun.js" target="_blank" class="BarGraphKeyItem" aria-label="bun:sqlite benchmark source"><div class="BarGraphKeyItem-label">bun:sqlite</div><div class="BarGraphKeyItem-value">v0.1.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/sqlite/node.mjs" target="_blank" class="BarGraphKeyItem" aria-label="better-sqlite3 benchmark source"><div class="BarGraphKeyItem-label">better-sqlite3</div><div class="BarGraphKeyItem-value">node v18.2.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/e55d6eed2bf9a5db30250fdd8b9be063dc949054/bench/sqlite/deno.js" target="_blank" class="BarGraphKeyItem" aria-label="deno (x/sqlite) benchmark source"><div class="BarGraphKeyItem-label">deno (x/sqlite)</div><div class="BarGraphKeyItem-value">v1.23.2</div><div class="BarGraphKeyItem-viewSource">View source</div></a></div></div><div role="tabpanel" tabindex="-1" id="ffi-tab-content" aria-labelledby="tab-ffi" class="BarGraph BarGraph--ffi BarGraph--horizontal BarGraph--dark"><h2 class="BarGraph-heading">How fast can it get? (Hashing)</h2><p class="BarGraph-subheading">Operations per second</p><ul style="--count:3" class="BarGraphList"><li class="BarGraphItem BarGraphItem--bun" style="--amount:13080444.00;--max:16350555"><div class="visually-hidden">bun: 13,080,444 operations per second</div><div style="--amount:13080444.00;--max:16350555" class="BarGraphBar" aria-hidden="true"><div style="--amount:13080444.00;--max:16350555" class="BarGraphBar-label">13,080,444</div></div></li><li class="BarGraphItem BarGraphItem--Node-API" style="--amount:6870963.00;--max:16350555"><div class="visually-hidden">Node-API: 6,870,963 operations per second</div><div style="--amount:6870963.00;--max:16350555" class="BarGraphBar" aria-hidden="true"><div style="--amount:6870963.00;--max:16350555" class="BarGraphBar-label">6,870,963</div></div></li><li class="BarGraphItem BarGraphItem--deno" style="--amount:5736247.00;--max:16350555"><div class="visually-hidden">deno: 5,736,247 operations per iteration</div><div style="--amount:5736247.00;--max:16350555" class="BarGraphBar" aria-hidden="true"><div style="--amount:5736247.00;--max:16350555" class="BarGraphBar-label">5,736,247</div></div></li></ul><div style="--count:3" class="BarGraphKey"><a href="https://github.com/oven-sh/bun/blob/cbc1e407c3aad3d396ab60317fc24b94341dfb45/bench/ffi/bun.js" target="_blank" class="BarGraphKeyItem" aria-label="bun:ffi benchmark source"><div class="BarGraphKeyItem-label">bun:ffi</div><div class="BarGraphKeyItem-value">v0.1.3</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/cbc1e407c3aad3d396ab60317fc24b94341dfb45/bench/ffi/node.mjs" target="_blank" class="BarGraphKeyItem" aria-label="node (napi) benchmark source"><div class="BarGraphKeyItem-label">node (napi)</div><div class="BarGraphKeyItem-value">node v18.2.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a><a href="https://github.com/oven-sh/bun/blob/cbc1e407c3aad3d396ab60317fc24b94341dfb45/bench/ffi/deno.js" target="_blank" class="BarGraphKeyItem" aria-label="deno (ffi) benchmark source"><div class="BarGraphKeyItem-label">deno (ffi)</div><div class="BarGraphKeyItem-value">v1.24.0</div><div class="BarGraphKeyItem-viewSource">View source</div></a></div></div></div></div><div class="InstallBox InstallBox--mobile"><div class="InstallBox-label"><div class="InstallBox-label-heading">Install Bun CLI <!-- -->v0.1.5<!-- --> (beta)<!-- --></div><div class="InstallBox-label-subtitle">macOS x64 & Silicon, Linux x64, Windows Subsystem for Linux</div></div><div class="InstallBox-code-box"><div class="InstallBox-curl">curl https://bun.sh/install | bash</div><button class="InstallBox-copy" aria-label="Copy installation script">copy</button></div><a class="InstallBox-view-source-link" target="_blank" href="https://bun.sh/install">Show script source</a></div></main></div><section id="explain-section"><div id="explain"><h2>Tell me more about Bun</h2><p>Bun is a modern JavaScript runtime like Node or Deno. It was built from scratch to focus on three main things:</p><ul><li>Start fast (it has the edge in mind).</li><li>New levels of performance (extending JavaScriptCore, the engine).</li><li>Being a great and complete tool (bundler, transpiler, package manager).</li></ul><p>Bun is designed as a drop-in replacement for your current JavaScript & TypeScript apps or scripts — on your local computer, server or on the edge. Bun natively implements hundreds of Node.js and Web APIs, including ~90% of<!-- --> <!-- --><a href="https://nodejs.org/api/n-api.html" target="_blank">Node-API</a> <!-- -->functions (native modules), fs, path, Buffer and more.<!-- --></p><p>The goal of Bun is to run most of the world's JavaScript outside of browsers, bringing performance and complexity enhancements to your future infrastructure, as well as developer productivity through better, simpler tooling.</p><h2>Batteries included</h2><ul id="batteries"><li>Web APIs like<!-- --> <!-- --><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/fetch" class="Tag Tag--WebAPI">fetch</a>,<!-- --> <!-- --><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/WebSocket" class="Tag Tag--WebAPI">WebSocket</a>, and<!-- --> <!-- --><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream" class="Tag Tag--WebAPI">ReadableStream</a> <!-- -->are built-in<!-- --></li><li><span target="_blank" class="Tag Tag--NodeJS">node_modules</span> bun implements Node.js' module resolution algorithm, so you can use npm packages in bun.js. ESM and CommonJS are supported, but Bun internally uses ESM<!-- --></li><li>In bun.js, every file is transpiled.<!-- --> <!-- --><span target="_blank" class="Tag Tag--TypeScript">TypeScript</span> & <!-- --><span target="_blank" class="Tag Tag--React">JSX</span> just work<!-- --></li><li>bun supports <!-- --><code class="">"paths"</code>,<!-- --> <!-- --><code>"jsxImportSource"</code>and more from <!-- --><span target="_blank" class="Tag Tag--TypeScript">tsconfig.json</span> files<!-- --></li><li><span target="_blank" class="Tag Tag--Bun">Bun.Transpiler</span> bun's JSX & TypeScript transpiler is available as an API in Bun.js<!-- --></li><li>use the fastest system calls available with <!-- --><span target="_blank" class="Tag Tag--Bun">Bun.write</span> <!-- -->to write, copy, pipe, send and clone files<!-- --></li><li>bun.js automatically loads environment variables from<!-- --> <!-- --><span target="_blank" class="Tag Tag--Bun">.env</span> files. No more<!-- --> <!-- --><code class="mono">require("dotenv").config()</code></li><li>bun ships with a fast SQLite3 client built-in<!-- --> <!-- --><span target="_blank" class="Tag Tag--Bun">bun:sqlite</span></li><li><a target="_blank" href="https://github.com/oven-sh/bun/issues/158" class="Tag Tag--NodeJS">Node-API</a> <!-- -->bun.js implements most of<!-- --> <!-- --><a href="https://nodejs.org/api/n-api.html#node-api" target="_blank">Node-API (N-API)</a>. Many Node.js native modules just work<!-- --></li><li><span target="_blank" class="Tag Tag--Bun">bun:ffi</span> call native code from JavaScript with bun's low-overhead foreign function interface<!-- --></li><li><span target="_blank" class="Tag Tag--NodeJS">node:fs</span> <!-- --><span target="_blank" class="Tag Tag--NodeJS">node:path</span> bun.js natively supports a growing list of Node.js core modules along with globals like Buffer and process<!-- --></li></ul><h2>How does Bun work?</h2><p>Bun.js uses the<!-- --> <!-- --><a href="https://github.com/WebKit/WebKit/tree/main/Source/JavaScriptCore">JavaScriptCore</a> <!-- -->engine, which tends<!-- --> <!-- --><a target="blank" href="https://twitter.com/jarredsumner/status/1499225725492076544">to start</a> <!-- -->and perform a little faster than more traditional choices like V8. Bun is written in<!-- --> <!-- --><a href="https://ziglang.org/"><svg xmlns="http://www.w3.org/2000/svg" height="1.2rem" class="Zig" viewBox="0 0 400 140"><title>Zig</title><g fill="#F7A41D"><g><polygon points="46,22 28,44 19,30"></polygon><polygon points="46,22 33,33 28,44 22,44 22,95 31,95 20,100 12,117 0,117 0,22" shape-rendering="crispEdges"></polygon><polygon points="31,95 12,117 4,106"></polygon></g><g><polygon points="56,22 62,36 37,44"></polygon><polygon points="56,22 111,22 111,44 37,44 56,32" shape-rendering="crispEdges"></polygon><polygon points="116,95 97,117 90,104"></polygon><polygon points="116,95 100,104 97,117 42,117 42,95" shape-rendering="crispEdges"></polygon><polygon points="150,0 52,117 3,140 101,22"></polygon></g><g><polygon points="141,22 140,40 122,45"></polygon><polygon points="153,22 153,117 106,117 120,105 125,95 131,95 131,45 122,45 132,36 141,22" shape-rendering="crispEdges"></polygon><polygon points="125,95 130,110 106,117"></polygon></g></g><g fill="#121212"><g><polygon points="260,22 260,37 229,40 177,40 177,22" shape-rendering="crispEdges"></polygon><polygon points="260,37 207,99 207,103 176,103 229,40 229,37"></polygon><polygon points="261,99 261,117 176,117 176,103 206,99" shape-rendering="crispEdges"></polygon></g><rect x="272" y="22" shape-rendering="crispEdges" width="22" height="95"></rect><g><polygon points="394,67 394,106 376,106 376,81 360,70 346,67" shape-rendering="crispEdges"></polygon><polygon points="360,68 376,81 346,67"></polygon><path d="M394,106c-10.2,7.3-24,12-37.7,12c-29,0-51.1-20.8-51.1-48.3c0-27.3,22.5-48.1,52-48.1 - c14.3,0,29.2,5.5,38.9,14l-13,15c-7.1-6.3-16.8-10-25.9-10c-17,0-30.2,12.9-30.2,29.5c0,16.8,13.3,29.6,30.3,29.6 - c5.7,0,12.8-2.3,19-5.5L394,106z"></path></g></g></svg></a>, a low-level programming language with manual memory management.<!-- --><br/><br/>Most of Bun is written from scratch including the JSX/TypeScript transpiler, npm client, bundler, SQLite client, HTTP client, WebSocket client and more.<!-- --></p><h2>Why is Bun fast?</h2><p>An enormous amount of time spent profiling, benchmarking and optimizing things. The answer is different for every part of Bun, but one general theme:<!-- --> <!-- --><a href="https://ziglang.org/"><svg xmlns="http://www.w3.org/2000/svg" height="1.2rem" class="Zig" viewBox="0 0 400 140"><title>Zig</title><g fill="#F7A41D"><g><polygon points="46,22 28,44 19,30"></polygon><polygon points="46,22 33,33 28,44 22,44 22,95 31,95 20,100 12,117 0,117 0,22" shape-rendering="crispEdges"></polygon><polygon points="31,95 12,117 4,106"></polygon></g><g><polygon points="56,22 62,36 37,44"></polygon><polygon points="56,22 111,22 111,44 37,44 56,32" shape-rendering="crispEdges"></polygon><polygon points="116,95 97,117 90,104"></polygon><polygon points="116,95 100,104 97,117 42,117 42,95" shape-rendering="crispEdges"></polygon><polygon points="150,0 52,117 3,140 101,22"></polygon></g><g><polygon points="141,22 140,40 122,45"></polygon><polygon points="153,22 153,117 106,117 120,105 125,95 131,95 131,45 122,45 132,36 141,22" shape-rendering="crispEdges"></polygon><polygon points="125,95 130,110 106,117"></polygon></g></g><g fill="#121212"><g><polygon points="260,22 260,37 229,40 177,40 177,22" shape-rendering="crispEdges"></polygon><polygon points="260,37 207,99 207,103 176,103 229,40 229,37"></polygon><polygon points="261,99 261,117 176,117 176,103 206,99" shape-rendering="crispEdges"></polygon></g><rect x="272" y="22" shape-rendering="crispEdges" width="22" height="95"></rect><g><polygon points="394,67 394,106 376,106 376,81 360,70 346,67" shape-rendering="crispEdges"></polygon><polygon points="360,68 376,81 346,67"></polygon><path d="M394,106c-10.2,7.3-24,12-37.7,12c-29,0-51.1-20.8-51.1-48.3c0-27.3,22.5-48.1,52-48.1 - c14.3,0,29.2,5.5,38.9,14l-13,15c-7.1-6.3-16.8-10-25.9-10c-17,0-30.2,12.9-30.2,29.5c0,16.8,13.3,29.6,30.3,29.6 - c5.7,0,12.8-2.3,19-5.5L394,106z"></path></g></g></svg></a>'s low-level control over memory and lack of hidden control flow makes it much simpler to write fast software.<!-- --> <!-- --><a href="https://github.com/sponsors/ziglang">Sponsor the Zig Software Foundation</a>.<!-- --></p><h2>Getting started</h2><p>To install bun, run this<!-- --> <!-- --><a target="_blank" href="https://bun.sh/install">install script</a> <!-- -->in your terminal. It downloads Bun from GitHub.<!-- --></p><div class="CodeBlock"><pre class="shiki" style="background-color: #282A36"><code><span class="line"><span style="color: #F8F8F2">curl https://bun.sh/install </span><span style="color: #FF79C6">|</span><span style="color: #F8F8F2"> bash</span></span></code></pre></div><p> <!-- -->Bun's HTTP server is built on web standards like<!-- --> <!-- --><a class="Identifier" href="https://developer.mozilla.org/en-US/docs/Web/API/Request">Request</a> <!-- -->and<!-- --> <!-- --><a class="Identifier" href="https://developer.mozilla.org/en-US/docs/Web/API/Response">Response</a></p><div class="CodeBlock"><pre class="shiki" style="background-color: #282A36"><code><span class="line"><span style="color: #6272A4">// http.js</span></span> -<span class="line"><span style="color: #FF79C6">export</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">default</span><span style="color: #F8F8F2"> {</span></span> -<span class="line"><span style="color: #F8F8F2"> port</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">3000</span><span style="color: #F8F8F2">,</span></span> -<span class="line"><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">fetch</span><span style="color: #F8F8F2">(</span><span style="color: #FFB86C; font-style: italic">request</span><span style="color: #F8F8F2">) {</span></span> -<span class="line"><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">return</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6; font-weight: bold">new</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">Response</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Welcome to Bun!</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">);</span></span> -<span class="line"><span style="color: #F8F8F2"> },</span></span> -<span class="line"><span style="color: #F8F8F2">};</span></span></code></pre></div><p>Run it with bun:</p><div class="CodeBlock"><pre class="shiki" style="background-color: #282A36"><code><span class="line"><span style="color: #F8F8F2">bun run http.js</span></span></code></pre></div><p>Then open<!-- --> <!-- --><a target="_blank" href="http://localhost:3000">http://localhost:3000</a> <!-- -->in your browser.<!-- --><br/><br/>See<!-- --> <!-- --><a href="https://github.com/oven-sh/bun/tree/main/examples">more examples</a> <!-- -->and check out <!-- --><a href="https://github.com/oven-sh/bun#Reference">the docs</a>. If you have any questions or want help, join<!-- --> <!-- --><a href="https://bun.sh/discord">Bun's Discord</a>.<!-- --></p><h2>Bun CLI</h2><div class="Group"><span target="_blank" class="Tag Tag--Command">bun run</span><p>The same command for running JavaScript & TypeScript files with bun's JavaScript runtime also runs package.json<!-- --> <!-- --><code class="mono">"scripts"</code>.<!-- --></p><strong>Replace <!-- --><code class="mono">npm run</code> with<!-- --> <!-- --><code class="mono">bun run</code> and save 160ms on every run.<!-- --></strong><br/><div>bun runs package.json scripts<!-- --> <!-- --><a href="https://twitter.com/jarredsumner/status/1454218996983623685" target="_blank" class="PerformanceClaim">30x faster than <!-- --><code class="mono">npm run</code></a></div> <!-- --></div><div class="Group"><span target="_blank" class="Tag Tag--Command">bun install</span><p>bun install is an npm-compatible package manager. You probably will be surprised by how much faster copying files can get.</p><strong>Replace <!-- --><code class="mono">yarn</code> with<!-- --> <!-- --><code class="mono">bun install</code> and get 20x faster package installs.<!-- --></strong><br/><div>bun install uses the fastest system calls available to copy files.</div></div><div class="Group"><span target="_blank" class="Tag Tag--Command">bun wiptest</span><p>A Jest-like test runner for JavaScript & TypeScript projects built-in to bun.</p><div class="Label"><a href="https://twitter.com/jarredsumner/status/1542824445810642946" target="_blank" class="PerformanceClaim">You've never seen a JavaScript test runner this fast</a> <!-- -->(or incomplete).<!-- --></div></div><h2>What is the license?</h2><p>MIT License, excluding dependencies which have various licenses.</p><h2>How do I see the source code?</h2><p>Bun is on <!-- --><a href="https://github.com/oven-sh/bun">GitHub</a>.<!-- --></p></div></section><section id="explain-section"><div id="explain"></div></section><script> -[...document.querySelectorAll(".Tab")].map(el => { - el.addEventListener("click", function(e) { - var tab = e.srcElement.getAttribute("data-tab"); - [...document.querySelectorAll(".Tab")].map(el => { - var active = el.getAttribute("data-tab") === tab; - el.setAttribute("tabindex", active ? 0 : -1); - el.setAttribute("aria-selected", active); - }); - [...document.querySelectorAll(".BarGraph")].map(el => { - var active = el.id === tab + "-tab-content"; - el.setAttribute("tabindex", active ? 0 : -1); - }); - document.querySelector(".Graphs").setAttribute("class", "Graphs Graphs--active-" + tab); - }); - - el.addEventListener("keydown", e => { - var tabs = [...document.querySelectorAll(".Tab")]; - var activeTabEl = document.querySelector(".Tab[aria-selected='true']"); - var activeTabIndex = tabs.indexOf(activeTabEl); - if (e.key === 'ArrowRight' || e.key === 'ArrowDown') { - e.preventDefault(); - activeTabIndex = (activeTabIndex + 1) % tabs.length; - tabs[activeTabIndex].click(); - tabs[activeTabIndex].focus(); - } - if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') { - e.preventDefault(); - activeTabIndex = (activeTabIndex + tabs.length - 1) % tabs.length; - tabs[activeTabIndex].click(); - tabs[activeTabIndex].focus(); - } - if (e.key === 'Home') { - e.preventDefault(); - tabs[0].click(); - tabs[0].focus(); - } - if (e.key === 'End') { - e.preventDefault(); - tabs[tabs.length - 1].click(); - tabs[tabs.length - 1].focus(); - } - }); -}); - -for (const el of document.querySelectorAll(".InstallBox-copy")) { - el.addEventListener("click", async e => { - await navigator.clipboard.writeText("curl https://bun.sh/install | bash"); - }); -} - </script><div class="Built">Built with Bun <!-- -->v0.1.5<!-- --></div></body></html>
\ No newline at end of file diff --git a/packages/bun-landing/public/ssr.tsx b/packages/bun-landing/public/ssr.tsx deleted file mode 100644 index e69de29bb..000000000 --- a/packages/bun-landing/public/ssr.tsx +++ /dev/null diff --git a/packages/bun-landing/react-dom-server.bun.production.min.js b/packages/bun-landing/react-dom-server.bun.production.min.js deleted file mode 100644 index 8d0b12dc7..000000000 --- a/packages/bun-landing/react-dom-server.bun.production.min.js +++ /dev/null @@ -1,2082 +0,0 @@ -/** - * @license React - * react-dom-server.bun.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -"use strict"; -var aa = require("react"); -function h(a) { - let b = "https://reactjs.org/docs/error-decoder.html?invariant=" + a; - for (let a = 1; a < arguments.length; a++) - b += "&args[]=" + encodeURIComponent(arguments[a]); - return ( - `Minified React error #${a}; visit ${b} for the full message or ` + - "use the non-minified dev environment for full errors and additional helpful warnings." - ); -} -const ba = new TextEncoder(); -function m(a) { - return ba.encode(a); -} -const q = Object.prototype.hasOwnProperty, - ca = - /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, - ia = {}, - ja = {}; -function ka(a) { - if (q.call(ja, a)) return !0; - if (q.call(ia, a)) return !1; - if (ca.test(a)) return (ja[a] = !0); - ia[a] = !0; - return !1; -} -function u(a, b, c, d, e, f, g) { - this.acceptsBooleans = 2 === b || 3 === b || 4 === b; - this.attributeName = d; - this.attributeNamespace = e; - this.mustUseProperty = c; - this.propertyName = a; - this.type = b; - this.sanitizeURL = f; - this.removeEmptyString = g; -} -const v = {}, - la = - "children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split( - " " - ); -la.push("innerText", "textContent"); -la.forEach((a) => { - v[a] = new u(a, 0, !1, a, null, !1, !1); -}); -[ - ["acceptCharset", "accept-charset"], - ["className", "class"], - ["htmlFor", "for"], - ["httpEquiv", "http-equiv"], -].forEach(([a, b]) => { - v[a] = new u(a, 1, !1, b, null, !1, !1); -}); -["contentEditable", "draggable", "spellCheck", "value"].forEach((a) => { - v[a] = new u(a, 2, !1, a.toLowerCase(), null, !1, !1); -}); -[ - "autoReverse", - "externalResourcesRequired", - "focusable", - "preserveAlpha", -].forEach((a) => { - v[a] = new u(a, 2, !1, a, null, !1, !1); -}); -"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope" - .split(" ") - .forEach((a) => { - v[a] = new u(a, 3, !1, a.toLowerCase(), null, !1, !1); - }); -["checked", "multiple", "muted", "selected"].forEach((a) => { - v[a] = new u(a, 3, !0, a, null, !1, !1); -}); -["capture", "download"].forEach((a) => { - v[a] = new u(a, 4, !1, a, null, !1, !1); -}); -["cols", "rows", "size", "span"].forEach((a) => { - v[a] = new u(a, 6, !1, a, null, !1, !1); -}); -["rowSpan", "start"].forEach((a) => { - v[a] = new u(a, 5, !1, a.toLowerCase(), null, !1, !1); -}); -const ma = /[\-:]([a-z])/g, - na = (a) => a[1].toUpperCase(); -"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height" - .split(" ") - .forEach((a) => { - const b = a.replace(ma, na); - v[b] = new u(b, 1, !1, a, null, !1, !1); - }); -"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type" - .split(" ") - .forEach((a) => { - const b = a.replace(ma, na); - v[b] = new u(b, 1, !1, a, "http://www.w3.org/1999/xlink", !1, !1); - }); -["xml:base", "xml:lang", "xml:space"].forEach((a) => { - const b = a.replace(ma, na); - v[b] = new u(b, 1, !1, a, "http://www.w3.org/XML/1998/namespace", !1, !1); -}); -["tabIndex", "crossOrigin"].forEach((a) => { - v[a] = new u(a, 1, !1, a.toLowerCase(), null, !1, !1); -}); -v.xlinkHref = new u( - "xlinkHref", - 1, - !1, - "xlink:href", - "http://www.w3.org/1999/xlink", - !0, - !1 -); -["src", "href", "action", "formAction"].forEach((a) => { - v[a] = new u(a, 1, !1, a.toLowerCase(), null, !0, !0); -}); -const w = { - animationIterationCount: !0, - aspectRatio: !0, - borderImageOutset: !0, - borderImageSlice: !0, - borderImageWidth: !0, - boxFlex: !0, - boxFlexGroup: !0, - boxOrdinalGroup: !0, - columnCount: !0, - columns: !0, - flex: !0, - flexGrow: !0, - flexPositive: !0, - flexShrink: !0, - flexNegative: !0, - flexOrder: !0, - gridArea: !0, - gridRow: !0, - gridRowEnd: !0, - gridRowSpan: !0, - gridRowStart: !0, - gridColumn: !0, - gridColumnEnd: !0, - gridColumnSpan: !0, - gridColumnStart: !0, - fontWeight: !0, - lineClamp: !0, - lineHeight: !0, - opacity: !0, - order: !0, - orphans: !0, - tabSize: !0, - widows: !0, - zIndex: !0, - zoom: !0, - fillOpacity: !0, - floodOpacity: !0, - stopOpacity: !0, - strokeDasharray: !0, - strokeDashoffset: !0, - strokeMiterlimit: !0, - strokeOpacity: !0, - strokeWidth: !0, - }, - oa = ["Webkit", "ms", "Moz", "O"]; -Object.keys(w).forEach(function (a) { - oa.forEach(function (b) { - b = b + a.charAt(0).toUpperCase() + a.substring(1); - w[b] = w[a]; - }); -}); -const pa = global.Bun.escapeHTML; -function x(a) { - return "boolean" === typeof a || "number" === typeof a ? "" + a : pa(a); -} -const qa = /([A-Z])/g, - ra = /^ms-/, - sa = Array.isArray, - ta = m("<script>"), - ua = m("\x3c/script>"), - va = m('<script src="'), - wa = m('<script type="module" src="'), - xa = m('" async="">\x3c/script>'), - ya = /(<\/|<)(s)(cript)/gi, - za = (a, b, c, d) => `${b}${"s" === c ? "\\u0073" : "\\u0053"}${d}`; -function Aa(a, b, c, d, e) { - a = void 0 === a ? "" : a; - b = void 0 === b ? ta : m('<script nonce="' + x(b) + '">'); - const f = []; - void 0 !== c && f.push(b, ("" + c).replace(ya, za), ua); - if (void 0 !== d) for (c = 0; c < d.length; c++) f.push(va, x(d[c]), xa); - if (void 0 !== e) for (d = 0; d < e.length; d++) f.push(wa, x(e[d]), xa); - return { - bootstrapChunks: f, - startInlineScript: b, - placeholderPrefix: m(a + "P:"), - segmentPrefix: m(a + "S:"), - boundaryPrefix: a + "B:", - idPrefix: a, - nextSuspenseID: 0, - sentCompleteSegmentFunction: !1, - sentCompleteBoundaryFunction: !1, - sentClientRenderFunction: !1, - }; -} -function Ba(a) { - return { - insertionMode: - "http://www.w3.org/2000/svg" === a - ? 2 - : "http://www.w3.org/1998/Math/MathML" === a - ? 3 - : 0, - selectedValue: null, - }; -} -function Ca(a, b, c) { - switch (b) { - case "select": - return { - insertionMode: 1, - selectedValue: null != c.value ? c.value : c.defaultValue, - }; - case "svg": - return { insertionMode: 2, selectedValue: null }; - case "math": - return { insertionMode: 3, selectedValue: null }; - case "foreignObject": - return { insertionMode: 1, selectedValue: null }; - case "table": - return { insertionMode: 4, selectedValue: null }; - case "thead": - case "tbody": - case "tfoot": - return { insertionMode: 5, selectedValue: null }; - case "colgroup": - return { insertionMode: 7, selectedValue: null }; - case "tr": - return { insertionMode: 6, selectedValue: null }; - } - return 4 <= a.insertionMode || 0 === a.insertionMode - ? { insertionMode: 1, selectedValue: null } - : a; -} -const Da = m("\x3c!-- --\x3e"); -function Ea(a, b, c, d) { - if ("" === b) return d; - d && a.push(Da); - a.push(x(b)); - return !0; -} -const Fa = new Map(), - Ga = m(' style="'), - Ha = m(":"), - Ia = m(";"); -function Ja(a, b, c) { - if ("object" !== typeof c) throw Error(h(62)); - b = !0; - for (const g in c) - if (q.call(c, g)) { - var d = c[g]; - if (null != d && "boolean" !== typeof d && "" !== d) { - var e = void 0; - if (0 === g.indexOf("--")) (e = x(g)), (d = x(("" + d).trim())); - else { - e = g; - var f = Fa.get(e); - void 0 !== f - ? (e = f) - : ((f = m( - x(e.replace(qa, "-$1").toLowerCase().replace(ra, "-ms-")) - )), - Fa.set(e, f), - (e = f)); - d = - "number" === typeof d - ? 0 === d || q.call(w, g) - ? "" + d - : d + "px" - : x(("" + d).trim()); - } - b ? ((b = !1), a.push(Ga, e, Ha, d)) : a.push(Ia, e, Ha, d); - } - } - b || a.push(y); -} -const z = m(" "), - A = m('="'), - y = m('"'), - Ka = m('=""'); -function B(a, b, c, d) { - switch (c) { - case "style": - Ja(a, b, d); - return; - case "defaultValue": - case "defaultChecked": - case "innerHTML": - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - return; - } - if ( - !(2 < c.length) || - ("o" !== c[0] && "O" !== c[0]) || - ("n" !== c[1] && "N" !== c[1]) - ) - if (((b = v.hasOwnProperty(c) ? v[c] : null), null !== b)) { - switch (typeof d) { - case "function": - case "symbol": - return; - case "boolean": - if (!b.acceptsBooleans) return; - } - c = b.attributeName; - switch (b.type) { - case 3: - d && a.push(z, c, Ka); - break; - case 4: - !0 === d ? a.push(z, c, Ka) : !1 !== d && a.push(z, c, A, x(d), y); - break; - case 5: - isNaN(d) || a.push(z, c, A, x(d), y); - break; - case 6: - !isNaN(d) && 1 <= d && a.push(z, c, A, x(d), y); - break; - default: - b.sanitizeURL && (d = "" + d), a.push(z, c, A, x(d), y); - } - } else if (ka(c)) { - switch (typeof d) { - case "function": - case "symbol": - return; - case "boolean": - if ( - ((b = c.toLowerCase().slice(0, 5)), "data-" !== b && "aria-" !== b) - ) - return; - } - a.push(z, c, A, x(d), y); - } -} -const C = m(">"), - La = m("/>"); -function D(a, b, c) { - if (null != b) { - if (null != c) throw Error(h(60)); - if ("object" !== typeof b || !("__html" in b)) throw Error(h(61)); - b = b.__html; - null !== b && void 0 !== b && a.push("" + b); - } -} -function Ma(a) { - let b = ""; - aa.Children.forEach(a, function (a) { - null != a && (b += a); - }); - return b; -} -const Na = m(' selected=""'); -function Oa(a, b, c, d) { - a.push(E(c)); - let e = (c = null); - for (const f in b) - if (q.call(b, f)) { - const g = b[f]; - if (null != g) - switch (f) { - case "children": - c = g; - break; - case "dangerouslySetInnerHTML": - e = g; - break; - default: - B(a, d, f, g); - } - } - a.push(C); - D(a, e, c); - return "string" === typeof c ? (a.push(x(c)), null) : c; -} -const Pa = m("\n"), - Ra = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, - Sa = new Map(); -function E(a) { - let b = Sa.get(a); - if (void 0 === b) { - if (!Ra.test(a)) throw Error(h(65, a)); - b = m("<" + a); - Sa.set(a, b); - } - return b; -} -const Ta = m("<!DOCTYPE html>"); -function Ua(a, b, c, d, e) { - switch (b) { - case "select": - a.push(E("select")); - var f = null, - g = null; - for (var l in c) - if (q.call(c, l)) { - var k = c[l]; - if (null != k) - switch (l) { - case "children": - f = k; - break; - case "dangerouslySetInnerHTML": - g = k; - break; - case "defaultValue": - case "value": - break; - default: - B(a, d, l, k); - } - } - a.push(C); - D(a, g, f); - return (a = f); - case "option": - g = e.selectedValue; - a.push(E("option")); - var n = (k = null), - r = null; - l = null; - for (f in c) - if (q.call(c, f)) { - var t = c[f]; - if (null != t) - switch (f) { - case "children": - k = t; - break; - case "selected": - r = t; - break; - case "dangerouslySetInnerHTML": - l = t; - break; - case "value": - n = t; - default: - B(a, d, f, t); - } - } - if (null != g) - if (((c = null !== n ? "" + n : Ma(k)), sa(g))) - for (d = 0; d < g.length; d++) { - if ("" + g[d] === c) { - a.push(Na); - break; - } - } - else "" + g === c && a.push(Na); - else r && a.push(Na); - a.push(C); - D(a, l, k); - return (a = k); - case "textarea": - a.push(E("textarea")); - l = g = f = null; - for (k in c) - if (q.call(c, k) && ((n = c[k]), null != n)) - switch (k) { - case "children": - l = n; - break; - case "value": - f = n; - break; - case "defaultValue": - g = n; - break; - case "dangerouslySetInnerHTML": - throw Error(h(91)); - default: - B(a, d, k, n); - } - null === f && null !== g && (f = g); - a.push(C); - if (null != l) { - if (null != f) throw Error(h(92)); - if (sa(l) && 1 < l.length) throw Error(h(93)); - f = "" + l; - } - "string" === typeof f && "\n" === f[0] && a.push(Pa); - null !== f && a.push(x("" + f)); - return null; - case "input": - a.push(E("input")); - n = l = k = f = null; - for (g in c) - if (q.call(c, g) && ((r = c[g]), null != r)) - switch (g) { - case "children": - case "dangerouslySetInnerHTML": - throw Error(h(399, "input")); - case "defaultChecked": - n = r; - break; - case "defaultValue": - k = r; - break; - case "checked": - l = r; - break; - case "value": - f = r; - break; - default: - B(a, d, g, r); - } - null !== l ? B(a, d, "checked", l) : null !== n && B(a, d, "checked", n); - null !== f ? B(a, d, "value", f) : null !== k && B(a, d, "value", k); - a.push(La); - return null; - case "menuitem": - a.push(E("menuitem")); - for (const b in c) - if (q.call(c, b) && ((f = c[b]), null != f)) - switch (b) { - case "children": - case "dangerouslySetInnerHTML": - throw Error(h(400)); - default: - B(a, d, b, f); - } - a.push(C); - return null; - case "title": - a.push(E("title")); - f = null; - for (t in c) - if (q.call(c, t) && ((g = c[t]), null != g)) - switch (t) { - case "children": - f = g; - break; - case "dangerouslySetInnerHTML": - throw Error(h(434)); - default: - B(a, d, t, g); - } - a.push(C); - return (a = f); - case "listing": - case "pre": - a.push(E(b)); - g = f = null; - for (n in c) - if (q.call(c, n) && ((k = c[n]), null != k)) - switch (n) { - case "children": - f = k; - break; - case "dangerouslySetInnerHTML": - g = k; - break; - default: - B(a, d, n, k); - } - a.push(C); - if (null != g) { - if (null != f) throw Error(h(60)); - if ("object" !== typeof g || !("__html" in g)) throw Error(h(61)); - c = g.__html; - null !== c && - void 0 !== c && - ("string" === typeof c && 0 < c.length && "\n" === c[0] - ? a.push(Pa, c) - : a.push("" + c)); - } - "string" === typeof f && "\n" === f[0] && a.push(Pa); - return (a = f); - case "area": - case "base": - case "br": - case "col": - case "embed": - case "hr": - case "img": - case "keygen": - case "link": - case "meta": - case "param": - case "source": - case "track": - case "wbr": - a.push(E(b)); - for (const e in c) - if (q.call(c, e) && ((f = c[e]), null != f)) - switch (e) { - case "children": - case "dangerouslySetInnerHTML": - throw Error(h(399, b)); - default: - B(a, d, e, f); - } - a.push(La); - return null; - case "annotation-xml": - case "color-profile": - case "font-face": - case "font-face-src": - case "font-face-uri": - case "font-face-format": - case "font-face-name": - case "missing-glyph": - return Oa(a, c, b, d); - case "html": - return 0 === e.insertionMode && a.push(Ta), Oa(a, c, b, d); - default: - if (-1 === b.indexOf("-") && "string" !== typeof c.is) - return Oa(a, c, b, d); - a.push(E(b)); - g = f = null; - for (r in c) - if ( - q.call(c, r) && - ((k = c[r]), - null != k && - "function" !== typeof k && - "object" !== typeof k && - !1 !== k) - ) - switch ( - (!0 === k && (k = ""), "className" === r && (r = "class"), r) - ) { - case "children": - f = k; - break; - case "dangerouslySetInnerHTML": - g = k; - break; - case "style": - Ja(a, d, k); - break; - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - break; - default: - ka(r) && - "function" !== typeof k && - "symbol" !== typeof k && - a.push(z, r, A, x(k), y); - } - a.push(C); - D(a, g, f); - return (a = f); - } -} -const Va = m("</"), - Wa = m(">"), - Xa = m('<template id="'), - Ya = m('"></template>'), - Za = m("\x3c!--$--\x3e"), - $a = m('\x3c!--$?--\x3e<template id="'), - ab = m('"></template>'), - bb = m("\x3c!--$!--\x3e"), - cb = m("\x3c!--/$--\x3e"), - db = m("<template"), - eb = m('"'), - fb = m(' data-dgst="'); -m(' data-msg="'); -m(' data-stck="'); -const gb = m("></template>"); -function hb(a, b, c) { - a.write($a); - if (null === c) throw Error(h(395)); - a.write(c); - return !!a.write(ab); -} -const ib = m('<div hidden id="'), - jb = m('">'), - kb = m("</div>"), - lb = m('<svg aria-hidden="true" style="display:none" id="'), - mb = m('">'), - nb = m("</svg>"), - ob = m('<math aria-hidden="true" style="display:none" id="'), - pb = m('">'), - qb = m("</math>"), - rb = m('<table hidden id="'), - sb = m('">'), - tb = m("</table>"), - ub = m('<table hidden><tbody id="'), - vb = m('">'), - xb = m("</tbody></table>"), - yb = m('<table hidden><tr id="'), - zb = m('">'), - Ab = m("</tr></table>"), - Bb = m('<table hidden><colgroup id="'), - Cb = m('">'), - Db = m("</colgroup></table>"); -function Eb(a, b, c, d) { - switch (c.insertionMode) { - case 0: - case 1: - return ( - a.write(ib), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(jb) - ); - case 2: - return ( - a.write(lb), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(mb) - ); - case 3: - return ( - a.write(ob), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(pb) - ); - case 4: - return ( - a.write(rb), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(sb) - ); - case 5: - return ( - a.write(ub), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(vb) - ); - case 6: - return ( - a.write(yb), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(zb) - ); - case 7: - return ( - a.write(Bb), - a.write(b.segmentPrefix), - (b = d.toString(16)), - a.write(b), - !!a.write(Cb) - ); - default: - throw Error(h(397)); - } -} -function Fb(a, b) { - switch (b.insertionMode) { - case 0: - case 1: - return !!a.write(kb); - case 2: - return !!a.write(nb); - case 3: - return !!a.write(qb); - case 4: - return !!a.write(tb); - case 5: - return !!a.write(xb); - case 6: - return !!a.write(Ab); - case 7: - return !!a.write(Db); - default: - throw Error(h(397)); - } -} -const Gb = m( - 'function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' - ), - Hb = m('$RS("'), - Ib = m('","'), - Jb = m('")\x3c/script>'), - Kb = m( - 'function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d)if(0===e)break;else e--;else"$"!==d&&"$?"!==d&&"$!"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data="$";a._reactRetry&&a._reactRetry()}};$RC("' - ), - Lb = m('$RC("'), - Mb = m('","'), - Nb = m('")\x3c/script>'), - Ob = m( - 'function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())};$RX("' - ), - Pb = m('$RX("'), - Qb = m('"'), - Rb = m(")\x3c/script>"), - Sb = m(","), - Tb = /[<\u2028\u2029]/g; -function Ub(a) { - return JSON.stringify(a).replace(Tb, (a) => { - switch (a) { - case "<": - return "\\u003c"; - case "\u2028": - return "\\u2028"; - case "\u2029": - return "\\u2029"; - default: - throw Error( - "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } - }); -} -const Vb = Symbol.for("react.element"), - Wb = Symbol.for("react.portal"), - Xb = Symbol.for("react.fragment"), - Yb = Symbol.for("react.strict_mode"), - Zb = Symbol.for("react.profiler"), - $b = Symbol.for("react.provider"), - ac = Symbol.for("react.context"), - bc = Symbol.for("react.server_context"), - cc = Symbol.for("react.forward_ref"), - dc = Symbol.for("react.suspense"), - ec = Symbol.for("react.suspense_list"), - fc = Symbol.for("react.memo"), - gc = Symbol.for("react.lazy"), - hc = Symbol.for("react.scope"), - ic = Symbol.for("react.debug_trace_mode"), - jc = Symbol.for("react.legacy_hidden"), - kc = Symbol.for("react.cache"), - lc = Symbol.for("react.default_value"), - mc = Symbol.iterator; -function nc(a) { - if (null == a) return null; - if ("function" === typeof a) return a.displayName || a.name || null; - if ("string" === typeof a) return a; - switch (a) { - case Xb: - return "Fragment"; - case Wb: - return "Portal"; - case Zb: - return "Profiler"; - case Yb: - return "StrictMode"; - case dc: - return "Suspense"; - case ec: - return "SuspenseList"; - case kc: - return "Cache"; - } - if ("object" === typeof a) - switch (a.$$typeof) { - case ac: - return (a.displayName || "Context") + ".Consumer"; - case $b: - return (a._context.displayName || "Context") + ".Provider"; - case cc: - var b = a.render; - a = a.displayName; - a || - ((a = b.displayName || b.name || ""), - (a = "" !== a ? `${"ForwardRef"}(${a})` : "ForwardRef")); - return a; - case fc: - return ( - (b = a.displayName || null), null !== b ? b : nc(a.type) || "Memo" - ); - case gc: - b = a._payload; - a = a._init; - try { - return nc(a(b)); - } catch (c) { - break; - } - case bc: - return (a.displayName || a._globalName) + ".Provider"; - } - return null; -} -const oc = {}; -function pc(a, b) { - { - a = a.contextTypes; - if (!a) return oc; - const c = {}; - for (const d in a) c[d] = b[d]; - return c; - } -} -let F = null; -function G(a, b) { - if (a !== b) { - a.context._currentValue = a.parentValue; - a = a.parent; - const c = b.parent; - if (null === a) { - if (null !== c) throw Error(h(401)); - } else { - if (null === c) throw Error(h(401)); - G(a, c); - } - b.context._currentValue = b.value; - } -} -function qc(a) { - a.context._currentValue = a.parentValue; - a = a.parent; - null !== a && qc(a); -} -function rc(a) { - const b = a.parent; - null !== b && rc(b); - a.context._currentValue = a.value; -} -function sc(a, b) { - a.context._currentValue = a.parentValue; - a = a.parent; - if (null === a) throw Error(h(402)); - a.depth === b.depth ? G(a, b) : sc(a, b); -} -function tc(a, b) { - const c = b.parent; - if (null === c) throw Error(h(402)); - a.depth === c.depth ? G(a, c) : tc(a, c); - b.context._currentValue = b.value; -} -function H(a) { - const b = F; - b !== a && - (null === b - ? rc(a) - : null === a - ? qc(b) - : b.depth === a.depth - ? G(b, a) - : b.depth > a.depth - ? sc(b, a) - : tc(b, a), - (F = a)); -} -const I = Object.assign, - uc = { - isMounted() { - return !1; - }, - enqueueSetState(a, b) { - a = a._reactInternals; - null !== a.queue && a.queue.push(b); - }, - enqueueReplaceState(a, b) { - a = a._reactInternals; - a.replace = !0; - a.queue = [b]; - }, - enqueueForceUpdate() {}, - }; -function vc(a, b, c, d) { - var e = void 0 !== a.state ? a.state : null; - a.updater = uc; - a.props = c; - a.state = e; - var f = { queue: [], replace: !1 }; - a._reactInternals = f; - var g = b.contextType; - a.context = "object" === typeof g && null !== g ? g._currentValue : d; - g = b.getDerivedStateFromProps; - "function" === typeof g && - ((g = g(c, e)), - (e = null === g || void 0 === g ? e : I({}, e, g)), - (a.state = e)); - if ( - "function" !== typeof b.getDerivedStateFromProps && - "function" !== typeof a.getSnapshotBeforeUpdate && - ("function" === typeof a.UNSAFE_componentWillMount || - "function" === typeof a.componentWillMount) - ) - if ( - ((b = a.state), - "function" === typeof a.componentWillMount && a.componentWillMount(), - "function" === typeof a.UNSAFE_componentWillMount && - a.UNSAFE_componentWillMount(), - b !== a.state && uc.enqueueReplaceState(a, a.state, null), - null !== f.queue && 0 < f.queue.length) - ) - if ( - ((b = f.queue), - (g = f.replace), - (f.queue = null), - (f.replace = !1), - g && 1 === b.length) - ) - a.state = b[0]; - else { - f = g ? b[0] : a.state; - e = !0; - for (g = g ? 1 : 0; g < b.length; g++) { - var l = b[g]; - l = "function" === typeof l ? l.call(a, f, c, d) : l; - null != l && (e ? ((e = !1), (f = I({}, f, l))) : I(f, l)); - } - a.state = f; - } - else f.queue = null; -} -const wc = { id: 1, overflow: "" }; -function xc(a, b, c) { - var d = a.id; - a = a.overflow; - var e = 32 - J(d) - 1; - d &= ~(1 << e); - c += 1; - var f = 32 - J(b) + e; - if (30 < f) { - const g = e - (e % 5); - f = (d & ((1 << g) - 1)).toString(32); - d >>= g; - e -= g; - return { id: (1 << (32 - J(b) + e)) | (c << e) | d, overflow: f + a }; - } - return { id: (1 << f) | (c << e) | d, overflow: a }; -} -const J = Math.clz32 ? Math.clz32 : yc, - zc = Math.log, - Ac = Math.LN2; -function yc(a) { - a >>>= 0; - return 0 === a ? 32 : (31 - ((zc(a) / Ac) | 0)) | 0; -} -function Bc(a, b) { - return (a === b && (0 !== a || 1 / a === 1 / b)) || (a !== a && b !== b); -} -const Cc = "function" === typeof Object.is ? Object.is : Bc; -let K = null, - Dc = null, - L = null, - M = null, - N = !1, - O = !1, - P = 0, - Q = null, - R = 0; -function S() { - if (null === K) throw Error(h(321)); - return K; -} -function Ec() { - if (0 < R) throw Error(h(312)); - return { memoizedState: null, queue: null, next: null }; -} -function Fc() { - null === M - ? null === L - ? ((N = !1), (L = M = Ec())) - : ((N = !0), (M = L)) - : null === M.next - ? ((N = !1), (M = M.next = Ec())) - : ((N = !0), (M = M.next)); - return M; -} -function Gc() { - Dc = K = null; - O = !1; - L = null; - R = 0; - M = Q = null; -} -function Hc(a, b) { - return "function" === typeof b ? b(a) : b; -} -function Ic(a, b, c) { - K = S(); - M = Fc(); - if (N) { - var d = M.queue; - b = d.dispatch; - if (null !== Q && ((c = Q.get(d)), void 0 !== c)) { - Q.delete(d); - d = M.memoizedState; - do (d = a(d, c.action)), (c = c.next); - while (null !== c); - M.memoizedState = d; - return [d, b]; - } - return [M.memoizedState, b]; - } - a = a === Hc ? ("function" === typeof b ? b() : b) : void 0 !== c ? c(b) : b; - M.memoizedState = a; - a = M.queue = { last: null, dispatch: null }; - a = a.dispatch = Jc.bind(null, K, a); - return [M.memoizedState, a]; -} -function Kc(a, b) { - K = S(); - M = Fc(); - b = void 0 === b ? null : b; - if (null !== M) { - const a = M.memoizedState; - if (null !== a && null !== b) { - a: { - var c = a[1]; - if (null === c) c = !1; - else { - for (let a = 0; a < c.length && a < b.length; a++) - if (!Cc(b[a], c[a])) { - c = !1; - break a; - } - c = !0; - } - } - if (c) return a[0]; - } - } - a = a(); - M.memoizedState = [a, b]; - return a; -} -function Jc(a, b, c) { - if (25 <= R) throw Error(h(301)); - if (a === K) - if ( - ((O = !0), - (a = { action: c, next: null }), - null === Q && (Q = new Map()), - (c = Q.get(b)), - void 0 === c) - ) - Q.set(b, a); - else { - for (b = c; null !== b.next; ) b = b.next; - b.next = a; - } -} -function Lc() { - throw Error(h(394)); -} -function Mc() { - throw Error(h(393)); -} -function T() {} -const Nc = { - readContext: function (a) { - return a._currentValue; - }, - useContext: function (a) { - S(); - return a._currentValue; - }, - useMemo: Kc, - useReducer: Ic, - useRef: function (a) { - K = S(); - M = Fc(); - const b = M.memoizedState; - return null === b ? ((a = { current: a }), (M.memoizedState = a)) : b; - }, - useState: function (a) { - return Ic(Hc, a); - }, - useInsertionEffect: T, - useLayoutEffect: function () {}, - useCallback: function (a, b) { - return Kc(() => a, b); - }, - useImperativeHandle: T, - useEffect: T, - useDebugValue: T, - useDeferredValue: function (a) { - S(); - return a; - }, - useTransition: function () { - S(); - return [!1, Lc]; - }, - useId: function () { - var a = Dc.treeContext; - var b = a.overflow; - a = a.id; - a = (a & ~(1 << (32 - J(a) - 1))).toString(32) + b; - const c = U; - if (null === c) throw Error(h(404)); - b = P++; - a = ":" + c.idPrefix + "R" + a; - 0 < b && (a += "H" + b.toString(32)); - return (b = a + ":"); - }, - useMutableSource: function (a, b) { - S(); - return b(a._source); - }, - useSyncExternalStore: function (a, b, c) { - if (void 0 === c) throw Error(h(407)); - return c(); - }, - getCacheForType: function () { - throw Error(h(248)); - }, - useCacheRefresh: function () { - return Mc; - }, -}; -let U = null; -const Oc = - aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher; -function Pc(a) { - console.error(a); - return null; -} -function V() {} -function Qc(a, b, c, d, e, f, g, l, k) { - const n = [], - r = new Set(); - b = { - destination: null, - responseState: b, - progressiveChunkSize: void 0 === d ? 12800 : d, - status: 0, - fatalError: null, - nextSegmentId: 0, - allPendingTasks: 0, - pendingRootTasks: 0, - completedRootSegment: null, - abortableTasks: r, - pingedTasks: n, - clientRenderedBoundaries: [], - completedBoundaries: [], - partialBoundaries: [], - onError: void 0 === e ? Pc : e, - onAllReady: void 0 === f ? V : f, - onShellReady: void 0 === g ? V : g, - onShellError: void 0 === l ? V : l, - onFatalError: void 0 === k ? V : k, - }; - c = W(b, 0, null, c, !1, !1); - c.parentFlushed = !0; - a = Rc(b, a, null, c, r, oc, null, wc); - n.push(a); - return b; -} -function Sc(a, b) { - const c = a.pingedTasks; - c.push(b); - 1 === c.length && queueMicrotask(() => Tc(a)); -} -function Rc(a, b, c, d, e, f, g, l) { - a.allPendingTasks++; - null === c ? a.pendingRootTasks++ : c.pendingTasks++; - const k = { - node: b, - ping: () => Sc(a, k), - blockedBoundary: c, - blockedSegment: d, - abortSet: e, - legacyContext: f, - context: g, - treeContext: l, - }; - e.add(k); - return k; -} -function W(a, b, c, d, e, f) { - return { - status: 0, - id: -1, - index: b, - parentFlushed: !1, - chunks: [], - children: [], - formatContext: d, - boundary: c, - lastPushedText: e, - textEmbedded: f, - }; -} -function X(a, b) { - a = a.onError(b); - if (null != a && "string" !== typeof a) - throw Error( - `onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "${typeof a}" instead` - ); - return a; -} -function Y(a, b) { - var c = a.onShellError; - c(b); - c = a.onFatalError; - c(b); - null !== a.destination - ? ((a.status = 2), a.destination.close(b)) - : ((a.status = 1), (a.fatalError = b)); -} -function Uc(a, b, c, d, e) { - K = {}; - Dc = b; - P = 0; - for (a = c(d, e); O; ) (O = !1), (P = 0), (R += 1), (M = null), (a = c(d, e)); - Gc(); - return a; -} -function Vc(a, b, c, d) { - const e = c.render(); - var f = d.childContextTypes; - if (null !== f && void 0 !== f) { - const l = b.legacyContext; - var g = l; - if ("function" !== typeof c.getChildContext) d = g; - else { - c = c.getChildContext(); - for (const a in c) - if (!(a in f)) throw Error(h(108, nc(d) || "Unknown", a)); - d = { ...g, ...c }; - } - b.legacyContext = d; - Z(a, b, e); - b.legacyContext = l; - } else Z(a, b, e); -} -function Wc(a, b) { - if (a && a.defaultProps) { - b = I({}, b); - a = a.defaultProps; - for (const c in a) void 0 === b[c] && (b[c] = a[c]); - return b; - } - return b; -} -function Xc(a, b, c, d, e) { - if ("function" === typeof c) - if (c.prototype && c.prototype.isReactComponent) { - e = pc(c, b.legacyContext); - var f = e; - var g = c.contextType; - f = new c(d, "object" === typeof g && null !== g ? g._currentValue : f); - vc(f, c, d, e); - Vc(a, b, f, c); - } else if ( - ((f = pc(c, b.legacyContext)), - (e = Uc(a, b, c, d, f)), - (g = 0 !== P), - "object" === typeof e && - null !== e && - "function" === typeof e.render && - void 0 === e.$$typeof) - ) - vc(e, c, d, f), Vc(a, b, e, c); - else if (g) { - d = b.treeContext; - b.treeContext = xc(d, 1, 0); - try { - Z(a, b, e); - } finally { - b.treeContext = d; - } - } else Z(a, b, e); - else if ("string" === typeof c) { - e = b.blockedSegment; - f = Ua(e.chunks, c, d, a.responseState, e.formatContext); - e.lastPushedText = !1; - g = e.formatContext; - e.formatContext = Ca(g, c, d); - Yc(a, b, f); - e.formatContext = g; - switch (c) { - case "area": - case "base": - case "br": - case "col": - case "embed": - case "hr": - case "img": - case "input": - case "keygen": - case "link": - case "meta": - case "param": - case "source": - case "track": - case "wbr": - break; - default: - e.chunks.push(Va, c, Wa); - } - e.lastPushedText = !1; - } else { - switch (c) { - case jc: - case ic: - case Yb: - case Zb: - case Xb: - Z(a, b, d.children); - return; - case ec: - Z(a, b, d.children); - return; - case hc: - throw Error(h(343)); - case dc: - a: { - c = b.blockedBoundary; - e = b.blockedSegment; - f = d.fallback; - d = d.children; - g = new Set(); - const l = { - id: null, - rootSegmentID: -1, - parentFlushed: !1, - pendingTasks: 0, - forceClientRender: !1, - completedSegments: [], - byteSize: 0, - fallbackAbortableTasks: g, - errorDigest: null, - }, - k = W(a, e.chunks.length, l, e.formatContext, !1, !1); - e.children.push(k); - e.lastPushedText = !1; - const n = W(a, 0, null, e.formatContext, !1, !1); - n.parentFlushed = !0; - b.blockedBoundary = l; - b.blockedSegment = n; - try { - if ( - (Yc(a, b, d), - n.lastPushedText && n.textEmbedded && n.chunks.push(Da), - (n.status = 1), - Zc(l, n), - 0 === l.pendingTasks) - ) - break a; - } catch (r) { - (n.status = 4), - (l.forceClientRender = !0), - (l.errorDigest = X(a, r)); - } finally { - (b.blockedBoundary = c), (b.blockedSegment = e); - } - b = Rc(a, f, c, k, g, b.legacyContext, b.context, b.treeContext); - a.pingedTasks.push(b); - } - return; - } - if ("object" === typeof c && null !== c) - switch (c.$$typeof) { - case cc: - d = Uc(a, b, c.render, d, e); - if (0 !== P) { - c = b.treeContext; - b.treeContext = xc(c, 1, 0); - try { - Z(a, b, d); - } finally { - b.treeContext = c; - } - } else Z(a, b, d); - return; - case fc: - c = c.type; - d = Wc(c, d); - Xc(a, b, c, d, e); - return; - case $b: - e = d.children; - c = c._context; - d = d.value; - f = c._currentValue; - c._currentValue = d; - g = F; - F = d = { - parent: g, - depth: null === g ? 0 : g.depth + 1, - context: c, - parentValue: f, - value: d, - }; - b.context = d; - Z(a, b, e); - a = F; - if (null === a) throw Error(h(403)); - d = a.parentValue; - a.context._currentValue = d === lc ? a.context._defaultValue : d; - a = F = a.parent; - b.context = a; - return; - case ac: - d = d.children; - d = d(c._currentValue); - Z(a, b, d); - return; - case gc: - e = c._init; - c = e(c._payload); - d = Wc(c, d); - Xc(a, b, c, d, void 0); - return; - } - throw Error(h(130, null == c ? c : typeof c, "")); - } -} -function Z(a, b, c) { - b.node = c; - if ("object" === typeof c && null !== c) { - switch (c.$$typeof) { - case Vb: - Xc(a, b, c.type, c.props, c.ref); - return; - case Wb: - throw Error(h(257)); - case gc: - var d = c._init; - c = d(c._payload); - Z(a, b, c); - return; - } - if (sa(c)) { - $c(a, b, c); - return; - } - null === c || "object" !== typeof c - ? (d = null) - : ((d = (mc && c[mc]) || c["@@iterator"]), - (d = "function" === typeof d ? d : null)); - if (d && (d = d.call(c))) { - c = d.next(); - if (!c.done) { - const e = []; - do e.push(c.value), (c = d.next()); - while (!c.done); - $c(a, b, e); - } - return; - } - a = Object.prototype.toString.call(c); - throw Error( - h( - 31, - "[object Object]" === a - ? "object with keys {" + Object.keys(c).join(", ") + "}" - : a - ) - ); - } - "string" === typeof c - ? ((d = b.blockedSegment), - (d.lastPushedText = Ea( - b.blockedSegment.chunks, - c, - a.responseState, - d.lastPushedText - ))) - : "number" === typeof c && - ((d = b.blockedSegment), - (d.lastPushedText = Ea( - b.blockedSegment.chunks, - "" + c, - a.responseState, - d.lastPushedText - ))); -} -function $c(a, b, c) { - const d = c.length; - for (let e = 0; e < d; e++) { - const f = b.treeContext; - b.treeContext = xc(f, d, e); - try { - Yc(a, b, c[e]); - } finally { - b.treeContext = f; - } - } -} -function Yc(a, b, c) { - const d = b.blockedSegment.formatContext, - e = b.legacyContext, - f = b.context; - try { - return Z(a, b, c); - } catch (g) { - if ( - (Gc(), - "object" === typeof g && null !== g && "function" === typeof g.then) - ) { - { - c = g; - const d = b.blockedSegment, - e = W( - a, - d.chunks.length, - null, - d.formatContext, - d.lastPushedText, - !0 - ); - d.children.push(e); - d.lastPushedText = !1; - a = Rc( - a, - b.node, - b.blockedBoundary, - e, - b.abortSet, - b.legacyContext, - b.context, - b.treeContext - ).ping; - c.then(a, a); - } - b.blockedSegment.formatContext = d; - b.legacyContext = e; - b.context = f; - H(f); - } else - throw ( - ((b.blockedSegment.formatContext = d), - (b.legacyContext = e), - (b.context = f), - H(f), - g) - ); - } -} -function ad(a) { - const b = a.blockedBoundary; - a = a.blockedSegment; - a.status = 3; - bd(this, b, a); -} -function cd(a, b, c) { - var d = a.blockedBoundary; - a.blockedSegment.status = 3; - null === d - ? (b.allPendingTasks--, - 2 !== b.status && - ((b.status = 2), null !== b.destination && b.destination.end())) - : (d.pendingTasks--, - d.forceClientRender || - ((d.forceClientRender = !0), - (a = void 0 === c ? Error(h(432)) : c), - (d.errorDigest = b.onError(a)), - d.parentFlushed && b.clientRenderedBoundaries.push(d)), - d.fallbackAbortableTasks.forEach((a) => cd(a, b, c)), - d.fallbackAbortableTasks.clear(), - b.allPendingTasks--, - 0 === b.allPendingTasks && ((d = b.onAllReady), d())); -} -function Zc(a, b) { - if ( - 0 === b.chunks.length && - 1 === b.children.length && - null === b.children[0].boundary - ) { - const c = b.children[0]; - c.id = b.id; - c.parentFlushed = !0; - 1 === c.status && Zc(a, c); - } else a.completedSegments.push(b); -} -function bd(a, b, c) { - if (null === b) { - if (c.parentFlushed) { - if (null !== a.completedRootSegment) throw Error(h(389)); - a.completedRootSegment = c; - } - a.pendingRootTasks--; - 0 === a.pendingRootTasks && - ((a.onShellError = V), (b = a.onShellReady), b()); - } else - b.pendingTasks--, - b.forceClientRender || - (0 === b.pendingTasks - ? (c.parentFlushed && 1 === c.status && Zc(b, c), - b.parentFlushed && a.completedBoundaries.push(b), - b.fallbackAbortableTasks.forEach(ad, a), - b.fallbackAbortableTasks.clear()) - : c.parentFlushed && - 1 === c.status && - (Zc(b, c), - 1 === b.completedSegments.length && - b.parentFlushed && - a.partialBoundaries.push(b))); - a.allPendingTasks--; - 0 === a.allPendingTasks && ((a = a.onAllReady), a()); -} -function Tc(a) { - if (2 !== a.status) { - var b = F, - c = Oc.current; - Oc.current = Nc; - var d = U; - U = a.responseState; - try { - const b = a.pingedTasks; - let c; - for (c = 0; c < b.length; c++) { - { - var e = a, - f = b[c]; - const d = f.blockedSegment; - if (0 === d.status) { - H(f.context); - try { - Z(e, f, f.node), - d.lastPushedText && d.textEmbedded && d.chunks.push(Da), - f.abortSet.delete(f), - (d.status = 1), - bd(e, f.blockedBoundary, d); - } catch (t) { - if ( - (Gc(), - "object" === typeof t && - null !== t && - "function" === typeof t.then) - ) { - const a = f.ping; - t.then(a, a); - } else { - f.abortSet.delete(f); - d.status = 4; - { - var g = f.blockedBoundary, - l = t; - const a = X(e, l); - null === g - ? Y(e, l) - : (g.pendingTasks--, - g.forceClientRender || - ((g.forceClientRender = !0), - (g.errorDigest = a), - g.parentFlushed && e.clientRenderedBoundaries.push(g))); - e.allPendingTasks--; - if (0 === e.allPendingTasks) { - const a = e.onAllReady; - a(); - } - } - } - } finally { - } - } - } - } - b.splice(0, c); - null !== a.destination && dd(a, a.destination); - } catch (k) { - X(a, k), Y(a, k); - } finally { - (U = d), (Oc.current = c), c === Nc && H(b); - } - } -} -function ed(a, b, c) { - c.parentFlushed = !0; - switch (c.status) { - case 0: - var d = (c.id = a.nextSegmentId++); - c.lastPushedText = !1; - c.textEmbedded = !1; - a = a.responseState; - b.write(Xa); - b.write(a.placeholderPrefix); - a = d.toString(16); - b.write(a); - return (b = !!b.write(Ya)); - case 1: { - c.status = 2; - var e = !0; - d = c.chunks; - let f = 0; - c = c.children; - for (let g = 0; g < c.length; g++) { - for (e = c[g]; f < e.index; f++) b.write(d[f]); - e = fd(a, b, e); - } - for (; f < d.length - 1; f++) b.write(d[f]); - f < d.length && (e = !!b.write(d[f])); - return e; - } - default: - throw Error(h(390)); - } -} -function fd(a, b, c) { - var d = c.boundary; - if (null === d) return ed(a, b, c); - d.parentFlushed = !0; - if (d.forceClientRender) - (d = d.errorDigest), - b.write(bb), - b.write(db), - d && (b.write(fb), (d = x(d)), b.write(d), b.write(eb)), - b.write(gb), - ed(a, b, c); - else if (0 < d.pendingTasks) { - d.rootSegmentID = a.nextSegmentId++; - 0 < d.completedSegments.length && a.partialBoundaries.push(d); - { - var e = a.responseState; - const b = e.nextSuspenseID++; - e = m(e.boundaryPrefix + b.toString(16)); - } - d = d.id = e; - hb(b, a.responseState, d); - ed(a, b, c); - } else if (d.byteSize > a.progressiveChunkSize) - (d.rootSegmentID = a.nextSegmentId++), - a.completedBoundaries.push(d), - hb(b, a.responseState, d.id), - ed(a, b, c); - else { - b.write(Za); - c = d.completedSegments; - if (1 !== c.length) throw Error(h(391)); - fd(a, b, c[0]); - } - return !!b.write(cb); -} -function gd(a, b, c) { - Eb(b, a.responseState, c.formatContext, c.id); - fd(a, b, c); - return Fb(b, c.formatContext); -} -function hd(a, b, c) { - var d = c.completedSegments; - let e = 0; - for (; e < d.length; e++) id(a, b, c, d[e]); - d.length = 0; - a = a.responseState; - d = c.id; - c = c.rootSegmentID; - b.write(a.startInlineScript); - a.sentCompleteBoundaryFunction - ? b.write(Lb) - : ((a.sentCompleteBoundaryFunction = !0), b.write(Kb)); - if (null === d) throw Error(h(395)); - c = c.toString(16); - b.write(d); - b.write(Mb); - b.write(a.segmentPrefix); - b.write(c); - return (b = !!b.write(Nb)); -} -function id(a, b, c, d) { - if (2 === d.status) return !0; - var e = d.id; - if (-1 === e) { - if (-1 === (d.id = c.rootSegmentID)) throw Error(h(392)); - return gd(a, b, d); - } - gd(a, b, d); - a = a.responseState; - b.write(a.startInlineScript); - a.sentCompleteSegmentFunction - ? b.write(Hb) - : ((a.sentCompleteSegmentFunction = !0), b.write(Gb)); - b.write(a.segmentPrefix); - e = e.toString(16); - b.write(e); - b.write(Ib); - b.write(a.placeholderPrefix); - b.write(e); - return (b = !!b.write(Jb)); -} -function dd(a, b) { - try { - var c = a.completedRootSegment; - if (null !== c && 0 === a.pendingRootTasks) { - fd(a, b, c); - a.completedRootSegment = null; - var d = a.responseState.bootstrapChunks; - for (c = 0; c < d.length - 1; c++) b.write(d[c]); - c < d.length && b.write(d[c]); - } - const da = a.clientRenderedBoundaries; - let p; - for (p = 0; p < da.length; p++) { - const c = da[p]; - d = b; - var e = a.responseState, - f = c.id, - g = c.errorDigest, - l = c.errorMessage, - k = c.errorComponentStack; - d.write(e.startInlineScript); - e.sentClientRenderFunction - ? d.write(Pb) - : ((e.sentClientRenderFunction = !0), d.write(Ob)); - if (null === f) throw Error(h(395)); - d.write(f); - d.write(Qb); - if (g || l || k) { - d.write(Sb); - var n = Ub(g || ""); - d.write(n); - } - if (l || k) { - d.write(Sb); - var r = Ub(l || ""); - d.write(r); - } - if (k) { - d.write(Sb); - var t = Ub(k); - d.write(t); - } - if (!d.write(Rb)) { - a.destination = null; - p++; - da.splice(0, p); - return; - } - } - da.splice(0, p); - const ea = a.completedBoundaries; - for (p = 0; p < ea.length; p++) - if (!hd(a, b, ea[p])) { - a.destination = null; - p++; - ea.splice(0, p); - return; - } - ea.splice(0, p); - b.flush(); - const fa = a.partialBoundaries; - for (p = 0; p < fa.length; p++) { - a: { - e = a; - f = b; - var Qa = fa[p]; - const c = Qa.completedSegments; - for (g = 0; g < c.length; g++) - if (!id(e, f, Qa, c[g])) { - g++; - c.splice(0, g); - var wb = !1; - break a; - } - c.splice(0, g); - wb = !0; - } - if (!wb) { - a.destination = null; - p++; - fa.splice(0, p); - return; - } - } - fa.splice(0, p); - const ha = a.completedBoundaries; - for (p = 0; p < ha.length; p++) - if (!hd(a, b, ha[p])) { - a.destination = null; - p++; - ha.splice(0, p); - return; - } - ha.splice(0, p); - } finally { - b.flush(), - b.flush(), - 0 === a.allPendingTasks && - 0 === a.pingedTasks.length && - 0 === a.clientRenderedBoundaries.length && - 0 === a.completedBoundaries.length && - b.end(); - } -} -function jd(a, b) { - if (1 === a.status) (a.status = 2), b.close(a.fatalError); - else if (2 !== a.status && null === a.destination) { - a.destination = b; - try { - dd(a, b); - } catch (c) { - X(a, c), Y(a, c); - } - } -} -function kd(a, b) { - try { - const c = a.abortableTasks; - c.forEach((c) => cd(c, a, b)); - c.clear(); - null !== a.destination && dd(a, a.destination); - } catch (c) { - X(a, c), Y(a, c); - } -} -const ld = { - type: "direct", - pull: void 0, - cancel: void 0, - [Symbol.toStringTag]: "ReactDOMServerReadableStreamSource", -}; -function md(a) { - let b = !1, - c; - if (a.onAllReady) { - let d = a.onAllReady; - a.onAllReady = () => { - c ? (jd(a, c), (c = void 0)) : (b = !0); - d(); - d = void 0; - }; - } else - a.onAllReady = () => { - c ? (jd(a, c), (c = void 0)) : (b = !0); - }; - Tc(a); - return Object.create(ld, { - pull: { - value: (d) => { - b ? ((c = void 0), jd(a, d)) : (c = d); - }, - }, - cancel: { - value: () => { - kd(a); - }, - }, - }); -} -function nd(a, b) { - a = md(a); - b = b && Number.isFinite(b) && 0 < b ? b : 2048; - return new ReadableStream(a, { highWaterMark: b }); -} -export const renderToReadableStream = function (a, b) { - let c; - try { - const d = Qc( - a, - Aa( - b ? b.identifierPrefix : void 0, - b ? b.nonce : void 0, - b ? b.bootstrapScriptContent : void 0, - b ? b.bootstrapScripts : void 0, - b ? b.bootstrapModules : void 0 - ), - Ba(b ? b.namespaceURI : void 0), - b ? b.progressiveChunkSize : void 0, - b ? b.onError : void 0, - b ? b.onAllReady : void 0, - void 0, - (a) => { - c && c.cancel(a).catch(() => {}); - }, - b - ); - c = nd(d, b && b.progressiveChunkSize); - const e = b && b.signal; - if (e) { - const a = () => { - kd(d); - e.removeEventListener("abort", a); - }; - e.addEventListener("abort", a); - } - return Promise.resolve(c); - } catch (d) { - c && c.cancel(d).catch(() => {}); - if (b.onShellError) b.onShellError(d); - return Promise.reject(d); - } -}; -export const version = "18.1.0"; diff --git a/packages/bun-landing/ssr.tsx b/packages/bun-landing/ssr.tsx deleted file mode 100644 index e62dc3c2d..000000000 --- a/packages/bun-landing/ssr.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { file, serve } from "bun"; -import "shiki"; -import { renderToReadableStream } from "../../test/bun.js/reactdom-bun"; - -import liveReload from "bun-livereload"; -import { join } from "path"; - -async function fetch(req: Request) { - if (req.url.endsWith("robots.txt")) { - return new Response("", { status: 404 }); - } - - if (req.url.endsWith(".css")) { - return new Response(file(join(import.meta.dir + "/", "index.css"))); - } - - if (!req.url.includes(".")) { - const { default: Page } = await import("./page.tsx"); - return new Response(await renderToReadableStream(<Page />), { - headers: { - "Content-Type": "text/html", - }, - }); - } - - return new Response( - file(join(import.meta.dir, "./public/", new URL(req.url).pathname)) - ); -} - -serve({ - fetch: liveReload(fetch), - port: 8080, -}); diff --git a/packages/bun-landing/index.css b/packages/bun-landing/styles/global.css index d8cd2798b..d8cd2798b 100644 --- a/packages/bun-landing/index.css +++ b/packages/bun-landing/styles/global.css diff --git a/packages/bun-landing/tsconfig.json b/packages/bun-landing/tsconfig.json index 180b266a1..54b36a1e7 100644 --- a/packages/bun-landing/tsconfig.json +++ b/packages/bun-landing/tsconfig.json @@ -1,10 +1,20 @@ { "compilerOptions": { - "jsx": "react", - "lib": ["ESNext"], + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, "module": "esnext", - "target": "esnext", "moduleResolution": "node", - "types": ["bun-types"] - } -} + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +}
\ No newline at end of file |