aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Lee Robinson <me@leerob.io> 2022-08-05 02:37:34 -0500
committerGravatar GitHub <noreply@github.com> 2022-08-05 00:37:34 -0700
commit95294d245c87bf135c715a46c9559805f39d90ef (patch)
tree2f2794ddb57448737952bfd6b8802b1f9e5bc4fa
parentc5b600ad483b9276e8dc651dd4f35ecd7b56f8a1 (diff)
downloadbun-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/.gitignore43
-rw-r--r--packages/bun-landing/README.md25
-rw-r--r--packages/bun-landing/build.tsx17
-rwxr-xr-xpackages/bun-landing/bun.lockbbin3913 -> 12479 bytes
-rw-r--r--packages/bun-landing/bunfig.toml1
-rw-r--r--packages/bun-landing/components/CodeBlock.tsx15
-rw-r--r--packages/bun-landing/components/Layout.tsx93
-rw-r--r--packages/bun-landing/next.config.js11
-rw-r--r--packages/bun-landing/package.json21
-rw-r--r--packages/bun-landing/pages/_app.tsx6
-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.css915
-rw-r--r--packages/bun-landing/public/index.html980
-rw-r--r--packages/bun-landing/public/ssr.tsx0
-rw-r--r--packages/bun-landing/react-dom-server.bun.production.min.js2082
-rw-r--r--packages/bun-landing/ssr.tsx34
-rw-r--r--packages/bun-landing/styles/global.css (renamed from packages/bun-landing/index.css)0
-rw-r--r--packages/bun-landing/tsconfig.json22
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
index 2303c71d8..c6b3744c9 100755
--- a/packages/bun-landing/bun.lockb
+++ b/packages/bun-landing/bun.lockb
Binary files differ
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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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&#x27;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&#x27; 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> &amp; <!-- --><span target="_blank" class="Tag Tag--React">JSX</span> just work<!-- --></li><li>bun supports <!-- --><code class="">&quot;paths&quot;</code>,<!-- --> <!-- --><code>&quot;jsxImportSource&quot;</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&#x27;s JSX &amp; 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(&quot;dotenv&quot;).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&#x27;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>&#x27;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&#x27;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">&quot;</span><span style="color: #F1FA8C">Welcome to Bun!</span><span style="color: #E9F284">&quot;</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&#x27;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 &amp; TypeScript files with bun&#x27;s JavaScript runtime also runs package.json<!-- --> <!-- --><code class="mono">&quot;scripts&quot;</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 &amp; TypeScript projects built-in to bun.</p><div class="Label"><a href="https://twitter.com/jarredsumner/status/1542824445810642946" target="_blank" class="PerformanceClaim">You&#x27;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