├── example
├── .dev.vars
├── src
│ ├── global.css
│ ├── env.ts
│ ├── durable-objects
│ │ ├── server-components.tsx
│ │ └── counter.ts
│ ├── session.ts
│ ├── components
│ │ └── counter
│ │ │ └── client.tsx
│ ├── durable-objects.ts
│ ├── browser.tsx
│ ├── worker.tsx
│ └── app.tsx
├── postcss.config.js
├── env.d.ts
├── tailwind.config.ts
├── wrangler.js
├── wrangler.dev.toml
├── wrangler.toml
├── tsconfig.json
├── package.json
└── vite.config.ts
├── README.md
├── pnpm-workspace.yaml
├── .gitignore
├── hono-rsc
├── src
│ ├── browser.ts
│ ├── runtime.client.ts
│ ├── runtime.server.ts
│ ├── vite.ts
│ ├── index.ts
│ ├── browser.vite.tsx
│ └── runtime.ts
├── modules.d.ts
├── tsconfig.json
├── tsup.config.ts
├── package.json
└── test.tsx
├── plugin
├── tsconfig.json
├── tsup.config.ts
├── package.json
└── src
│ ├── shared.ts
│ ├── runner.ts
│ ├── durable-object-runner.ts
│ └── index.ts
├── package.json
└── pnpm-lock.yaml
/example/.dev.vars:
--------------------------------------------------------------------------------
1 | COOKIE_SECRET="$uper_$ecret"
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ```sh
2 | pnpm i && pnpm build
3 | cd example
4 | pnpm dev
5 | ```
6 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - example
3 | - hono-rsc
4 | - plugin
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .mf
2 | .wrangler
3 | dist
4 | node_modules
5 | vite.config.ts.timestamp-*
6 |
--------------------------------------------------------------------------------
/example/src/global.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/hono-rsc/src/browser.ts:
--------------------------------------------------------------------------------
1 | import { rscStream } from "rsc-html-stream/client";
2 |
3 | export { rscStream };
4 |
--------------------------------------------------------------------------------
/example/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/hono-rsc/src/runtime.client.ts:
--------------------------------------------------------------------------------
1 | export function registerServerReference(...args: any[]) {
2 | throw new Error("Server references not implemented yet");
3 | }
4 |
--------------------------------------------------------------------------------
/example/env.d.ts:
--------------------------------------------------------------------------------
1 | declare module "__STATIC_CONTENT_MANIFEST" {
2 | const manifest: string;
3 | export default manifest;
4 | }
5 |
6 | declare module "bridge:*" {
7 | const url: string;
8 | export default url;
9 | }
10 |
--------------------------------------------------------------------------------
/example/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | export default {
4 | content: ["./src/**/*.{js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [],
9 | } satisfies Config;
10 |
--------------------------------------------------------------------------------
/example/wrangler.js:
--------------------------------------------------------------------------------
1 | import prerender from "./dist/prerender/worker.js";
2 |
3 | export { Counter } from "./dist/server/durables/counter.js";
4 | export { ServerComponents } from "./dist/server/durables/server-components.js";
5 |
6 | export default prerender;
7 |
--------------------------------------------------------------------------------
/example/src/env.ts:
--------------------------------------------------------------------------------
1 | import type { Counter } from "./durable-objects/counter.js";
2 |
3 | export type Env = {
4 | COOKIE_SECRET: string;
5 | COUNTER: DurableObjectNamespace;
6 | COUNTER_KV: KVNamespace;
7 | SERVER_COMPONENTS: DurableObjectNamespace;
8 | __STATIC_CONTENT?: KVNamespace;
9 | };
10 |
--------------------------------------------------------------------------------
/plugin/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/tsconfig",
3 | "compilerOptions": {
4 | "target": "ES2022",
5 | "module": "Node16",
6 | "moduleResolution": "Node16",
7 | "strict": true,
8 | "noEmit": true,
9 | "skipLibCheck": true,
10 | "types": ["@cloudflare/workers-types"]
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/hono-rsc/modules.d.ts:
--------------------------------------------------------------------------------
1 | declare module "virtual:client-modules" {
2 | const clientModules: Record Promise>>;
3 |
4 | export default clientModules;
5 | }
6 |
7 | declare module "virtual:server-modules" {
8 | const serverModules: Record Promise>>;
9 |
10 | export default serverModules;
11 | }
12 |
--------------------------------------------------------------------------------
/hono-rsc/src/runtime.server.ts:
--------------------------------------------------------------------------------
1 | export function registerClientReference(proxy: any, id: string, name: string) {
2 | return Object.defineProperties(proxy, {
3 | $$typeof: { value: Symbol.for("hono.client.reference") },
4 | $$id: { value: id },
5 | $$name: { value: name },
6 | });
7 | }
8 |
9 | export function registerServerReference(...args: any[]) {
10 | throw new Error("Server references not implemented yet");
11 | }
12 |
--------------------------------------------------------------------------------
/example/wrangler.dev.toml:
--------------------------------------------------------------------------------
1 | main = "src/worker.tsx"
2 | compatibility_date = "2024-05-28"
3 |
4 | [[kv_namespaces]]
5 | binding = "COUNTER_KV"
6 | id = "fdsa"
7 |
8 | [[durable_objects.bindings]]
9 | name = "COUNTER"
10 | class_name = "Counter"
11 |
12 | [[durable_objects.bindings]]
13 | name = "SERVER_COMPONENTS"
14 | class_name = "ServerComponents"
15 |
16 | [[migrations]]
17 | tag = "v1"
18 | new_classes = ["Counter", "ServerComponents"]
19 |
--------------------------------------------------------------------------------
/plugin/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "tsup";
2 |
3 | export default [
4 | defineConfig({
5 | entry: ["src/durable-object-runner.ts"],
6 | format: ["esm"],
7 | platform: "browser",
8 | external: ["cloudflare:workers"],
9 | }),
10 | defineConfig({
11 | entry: ["src/runner.ts"],
12 | format: ["esm"],
13 | platform: "browser",
14 | external: ["cloudflare:workers"],
15 | }),
16 | defineConfig({
17 | entry: ["src/index.ts"],
18 | format: ["esm"],
19 | platform: "node",
20 | dts: true,
21 | external: ["vite", "miniflare", "wrangler"],
22 | }),
23 | ];
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "cf-vite-plugin",
4 | "pnpm": {
5 | "overrides": {
6 | "@cloudflare/kv-asset-handler": "0.3.2",
7 | "@cloudflare/workers-types": "4.20240529.0",
8 | "@types/node": "20.13.0",
9 | "hono": "4.4.2",
10 | "miniflare": "3.20240524.1",
11 | "ts-node": "10.9.2",
12 | "tsup": "8.0.2",
13 | "typescript": "5.4.5",
14 | "wrangler": "3.58.0",
15 | "unplugin-rsc": "0.0.10",
16 | "vite": "6.0.0-alpha.17"
17 | }
18 | },
19 | "scripts": {
20 | "build": "pnpm --recursive build",
21 | "dev": "pnpm --parallel dev"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/example/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "cf-vite-plugin-example"
2 | workers_dev = true
3 | main = "wrangler.js"
4 | compatibility_date = "2024-05-28"
5 |
6 | [build]
7 | command = "pnpm build"
8 |
9 | [site]
10 | bucket = "./dist/browser"
11 |
12 | [[kv_namespaces]]
13 | binding = "COUNTER_KV"
14 | id = "2d5935f2fa4548e9ae24fb06926105a2"
15 |
16 | [[durable_objects.bindings]]
17 | name = "COUNTER"
18 | class_name = "Counter"
19 |
20 | [[durable_objects.bindings]]
21 | name = "SERVER_COMPONENTS"
22 | class_name = "ServerComponents"
23 |
24 | [[migrations]]
25 | tag = "v1"
26 | new_classes = ["Counter"]
27 |
28 | [[migrations]]
29 | tag = "v2"
30 | new_classes = ["ServerComponents"]
31 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/tsconfig",
3 | "include": [
4 | "env.d.ts",
5 | "tailwind.config.ts",
6 | "vite.config.ts",
7 | "wrangler.ts",
8 | "src/**/*"
9 | ],
10 | "compilerOptions": {
11 | "target": "ES2022",
12 | "module": "Node16",
13 | "moduleResolution": "Node16",
14 | "strict": true,
15 | "noEmit": true,
16 | "skipLibCheck": true,
17 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
18 | "types": [
19 | "@cloudflare/workers-types",
20 | "@jacob-ebey/hono-server-components/modules",
21 | "dom-navigation",
22 | "vite/client"
23 | ],
24 | "jsx": "react-jsx",
25 | "jsxImportSource": "hono/jsx"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/hono-rsc/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/tsconfig",
3 | "include": ["src/**/*"],
4 | "compilerOptions": {
5 | "outDir": "dist",
6 | "emitDeclarationOnly": true,
7 | "declaration": true,
8 | "target": "ES2022",
9 | "module": "Node16",
10 | "moduleResolution": "Node16",
11 | "strict": true,
12 | "skipLibCheck": true,
13 | "types": ["./modules.d.ts", "node", "vite/client"],
14 | "jsx": "react-jsx",
15 | "jsxImportSource": "hono/jsx",
16 | "sourceMap": true,
17 | "baseUrl": ".",
18 | "rootDir": "./src",
19 | "paths": {
20 | "@jacob-ebey/hono-server-components/browser": ["./src/browser.ts"],
21 | "@jacob-ebey/hono-server-components/runtime": ["./src/runtime.ts"]
22 | }
23 | },
24 | "ts-node": {
25 | "transpileOnly": true
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/example/src/durable-objects/server-components.tsx:
--------------------------------------------------------------------------------
1 | import type { Env } from "../env.js";
2 | import { app } from "../app.js";
3 |
4 | export class ServerComponents implements DurableObject {
5 | #env: Env;
6 | #state: DurableObjectState;
7 |
8 | constructor(state: DurableObjectState, env: Env) {
9 | this.#state = state;
10 | this.#env = env;
11 | }
12 |
13 | async fetch(request: Request) {
14 | const executionCtx = {
15 | passThroughOnException() {
16 | throw new Error("passThroughOnException not implemented");
17 | },
18 | waitUntil: (promise: Promise) => {
19 | this.#state.waitUntil(promise);
20 | },
21 | };
22 | const res = await app.fetch(
23 | request,
24 | {
25 | ...this.#env,
26 | state: this.#state,
27 | },
28 | executionCtx
29 | );
30 | return res;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/plugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@jacob-ebey/cf-vite-plugin",
3 | "version": "0.0.0-pre.6",
4 | "type": "module",
5 | "files": [
6 | "dist"
7 | ],
8 | "exports": {
9 | ".": {
10 | "types": "./dist/index.d.ts",
11 | "default": "./dist/index.js"
12 | },
13 | "./dist/durable-object-runner.js": "./dist/durable-object-runner.js",
14 | "./dist/runner.js": "./dist/runner.js",
15 | "./package.json": "./package.json"
16 | },
17 | "scripts": {
18 | "dev": "tsup --watch",
19 | "build": "tsup --clean"
20 | },
21 | "dependencies": {
22 | "miniflare": "3.20240524.1",
23 | "wrangler": "3.58.0",
24 | "vite": "6.0.0-alpha.18"
25 | },
26 | "devDependencies": {
27 | "@cloudflare/workers-types": "$cloudflare__workers-types",
28 | "@hattip/adapter-node": "0.0.45",
29 | "@hiogawa/utils": "1.6.4-pre.2",
30 | "@types/node": "$types__node",
31 | "tsup": "$tsup",
32 | "typescript": "$typescript",
33 | "wrangler": "$wrangler"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/example/src/durable-objects/counter.ts:
--------------------------------------------------------------------------------
1 | import { Hono } from "hono";
2 |
3 | import { Env } from "../env.js";
4 |
5 | const app = new Hono<{ Bindings: Env & { state: DurableObjectState } }>()
6 | .get("/value", async ({ env: { state }, json }) => {
7 | const value = (await state.storage.get("value")) || 0;
8 | return json(value);
9 | })
10 | .post("/increment", async ({ env: { state }, json }) => {
11 | const value = (await state.storage.get("value")) || 0;
12 | const newValue = value + 1;
13 | await state.storage.put("value", newValue);
14 | return json(newValue);
15 | });
16 |
17 | export class Counter implements DurableObject {
18 | #env: Env;
19 | #state: DurableObjectState;
20 |
21 | constructor(state: DurableObjectState, env: Env) {
22 | this.#state = state;
23 | this.#env = env;
24 | }
25 |
26 | async fetch(request: Request) {
27 | return app.fetch(request, {
28 | ...this.#env,
29 | state: this.#state,
30 | });
31 | }
32 | }
33 |
34 | export type CounterAPI = typeof app;
35 |
--------------------------------------------------------------------------------
/plugin/src/shared.ts:
--------------------------------------------------------------------------------
1 | import type { ModuleRunner } from "vite/module-runner";
2 |
3 | export const RUNNER_INIT_PATH = "/__viteInit";
4 | export const RUNNER_EVAL_PATH = "/__viteEval";
5 | export const ANY_URL = "https://any.local";
6 |
7 | export type RunnerEnv = {
8 | __viteRoot: string;
9 | __viteUnsafeEval: {
10 | eval: (code: string, filename?: string) => any;
11 | };
12 | __viteFetchModule: {
13 | fetch: (request: Request) => Promise;
14 | };
15 | __viteRunner: DurableObject;
16 | };
17 |
18 | export type RunnerFetchMetadata = {
19 | entry: string;
20 | };
21 |
22 | export type DurableObjectRunnerFetchMetadata = {
23 | entry: string;
24 | };
25 |
26 | export type EvalFn = (ctx: {
27 | mod: any;
28 | data?: In;
29 | env: any;
30 | runner: ModuleRunner;
31 | }) => Promise | Out;
32 |
33 | export type EvalApi = (request: {
34 | entry: string;
35 | data?: In;
36 | fn: EvalFn;
37 | }) => Promise>;
38 |
39 | export type EvalMetadata = {
40 | entry: string;
41 | fnString: string;
42 | };
43 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "private": true,
4 | "version": "1.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite dev",
8 | "build": "vite build --app && tsc",
9 | "start": "wrangler dev --local wrangler.js",
10 | "deploy": "wrangler publish"
11 | },
12 | "dependencies": {
13 | "@cloudflare/kv-asset-handler": "$cloudflare__kv-asset-handler",
14 | "@jacob-ebey/hono-server-components": "workspace:*",
15 | "hono": "$hono",
16 | "workers-swr": "0.0.8"
17 | },
18 | "devDependencies": {
19 | "@cloudflare/workers-types": "$cloudflare__workers-types",
20 | "@hattip/adapter-node": "0.0.45",
21 | "@jacob-ebey/cf-vite-plugin": "workspace:*",
22 | "@preact/preset-vite": "2.8.2",
23 | "@types/dom-navigation": "1.0.3",
24 | "@types/node": "$types__node",
25 | "@vitejs/plugin-react": "4.3.0",
26 | "autoprefixer": "10.4.19",
27 | "postcss": "8.4.38",
28 | "tailwindcss": "3.4.3",
29 | "typescript": "$typescript",
30 | "unplugin-rsc": "$unplugin-rsc",
31 | "vite": "$vite",
32 | "wrangler": "$wrangler"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/example/src/session.ts:
--------------------------------------------------------------------------------
1 | import type { Context } from "hono";
2 | import { getSignedCookie, setSignedCookie } from "hono/cookie";
3 | import { createMiddleware } from "hono/factory";
4 |
5 | import { durableObjectsMiddleware } from "./durable-objects.js";
6 |
7 | export type SessionVariables = {
8 | sessionId: string;
9 | };
10 |
11 | type HonoEnv = {
12 | Bindings: {
13 | COOKIE_SECRET: string;
14 | };
15 | Variables: SessionVariables;
16 | };
17 |
18 | export const sessionMiddleware = createMiddleware(async (c, next) => {
19 | const session = await getSignedCookie(c, c.env.COOKIE_SECRET, "_session");
20 | c.set("sessionId", session || "global");
21 |
22 | await next();
23 | });
24 |
25 | export async function setSessionId(c: Context, sessionId: string) {
26 | c.set("sessionId", sessionId);
27 | await setSignedCookie(c, "_session", sessionId, c.env.COOKIE_SECRET, {
28 | httpOnly: true,
29 | path: "/",
30 | sameSite: "lax",
31 | secure: c.req.url.startsWith("https://") || c.req.url.startsWith("wss://"),
32 | });
33 | await durableObjectsMiddleware(c, () => Promise.resolve());
34 | }
35 |
--------------------------------------------------------------------------------
/example/src/components/counter/client.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useState } from "hono/jsx";
4 |
5 | export function Counter({ initialCount }: { initialCount: number }) {
6 | const [count, setCount] = useState(initialCount);
7 |
8 | return (
9 |
10 |
11 |
12 |
13 | Yo yo yo!
14 |
15 |
16 | Count: {count}
17 |
18 |
19 | This shit actually works!
20 |
21 |
22 |
23 |
24 |
31 |
32 |
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/hono-rsc/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import * as fsp from "fs/promises";
2 |
3 | import { defineConfig } from "tsup";
4 |
5 | export default [
6 | defineConfig({
7 | entry: ["src/runtime.ts"],
8 | format: ["esm"],
9 | platform: "neutral",
10 | dts: false,
11 | external: ["hono/jsx", "hono/utils/html"],
12 | }),
13 | defineConfig({
14 | entry: ["src/runtime.client.ts"],
15 | format: ["esm"],
16 | platform: "neutral",
17 | dts: false,
18 | }),
19 | defineConfig({
20 | entry: ["src/runtime.server.ts"],
21 | format: ["esm"],
22 | platform: "neutral",
23 | dts: false,
24 | }),
25 | defineConfig({
26 | entry: ["src/browser.ts"],
27 | format: ["esm"],
28 | platform: "browser",
29 | dts: false,
30 | }),
31 | defineConfig({
32 | entry: ["src/browser.vite.tsx"],
33 | format: ["esm"],
34 | platform: "browser",
35 | dts: false,
36 | external: [
37 | "@jacob-ebey/hono-server-components/browser",
38 | "@jacob-ebey/hono-server-components/runtime",
39 | "virtual:client-modules",
40 | ],
41 | }),
42 | defineConfig({
43 | entry: ["src/vite.ts"],
44 | format: ["esm"],
45 | platform: "node",
46 | dts: false,
47 | external: ["@jacob-ebey/hono-server-components/runtime", "unplugin-rsc"],
48 | }),
49 | defineConfig({
50 | entry: ["src/index.ts"],
51 | format: ["esm"],
52 | platform: "neutral",
53 | dts: false,
54 | external: [
55 | "@jacob-ebey/hono-server-components/runtime",
56 | "hono",
57 | "hono/factory",
58 | "hono/html",
59 | "hono/jsx",
60 | "hono/jsx-renderer",
61 | "hono/jsx/streaming",
62 | "hono/utils/html",
63 | ],
64 | }),
65 | ];
66 |
--------------------------------------------------------------------------------
/hono-rsc/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@jacob-ebey/hono-server-components",
3 | "version": "0.0.0-pre.1",
4 | "type": "module",
5 | "exports": {
6 | ".": {
7 | "types": "./dist/index.d.ts",
8 | "default": "./dist/index.js"
9 | },
10 | "./browser": {
11 | "types": "./dist/browser.d.ts",
12 | "default": "./dist/browser.js"
13 | },
14 | "./browser.vite": {
15 | "types": "./dist/browser.vite.d.ts",
16 | "default": "./dist/browser.vite.js"
17 | },
18 | "./modules": "./modules.d.ts",
19 | "./runtime": {
20 | "types": "./dist/runtime.d.ts",
21 | "default": "./dist/runtime.js"
22 | },
23 | "./runtime.client": {
24 | "types": "./dist/runtime.client.d.ts",
25 | "default": "./dist/runtime.client.js"
26 | },
27 | "./runtime.server": {
28 | "types": "./dist/runtime.server.d.ts",
29 | "default": "./dist/runtime.server.js"
30 | },
31 | "./vite": {
32 | "types": "./dist/vite.d.ts",
33 | "default": "./dist/vite.js"
34 | },
35 | "./package.json": "./package.json"
36 | },
37 | "scripts": {
38 | "dev": "tsup --watch",
39 | "build": "tsup --clean && tsc",
40 | "test": "node --no-warnings --loader ts-node/esm ./test.tsx"
41 | },
42 | "peerDependencies": {
43 | "unplugin-rsc": "$unplugin-rsc",
44 | "vite": "$vite"
45 | },
46 | "peerDependenciesMeta": {
47 | "unplugin-rsc": {
48 | "optional": true
49 | },
50 | "vite": {
51 | "optional": true
52 | }
53 | },
54 | "dependencies": {
55 | "hono": "$hono"
56 | },
57 | "devDependencies": {
58 | "@hono/node-server": "1.11.2",
59 | "@types/node": "$types__node",
60 | "rsc-html-stream": "0.0.3",
61 | "ts-node": "$ts-node",
62 | "tsup": "$tsup",
63 | "turbo-stream": "2.1.0",
64 | "typescript": "$typescript"
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/example/src/durable-objects.ts:
--------------------------------------------------------------------------------
1 | import type { Hono, Schema } from "hono";
2 | import type { ClientRequest } from "hono/client";
3 | import { hc } from "hono/client";
4 | import { createMiddleware } from "hono/factory";
5 | import { UnionToIntersection } from "hono/utils/types";
6 |
7 | import type { CounterAPI } from "./durable-objects/counter.js";
8 | import type { Env } from "./env.js";
9 | import type { SessionVariables } from "./session.js";
10 |
11 | export const durableObjectsMiddleware = createMiddleware<{
12 | Bindings: Env;
13 | Variables: SessionVariables & {
14 | counter: DurableClient;
15 | };
16 | }>(async ({ env: { COUNTER }, get, set }, next) => {
17 | set(
18 | "counter",
19 | createDurableClient(
20 | COUNTER.get(COUNTER.idFromName(get("sessionId")))
21 | )
22 | );
23 | return next();
24 | });
25 |
26 | type PathToChain<
27 | Path extends string,
28 | E extends Schema,
29 | Original extends string = ""
30 | > = Path extends `/${infer P}`
31 | ? PathToChain
32 | : Path extends `${infer P}/${infer R}`
33 | ? {
34 | [K in P]: PathToChain;
35 | }
36 | : {
37 | [K in Path extends "" ? "index" : Path]: ClientRequest<
38 | E extends Record ? E[Original] : never
39 | >;
40 | };
41 |
42 | type DurableClient = UnionToIntersection<
43 | T extends Hono
44 | ? S extends Record
45 | ? K extends string
46 | ? PathToChain
47 | : never
48 | : never
49 | : never
50 | >;
51 |
52 | function createDurableClient>(
53 | durable?: DurableObjectStub
54 | ) {
55 | return hc("https://durable-object/", {
56 | fetch: (info: RequestInfo | URL, init?: RequestInit) => {
57 | if (!durable) {
58 | throw new Error("Durable Object not available");
59 | }
60 | if (info instanceof URL) {
61 | info = info.href;
62 | }
63 | return durable.fetch(info, init);
64 | },
65 | });
66 | }
67 |
--------------------------------------------------------------------------------
/example/src/browser.tsx:
--------------------------------------------------------------------------------
1 | import type { Child } from "hono/jsx";
2 | import {
3 | jsx,
4 | render,
5 | useState,
6 | startTransition,
7 | useEffect,
8 | use,
9 | Suspense
10 | } from "hono/jsx/dom";
11 |
12 | import { decode } from "@jacob-ebey/hono-server-components/runtime";
13 | import { rscStream } from "@jacob-ebey/hono-server-components/browser";
14 |
15 | import clientModules from "virtual:client-modules";
16 |
17 | let updateRoot: (root: Promise) => void;
18 | function DocumentHydrator({ initialRoot }: { initialRoot: Promise }) {
19 | let [root, setRoot] = useState(initialRoot);
20 | // useEffect(() => {
21 | updateRoot = (newRoot) => {
22 | startTransition(() => {
23 | try {
24 | setRoot(newRoot);
25 | } catch (reason) {
26 | console.log({ reason });
27 | if (
28 | typeof reason === "object" &&
29 | reason &&
30 | "then" in reason &&
31 | typeof reason.then === "function"
32 | ) {
33 | reason.then(
34 | () => updateRoot(newRoot),
35 | () => {}
36 | );
37 |
38 | return;
39 | }
40 | throw reason;
41 | }
42 | });
43 | };
44 | // }, [setRoot]);
45 | // console.log({ root });
46 | return {use(root)};
47 | }
48 |
49 | const decodePromise = decode(rscStream, {
50 | loadClientModule(id) {
51 | if (import.meta.env.PROD) {
52 | return clientModules[id]();
53 | }
54 | return import(/* @vite-ignore */ id);
55 | },
56 | }).then((decoded) => decoded.value as Child);
57 |
58 | render(
59 | ,
60 | document.getElementById("app")!
61 | );
62 |
63 | let abortController = new AbortController();
64 | // hydrateDocument().then(({ render }) => {
65 | window.navigation.addEventListener("navigate", (event) => {
66 | if (!event.canIntercept || event.hashChange || event.downloadRequest) {
67 | return;
68 | }
69 |
70 | // Check if the URL is on the same origin.
71 | const url = new URL(event.destination.url);
72 | if (url.origin !== location.origin) {
73 | return;
74 | }
75 |
76 | console.log("INERCEPTED", event)
77 |
78 | event.intercept({
79 | focusReset: "after-transition",
80 | async handler() {
81 | const toAbort = abortController;
82 | abortController = new AbortController();
83 | const signal = abortController.signal;
84 |
85 | const response = await fetch(url, {
86 | headers: {
87 | RSC: "1",
88 | },
89 | credentials: "same-origin",
90 | signal,
91 | method: event.formData ? "POST" : "GET",
92 | body: event.formData,
93 | });
94 | if (!response.body) {
95 | throw new Error("No RSC body");
96 | }
97 |
98 | const decoded = await decode(response.body, {
99 | loadClientModule(id) {
100 | if (import.meta.env.PROD) {
101 | return clientModules[id]();
102 | }
103 | return import(/* @vite-ignore */ id);
104 | },
105 | });
106 | decoded.done.catch(() => {});
107 | updateRoot(Promise.resolve(decoded.value as Child));
108 |
109 | toAbort.abort();
110 | await decoded.done;
111 | },
112 | });
113 | });
114 | // });
115 |
--------------------------------------------------------------------------------
/example/src/worker.tsx:
--------------------------------------------------------------------------------
1 | import { rscConsumer } from "@jacob-ebey/hono-server-components";
2 | import { Hono } from "hono";
3 |
4 | import clientModules from "virtual:client-modules";
5 |
6 | import { durableObjectsMiddleware } from "./durable-objects.js";
7 | import type { Env } from "./env.js";
8 | import type { SessionVariables } from "./session.js";
9 | import { sessionMiddleware } from "./session.js";
10 |
11 | import browserEntry from "bridge:./browser.js";
12 | import stylesEntry from "bridge:./global.css";
13 |
14 | type HonoEnv = { Bindings: Env; Variables: SessionVariables };
15 |
16 | function Entry({ entry }: { entry: string }) {
17 | const baseId = entry.replace(/\?.*$/, "");
18 | if (import.meta.env.PROD && baseId.endsWith(".css")) {
19 | return ;
20 | }
21 | return ;
22 | }
23 |
24 | const app = new Hono()
25 | .use(sessionMiddleware)
26 | .use(durableObjectsMiddleware)
27 | .use(
28 | rscConsumer({
29 | fetchRSC({ env: { SERVER_COMPONENTS }, get, req }) {
30 | const stub = SERVER_COMPONENTS.get(
31 | SERVER_COMPONENTS.idFromName(get("sessionId"))
32 | );
33 |
34 | return stub.fetch(req.raw);
35 | },
36 | loadClientModule: import.meta.env.PROD
37 | ? (id) => {
38 | return clientModules[id]();
39 | }
40 | : undefined,
41 | Layout: ({ children }) => (
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | -
50 | Home
51 |
52 | -
53 | About
54 |
55 |
56 | {children}
57 |
58 |
59 |
60 | ),
61 | })
62 | );
63 |
64 | export default {
65 | async fetch(request, env, ctx) {
66 | const url = new URL(request.url);
67 | if (
68 | import.meta.env.PROD &&
69 | env.__STATIC_CONTENT &&
70 | url.pathname.startsWith("/assets/")
71 | ) {
72 | try {
73 | const [{ default: manifestJSON }, { getAssetFromKV }] =
74 | await Promise.all([
75 | import("__STATIC_CONTENT_MANIFEST"),
76 | import("@cloudflare/kv-asset-handler"),
77 | ]);
78 | const assetManifest = JSON.parse(manifestJSON);
79 | const ext = url.pathname.split(".").pop();
80 | return await getAssetFromKV(
81 | {
82 | request,
83 | waitUntil: ctx.waitUntil.bind(ctx),
84 | },
85 | {
86 | ASSET_NAMESPACE: env.__STATIC_CONTENT,
87 | ASSET_MANIFEST: assetManifest,
88 | cacheControl: [".css", ".js"].includes(ext || "")
89 | ? {
90 | // 1 year
91 | browserTTL: 31536000,
92 | edgeTTL: 31536000,
93 | }
94 | : {
95 | // 1 minute
96 | browserTTL: 60,
97 | edgeTTL: 60,
98 | },
99 | }
100 | );
101 | } catch (e) {}
102 | }
103 |
104 | return app.fetch(request, env, ctx);
105 | },
106 | } satisfies ExportedHandler;
107 |
--------------------------------------------------------------------------------
/example/src/app.tsx:
--------------------------------------------------------------------------------
1 | import { rscRenderer } from "@jacob-ebey/hono-server-components";
2 | import { Hono } from "hono";
3 | import { Suspense } from "hono/jsx";
4 | import { withSWR } from "workers-swr";
5 |
6 | import { durableObjectsMiddleware } from "./durable-objects.js";
7 | import type { Env } from "./env.js";
8 | import { Counter } from "./components/counter/client.js";
9 | import type { SessionVariables } from "./session.js";
10 | import { sessionMiddleware, setSessionId } from "./session.js";
11 |
12 | async function AsyncHello() {
13 | await new Promise((resolve) => setTimeout(resolve, Math.random() * 1000));
14 | return Hello, World!
;
15 | }
16 |
17 | export const app = new Hono<{
18 | Bindings: Env & { state: DurableObjectState };
19 | Variables: SessionVariables;
20 | }>()
21 | .use(sessionMiddleware)
22 | .use(durableObjectsMiddleware)
23 | .use(
24 | rscRenderer(({ children }) => (
25 | <>
26 |
27 | -
28 | Home
29 |
30 | -
31 | About
32 |
33 |
34 | {children}
35 | >
36 | ))
37 | )
38 | .on(["GET", "POST"], "/", async (c) => {
39 | const { env, executionCtx, get, header, render, req } = c;
40 |
41 | return withSWR(async () => {
42 | if (req.method === "POST") {
43 | const formData = await req.formData();
44 | const email = String(formData.get("email") || "");
45 | if (email) {
46 | await setSessionId(c, email);
47 | }
48 | } else {
49 | header("Cache-Control", "s-maxage=5, stale-while-revalidate=1");
50 | header("Vary", "Cookie");
51 | }
52 |
53 | const count = await get("counter")
54 | .value.$get()
55 | .then((res) => res.json());
56 |
57 | return render(
58 |
59 |
60 |
Hello, World!!
61 |
62 |
Suspended...}>
63 |
64 |
65 |
66 |
70 |
71 | );
72 | })(req.raw, env, executionCtx);
73 | })
74 | .on(
75 | ["GET", "POST"],
76 | "/about",
77 | async ({ env, executionCtx, get, render, req }) => {
78 | return withSWR(async () => {
79 | const id =
80 | (
81 | req.raw as {
82 | cf?: IncomingRequestCfProperties;
83 | }
84 | ).cf?.country || "global";
85 |
86 | if (req.method === "POST") {
87 | await get("counter").increment.$post();
88 | }
89 |
90 | const count = await get("counter")
91 | .value.$get()
92 | .then((res) => res.json());
93 |
94 | return render(
95 |
96 |
97 |
About!!
98 |
99 |
Suspended...}>
100 |
101 |
102 |
105 |
106 |
107 | );
108 | })(req.raw, env, executionCtx);
109 | }
110 | );
111 |
--------------------------------------------------------------------------------
/hono-rsc/src/vite.ts:
--------------------------------------------------------------------------------
1 | import * as path from "path";
2 |
3 | import type { Plugin } from "vite";
4 | import { clientTransform, serverTransform } from "unplugin-rsc";
5 |
6 | declare global {
7 | var rscSingleton: {
8 | clientModules: Set;
9 | serverModules: Set;
10 | };
11 | }
12 |
13 | global.rscSingleton = global.rscSingleton ?? {
14 | clientModules: new Set(),
15 | serverModules: new Set(),
16 | };
17 |
18 | export const rscSingleton = global.rscSingleton;
19 |
20 | function virtualModule(id: string) {
21 | return {
22 | id,
23 | resolvedId: `\0${id}`,
24 | url: `/@id/__x00__${id}`,
25 | };
26 | }
27 |
28 | const virtualClientModules = virtualModule("virtual:client-modules");
29 | const virtualServerModules = virtualModule("virtual:server-modules");
30 |
31 | export type ServerComponentsPluginOptions = {
32 | serverEnvironments: string[];
33 | };
34 |
35 | export default function serverComponentsPlugin({
36 | serverEnvironments,
37 | }: ServerComponentsPluginOptions): Plugin {
38 | return {
39 | name: "hono-server-components",
40 | transform(code, id) {
41 | if (!this.environment) return;
42 |
43 | const [filepath] = id.split("?");
44 | const ext = path.extname(filepath);
45 | if (![".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"].includes(ext)) {
46 | return;
47 | }
48 |
49 | const hash =
50 | this.environment.config.command !== "build" ? devHash : prodHash;
51 |
52 | if (serverEnvironments.includes(this.environment.name)) {
53 | return serverTransform(code, id, {
54 | id: hash,
55 | importClient: "registerClientReference",
56 | importFrom: "@jacob-ebey/hono-server-components/runtime.server",
57 | importServer: "registerServerReference",
58 | });
59 | } else {
60 | return clientTransform(code, id, {
61 | id: hash,
62 | importFrom: "@jacob-ebey/hono-server-components/runtime.client",
63 | importServer: "registerServerReference",
64 | });
65 | }
66 | },
67 | resolveId(id) {
68 | if (id === virtualClientModules.id) {
69 | return virtualClientModules.resolvedId;
70 | }
71 | },
72 | load(id) {
73 | if (!this.environment) return;
74 | const hash =
75 | this.environment.config.command !== "build" ? devHash : prodHash;
76 |
77 | if (id === virtualClientModules.resolvedId) {
78 | const r = `export default {
79 | ${Array.from(rscSingleton.clientModules)
80 | .map(
81 | (mod) =>
82 | `[${JSON.stringify(
83 | hash(mod, "use client")
84 | )}]: () => import(${JSON.stringify(mod)}),`
85 | )
86 | .join("\n")}
87 | };`;
88 | return r;
89 | }
90 | },
91 | };
92 | }
93 |
94 | function prodHash(str: string, type: "use client" | "use server") {
95 | switch (type) {
96 | case "use client":
97 | global.rscSingleton.clientModules.add(str);
98 | break;
99 | case "use server":
100 | global.rscSingleton.serverModules.add(str);
101 | break;
102 | }
103 | return `/${path.relative(process.cwd(), str)}`;
104 | }
105 |
106 | function devHash(str: string, type: "use client" | "use server") {
107 | switch (type) {
108 | case "use client":
109 | global.rscSingleton.clientModules.add(str);
110 | break;
111 | case "use server":
112 | global.rscSingleton.serverModules.add(str);
113 | break;
114 | }
115 |
116 | const resolved = path.resolve(str);
117 | let unixPath = resolved.replace(/\\/g, "/");
118 | if (!unixPath.startsWith("/")) {
119 | unixPath = `/${unixPath}`;
120 | }
121 | if (resolved.startsWith(process.cwd())) {
122 | return `/${path.relative(process.cwd(), unixPath)}`;
123 | }
124 | return `/@fs${unixPath}`;
125 | }
126 |
--------------------------------------------------------------------------------
/hono-rsc/src/index.ts:
--------------------------------------------------------------------------------
1 | import type { Context, Env } from "hono";
2 | import { createMiddleware } from "hono/factory";
3 | import { html } from "hono/html";
4 | import type { Child, FC, JSXNode } from "hono/jsx";
5 | import { Fragment, jsx } from "hono/jsx";
6 | import { RequestContext } from "hono/jsx-renderer";
7 | import { renderToReadableStream } from "hono/jsx/streaming";
8 | import type { HtmlEscapedString } from "hono/utils/html";
9 | import { raw } from "hono/utils/html";
10 | import { injectRSCPayload } from "rsc-html-stream/server";
11 |
12 | import { decode, encode } from "@jacob-ebey/hono-server-components/runtime";
13 |
14 | function defaultLoadClientModule(id: string) {
15 | return import(/* @vite-ignore */ id);
16 | }
17 |
18 | export function rscRenderer(Component?: FC<{ children: Child }>) {
19 | return createMiddleware(async (c, next) => {
20 | const Layout = (c.getLayout() ?? Fragment) as FC;
21 | if (Component) {
22 | c.setLayout((props) => {
23 | return Component(
24 | { ...props, Layout },
25 | // @ts-expect-error - This is to satisfy Hono's runtime API
26 | c
27 | );
28 | });
29 | }
30 | c.setRenderer(createRenderer(c, Layout, Component) as any);
31 | return next();
32 | });
33 | }
34 |
35 | export type LoadClientModuleFunction = (
36 | id: string
37 | ) => Promise>;
38 |
39 | export function rscConsumer({
40 | fetchRSC,
41 | Layout,
42 | loadClientModule,
43 | }: {
44 | fetchRSC: (c: Context) => Promise;
45 | Layout?: FC<{ children: Child }>;
46 | loadClientModule?: LoadClientModuleFunction;
47 | }) {
48 | return createMiddleware(async (c, next) => {
49 | const response = await fetchRSC(c as unknown as Context);
50 | if (!response.body) {
51 | throw new Error("No body in RSC response");
52 | }
53 |
54 | for (const [key, value] of response.headers) {
55 | if (key.toLowerCase() === "set-cookie") continue;
56 | c.header(key, value, { append: true });
57 | }
58 | for (const cookie of response.headers.getSetCookie()) {
59 | c.header("Set-Cookie", cookie, { append: true });
60 | }
61 | c.header("Vary", "RSC", { append: true });
62 |
63 | if (c.req.header("RSC") === "1") {
64 | return c.body(response.body);
65 | }
66 | const [rscStreamA, rscStreamB] = response.body.tee();
67 |
68 | const decoded = await decode(rscStreamA, {
69 | loadClientModule: loadClientModule || defaultLoadClientModule,
70 | });
71 | c.executionCtx.waitUntil(decoded.done.catch(() => {}));
72 |
73 | let children = decoded.value as HtmlEscapedString;
74 | if (Layout) {
75 | children = jsx(Layout, {}, children) as unknown as HtmlEscapedString;
76 | }
77 |
78 | const body = html`${raw("")}${jsx(
79 | RequestContext.Provider,
80 | { value: c },
81 | children
82 | )}`;
83 |
84 | c.header("Transfer-Encoding", "chunked");
85 | c.header("Content-Type", "text/html; charset=UTF-8");
86 |
87 | const htmlStream = renderToReadableStream(body, console.error);
88 |
89 | return c.body(htmlStream.pipeThrough(injectRSCPayload(rscStreamB)));
90 | });
91 | }
92 |
93 | function createRenderer(
94 | c: Context,
95 | Layout: FC,
96 | Component?: FC<{ children: Child }>
97 | ) {
98 | return async (children: JSXNode) => {
99 | const currentLayout = Component
100 | ? jsx(
101 | (props: any) =>
102 | Component(
103 | props,
104 | // @ts-expect-error - This is to satisfy Hono's runtime APIƒ
105 | c
106 | ),
107 | {
108 | Layout,
109 | },
110 | children as any
111 | )
112 | : children;
113 |
114 | const rscStream = encode(currentLayout);
115 |
116 | c.header("Transfer-Encoding", "chunked");
117 | c.header("Content-Type", "text/x-component; charset=UTF-8");
118 | return c.body(rscStream);
119 | };
120 | }
121 |
--------------------------------------------------------------------------------
/plugin/src/runner.ts:
--------------------------------------------------------------------------------
1 | import { objectPickBy, tinyassert } from "@hiogawa/utils";
2 | import { ModuleRunner } from "vite/module-runner";
3 |
4 | import type {
5 | EvalFn,
6 | EvalMetadata,
7 | RunnerFetchMetadata,
8 | RunnerEnv,
9 | } from "./shared.js";
10 | import { ANY_URL, RUNNER_EVAL_PATH, RUNNER_INIT_PATH } from "./shared.js";
11 |
12 | export class RunnerObject implements DurableObject {
13 | #env: RunnerEnv;
14 | #runner?: ModuleRunner;
15 |
16 | constructor(_state: DurableObjectState, env: RunnerEnv) {
17 | this.#env = env;
18 | }
19 |
20 | async fetch(request: Request) {
21 | try {
22 | return await this.#fetch(request);
23 | } catch (e) {
24 | console.error(e);
25 | let body = "[vite workerd runner error]\n";
26 | if (e instanceof Error) {
27 | body += `${e.stack ?? e.message}`;
28 | }
29 | return new Response(body, { status: 500 });
30 | }
31 | }
32 |
33 | async #fetch(request: Request) {
34 | const url = new URL(request.url);
35 |
36 | if (url.pathname === RUNNER_INIT_PATH) {
37 | const pair = new WebSocketPair();
38 | (pair[0] as any).accept();
39 | tinyassert(!this.#runner);
40 | this.#runner = createRunner(this.#env, pair[0]);
41 | return new Response(null, { status: 101, webSocket: pair[1] });
42 | }
43 |
44 | if (url.pathname === RUNNER_EVAL_PATH) {
45 | tinyassert(this.#runner);
46 | const meta = JSON.parse(
47 | request.headers.get("x-vite-eval")!
48 | ) as EvalMetadata;
49 | const mod = await this.#runner.import(meta.entry);
50 | const data = await request.json();
51 | const env = objectPickBy(this.#env, (_v, k) => !k.startsWith("__vite"));
52 | const fn: EvalFn = this.#env.__viteUnsafeEval.eval(
53 | `() => ${meta.fnString}`
54 | )();
55 | const result = await fn({ mod, data, env, runner: this.#runner });
56 | const body = JSON.stringify(result ?? null);
57 | return new Response(body);
58 | }
59 |
60 | tinyassert(this.#runner);
61 | const options = JSON.parse(
62 | request.headers.get("x-vite-fetch")!
63 | ) as RunnerFetchMetadata;
64 | const mod = await this.#runner.import(options.entry);
65 | const handler = mod.default as ExportedHandler;
66 | tinyassert(handler.fetch);
67 |
68 | return handler.fetch(request, this.#env, {
69 | waitUntil(_promise: Promise) {},
70 | passThroughOnException() {},
71 | // TODO: This might be needed. Try it out.
72 | // abort(_reason?: any) {},
73 | });
74 | }
75 | }
76 |
77 | export function createRunner(env: RunnerEnv, webSocket: WebSocket) {
78 | return new ModuleRunner(
79 | {
80 | root: env.__viteRoot,
81 | sourcemapInterceptor: "prepareStackTrace",
82 | transport: {
83 | fetchModule: async (...args) => {
84 | const response = await env.__viteFetchModule.fetch(
85 | new Request(ANY_URL, {
86 | method: "POST",
87 | body: JSON.stringify(args),
88 | })
89 | );
90 | tinyassert(response.ok);
91 | const result = response.json();
92 | return result as any;
93 | },
94 | },
95 | hmr: {
96 | connection: {
97 | isReady: () => true,
98 | onUpdate(callback) {
99 | webSocket.addEventListener("message", (event) => {
100 | callback(JSON.parse(event.data));
101 | });
102 | },
103 | send(messages) {
104 | webSocket.send(JSON.stringify(messages));
105 | },
106 | },
107 | },
108 | },
109 | {
110 | runInlinedModule: async (context, transformed, id) => {
111 | const codeDefinition = `'use strict';async (${Object.keys(context).join(
112 | ","
113 | )})=>{{`;
114 | const code = `${codeDefinition}${transformed}\n}}`;
115 | const fn = env.__viteUnsafeEval.eval(code, id);
116 | await fn(...Object.values(context));
117 | Object.freeze(context.__vite_ssr_exports__);
118 | },
119 | async runExternalModule(filepath) {
120 | console.log("[runExternalModule]", filepath);
121 | return import(filepath);
122 | },
123 | }
124 | );
125 | }
126 |
--------------------------------------------------------------------------------
/plugin/src/durable-object-runner.ts:
--------------------------------------------------------------------------------
1 | import { tinyassert } from "@hiogawa/utils";
2 | import { ModuleRunner } from "vite/module-runner";
3 |
4 | import type { DurableObjectRunnerFetchMetadata, RunnerEnv } from "./shared.js";
5 | import { ANY_URL, RUNNER_INIT_PATH } from "./shared.js";
6 |
7 | const environment = "___ENVIRONMENT___";
8 | const exported = "___EXPORTED___";
9 |
10 | declare global {
11 | var runner___ENVIRONMENT___: ModuleRunner | undefined;
12 | var options___ENVIRONMENT______EXPORTED___:
13 | | DurableObjectRunnerFetchMetadata
14 | | undefined;
15 | }
16 |
17 | globalThis[`runner${environment}`] =
18 | globalThis[`runner${environment}`] || undefined;
19 | globalThis[`options${environment}${exported}`] =
20 | globalThis[`options${environment}${exported}`] || undefined;
21 |
22 | export class DurableObjectRunnerObject implements DurableObject {
23 | #state: DurableObjectState;
24 | #env: RunnerEnv;
25 | // #instanceType?: unknown;
26 | // #instance?: DurableObject;
27 |
28 | constructor(state: DurableObjectState, env: RunnerEnv) {
29 | this.#state = state;
30 | this.#env = env;
31 | }
32 |
33 | async fetch(request: Request) {
34 | try {
35 | return await this.#fetch(request);
36 | } catch (e) {
37 | console.error(e);
38 | let body = "[vite workerd durable object runner error]\n";
39 | if (e instanceof Error) {
40 | body += `${e.stack ?? e.message}`;
41 | }
42 | return new Response(body, { status: 500 });
43 | }
44 | }
45 |
46 | async alarm(): Promise {
47 | const instance = await this.#getInstance();
48 | return instance.alarm?.();
49 | }
50 |
51 | async webSocketClose(
52 | ws: WebSocket,
53 | code: number,
54 | reason: string,
55 | wasClean: boolean
56 | ): Promise {
57 | const instance = await this.#getInstance();
58 | return instance.webSocketClose?.(ws, code, reason, wasClean);
59 | }
60 |
61 | async webSocketError(ws: WebSocket, error: unknown): Promise {
62 | const instance = await this.#getInstance();
63 | return instance.webSocketError?.(ws, error);
64 | }
65 |
66 | async webSocketMessage(
67 | ws: WebSocket,
68 | message: string | ArrayBuffer
69 | ): Promise {
70 | const instance = await this.#getInstance();
71 | return instance.webSocketMessage?.(ws, message);
72 | }
73 |
74 | async #getInstance(): Promise {
75 | const runner = globalThis[`runner${environment}`] as ModuleRunner;
76 | const options = globalThis[
77 | `options${environment}${exported}`
78 | ] as DurableObjectRunnerFetchMetadata;
79 | tinyassert(runner, "missing runner");
80 | tinyassert(options, "missing options");
81 | const mod = await runner.import(options.entry);
82 | const CLASS = mod[exported];
83 | tinyassert(CLASS, `missing durable object class class ${exported}`);
84 | const instance = new CLASS(this.#state, this.#env);
85 | return instance;
86 | }
87 |
88 | async #fetch(request: Request) {
89 | const url = new URL(request.url);
90 |
91 | if (url.pathname === RUNNER_INIT_PATH) {
92 | const pair = new WebSocketPair();
93 | (pair[0] as any).accept();
94 | if (!globalThis[`runner${environment}`]) {
95 | globalThis[`runner${environment}`] = createRunner(this.#env, pair[0]);
96 | }
97 | globalThis[`options${environment}${exported}`] = JSON.parse(
98 | request.headers.get("x-vite-fetch")!
99 | ) as DurableObjectRunnerFetchMetadata;
100 | return new Response(null, { status: 101, webSocket: pair[1] });
101 | }
102 |
103 | const instance = await this.#getInstance();
104 | return instance.fetch(request);
105 | }
106 | }
107 |
108 | export function createRunner(env: RunnerEnv, webSocket: WebSocket) {
109 | return new ModuleRunner(
110 | {
111 | root: env.__viteRoot,
112 | sourcemapInterceptor: "prepareStackTrace",
113 | transport: {
114 | fetchModule: async (...args) => {
115 | const response = await env.__viteFetchModule.fetch(
116 | new Request(ANY_URL, {
117 | method: "POST",
118 | body: JSON.stringify([...args, environment]),
119 | })
120 | );
121 | tinyassert(response.ok);
122 | const result = response.json();
123 | return result as any;
124 | },
125 | },
126 | hmr: {
127 | connection: {
128 | isReady: () => true,
129 | onUpdate(callback) {
130 | webSocket.addEventListener("message", (event) => {
131 | callback(JSON.parse(event.data));
132 | });
133 | },
134 | send(messages) {
135 | webSocket.send(JSON.stringify(messages));
136 | },
137 | },
138 | },
139 | },
140 | {
141 | runInlinedModule: async (context, transformed, id) => {
142 | const codeDefinition = `'use strict';async (${Object.keys(context).join(
143 | ","
144 | )})=>{{`;
145 | const code = `${codeDefinition}${transformed}\n}}`;
146 | const fn = env.__viteUnsafeEval.eval(code, id);
147 | await fn(...Object.values(context));
148 | Object.freeze(context.__vite_ssr_exports__);
149 | },
150 | async runExternalModule(filepath) {
151 | console.log("[runExternalModule]", filepath);
152 | return import(filepath);
153 | },
154 | }
155 | );
156 | }
157 |
--------------------------------------------------------------------------------
/hono-rsc/src/browser.vite.tsx:
--------------------------------------------------------------------------------
1 | import type { Child } from "hono/jsx";
2 | import {
3 | jsx,
4 | render,
5 | useState,
6 | startTransition,
7 | useEffect,
8 | use,
9 | } from "hono/jsx/dom";
10 |
11 | import { decode } from "@jacob-ebey/hono-server-components/runtime";
12 | import clientModules from "virtual:client-modules";
13 |
14 | import { rscStream } from "@jacob-ebey/hono-server-components/browser";
15 |
16 | let updateRoot: (root: Promise) => void;
17 | function DocumentHydrator({ initialRoot }: { initialRoot: Promise }) {
18 | let [root, setRoot] = useState(initialRoot);
19 | useEffect(() => {
20 | updateRoot = (newRoot) => {
21 | startTransition(() => {
22 | try {
23 | setRoot(newRoot);
24 | } catch (reason) {
25 | console.log({ reason });
26 | if (
27 | typeof reason === "object" &&
28 | reason &&
29 | "then" in reason &&
30 | typeof reason.then === "function"
31 | ) {
32 | reason.then(
33 | () => updateRoot(newRoot),
34 | () => {}
35 | );
36 |
37 | return;
38 | }
39 | throw reason;
40 | }
41 | });
42 | };
43 | }, [setRoot]);
44 | return <>{use(root)}>;
45 | }
46 |
47 | export async function hydrateDocument(): Promise<{
48 | render: (root: Child) => void;
49 | }> {
50 | const decodedPromise = decode(rscStream, {
51 | loadClientModule(id) {
52 | if (import.meta.env.PROD) {
53 | return clientModules[id]();
54 | }
55 | return import(/* @vite-ignore */ id);
56 | },
57 | });
58 | decodedPromise.then(
59 | (decoded) => decoded.done.catch(() => {}).then(),
60 | () => {}
61 | );
62 | const valuePromise = decodedPromise.then((d) => d.value as Child);
63 |
64 | const replaceChildren = (documentFragment: DocumentFragment) => {
65 | let viteStyles;
66 | if (import.meta.env.DEV) {
67 | viteStyles = document.head.querySelectorAll("style[data-vite-dev-id]");
68 | }
69 |
70 | // copy over the attributes to the current document
71 | const html = documentFragment.querySelector("html");
72 | if (html) {
73 | for (const attr of Array.from(document.documentElement.attributes)) {
74 | document.documentElement.removeAttribute(attr.name);
75 | }
76 | for (const attr of Array.from(html.attributes)) {
77 | document.documentElement.setAttribute(attr.name, attr.value);
78 | }
79 | }
80 |
81 | // copy over the attributes to the current document
82 | const head = documentFragment.querySelector("head");
83 | if (head) {
84 | for (const attr of Array.from(document.head.attributes)) {
85 | document.head.removeAttribute(attr.name);
86 | }
87 | for (const attr of Array.from(head.attributes)) {
88 | document.head.setAttribute(attr.name, attr.value);
89 | }
90 | }
91 | // copy over the children to the current document
92 | if (document.head.innerHTML !== head?.innerHTML) {
93 | for (const child of Array.from(document.head.children)) {
94 | document.head.removeChild(child);
95 | }
96 | for (const child of Array.from(head?.children || [])) {
97 | document.head.appendChild(child);
98 | }
99 | }
100 |
101 | if (import.meta.env.DEV) {
102 | for (const style of Array.from(viteStyles!)) {
103 | const id = style.getAttribute("data-vite-dev-id");
104 | const existingStyle = document.head.querySelector(
105 | `style[data-vite-dev-id="${id}"]`
106 | );
107 | if (!existingStyle) {
108 | document.head.appendChild(style);
109 | }
110 | }
111 | }
112 |
113 | // copy over the attributes to the current document
114 | const body = documentFragment.querySelector("body");
115 | if (body) {
116 | for (const attr of Array.from(document.body.attributes)) {
117 | document.body.removeAttribute(attr.name);
118 | }
119 | for (const attr of Array.from(body.attributes)) {
120 | document.body.setAttribute(attr.name, attr.value);
121 | }
122 | }
123 |
124 | // copy over the children to the current document
125 | for (const child of Array.from(document.body.children)) {
126 | document.body.removeChild(child);
127 | }
128 | for (const child of Array.from(body?.children || [])) {
129 | document.body.appendChild(child);
130 | }
131 | };
132 |
133 | let run = true;
134 | while (run) {
135 | run = false;
136 | try {
137 | render(
138 | ,
139 | new Proxy(
140 | {
141 | replaceChildren,
142 | childNodes: [
143 | document.head,
144 | document.body,
145 | ] as unknown as NodeListOf,
146 | insertBefore(documentFragment, child) {
147 | console.log({ documentFragment });
148 | // console.log({ node, child });
149 | // return document.documentElement.insertBefore(node, child);
150 | replaceChildren(documentFragment as unknown as DocumentFragment);
151 | return document.documentElement as unknown as typeof documentFragment;
152 | },
153 | } satisfies Partial,
154 | {
155 | get(target, p, receiver) {
156 | console.log("ACCESSING", p);
157 | return Reflect.get(target, p, receiver);
158 | },
159 | }
160 | ) as any
161 | );
162 | } catch (reason) {
163 | if (
164 | typeof reason === "object" &&
165 | reason &&
166 | "then" in reason &&
167 | typeof reason.then === "function"
168 | ) {
169 | await Promise.resolve(reason).catch(() => {});
170 | run = true;
171 | continue;
172 | }
173 |
174 | throw reason;
175 | }
176 | }
177 |
178 | return {
179 | render(root) {
180 | console.log("UPDATING ROOT", root);
181 | updateRoot(Promise.resolve(root));
182 | },
183 | };
184 | }
185 |
--------------------------------------------------------------------------------
/hono-rsc/test.tsx:
--------------------------------------------------------------------------------
1 | import * as assert from "node:assert/strict";
2 | import { test } from "node:test";
3 |
4 | import { Hono } from "hono";
5 | import { raw } from "hono/utils/html";
6 | import type { Child } from "hono/jsx";
7 | import { ErrorBoundary, Suspense } from "hono/jsx";
8 |
9 | import { decode, encode } from "./src/runtime.js";
10 | import { jsxRenderer } from "hono/jsx-renderer";
11 |
12 | function stringDecode(encoded: string) {
13 | const readable = new ReadableStream({
14 | start(controller) {
15 | controller.enqueue(new TextEncoder().encode(encoded));
16 | controller.close();
17 | },
18 | });
19 | return decode(readable);
20 | }
21 |
22 | async function stringEncode(value: unknown) {
23 | const encoded = encode(value);
24 | let res = "";
25 | await encoded.pipeThrough(new TextDecoderStream()).pipeTo(
26 | new WritableStream({
27 | write(chunk) {
28 | res += chunk;
29 | },
30 | })
31 | );
32 | return res;
33 | }
34 |
35 | async function render(value: unknown, stream?: true) {
36 | const app = new Hono().use(async (c, next) => {
37 | try {
38 | await next();
39 | } catch (reason) {
40 | console.error(reason);
41 | throw reason;
42 | }
43 | });
44 |
45 | if (stream) {
46 | app.use(
47 | jsxRenderer(
48 | ({ children }) => (
49 |
50 | {children}
51 |
52 | ),
53 | { stream: true }
54 | )
55 | );
56 | app.get("/", (c) => c.render(value as string));
57 | } else {
58 | app.get("/", (c) => c.html(value as string));
59 | }
60 | const replaced = new Map();
61 | return Promise.resolve(app.fetch(new Request("http://test/")))
62 | .then((res) => res.text())
63 | .then((html) =>
64 | html
65 | // Reset counters in the HTML
66 | .replace(/['"](H:\d+)['"]/g, (og, match: string) => {
67 | if (replaced.has(match)) {
68 | return og.replace(match, `H:${replaced.get(match)}`);
69 | }
70 | const id = replaced.size;
71 | replaced.set(match, id);
72 | return og.replace(match, `H:${id}`);
73 | })
74 | .replace(/['"](E:\d+)['"]/g, (og, match: string) => {
75 | if (replaced.has(match)) {
76 | return og.replace(match, `E:${replaced.get(match)}`);
77 | }
78 | const id = replaced.size;
79 | replaced.set(match, id);
80 | return og.replace(match, `E:${id}`);
81 | })
82 | .replace(//g, (og, match: string) => {
83 | if (replaced.has(match)) {
84 | return og.replace(match, `E:${replaced.get(match)}`);
85 | }
86 | const id = replaced.size;
87 | replaced.set(match, id);
88 | return og.replace(match, `E:${id}`);
89 | })
90 | );
91 | }
92 |
93 | function BasicComponent({ children }: { children: Child }) {
94 | return {children}
;
95 | }
96 | async function AsyncBasicComponent({
97 | children,
98 | throwError,
99 | }: {
100 | children: Child;
101 | throwError?: boolean;
102 | }) {
103 | if (throwError) {
104 | throw new Error("Test error");
105 | }
106 | return {children}
;
107 | }
108 |
109 | test("can encode basic tree", async () => {
110 | const toEncode = (
111 |
114 | );
115 | const encoded = await stringEncode(toEncode);
116 | const decoded = await stringDecode(encoded);
117 | await decoded.done;
118 |
119 | assert.deepEqual(decoded.value, toEncode);
120 | });
121 |
122 | test("can encode components tree", async () => {
123 | const toEncode = (
124 |
125 | Hello
126 |
127 | );
128 | const encoded = await stringEncode(toEncode);
129 | const decoded = await stringDecode(encoded);
130 | await decoded.done;
131 |
132 | assert.equal(await render(decoded.value), await render(toEncode));
133 | });
134 |
135 | test("can encode nested components tree", async () => {
136 | const toEncode = (
137 |
138 | Hello
139 |
140 | Child
141 |
142 |
143 | );
144 | const encoded = await stringEncode(toEncode);
145 | const decoded = await stringDecode(encoded);
146 | await decoded.done;
147 |
148 | assert.equal(await render(decoded.value), await render(toEncode));
149 | });
150 |
151 | test("can encode async components tree", async () => {
152 | const toEncode = (
153 |
154 | Hello
155 |
156 | );
157 | const encoded = await stringEncode(toEncode);
158 | const decoded = await stringDecode(encoded);
159 | await decoded.done;
160 |
161 | assert.equal(await render(decoded.value, true), await render(toEncode, true));
162 | });
163 |
164 | test("can encode nested async components tree", async () => {
165 | const toEncode = (
166 |
167 | Hello
168 |
169 | Child
170 |
171 |
172 | );
173 | const encoded = await stringEncode(toEncode);
174 | const decoded = await stringDecode(encoded);
175 | await decoded.done;
176 |
177 | assert.equal(await render(decoded.value, true), await render(toEncode, true));
178 | });
179 |
180 | test("can encode suspense", async () => {
181 | const toEncode = (
182 | Fallback
}>
183 | Hello
184 |
185 | Child
186 |
187 |
188 | );
189 | const encoded = await stringEncode(toEncode);
190 | const decoded = await stringDecode(encoded);
191 | await decoded.done;
192 |
193 | assert.equal(await render(decoded.value, true), await render(toEncode, true));
194 | });
195 |
196 | test("can encode nested async component error in tree", async () => {
197 | const toEncode = (
198 | Oops
}>
199 | Hello
200 |
201 | Child
202 |
203 |
204 | );
205 | const encoded = await stringEncode(toEncode);
206 | const decoded = await stringDecode(encoded);
207 | await decoded.done;
208 |
209 | assert.equal(await render(decoded.value, true), await render(toEncode, true));
210 | });
211 |
212 | test("can encode raw", async () => {
213 | const toEncode = ;
214 | const encoded = await stringEncode(toEncode);
215 | const decoded = await stringDecode(encoded);
216 | await decoded.done;
217 |
218 | assert.equal(await render(decoded.value), await render(toEncode));
219 | });
220 |
--------------------------------------------------------------------------------
/example/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "node:path";
2 |
3 | import { createMiddleware } from "@hattip/adapter-node/native-fetch";
4 | import cloudflare, {
5 | type WorkerdDevEnvironment,
6 | } from "@jacob-ebey/cf-vite-plugin";
7 | import serverComponents, {
8 | rscSingleton,
9 | } from "@jacob-ebey/hono-server-components/vite";
10 | import { preact } from "@preact/preset-vite";
11 | import type { Rollup } from "vite";
12 | import { defineConfig } from "vite";
13 | import { unstable_getMiniflareWorkerOptions } from "wrangler";
14 |
15 | const { main } = unstable_getMiniflareWorkerOptions("wrangler.dev.toml");
16 | if (!main) {
17 | throw new Error("Missing main in wrangler.dev.toml");
18 | }
19 |
20 | declare global {
21 | var clientBuildPromise:
22 | | Promise<
23 | Rollup.RollupOutput | Rollup.RollupOutput[] | Rollup.RollupWatcher
24 | >
25 | | undefined;
26 | }
27 |
28 | global.clientBuildPromise = global.clientBuildPromise || undefined;
29 |
30 | export default defineConfig(({ command }) => ({
31 | builder: {
32 | async buildApp(builder) {
33 | let clientModules = rscSingleton.clientModules.size;
34 | do {
35 | clientModules = rscSingleton.clientModules.size;
36 | clientBuildPromise = builder.build(builder.environments.client);
37 | await builder.build(builder.environments.prerender);
38 | await builder.build(builder.environments.server);
39 | await clientBuildPromise;
40 | } while (clientModules !== rscSingleton.clientModules.size);
41 | },
42 | },
43 | environments: {
44 | client: {
45 | build: {
46 | assetsInlineLimit: 0,
47 | manifest: true,
48 | outDir: "dist/browser",
49 | rollupOptions: {
50 | input: [
51 | "/src/browser.tsx",
52 | "/src/global.css",
53 | "virtual:client-modules",
54 | ],
55 | preserveEntrySignatures: "exports-only",
56 | },
57 | },
58 | },
59 | prerender: {
60 | nodeCompatible: true,
61 | webCompatible: true,
62 | build: {
63 | emptyOutDir: true,
64 | outDir: "dist/prerender",
65 | assetsInlineLimit: 0,
66 | target: "ESNext",
67 | rollupOptions: {
68 | preserveEntrySignatures: "exports-only",
69 | input: ["/src/worker.ts", "virtual:client-modules"],
70 | },
71 | },
72 | resolve: {
73 | mainFields: ["module"],
74 | conditions: ["workerd", "module"],
75 | noExternal: command !== "build" ? true : undefined,
76 | external:
77 | command !== "build" ? ["@cloudflare/kv-asset-handler"] : undefined,
78 | },
79 | },
80 | server: {
81 | nodeCompatible: true,
82 | webCompatible: true,
83 | build: {
84 | emptyOutDir: true,
85 | outDir: "dist/server",
86 | assetsInlineLimit: 0,
87 | target: "ESNext",
88 | rollupOptions: {
89 | preserveEntrySignatures: "exports-only",
90 | input: {
91 | "durables/counter": "/src/durable-objects/counter.ts",
92 | "durables/server-components":
93 | "/src/durable-objects/server-components.tsx",
94 | },
95 | },
96 | },
97 | resolve: {
98 | mainFields: ["module"],
99 | conditions: ["workerd", "module"],
100 | noExternal: command !== "build" ? true : undefined,
101 | external:
102 | command !== "build" ? ["@cloudflare/kv-asset-handler"] : undefined,
103 | },
104 | },
105 | },
106 | plugins: [
107 | serverComponents({
108 | serverEnvironments: ["server"],
109 | }),
110 | preact({
111 | devToolsEnabled: false,
112 | prefreshEnabled: false,
113 | reactAliasesEnabled: false,
114 | jsxImportSource: "hono/jsx",
115 | }),
116 | cloudflare({
117 | environments: ["prerender", "server"],
118 | persist: true,
119 | wrangler: {
120 | configPath: "./wrangler.dev.toml",
121 | },
122 | durableObjects: {
123 | COUNTER: {
124 | environment: "server",
125 | file: "/src/durable-objects/counter.ts",
126 | },
127 | SERVER_COMPONENTS: {
128 | environment: "server",
129 | file: "/src/durable-objects/server-components.tsx",
130 | },
131 | },
132 | }),
133 | {
134 | name: "dev-server",
135 | configureServer(server) {
136 | const devEnv = server.environments.prerender as WorkerdDevEnvironment;
137 |
138 | const nodeMiddleware = createMiddleware(
139 | (ctx) => devEnv.api.dispatchFetch(main, ctx.request),
140 | { alwaysCallNext: false }
141 | );
142 |
143 | return () => {
144 | server.middlewares.use((req, res, next) => {
145 | req.url = req.originalUrl;
146 | return nodeMiddleware(req, res, next);
147 | });
148 | };
149 | },
150 | },
151 | {
152 | name: "bridged-assets",
153 | async resolveId(id, importer) {
154 | if (id.startsWith("bridge:")) {
155 | if (!this.environment?.config.ssr) {
156 | throw new Error("Cannot bridge assets from a client build.");
157 | }
158 |
159 | const baseId = id.slice("bridge:".length);
160 | const postfix = this.environment.config.command !== "build" ? "" : "";
161 | const resolved = await this.resolve(baseId + postfix, importer, {
162 | skipSelf: true,
163 | });
164 | if (!resolved) {
165 | throw new Error(`Could not resolve asset: ${baseId}`);
166 | }
167 |
168 | // The # is to stop vite from trying to transform the asset.
169 | return `\0bridge:${resolved.id}#`;
170 | }
171 | },
172 | async load(id) {
173 | if (id.startsWith("\0bridge:") && id.endsWith("#")) {
174 | if (!this.environment?.config.ssr) {
175 | throw new Error("Cannot bridge assets from a client build.");
176 | }
177 | const baseId = id.slice("\0bridge:".length, -1);
178 | const relative = path
179 | .relative(this.environment.config.root, baseId)
180 | .replace(/\\/g, "/");
181 |
182 | if (this.environment.config.command !== "build") {
183 | return `export default "/${relative}";`;
184 | }
185 |
186 | if (!clientBuildPromise) {
187 | throw new Error("Client build promise not set.");
188 | }
189 | const clientBuildResults = await clientBuildPromise;
190 | const clientBuild = clientBuildResults as Rollup.RollupOutput;
191 |
192 | const manifest = clientBuild.output.find(
193 | (o) => o.fileName === ".vite/manifest.json"
194 | );
195 | if (
196 | !manifest ||
197 | !("source" in manifest) ||
198 | typeof manifest.source !== "string"
199 | ) {
200 | throw new Error("Could not find client manifest.");
201 | }
202 | const manifestJson = JSON.parse(manifest.source);
203 | let manifestFile = manifestJson[relative]?.file as string | undefined;
204 |
205 | if (!manifestFile) {
206 | const output = clientBuild.output.find(
207 | (o) => "facadeModuleId" in o && o.facadeModuleId === baseId
208 | );
209 | if (!output) {
210 | throw new Error(`Could not find browser output for ${baseId}`);
211 | }
212 | manifestFile = output.fileName;
213 | }
214 |
215 | return `export default "${this.environment.config.base}${manifestFile}";`;
216 | }
217 | },
218 | },
219 | ],
220 | }));
221 |
--------------------------------------------------------------------------------
/hono-rsc/src/runtime.ts:
--------------------------------------------------------------------------------
1 | import type { Child, FC, JSXNode } from "hono/jsx";
2 | import { ErrorBoundary, Fragment, Suspense, jsx, use } from "hono/jsx";
3 | import type { HtmlEscapedCallback, HtmlEscapedString } from "hono/utils/html";
4 | import { HtmlEscapedCallbackPhase, raw } from "hono/utils/html";
5 | import * as turbo from "turbo-stream";
6 |
7 | function ClientAsyncComponent({
8 | value,
9 | }: {
10 | value: Promise & {
11 | result?: unknown;
12 | error?: unknown;
13 | };
14 | }) {
15 | return use(value);
16 | // if (value && typeof value.then === "function") {
17 | // return use(value);
18 | // }
19 | // return value;
20 | }
21 | async function ServerAsyncComponent({ value }: { value: Promise }) {
22 | const r = await value;
23 | return r;
24 | }
25 |
26 | const CLIENT_REFERENCE_SYMBOL = Symbol.for("hono.client.reference");
27 | const ERROR_BOUNDARY_SYMBOL = Symbol.for("hono.ErrorBoundary");
28 | const FRAGMENT_SYMBOL = Symbol.for("hono.Fragment");
29 | const SUSPENSE_SYMBOL = Symbol.for("hono.Suspense");
30 |
31 | export type DecodeOptions = {
32 | loadClientModule?(id: string): Promise>;
33 | };
34 |
35 | export function decode(
36 | readable: ReadableStream,
37 | { loadClientModule }: DecodeOptions = {}
38 | ) {
39 | const clientModuleCache = new Map>>();
40 | return turbo.decode(readable, {
41 | plugins: [
42 | (pluginType, value, ...promises) => {
43 | if (pluginType === "e") {
44 | return {
45 | value: raw(
46 | value,
47 | promises.map(
48 | (p) => () => p as Promise | undefined
49 | )
50 | ),
51 | };
52 | }
53 | },
54 | (pluginType, ...inputs: unknown[]) => {
55 | switch (pluginType) {
56 | case "j": {
57 | const [type, key, props] = inputs;
58 | const { children, ...restProps } = props as Record;
59 | let result;
60 | const pr = {
61 | ...restProps,
62 | key,
63 | };
64 | const args = Array.isArray(children) ? children : [children];
65 | if (typeof type === "string") {
66 | result = jsx(type, pr, ...args);
67 | } else if (type === FRAGMENT_SYMBOL) {
68 | result = jsx(Fragment, pr, ...args);
69 | } else if (type === SUSPENSE_SYMBOL) {
70 | result = jsx(Suspense, pr, ...args);
71 | } else if (type === ERROR_BOUNDARY_SYMBOL) {
72 | result = jsx(ErrorBoundary, pr, ...args);
73 | }
74 |
75 | if (!result) {
76 | throw new Error("Invalid JSXNode");
77 | }
78 |
79 | return { value: result };
80 | }
81 | case "a": {
82 | const [value] = inputs;
83 | if (
84 | value &&
85 | typeof value === "object" &&
86 | "then" in value &&
87 | typeof value.then === "function"
88 | ) {
89 | if (typeof document !== "undefined") {
90 | return {
91 | value: jsx(ClientAsyncComponent, { value }),
92 | };
93 | }
94 | return {
95 | value: jsx(ServerAsyncComponent, { value }),
96 | };
97 | }
98 | return {
99 | value,
100 | };
101 | }
102 | case "c": {
103 | if (!loadClientModule) {
104 | throw new Error(
105 | "loadClientModule is required to decode client references"
106 | );
107 | }
108 | const [key, props, id, name] = inputs as [
109 | string | number,
110 | Record,
111 | string,
112 | string
113 | ];
114 |
115 | const value = clientModuleCache.has(id)
116 | ? clientModuleCache.get(id)
117 | : loadClientModule(id).then((mod) => {
118 | const Component = mod[name] as FC<{ children: Child }>;
119 | const { children, ...restProps } = props as Record<
120 | string,
121 | unknown
122 | >;
123 | if (typeof Component !== "function") {
124 | throw new Error(
125 | `Invalid client reference: ${name} (${id})`
126 | );
127 | }
128 | return jsx(
129 | Component,
130 | { ...restProps, key },
131 | ...(Array.isArray(children) ? children : [children])
132 | );
133 | });
134 |
135 | if (typeof document !== "undefined") {
136 | return {
137 | value: jsx(ClientAsyncComponent, { value }),
138 | };
139 | }
140 | return {
141 | value: jsx(ServerAsyncComponent, { value }),
142 | };
143 | }
144 | default:
145 | return false;
146 | }
147 | },
148 | ],
149 | });
150 | }
151 |
152 | export function encode(
153 | value: unknown,
154 | { signal }: { signal?: AbortSignal } = {}
155 | ) {
156 | return turbo.encode(value, {
157 | signal,
158 | plugins: [
159 | (value) => {
160 | if (
161 | typeof value === "object" &&
162 | value &&
163 | value instanceof String &&
164 | "isEscaped" in value &&
165 | "callbacks" in value
166 | ) {
167 | const escaped = value as HtmlEscapedString;
168 | return [
169 | "e",
170 | String(value),
171 | ...(escaped.callbacks ?? []).map((cb) =>
172 | cb({ context: {}, phase: HtmlEscapedCallbackPhase.Stream })
173 | ),
174 | ];
175 | }
176 | return false;
177 | },
178 | (value) => {
179 | if (
180 | typeof value !== "object" ||
181 | (value?.constructor?.name !== "JSXNode" &&
182 | value?.constructor?.name !== "JSXFunctionNode")
183 | ) {
184 | return false;
185 | }
186 | const node = value as JSXNode;
187 |
188 | switch (typeof node.type) {
189 | case "function":
190 | if (node.type === Fragment) {
191 | return ["j", FRAGMENT_SYMBOL, node.key, node.props];
192 | }
193 | if (node.type === Suspense) {
194 | return ["j", SUSPENSE_SYMBOL, node.key, node.props];
195 | }
196 | if (node.type === ErrorBoundary) {
197 | return ["j", ERROR_BOUNDARY_SYMBOL, node.key, node.props];
198 | }
199 | let result;
200 | try {
201 | result = node.type(node.props);
202 | } catch (reason) {
203 | result = Promise.reject(reason);
204 | }
205 |
206 | return ["a", Promise.resolve(result)];
207 | case "string":
208 | return ["j", node.type, node.key, node.props];
209 | case "object":
210 | const clientReference = node.type as null | {
211 | $$typeof: symbol;
212 | $$id: string;
213 | $$name: string;
214 | };
215 | if (clientReference?.$$typeof === CLIENT_REFERENCE_SYMBOL) {
216 | return [
217 | "c",
218 | node.key,
219 | node.props,
220 | clientReference.$$id,
221 | clientReference.$$name,
222 | ];
223 | }
224 | throw new Error("Invalid JSXNode");
225 | default:
226 | throw new Error("Invalid JSXNode");
227 | }
228 | },
229 | ],
230 | });
231 | }
232 |
--------------------------------------------------------------------------------
/plugin/src/index.ts:
--------------------------------------------------------------------------------
1 | import { readFileSync } from "node:fs";
2 | import { fileURLToPath } from "node:url";
3 |
4 | import { DefaultMap, tinyassert, isNotNil } from "@hiogawa/utils";
5 | import type { WorkerOptions } from "miniflare";
6 | import { Miniflare, Response as MiniflareResponse, WebSocket } from "miniflare";
7 | import { unstable_getMiniflareWorkerOptions } from "wrangler";
8 | import type {
9 | CustomPayload,
10 | HotChannel,
11 | PluginOption,
12 | ResolvedConfig,
13 | } from "vite";
14 | import { DevEnvironment } from "vite";
15 |
16 | import type { EvalApi, EvalMetadata, RunnerFetchMetadata } from "./shared.js";
17 | import { ANY_URL, RUNNER_EVAL_PATH, RUNNER_INIT_PATH } from "./shared.js";
18 |
19 | export type CloudflareVitePluginOptions = {
20 | environments: string[];
21 | persist?: boolean;
22 | worker?: WorkerOptions;
23 | wrangler?: {
24 | configPath?: string;
25 | };
26 | durableObjects?: Record<
27 | string,
28 | {
29 | environment?: string;
30 | file?: string;
31 | }
32 | >;
33 | };
34 |
35 | type WranglerOptions = ReturnType;
36 |
37 | export default function cloudflareVitePlugin(
38 | options: CloudflareVitePluginOptions
39 | ): PluginOption {
40 | const wranglerOptions = unstable_getMiniflareWorkerOptions(
41 | options.wrangler?.configPath || "wrangler.toml"
42 | );
43 |
44 | const devEnvs = new Map();
45 |
46 | return {
47 | name: "cloudflare-vite-plugin",
48 | config(config, env) {
49 | return {
50 | environments: Object.fromEntries(
51 | options.environments.map(
52 | (name) =>
53 | [
54 | name,
55 | {
56 | build: {
57 | ssr: true,
58 | },
59 | dev: {
60 | createEnvironment: (name, config) => {
61 | const env = createWorkerdDevEnvironment(
62 | name,
63 | config,
64 | options,
65 | wranglerOptions,
66 | devEnvs
67 | );
68 | return env;
69 | },
70 | },
71 | },
72 | ] as const
73 | )
74 | ),
75 | };
76 | },
77 | resolveId(id) {
78 | if (id === "__STATIC_CONTENT_MANIFEST") {
79 | return {
80 | id,
81 | external: true,
82 | };
83 | }
84 | },
85 | hotUpdate(ctx) {
86 | if (options.environments.includes(ctx.environment.name)) {
87 | for (const mod of ctx.modules) {
88 | ctx.environment.moduleGraph.invalidateModule(mod);
89 | }
90 | const devEnv = devEnvs.get(ctx.environment.name);
91 | devEnv?.hot.send({
92 | type: "full-reload",
93 | });
94 |
95 | return [];
96 | }
97 | },
98 | };
99 | }
100 |
101 | export type WorkerdDevApi = {
102 | dispatchFetch(entry: string, request: Request): Promise;
103 | eval: EvalApi;
104 | runnerObject: ReturnType<
105 | Awaited>["get"]
106 | >;
107 | };
108 |
109 | export type WorkerdDevEnvironment = DevEnvironment & {
110 | api: WorkerdDevApi;
111 | };
112 |
113 | export async function createWorkerdDevEnvironment(
114 | name: string,
115 | config: ResolvedConfig,
116 | options: CloudflareVitePluginOptions,
117 | wranglerOptions: WranglerOptions,
118 | devEnvs: Map
119 | ): Promise {
120 | const {
121 | bindings,
122 | d1Databases,
123 | durableObjects,
124 | kvNamespaces,
125 | r2Buckets,
126 | serviceBindings,
127 | compatibilityDate,
128 | compatibilityFlags,
129 | ...workerOptions
130 | } = wranglerOptions.workerOptions;
131 |
132 | let baseRunnerOptions: Partial = options.worker ?? {
133 | modulesRoot: "/",
134 | unsafeEvalBinding: "__viteUnsafeEval",
135 | d1Databases,
136 | kvNamespaces,
137 | r2Buckets,
138 | compatibilityDate,
139 | compatibilityFlags,
140 | bindings: {
141 | ...bindings,
142 | __viteRoot: config.root,
143 | },
144 | serviceBindings: {
145 | ...serviceBindings,
146 | __viteFetchModule: async (request) => {
147 | const [id, importer, environment] = (await request.json()) as [
148 | string,
149 | string,
150 | string | undefined
151 | ];
152 | const devEnvToUse = environment
153 | ? await devEnvs.get(environment)
154 | : devEnv;
155 | try {
156 | if (!devEnvToUse) {
157 | throw new Error(`DevEnvironment ${environment} not found`);
158 | }
159 | const result = await devEnvToUse.fetchModule(id, importer);
160 | return new MiniflareResponse(JSON.stringify(result));
161 | } catch (error) {
162 | console.error("[fetchModule]", [id, importer], error);
163 | throw error;
164 | }
165 | },
166 | },
167 | };
168 |
169 | const workerDurableObjects = Object.fromEntries(
170 | Object.entries(durableObjects ?? {})
171 | .map(([binding, durableObjectConfig]) => {
172 | if (
173 | typeof durableObjectConfig !== "object" ||
174 | !durableObjectConfig ||
175 | durableObjectConfig?.scriptName
176 | ) {
177 | return null;
178 | }
179 | return [
180 | binding,
181 | {
182 | className: "DurableObjectRunnerObject",
183 | scriptName: `vite-durable-object-runner-${binding}`,
184 | },
185 | ] as const;
186 | })
187 | .filter(isNotNil)
188 | );
189 |
190 | const miniflare = new Miniflare({
191 | ...workerOptions,
192 | d1Persist: options.persist ? ".wrangler/state/v3/d1" : false,
193 | kvPersist: options.persist ? ".wrangler/state/v3/kv" : false,
194 | r2Persist: options.persist ? ".wrangler/state/v3/r2" : false,
195 | cachePersist: options.persist ? ".wrangler/state/v3/cache" : false,
196 | durableObjectsPersist: options.persist ? ".wrangler/state/v3/do" : false,
197 | cache: options.persist,
198 | workers: [
199 | {
200 | ...baseRunnerOptions,
201 | name: "vite-runner",
202 | durableObjects: {
203 | ...workerDurableObjects,
204 | __viteRunner: "RunnerObject",
205 | },
206 | modules: [
207 | {
208 | type: "ESModule",
209 | path: fileURLToPath(new URL("./runner.js", import.meta.url)),
210 | },
211 | ],
212 | },
213 | ...Object.entries(durableObjects ?? {})
214 | .map(([binding, durableObjectConfig]) => {
215 | if (
216 | typeof durableObjectConfig !== "object" ||
217 | !durableObjectConfig ||
218 | durableObjectConfig?.scriptName
219 | ) {
220 | return null;
221 | }
222 |
223 | const { [binding]: _, ...durableObjectDurableObjects } =
224 | workerDurableObjects;
225 | return {
226 | ...baseRunnerOptions,
227 | name: `vite-durable-object-runner-${binding}`,
228 | durableObjects: {
229 | ...durableObjectDurableObjects,
230 | [`__viteDORunner${binding}`]: "DurableObjectRunnerObject",
231 | },
232 | modules: [
233 | {
234 | type: "ESModule",
235 | // path: fileURLToPath(
236 | // new URL("./durable-object-runner.js", import.meta.url)
237 | // ),
238 | path: fileURLToPath(
239 | new URL("./durable-object-runner.js", import.meta.url)
240 | ),
241 | contents: readFileSync(
242 | fileURLToPath(
243 | new URL("./durable-object-runner.js", import.meta.url)
244 | ),
245 | "utf-8"
246 | )
247 | .replace(
248 | "___ENVIRONMENT___",
249 | options.durableObjects?.[binding]?.environment || name
250 | )
251 | .replace("___EXPORTED___", durableObjectConfig.className),
252 | },
253 | ],
254 | } satisfies WorkerOptions;
255 | })
256 | .filter(isNotNil),
257 | ],
258 | });
259 |
260 | // get durable object singleton
261 | const VITE_RUNNER = await miniflare.getDurableObjectNamespace(
262 | "__viteRunner",
263 | "vite-runner"
264 | );
265 | const runnerObject = VITE_RUNNER.get(VITE_RUNNER.idFromName(""));
266 |
267 | // initial request to setup websocket
268 | const initResponse = await runnerObject.fetch(ANY_URL + RUNNER_INIT_PATH, {
269 | headers: {
270 | Upgrade: "websocket",
271 | },
272 | });
273 | tinyassert(initResponse.webSocket);
274 | const { webSocket } = initResponse;
275 | webSocket.accept();
276 |
277 | const initDurableObjectsPromises: Promise[] = [];
278 | for (const [binding, durableObject] of Object.entries(durableObjects ?? {})) {
279 | initDurableObjectsPromises.push(
280 | (async () => {
281 | const VITE_RUNNER = await miniflare.getDurableObjectNamespace(
282 | `__viteDORunner${binding}`,
283 | `vite-durable-object-runner-${binding}`
284 | );
285 | const runnerObject = VITE_RUNNER.get(VITE_RUNNER.idFromName(""));
286 |
287 | // initial request to setup websocket
288 | const initResponse = await runnerObject.fetch(
289 | ANY_URL + RUNNER_INIT_PATH,
290 | {
291 | headers: {
292 | Upgrade: "websocket",
293 | "x-vite-fetch": JSON.stringify({
294 | entry:
295 | options.durableObjects?.[binding]?.file ||
296 | wranglerOptions.main,
297 | }),
298 | },
299 | }
300 | );
301 |
302 | tinyassert(initResponse.webSocket);
303 | const { webSocket } = initResponse;
304 | webSocket.accept();
305 |
306 | return webSocket;
307 | })()
308 | );
309 | }
310 |
311 | const durableObjectsWebSockets = await Promise.all(
312 | initDurableObjectsPromises
313 | );
314 |
315 | const hot = createSimpleHMRChannel({
316 | name,
317 | post: (data) => {
318 | webSocket.send(data);
319 | for (const ws of durableObjectsWebSockets) {
320 | ws.send(data);
321 | }
322 | },
323 | on: (listener) => {
324 | webSocket.addEventListener("message", listener);
325 | for (const ws of durableObjectsWebSockets) {
326 | ws.addEventListener("message", listener);
327 | }
328 | return () => {
329 | webSocket.removeEventListener("message", listener);
330 | for (const ws of durableObjectsWebSockets) {
331 | ws.removeEventListener("message", listener);
332 | }
333 | };
334 | },
335 | serialize: (v) => JSON.stringify(v),
336 | deserialize: (v) => JSON.parse(v.data),
337 | });
338 |
339 | class WorkerdDevEnvironmentImpl extends DevEnvironment {
340 | override async close() {
341 | await super.close();
342 | await miniflare.dispose();
343 | }
344 | }
345 |
346 | const devEnv = new WorkerdDevEnvironmentImpl(name, config, { hot });
347 |
348 | const api: WorkerdDevApi = {
349 | runnerObject,
350 | async dispatchFetch(entry: string, request: Request) {
351 | const headers = new Headers(request.headers);
352 | headers.set(
353 | "x-vite-fetch",
354 | JSON.stringify({ entry } satisfies RunnerFetchMetadata)
355 | );
356 |
357 | const res = await runnerObject.fetch(request.url, {
358 | method: request.method,
359 | headers,
360 | body: request.body === null ? undefined : (request.body as any),
361 | redirect: "manual",
362 | duplex: request.body !== null ? "half" : undefined,
363 | });
364 | return new Response(res.body as BodyInit, {
365 | status: res.status,
366 | statusText: res.statusText,
367 | headers: res.headers as Headers,
368 | });
369 | },
370 |
371 | async eval(ctx) {
372 | const headers = new Headers();
373 | headers.set(
374 | "x-vite-eval",
375 | JSON.stringify({
376 | entry: ctx.entry,
377 | fnString: ctx.fn.toString(),
378 | } satisfies EvalMetadata)
379 | );
380 | const body = JSON.stringify(ctx.data ?? (null as any));
381 | const fetch_ = runnerObject.fetch as any as typeof fetch; // fix web/undici types
382 | const response = await fetch_(ANY_URL + RUNNER_EVAL_PATH, {
383 | method: "POST",
384 | headers,
385 | body,
386 | // @ts-ignore undici
387 | duplex: "half",
388 | });
389 | tinyassert(response.ok);
390 | const result = await response.json();
391 | return result as any;
392 | },
393 | };
394 |
395 | const res = Object.assign(devEnv, { api });
396 | devEnvs.set(name, res);
397 | return res;
398 | }
399 |
400 | function createSimpleHMRChannel(options: {
401 | name: string;
402 | post: (data: any) => any;
403 | on: (listener: (data: any) => void) => () => void;
404 | serialize: (v: any) => any;
405 | deserialize: (v: any) => any;
406 | }): HotChannel {
407 | const listerMap = new DefaultMap>(() => new Set());
408 | let dispose: (() => void) | undefined;
409 |
410 | return {
411 | // name: options.name,
412 | listen() {
413 | dispose = options.on((data) => {
414 | const payload = options.deserialize(data) as CustomPayload;
415 | for (const f of listerMap.get(payload.event)) {
416 | f(payload.data);
417 | }
418 | });
419 | },
420 | close() {
421 | dispose?.();
422 | dispose = undefined;
423 | },
424 | on(event: string, listener: (...args: any[]) => any) {
425 | listerMap.get(event).add(listener);
426 | },
427 | off(event: string, listener: (...args: any[]) => any) {
428 | listerMap.get(event).delete(listener);
429 | },
430 | send(...args: any[]) {
431 | let payload: any;
432 | if (typeof args[0] === "string") {
433 | payload = {
434 | type: "custom",
435 | event: args[0],
436 | data: args[1],
437 | };
438 | } else {
439 | payload = args[0];
440 | }
441 | options.post(options.serialize(payload));
442 | },
443 | };
444 | }
445 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | overrides:
8 | '@cloudflare/kv-asset-handler': 0.3.2
9 | '@cloudflare/workers-types': 4.20240529.0
10 | '@types/node': 20.13.0
11 | hono: 4.4.2
12 | miniflare: 3.20240524.1
13 | ts-node: 10.9.2
14 | tsup: 8.0.2
15 | typescript: 5.4.5
16 | wrangler: 3.58.0
17 | unplugin-rsc: 0.0.10
18 | vite: 6.0.0-alpha.17
19 |
20 | importers:
21 |
22 | .: {}
23 |
24 | example:
25 | dependencies:
26 | '@cloudflare/kv-asset-handler':
27 | specifier: 0.3.2
28 | version: 0.3.2
29 | '@jacob-ebey/hono-server-components':
30 | specifier: workspace:*
31 | version: link:../hono-rsc
32 | hono:
33 | specifier: 4.4.2
34 | version: 4.4.2
35 | workers-swr:
36 | specifier: 0.0.8
37 | version: 0.0.8
38 | devDependencies:
39 | '@cloudflare/workers-types':
40 | specifier: 4.20240529.0
41 | version: 4.20240529.0
42 | '@hattip/adapter-node':
43 | specifier: 0.0.45
44 | version: 0.0.45
45 | '@jacob-ebey/cf-vite-plugin':
46 | specifier: workspace:*
47 | version: link:../plugin
48 | '@preact/preset-vite':
49 | specifier: 2.8.2
50 | version: 2.8.2(@babel/core@7.24.4)(preact@10.22.0)(vite@6.0.0-alpha.17(@types/node@20.13.0))
51 | '@types/dom-navigation':
52 | specifier: 1.0.3
53 | version: 1.0.3
54 | '@types/node':
55 | specifier: 20.13.0
56 | version: 20.13.0
57 | '@vitejs/plugin-react':
58 | specifier: 4.3.0
59 | version: 4.3.0(vite@6.0.0-alpha.17(@types/node@20.13.0))
60 | autoprefixer:
61 | specifier: 10.4.19
62 | version: 10.4.19(postcss@8.4.38)
63 | postcss:
64 | specifier: 8.4.38
65 | version: 8.4.38
66 | tailwindcss:
67 | specifier: 3.4.3
68 | version: 3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
69 | typescript:
70 | specifier: 5.4.5
71 | version: 5.4.5
72 | unplugin-rsc:
73 | specifier: 0.0.10
74 | version: 0.0.10(rollup@4.18.0)
75 | vite:
76 | specifier: 6.0.0-alpha.17
77 | version: 6.0.0-alpha.17(@types/node@20.13.0)
78 | wrangler:
79 | specifier: 3.58.0
80 | version: 3.58.0(@cloudflare/workers-types@4.20240529.0)
81 |
82 | hono-rsc:
83 | dependencies:
84 | hono:
85 | specifier: 4.4.2
86 | version: 4.4.2
87 | unplugin-rsc:
88 | specifier: 0.0.10
89 | version: 0.0.10(rollup@4.18.0)
90 | vite:
91 | specifier: 6.0.0-alpha.17
92 | version: 6.0.0-alpha.17(@types/node@20.13.0)
93 | devDependencies:
94 | '@hono/node-server':
95 | specifier: 1.11.2
96 | version: 1.11.2
97 | '@types/node':
98 | specifier: 20.13.0
99 | version: 20.13.0
100 | rsc-html-stream:
101 | specifier: 0.0.3
102 | version: 0.0.3
103 | ts-node:
104 | specifier: 10.9.2
105 | version: 10.9.2(@types/node@20.13.0)(typescript@5.4.5)
106 | tsup:
107 | specifier: 8.0.2
108 | version: 8.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))(typescript@5.4.5)
109 | turbo-stream:
110 | specifier: 2.1.0
111 | version: 2.1.0
112 | typescript:
113 | specifier: 5.4.5
114 | version: 5.4.5
115 |
116 | plugin:
117 | dependencies:
118 | miniflare:
119 | specifier: 3.20240524.1
120 | version: 3.20240524.1
121 | vite:
122 | specifier: 6.0.0-alpha.17
123 | version: 6.0.0-alpha.17(@types/node@20.13.0)
124 | wrangler:
125 | specifier: 3.58.0
126 | version: 3.58.0(@cloudflare/workers-types@4.20240529.0)
127 | devDependencies:
128 | '@cloudflare/workers-types':
129 | specifier: 4.20240529.0
130 | version: 4.20240529.0
131 | '@hattip/adapter-node':
132 | specifier: 0.0.45
133 | version: 0.0.45
134 | '@hiogawa/utils':
135 | specifier: 1.6.4-pre.2
136 | version: 1.6.4-pre.2
137 | '@types/node':
138 | specifier: 20.13.0
139 | version: 20.13.0
140 | tsup:
141 | specifier: 8.0.2
142 | version: 8.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))(typescript@5.4.5)
143 | typescript:
144 | specifier: 5.4.5
145 | version: 5.4.5
146 |
147 | packages:
148 |
149 | '@alloc/quick-lru@5.2.0':
150 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
151 | engines: {node: '>=10'}
152 |
153 | '@ampproject/remapping@2.3.0':
154 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
155 | engines: {node: '>=6.0.0'}
156 |
157 | '@babel/code-frame@7.24.6':
158 | resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==}
159 | engines: {node: '>=6.9.0'}
160 |
161 | '@babel/compat-data@7.24.6':
162 | resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==}
163 | engines: {node: '>=6.9.0'}
164 |
165 | '@babel/core@7.24.4':
166 | resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==}
167 | engines: {node: '>=6.9.0'}
168 |
169 | '@babel/core@7.24.6':
170 | resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==}
171 | engines: {node: '>=6.9.0'}
172 |
173 | '@babel/generator@7.24.6':
174 | resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==}
175 | engines: {node: '>=6.9.0'}
176 |
177 | '@babel/helper-annotate-as-pure@7.24.6':
178 | resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==}
179 | engines: {node: '>=6.9.0'}
180 |
181 | '@babel/helper-compilation-targets@7.24.6':
182 | resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==}
183 | engines: {node: '>=6.9.0'}
184 |
185 | '@babel/helper-environment-visitor@7.24.6':
186 | resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==}
187 | engines: {node: '>=6.9.0'}
188 |
189 | '@babel/helper-function-name@7.24.6':
190 | resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==}
191 | engines: {node: '>=6.9.0'}
192 |
193 | '@babel/helper-hoist-variables@7.24.6':
194 | resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==}
195 | engines: {node: '>=6.9.0'}
196 |
197 | '@babel/helper-module-imports@7.24.3':
198 | resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
199 | engines: {node: '>=6.9.0'}
200 |
201 | '@babel/helper-module-imports@7.24.6':
202 | resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==}
203 | engines: {node: '>=6.9.0'}
204 |
205 | '@babel/helper-module-transforms@7.24.6':
206 | resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==}
207 | engines: {node: '>=6.9.0'}
208 | peerDependencies:
209 | '@babel/core': ^7.0.0
210 |
211 | '@babel/helper-plugin-utils@7.24.0':
212 | resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==}
213 | engines: {node: '>=6.9.0'}
214 |
215 | '@babel/helper-plugin-utils@7.24.6':
216 | resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==}
217 | engines: {node: '>=6.9.0'}
218 |
219 | '@babel/helper-simple-access@7.24.6':
220 | resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==}
221 | engines: {node: '>=6.9.0'}
222 |
223 | '@babel/helper-split-export-declaration@7.24.6':
224 | resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==}
225 | engines: {node: '>=6.9.0'}
226 |
227 | '@babel/helper-string-parser@7.24.6':
228 | resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
229 | engines: {node: '>=6.9.0'}
230 |
231 | '@babel/helper-validator-identifier@7.24.6':
232 | resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
233 | engines: {node: '>=6.9.0'}
234 |
235 | '@babel/helper-validator-option@7.24.6':
236 | resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==}
237 | engines: {node: '>=6.9.0'}
238 |
239 | '@babel/helpers@7.24.6':
240 | resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==}
241 | engines: {node: '>=6.9.0'}
242 |
243 | '@babel/highlight@7.24.6':
244 | resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==}
245 | engines: {node: '>=6.9.0'}
246 |
247 | '@babel/parser@7.24.6':
248 | resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==}
249 | engines: {node: '>=6.0.0'}
250 | hasBin: true
251 |
252 | '@babel/plugin-syntax-jsx@7.24.6':
253 | resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==}
254 | engines: {node: '>=6.9.0'}
255 | peerDependencies:
256 | '@babel/core': ^7.0.0-0
257 |
258 | '@babel/plugin-transform-react-jsx-development@7.24.6':
259 | resolution: {integrity: sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==}
260 | engines: {node: '>=6.9.0'}
261 | peerDependencies:
262 | '@babel/core': ^7.0.0-0
263 |
264 | '@babel/plugin-transform-react-jsx-self@7.24.6':
265 | resolution: {integrity: sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==}
266 | engines: {node: '>=6.9.0'}
267 | peerDependencies:
268 | '@babel/core': ^7.0.0-0
269 |
270 | '@babel/plugin-transform-react-jsx-source@7.24.6':
271 | resolution: {integrity: sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA==}
272 | engines: {node: '>=6.9.0'}
273 | peerDependencies:
274 | '@babel/core': ^7.0.0-0
275 |
276 | '@babel/plugin-transform-react-jsx@7.24.6':
277 | resolution: {integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==}
278 | engines: {node: '>=6.9.0'}
279 | peerDependencies:
280 | '@babel/core': ^7.0.0-0
281 |
282 | '@babel/template@7.24.6':
283 | resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==}
284 | engines: {node: '>=6.9.0'}
285 |
286 | '@babel/traverse@7.24.1':
287 | resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==}
288 | engines: {node: '>=6.9.0'}
289 |
290 | '@babel/traverse@7.24.6':
291 | resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==}
292 | engines: {node: '>=6.9.0'}
293 |
294 | '@babel/types@7.24.6':
295 | resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
296 | engines: {node: '>=6.9.0'}
297 |
298 | '@cloudflare/kv-asset-handler@0.3.2':
299 | resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==}
300 | engines: {node: '>=16.13'}
301 |
302 | '@cloudflare/workerd-darwin-64@1.20240524.0':
303 | resolution: {integrity: sha512-ATaXjefbTsrv4mpn4Fdua114RRDXcX5Ky+Mv+f4JTUllgalmqC4CYMN4jxRz9IpJU/fNMN8IEfvUyuJBAcl9Iw==}
304 | engines: {node: '>=16'}
305 | cpu: [x64]
306 | os: [darwin]
307 |
308 | '@cloudflare/workerd-darwin-arm64@1.20240524.0':
309 | resolution: {integrity: sha512-wnbsZI4CS0QPCd+wnBHQ40C28A/2Qo4ESi1YhE2735G3UNcc876MWksZhsubd+XH0XPIra6eNFqyw6wRMpQOXA==}
310 | engines: {node: '>=16'}
311 | cpu: [arm64]
312 | os: [darwin]
313 |
314 | '@cloudflare/workerd-linux-64@1.20240524.0':
315 | resolution: {integrity: sha512-E8mj+HPBryKwaJAiNsYzXtVjKCL0KvUBZbtxJxlWM4mLSQhT+uwGT3nydb/hFY59rZnQgZslw0oqEWht5TEYiQ==}
316 | engines: {node: '>=16'}
317 | cpu: [x64]
318 | os: [linux]
319 |
320 | '@cloudflare/workerd-linux-arm64@1.20240524.0':
321 | resolution: {integrity: sha512-/Fr1W671t2triNCDCBWdStxngnbUfZunZ/2e4kaMLzJDJLYDtYdmvOUCBDzUD4ssqmIMbn9RCQQ0U+CLEoqBqw==}
322 | engines: {node: '>=16'}
323 | cpu: [arm64]
324 | os: [linux]
325 |
326 | '@cloudflare/workerd-windows-64@1.20240524.0':
327 | resolution: {integrity: sha512-G+ThDEx57g9mAEKqhWnHaaJgpeGYtyhkmwM/BDpLqPks/rAY5YEfZbY4YL1pNk1kkcZDXGrwIsY8xe9Apf5JdA==}
328 | engines: {node: '>=16'}
329 | cpu: [x64]
330 | os: [win32]
331 |
332 | '@cloudflare/workers-types@4.20240529.0':
333 | resolution: {integrity: sha512-W5obfjAwCNdYk3feUHtDfUxtTU6WIq83k6gmrLLJv+HkgCkOTwwrDNs+3w1Qln0tMj+FQx/fbwxw3ZuHIoyzGg==}
334 |
335 | '@cspotcode/source-map-support@0.8.1':
336 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
337 | engines: {node: '>=12'}
338 |
339 | '@esbuild-plugins/node-globals-polyfill@0.2.3':
340 | resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
341 | peerDependencies:
342 | esbuild: '*'
343 |
344 | '@esbuild-plugins/node-modules-polyfill@0.2.2':
345 | resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==}
346 | peerDependencies:
347 | esbuild: '*'
348 |
349 | '@esbuild/aix-ppc64@0.19.12':
350 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
351 | engines: {node: '>=12'}
352 | cpu: [ppc64]
353 | os: [aix]
354 |
355 | '@esbuild/aix-ppc64@0.20.2':
356 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
357 | engines: {node: '>=12'}
358 | cpu: [ppc64]
359 | os: [aix]
360 |
361 | '@esbuild/android-arm64@0.17.19':
362 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
363 | engines: {node: '>=12'}
364 | cpu: [arm64]
365 | os: [android]
366 |
367 | '@esbuild/android-arm64@0.19.12':
368 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
369 | engines: {node: '>=12'}
370 | cpu: [arm64]
371 | os: [android]
372 |
373 | '@esbuild/android-arm64@0.20.2':
374 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
375 | engines: {node: '>=12'}
376 | cpu: [arm64]
377 | os: [android]
378 |
379 | '@esbuild/android-arm@0.17.19':
380 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
381 | engines: {node: '>=12'}
382 | cpu: [arm]
383 | os: [android]
384 |
385 | '@esbuild/android-arm@0.19.12':
386 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
387 | engines: {node: '>=12'}
388 | cpu: [arm]
389 | os: [android]
390 |
391 | '@esbuild/android-arm@0.20.2':
392 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
393 | engines: {node: '>=12'}
394 | cpu: [arm]
395 | os: [android]
396 |
397 | '@esbuild/android-x64@0.17.19':
398 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
399 | engines: {node: '>=12'}
400 | cpu: [x64]
401 | os: [android]
402 |
403 | '@esbuild/android-x64@0.19.12':
404 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
405 | engines: {node: '>=12'}
406 | cpu: [x64]
407 | os: [android]
408 |
409 | '@esbuild/android-x64@0.20.2':
410 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
411 | engines: {node: '>=12'}
412 | cpu: [x64]
413 | os: [android]
414 |
415 | '@esbuild/darwin-arm64@0.17.19':
416 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
417 | engines: {node: '>=12'}
418 | cpu: [arm64]
419 | os: [darwin]
420 |
421 | '@esbuild/darwin-arm64@0.19.12':
422 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
423 | engines: {node: '>=12'}
424 | cpu: [arm64]
425 | os: [darwin]
426 |
427 | '@esbuild/darwin-arm64@0.20.2':
428 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
429 | engines: {node: '>=12'}
430 | cpu: [arm64]
431 | os: [darwin]
432 |
433 | '@esbuild/darwin-x64@0.17.19':
434 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
435 | engines: {node: '>=12'}
436 | cpu: [x64]
437 | os: [darwin]
438 |
439 | '@esbuild/darwin-x64@0.19.12':
440 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
441 | engines: {node: '>=12'}
442 | cpu: [x64]
443 | os: [darwin]
444 |
445 | '@esbuild/darwin-x64@0.20.2':
446 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
447 | engines: {node: '>=12'}
448 | cpu: [x64]
449 | os: [darwin]
450 |
451 | '@esbuild/freebsd-arm64@0.17.19':
452 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
453 | engines: {node: '>=12'}
454 | cpu: [arm64]
455 | os: [freebsd]
456 |
457 | '@esbuild/freebsd-arm64@0.19.12':
458 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
459 | engines: {node: '>=12'}
460 | cpu: [arm64]
461 | os: [freebsd]
462 |
463 | '@esbuild/freebsd-arm64@0.20.2':
464 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
465 | engines: {node: '>=12'}
466 | cpu: [arm64]
467 | os: [freebsd]
468 |
469 | '@esbuild/freebsd-x64@0.17.19':
470 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
471 | engines: {node: '>=12'}
472 | cpu: [x64]
473 | os: [freebsd]
474 |
475 | '@esbuild/freebsd-x64@0.19.12':
476 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
477 | engines: {node: '>=12'}
478 | cpu: [x64]
479 | os: [freebsd]
480 |
481 | '@esbuild/freebsd-x64@0.20.2':
482 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
483 | engines: {node: '>=12'}
484 | cpu: [x64]
485 | os: [freebsd]
486 |
487 | '@esbuild/linux-arm64@0.17.19':
488 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
489 | engines: {node: '>=12'}
490 | cpu: [arm64]
491 | os: [linux]
492 |
493 | '@esbuild/linux-arm64@0.19.12':
494 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
495 | engines: {node: '>=12'}
496 | cpu: [arm64]
497 | os: [linux]
498 |
499 | '@esbuild/linux-arm64@0.20.2':
500 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
501 | engines: {node: '>=12'}
502 | cpu: [arm64]
503 | os: [linux]
504 |
505 | '@esbuild/linux-arm@0.17.19':
506 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
507 | engines: {node: '>=12'}
508 | cpu: [arm]
509 | os: [linux]
510 |
511 | '@esbuild/linux-arm@0.19.12':
512 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
513 | engines: {node: '>=12'}
514 | cpu: [arm]
515 | os: [linux]
516 |
517 | '@esbuild/linux-arm@0.20.2':
518 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
519 | engines: {node: '>=12'}
520 | cpu: [arm]
521 | os: [linux]
522 |
523 | '@esbuild/linux-ia32@0.17.19':
524 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
525 | engines: {node: '>=12'}
526 | cpu: [ia32]
527 | os: [linux]
528 |
529 | '@esbuild/linux-ia32@0.19.12':
530 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
531 | engines: {node: '>=12'}
532 | cpu: [ia32]
533 | os: [linux]
534 |
535 | '@esbuild/linux-ia32@0.20.2':
536 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
537 | engines: {node: '>=12'}
538 | cpu: [ia32]
539 | os: [linux]
540 |
541 | '@esbuild/linux-loong64@0.17.19':
542 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
543 | engines: {node: '>=12'}
544 | cpu: [loong64]
545 | os: [linux]
546 |
547 | '@esbuild/linux-loong64@0.19.12':
548 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
549 | engines: {node: '>=12'}
550 | cpu: [loong64]
551 | os: [linux]
552 |
553 | '@esbuild/linux-loong64@0.20.2':
554 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
555 | engines: {node: '>=12'}
556 | cpu: [loong64]
557 | os: [linux]
558 |
559 | '@esbuild/linux-mips64el@0.17.19':
560 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
561 | engines: {node: '>=12'}
562 | cpu: [mips64el]
563 | os: [linux]
564 |
565 | '@esbuild/linux-mips64el@0.19.12':
566 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
567 | engines: {node: '>=12'}
568 | cpu: [mips64el]
569 | os: [linux]
570 |
571 | '@esbuild/linux-mips64el@0.20.2':
572 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
573 | engines: {node: '>=12'}
574 | cpu: [mips64el]
575 | os: [linux]
576 |
577 | '@esbuild/linux-ppc64@0.17.19':
578 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
579 | engines: {node: '>=12'}
580 | cpu: [ppc64]
581 | os: [linux]
582 |
583 | '@esbuild/linux-ppc64@0.19.12':
584 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
585 | engines: {node: '>=12'}
586 | cpu: [ppc64]
587 | os: [linux]
588 |
589 | '@esbuild/linux-ppc64@0.20.2':
590 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
591 | engines: {node: '>=12'}
592 | cpu: [ppc64]
593 | os: [linux]
594 |
595 | '@esbuild/linux-riscv64@0.17.19':
596 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
597 | engines: {node: '>=12'}
598 | cpu: [riscv64]
599 | os: [linux]
600 |
601 | '@esbuild/linux-riscv64@0.19.12':
602 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
603 | engines: {node: '>=12'}
604 | cpu: [riscv64]
605 | os: [linux]
606 |
607 | '@esbuild/linux-riscv64@0.20.2':
608 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
609 | engines: {node: '>=12'}
610 | cpu: [riscv64]
611 | os: [linux]
612 |
613 | '@esbuild/linux-s390x@0.17.19':
614 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
615 | engines: {node: '>=12'}
616 | cpu: [s390x]
617 | os: [linux]
618 |
619 | '@esbuild/linux-s390x@0.19.12':
620 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
621 | engines: {node: '>=12'}
622 | cpu: [s390x]
623 | os: [linux]
624 |
625 | '@esbuild/linux-s390x@0.20.2':
626 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
627 | engines: {node: '>=12'}
628 | cpu: [s390x]
629 | os: [linux]
630 |
631 | '@esbuild/linux-x64@0.17.19':
632 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
633 | engines: {node: '>=12'}
634 | cpu: [x64]
635 | os: [linux]
636 |
637 | '@esbuild/linux-x64@0.19.12':
638 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
639 | engines: {node: '>=12'}
640 | cpu: [x64]
641 | os: [linux]
642 |
643 | '@esbuild/linux-x64@0.20.2':
644 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
645 | engines: {node: '>=12'}
646 | cpu: [x64]
647 | os: [linux]
648 |
649 | '@esbuild/netbsd-x64@0.17.19':
650 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
651 | engines: {node: '>=12'}
652 | cpu: [x64]
653 | os: [netbsd]
654 |
655 | '@esbuild/netbsd-x64@0.19.12':
656 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
657 | engines: {node: '>=12'}
658 | cpu: [x64]
659 | os: [netbsd]
660 |
661 | '@esbuild/netbsd-x64@0.20.2':
662 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
663 | engines: {node: '>=12'}
664 | cpu: [x64]
665 | os: [netbsd]
666 |
667 | '@esbuild/openbsd-x64@0.17.19':
668 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
669 | engines: {node: '>=12'}
670 | cpu: [x64]
671 | os: [openbsd]
672 |
673 | '@esbuild/openbsd-x64@0.19.12':
674 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
675 | engines: {node: '>=12'}
676 | cpu: [x64]
677 | os: [openbsd]
678 |
679 | '@esbuild/openbsd-x64@0.20.2':
680 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
681 | engines: {node: '>=12'}
682 | cpu: [x64]
683 | os: [openbsd]
684 |
685 | '@esbuild/sunos-x64@0.17.19':
686 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
687 | engines: {node: '>=12'}
688 | cpu: [x64]
689 | os: [sunos]
690 |
691 | '@esbuild/sunos-x64@0.19.12':
692 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
693 | engines: {node: '>=12'}
694 | cpu: [x64]
695 | os: [sunos]
696 |
697 | '@esbuild/sunos-x64@0.20.2':
698 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
699 | engines: {node: '>=12'}
700 | cpu: [x64]
701 | os: [sunos]
702 |
703 | '@esbuild/win32-arm64@0.17.19':
704 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
705 | engines: {node: '>=12'}
706 | cpu: [arm64]
707 | os: [win32]
708 |
709 | '@esbuild/win32-arm64@0.19.12':
710 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
711 | engines: {node: '>=12'}
712 | cpu: [arm64]
713 | os: [win32]
714 |
715 | '@esbuild/win32-arm64@0.20.2':
716 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
717 | engines: {node: '>=12'}
718 | cpu: [arm64]
719 | os: [win32]
720 |
721 | '@esbuild/win32-ia32@0.17.19':
722 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
723 | engines: {node: '>=12'}
724 | cpu: [ia32]
725 | os: [win32]
726 |
727 | '@esbuild/win32-ia32@0.19.12':
728 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
729 | engines: {node: '>=12'}
730 | cpu: [ia32]
731 | os: [win32]
732 |
733 | '@esbuild/win32-ia32@0.20.2':
734 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
735 | engines: {node: '>=12'}
736 | cpu: [ia32]
737 | os: [win32]
738 |
739 | '@esbuild/win32-x64@0.17.19':
740 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
741 | engines: {node: '>=12'}
742 | cpu: [x64]
743 | os: [win32]
744 |
745 | '@esbuild/win32-x64@0.19.12':
746 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
747 | engines: {node: '>=12'}
748 | cpu: [x64]
749 | os: [win32]
750 |
751 | '@esbuild/win32-x64@0.20.2':
752 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
753 | engines: {node: '>=12'}
754 | cpu: [x64]
755 | os: [win32]
756 |
757 | '@fastify/busboy@2.1.1':
758 | resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
759 | engines: {node: '>=14'}
760 |
761 | '@hattip/adapter-node@0.0.45':
762 | resolution: {integrity: sha512-doZZbmI4y3AQ1nObGNIHTD+5+u0KjfEvpnpwgxVzyh6/SLC3w+G2Za9lNtv9PXiwHMXWFph942aXnZFOx7M4YQ==}
763 |
764 | '@hattip/core@0.0.45':
765 | resolution: {integrity: sha512-4BK9dPU7sLvmP9sUq048uSaKFvQY2Qa6D0xQteQBIiDYuTdbopcUQLETM1sdkUeUtFxHPwPu/NclfJAC5INarw==}
766 |
767 | '@hattip/headers@0.0.45':
768 | resolution: {integrity: sha512-owgxAt1jdhEcAdDfnlpPa8iQx/swItReYUlo8UFZ0GUCMiWJvnpl6rTdUsS6bCwMK9IJOliivN4dHEY8VKdGQw==}
769 |
770 | '@hattip/polyfills@0.0.45':
771 | resolution: {integrity: sha512-H8a+NVu/rAspycnkLSLVvWu3ei/ndFhA+3KQS1p2YjCcuf4Wuj4EWfScrwgL4d6CR0J+FxqX1P9NDGa4tdJQmQ==}
772 |
773 | '@hattip/walk@0.0.45':
774 | resolution: {integrity: sha512-GYEQN5n2JUzjLl9hdMJ+0mbsfwvldRKMBdxx+l29SxmRhOwyWURDyaSfX7UEkEmmxjbg4YqEoWyYgaAtxeW7Jw==}
775 | hasBin: true
776 |
777 | '@hiogawa/utils@1.6.4-pre.2':
778 | resolution: {integrity: sha512-t49f46YPtqOBHWdceDX1PKK8dhIemFzNCFx2KtfCVUx0W4rZ4TtAyVAKbh7mJmLh/yITr3gNb0SxkfNyOZy0hQ==}
779 |
780 | '@hono/node-server@1.11.2':
781 | resolution: {integrity: sha512-JhX0nUC66GeDxpIdMKWDRMEwtQBa64CY907iAF1sYqb4m2p2PdSU7zkbnNhAZLg/6IjSlTuj6CF307JlBXVvpg==}
782 | engines: {node: '>=18.14.1'}
783 |
784 | '@isaacs/cliui@8.0.2':
785 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
786 | engines: {node: '>=12'}
787 |
788 | '@jridgewell/gen-mapping@0.3.5':
789 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
790 | engines: {node: '>=6.0.0'}
791 |
792 | '@jridgewell/resolve-uri@3.1.2':
793 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
794 | engines: {node: '>=6.0.0'}
795 |
796 | '@jridgewell/set-array@1.2.1':
797 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
798 | engines: {node: '>=6.0.0'}
799 |
800 | '@jridgewell/sourcemap-codec@1.4.15':
801 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
802 |
803 | '@jridgewell/trace-mapping@0.3.25':
804 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
805 |
806 | '@jridgewell/trace-mapping@0.3.9':
807 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
808 |
809 | '@kamilkisiela/fast-url-parser@1.1.4':
810 | resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==}
811 |
812 | '@nodelib/fs.scandir@2.1.5':
813 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
814 | engines: {node: '>= 8'}
815 |
816 | '@nodelib/fs.stat@2.0.5':
817 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
818 | engines: {node: '>= 8'}
819 |
820 | '@nodelib/fs.walk@1.2.8':
821 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
822 | engines: {node: '>= 8'}
823 |
824 | '@pkgjs/parseargs@0.11.0':
825 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
826 | engines: {node: '>=14'}
827 |
828 | '@preact/preset-vite@2.8.2':
829 | resolution: {integrity: sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==}
830 | peerDependencies:
831 | '@babel/core': 7.x
832 | vite: 6.0.0-alpha.17
833 |
834 | '@prefresh/babel-plugin@0.5.1':
835 | resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==}
836 |
837 | '@prefresh/core@1.5.2':
838 | resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==}
839 | peerDependencies:
840 | preact: ^10.0.0
841 |
842 | '@prefresh/utils@1.2.0':
843 | resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==}
844 |
845 | '@prefresh/vite@2.4.5':
846 | resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==}
847 | peerDependencies:
848 | preact: ^10.4.0
849 | vite: 6.0.0-alpha.17
850 |
851 | '@rollup/pluginutils@4.2.1':
852 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
853 | engines: {node: '>= 8.0.0'}
854 |
855 | '@rollup/pluginutils@5.1.0':
856 | resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
857 | engines: {node: '>=14.0.0'}
858 | peerDependencies:
859 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
860 | peerDependenciesMeta:
861 | rollup:
862 | optional: true
863 |
864 | '@rollup/rollup-android-arm-eabi@4.18.0':
865 | resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==}
866 | cpu: [arm]
867 | os: [android]
868 |
869 | '@rollup/rollup-android-arm64@4.18.0':
870 | resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==}
871 | cpu: [arm64]
872 | os: [android]
873 |
874 | '@rollup/rollup-darwin-arm64@4.18.0':
875 | resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==}
876 | cpu: [arm64]
877 | os: [darwin]
878 |
879 | '@rollup/rollup-darwin-x64@4.18.0':
880 | resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==}
881 | cpu: [x64]
882 | os: [darwin]
883 |
884 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
885 | resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==}
886 | cpu: [arm]
887 | os: [linux]
888 |
889 | '@rollup/rollup-linux-arm-musleabihf@4.18.0':
890 | resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==}
891 | cpu: [arm]
892 | os: [linux]
893 |
894 | '@rollup/rollup-linux-arm64-gnu@4.18.0':
895 | resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==}
896 | cpu: [arm64]
897 | os: [linux]
898 |
899 | '@rollup/rollup-linux-arm64-musl@4.18.0':
900 | resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==}
901 | cpu: [arm64]
902 | os: [linux]
903 |
904 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
905 | resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==}
906 | cpu: [ppc64]
907 | os: [linux]
908 |
909 | '@rollup/rollup-linux-riscv64-gnu@4.18.0':
910 | resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==}
911 | cpu: [riscv64]
912 | os: [linux]
913 |
914 | '@rollup/rollup-linux-s390x-gnu@4.18.0':
915 | resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==}
916 | cpu: [s390x]
917 | os: [linux]
918 |
919 | '@rollup/rollup-linux-x64-gnu@4.18.0':
920 | resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==}
921 | cpu: [x64]
922 | os: [linux]
923 |
924 | '@rollup/rollup-linux-x64-musl@4.18.0':
925 | resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==}
926 | cpu: [x64]
927 | os: [linux]
928 |
929 | '@rollup/rollup-win32-arm64-msvc@4.18.0':
930 | resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==}
931 | cpu: [arm64]
932 | os: [win32]
933 |
934 | '@rollup/rollup-win32-ia32-msvc@4.18.0':
935 | resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==}
936 | cpu: [ia32]
937 | os: [win32]
938 |
939 | '@rollup/rollup-win32-x64-msvc@4.18.0':
940 | resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==}
941 | cpu: [x64]
942 | os: [win32]
943 |
944 | '@tsconfig/node10@1.0.11':
945 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
946 |
947 | '@tsconfig/node12@1.0.11':
948 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
949 |
950 | '@tsconfig/node14@1.0.3':
951 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
952 |
953 | '@tsconfig/node16@1.0.4':
954 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
955 |
956 | '@types/babel__core@7.20.5':
957 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
958 |
959 | '@types/babel__generator@7.6.8':
960 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
961 |
962 | '@types/babel__template@7.4.4':
963 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
964 |
965 | '@types/babel__traverse@7.20.6':
966 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
967 |
968 | '@types/dom-navigation@1.0.3':
969 | resolution: {integrity: sha512-nbkhQ2o6UUBn1uLwSrA//rFkqs8XRk5d7cE6jzzTl8MAIUs/nFMtFqVESwiYY1HGZxflzbFlXsZ8NNzTaoFs1Q==}
970 |
971 | '@types/estree@1.0.5':
972 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
973 |
974 | '@types/node-forge@1.3.11':
975 | resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
976 |
977 | '@types/node@20.13.0':
978 | resolution: {integrity: sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==}
979 |
980 | '@vitejs/plugin-react@4.3.0':
981 | resolution: {integrity: sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==}
982 | engines: {node: ^14.18.0 || >=16.0.0}
983 | peerDependencies:
984 | vite: 6.0.0-alpha.17
985 |
986 | '@whatwg-node/events@0.1.1':
987 | resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==}
988 | engines: {node: '>=16.0.0'}
989 |
990 | '@whatwg-node/fetch@0.9.17':
991 | resolution: {integrity: sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==}
992 | engines: {node: '>=16.0.0'}
993 |
994 | '@whatwg-node/node-fetch@0.5.11':
995 | resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==}
996 | engines: {node: '>=16.0.0'}
997 |
998 | acorn-walk@8.3.2:
999 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
1000 | engines: {node: '>=0.4.0'}
1001 |
1002 | acorn@8.11.3:
1003 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
1004 | engines: {node: '>=0.4.0'}
1005 | hasBin: true
1006 |
1007 | ansi-regex@5.0.1:
1008 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1009 | engines: {node: '>=8'}
1010 |
1011 | ansi-regex@6.0.1:
1012 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
1013 | engines: {node: '>=12'}
1014 |
1015 | ansi-styles@3.2.1:
1016 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
1017 | engines: {node: '>=4'}
1018 |
1019 | ansi-styles@4.3.0:
1020 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1021 | engines: {node: '>=8'}
1022 |
1023 | ansi-styles@6.2.1:
1024 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1025 | engines: {node: '>=12'}
1026 |
1027 | any-promise@1.3.0:
1028 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
1029 |
1030 | anymatch@3.1.3:
1031 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
1032 | engines: {node: '>= 8'}
1033 |
1034 | arg@4.1.3:
1035 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
1036 |
1037 | arg@5.0.2:
1038 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
1039 |
1040 | array-union@2.1.0:
1041 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
1042 | engines: {node: '>=8'}
1043 |
1044 | as-table@1.0.55:
1045 | resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
1046 |
1047 | autoprefixer@10.4.19:
1048 | resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
1049 | engines: {node: ^10 || ^12 || >=14}
1050 | hasBin: true
1051 | peerDependencies:
1052 | postcss: ^8.1.0
1053 |
1054 | babel-plugin-transform-hook-names@1.0.2:
1055 | resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==}
1056 | peerDependencies:
1057 | '@babel/core': ^7.12.10
1058 |
1059 | balanced-match@1.0.2:
1060 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1061 |
1062 | binary-extensions@2.3.0:
1063 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
1064 | engines: {node: '>=8'}
1065 |
1066 | blake3-wasm@2.1.5:
1067 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
1068 |
1069 | boolbase@1.0.0:
1070 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
1071 |
1072 | brace-expansion@2.0.1:
1073 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1074 |
1075 | braces@3.0.3:
1076 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1077 | engines: {node: '>=8'}
1078 |
1079 | browserslist@4.23.0:
1080 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
1081 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1082 | hasBin: true
1083 |
1084 | bundle-require@4.1.0:
1085 | resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==}
1086 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1087 | peerDependencies:
1088 | esbuild: '>=0.17'
1089 |
1090 | busboy@1.6.0:
1091 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
1092 | engines: {node: '>=10.16.0'}
1093 |
1094 | cac@6.7.14:
1095 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1096 | engines: {node: '>=8'}
1097 |
1098 | camelcase-css@2.0.1:
1099 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
1100 | engines: {node: '>= 6'}
1101 |
1102 | caniuse-lite@1.0.30001625:
1103 | resolution: {integrity: sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==}
1104 |
1105 | capnp-ts@0.7.0:
1106 | resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==}
1107 |
1108 | chalk@2.4.2:
1109 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1110 | engines: {node: '>=4'}
1111 |
1112 | chokidar@3.6.0:
1113 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
1114 | engines: {node: '>= 8.10.0'}
1115 |
1116 | color-convert@1.9.3:
1117 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1118 |
1119 | color-convert@2.0.1:
1120 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1121 | engines: {node: '>=7.0.0'}
1122 |
1123 | color-name@1.1.3:
1124 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1125 |
1126 | color-name@1.1.4:
1127 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1128 |
1129 | commander@4.1.1:
1130 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
1131 | engines: {node: '>= 6'}
1132 |
1133 | convert-source-map@2.0.0:
1134 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1135 |
1136 | cookie@0.5.0:
1137 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1138 | engines: {node: '>= 0.6'}
1139 |
1140 | create-require@1.1.1:
1141 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
1142 |
1143 | cross-spawn@7.0.3:
1144 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1145 | engines: {node: '>= 8'}
1146 |
1147 | css-select@5.1.0:
1148 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
1149 |
1150 | css-what@6.1.0:
1151 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
1152 | engines: {node: '>= 6'}
1153 |
1154 | cssesc@3.0.0:
1155 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
1156 | engines: {node: '>=4'}
1157 | hasBin: true
1158 |
1159 | data-uri-to-buffer@2.0.2:
1160 | resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
1161 |
1162 | debug@4.3.5:
1163 | resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
1164 | engines: {node: '>=6.0'}
1165 | peerDependencies:
1166 | supports-color: '*'
1167 | peerDependenciesMeta:
1168 | supports-color:
1169 | optional: true
1170 |
1171 | didyoumean@1.2.2:
1172 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1173 |
1174 | diff@4.0.2:
1175 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
1176 | engines: {node: '>=0.3.1'}
1177 |
1178 | dir-glob@3.0.1:
1179 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1180 | engines: {node: '>=8'}
1181 |
1182 | dlv@1.1.3:
1183 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
1184 |
1185 | dom-serializer@2.0.0:
1186 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
1187 |
1188 | domelementtype@2.3.0:
1189 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
1190 |
1191 | domhandler@5.0.3:
1192 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
1193 | engines: {node: '>= 4'}
1194 |
1195 | domutils@3.1.0:
1196 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
1197 |
1198 | eastasianwidth@0.2.0:
1199 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1200 |
1201 | electron-to-chromium@1.4.788:
1202 | resolution: {integrity: sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==}
1203 |
1204 | emoji-regex@8.0.0:
1205 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1206 |
1207 | emoji-regex@9.2.2:
1208 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1209 |
1210 | entities@4.5.0:
1211 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
1212 | engines: {node: '>=0.12'}
1213 |
1214 | esbuild@0.17.19:
1215 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
1216 | engines: {node: '>=12'}
1217 | hasBin: true
1218 |
1219 | esbuild@0.19.12:
1220 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
1221 | engines: {node: '>=12'}
1222 | hasBin: true
1223 |
1224 | esbuild@0.20.2:
1225 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
1226 | engines: {node: '>=12'}
1227 | hasBin: true
1228 |
1229 | escalade@3.1.2:
1230 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
1231 | engines: {node: '>=6'}
1232 |
1233 | escape-string-regexp@1.0.5:
1234 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1235 | engines: {node: '>=0.8.0'}
1236 |
1237 | escape-string-regexp@4.0.0:
1238 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1239 | engines: {node: '>=10'}
1240 |
1241 | estree-walker@0.6.1:
1242 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
1243 |
1244 | estree-walker@2.0.2:
1245 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
1246 |
1247 | execa@5.1.1:
1248 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1249 | engines: {node: '>=10'}
1250 |
1251 | exit-hook@2.2.1:
1252 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
1253 | engines: {node: '>=6'}
1254 |
1255 | fast-decode-uri-component@1.0.1:
1256 | resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
1257 |
1258 | fast-glob@3.3.2:
1259 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
1260 | engines: {node: '>=8.6.0'}
1261 |
1262 | fast-querystring@1.1.2:
1263 | resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
1264 |
1265 | fastq@1.17.1:
1266 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
1267 |
1268 | fill-range@7.1.1:
1269 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1270 | engines: {node: '>=8'}
1271 |
1272 | foreground-child@3.1.1:
1273 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
1274 | engines: {node: '>=14'}
1275 |
1276 | fraction.js@4.3.7:
1277 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
1278 |
1279 | fsevents@2.3.3:
1280 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1281 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1282 | os: [darwin]
1283 |
1284 | function-bind@1.1.2:
1285 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1286 |
1287 | gensync@1.0.0-beta.2:
1288 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1289 | engines: {node: '>=6.9.0'}
1290 |
1291 | get-source@2.0.12:
1292 | resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
1293 |
1294 | get-stream@6.0.1:
1295 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1296 | engines: {node: '>=10'}
1297 |
1298 | glob-parent@5.1.2:
1299 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1300 | engines: {node: '>= 6'}
1301 |
1302 | glob-parent@6.0.2:
1303 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1304 | engines: {node: '>=10.13.0'}
1305 |
1306 | glob-to-regexp@0.4.1:
1307 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
1308 |
1309 | glob@10.4.1:
1310 | resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
1311 | engines: {node: '>=16 || 14 >=14.18'}
1312 | hasBin: true
1313 |
1314 | globals@11.12.0:
1315 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1316 | engines: {node: '>=4'}
1317 |
1318 | globby@11.1.0:
1319 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1320 | engines: {node: '>=10'}
1321 |
1322 | has-flag@3.0.0:
1323 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1324 | engines: {node: '>=4'}
1325 |
1326 | hasown@2.0.2:
1327 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1328 | engines: {node: '>= 0.4'}
1329 |
1330 | he@1.2.0:
1331 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
1332 | hasBin: true
1333 |
1334 | hono@4.4.2:
1335 | resolution: {integrity: sha512-bRhZ+BM9r04lRN2i9wiZ18yQNbZxHsmmRIItoAb43nRkHnIDsFhFh4mJ0seEs06FvenibpAgSVNHQ8ZzcDQx2A==}
1336 | engines: {node: '>=16.0.0'}
1337 |
1338 | human-signals@2.1.0:
1339 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1340 | engines: {node: '>=10.17.0'}
1341 |
1342 | ignore@5.3.1:
1343 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
1344 | engines: {node: '>= 4'}
1345 |
1346 | is-binary-path@2.1.0:
1347 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1348 | engines: {node: '>=8'}
1349 |
1350 | is-core-module@2.13.1:
1351 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
1352 |
1353 | is-extglob@2.1.1:
1354 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1355 | engines: {node: '>=0.10.0'}
1356 |
1357 | is-fullwidth-code-point@3.0.0:
1358 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1359 | engines: {node: '>=8'}
1360 |
1361 | is-glob@4.0.3:
1362 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1363 | engines: {node: '>=0.10.0'}
1364 |
1365 | is-number@7.0.0:
1366 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1367 | engines: {node: '>=0.12.0'}
1368 |
1369 | is-stream@2.0.1:
1370 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1371 | engines: {node: '>=8'}
1372 |
1373 | isexe@2.0.0:
1374 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1375 |
1376 | jackspeak@3.1.2:
1377 | resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==}
1378 | engines: {node: '>=14'}
1379 |
1380 | jiti@1.21.0:
1381 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
1382 | hasBin: true
1383 |
1384 | joycon@3.1.1:
1385 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
1386 | engines: {node: '>=10'}
1387 |
1388 | js-tokens@4.0.0:
1389 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1390 |
1391 | jsesc@2.5.2:
1392 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
1393 | engines: {node: '>=4'}
1394 | hasBin: true
1395 |
1396 | json5@2.2.3:
1397 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1398 | engines: {node: '>=6'}
1399 | hasBin: true
1400 |
1401 | kolorist@1.8.0:
1402 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1403 |
1404 | lilconfig@2.1.0:
1405 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
1406 | engines: {node: '>=10'}
1407 |
1408 | lilconfig@3.1.1:
1409 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
1410 | engines: {node: '>=14'}
1411 |
1412 | lines-and-columns@1.2.4:
1413 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1414 |
1415 | load-tsconfig@0.2.5:
1416 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
1417 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1418 |
1419 | lodash.sortby@4.7.0:
1420 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
1421 |
1422 | lru-cache@10.2.2:
1423 | resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
1424 | engines: {node: 14 || >=16.14}
1425 |
1426 | lru-cache@5.1.1:
1427 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1428 |
1429 | magic-string@0.25.9:
1430 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
1431 |
1432 | magic-string@0.30.5:
1433 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
1434 | engines: {node: '>=12'}
1435 |
1436 | make-error@1.3.6:
1437 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
1438 |
1439 | merge-stream@2.0.0:
1440 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1441 |
1442 | merge2@1.4.1:
1443 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1444 | engines: {node: '>= 8'}
1445 |
1446 | micromatch@4.0.7:
1447 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
1448 | engines: {node: '>=8.6'}
1449 |
1450 | mime-db@1.52.0:
1451 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1452 | engines: {node: '>= 0.6'}
1453 |
1454 | mime-types@2.1.35:
1455 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1456 | engines: {node: '>= 0.6'}
1457 |
1458 | mime@3.0.0:
1459 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1460 | engines: {node: '>=10.0.0'}
1461 | hasBin: true
1462 |
1463 | mimic-fn@2.1.0:
1464 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1465 | engines: {node: '>=6'}
1466 |
1467 | miniflare@3.20240524.1:
1468 | resolution: {integrity: sha512-5d3pRxvd5pT7lX1SsBH9+AjXuyHJnChSNOnYhubfi7pxMek4ZfULwhnUmNUp1R7b2xKuzqdFDZa0fsZuUoFxlw==}
1469 | engines: {node: '>=16.13'}
1470 | hasBin: true
1471 |
1472 | minimatch@9.0.4:
1473 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
1474 | engines: {node: '>=16 || 14 >=14.17'}
1475 |
1476 | minipass@7.1.2:
1477 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1478 | engines: {node: '>=16 || 14 >=14.17'}
1479 |
1480 | ms@2.1.2:
1481 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1482 |
1483 | mustache@4.2.0:
1484 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
1485 | hasBin: true
1486 |
1487 | mz@2.7.0:
1488 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1489 |
1490 | nanoid@3.3.7:
1491 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
1492 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1493 | hasBin: true
1494 |
1495 | node-fetch-native@1.6.4:
1496 | resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
1497 |
1498 | node-forge@1.3.1:
1499 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
1500 | engines: {node: '>= 6.13.0'}
1501 |
1502 | node-html-parser@6.1.13:
1503 | resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
1504 |
1505 | node-releases@2.0.14:
1506 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
1507 |
1508 | normalize-path@3.0.0:
1509 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1510 | engines: {node: '>=0.10.0'}
1511 |
1512 | normalize-range@0.1.2:
1513 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
1514 | engines: {node: '>=0.10.0'}
1515 |
1516 | npm-run-path@4.0.1:
1517 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
1518 | engines: {node: '>=8'}
1519 |
1520 | nth-check@2.1.1:
1521 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
1522 |
1523 | object-assign@4.1.1:
1524 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1525 | engines: {node: '>=0.10.0'}
1526 |
1527 | object-hash@3.0.0:
1528 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
1529 | engines: {node: '>= 6'}
1530 |
1531 | onetime@5.1.2:
1532 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1533 | engines: {node: '>=6'}
1534 |
1535 | path-key@3.1.1:
1536 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1537 | engines: {node: '>=8'}
1538 |
1539 | path-parse@1.0.7:
1540 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1541 |
1542 | path-scurry@1.11.1:
1543 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1544 | engines: {node: '>=16 || 14 >=14.18'}
1545 |
1546 | path-to-regexp@6.2.2:
1547 | resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
1548 |
1549 | path-type@4.0.0:
1550 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1551 | engines: {node: '>=8'}
1552 |
1553 | picocolors@1.0.1:
1554 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
1555 |
1556 | picomatch@2.3.1:
1557 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1558 | engines: {node: '>=8.6'}
1559 |
1560 | pify@2.3.0:
1561 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
1562 | engines: {node: '>=0.10.0'}
1563 |
1564 | pirates@4.0.6:
1565 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
1566 | engines: {node: '>= 6'}
1567 |
1568 | postcss-import@15.1.0:
1569 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
1570 | engines: {node: '>=14.0.0'}
1571 | peerDependencies:
1572 | postcss: ^8.0.0
1573 |
1574 | postcss-js@4.0.1:
1575 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
1576 | engines: {node: ^12 || ^14 || >= 16}
1577 | peerDependencies:
1578 | postcss: ^8.4.21
1579 |
1580 | postcss-load-config@4.0.2:
1581 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1582 | engines: {node: '>= 14'}
1583 | peerDependencies:
1584 | postcss: '>=8.0.9'
1585 | ts-node: 10.9.2
1586 | peerDependenciesMeta:
1587 | postcss:
1588 | optional: true
1589 | ts-node:
1590 | optional: true
1591 |
1592 | postcss-nested@6.0.1:
1593 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
1594 | engines: {node: '>=12.0'}
1595 | peerDependencies:
1596 | postcss: ^8.2.14
1597 |
1598 | postcss-selector-parser@6.1.0:
1599 | resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==}
1600 | engines: {node: '>=4'}
1601 |
1602 | postcss-value-parser@4.2.0:
1603 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1604 |
1605 | postcss@8.4.38:
1606 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
1607 | engines: {node: ^10 || ^12 || >=14}
1608 |
1609 | preact@10.22.0:
1610 | resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==}
1611 |
1612 | printable-characters@1.0.42:
1613 | resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
1614 |
1615 | punycode@2.3.1:
1616 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1617 | engines: {node: '>=6'}
1618 |
1619 | queue-microtask@1.2.3:
1620 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1621 |
1622 | react-refresh@0.14.2:
1623 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
1624 | engines: {node: '>=0.10.0'}
1625 |
1626 | read-cache@1.0.0:
1627 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1628 |
1629 | readdirp@3.6.0:
1630 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1631 | engines: {node: '>=8.10.0'}
1632 |
1633 | resolve-from@5.0.0:
1634 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1635 | engines: {node: '>=8'}
1636 |
1637 | resolve.exports@2.0.2:
1638 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
1639 | engines: {node: '>=10'}
1640 |
1641 | resolve@1.22.8:
1642 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
1643 | hasBin: true
1644 |
1645 | reusify@1.0.4:
1646 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1647 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1648 |
1649 | rollup-plugin-inject@3.0.2:
1650 | resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
1651 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
1652 |
1653 | rollup-plugin-node-polyfills@0.2.1:
1654 | resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
1655 |
1656 | rollup-pluginutils@2.8.2:
1657 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
1658 |
1659 | rollup@4.18.0:
1660 | resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==}
1661 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1662 | hasBin: true
1663 |
1664 | rsc-html-stream@0.0.3:
1665 | resolution: {integrity: sha512-GrHT+ADZM1Mj+sfXNjJjtFCwvB/xK5gx9KHQqcHJQIKfZ0Nh3wd8O59Nvd7VLb8lyvdOkqnqi5d5TAtDICf8yQ==}
1666 |
1667 | run-parallel@1.2.0:
1668 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1669 |
1670 | selfsigned@2.4.1:
1671 | resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
1672 | engines: {node: '>=10'}
1673 |
1674 | semver@6.3.1:
1675 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1676 | hasBin: true
1677 |
1678 | shebang-command@2.0.0:
1679 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1680 | engines: {node: '>=8'}
1681 |
1682 | shebang-regex@3.0.0:
1683 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1684 | engines: {node: '>=8'}
1685 |
1686 | signal-exit@3.0.7:
1687 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1688 |
1689 | signal-exit@4.1.0:
1690 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1691 | engines: {node: '>=14'}
1692 |
1693 | slash@3.0.0:
1694 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1695 | engines: {node: '>=8'}
1696 |
1697 | source-map-js@1.2.0:
1698 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
1699 | engines: {node: '>=0.10.0'}
1700 |
1701 | source-map@0.6.1:
1702 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1703 | engines: {node: '>=0.10.0'}
1704 |
1705 | source-map@0.7.4:
1706 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
1707 | engines: {node: '>= 8'}
1708 |
1709 | source-map@0.8.0-beta.0:
1710 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1711 | engines: {node: '>= 8'}
1712 |
1713 | sourcemap-codec@1.4.8:
1714 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1715 | deprecated: Please use @jridgewell/sourcemap-codec instead
1716 |
1717 | stack-trace@1.0.0-pre2:
1718 | resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==}
1719 | engines: {node: '>=16'}
1720 |
1721 | stacktracey@2.1.8:
1722 | resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
1723 |
1724 | stoppable@1.1.0:
1725 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
1726 | engines: {node: '>=4', npm: '>=6'}
1727 |
1728 | streamsearch@1.1.0:
1729 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
1730 | engines: {node: '>=10.0.0'}
1731 |
1732 | string-width@4.2.3:
1733 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1734 | engines: {node: '>=8'}
1735 |
1736 | string-width@5.1.2:
1737 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1738 | engines: {node: '>=12'}
1739 |
1740 | strip-ansi@6.0.1:
1741 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1742 | engines: {node: '>=8'}
1743 |
1744 | strip-ansi@7.1.0:
1745 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1746 | engines: {node: '>=12'}
1747 |
1748 | strip-final-newline@2.0.0:
1749 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
1750 | engines: {node: '>=6'}
1751 |
1752 | sucrase@3.35.0:
1753 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1754 | engines: {node: '>=16 || 14 >=14.17'}
1755 | hasBin: true
1756 |
1757 | supports-color@5.5.0:
1758 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1759 | engines: {node: '>=4'}
1760 |
1761 | supports-preserve-symlinks-flag@1.0.0:
1762 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1763 | engines: {node: '>= 0.4'}
1764 |
1765 | tailwindcss@3.4.3:
1766 | resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==}
1767 | engines: {node: '>=14.0.0'}
1768 | hasBin: true
1769 |
1770 | thenify-all@1.6.0:
1771 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1772 | engines: {node: '>=0.8'}
1773 |
1774 | thenify@3.3.1:
1775 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1776 |
1777 | to-fast-properties@2.0.0:
1778 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1779 | engines: {node: '>=4'}
1780 |
1781 | to-regex-range@5.0.1:
1782 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1783 | engines: {node: '>=8.0'}
1784 |
1785 | tr46@1.0.1:
1786 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1787 |
1788 | tree-kill@1.2.2:
1789 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1790 | hasBin: true
1791 |
1792 | ts-interface-checker@0.1.13:
1793 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1794 |
1795 | ts-node@10.9.2:
1796 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
1797 | hasBin: true
1798 | peerDependencies:
1799 | '@swc/core': '>=1.2.50'
1800 | '@swc/wasm': '>=1.2.50'
1801 | '@types/node': 20.13.0
1802 | typescript: 5.4.5
1803 | peerDependenciesMeta:
1804 | '@swc/core':
1805 | optional: true
1806 | '@swc/wasm':
1807 | optional: true
1808 |
1809 | tslib@2.6.2:
1810 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
1811 |
1812 | tsup@8.0.2:
1813 | resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==}
1814 | engines: {node: '>=18'}
1815 | hasBin: true
1816 | peerDependencies:
1817 | '@microsoft/api-extractor': ^7.36.0
1818 | '@swc/core': ^1
1819 | postcss: ^8.4.12
1820 | typescript: 5.4.5
1821 | peerDependenciesMeta:
1822 | '@microsoft/api-extractor':
1823 | optional: true
1824 | '@swc/core':
1825 | optional: true
1826 | postcss:
1827 | optional: true
1828 | typescript:
1829 | optional: true
1830 |
1831 | turbo-stream@2.1.0:
1832 | resolution: {integrity: sha512-muUMPf3BT7N6PeJJn91Wf+8oXEkwktNJZ9kBjIm0QzhFYPGJ7xqgQMblRQcscysb2v7VhY9AB+bOQbHaIUXyGA==}
1833 |
1834 | typescript@5.4.5:
1835 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
1836 | engines: {node: '>=14.17'}
1837 | hasBin: true
1838 |
1839 | undici-types@5.26.5:
1840 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
1841 |
1842 | undici@5.28.4:
1843 | resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
1844 | engines: {node: '>=14.0'}
1845 |
1846 | unplugin-rsc@0.0.10:
1847 | resolution: {integrity: sha512-aNkojUDpsVrnbHr+GsWtkJtDuCzlAP+IddQdcZG2oQE2Z79BHFuXVY9N7izESqdsSephvMzR7WqNKXzLmZuiQw==}
1848 |
1849 | unplugin@1.10.1:
1850 | resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==}
1851 | engines: {node: '>=14.0.0'}
1852 |
1853 | update-browserslist-db@1.0.16:
1854 | resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
1855 | hasBin: true
1856 | peerDependencies:
1857 | browserslist: '>= 4.21.0'
1858 |
1859 | urlpattern-polyfill@10.0.0:
1860 | resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
1861 |
1862 | util-deprecate@1.0.2:
1863 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1864 |
1865 | v8-compile-cache-lib@3.0.1:
1866 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
1867 |
1868 | vite@6.0.0-alpha.17:
1869 | resolution: {integrity: sha512-zWeYzZLJ1zesnCeUXA39hSJtXSkgaYl3dPaBis4aFBy1PwvbAbYcNeGt40XJdmqwEdm0aoIy8b7H6Hy29FiIwA==}
1870 | engines: {node: ^18.0.0 || >=20.0.0}
1871 | hasBin: true
1872 | peerDependencies:
1873 | '@types/node': 20.13.0
1874 | less: '*'
1875 | lightningcss: ^1.21.0
1876 | sass: '*'
1877 | stylus: '*'
1878 | sugarss: '*'
1879 | terser: ^5.4.0
1880 | peerDependenciesMeta:
1881 | '@types/node':
1882 | optional: true
1883 | less:
1884 | optional: true
1885 | lightningcss:
1886 | optional: true
1887 | sass:
1888 | optional: true
1889 | stylus:
1890 | optional: true
1891 | sugarss:
1892 | optional: true
1893 | terser:
1894 | optional: true
1895 |
1896 | webidl-conversions@4.0.2:
1897 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
1898 |
1899 | webpack-sources@3.2.3:
1900 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1901 | engines: {node: '>=10.13.0'}
1902 |
1903 | webpack-virtual-modules@0.6.1:
1904 | resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
1905 |
1906 | whatwg-url@7.1.0:
1907 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
1908 |
1909 | which@2.0.2:
1910 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1911 | engines: {node: '>= 8'}
1912 | hasBin: true
1913 |
1914 | workerd@1.20240524.0:
1915 | resolution: {integrity: sha512-LWLe5D8PVHBcqturmBbwgI71r7YPpIMYZoVEH6S4G35EqIJ55cb0n3FipoSyraoIfpcCxCFxX1K6WsRHbP3pFA==}
1916 | engines: {node: '>=16'}
1917 | hasBin: true
1918 |
1919 | workers-swr@0.0.8:
1920 | resolution: {integrity: sha512-PjOmIxhedRWCuD/gVXro4gmcXPslqEKWPdzR3xGxNIaZXJTxXkgSJWNOSKFc0z1qkCKNM/k413ptTCT6oakZVA==}
1921 |
1922 | wrangler@3.58.0:
1923 | resolution: {integrity: sha512-h9gWER7LXLnmHABDNP1p3aqXtchlvSBN8Dp22ZurnkxaLMZ3L3H1Ze1ftiFSs0VRWv0BUnz7AWIUqZmzuBY4Nw==}
1924 | engines: {node: '>=16.17.0'}
1925 | hasBin: true
1926 | peerDependencies:
1927 | '@cloudflare/workers-types': 4.20240529.0
1928 | peerDependenciesMeta:
1929 | '@cloudflare/workers-types':
1930 | optional: true
1931 |
1932 | wrap-ansi@7.0.0:
1933 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1934 | engines: {node: '>=10'}
1935 |
1936 | wrap-ansi@8.1.0:
1937 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1938 | engines: {node: '>=12'}
1939 |
1940 | ws@8.17.0:
1941 | resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
1942 | engines: {node: '>=10.0.0'}
1943 | peerDependencies:
1944 | bufferutil: ^4.0.1
1945 | utf-8-validate: '>=5.0.2'
1946 | peerDependenciesMeta:
1947 | bufferutil:
1948 | optional: true
1949 | utf-8-validate:
1950 | optional: true
1951 |
1952 | xxhash-wasm@1.0.2:
1953 | resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==}
1954 |
1955 | yallist@3.1.1:
1956 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1957 |
1958 | yaml@2.4.2:
1959 | resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==}
1960 | engines: {node: '>= 14'}
1961 | hasBin: true
1962 |
1963 | yn@3.1.1:
1964 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
1965 | engines: {node: '>=6'}
1966 |
1967 | youch@3.3.3:
1968 | resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==}
1969 |
1970 | zod@3.23.8:
1971 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
1972 |
1973 | snapshots:
1974 |
1975 | '@alloc/quick-lru@5.2.0': {}
1976 |
1977 | '@ampproject/remapping@2.3.0':
1978 | dependencies:
1979 | '@jridgewell/gen-mapping': 0.3.5
1980 | '@jridgewell/trace-mapping': 0.3.25
1981 |
1982 | '@babel/code-frame@7.24.6':
1983 | dependencies:
1984 | '@babel/highlight': 7.24.6
1985 | picocolors: 1.0.1
1986 |
1987 | '@babel/compat-data@7.24.6': {}
1988 |
1989 | '@babel/core@7.24.4':
1990 | dependencies:
1991 | '@ampproject/remapping': 2.3.0
1992 | '@babel/code-frame': 7.24.6
1993 | '@babel/generator': 7.24.6
1994 | '@babel/helper-compilation-targets': 7.24.6
1995 | '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.4)
1996 | '@babel/helpers': 7.24.6
1997 | '@babel/parser': 7.24.6
1998 | '@babel/template': 7.24.6
1999 | '@babel/traverse': 7.24.6
2000 | '@babel/types': 7.24.6
2001 | convert-source-map: 2.0.0
2002 | debug: 4.3.5
2003 | gensync: 1.0.0-beta.2
2004 | json5: 2.2.3
2005 | semver: 6.3.1
2006 | transitivePeerDependencies:
2007 | - supports-color
2008 |
2009 | '@babel/core@7.24.6':
2010 | dependencies:
2011 | '@ampproject/remapping': 2.3.0
2012 | '@babel/code-frame': 7.24.6
2013 | '@babel/generator': 7.24.6
2014 | '@babel/helper-compilation-targets': 7.24.6
2015 | '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6)
2016 | '@babel/helpers': 7.24.6
2017 | '@babel/parser': 7.24.6
2018 | '@babel/template': 7.24.6
2019 | '@babel/traverse': 7.24.6
2020 | '@babel/types': 7.24.6
2021 | convert-source-map: 2.0.0
2022 | debug: 4.3.5
2023 | gensync: 1.0.0-beta.2
2024 | json5: 2.2.3
2025 | semver: 6.3.1
2026 | transitivePeerDependencies:
2027 | - supports-color
2028 |
2029 | '@babel/generator@7.24.6':
2030 | dependencies:
2031 | '@babel/types': 7.24.6
2032 | '@jridgewell/gen-mapping': 0.3.5
2033 | '@jridgewell/trace-mapping': 0.3.25
2034 | jsesc: 2.5.2
2035 |
2036 | '@babel/helper-annotate-as-pure@7.24.6':
2037 | dependencies:
2038 | '@babel/types': 7.24.6
2039 |
2040 | '@babel/helper-compilation-targets@7.24.6':
2041 | dependencies:
2042 | '@babel/compat-data': 7.24.6
2043 | '@babel/helper-validator-option': 7.24.6
2044 | browserslist: 4.23.0
2045 | lru-cache: 5.1.1
2046 | semver: 6.3.1
2047 |
2048 | '@babel/helper-environment-visitor@7.24.6': {}
2049 |
2050 | '@babel/helper-function-name@7.24.6':
2051 | dependencies:
2052 | '@babel/template': 7.24.6
2053 | '@babel/types': 7.24.6
2054 |
2055 | '@babel/helper-hoist-variables@7.24.6':
2056 | dependencies:
2057 | '@babel/types': 7.24.6
2058 |
2059 | '@babel/helper-module-imports@7.24.3':
2060 | dependencies:
2061 | '@babel/types': 7.24.6
2062 |
2063 | '@babel/helper-module-imports@7.24.6':
2064 | dependencies:
2065 | '@babel/types': 7.24.6
2066 |
2067 | '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.4)':
2068 | dependencies:
2069 | '@babel/core': 7.24.4
2070 | '@babel/helper-environment-visitor': 7.24.6
2071 | '@babel/helper-module-imports': 7.24.6
2072 | '@babel/helper-simple-access': 7.24.6
2073 | '@babel/helper-split-export-declaration': 7.24.6
2074 | '@babel/helper-validator-identifier': 7.24.6
2075 |
2076 | '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)':
2077 | dependencies:
2078 | '@babel/core': 7.24.6
2079 | '@babel/helper-environment-visitor': 7.24.6
2080 | '@babel/helper-module-imports': 7.24.6
2081 | '@babel/helper-simple-access': 7.24.6
2082 | '@babel/helper-split-export-declaration': 7.24.6
2083 | '@babel/helper-validator-identifier': 7.24.6
2084 |
2085 | '@babel/helper-plugin-utils@7.24.0': {}
2086 |
2087 | '@babel/helper-plugin-utils@7.24.6': {}
2088 |
2089 | '@babel/helper-simple-access@7.24.6':
2090 | dependencies:
2091 | '@babel/types': 7.24.6
2092 |
2093 | '@babel/helper-split-export-declaration@7.24.6':
2094 | dependencies:
2095 | '@babel/types': 7.24.6
2096 |
2097 | '@babel/helper-string-parser@7.24.6': {}
2098 |
2099 | '@babel/helper-validator-identifier@7.24.6': {}
2100 |
2101 | '@babel/helper-validator-option@7.24.6': {}
2102 |
2103 | '@babel/helpers@7.24.6':
2104 | dependencies:
2105 | '@babel/template': 7.24.6
2106 | '@babel/types': 7.24.6
2107 |
2108 | '@babel/highlight@7.24.6':
2109 | dependencies:
2110 | '@babel/helper-validator-identifier': 7.24.6
2111 | chalk: 2.4.2
2112 | js-tokens: 4.0.0
2113 | picocolors: 1.0.1
2114 |
2115 | '@babel/parser@7.24.6':
2116 | dependencies:
2117 | '@babel/types': 7.24.6
2118 |
2119 | '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.4)':
2120 | dependencies:
2121 | '@babel/core': 7.24.4
2122 | '@babel/helper-plugin-utils': 7.24.6
2123 |
2124 | '@babel/plugin-transform-react-jsx-development@7.24.6(@babel/core@7.24.4)':
2125 | dependencies:
2126 | '@babel/core': 7.24.4
2127 | '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.4)
2128 |
2129 | '@babel/plugin-transform-react-jsx-self@7.24.6(@babel/core@7.24.6)':
2130 | dependencies:
2131 | '@babel/core': 7.24.6
2132 | '@babel/helper-plugin-utils': 7.24.6
2133 |
2134 | '@babel/plugin-transform-react-jsx-source@7.24.6(@babel/core@7.24.6)':
2135 | dependencies:
2136 | '@babel/core': 7.24.6
2137 | '@babel/helper-plugin-utils': 7.24.6
2138 |
2139 | '@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.4)':
2140 | dependencies:
2141 | '@babel/core': 7.24.4
2142 | '@babel/helper-annotate-as-pure': 7.24.6
2143 | '@babel/helper-module-imports': 7.24.6
2144 | '@babel/helper-plugin-utils': 7.24.6
2145 | '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.4)
2146 | '@babel/types': 7.24.6
2147 |
2148 | '@babel/template@7.24.6':
2149 | dependencies:
2150 | '@babel/code-frame': 7.24.6
2151 | '@babel/parser': 7.24.6
2152 | '@babel/types': 7.24.6
2153 |
2154 | '@babel/traverse@7.24.1':
2155 | dependencies:
2156 | '@babel/code-frame': 7.24.6
2157 | '@babel/generator': 7.24.6
2158 | '@babel/helper-environment-visitor': 7.24.6
2159 | '@babel/helper-function-name': 7.24.6
2160 | '@babel/helper-hoist-variables': 7.24.6
2161 | '@babel/helper-split-export-declaration': 7.24.6
2162 | '@babel/parser': 7.24.6
2163 | '@babel/types': 7.24.6
2164 | debug: 4.3.5
2165 | globals: 11.12.0
2166 | transitivePeerDependencies:
2167 | - supports-color
2168 |
2169 | '@babel/traverse@7.24.6':
2170 | dependencies:
2171 | '@babel/code-frame': 7.24.6
2172 | '@babel/generator': 7.24.6
2173 | '@babel/helper-environment-visitor': 7.24.6
2174 | '@babel/helper-function-name': 7.24.6
2175 | '@babel/helper-hoist-variables': 7.24.6
2176 | '@babel/helper-split-export-declaration': 7.24.6
2177 | '@babel/parser': 7.24.6
2178 | '@babel/types': 7.24.6
2179 | debug: 4.3.5
2180 | globals: 11.12.0
2181 | transitivePeerDependencies:
2182 | - supports-color
2183 |
2184 | '@babel/types@7.24.6':
2185 | dependencies:
2186 | '@babel/helper-string-parser': 7.24.6
2187 | '@babel/helper-validator-identifier': 7.24.6
2188 | to-fast-properties: 2.0.0
2189 |
2190 | '@cloudflare/kv-asset-handler@0.3.2':
2191 | dependencies:
2192 | mime: 3.0.0
2193 |
2194 | '@cloudflare/workerd-darwin-64@1.20240524.0':
2195 | optional: true
2196 |
2197 | '@cloudflare/workerd-darwin-arm64@1.20240524.0':
2198 | optional: true
2199 |
2200 | '@cloudflare/workerd-linux-64@1.20240524.0':
2201 | optional: true
2202 |
2203 | '@cloudflare/workerd-linux-arm64@1.20240524.0':
2204 | optional: true
2205 |
2206 | '@cloudflare/workerd-windows-64@1.20240524.0':
2207 | optional: true
2208 |
2209 | '@cloudflare/workers-types@4.20240529.0': {}
2210 |
2211 | '@cspotcode/source-map-support@0.8.1':
2212 | dependencies:
2213 | '@jridgewell/trace-mapping': 0.3.9
2214 |
2215 | '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)':
2216 | dependencies:
2217 | esbuild: 0.17.19
2218 |
2219 | '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)':
2220 | dependencies:
2221 | esbuild: 0.17.19
2222 | escape-string-regexp: 4.0.0
2223 | rollup-plugin-node-polyfills: 0.2.1
2224 |
2225 | '@esbuild/aix-ppc64@0.19.12':
2226 | optional: true
2227 |
2228 | '@esbuild/aix-ppc64@0.20.2':
2229 | optional: true
2230 |
2231 | '@esbuild/android-arm64@0.17.19':
2232 | optional: true
2233 |
2234 | '@esbuild/android-arm64@0.19.12':
2235 | optional: true
2236 |
2237 | '@esbuild/android-arm64@0.20.2':
2238 | optional: true
2239 |
2240 | '@esbuild/android-arm@0.17.19':
2241 | optional: true
2242 |
2243 | '@esbuild/android-arm@0.19.12':
2244 | optional: true
2245 |
2246 | '@esbuild/android-arm@0.20.2':
2247 | optional: true
2248 |
2249 | '@esbuild/android-x64@0.17.19':
2250 | optional: true
2251 |
2252 | '@esbuild/android-x64@0.19.12':
2253 | optional: true
2254 |
2255 | '@esbuild/android-x64@0.20.2':
2256 | optional: true
2257 |
2258 | '@esbuild/darwin-arm64@0.17.19':
2259 | optional: true
2260 |
2261 | '@esbuild/darwin-arm64@0.19.12':
2262 | optional: true
2263 |
2264 | '@esbuild/darwin-arm64@0.20.2':
2265 | optional: true
2266 |
2267 | '@esbuild/darwin-x64@0.17.19':
2268 | optional: true
2269 |
2270 | '@esbuild/darwin-x64@0.19.12':
2271 | optional: true
2272 |
2273 | '@esbuild/darwin-x64@0.20.2':
2274 | optional: true
2275 |
2276 | '@esbuild/freebsd-arm64@0.17.19':
2277 | optional: true
2278 |
2279 | '@esbuild/freebsd-arm64@0.19.12':
2280 | optional: true
2281 |
2282 | '@esbuild/freebsd-arm64@0.20.2':
2283 | optional: true
2284 |
2285 | '@esbuild/freebsd-x64@0.17.19':
2286 | optional: true
2287 |
2288 | '@esbuild/freebsd-x64@0.19.12':
2289 | optional: true
2290 |
2291 | '@esbuild/freebsd-x64@0.20.2':
2292 | optional: true
2293 |
2294 | '@esbuild/linux-arm64@0.17.19':
2295 | optional: true
2296 |
2297 | '@esbuild/linux-arm64@0.19.12':
2298 | optional: true
2299 |
2300 | '@esbuild/linux-arm64@0.20.2':
2301 | optional: true
2302 |
2303 | '@esbuild/linux-arm@0.17.19':
2304 | optional: true
2305 |
2306 | '@esbuild/linux-arm@0.19.12':
2307 | optional: true
2308 |
2309 | '@esbuild/linux-arm@0.20.2':
2310 | optional: true
2311 |
2312 | '@esbuild/linux-ia32@0.17.19':
2313 | optional: true
2314 |
2315 | '@esbuild/linux-ia32@0.19.12':
2316 | optional: true
2317 |
2318 | '@esbuild/linux-ia32@0.20.2':
2319 | optional: true
2320 |
2321 | '@esbuild/linux-loong64@0.17.19':
2322 | optional: true
2323 |
2324 | '@esbuild/linux-loong64@0.19.12':
2325 | optional: true
2326 |
2327 | '@esbuild/linux-loong64@0.20.2':
2328 | optional: true
2329 |
2330 | '@esbuild/linux-mips64el@0.17.19':
2331 | optional: true
2332 |
2333 | '@esbuild/linux-mips64el@0.19.12':
2334 | optional: true
2335 |
2336 | '@esbuild/linux-mips64el@0.20.2':
2337 | optional: true
2338 |
2339 | '@esbuild/linux-ppc64@0.17.19':
2340 | optional: true
2341 |
2342 | '@esbuild/linux-ppc64@0.19.12':
2343 | optional: true
2344 |
2345 | '@esbuild/linux-ppc64@0.20.2':
2346 | optional: true
2347 |
2348 | '@esbuild/linux-riscv64@0.17.19':
2349 | optional: true
2350 |
2351 | '@esbuild/linux-riscv64@0.19.12':
2352 | optional: true
2353 |
2354 | '@esbuild/linux-riscv64@0.20.2':
2355 | optional: true
2356 |
2357 | '@esbuild/linux-s390x@0.17.19':
2358 | optional: true
2359 |
2360 | '@esbuild/linux-s390x@0.19.12':
2361 | optional: true
2362 |
2363 | '@esbuild/linux-s390x@0.20.2':
2364 | optional: true
2365 |
2366 | '@esbuild/linux-x64@0.17.19':
2367 | optional: true
2368 |
2369 | '@esbuild/linux-x64@0.19.12':
2370 | optional: true
2371 |
2372 | '@esbuild/linux-x64@0.20.2':
2373 | optional: true
2374 |
2375 | '@esbuild/netbsd-x64@0.17.19':
2376 | optional: true
2377 |
2378 | '@esbuild/netbsd-x64@0.19.12':
2379 | optional: true
2380 |
2381 | '@esbuild/netbsd-x64@0.20.2':
2382 | optional: true
2383 |
2384 | '@esbuild/openbsd-x64@0.17.19':
2385 | optional: true
2386 |
2387 | '@esbuild/openbsd-x64@0.19.12':
2388 | optional: true
2389 |
2390 | '@esbuild/openbsd-x64@0.20.2':
2391 | optional: true
2392 |
2393 | '@esbuild/sunos-x64@0.17.19':
2394 | optional: true
2395 |
2396 | '@esbuild/sunos-x64@0.19.12':
2397 | optional: true
2398 |
2399 | '@esbuild/sunos-x64@0.20.2':
2400 | optional: true
2401 |
2402 | '@esbuild/win32-arm64@0.17.19':
2403 | optional: true
2404 |
2405 | '@esbuild/win32-arm64@0.19.12':
2406 | optional: true
2407 |
2408 | '@esbuild/win32-arm64@0.20.2':
2409 | optional: true
2410 |
2411 | '@esbuild/win32-ia32@0.17.19':
2412 | optional: true
2413 |
2414 | '@esbuild/win32-ia32@0.19.12':
2415 | optional: true
2416 |
2417 | '@esbuild/win32-ia32@0.20.2':
2418 | optional: true
2419 |
2420 | '@esbuild/win32-x64@0.17.19':
2421 | optional: true
2422 |
2423 | '@esbuild/win32-x64@0.19.12':
2424 | optional: true
2425 |
2426 | '@esbuild/win32-x64@0.20.2':
2427 | optional: true
2428 |
2429 | '@fastify/busboy@2.1.1': {}
2430 |
2431 | '@hattip/adapter-node@0.0.45':
2432 | dependencies:
2433 | '@hattip/core': 0.0.45
2434 | '@hattip/polyfills': 0.0.45
2435 | '@hattip/walk': 0.0.45
2436 |
2437 | '@hattip/core@0.0.45': {}
2438 |
2439 | '@hattip/headers@0.0.45':
2440 | dependencies:
2441 | '@hattip/core': 0.0.45
2442 |
2443 | '@hattip/polyfills@0.0.45':
2444 | dependencies:
2445 | '@hattip/core': 0.0.45
2446 | '@whatwg-node/fetch': 0.9.17
2447 | node-fetch-native: 1.6.4
2448 |
2449 | '@hattip/walk@0.0.45':
2450 | dependencies:
2451 | '@hattip/headers': 0.0.45
2452 | cac: 6.7.14
2453 | mime-types: 2.1.35
2454 |
2455 | '@hiogawa/utils@1.6.4-pre.2': {}
2456 |
2457 | '@hono/node-server@1.11.2': {}
2458 |
2459 | '@isaacs/cliui@8.0.2':
2460 | dependencies:
2461 | string-width: 5.1.2
2462 | string-width-cjs: string-width@4.2.3
2463 | strip-ansi: 7.1.0
2464 | strip-ansi-cjs: strip-ansi@6.0.1
2465 | wrap-ansi: 8.1.0
2466 | wrap-ansi-cjs: wrap-ansi@7.0.0
2467 |
2468 | '@jridgewell/gen-mapping@0.3.5':
2469 | dependencies:
2470 | '@jridgewell/set-array': 1.2.1
2471 | '@jridgewell/sourcemap-codec': 1.4.15
2472 | '@jridgewell/trace-mapping': 0.3.25
2473 |
2474 | '@jridgewell/resolve-uri@3.1.2': {}
2475 |
2476 | '@jridgewell/set-array@1.2.1': {}
2477 |
2478 | '@jridgewell/sourcemap-codec@1.4.15': {}
2479 |
2480 | '@jridgewell/trace-mapping@0.3.25':
2481 | dependencies:
2482 | '@jridgewell/resolve-uri': 3.1.2
2483 | '@jridgewell/sourcemap-codec': 1.4.15
2484 |
2485 | '@jridgewell/trace-mapping@0.3.9':
2486 | dependencies:
2487 | '@jridgewell/resolve-uri': 3.1.2
2488 | '@jridgewell/sourcemap-codec': 1.4.15
2489 |
2490 | '@kamilkisiela/fast-url-parser@1.1.4': {}
2491 |
2492 | '@nodelib/fs.scandir@2.1.5':
2493 | dependencies:
2494 | '@nodelib/fs.stat': 2.0.5
2495 | run-parallel: 1.2.0
2496 |
2497 | '@nodelib/fs.stat@2.0.5': {}
2498 |
2499 | '@nodelib/fs.walk@1.2.8':
2500 | dependencies:
2501 | '@nodelib/fs.scandir': 2.1.5
2502 | fastq: 1.17.1
2503 |
2504 | '@pkgjs/parseargs@0.11.0':
2505 | optional: true
2506 |
2507 | '@preact/preset-vite@2.8.2(@babel/core@7.24.4)(preact@10.22.0)(vite@6.0.0-alpha.17(@types/node@20.13.0))':
2508 | dependencies:
2509 | '@babel/core': 7.24.4
2510 | '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.4)
2511 | '@babel/plugin-transform-react-jsx-development': 7.24.6(@babel/core@7.24.4)
2512 | '@prefresh/vite': 2.4.5(preact@10.22.0)(vite@6.0.0-alpha.17(@types/node@20.13.0))
2513 | '@rollup/pluginutils': 4.2.1
2514 | babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.24.4)
2515 | debug: 4.3.5
2516 | kolorist: 1.8.0
2517 | magic-string: 0.30.5
2518 | node-html-parser: 6.1.13
2519 | resolve: 1.22.8
2520 | source-map: 0.7.4
2521 | stack-trace: 1.0.0-pre2
2522 | vite: 6.0.0-alpha.17(@types/node@20.13.0)
2523 | transitivePeerDependencies:
2524 | - preact
2525 | - supports-color
2526 |
2527 | '@prefresh/babel-plugin@0.5.1': {}
2528 |
2529 | '@prefresh/core@1.5.2(preact@10.22.0)':
2530 | dependencies:
2531 | preact: 10.22.0
2532 |
2533 | '@prefresh/utils@1.2.0': {}
2534 |
2535 | '@prefresh/vite@2.4.5(preact@10.22.0)(vite@6.0.0-alpha.17(@types/node@20.13.0))':
2536 | dependencies:
2537 | '@babel/core': 7.24.6
2538 | '@prefresh/babel-plugin': 0.5.1
2539 | '@prefresh/core': 1.5.2(preact@10.22.0)
2540 | '@prefresh/utils': 1.2.0
2541 | '@rollup/pluginutils': 4.2.1
2542 | preact: 10.22.0
2543 | vite: 6.0.0-alpha.17(@types/node@20.13.0)
2544 | transitivePeerDependencies:
2545 | - supports-color
2546 |
2547 | '@rollup/pluginutils@4.2.1':
2548 | dependencies:
2549 | estree-walker: 2.0.2
2550 | picomatch: 2.3.1
2551 |
2552 | '@rollup/pluginutils@5.1.0(rollup@4.18.0)':
2553 | dependencies:
2554 | '@types/estree': 1.0.5
2555 | estree-walker: 2.0.2
2556 | picomatch: 2.3.1
2557 | optionalDependencies:
2558 | rollup: 4.18.0
2559 |
2560 | '@rollup/rollup-android-arm-eabi@4.18.0':
2561 | optional: true
2562 |
2563 | '@rollup/rollup-android-arm64@4.18.0':
2564 | optional: true
2565 |
2566 | '@rollup/rollup-darwin-arm64@4.18.0':
2567 | optional: true
2568 |
2569 | '@rollup/rollup-darwin-x64@4.18.0':
2570 | optional: true
2571 |
2572 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
2573 | optional: true
2574 |
2575 | '@rollup/rollup-linux-arm-musleabihf@4.18.0':
2576 | optional: true
2577 |
2578 | '@rollup/rollup-linux-arm64-gnu@4.18.0':
2579 | optional: true
2580 |
2581 | '@rollup/rollup-linux-arm64-musl@4.18.0':
2582 | optional: true
2583 |
2584 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
2585 | optional: true
2586 |
2587 | '@rollup/rollup-linux-riscv64-gnu@4.18.0':
2588 | optional: true
2589 |
2590 | '@rollup/rollup-linux-s390x-gnu@4.18.0':
2591 | optional: true
2592 |
2593 | '@rollup/rollup-linux-x64-gnu@4.18.0':
2594 | optional: true
2595 |
2596 | '@rollup/rollup-linux-x64-musl@4.18.0':
2597 | optional: true
2598 |
2599 | '@rollup/rollup-win32-arm64-msvc@4.18.0':
2600 | optional: true
2601 |
2602 | '@rollup/rollup-win32-ia32-msvc@4.18.0':
2603 | optional: true
2604 |
2605 | '@rollup/rollup-win32-x64-msvc@4.18.0':
2606 | optional: true
2607 |
2608 | '@tsconfig/node10@1.0.11': {}
2609 |
2610 | '@tsconfig/node12@1.0.11': {}
2611 |
2612 | '@tsconfig/node14@1.0.3': {}
2613 |
2614 | '@tsconfig/node16@1.0.4': {}
2615 |
2616 | '@types/babel__core@7.20.5':
2617 | dependencies:
2618 | '@babel/parser': 7.24.6
2619 | '@babel/types': 7.24.6
2620 | '@types/babel__generator': 7.6.8
2621 | '@types/babel__template': 7.4.4
2622 | '@types/babel__traverse': 7.20.6
2623 |
2624 | '@types/babel__generator@7.6.8':
2625 | dependencies:
2626 | '@babel/types': 7.24.6
2627 |
2628 | '@types/babel__template@7.4.4':
2629 | dependencies:
2630 | '@babel/parser': 7.24.6
2631 | '@babel/types': 7.24.6
2632 |
2633 | '@types/babel__traverse@7.20.6':
2634 | dependencies:
2635 | '@babel/types': 7.24.6
2636 |
2637 | '@types/dom-navigation@1.0.3': {}
2638 |
2639 | '@types/estree@1.0.5': {}
2640 |
2641 | '@types/node-forge@1.3.11':
2642 | dependencies:
2643 | '@types/node': 20.13.0
2644 |
2645 | '@types/node@20.13.0':
2646 | dependencies:
2647 | undici-types: 5.26.5
2648 |
2649 | '@vitejs/plugin-react@4.3.0(vite@6.0.0-alpha.17(@types/node@20.13.0))':
2650 | dependencies:
2651 | '@babel/core': 7.24.6
2652 | '@babel/plugin-transform-react-jsx-self': 7.24.6(@babel/core@7.24.6)
2653 | '@babel/plugin-transform-react-jsx-source': 7.24.6(@babel/core@7.24.6)
2654 | '@types/babel__core': 7.20.5
2655 | react-refresh: 0.14.2
2656 | vite: 6.0.0-alpha.17(@types/node@20.13.0)
2657 | transitivePeerDependencies:
2658 | - supports-color
2659 |
2660 | '@whatwg-node/events@0.1.1': {}
2661 |
2662 | '@whatwg-node/fetch@0.9.17':
2663 | dependencies:
2664 | '@whatwg-node/node-fetch': 0.5.11
2665 | urlpattern-polyfill: 10.0.0
2666 |
2667 | '@whatwg-node/node-fetch@0.5.11':
2668 | dependencies:
2669 | '@kamilkisiela/fast-url-parser': 1.1.4
2670 | '@whatwg-node/events': 0.1.1
2671 | busboy: 1.6.0
2672 | fast-querystring: 1.1.2
2673 | tslib: 2.6.2
2674 |
2675 | acorn-walk@8.3.2: {}
2676 |
2677 | acorn@8.11.3: {}
2678 |
2679 | ansi-regex@5.0.1: {}
2680 |
2681 | ansi-regex@6.0.1: {}
2682 |
2683 | ansi-styles@3.2.1:
2684 | dependencies:
2685 | color-convert: 1.9.3
2686 |
2687 | ansi-styles@4.3.0:
2688 | dependencies:
2689 | color-convert: 2.0.1
2690 |
2691 | ansi-styles@6.2.1: {}
2692 |
2693 | any-promise@1.3.0: {}
2694 |
2695 | anymatch@3.1.3:
2696 | dependencies:
2697 | normalize-path: 3.0.0
2698 | picomatch: 2.3.1
2699 |
2700 | arg@4.1.3: {}
2701 |
2702 | arg@5.0.2: {}
2703 |
2704 | array-union@2.1.0: {}
2705 |
2706 | as-table@1.0.55:
2707 | dependencies:
2708 | printable-characters: 1.0.42
2709 |
2710 | autoprefixer@10.4.19(postcss@8.4.38):
2711 | dependencies:
2712 | browserslist: 4.23.0
2713 | caniuse-lite: 1.0.30001625
2714 | fraction.js: 4.3.7
2715 | normalize-range: 0.1.2
2716 | picocolors: 1.0.1
2717 | postcss: 8.4.38
2718 | postcss-value-parser: 4.2.0
2719 |
2720 | babel-plugin-transform-hook-names@1.0.2(@babel/core@7.24.4):
2721 | dependencies:
2722 | '@babel/core': 7.24.4
2723 |
2724 | balanced-match@1.0.2: {}
2725 |
2726 | binary-extensions@2.3.0: {}
2727 |
2728 | blake3-wasm@2.1.5: {}
2729 |
2730 | boolbase@1.0.0: {}
2731 |
2732 | brace-expansion@2.0.1:
2733 | dependencies:
2734 | balanced-match: 1.0.2
2735 |
2736 | braces@3.0.3:
2737 | dependencies:
2738 | fill-range: 7.1.1
2739 |
2740 | browserslist@4.23.0:
2741 | dependencies:
2742 | caniuse-lite: 1.0.30001625
2743 | electron-to-chromium: 1.4.788
2744 | node-releases: 2.0.14
2745 | update-browserslist-db: 1.0.16(browserslist@4.23.0)
2746 |
2747 | bundle-require@4.1.0(esbuild@0.19.12):
2748 | dependencies:
2749 | esbuild: 0.19.12
2750 | load-tsconfig: 0.2.5
2751 |
2752 | busboy@1.6.0:
2753 | dependencies:
2754 | streamsearch: 1.1.0
2755 |
2756 | cac@6.7.14: {}
2757 |
2758 | camelcase-css@2.0.1: {}
2759 |
2760 | caniuse-lite@1.0.30001625: {}
2761 |
2762 | capnp-ts@0.7.0:
2763 | dependencies:
2764 | debug: 4.3.5
2765 | tslib: 2.6.2
2766 | transitivePeerDependencies:
2767 | - supports-color
2768 |
2769 | chalk@2.4.2:
2770 | dependencies:
2771 | ansi-styles: 3.2.1
2772 | escape-string-regexp: 1.0.5
2773 | supports-color: 5.5.0
2774 |
2775 | chokidar@3.6.0:
2776 | dependencies:
2777 | anymatch: 3.1.3
2778 | braces: 3.0.3
2779 | glob-parent: 5.1.2
2780 | is-binary-path: 2.1.0
2781 | is-glob: 4.0.3
2782 | normalize-path: 3.0.0
2783 | readdirp: 3.6.0
2784 | optionalDependencies:
2785 | fsevents: 2.3.3
2786 |
2787 | color-convert@1.9.3:
2788 | dependencies:
2789 | color-name: 1.1.3
2790 |
2791 | color-convert@2.0.1:
2792 | dependencies:
2793 | color-name: 1.1.4
2794 |
2795 | color-name@1.1.3: {}
2796 |
2797 | color-name@1.1.4: {}
2798 |
2799 | commander@4.1.1: {}
2800 |
2801 | convert-source-map@2.0.0: {}
2802 |
2803 | cookie@0.5.0: {}
2804 |
2805 | create-require@1.1.1: {}
2806 |
2807 | cross-spawn@7.0.3:
2808 | dependencies:
2809 | path-key: 3.1.1
2810 | shebang-command: 2.0.0
2811 | which: 2.0.2
2812 |
2813 | css-select@5.1.0:
2814 | dependencies:
2815 | boolbase: 1.0.0
2816 | css-what: 6.1.0
2817 | domhandler: 5.0.3
2818 | domutils: 3.1.0
2819 | nth-check: 2.1.1
2820 |
2821 | css-what@6.1.0: {}
2822 |
2823 | cssesc@3.0.0: {}
2824 |
2825 | data-uri-to-buffer@2.0.2: {}
2826 |
2827 | debug@4.3.5:
2828 | dependencies:
2829 | ms: 2.1.2
2830 |
2831 | didyoumean@1.2.2: {}
2832 |
2833 | diff@4.0.2: {}
2834 |
2835 | dir-glob@3.0.1:
2836 | dependencies:
2837 | path-type: 4.0.0
2838 |
2839 | dlv@1.1.3: {}
2840 |
2841 | dom-serializer@2.0.0:
2842 | dependencies:
2843 | domelementtype: 2.3.0
2844 | domhandler: 5.0.3
2845 | entities: 4.5.0
2846 |
2847 | domelementtype@2.3.0: {}
2848 |
2849 | domhandler@5.0.3:
2850 | dependencies:
2851 | domelementtype: 2.3.0
2852 |
2853 | domutils@3.1.0:
2854 | dependencies:
2855 | dom-serializer: 2.0.0
2856 | domelementtype: 2.3.0
2857 | domhandler: 5.0.3
2858 |
2859 | eastasianwidth@0.2.0: {}
2860 |
2861 | electron-to-chromium@1.4.788: {}
2862 |
2863 | emoji-regex@8.0.0: {}
2864 |
2865 | emoji-regex@9.2.2: {}
2866 |
2867 | entities@4.5.0: {}
2868 |
2869 | esbuild@0.17.19:
2870 | optionalDependencies:
2871 | '@esbuild/android-arm': 0.17.19
2872 | '@esbuild/android-arm64': 0.17.19
2873 | '@esbuild/android-x64': 0.17.19
2874 | '@esbuild/darwin-arm64': 0.17.19
2875 | '@esbuild/darwin-x64': 0.17.19
2876 | '@esbuild/freebsd-arm64': 0.17.19
2877 | '@esbuild/freebsd-x64': 0.17.19
2878 | '@esbuild/linux-arm': 0.17.19
2879 | '@esbuild/linux-arm64': 0.17.19
2880 | '@esbuild/linux-ia32': 0.17.19
2881 | '@esbuild/linux-loong64': 0.17.19
2882 | '@esbuild/linux-mips64el': 0.17.19
2883 | '@esbuild/linux-ppc64': 0.17.19
2884 | '@esbuild/linux-riscv64': 0.17.19
2885 | '@esbuild/linux-s390x': 0.17.19
2886 | '@esbuild/linux-x64': 0.17.19
2887 | '@esbuild/netbsd-x64': 0.17.19
2888 | '@esbuild/openbsd-x64': 0.17.19
2889 | '@esbuild/sunos-x64': 0.17.19
2890 | '@esbuild/win32-arm64': 0.17.19
2891 | '@esbuild/win32-ia32': 0.17.19
2892 | '@esbuild/win32-x64': 0.17.19
2893 |
2894 | esbuild@0.19.12:
2895 | optionalDependencies:
2896 | '@esbuild/aix-ppc64': 0.19.12
2897 | '@esbuild/android-arm': 0.19.12
2898 | '@esbuild/android-arm64': 0.19.12
2899 | '@esbuild/android-x64': 0.19.12
2900 | '@esbuild/darwin-arm64': 0.19.12
2901 | '@esbuild/darwin-x64': 0.19.12
2902 | '@esbuild/freebsd-arm64': 0.19.12
2903 | '@esbuild/freebsd-x64': 0.19.12
2904 | '@esbuild/linux-arm': 0.19.12
2905 | '@esbuild/linux-arm64': 0.19.12
2906 | '@esbuild/linux-ia32': 0.19.12
2907 | '@esbuild/linux-loong64': 0.19.12
2908 | '@esbuild/linux-mips64el': 0.19.12
2909 | '@esbuild/linux-ppc64': 0.19.12
2910 | '@esbuild/linux-riscv64': 0.19.12
2911 | '@esbuild/linux-s390x': 0.19.12
2912 | '@esbuild/linux-x64': 0.19.12
2913 | '@esbuild/netbsd-x64': 0.19.12
2914 | '@esbuild/openbsd-x64': 0.19.12
2915 | '@esbuild/sunos-x64': 0.19.12
2916 | '@esbuild/win32-arm64': 0.19.12
2917 | '@esbuild/win32-ia32': 0.19.12
2918 | '@esbuild/win32-x64': 0.19.12
2919 |
2920 | esbuild@0.20.2:
2921 | optionalDependencies:
2922 | '@esbuild/aix-ppc64': 0.20.2
2923 | '@esbuild/android-arm': 0.20.2
2924 | '@esbuild/android-arm64': 0.20.2
2925 | '@esbuild/android-x64': 0.20.2
2926 | '@esbuild/darwin-arm64': 0.20.2
2927 | '@esbuild/darwin-x64': 0.20.2
2928 | '@esbuild/freebsd-arm64': 0.20.2
2929 | '@esbuild/freebsd-x64': 0.20.2
2930 | '@esbuild/linux-arm': 0.20.2
2931 | '@esbuild/linux-arm64': 0.20.2
2932 | '@esbuild/linux-ia32': 0.20.2
2933 | '@esbuild/linux-loong64': 0.20.2
2934 | '@esbuild/linux-mips64el': 0.20.2
2935 | '@esbuild/linux-ppc64': 0.20.2
2936 | '@esbuild/linux-riscv64': 0.20.2
2937 | '@esbuild/linux-s390x': 0.20.2
2938 | '@esbuild/linux-x64': 0.20.2
2939 | '@esbuild/netbsd-x64': 0.20.2
2940 | '@esbuild/openbsd-x64': 0.20.2
2941 | '@esbuild/sunos-x64': 0.20.2
2942 | '@esbuild/win32-arm64': 0.20.2
2943 | '@esbuild/win32-ia32': 0.20.2
2944 | '@esbuild/win32-x64': 0.20.2
2945 |
2946 | escalade@3.1.2: {}
2947 |
2948 | escape-string-regexp@1.0.5: {}
2949 |
2950 | escape-string-regexp@4.0.0: {}
2951 |
2952 | estree-walker@0.6.1: {}
2953 |
2954 | estree-walker@2.0.2: {}
2955 |
2956 | execa@5.1.1:
2957 | dependencies:
2958 | cross-spawn: 7.0.3
2959 | get-stream: 6.0.1
2960 | human-signals: 2.1.0
2961 | is-stream: 2.0.1
2962 | merge-stream: 2.0.0
2963 | npm-run-path: 4.0.1
2964 | onetime: 5.1.2
2965 | signal-exit: 3.0.7
2966 | strip-final-newline: 2.0.0
2967 |
2968 | exit-hook@2.2.1: {}
2969 |
2970 | fast-decode-uri-component@1.0.1: {}
2971 |
2972 | fast-glob@3.3.2:
2973 | dependencies:
2974 | '@nodelib/fs.stat': 2.0.5
2975 | '@nodelib/fs.walk': 1.2.8
2976 | glob-parent: 5.1.2
2977 | merge2: 1.4.1
2978 | micromatch: 4.0.7
2979 |
2980 | fast-querystring@1.1.2:
2981 | dependencies:
2982 | fast-decode-uri-component: 1.0.1
2983 |
2984 | fastq@1.17.1:
2985 | dependencies:
2986 | reusify: 1.0.4
2987 |
2988 | fill-range@7.1.1:
2989 | dependencies:
2990 | to-regex-range: 5.0.1
2991 |
2992 | foreground-child@3.1.1:
2993 | dependencies:
2994 | cross-spawn: 7.0.3
2995 | signal-exit: 4.1.0
2996 |
2997 | fraction.js@4.3.7: {}
2998 |
2999 | fsevents@2.3.3:
3000 | optional: true
3001 |
3002 | function-bind@1.1.2: {}
3003 |
3004 | gensync@1.0.0-beta.2: {}
3005 |
3006 | get-source@2.0.12:
3007 | dependencies:
3008 | data-uri-to-buffer: 2.0.2
3009 | source-map: 0.6.1
3010 |
3011 | get-stream@6.0.1: {}
3012 |
3013 | glob-parent@5.1.2:
3014 | dependencies:
3015 | is-glob: 4.0.3
3016 |
3017 | glob-parent@6.0.2:
3018 | dependencies:
3019 | is-glob: 4.0.3
3020 |
3021 | glob-to-regexp@0.4.1: {}
3022 |
3023 | glob@10.4.1:
3024 | dependencies:
3025 | foreground-child: 3.1.1
3026 | jackspeak: 3.1.2
3027 | minimatch: 9.0.4
3028 | minipass: 7.1.2
3029 | path-scurry: 1.11.1
3030 |
3031 | globals@11.12.0: {}
3032 |
3033 | globby@11.1.0:
3034 | dependencies:
3035 | array-union: 2.1.0
3036 | dir-glob: 3.0.1
3037 | fast-glob: 3.3.2
3038 | ignore: 5.3.1
3039 | merge2: 1.4.1
3040 | slash: 3.0.0
3041 |
3042 | has-flag@3.0.0: {}
3043 |
3044 | hasown@2.0.2:
3045 | dependencies:
3046 | function-bind: 1.1.2
3047 |
3048 | he@1.2.0: {}
3049 |
3050 | hono@4.4.2: {}
3051 |
3052 | human-signals@2.1.0: {}
3053 |
3054 | ignore@5.3.1: {}
3055 |
3056 | is-binary-path@2.1.0:
3057 | dependencies:
3058 | binary-extensions: 2.3.0
3059 |
3060 | is-core-module@2.13.1:
3061 | dependencies:
3062 | hasown: 2.0.2
3063 |
3064 | is-extglob@2.1.1: {}
3065 |
3066 | is-fullwidth-code-point@3.0.0: {}
3067 |
3068 | is-glob@4.0.3:
3069 | dependencies:
3070 | is-extglob: 2.1.1
3071 |
3072 | is-number@7.0.0: {}
3073 |
3074 | is-stream@2.0.1: {}
3075 |
3076 | isexe@2.0.0: {}
3077 |
3078 | jackspeak@3.1.2:
3079 | dependencies:
3080 | '@isaacs/cliui': 8.0.2
3081 | optionalDependencies:
3082 | '@pkgjs/parseargs': 0.11.0
3083 |
3084 | jiti@1.21.0: {}
3085 |
3086 | joycon@3.1.1: {}
3087 |
3088 | js-tokens@4.0.0: {}
3089 |
3090 | jsesc@2.5.2: {}
3091 |
3092 | json5@2.2.3: {}
3093 |
3094 | kolorist@1.8.0: {}
3095 |
3096 | lilconfig@2.1.0: {}
3097 |
3098 | lilconfig@3.1.1: {}
3099 |
3100 | lines-and-columns@1.2.4: {}
3101 |
3102 | load-tsconfig@0.2.5: {}
3103 |
3104 | lodash.sortby@4.7.0: {}
3105 |
3106 | lru-cache@10.2.2: {}
3107 |
3108 | lru-cache@5.1.1:
3109 | dependencies:
3110 | yallist: 3.1.1
3111 |
3112 | magic-string@0.25.9:
3113 | dependencies:
3114 | sourcemap-codec: 1.4.8
3115 |
3116 | magic-string@0.30.5:
3117 | dependencies:
3118 | '@jridgewell/sourcemap-codec': 1.4.15
3119 |
3120 | make-error@1.3.6: {}
3121 |
3122 | merge-stream@2.0.0: {}
3123 |
3124 | merge2@1.4.1: {}
3125 |
3126 | micromatch@4.0.7:
3127 | dependencies:
3128 | braces: 3.0.3
3129 | picomatch: 2.3.1
3130 |
3131 | mime-db@1.52.0: {}
3132 |
3133 | mime-types@2.1.35:
3134 | dependencies:
3135 | mime-db: 1.52.0
3136 |
3137 | mime@3.0.0: {}
3138 |
3139 | mimic-fn@2.1.0: {}
3140 |
3141 | miniflare@3.20240524.1:
3142 | dependencies:
3143 | '@cspotcode/source-map-support': 0.8.1
3144 | acorn: 8.11.3
3145 | acorn-walk: 8.3.2
3146 | capnp-ts: 0.7.0
3147 | exit-hook: 2.2.1
3148 | glob-to-regexp: 0.4.1
3149 | stoppable: 1.1.0
3150 | undici: 5.28.4
3151 | workerd: 1.20240524.0
3152 | ws: 8.17.0
3153 | youch: 3.3.3
3154 | zod: 3.23.8
3155 | transitivePeerDependencies:
3156 | - bufferutil
3157 | - supports-color
3158 | - utf-8-validate
3159 |
3160 | minimatch@9.0.4:
3161 | dependencies:
3162 | brace-expansion: 2.0.1
3163 |
3164 | minipass@7.1.2: {}
3165 |
3166 | ms@2.1.2: {}
3167 |
3168 | mustache@4.2.0: {}
3169 |
3170 | mz@2.7.0:
3171 | dependencies:
3172 | any-promise: 1.3.0
3173 | object-assign: 4.1.1
3174 | thenify-all: 1.6.0
3175 |
3176 | nanoid@3.3.7: {}
3177 |
3178 | node-fetch-native@1.6.4: {}
3179 |
3180 | node-forge@1.3.1: {}
3181 |
3182 | node-html-parser@6.1.13:
3183 | dependencies:
3184 | css-select: 5.1.0
3185 | he: 1.2.0
3186 |
3187 | node-releases@2.0.14: {}
3188 |
3189 | normalize-path@3.0.0: {}
3190 |
3191 | normalize-range@0.1.2: {}
3192 |
3193 | npm-run-path@4.0.1:
3194 | dependencies:
3195 | path-key: 3.1.1
3196 |
3197 | nth-check@2.1.1:
3198 | dependencies:
3199 | boolbase: 1.0.0
3200 |
3201 | object-assign@4.1.1: {}
3202 |
3203 | object-hash@3.0.0: {}
3204 |
3205 | onetime@5.1.2:
3206 | dependencies:
3207 | mimic-fn: 2.1.0
3208 |
3209 | path-key@3.1.1: {}
3210 |
3211 | path-parse@1.0.7: {}
3212 |
3213 | path-scurry@1.11.1:
3214 | dependencies:
3215 | lru-cache: 10.2.2
3216 | minipass: 7.1.2
3217 |
3218 | path-to-regexp@6.2.2: {}
3219 |
3220 | path-type@4.0.0: {}
3221 |
3222 | picocolors@1.0.1: {}
3223 |
3224 | picomatch@2.3.1: {}
3225 |
3226 | pify@2.3.0: {}
3227 |
3228 | pirates@4.0.6: {}
3229 |
3230 | postcss-import@15.1.0(postcss@8.4.38):
3231 | dependencies:
3232 | postcss: 8.4.38
3233 | postcss-value-parser: 4.2.0
3234 | read-cache: 1.0.0
3235 | resolve: 1.22.8
3236 |
3237 | postcss-js@4.0.1(postcss@8.4.38):
3238 | dependencies:
3239 | camelcase-css: 2.0.1
3240 | postcss: 8.4.38
3241 |
3242 | postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
3243 | dependencies:
3244 | lilconfig: 3.1.1
3245 | yaml: 2.4.2
3246 | optionalDependencies:
3247 | postcss: 8.4.38
3248 | ts-node: 10.9.2(@types/node@20.13.0)(typescript@5.4.5)
3249 |
3250 | postcss-nested@6.0.1(postcss@8.4.38):
3251 | dependencies:
3252 | postcss: 8.4.38
3253 | postcss-selector-parser: 6.1.0
3254 |
3255 | postcss-selector-parser@6.1.0:
3256 | dependencies:
3257 | cssesc: 3.0.0
3258 | util-deprecate: 1.0.2
3259 |
3260 | postcss-value-parser@4.2.0: {}
3261 |
3262 | postcss@8.4.38:
3263 | dependencies:
3264 | nanoid: 3.3.7
3265 | picocolors: 1.0.1
3266 | source-map-js: 1.2.0
3267 |
3268 | preact@10.22.0: {}
3269 |
3270 | printable-characters@1.0.42: {}
3271 |
3272 | punycode@2.3.1: {}
3273 |
3274 | queue-microtask@1.2.3: {}
3275 |
3276 | react-refresh@0.14.2: {}
3277 |
3278 | read-cache@1.0.0:
3279 | dependencies:
3280 | pify: 2.3.0
3281 |
3282 | readdirp@3.6.0:
3283 | dependencies:
3284 | picomatch: 2.3.1
3285 |
3286 | resolve-from@5.0.0: {}
3287 |
3288 | resolve.exports@2.0.2: {}
3289 |
3290 | resolve@1.22.8:
3291 | dependencies:
3292 | is-core-module: 2.13.1
3293 | path-parse: 1.0.7
3294 | supports-preserve-symlinks-flag: 1.0.0
3295 |
3296 | reusify@1.0.4: {}
3297 |
3298 | rollup-plugin-inject@3.0.2:
3299 | dependencies:
3300 | estree-walker: 0.6.1
3301 | magic-string: 0.25.9
3302 | rollup-pluginutils: 2.8.2
3303 |
3304 | rollup-plugin-node-polyfills@0.2.1:
3305 | dependencies:
3306 | rollup-plugin-inject: 3.0.2
3307 |
3308 | rollup-pluginutils@2.8.2:
3309 | dependencies:
3310 | estree-walker: 0.6.1
3311 |
3312 | rollup@4.18.0:
3313 | dependencies:
3314 | '@types/estree': 1.0.5
3315 | optionalDependencies:
3316 | '@rollup/rollup-android-arm-eabi': 4.18.0
3317 | '@rollup/rollup-android-arm64': 4.18.0
3318 | '@rollup/rollup-darwin-arm64': 4.18.0
3319 | '@rollup/rollup-darwin-x64': 4.18.0
3320 | '@rollup/rollup-linux-arm-gnueabihf': 4.18.0
3321 | '@rollup/rollup-linux-arm-musleabihf': 4.18.0
3322 | '@rollup/rollup-linux-arm64-gnu': 4.18.0
3323 | '@rollup/rollup-linux-arm64-musl': 4.18.0
3324 | '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0
3325 | '@rollup/rollup-linux-riscv64-gnu': 4.18.0
3326 | '@rollup/rollup-linux-s390x-gnu': 4.18.0
3327 | '@rollup/rollup-linux-x64-gnu': 4.18.0
3328 | '@rollup/rollup-linux-x64-musl': 4.18.0
3329 | '@rollup/rollup-win32-arm64-msvc': 4.18.0
3330 | '@rollup/rollup-win32-ia32-msvc': 4.18.0
3331 | '@rollup/rollup-win32-x64-msvc': 4.18.0
3332 | fsevents: 2.3.3
3333 |
3334 | rsc-html-stream@0.0.3: {}
3335 |
3336 | run-parallel@1.2.0:
3337 | dependencies:
3338 | queue-microtask: 1.2.3
3339 |
3340 | selfsigned@2.4.1:
3341 | dependencies:
3342 | '@types/node-forge': 1.3.11
3343 | node-forge: 1.3.1
3344 |
3345 | semver@6.3.1: {}
3346 |
3347 | shebang-command@2.0.0:
3348 | dependencies:
3349 | shebang-regex: 3.0.0
3350 |
3351 | shebang-regex@3.0.0: {}
3352 |
3353 | signal-exit@3.0.7: {}
3354 |
3355 | signal-exit@4.1.0: {}
3356 |
3357 | slash@3.0.0: {}
3358 |
3359 | source-map-js@1.2.0: {}
3360 |
3361 | source-map@0.6.1: {}
3362 |
3363 | source-map@0.7.4: {}
3364 |
3365 | source-map@0.8.0-beta.0:
3366 | dependencies:
3367 | whatwg-url: 7.1.0
3368 |
3369 | sourcemap-codec@1.4.8: {}
3370 |
3371 | stack-trace@1.0.0-pre2: {}
3372 |
3373 | stacktracey@2.1.8:
3374 | dependencies:
3375 | as-table: 1.0.55
3376 | get-source: 2.0.12
3377 |
3378 | stoppable@1.1.0: {}
3379 |
3380 | streamsearch@1.1.0: {}
3381 |
3382 | string-width@4.2.3:
3383 | dependencies:
3384 | emoji-regex: 8.0.0
3385 | is-fullwidth-code-point: 3.0.0
3386 | strip-ansi: 6.0.1
3387 |
3388 | string-width@5.1.2:
3389 | dependencies:
3390 | eastasianwidth: 0.2.0
3391 | emoji-regex: 9.2.2
3392 | strip-ansi: 7.1.0
3393 |
3394 | strip-ansi@6.0.1:
3395 | dependencies:
3396 | ansi-regex: 5.0.1
3397 |
3398 | strip-ansi@7.1.0:
3399 | dependencies:
3400 | ansi-regex: 6.0.1
3401 |
3402 | strip-final-newline@2.0.0: {}
3403 |
3404 | sucrase@3.35.0:
3405 | dependencies:
3406 | '@jridgewell/gen-mapping': 0.3.5
3407 | commander: 4.1.1
3408 | glob: 10.4.1
3409 | lines-and-columns: 1.2.4
3410 | mz: 2.7.0
3411 | pirates: 4.0.6
3412 | ts-interface-checker: 0.1.13
3413 |
3414 | supports-color@5.5.0:
3415 | dependencies:
3416 | has-flag: 3.0.0
3417 |
3418 | supports-preserve-symlinks-flag@1.0.0: {}
3419 |
3420 | tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)):
3421 | dependencies:
3422 | '@alloc/quick-lru': 5.2.0
3423 | arg: 5.0.2
3424 | chokidar: 3.6.0
3425 | didyoumean: 1.2.2
3426 | dlv: 1.1.3
3427 | fast-glob: 3.3.2
3428 | glob-parent: 6.0.2
3429 | is-glob: 4.0.3
3430 | jiti: 1.21.0
3431 | lilconfig: 2.1.0
3432 | micromatch: 4.0.7
3433 | normalize-path: 3.0.0
3434 | object-hash: 3.0.0
3435 | picocolors: 1.0.1
3436 | postcss: 8.4.38
3437 | postcss-import: 15.1.0(postcss@8.4.38)
3438 | postcss-js: 4.0.1(postcss@8.4.38)
3439 | postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
3440 | postcss-nested: 6.0.1(postcss@8.4.38)
3441 | postcss-selector-parser: 6.1.0
3442 | resolve: 1.22.8
3443 | sucrase: 3.35.0
3444 | transitivePeerDependencies:
3445 | - ts-node
3446 |
3447 | thenify-all@1.6.0:
3448 | dependencies:
3449 | thenify: 3.3.1
3450 |
3451 | thenify@3.3.1:
3452 | dependencies:
3453 | any-promise: 1.3.0
3454 |
3455 | to-fast-properties@2.0.0: {}
3456 |
3457 | to-regex-range@5.0.1:
3458 | dependencies:
3459 | is-number: 7.0.0
3460 |
3461 | tr46@1.0.1:
3462 | dependencies:
3463 | punycode: 2.3.1
3464 |
3465 | tree-kill@1.2.2: {}
3466 |
3467 | ts-interface-checker@0.1.13: {}
3468 |
3469 | ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5):
3470 | dependencies:
3471 | '@cspotcode/source-map-support': 0.8.1
3472 | '@tsconfig/node10': 1.0.11
3473 | '@tsconfig/node12': 1.0.11
3474 | '@tsconfig/node14': 1.0.3
3475 | '@tsconfig/node16': 1.0.4
3476 | '@types/node': 20.13.0
3477 | acorn: 8.11.3
3478 | acorn-walk: 8.3.2
3479 | arg: 4.1.3
3480 | create-require: 1.1.1
3481 | diff: 4.0.2
3482 | make-error: 1.3.6
3483 | typescript: 5.4.5
3484 | v8-compile-cache-lib: 3.0.1
3485 | yn: 3.1.1
3486 |
3487 | tslib@2.6.2: {}
3488 |
3489 | tsup@8.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))(typescript@5.4.5):
3490 | dependencies:
3491 | bundle-require: 4.1.0(esbuild@0.19.12)
3492 | cac: 6.7.14
3493 | chokidar: 3.6.0
3494 | debug: 4.3.5
3495 | esbuild: 0.19.12
3496 | execa: 5.1.1
3497 | globby: 11.1.0
3498 | joycon: 3.1.1
3499 | postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))
3500 | resolve-from: 5.0.0
3501 | rollup: 4.18.0
3502 | source-map: 0.8.0-beta.0
3503 | sucrase: 3.35.0
3504 | tree-kill: 1.2.2
3505 | optionalDependencies:
3506 | postcss: 8.4.38
3507 | typescript: 5.4.5
3508 | transitivePeerDependencies:
3509 | - supports-color
3510 | - ts-node
3511 |
3512 | turbo-stream@2.1.0: {}
3513 |
3514 | typescript@5.4.5: {}
3515 |
3516 | undici-types@5.26.5: {}
3517 |
3518 | undici@5.28.4:
3519 | dependencies:
3520 | '@fastify/busboy': 2.1.1
3521 |
3522 | unplugin-rsc@0.0.10(rollup@4.18.0):
3523 | dependencies:
3524 | '@babel/core': 7.24.4
3525 | '@babel/helper-module-imports': 7.24.3
3526 | '@babel/helper-plugin-utils': 7.24.0
3527 | '@babel/traverse': 7.24.1
3528 | '@rollup/pluginutils': 5.1.0(rollup@4.18.0)
3529 | unplugin: 1.10.1
3530 | transitivePeerDependencies:
3531 | - rollup
3532 | - supports-color
3533 |
3534 | unplugin@1.10.1:
3535 | dependencies:
3536 | acorn: 8.11.3
3537 | chokidar: 3.6.0
3538 | webpack-sources: 3.2.3
3539 | webpack-virtual-modules: 0.6.1
3540 |
3541 | update-browserslist-db@1.0.16(browserslist@4.23.0):
3542 | dependencies:
3543 | browserslist: 4.23.0
3544 | escalade: 3.1.2
3545 | picocolors: 1.0.1
3546 |
3547 | urlpattern-polyfill@10.0.0: {}
3548 |
3549 | util-deprecate@1.0.2: {}
3550 |
3551 | v8-compile-cache-lib@3.0.1: {}
3552 |
3553 | vite@6.0.0-alpha.17(@types/node@20.13.0):
3554 | dependencies:
3555 | esbuild: 0.20.2
3556 | postcss: 8.4.38
3557 | rollup: 4.18.0
3558 | optionalDependencies:
3559 | '@types/node': 20.13.0
3560 | fsevents: 2.3.3
3561 |
3562 | webidl-conversions@4.0.2: {}
3563 |
3564 | webpack-sources@3.2.3: {}
3565 |
3566 | webpack-virtual-modules@0.6.1: {}
3567 |
3568 | whatwg-url@7.1.0:
3569 | dependencies:
3570 | lodash.sortby: 4.7.0
3571 | tr46: 1.0.1
3572 | webidl-conversions: 4.0.2
3573 |
3574 | which@2.0.2:
3575 | dependencies:
3576 | isexe: 2.0.0
3577 |
3578 | workerd@1.20240524.0:
3579 | optionalDependencies:
3580 | '@cloudflare/workerd-darwin-64': 1.20240524.0
3581 | '@cloudflare/workerd-darwin-arm64': 1.20240524.0
3582 | '@cloudflare/workerd-linux-64': 1.20240524.0
3583 | '@cloudflare/workerd-linux-arm64': 1.20240524.0
3584 | '@cloudflare/workerd-windows-64': 1.20240524.0
3585 |
3586 | workers-swr@0.0.8:
3587 | dependencies:
3588 | '@cloudflare/workers-types': 4.20240529.0
3589 |
3590 | wrangler@3.58.0(@cloudflare/workers-types@4.20240529.0):
3591 | dependencies:
3592 | '@cloudflare/kv-asset-handler': 0.3.2
3593 | '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
3594 | '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
3595 | blake3-wasm: 2.1.5
3596 | chokidar: 3.6.0
3597 | esbuild: 0.17.19
3598 | miniflare: 3.20240524.1
3599 | nanoid: 3.3.7
3600 | path-to-regexp: 6.2.2
3601 | resolve: 1.22.8
3602 | resolve.exports: 2.0.2
3603 | selfsigned: 2.4.1
3604 | source-map: 0.6.1
3605 | xxhash-wasm: 1.0.2
3606 | optionalDependencies:
3607 | '@cloudflare/workers-types': 4.20240529.0
3608 | fsevents: 2.3.3
3609 | transitivePeerDependencies:
3610 | - bufferutil
3611 | - supports-color
3612 | - utf-8-validate
3613 |
3614 | wrap-ansi@7.0.0:
3615 | dependencies:
3616 | ansi-styles: 4.3.0
3617 | string-width: 4.2.3
3618 | strip-ansi: 6.0.1
3619 |
3620 | wrap-ansi@8.1.0:
3621 | dependencies:
3622 | ansi-styles: 6.2.1
3623 | string-width: 5.1.2
3624 | strip-ansi: 7.1.0
3625 |
3626 | ws@8.17.0: {}
3627 |
3628 | xxhash-wasm@1.0.2: {}
3629 |
3630 | yallist@3.1.1: {}
3631 |
3632 | yaml@2.4.2: {}
3633 |
3634 | yn@3.1.1: {}
3635 |
3636 | youch@3.3.3:
3637 | dependencies:
3638 | cookie: 0.5.0
3639 | mustache: 4.2.0
3640 | stacktracey: 2.1.8
3641 |
3642 | zod@3.23.8: {}
3643 |
--------------------------------------------------------------------------------