From be4527b85dbf69f47c4a877634fefd3ad0081e7f Mon Sep 17 00:00:00 2001 From: joshua1 Date: Fri, 18 Jul 2025 09:43:07 +0200 Subject: [PATCH 01/12] create svelte helper module using svelte 5 runes --- packages/frameworks/svelte/README.md | 113 +++++++++ .../frameworks/svelte/examples/Counter.svelte | 219 ++++++++++++++++++ packages/frameworks/svelte/package.json | 45 ++++ packages/frameworks/svelte/src/mod.svelte.ts | 154 ++++++++++++ packages/frameworks/svelte/tsconfig.json | 26 +++ packages/frameworks/svelte/vite.config.ts | 20 ++ pnpm-lock.yaml | 122 ++++++++-- 7 files changed, 681 insertions(+), 18 deletions(-) create mode 100644 packages/frameworks/svelte/README.md create mode 100644 packages/frameworks/svelte/examples/Counter.svelte create mode 100644 packages/frameworks/svelte/package.json create mode 100644 packages/frameworks/svelte/src/mod.svelte.ts create mode 100644 packages/frameworks/svelte/tsconfig.json create mode 100644 packages/frameworks/svelte/vite.config.ts diff --git a/packages/frameworks/svelte/README.md b/packages/frameworks/svelte/README.md new file mode 100644 index 000000000..b27f79896 --- /dev/null +++ b/packages/frameworks/svelte/README.md @@ -0,0 +1,113 @@ +# RivetKit Svelte + +_Lightweight Libraries for Backends_ + +Svelte 5 integration for RivetKit with full runes support. + +[Learn More →](https://github.com/rivet-gg/rivetkit) + +[Discord](https://rivet.gg/discord) — [Documentation](https://rivetkit.org) — [Issues](https://github.com/rivet-gg/rivetkit/issues) + +## Installation + +```bash +pnpm add @rivetkit/svelte @rivetkit/core +``` + +## Quick Start + +```typescript +// lib/rivetkit.ts +import { createClient, createRivetKit } from "@rivetkit/svelte"; +import type { Registry } from "./actors/registry"; + +const client = createClient("http://localhost:8080"); +export const { useActor } = createRivetKit(client); +``` + +```svelte + + + +
+

Counter: {actor.state?.count ?? 0}

