diff --git a/examples/actor-actions/frontend/App.tsx b/examples/actor-actions/frontend/App.tsx index 4323f3468c..18a8cfc8c9 100644 --- a/examples/actor-actions/frontend/App.tsx +++ b/examples/actor-actions/frontend/App.tsx @@ -4,7 +4,7 @@ import type { CompanyProfile, EmployeeProfile, registry, -} from "../src/registry"; +} from "../src/actors.ts"; const client = createClient(`${window.location.origin}/api/rivet`); diff --git a/examples/actor-actions/frontend/main.tsx b/examples/actor-actions/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/actor-actions/frontend/main.tsx +++ b/examples/actor-actions/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/actor-actions/package.json b/examples/actor-actions/package.json index 9a062ee7ef..7058716923 100644 --- a/examples/actor-actions/package.json +++ b/examples/actor-actions/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.2.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.2.0", "@rivetkit/react": "*", + "hono": "^4.7.10", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/actor-actions/src/registry.ts b/examples/actor-actions/src/actors.ts similarity index 100% rename from examples/actor-actions/src/registry.ts rename to examples/actor-actions/src/actors.ts diff --git a/examples/actor-actions/src/server.ts b/examples/actor-actions/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/actor-actions/src/server.ts +++ b/examples/actor-actions/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/actor-actions/tests/actions.test.ts b/examples/actor-actions/tests/actions.test.ts index 74f1b122b9..8fda6253f0 100644 --- a/examples/actor-actions/tests/actions.test.ts +++ b/examples/actor-actions/tests/actions.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/registry"; +import { registry } from "../src/actors.ts"; describe("company and employee actors", () => { test("create company actor with input and get profile", async (ctx) => { diff --git a/examples/actor-actions/tsconfig.json b/examples/actor-actions/tsconfig.json index ebf8f3a6e1..bf28e3389a 100644 --- a/examples/actor-actions/tsconfig.json +++ b/examples/actor-actions/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, "include": ["src/**/*", "tests/**/*"] } diff --git a/examples/actor-actions/vercel.json b/examples/actor-actions/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/actor-actions/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/ai-agent/frontend/App.tsx b/examples/ai-agent/frontend/App.tsx index a109941a10..cebc26c97f 100644 --- a/examples/ai-agent/frontend/App.tsx +++ b/examples/ai-agent/frontend/App.tsx @@ -1,7 +1,7 @@ import { createRivetKit } from "@rivetkit/react"; import { useEffect, useState } from "react"; -import { registry } from "../src/registry"; -import type { Message } from "../src/types"; +import { registry } from "../src/actors.ts"; +import type { Message } from "../src/types.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/ai-agent/frontend/main.tsx b/examples/ai-agent/frontend/main.tsx index 9b08c17646..c90f447886 100644 --- a/examples/ai-agent/frontend/main.tsx +++ b/examples/ai-agent/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/ai-agent/package.json b/examples/ai-agent/package.json index 7605ec84c5..78c791d89b 100644 --- a/examples/ai-agent/package.json +++ b/examples/ai-agent/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -31,11 +28,15 @@ }, "dependencies": { "@ai-sdk/openai": "^0.0.66", + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", "ai": "^4.0.38", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "rivetkit": "*", + "srvx": "^0.10.0", "zod": "^3.25.69" }, "stableVersion": "0.8.0", diff --git a/examples/ai-agent/src/registry.ts b/examples/ai-agent/src/actors.ts similarity index 94% rename from examples/ai-agent/src/registry.ts rename to examples/ai-agent/src/actors.ts index 4b731ba99d..cb792ba04a 100644 --- a/examples/ai-agent/src/registry.ts +++ b/examples/ai-agent/src/actors.ts @@ -2,8 +2,8 @@ import { openai } from "@ai-sdk/openai"; import { generateText, tool } from "ai"; import { actor, setup } from "rivetkit"; import { z } from "zod"; -import { getWeather } from "./my-tools"; -import type { Message } from "./types"; +import { getWeather } from "./my-tools.ts"; +import type { Message } from "./types.ts"; export const aiAgent = actor({ // Persistent state that survives restarts: https://rivet.dev/docs/actors/state diff --git a/examples/ai-agent/src/server.ts b/examples/ai-agent/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/ai-agent/src/server.ts +++ b/examples/ai-agent/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/ai-agent/tests/ai-agent.test.ts b/examples/ai-agent/tests/ai-agent.test.ts index 4873d7203a..3532a76f4f 100644 --- a/examples/ai-agent/tests/ai-agent.test.ts +++ b/examples/ai-agent/tests/ai-agent.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { expect, test, vi } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; // Mock the AI SDK and OpenAI vi.mock("@ai-sdk/openai", () => ({ @@ -14,7 +14,7 @@ vi.mock("ai", () => ({ tool: vi.fn().mockImplementation(({ execute }) => ({ execute })), })); -vi.mock("../src/backend/my-tools", () => ({ +vi.mock("../src/my-tools.ts", () => ({ getWeather: vi.fn().mockResolvedValue({ location: "San Francisco", temperature: 72, diff --git a/examples/ai-agent/tsconfig.json b/examples/ai-agent/tsconfig.json index 31be7ade7f..0551447a84 100644 --- a/examples/ai-agent/tsconfig.json +++ b/examples/ai-agent/tsconfig.json @@ -6,16 +6,11 @@ "module": "esnext", "moduleResolution": "bundler", "types": ["node", "vite/client"], - "resolveJsonModule": true, - "allowJs": true, - "checkJs": false, "noEmit": true, - "isolatedModules": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, "strict": true, - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*", "frontend/**/*", "tests/**/*"] } diff --git a/examples/ai-agent/vercel.json b/examples/ai-agent/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/ai-agent/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/ai-and-user-generated-actors-freestyle/frontend/App.tsx b/examples/ai-and-user-generated-actors-freestyle/frontend/App.tsx index ad06e25663..c4a6bbb57b 100644 --- a/examples/ai-and-user-generated-actors-freestyle/frontend/App.tsx +++ b/examples/ai-and-user-generated-actors-freestyle/frontend/App.tsx @@ -3,7 +3,7 @@ import Editor, { type OnMount } from "@monaco-editor/react"; import "./App.css"; import DEFAULT_REGISTRY from "../template/src/registry.ts?raw"; import DEFAULT_APP from "../template/frontend/App.tsx?raw"; -import { DeployRequest } from "../src/utils"; +import type { DeployRequest } from "../src/utils.ts"; type DeploymentTarget = "cloud" | "selfHosted"; diff --git a/examples/ai-and-user-generated-actors-freestyle/frontend/main.tsx b/examples/ai-and-user-generated-actors-freestyle/frontend/main.tsx index 1961235a6b..79b2bcc927 100644 --- a/examples/ai-and-user-generated-actors-freestyle/frontend/main.tsx +++ b/examples/ai-and-user-generated-actors-freestyle/frontend/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/examples/ai-and-user-generated-actors-freestyle/package.json b/examples/ai-and-user-generated-actors-freestyle/package.json index 2ddb34ad2e..2d164ab1f0 100644 --- a/examples/ai-and-user-generated-actors-freestyle/package.json +++ b/examples/ai-and-user-generated-actors-freestyle/package.json @@ -16,6 +16,8 @@ "test:run": "vitest run" }, "dependencies": { + "@hono/node-server": "^1.19.1", + "@hono/node-ws": "^1.3.0", "@monaco-editor/react": "^4.7.0", "@rivet-gg/cloud": "https://pkg.pr.new/rivet-dev/cloud/@rivet-gg/cloud@715f221", "@rivetkit/engine-api-full": "latest", @@ -27,8 +29,6 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@hono/node-server": "^1.19.1", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", diff --git a/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-cloud.ts b/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-cloud.ts index f53dc21ba1..e399e8299d 100644 --- a/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-cloud.ts +++ b/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-cloud.ts @@ -6,7 +6,7 @@ import { deployToFreestyle, generateNamespaceName, type LogCallback, -} from "./utils"; +} from "./utils.ts"; export async function deployWithRivetCloud( req: DeployRequest, diff --git a/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-self-hosted.ts b/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-self-hosted.ts index 0cca55a83b..18cc1af1c5 100644 --- a/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-self-hosted.ts +++ b/examples/ai-and-user-generated-actors-freestyle/src/deploy-with-rivet-self-hosted.ts @@ -5,7 +5,7 @@ import { deployToFreestyle, generateNamespaceName, type LogCallback, -} from "./utils"; +} from "./utils.ts"; export async function deployWithRivetSelfHosted( req: DeployRequest, diff --git a/examples/ai-and-user-generated-actors-freestyle/src/index.ts b/examples/ai-and-user-generated-actors-freestyle/src/index.ts index 18eb1d4246..aa7044ceb8 100644 --- a/examples/ai-and-user-generated-actors-freestyle/src/index.ts +++ b/examples/ai-and-user-generated-actors-freestyle/src/index.ts @@ -2,9 +2,9 @@ import { serve } from "@hono/node-server"; import { Hono } from "hono"; import { logger } from "hono/logger"; import { streamSSE } from "hono/streaming"; -import { deployWithRivetCloud } from "./deploy-with-rivet-cloud"; -import { deployWithRivetSelfHosted } from "./deploy-with-rivet-self-hosted"; -import type { DeployRequest, LogCallback } from "./utils"; +import { deployWithRivetCloud } from "./deploy-with-rivet-cloud.ts"; +import { deployWithRivetSelfHosted } from "./deploy-with-rivet-self-hosted.ts"; +import type { DeployRequest, LogCallback } from "./utils.ts"; const app = new Hono(); diff --git a/examples/ai-and-user-generated-actors-freestyle/tests/deploy.test.ts b/examples/ai-and-user-generated-actors-freestyle/tests/deploy.test.ts index 263a4680a7..369fdf5535 100644 --- a/examples/ai-and-user-generated-actors-freestyle/tests/deploy.test.ts +++ b/examples/ai-and-user-generated-actors-freestyle/tests/deploy.test.ts @@ -1,9 +1,9 @@ import { readFileSync } from "node:fs"; import { join } from "node:path"; import { beforeAll, describe, expect, it } from "vitest"; -import { deployWithRivetCloud } from "../src/deploy-with-rivet-cloud"; -import { deployWithRivetSelfHosted } from "../src/deploy-with-rivet-self-hosted"; -import type { DeployRequest, LogCallback } from "../src/utils"; +import { deployWithRivetCloud } from "../src/deploy-with-rivet-cloud.ts"; +import { deployWithRivetSelfHosted } from "../src/deploy-with-rivet-self-hosted.ts"; +import type { DeployRequest, LogCallback } from "../src/utils.ts"; // Simple log callback for tests const testLog: LogCallback = async (message: string) => { diff --git a/examples/ai-and-user-generated-actors-freestyle/tsconfig.json b/examples/ai-and-user-generated-actors-freestyle/tsconfig.json index 87fe3b8e70..5506aa64a8 100644 --- a/examples/ai-and-user-generated-actors-freestyle/tsconfig.json +++ b/examples/ai-and-user-generated-actors-freestyle/tsconfig.json @@ -8,6 +8,7 @@ "moduleResolution": "bundler", "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, @@ -19,6 +20,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "frontend", "tests"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/examples/ai-and-user-generated-actors-freestyle/vercel.json b/examples/ai-and-user-generated-actors-freestyle/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/ai-and-user-generated-actors-freestyle/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/chat-room-next-js/.gitignore b/examples/chat-room-next-js/.gitignore deleted file mode 100644 index 5ef6a52078..0000000000 --- a/examples/chat-room-next-js/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/versions - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/chat-room-next-js/README.md b/examples/chat-room-next-js/README.md deleted file mode 100644 index bace864ecf..0000000000 --- a/examples/chat-room-next-js/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Chat Room (Next.js) - -Next.js chat room demonstrating real-time messaging with actor state management. - -## Getting Started - -```sh -git clone https://github.com/rivet-dev/rivet.git -cd rivet/examples/chat-room-next-js -npm install -npm run dev -``` - - -## Features - -- **Next.js integration**: Use RivetKit actors with Next.js App Router and server actions -- **Real-time messaging**: Broadcast messages to all connected clients instantly -- **Persistent chat history**: Message history automatically saved in actor state -- **Multiple chat rooms**: Each room is a separate actor instance with isolated state - -## Implementation - -This example demonstrates using Rivet Actors with Next.js: - -- **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/chat-room-next-js/src/backend/registry.ts)): Defines the `chatRoom` actor integrated with Next.js App Router - -## Resources - -Read more about [Next.js integration](/docs/platforms/next-js), [actions](/docs/actors/actions), [state](/docs/actors/state), and [events](/docs/actors/events). - -## License - -MIT diff --git a/examples/chat-room-next-js/next.config.ts b/examples/chat-room-next-js/next.config.ts deleted file mode 100644 index 7921f35d74..0000000000 --- a/examples/chat-room-next-js/next.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - /* config options here */ -}; - -export default nextConfig; diff --git a/examples/chat-room-next-js/src/app/api/rivet/[...all]/route.ts b/examples/chat-room-next-js/src/app/api/rivet/[...all]/route.ts deleted file mode 100644 index a9ebd3e0a7..0000000000 --- a/examples/chat-room-next-js/src/app/api/rivet/[...all]/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { toNextHandler } from "@rivetkit/next-js"; -import { registry } from "@/rivet/registry"; - -export const maxDuration = 300; - -export const { GET, POST, PUT, PATCH, HEAD, OPTIONS } = toNextHandler(registry); diff --git a/examples/chat-room-next-js/src/app/favicon.ico b/examples/chat-room-next-js/src/app/favicon.ico deleted file mode 100644 index 09b3f98a60..0000000000 Binary files a/examples/chat-room-next-js/src/app/favicon.ico and /dev/null differ diff --git a/examples/chat-room-next-js/src/app/globals.css b/examples/chat-room-next-js/src/app/globals.css deleted file mode 100644 index 24fa51ff25..0000000000 --- a/examples/chat-room-next-js/src/app/globals.css +++ /dev/null @@ -1,463 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, sans-serif; - background: #000000; - height: 100vh; - overflow: hidden; - margin: 0; - padding: 0; -} - -.app { - display: flex; - height: 100vh; - width: 100vw; - background: #000000; - overflow: hidden; -} - -/* Sidebar */ -.sidebar { - width: 280px; - background: #1c1c1e; - border-right: 1px solid #2c2c2e; - display: flex; - flex-direction: column; -} - -.sidebar-header { - padding: 20px 20px; - border-bottom: 1px solid #2c2c2e; - display: flex; - justify-content: space-between; - align-items: center; - height: 60px; - box-sizing: border-box; -} - -.logo { - display: flex; - align-items: center; - gap: 12px; -} - -.logo h1 { - font-size: 18px; - font-weight: 500; - color: #ffffff; -} - -.close-sidebar { - display: none; - background: none; - border: none; - color: #8e8e93; - cursor: pointer; - padding: 8px; - border-radius: 6px; - transition: all 0.2s ease; -} - -.close-sidebar:hover { - background: #3a3a3c; - color: #ffffff; -} - -.user-settings { - padding: 20px; - flex: 1; -} - -.setting-group { - margin-bottom: 20px; -} - -.setting-group label { - display: block; - font-size: 14px; - font-weight: 600; - color: #8e8e93; - margin-bottom: 8px; -} - -.setting-input { - width: 100%; - padding: 10px 14px; - border: 1px solid #3a3a3c; - border-radius: 8px; - font-size: 14px; - transition: all 0.2s ease; - background: #2c2c2e; - color: #ffffff; -} - -.setting-input:focus { - outline: none; - border-color: #007aff; - box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1); -} - -.setting-input::placeholder { - color: #8e8e93; -} - -.connection-status { - padding: 20px; - border-top: 1px solid #2c2c2e; - height: 60px; - box-sizing: border-box; - display: flex; - align-items: center; -} - -.status-indicator { - display: flex; - align-items: center; - gap: 8px; - font-size: 14px; - font-weight: 500; -} - -.status-dot { - width: 8px; - height: 8px; - border-radius: 50%; - transition: background-color 0.2s ease; -} - -.status-indicator.connected .status-dot { - background-color: #30d158; -} - -.status-indicator.disconnected .status-dot { - background-color: #ff3b30; -} - -.status-indicator.connected { - color: #30d158; -} - -.status-indicator.disconnected { - color: #ff3b30; -} - -/* Chat Container */ -.chat-container { - flex: 1; - display: flex; - flex-direction: column; - background: #000000; -} - -.chat-header { - padding: 12px 20px; - border-bottom: 1px solid #2c2c2e; - background: #1c1c1e; - display: flex; - align-items: center; - gap: 12px; -} - -.menu-button { - display: none; - background: none; - border: none; - color: #8e8e93; - cursor: pointer; - padding: 8px; - border-radius: 6px; - transition: all 0.2s ease; -} - -.menu-button:hover { - background: #3a3a3c; - color: #ffffff; -} - -.room-info h2 { - font-size: 16px; - font-weight: 600; - color: #ffffff; - margin-bottom: 2px; -} - -.room-info p { - font-size: 12px; - color: #8e8e93; -} - -.messages-container { - flex: 1; - overflow-y: auto; - background: #000000; -} - -.messages { - padding: 16px 20px; - min-height: 100%; -} - -.message-wrapper { - display: flex; - margin-bottom: 12px; - align-items: flex-end; -} - -.message-wrapper.own { - flex-direction: row-reverse; -} - -.message-avatar { - margin-right: 12px; - flex-shrink: 0; -} - -.message-wrapper.own .message-avatar { - margin-right: 0; - margin-left: 12px; -} - -.avatar { - width: 32px; - height: 32px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-size: 12px; - font-weight: 600; - color: white; - text-transform: uppercase; -} - -.avatar-spacer { - width: 32px; - margin-right: 12px; -} - -.message-wrapper.own .avatar-spacer { - margin-right: 0; - margin-left: 12px; -} - -.message-content { - max-width: 70%; - display: flex; - flex-direction: column; -} - -.message-wrapper.own .message-content { - align-items: flex-end; -} - -.message-sender { - font-size: 12px; - font-weight: 600; - color: #64748b; - margin-bottom: 4px; - margin-left: 4px; -} - -.message-wrapper.own .message-sender { - margin-left: 0; - margin-right: 4px; -} - -.message-bubble { - padding: 10px 14px; - border-radius: 16px; - position: relative; - word-wrap: break-word; - max-width: 100%; -} - -.message-bubble.other { - background: #2c2c2e; - border: none; - border-bottom-left-radius: 4px; - color: #ffffff; -} - -.message-bubble.own { - background: #007aff; - color: white; - border-bottom-right-radius: 4px; -} - -.message-text { - font-size: 15px; - line-height: 1.3; - margin-bottom: 3px; -} - -.message-time { - font-size: 11px; - opacity: 0.5; -} - -.empty-state { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - text-align: center; - color: #8e8e93; -} - -.empty-icon { - font-size: 48px; - margin-bottom: 16px; -} - -.empty-state h3 { - font-size: 18px; - font-weight: 600; - color: #ffffff; - margin-bottom: 8px; -} - -.empty-state p { - font-size: 14px; -} - -.input-container { - padding: 12px 20px; - border-top: 1px solid #2c2c2e; - background: #1c1c1e; - height: 60px; - box-sizing: border-box; - display: flex; - align-items: center; -} - -.input-wrapper { - display: flex; - align-items: center; - gap: 8px; - background: #2c2c2e; - border: 1px solid #3a3a3c; - border-radius: 20px; - padding: 6px 6px 6px 16px; - transition: all 0.2s ease; - width: 100%; -} - -.input-wrapper:focus-within { - border-color: #007aff; - box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1); -} - -.message-input { - flex: 1; - border: none; - background: transparent; - font-size: 15px; - outline: none; - resize: none; - color: #ffffff; -} - -.message-input::placeholder { - color: #8e8e93; -} - -.send-button { - width: 32px; - height: 32px; - border: none; - border-radius: 50%; - background: #007aff; - color: white; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: all 0.2s ease; - flex-shrink: 0; -} - -.send-button:hover:not(:disabled) { - background: #0056cc; - transform: scale(1.05); -} - -.send-button:disabled { - background: #3a3a3c; - cursor: not-allowed; - transform: none; -} - -/* Scrollbar Styling */ -.messages-container::-webkit-scrollbar { - width: 6px; -} - -.messages-container::-webkit-scrollbar-track { - background: transparent; -} - -.messages-container::-webkit-scrollbar-thumb { - background: #3a3a3c; - border-radius: 3px; -} - -.messages-container::-webkit-scrollbar-thumb:hover { - background: #48484a; -} - -/* Responsive Design */ -@media (max-width: 768px) { - .app { - height: 100vh; - } - - .sidebar { - width: 100%; - position: absolute; - z-index: 10; - transform: translateX(-100%); - transition: transform 0.3s ease; - } - - .sidebar.open { - transform: translateX(0); - } - - .close-sidebar { - display: block; - } - - .menu-button { - display: block; - } - - .chat-container { - width: 100%; - } - - .message-content { - max-width: 85%; - } -} - -/* Animation for new messages */ -@keyframes slideIn { - from { - opacity: 0; - transform: translateY(10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.message-wrapper { - animation: slideIn 0.3s ease; -} diff --git a/examples/chat-room-next-js/src/app/layout.tsx b/examples/chat-room-next-js/src/app/layout.tsx deleted file mode 100644 index 9e2c27453e..0000000000 --- a/examples/chat-room-next-js/src/app/layout.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); - -export const metadata: Metadata = { - title: "Rivet Chat", - description: "Real-time chat powered by RivetKit", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/examples/chat-room-next-js/src/app/page.module.css b/examples/chat-room-next-js/src/app/page.module.css deleted file mode 100644 index b21e451703..0000000000 --- a/examples/chat-room-next-js/src/app/page.module.css +++ /dev/null @@ -1,32 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-family: var(--font-geist-sans); -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; -} \ No newline at end of file diff --git a/examples/chat-room-next-js/src/app/page.tsx b/examples/chat-room-next-js/src/app/page.tsx deleted file mode 100644 index 8dd238dd61..0000000000 --- a/examples/chat-room-next-js/src/app/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ChatRoom } from "@/components/ChatRoom"; - -export default function Home() { - return ; -} diff --git a/examples/chat-room-next-js/src/components/ChatRoom.tsx b/examples/chat-room-next-js/src/components/ChatRoom.tsx deleted file mode 100644 index 69388ee6d9..0000000000 --- a/examples/chat-room-next-js/src/components/ChatRoom.tsx +++ /dev/null @@ -1,227 +0,0 @@ -"use client"; - -import { createRivetKit } from "@rivetkit/next-js/client"; -import { useEffect, useState, useRef } from "react"; -import type { Message, registry } from "../rivet/registry"; - -export const { useActor } = createRivetKit({ - endpoint: process.env.NEXT_PUBLIC_RIVET_ENDPOINT ?? "http://localhost:3000/api/rivet", - namespace: process.env.NEXT_PUBLIC_RIVET_NAMESPACE, - token: process.env.NEXT_PUBLIC_RIVET_TOKEN, -}); - -// Generate avatar color based on username -const getAvatarColor = (username: string) => { - const colors = [ - "#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7", - "#DDA0DD", "#98D8C8", "#F7DC6F", "#BB8FCE", "#85C1E9" - ]; - const index = username.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0); - return colors[index % colors.length]; -}; - -// Generate initials from username -const getInitials = (username: string) => { - return username.split(' ').map(name => name[0]).join('').toUpperCase().slice(0, 2); -}; - -export function ChatRoom() { - const [roomId, setRoomId] = useState("general"); - const [username, setUsername] = useState("User"); - const [input, setInput] = useState(""); - const [messages, setMessages] = useState([]); - const [isConnected, setIsConnected] = useState(false); - const [sidebarOpen, setSidebarOpen] = useState(false); - const messagesEndRef = useRef(null); - - const chatRoom = useActor({ - name: "chatRoom", - key: [roomId], - }); - - useEffect(() => { - if (chatRoom.connection) { - setIsConnected(true); - chatRoom.connection.getHistory().then(setMessages); - } else { - setIsConnected(false); - } - }, [chatRoom.connection]); - - chatRoom.useEvent("newMessage", (message: Message) => { - setMessages((prev) => [...prev, message]); - }); - - // Auto-scroll to bottom when new messages arrive - useEffect(() => { - messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); - }, [messages]); - - const sendMessage = async () => { - if (chatRoom.connection && input.trim()) { - await chatRoom.connection.sendMessage(username, input); - setInput(""); - } - }; - - const handleKeyPress = (e: React.KeyboardEvent) => { - if (e.key === "Enter" && !e.shiftKey) { - e.preventDefault(); - sendMessage(); - } - }; - - const formatTime = (timestamp: number) => { - const date = new Date(timestamp); - const now = new Date(); - const isToday = date.toDateString() === now.toDateString(); - - if (isToday) { - return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); - } else { - return date.toLocaleDateString() + ' ' + date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); - } - }; - - return ( -
-
-
-
-

Rivet Chat

-
- -
- -
-
- - setUsername(e.target.value)} - placeholder="Enter your username" - className="setting-input" - /> -
-
- - setRoomId(e.target.value)} - placeholder="Enter room name" - className="setting-input" - /> -
-
- -
-
-
- {isConnected ? 'Connected' : 'Disconnected'} -
-
-
- -
-
- -
-

#{roomId}

-

{messages.length} messages

-
-
- -
- {messages.length === 0 ? ( -
-
💭
-

Welcome to #{roomId}

-

Start the conversation by sending a message below.

-
- ) : ( -
- {messages.map((msg, i) => { - const isCurrentUser = msg.sender === username; - const prevMessage = i > 0 ? messages[i - 1] : null; - const showAvatar = !prevMessage || prevMessage.sender !== msg.sender; - - return ( -
- {!isCurrentUser && showAvatar && ( -
-
- {getInitials(msg.sender)} -
-
- )} - {!isCurrentUser && !showAvatar &&
} - -
- {!isCurrentUser && showAvatar && ( -
{msg.sender}
- )} -
-
{msg.text}
-
- {formatTime(msg.timestamp)} -
-
-
-
- ); - })} -
-
- )} -
- -
-
- setInput(e.target.value)} - onKeyPress={handleKeyPress} - placeholder="Type a message..." - disabled={!isConnected} - className="message-input" - /> - -
-
-
-
- ); -} diff --git a/examples/chat-room-next-js/src/rivet/registry.ts b/examples/chat-room-next-js/src/rivet/registry.ts deleted file mode 100644 index 40ab853108..0000000000 --- a/examples/chat-room-next-js/src/rivet/registry.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { actor, setup } from "rivetkit"; - -export type Message = { sender: string; text: string; timestamp: number }; - -export const chatRoom = actor({ - options: { - sleepTimeout: 2000, - }, - // Persistent state that survives restarts - state: { - messages: [] as Message[], - }, - - actions: { - // Callable functions from clients - sendMessage: (c, sender: string, text: string) => { - const message = { sender, text, timestamp: Date.now() }; - // State changes are automatically persisted - c.state.messages.push(message); - // Send events to all connected clients - c.broadcast("newMessage", message); - return message; - }, - - getHistory: (c) => c.state.messages, - }, -}); - -// Register actors for use -export const registry = setup({ - use: { chatRoom }, -}); diff --git a/examples/chat-room-next-js/tsconfig.json b/examples/chat-room-next-js/tsconfig.json deleted file mode 100644 index 7df89e76da..0000000000 --- a/examples/chat-room-next-js/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/examples/chat-room-next-js/turbo.json b/examples/chat-room-next-js/turbo.json deleted file mode 100644 index 29d4cb2625..0000000000 --- a/examples/chat-room-next-js/turbo.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "extends": ["//"] -} diff --git a/examples/cross-actor-actions/frontend/App.tsx b/examples/cross-actor-actions/frontend/App.tsx index 0e85bd01dd..8fc5bda653 100644 --- a/examples/cross-actor-actions/frontend/App.tsx +++ b/examples/cross-actor-actions/frontend/App.tsx @@ -1,6 +1,6 @@ import { createClient } from "rivetkit/client"; import { useEffect, useState } from "react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; const client = createClient(`${window.location.origin}/api/rivet`); diff --git a/examples/cross-actor-actions/frontend/main.tsx b/examples/cross-actor-actions/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/cross-actor-actions/frontend/main.tsx +++ b/examples/cross-actor-actions/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/cross-actor-actions/package.json b/examples/cross-actor-actions/package.json index 8ae296b9e7..9cd8bc13b3 100644 --- a/examples/cross-actor-actions/package.json +++ b/examples/cross-actor-actions/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/cross-actor-actions/src/registry.ts b/examples/cross-actor-actions/src/actors.ts similarity index 100% rename from examples/cross-actor-actions/src/registry.ts rename to examples/cross-actor-actions/src/actors.ts diff --git a/examples/cross-actor-actions/src/server.ts b/examples/cross-actor-actions/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/cross-actor-actions/src/server.ts +++ b/examples/cross-actor-actions/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/cross-actor-actions/tests/cross-actor.test.ts b/examples/cross-actor-actions/tests/cross-actor.test.ts index 27c56d81f3..6a4cea9e1f 100644 --- a/examples/cross-actor-actions/tests/cross-actor.test.ts +++ b/examples/cross-actor-actions/tests/cross-actor.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; describe("cross-actor communication", () => { test("checkout reserves items from inventory", async (ctx) => { diff --git a/examples/cross-actor-actions/tsconfig.json b/examples/cross-actor-actions/tsconfig.json index ebf8f3a6e1..60ca008361 100644 --- a/examples/cross-actor-actions/tsconfig.json +++ b/examples/cross-actor-actions/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "tests/**/*"] + "include": ["src/**/*", "frontend/**/*", "tests/**/*"] } diff --git a/examples/cross-actor-actions/vercel.json b/examples/cross-actor-actions/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/cross-actor-actions/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/cursors-raw-websocket/frontend/App.tsx b/examples/cursors-raw-websocket/frontend/App.tsx index 923fc77d22..ad6b5bc3f7 100644 --- a/examples/cursors-raw-websocket/frontend/App.tsx +++ b/examples/cursors-raw-websocket/frontend/App.tsx @@ -4,7 +4,7 @@ import type { CursorPosition, TextLabel, registry, -} from "../src/registry"; +} from "../src/actors.ts"; const rivetUrl = "http://localhost:6420"; diff --git a/examples/cursors-raw-websocket/frontend/main.tsx b/examples/cursors-raw-websocket/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/cursors-raw-websocket/frontend/main.tsx +++ b/examples/cursors-raw-websocket/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/cursors-raw-websocket/package.json b/examples/cursors-raw-websocket/package.json index 5498933772..ebd6f33572 100644 --- a/examples/cursors-raw-websocket/package.json +++ b/examples/cursors-raw-websocket/package.json @@ -15,16 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "@types/prompts": "^2", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "prompts": "^2.4.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -32,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/cursors-raw-websocket/src/registry.ts b/examples/cursors-raw-websocket/src/actors.ts similarity index 100% rename from examples/cursors-raw-websocket/src/registry.ts rename to examples/cursors-raw-websocket/src/actors.ts diff --git a/examples/cursors-raw-websocket/src/server.ts b/examples/cursors-raw-websocket/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/cursors-raw-websocket/src/server.ts +++ b/examples/cursors-raw-websocket/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/cursors-raw-websocket/tests/cursors.test.ts b/examples/cursors-raw-websocket/tests/cursors.test.ts index b08da0425e..d33378284f 100644 --- a/examples/cursors-raw-websocket/tests/cursors.test.ts +++ b/examples/cursors-raw-websocket/tests/cursors.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; test("Cursor room can be created and initialized", async (ctx: any) => { const { client } = await setupTest(ctx, registry); diff --git a/examples/cursors-raw-websocket/tsconfig.json b/examples/cursors-raw-websocket/tsconfig.json index b2ac3f62a7..9305d7b2d1 100644 --- a/examples/cursors-raw-websocket/tsconfig.json +++ b/examples/cursors-raw-websocket/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "actors/**/*", "tests/**/*"] + "include": ["src/**/*", "frontend/**/*", "tests/**/*"] } diff --git a/examples/cursors-raw-websocket/vercel.json b/examples/cursors-raw-websocket/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/cursors-raw-websocket/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/cursors/frontend/App.tsx b/examples/cursors/frontend/App.tsx index 6285f42ed4..354ecc8e2f 100644 --- a/examples/cursors/frontend/App.tsx +++ b/examples/cursors/frontend/App.tsx @@ -4,7 +4,7 @@ import type { CursorPosition, TextLabel, registry, -} from "../src/registry"; +} from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/cursors/frontend/main.tsx b/examples/cursors/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/cursors/frontend/main.tsx +++ b/examples/cursors/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/cursors/package.json b/examples/cursors/package.json index e027aa9e23..1ad7ed723e 100644 --- a/examples/cursors/package.json +++ b/examples/cursors/package.json @@ -15,16 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "@types/prompts": "^2", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "prompts": "^2.4.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -32,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/cursors/src/registry.ts b/examples/cursors/src/actors.ts similarity index 100% rename from examples/cursors/src/registry.ts rename to examples/cursors/src/actors.ts diff --git a/examples/cursors/src/server.ts b/examples/cursors/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/cursors/src/server.ts +++ b/examples/cursors/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/cursors/tsconfig.json b/examples/cursors/tsconfig.json index b2ac3f62a7..4b8474923a 100644 --- a/examples/cursors/tsconfig.json +++ b/examples/cursors/tsconfig.json @@ -37,7 +37,10 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "actors/**/*", "tests/**/*"] + "include": ["src/**/*", "frontend/**/*"] } diff --git a/examples/cursors/vercel.json b/examples/cursors/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/cursors/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/custom-serverless/package.json b/examples/custom-serverless/package.json index 7fe808ee56..4fc4882e34 100644 --- a/examples/custom-serverless/package.json +++ b/examples/custom-serverless/package.json @@ -4,24 +4,25 @@ "private": true, "type": "module", "scripts": { - "dev": "srvx --import tsx src/server.ts", + "dev": "npx srvx --import tsx src/server.ts", + "start": "npx srvx --import tsx src/server.ts", "check-types": "tsc --noEmit", - "connect": "tsx scripts/connect.ts", "test": "vitest run", - "build": "tsup", - "start": "srvx dist/server.js" + "build": "tsup" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "srvx": "^0.10.0", + "tsup": "^8.0.0", "tsx": "^3.12.7", "typescript": "^5.7.3", "vitest": "^3.1.1" }, "dependencies": { - "rivetkit": "*" + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", + "hono": "^4.0.0", + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/custom-serverless/scripts/connect.ts b/examples/custom-serverless/scripts/connect.ts deleted file mode 100644 index 2d19e1699a..0000000000 --- a/examples/custom-serverless/scripts/connect.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createClient } from "rivetkit/client"; -import type { Registry } from "../src/registry"; - -async function main() { - const client = createClient("http://localhost:3000/api/rivet"); - - const counter = client.counter.getOrCreate(); - - // counter.on("newCount", (count: number) => console.log("Event:", count)); - - for (let i = 0; i < 5; i++) { - const out = await counter.increment(5); - console.log("RPC:", out); - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - await new Promise((resolve) => setTimeout(resolve, 10000)); - // await counter.dispose(); -} - -main(); diff --git a/examples/custom-serverless/src/registry.ts b/examples/custom-serverless/src/actors.ts similarity index 100% rename from examples/custom-serverless/src/registry.ts rename to examples/custom-serverless/src/actors.ts diff --git a/examples/custom-serverless/src/server.ts b/examples/custom-serverless/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/custom-serverless/src/server.ts +++ b/examples/custom-serverless/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/custom-serverless/tests/counter.test.ts b/examples/custom-serverless/tests/counter.test.ts index 89ba4667e0..d9b3715ef5 100644 --- a/examples/custom-serverless/tests/counter.test.ts +++ b/examples/custom-serverless/tests/counter.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { expect, test } from "vitest"; -import { registry } from "../src/registry"; +import { registry } from "../src/actors.ts"; test("it should count", async (test) => { const { client } = await setupTest(test, registry); diff --git a/examples/custom-serverless/tsconfig.json b/examples/custom-serverless/tsconfig.json index fa0f0ab2ad..2021c0a4fd 100644 --- a/examples/custom-serverless/tsconfig.json +++ b/examples/custom-serverless/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*.ts", "scripts/**/*.ts", "tests/**/*.ts"] + "include": ["src/**/*.ts", "tests/**/*.ts"] } diff --git a/examples/custom-serverless/vercel.json b/examples/custom-serverless/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/custom-serverless/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/deno/.gitignore b/examples/deno/.gitignore deleted file mode 100644 index 79b7a1192f..0000000000 --- a/examples/deno/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.actorcore -node_modules \ No newline at end of file diff --git a/examples/deno/README.md b/examples/deno/README.md deleted file mode 100644 index e96f20ec62..0000000000 --- a/examples/deno/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Deno Example - -Example project demonstrating basic actor state management and RPC calls using Deno runtime. - -## Getting Started - -```sh -git clone https://github.com/rivet-dev/rivet.git -cd rivet/examples/deno -npm install -npm run dev -``` - - -## Features - -- **Deno runtime support**: Run Rivet Actors on Deno for modern JavaScript/TypeScript execution -- **Type-safe actions**: Define and call actor actions with full TypeScript type safety -- **Actor state management**: Persistent state automatically managed across actor lifecycle -- **RPC-style communication**: Call actor methods from client code with automatic serialization - -## Implementation - -This example demonstrates using Rivet Actors with the Deno runtime: - -- **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/deno/src/backend/registry.ts)): Shows how to configure actors for Deno runtime - -## Resources - -Read more about [actions](/docs/actors/actions), [state](/docs/actors/state), and [setup](/docs/setup). - -## License - -MIT diff --git a/examples/deno/deno.json b/examples/deno/deno.json deleted file mode 100644 index cd6d38569b..0000000000 --- a/examples/deno/deno.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "tasks": { - "dev": "deno run --allow-env --allow-sys --allow-read --allow-ffi --allow-net src/server.ts", - "check-types": "deno check src/**/*.ts", - "test": "deno test --allow-env --allow-sys --allow-read --allow-ffi --allow-net", - "connect": "deno run --allow-env --allow-sys --allow-read --allow-ffi --allow-net scripts/connect.ts" - }, - "imports": { - "os": "node:os", - "path": "node:path", - "fs": "node:fs", - "fs/promises": "node:fs/promises", - "crypto": "node:crypto", - "rivetkit": "../../rivetkit-typescript/packages/rivetkit/dist/tsup/mod.js", - "rivetkit/client": "../../rivetkit-typescript/packages/rivetkit/dist/tsup/client/mod.js", - "hono": "npm:hono@4.9.8", - "hono/ws": "npm:hono@4.9.8/ws", - "hono/deno": "npm:hono@4.9.8/deno" - }, - "compilerOptions": { - "skipLibCheck": true, - "strict": false, - "noImplicitAny": false - } -} diff --git a/examples/deno/package.json b/examples/deno/package.json deleted file mode 100644 index 0ffd222a07..0000000000 --- a/examples/deno/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "//": "This package.json is required, once is released with updated engine-runner packages, it can be converted to deno.json", - "name": "example-deno", - "version": "2.0.21", - "private": true, - "type": "module", - "scripts": { - "dev": "deno run --allow-all src/server.ts", - "check-types": "command -v deno >/dev/null 2>&1 && deno task check-types || echo 'Skipping deno check-types (deno not installed)'", - "connect": "deno run --allow-all scripts/connect.ts", - "build": "tsc" - }, - "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", - "@types/deno": "^2.3.0", - "@types/node": "^24.5.2" - }, - "stableVersion": "0.8.0", - "dependencies": { - "hono": "4.9.8", - "rivetkit": "*" - }, - "template": { - "technologies": [ - "deno", - "typescript" - ], - "tags": [], - "noFrontend": true - }, - "license": "MIT" -} diff --git a/examples/deno/scripts/connect.ts b/examples/deno/scripts/connect.ts deleted file mode 100644 index ca63be72e3..0000000000 --- a/examples/deno/scripts/connect.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createClient } from "rivetkit/client"; -import type { Registry } from "../src/registry.ts"; - -async function main() { - const client = createClient("http://localhost:8080"); - - const counter = client.counter.getOrCreate().connect(); - - for (let i = 0; i < 5; i++) { - const out = await counter.increment(5); - console.log("RPC:", out); - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } -} - -main(); diff --git a/examples/deno/src/registry.ts b/examples/deno/src/registry.ts deleted file mode 100644 index 44707e2fef..0000000000 --- a/examples/deno/src/registry.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { actor, setup } from "rivetkit"; - -const counter = actor({ - state: { - count: 0, - }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - c.broadcast("newCount", c.state.count); - return c.state.count; - }, - getCount: (c) => { - return c.state.count; - }, - }, -}); - -export const registry = setup({ - use: { counter }, -}); - -export type Registry = typeof registry; diff --git a/examples/deno/src/server.ts b/examples/deno/src/server.ts deleted file mode 100644 index 5f15f80492..0000000000 --- a/examples/deno/src/server.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { registry } from "./registry.ts"; - -export default registry.serve(); diff --git a/examples/deno/tsconfig.json b/examples/deno/tsconfig.json deleted file mode 100644 index 2874d307be..0000000000 --- a/examples/deno/tsconfig.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "lib": ["esnext", "DOM"], - /* Specify what JSX code is generated. */ - "jsx": "react-jsx", - - /* Specify what module code is generated. */ - "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ - "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ - "types": ["deno"], - /* Enable importing .json files */ - "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ - "checkJs": false, - - /* Disable emitting files from a compilation. */ - "noEmit": true, - - /* Ensure that each file can be safely transpiled without relying on other imports. */ - "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ - "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ - "forceConsistentCasingInFileNames": true, - /* Allow imports to include TypeScript file extensions. */ - "allowImportingTsExtensions": true, - - /* Enable all strict type-checking options. */ - "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true - }, - "include": ["src/**/*.ts", "scripts/**/*.ts", "tests/**/*.ts"] -} diff --git a/examples/deno/turbo.json b/examples/deno/turbo.json deleted file mode 100644 index 29d4cb2625..0000000000 --- a/examples/deno/turbo.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "extends": ["//"] -} diff --git a/examples/drizzle/package.json b/examples/drizzle/package.json index d58b6d2db2..3f276675f0 100644 --- a/examples/drizzle/package.json +++ b/examples/drizzle/package.json @@ -4,22 +4,26 @@ "private": true, "type": "module", "scripts": { - "dev": "tsx --watch src/server.ts", + "dev": "npx srvx --import tsx src/server.ts", + "start": "npx srvx --import tsx src/server.ts", "check-types": "tsc --noEmit", - "build": "tsc" + "build": "tsup" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "rivetkit": "*", + "tsup": "^8.0.0", "tsx": "^3.12.7", "typescript": "^5.5.2" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/db": "*", "drizzle-kit": "^0.31.2", - "drizzle-orm": "^0.44.2" + "drizzle-orm": "^0.44.2", + "hono": "^4.0.0", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/drizzle/src/registry.ts b/examples/drizzle/src/actors.ts similarity index 81% rename from examples/drizzle/src/registry.ts rename to examples/drizzle/src/actors.ts index cabe7f8891..29d81e0a6c 100644 --- a/examples/drizzle/src/registry.ts +++ b/examples/drizzle/src/actors.ts @@ -1,7 +1,7 @@ // import { actor, setup } from "rivetkit"; // import { db } from "@rivetkit/db/drizzle"; -// import * as schema from "./db/schema"; -// import migrations from "../drizzle/migrations"; +// import * as schema from "./db/schema.ts"; +// import migrations from "../drizzle/migrations.js"; // export const counter = actor({ // db: db({ schema, migrations }), diff --git a/examples/drizzle/src/server.ts b/examples/drizzle/src/server.ts index 5be165d642..910ddc5079 100644 --- a/examples/drizzle/src/server.ts +++ b/examples/drizzle/src/server.ts @@ -1,7 +1,6 @@ -// import { registry } from "./registry"; -// import { createMemoryDriver } from "@rivetkit/memory"; -// import { serve } from "@rivetkit/nodejs"; +// import { Hono } from "hono"; +// import { registry } from "./actors.ts"; -// serve(registry, { -// driver: createMemoryDriver(), -// }); +// const app = new Hono(); +// app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +// export default app; diff --git a/examples/drizzle/tsconfig.json b/examples/drizzle/tsconfig.json index b87282c747..de8a4f110c 100644 --- a/examples/drizzle/tsconfig.json +++ b/examples/drizzle/tsconfig.json @@ -38,7 +38,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, "include": ["src/**/*"] } diff --git a/examples/hono-bun/tsup.config.ts b/examples/drizzle/tsup.config.ts similarity index 100% rename from examples/hono-bun/tsup.config.ts rename to examples/drizzle/tsup.config.ts diff --git a/examples/drizzle/vercel.json b/examples/drizzle/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/drizzle/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/elysia/package.json b/examples/elysia/package.json index 06707516c4..443fd6311b 100644 --- a/examples/elysia/package.json +++ b/examples/elysia/package.json @@ -4,30 +4,27 @@ "private": true, "type": "module", "scripts": { - "dev": "bun --watch src/server.ts", - "start": "bun src/server.ts", + "dev": "npx srvx --import tsx src/server.ts", + "start": "npx srvx --import tsx src/server.ts", "check-types": "tsc --noEmit", "build": "tsc" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "rivetkit": "*", + "tsx": "^3.12.7", "typescript": "^5.5.2" }, "dependencies": { - "@rivetkit/react": "*", - "@sinclair/typebox": "^0.34.15", - "elysia": "^1.3.5", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", + "elysia": "^1.4.0", + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { "technologies": [ "elysia", - "bun", "typescript" ], "tags": [], diff --git a/examples/elysia/src/registry.ts b/examples/elysia/src/actors.ts similarity index 100% rename from examples/elysia/src/registry.ts rename to examples/elysia/src/actors.ts diff --git a/examples/elysia/src/server.ts b/examples/elysia/src/server.ts index e11d1fb1b4..92446c204d 100644 --- a/examples/elysia/src/server.ts +++ b/examples/elysia/src/server.ts @@ -1,21 +1,15 @@ import { Elysia } from "elysia"; import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; +import { registry } from "./actors.ts"; -registry.startRunner(); const client = createClient(); -// Setup router -new Elysia() - // Example HTTP endpoint - .post("/increment/:name", async ({ params }) => { - const name = params.name; - - const counter = client.counter.getOrCreate(name); +const app = new Elysia() + .all("/api/rivet/*", (c) => registry.handler(c.request)) + .get("/increment/:name", async ({ params }) => { + const counter = client.counter.getOrCreate(params.name); const newCount = await counter.increment(1); - return `New Count: ${newCount}`; - }) - .listen(8080); + }); -console.log("Listening at http://localhost:8080"); +export default app; diff --git a/examples/elysia/tsconfig.json b/examples/elysia/tsconfig.json index a6077d5c07..d9190666b8 100644 --- a/examples/elysia/tsconfig.json +++ b/examples/elysia/tsconfig.json @@ -1,43 +1,22 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ "lib": ["esnext"], - /* Specify what JSX code is generated. */ "jsx": "react-jsx", - - /* Specify what module code is generated. */ "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ "types": ["node"], - /* Enable importing .json files */ "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ "checkJs": false, - - /* Disable emitting files from a compilation. */ "noEmit": true, - - /* Ensure that each file can be safely transpiled without relying on other imports. */ "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ "forceConsistentCasingInFileNames": true, - - /* Enable all strict type-checking options. */ "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, "include": ["src/**/*"] } diff --git a/examples/elysia/vercel.json b/examples/elysia/vercel.json new file mode 100644 index 0000000000..9da8bf302c --- /dev/null +++ b/examples/elysia/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "elysia" +} diff --git a/examples/experimental-durable-streams-ai-agent/package.json b/examples/experimental-durable-streams-ai-agent/package.json index b98ccd4323..d74b91e819 100644 --- a/examples/experimental-durable-streams-ai-agent/package.json +++ b/examples/experimental-durable-streams-ai-agent/package.json @@ -16,14 +16,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -35,11 +32,15 @@ "@durable-streams/client": "https://pkg.pr.new/rivet-dev/durable-streams/@durable-streams/client@0323b8b", "@durable-streams/server": "https://pkg.pr.new/rivet-dev/durable-streams/@durable-streams/server@0323b8b", "@durable-streams/writer": "https://pkg.pr.new/rivet-dev/durable-streams/@durable-streams/writer@0323b8b", + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", "ai": "^4.0.38", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "rivetkit": "*", + "srvx": "^0.10.0", "zod": "^4.1.0" }, "template": { diff --git a/examples/experimental-durable-streams-ai-agent/src/registry.ts b/examples/experimental-durable-streams-ai-agent/src/actors.ts similarity index 98% rename from examples/experimental-durable-streams-ai-agent/src/registry.ts rename to examples/experimental-durable-streams-ai-agent/src/actors.ts index 7c5936878a..009615e09a 100644 --- a/examples/experimental-durable-streams-ai-agent/src/registry.ts +++ b/examples/experimental-durable-streams-ai-agent/src/actors.ts @@ -2,8 +2,8 @@ import { anthropic } from "@ai-sdk/anthropic"; import type { DurableStream } from "@durable-streams/client"; import { streamText } from "ai"; import { type ActorContextOf, actor, setup } from "rivetkit"; -import { getStreams } from "./shared/streams"; -import type { PromptMessage, ResponseChunk } from "./shared/types"; +import { getStreams } from "./shared/streams.ts"; +import type { PromptMessage, ResponseChunk } from "./shared/types.ts"; export const aiAgent = actor({ createState: (_c, input: { conversationId: string }) => ({ diff --git a/examples/experimental-durable-streams-ai-agent/src/server.ts b/examples/experimental-durable-streams-ai-agent/src/server.ts index 19d3331f77..487fdb0dab 100644 --- a/examples/experimental-durable-streams-ai-agent/src/server.ts +++ b/examples/experimental-durable-streams-ai-agent/src/server.ts @@ -1,7 +1,10 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; if (!process.env.ANTHROPIC_API_KEY) { throw new Error("ANTHROPIC_API_KEY environment variable is required"); } -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/experimental-durable-streams-ai-agent/tests/durable-streams.test.ts b/examples/experimental-durable-streams-ai-agent/tests/durable-streams.test.ts index 63a380bab5..5ce37d0fd9 100644 --- a/examples/experimental-durable-streams-ai-agent/tests/durable-streams.test.ts +++ b/examples/experimental-durable-streams-ai-agent/tests/durable-streams.test.ts @@ -39,7 +39,7 @@ if (!process.env.ANTHROPIC_API_KEY) { } // Import registry after environment is set up -const { registry } = await import("../src/backend/registry"); +const { registry } = await import("../src/actors.ts"); test("AI Agent initializes with conversation ID", async (ctx) => { const { client } = await setupTest(ctx, registry); diff --git a/examples/experimental-durable-streams-ai-agent/tsconfig.json b/examples/experimental-durable-streams-ai-agent/tsconfig.json index 31be7ade7f..986974447c 100644 --- a/examples/experimental-durable-streams-ai-agent/tsconfig.json +++ b/examples/experimental-durable-streams-ai-agent/tsconfig.json @@ -6,16 +6,11 @@ "module": "esnext", "moduleResolution": "bundler", "types": ["node", "vite/client"], - "resolveJsonModule": true, - "allowJs": true, - "checkJs": false, "noEmit": true, - "isolatedModules": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, "strict": true, - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*", "tests/**/*"] } diff --git a/examples/experimental-durable-streams-ai-agent/vercel.json b/examples/experimental-durable-streams-ai-agent/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/experimental-durable-streams-ai-agent/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/express/.gitignore b/examples/express/.gitignore deleted file mode 100644 index e985853ed8..0000000000 --- a/examples/express/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.vercel diff --git a/examples/express/README.md b/examples/express/README.md deleted file mode 100644 index 945dc034d0..0000000000 --- a/examples/express/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Express Integration - -Example project demonstrating Express web framework integration. - -## Getting Started - -```sh -git clone https://github.com/rivet-dev/rivet.git -cd rivet/examples/express -npm install -npm run dev -``` - - -## Features - -- **Express web framework**: Use Express for HTTP routing and middleware with actors -- **Familiar API**: Standard Express patterns and middleware work seamlessly -- **Actor integration**: Call actor actions from Express route handlers -- **Type-safe communication**: TypeScript support for actor method calls - -## Implementation - -This example demonstrates integrating Express web framework with Rivet Actors: - -- **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/express/src/backend/registry.ts)): Shows how to use Express middleware and routing with actors - -## Resources - -Read more about [actions](/docs/actors/actions) and [setup](/docs/setup). - -## License - -MIT diff --git a/examples/express/package.json b/examples/express/package.json deleted file mode 100644 index 8614b83389..0000000000 --- a/examples/express/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "example-express", - "version": "2.0.21", - "private": true, - "type": "module", - "scripts": { - "build": "tsc", - "dev": "tsx --watch src/server.ts", - "start": "tsx src/server.ts", - "check-types": "tsc --noEmit" - }, - "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", - "@types/express": "^4.17.21", - "@types/node": "^22.13.9", - "rivetkit": "*", - "tsx": "^3.12.7", - "typescript": "^5.5.2" - }, - "dependencies": { - "@rivetkit/react": "*", - "express": "^5.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "stableVersion": "0.8.0", - "template": { - "technologies": [ - "express", - "typescript" - ], - "tags": [], - "noFrontend": true - }, - "license": "MIT" -} diff --git a/examples/express/src/server.ts b/examples/express/src/server.ts deleted file mode 100644 index 481442cee7..0000000000 --- a/examples/express/src/server.ts +++ /dev/null @@ -1,26 +0,0 @@ -import express from "express"; -import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; - -// Start RivetKit -registry.startRunner(); -const client = createClient(); - -// Setup router -const app = express(); - -// Example HTTP endpoint -app.post("/increment/:name", async (req, res) => { - const name = req.params.name; - - const counter = client.counter.getOrCreate(name); - const newCount = await counter.increment(1); - - res.send(`New Count: ${newCount}`); -}); - -app.listen(8080, () => { - console.log("Listening at http://localhost:8080"); -}); - -export default app; diff --git a/examples/express/tsconfig.json b/examples/express/tsconfig.json deleted file mode 100644 index 7616e4a4f4..0000000000 --- a/examples/express/tsconfig.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "lib": ["esnext"], - /* Specify what JSX code is generated. */ - "jsx": "react-jsx", - - /* Specify what module code is generated. */ - "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ - "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ - "types": ["node"], - /* Enable importing .json files */ - "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ - "checkJs": false, - /* Ensure that each file can be safely transpiled without relying on other imports. */ - "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ - "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ - "forceConsistentCasingInFileNames": true, - - /* Enable all strict type-checking options. */ - "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true, - "outDir": "dist" - }, - "include": ["./src"] -} diff --git a/examples/express/turbo.json b/examples/express/turbo.json deleted file mode 100644 index 40713bfcb5..0000000000 --- a/examples/express/turbo.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "extends": ["//"], - "tasks": { - "build": { - "outputs": ["dist/**"] - } - } -} diff --git a/examples/hono-bun/README.md b/examples/hono-bun/README.md deleted file mode 100644 index f837bc79f8..0000000000 --- a/examples/hono-bun/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Hono + Bun - -Example demonstrating Hono web framework with Bun runtime and React frontend integration. - -## Getting Started - -```sh -git clone https://github.com/rivet-dev/rivet.git -cd rivet/examples/hono-bun -npm install -npm run dev -``` - - -## Features - -- **Hono + Bun runtime**: High-performance HTTP routing with Bun's fast JavaScript runtime -- **React frontend**: Full-stack example with React UI and actor backend -- **Type-safe API**: Full TypeScript type safety from frontend to actor actions -- **Fast development**: Hot reloading and instant startup with Bun - -## Implementation - -This example demonstrates using Hono with Bun runtime and React: - -- **Actor Definition** ([`src/backend/registry.ts`](https://github.com/rivet-dev/rivet/tree/main/examples/hono-bun/src/backend/registry.ts)): Shows how to integrate Hono, Bun, and React with Rivet Actors - -## Resources - -Read more about [actions](/docs/actors/actions) and [setup](/docs/setup). - -## License - -MIT diff --git a/examples/hono-bun/frontend/App.tsx b/examples/hono-bun/frontend/App.tsx deleted file mode 100644 index 5deaf0d08c..0000000000 --- a/examples/hono-bun/frontend/App.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { createRivetKit } from "@rivetkit/react"; -import { useState } from "react"; -import type { registry } from "../src/registry"; - -const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); - -function App() { - const [count, setCount] = useState(0); - const [counterName, setCounterName] = useState("test-counter"); - - const counter = useActor({ - name: "counter", - key: [counterName], - }); - - counter.useEvent("newCount", (x: number) => setCount(x)); - - const increment = async () => { - await counter.connection?.increment(1); - }; - - return ( -
-

Counter: {count}

- setCounterName(e.target.value)} - placeholder="Counter name" - /> - -
- ); -} - -export default App; diff --git a/examples/hono-bun/frontend/index.html b/examples/hono-bun/frontend/index.html deleted file mode 100644 index 991f099ab4..0000000000 --- a/examples/hono-bun/frontend/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Hono Bun Counter - - -
- - - diff --git a/examples/hono-bun/frontend/main.tsx b/examples/hono-bun/frontend/main.tsx deleted file mode 100644 index 6d0ba79496..0000000000 --- a/examples/hono-bun/frontend/main.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import App from "./App"; - -ReactDOM.createRoot(document.getElementById("root")!).render( - - - , -); diff --git a/examples/hono-bun/package.json b/examples/hono-bun/package.json deleted file mode 100644 index cb7c996fc4..0000000000 --- a/examples/hono-bun/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "hono-bun", - "version": "2.0.21", - "private": true, - "type": "module", - "scripts": { - "dev:backend": "bun --watch src/server.ts", - "dev:frontend": "vite", - "dev": "concurrently \"npm run dev:backend\" \"npm run dev:frontend\"", - "start": "srvx --static=../frontend/dist dist/server.js", - "check-types": "tsc --noEmit", - "connect": "tsx scripts/connect.ts", - "build:frontend": "vite build", - "build:backend": "tsup", - "build": "npm run build:backend && npm run build:frontend" - }, - "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", - "@types/bun": "^1.1.15", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", - "@vitejs/plugin-react": "^4.2.0", - "concurrently": "^8.2.2", - "srvx": "^0.10.0", - "tsup": "^8.5.1", - "tsx": "^3.12.7", - "typescript": "^5.5.2", - "vite": "^5.0.0" - }, - "dependencies": { - "@rivetkit/react": "*", - "hono": "^4.7.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "rivetkit": "*" - }, - "keywords": [ - "rivetkit", - "hono", - "bun", - "actor", - "stateful", - "example" - ], - "stableVersion": "0.8.0", - "template": { - "technologies": [ - "hono", - "bun", - "typescript" - ], - "tags": [ - "starter" - ], - "noFrontend": false, - "frontendPort": 5173 - }, - "license": "MIT" -} diff --git a/examples/hono-bun/scripts/connect.ts b/examples/hono-bun/scripts/connect.ts deleted file mode 100644 index fa43fac613..0000000000 --- a/examples/hono-bun/scripts/connect.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createClient } from "rivetkit/client"; -import type { registry } from "../src/registry"; - -async function main() { - const client = createClient( - "http://localhost:8080/api/rivet", - ); - - const counter = client.counter.getOrCreate().connect(); - - counter.on("newCount", (count: number) => console.log("Event:", count)); - - for (let i = 0; i < 5; i++) { - const out = await counter.increment(5); - console.log("RPC:", out); - - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - - await new Promise((resolve) => setTimeout(resolve, 10000)); - await counter.dispose(); -} - -main(); diff --git a/examples/hono-bun/src/server.ts b/examples/hono-bun/src/server.ts deleted file mode 100644 index 680f2f517d..0000000000 --- a/examples/hono-bun/src/server.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Hono } from "hono"; -import { cors } from "hono/cors"; -import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; - -const client = createClient(); - -// Setup router -const app = new Hono(); - -app.use( - "*", - cors({ - origin: "http://localhost:5173", - credentials: true, - }), -); - -app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); - -// Example HTTP endpoint -app.post("/increment/:name", async (c) => { - const name = c.req.param("name"); - - const counter = client.counter.getOrCreate(name); - const newCount = await counter.increment(1); - - return c.text(`New Count: ${newCount}`); -}); - -export default app; - -console.log("Listening at http://localhost:6420"); diff --git a/examples/hono-bun/tsconfig.json b/examples/hono-bun/tsconfig.json deleted file mode 100644 index f980b2621c..0000000000 --- a/examples/hono-bun/tsconfig.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "lib": ["esnext", "dom"], - /* Specify what JSX code is generated. */ - "jsx": "react-jsx", - - /* Specify what module code is generated. */ - "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ - "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ - "types": ["bun"], - /* Enable importing .json files */ - "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ - "checkJs": false, - - /* Disable emitting files from a compilation. */ - "noEmit": true, - - /* Ensure that each file can be safely transpiled without relying on other imports. */ - "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ - "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ - "forceConsistentCasingInFileNames": true, - - /* Enable all strict type-checking options. */ - "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/examples/hono-bun/turbo.json b/examples/hono-bun/turbo.json deleted file mode 100644 index 29d4cb2625..0000000000 --- a/examples/hono-bun/turbo.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "extends": ["//"] -} diff --git a/examples/hono-bun/vite.config.ts b/examples/hono-bun/vite.config.ts deleted file mode 100644 index ef2f55a297..0000000000 --- a/examples/hono-bun/vite.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; - -export default defineConfig({ - plugins: [react()], - root: "frontend", - build: { - outDir: "dist", - emptyOutDir: true, - }, - server: { - host: "0.0.0.0", - port: 5173, - proxy: { - "/api/rivet/": "http://localhost:3000", - }, - }, -}); diff --git a/examples/hono-react/frontend/App.tsx b/examples/hono-react/frontend/App.tsx index 5deaf0d08c..c9e7aba570 100644 --- a/examples/hono-react/frontend/App.tsx +++ b/examples/hono-react/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useState } from "react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/hono-react/frontend/main.tsx b/examples/hono-react/frontend/main.tsx index 6d0ba79496..87bb63120d 100644 --- a/examples/hono-react/frontend/main.tsx +++ b/examples/hono-react/frontend/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import App from "./App"; +import App from "./App.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/examples/hono-react/package.json b/examples/hono-react/package.json index 3a4f61ae9b..b50a7ee1b7 100644 --- a/examples/hono-react/package.json +++ b/examples/hono-react/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.1", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,11 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.1", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", "hono": "^4.7.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/hono-bun/src/registry.ts b/examples/hono-react/src/actors.ts similarity index 100% rename from examples/hono-bun/src/registry.ts rename to examples/hono-react/src/actors.ts diff --git a/examples/hono-react/src/server.ts b/examples/hono-react/src/server.ts index 4652dccc8c..6f45f441e6 100644 --- a/examples/hono-react/src/server.ts +++ b/examples/hono-react/src/server.ts @@ -1,11 +1,9 @@ import { Hono } from "hono"; import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; +import { registry } from "./actors.ts"; -registry.startRunner(); const client = createClient(); -// Setup router const app = new Hono(); // Example HTTP endpoint diff --git a/examples/hono-react/tsconfig.json b/examples/hono-react/tsconfig.json index c480ef1fed..b33a0bce08 100644 --- a/examples/hono-react/tsconfig.json +++ b/examples/hono-react/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*"] + "include": ["src/**/*", "frontend/**/*"] } diff --git a/examples/hono-react/vercel.json b/examples/hono-react/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/hono-react/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/hono/package.json b/examples/hono/package.json index eca5d6992e..237a7d5982 100644 --- a/examples/hono/package.json +++ b/examples/hono/package.json @@ -4,22 +4,22 @@ "private": true, "type": "module", "scripts": { - "dev": "tsx --watch src/server.ts", - "start": "tsx src/server.ts", + "dev": "npx srvx --import tsx src/server.ts", + "start": "npx srvx --import tsx src/server.ts", "check-types": "tsc --noEmit", - "client": "tsx scripts/client.ts", "build": "tsc" }, "devDependencies": { - "@hono/node-server": "^1.19.1", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "rivetkit": "*", "tsx": "^3.12.7", "typescript": "^5.5.2" }, "dependencies": { - "hono": "^4.7.0" + "@hono/node-server": "^1.19.1", + "@hono/node-ws": "^1.3.0", + "hono": "^4.7.0", + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/hono/scripts/client.ts b/examples/hono/scripts/client.ts deleted file mode 100644 index 1c194f5f92..0000000000 --- a/examples/hono/scripts/client.ts +++ /dev/null @@ -1,9 +0,0 @@ -async function main() { - const endpoint = process.env.RIVETKIT_ENDPOINT || "http://localhost:8080"; - const res = await fetch(`${endpoint}/increment/foo`, { - method: "POST", - }); - console.log("Output:", await res.text()); -} - -main(); diff --git a/examples/express/src/registry.ts b/examples/hono/src/actors.ts similarity index 100% rename from examples/express/src/registry.ts rename to examples/hono/src/actors.ts diff --git a/examples/hono/src/server.ts b/examples/hono/src/server.ts index 1a01b91538..f6199d9a05 100644 --- a/examples/hono/src/server.ts +++ b/examples/hono/src/server.ts @@ -1,13 +1,9 @@ -import { serve } from "@hono/node-server"; import { Hono } from "hono"; import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; +import { registry } from "./actors.ts"; -// Start RivetKit -registry.startRunner(); const client = createClient(); -// Setup router const app = new Hono(); // Example HTTP endpoint @@ -20,5 +16,6 @@ app.post("/increment/:name", async (c) => { return c.text(`New Count: ${newCount}`); }); -serve({ fetch: app.fetch, port: 8080 }); -console.log("Listening on port 8080"); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); + +export default app; diff --git a/examples/hono/tsconfig.json b/examples/hono/tsconfig.json index a6077d5c07..54af993bb4 100644 --- a/examples/hono/tsconfig.json +++ b/examples/hono/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, "include": ["src/**/*"] } diff --git a/examples/hono/vercel.json b/examples/hono/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/hono/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/kitchen-sink/frontend/App.tsx b/examples/kitchen-sink/frontend/App.tsx index cb0a25ee2e..b071ba287f 100644 --- a/examples/kitchen-sink/frontend/App.tsx +++ b/examples/kitchen-sink/frontend/App.tsx @@ -1,8 +1,8 @@ import { createClient } from "@rivetkit/react"; import { useState, useMemo, useEffect } from "react"; -import type { Registry } from "../src/registry"; -import ConnectionScreen from "./components/ConnectionScreen"; -import InteractionScreen from "./components/InteractionScreen"; +import type { Registry } from "../src/actors.ts"; +import ConnectionScreen from "./components/ConnectionScreen.tsx"; +import InteractionScreen from "./components/InteractionScreen.tsx"; export interface AppState { // Configuration diff --git a/examples/kitchen-sink/frontend/components/ConnectionScreen.tsx b/examples/kitchen-sink/frontend/components/ConnectionScreen.tsx index f6d5386da1..80926b4922 100644 --- a/examples/kitchen-sink/frontend/components/ConnectionScreen.tsx +++ b/examples/kitchen-sink/frontend/components/ConnectionScreen.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../App"; +import type { AppState } from "../App.tsx"; interface ConnectionScreenProps { onConnect: (config: AppState) => void; diff --git a/examples/kitchen-sink/frontend/components/InteractionScreen.tsx b/examples/kitchen-sink/frontend/components/InteractionScreen.tsx index ff64c10e44..0ea59cc24b 100644 --- a/examples/kitchen-sink/frontend/components/InteractionScreen.tsx +++ b/examples/kitchen-sink/frontend/components/InteractionScreen.tsx @@ -1,13 +1,13 @@ import { useState } from "react"; -import type { AppState } from "../App"; -import ActionsTab from "./tabs/ActionsTab"; -import EventsTab from "./tabs/EventsTab"; -import ScheduleTab from "./tabs/ScheduleTab"; -import SleepTab from "./tabs/SleepTab"; -import RawHttpTab from "./tabs/RawHttpTab"; -import RawWebSocketTab from "./tabs/RawWebSocketTab"; -import MetadataTab from "./tabs/MetadataTab"; -import ConnectionsTab from "./tabs/ConnectionsTab"; +import type { AppState } from "../App.tsx"; +import ActionsTab from "./tabs/ActionsTab.tsx"; +import EventsTab from "./tabs/EventsTab.tsx"; +import ScheduleTab from "./tabs/ScheduleTab.tsx"; +import SleepTab from "./tabs/SleepTab.tsx"; +import RawHttpTab from "./tabs/RawHttpTab.tsx"; +import RawWebSocketTab from "./tabs/RawWebSocketTab.tsx"; +import MetadataTab from "./tabs/MetadataTab.tsx"; +import ConnectionsTab from "./tabs/ConnectionsTab.tsx"; interface InteractionScreenProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/ActionsTab.tsx b/examples/kitchen-sink/frontend/components/tabs/ActionsTab.tsx index 9811e1b771..e3052fde29 100644 --- a/examples/kitchen-sink/frontend/components/tabs/ActionsTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/ActionsTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/ConnectionsTab.tsx b/examples/kitchen-sink/frontend/components/tabs/ConnectionsTab.tsx index 5b5bf41c62..cf71fcb771 100644 --- a/examples/kitchen-sink/frontend/components/tabs/ConnectionsTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/ConnectionsTab.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/EventsTab.tsx b/examples/kitchen-sink/frontend/components/tabs/EventsTab.tsx index 89246901a9..a4927be0e7 100644 --- a/examples/kitchen-sink/frontend/components/tabs/EventsTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/EventsTab.tsx @@ -1,6 +1,6 @@ import { useState, useRef } from "react"; -import type { AppState } from "../../App"; -import type { EventSubscription, EventItem } from "../InteractionScreen"; +import type { AppState } from "../../App.tsx"; +import type { EventSubscription, EventItem } from "../InteractionScreen.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/MetadataTab.tsx b/examples/kitchen-sink/frontend/components/tabs/MetadataTab.tsx index 48ac3eae42..f5c4a92e43 100644 --- a/examples/kitchen-sink/frontend/components/tabs/MetadataTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/MetadataTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/RawHttpTab.tsx b/examples/kitchen-sink/frontend/components/tabs/RawHttpTab.tsx index cd77f9706d..3d9963fd88 100644 --- a/examples/kitchen-sink/frontend/components/tabs/RawHttpTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/RawHttpTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/RawWebSocketTab.tsx b/examples/kitchen-sink/frontend/components/tabs/RawWebSocketTab.tsx index db6e3fd211..9b670d7670 100644 --- a/examples/kitchen-sink/frontend/components/tabs/RawWebSocketTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/RawWebSocketTab.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/ScheduleTab.tsx b/examples/kitchen-sink/frontend/components/tabs/ScheduleTab.tsx index 212a2df57a..6962a254be 100644 --- a/examples/kitchen-sink/frontend/components/tabs/ScheduleTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/ScheduleTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/frontend/components/tabs/SleepTab.tsx b/examples/kitchen-sink/frontend/components/tabs/SleepTab.tsx index 6cf21e93ac..736620dffe 100644 --- a/examples/kitchen-sink/frontend/components/tabs/SleepTab.tsx +++ b/examples/kitchen-sink/frontend/components/tabs/SleepTab.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import type { AppState } from "../../App"; +import type { AppState } from "../../App.tsx"; interface TabProps { state: AppState; diff --git a/examples/kitchen-sink/package.json b/examples/kitchen-sink/package.json index f5d6e8ff42..cb5e2f9870 100644 --- a/examples/kitchen-sink/package.json +++ b/examples/kitchen-sink/package.json @@ -14,20 +14,21 @@ "build": "npm run build:backend && npm run build:frontend" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.7.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", "@vitejs/plugin-react": "^4.2.1", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^4.7.1", "typescript": "^5.2.2", diff --git a/examples/kitchen-sink/src/registry.ts b/examples/kitchen-sink/src/actors.ts similarity index 76% rename from examples/kitchen-sink/src/registry.ts rename to examples/kitchen-sink/src/actors.ts index 7bd07a3db3..372c6ae611 100644 --- a/examples/kitchen-sink/src/registry.ts +++ b/examples/kitchen-sink/src/actors.ts @@ -1,5 +1,5 @@ import { setup } from "rivetkit"; -import { demo } from "./actors/demo"; +import { demo } from "./actors/demo.ts"; export const registry = setup({ use: { diff --git a/examples/kitchen-sink/src/actors/demo.ts b/examples/kitchen-sink/src/actors/demo.ts index b29887321e..c8d16676d8 100644 --- a/examples/kitchen-sink/src/actors/demo.ts +++ b/examples/kitchen-sink/src/actors/demo.ts @@ -1,6 +1,6 @@ import { actor } from "rivetkit"; -import { handleHttpRequest, httpActions } from "./http"; -import { handleWebSocket, websocketActions } from "./websocket"; +import { handleHttpRequest, httpActions } from "./http.ts"; +import { handleWebSocket, websocketActions } from "./websocket.ts"; export const demo = actor({ createState: (_c, input) => ({ diff --git a/examples/kitchen-sink/src/server.ts b/examples/kitchen-sink/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/kitchen-sink/src/server.ts +++ b/examples/kitchen-sink/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/kitchen-sink/tsconfig.json b/examples/kitchen-sink/tsconfig.json index 7de617dccd..40f06924e1 100644 --- a/examples/kitchen-sink/tsconfig.json +++ b/examples/kitchen-sink/tsconfig.json @@ -7,6 +7,7 @@ "skipLibCheck": true, "moduleResolution": "bundler", "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, @@ -16,6 +17,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "frontend"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/examples/kitchen-sink/vercel.json b/examples/kitchen-sink/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/kitchen-sink/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/multi-region/frontend/App.tsx b/examples/multi-region/frontend/App.tsx index 079126621d..e91671c225 100644 --- a/examples/multi-region/frontend/App.tsx +++ b/examples/multi-region/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useEffect, useState } from "react"; -import type { Player, registry } from "../src/registry"; +import type { Player, registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/multi-region/frontend/main.tsx b/examples/multi-region/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/multi-region/frontend/main.tsx +++ b/examples/multi-region/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/multi-region/package.json b/examples/multi-region/package.json index b40e8532e1..2198597b60 100644 --- a/examples/multi-region/package.json +++ b/examples/multi-region/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.7.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/multi-region/src/registry.ts b/examples/multi-region/src/actors.ts similarity index 98% rename from examples/multi-region/src/registry.ts rename to examples/multi-region/src/actors.ts index 528d697825..1bc219f827 100644 --- a/examples/multi-region/src/registry.ts +++ b/examples/multi-region/src/actors.ts @@ -1,5 +1,5 @@ import { actor, setup } from "rivetkit"; -import type { Player } from "./types"; +import type { Player } from "./types.ts"; export type { Player }; diff --git a/examples/multi-region/src/server.ts b/examples/multi-region/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/multi-region/src/server.ts +++ b/examples/multi-region/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/multi-region/tests/regions.test.ts b/examples/multi-region/tests/regions.test.ts index c8ce79f605..669446ef7d 100644 --- a/examples/multi-region/tests/regions.test.ts +++ b/examples/multi-region/tests/regions.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; describe("multi-region deployment", () => { test("isolates actors by region", async (ctx) => { diff --git a/examples/multi-region/tsconfig.json b/examples/multi-region/tsconfig.json index a868ed1ef3..6066bc46a9 100644 --- a/examples/multi-region/tsconfig.json +++ b/examples/multi-region/tsconfig.json @@ -6,6 +6,7 @@ "skipLibCheck": true, "moduleResolution": "bundler", "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, @@ -15,6 +16,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src", "tests"], + "include": ["src", "tests", "frontend"], "exclude": ["node_modules", "dist"] } diff --git a/examples/multi-region/vercel.json b/examples/multi-region/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/multi-region/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/native-websockets/frontend/App.tsx b/examples/native-websockets/frontend/App.tsx index 492aeccdbd..2788dc6572 100644 --- a/examples/native-websockets/frontend/App.tsx +++ b/examples/native-websockets/frontend/App.tsx @@ -1,6 +1,6 @@ import { createClient } from "@rivetkit/react"; import { useEffect, useState } from "react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; // FIXME: use metadata's clientEndpoint const rivetUrl = `${window.location.origin}/api/rivet`; diff --git a/examples/native-websockets/frontend/main.tsx b/examples/native-websockets/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/native-websockets/frontend/main.tsx +++ b/examples/native-websockets/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/native-websockets/package.json b/examples/native-websockets/package.json index e0edb9d560..e59390290b 100644 --- a/examples/native-websockets/package.json +++ b/examples/native-websockets/package.json @@ -15,15 +15,12 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@types/ws": "^8.5.10", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -32,10 +29,14 @@ "ws": "^8.16.0" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/native-websockets/src/registry.ts b/examples/native-websockets/src/actors.ts similarity index 100% rename from examples/native-websockets/src/registry.ts rename to examples/native-websockets/src/actors.ts diff --git a/examples/native-websockets/src/server.ts b/examples/native-websockets/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/native-websockets/src/server.ts +++ b/examples/native-websockets/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/native-websockets/tests/websocket.test.ts b/examples/native-websockets/tests/websocket.test.ts index c7dcec386b..81544a2b82 100644 --- a/examples/native-websockets/tests/websocket.test.ts +++ b/examples/native-websockets/tests/websocket.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; test("Cursor room can be created and initialized", async (ctx: any) => { const { client } = await setupTest(ctx, registry); diff --git a/examples/native-websockets/tsconfig.json b/examples/native-websockets/tsconfig.json index b2ac3f62a7..9305d7b2d1 100644 --- a/examples/native-websockets/tsconfig.json +++ b/examples/native-websockets/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "actors/**/*", "tests/**/*"] + "include": ["src/**/*", "frontend/**/*", "tests/**/*"] } diff --git a/examples/native-websockets/vercel.json b/examples/native-websockets/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/native-websockets/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/node/package.json b/examples/node/package.json index d9e60b33e7..7f453c6828 100644 --- a/examples/node/package.json +++ b/examples/node/package.json @@ -6,20 +6,19 @@ "scripts": { "dev": "npx srvx --import tsx src/server.ts", "start": "npx srvx --import tsx src/server.ts", - "check-types": "tsc --noEmit", - "build": "tsup", - "client": "tsx scripts/client.ts" + "check-types": "tsc --noEmit" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "srvx": "^0.10.0", "tsx": "^3.12.7", "typescript": "^5.5.2" }, "dependencies": { - "rivetkit": "*" + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", + "hono": "^4.0.0", + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/node/scripts/client.ts b/examples/node/scripts/client.ts deleted file mode 100644 index c71228cd59..0000000000 --- a/examples/node/scripts/client.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createClient } from "rivetkit/client"; -import type { registry } from "../src/registry.js"; - -const client = createClient(); - -async function main() { - console.log("🚀 Rivet Client Demo"); - - try { - // Create counter instance - const counter = client.counter.getOrCreate("demo").connect(); - - // Increment counter - console.log("Incrementing counter 'demo'..."); - const result1 = await counter.increment(1); - console.log("New count:", result1); - - // Increment again with larger value - console.log("Incrementing counter 'demo' by 5..."); - const result2 = await counter.increment(5); - console.log("New count:", result2); - - // Create another counter - const counter2 = client.counter.getOrCreate("another"); - console.log("Incrementing counter 'another' by 10..."); - const result3 = await counter2.increment(10); - console.log("New count:", result3); - - console.log("✅ Demo completed!"); - } catch (error) { - console.error("❌ Error:", error); - process.exit(1); - } -} - -main().catch(console.error); diff --git a/examples/hono/src/registry.ts b/examples/node/src/actors.ts similarity index 100% rename from examples/hono/src/registry.ts rename to examples/node/src/actors.ts diff --git a/examples/node/src/server.ts b/examples/node/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/node/src/server.ts +++ b/examples/node/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/node/tsconfig.json b/examples/node/tsconfig.json index 1821171d3d..9673489873 100644 --- a/examples/node/tsconfig.json +++ b/examples/node/tsconfig.json @@ -35,7 +35,9 @@ /* Skip type checking all .d.ts files. */ "skipLibCheck": true, - "outDir": "dist" + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, + "noEmit": true }, "include": ["src/**/*"] } diff --git a/examples/node/vercel.json b/examples/node/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/node/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/raw-fetch-handler/frontend/App.tsx b/examples/raw-fetch-handler/frontend/App.tsx index cff918e2c1..91ab958495 100644 --- a/examples/raw-fetch-handler/frontend/App.tsx +++ b/examples/raw-fetch-handler/frontend/App.tsx @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; import { createClient } from "@rivetkit/react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; // Create a client that connects to the running server const client = createClient(`${window.location.origin}/api/rivet`); diff --git a/examples/raw-fetch-handler/frontend/main.tsx b/examples/raw-fetch-handler/frontend/main.tsx index 97f20e9722..7d2eeaf8df 100644 --- a/examples/raw-fetch-handler/frontend/main.tsx +++ b/examples/raw-fetch-handler/frontend/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import App from "./App"; +import App from "./App.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/examples/raw-fetch-handler/package.json b/examples/raw-fetch-handler/package.json index 3643b50abe..a9ddd77157 100644 --- a/examples/raw-fetch-handler/package.json +++ b/examples/raw-fetch-handler/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.1", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.10.6", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.1.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^4.20.0", "typescript": "^5.7.3", @@ -30,11 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.1", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", "hono": "^4.6.18", "react": "^18.3.1", "react-dom": "^18.3.1", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/raw-fetch-handler/src/registry.ts b/examples/raw-fetch-handler/src/actors.ts similarity index 100% rename from examples/raw-fetch-handler/src/registry.ts rename to examples/raw-fetch-handler/src/actors.ts diff --git a/examples/raw-fetch-handler/src/server.ts b/examples/raw-fetch-handler/src/server.ts index 78004a3cbf..2d057a7b80 100644 --- a/examples/raw-fetch-handler/src/server.ts +++ b/examples/raw-fetch-handler/src/server.ts @@ -1,13 +1,10 @@ import { Hono } from "hono"; import { cors } from "hono/cors"; import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; +import { registry } from "./actors.ts"; -// Start RivetKit -registry.startRunner(); const client = createClient(); -// Setup router const app = new Hono(); app.use( @@ -37,6 +34,8 @@ app.all("/forward/:name/*", async (c) => { return response; }); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); + export default app; export { client }; diff --git a/examples/raw-fetch-handler/tests/counter.test.ts b/examples/raw-fetch-handler/tests/counter.test.ts index 94688e28f1..d9e3b08805 100644 --- a/examples/raw-fetch-handler/tests/counter.test.ts +++ b/examples/raw-fetch-handler/tests/counter.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; describe("Counter Actor", () => { test("fetch handler returns counter state", async (test) => { diff --git a/examples/raw-fetch-handler/tsconfig.json b/examples/raw-fetch-handler/tsconfig.json index e3c3d1b006..bbf936bd57 100644 --- a/examples/raw-fetch-handler/tsconfig.json +++ b/examples/raw-fetch-handler/tsconfig.json @@ -12,8 +12,10 @@ "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "noEmit": true, - "types": ["vitest/globals", "node"] + "types": ["vitest/globals", "node"], + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "tests/**/*", "vite.config.ts"], + "include": ["src/**/*", "tests/**/*", "frontend/**/*", "vite.config.ts"], "exclude": ["node_modules", "dist"] } diff --git a/examples/raw-fetch-handler/vercel.json b/examples/raw-fetch-handler/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/raw-fetch-handler/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/raw-websocket-handler-proxy/package.json b/examples/raw-websocket-handler-proxy/package.json index ea52ba1924..bbcd47220b 100644 --- a/examples/raw-websocket-handler-proxy/package.json +++ b/examples/raw-websocket-handler-proxy/package.json @@ -22,15 +22,12 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.1", - "@hono/node-ws": "^1.2.0", "@types/node": "^22.10.2", "@types/react": "^18.3.16", "@types/react-dom": "^18.3.5", "@types/ws": "^8.5.10", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.1.0", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^4.19.2", "typescript": "^5.7.2", @@ -38,11 +35,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.1", + "@hono/node-ws": "^1.2.0", "@rivetkit/react": "*", "hono": "^4.7.0", "react": "^18.3.1", "react-dom": "^18.3.1", "rivetkit": "*", + "srvx": "^0.10.0", "ws": "^8.18.0" }, "template": { diff --git a/examples/raw-websocket-handler-proxy/src/registry.ts b/examples/raw-websocket-handler-proxy/src/actors.ts similarity index 100% rename from examples/raw-websocket-handler-proxy/src/registry.ts rename to examples/raw-websocket-handler-proxy/src/actors.ts diff --git a/examples/raw-websocket-handler-proxy/src/server.ts b/examples/raw-websocket-handler-proxy/src/server.ts index 31bccf710f..6dcc209d99 100644 --- a/examples/raw-websocket-handler-proxy/src/server.ts +++ b/examples/raw-websocket-handler-proxy/src/server.ts @@ -3,9 +3,8 @@ import type { Context } from "hono"; import { Hono } from "hono"; import type { WSContext } from "hono/ws"; import { createClient } from "rivetkit/client"; -import { registry } from "./registry"; +import { registry } from "./actors.ts"; -registry.startRunner(); const client = createClient(); const app = new Hono(); @@ -48,4 +47,6 @@ app.get( }), ); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); + export default app; diff --git a/examples/raw-websocket-handler-proxy/tests/basic.test.ts b/examples/raw-websocket-handler-proxy/tests/basic.test.ts index d953fbb50e..344149d390 100644 --- a/examples/raw-websocket-handler-proxy/tests/basic.test.ts +++ b/examples/raw-websocket-handler-proxy/tests/basic.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry.js"; +import { registry } from "../src/actors.ts"; describe("basic websocket test", () => { test("should handle basic websocket connection", async (t) => { diff --git a/examples/raw-websocket-handler-proxy/tests/websocket.test.ts b/examples/raw-websocket-handler-proxy/tests/websocket.test.ts index 8dea0d6fcd..c1d79e40c3 100644 --- a/examples/raw-websocket-handler-proxy/tests/websocket.test.ts +++ b/examples/raw-websocket-handler-proxy/tests/websocket.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry.js"; +import { registry } from "../src/actors.ts"; describe("websocket chat", () => { test("should connect and receive init message", async (test) => { diff --git a/examples/raw-websocket-handler-proxy/tsconfig.json b/examples/raw-websocket-handler-proxy/tsconfig.json index b58b7bdf0b..9e7f724c83 100644 --- a/examples/raw-websocket-handler-proxy/tsconfig.json +++ b/examples/raw-websocket-handler-proxy/tsconfig.json @@ -13,6 +13,7 @@ "isolatedModules": true, "noEmit": true, "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "types": ["node", "vitest/globals"] }, "include": ["src/**/*", "tests/**/*"], diff --git a/examples/raw-websocket-handler-proxy/vercel.json b/examples/raw-websocket-handler-proxy/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/raw-websocket-handler-proxy/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/raw-websocket-handler/frontend/App.tsx b/examples/raw-websocket-handler/frontend/App.tsx index f5ee8446a5..6e89ea48f2 100644 --- a/examples/raw-websocket-handler/frontend/App.tsx +++ b/examples/raw-websocket-handler/frontend/App.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from "react"; import { createRivetKit } from "@rivetkit/react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/raw-websocket-handler/frontend/main.tsx b/examples/raw-websocket-handler/frontend/main.tsx index f5871ecc7c..3680074321 100644 --- a/examples/raw-websocket-handler/frontend/main.tsx +++ b/examples/raw-websocket-handler/frontend/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import App from "./App"; +import App from "./App.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/examples/raw-websocket-handler/package.json b/examples/raw-websocket-handler/package.json index c11fc0525a..371122d0ef 100644 --- a/examples/raw-websocket-handler/package.json +++ b/examples/raw-websocket-handler/package.json @@ -23,14 +23,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.10.2", "@types/react": "^18.3.16", "@types/react-dom": "^18.3.5", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.1.0", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^4.19.2", "typescript": "^5.7.2", @@ -38,8 +35,11 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", "hono": "^4.7.0", + "srvx": "^0.10.0", "react": "^18.3.1", "react-dom": "^18.3.1", "rivetkit": "*" diff --git a/examples/raw-websocket-handler/src/registry.ts b/examples/raw-websocket-handler/src/actors.ts similarity index 100% rename from examples/raw-websocket-handler/src/registry.ts rename to examples/raw-websocket-handler/src/actors.ts diff --git a/examples/raw-websocket-handler/src/server.ts b/examples/raw-websocket-handler/src/server.ts index fdfed9e29c..95c8895f94 100644 --- a/examples/raw-websocket-handler/src/server.ts +++ b/examples/raw-websocket-handler/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry.js"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/raw-websocket-handler/tsconfig.json b/examples/raw-websocket-handler/tsconfig.json index b58b7bdf0b..11b8825235 100644 --- a/examples/raw-websocket-handler/tsconfig.json +++ b/examples/raw-websocket-handler/tsconfig.json @@ -13,8 +13,9 @@ "isolatedModules": true, "noEmit": true, "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "types": ["node", "vitest/globals"] }, - "include": ["src/**/*", "tests/**/*"], + "include": ["src/**/*", "frontend/**/*"], "exclude": ["node_modules", "dist"] } diff --git a/examples/raw-websocket-handler/vercel.json b/examples/raw-websocket-handler/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/raw-websocket-handler/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/react/frontend/App.tsx b/examples/react/frontend/App.tsx index 5deaf0d08c..c9e7aba570 100644 --- a/examples/react/frontend/App.tsx +++ b/examples/react/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useState } from "react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/react/frontend/main.tsx b/examples/react/frontend/main.tsx index 6d0ba79496..87bb63120d 100644 --- a/examples/react/frontend/main.tsx +++ b/examples/react/frontend/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import App from "./App"; +import App from "./App.tsx"; ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/examples/react/package.json b/examples/react/package.json index e1786d0df5..3268a93cab 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.7.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "stableVersion": "0.8.0", "template": { diff --git a/examples/react/pnpm-lock.yaml b/examples/react/pnpm-lock.yaml new file mode 100644 index 0000000000..72c0cd8b56 --- /dev/null +++ b/examples/react/pnpm-lock.yaml @@ -0,0 +1,2961 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@hono/node-server': + specifier: ^1.19.7 + version: 1.19.7(hono@4.11.3) + '@hono/node-ws': + specifier: ^1.3.0 + version: 1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3) + '@rivetkit/react': + specifier: '*' + version: 2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ws@8.19.0) + hono: + specifier: ^4.7.0 + version: 4.11.3 + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + rivetkit: + specifier: '*' + version: 2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0) + srvx: + specifier: ^0.10.0 + version: 0.10.0 + devDependencies: + '@types/node': + specifier: ^22.13.9 + version: 22.19.3 + '@types/react': + specifier: ^18.2.0 + version: 18.3.27 + '@types/react-dom': + specifier: ^18.2.0 + version: 18.3.7(@types/react@18.3.27) + '@vitejs/plugin-react': + specifier: ^4.2.0 + version: 4.7.0(vite@5.4.21(@types/node@22.19.3)) + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + tsup: + specifier: ^8.5.1 + version: 8.5.1(postcss@8.5.6)(tsx@3.14.0)(typescript@5.9.3)(yaml@2.8.2) + tsx: + specifier: ^3.12.7 + version: 3.14.0 + typescript: + specifier: ^5.5.2 + version: 5.9.3 + vite: + specifier: ^5.0.0 + version: 5.4.21(@types/node@22.19.3) + vitest: + specifier: ^3.1.1 + version: 3.2.4(@types/node@22.19.3) + +packages: + + '@asteasolutions/zod-to-openapi@8.4.0': + resolution: {integrity: sha512-Ckp971tmTw4pnv+o7iK85ldBHBKk6gxMaoNyLn3c2Th/fKoTG8G3jdYuOanpdGqwlDB0z01FOjry2d32lfTqrA==} + peerDependencies: + zod: ^4.0.0 + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': + resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} + cpu: [arm64] + os: [darwin] + + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': + resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==} + cpu: [x64] + os: [darwin] + + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': + resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} + cpu: [arm64] + os: [linux] + + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} + cpu: [arm] + os: [linux] + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==} + cpu: [x64] + os: [linux] + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==} + cpu: [x64] + os: [win32] + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@hono/node-server@1.19.7': + resolution: {integrity: sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@hono/node-ws@1.3.0': + resolution: {integrity: sha512-ju25YbbvLuXdqBCmLZLqnNYu1nbHIQjoyUqA8ApZOeL1k4skuiTcw5SW77/5SUYo2Xi2NVBJoVlfQurnKEp03Q==} + engines: {node: '>=18.14.1'} + peerDependencies: + '@hono/node-server': ^1.19.2 + hono: ^4.6.0 + + '@hono/standard-validator@0.1.5': + resolution: {integrity: sha512-EIyZPPwkyLn6XKwFj5NBEWHXhXbgmnVh2ceIFo5GO7gKI9WmzTjPDKnppQB0KrqKeAkq3kpoW4SIbu5X1dgx3w==} + peerDependencies: + '@standard-schema/spec': 1.0.0 + hono: '>=3.9.0' + + '@hono/zod-openapi@1.2.0': + resolution: {integrity: sha512-KDfHqv/Wy4elVseZXgokbHxeWuqBL+AZfqsOMpEihBMUsk/fJ+bLIi3Sf70JFVpt1Ihui8RasYrInozt7ZBDIA==} + engines: {node: '>=16.0.0'} + peerDependencies: + hono: '>=4.3.6' + zod: ^4.0.0 + + '@hono/zod-validator@0.7.6': + resolution: {integrity: sha512-Io1B6d011Gj1KknV4rXYz4le5+5EubcWEU/speUjuw9XMMIaP3n78yXLhjd2A3PXaXaUwEAluOiAyLqhBEJgsw==} + peerDependencies: + hono: '>=3.9.0' + zod: ^3.25.0 || ^4.0.0 + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@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'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@rivetkit/bare-ts@0.6.2': + resolution: {integrity: sha512-3qndQUQXLdwafMEqfhz24hUtDPcsf1Bu3q52Kb8MqeH8JUh3h6R4HYW3ZJXiQsLcyYyFM68PuIwlLRlg1xDEpg==} + engines: {node: ^14.18.0 || >=16.0.0} + + '@rivetkit/engine-runner-protocol@2.0.33': + resolution: {integrity: sha512-VyfjwGy8qxGzwYyk63Hy0Nyl8GffV0KbOouWelrDJqbIG9fnZnUg6ntcwzpWqZQj0nMEfyfak8syjp89q5abSg==} + + '@rivetkit/engine-runner@2.0.33': + resolution: {integrity: sha512-pW+icImrxPJ3RGnksQhsOhJ50lcnoKdNZkPeFglPaKaE5L1/rDrrwRx8A7jVmF8NDbWL4fGfvB7tsjoi2vY2Aw==} + + '@rivetkit/fast-json-patch@3.1.2': + resolution: {integrity: sha512-CtA50xgsSSzICQduF/NDShPRzvucnNvsW/lQO0WgMTT1XAj9Lfae4pm7r3llFwilgG+9iq76Hv1LUqNy72v6yw==} + + '@rivetkit/framework-base@2.0.33': + resolution: {integrity: sha512-kFtW1SucXwLPuJSy9jgf8Ot8fUMRKnEj20GjV6fzGIAOroyJTjH3xlWe0YXx8DtP/I/i+0Fkkml9s8JA+Lye7A==} + + '@rivetkit/on-change@6.0.2-rc.1': + resolution: {integrity: sha512-5RC9Ze/wTKqSlJvopdCgr+EfyV93+iiH8Thog0QXrl8PT1unuBNw/jadXNMtwgAxrIaCJL+JLaHQH9w7rqpMDw==} + engines: {node: '>=20'} + + '@rivetkit/react@2.0.33': + resolution: {integrity: sha512-egqlLMf7ECooxXOauRv3tZMLHe133Dq0K8HY+xklWY4YN1gP5MN73OGaUqN2l+92d8F7T8Wn0k/uLjsZmC5/HA==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/rollup-android-arm-eabi@4.55.1': + resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.55.1': + resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.55.1': + resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.55.1': + resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.55.1': + resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.55.1': + resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.55.1': + resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.55.1': + resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.55.1': + resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.55.1': + resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.55.1': + resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.55.1': + resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.55.1': + resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.55.1': + resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.55.1': + resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.1': + resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.55.1': + resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.55.1': + resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.55.1': + resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.55.1': + resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@tanstack/react-store@0.7.7': + resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/store@0.7.7': + resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@22.19.3': + resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.27': + resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + baseline-browser-mapping@2.9.13: + resolution: {integrity: sha512-WhtvB2NG2wjr04+h77sg3klAIwrgOqnjS49GGudnUPGFFgg7G17y7Qecqp+2Dr5kUDxNRBca0SK7cG8JwzkWDQ==} + hasBin: true + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + caniuse-lite@1.0.30001763: + resolution: {integrity: sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ==} + + cbor-extract@2.2.0: + resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} + hasBin: true + + cbor-x@1.6.0: + resolution: {integrity: sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hono@4.11.3: + resolution: {integrity: sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==} + engines: {node: '>=16.9.0'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + engines: {node: '>=16'} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoevents@9.1.0: + resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} + engines: {node: ^18.0.0 || >=20.0.0} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-gyp-build-optional-packages@5.1.1: + resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} + hasBin: true + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + openapi3-ts@4.5.0: + resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.14.0: + resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} + hasBin: true + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + rivetkit@2.0.33: + resolution: {integrity: sha512-gTVuZ7cLlGeol8pfJRdrdo1DEhXu1iYvEENPY6uoYi5fDAbsL9uZtcCsQI6xT3Fi6Md7l4xgiuO3bNTHXiqJ6A==} + engines: {node: '>=22.0.0'} + peerDependencies: + '@hono/node-server': ^1.14.0 + '@hono/node-ws': ^1.1.1 + eventsource: ^4.0.0 + ws: ^8.0.0 + peerDependenciesMeta: + '@hono/node-server': + optional: true + '@hono/node-ws': + optional: true + eventsource: + optional: true + ws: + optional: true + + rollup@4.55.1: + resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + srvx@0.10.0: + resolution: {integrity: sha512-NqIsR+wQCfkvvwczBh8J8uM4wTZx41K2lLSEp/3oMp917ODVVMtW5Me4epCmQ3gH8D+0b+/t4xxkUKutyhimTA==} + engines: {node: '>=20.16.0'} + hasBin: true + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.5.1: + resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + tsx@3.14.0: + resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.2: + resolution: {integrity: sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + uuid@12.0.0: + resolution: {integrity: sha512-USe1zesMYh4fjCA8ZH5+X5WIVD0J4V1Jksm1bFTVBX2F/cwSXt0RO5w/3UXbdLKmZX65MiWV+hwhSS8p6oBTGA==} + hasBin: true + + vbare@0.0.4: + resolution: {integrity: sha512-QsxSVw76NqYUWYPVcQmOnQPX8buIVjgn+yqldTHlWISulBTB9TJ9rnzZceDu+GZmycOtzsmuPbPN1YNxvK12fg==} + engines: {node: '>=18.0.0'} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + +snapshots: + + '@asteasolutions/zod-to-openapi@8.4.0(zod@4.3.5)': + dependencies: + openapi3-ts: 4.5.0 + zod: 4.3.5 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-darwin-x64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-arm64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-arm@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-linux-x64@2.2.0': + optional: true + + '@cbor-extract/cbor-extract-win32-x64@2.2.0': + optional: true + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@hono/node-server@1.19.7(hono@4.11.3)': + dependencies: + hono: 4.11.3 + + '@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3)': + dependencies: + '@hono/node-server': 1.19.7(hono@4.11.3) + hono: 4.11.3 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@hono/standard-validator@0.1.5(@standard-schema/spec@1.0.0)(hono@4.11.3)': + dependencies: + '@standard-schema/spec': 1.0.0 + hono: 4.11.3 + + '@hono/zod-openapi@1.2.0(hono@4.11.3)(zod@4.3.5)': + dependencies: + '@asteasolutions/zod-to-openapi': 8.4.0(zod@4.3.5) + '@hono/zod-validator': 0.7.6(hono@4.11.3)(zod@4.3.5) + hono: 4.11.3 + openapi3-ts: 4.5.0 + zod: 4.3.5 + + '@hono/zod-validator@0.7.6(hono@4.11.3)(zod@4.3.5)': + dependencies: + hono: 4.11.3 + zod: 4.3.5 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@pinojs/redact@0.4.0': {} + + '@rivetkit/bare-ts@0.6.2': {} + + '@rivetkit/engine-runner-protocol@2.0.33': + dependencies: + '@rivetkit/bare-ts': 0.6.2 + + '@rivetkit/engine-runner@2.0.33': + dependencies: + '@rivetkit/engine-runner-protocol': 2.0.33 + pino: 9.14.0 + uuid: 12.0.0 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@rivetkit/fast-json-patch@3.1.2': {} + + '@rivetkit/framework-base@2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0)': + dependencies: + '@tanstack/store': 0.7.7 + fast-deep-equal: 3.1.3 + rivetkit: 2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0) + transitivePeerDependencies: + - '@hono/node-server' + - '@hono/node-ws' + - '@standard-schema/spec' + - bufferutil + - eventsource + - utf-8-validate + - ws + + '@rivetkit/on-change@6.0.2-rc.1': {} + + '@rivetkit/react@2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ws@8.19.0)': + dependencies: + '@rivetkit/framework-base': 2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0) + '@tanstack/react-store': 0.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rivetkit: 2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0) + transitivePeerDependencies: + - '@hono/node-server' + - '@hono/node-ws' + - '@standard-schema/spec' + - bufferutil + - eventsource + - utf-8-validate + - ws + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rollup/rollup-android-arm-eabi@4.55.1': + optional: true + + '@rollup/rollup-android-arm64@4.55.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.55.1': + optional: true + + '@rollup/rollup-darwin-x64@4.55.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.55.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.55.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.55.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.55.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.55.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.55.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.55.1': + optional: true + + '@standard-schema/spec@1.0.0': {} + + '@tanstack/react-store@0.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/store': 0.7.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) + + '@tanstack/store@0.7.7': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/node@22.19.3': + dependencies: + undici-types: 6.21.0 + + '@types/prop-types@15.7.15': {} + + '@types/react-dom@18.3.7(@types/react@18.3.27)': + dependencies: + '@types/react': 18.3.27 + + '@types/react@18.3.27': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.2.3 + + '@types/retry@0.12.2': {} + + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.3))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 5.4.21(@types/node@22.19.3) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@22.19.3))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@22.19.3) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + acorn@8.15.0: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + any-promise@1.3.0: {} + + assertion-error@2.0.1: {} + + atomic-sleep@1.0.0: {} + + baseline-browser-mapping@2.9.13: {} + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.13 + caniuse-lite: 1.0.30001763 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + buffer-from@1.1.2: {} + + bundle-require@5.1.0(esbuild@0.27.2): + dependencies: + esbuild: 0.27.2 + load-tsconfig: 0.2.5 + + cac@6.7.14: {} + + caniuse-lite@1.0.30001763: {} + + cbor-extract@2.2.0: + dependencies: + node-gyp-build-optional-packages: 5.1.1 + optionalDependencies: + '@cbor-extract/cbor-extract-darwin-arm64': 2.2.0 + '@cbor-extract/cbor-extract-darwin-x64': 2.2.0 + '@cbor-extract/cbor-extract-linux-arm': 2.2.0 + '@cbor-extract/cbor-extract-linux-arm64': 2.2.0 + '@cbor-extract/cbor-extract-linux-x64': 2.2.0 + '@cbor-extract/cbor-extract-win32-x64': 2.2.0 + optional: true + + cbor-x@1.6.0: + optionalDependencies: + cbor-extract: 2.2.0 + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.3: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@4.1.1: {} + + concurrently@8.2.2: + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.2 + shell-quote: 1.8.3 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + confbox@0.1.8: {} + + consola@3.4.2: {} + + convert-source-map@2.0.0: {} + + csstype@3.2.3: {} + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.28.4 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + detect-libc@2.1.2: + optional: true + + electron-to-chromium@1.5.267: {} + + emoji-regex@8.0.0: {} + + es-module-lexer@1.7.0: {} + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + escalade@3.2.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + expect-type@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.21 + mlly: 1.8.0 + rollup: 4.55.1 + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + has-flag@4.0.0: {} + + hono@4.11.3: {} + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-fullwidth-code-point@3.0.0: {} + + is-network-error@1.3.0: {} + + joycon@3.1.1: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@3.2.1: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.2 + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoevents@9.1.0: {} + + nanoid@3.3.11: {} + + node-gyp-build-optional-packages@5.1.1: + dependencies: + detect-libc: 2.1.2 + optional: true + + node-releases@2.0.27: {} + + object-assign@4.1.1: {} + + on-exit-leak-free@2.1.2: {} + + openapi3-ts@4.5.0: + dependencies: + yaml: 2.8.2 + + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.3.0 + retry: 0.13.1 + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.14.0: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.7: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + postcss-load-config@6.0.1(postcss@8.5.6)(tsx@3.14.0)(yaml@2.8.2): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + postcss: 8.5.6 + tsx: 3.14.0 + yaml: 2.8.2 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + process-warning@5.0.0: {} + + quick-format-unescaped@4.0.4: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-refresh@0.17.0: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readdirp@4.1.2: {} + + real-require@0.2.0: {} + + require-directory@2.1.1: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + retry@0.13.1: {} + + rivetkit@2.0.33(@hono/node-server@1.19.7(hono@4.11.3))(@hono/node-ws@1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3))(@standard-schema/spec@1.0.0)(ws@8.19.0): + dependencies: + '@hono/standard-validator': 0.1.5(@standard-schema/spec@1.0.0)(hono@4.11.3) + '@hono/zod-openapi': 1.2.0(hono@4.11.3)(zod@4.3.5) + '@rivetkit/bare-ts': 0.6.2 + '@rivetkit/engine-runner': 2.0.33 + '@rivetkit/fast-json-patch': 3.1.2 + '@rivetkit/on-change': 6.0.2-rc.1 + cbor-x: 1.6.0 + hono: 4.11.3 + invariant: 2.2.4 + nanoevents: 9.1.0 + p-retry: 6.2.1 + pino: 9.14.0 + uuid: 12.0.0 + vbare: 0.0.4 + zod: 4.3.5 + optionalDependencies: + '@hono/node-server': 1.19.7(hono@4.11.3) + '@hono/node-ws': 1.3.0(@hono/node-server@1.19.7(hono@4.11.3))(hono@4.11.3) + ws: 8.19.0 + transitivePeerDependencies: + - '@standard-schema/spec' + - bufferutil + - utf-8-validate + + rollup@4.55.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.55.1 + '@rollup/rollup-android-arm64': 4.55.1 + '@rollup/rollup-darwin-arm64': 4.55.1 + '@rollup/rollup-darwin-x64': 4.55.1 + '@rollup/rollup-freebsd-arm64': 4.55.1 + '@rollup/rollup-freebsd-x64': 4.55.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 + '@rollup/rollup-linux-arm-musleabihf': 4.55.1 + '@rollup/rollup-linux-arm64-gnu': 4.55.1 + '@rollup/rollup-linux-arm64-musl': 4.55.1 + '@rollup/rollup-linux-loong64-gnu': 4.55.1 + '@rollup/rollup-linux-loong64-musl': 4.55.1 + '@rollup/rollup-linux-ppc64-gnu': 4.55.1 + '@rollup/rollup-linux-ppc64-musl': 4.55.1 + '@rollup/rollup-linux-riscv64-gnu': 4.55.1 + '@rollup/rollup-linux-riscv64-musl': 4.55.1 + '@rollup/rollup-linux-s390x-gnu': 4.55.1 + '@rollup/rollup-linux-x64-gnu': 4.55.1 + '@rollup/rollup-linux-x64-musl': 4.55.1 + '@rollup/rollup-openbsd-x64': 4.55.1 + '@rollup/rollup-openharmony-arm64': 4.55.1 + '@rollup/rollup-win32-arm64-msvc': 4.55.1 + '@rollup/rollup-win32-ia32-msvc': 4.55.1 + '@rollup/rollup-win32-x64-gnu': 4.55.1 + '@rollup/rollup-win32-x64-msvc': 4.55.1 + fsevents: 2.3.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-stable-stringify@2.5.0: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + shell-quote@1.8.3: {} + + siginfo@2.0.0: {} + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + spawn-command@0.0.2: {} + + split2@4.2.0: {} + + srvx@0.10.0: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + + tree-kill@1.2.2: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.8.1: {} + + tsup@8.5.1(postcss@8.5.6)(tsx@3.14.0)(typescript@5.9.3)(yaml@2.8.2): + dependencies: + bundle-require: 5.1.0(esbuild@0.27.2) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.3 + esbuild: 0.27.2 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(postcss@8.5.6)(tsx@3.14.0)(yaml@2.8.2) + resolve-from: 5.0.0 + rollup: 4.55.1 + source-map: 0.7.6 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + tsx@3.14.0: + dependencies: + esbuild: 0.18.20 + get-tsconfig: 4.13.0 + source-map-support: 0.5.21 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.9.3: {} + + ufo@1.6.2: {} + + undici-types@6.21.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-sync-external-store@1.6.0(react@18.3.1): + dependencies: + react: 18.3.1 + + uuid@12.0.0: {} + + vbare@0.0.4: {} + + vite-node@3.2.4(@types/node@22.19.3): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 5.4.21(@types/node@22.19.3) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.21(@types/node@22.19.3): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.55.1 + optionalDependencies: + '@types/node': 22.19.3 + fsevents: 2.3.3 + + vitest@3.2.4(@types/node@22.19.3): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@22.19.3)) + '@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.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 5.4.21(@types/node@22.19.3) + vite-node: 3.2.4(@types/node@22.19.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.3 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + ws@8.19.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.8.2: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + zod@4.3.5: {} diff --git a/examples/hono-react/src/registry.ts b/examples/react/src/actors.ts similarity index 100% rename from examples/hono-react/src/registry.ts rename to examples/react/src/actors.ts diff --git a/examples/react/src/registry.ts b/examples/react/src/registry.ts deleted file mode 100644 index 4afe732a3c..0000000000 --- a/examples/react/src/registry.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { actor, setup } from "rivetkit"; - -export const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - c.broadcast("newCount", c.state.count); - return c.state.count; - }, - }, -}); - -export const registry = setup({ - use: { counter }, -}); diff --git a/examples/react/src/server.ts b/examples/react/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/react/src/server.ts +++ b/examples/react/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/react/tsconfig.json b/examples/react/tsconfig.json index c480ef1fed..6daa5df3fd 100644 --- a/examples/react/tsconfig.json +++ b/examples/react/tsconfig.json @@ -1,43 +1,16 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ "lib": ["esnext", "dom"], - /* Specify what JSX code is generated. */ "jsx": "react-jsx", - - /* Specify what module code is generated. */ "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ - "types": ["node"], - /* Enable importing .json files */ - "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ - "checkJs": false, - - /* Disable emitting files from a compilation. */ + "types": ["node", "vite/client"], "noEmit": true, - - /* Ensure that each file can be safely transpiled without relying on other imports. */ - "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ - "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ - "forceConsistentCasingInFileNames": true, - - /* Enable all strict type-checking options. */ "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*"] + "include": ["src/**/*", "frontend/**/*"] } diff --git a/examples/react/vercel.json b/examples/react/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/react/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/scheduling/frontend/App.tsx b/examples/scheduling/frontend/App.tsx index 8b4c36bbf7..42bd9aa429 100644 --- a/examples/scheduling/frontend/App.tsx +++ b/examples/scheduling/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useEffect, useState } from "react"; -import type { Reminder, Registry } from "../src/registry"; +import type { Reminder, Registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/scheduling/frontend/main.tsx b/examples/scheduling/frontend/main.tsx index bd39f29eec..372f49c622 100644 --- a/examples/scheduling/frontend/main.tsx +++ b/examples/scheduling/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/scheduling/package.json b/examples/scheduling/package.json index 5431a77791..b2f786660a 100644 --- a/examples/scheduling/package.json +++ b/examples/scheduling/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/scheduling/src/registry.ts b/examples/scheduling/src/actors.ts similarity index 100% rename from examples/scheduling/src/registry.ts rename to examples/scheduling/src/actors.ts diff --git a/examples/scheduling/src/server.ts b/examples/scheduling/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/scheduling/src/server.ts +++ b/examples/scheduling/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/scheduling/tests/scheduling.test.ts b/examples/scheduling/tests/scheduling.test.ts index 584ac32d13..d72daea044 100644 --- a/examples/scheduling/tests/scheduling.test.ts +++ b/examples/scheduling/tests/scheduling.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; // Helper to wait for a delay const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/examples/scheduling/tsconfig.json b/examples/scheduling/tsconfig.json index 6a7556152e..bac6a7b766 100644 --- a/examples/scheduling/tsconfig.json +++ b/examples/scheduling/tsconfig.json @@ -1,43 +1,22 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ "target": "esnext", - /* Specify a set of bundled library declaration files that describe the target runtime environment. */ "lib": ["esnext", "dom"], - /* Specify what JSX code is generated. */ "jsx": "react-jsx", - - /* Specify what module code is generated. */ "module": "esnext", - /* Specify how TypeScript looks up a file from a given module specifier. */ "moduleResolution": "bundler", - /* Specify type package names to be included without being referenced in a source file. */ "types": ["node"], - /* Enable importing .json files */ "resolveJsonModule": true, - - /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ "allowJs": true, - /* Enable error reporting in type-checked JavaScript files. */ "checkJs": false, - - /* Disable emitting files from a compilation. */ "noEmit": true, - - /* Ensure that each file can be safely transpiled without relying on other imports. */ "isolatedModules": true, - /* Allow 'import x from y' when a module doesn't have a default export. */ "allowSyntheticDefaultImports": true, - /* Ensure that casing is correct in imports. */ "forceConsistentCasingInFileNames": true, - - /* Enable all strict type-checking options. */ "strict": true, - - /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*.ts", "src/**/*.tsx", "tests/**/*.ts"] + "include": ["src/**/*.ts", "src/**/*.tsx", "frontend/**/*.tsx", "tests/**/*.ts"] } diff --git a/examples/scheduling/vercel.json b/examples/scheduling/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/scheduling/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/state/frontend/App.tsx b/examples/state/frontend/App.tsx index 7e29c8e0c6..dda9d0b35e 100644 --- a/examples/state/frontend/App.tsx +++ b/examples/state/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useEffect, useRef, useState } from "react"; -import type { Message, registry } from "../src/registry"; +import type { Message, registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/state/package.json b/examples/state/package.json index 5b268bd5f0..e279875ef1 100644 --- a/examples/state/package.json +++ b/examples/state/package.json @@ -15,14 +15,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.2.0", "concurrently": "^8.2.2", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^3.12.7", "typescript": "^5.5.2", @@ -30,10 +27,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/state/src/registry.ts b/examples/state/src/actors.ts similarity index 100% rename from examples/state/src/registry.ts rename to examples/state/src/actors.ts diff --git a/examples/state/src/server.ts b/examples/state/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/state/src/server.ts +++ b/examples/state/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/state/tests/chat.test.ts b/examples/state/tests/chat.test.ts index 90f01ef649..b5eac54889 100644 --- a/examples/state/tests/chat.test.ts +++ b/examples/state/tests/chat.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { describe, expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; describe("chat room state", () => { test("send and receive messages", async (ctx) => { diff --git a/examples/state/tsconfig.json b/examples/state/tsconfig.json index ebf8f3a6e1..60ca008361 100644 --- a/examples/state/tsconfig.json +++ b/examples/state/tsconfig.json @@ -37,7 +37,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "tests/**/*"] + "include": ["src/**/*", "frontend/**/*", "tests/**/*"] } diff --git a/examples/state/vercel.json b/examples/state/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/state/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/stream/frontend/App.tsx b/examples/stream/frontend/App.tsx index 3abfe51ff7..d3a083ac6a 100644 --- a/examples/stream/frontend/App.tsx +++ b/examples/stream/frontend/App.tsx @@ -1,6 +1,6 @@ import { createRivetKit } from "@rivetkit/react"; import { useEffect, useState } from "react"; -import type { registry } from "../src/registry"; +import type { registry } from "../src/actors.ts"; const { useActor } = createRivetKit(`${window.location.origin}/api/rivet`); diff --git a/examples/stream/frontend/main.tsx b/examples/stream/frontend/main.tsx index 9b08c17646..c90f447886 100644 --- a/examples/stream/frontend/main.tsx +++ b/examples/stream/frontend/main.tsx @@ -1,6 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { App } from "./App"; +import { App } from "./App.tsx"; const root = document.getElementById("root"); if (!root) throw new Error("Root element not found"); diff --git a/examples/stream/package.json b/examples/stream/package.json index bb3dc0446d..5af749bfb3 100644 --- a/examples/stream/package.json +++ b/examples/stream/package.json @@ -14,14 +14,11 @@ "build": "npm run build:backend && npm run build:frontend" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^20.0.0", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", "@vitejs/plugin-react": "^4.0.0", "concurrently": "^8.2.0", - "srvx": "^0.10.0", "tsup": "^8.5.1", "tsx": "^4.0.0", "typescript": "^5.0.0", @@ -29,10 +26,14 @@ "vitest": "^3.1.1" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "hono": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "rivetkit": "*" + "rivetkit": "*", + "srvx": "^0.10.0" }, "template": { "technologies": [ diff --git a/examples/stream/src/registry.ts b/examples/stream/src/actors.ts similarity index 100% rename from examples/stream/src/registry.ts rename to examples/stream/src/actors.ts diff --git a/examples/stream/src/server.ts b/examples/stream/src/server.ts index 508b28a999..95c8895f94 100644 --- a/examples/stream/src/server.ts +++ b/examples/stream/src/server.ts @@ -1,3 +1,6 @@ -import { registry } from "./registry"; +import { Hono } from "hono"; +import { registry } from "./actors.ts"; -export default registry.serve(); +const app = new Hono(); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); +export default app; diff --git a/examples/stream/tests/stream.test.ts b/examples/stream/tests/stream.test.ts index bc240e50f6..4ffd08966e 100644 --- a/examples/stream/tests/stream.test.ts +++ b/examples/stream/tests/stream.test.ts @@ -1,6 +1,6 @@ import { setupTest } from "rivetkit/test"; import { expect, test } from "vitest"; -import { registry } from "../src/backend/registry"; +import { registry } from "../src/actors.ts"; test("Stream processor maintains top 3 values", async (ctx) => { const { client } = await setupTest(ctx, registry); diff --git a/examples/stream/tsconfig.json b/examples/stream/tsconfig.json index a868ed1ef3..736ed87e2b 100644 --- a/examples/stream/tsconfig.json +++ b/examples/stream/tsconfig.json @@ -6,6 +6,7 @@ "skipLibCheck": true, "moduleResolution": "bundler", "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, diff --git a/examples/stream/vercel.json b/examples/stream/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/stream/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +} diff --git a/examples/trpc/package.json b/examples/trpc/package.json index 5a0f623815..6962c22a37 100644 --- a/examples/trpc/package.json +++ b/examples/trpc/package.json @@ -4,23 +4,26 @@ "private": true, "type": "module", "scripts": { - "dev": "tsx --watch src/server.ts", - "start": "tsx src/server.ts", - "client": "tsx scripts/client.ts", + "dev": "npx srvx --import tsx src/server.ts", + "start": "npx srvx --import tsx src/server.ts", "check-types": "tsc --noEmit", - "build": "tsc" + "build": "tsup" }, "devDependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.3.0", "@types/node": "^22.13.9", - "rivetkit": "*", + "tsup": "^8.4.0", "tsx": "^3.12.7", "typescript": "^5.5.2" }, "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.3.0", + "@hono/trpc-server": "^0.3.0", "@trpc/client": "^11.3.1", "@trpc/server": "^11.4.2", + "hono": "^4.7.11", + "rivetkit": "*", + "srvx": "^0.10.0", "zod": "^3.25.76" }, "stableVersion": "0.8.0", diff --git a/examples/trpc/scripts/client.ts b/examples/trpc/scripts/client.ts deleted file mode 100644 index fbbee233c1..0000000000 --- a/examples/trpc/scripts/client.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createTRPCClient, httpBatchLink } from "@trpc/client"; -import type { AppRouter } from "../src/server.js"; - -// Create tRPC client -const client = createTRPCClient({ - links: [ - httpBatchLink({ - url: "http://localhost:3001", - }), - ], -}); - -async function main() { - console.log("🚀 tRPC Client Demo"); - - try { - // Increment counter - console.log("Incrementing counter 'demo'..."); - const result = await client.increment.mutate({ name: "demo" }); - console.log("New count:", result); - - // Increment again - console.log("Incrementing counter 'demo' again..."); - const result2 = await client.increment.mutate({ name: "demo" }); - console.log("New count:", result2); - - console.log("✅ Demo completed!"); - } catch (error) { - console.error("❌ Error:", error); - process.exit(1); - } -} - -main().catch(console.error); diff --git a/examples/node/src/registry.ts b/examples/trpc/src/actors.ts similarity index 100% rename from examples/node/src/registry.ts rename to examples/trpc/src/actors.ts diff --git a/examples/trpc/src/registry.ts b/examples/trpc/src/registry.ts deleted file mode 100644 index 3e3d61c376..0000000000 --- a/examples/trpc/src/registry.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { actor, setup } from "rivetkit"; - -export const counter = actor({ - state: { count: 0 }, - actions: { - increment: (c, x: number) => { - c.state.count += x; - return c.state.count; - }, - }, -}); - -export const registry = setup({ - use: { counter }, -}); diff --git a/examples/trpc/src/server.ts b/examples/trpc/src/server.ts index e191e84c4f..f57188f27b 100644 --- a/examples/trpc/src/server.ts +++ b/examples/trpc/src/server.ts @@ -1,11 +1,10 @@ +import { trpcServer } from "@hono/trpc-server"; import { initTRPC } from "@trpc/server"; -import { createHTTPServer } from "@trpc/server/adapters/standalone"; +import { Hono } from "hono"; import { createClient } from "rivetkit/client"; import { z } from "zod"; -import { registry } from "./registry.js"; +import { registry } from "./actors.ts"; -// Start RivetKit -registry.startRunner(); const client = createClient(); // Initialize tRPC @@ -26,11 +25,10 @@ const appRouter = t.router({ // Export type for client export type AppRouter = typeof appRouter; -// Create HTTP server -const server = createHTTPServer({ - router: appRouter, -}); +const app = new Hono(); + +app.use("/trpc/*", trpcServer({ router: appRouter })); -server.listen(3001); +app.all("/api/rivet/*", (c) => registry.handler(c.req.raw)); -console.log("tRPC server listening at http://localhost:3001"); +export default app; diff --git a/examples/trpc/tsconfig.json b/examples/trpc/tsconfig.json index 7aadbcd0e9..5f1c5ac2e5 100644 --- a/examples/trpc/tsconfig.json +++ b/examples/trpc/tsconfig.json @@ -35,7 +35,9 @@ "strict": true, /* Skip type checking all .d.ts files. */ - "skipLibCheck": true + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "rewriteRelativeImportExtensions": true }, - "include": ["src/**/*", "scripts/**/*"] + "include": ["src/**/*"] } diff --git a/examples/node/tsup.config.ts b/examples/trpc/tsup.config.ts similarity index 100% rename from examples/node/tsup.config.ts rename to examples/trpc/tsup.config.ts diff --git a/examples/trpc/vercel.json b/examples/trpc/vercel.json new file mode 100644 index 0000000000..e4d47292a2 --- /dev/null +++ b/examples/trpc/vercel.json @@ -0,0 +1,3 @@ +{ + "framework": "hono" +}