diff --git a/examples/react/ssr/basic-cloudflare/.gitignore b/examples/react/ssr/basic-cloudflare/.gitignore
new file mode 100644
index 00000000..e985853e
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/.gitignore
@@ -0,0 +1 @@
+.vercel
diff --git a/examples/react/ssr/basic-cloudflare/.mf/kv/KV/counter b/examples/react/ssr/basic-cloudflare/.mf/kv/KV/counter
new file mode 100644
index 00000000..7003e7fe
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/.mf/kv/KV/counter
@@ -0,0 +1 @@
+51
\ No newline at end of file
diff --git a/examples/react/ssr/basic-cloudflare/.mf/kv/KV/test b/examples/react/ssr/basic-cloudflare/.mf/kv/KV/test
new file mode 100644
index 00000000..30d74d25
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/.mf/kv/KV/test
@@ -0,0 +1 @@
+test
\ No newline at end of file
diff --git a/examples/react/ssr/basic-cloudflare/app.js b/examples/react/ssr/basic-cloudflare/app.js
new file mode 100644
index 00000000..93c447b0
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/app.js
@@ -0,0 +1,63 @@
+import reactRefresh from "@vitejs/plugin-react";
+import { createApp } from "vinxi";
+import { config } from "vinxi/lib/plugins/config";
+import { virtual } from "vinxi/lib/plugins/virtual";
+
+function viteServer() {
+ let router;
+ return [
+ {
+ configResolved(config) {
+ router = config.router;
+ },
+ name: "vite-dev-server",
+ configureServer(server) {
+ globalThis.viteServers ??= {};
+ globalThis.viteServers[router.name] = server;
+ },
+ },
+ virtual({
+ "#vite-dev-server": ({ env }) =>
+ env.command === "build"
+ ? `export default undefined`
+ : `export default viteServers['${router.name}']`,
+ }),
+ ];
+}
+
+export default createApp({
+ routers: [
+ {
+ name: "public",
+ mode: "static",
+ dir: "./public",
+ base: "/",
+ },
+ {
+ name: "client",
+ mode: "build",
+ handler: "./app/client.tsx",
+ build: {
+ target: "browser",
+ plugins: () => [reactRefresh()],
+ },
+ base: "/_build",
+ },
+ {
+ name: "ssr",
+ mode: "handler",
+ handler: "./app/server.tsx",
+ build: {
+ target: "node",
+ plugins: () => [
+ viteServer(),
+ config("kv", {
+ define: {
+ "import.meta.env.cloudflare": "globalThis.cloudflare",
+ },
+ }),
+ ],
+ },
+ },
+ ],
+});
diff --git a/examples/react/ssr/basic-cloudflare/app/app.tsx b/examples/react/ssr/basic-cloudflare/app/app.tsx
new file mode 100644
index 00000000..13c6a459
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/app/app.tsx
@@ -0,0 +1,24 @@
+import React from "react";
+
+import "./style.css";
+
+export default function App({ assets, children }) {
+ const [count, setCount] = React.useState(0);
+ return (
+
+
+
+ {assets}
+
+
+
+ Hello AgentConf with ya asdo!!!
+
+ {children}
+
+
+
+ );
+}
diff --git a/examples/react/ssr/basic-cloudflare/app/client.tsx b/examples/react/ssr/basic-cloudflare/app/client.tsx
new file mode 100644
index 00000000..f6a73078
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/app/client.tsx
@@ -0,0 +1,53 @@
+///
+import { createAssets } from "@vinxi/react";
+import React, { Suspense } from "react";
+import { Root, hydrateRoot } from "react-dom/client";
+import "vinxi/runtime/client";
+
+import App from "./app";
+
+const Assets = createAssets(
+ import.meta.env.MANIFEST["client"].handler,
+ import.meta.env.MANIFEST["client"],
+);
+
+window.$root =
+ window.$root ||
+ hydrateRoot(
+ document,
+
+
+
+ }
+ >,
+ );
+
+if (import.meta.hot) {
+ import.meta.hot.accept((mod) => {
+ if (mod) {
+ const Assets = createAssets(
+ import.meta.env.MANIFEST["client"].handler,
+ import.meta.env.MANIFEST["client"],
+ );
+ window.$root?.render(
+
+
+
+ }
+ />,
+ );
+ }
+ });
+}
+
+export { App };
+
+declare global {
+ interface Window {
+ $root?: Root;
+ }
+}
diff --git a/examples/react/ssr/basic-cloudflare/app/server.tsx b/examples/react/ssr/basic-cloudflare/app/server.tsx
new file mode 100644
index 00000000..b4a5fc23
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/app/server.tsx
@@ -0,0 +1,228 @@
+///
+///
+import { renderAsset } from "@vinxi/react";
+import React, { Suspense } from "react";
+import { renderToReadableStream } from "react-dom/server.edge";
+import { createCall, createFetch } from "unenv/runtime/fetch/index";
+import {
+ H3Event,
+ eventHandler,
+ lazyEventHandler,
+ sendStream,
+ toNodeListener,
+} from "vinxi/runtime/server";
+import { createApp } from "vinxi/runtime/server";
+
+import App from "./app";
+
+declare global {
+ interface ImportMetaEnv {
+ KV: KVNamespace;
+ }
+}
+
+export default lazyEventHandler(async () => {
+ const handler = eventHandler(async (event) => {
+ const { env } = import.meta.env.DEV
+ ? globalThis.cloudflare
+ : event.context.cloudflare;
+ const clientManifest = import.meta.env.MANIFEST["client"];
+ const assets = await clientManifest.inputs[clientManifest.handler].assets();
+ console.log(
+ await env.KV.put(
+ "counter",
+ JSON.stringify(Number((await env.KV.get("counter")) ?? 0) + 1),
+ ),
+ );
+
+ const counter = JSON.parse((await env.KV.get("counter")) ?? "0");
+ const stream = await renderToReadableStream(
+ {assets.map((m) => renderAsset(m))}}>
+ {counter}
+ ,
+ {
+ bootstrapModules: [
+ clientManifest.inputs[clientManifest.handler].output.path,
+ ],
+ bootstrapScriptContent: `window.manifest = ${JSON.stringify(
+ await clientManifest.json(),
+ )}`,
+ },
+ );
+
+ event.node.res.setHeader("Content-Type", "text/html");
+ return stream;
+ });
+
+ if (import.meta.env.DEV) {
+ const { Miniflare } = await import("miniflare");
+ const { default: viteServer } = await import("#vite-dev-server");
+ const { createServer } = await import("../dev-server");
+
+ const mf = new Miniflare({
+ script: `
+ export default {
+ fetch: async (request, env) => {
+ return await serve(request, env, globalThis);
+ }
+ }
+
+ export const WebSocketDurableObject = WebSocketDurableObject1;
+ `,
+ globals: {
+ WebSocketDurableObject1: class DO {
+ state;
+ env;
+ promise;
+ constructor(state, env) {
+ this.state = state;
+ this.env = env;
+ this.promise = this.createProxy(state, env);
+ }
+
+ async createProxy(state, env) {
+ const { WebSocketDurableObject } = await vite.ssrLoadModule(
+ "~start/entry-server",
+ );
+ return new WebSocketDurableObject(state, env);
+ }
+
+ async fetch(request) {
+ console.log("DURABLE_OBJECT", request.url);
+
+ try {
+ let dObject = await this.promise;
+ return await dObject.fetch(request);
+ } catch (e) {
+ console.log("error", e);
+ }
+ }
+ },
+ serve: async (req, e, g) => {
+ const {
+ Request,
+ Response,
+ fetch,
+ crypto,
+ Headers,
+ ReadableStream,
+ WritableStream,
+ WebSocketPair,
+ TransformStream,
+ } = g;
+ Object.assign(globalThis, {
+ Request,
+ Response,
+ fetch,
+ crypto,
+ Headers,
+ ReadableStream,
+ WritableStream,
+ TransformStream,
+ WebSocketPair,
+ });
+
+ console.log(
+ "🔥",
+ req.headers.get("Upgrade") === "websocket"
+ ? "WEBSOCKET"
+ : req.method,
+ req.url,
+ );
+
+ if (req.headers.get("Upgrade") === "websocket") {
+ const url = new URL(req.url);
+ console.log(url.search);
+ const durableObjectId = e.DO_WEBSOCKET.idFromName(
+ url.pathname + url.search,
+ );
+ const durableObjectStub = e.DO_WEBSOCKET.get(durableObjectId);
+ const response = await durableObjectStub.fetch(req);
+ return response;
+ }
+
+ const request = req;
+
+ try {
+ const url = new URL(request.url);
+
+ // https://deno.land/api?s=Body
+ let body;
+ if (request.body) {
+ body = await request.arrayBuffer();
+ }
+
+ const app = createApp();
+ app.use(handler);
+
+ console.log(e);
+ globalThis.cloudflare = { env: e };
+
+ const f = createFetch(createCall(toNodeListener(app)));
+
+ const d = await f(url.pathname + url.search, {
+ host: url.hostname,
+ protocol: url.protocol,
+ headers: request.headers,
+ method: request.method,
+ redirect: request.redirect,
+ body,
+ });
+
+ console.log(d);
+
+ // const req = new IncomingMessage();
+ return d;
+ } catch (e) {
+ console.log("error", e);
+ return new Response(e.toString(), { status: 500 });
+ }
+ },
+ },
+ modules: true,
+ kvPersist: true,
+ compatibilityFlags: ["streams_enable_constructors"],
+ kvNamespaces: ["KV"],
+ // ...miniflareOptions,
+ });
+
+ console.log("🔥", "starting miniflare");
+
+ const listener = await createServer(viteServer, mf, {});
+ return eventHandler(async (event) => {
+ // const clientManifest = import.meta.env.MANIFEST["client"];
+ // const assets = await clientManifest.inputs[clientManifest.handler].assets();
+ // const events = {};
+ // const stream = await new Promise(async (resolve) => {
+ // const stream = renderToPipeableStream(
+ // {assets.map((m) => renderAsset(m))}}
+ // />,
+ // {
+ // onShellReady() {
+ // resolve(stream);
+ // },
+ // bootstrapModules: [
+ // clientManifest.inputs[clientManifest.handler].output.path,
+ // ],
+ // bootstrapScriptContent: `window.manifest = ${JSON.stringify(
+ // await clientManifest.json(),
+ // )}`,
+ // },
+ // );
+ // });
+
+ // // @ts-ignore
+ // stream.on = (event, listener) => {
+ // events[event] = listener;
+ // };
+
+ const response = await listener(event.node.req, event.node.res);
+
+ // event.node.res.setHeader("Content-Type", "text/html");
+ return response;
+ });
+ } else {
+ return handler;
+ }
+});
diff --git a/examples/react/ssr/basic-cloudflare/app/style.css b/examples/react/ssr/basic-cloudflare/app/style.css
new file mode 100644
index 00000000..b1284a35
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/app/style.css
@@ -0,0 +1,7 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+* {
+ color: red;
+}
\ No newline at end of file
diff --git a/examples/react/ssr/basic-cloudflare/dev-server.js b/examples/react/ssr/basic-cloudflare/dev-server.js
new file mode 100644
index 00000000..6b9cebd8
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/dev-server.js
@@ -0,0 +1,166 @@
+/*!
+ * Original code by MrBBot
+ * MIT Licensedm Copyright (c) 2021 MrBBot, see LICENSE.miniflare.md for details
+ */
+import { createRequestListener } from "@miniflare/http-server";
+import { coupleWebSocket } from "@miniflare/web-sockets";
+import assert from "assert";
+import http from "http";
+import net from "net";
+import { URL } from "url";
+
+async function writeResponse(response, res) {
+ var e_1, _a;
+ const headers = {};
+ // eslint-disable-next-line prefer-const
+ for (let [key, value] of response.headers) {
+ key = key.toLowerCase();
+ if (key === "set-cookie") {
+ // Multiple Set-Cookie headers should be treated as separate headers
+ // @ts-expect-error getAll is added to the Headers prototype by
+ // importing @miniflare/core
+ headers["set-cookie"] = response.headers.getAll("set-cookie");
+ } else {
+ headers[key] = value;
+ }
+ }
+ // Use body's actual length instead of the Content-Length header if set,
+ // see https://github.com/cloudflare/miniflare/issues/148. We also might
+ // need to adjust this later for live reloading so hold onto it.
+ const contentLengthHeader = response.headers.get("Content-Length");
+ const contentLength =
+ contentLengthHeader === null ? null : parseInt(contentLengthHeader);
+ if (contentLength !== null) headers["content-length"] = contentLength;
+ res.writeHead(response.status, headers);
+ // `initialStream` is the stream we'll write the response to. It
+ // should end up as the first encoder, piping to the next encoder,
+ // and finally piping to the response:
+ //
+ // encoders[0] (initialStream) -> encoders[1] -> res
+ //
+ // Not using `pipeline(passThrough, ...encoders, res)` here as that
+ // gives a premature close error with server sent events. This also
+ // avoids creating an extra stream even when we're not encoding.
+ let initialStream = res;
+ // Response body may be null if empty
+ if (response.body) {
+ try {
+ for (
+ var _b = __asyncValues(response.body), _c;
+ (_c = await _b.next()), !_c.done;
+
+ ) {
+ const chunk = _c.value;
+ if (chunk) initialStream.write(chunk);
+ }
+ } catch (e_1_1) {
+ e_1 = { error: e_1_1 };
+ } finally {
+ try {
+ if (_c && !_c.done && (_a = _b.return)) await _a.call(_b);
+ } finally {
+ if (e_1) throw e_1.error;
+ }
+ }
+ }
+ initialStream.end();
+}
+
+export const DEFAULT_PORT = 8787;
+const restrictedWebSocketUpgradeHeaders = [
+ "upgrade",
+ "connection",
+ "sec-websocket-accept",
+];
+
+export async function createServer(vite, mf, options) {
+ var _a, _b;
+ const listener = createRequestListener(mf);
+ // Setup HTTP server
+ const { WebSocketServer } = await import("ws");
+ // Setup WebSocket servers
+ const webSocketServer = new WebSocketServer({ noServer: true });
+ // Add custom headers included in response to WebSocket upgrade requests
+ const extraHeaders = new WeakMap();
+ webSocketServer.on("headers", (headers, req) => {
+ const extra = extraHeaders.get(req);
+ extraHeaders.delete(req);
+ if (extra) {
+ for (const [key, value] of extra) {
+ if (!restrictedWebSocketUpgradeHeaders.includes(key.toLowerCase())) {
+ headers.push(`${key}: ${value}`);
+ }
+ }
+ }
+ });
+ (_a = vite.httpServer) === null || _a === void 0
+ ? void 0
+ : _a.on("upgrade", async (request, socket, head) => {
+ var _a;
+ // Only interested in pathname so base URL doesn't matter
+ const { pathname } = new URL(
+ (_a = request.url) !== null && _a !== void 0 ? _a : "",
+ "http://localhost",
+ );
+ if (
+ pathname === "/cdn-cgi/mf/reload" ||
+ request.headers["sec-websocket-protocol"] === "vite-hmr"
+ ) {
+ // If this is the for live-reload, handle the request ourselves
+ return;
+ } else {
+ // Otherwise, handle the request in the worker
+ const response = await listener(request);
+ // Check web socket response was returned
+ const webSocket =
+ response === null || response === void 0
+ ? void 0
+ : response.webSocket;
+ if (
+ (response === null || response === void 0
+ ? void 0
+ : response.status) === 101 &&
+ webSocket
+ ) {
+ // Accept and couple the Web Socket
+ extraHeaders.set(request, response.headers);
+ webSocketServer.handleUpgrade(request, socket, head, (ws) => {
+ void coupleWebSocket(ws, webSocket);
+ webSocketServer.emit("connection", ws, request);
+ });
+ return;
+ }
+ // Otherwise, we'll be returning a regular HTTP response
+ const res = new http.ServerResponse(request);
+ // `socket` is guaranteed to be an instance of `net.Socket`:
+ // https://nodejs.org/api/http.html#event-upgrade_1
+ assert(socket instanceof net.Socket);
+ res.assignSocket(socket);
+ // If no response was provided, or it was an "ok" response, log an error
+ if (!response || (200 <= response.status && response.status < 300)) {
+ res.writeHead(500);
+ res.end();
+ mf.log.error(
+ new TypeError(
+ "Web Socket request did not return status 101 Switching Protocols response with Web Socket",
+ ),
+ );
+ return;
+ }
+ // Otherwise, send the response as is (e.g. unauthorised),
+ // always disabling live-reload as this is a WebSocket upgrade
+ await writeResponse(response, res);
+ }
+ });
+ const reloadListener = () => {
+ // Close all existing web sockets on reload
+ for (const ws of webSocketServer.clients) {
+ ws.close(1012, "Service Restart");
+ }
+ };
+ mf.addEventListener("reload", reloadListener);
+ (_b = vite.httpServer) === null || _b === void 0
+ ? void 0
+ : _b.on("close", () => mf.removeEventListener("reload", reloadListener));
+ return listener;
+}
diff --git a/examples/react/ssr/basic-cloudflare/package.json b/examples/react/ssr/basic-cloudflare/package.json
new file mode 100644
index 00000000..3faae41b
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/package.json
@@ -0,0 +1,29 @@
+{
+ "type": "module",
+ "scripts": {
+ "dev": "vinxi dev",
+ "build": "vinxi build",
+ "start": "vinxi start"
+ },
+ "dependencies": {
+ "@cloudflare/workers-types": "^4.20230724.0",
+ "@miniflare/http-server": "^2.14.0",
+ "@miniflare/kv": "^2.14.0",
+ "@miniflare/web-sockets": "^2.14.0",
+ "@picocss/pico": "^1.5.7",
+ "@vinxi/react": "workspace:^",
+ "@vitejs/plugin-react": "^4.0.1",
+ "autoprefixer": "^10.4.14",
+ "miniflare": "^2.14.0",
+ "react": "0.0.0-experimental-035a41c4e-20230704",
+ "react-dom": "0.0.0-experimental-035a41c4e-20230704",
+ "tailwindcss": "^3.3.2",
+ "unenv": "^1.5.1",
+ "vinxi": "workspace:^",
+ "ws": "^8.13.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.14",
+ "@types/react-dom": "^18.2.6"
+ }
+}
diff --git a/examples/react/ssr/basic-cloudflare/postcss.config.cjs b/examples/react/ssr/basic-cloudflare/postcss.config.cjs
new file mode 100644
index 00000000..33ad091d
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/examples/react/ssr/basic-cloudflare/public/favicon.ico b/examples/react/ssr/basic-cloudflare/public/favicon.ico
new file mode 100644
index 00000000..129ee136
Binary files /dev/null and b/examples/react/ssr/basic-cloudflare/public/favicon.ico differ
diff --git a/examples/react/ssr/basic-cloudflare/tailwind.config.cjs b/examples/react/ssr/basic-cloudflare/tailwind.config.cjs
new file mode 100644
index 00000000..e1e70f61
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/tailwind.config.cjs
@@ -0,0 +1,8 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: ["./app/**/*.tsx", "./app/**/*.ts", "./app/**/*.js"],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+};
diff --git a/examples/react/ssr/basic-cloudflare/wrangler.toml b/examples/react/ssr/basic-cloudflare/wrangler.toml
new file mode 100644
index 00000000..4c438cae
--- /dev/null
+++ b/examples/react/ssr/basic-cloudflare/wrangler.toml
@@ -0,0 +1,11 @@
+name = "test-vinxi"
+main = "./.output/server/index.mjs"
+workers_dev = true
+compatibility_date = "2022-11-29"
+kv_namespaces = [
+ { binding = "KV", id = "1df7638ef05a4250ac741e45ca7fd195", preview_id = "a3ede4a964d14238affdf4fbcfd39ff3" }
+]
+compatibility_flags = [ "streams_enable_constructors" ]
+[site]
+bucket = ".output/public"
+
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 69897ab0..befc40b7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -353,6 +353,61 @@ importers:
specifier: ^18.2.6
version: 18.2.6
+ examples/react/ssr/basic-cloudflare:
+ dependencies:
+ '@cloudflare/workers-types':
+ specifier: ^4.20230724.0
+ version: 4.20230724.0
+ '@miniflare/http-server':
+ specifier: ^2.14.0
+ version: 2.14.0
+ '@miniflare/kv':
+ specifier: ^2.14.0
+ version: 2.14.0
+ '@miniflare/web-sockets':
+ specifier: ^2.14.0
+ version: 2.14.0
+ '@picocss/pico':
+ specifier: ^1.5.7
+ version: 1.5.7
+ '@vinxi/react':
+ specifier: workspace:^
+ version: link:../../../../packages/vinxi-react
+ '@vitejs/plugin-react':
+ specifier: ^4.0.1
+ version: 4.0.1(vite@4.3.9)
+ autoprefixer:
+ specifier: ^10.4.14
+ version: 10.4.14(postcss@8.4.27)
+ miniflare:
+ specifier: ^2.14.0
+ version: 2.14.0
+ react:
+ specifier: 0.0.0-experimental-035a41c4e-20230704
+ version: 0.0.0-experimental-035a41c4e-20230704
+ react-dom:
+ specifier: 0.0.0-experimental-035a41c4e-20230704
+ version: 0.0.0-experimental-035a41c4e-20230704(react@0.0.0-experimental-035a41c4e-20230704)
+ tailwindcss:
+ specifier: ^3.3.2
+ version: 3.3.2
+ unenv:
+ specifier: ^1.5.1
+ version: 1.5.2
+ vinxi:
+ specifier: workspace:^
+ version: link:../../../../packages/vinxi
+ ws:
+ specifier: ^8.13.0
+ version: 8.13.0
+ devDependencies:
+ '@types/react':
+ specifier: ^18.2.14
+ version: 18.2.14
+ '@types/react-dom':
+ specifier: ^18.2.6
+ version: 18.2.6
+
examples/react/ssr/tanstack-router-app:
dependencies:
'@picocss/pico':
@@ -1230,6 +1285,10 @@ packages:
mime: 3.0.0
dev: false
+ /@cloudflare/workers-types@4.20230724.0:
+ resolution: {integrity: sha512-WuFlsai21oJhRMBHdkM0saIuK1Faitp/GXWj31Zlbe3cCtPNlwYtX5WkojDNWWAxX47LMHBF9wv7wrytNLabYA==}
+ dev: false
+
/@esbuild/android-arm64@0.17.19:
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
engines: {node: '>=12'}
@@ -2018,6 +2077,10 @@ packages:
'@hapi/hoek': 9.3.0
dev: false
+ /@iarna/toml@2.2.5:
+ resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
+ dev: false
+
/@ioredis/commands@1.2.0:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
dev: false
@@ -2159,6 +2222,178 @@ packages:
- supports-color
dev: false
+ /@miniflare/cache@2.14.0:
+ resolution: {integrity: sha512-0mz0OCzTegiX75uMURLJpDo3DaOCSx9M0gv7NMFWDbK/XrvjoENiBZiKu98UBM5fts0qtK19a+MfB4aT0uBCFg==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ http-cache-semantics: 4.1.1
+ undici: 5.20.0
+ dev: false
+
+ /@miniflare/cli-parser@2.14.0:
+ resolution: {integrity: sha512-6Wb0jTMqwI7GRGAhz9WOF8AONUsXXPmwu+Qhg+tnRWtQpJ3DYd5dku1N04L9L1R7np/mD8RrycLyCdg3hLZ3aA==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ kleur: 4.1.5
+ dev: false
+
+ /@miniflare/core@2.14.0:
+ resolution: {integrity: sha512-BjmV/ZDwsKvXnJntYHt3AQgzVKp/5ZzWPpYWoOnUSNxq6nnRCQyvFvjvBZKnhubcmJCLSqegvz0yHejMA90CTA==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@iarna/toml': 2.2.5
+ '@miniflare/queues': 2.14.0
+ '@miniflare/shared': 2.14.0
+ '@miniflare/watcher': 2.14.0
+ busboy: 1.6.0
+ dotenv: 10.0.0
+ kleur: 4.1.5
+ set-cookie-parser: 2.6.0
+ undici: 5.20.0
+ urlpattern-polyfill: 4.0.3
+ dev: false
+
+ /@miniflare/d1@2.14.0:
+ resolution: {integrity: sha512-9YoeLAkZuWGAu9BMsoctHoMue0xHzJYZigAJWGvWrqSFT1gBaT+RlUefQCHXggi8P7sOJ1+BKlsWAhkB5wfMWQ==}
+ engines: {node: '>=16.7'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/durable-objects@2.14.0:
+ resolution: {integrity: sha512-P8eh1P62BPGpj+MCb1i1lj7Tlt/G3BMmnxHp9duyb0Wro/ILVGPQskZl+iq7DHq1w3C+n0+6/E1B44ff+qn0Mw==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ '@miniflare/storage-memory': 2.14.0
+ undici: 5.20.0
+ dev: false
+
+ /@miniflare/html-rewriter@2.14.0:
+ resolution: {integrity: sha512-7CJZk3xZkxK8tGNofnhgWcChZ8YLx6MhAdN2nn6ONSXrK/TevzEKdL8bnVv1OJ6J8Y23OxvfinOhufr33tMS8g==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ html-rewriter-wasm: 0.4.1
+ undici: 5.20.0
+ dev: false
+
+ /@miniflare/http-server@2.14.0:
+ resolution: {integrity: sha512-APaBlvGRAW+W18ph5ruPXX26/iKdByPz1tZH1OjPAKBDAiKFZSGek4QzUmQALBWLx5VMTMrt7QIe7KE4nM4sdw==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ '@miniflare/web-sockets': 2.14.0
+ kleur: 4.1.5
+ selfsigned: 2.1.1
+ undici: 5.20.0
+ ws: 8.13.0
+ youch: 2.2.2
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@miniflare/kv@2.14.0:
+ resolution: {integrity: sha512-FHAnVjmhV/VHxgjNf2whraz+k7kfMKlfM+5gO8WT6HrOsWxSdx8OueWVScnOuuDkSeUg5Ctrf5SuztTV8Uy1cg==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/queues@2.14.0:
+ resolution: {integrity: sha512-flS4MqlgBKyv6QBqKD0IofjmMDW9wP1prUNQy2wWPih9lA6bFKmml3VdFeDsPnWtE2J67K0vCTf5kj1Q0qdW1w==}
+ engines: {node: '>=16.7'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/r2@2.14.0:
+ resolution: {integrity: sha512-+WJJP4J0QzY69HPrG6g5OyW23lJ02WHpHZirCxwPSz8CajooqZCJVx+qvUcNmU8MyKASbUZMWnH79LysuBh+jA==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ undici: 5.20.0
+ dev: false
+
+ /@miniflare/runner-vm@2.14.0:
+ resolution: {integrity: sha512-01CmNzv74u0RZgT/vjV/ggDzECXTG88ZJAKhXyhAx0s2DOLIXzsGHn6pUJIsfPCrtj8nfqtTCp1Vf0UMVWSpmw==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/scheduler@2.14.0:
+ resolution: {integrity: sha512-/D28OeY/HxcOyY0rkPc2qU/wzxCcUv3/F7NRpgDix37sMkYjAAS51ehVIAkPwAdFEMdantcyVuHNQ2kO1xbT+Q==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ cron-schedule: 3.0.6
+ dev: false
+
+ /@miniflare/shared@2.14.0:
+ resolution: {integrity: sha512-O0jAEdMkp8BzrdFCfMWZu76h4Cq+tt3/oDtcTFgzum3fRW5vUhIi/5f6bfndu6rkGbSlzxwor8CJWpzityXGug==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@types/better-sqlite3': 7.6.4
+ kleur: 4.1.5
+ npx-import: 1.1.4
+ picomatch: 2.3.1
+ dev: false
+
+ /@miniflare/sites@2.14.0:
+ resolution: {integrity: sha512-qI8MFZpD1NV+g+HQ/qheDVwscKzwG58J+kAVTU/1fgub2lMLsxhE3Mmbi5AIpyIiJ7Q5Sezqga234CEkHkS7dA==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/kv': 2.14.0
+ '@miniflare/shared': 2.14.0
+ '@miniflare/storage-file': 2.14.0
+ dev: false
+
+ /@miniflare/storage-file@2.14.0:
+ resolution: {integrity: sha512-Ps0wHhTO+ie33a58efI0p/ppFXSjlbYmykQXfYtMeVLD60CKl+4Lxor0+gD6uYDFbhMWL5/GMDvyr4AM87FA+Q==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ '@miniflare/storage-memory': 2.14.0
+ dev: false
+
+ /@miniflare/storage-memory@2.14.0:
+ resolution: {integrity: sha512-5aFjEiTSNrHJ+iAiGMCA/TVPnNMrnokG5r0vKrwj4knbf8pisgfP04x18zCgOlG7kaIWNmqdO/vtVT5BIioiSQ==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/watcher@2.14.0:
+ resolution: {integrity: sha512-O8Abg2eHpGmcZb8WyUaA6Av1Mqt5bSrorzz4CrWwsvJHBdekZPIX0GihC9vn327d/1pKRs81YTiSAfBoSZpVIw==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/shared': 2.14.0
+ dev: false
+
+ /@miniflare/web-sockets@2.14.0:
+ resolution: {integrity: sha512-lB1CB4rBq0mbCuh55WgIEH4L3c4/i4MNDBfrQL+6r+wGcr/BJUqF8BHpsfAt5yHWUJVtK5mlMeesS/xpg4Ao1w==}
+ engines: {node: '>=16.13'}
+ dependencies:
+ '@miniflare/core': 2.14.0
+ '@miniflare/shared': 2.14.0
+ undici: 5.20.0
+ ws: 8.13.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
/@netlify/functions@1.6.0:
resolution: {integrity: sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ==}
engines: {node: '>=14.0.0'}
@@ -2549,6 +2784,12 @@ packages:
'@babel/types': 7.22.5
dev: false
+ /@types/better-sqlite3@7.6.4:
+ resolution: {integrity: sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==}
+ dependencies:
+ '@types/node': 18.14.0
+ dev: false
+
/@types/chai-subset@1.3.3:
resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
dependencies:
@@ -2668,6 +2909,10 @@ packages:
/@types/scheduler@0.16.3:
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
+ /@types/stack-trace@0.0.29:
+ resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==}
+ dev: false
+
/@types/stack-utils@2.0.1:
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
dev: false
@@ -3092,6 +3337,12 @@ packages:
engines: {node: '>=6'}
dev: false
+ /builtins@5.0.1:
+ resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+ dependencies:
+ semver: 7.5.4
+ dev: false
+
/busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
@@ -3393,6 +3644,11 @@ packages:
resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==}
dev: false
+ /cookie@0.4.2:
+ resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: false
@@ -3411,6 +3667,10 @@ packages:
readable-stream: 3.6.2
dev: false
+ /cron-schedule@3.0.6:
+ resolution: {integrity: sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==}
+ dev: false
+
/cross-env@7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
@@ -3605,6 +3865,11 @@ packages:
type-fest: 2.19.0
dev: false
+ /dotenv@10.0.0:
+ resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
+ engines: {node: '>=10'}
+ dev: false
+
/dotenv@16.3.1:
resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
engines: {node: '>=12'}
@@ -3852,6 +4117,21 @@ packages:
strip-final-newline: 2.0.0
dev: false
+ /execa@6.1.0:
+ resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 3.0.1
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.1.0
+ onetime: 6.0.0
+ signal-exit: 3.0.7
+ strip-final-newline: 3.0.0
+ dev: false
+
/expect@29.6.1:
resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4195,6 +4475,10 @@ packages:
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
dev: false
+ /html-rewriter-wasm@0.4.1:
+ resolution: {integrity: sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==}
+ dev: false
+
/htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
dependencies:
@@ -4204,6 +4488,10 @@ packages:
entities: 4.5.0
dev: false
+ /http-cache-semantics@4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+ dev: false
+
/http-errors@2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
@@ -4255,6 +4543,11 @@ packages:
engines: {node: '>=10.17.0'}
dev: false
+ /human-signals@3.0.1:
+ resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==}
+ engines: {node: '>=12.20.0'}
+ dev: false
+
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
dev: false
@@ -4415,6 +4708,11 @@ packages:
engines: {node: '>=8'}
dev: false
+ /is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: false
+
/is-what@4.1.15:
resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==}
engines: {node: '>=12.13'}
@@ -5101,11 +5399,58 @@ packages:
engines: {node: '>=6'}
dev: false
+ /mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+ dev: false
+
/min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
dev: false
+ /miniflare@2.14.0:
+ resolution: {integrity: sha512-xBOUccq1dm5riOfaqoMWCC1uCqT71EW0x4akQQuGYgm+Q44N1ETEmzXSbFVroJgOHe8Hwpqxo2D7OOFwqFevew==}
+ engines: {node: '>=16.13'}
+ hasBin: true
+ peerDependencies:
+ '@miniflare/storage-redis': 2.14.0
+ cron-schedule: ^3.0.4
+ ioredis: ^4.27.9
+ peerDependenciesMeta:
+ '@miniflare/storage-redis':
+ optional: true
+ cron-schedule:
+ optional: true
+ ioredis:
+ optional: true
+ dependencies:
+ '@miniflare/cache': 2.14.0
+ '@miniflare/cli-parser': 2.14.0
+ '@miniflare/core': 2.14.0
+ '@miniflare/d1': 2.14.0
+ '@miniflare/durable-objects': 2.14.0
+ '@miniflare/html-rewriter': 2.14.0
+ '@miniflare/http-server': 2.14.0
+ '@miniflare/kv': 2.14.0
+ '@miniflare/queues': 2.14.0
+ '@miniflare/r2': 2.14.0
+ '@miniflare/runner-vm': 2.14.0
+ '@miniflare/scheduler': 2.14.0
+ '@miniflare/shared': 2.14.0
+ '@miniflare/sites': 2.14.0
+ '@miniflare/storage-file': 2.14.0
+ '@miniflare/storage-memory': 2.14.0
+ '@miniflare/web-sockets': 2.14.0
+ kleur: 4.1.5
+ semiver: 1.1.0
+ source-map-support: 0.5.21
+ undici: 5.20.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
@@ -5164,7 +5509,7 @@ packages:
acorn: 8.10.0
pathe: 1.1.1
pkg-types: 1.0.3
- ufo: 1.1.2
+ ufo: 1.2.0
dev: false
/mri@1.2.0:
@@ -5182,6 +5527,11 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false
+ /mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+ dev: false
+
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
@@ -5335,6 +5685,13 @@ packages:
path-key: 3.1.1
dev: false
+ /npm-run-path@5.1.0:
+ resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ path-key: 4.0.0
+ dev: false
+
/npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
dependencies:
@@ -5344,6 +5701,15 @@ packages:
set-blocking: 2.0.0
dev: false
+ /npx-import@1.1.4:
+ resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==}
+ dependencies:
+ execa: 6.1.0
+ parse-package-name: 1.0.0
+ semver: 7.5.4
+ validate-npm-package-name: 4.0.0
+ dev: false
+
/nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
@@ -5363,7 +5729,7 @@ packages:
dependencies:
destr: 2.0.0
node-fetch-native: 1.2.0
- ufo: 1.1.2
+ ufo: 1.2.0
dev: false
/ohash@1.1.2:
@@ -5394,6 +5760,13 @@ packages:
mimic-fn: 2.1.0
dev: false
+ /onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ mimic-fn: 4.0.0
+ dev: false
+
/open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
@@ -5434,6 +5807,10 @@ packages:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
+ /parse-package-name@1.0.0:
+ resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==}
+ dev: false
+
/parse5-htmlparser2-tree-adapter@7.0.0:
resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
dependencies:
@@ -5460,6 +5837,11 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ /path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+ dev: false
+
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
@@ -5899,6 +6281,18 @@ packages:
resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
dev: false
+ /selfsigned@2.1.1:
+ resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ node-forge: 1.3.1
+ dev: false
+
+ /semiver@1.1.0:
+ resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==}
+ engines: {node: '>=6'}
+ dev: false
+
/semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -5964,6 +6358,10 @@ packages:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
dev: false
+ /set-cookie-parser@2.6.0:
+ resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
+ dev: false
+
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
dev: false
@@ -6057,6 +6455,10 @@ packages:
/space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ /stack-trace@0.0.10:
+ resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
+ dev: false
+
/stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
@@ -6137,6 +6539,11 @@ packages:
engines: {node: '>=6'}
dev: false
+ /strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+ dev: false
+
/strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
@@ -6366,6 +6773,13 @@ packages:
busboy: 1.6.0
dev: false
+ /undici@5.20.0:
+ resolution: {integrity: sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==}
+ engines: {node: '>=12.18'}
+ dependencies:
+ busboy: 1.6.0
+ dev: false
+
/undici@5.22.1:
resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==}
engines: {node: '>=14.0'}
@@ -6618,6 +7032,10 @@ packages:
escalade: 3.1.1
picocolors: 1.0.0
+ /urlpattern-polyfill@4.0.3:
+ resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==}
+ dev: false
+
/use-sync-external-store@1.2.0(react@0.0.0-experimental-035a41c4e-20230704):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
peerDependencies:
@@ -6643,6 +7061,13 @@ packages:
resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
dev: false
+ /validate-npm-package-name@4.0.0:
+ resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ dependencies:
+ builtins: 5.0.1
+ dev: false
+
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -6937,6 +7362,19 @@ packages:
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ /ws@8.13.0:
+ resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: false
+
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -6976,6 +7414,15 @@ packages:
engines: {node: '>=12.20'}
dev: false
+ /youch@2.2.2:
+ resolution: {integrity: sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==}
+ dependencies:
+ '@types/stack-trace': 0.0.29
+ cookie: 0.4.2
+ mustache: 4.2.0
+ stack-trace: 0.0.10
+ dev: false
+
/zip-stream@4.1.0:
resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==}
engines: {node: '>= 10'}