From 8bcd34bcd6483eb7a81d39e6f539c960bc1cb8e4 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Sat, 25 Jan 2025 03:11:05 -0600 Subject: [PATCH 1/8] wip --- bun.lockb | Bin 244727 -> 245203 bytes package.json | 1 + socket/events/v2.ts | 325 +++++++++++++++++++++++++++++++++++++++ socket/renderer/index.ts | 6 + src/components/todos.tsx | 119 +++++++++++--- src/lib/counter.ts | 5 +- tmp/count | 2 +- 7 files changed, 431 insertions(+), 27 deletions(-) create mode 100644 socket/events/v2.ts create mode 100644 socket/renderer/index.ts diff --git a/bun.lockb b/bun.lockb index e306713df10e2d8f476523741de3422b820e05e7..df57d58255a70a8117ae43793c0a22456242a199 100755 GIT binary patch delta 37827 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 HhL!j~2tY^j delta 36839 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 => { +// const [onEvent, emitEvent] = createEvent() +// const log = createSubjectStore( +// () => [], +// onEvent((e) => (log) => log.push(e)) +// ); + +// return { log, onEvent, emitEvent }; +// }; + +type LogEvent = { + seq: number; + data: E; +}; + +export const createLog = (props: { onEvent: Handler> }) => { + const [_log, setLog] = createStore<{ events: LogEvent[] }>({ events: [] }); + + props.onEvent((event) => {}); + + const log = createSubjectStore( + () => [], + props.onEvent((e) => (log) => log.push(e)) + ); + + return { log, onEvent: props.onEvent }; +}; + +export const createServerLog = (props: { onEvent: Handler }) => { + const log = createSubjectStore( + () => [], + props.onEvent((e) => (log) => log.push(e)) + ); + + return { log, onEvent: props.onEvent }; +}; + +// export const createLogProjection = ( +// init: () => T, +// ...events: Array<(prev: T) => void>> +// ) => { +// const actualEvents +// return createSubjectStore( +// init, +// ...events.map((onEvent) => +// onEvent((mutation) => { + +// return mutation; +// }) +// ) +// ); +// }; + +// const [onTodoEvent, emitTodoEvent] = createTopic(); + +// const [todoId, setTodoId] = createSignal(); +// onTodoEvent( +// () => `todos.${todoId()}`, +// (todoEvent) => {} +// ); + +const [counter, setCounter] = createSignal(0); + +const [onCounter, emitCounter] = createEvent(); + +onCounter((count) => { + if (count) { + emitCounter(count - 1); + } +}); +onCounter(setCounter); + +onCounter(console.log); + +// onCounter(setCounter); + +emitCounter(1); +flushSync(); +// assert(counter() === 10); +// assert(counter() === 0); + +const [onTodoEvent, emitTodoEvent] = createEvent(); + +const todos1 = createSubjectStore( + () => [] as Todo[], + onTodoEvent((e) => (todos) => { + if (e.type === "todo-added") { + const todo = todos.find((t) => t.id === e.id); + if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); + } + if (e.type === "todo-toggled") { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + } + if (e.type === "todo-deleted") { + const index = todos.findIndex((note) => note.id === e.id); + if (index !== -1) todos.splice(index, 1); + } + if (e.type === "todo-edited") { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + } + }) +); + +const [onTodoAdded, emitTodoAdded] = createEvent(); +const [onTodoToggled, emitTodoToggled] = createEvent(); +const [onTodoDeleted, emitTodoDeleted] = createEvent(); +const [onTodoEdited, emitTodoEdited] = createEvent(); + +const todos2 = createSubjectStore( + () => [] as Todo[], + onTodoAdded((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); + }), + onTodoToggled((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + }), + onTodoDeleted((e) => (todos) => { + const index = todos.findIndex((note) => note.id === e.id); + if (index !== -1) todos.splice(index, 1); + }), + onTodoEdited((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + }) +); + +const [onTodoEvents, emitTodoEvents] = createEvent<{ + Added: [Handler, Emitter]; + Toggled: [Handler, Emitter]; + Deleted: [Handler, Emitter]; + Edited: [Handler, Emitter]; +}>(); + +const Added = createEvent(), + Toggled = createEvent(), + Deleted = createEvent(), + Edited = createEvent(); + +emitTodoEvents({ Added, Toggled, Deleted, Edited }); + +const todos3 = createSubjectStore( + () => [] as Todo[], + onTodoEvents((events) => (todos) => { + events.Added[0]((e) => { + const todo = todos.find((t) => t.id === e.id); + if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); + }); + events.Toggled[0]((e) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + }); + events.Deleted[0]((e) => { + const index = todos.findIndex((note) => note.id === e.id); + if (index !== -1) todos.splice(index, 1); + }); + events.Edited[0]((e) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + }); + }) +); + +const [onTodoTopic, emitTodoTopic] = createTopic<{ + Added: TodoCreated; + Toggled: TodoToggled; + Deleted: TodoDeleted; + Edited: TodoEdited; +}>(); + +const todos4 = createSubjectStore( + () => [] as Todo[], + onTodoTopic((events) => (todos) => { + events.Added((e) => { + const todo = todos.find((t) => t.id === e.id); + if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); + }); + events.Toggled((e) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + }); + events.Deleted((e) => { + const index = todos.findIndex((note) => note.id === e.id); + if (index !== -1) todos.splice(index, 1); + }); + events.Edited((e) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + }); + }) +); + +emitTodoTopic({ Added: {} }); +emitTodoTopic({ Added: {} }); + +const todoId = () => 0; + +const firstTodo1 = createSubject( + null, + onTodoEvent((e) => (todo) => { + if (e.type === "todo-added" && e.id === todoId()) { + return { ...e, completed: false }; + } + if (todo) { + if (e.type === "todo-toggled" && e.id === todoId()) { + return { ...todo, completed: !todo.completed }; + } + if (e.type === "todo-deleted") { + if (e.id === todoId()) return null; + } + if (e.type === "todo-edited") { + if (e.id === todoId()) return { ...todo, title: e.title }; + } + } + return todo; + }) +); + +const firstTodo2 = createMemo(() => { + const id = todoId(); + + return createSubject( + null, + onTodoEvent((e) => (todo) => { + if (e.type === "todo-added" && e.id === id) { + return { ...e, completed: false }; + } + if (todo) { + if (e.type === "todo-toggled" && e.id === id) { + return { ...todo, completed: !todo.completed }; + } + if (e.type === "todo-deleted") { + if (e.id === id) return null; + } + if (e.type === "todo-edited") { + if (e.id === id) return { ...todo, title: e.title }; + } + } + return todo; + }) + ); +}); + +type TodoTopic = { + Added: Record; + Toggled: Record; + Deleted: Record; + Edited: Record; +}; +const [onTodosTopic, emitTodosTopic] = createEvent(); + +const firstTodo3 = createSubject( + null, + onTodosTopic.Added((id: number, e: TodoCreated) => (todo) => { + if (id === todoId()) return { ...e, completed: false }; + return todo; + }), + onTodosTopic.Toggled((id: number, e: TodoToggled) => (todo) => { + if (id === todoId()) return { ...todo, completed: !todo.completed }; + return todo; + }) +); + +const firstTodo5 = createSubject( + null, + onTodosTopic("Added", id, (e: TodoCreated) => (todo) => { + return { ...e, completed: false }; + }), + onTodosTopic("Toggled", id, (e: TodoToggled) => (todo) => { + return { ...todo, completed: !todo.completed }; + }) +); + +const onToggledTodos = onTodosTopic("Toggled"); + +const onToggledMyTodo1 = onToggledTodos(id); +const onToggledMyTodo2 = onTodosTopic("Toggled", id); + +const onToggledTodoIds1 = onToggledTodos((e: Record) => + Object.keys(e) +); +const onToggledTodoIds2 = onTodosTopic( + "Toggled", + (e: Record) => Object.keys(e) +); + +const onToggledMyTodoId1 = onToggledMyTodo1((e) => e.id); +const onToggledMyTodoId2 = onToggledTodos(id, (e) => e.id); +const onToggledMyTodoId3 = onTodosTopic("Toggled", id, (e) => e.id); + +emitTodosTopic("Added", 0, {}); +emitTodosTopic("Toggled", 3, {}); +emitTodosTopic("Added", { 0: {}, 1: {} }); +emitTodosTopic({ Added: { 1: {} }, Deleted: { 0: {} } }); + +const [nextTopic] = createTopic((emit) => { + onTodoAdded((todoAdded) => { + emit("Added", todoAdded.id, todoAdded); + }); +}); + +const [onLocalEvent, emitLocalEvent] = createEvent(onServerEvent); diff --git a/socket/renderer/index.ts b/socket/renderer/index.ts new file mode 100644 index 0000000..d666e0b --- /dev/null +++ b/socket/renderer/index.ts @@ -0,0 +1,6 @@ +export type Node = + | string + | { + type: "div" | "p"; + children: Node[]; + }; diff --git a/src/components/todos.tsx b/src/components/todos.tsx index 8ed3567..9a003a6 100644 --- a/src/components/todos.tsx +++ b/src/components/todos.tsx @@ -1,5 +1,12 @@ import { createSignal, createMemo, Show, For } from "solid-js"; -import { useServerTodos } from "~/lib/todos"; +import { + TodoCreated, + TodoDeleted, + TodoEdited, + TodoEvent, + TodoToggled, + useServerTodos, +} from "~/lib/todos"; import { createClientEventLog, createEventProjection, @@ -7,6 +14,8 @@ import { } from "../../socket/events"; import { createSocketMemo } from "../../socket/lib/shared"; import { CompleteIcon, IncompleteIcon } from "./icons"; +import { createLog } from "../../socket/events/v2"; +import { createEvent, createPartition, createSubjectStore } from "solid-events"; export type TodosFilter = "all" | "active" | "completed" | undefined; @@ -19,6 +28,70 @@ export type Todo = { export function TodoApp(props: { filter: TodosFilter; listId?: string }) { const filter = () => props.filter; + const [onServerTodoEvent, emitServerTodoEvent] = createEvent(); + + const { log: todoEventLog, onEvent: onTodoEvent } = createLog({ + onEvent: onServerTodoEvent, + }); + + const [onTodoAdded] = createPartition( + onTodoEvent, + (e) => e.type === "todo-added" + ); + const [onTodoToggled] = createPartition( + onTodoEvent, + (e) => e.type === "todo-toggled" + ); + const [onTodoDeleted] = createPartition( + onTodoEvent, + (e) => e.type === "todo-deleted" + ); + const [onTodoEdited] = createPartition( + onTodoEvent, + (e) => e.type === "todo-edited" + ); + + const todos = createSubjectStore( + () => [] as Todo[], + onTodoAdded((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); + }), + onTodoToggled((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + }), + onTodoDeleted((e) => (todos) => { + const index = todos.findIndex((note) => note.id === e.id); + if (index !== -1) todos.splice(index, 1); + }), + onTodoEdited((e) => (todos) => { + const todo = todos.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + }) + ); + + // const _todos = createSubjectStore( + // () => [] as Todo[], + // onTodoEvent((e) => (todos) => { + // if (e.type === "todo-added") { + // todos.push({ id: e.id, title: e.title, completed: false }); + // } + // if (e.type === "todo-toggled") { + // const todo = todos.find((t) => t.id === e.id); + // if (todo) todo.completed = !todo.completed; + // } + // if (e.type === "todo-deleted") { + // const index = todos.findIndex((note) => note.id === e.id); + // if (index !== -1) todos.splice(index, 1); + // } + // if (e.type === "todo-edited") { + // const todo = todos.find((t) => t.id === e.id); + // if (todo) todo.title = e.title; + // } + // }) + // ); + const [editingTodoId, setEditingId] = createSignal(); const setEditing = ({ @@ -34,28 +107,28 @@ export function TodoApp(props: { filter: TodosFilter; listId?: string }) { const serverTodos = useServerTodos(createSocketMemo(() => props.listId)); const { events, appendEvent } = createClientEventLog(serverTodos); - const todos = createEventProjection( - events, - (acc, e) => { - if (e.type === "todo-added") { - acc.push({ id: e.id, title: e.title, completed: false }); - } - if (e.type === "todo-toggled") { - const todo = acc.find((t) => t.id === e.id); - if (todo) todo.completed = !todo.completed; - } - if (e.type === "todo-deleted") { - const index = acc.findIndex((note) => note.id === e.id); - if (index !== -1) acc.splice(index, 1); - } - if (e.type === "todo-edited") { - const todo = acc.find((t) => t.id === e.id); - if (todo) todo.title = e.title; - } - return acc; - }, - [] as Todo[] - ); + // const todos = createEventProjection( + // events, + // (acc, e) => { + // if (e.type === "todo-added") { + // acc.push({ id: e.id, title: e.title, completed: false }); + // } + // if (e.type === "todo-toggled") { + // const todo = acc.find((t) => t.id === e.id); + // if (todo) todo.completed = !todo.completed; + // } + // if (e.type === "todo-deleted") { + // const index = acc.findIndex((note) => note.id === e.id); + // if (index !== -1) acc.splice(index, 1); + // } + // if (e.type === "todo-edited") { + // const todo = acc.find((t) => t.id === e.id); + // if (todo) todo.title = e.title; + // } + // return acc; + // }, + // [] as Todo[] + // ); const filteredTodos = createMemo(() => { if (filter() === "active") return todos.filter((t) => !t.completed); diff --git a/src/lib/counter.ts b/src/lib/counter.ts index 3310993..60fea59 100644 --- a/src/lib/counter.ts +++ b/src/lib/counter.ts @@ -1,10 +1,9 @@ "use socket"; +import { createSignal } from "solid-js"; import { createSocketMemo } from "../../socket/lib/shared"; -import { createPersistedSignal } from "../../socket/persisted"; -import { storage } from "./db"; -const [count, setCount] = createPersistedSignal(storage, `count`, 0); +const [count, setCount] = createSignal(0); export const useCounter = () => { const increment = () => setCount(count() + 1); diff --git a/tmp/count b/tmp/count index da2d398..62f9457 100644 --- a/tmp/count +++ b/tmp/count @@ -1 +1 @@ -14 \ No newline at end of file +6 \ No newline at end of file From 6a3af93b13b2bf9e6cd9f5b5e7f02e34d2ea09df Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Sat, 25 Jan 2025 04:05:21 -0600 Subject: [PATCH 2/8] wip --- socket/renderer/index.ts | 10 +++++++ src/components/counter.tsx | 58 ++++++++++++++++++++++++++++++++++++++ src/lib/counter.ts | 28 +++++++++++++++++- src/routes/index.tsx | 6 ++-- tmp/count | 2 +- 5 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 socket/renderer/index.ts create mode 100644 src/components/counter.tsx diff --git a/socket/renderer/index.ts b/socket/renderer/index.ts new file mode 100644 index 0000000..003b7de --- /dev/null +++ b/socket/renderer/index.ts @@ -0,0 +1,10 @@ +import { SerializedRef } from "../lib/shared"; + +export type Node = + | string + | { + type: "div" | "h1" | "button"; + onClick?: SerializedRef; + style?: Record; + children: Node[]; + }; diff --git a/src/components/counter.tsx b/src/components/counter.tsx new file mode 100644 index 0000000..912f575 --- /dev/null +++ b/src/components/counter.tsx @@ -0,0 +1,58 @@ +import { createEffect, createMemo, createRenderEffect, For } from "solid-js"; +import { useCounter } from "~/lib/counter"; +import { Node } from "../../socket/renderer"; + +function renderNode(node: Node) { + if (typeof node !== "string") { + const el = document.createElement(node.type); + node.children.forEach((child) => { + const el2 = renderNode(child); + el.append(el2); + }); + if (node.style) + Object.keys(node.style).forEach((style) => { + el.style[style] = node.style[style]; + }); + + if (node.onClick) { + el.onclick = () => node.onClick(); + } + return el; + } + return node; +} + +export function Counter() { + const counter = useCounter(); + + const ui = createMemo(() => { + const uiData = counter.ui(); + console.log(`uiData`, uiData); + if (uiData) { + return renderNode(uiData); + } + }); + + createEffect(() => console.log(`ui`, ui())); + + return ( + <> +
+

Counter

+ +
+ {JSON.stringify(counter.ui())} + {ui()} + + ); +} diff --git a/src/lib/counter.ts b/src/lib/counter.ts index 3310993..e59637c 100644 --- a/src/lib/counter.ts +++ b/src/lib/counter.ts @@ -2,6 +2,7 @@ import { createSocketMemo } from "../../socket/lib/shared"; import { createPersistedSignal } from "../../socket/persisted"; +import { Node } from "../../socket/renderer"; import { storage } from "./db"; const [count, setCount] = createPersistedSignal(storage, `count`, 0); @@ -10,5 +11,30 @@ export const useCounter = () => { const increment = () => setCount(count() + 1); const decrement = () => setCount(count() - 1); - return { count: createSocketMemo(count), increment, decrement }; + return { + count: createSocketMemo(count), + increment, + decrement, + ui: createSocketMemo((): Node => { + return { + type: "div", + children: [ + { + type: "h1", + children: ["Counter"], + }, + { + type: "button", + style: { + "background-color": "yellow", + padding: "5px 10px", + border: "1px solid grey", + "border-radius": "5px", + }, + children: [`Count ${count()}`], + }, + ], + }; + }), + }; }; diff --git a/src/routes/index.tsx b/src/routes/index.tsx index a4a99aa..6bb1e17 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,6 +1,7 @@ import { createAsync, type RouteSectionProps } from "@solidjs/router"; import { Show } from "solid-js"; import { Login, Logout } from "~/components/auth"; +import { Counter } from "~/components/counter"; import { Invites } from "~/components/invites"; import { PresenceHost } from "~/components/presence"; import { TodoApp, TodosFilter } from "~/components/todos"; @@ -15,7 +16,8 @@ export default function TodoAppPage(props: RouteSectionProps) { when={userId()} fallback={ <> -

Welcome to Solid Socket

+ + {/*

Welcome to Solid Socket

The easiest and most powerful way to build realtime applications on top of SolidStart. @@ -38,7 +40,7 @@ export default function TodoAppPage(props: RouteSectionProps) { Just open multiple windows using different browsers or devices and login using a different username.

- + */} } > diff --git a/tmp/count b/tmp/count index da2d398..b74e882 100644 --- a/tmp/count +++ b/tmp/count @@ -1 +1 @@ -14 \ No newline at end of file +31 \ No newline at end of file From bcbecc83b5ace2a25a340ec23c984d66043aee93 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Thu, 30 Jan 2025 00:30:48 -0600 Subject: [PATCH 3/8] with seroval --- bun.lockb | Bin 245203 -> 257935 bytes package.json | 8 +- socket/__tests/serializer.test.ts | 38 +++++ socket/lib/client.tsx | 248 +++++++++++------------------- socket/lib/primitives.tsx | 27 ++++ socket/lib/serializer.tsx | 123 +++++++++++++++ socket/lib/server.tsx | 233 +++++++++++----------------- socket/lib/shared.tsx | 107 +++++-------- src/components/todos.tsx | 108 +++---------- src/lib/counter.ts | 4 +- src/routes/index.tsx | 5 + 11 files changed, 445 insertions(+), 456 deletions(-) create mode 100644 socket/__tests/serializer.test.ts create mode 100644 socket/lib/primitives.tsx create mode 100644 socket/lib/serializer.tsx diff --git a/bun.lockb b/bun.lockb index df57d58255a70a8117ae43793c0a22456242a199..7fefa9a69afb60fa9cf7a2c46fbd6fc9a49a729b 100755 GIT binary patch delta 27437 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 diff --git a/package.json b/package.json index 2c30a5a..6d5eb95 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "vinxi dev", "build": "vinxi build", - "start": "vinxi start" + "start": "vinxi start", + "test": "vitest" }, "author": "Dev Agrawal (http://devagr.me/)", "dependencies": { @@ -16,7 +17,9 @@ "@solid-primitives/websocket": "^1.2.2", "@solidjs/router": "^0.14.10", "@solidjs/start": "^1.0.9", + "immer": "^10.1.1", "rxjs": "^7.8.1", + "seroval": "^1.2.0", "solid-events": "^0.0.5", "solid-icons": "^1.1.0", "solid-js": "^1.9.2", @@ -31,6 +34,7 @@ "@babel/preset-typescript": "^7.26.0", "@vinxi/plugin-directives": "^0.4.3", "babel-plugin-transform-import-paths": "^1.0.3", - "vite-plugin-babel": "^1.2.0" + "vite-plugin-babel": "^1.2.0", + "vitest": "^3.0.4" } } \ No newline at end of file diff --git a/socket/__tests/serializer.test.ts b/socket/__tests/serializer.test.ts new file mode 100644 index 0000000..7f54a6a --- /dev/null +++ b/socket/__tests/serializer.test.ts @@ -0,0 +1,38 @@ +import { createPlugin, serialize } from "seroval"; +import { describe, expect, test } from "vitest"; + +type FunctionNode = { + __type: "ref"; + id: string; +}; +const refPlugin = (map: Map) => + createPlugin({ + tag: "seroval-plugins/socket/ref", + test(value) { + return typeof value === "function"; + }, + parse: { + sync(value, ctx) { + const id = Math.random().toString(); + map.set(id, value); + return { __type: "ref", id }; + }, + }, + deserialize(node, ctx) { + return map.get(node.id)!; + }, + serialize(node, ctx) { + return `node`; + }, + }); + +describe("serializer", () => { + test(`serializes functions`, () => { + const source = { id: 1, greet: () => "Hello" }; + const serialized = serialize(source, { + plugins: [refPlugin], + }); + console.log(serialized); + expect(true).toBe(true); + }); +}); diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index a34bb10..268aaf9 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -1,30 +1,24 @@ -import { from as rxFrom, Observable } from "rxjs"; +import { createLazyMemo } from "@solid-primitives/memo"; +import { createCallback } from "@solid-primitives/rootless"; +import { createWS } from "@solid-primitives/websocket"; +import { createAsync } from "@solidjs/router"; +import { Observable, from as rxFrom } from "rxjs"; +import { fromJSON, SerovalJSON, toJSON } from "seroval"; +import { createEffect, createMemo, createSignal, onCleanup } from "solid-js"; +import { createStore, produce } from "solid-js/store"; +import { + deserializeReactivePayload, + serializeReactivePayload, +} from "./serializer"; import { - createSeriazliedMemo, SerializedMemo, SerializedProjection, SerializedRef, - SerializedStoreAccessor, - SerializedThing, WsMessage, WsMessageDown, WsMessageUp, } from "./shared"; -import { - Accessor, - createComputed, - createEffect, - createMemo, - createSignal, - from, - getListener, - onCleanup, - untrack, -} from "solid-js"; -import { createAsync } from "@solidjs/router"; -import { createLazyMemo } from "@solid-primitives/memo"; -import { createCallback } from "@solid-primitives/rootless"; -import { createWS } from "@solid-primitives/websocket"; +import { applyPatches, Patch } from "immer"; const protocol = window.location.protocol === "https:" ? "wss" : "ws"; const wsUrl = `${protocol}://${window.location.hostname}:${window.location.port}/_ws`; @@ -37,42 +31,47 @@ export type SimpleWs = { send(data: string): void; }; -function wsRpc(message: WsMessageUp) { +function wsRpc(message: WsMessageUp) { const ws = getWs(); const id = crypto.randomUUID() as string; - return new Promise<{ value: T; dispose: () => void }>(async (res, rej) => { - function dispose() { - ws.send( - JSON.stringify({ type: "dispose", id } satisfies WsMessage) - ); - } + return new Promise<{ value: SerovalJSON; dispose: () => void }>( + async (res, rej) => { + function dispose() { + ws.send( + JSON.stringify({ + type: "dispose", + id, + } satisfies WsMessage) + ); + } - function handler(event: { data: string }) { - // console.log(`handler ${id}`, message, { data: event.data }); - const data = JSON.parse(event.data) as WsMessage>; - if (data.id === id && data.type === "value") { - res({ value: data.value, dispose }); - ws.removeEventListener("message", handler); + function handler(event: { data: string }) { + // console.log(`handler ${id}`, message, { data: event.data }); + const data = JSON.parse(event.data) as WsMessage; + if (data.id === id && data.type === "value") { + res({ value: data.value, dispose }); + ws.removeEventListener("message", handler); + } } - } - ws.addEventListener("message", handler); - ws.send( - JSON.stringify({ ...message, id } satisfies WsMessage) - ); - }); + ws.addEventListener("message", handler); + ws.send( + JSON.stringify({ ...message, id } satisfies WsMessage) + ); + } + ); } -function wsSub(message: WsMessageUp) { +function wsSub(message: WsMessageUp) { const ws = getWs(); const id = crypto.randomUUID(); return rxFrom( - new Observable((obs) => { + new Observable((obs) => { // console.log(`attaching sub handler`); function handler(event: { data: string }) { - const data = JSON.parse(event.data) as WsMessage>; + const data = JSON.parse(event.data) as WsMessage; // console.log(`data`, data, id); if (data.id === id && data.type === "value") obs.next(data.value); } @@ -90,147 +89,80 @@ function wsSub(message: WsMessageUp) { ); } -export function createRef(ref: SerializedRef) { - return (...input: any[]) => - wsRpc({ - type: "invoke", - ref, - input, - }).then(({ value }) => value); +function createSocketRefConsumer(ref: SerializedRef) { + return async (...payload: I) => { + const input = toJSON(payload); + const { value } = await wsRpc({ type: "invoke", ref, input }); + return fromJSON(value); + }; } -export function createSocketMemoConsumer(ref: SerializedMemo) { - // console.log({ ref }); - const memo = createLazyMemo( - () => - from( - wsSub({ - type: "subscribe", - ref, - }) - ), - () => ref.initial - ); - - return () => { - const memoValue = memo()(); - // console.log({ memoValue }); - return memoValue; - }; +function createSocketMemoConsumer(ref: SerializedMemo) { + const [signal, setSignal] = createSignal(ref.initial); + const sub = wsSub({ type: "subscribe", ref }).subscribe((value) => { + setSignal(() => fromJSON(value)); + }); + onCleanup(() => sub.unsubscribe()); + return signal; } -export function createSocketProjectionConsumer( - ref: SerializedProjection | SerializedStoreAccessor +function createSocketProjectionConsumer( + ref: SerializedProjection ) { - const nodes = [] as { path: string; accessor: Accessor }[]; - - function getNode(path: string) { - const node = nodes.find((node) => node.path === path); - if (node) return node; - const newNode = { - path, - accessor: from(wsSub({ type: "subscribe", ref, path })), - }; - nodes.push(newNode); - return newNode; - } - - // @ts-expect-error - return new Proxy(ref.initial || {}, { - get(target, path: string) { - return getListener() - ? getNode(path).accessor() - : ((target as any)[path] as O); - }, + const [store, setStore] = createStore(ref.initial); + const sub = wsSub({ type: "subscribe", ref }).subscribe((patches) => { + setStore( + produce((draft) => { + applyPatches(draft, fromJSON(patches)); + }) + ); }); + onCleanup(() => sub.unsubscribe()); + return store as O; } -type SerializedValue = SerializedThing | Record; - -const deserializeValue = (value: SerializedValue) => { - if (value.__type === "ref") { - return createRef(value); - } else if (value.__type === "memo") { - return createSocketMemoConsumer(value); - } else if (value.__type === "projection") { - return createSocketProjectionConsumer(value); - } else { - return Object.entries(value).reduce((res, [name, value]) => { - return { - ...res, - [name]: - value.__type === "ref" - ? createRef(value) - : value.__type === "memo" - ? createSocketMemoConsumer(value) - : value.__type === "projection" - ? createSocketProjectionConsumer(value) - : value.__type === "store-accessor" - ? createSocketProjectionConsumer(value) - : value, - }; - }, {} as any); - } -}; - -export function createEndpoint(name: string, input?: any) { +export function createEndpoint(name: string, rawInput?: any) { const inputScope = crypto.randomUUID(); - const serializedInput = - input?.type === "memo" - ? createSeriazliedMemo({ - name: `input`, - scope: inputScope, - initial: untrack(input), - }) - : input; + const { value: input, refs } = serializeReactivePayload(inputScope, rawInput); // console.log({ serializedInput }); - const scopePromise = wsRpc({ - type: "create", - name, - input: serializedInput, - }); + const scopePromise = wsRpc({ type: "create", name, input }); - if (input?.type === "memo") { - const [inputSignal, setInput] = createSignal(input()); - createComputed(() => setInput(input())); - - const onSubscribe = createCallback( - (ws: SimpleWs, data: WsMessage>) => { - createEffect(() => { - const value = inputSignal(); - // console.log(`sending input update to server`, value, input); - ws.send( - JSON.stringify({ - type: "value", - id: data.id, - value, - } satisfies WsMessage) - ); - }); - } - ); - - const ws = getWs(); - function handler(event: { data: string }) { - const data = JSON.parse(event.data) as WsMessage>; + const onSubscribe = createCallback( + (ws: SimpleWs, id: string, source: () => any) => { + createEffect(() => { + ws.send(JSON.stringify({ type: "value", id, value: source() })); + }); + } + ); - if (data.type === "subscribe" && data.ref.scope === inputScope) { - onSubscribe(ws, data); + const ws = getWs(); + function handler(event: { data: string }) { + const data = JSON.parse(event.data) as WsMessage; + if (data.type === "subscribe" && data.ref.scope === inputScope) { + const source = refs.get(data.ref.id); + if (source) { + onSubscribe(ws, data.ref.id, () => source()); } } - ws.addEventListener("message", handler); - onCleanup(() => ws.removeEventListener("message", handler)); } + ws.addEventListener("message", handler); onCleanup(() => { // console.log(`cleanup endpoint`); + ws.removeEventListener("message", handler); scopePromise.then(({ dispose }) => dispose()); }); const scope = createAsync(() => scopePromise); const deserializedScope = createMemo( - () => scope() && deserializeValue(scope()!.value) + () => + scope() && + deserializeReactivePayload(scope()!.value, { + createSocketMemoConsumer, + createSocketRefConsumer, + createSocketProjectionConsumer, + }) ); return new Proxy((() => {}) as any, { diff --git a/socket/lib/primitives.tsx b/socket/lib/primitives.tsx new file mode 100644 index 0000000..819f470 --- /dev/null +++ b/socket/lib/primitives.tsx @@ -0,0 +1,27 @@ +import { createSignal, createMemo } from "solid-js"; +import { $PROXY, $TRACK, Accessor, createRoot, untrack } from "solid-js"; +import { unwrap } from "solid-js/store"; + +export function createLazyMemo( + calc: (prev: T | undefined) => T, + value?: T +): () => T { + let isReading = false; + let isStale: boolean | undefined = true; + + const [track, trigger] = createSignal(void 0, { equals: false }); + + const memo = createMemo( + (p) => (isReading ? calc(p) : ((isStale = !track()), p)), + value as T, + { equals: false } + ); + + return (): T => { + isReading = true; + if (isStale) isStale = trigger(); + const v = memo(); + isReading = false; + return v; + }; +} diff --git a/socket/lib/serializer.tsx b/socket/lib/serializer.tsx new file mode 100644 index 0000000..b49cd68 --- /dev/null +++ b/socket/lib/serializer.tsx @@ -0,0 +1,123 @@ +import { createPlugin, fromJSON, SerovalJSON, toJSON } from "seroval"; +import { $TRACK, Accessor, createMemo } from "solid-js"; +import { + createSeriazliedMemo, + createSeriazliedProjection, + createSeriazliedRef, + SerializedMemo, + SerializedProjection, + SerializedRef, +} from "./shared"; +import { + produce as immerProduce, + applyPatches, + enablePatches, + Patch, +} from "immer"; +enablePatches(); + +export function serializeReactivePayload(scope: string, input: any) { + const refs = new Map(); + + const value = toJSON(input, { + plugins: [ + createPlugin({ + tag: "seroval-plugins/socket/ref", + test: (value) => typeof value === "function", + parse: { + sync(value) { + const id = crypto.randomUUID(); + refs.set(id, value); + return createSeriazliedRef({ scope, id }); + }, + }, + serialize: () => ``, + deserialize: () => ({} as any), + }), + createPlugin({ + tag: "seroval-plugins/socket/memo", + test: (value: any) => + typeof value === "function" && value.type === "memo", + parse: { + sync(value) { + const id = crypto.randomUUID(); + refs.set(id, value); + return createSeriazliedMemo({ scope, id }); + }, + }, + serialize: () => ``, + deserialize: () => ({} as any), + }), + createPlugin({ + tag: "seroval-plugins/socket/projection", + test: (value: any) => $TRACK in value, + parse: { + sync(state) { + const id = crypto.randomUUID(); + + const mutation = state[$TRACK]; + + const projection = createMemo( + ({ state, changes: _c }) => { + let changes = [] as Patch[]; + const s = immerProduce(state, mutation, (patches) => { + changes.push(...patches); + }); + return { state: s, changes }; + }, + { state, changes: [] as Patch[] } + ); + + refs.set(id, () => projection().changes); + return createSeriazliedProjection({ scope, id, initial: state }); + }, + }, + serialize: () => ``, + deserialize: () => ({} as any), + }), + ], + }); + + return { value, refs }; +} + +export function deserializeReactivePayload( + value: SerovalJSON, + plugins: { + createSocketRefConsumer( + ref: SerializedRef + ): (...payload: I) => Promise; + createSocketMemoConsumer( + ref: SerializedMemo + ): Accessor; + createSocketProjectionConsumer( + ref: SerializedProjection + ): O; + } +) { + return fromJSON(value, { + plugins: [ + createPlugin({ + tag: "seroval-plugins/socket/ref", + test: () => true, + parse: {}, + serialize: () => ``, + deserialize: plugins.createSocketRefConsumer, + }), + createPlugin({ + tag: "seroval-plugins/socket/memo", + test: () => true, + parse: {}, + serialize: () => ``, + deserialize: plugins.createSocketMemoConsumer, + }), + createPlugin({ + tag: "seroval-plugins/socket/projection", + test: () => true, + parse: {}, + serialize: () => ``, + deserialize: plugins.createSocketProjectionConsumer, + }), + ], + }); +} diff --git a/socket/lib/server.tsx b/socket/lib/server.tsx index 31021d5..f8299c8 100644 --- a/socket/lib/server.tsx +++ b/socket/lib/server.tsx @@ -1,28 +1,32 @@ +import { parse as parseCookie } from "cookie-es"; +import type { Peer } from "crossws"; +import { fromJSON, SerovalJSON, toJSON } from "seroval"; import { - createSeriazliedMemo, - createSeriazliedStore, - SerializedMemo, - SerializedReactiveThing, - SerializedRef, - SerializedStream, - SerializedThing, - WsMessage, - WsMessageDown, - WsMessageUp, -} from "./shared"; -import { + batch, createContext, - createMemo, createRoot, createSignal, observable, onCleanup, - untrack, useContext, } from "solid-js"; +import { createStore, produce } from "solid-js/store"; import { getManifest } from "vinxi/manifest"; -import type { Peer } from "crossws"; -import { parse as parseCookie } from "cookie-es"; +import { + deserializeReactivePayload, + serializeReactivePayload, +} from "./serializer"; +import { + SerializedMemo, + SerializedProjection, + SerializedReactiveThing, + SerializedRef, + SerializedStream, + WsMessage, + WsMessageDown, + WsMessageUp, +} from "./shared"; +import { applyPatches, Patch } from "immer"; const peerCtx = createContext(); export const usePeer = () => { @@ -58,12 +62,15 @@ export type Endpoint = ( export type Endpoints = Record>; export class LiveSolidServer { - private closures = new Map void }>(); - observers = new Map(); + private closures = new Map< + string, + { refs?: Map; disposal: () => void } + >(); + observers = new Map void>(); constructor(public peer: Peer) {} - send(message: WsMessage>) { + send(message: WsMessage) { // console.log(`send`, message); this.peer.send(JSON.stringify(message)); } @@ -74,7 +81,7 @@ export class LiveSolidServer { } if (message.type === "subscribe") { - this.subscribe(message.id, message.ref, message.path || ``); + this.subscribe(message.id, message.ref); } if (message.type === "dispose") { @@ -90,7 +97,7 @@ export class LiveSolidServer { } } - async create(id: string, name: string, input?: SerializedThing) { + async create(id: string, name: string, input?: SerovalJSON) { const [filepath, functionName] = name.split("#"); const module = await getManifest(import.meta.env.ROUTER_NAME).chunks[ filepath @@ -101,9 +108,14 @@ export class LiveSolidServer { const { payload, disposal } = createRoot((disposal) => { const deserializedInput = - input?.__type === "memo" - ? createSocketMemoConsumer(input, this) - : input; + input && + deserializeReactivePayload(input, { + createSocketRefConsumer: (ref) => createSocketRefConsumer(ref, this), + createSocketMemoConsumer: (ref) => + createSocketMemoConsumer(ref, this), + createSocketProjectionConsumer: (ref) => + createSocketProjectionConsumer(ref, this), + }); let payload: any; peerCtx.Provider({ @@ -115,67 +127,21 @@ export class LiveSolidServer { return { payload, disposal }; }); - this.closures.set(id, { payload, disposal }); - - if (typeof payload === "function") { - if (payload.type === "memo") { - const value = createSeriazliedMemo({ - name, - scope: id, - initial: untrack(payload), - }); - this.send({ value, id, type: "value" }); - } else { - const value = createSeriazliedRef({ - name, - scope: id, - }); - this.send({ value, id, type: "value" }); - } - } else { - const value = Object.entries(payload).reduce((res, [name, value]) => { - return { - ...res, - [name]: - typeof value === "function" - ? // @ts-expect-error - value.type === "memo" - ? createSeriazliedMemo({ - name, - scope: id, - initial: untrack(() => value()), - }) - : // @ts-expect-error - value.type === "store-accessor" - ? createSeriazliedStore({ - name, - scope: id, - initial: untrack(() => value()), - }) - : createSeriazliedRef({ name, scope: id }) - : value, - }; - }, {} as Record); - this.send({ value, id, type: "value" }); - } + const { refs, value } = serializeReactivePayload(id, payload); + this.closures.set(id, { refs, disposal }); + this.send({ value, id, type: "value" }); } - async invoke(id: string, ref: SerializedRef, input: any[]) { - const closure = this.closures.get(ref.scope); - if (!closure) throw new Error(`Callable ${ref.scope} not found`); - const { payload } = closure; - - if (typeof payload === "function") { - const response = await payload(...input); - this.send({ id, value: response, type: "value" }); - } else { - const response = await payload[ref.name](...input); - this.send({ id, value: response, type: "value" }); - } + async invoke(id: string, ref: SerializedRef, input: SerovalJSON) { + const refFn = this.closures.get(ref.scope)!.refs!.get(ref.id)!; + const fnInput = fromJSON(input); + const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; + const response = await refFn(...arified); + const value = toJSON(response); + this.send({ id: id, value, type: "value" }); } dispose(id: string) { - // console.log(`Disposing ${id}`); const closure = this.closures.get(id); if (closure) { closure.disposal(); @@ -183,29 +149,20 @@ export class LiveSolidServer { } } - subscribe(id: string, ref: SerializedReactiveThing, path: string) { - // console.log(`subscribe`, ref); - - const closure = this.closures.get(ref.scope); - if (!closure) throw new Error(`Callable ${ref.scope} not found`); - const { payload } = closure; + subscribe(id: string, ref: SerializedReactiveThing) { + const source = this.closures.get(ref.scope)!.refs!.get(ref.id)!; - const source = typeof payload === "function" ? payload : payload[ref.name]; + const response$ = observable(() => source()); - const response$ = observable(() => - ref.__type === "projection" - ? source[path] - : ref.__type === "store-accessor" - ? source()[path] - : source() - ); - const sub = response$.subscribe((value) => { + const sub = response$.subscribe((payload) => { + const value = toJSON(payload); this.send({ id, value, type: "value" }); }); - this.closures.set(id, { payload: sub, disposal: () => sub.unsubscribe() }); + + this.closures.set(id, { disposal: () => sub.unsubscribe() }); } - stream(stream: SerializedStream) {} + stream(stream: SerializedStream) {} cleanup() { for (const [key, closure] of this.closures.entries()) { @@ -216,62 +173,54 @@ export class LiveSolidServer { } } -function createSeriazliedRef( - opts: Omit -): SerializedRef { - return { ...opts, __type: "ref" }; -} +function createSocketRefConsumer( + ref: SerializedRef, + server: LiveSolidServer +) { + const inputSubId = crypto.randomUUID(); -export function createSocketFn( - fn: () => (i?: I) => O -): () => (i?: I) => Promise; + return (...payload: I) => { + const input = toJSON(payload); -export function createSocketFn( - fn: () => Record O> -): () => Record Promise>; + server.send({ type: "invoke", id: inputSubId, ref, input }); -export function createSocketFn( - fn: () => ((i: I) => O) | Record O> -): () => ((i: I) => Promise) | Record Promise> { - return fn as any; + return new Promise((res) => { + server.observers.set(inputSubId, (value) => { + res(fromJSON(value)); + server.observers.delete(inputSubId); + }); + }); + }; } -function createLazyMemo( - calc: (prev: T | undefined) => T, - value?: T -): () => T { - let isReading = false, - isStale: boolean | undefined = true; - - const [track, trigger] = createSignal(void 0, { equals: false }), - memo = createMemo( - (p) => (isReading ? calc(p) : ((isStale = !track()), p)), - value as T, - { equals: false } - ); +function createSocketMemoConsumer( + ref: SerializedMemo, + server: LiveSolidServer +) { + const inputSubId = crypto.randomUUID(); - return (): T => { - isReading = true; - if (isStale) isStale = trigger(); - const v = memo(); - isReading = false; - return v; - }; + const [signal, setSignal] = createSignal(ref.initial!); + server.observers.set(inputSubId, (value) => setSignal(() => fromJSON(value))); + server.send({ type: "subscribe", id: inputSubId, ref }); + onCleanup(() => server.observers.delete(inputSubId)); + return signal; } -export function createSocketMemoConsumer( - ref: SerializedMemo, +function createSocketProjectionConsumer( + ref: SerializedProjection, server: LiveSolidServer ) { const inputSubId = crypto.randomUUID(); - const memo = createLazyMemo(() => { - const [get, set] = createSignal(ref.initial!); - server.observers.set(inputSubId, set); - server.send({ type: "subscribe", id: inputSubId, ref }); - onCleanup(() => server.observers.delete(inputSubId)); - return get; + const [store, setStore] = createStore(ref.initial!); + server.observers.set(inputSubId, (patches) => { + setStore( + produce((draft) => { + applyPatches(draft, fromJSON(patches)); + }) + ); }); - - return () => memo()(); + server.send({ type: "subscribe", id: inputSubId, ref }); + onCleanup(() => server.observers.delete(inputSubId)); + return store; } diff --git a/socket/lib/shared.tsx b/socket/lib/shared.tsx index 9a48391..7d1a9ed 100644 --- a/socket/lib/shared.tsx +++ b/socket/lib/shared.tsx @@ -1,95 +1,86 @@ -import { createComputed, $PROXY } from "solid-js"; -import { createStore, produce } from "solid-js/store"; +import { SerovalJSON } from "seroval"; +import { $TRACK } from "solid-js"; +import { enablePatches } from "immer"; +enablePatches(); export type WsMessage = T & { id: string }; -export type WsMessageUp = - | { - type: "create"; - name: string; - input?: I; - } +export type WsMessageUp = | { type: "subscribe"; - ref: SerializedMemo; - path?: undefined; + ref: SerializedReactiveThing; } | { - type: "subscribe"; - ref: SerializedProjection | SerializedStoreAccessor; - path: string; + type: "invoke"; + ref: SerializedRef; + input: SerovalJSON; } | { - type: "dispose"; + type: "value"; + value: SerovalJSON; } | { - type: "invoke"; - ref: SerializedRef; - input?: I; + type: "create"; + name: string; + input: SerovalJSON; } | { - type: "value"; - value: I; + type: "dispose"; }; -export type WsMessageDown = +export type WsMessageDown = | { - type: "value"; - value: T; + type: "subscribe"; + ref: SerializedReactiveThing; } | { - type: "subscribe"; - ref: SerializedMemo; + type: "invoke"; + ref: SerializedRef; + input: SerovalJSON; } | { - type: "subscribe"; - ref: SerializedProjection; - path: string; + type: "value"; + value: SerovalJSON; }; export type SerializedRef = { __type: "ref"; - name: string; + id: string; scope: string; }; export type SerializedMemo = { __type: "memo"; - name: string; + id: string; scope: string; initial?: O; }; export type SerializedProjection = { __type: "projection"; - name: string; - scope: string; - initial?: O; -}; - -export type SerializedStoreAccessor = { - __type: "store-accessor"; - name: string; + id: string; scope: string; initial?: O; }; export type SerializedReactiveThing = | SerializedMemo - | SerializedProjection - | SerializedStoreAccessor; + | SerializedProjection; -export type SerializedThing = - | SerializedRef - | SerializedReactiveThing; +export type SerializedThing = SerializedRef | SerializedReactiveThing; -export type SerializedStream = { +export type SerializedStream = { __type: "stream"; - name: string; + id: string; scope: string; - value: O; }; +export function createSeriazliedRef( + opts: Omit +): SerializedRef { + return { ...opts, __type: "ref" }; +} + export function createSeriazliedMemo( opts: Omit ): SerializedMemo { @@ -102,34 +93,18 @@ export function createSeriazliedProjection( return { ...opts, __type: "projection" }; } -export function createSeriazliedStore( - opts: Omit -): SerializedStoreAccessor { - return { ...opts, __type: "store-accessor" }; -} - export function createSocketMemo(source: () => T): () => T | undefined { // @ts-expect-error source.type = "memo"; return source; } -export function createSocketProjection( - storeOrMutation: (draft: T) => void, +export function createSocketProjection( + mutation: (draft: T) => void, init?: T ): T | undefined { + let state = init; // @ts-expect-error - const [store, setStore] = createStore(init || {}); - createComputed(() => setStore(produce(storeOrMutation))); - // @ts-expect-error - store.type = "projection"; - return store; -} - -export function createSocketStore( - storeAccessor: () => T -): T | undefined { - // @ts-expect-error - storeAccessor.type = "store-accessor"; - return storeAccessor as any; + state[$TRACK] = mutation; + return state; } diff --git a/src/components/todos.tsx b/src/components/todos.tsx index 9a003a6..b3ea1c9 100644 --- a/src/components/todos.tsx +++ b/src/components/todos.tsx @@ -28,70 +28,6 @@ export type Todo = { export function TodoApp(props: { filter: TodosFilter; listId?: string }) { const filter = () => props.filter; - const [onServerTodoEvent, emitServerTodoEvent] = createEvent(); - - const { log: todoEventLog, onEvent: onTodoEvent } = createLog({ - onEvent: onServerTodoEvent, - }); - - const [onTodoAdded] = createPartition( - onTodoEvent, - (e) => e.type === "todo-added" - ); - const [onTodoToggled] = createPartition( - onTodoEvent, - (e) => e.type === "todo-toggled" - ); - const [onTodoDeleted] = createPartition( - onTodoEvent, - (e) => e.type === "todo-deleted" - ); - const [onTodoEdited] = createPartition( - onTodoEvent, - (e) => e.type === "todo-edited" - ); - - const todos = createSubjectStore( - () => [] as Todo[], - onTodoAdded((e) => (todos) => { - const todo = todos.find((t) => t.id === e.id); - if (!todo) todos.push({ id: e.id, title: e.title, completed: false }); - }), - onTodoToggled((e) => (todos) => { - const todo = todos.find((t) => t.id === e.id); - if (todo) todo.completed = !todo.completed; - }), - onTodoDeleted((e) => (todos) => { - const index = todos.findIndex((note) => note.id === e.id); - if (index !== -1) todos.splice(index, 1); - }), - onTodoEdited((e) => (todos) => { - const todo = todos.find((t) => t.id === e.id); - if (todo) todo.title = e.title; - }) - ); - - // const _todos = createSubjectStore( - // () => [] as Todo[], - // onTodoEvent((e) => (todos) => { - // if (e.type === "todo-added") { - // todos.push({ id: e.id, title: e.title, completed: false }); - // } - // if (e.type === "todo-toggled") { - // const todo = todos.find((t) => t.id === e.id); - // if (todo) todo.completed = !todo.completed; - // } - // if (e.type === "todo-deleted") { - // const index = todos.findIndex((note) => note.id === e.id); - // if (index !== -1) todos.splice(index, 1); - // } - // if (e.type === "todo-edited") { - // const todo = todos.find((t) => t.id === e.id); - // if (todo) todo.title = e.title; - // } - // }) - // ); - const [editingTodoId, setEditingId] = createSignal(); const setEditing = ({ @@ -107,28 +43,28 @@ export function TodoApp(props: { filter: TodosFilter; listId?: string }) { const serverTodos = useServerTodos(createSocketMemo(() => props.listId)); const { events, appendEvent } = createClientEventLog(serverTodos); - // const todos = createEventProjection( - // events, - // (acc, e) => { - // if (e.type === "todo-added") { - // acc.push({ id: e.id, title: e.title, completed: false }); - // } - // if (e.type === "todo-toggled") { - // const todo = acc.find((t) => t.id === e.id); - // if (todo) todo.completed = !todo.completed; - // } - // if (e.type === "todo-deleted") { - // const index = acc.findIndex((note) => note.id === e.id); - // if (index !== -1) acc.splice(index, 1); - // } - // if (e.type === "todo-edited") { - // const todo = acc.find((t) => t.id === e.id); - // if (todo) todo.title = e.title; - // } - // return acc; - // }, - // [] as Todo[] - // ); + const todos = createEventProjection( + events, + (acc, e) => { + if (e.type === "todo-added") { + acc.push({ id: e.id, title: e.title, completed: false }); + } + if (e.type === "todo-toggled") { + const todo = acc.find((t) => t.id === e.id); + if (todo) todo.completed = !todo.completed; + } + if (e.type === "todo-deleted") { + const index = acc.findIndex((note) => note.id === e.id); + if (index !== -1) acc.splice(index, 1); + } + if (e.type === "todo-edited") { + const todo = acc.find((t) => t.id === e.id); + if (todo) todo.title = e.title; + } + return acc; + }, + [] as Todo[] + ); const filteredTodos = createMemo(() => { if (filter() === "active") return todos.filter((t) => !t.completed); diff --git a/src/lib/counter.ts b/src/lib/counter.ts index 60fea59..d4c5ba8 100644 --- a/src/lib/counter.ts +++ b/src/lib/counter.ts @@ -3,9 +3,9 @@ import { createSignal } from "solid-js"; import { createSocketMemo } from "../../socket/lib/shared"; -const [count, setCount] = createSignal(0); - export const useCounter = () => { + const [count, setCount] = createSignal(0); + const increment = () => setCount(count() + 1); const decrement = () => setCount(count() - 1); diff --git a/src/routes/index.tsx b/src/routes/index.tsx index a4a99aa..ac51c62 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -5,12 +5,17 @@ import { Invites } from "~/components/invites"; import { PresenceHost } from "~/components/presence"; import { TodoApp, TodosFilter } from "~/components/todos"; import { getUserId } from "~/lib/auth"; +import { useCounter } from "~/lib/counter"; export default function TodoAppPage(props: RouteSectionProps) { const userId = createAsync(() => getUserId()); + const counter = useCounter(); return ( <> + Date: Thu, 30 Jan 2025 03:02:17 -0600 Subject: [PATCH 4/8] eager socket signals --- socket/lib/client.tsx | 132 +++++++++++++++++++++--------------- socket/lib/primitives.tsx | 27 -------- socket/lib/serializer.tsx | 18 ++--- socket/lib/server.tsx | 65 +++++++++--------- socket/lib/shared.tsx | 38 ++++++++--- src/components/presence.tsx | 4 +- src/components/todos.tsx | 4 +- src/lib/counter.ts | 4 +- src/lib/presence.ts | 4 +- src/lib/todos.ts | 8 +-- 10 files changed, 156 insertions(+), 148 deletions(-) delete mode 100644 socket/lib/primitives.tsx diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index 268aaf9..5b8f3b9 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -63,31 +63,31 @@ function wsRpc(message: WsMessageUp) { ); } -function wsSub(message: WsMessageUp) { - const ws = getWs(); - const id = crypto.randomUUID(); - - return rxFrom( - new Observable((obs) => { - // console.log(`attaching sub handler`); - function handler(event: { data: string }) { - const data = JSON.parse(event.data) as WsMessage; - // console.log(`data`, data, id); - if (data.id === id && data.type === "value") obs.next(data.value); - } - - ws.addEventListener("message", handler); - ws.send( - JSON.stringify({ ...message, id } satisfies WsMessage) - ); - - return () => { - // console.log(`detaching sub handler`); - ws.removeEventListener("message", handler); - }; - }) - ); -} +// function wsSub(message: WsMessageUp) { +// const ws = getWs(); +// const id = crypto.randomUUID(); + +// return rxFrom( +// new Observable((obs) => { +// // console.log(`attaching sub handler`); +// function handler(event: { data: string }) { +// const data = JSON.parse(event.data) as WsMessage; +// // console.log(`data`, data, id); +// if (data.id === id && data.type === "value") obs.next(data.value); +// } + +// ws.addEventListener("message", handler); +// ws.send( +// JSON.stringify({ ...message, id } satisfies WsMessage) +// ); + +// return () => { +// // console.log(`detaching sub handler`); +// ws.removeEventListener("message", handler); +// }; +// }) +// ); +// } function createSocketRefConsumer(ref: SerializedRef) { return async (...payload: I) => { @@ -99,58 +99,84 @@ function createSocketRefConsumer(ref: SerializedRef) { function createSocketMemoConsumer(ref: SerializedMemo) { const [signal, setSignal] = createSignal(ref.initial); - const sub = wsSub({ type: "subscribe", ref }).subscribe((value) => { - setSignal(() => fromJSON(value)); + + const ws = getWs(); + function handler(event: { data: string }) { + const data = JSON.parse(event.data) as WsMessage; + if (data.type === "value" && data.id === ref.id) { + setSignal(() => fromJSON(data.value)); + } + } + ws.addEventListener("message", handler); + + onCleanup(() => { + ws.removeEventListener("message", handler); }); - onCleanup(() => sub.unsubscribe()); + return signal; } function createSocketProjectionConsumer( ref: SerializedProjection ) { - const [store, setStore] = createStore(ref.initial); - const sub = wsSub({ type: "subscribe", ref }).subscribe((patches) => { - setStore( - produce((draft) => { - applyPatches(draft, fromJSON(patches)); - }) - ); + const [store, setStore] = createStore(ref.initial!); + + const ws = getWs(); + function handler(event: { data: string }) { + const data = JSON.parse(event.data) as WsMessage; + if (data.type === "value" && data.id === ref.id) { + setStore( + produce((draft) => { + applyPatches(draft, fromJSON(data.value)); + }) + ); + } + } + ws.addEventListener("message", handler); + + onCleanup(() => { + ws.removeEventListener("message", handler); }); - onCleanup(() => sub.unsubscribe()); - return store as O; + + return store; } export function createEndpoint(name: string, rawInput?: any) { const inputScope = crypto.randomUUID(); - const { value: input, refs } = serializeReactivePayload(inputScope, rawInput); + const { + value: input, + refs, + signals, + } = serializeReactivePayload(inputScope, rawInput); // console.log({ serializedInput }); const scopePromise = wsRpc({ type: "create", name, input }); - const onSubscribe = createCallback( - (ws: SimpleWs, id: string, source: () => any) => { - createEffect(() => { - ws.send(JSON.stringify({ type: "value", id, value: source() })); - }); - } - ); - const ws = getWs(); - function handler(event: { data: string }) { + signals.forEach((signal, id) => { + createEffect(() => { + ws.send(JSON.stringify({ type: "value", id, value: signal() })); + }); + }); + + async function refHandler(event: { data: string }) { const data = JSON.parse(event.data) as WsMessage; - if (data.type === "subscribe" && data.ref.scope === inputScope) { - const source = refs.get(data.ref.id); - if (source) { - onSubscribe(ws, data.ref.id, () => source()); + if (data.type === "invoke" && data.ref.scope === inputScope) { + const fn = refs.get(data.ref.id); + if (fn) { + const fnInput = fromJSON(input); + const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; + const res = await fn(...arified); + const value = toJSON(res); + ws.send(JSON.stringify({ type: "value", id: data.id, value })); } } } - ws.addEventListener("message", handler); + ws.addEventListener("message", refHandler); onCleanup(() => { // console.log(`cleanup endpoint`); - ws.removeEventListener("message", handler); + ws.removeEventListener("message", refHandler); scopePromise.then(({ dispose }) => dispose()); }); diff --git a/socket/lib/primitives.tsx b/socket/lib/primitives.tsx deleted file mode 100644 index 819f470..0000000 --- a/socket/lib/primitives.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { createSignal, createMemo } from "solid-js"; -import { $PROXY, $TRACK, Accessor, createRoot, untrack } from "solid-js"; -import { unwrap } from "solid-js/store"; - -export function createLazyMemo( - calc: (prev: T | undefined) => T, - value?: T -): () => T { - let isReading = false; - let isStale: boolean | undefined = true; - - const [track, trigger] = createSignal(void 0, { equals: false }); - - const memo = createMemo( - (p) => (isReading ? calc(p) : ((isStale = !track()), p)), - value as T, - { equals: false } - ); - - return (): T => { - isReading = true; - if (isStale) isStale = trigger(); - const v = memo(); - isReading = false; - return v; - }; -} diff --git a/socket/lib/serializer.tsx b/socket/lib/serializer.tsx index b49cd68..0e14623 100644 --- a/socket/lib/serializer.tsx +++ b/socket/lib/serializer.tsx @@ -1,3 +1,4 @@ +import { enablePatches, produce as immerProduce, Patch } from "immer"; import { createPlugin, fromJSON, SerovalJSON, toJSON } from "seroval"; import { $TRACK, Accessor, createMemo } from "solid-js"; import { @@ -8,16 +9,11 @@ import { SerializedProjection, SerializedRef, } from "./shared"; -import { - produce as immerProduce, - applyPatches, - enablePatches, - Patch, -} from "immer"; enablePatches(); export function serializeReactivePayload(scope: string, input: any) { const refs = new Map(); + const signals = new Map(); const value = toJSON(input, { plugins: [ @@ -35,13 +31,13 @@ export function serializeReactivePayload(scope: string, input: any) { deserialize: () => ({} as any), }), createPlugin({ - tag: "seroval-plugins/socket/memo", + tag: "seroval-plugins/socket/lazy-memo", test: (value: any) => typeof value === "function" && value.type === "memo", parse: { sync(value) { const id = crypto.randomUUID(); - refs.set(id, value); + signals.set(id, value); return createSeriazliedMemo({ scope, id }); }, }, @@ -49,7 +45,7 @@ export function serializeReactivePayload(scope: string, input: any) { deserialize: () => ({} as any), }), createPlugin({ - tag: "seroval-plugins/socket/projection", + tag: "seroval-plugins/socket/lazy-projection", test: (value: any) => $TRACK in value, parse: { sync(state) { @@ -68,7 +64,7 @@ export function serializeReactivePayload(scope: string, input: any) { { state, changes: [] as Patch[] } ); - refs.set(id, () => projection().changes); + signals.set(id, () => projection().changes); return createSeriazliedProjection({ scope, id, initial: state }); }, }, @@ -78,7 +74,7 @@ export function serializeReactivePayload(scope: string, input: any) { ], }); - return { value, refs }; + return { value, refs, signals }; } export function deserializeReactivePayload( diff --git a/socket/lib/server.tsx b/socket/lib/server.tsx index f8299c8..b7f8c49 100644 --- a/socket/lib/server.tsx +++ b/socket/lib/server.tsx @@ -1,12 +1,12 @@ import { parse as parseCookie } from "cookie-es"; import type { Peer } from "crossws"; +import { applyPatches, Patch } from "immer"; import { fromJSON, SerovalJSON, toJSON } from "seroval"; import { - batch, createContext, + createEffect, createRoot, createSignal, - observable, onCleanup, useContext, } from "solid-js"; @@ -19,14 +19,12 @@ import { import { SerializedMemo, SerializedProjection, - SerializedReactiveThing, SerializedRef, SerializedStream, WsMessage, WsMessageDown, WsMessageUp, } from "./shared"; -import { applyPatches, Patch } from "immer"; const peerCtx = createContext(); export const usePeer = () => { @@ -70,7 +68,7 @@ export class LiveSolidServer { constructor(public peer: Peer) {} - send(message: WsMessage) { + send(message: WsMessage) { // console.log(`send`, message); this.peer.send(JSON.stringify(message)); } @@ -80,9 +78,9 @@ export class LiveSolidServer { this.create(message.id, message.name, message.input); } - if (message.type === "subscribe") { - this.subscribe(message.id, message.ref); - } + // if (message.type === "subscribe") { + // this.subscribe(message.id, message.ref); + // } if (message.type === "dispose") { this.dispose(message.id); @@ -106,7 +104,7 @@ export class LiveSolidServer { if (!endpoint) throw new Error(`Endpoint ${name} not found`); - const { payload, disposal } = createRoot((disposal) => { + const { refs, disposal } = createRoot((disposal) => { const deserializedInput = input && deserializeReactivePayload(input, { @@ -124,12 +122,17 @@ export class LiveSolidServer { children: () => (payload = endpoint(deserializedInput)), }); - return { payload, disposal }; - }); + const { refs, signals, value } = serializeReactivePayload(id, payload); + this.send({ value, id, type: "value" }); + signals.forEach((signal, id) => { + createEffect(() => { + this.send({ value: signal(), id, type: "value" }); + }); + }); - const { refs, value } = serializeReactivePayload(id, payload); + return { refs, disposal }; + }); this.closures.set(id, { refs, disposal }); - this.send({ value, id, type: "value" }); } async invoke(id: string, ref: SerializedRef, input: SerovalJSON) { @@ -138,7 +141,7 @@ export class LiveSolidServer { const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; const response = await refFn(...arified); const value = toJSON(response); - this.send({ id: id, value, type: "value" }); + this.send({ id, value, type: "value" }); } dispose(id: string) { @@ -149,18 +152,18 @@ export class LiveSolidServer { } } - subscribe(id: string, ref: SerializedReactiveThing) { - const source = this.closures.get(ref.scope)!.refs!.get(ref.id)!; + // subscribe(id: string, ref: SerializedReactiveThing) { + // const source = this.closures.get(ref.scope)!.refs!.get(ref.id)!; - const response$ = observable(() => source()); + // const response$ = observable(() => source()); - const sub = response$.subscribe((payload) => { - const value = toJSON(payload); - this.send({ id, value, type: "value" }); - }); + // const sub = response$.subscribe((payload) => { + // const value = toJSON(payload); + // this.send({ id, value, type: "value" }); + // }); - this.closures.set(id, { disposal: () => sub.unsubscribe() }); - } + // this.closures.set(id, { disposal: () => sub.unsubscribe() }); + // } stream(stream: SerializedStream) {} @@ -197,12 +200,9 @@ function createSocketMemoConsumer( ref: SerializedMemo, server: LiveSolidServer ) { - const inputSubId = crypto.randomUUID(); - - const [signal, setSignal] = createSignal(ref.initial!); - server.observers.set(inputSubId, (value) => setSignal(() => fromJSON(value))); - server.send({ type: "subscribe", id: inputSubId, ref }); - onCleanup(() => server.observers.delete(inputSubId)); + const [signal, setSignal] = createSignal(ref.initial); + server.observers.set(ref.id, (value) => setSignal(() => fromJSON(value))); + onCleanup(() => server.observers.delete(ref.id)); return signal; } @@ -210,17 +210,14 @@ function createSocketProjectionConsumer( ref: SerializedProjection, server: LiveSolidServer ) { - const inputSubId = crypto.randomUUID(); - const [store, setStore] = createStore(ref.initial!); - server.observers.set(inputSubId, (patches) => { + server.observers.set(ref.id, (patches) => { setStore( produce((draft) => { applyPatches(draft, fromJSON(patches)); }) ); }); - server.send({ type: "subscribe", id: inputSubId, ref }); - onCleanup(() => server.observers.delete(inputSubId)); + onCleanup(() => server.observers.delete(ref.id)); return store; } diff --git a/socket/lib/shared.tsx b/socket/lib/shared.tsx index 7d1a9ed..473bbec 100644 --- a/socket/lib/shared.tsx +++ b/socket/lib/shared.tsx @@ -1,15 +1,15 @@ import { SerovalJSON } from "seroval"; -import { $TRACK } from "solid-js"; +import { $TRACK, $PROXY } from "solid-js"; import { enablePatches } from "immer"; enablePatches(); export type WsMessage = T & { id: string }; export type WsMessageUp = - | { - type: "subscribe"; - ref: SerializedReactiveThing; - } + // | { + // type: "subscribe"; + // ref: SerializedReactiveThing; + // } | { type: "invoke"; ref: SerializedRef; @@ -29,10 +29,10 @@ export type WsMessageUp = }; export type WsMessageDown = - | { - type: "subscribe"; - ref: SerializedReactiveThing; - } + // | { + // type: "subscribe"; + // ref: SerializedReactiveThing; + // } | { type: "invoke"; ref: SerializedRef; @@ -93,13 +93,13 @@ export function createSeriazliedProjection( return { ...opts, __type: "projection" }; } -export function createSocketMemo(source: () => T): () => T | undefined { +export function createSocketLazyMemo(source: () => T): () => T | undefined { // @ts-expect-error source.type = "memo"; return source; } -export function createSocketProjection( +export function createSocketLazyProjection( mutation: (draft: T) => void, init?: T ): T | undefined { @@ -108,3 +108,19 @@ export function createSocketProjection( state[$TRACK] = mutation; return state; } + +export function createSocketMemo(source: () => T): () => T | undefined { + // @ts-expect-error + source.type = "eager-memo"; + return source; +} + +export function createSocketProjection( + mutation: (draft: T) => void, + init?: T +): T | undefined { + let state = init; + // @ts-expect-error + state[$PROXY] = mutation; + return state; +} diff --git a/src/components/presence.tsx b/src/components/presence.tsx index 2cbe397..b093951 100644 --- a/src/components/presence.tsx +++ b/src/components/presence.tsx @@ -12,7 +12,7 @@ import { } from "solid-js"; import { createStore, reconcile } from "solid-js/store"; import { usePresence, PresenceUser } from "~/lib/presence"; -import { createSocketMemo } from "../../socket/lib/shared"; +import { createSocketLazyMemo } from "../../socket/lib/shared"; import { throttle } from "@solid-primitives/scheduled"; import { RiDevelopmentCursorLine } from "solid-icons/ri"; @@ -20,7 +20,7 @@ export function PresenceHost(props: ParentProps<{ docId?: string }>) { let ref: HTMLElement | undefined; const mousePos = createDebouncedMousePos(() => ref); const userPos = () => ({ docId: props.docId, ...mousePos() }); - const users = usePresence(createSocketMemo(userPos)); + const users = usePresence(createSocketLazyMemo(userPos)); const [presenceStore, setPresenceStore] = createStore([]); createComputed(() => diff --git a/src/components/todos.tsx b/src/components/todos.tsx index b3ea1c9..663d529 100644 --- a/src/components/todos.tsx +++ b/src/components/todos.tsx @@ -12,7 +12,7 @@ import { createEventProjection, createEventComputed, } from "../../socket/events"; -import { createSocketMemo } from "../../socket/lib/shared"; +import { createSocketLazyMemo } from "../../socket/lib/shared"; import { CompleteIcon, IncompleteIcon } from "./icons"; import { createLog } from "../../socket/events/v2"; import { createEvent, createPartition, createSubjectStore } from "solid-events"; @@ -41,7 +41,7 @@ export function TodoApp(props: { filter: TodosFilter; listId?: string }) { }; let inputRef!: HTMLInputElement; - const serverTodos = useServerTodos(createSocketMemo(() => props.listId)); + const serverTodos = useServerTodos(createSocketLazyMemo(() => props.listId)); const { events, appendEvent } = createClientEventLog(serverTodos); const todos = createEventProjection( events, diff --git a/src/lib/counter.ts b/src/lib/counter.ts index d4c5ba8..8ed20a5 100644 --- a/src/lib/counter.ts +++ b/src/lib/counter.ts @@ -1,7 +1,7 @@ "use socket"; import { createSignal } from "solid-js"; -import { createSocketMemo } from "../../socket/lib/shared"; +import { createSocketLazyMemo } from "../../socket/lib/shared"; export const useCounter = () => { const [count, setCount] = createSignal(0); @@ -9,5 +9,5 @@ export const useCounter = () => { const increment = () => setCount(count() + 1); const decrement = () => setCount(count() - 1); - return { count: createSocketMemo(count), increment, decrement }; + return { count: createSocketLazyMemo(count), increment, decrement }; }; diff --git a/src/lib/presence.ts b/src/lib/presence.ts index bc490b0..e98a524 100644 --- a/src/lib/presence.ts +++ b/src/lib/presence.ts @@ -1,7 +1,7 @@ "use socket"; import { createEffect, createMemo, createSignal, onCleanup } from "solid-js"; -import { createSocketMemo } from "../../socket/lib/shared"; +import { createSocketLazyMemo } from "../../socket/lib/shared"; import { useCookies } from "../../socket/lib/server"; export type PresenceUser = { @@ -45,5 +45,5 @@ export const usePresence = ( return rest; }); - return createSocketMemo(otherUsers); + return createSocketLazyMemo(otherUsers); }; diff --git a/src/lib/todos.ts b/src/lib/todos.ts index d1fd2ab..1545727 100644 --- a/src/lib/todos.ts +++ b/src/lib/todos.ts @@ -2,7 +2,7 @@ import { createServerEventLog } from "../../socket/events/socket"; import { useCookies } from "../../socket/lib/server"; -import { createSocketMemo } from "../../socket/lib/shared"; +import { createSocketLazyMemo } from "../../socket/lib/shared"; import { EventLog } from "../../socket/events"; import { createPersistedSignal } from "../../socket/persisted"; import { storage } from "./db"; @@ -46,7 +46,7 @@ export const useServerTodos = (_listId?: () => string | undefined) => { ); return { - serverEvents: createSocketMemo(serverEvents), + serverEvents: createSocketLazyMemo(serverEvents), appendEvent, }; }; @@ -74,12 +74,12 @@ export const useInvites = () => { }; return { - inviteds: createSocketMemo(() => + inviteds: createSocketLazyMemo(() => Object.entries(invites()) .filter(([, invites]) => invites.includes(cookies.userId)) .map(([invitee]) => invitee) ), - invites: createSocketMemo(() => invites()[cookies.userId] || []), + invites: createSocketLazyMemo(() => invites()[cookies.userId] || []), addInvite, removeInvite, }; From 9edd82f32238e234e3ded2e9e10feb3d4c46a81f Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Thu, 30 Jan 2025 03:56:20 -0600 Subject: [PATCH 5/8] working serialization with class wrappers --- socket/lib/client.tsx | 2 +- socket/lib/serializer.tsx | 49 ++++++++++++++++++++++--------------- socket/lib/server.tsx | 2 +- socket/lib/shared.tsx | 33 ++++++++++++------------- src/components/presence.tsx | 4 +-- src/components/todos.tsx | 19 ++++---------- src/lib/counter.ts | 8 ++++-- src/lib/presence.ts | 4 +-- src/lib/todos.ts | 8 +++--- 9 files changed, 65 insertions(+), 64 deletions(-) diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index 5b8f3b9..fd78d09 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -164,7 +164,7 @@ export function createEndpoint(name: string, rawInput?: any) { if (data.type === "invoke" && data.ref.scope === inputScope) { const fn = refs.get(data.ref.id); if (fn) { - const fnInput = fromJSON(input); + const fnInput = fromJSON(data.input); const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; const res = await fn(...arified); const value = toJSON(res); diff --git a/socket/lib/serializer.tsx b/socket/lib/serializer.tsx index 0e14623..6e23a13 100644 --- a/socket/lib/serializer.tsx +++ b/socket/lib/serializer.tsx @@ -1,13 +1,16 @@ import { enablePatches, produce as immerProduce, Patch } from "immer"; import { createPlugin, fromJSON, SerovalJSON, toJSON } from "seroval"; -import { $TRACK, Accessor, createMemo } from "solid-js"; +import { Accessor, createMemo } from "solid-js"; import { createSeriazliedMemo, createSeriazliedProjection, createSeriazliedRef, SerializedMemo, + SerializedMemoClass, SerializedProjection, + SerializedProjectionClass, SerializedRef, + SerializedRefClass, } from "./shared"; enablePatches(); @@ -17,55 +20,60 @@ export function serializeReactivePayload(scope: string, input: any) { const value = toJSON(input, { plugins: [ - createPlugin({ + createPlugin({ tag: "seroval-plugins/socket/ref", - test: (value) => typeof value === "function", + test: (value) => value instanceof SerializedRefClass, parse: { sync(value) { const id = crypto.randomUUID(); - refs.set(id, value); + refs.set(id, value.handler); return createSeriazliedRef({ scope, id }); }, }, serialize: () => ``, deserialize: () => ({} as any), }), - createPlugin({ - tag: "seroval-plugins/socket/lazy-memo", - test: (value: any) => - typeof value === "function" && value.type === "memo", + createPlugin({ + tag: "seroval-plugins/socket/memo", + test: (value: any) => value instanceof SerializedMemoClass, parse: { sync(value) { const id = crypto.randomUUID(); - signals.set(id, value); + signals.set(id, value.signal); return createSeriazliedMemo({ scope, id }); }, }, serialize: () => ``, deserialize: () => ({} as any), }), - createPlugin({ - tag: "seroval-plugins/socket/lazy-projection", - test: (value: any) => $TRACK in value, + createPlugin({ + tag: "seroval-plugins/socket/projection", + test: (value: any) => value instanceof SerializedProjectionClass, parse: { - sync(state) { + sync(store) { const id = crypto.randomUUID(); - const mutation = state[$TRACK]; - const projection = createMemo( ({ state, changes: _c }) => { let changes = [] as Patch[]; - const s = immerProduce(state, mutation, (patches) => { - changes.push(...patches); - }); + const s = immerProduce( + state, + store.mutation as any, + (patches) => { + changes.push(...patches); + } + ); return { state: s, changes }; }, - { state, changes: [] as Patch[] } + { state: store.init, changes: [] as Patch[] } ); signals.set(id, () => projection().changes); - return createSeriazliedProjection({ scope, id, initial: state }); + return createSeriazliedProjection({ + scope, + id, + initial: store.init, + }); }, }, serialize: () => ``, @@ -91,6 +99,7 @@ export function deserializeReactivePayload( ): O; } ) { + console.log({ value }); return fromJSON(value, { plugins: [ createPlugin({ diff --git a/socket/lib/server.tsx b/socket/lib/server.tsx index b7f8c49..7cacb61 100644 --- a/socket/lib/server.tsx +++ b/socket/lib/server.tsx @@ -126,7 +126,7 @@ export class LiveSolidServer { this.send({ value, id, type: "value" }); signals.forEach((signal, id) => { createEffect(() => { - this.send({ value: signal(), id, type: "value" }); + this.send({ value: toJSON(signal()), id, type: "value" }); }); }); diff --git a/socket/lib/shared.tsx b/socket/lib/shared.tsx index 473bbec..e128e78 100644 --- a/socket/lib/shared.tsx +++ b/socket/lib/shared.tsx @@ -48,6 +48,9 @@ export type SerializedRef = { id: string; scope: string; }; +export class SerializedRefClass { + constructor(public handler: Function) {} +} export type SerializedMemo = { __type: "memo"; @@ -56,6 +59,10 @@ export type SerializedMemo = { initial?: O; }; +export class SerializedMemoClass { + constructor(public signal: Function) {} +} + export type SerializedProjection = { __type: "projection"; id: string; @@ -63,6 +70,10 @@ export type SerializedProjection = { initial?: O; }; +export class SerializedProjectionClass { + constructor(public init: any, public mutation: Function) {} +} + export type SerializedReactiveThing = | SerializedMemo | SerializedProjection; @@ -93,34 +104,20 @@ export function createSeriazliedProjection( return { ...opts, __type: "projection" }; } -export function createSocketLazyMemo(source: () => T): () => T | undefined { - // @ts-expect-error - source.type = "memo"; - return source; -} - -export function createSocketLazyProjection( - mutation: (draft: T) => void, - init?: T -): T | undefined { - let state = init; +export function createSocketRef(source: F): F { // @ts-expect-error - state[$TRACK] = mutation; - return state; + return new SerializedRefClass(source); } export function createSocketMemo(source: () => T): () => T | undefined { // @ts-expect-error - source.type = "eager-memo"; - return source; + return new SerializedMemoClass(source); } export function createSocketProjection( mutation: (draft: T) => void, init?: T ): T | undefined { - let state = init; // @ts-expect-error - state[$PROXY] = mutation; - return state; + return new SerializedProjectionClass(init, mutation); } diff --git a/src/components/presence.tsx b/src/components/presence.tsx index b093951..2cbe397 100644 --- a/src/components/presence.tsx +++ b/src/components/presence.tsx @@ -12,7 +12,7 @@ import { } from "solid-js"; import { createStore, reconcile } from "solid-js/store"; import { usePresence, PresenceUser } from "~/lib/presence"; -import { createSocketLazyMemo } from "../../socket/lib/shared"; +import { createSocketMemo } from "../../socket/lib/shared"; import { throttle } from "@solid-primitives/scheduled"; import { RiDevelopmentCursorLine } from "solid-icons/ri"; @@ -20,7 +20,7 @@ export function PresenceHost(props: ParentProps<{ docId?: string }>) { let ref: HTMLElement | undefined; const mousePos = createDebouncedMousePos(() => ref); const userPos = () => ({ docId: props.docId, ...mousePos() }); - const users = usePresence(createSocketLazyMemo(userPos)); + const users = usePresence(createSocketMemo(userPos)); const [presenceStore, setPresenceStore] = createStore([]); createComputed(() => diff --git a/src/components/todos.tsx b/src/components/todos.tsx index 663d529..09cf8d8 100644 --- a/src/components/todos.tsx +++ b/src/components/todos.tsx @@ -1,21 +1,12 @@ -import { createSignal, createMemo, Show, For } from "solid-js"; -import { - TodoCreated, - TodoDeleted, - TodoEdited, - TodoEvent, - TodoToggled, - useServerTodos, -} from "~/lib/todos"; +import { createMemo, createSignal, For, Show } from "solid-js"; +import { useServerTodos } from "~/lib/todos"; import { createClientEventLog, - createEventProjection, createEventComputed, + createEventProjection, } from "../../socket/events"; -import { createSocketLazyMemo } from "../../socket/lib/shared"; +import { createSocketMemo } from "../../socket/lib/shared"; import { CompleteIcon, IncompleteIcon } from "./icons"; -import { createLog } from "../../socket/events/v2"; -import { createEvent, createPartition, createSubjectStore } from "solid-events"; export type TodosFilter = "all" | "active" | "completed" | undefined; @@ -41,7 +32,7 @@ export function TodoApp(props: { filter: TodosFilter; listId?: string }) { }; let inputRef!: HTMLInputElement; - const serverTodos = useServerTodos(createSocketLazyMemo(() => props.listId)); + const serverTodos = useServerTodos(createSocketMemo(() => props.listId)); const { events, appendEvent } = createClientEventLog(serverTodos); const todos = createEventProjection( events, diff --git a/src/lib/counter.ts b/src/lib/counter.ts index 8ed20a5..bbf8671 100644 --- a/src/lib/counter.ts +++ b/src/lib/counter.ts @@ -1,7 +1,7 @@ "use socket"; import { createSignal } from "solid-js"; -import { createSocketLazyMemo } from "../../socket/lib/shared"; +import { createSocketMemo, createSocketRef } from "../../socket/lib/shared"; export const useCounter = () => { const [count, setCount] = createSignal(0); @@ -9,5 +9,9 @@ export const useCounter = () => { const increment = () => setCount(count() + 1); const decrement = () => setCount(count() - 1); - return { count: createSocketLazyMemo(count), increment, decrement }; + return { + count: createSocketMemo(count), + increment: createSocketRef(increment), + decrement: createSocketRef(decrement), + }; }; diff --git a/src/lib/presence.ts b/src/lib/presence.ts index e98a524..bc490b0 100644 --- a/src/lib/presence.ts +++ b/src/lib/presence.ts @@ -1,7 +1,7 @@ "use socket"; import { createEffect, createMemo, createSignal, onCleanup } from "solid-js"; -import { createSocketLazyMemo } from "../../socket/lib/shared"; +import { createSocketMemo } from "../../socket/lib/shared"; import { useCookies } from "../../socket/lib/server"; export type PresenceUser = { @@ -45,5 +45,5 @@ export const usePresence = ( return rest; }); - return createSocketLazyMemo(otherUsers); + return createSocketMemo(otherUsers); }; diff --git a/src/lib/todos.ts b/src/lib/todos.ts index 1545727..d1fd2ab 100644 --- a/src/lib/todos.ts +++ b/src/lib/todos.ts @@ -2,7 +2,7 @@ import { createServerEventLog } from "../../socket/events/socket"; import { useCookies } from "../../socket/lib/server"; -import { createSocketLazyMemo } from "../../socket/lib/shared"; +import { createSocketMemo } from "../../socket/lib/shared"; import { EventLog } from "../../socket/events"; import { createPersistedSignal } from "../../socket/persisted"; import { storage } from "./db"; @@ -46,7 +46,7 @@ export const useServerTodos = (_listId?: () => string | undefined) => { ); return { - serverEvents: createSocketLazyMemo(serverEvents), + serverEvents: createSocketMemo(serverEvents), appendEvent, }; }; @@ -74,12 +74,12 @@ export const useInvites = () => { }; return { - inviteds: createSocketLazyMemo(() => + inviteds: createSocketMemo(() => Object.entries(invites()) .filter(([, invites]) => invites.includes(cookies.userId)) .map(([invitee]) => invitee) ), - invites: createSocketLazyMemo(() => invites()[cookies.userId] || []), + invites: createSocketMemo(() => invites()[cookies.userId] || []), addInvite, removeInvite, }; From 8a37b67777c050fec66311c4cdcfc9222c015da5 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Thu, 30 Jan 2025 03:56:43 -0600 Subject: [PATCH 6/8] organized imports --- socket/lib/client.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index fd78d09..f489c75 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -1,8 +1,7 @@ import { createLazyMemo } from "@solid-primitives/memo"; -import { createCallback } from "@solid-primitives/rootless"; import { createWS } from "@solid-primitives/websocket"; import { createAsync } from "@solidjs/router"; -import { Observable, from as rxFrom } from "rxjs"; +import { applyPatches, Patch } from "immer"; import { fromJSON, SerovalJSON, toJSON } from "seroval"; import { createEffect, createMemo, createSignal, onCleanup } from "solid-js"; import { createStore, produce } from "solid-js/store"; @@ -18,7 +17,6 @@ import { WsMessageDown, WsMessageUp, } from "./shared"; -import { applyPatches, Patch } from "immer"; const protocol = window.location.protocol === "https:" ? "wss" : "ws"; const wsUrl = `${protocol}://${window.location.hostname}:${window.location.port}/_ws`; From 5dac4d9456a39094ab300c2e3b7e809123fb2626 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Thu, 30 Jan 2025 04:53:36 -0600 Subject: [PATCH 7/8] error handling delegated to the client --- socket/lib/client.tsx | 56 +++++++++++++------------- socket/lib/server.tsx | 93 +++++++++++++++++++++++++------------------ socket/lib/shared.tsx | 4 ++ 3 files changed, 87 insertions(+), 66 deletions(-) diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index f489c75..336b3f8 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -33,32 +33,35 @@ function wsRpc(message: WsMessageUp) { const ws = getWs(); const id = crypto.randomUUID() as string; - return new Promise<{ value: SerovalJSON; dispose: () => void }>( - async (res, rej) => { - function dispose() { - ws.send( - JSON.stringify({ - type: "dispose", - id, - } satisfies WsMessage) - ); - } - - function handler(event: { data: string }) { - // console.log(`handler ${id}`, message, { data: event.data }); - const data = JSON.parse(event.data) as WsMessage; - if (data.id === id && data.type === "value") { - res({ value: data.value, dispose }); - ws.removeEventListener("message", handler); - } - } - - ws.addEventListener("message", handler); + return new Promise(async (res, rej) => { + function dispose() { + ws.removeEventListener("message", handler); ws.send( - JSON.stringify({ ...message, id } satisfies WsMessage) + JSON.stringify({ + type: "dispose", + id, + } satisfies WsMessage) ); } - ); + + function handler(event: { data: string }) { + // console.log(`handler ${id}`, message, { data: event.data }); + const data = JSON.parse(event.data) as WsMessage; + if (data.id === id && data.type === "value") { + res(data.value); + dispose(); + } + if (data.id === id && data.type === "error") { + rej(data.error); + dispose(); + } + } + + ws.addEventListener("message", handler); + ws.send( + JSON.stringify({ ...message, id } satisfies WsMessage) + ); + }); } // function wsSub(message: WsMessageUp) { @@ -90,7 +93,7 @@ function wsRpc(message: WsMessageUp) { function createSocketRefConsumer(ref: SerializedRef) { return async (...payload: I) => { const input = toJSON(payload); - const { value } = await wsRpc({ type: "invoke", ref, input }); + const value = await wsRpc({ type: "invoke", ref, input }); return fromJSON(value); }; } @@ -153,7 +156,7 @@ export function createEndpoint(name: string, rawInput?: any) { const ws = getWs(); signals.forEach((signal, id) => { createEffect(() => { - ws.send(JSON.stringify({ type: "value", id, value: signal() })); + ws.send(JSON.stringify({ type: "value", id, value: toJSON(signal()) })); }); }); @@ -175,14 +178,13 @@ export function createEndpoint(name: string, rawInput?: any) { onCleanup(() => { // console.log(`cleanup endpoint`); ws.removeEventListener("message", refHandler); - scopePromise.then(({ dispose }) => dispose()); }); const scope = createAsync(() => scopePromise); const deserializedScope = createMemo( () => scope() && - deserializeReactivePayload(scope()!.value, { + deserializeReactivePayload(scope()!, { createSocketMemoConsumer, createSocketRefConsumer, createSocketProjectionConsumer, diff --git a/socket/lib/server.tsx b/socket/lib/server.tsx index 7cacb61..9d04358 100644 --- a/socket/lib/server.tsx +++ b/socket/lib/server.tsx @@ -96,52 +96,67 @@ export class LiveSolidServer { } async create(id: string, name: string, input?: SerovalJSON) { - const [filepath, functionName] = name.split("#"); - const module = await getManifest(import.meta.env.ROUTER_NAME).chunks[ - filepath - ].import(); - const endpoint = module[functionName]; - - if (!endpoint) throw new Error(`Endpoint ${name} not found`); - - const { refs, disposal } = createRoot((disposal) => { - const deserializedInput = - input && - deserializeReactivePayload(input, { - createSocketRefConsumer: (ref) => createSocketRefConsumer(ref, this), - createSocketMemoConsumer: (ref) => - createSocketMemoConsumer(ref, this), - createSocketProjectionConsumer: (ref) => - createSocketProjectionConsumer(ref, this), + try { + const [filepath, functionName] = name.split("#"); + const module = await getManifest(import.meta.env.ROUTER_NAME).chunks[ + filepath + ].import(); + const endpoint = module[functionName]; + + if (!endpoint) throw new Error(`Endpoint ${name} not found`); + + const { refs, disposal } = createRoot((disposal) => { + const deserializedInput = + input && + deserializeReactivePayload(input, { + createSocketRefConsumer: (ref) => + createSocketRefConsumer(ref, this), + createSocketMemoConsumer: (ref) => + createSocketMemoConsumer(ref, this), + createSocketProjectionConsumer: (ref) => + createSocketProjectionConsumer(ref, this), + }); + + let payload: any; + peerCtx.Provider({ + value: this.peer, + // @ts-expect-error + children: () => (payload = endpoint(deserializedInput)), }); - let payload: any; - peerCtx.Provider({ - value: this.peer, - // @ts-expect-error - children: () => (payload = endpoint(deserializedInput)), - }); - - const { refs, signals, value } = serializeReactivePayload(id, payload); - this.send({ value, id, type: "value" }); - signals.forEach((signal, id) => { - createEffect(() => { - this.send({ value: toJSON(signal()), id, type: "value" }); + const { refs, signals, value } = serializeReactivePayload(id, payload); + this.send({ value, id, type: "value" }); + + const scope = id; + signals.forEach((signal, id) => { + createEffect(() => { + try { + this.send({ value: toJSON(signal()), id, type: "value" }); + } catch (error) { + this.send({ error: toJSON(error), id: scope, type: "error" }); + } + }); }); - }); - return { refs, disposal }; - }); - this.closures.set(id, { refs, disposal }); + return { refs, disposal }; + }); + this.closures.set(id, { refs, disposal }); + } catch (error) { + this.send({ error: toJSON(error), id, type: "error" }); + } } async invoke(id: string, ref: SerializedRef, input: SerovalJSON) { - const refFn = this.closures.get(ref.scope)!.refs!.get(ref.id)!; - const fnInput = fromJSON(input); - const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; - const response = await refFn(...arified); - const value = toJSON(response); - this.send({ id, value, type: "value" }); + try { + const refFn = this.closures.get(ref.scope)!.refs!.get(ref.id)!; + const fnInput = fromJSON(input); + const arified = Array.isArray(fnInput) ? fnInput : [fnInput]; + const response = await refFn(...arified); + const value = toJSON(response); + this.send({ id, value, type: "value" }); + } catch (error) { + this.send({ id, error: toJSON(error), type: "error" }); + } } dispose(id: string) { diff --git a/socket/lib/shared.tsx b/socket/lib/shared.tsx index e128e78..1f9def5 100644 --- a/socket/lib/shared.tsx +++ b/socket/lib/shared.tsx @@ -41,6 +41,10 @@ export type WsMessageDown = | { type: "value"; value: SerovalJSON; + } + | { + type: "error"; + error: SerovalJSON; }; export type SerializedRef = { From 361031513507d56cefec261a40004d0fdd12f9c3 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Fri, 31 Jan 2025 07:55:01 -0600 Subject: [PATCH 8/8] wip tanstack server fns plugin --- app.config.ts | 13 +- bun.lockb | Bin 257935 -> 0 bytes package-lock.json | 8928 +++++++++++++++++++++++++++++++++++++++ package.json | 19 +- socket/index.ts | 54 +- socket/lib/client.tsx | 1 - socket/lib/server.tsx | 14 +- socket/plugin/server.js | 92 - tmp/count | 1 - 9 files changed, 8992 insertions(+), 130 deletions(-) delete mode 100755 bun.lockb create mode 100644 package-lock.json delete mode 100644 socket/plugin/server.js delete mode 100644 tmp/count diff --git a/app.config.ts b/app.config.ts index dc63003..de49081 100644 --- a/app.config.ts +++ b/app.config.ts @@ -1,8 +1,15 @@ import { defineConfig } from "@solidjs/start/config"; -import { client, router } from "./socket"; +import { SolidSocketFnsPlugin, importsPlugin } from "./socket"; export default defineConfig({ ssr: false, server: { experimental: { websocket: true } }, - vite: { plugins: [client()] }, -}).addRouter(router); + vite: { plugins: [SolidSocketFnsPlugin.client] }, +}).addRouter({ + name: "socket-fns", + type: "http", + base: "/_ws", + handler: "./socket/plugin/server-handler.ts", + target: "server", + plugins: () => [SolidSocketFnsPlugin.server, importsPlugin()], +}); diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 7fefa9a69afb60fa9cf7a2c46fbd6fc9a49a729b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257935 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

Ej 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 OJMTIu#=iec|NS@0%YR$| diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8fc6289 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8928 @@ +{ + "name": "solid-socket", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "solid-socket", + "dependencies": { + "@kobalte/core": "^0.13.7", + "@solid-primitives/memo": "^1.4.0", + "@solid-primitives/mouse": "^2.1.0", + "@solid-primitives/scheduled": "^1.5.0", + "@solid-primitives/websocket": "^1.3.0", + "@solidjs/router": "^0.14.10", + "@solidjs/start": "^1.0.11", + "immer": "^10.1.1", + "rxjs": "^7.8.1", + "seroval": "^1.2.0", + "solid-events": "^0.0.5", + "solid-icons": "^1.1.0", + "solid-js": "^1.9.4", + "unique-names-generator": "^4.7.1", + "unstorage": "1.10.2", + "vinxi": "^0.5.1" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.26.0", + "@tanstack/server-functions-plugin": "^1.98.1", + "@vinxi/plugin-directives": "^0.5.0", + "babel-plugin-transform-import-paths": "^1.0.3", + "vite-plugin-babel": "^1.3.0", + "vitest": "^3.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "dependencies": { + "@babel/types": "^7.26.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.7.tgz", + "integrity": "sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/standalone": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.7.tgz", + "integrity": "sha512-Fvdo9Dd20GDUAREzYMIR2EFMKAJ+ccxstgQdb39XV/yvygHL4UPcqgTkiChPyltAe/b+zgq+vUPXeukEZ6aUeA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", + "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@corvu/utils": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@corvu/utils/-/utils-0.4.2.tgz", + "integrity": "sha512-Ox2kYyxy7NoXdKWdHeDEjZxClwzO4SKM8plAaVwmAJPxHMqA0rLOoAsa+hBDwRLpctf+ZRnAd/ykguuJidnaTA==", + "dependencies": { + "@floating-ui/dom": "^1.6.11" + }, + "peerDependencies": { + "solid-js": "^1.8" + } + }, + "node_modules/@deno/shim-deno": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@deno/shim-deno/-/shim-deno-0.19.2.tgz", + "integrity": "sha512-q3VTHl44ad8T2Tw2SpeAvghdGOjlnLPDNO2cpOxwMrBE/PVas6geWpbpIgrM+czOCH0yejp0yi8OaTuB+NU40Q==", + "dependencies": { + "@deno/shim-deno-test": "^0.5.0", + "which": "^4.0.0" + } + }, + "node_modules/@deno/shim-deno-test": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@deno/shim-deno-test/-/shim-deno-test-0.5.0.tgz", + "integrity": "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==" + }, + "node_modules/@deno/shim-deno/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@deno/shim-deno/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "node_modules/@internationalized/date": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.7.0.tgz", + "integrity": "sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz", + "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kobalte/core": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@kobalte/core/-/core-0.13.7.tgz", + "integrity": "sha512-COhjWk1KnCkl3qMJDvdrOsvpTlJ9gMLdemkAn5SWfbPn/lxJYabejnNOk+b/ILGg7apzQycgbuo48qb8ppqsAg==", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@internationalized/date": "^3.4.0", + "@internationalized/number": "^3.2.1", + "@kobalte/utils": "^0.9.1", + "@solid-primitives/props": "^3.1.8", + "@solid-primitives/resize-observer": "^2.0.26", + "solid-presence": "^0.1.8", + "solid-prevent-scroll": "^0.1.4" + }, + "peerDependencies": { + "solid-js": "^1.8.15" + } + }, + "node_modules/@kobalte/utils": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@kobalte/utils/-/utils-0.9.1.tgz", + "integrity": "sha512-eeU60A3kprIiBDAfv9gUJX1tXGLuZiKMajUfSQURAF2pk4ZoMYiqIzmrMBvzcxP39xnYttgTyQEVLwiTZnrV4w==", + "dependencies": { + "@solid-primitives/event-listener": "^2.2.14", + "@solid-primitives/keyed": "^1.2.0", + "@solid-primitives/map": "^0.4.7", + "@solid-primitives/media": "^2.2.4", + "@solid-primitives/props": "^3.1.8", + "@solid-primitives/refs": "^1.0.5", + "@solid-primitives/utils": "^6.2.1" + }, + "peerDependencies": { + "solid-js": "^1.8.8" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@netlify/functions": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.2.tgz", + "integrity": "sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==", + "dependencies": { + "@netlify/serverless-functions-api": "1.26.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@netlify/node-cookies": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", + "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/serverless-functions-api": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.26.1.tgz", + "integrity": "sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==", + "dependencies": { + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.1.tgz", + "integrity": "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==", + "bundleDependencies": [ + "napi-wasm" + ], + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/config": { + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.20.3.tgz", + "integrity": "sha512-Nyyv1Bj7GgYwj/l46O0nkH1GTKWbO3Ixe7KFcn021aZipkZd+z8Vlu1BwkhqtVgivcKaClaExtWU/lDHkjBzag==" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.28.0.tgz", + "integrity": "sha512-jnUsOFnz8w71l14Ww34Iswlj0AI4e/R0C5+K2W4v4GaY/sUkpH/145gHLJYlG4XV0neET4lNIptd4I8+yLyEHQ==", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.20.1", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=10.8.2" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-alias": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", + "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz", + "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz", + "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", + "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", + "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", + "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", + "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", + "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", + "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", + "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", + "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", + "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", + "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", + "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", + "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", + "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", + "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", + "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", + "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", + "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", + "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", + "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@solid-primitives/event-listener": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.4.0.tgz", + "integrity": "sha512-TSfR1PNTfojFEYGSxSMCnUhXsaYWBo4p+cm73QmWODa9YnaQAk6PB7VjzG2bOT2D817VlvuOqTj0Qdq+MZrdGg==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/keyed": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/keyed/-/keyed-1.5.0.tgz", + "integrity": "sha512-g04CXywgWG/7L4sTxQP6q1gdiirItVBq6ZO9YuLTqPFlkX3uD4IEjeL9cLHP6waahrnO8yL3OZl64pcKGYN5Qw==", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/map": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@solid-primitives/map/-/map-0.4.13.tgz", + "integrity": "sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==", + "dependencies": { + "@solid-primitives/trigger": "^1.1.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/media": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/media/-/media-2.3.0.tgz", + "integrity": "sha512-7+C3wfbWnGE/WPoNsqcp/EeOP2aNNB92RCpsWhBth8E5lZo/J+rK6jMb7umVsK0zguT8HBpeXp1pFyFbcsHStA==", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.0", + "@solid-primitives/rootless": "^1.5.0", + "@solid-primitives/static-store": "^0.1.0", + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/memo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/memo/-/memo-1.4.0.tgz", + "integrity": "sha512-Q0eSnGnhzbUPUNES2OOcEj6qF/9YZntoq04nmQEAIp6QhKdpAsH9mNFrVQtB1by41H/QndNui7Yd2wjI7PUpPA==", + "dependencies": { + "@solid-primitives/scheduled": "^1.5.0", + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/mouse": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/mouse/-/mouse-2.1.0.tgz", + "integrity": "sha512-ivQG2Lvffwzka+hqW0Z5ClJ61+KFlZ3tvsUGOKPyEshowHyA6zKh9D1WRKXyviFETgJescLw+zLM386/ZbA2Aw==", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.0", + "@solid-primitives/rootless": "^1.5.0", + "@solid-primitives/static-store": "^0.1.0", + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/props": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/props/-/props-3.2.0.tgz", + "integrity": "sha512-vEg5yERdXftJz2+A6B0IMYTrPL9SE2DPmpURV/nZyqQ+PXziF02V4b4SDr6JX3jNJxBlY6c17LqwYEw+bIfGRg==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/refs/-/refs-1.1.0.tgz", + "integrity": "sha512-QJ3bTSQOlPdHBP2m6llrT13FvVzAwZfx41lTN8lQrRwwcZoWb7kfCAjhaohPnwkAsQ6nJpLjtGfT5GOyuCA4tA==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/resize-observer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/resize-observer/-/resize-observer-2.1.0.tgz", + "integrity": "sha512-tO9MDAc2pNjpcRd5B8LWbiR1qzIgvGZ5BtTuO98N7CLwd+fnuyGwtlQtJpz5hcLcTnoawpQYLpiRGNgaYW+YzQ==", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.0", + "@solid-primitives/rootless": "^1.5.0", + "@solid-primitives/static-store": "^0.1.0", + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/rootless": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/rootless/-/rootless-1.5.0.tgz", + "integrity": "sha512-YJ+EveQeDv9DLqfDKfsPAAGy2x3vBruoD23yn+nD2dT84QjoBxWT1T0qA0TMFjek6/xuN3flqnHtQ4r++4zdjg==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/scheduled": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/scheduled/-/scheduled-1.5.0.tgz", + "integrity": "sha512-RVw24IRNh1FQ4DCMb3OahB70tXIwc5vH8nhR4nNPsXwUPQeuOkLsDI5BlxaPk0vyZgqw9lDpufgI3HnPwplgDw==", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/static-store": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/static-store/-/static-store-0.1.0.tgz", + "integrity": "sha512-6Coau0Kv/dF83UQpbBzc+gnJafOQAPe2jCbB4jmTK5UocsR5cWmFBVRm3kin+nZFVaO4WkuELw0cKANWgTVh8Q==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/trigger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/trigger/-/trigger-1.2.0.tgz", + "integrity": "sha512-sW4/3cDXSjYQampn8CIFZ11BlxgNf2li8r2fXnb3b3YWE6RdZZCl8PhvpPF38Gzl0CnryrbTPJWM7OIkseCDgQ==", + "dependencies": { + "@solid-primitives/utils": "^6.3.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/utils": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/utils/-/utils-6.3.0.tgz", + "integrity": "sha512-e7hTlJ1Ywh2+g/Qug+n4L1mpfxsikoIS4/sHE2EK9WatQt8UJqop/vE6bsLnXlU1xuhb/jo94Ah5Y27rd4wP7A==", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/websocket": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@solid-primitives/websocket/-/websocket-1.3.0.tgz", + "integrity": "sha512-+yzaneoVUEqiYuX79BDvvWCP6FJ4bkEdV9w3GezJfXM0+W4KC4aRKPDjs7MQbJZoDR5JxS3eO7/w5wujFItF3Q==", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solidjs/router": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/@solidjs/router/-/router-0.14.10.tgz", + "integrity": "sha512-5B8LVgvvXijfXyXWPVLUm7RQ05BhjIpAyRkYVDZtrR3OaSvftXobWc6qSEwk4ICLoGi/IE9CUp2LUdCBIs9AXg==", + "peerDependencies": { + "solid-js": "^1.8.6" + } + }, + "node_modules/@solidjs/start": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@solidjs/start/-/start-1.0.11.tgz", + "integrity": "sha512-ZkrHtwxnmaVGItah13BtmST6rh3PtATcj0RyXM19Shj6MK/cIpDBBsDTsgwqCbZoa/AT8/JLM5xUHFjQyBjRCA==", + "dependencies": { + "@vinxi/plugin-directives": "^0.4.3", + "@vinxi/server-components": "^0.4.3", + "@vinxi/server-functions": "^0.4.3", + "defu": "^6.1.2", + "error-stack-parser": "^2.1.4", + "html-to-image": "^1.11.11", + "radix3": "^1.1.0", + "seroval": "^1.0.2", + "seroval-plugins": "^1.0.2", + "shikiji": "^0.9.12", + "source-map-js": "^1.0.2", + "terracotta": "^1.0.4", + "tinyglobby": "^0.2.2", + "vite-plugin-solid": "^2.11.0" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@solidjs/start/node_modules/@vinxi/plugin-directives": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@vinxi/plugin-directives/-/plugin-directives-0.4.3.tgz", + "integrity": "sha512-Ey+TRIwyk8871PKhQel8NyZ9B6N0Tvhjo1QIttTyrV0d7BfUpri5GyGygmBY7fHClSE/vqaNCCZIKpTL3NJAEg==", + "dependencies": { + "@babel/parser": "^7.23.5", + "acorn": "^8.10.0", + "acorn-jsx": "^5.3.2", + "acorn-loose": "^8.3.0", + "acorn-typescript": "^1.4.3", + "astring": "^1.8.6", + "magicast": "^0.2.10", + "recast": "^0.23.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "vinxi": "^0.4.3" + } + }, + "node_modules/@solidjs/start/node_modules/@vinxi/server-components": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@vinxi/server-components/-/server-components-0.4.3.tgz", + "integrity": "sha512-KVEnQtb+ZlXIEKaUw4r4WZl/rqFeZqSyIRklY1wFiPw7GCJUxbXzISpsJ+HwDhYi9k4n8uZJyQyLHGkoiEiolg==", + "dependencies": { + "@vinxi/plugin-directives": "0.4.3", + "acorn": "^8.10.0", + "acorn-loose": "^8.3.0", + "acorn-typescript": "^1.4.3", + "astring": "^1.8.6", + "magicast": "^0.2.10", + "recast": "^0.23.4" + }, + "peerDependencies": { + "vinxi": "^0.4.3" + } + }, + "node_modules/@solidjs/start/node_modules/@vinxi/server-functions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@vinxi/server-functions/-/server-functions-0.4.3.tgz", + "integrity": "sha512-kVYrOrCMHwGvHRwpaeW2/PE7URcGtz4Rk/hIHa2xjt5PGopzzB/Y5GC8YgZjtqSRqo0ElAKsEik7UE6CXH3HXA==", + "dependencies": { + "@vinxi/plugin-directives": "0.4.3", + "acorn": "^8.10.0", + "acorn-loose": "^8.3.0", + "acorn-typescript": "^1.4.3", + "astring": "^1.8.6", + "magicast": "^0.2.10", + "recast": "^0.23.4" + }, + "peerDependencies": { + "vinxi": "^0.4.3" + } + }, + "node_modules/@solidjs/start/node_modules/crossws": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.2.4.tgz", + "integrity": "sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==", + "peer": true, + "peerDependencies": { + "uWebSockets.js": "*" + }, + "peerDependenciesMeta": { + "uWebSockets.js": { + "optional": true + } + } + }, + "node_modules/@solidjs/start/node_modules/h3": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.11.1.tgz", + "integrity": "sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==", + "peer": true, + "dependencies": { + "cookie-es": "^1.0.0", + "crossws": "^0.2.2", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.0.0", + "ohash": "^1.1.3", + "radix3": "^1.1.0", + "ufo": "^1.4.0", + "uncrypto": "^0.1.3", + "unenv": "^1.9.0" + } + }, + "node_modules/@solidjs/start/node_modules/vinxi": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vinxi/-/vinxi-0.4.3.tgz", + "integrity": "sha512-RgJz7RWftML5h/qfPsp3QKVc2FSlvV4+HevpE0yEY2j+PS/I2ULjoSsZDXaR8Ks2WYuFFDzQr8yrox7v8aqkng==", + "peer": true, + "dependencies": { + "@babel/core": "^7.22.11", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5", + "@types/micromatch": "^4.0.2", + "@vinxi/listhen": "^1.5.6", + "boxen": "^7.1.1", + "chokidar": "^3.5.3", + "citty": "^0.1.4", + "consola": "^3.2.3", + "crossws": "^0.2.4", + "dax-sh": "^0.39.1", + "defu": "^6.1.2", + "es-module-lexer": "^1.3.0", + "esbuild": "^0.20.2", + "fast-glob": "^3.3.1", + "get-port-please": "^3.1.1", + "h3": "1.11.1", + "hookable": "^5.5.3", + "http-proxy": "^1.18.1", + "micromatch": "^4.0.5", + "nitropack": "^2.9.1", + "node-fetch-native": "^1.4.0", + "path-to-regexp": "^6.2.1", + "pathe": "^1.1.1", + "radix3": "^1.1.0", + "resolve": "^1.22.6", + "serve-placeholder": "^2.0.1", + "serve-static": "^1.15.0", + "ufo": "^1.3.0", + "unctx": "^2.3.1", + "unenv": "^1.9.0", + "unstorage": "^1.10.1", + "vite": "^5.2.8", + "zod": "^3.22.2" + }, + "bin": { + "vinxi": "bin/cli.mjs" + } + }, + "node_modules/@solidjs/start/node_modules/vite": { + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/@solidjs/start/node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/directive-functions-plugin": { + "version": "1.98.5", + "resolved": "https://registry.npmjs.org/@tanstack/directive-functions-plugin/-/directive-functions-plugin-1.98.5.tgz", + "integrity": "sha512-fJ5CpWOssko6Dp0kYOL1l/Zc9XQUMyp1UZkXuEeD8ba15fDG6WkpEK7U32uZROyksY+9r8PrWvPgsEAi35hHfA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.26.2", + "@babel/core": "^7.26.7", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "@tanstack/router-utils": "^1.98.5", + "@types/babel__code-frame": "^7.0.6", + "@types/babel__core": "^7.20.5", + "@types/babel__template": "^7.4.4", + "@types/babel__traverse": "^7.20.6", + "babel-dead-code-elimination": "^1.0.8", + "dedent": "^1.5.3", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/router-utils": { + "version": "1.98.5", + "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.98.5.tgz", + "integrity": "sha512-+2G9yqHgh9Xxhw4a5gg5r5WiuXgCQne9j82/RLyKRAG1JK9iGwPc6qPUHQdV359Yf5BO21MvaDeI8iB5y6wTDg==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "ansis": "^3.5.2", + "diff": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/server-functions-plugin": { + "version": "1.98.5", + "resolved": "https://registry.npmjs.org/@tanstack/server-functions-plugin/-/server-functions-plugin-1.98.5.tgz", + "integrity": "sha512-q4MgKfgEAzKYZtbGIEUvc/l9iZ1wHV2DffT3caNlPnt9aL7ujzH0AqZcuAFrrriXXserkwbHoNcW0ZjjvpF+vA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.26.2", + "@babel/core": "^7.26.7", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "@tanstack/directive-functions-plugin": "1.98.5", + "@types/babel__code-frame": "^7.0.6", + "@types/babel__core": "^7.20.5", + "@types/babel__template": "^7.4.4", + "@types/babel__traverse": "^7.20.6", + "babel-dead-code-elimination": "^1.0.8", + "dedent": "^1.5.3", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__code-frame": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz", + "integrity": "sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/braces": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz", + "integrity": "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/micromatch": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.9.tgz", + "integrity": "sha512-7V+8ncr22h4UoYRLnLXSpTxjQrNUXtWHGeMPRJt1nULXI57G9bIcpyrHlmrQ7QK24EyyuXvYcSSWAM8GA9nqCg==", + "dependencies": { + "@types/braces": "*" + } + }, + "node_modules/@types/node": { + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", + "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "node_modules/@vercel/nft": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.10.tgz", + "integrity": "sha512-zbaF9Wp/NsZtKLE4uVmL3FyfFwlpDyuymQM1kPbeT0mVOHKDQQNjnnfslB3REg3oZprmNFJuh3pkHBk2qAaizg==", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0-rc.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vinxi/listhen": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@vinxi/listhen/-/listhen-1.5.6.tgz", + "integrity": "sha512-WSN1z931BtasZJlgPp704zJFnQFRg7yzSjkm3MzAWQYe4uXFXlFr1hc5Ac2zae5/HDOz5x1/zDM5Cb54vTCnWw==", + "dependencies": { + "@parcel/watcher": "^2.3.0", + "@parcel/watcher-wasm": "2.3.0", + "citty": "^0.1.5", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.10.0", + "http-shutdown": "^1.2.2", + "jiti": "^1.21.0", + "mlly": "^1.5.0", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.3.2", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/@vinxi/listhen/node_modules/@parcel/watcher-wasm": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.3.0.tgz", + "integrity": "sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==", + "bundleDependencies": [ + "napi-wasm" + ], + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@vinxi/listhen/node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@vinxi/listhen/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/@vinxi/plugin-directives": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@vinxi/plugin-directives/-/plugin-directives-0.5.0.tgz", + "integrity": "sha512-zpgPWoul5vKbNH5GASHtHa7InwQWElmVdOexvyO4Nfvz7CeYfAAQ5/BAV01sVJPks4dfsLnBCegAgRPRykdUeA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.5", + "acorn": "^8.10.0", + "acorn-jsx": "^5.3.2", + "acorn-loose": "^8.3.0", + "acorn-typescript": "^1.4.3", + "astring": "^1.8.6", + "magicast": "^0.2.10", + "recast": "^0.23.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "vinxi": "^0.5.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", + "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", + "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.0.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", + "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", + "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.0.4", + "pathe": "^2.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, + "node_modules/@vitest/snapshot": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", + "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.0.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", + "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", + "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.0.4", + "loupe": "^3.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/abbrev": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", + "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-loose": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.4.0.tgz", + "integrity": "sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.10.0.tgz", + "integrity": "sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==" + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" + }, + "node_modules/babel-dead-code-elimination": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.8.tgz", + "integrity": "sha512-og6HQERk0Cmm+nTT4Od2wbPtgABXFMPaHACjbKLulZIFMkYyXZLkUGuAxdgpMJBrxyt/XFpSz++lNzjbcMnPkQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.39.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.39.6.tgz", + "integrity": "sha512-HMkTn5A3NyydEgG7HKmm48YcnsQQyqeT6SKNWh2TrS6nn5rOLeHDfg5hPbrRUCFUqaT9WGn5NInQfMc3qne3Dg==", + "dependencies": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "parse5": "^7.1.2", + "validate-html-nesting": "^1.2.1" + }, + "peerDependencies": { + "@babel/core": "^7.20.12" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-plugin-transform-import-paths": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-import-paths/-/babel-plugin-transform-import-paths-1.0.3.tgz", + "integrity": "sha512-scDmJ3c0VvP4eREOVqv03XoeiN6NnEc57zbM2WycyjMVG07YrJ2qWWYjP8hALoFFJaYW9AZ1T/nUnYq5SgeZOA==", + "dev": true, + "dependencies": { + "slash": "^3.0.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.9.3.tgz", + "integrity": "sha512-jvlx5wDp8s+bEF9sGFw/84SInXOA51ttkUEroQziKMbxplXThVKt83qB6bDTa1HuLNatdU9FHpFOiQWs1tLQIg==", + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.39.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==" + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/croner": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.0.0.tgz", + "integrity": "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.3.tgz", + "integrity": "sha512-/71DJT3xJlqSnBr83uGJesmVHSzZEvgxHt/fIKxBAAngqMHmnBWQNxCphVxxJ2XL3xleu5+hJD6IQ3TglBedcw==", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dax-sh": { + "version": "0.39.2", + "resolved": "https://registry.npmjs.org/dax-sh/-/dax-sh-0.39.2.tgz", + "integrity": "sha512-gpuGEkBQM+5y6p4cWaw9+ePy5TNon+fdwFVtTI8leU3UhwhsBfPewRxMXGuQNC+M2b/MDGMlfgpqynkcd0C3FQ==", + "dependencies": { + "@deno/shim-deno": "~0.19.0", + "undici-types": "^5.26" + } + }, + "node_modules/db0": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/db0/-/db0-0.2.3.tgz", + "integrity": "sha512-PunuHESDNefmwVy1LDpY663uWwKt2ogLGoB6NOz2sflGREWqDreMwDgF8gfkXxgNXW+dqviyiJGm924H1BaGiw==", + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/type-fest": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz", + "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==" + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==" + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.4.tgz", + "integrity": "sha512-Wv+daGyispVoA31TrWAVR+aAdP7roubTPEM/8JzRnqXhLbdJH0T9eQyXVFF8fjk3WKTsctII6QcyxILYgNp2DA==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.5.1", + "ohash": "^1.1.4", + "pathe": "^2.0.2", + "tar": "^6.2.1" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/giget/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/giget/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/giget/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/giget/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/giget/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/giget/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/giget/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/giget/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gzip-size": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", + "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.14.0.tgz", + "integrity": "sha512-ao22eiONdgelqcnknw0iD645qW0s9NnrJHr5OBz4WOMdBdycfSas1EQf1wXRsm+PcB2Yoj43pjBPwqIpJQTeWg==", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.2", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "node_modules/html-to-image": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz", + "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/httpxy": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", + "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/index-to-position": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", + "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ioredis": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz", + "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", + "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/local-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", + "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.3.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.2.11.tgz", + "integrity": "sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==", + "dependencies": { + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", + "recast": "^0.23.4" + } + }, + "node_modules/merge-anything": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nitropack": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.10.4.tgz", + "integrity": "sha512-sJiG/MIQlZCVSw2cQrFG1H6mLeSqHlYfFerRjLKz69vUfdu0EL2l0WdOxlQbzJr3mMv/l4cOlCCLzVRzjzzF/g==", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.3.4", + "@netlify/functions": "^2.8.2", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-commonjs": "^28.0.1", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.3.0", + "@rollup/plugin-replace": "^6.0.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/pluginutils": "^5.1.3", + "@types/http-proxy": "^1.17.15", + "@vercel/nft": "^0.27.5", + "archiver": "^7.0.1", + "c12": "2.0.1", + "chokidar": "^3.6.0", + "citty": "^0.1.6", + "compatx": "^0.1.8", + "confbox": "^0.1.8", + "consola": "^3.2.3", + "cookie-es": "^1.2.2", + "croner": "^9.0.0", + "crossws": "^0.3.1", + "db0": "^0.2.1", + "defu": "^6.1.4", + "destr": "^2.0.3", + "dot-prop": "^9.0.0", + "esbuild": "^0.24.0", + "escape-string-regexp": "^5.0.0", + "etag": "^1.8.1", + "fs-extra": "^11.2.0", + "globby": "^14.0.2", + "gzip-size": "^7.0.0", + "h3": "^1.13.0", + "hookable": "^5.5.3", + "httpxy": "^0.1.5", + "ioredis": "^5.4.1", + "jiti": "^2.4.0", + "klona": "^2.0.6", + "knitwork": "^1.1.0", + "listhen": "^1.9.0", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "mime": "^4.0.4", + "mlly": "^1.7.2", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ohash": "^1.1.4", + "openapi-typescript": "^7.4.2", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.1", + "pretty-bytes": "^6.1.1", + "radix3": "^1.1.2", + "rollup": "^4.24.3", + "rollup-plugin-visualizer": "^5.12.0", + "scule": "^1.3.0", + "semver": "^7.6.3", + "serve-placeholder": "^2.0.2", + "serve-static": "^1.16.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unctx": "^2.3.1", + "unenv": "^1.10.0", + "unimport": "^3.13.1", + "unstorage": "^1.13.1", + "untyped": "^1.5.1", + "unwasm": "^0.3.9" + }, + "bin": { + "nitro": "dist/cli/index.mjs", + "nitropack": "dist/cli/index.mjs" + }, + "engines": { + "node": "^16.11.0 || >=17.0.0" + }, + "peerDependencies": { + "xml2js": "^0.6.2" + }, + "peerDependenciesMeta": { + "xml2js": { + "optional": true + } + } + }, + "node_modules/nitropack/node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/c12": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz", + "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==", + "dependencies": { + "chokidar": "^4.0.1", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^2.3.0", + "mlly": "^1.7.1", + "ohash": "^1.1.4", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/nitropack/node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/nitropack/node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/nitropack/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/nitropack/node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/nitropack/node_modules/mime": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", + "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/nitropack/node_modules/readdirp": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", + "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/nitropack/node_modules/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nitropack/node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.5.2.tgz", + "integrity": "sha512-AHzvnyUJYSrrphPhRWWZNcoZfArGNp3Vrc4pm/ZurO74tYNTgAPrEyBQEKy+qioqmWlPXwvMZCG2wOaHlPG0Pw==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.2", + "pkg-types": "^1.3.1", + "tinyexec": "^0.3.2", + "ufo": "^1.5.4" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/nypm/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/openapi-typescript": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.6.0.tgz", + "integrity": "sha512-p/xxKcWFR7aZDOAdnqYBQ1NdNyWdine+gHKHKvjxGXmlq8JT1G9+SkY8I5csKaktLHMbDDH6ZDeWQpydwBHa+Q==", + "dependencies": { + "@redocly/openapi-core": "^1.27.2", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.1.0", + "supports-color": "^9.4.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/type-fest": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz", + "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", + "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.32.1", + "@rollup/rollup-android-arm64": "4.32.1", + "@rollup/rollup-darwin-arm64": "4.32.1", + "@rollup/rollup-darwin-x64": "4.32.1", + "@rollup/rollup-freebsd-arm64": "4.32.1", + "@rollup/rollup-freebsd-x64": "4.32.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", + "@rollup/rollup-linux-arm-musleabihf": "4.32.1", + "@rollup/rollup-linux-arm64-gnu": "4.32.1", + "@rollup/rollup-linux-arm64-musl": "4.32.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", + "@rollup/rollup-linux-riscv64-gnu": "4.32.1", + "@rollup/rollup-linux-s390x-gnu": "4.32.1", + "@rollup/rollup-linux-x64-gnu": "4.32.1", + "@rollup/rollup-linux-x64-musl": "4.32.1", + "@rollup/rollup-win32-arm64-msvc": "4.32.1", + "@rollup/rollup-win32-ia32-msvc": "4.32.1", + "@rollup/rollup-win32-x64-msvc": "4.32.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "dependencies": { + "open": "^8.4.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/seroval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.2.0.tgz", + "integrity": "sha512-GURoU99ko2UiAgUC3qDCk59Jb3Ss4Po8VIMGkG8j5PFo2Q7y0YSMP8QG9NuL/fJCoTz9V1XZUbpNIMXPOfaGpA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.2.0.tgz", + "integrity": "sha512-hULTbfzSe81jGWLH8TAJjkEvw6JWMqOo9Uq+4V4vg+HNq53hyHldM9ZOfjdzokcFysiTp9aFdV2vJpZFqKeDjQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shikiji": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz", + "integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==", + "deprecated": "Shikiji is merged back to Shiki v1.0, please migrate over to get the latest updates", + "dependencies": { + "shikiji-core": "0.9.19" + } + }, + "node_modules/shikiji-core": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz", + "integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==", + "deprecated": "Shikiji is merged back to Shiki v1.0, please migrate over to get the latest updates" + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==" + }, + "node_modules/solid-events": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/solid-events/-/solid-events-0.0.5.tgz", + "integrity": "sha512-K3HEVig3S/3nhImqG52S9xi4BakIOj19RkFgGAhOl+V53WIJ10nr9XbqnmFQ3L9Ovm1zhxU/T8Xzuyff0LfwEw==", + "dependencies": { + "@solidjs/router": "^0.14.8", + "rxjs": "^7.8.1", + "solid-js": "^1.9.2" + } + }, + "node_modules/solid-icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/solid-icons/-/solid-icons-1.1.0.tgz", + "integrity": "sha512-IesTfr/F1ElVwH2E1110s2RPXH4pujKfSs+koT8rwuTAdleO5s26lNSpqJV7D1+QHooJj18mcOiz2PIKs0ic+A==", + "peerDependencies": { + "solid-js": "*" + } + }, + "node_modules/solid-js": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.4.tgz", + "integrity": "sha512-ipQl8FJ31bFUoBNScDQTG3BjN6+9Rg+Q+f10bUbnO6EOTTf5NGerJeHc7wyu5I4RMHEl/WwZwUmy/PTRgxxZ8g==", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "^1.1.0", + "seroval-plugins": "^1.1.0" + } + }, + "node_modules/solid-presence": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/solid-presence/-/solid-presence-0.1.8.tgz", + "integrity": "sha512-pWGtXUFWYYUZNbg5YpG5vkQJyOtzn2KXhxYaMx/4I+lylTLYkITOLevaCwMRN+liCVk0pqB6EayLWojNqBFECA==", + "dependencies": { + "@corvu/utils": "~0.4.0" + }, + "peerDependencies": { + "solid-js": "^1.8" + } + }, + "node_modules/solid-prevent-scroll": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/solid-prevent-scroll/-/solid-prevent-scroll-0.1.10.tgz", + "integrity": "sha512-KplGPX2GHiWJLZ6AXYRql4M127PdYzfwvLJJXMkO+CMb8Np4VxqDAg5S8jLdwlEuBis/ia9DKw2M8dFx5u8Mhw==", + "dependencies": { + "@corvu/utils": "~0.4.1" + }, + "peerDependencies": { + "solid-js": "^1.8" + } + }, + "node_modules/solid-refresh": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.6.3.tgz", + "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==", + "dependencies": { + "@babel/generator": "^7.23.6", + "@babel/helper-module-imports": "^7.22.15", + "@babel/types": "^7.23.6" + }, + "peerDependencies": { + "solid-js": "^1.3" + } + }, + "node_modules/solid-use": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/solid-use/-/solid-use-0.9.0.tgz", + "integrity": "sha512-8TGwB4m3qQ7qKo8Lg0pi/ZyyGVmQIjC4sPyxRCH7VPds0BzSsT734PhP3jhR6zMJxoYHM+uoivjq0XdpzXeOJg==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "solid-js": "^1.7" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" + }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, + "node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/terracotta": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/terracotta/-/terracotta-1.0.6.tgz", + "integrity": "sha512-yVrmT/Lg6a3tEbeYEJH8ksb1PYkR5FA9k5gr1TchaSNIiA2ZWs5a+koEbePXwlBP0poaV7xViZ/v50bQFcMgqw==", + "dependencies": { + "solid-use": "^0.9.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "solid-js": "^1.8" + } + }, + "node_modules/terser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "dependencies": { + "fdir": "^6.4.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "node_modules/unctx": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", + "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", + "dependencies": { + "acorn": "^8.14.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17", + "unplugin": "^2.1.0" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.28.4.tgz", + "integrity": "sha512-3OeMF5Lyowe8VW0skf5qaIE7Or3yS9LS7fvMUI0gg4YxpIBVg0L8BxCmROw2CcYhSkpR68Epz7CGc8MPj94Uww==" + }, + "node_modules/unenv": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "3.14.6", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz", + "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", + "dependencies": { + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.1", + "picomatch": "^4.0.2", + "pkg-types": "^1.3.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.1", + "unplugin": "^1.16.1" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + }, + "node_modules/unimport/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unique-names-generator": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", + "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", + "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unstorage": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz", + "integrity": "sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.11.1", + "listhen": "^1.7.2", + "lru-cache": "^10.2.0", + "mri": "^1.2.0", + "node-fetch-native": "^1.6.2", + "ofetch": "^1.3.3", + "ufo": "^1.4.0" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.5.0", + "@azure/cosmos": "^4.0.0", + "@azure/data-tables": "^13.2.2", + "@azure/identity": "^4.0.1", + "@azure/keyvault-secrets": "^4.8.0", + "@azure/storage-blob": "^12.17.0", + "@capacitor/preferences": "^5.0.7", + "@netlify/blobs": "^6.5.0 || ^7.0.0", + "@planetscale/database": "^1.16.0", + "@upstash/redis": "^1.28.4", + "@vercel/kv": "^1.0.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.3.2" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untyped": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.5.2.tgz", + "integrity": "sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/standalone": "^7.26.4", + "@babel/types": "^7.26.3", + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.1", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/unwasm": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.3.9.tgz", + "integrity": "sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==", + "dependencies": { + "knitwork": "^1.0.0", + "magic-string": "^0.30.8", + "mlly": "^1.6.1", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "unplugin": "^1.10.0" + } + }, + "node_modules/unwasm/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==" + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==" + }, + "node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/validate-html-nesting": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/validate-html-nesting/-/validate-html-nesting-1.2.2.tgz", + "integrity": "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==" + }, + "node_modules/vinxi": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/vinxi/-/vinxi-0.5.1.tgz", + "integrity": "sha512-jvl2hJ0fyWwfDVQdDDHCJiVxqU4k0A6kFAnljS0kIjrGfhdTvKEWIoj0bcJgMyrKhxNMoZZGmHZsstQgjDIL3g==", + "dependencies": { + "@babel/core": "^7.22.11", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5", + "@types/micromatch": "^4.0.2", + "@vinxi/listhen": "^1.5.6", + "boxen": "^7.1.1", + "chokidar": "^3.5.3", + "citty": "^0.1.4", + "consola": "^3.2.3", + "crossws": "^0.3.1", + "dax-sh": "^0.39.1", + "defu": "^6.1.2", + "es-module-lexer": "^1.3.0", + "esbuild": "^0.20.2", + "fast-glob": "^3.3.1", + "get-port-please": "^3.1.1", + "h3": "1.13.0", + "hookable": "^5.5.3", + "http-proxy": "^1.18.1", + "micromatch": "^4.0.5", + "nitropack": "^2.10.4", + "node-fetch-native": "^1.4.0", + "path-to-regexp": "^6.2.1", + "pathe": "^1.1.1", + "radix3": "^1.1.0", + "resolve": "^1.22.6", + "serve-placeholder": "^2.0.1", + "serve-static": "^1.15.0", + "ufo": "^1.3.0", + "unctx": "^2.3.1", + "unenv": "^1.9.0", + "unstorage": "^1.10.1", + "vite": "^6.0.0", + "zod": "^3.22.2" + }, + "bin": { + "vinxi": "bin/cli.mjs" + } + }, + "node_modules/vinxi/node_modules/h3": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.0.tgz", + "integrity": "sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, + "node_modules/vite": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", + "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", + "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.2", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, + "node_modules/vite-plugin-babel": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-babel/-/vite-plugin-babel-1.3.0.tgz", + "integrity": "sha512-C5WKX0UwvQKH8WD2GiyWUjI62UBfLbfUhiLexnIm4asLdENX5ymrRipFlBnGeVxoOaYgTL5dh5KW6YDGpWsR8A==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0", + "vite": "^2.7.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/vite-plugin-solid": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.11.0.tgz", + "integrity": "sha512-G+NiwDj4EAeUE0wt3Ur9f+Lt9oMUuLd0FIxYuqwJSqRacKQRteCwUFzNy8zMEt88xWokngQhiFjfJMhjc1fDXw==", + "dependencies": { + "@babel/core": "^7.23.3", + "@types/babel__core": "^7.20.4", + "babel-preset-solid": "^1.8.4", + "merge-anything": "^5.1.7", + "solid-refresh": "^0.6.3", + "vitefu": "^1.0.4" + }, + "peerDependencies": { + "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", + "solid-js": "^1.7.2", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "@testing-library/jest-dom": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/vitefu": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.5.tgz", + "integrity": "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==", + "workspaces": [ + "tests/deps/*", + "tests/projects/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", + "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "dev": true, + "dependencies": { + "@vitest/expect": "3.0.4", + "@vitest/mocker": "3.0.4", + "@vitest/pretty-format": "^3.0.4", + "@vitest/runner": "3.0.4", + "@vitest/snapshot": "3.0.4", + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "debug": "^4.4.0", + "expect-type": "^1.1.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.4", + "@vitest/ui": "3.0.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json index 6d5eb95..467d347 100644 --- a/package.json +++ b/package.json @@ -11,30 +11,31 @@ "author": "Dev Agrawal (http://devagr.me/)", "dependencies": { "@kobalte/core": "^0.13.7", - "@solid-primitives/memo": "^1.3.9", - "@solid-primitives/mouse": "^2.0.20", - "@solid-primitives/scheduled": "^1.4.4", - "@solid-primitives/websocket": "^1.2.2", + "@solid-primitives/memo": "^1.4.0", + "@solid-primitives/mouse": "^2.1.0", + "@solid-primitives/scheduled": "^1.5.0", + "@solid-primitives/websocket": "^1.3.0", "@solidjs/router": "^0.14.10", - "@solidjs/start": "^1.0.9", + "@solidjs/start": "^1.0.11", "immer": "^10.1.1", "rxjs": "^7.8.1", "seroval": "^1.2.0", "solid-events": "^0.0.5", "solid-icons": "^1.1.0", - "solid-js": "^1.9.2", + "solid-js": "^1.9.4", "unique-names-generator": "^4.7.1", "unstorage": "1.10.2", - "vinxi": "^0.4.3" + "vinxi": "^0.5.1" }, "engines": { "node": ">=18" }, "devDependencies": { "@babel/preset-typescript": "^7.26.0", - "@vinxi/plugin-directives": "^0.4.3", + "@tanstack/server-functions-plugin": "^1.98.1", + "@vinxi/plugin-directives": "^0.5.0", "babel-plugin-transform-import-paths": "^1.0.3", - "vite-plugin-babel": "^1.2.0", + "vite-plugin-babel": "^1.3.0", "vitest": "^3.0.4" } } \ No newline at end of file diff --git a/socket/index.ts b/socket/index.ts index bdb789e..1518061 100644 --- a/socket/index.ts +++ b/socket/index.ts @@ -1,23 +1,43 @@ import { normalize } from "vinxi/lib/path"; export { client } from "./plugin/client"; -import { server } from "./plugin/server"; import { fileURLToPath } from "url"; -import { importsPlugin } from "./imports"; +export { importsPlugin } from "./imports"; +import { createTanStackServerFnPlugin } from "@tanstack/server-functions-plugin"; -export const router = { - name: "socket-fns", - type: "http", - base: "/_ws", - handler: "./socket/plugin/server-handler.ts", - target: "server", - plugins: () => [ - server({ - runtime: normalize( +export const SolidSocketFnsPlugin = createTanStackServerFnPlugin({ + // This is the ID that will be available to look up and import + // our server function manifest and resolve its module + manifestVirtualImportId: "socket:fn-manifest", + client: { + getRuntimeCode: () => + `import { createServerReference } from "${normalize( fileURLToPath( - new URL("./socket/plugin/server-runtime.js", import.meta.url) + new URL("./socket/plugin/client-runtime.js", import.meta.url) ) - ), - }), - importsPlugin(), - ], -}; + )}"`, + replacer: (opts) => + `createServerReference(${() => {}}, '${opts.functionId}', '${ + opts.extractedFilename + }')`, + }, + ssr: { + getRuntimeCode: () => + `import { createServerReference } from '${normalize( + fileURLToPath( + new URL("../dist/runtime/server-runtime.js", import.meta.url) + ) + )}'`, + replacer: (opts) => + `createServerReference(${opts.fn}, '${opts.functionId}', '${opts.extractedFilename}')`, + }, + server: { + getRuntimeCode: () => + `import { createServerReference } from '${normalize( + fileURLToPath( + new URL("../dist/runtime/server-runtime.js", import.meta.url) + ) + )}'`, + replacer: (opts) => + `createServerReference(${opts.fn}, '${opts.functionId}', '${opts.extractedFilename}')`, + }, +}); diff --git a/socket/lib/client.tsx b/socket/lib/client.tsx index 336b3f8..c67005f 100644 --- a/socket/lib/client.tsx +++ b/socket/lib/client.tsx @@ -149,7 +149,6 @@ export function createEndpoint(name: string, rawInput?: any) { refs, signals, } = serializeReactivePayload(inputScope, rawInput); - // console.log({ serializedInput }); const scopePromise = wsRpc({ type: "create", name, input }); diff --git a/socket/lib/server.tsx b/socket/lib/server.tsx index 9d04358..5fdf0f0 100644 --- a/socket/lib/server.tsx +++ b/socket/lib/server.tsx @@ -11,7 +11,6 @@ import { useContext, } from "solid-js"; import { createStore, produce } from "solid-js/store"; -import { getManifest } from "vinxi/manifest"; import { deserializeReactivePayload, serializeReactivePayload, @@ -25,6 +24,8 @@ import { WsMessageDown, WsMessageUp, } from "./shared"; +// @ts-ignore +import serverFnManifest from "solidstart:server-fn-manifest"; const peerCtx = createContext(); export const usePeer = () => { @@ -97,11 +98,10 @@ export class LiveSolidServer { async create(id: string, name: string, input?: SerovalJSON) { try { - const [filepath, functionName] = name.split("#"); - const module = await getManifest(import.meta.env.ROUTER_NAME).chunks[ - filepath - ].import(); - const endpoint = module[functionName]; + const [functionId] = name.split("#"); + const serverFnInfo = serverFnManifest[functionId]; + const fnModule = await serverFnInfo.importer(); + const endpoint = fnModule![serverFnInfo.functionName]; if (!endpoint) throw new Error(`Endpoint ${name} not found`); @@ -216,7 +216,7 @@ function createSocketMemoConsumer( server: LiveSolidServer ) { const [signal, setSignal] = createSignal(ref.initial); - server.observers.set(ref.id, (value) => setSignal(() => fromJSON(value))); + server.observers.set(ref.id, (value) => setSignal(() => fromJSON(value))); onCleanup(() => server.observers.delete(ref.id)); return signal; } diff --git a/socket/plugin/server.js b/socket/plugin/server.js deleted file mode 100644 index 5a0f6f0..0000000 --- a/socket/plugin/server.js +++ /dev/null @@ -1,92 +0,0 @@ -import { directives, wrapExportsPlugin } from "@vinxi/plugin-directives"; -import { readFileSync } from "fs"; -import { fileURLToPath } from "url"; -import { chunkify } from "vinxi/lib/chunks"; -import { handlerModule, join, normalize } from "vinxi/lib/path"; - -import { CLIENT_REFERENCES_MANIFEST } from "./constants.js"; - -export function serverTransform({ runtime }) { - return directives({ - hash: chunkify, - runtime: runtime, - transforms: [ - wrapExportsPlugin({ - runtime: { - module: runtime, - function: "createServerReference", - }, - hash: chunkify, - apply: (code, id, options) => { - return options.ssr; - }, - pragma: "use socket", - }), - ], - onReference(type, reference) {}, - }); -} - -/** - * - * @returns {import('vinxi').Plugin} - */ -export const serverBuild = ({ client, manifest }) => { - let input; - return { - name: "server-functions:build", - enforce: "post", - apply: "build", - config(config, env) { - // @ts-ignore - const router = config.router; - // @ts-ignore - const app = config.app; - - const rscRouter = app.getRouter(client); - - const serverFunctionsManifest = JSON.parse( - readFileSync(join(rscRouter.outDir, rscRouter.base, manifest), "utf-8") - ); - - input = { - entry: handlerModule(router), - ...Object.fromEntries( - serverFunctionsManifest.server.map((key) => { - return [chunkify(key), key]; - }) - ), - }; - - return { - build: { - rollupOptions: { - output: { - chunkFileNames: "[name].mjs", - entryFileNames: "[name].mjs", - }, - treeshake: true, - }, - }, - }; - }, - - configResolved(config) { - config.build.rollupOptions.input = input; - }, - }; -}; - -/** - * - * @returns {import('vinxi').Plugin[]} - */ -export function server({ - client = "client", - manifest = CLIENT_REFERENCES_MANIFEST, - runtime = normalize( - fileURLToPath(new URL("./server-runtime.js", import.meta.url)) - ), -} = {}) { - return [serverTransform({ runtime }), serverBuild({ client, manifest })]; -} diff --git a/tmp/count b/tmp/count deleted file mode 100644 index 62f9457..0000000 --- a/tmp/count +++ /dev/null @@ -1 +0,0 @@ -6 \ No newline at end of file