+ + {#if actor.isConnecting} +

Connecting...

+ {:else if actor.isError} +

Error: {actor.error?.message}

+ {:else if actor.isConnected} + + {/if} +
+``` + +## Features + +- **Svelte 5 Runes**: Full support for Svelte 5's new reactivity system +- **Type Safety**: Complete TypeScript support with actor type inference +- **Automatic Cleanup**: Handles connection lifecycle automatically +- **Event Handling**: Built-in event listener management +- **Reactive State**: All actor state is automatically reactive + +## API Reference + +### `createRivetKit(client, options?)` + +Creates the RivetKit functions for Svelte integration. + +#### Parameters + +- `client`: The RivetKit client created with `createClient` +- `options`: Optional configuration object + +#### Returns + +An object containing: +- `useActor`: Function for connecting to actors + +### `useActor(options)` + +Function that connects to an actor and manages the connection lifecycle with Svelte 5 runes. + +#### Parameters + +- `name`: Actor name (type-safe) +- `key`: Unique key for the actor instance +- `params`: Optional parameters for the actor +- `enabled`: Whether the actor is enabled (defaults to true) + +#### Returns + +An object with reactive properties: +- `isConnected`: Whether the actor is connected +- `isConnecting`: Whether the actor is currently connecting +- `isError`: Whether there was an error +- `error`: The error object (if any) +- `connection`: The actor connection +- `handle`: The actor handle for calling actions +- `state`: The current actor state +- `useEvent`: Function to listen for actor events + +## License + +Apache 2.0 diff --git a/packages/frameworks/svelte/examples/Counter.svelte b/packages/frameworks/svelte/examples/Counter.svelte new file mode 100644 index 000000000..95469ba55 --- /dev/null +++ b/packages/frameworks/svelte/examples/Counter.svelte @@ -0,0 +1,219 @@ + + +
+

RivetKit Svelte Counter

+ +
+ {#if counter.isConnecting} +

🔄 Connecting to actor...

+ {:else if counter.isError} +

❌ Error: {counter.error?.message}

+ {:else if counter.isConnected} +

✅ Connected to actor

+ {:else} +

⚪ Disconnected

+ {/if} +
+ +
+

Count: {counter.state?.count ?? 0}

+
+ +
+ + + + + +
+
+ + diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json new file mode 100644 index 000000000..0796f3fbd --- /dev/null +++ b/packages/frameworks/svelte/package.json @@ -0,0 +1,45 @@ +{ + "name": "@rivetkit/svelte", + "version": "0.9.0-rc.1", + "license": "Apache-2.0", + "keywords": ["rivetkit", "svelte", "framework", "actors", "stateful", "serverless"], + "sideEffects": false, + "type": "module", + "files": [ + "dist", + "package.json" + ], + "exports": { + ".": { + "import": { + "types": "./dist/mod.d.ts", + "default": "./dist/mod.js" + }, + "require": { + "types": "./dist/mod.d.cts", + "default": "./dist/mod.cjs" + } + } + }, + "scripts": { + "dev": "vite build --watch", + "build": "tsc && vite build", + "check-types": "tsc --noEmit" + }, + "peerDependencies": { + "@rivetkit/core": "*", + "svelte": "^5.0.0" + }, + "dependencies": { + "@rivetkit/framework-base": "workspace:*" + }, + "devDependencies": { + "@rivetkit/core": "workspace:*", + "svelte": "^5.0.0", + "typescript": "^5.5.2", + "vite": "^6.3.5", + "vite-plugin-dts": "^4.5.4", + "vitest": "^3.1.1" + }, + "stableVersion": "0.8.0" +} diff --git a/packages/frameworks/svelte/src/mod.svelte.ts b/packages/frameworks/svelte/src/mod.svelte.ts new file mode 100644 index 000000000..e0baf627d --- /dev/null +++ b/packages/frameworks/svelte/src/mod.svelte.ts @@ -0,0 +1,154 @@ +import { + type AnyActorRegistry, + type CreateRivetKitOptions, + type ActorOptions, + createRivetKit as createVanillaRivetKit, +} from "@rivetkit/framework-base" +import type { Client, ExtractActorsFromRegistry } from "@rivetkit/core/client" +import { onMount, onDestroy } from "svelte" + +export { createClient } from "@rivetkit/core/client" + +export function createRivetKit( + client: Client, + opts: CreateRivetKitOptions = {}, +) { + const { getOrCreateActor } = createVanillaRivetKit< + Registry, + ExtractActorsFromRegistry, + keyof ExtractActorsFromRegistry + >(client, opts) + + /** + * Svelte 5 rune-based function to connect to an actor and retrieve its state. + * Using this function with the same options will return the same actor instance. + * This simplifies passing around the actor state in your components. + * It also provides a method to listen for events emitted by the actor. + * @param opts - Options for the actor, including its name, key, and parameters. + * @returns An object containing reactive state and event listener function. + */ + function useActor< + ActorName extends keyof ExtractActorsFromRegistry, + >(opts: ActorOptions) { + const { mount, setState, state } = getOrCreateActor(opts) + + // Create reactive state using Svelte 5 runes + let actorState = $state({}) + let isConnected = $state(false) + let isConnecting = $state(false) + let isError = $state(false) + let error = $state(null) + let connection = $state(null) + let handle = $state(null) + + // Track cleanup functions + let unsubscribe: (() => void) | null = null + let storeUnsubscribe: (() => void) | null = null + + // Update options reactively + $effect.root(() => { + setState((prev: any) => { + prev.opts = { + ...opts, + enabled: opts.enabled ?? true, + } + return prev + }) + }) + + // Mount and subscribe to state changes + $effect.root(() => { + // Clean up previous subscription + if (unsubscribe) { + unsubscribe() + } + if (storeUnsubscribe) { + storeUnsubscribe() + } + + // Mount the actor + unsubscribe = mount() + + // Subscribe to state changes + storeUnsubscribe = state.subscribe((newState: any) => { + if (newState) { + actorState = newState + isConnected = newState.isConnected ?? false + isConnecting = newState.isConnecting ?? false + isError = newState.isError ?? false + error = newState.error ?? null + connection = newState.connection ?? null + handle = newState.handle ?? null + } + }) + + // Cleanup function + return () => { + if (unsubscribe) { + unsubscribe() + unsubscribe = null + } + if (storeUnsubscribe) { + storeUnsubscribe() + storeUnsubscribe = null + } + } + }) + + /** + * Function to listen for events emitted by the actor. + * This function allows you to subscribe to specific events emitted by the actor + * and execute a handler function when the event occurs. + * It automatically manages the event listener lifecycle. + * @param eventName The name of the event to listen for. + * @param handler The function to call when the event is emitted. + */ + function useEvent( + eventName: string, + // biome-ignore lint/suspicious/noExplicitAny: strong typing of handler is not supported yet + handler: (...args: any[]) => void, + ) { + let eventUnsubscribe: (() => void) | null = null + + $effect.root(() => { + // Clean up previous event listener + if (eventUnsubscribe) { + eventUnsubscribe() + eventUnsubscribe = null + } + + // Set up new event listener if connection exists + if (connection && isConnected) { + eventUnsubscribe = connection.on(eventName, handler) + } + + // Cleanup function + return () => { + if (eventUnsubscribe) { + eventUnsubscribe() + eventUnsubscribe = null + } + } + }) + } + + // Return reactive state and utilities + return { + // Reactive state properties + get isConnected() { return isConnected }, + get isConnecting() { return isConnecting }, + get isError() { return isError }, + get error() { return error }, + get connection() { return connection }, + get handle() { return handle }, + get state() { return actorState }, + + // Event listener function + useEvent, + } + } + + return { + useActor, + } +} diff --git a/packages/frameworks/svelte/tsconfig.json b/packages/frameworks/svelte/tsconfig.json new file mode 100644 index 000000000..3da02d063 --- /dev/null +++ b/packages/frameworks/svelte/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/packages/frameworks/svelte/vite.config.ts b/packages/frameworks/svelte/vite.config.ts new file mode 100644 index 000000000..3c75469c3 --- /dev/null +++ b/packages/frameworks/svelte/vite.config.ts @@ -0,0 +1,20 @@ +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { defineConfig } from "vite"; +import dts from "vite-plugin-dts"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default defineConfig({ + plugins: [dts({ include: ["src"] })], + build: { + lib: { + entry: resolve(__dirname, "src/mod.ts"), + fileName: "mod", + formats: ["cjs", "es"], + }, + rollupOptions: { + external: ["svelte", "@rivetkit/core", "@rivetkit/framework-base"], + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d6b14daf..3bd98142c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -629,6 +629,31 @@ importers: specifier: ^5.5.2 version: 5.8.3 + packages/frameworks/svelte: + dependencies: + '@rivetkit/framework-base': + specifier: workspace:* + version: link:../framework-base + devDependencies: + '@rivetkit/core': + specifier: workspace:* + version: link:../../core + svelte: + specifier: ^5.0.0 + version: 5.36.0 + typescript: + specifier: ^5.5.2 + version: 5.8.3 + vite: + specifier: ^6.3.5 + version: 6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + vite-plugin-dts: + specifier: ^4.5.4 + version: 4.5.4(@types/node@24.0.4)(rollup@4.44.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + vitest: + specifier: ^3.1.1 + version: 3.2.4(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + packages/misc/docs-middleware: dependencies: content-security-policy-builder: @@ -1929,6 +1954,11 @@ packages: '@sinclair/typebox@0.34.35': resolution: {integrity: sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==} + '@sveltejs/acorn-typescript@1.0.5': + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} + peerDependencies: + acorn: ^8.9.0 + '@tanstack/react-store@0.7.1': resolution: {integrity: sha512-qUTEKdId6QPWGiWyKAPf/gkN29scEsz6EUSJ0C3HgLMgaqTAyBsQ2sMCfGVcqb+kkhEXAdjleCgH6LAPD6f2sA==} peerDependencies: @@ -2211,6 +2241,10 @@ packages: argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} @@ -2222,6 +2256,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2336,6 +2374,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} @@ -2673,6 +2715,12 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} + estree-walker@0.6.1: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} @@ -2948,6 +2996,9 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3066,6 +3117,9 @@ packages: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -3707,6 +3761,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svelte@5.36.0: + resolution: {integrity: sha512-mQwp864P/ipJTElwU8L1LzkbzdUHfrn1su/R8mTJrH7M9mSi42hsgfHA0JU0f4OSkiznlWixan5FcUdR85G3BQ==} + engines: {node: '>=18'} + tar-fs@2.1.3: resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} @@ -4151,6 +4209,9 @@ packages: youch@3.3.4: resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod@3.22.3: resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} @@ -5213,6 +5274,10 @@ snapshots: '@sinclair/typebox@0.34.35': optional: true + '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + '@tanstack/react-store@0.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/store': 0.7.1 @@ -5409,22 +5474,6 @@ snapshots: optionalDependencies: vite: 6.3.5(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) - - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.3)(tsx@4.20.3)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@24.0.3)(tsx@4.20.3)(yaml@2.8.0) - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 @@ -5576,6 +5625,8 @@ snapshots: dependencies: sprintf-js: 1.0.3 + aria-query@5.3.2: {} + as-table@1.0.55: dependencies: printable-characters: 1.0.42 @@ -5588,6 +5639,8 @@ snapshots: assertion-error@2.0.1: {} + axobject-query@4.1.0: {} + balanced-match@1.0.2: {} base64-js@1.5.1: {} @@ -5742,6 +5795,8 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + cluster-key-slot@1.1.2: {} color-convert@2.0.1: @@ -6032,6 +6087,12 @@ snapshots: escape-string-regexp@4.0.0: {} + esm-env@1.2.2: {} + + esrap@2.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + estree-walker@0.6.1: {} estree-walker@2.0.2: {} @@ -6330,6 +6391,10 @@ snapshots: is-promise@4.0.0: {} + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + isexe@2.0.0: {} jackspeak@3.4.3: @@ -6421,6 +6486,8 @@ snapshots: pkg-types: 2.1.0 quansync: 0.2.10 + locate-character@3.0.0: {} + lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} @@ -7088,6 +7155,23 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svelte@5.36.0: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.0 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.17 + zimmerframe: 1.1.2 + tar-fs@2.1.3: dependencies: chownr: 1.1.4 @@ -7520,7 +7604,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -7603,7 +7687,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.3)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -7813,6 +7897,8 @@ snapshots: mustache: 4.2.0 stacktracey: 2.1.8 + zimmerframe@1.1.2: {} + zod@3.22.3: {} zod@3.25.67: {} From 1a7b324a72b79869dda46b2e0ed7f928f3153997 Mon Sep 17 00:00:00 2001 From: joshua1 Date: Wed, 13 Aug 2025 11:28:59 +0200 Subject: [PATCH 02/12] so far on svelte --- .gitignore | 1 + .../frameworks/svelte/examples/Counter.svelte | 63 +- packages/frameworks/svelte/package.json | 16 +- packages/frameworks/svelte/src/mod.svelte.ts | 122 +- pnpm-lock.yaml | 9143 ----------------- 5 files changed, 81 insertions(+), 9264 deletions(-) delete mode 100644 pnpm-lock.yaml diff --git a/.gitignore b/.gitignore index bfb1e5e86..6d51ebb42 100644 --- a/.gitignore +++ b/.gitignore @@ -184,3 +184,4 @@ Cargo.lock **/.wrangler **/.DS_Store .aider* +pnpm-lock.yaml diff --git a/packages/frameworks/svelte/examples/Counter.svelte b/packages/frameworks/svelte/examples/Counter.svelte index 95469ba55..cdbf4baa1 100644 --- a/packages/frameworks/svelte/examples/Counter.svelte +++ b/packages/frameworks/svelte/examples/Counter.svelte @@ -1,6 +1,7 @@

RivetKit Svelte Counter

- +
- {#if counter.isConnecting} + {#if actorState.isConnecting}

🔄 Connecting to actor...

- {:else if counter.isError} -

❌ Error: {counter.error?.message}

- {:else if counter.isConnected} + {:else if actorState.isError} +

❌ Error: {actorState.error?.message}

+ {:else if actorState.isConnected}

✅ Connected to actor

{:else}

⚪ Disconnected

@@ -80,29 +75,29 @@
-

Count: {counter.state?.count ?? 0}

+

Count: {actorState.state?.count ?? 0}

- - - - - + +
diff --git a/examples/svelte/static/robots.txt b/examples/svelte/static/robots.txt new file mode 100644 index 000000000..b6dd6670c --- /dev/null +++ b/examples/svelte/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/examples/svelte/svelte.config.js b/examples/svelte/svelte.config.js new file mode 100644 index 000000000..ee7b6dcdc --- /dev/null +++ b/examples/svelte/svelte.config.js @@ -0,0 +1,24 @@ +import adapter from "@sveltejs/adapter-auto"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. + // See https://svelte.dev/docs/kit/adapters for more information about adapters. + adapter: adapter(), + alias: { + $: "./src", + "$/*": "./src/*", + $backend: "./backend", + "$backend/*": "./backend/*", + }, + }, +}; + +export default config; diff --git a/examples/svelte/tsconfig.json b/examples/svelte/tsconfig.json new file mode 100644 index 000000000..3fa098ab6 --- /dev/null +++ b/examples/svelte/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler", + "baseUrl": "./", + "paths": { + "$/": ["./src/"], + "$backend/": ["./backend/"] + } + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/examples/svelte/turbo.json b/examples/svelte/turbo.json new file mode 100644 index 000000000..95960709b --- /dev/null +++ b/examples/svelte/turbo.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"] +} diff --git a/examples/svelte/vite.config.ts b/examples/svelte/vite.config.ts new file mode 100644 index 000000000..6b9eb5d39 --- /dev/null +++ b/examples/svelte/vite.config.ts @@ -0,0 +1,6 @@ +import { sveltekit } from "@sveltejs/kit/vite"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [sveltekit()], +}); diff --git a/examples/sync/tsconfig.json b/examples/sync/tsconfig.json index 4232a7296..670d5b1d3 100644 --- a/examples/sync/tsconfig.json +++ b/examples/sync/tsconfig.json @@ -15,6 +15,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src", "tests"], + "include": ["src", "backend"], "exclude": ["node_modules", "dist"] } diff --git a/package.json b/package.json index ffb4e7cc6..2a65deea7 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,10 @@ "@hono/node-ws": "^1.1.7", "esbuild": "^0.25.1" }, - "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808" + "packageManager": "pnpm@10.7.1+sha512.2d92c86b7928dc8284f53494fb4201f983da65f0fb4f0d40baafa5cf628fa31dae3e5968f12466f17df7e97310e30f343a648baea1b9b350685dafafffdf5808", + "pnpm": { + "onlyBuiltDependencies": [ + "esbuild" + ] + } } diff --git a/packages/frameworks/svelte/.gitignore b/packages/frameworks/svelte/.gitignore new file mode 100644 index 000000000..294b38578 --- /dev/null +++ b/packages/frameworks/svelte/.gitignore @@ -0,0 +1,24 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build +/dist + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/packages/frameworks/svelte/.npmrc b/packages/frameworks/svelte/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/packages/frameworks/svelte/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/packages/frameworks/svelte/README.md b/packages/frameworks/svelte/README.md index b27f79896..196ce870a 100644 --- a/packages/frameworks/svelte/README.md +++ b/packages/frameworks/svelte/README.md @@ -1,113 +1,58 @@ -# RivetKit Svelte +# Svelte library -_Lightweight Libraries for Backends_ +Everything you need to build a Svelte library, powered by [`sv`](https://npmjs.com/package/sv). -Svelte 5 integration for RivetKit with full runes support. +Read more about creating a library [in the docs](https://svelte.dev/docs/kit/packaging). -[Learn More →](https://github.com/rivet-gg/rivetkit) +## Creating a project -[Discord](https://rivet.gg/discord) — [Documentation](https://rivetkit.org) — [Issues](https://github.com/rivet-gg/rivetkit/issues) +If you're seeing this, you've probably already done this step. Congrats! -## Installation +```sh +# create a new project in the current directory +npx sv create -```bash -pnpm add @rivetkit/svelte @rivetkit/core +# create a new project in my-app +npx sv create my-app ``` -## Quick Start +## Developing -```typescript -// lib/rivetkit.ts -import { createClient, createRivetKit } from "@rivetkit/svelte"; -import type { Registry } from "./actors/registry"; +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: -const client = createClient("http://localhost:8080"); -export const { useActor } = createRivetKit(client); -``` +```sh +npm run dev -```svelte - - - -
-

Counter: {actor.state?.count ?? 0}

- - {#if actor.isConnecting} -

Connecting...

- {:else if actor.isError} -

Error: {actor.error?.message}

- {:else if actor.isConnected} - - {/if} -
+# or start the server and open the app in a new browser tab +npm run dev -- --open ``` -## Features - -- **Svelte 5 Runes**: Full support for Svelte 5's new reactivity system -- **Type Safety**: Complete TypeScript support with actor type inference -- **Automatic Cleanup**: Handles connection lifecycle automatically -- **Event Handling**: Built-in event listener management -- **Reactive State**: All actor state is automatically reactive - -## API Reference - -### `createRivetKit(client, options?)` - -Creates the RivetKit functions for Svelte integration. +Everything inside `src/lib` is part of your library, everything inside `src/routes` can be used as a showcase or preview app. -#### Parameters +## Building -- `client`: The RivetKit client created with `createClient` -- `options`: Optional configuration object +To build your library: -#### Returns - -An object containing: -- `useActor`: Function for connecting to actors +```sh +npm pack +``` -### `useActor(options)` +To create a production version of your showcase app: -Function that connects to an actor and manages the connection lifecycle with Svelte 5 runes. +```sh +npm run build +``` -#### Parameters +You can preview the production build with `npm run preview`. -- `name`: Actor name (type-safe) -- `key`: Unique key for the actor instance -- `params`: Optional parameters for the actor -- `enabled`: Whether the actor is enabled (defaults to true) +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. -#### Returns +## Publishing -An object with reactive properties: -- `isConnected`: Whether the actor is connected -- `isConnecting`: Whether the actor is currently connecting -- `isError`: Whether there was an error -- `error`: The error object (if any) -- `connection`: The actor connection -- `handle`: The actor handle for calling actions -- `state`: The current actor state -- `useEvent`: Function to listen for actor events +Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)). -## License +To publish your library to [npm](https://www.npmjs.com): -Apache 2.0 +```sh +npm publish +``` diff --git a/packages/frameworks/svelte/examples/Counter.svelte b/packages/frameworks/svelte/examples/Counter.svelte deleted file mode 100644 index cdbf4baa1..000000000 --- a/packages/frameworks/svelte/examples/Counter.svelte +++ /dev/null @@ -1,214 +0,0 @@ - - -
-

RivetKit Svelte Counter

- -
- {#if actorState.isConnecting} -

🔄 Connecting to actor...

- {:else if actorState.isError} -

❌ Error: {actorState.error?.message}

- {:else if actorState.isConnected} -

✅ Connected to actor

- {:else} -

⚪ Disconnected

- {/if} -
- -
-

Count: {actorState.state?.count ?? 0}

-
- -
- - - - - -
-
- - diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json index db0bc8f69..98d4791f2 100644 --- a/packages/frameworks/svelte/package.json +++ b/packages/frameworks/svelte/package.json @@ -1,53 +1,52 @@ { "name": "@rivetkit/svelte", - "version": "0.9.0-rc.1", - "license": "Apache-2.0", - "keywords": [ - "rivetkit", - "svelte", - "framework", - "actors", - "stateful", - "serverless" - ], - "sideEffects": false, - "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "vite dev", + "build": "vite build && npm run prepack", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "prepack": "svelte-kit sync && svelte-package && publint", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, "files": [ "dist", - "package.json" + "!dist/**/*.test.*", + "!dist/**/*.spec.*" + ], + "sideEffects": [ + "**/*.css" ], + "svelte": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", "exports": { ".": { - "import": { - "types": "./dist/mod.d.ts", - "default": "./dist/mod.js" - }, - "require": { - "types": "./dist/mod.d.cts", - "default": "./dist/mod.cjs" - } + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" } }, - "scripts": { - "dev": "vite build --watch", - "build": "tsc && vite build", - "check-types": "tsc --noEmit" - }, "peerDependencies": { - "@rivetkit/actor": "*", "svelte": "^5.0.0" }, - "dependencies": { - "@rivetkit/framework-base": "workspace:*", - "@tanstack/svelte-store": "^0.7.3" - }, "devDependencies": { - "@rivetkit/actor": "workspace:*", - "svelte": "^5.0.0", - "typescript": "^5.5.2", - "vite": "^6.3.5", - "vite-plugin-dts": "^4.5.4", - "vitest": "^3.1.1" + "@rivetkit/core": "workspace:^", + "@rivetkit/framework-base": "workspace:*", + "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/kit": "^2.22.0", + "@sveltejs/package": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "publint": "^0.3.2", + "svelte": "^5.38.1", + "svelte-check": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^7.0.4" }, - "stableVersion": "0.8.0" + "keywords": [ + "svelte" + ], + "dependencies": { + "esm-env": "^1.2.2" + } } diff --git a/packages/frameworks/svelte/src/app.d.ts b/packages/frameworks/svelte/src/app.d.ts new file mode 100644 index 000000000..da08e6da5 --- /dev/null +++ b/packages/frameworks/svelte/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/packages/frameworks/svelte/src/app.html b/packages/frameworks/svelte/src/app.html new file mode 100644 index 000000000..ed39a5af8 --- /dev/null +++ b/packages/frameworks/svelte/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/packages/frameworks/svelte/src/lib/index.ts b/packages/frameworks/svelte/src/lib/index.ts new file mode 100644 index 000000000..d2a27dea3 --- /dev/null +++ b/packages/frameworks/svelte/src/lib/index.ts @@ -0,0 +1 @@ +export * from "./rivet.svelte.js"; diff --git a/packages/frameworks/svelte/src/lib/rivet.svelte.ts b/packages/frameworks/svelte/src/lib/rivet.svelte.ts new file mode 100644 index 000000000..1177a879b --- /dev/null +++ b/packages/frameworks/svelte/src/lib/rivet.svelte.ts @@ -0,0 +1,167 @@ +import type * as _rivetkit_core_client from "@rivetkit/core/client"; +import type { Client, ExtractActorsFromRegistry } from "@rivetkit/core/client"; +import { + type ActorOptions, + type ActorsStateDerived, + type AnyActorRegistry, + type CreateRivetKitOptions, + createRivetKit as createVanillaRivetKit, +} from "@rivetkit/framework-base"; +import { BROWSER } from "esm-env"; + +export { createClient } from "@rivetkit/core/client"; + +export function createRivetKit( + client: Client, + opts: CreateRivetKitOptions = {}, +) { + const { getOrCreateActor } = createVanillaRivetKit< + Registry, + ExtractActorsFromRegistry, + keyof ExtractActorsFromRegistry + >(client, opts); + + /** + * Svelte 5 rune-based function to connect to an actor and retrieve its state. + * Using this function with the same options will return the same actor instance. + * This simplifies passing around the actor state in your components. + * It also provides a method to listen for events emitted by the actor. + * @param opts - Options for the actor, including its name, key, and parameters. + * @returns An object containing reactive state and event listener function. + */ + function useActor< + ActorName extends keyof ExtractActorsFromRegistry, + >( + opts: ActorOptions, + ): { + connection: _rivetkit_core_client.ActorConn< + ExtractActorsFromRegistry[ActorName] + > | null; + handle: _rivetkit_core_client.ActorHandle< + ExtractActorsFromRegistry[ActorName] + > | null; + isConnected: boolean | undefined; + isConnecting: boolean | undefined; + actorOpts: { + name: keyof ExtractActorsFromRegistry; + key: string | string[]; + params?: Record; + enabled?: boolean; + }; + isError: boolean | undefined; + error: Error | null; + hash: string; + useEvent: (eventName: string, handler: (...args: any[]) => void) => void; + } { + const { mount, setState, state } = getOrCreateActor(opts); + + let connection = $state<_rivetkit_core_client.ActorConn< + ExtractActorsFromRegistry[ActorName] + > | null>(null); + let handle = $state<_rivetkit_core_client.ActorHandle< + ExtractActorsFromRegistry[ActorName] + > | null>(null); + let isConnected = $state(false); + let isConnecting = $state(false); + let actorOpts = $state<{ + name: keyof ExtractActorsFromRegistry; + key: string | string[]; + params?: Record; + enabled?: boolean; + }>({} as any); + + let isError = $state(undefined); + + let error = $state(null); + let hash = $state(""); + + // Only run in browser to avoid SSR issues + if (BROWSER) { + state.subscribe((newData) => { + connection = newData.currentVal.connection; + handle = newData.currentVal.handle; + isConnected = newData.currentVal.isConnected; + isConnecting = newData.currentVal.isConnecting; + actorOpts = newData.currentVal.opts; + isError = newData.currentVal.isError; + error = newData.currentVal.error; + hash = newData.currentVal.hash; + }); + + // Update options reactively + $effect.root(() => { + setState((prev) => { + prev.opts = { + ...opts, + enabled: opts.enabled ?? true, + } as any; + return prev; + }); + }); + + // Mount and subscribe to state changes + $effect.root(() => { + mount(); + }); + } + + /** + * Function to listen for events emitted by the actor. + * This function allows you to subscribe to specific events emitted by the actor + * and execute a handler function when the event occurs. + * It automatically manages the event listener lifecycle. + * @param eventName The name of the event to listen for. + * @param handler The function to call when the event is emitted. + */ + function useEvent( + eventName: string, + // biome-ignore lint/suspicious/noExplicitAny: strong typing of handler is not supported yet + handler: (...args: any[]) => void, + ): void { + const connection = $derived<_rivetkit_core_client.ActorConn< + ExtractActorsFromRegistry[ActorName] + > | null>(state.state.connection); + + let connSubs: any; + $effect.root(() => { + connSubs = connection?.on(eventName, handler); + // Cleanup function + return () => { + connSubs?.(); + }; + }); + } + + return { + get connection() { + return connection; + }, + get handle() { + return handle; + }, + get isConnected() { + return isConnected; + }, + get isConnecting() { + return isConnecting; + }, + get actorOpts() { + return actorOpts; + }, + get isError() { + return isError; + }, + get error() { + return error; + }, + get hash() { + return hash; + }, + useEvent, + }; + } + + return { + useActor, + }; +} diff --git a/packages/frameworks/svelte/src/mod.svelte.ts b/packages/frameworks/svelte/src/mod.svelte.ts deleted file mode 100644 index 863ecc82b..000000000 --- a/packages/frameworks/svelte/src/mod.svelte.ts +++ /dev/null @@ -1,110 +0,0 @@ -import type { Client, ExtractActorsFromRegistry } from "@rivetkit/actor/client"; -import { - type ActorOptions, - type AnyActorRegistry, - type CreateRivetKitOptions, - createRivetKit as createVanillaRivetKit, -} from "@rivetkit/framework-base"; -import { useStore } from "@tanstack/svelte-store"; - -export { createClient } from "@rivetkit/actor/client"; - -export function createRivetKit( - client: Client, - opts: CreateRivetKitOptions = {}, -) { - const { getOrCreateActor } = createVanillaRivetKit< - Registry, - ExtractActorsFromRegistry, - keyof ExtractActorsFromRegistry - >(client, opts); - - /** - * Svelte 5 rune-based function to connect to an actor and retrieve its state. - * Using this function with the same options will return the same actor instance. - * This simplifies passing around the actor state in your components. - * It also provides a method to listen for events emitted by the actor. - * @param opts - Options for the actor, including its name, key, and parameters. - * @returns An object containing reactive state and event listener function. - */ - function useActor>( - opts: ActorOptions, - ) { - const { mount, setState, state } = getOrCreateActor(opts); - - // Create reactive state using Svelte 5 runes - let actorStoreState = useStore(state) || {}; - // Track cleanup functions - let storeUnsubscribe: any; - - // Update options reactively - $effect.root(() => { - setState((prev) => { - prev.opts = { - ...opts, - enabled: opts.enabled ?? true, - } as any; - return prev; - }); - }); - - // Mount and subscribe to state changes - $effect.root(() => { - storeUnsubscribe?.(); - mount(); - // Subscribe to state changes - storeUnsubscribe = state.subscribe((changes) => { - if (changes) { - actorStoreState = changes.currentVal as any; - } - }); - - // Cleanup function - return () => { - storeUnsubscribe?.(); - }; - }); - - /** - * Function to listen for events emitted by the actor. - * This function allows you to subscribe to specific events emitted by the actor - * and execute a handler function when the event occurs. - * It automatically manages the event listener lifecycle. - * @param eventName The name of the event to listen for. - * @param handler The function to call when the event is emitted. - */ - function useEvent( - eventName: string, - // biome-ignore lint/suspicious/noExplicitAny: strong typing of handler is not supported yet - handler: (...args: any[]) => void, - ) { - let eventUnsubscribe: (() => void) | null = null; - - $effect.root(() => { - // Clean up previous event listener - eventUnsubscribe?.(); - if (!actorStoreState.current?.connection) return; - - const connection = actorStoreState.current?.connection; - // Set up new event listener if connection exists - - eventUnsubscribe = connection.on(eventName, handler); - - // Cleanup function - return () => { - eventUnsubscribe?.(); - }; - }); - } - const actorState = $derived.by(() => actorStoreState.current); - // Return reactive state and utilities - return { - actorState, - useEvent, - }; - } - - return { - useActor, - }; -} diff --git a/packages/frameworks/svelte/src/routes/+page.svelte b/packages/frameworks/svelte/src/routes/+page.svelte new file mode 100644 index 000000000..ac6f1db25 --- /dev/null +++ b/packages/frameworks/svelte/src/routes/+page.svelte @@ -0,0 +1,4 @@ + +

Welcome to your library project

+

Create your package using @sveltejs/package and preview/showcase your work with SvelteKit

+

Visit svelte.dev/docs/kit to read the documentation

diff --git a/packages/frameworks/svelte/static/favicon.svg b/packages/frameworks/svelte/static/favicon.svg new file mode 100644 index 000000000..cc5dc66a3 --- /dev/null +++ b/packages/frameworks/svelte/static/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/packages/frameworks/svelte/svelte.config.js b/packages/frameworks/svelte/svelte.config.js new file mode 100644 index 000000000..a8bb58ace --- /dev/null +++ b/packages/frameworks/svelte/svelte.config.js @@ -0,0 +1,18 @@ +import adapter from "@sveltejs/adapter-auto"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. + // See https://svelte.dev/docs/kit/adapters for more information about adapters. + adapter: adapter(), + }, +}; + +export default config; diff --git a/packages/frameworks/svelte/tsconfig.json b/packages/frameworks/svelte/tsconfig.json index 3da02d063..8ed3dd7f2 100644 --- a/packages/frameworks/svelte/tsconfig.json +++ b/packages/frameworks/svelte/tsconfig.json @@ -1,26 +1,15 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "./.svelte-kit/tsconfig.json", "compilerOptions": { - "target": "ES2022", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ES2022", "DOM", "DOM.Iterable"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ + "sourceMap": true, "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["src"] + "module": "NodeNext", + "moduleResolution": "NodeNext" + } } diff --git a/packages/frameworks/svelte/vite.config.ts b/packages/frameworks/svelte/vite.config.ts index 3c75469c3..6b9eb5d39 100644 --- a/packages/frameworks/svelte/vite.config.ts +++ b/packages/frameworks/svelte/vite.config.ts @@ -1,20 +1,6 @@ -import { dirname, resolve } from "node:path"; -import { fileURLToPath } from "node:url"; +import { sveltekit } from "@sveltejs/kit/vite"; import { defineConfig } from "vite"; -import dts from "vite-plugin-dts"; - -const __dirname = dirname(fileURLToPath(import.meta.url)); export default defineConfig({ - plugins: [dts({ include: ["src"] })], - build: { - lib: { - entry: resolve(__dirname, "src/mod.ts"), - fileName: "mod", - formats: ["cjs", "es"], - }, - rollupOptions: { - external: ["svelte", "@rivetkit/core", "@rivetkit/framework-base"], - }, - }, + plugins: [sveltekit()], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3af8acf96..e97f26696 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -679,7 +679,7 @@ importers: version: 5.4.19(@types/node@22.15.32) vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) examples/raw-websocket-handler-proxy: dependencies: @@ -722,7 +722,7 @@ importers: version: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) examples/react: dependencies: @@ -876,6 +876,45 @@ importers: specifier: ^3.1.1 version: 3.2.4(@types/node@20.19.9)(tsx@4.20.3)(yaml@2.8.0) + examples/svelte: + devDependencies: + '@rivetkit/actor': + specifier: workspace:* + version: link:../../packages/actor + '@rivetkit/svelte': + specifier: workspace:* + version: link:../../packages/frameworks/svelte + '@sveltejs/adapter-auto': + specifier: ^6.0.0 + version: 6.1.0(@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0))) + '@sveltejs/kit': + specifier: ^2.22.0 + version: 2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte': + specifier: ^6.0.0 + version: 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + '@types/node': + specifier: ^22.13.9 + version: 22.15.32 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + svelte: + specifier: ^5.0.0 + version: 5.38.1 + svelte-check: + specifier: ^4.0.0 + version: 4.3.1(picomatch@4.0.3)(svelte@5.38.1)(typescript@5.8.3) + tsx: + specifier: ^3.12.7 + version: 3.14.0 + typescript: + specifier: ^5.0.0 + version: 5.8.3 + vite: + specifier: ^7.0.4 + version: 7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) + examples/sync: dependencies: '@rivetkit/actor': @@ -1191,7 +1230,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) packages/frameworks/framework-base: dependencies: @@ -1277,6 +1316,46 @@ importers: specifier: ^5.5.2 version: 5.8.3 + packages/frameworks/svelte: + dependencies: + esm-env: + specifier: ^1.2.2 + version: 1.2.2 + devDependencies: + '@rivetkit/core': + specifier: workspace:^ + version: link:../../core + '@rivetkit/framework-base': + specifier: workspace:* + version: link:../framework-base + '@sveltejs/adapter-auto': + specifier: ^6.0.0 + version: 6.1.0(@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))) + '@sveltejs/kit': + specifier: ^2.22.0 + version: 2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + '@sveltejs/package': + specifier: ^2.0.0 + version: 2.4.1(svelte@5.38.1)(typescript@5.8.3) + '@sveltejs/vite-plugin-svelte': + specifier: ^6.0.0 + version: 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + publint: + specifier: ^0.3.2 + version: 0.3.12 + svelte: + specifier: ^5.38.1 + version: 5.38.1 + svelte-check: + specifier: ^4.0.0 + version: 4.3.1(picomatch@4.0.3)(svelte@5.38.1)(typescript@5.8.3) + typescript: + specifier: ^5.0.0 + version: 5.8.3 + vite: + specifier: ^7.0.4 + version: 7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + packages/misc/sql-loader: devDependencies: '@types/node': @@ -2430,6 +2509,9 @@ packages: resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2450,6 +2532,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@kayahr/text-encoding@2.0.1': + resolution: {integrity: sha512-OUsJJVn85VrfNiiT6CSbHK2Jr9YS6tVsgQhly+EkcbYTT2SXeibU4nQNO2IzCRttKJt4zw4W60KtLifRRJBIng==} + '@levischuck/tiny-cbor@0.2.11': resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} @@ -2562,6 +2647,10 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@publint/pack@0.1.2': + resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} + engines: {node: '>=18'} + '@rivet-gg/actor-core@25.2.0': resolution: {integrity: sha512-4K72XcDLVAz44Ae6G6GuyzWyxQZOLN8jM/W+sVKm6fHr70X8FNCSC5+/9hFIxz/OH9E6q6Wi3V/UN/k6immUBQ==} @@ -2715,6 +2804,47 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@sveltejs/acorn-typescript@1.0.5': + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/adapter-auto@6.1.0': + resolution: {integrity: sha512-shOuLI5D2s+0zTv2ab5M5PqfknXqWbKi+0UwB9yLTRIdzsK1R93JOO8jNhIYSHdW+IYXIYnLniu+JZqXs7h9Wg==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + + '@sveltejs/kit@2.28.0': + resolution: {integrity: sha512-qrhygwHV5r6JrvCw4gwNqqxYGDi5YbajocxfKgFXmSFpFo8wQobUvsM0OfakN4h+0LEmXtqHRrC6BcyAkOwyoQ==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + + '@sveltejs/package@2.4.1': + resolution: {integrity: sha512-dFj78EMy8Vgqsj5Tv2rPuPmtpyqYiJDL1QGhWjK4xW3g77ffF26ovoNBHNg/NZG9ZdTUUDb4rov6We3gW1pamg==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + + '@sveltejs/vite-plugin-svelte-inspector@5.0.0': + resolution: {integrity: sha512-iwQ8Z4ET6ZFSt/gC+tVfcsSBHwsqc6RumSaiLUkAurW3BCpJam65cmHw0oOlDMTO0u+PZi9hilBRYN+LZNHTUQ==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@sveltejs/vite-plugin-svelte@6.1.2': + resolution: {integrity: sha512-7v+7OkUYelC2dhhYDAgX1qO2LcGscZ18Hi5kKzJQq7tQeXpH215dd0+J/HnX2zM5B3QKcIrTVqCGkZXAy5awYw==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -2772,6 +2902,9 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2999,6 +3132,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -3013,6 +3150,18 @@ packages: argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} @@ -3024,6 +3173,18 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3091,6 +3252,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -3109,6 +3274,10 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3135,14 +3304,24 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -3198,6 +3377,10 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -3206,6 +3389,10 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3220,6 +3407,18 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -3240,6 +3439,9 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + dedent@1.6.0: resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} peerDependencies: @@ -3256,6 +3458,18 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -3275,6 +3489,9 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} @@ -3418,6 +3635,13 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -3433,6 +3657,14 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -3465,6 +3697,16 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -3566,6 +3808,10 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -3600,6 +3846,13 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + fx@36.0.4: resolution: {integrity: sha512-W8ihjxBTMSYpSMskyrG4U1qNgtvVPkZyz2TwOe510vAhAYi3XKOB/wd7BTKLOeMCH0HgrnlzaqWa5KD5upDr0A==} hasBin: true @@ -3623,6 +3876,10 @@ packages: get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} @@ -3644,6 +3901,10 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@13.2.2: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3655,14 +3916,33 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -3675,6 +3955,9 @@ packages: resolution: {integrity: sha512-jYZ6ZtfWjzBdh8H/0CIFfCBHaFL75k+KMzaM177hrWWm2TWL39YMYaJgB74uK/niRc866NMlH9B8uCvIo284WQ==} engines: {node: '>=16.9.0'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -3700,6 +3983,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -3711,29 +3998,80 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-network-error@1.1.0: resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} engines: {node: '>=16'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3741,6 +4079,48 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3771,6 +4151,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -3794,6 +4177,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} @@ -3867,6 +4254,10 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3875,6 +4266,9 @@ packages: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -3894,6 +4288,9 @@ packages: loupe@3.1.4: resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3918,6 +4315,10 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} @@ -3972,6 +4373,10 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -4035,6 +4440,12 @@ packages: sass: optional: true + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-abi@3.75.0: resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} engines: {node: '>=10'} @@ -4055,6 +4466,14 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4063,6 +4482,14 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -4083,6 +4510,10 @@ packages: openapi3-ts@4.5.0: resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-retry@6.2.1: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} @@ -4090,13 +4521,27 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4115,6 +4560,10 @@ packages: resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} engines: {node: '>=16'} + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4140,6 +4589,19 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -4150,6 +4612,10 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} @@ -4197,6 +4663,11 @@ packages: engines: {node: '>= 0.10'} hasBin: true + publint@0.3.12: + resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} + engines: {node: '>=18'} + hasBin: true + pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -4260,6 +4731,10 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -4276,6 +4751,14 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4322,9 +4805,25 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4337,6 +4836,10 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4362,6 +4865,18 @@ packages: set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -4373,10 +4888,18 @@ packages: resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -4442,10 +4965,23 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions spawn-command@0.0.2: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} @@ -4472,6 +5008,10 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + stoppable@1.1.0: resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} engines: {node: '>=4', npm: '>=6'} @@ -4491,6 +5031,22 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -4502,6 +5058,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -4513,8 +5073,8 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strtok3@10.3.2: - resolution: {integrity: sha512-or9w505RhhY66+uoe5YOC5QO/bRuATaoim3XTh+pGKx5VMWi/HDhMKuCjDLsLJouU2zg9Hf1nLPcNW7IHv80kQ==} + strtok3@10.3.4: + resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} styled-jsx@5.1.6: @@ -4535,6 +5095,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4547,8 +5111,26 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@2.3.4: - resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} + svelte-check@4.3.1: + resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte2tsx@0.7.42: + resolution: {integrity: sha512-PSNrKS16aVdAajoFjpF5M0t6TA7ha7GcKbBajD9RG3M+vooAuvLnWAGUSC6eJL4zEOVbOWKtcS2BuY4rxPljoA==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.38.1: + resolution: {integrity: sha512-fO6CLDfJYWHgfo6lQwkQU2vhCiHc2MBl6s3vEhK+sSZru17YL4R5s1v14ndRpqKAIkq8nCz6MTk1yZbESZWeyQ==} + engines: {node: '>=18'} + + swr@2.3.4: + resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} peerDependencies: react: ^19.0.0 @@ -4603,8 +5185,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@6.0.3: - resolution: {integrity: sha512-IKJ6EzuPPWtKtEIEPpIdXv9j5j2LGJEYk0CKY2efgKoYKLBiZdh6iQkLVBow/CB3phyWAWCyk+bZeaimJn6uRQ==} + token-types@6.1.0: + resolution: {integrity: sha512-IwovPojr3nD6KBpwSdWq7zL4D9xDLMSqZm/mFweaFFXiS7mtD1qea2WKcth6lyErwZZjsavZk4AnwPJzT9/wVA==} engines: {node: '>=14.16'} totalist@3.0.1: @@ -4693,6 +5275,22 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -4706,10 +5304,14 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + uint8array-extras@1.4.1: + resolution: {integrity: sha512-+NWHrac9dvilNgme+gP4YrBSumsaMZP0fNBtXXFIf33RLLKEcBUKaQZ7ULUbS0sBfcjxIZ4V96OTRkCbM7hxpw==} engines: {node: '>=18'} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -4754,6 +5356,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -4843,6 +5448,54 @@ packages: yaml: optional: true + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + 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 + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + vitest@3.2.4: resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -4888,6 +5541,26 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4983,6 +5656,9 @@ packages: youch@3.3.4: resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod-to-json-schema@3.24.6: resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} peerDependencies: @@ -5783,6 +6459,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -5801,6 +6482,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 + '@kayahr/text-encoding@2.0.1': {} + '@levischuck/tiny-cbor@0.2.11': {} '@microsoft/api-extractor-model@7.30.6(@types/node@22.15.32)': @@ -5948,6 +6631,8 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@publint/pack@0.1.2': {} + '@rivet-gg/actor-core@25.2.0': dependencies: zod: 3.25.76 @@ -6107,6 +6792,111 @@ snapshots: '@standard-schema/spec@1.0.0': {} + '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))': + dependencies: + '@sveltejs/kit': 2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + + '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))': + dependencies: + '@sveltejs/kit': 2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + + '@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0))': + dependencies: + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.1.1 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.17 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.1 + sirv: 3.0.1 + svelte: 5.38.1 + vite: 7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) + + '@sveltejs/kit@2.28.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))': + dependencies: + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.1.1 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.17 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.1 + sirv: 3.0.1 + svelte: 5.38.1 + vite: 7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + + '@sveltejs/package@2.4.1(svelte@5.38.1)(typescript@5.8.3)': + dependencies: + chokidar: 4.0.3 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.7.2 + svelte: 5.38.1 + svelte2tsx: 0.7.42(svelte@5.38.1)(typescript@5.8.3) + transitivePeerDependencies: + - typescript + + '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + debug: 4.4.1 + svelte: 5.38.1 + vite: 7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + debug: 4.4.1 + svelte: 5.38.1 + vite: 7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + debug: 4.4.1 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.17 + svelte: 5.38.1 + vite: 7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) + vitefu: 1.1.1(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)))(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + debug: 4.4.1 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.17 + svelte: 5.38.1 + vite: 7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + vitefu: 1.1.1(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + transitivePeerDependencies: + - supports-color + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -6124,7 +6914,7 @@ snapshots: dependencies: debug: 4.4.1 fflate: 0.8.2 - token-types: 6.0.3 + token-types: 6.1.0 transitivePeerDependencies: - supports-color @@ -6179,6 +6969,8 @@ snapshots: dependencies: '@types/node': 22.15.32 + '@types/cookie@0.6.0': {} + '@types/deep-eql@4.0.2': {} '@types/diff-match-patch@1.0.36': {} @@ -6333,22 +7125,6 @@ snapshots: optionalDependencies: vite: 6.3.5(@types/node@20.19.9)(tsx@4.20.3)(yaml@2.8.0) - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) - - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 @@ -6500,6 +7276,10 @@ snapshots: ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -6512,6 +7292,23 @@ snapshots: dependencies: sprintf-js: 1.0.3 + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + as-table@1.0.55: dependencies: printable-characters: 1.0.42 @@ -6524,6 +7321,14 @@ snapshots: assertion-error@2.0.1: {} + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axobject-query@4.1.0: {} + balanced-match@1.0.2: {} base64-js@1.5.1: {} @@ -6622,6 +7427,13 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -6653,6 +7465,12 @@ snapshots: loupe: 3.1.4 pathval: 2.0.0 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6676,12 +7494,20 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + cluster-key-slot@1.1.2: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} color-string@1.9.1: @@ -6738,10 +7564,20 @@ snapshots: cookie-signature@1.2.2: {} + cookie@0.6.0: {} + cookie@0.7.2: {} cookie@1.0.2: {} + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -6754,6 +7590,24 @@ snapshots: data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + date-fns@2.30.0: dependencies: '@babel/runtime': 7.27.6 @@ -6768,12 +7622,28 @@ snapshots: dependencies: mimic-response: 3.1.0 + dedent-js@1.0.1: {} + dedent@1.6.0: {} deep-eql@5.0.2: {} deep-extend@0.6.0: {} + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + defu@6.1.4: {} denque@2.1.0: {} @@ -6784,6 +7654,8 @@ snapshots: detect-libc@2.0.4: {} + devalue@5.1.1: {} + diff-match-patch@1.0.5: {} dir-glob@3.0.1: @@ -6844,6 +7716,67 @@ snapshots: entities@4.5.0: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -6854,6 +7787,19 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + esbuild-register@3.6.0(esbuild@0.25.5): dependencies: debug: 4.4.1 @@ -6972,6 +7918,14 @@ snapshots: escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} + + esm-env@1.2.2: {} + + esrap@2.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -7062,6 +8016,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.6(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -7072,9 +8030,9 @@ snapshots: file-type@21.0.0: dependencies: '@tokenizer/inflate': 0.2.7 - strtok3: 10.3.2 - token-types: 6.0.3 - uint8array-extras: 1.4.0 + strtok3: 10.3.4 + token-types: 6.1.0 + uint8array-extras: 1.4.1 transitivePeerDependencies: - supports-color @@ -7103,6 +8061,10 @@ snapshots: flatted@3.3.3: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -7131,6 +8093,17 @@ snapshots: function-bind@1.1.2: {} + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + fx@36.0.4: {} gensync@1.0.0-beta.2: {} @@ -7160,6 +8133,12 @@ snapshots: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -7183,6 +8162,11 @@ snapshots: globals@11.12.0: {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + globby@13.2.2: dependencies: dir-glob: 3.0.1 @@ -7195,10 +8179,26 @@ snapshots: graceful-fs@4.2.11: {} + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -7207,6 +8207,8 @@ snapshots: hono@4.8.3: {} + hosted-git-info@2.8.9: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -7229,6 +8231,12 @@ snapshots: ini@1.3.8: {} + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -7249,26 +8257,129 @@ snapshots: ipaddr.js@1.9.1: {} - is-arrayish@0.3.2: {} - - is-core-module@2.16.1: + is-array-buffer@3.0.5: dependencies: - hasown: 2.0.2 + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - is-extglob@2.1.1: {} + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + is-network-error@1.1.0: {} + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-promise@4.0.0: {} + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + isexe@2.0.0: {} isomorphic.js@0.2.5: {} @@ -7291,6 +8402,8 @@ snapshots: jsesc@3.1.0: {} + json-parse-better-errors@1.0.2: {} + json-schema-traverse@1.0.0: {} json-schema@0.4.0: {} @@ -7311,6 +8424,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + kolorist@1.8.0: {} kysely@0.28.2: {} @@ -7366,6 +8481,13 @@ snapshots: lines-and-columns@1.2.4: {} + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + load-tsconfig@0.2.5: {} local-pkg@1.1.1: @@ -7374,6 +8496,8 @@ snapshots: pkg-types: 2.1.0 quansync: 0.2.10 + locate-character@3.0.0: {} + lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} @@ -7388,6 +8512,10 @@ snapshots: loupe@3.1.4: {} + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -7408,6 +8536,8 @@ snapshots: media-typer@1.1.0: {} + memorystream@0.3.1: {} + merge-descriptors@2.0.0: {} merge2@1.4.1: {} @@ -7466,6 +8596,8 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + mri@1.2.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} @@ -7516,6 +8648,13 @@ snapshots: - '@babel/core' - babel-plugin-macros + nice-try@1.0.5: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + node-abi@3.75.0: dependencies: semver: 7.7.2 @@ -7535,10 +8674,40 @@ snapshots: node-releases@2.0.19: {} + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + npm-run-all@4.1.5: + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.6 + memorystream: 0.3.1 + minimatch: 3.0.8 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.3 + string.prototype.padend: 3.1.6 + object-assign@4.1.1: {} object-inspect@1.13.4: {} + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + ohash@2.0.11: {} on-change@5.0.1: {} @@ -7558,6 +8727,12 @@ snapshots: dependencies: yaml: 2.8.0 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 @@ -7566,10 +8741,24 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.3.0: {} + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + parseurl@1.3.3: {} + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + path-browserify@1.0.1: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -7583,6 +8772,10 @@ snapshots: path-to-regexp@8.2.0: {} + path-type@3.0.0: + dependencies: + pify: 3.0.0 + path-type@4.0.0: {} pathe@2.0.3: {} @@ -7599,6 +8792,12 @@ snapshots: picomatch@4.0.2: {} + picomatch@4.0.3: {} + + pidtree@0.3.1: {} + + pify@3.0.0: {} + pirates@4.0.7: {} pkg-types@1.3.1: @@ -7613,6 +8812,8 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 + possible-typed-array-names@1.1.0: {} + postcss-load-config@6.0.1(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 @@ -7664,6 +8865,13 @@ snapshots: dependencies: event-stream: 3.3.4 + publint@0.3.12: + dependencies: + '@publint/pack': 0.1.2 + package-manager-detector: 1.3.0 + picocolors: 1.1.1 + sade: 1.8.1 + pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -7726,6 +8934,12 @@ snapshots: react@19.1.0: {} + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -7740,6 +8954,26 @@ snapshots: dependencies: redis-errors: 1.2.0 + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7804,8 +9038,31 @@ snapshots: dependencies: tslib: 2.8.1 + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} scheduler@0.23.2: @@ -7816,6 +9073,8 @@ snapshots: secure-json-parse@2.7.0: {} + semver@5.7.2: {} + semver@6.3.1: {} semver@7.5.4: @@ -7851,6 +9110,28 @@ snapshots: set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} sharp@0.33.5: @@ -7909,10 +9190,16 @@ snapshots: '@img/sharp-win32-x64': 0.34.3 optional: true + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 + shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} shell-quote@1.8.3: {} @@ -7986,6 +9273,20 @@ snapshots: spawn-command@0.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + split@0.3.3: dependencies: through: 2.3.8 @@ -8007,6 +9308,11 @@ snapshots: std-env@3.9.0: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + stoppable@1.1.0: {} stream-combiner@0.0.4: @@ -8027,6 +9333,36 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string.prototype.padend@3.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -8039,6 +9375,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} @@ -8047,7 +9385,7 @@ snapshots: dependencies: js-tokens: 9.0.1 - strtok3@10.3.2: + strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 @@ -8066,6 +9404,10 @@ snapshots: pirates: 4.0.7 ts-interface-checker: 0.1.13 + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -8076,6 +9418,42 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.1)(typescript@5.8.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + chokidar: 4.0.3 + fdir: 6.4.6(picomatch@4.0.3) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.38.1 + typescript: 5.8.3 + transitivePeerDependencies: + - picomatch + + svelte2tsx@0.7.42(svelte@5.38.1)(typescript@5.8.3): + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.38.1 + typescript: 5.8.3 + + svelte@5.38.1: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.4 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.0 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.17 + zimmerframe: 1.1.2 + swr@2.3.4(react@18.3.1): dependencies: dequal: 2.0.3 @@ -8130,8 +9508,9 @@ snapshots: toidentifier@1.0.1: {} - token-types@6.0.3: + token-types@6.1.0: dependencies: + '@kayahr/text-encoding': 2.0.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -8257,13 +9636,53 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.1 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typescript@5.8.2: {} typescript@5.8.3: {} ufo@1.6.1: {} - uint8array-extras@1.4.0: {} + uint8array-extras@1.4.1: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 uncrypto@0.1.3: {} @@ -8309,6 +9728,11 @@ snapshots: util-deprecate@1.0.2: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + vary@1.1.2: {} vite-node@3.2.4(@types/node@20.19.9)(tsx@4.20.3)(yaml@2.8.0): @@ -8488,6 +9912,42 @@ snapshots: tsx: 4.20.3 yaml: 2.8.0 + vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0): + dependencies: + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.44.0 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 22.15.32 + fsevents: 2.3.3 + tsx: 3.14.0 + yaml: 2.8.0 + + vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.44.0 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.0.4 + fsevents: 2.3.3 + tsx: 4.20.3 + yaml: 2.8.0 + + vitefu@1.1.1(vite@7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)): + optionalDependencies: + vite: 7.1.2(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0) + + vitefu@1.1.1(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)): + optionalDependencies: + vite: 7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0) + vitest@3.2.4(@types/node@20.19.9)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 @@ -8575,7 +10035,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@3.14.0)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8612,47 +10072,6 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 - pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.15.32 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.2.4(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 @@ -8708,6 +10127,51 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -8794,6 +10258,8 @@ snapshots: mustache: 4.2.0 stacktracey: 2.1.8 + zimmerframe@1.1.2: {} + zod-to-json-schema@3.24.6(zod@3.25.76): dependencies: zod: 3.25.76 From c822e9de78e4ec2257f92eadc7dc7a4333f9fd8e Mon Sep 17 00:00:00 2001 From: joshua1 Date: Fri, 15 Aug 2025 21:38:11 +0200 Subject: [PATCH 05/12] cleanup useEvent in effect hook --- examples/svelte/package.json | 2 +- examples/svelte/src/routes/+page.svelte | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/svelte/package.json b/examples/svelte/package.json index a6b22f259..b0595b124 100644 --- a/examples/svelte/package.json +++ b/examples/svelte/package.json @@ -1,5 +1,5 @@ { - "name": "frontend", + "name": "svelte-rivetkit-example", "private": true, "version": "0.0.1", "type": "module", diff --git a/examples/svelte/src/routes/+page.svelte b/examples/svelte/src/routes/+page.svelte index 9432a1de8..31fdeeb0f 100644 --- a/examples/svelte/src/routes/+page.svelte +++ b/examples/svelte/src/routes/+page.svelte @@ -1,16 +1,19 @@ + +
+

Counter: {count}

+ + +
``` -You can preview the production build with `npm run preview`. +## Core Concepts -> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. +### useActor Hook -## Publishing +The `useActor` function is the main way to connect to RivetKit actors from your Svelte components. It returns a reactive object with the following properties: -Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)). +- **`connection`** - The actor connection object for calling actions +- **`handle`** - The actor handle for advanced operations +- **`isConnected`** - Boolean indicating if the actor is connected +- **`isConnecting`** - Boolean indicating if the actor is currently connecting +- **`isError`** - Boolean indicating if there's an error +- **`error`** - The error object if one exists +- **`useEvent`** - Function to listen for actor events -To publish your library to [npm](https://www.npmjs.com): +### Actor Options -```sh -npm publish +When calling `useActor`, you need to provide: + +```typescript +const actor = useActor({ + name: 'counter', // The actor name from your registry + key: ['test-counter'], // Unique key for this actor instance + params: { /* ... */ }, // Optional parameters + enabled: true // Optional, defaults to true +}); ``` + +## Event Handling + +### Using useEvent + +The `useEvent` function allows you to listen for events broadcast by actors: + +```svelte + +``` + +### Alternative Event Listening + +You can also listen to events directly on the connection: + +```svelte + +``` + +## Advanced Usage + +### Conditional Actor Connections + +You can conditionally enable/disable actor connections: + +```svelte + +``` + +### Multiple Actor Instances + +You can connect to multiple instances of the same actor: + +```svelte + +``` + +### Error Handling + +Handle connection errors gracefully: + +```svelte + + +{#if actor?.isError} +
+ Connection failed: {actor.error?.message} +
+{:else if actor?.isConnecting} +
Connecting...
+{:else if actor?.isConnected} +
Connected!
+{/if} +``` + +## API Reference + +### createClient(url: string) + +Creates a client connection to your RivetKit server. + +```typescript +import { createClient } from "@rivetkit/svelte"; + +const client = createClient("http://localhost:8080"); +``` + +### createRivetKit(client: Client) + +Creates the RivetKit integration with your client. + +```typescript +import { createRivetKit } from "@rivetkit/svelte"; + +const { useActor } = createRivetKit(client); +``` + +### useActor(options: ActorOptions) + +Connects to a RivetKit actor and returns reactive state. + +**Parameters:** +- `name: string` - The actor name from your registry +- `key: string | string[]` - Unique identifier for the actor instance +- `params?: Record` - Optional parameters to pass to the actor +- `enabled?: boolean` - Whether the connection is enabled (default: true) + +**Returns:** +- `connection` - Actor connection for calling actions +- `handle` - Actor handle for advanced operations +- `isConnected` - Connection status +- `isConnecting` - Loading state +- `isError` - Error state +- `error` - Error object +- `useEvent` - Function to listen for events + +## TypeScript Support + +RivetKit Svelte provides full TypeScript support. Make sure to type your registry: + +```typescript +// backend/index.ts +export type Registry = typeof registry; + +// frontend/actor-client.ts +import type { Registry } from "../../backend"; +const client = createClient("http://localhost:8080"); +``` + +## SvelteKit Integration + +RivetKit Svelte works seamlessly with SvelteKit. The library automatically detects browser environment and handles SSR appropriately. + +```svelte + + +``` + +## Examples + +Check out the `examples` folder in this repository for a complete working example with: +- Backend RivetKit server setup +- Frontend Svelte integration +- Real-time counter with events +- TypeScript configuration + +## Contributing + +Contributions are welcome! Please read our contributing guidelines and submit pull requests to our repository. + +## License + +MIT License - see LICENSE file for details. From 9777f5f04c0f83f7f0f7cdf9dd1d350951d2909c Mon Sep 17 00:00:00 2001 From: joshua1 Date: Wed, 27 Aug 2025 10:22:44 +0200 Subject: [PATCH 09/12] send dist through for now --- .gitignore | 7 +- packages/actor/dist/client.cjs | 3 + packages/actor/dist/client.cjs.map | 1 + packages/actor/dist/client.d.cts | 5 + packages/actor/dist/client.d.ts | 5 + packages/actor/dist/client.js | 3 + packages/actor/dist/client.js.map | 1 + packages/actor/dist/errors.cjs | 3 + packages/actor/dist/errors.cjs.map | 1 + packages/actor/dist/errors.d.cts | 1 + packages/actor/dist/errors.d.ts | 1 + packages/actor/dist/errors.js | 3 + packages/actor/dist/errors.js.map | 1 + packages/actor/dist/log.cjs | 3 + packages/actor/dist/log.cjs.map | 1 + packages/actor/dist/log.d.cts | 1 + packages/actor/dist/log.d.ts | 1 + packages/actor/dist/log.js | 3 + packages/actor/dist/log.js.map | 1 + packages/actor/dist/mod.cjs | 3 + packages/actor/dist/mod.cjs.map | 1 + packages/actor/dist/mod.d.cts | 1 + packages/actor/dist/mod.d.ts | 1 + packages/actor/dist/mod.js | 3 + packages/actor/dist/mod.js.map | 1 + packages/actor/dist/test.cjs | 3 + packages/actor/dist/test.cjs.map | 1 + packages/actor/dist/test.d.cts | 1 + packages/actor/dist/test.d.ts | 1 + packages/actor/dist/test.js | 3 + packages/actor/dist/test.js.map | 1 + packages/frameworks/svelte/package.json | 53 ++++++ packages/frameworks/svelte/src/index.ts | 1 + .../frameworks/svelte/src/rivet.svelte.ts | 154 ++++++++++++++++++ packages/frameworks/svelte/svelte.config.js | 10 ++ packages/frameworks/svelte/tsconfig.json | 33 ++++ packages/frameworks/svelte/vite.config.ts | 44 +++++ 37 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 packages/actor/dist/client.cjs create mode 100644 packages/actor/dist/client.cjs.map create mode 100644 packages/actor/dist/client.d.cts create mode 100644 packages/actor/dist/client.d.ts create mode 100644 packages/actor/dist/client.js create mode 100644 packages/actor/dist/client.js.map create mode 100644 packages/actor/dist/errors.cjs create mode 100644 packages/actor/dist/errors.cjs.map create mode 100644 packages/actor/dist/errors.d.cts create mode 100644 packages/actor/dist/errors.d.ts create mode 100644 packages/actor/dist/errors.js create mode 100644 packages/actor/dist/errors.js.map create mode 100644 packages/actor/dist/log.cjs create mode 100644 packages/actor/dist/log.cjs.map create mode 100644 packages/actor/dist/log.d.cts create mode 100644 packages/actor/dist/log.d.ts create mode 100644 packages/actor/dist/log.js create mode 100644 packages/actor/dist/log.js.map create mode 100644 packages/actor/dist/mod.cjs create mode 100644 packages/actor/dist/mod.cjs.map create mode 100644 packages/actor/dist/mod.d.cts create mode 100644 packages/actor/dist/mod.d.ts create mode 100644 packages/actor/dist/mod.js create mode 100644 packages/actor/dist/mod.js.map create mode 100644 packages/actor/dist/test.cjs create mode 100644 packages/actor/dist/test.cjs.map create mode 100644 packages/actor/dist/test.d.cts create mode 100644 packages/actor/dist/test.d.ts create mode 100644 packages/actor/dist/test.js create mode 100644 packages/actor/dist/test.js.map create mode 100644 packages/frameworks/svelte/package.json create mode 100644 packages/frameworks/svelte/src/index.ts create mode 100644 packages/frameworks/svelte/src/rivet.svelte.ts create mode 100644 packages/frameworks/svelte/svelte.config.js create mode 100644 packages/frameworks/svelte/tsconfig.json create mode 100644 packages/frameworks/svelte/vite.config.ts diff --git a/.gitignore b/.gitignore index bfb1e5e86..c66086e55 100644 --- a/.gitignore +++ b/.gitignore @@ -93,7 +93,12 @@ out # Nuxt.js build / generate output .nuxt -dist + +# Build output - ignore dist folders except in packages/actor +dist/ +packages/*/dist/ +examples/*/dist/ +!packages/actor/dist/ # Gatsby files .cache/ diff --git a/packages/actor/dist/client.cjs b/packages/actor/dist/client.cjs new file mode 100644 index 000000000..b97d204bc --- /dev/null +++ b/packages/actor/dist/client.cjs @@ -0,0 +1,3 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/client.ts +var _client = require('@rivetkit/core/client'); _createStarExport(_client); +//# sourceMappingURL=client.cjs.map \ No newline at end of file diff --git a/packages/actor/dist/client.cjs.map b/packages/actor/dist/client.cjs.map new file mode 100644 index 000000000..e3db939c2 --- /dev/null +++ b/packages/actor/dist/client.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/client.cjs","../src/client.ts"],"names":[],"mappings":"AAAA;ACAA,2EAAc","file":"/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/client.cjs","sourcesContent":[null,"export * from \"@rivetkit/core/client\";\n"]} \ No newline at end of file diff --git a/packages/actor/dist/client.d.cts b/packages/actor/dist/client.d.cts new file mode 100644 index 000000000..d1b593b7b --- /dev/null +++ b/packages/actor/dist/client.d.cts @@ -0,0 +1,5 @@ +export * from '@rivetkit/core/client'; +import '@rivetkit/core/errors'; +import '@rivetkit/core/log'; +import '@rivetkit/core'; +import '@rivetkit/core/test'; diff --git a/packages/actor/dist/client.d.ts b/packages/actor/dist/client.d.ts new file mode 100644 index 000000000..7657d1596 --- /dev/null +++ b/packages/actor/dist/client.d.ts @@ -0,0 +1,5 @@ +export * from "@rivetkit/core/client"; +import "@rivetkit/core/errors"; +import "@rivetkit/core/log"; +import "@rivetkit/core"; +import "@rivetkit/core/test"; diff --git a/packages/actor/dist/client.js b/packages/actor/dist/client.js new file mode 100644 index 000000000..95f65ea7c --- /dev/null +++ b/packages/actor/dist/client.js @@ -0,0 +1,3 @@ +// src/client.ts +export * from "@rivetkit/core/client"; +//# sourceMappingURL=client.js.map diff --git a/packages/actor/dist/client.js.map b/packages/actor/dist/client.js.map new file mode 100644 index 000000000..09d2cd2c5 --- /dev/null +++ b/packages/actor/dist/client.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/client.ts"],"sourcesContent":["export * from \"@rivetkit/core/client\";\n"],"mappings":";AAAA,cAAc;","names":[]} \ No newline at end of file diff --git a/packages/actor/dist/errors.cjs b/packages/actor/dist/errors.cjs new file mode 100644 index 000000000..970bd23a1 --- /dev/null +++ b/packages/actor/dist/errors.cjs @@ -0,0 +1,3 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/errors.ts +var _errors = require('@rivetkit/core/errors'); _createStarExport(_errors); +//# sourceMappingURL=errors.cjs.map \ No newline at end of file diff --git a/packages/actor/dist/errors.cjs.map b/packages/actor/dist/errors.cjs.map new file mode 100644 index 000000000..3669f0751 --- /dev/null +++ b/packages/actor/dist/errors.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/errors.cjs","../src/errors.ts"],"names":[],"mappings":"AAAA;ACAA,2EAAc","file":"/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/errors.cjs","sourcesContent":[null,"export * from \"@rivetkit/core/errors\";\n"]} \ No newline at end of file diff --git a/packages/actor/dist/errors.d.cts b/packages/actor/dist/errors.d.cts new file mode 100644 index 000000000..162d2c1ba --- /dev/null +++ b/packages/actor/dist/errors.d.cts @@ -0,0 +1 @@ +export * from '@rivetkit/core/errors'; diff --git a/packages/actor/dist/errors.d.ts b/packages/actor/dist/errors.d.ts new file mode 100644 index 000000000..ef2b8676a --- /dev/null +++ b/packages/actor/dist/errors.d.ts @@ -0,0 +1 @@ +export * from "@rivetkit/core/errors"; diff --git a/packages/actor/dist/errors.js b/packages/actor/dist/errors.js new file mode 100644 index 000000000..f6a9f276d --- /dev/null +++ b/packages/actor/dist/errors.js @@ -0,0 +1,3 @@ +// src/errors.ts +export * from "@rivetkit/core/errors"; +//# sourceMappingURL=errors.js.map diff --git a/packages/actor/dist/errors.js.map b/packages/actor/dist/errors.js.map new file mode 100644 index 000000000..4d55ed9c2 --- /dev/null +++ b/packages/actor/dist/errors.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export * from \"@rivetkit/core/errors\";\n"],"mappings":";AAAA,cAAc;","names":[]} \ No newline at end of file diff --git a/packages/actor/dist/log.cjs b/packages/actor/dist/log.cjs new file mode 100644 index 000000000..8dd16117a --- /dev/null +++ b/packages/actor/dist/log.cjs @@ -0,0 +1,3 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/log.ts +var _log = require('@rivetkit/core/log'); _createStarExport(_log); +//# sourceMappingURL=log.cjs.map \ No newline at end of file diff --git a/packages/actor/dist/log.cjs.map b/packages/actor/dist/log.cjs.map new file mode 100644 index 000000000..d25b8b262 --- /dev/null +++ b/packages/actor/dist/log.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/log.cjs","../src/log.ts"],"names":[],"mappings":"AAAA;ACAA,kEAAc","file":"/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/log.cjs","sourcesContent":[null,"export * from \"@rivetkit/core/log\";\n"]} \ No newline at end of file diff --git a/packages/actor/dist/log.d.cts b/packages/actor/dist/log.d.cts new file mode 100644 index 000000000..ac3f460ea --- /dev/null +++ b/packages/actor/dist/log.d.cts @@ -0,0 +1 @@ +export * from '@rivetkit/core/log'; diff --git a/packages/actor/dist/log.d.ts b/packages/actor/dist/log.d.ts new file mode 100644 index 000000000..dd1ff77fe --- /dev/null +++ b/packages/actor/dist/log.d.ts @@ -0,0 +1 @@ +export * from "@rivetkit/core/log"; diff --git a/packages/actor/dist/log.js b/packages/actor/dist/log.js new file mode 100644 index 000000000..96ecf2866 --- /dev/null +++ b/packages/actor/dist/log.js @@ -0,0 +1,3 @@ +// src/log.ts +export * from "@rivetkit/core/log"; +//# sourceMappingURL=log.js.map diff --git a/packages/actor/dist/log.js.map b/packages/actor/dist/log.js.map new file mode 100644 index 000000000..00e32eacf --- /dev/null +++ b/packages/actor/dist/log.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/log.ts"],"sourcesContent":["export * from \"@rivetkit/core/log\";\n"],"mappings":";AAAA,cAAc;","names":[]} \ No newline at end of file diff --git a/packages/actor/dist/mod.cjs b/packages/actor/dist/mod.cjs new file mode 100644 index 000000000..e32fe24db --- /dev/null +++ b/packages/actor/dist/mod.cjs @@ -0,0 +1,3 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/mod.ts +var _core = require('@rivetkit/core'); _createStarExport(_core); +//# sourceMappingURL=mod.cjs.map \ No newline at end of file diff --git a/packages/actor/dist/mod.cjs.map b/packages/actor/dist/mod.cjs.map new file mode 100644 index 000000000..cf0966536 --- /dev/null +++ b/packages/actor/dist/mod.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/mod.cjs","../src/mod.ts"],"names":[],"mappings":"AAAA;ACAA,gEAAc","file":"/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/mod.cjs","sourcesContent":[null,"export * from \"@rivetkit/core\";\n"]} \ No newline at end of file diff --git a/packages/actor/dist/mod.d.cts b/packages/actor/dist/mod.d.cts new file mode 100644 index 000000000..4a4a25ff6 --- /dev/null +++ b/packages/actor/dist/mod.d.cts @@ -0,0 +1 @@ +export * from '@rivetkit/core'; diff --git a/packages/actor/dist/mod.d.ts b/packages/actor/dist/mod.d.ts new file mode 100644 index 000000000..d00787ee2 --- /dev/null +++ b/packages/actor/dist/mod.d.ts @@ -0,0 +1 @@ +export * from "@rivetkit/core"; diff --git a/packages/actor/dist/mod.js b/packages/actor/dist/mod.js new file mode 100644 index 000000000..0a2ea159c --- /dev/null +++ b/packages/actor/dist/mod.js @@ -0,0 +1,3 @@ +// src/mod.ts +export * from "@rivetkit/core"; +//# sourceMappingURL=mod.js.map diff --git a/packages/actor/dist/mod.js.map b/packages/actor/dist/mod.js.map new file mode 100644 index 000000000..7f62cc3d3 --- /dev/null +++ b/packages/actor/dist/mod.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/mod.ts"],"sourcesContent":["export * from \"@rivetkit/core\";\n"],"mappings":";AAAA,cAAc;","names":[]} \ No newline at end of file diff --git a/packages/actor/dist/test.cjs b/packages/actor/dist/test.cjs new file mode 100644 index 000000000..22c09e7c5 --- /dev/null +++ b/packages/actor/dist/test.cjs @@ -0,0 +1,3 @@ +"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/test.ts +var _test = require('@rivetkit/core/test'); _createStarExport(_test); +//# sourceMappingURL=test.cjs.map \ No newline at end of file diff --git a/packages/actor/dist/test.cjs.map b/packages/actor/dist/test.cjs.map new file mode 100644 index 000000000..8b1139df2 --- /dev/null +++ b/packages/actor/dist/test.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/test.cjs","../src/test.ts"],"names":[],"mappings":"AAAA;ACAA,qEAAc","file":"/Users/josi/Documents/ShiftLabs/Projects/rivetkit/packages/actor/dist/test.cjs","sourcesContent":[null,"export * from \"@rivetkit/core/test\";\n"]} \ No newline at end of file diff --git a/packages/actor/dist/test.d.cts b/packages/actor/dist/test.d.cts new file mode 100644 index 000000000..7b539cbee --- /dev/null +++ b/packages/actor/dist/test.d.cts @@ -0,0 +1 @@ +export * from '@rivetkit/core/test'; diff --git a/packages/actor/dist/test.d.ts b/packages/actor/dist/test.d.ts new file mode 100644 index 000000000..1356b6872 --- /dev/null +++ b/packages/actor/dist/test.d.ts @@ -0,0 +1 @@ +export * from "@rivetkit/core/test"; diff --git a/packages/actor/dist/test.js b/packages/actor/dist/test.js new file mode 100644 index 000000000..111c48292 --- /dev/null +++ b/packages/actor/dist/test.js @@ -0,0 +1,3 @@ +// src/test.ts +export * from "@rivetkit/core/test"; +//# sourceMappingURL=test.js.map diff --git a/packages/actor/dist/test.js.map b/packages/actor/dist/test.js.map new file mode 100644 index 000000000..de6a64cdb --- /dev/null +++ b/packages/actor/dist/test.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/test.ts"],"sourcesContent":["export * from \"@rivetkit/core/test\";\n"],"mappings":";AAAA,cAAc;","names":[]} \ No newline at end of file diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json new file mode 100644 index 000000000..a11e15420 --- /dev/null +++ b/packages/frameworks/svelte/package.json @@ -0,0 +1,53 @@ +{ + "name": "@rivetkit/svelte", + "version": "0.9.9", + "license": "Apache-2.0", + "keywords": [ + "rivetkit", + "svelte", + "framework", + "actors", + "stateful", + "serverless" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dist", + "package.json" + ], + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + }, + "scripts": { + "dev": "vite build --watch", + "build": "tsc && vite build", + "check-types": "tsc --noEmit", + "check": "tsc --noEmit" + }, + "peerDependencies": { + "@rivetkit/core": "*", + "svelte": "^5.0.0" + }, + "dependencies": { + "@rivetkit/framework-base": "workspace:*", + "esm-env": "^1.2.1" + }, + "devDependencies": { + "@rivetkit/core": "workspace:*", + "svelte": "^5.0.0", + "typescript": "^5.5.2", + "vite": "^6.3.5", + "vite-plugin-dts": "^4.5.4" + }, + "stableVersion": "0.8.0" +} diff --git a/packages/frameworks/svelte/src/index.ts b/packages/frameworks/svelte/src/index.ts new file mode 100644 index 000000000..d2a27dea3 --- /dev/null +++ b/packages/frameworks/svelte/src/index.ts @@ -0,0 +1 @@ +export * from "./rivet.svelte.js"; diff --git a/packages/frameworks/svelte/src/rivet.svelte.ts b/packages/frameworks/svelte/src/rivet.svelte.ts new file mode 100644 index 000000000..8c466f6ac --- /dev/null +++ b/packages/frameworks/svelte/src/rivet.svelte.ts @@ -0,0 +1,154 @@ +import type { Client, ExtractActorsFromRegistry } from "@rivetkit/core/client"; +import { + type ActorOptions, + type AnyActorRegistry, + type CreateRivetKitOptions, + createRivetKit as createVanillaRivetKit, +} from "@rivetkit/framework-base"; +import { BROWSER } from "esm-env"; + +export { createClient } from "@rivetkit/core/client"; + +export function createRivetKit( + client: Client, + opts: CreateRivetKitOptions = {}, +) { + const { getOrCreateActor } = createVanillaRivetKit< + Registry, + ExtractActorsFromRegistry, + keyof ExtractActorsFromRegistry + >(client, opts); + + /** + * Svelte 5 rune-based function to connect to an actor and retrieve its state. + * Using this function with the same options will return the same actor instance. + * This simplifies passing around the actor state in your components. + * It also provides a method to listen for events emitted by the actor. + * @param opts - Options for the actor, including its name, key, and parameters. + * @returns An object containing reactive state and event listener function. + */ + function useActor< + ActorName extends keyof ExtractActorsFromRegistry, + >(opts: ActorOptions) { + const { mount, setState, state } = getOrCreateActor(opts); + + // Create reactive state using Svelte 5 runes with proper typing + type ActorConnection = + ExtractActorsFromRegistry[ActorName] extends { + connection: infer C; + } + ? C + : any; + type ActorHandle = ExtractActorsFromRegistry[ActorName] extends { + handle: infer H; + } + ? H + : any; + + let connection = $state(null); + let handle = $state(null); + let isConnected = $state(false); + let isConnecting = $state(false); + let actorOpts = $state<{ + name: keyof ExtractActorsFromRegistry; + key: string | string[]; + params?: Record; + enabled?: boolean; + }>({} as any); + let isError = $state(undefined); + let error = $state(null); + let hash = $state(""); + + // Only run in browser to avoid SSR issues + if (BROWSER) { + // Subscribe to state changes from the base framework + state.subscribe((newData) => { + connection = newData.currentVal.connection; + handle = newData.currentVal.handle; + isConnected = newData.currentVal.isConnected; + isConnecting = newData.currentVal.isConnecting; + actorOpts = newData.currentVal.opts; + isError = newData.currentVal.isError; + error = newData.currentVal.error; + hash = newData.currentVal.hash; + }); + + // Update options reactively + $effect.root(() => { + setState((prev) => { + prev.opts = { + ...opts, + enabled: opts.enabled ?? true, + }; + return prev; + }); + }); + + // Mount and subscribe to state changes + $effect.root(() => { + mount(); + }); + } + + /** + * Function to listen for events emitted by the actor. + * This function allows you to subscribe to specific events emitted by the actor + * and execute a handler function when the event occurs. + * It automatically manages the event listener lifecycle. + * @param eventName The name of the event to listen for. + * @param handler The function to call when the event is emitted. + */ + function useEvent( + eventName: string, + // biome-ignore lint/suspicious/noExplicitAny: strong typing of handler is not supported yet + handler: (...args: any[]) => void, + ) { + // Get the current connection reactively + const connection = $derived(state.state.connection); + let connSubs: (() => void) | undefined; + + $effect.root(() => { + // Set up event listener if connection exists + connSubs = connection?.on(eventName, handler); + + // Cleanup function + return () => { + connSubs?.(); + }; + }); + } + + // Return reactive state with proper typing + return { + get connection(): ActorConnection | null { + return connection; + }, + get handle(): ActorHandle | null { + return handle; + }, + get isConnected() { + return isConnected; + }, + get isConnecting() { + return isConnecting; + }, + get actorOpts() { + return actorOpts; + }, + get isError() { + return isError; + }, + get error() { + return error; + }, + get hash() { + return hash; + }, + useEvent, + }; + } + + return { + useActor, + }; +} diff --git a/packages/frameworks/svelte/svelte.config.js b/packages/frameworks/svelte/svelte.config.js new file mode 100644 index 000000000..1cc76be9e --- /dev/null +++ b/packages/frameworks/svelte/svelte.config.js @@ -0,0 +1,10 @@ +import adapter from "@sveltejs/adapter-auto"; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + adapter: adapter(), + }, +}; + +export default config; diff --git a/packages/frameworks/svelte/tsconfig.json b/packages/frameworks/svelte/tsconfig.json new file mode 100644 index 000000000..803e86cbc --- /dev/null +++ b/packages/frameworks/svelte/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + /* Bundler mode */ + "moduleResolution": "bundler", + "verbatimModuleSyntax": false, + "moduleDetection": "force", + "noEmit": false, + "outDir": "./dist", + "rootDir": "./src", + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + /* Svelte specific */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/frameworks/svelte/vite.config.ts b/packages/frameworks/svelte/vite.config.ts new file mode 100644 index 000000000..b6d927a8f --- /dev/null +++ b/packages/frameworks/svelte/vite.config.ts @@ -0,0 +1,44 @@ +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { defineConfig } from "vite"; +import dts from "vite-plugin-dts"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default defineConfig({ + plugins: [ + dts({ + include: ["src/**/*"], + exclude: ["**/*.test.*", "**/*.spec.*"], + insertTypesEntry: true, + rollupTypes: true, + strictOutput: true, + copyDtsFiles: false, + }), + ], + build: { + lib: { + entry: { + index: resolve(__dirname, "src/index.ts"), + "rivet.svelte": resolve(__dirname, "src/rivet.svelte.ts"), + }, + formats: ["cjs", "es"], + }, + rollupOptions: { + external: [ + "svelte", + "svelte/store", + "@rivetkit/core", + "@rivetkit/core/client", + "@rivetkit/framework-base", + "esm-env", + ], + output: { + preserveModules: false, + exports: "named", + }, + }, + sourcemap: true, + minify: false, + }, +}); From 27ca702c64ac8d615595a65e619bc4d04bc673d3 Mon Sep 17 00:00:00 2001 From: joshua1 Date: Wed, 27 Aug 2025 14:01:36 +0200 Subject: [PATCH 10/12] new actor build --- packages/frameworks/svelte/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frameworks/svelte/tsconfig.json b/packages/frameworks/svelte/tsconfig.json index 803e86cbc..511013f00 100644 --- a/packages/frameworks/svelte/tsconfig.json +++ b/packages/frameworks/svelte/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "target": "ES2022", "useDefineForClassFields": true, From dfd592929a265332bbe1ea33a03394d91f091d2b Mon Sep 17 00:00:00 2001 From: joshua1 Date: Sun, 31 Aug 2025 20:11:46 +0200 Subject: [PATCH 11/12] update to rivetkit-svelte --- .../frameworks/svelte/src/lib/rivet.svelte.ts | 217 ++++++++++-------- 1 file changed, 120 insertions(+), 97 deletions(-) diff --git a/packages/frameworks/svelte/src/lib/rivet.svelte.ts b/packages/frameworks/svelte/src/lib/rivet.svelte.ts index 1177a879b..21ab40e12 100644 --- a/packages/frameworks/svelte/src/lib/rivet.svelte.ts +++ b/packages/frameworks/svelte/src/lib/rivet.svelte.ts @@ -1,13 +1,79 @@ -import type * as _rivetkit_core_client from "@rivetkit/core/client"; -import type { Client, ExtractActorsFromRegistry } from "@rivetkit/core/client"; +import type { + ActorConn, + ActorHandle, + AnyActorDefinition, + Client, + ExtractActorsFromRegistry, +} from "@rivetkit/core/client"; import { type ActorOptions, - type ActorsStateDerived, type AnyActorRegistry, type CreateRivetKitOptions, createRivetKit as createVanillaRivetKit, } from "@rivetkit/framework-base"; -import { BROWSER } from "esm-env"; +import { useStore } from "@tanstack/svelte-store"; + +export interface ActorStateReference { + /** + * The unique identifier for the actor. + * This is a hash generated from the actor's options. + * It is used to identify the actor instance in the store. + * @internal + */ + hash: string; + /** + * The state of the actor, derived from the store. + * This includes the actor's connection and handle. + */ + handle: ActorHandle | null; + /** + * The connection to the actor. + * This is used to communicate with the actor in realtime. + */ + connection: ActorConn | null; + /** + * Whether the actor is enabled. + */ + isConnected?: boolean; + /** + * Whether the actor is currently connecting, indicating that a connection attempt is in progress. + */ + isConnecting?: boolean; + /** + * Whether there was an error connecting to the actor. + */ + isError?: boolean; + /** + * The error that occurred while trying to connect to the actor, if any. + */ + error: Error | null; + /** + * Options for the actor, including its name, key, parameters, and whether it is enabled. + */ + opts: { + name: keyof AD; + /** + * Unique key for the actor instance. + * This can be a string or an array of strings to create multiple instances. + * @example "abc" or ["abc", "def"] + */ + key: string | string[]; + /** + * Parameters for the actor. + * These are additional options that can be passed to the actor. + */ + params?: Record; + /** Region to create the actor in if it doesn't exist. */ + createInRegion?: string; + /** Input data to pass to the actor. */ + createWithInput?: unknown; + /** + * Whether the actor is enabled. + * Defaults to true. + */ + enabled?: boolean; + }; +} export { createClient } from "@rivetkit/core/client"; @@ -34,129 +100,86 @@ export function createRivetKit( >( opts: ActorOptions, ): { - connection: _rivetkit_core_client.ActorConn< - ExtractActorsFromRegistry[ActorName] - > | null; - handle: _rivetkit_core_client.ActorHandle< - ExtractActorsFromRegistry[ActorName] - > | null; - isConnected: boolean | undefined; - isConnecting: boolean | undefined; - actorOpts: { - name: keyof ExtractActorsFromRegistry; - key: string | string[]; - params?: Record; - enabled?: boolean; + current: Omit< + ActorStateReference>, + "handle" | "connection" + > & { + handle: ActorHandle< + ExtractActorsFromRegistry[ActorName] + > | null; + connection: ActorConn< + ExtractActorsFromRegistry[ActorName] + > | null; }; - isError: boolean | undefined; - error: Error | null; - hash: string; useEvent: (eventName: string, handler: (...args: any[]) => void) => void; } { const { mount, setState, state } = getOrCreateActor(opts); - let connection = $state<_rivetkit_core_client.ActorConn< - ExtractActorsFromRegistry[ActorName] - > | null>(null); - let handle = $state<_rivetkit_core_client.ActorHandle< - ExtractActorsFromRegistry[ActorName] - > | null>(null); - let isConnected = $state(false); - let isConnecting = $state(false); - let actorOpts = $state<{ - name: keyof ExtractActorsFromRegistry; - key: string | string[]; - params?: Record; - enabled?: boolean; - }>({} as any); - - let isError = $state(undefined); - - let error = $state(null); - let hash = $state(""); - - // Only run in browser to avoid SSR issues - if (BROWSER) { - state.subscribe((newData) => { - connection = newData.currentVal.connection; - handle = newData.currentVal.handle; - isConnected = newData.currentVal.isConnected; - isConnecting = newData.currentVal.isConnecting; - actorOpts = newData.currentVal.opts; - isError = newData.currentVal.isError; - error = newData.currentVal.error; - hash = newData.currentVal.hash; + // Update options reactively + $effect.root(() => { + setState((prev) => { + prev.opts = { + ...opts, + enabled: opts.enabled ?? true, + } as any; + return prev; }); + }); - // Update options reactively - $effect.root(() => { - setState((prev) => { - prev.opts = { - ...opts, - enabled: opts.enabled ?? true, - } as any; - return prev; - }); - }); + // Mount and subscribe to state changes + $effect.root(() => { + mount(); + }); + const actorState = useStore(state); - // Mount and subscribe to state changes - $effect.root(() => { - mount(); - }); - } - - /** - * Function to listen for events emitted by the actor. - * This function allows you to subscribe to specific events emitted by the actor - * and execute a handler function when the event occurs. - * It automatically manages the event listener lifecycle. - * @param eventName The name of the event to listen for. - * @param handler The function to call when the event is emitted. - */ function useEvent( eventName: string, // biome-ignore lint/suspicious/noExplicitAny: strong typing of handler is not supported yet handler: (...args: any[]) => void, - ): void { - const connection = $derived<_rivetkit_core_client.ActorConn< - ExtractActorsFromRegistry[ActorName] - > | null>(state.state.connection); + ) { + let ref = $state(handler); + const actorState = useStore(state) || {}; - let connSubs: any; - $effect.root(() => { - connSubs = connection?.on(eventName, handler); - // Cleanup function - return () => { - connSubs?.(); - }; + $effect(() => { + ref = handler; + }); + $effect(() => { + if (!actorState?.current?.connection) return; + function eventHandler(...args: any[]) { + ref(...args); + } + return actorState.current.connection.on(eventName, eventHandler); }); } - return { + const current = { get connection() { - return connection; + return actorState.current?.connection; }, get handle() { - return handle; + return actorState.current?.handle; }, get isConnected() { - return isConnected; + return actorState.current?.isConnected; }, get isConnecting() { - return isConnecting; - }, - get actorOpts() { - return actorOpts; + return actorState.current?.isConnecting; }, get isError() { - return isError; + return actorState.current?.isError; }, get error() { - return error; + return actorState.current?.error; + }, + get opts() { + return actorState.current?.opts; }, get hash() { - return hash; + return actorState.current?.hash; }, + }; + return { + current, useEvent, }; } From 0faf1df2ea8143a5ad24bdb512fa7b8f52e78172 Mon Sep 17 00:00:00 2001 From: joshua1 Date: Sat, 6 Sep 2025 13:01:29 +0200 Subject: [PATCH 12/12] update to rivetkit-svelte --- packages/core/src/actor/config.ts | 1 + packages/core/src/actor/instance.ts | 6 +++++- .../src/drivers/file-system/global-state.ts | 7 +++++-- packages/frameworks/svelte/package.json | 1 + pnpm-lock.yaml | 18 ++++++++++++++++++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/core/src/actor/config.ts b/packages/core/src/actor/config.ts index 97286be19..dddb67a44 100644 --- a/packages/core/src/actor/config.ts +++ b/packages/core/src/actor/config.ts @@ -343,6 +343,7 @@ interface BaseActorConfig< TAuthData, TDatabase >, + prevState: TState, newState: TState, ) => void; diff --git a/packages/core/src/actor/instance.ts b/packages/core/src/actor/instance.ts index 27263da86..f8a2e5408 100644 --- a/packages/core/src/actor/instance.ts +++ b/packages/core/src/actor/instance.ts @@ -553,7 +553,11 @@ export class ActorInstance< // Call onStateChange if it exists if (this.#config.onStateChange && this.#ready) { try { - this.#config.onStateChange(this.actorContext, this.#persistRaw.s); + this.#config.onStateChange( + this.actorContext, + this.#persist.s, + this.#persistRaw.s, + ); } catch (error) { logger().error("error in `_onStateChange`", { error: stringifyError(error), diff --git a/packages/core/src/drivers/file-system/global-state.ts b/packages/core/src/drivers/file-system/global-state.ts index e551a61ed..c88a4ef82 100644 --- a/packages/core/src/drivers/file-system/global-state.ts +++ b/packages/core/src/drivers/file-system/global-state.ts @@ -360,13 +360,13 @@ export class FileSystemGlobalState { try { // Create actor const definition = lookupInRegistry(registryConfig, entry.state.name); - entry.actor = definition.instantiate(); + const actor = definition.instantiate(); // Start actor const connDrivers = createGenericConnDrivers( entry.genericConnGlobalState, ); - await entry.actor.start( + await actor.start( connDrivers, actorDriver, inlineClient, @@ -376,6 +376,9 @@ export class FileSystemGlobalState { "unknown", ); + // Only set entry.actor after the actor is fully started + entry.actor = actor; + // Finish entry.startPromise.resolve(); entry.startPromise = undefined; diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json index 98d4791f2..6e1c57ce8 100644 --- a/packages/frameworks/svelte/package.json +++ b/packages/frameworks/svelte/package.json @@ -37,6 +37,7 @@ "@sveltejs/kit": "^2.22.0", "@sveltejs/package": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tanstack/svelte-store": "^0.7.4", "publint": "^0.3.2", "svelte": "^5.38.1", "svelte-check": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e97f26696..150c6af74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1340,6 +1340,9 @@ importers: '@sveltejs/vite-plugin-svelte': specifier: ^6.0.0 version: 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) + '@tanstack/svelte-store': + specifier: ^0.7.4 + version: 0.7.4(svelte@5.38.1) publint: specifier: ^0.3.2 version: 0.3.12 @@ -2857,6 +2860,14 @@ packages: '@tanstack/store@0.7.1': resolution: {integrity: sha512-PjUQKXEXhLYj2X5/6c1Xn/0/qKY0IVFxTJweopRfF26xfjVyb14yALydJrHupDh3/d+1WKmfEgZPBVCmDkzzwg==} + '@tanstack/store@0.7.4': + resolution: {integrity: sha512-F1XqZQici1Aq6WigEfcxJSml92nW+85Om8ElBMokPNg5glCYVOmPkZGIQeieYFxcPiKTfwo0MTOQpUyJtwncrg==} + + '@tanstack/svelte-store@0.7.4': + resolution: {integrity: sha512-oE9g10IXIAqpWLDWmh1oWXDUuffYZfi5q+jM9j4nXCo/ByMRUshd9IVtB9Zywc6ZrXmcNQiB988Fle8PTgZfDA==} + peerDependencies: + svelte: ^5.0.0 + '@tokenizer/inflate@0.2.7': resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} engines: {node: '>=18'} @@ -6910,6 +6921,13 @@ snapshots: '@tanstack/store@0.7.1': {} + '@tanstack/store@0.7.4': {} + + '@tanstack/svelte-store@0.7.4(svelte@5.38.1)': + dependencies: + '@tanstack/store': 0.7.4 + svelte: 5.38.1 + '@tokenizer/inflate@0.2.7': dependencies: debug: 4.4.1