workerstack 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/dist/access.d.ts +131 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +333 -0
- package/dist/access.js.map +1 -0
- package/dist/api/builder.d.ts +457 -0
- package/dist/api/builder.d.ts.map +1 -0
- package/dist/api/builder.js +45 -0
- package/dist/api/builder.js.map +1 -0
- package/dist/api/catalog.d.ts +8 -0
- package/dist/api/catalog.d.ts.map +1 -0
- package/dist/api/catalog.js +56 -0
- package/dist/api/catalog.js.map +1 -0
- package/dist/api/context.d.ts +47 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +40 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/crud-router.d.ts +476 -0
- package/dist/api/crud-router.d.ts.map +1 -0
- package/dist/api/crud-router.js +354 -0
- package/dist/api/crud-router.js.map +1 -0
- package/dist/api/list-input-schema.d.ts +37 -0
- package/dist/api/list-input-schema.d.ts.map +1 -0
- package/dist/api/list-input-schema.js +63 -0
- package/dist/api/list-input-schema.js.map +1 -0
- package/dist/api/list-spec.d.ts +44 -0
- package/dist/api/list-spec.d.ts.map +1 -0
- package/dist/api/list-spec.js +49 -0
- package/dist/api/list-spec.js.map +1 -0
- package/dist/api/live-view.d.ts +14 -0
- package/dist/api/live-view.d.ts.map +1 -0
- package/dist/api/live-view.js +42 -0
- package/dist/api/live-view.js.map +1 -0
- package/dist/api/live-window.d.ts +40 -0
- package/dist/api/live-window.d.ts.map +1 -0
- package/dist/api/live-window.js +93 -0
- package/dist/api/live-window.js.map +1 -0
- package/dist/api/openapi.d.ts +6 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +146 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/realtime-router.d.ts +94 -0
- package/dist/api/realtime-router.d.ts.map +1 -0
- package/dist/api/realtime-router.js +45 -0
- package/dist/api/realtime-router.js.map +1 -0
- package/dist/api/registry.d.ts +30 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +236 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/router.d.ts +15 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +32 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/storage-router.d.ts +349 -0
- package/dist/api/storage-router.d.ts.map +1 -0
- package/dist/api/storage-router.js +155 -0
- package/dist/api/storage-router.js.map +1 -0
- package/dist/api/types.d.ts +55 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth-password.d.ts +27 -0
- package/dist/auth-password.d.ts.map +1 -0
- package/dist/auth-password.js +60 -0
- package/dist/auth-password.js.map +1 -0
- package/dist/auth.d.ts +59 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +146 -0
- package/dist/auth.js.map +1 -0
- package/dist/backend-internals.d.ts +35 -0
- package/dist/backend-internals.d.ts.map +1 -0
- package/dist/backend-internals.js +2 -0
- package/dist/backend-internals.js.map +1 -0
- package/dist/backend.d.ts +63 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +59 -0
- package/dist/backend.js.map +1 -0
- package/dist/blueprint-generator.d.ts +21 -0
- package/dist/blueprint-generator.d.ts.map +1 -0
- package/dist/blueprint-generator.js +199 -0
- package/dist/blueprint-generator.js.map +1 -0
- package/dist/blueprint.d.ts +99 -0
- package/dist/blueprint.d.ts.map +1 -0
- package/dist/blueprint.js +257 -0
- package/dist/blueprint.js.map +1 -0
- package/dist/cli-skills.d.ts +16 -0
- package/dist/cli-skills.d.ts.map +1 -0
- package/dist/cli-skills.js +108 -0
- package/dist/cli-skills.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +205 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/client.d.ts +53 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +111 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/live-view.d.ts +49 -0
- package/dist/client/live-view.d.ts.map +1 -0
- package/dist/client/live-view.js +184 -0
- package/dist/client/live-view.js.map +1 -0
- package/dist/client/react.d.ts +4 -0
- package/dist/client/react.d.ts.map +1 -0
- package/dist/client/react.js +6 -0
- package/dist/client/react.js.map +1 -0
- package/dist/client/realtime.d.ts +54 -0
- package/dist/client/realtime.d.ts.map +1 -0
- package/dist/client/realtime.js +105 -0
- package/dist/client/realtime.js.map +1 -0
- package/dist/client/rest.d.ts +2 -0
- package/dist/client/rest.d.ts.map +1 -0
- package/dist/client/rest.js +2 -0
- package/dist/client/rest.js.map +1 -0
- package/dist/client/rpc-client.d.ts +38 -0
- package/dist/client/rpc-client.d.ts.map +1 -0
- package/dist/client/rpc-client.js +59 -0
- package/dist/client/rpc-client.js.map +1 -0
- package/dist/client/solid.d.ts +7 -0
- package/dist/client/solid.d.ts.map +1 -0
- package/dist/client/solid.js +21 -0
- package/dist/client/solid.js.map +1 -0
- package/dist/client/svelte.d.ts +6 -0
- package/dist/client/svelte.d.ts.map +1 -0
- package/dist/client/svelte.js +9 -0
- package/dist/client/svelte.js.map +1 -0
- package/dist/client/vue.d.ts +5 -0
- package/dist/client/vue.d.ts.map +1 -0
- package/dist/client/vue.js +11 -0
- package/dist/client/vue.js.map +1 -0
- package/dist/codegen.d.ts +36 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +235 -0
- package/dist/codegen.js.map +1 -0
- package/dist/config.d.ts +129 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +75 -0
- package/dist/config.js.map +1 -0
- package/dist/cron.d.ts +4 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +3 -0
- package/dist/cron.js.map +1 -0
- package/dist/crud-operations.d.ts +43 -0
- package/dist/crud-operations.d.ts.map +1 -0
- package/dist/crud-operations.js +249 -0
- package/dist/crud-operations.js.map +1 -0
- package/dist/database/adapter.d.ts +26 -0
- package/dist/database/adapter.d.ts.map +1 -0
- package/dist/database/adapter.js +2 -0
- package/dist/database/adapter.js.map +1 -0
- package/dist/database/libsql.d.ts +3 -0
- package/dist/database/libsql.d.ts.map +1 -0
- package/dist/database/libsql.js +39 -0
- package/dist/database/libsql.js.map +1 -0
- package/dist/db.d.ts +15 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +8 -0
- package/dist/db.js.map +1 -0
- package/dist/dev/binaries.d.ts +22 -0
- package/dist/dev/binaries.d.ts.map +1 -0
- package/dist/dev/binaries.js +119 -0
- package/dist/dev/binaries.js.map +1 -0
- package/dist/dev/env.d.ts +11 -0
- package/dist/dev/env.d.ts.map +1 -0
- package/dist/dev/env.js +71 -0
- package/dist/dev/env.js.map +1 -0
- package/dist/dev/index.d.ts +39 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +273 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/processes.d.ts +37 -0
- package/dist/dev/processes.d.ts.map +1 -0
- package/dist/dev/processes.js +104 -0
- package/dist/dev/processes.js.map +1 -0
- package/dist/dev/push.d.ts +2 -0
- package/dist/dev/push.d.ts.map +1 -0
- package/dist/dev/push.js +30 -0
- package/dist/dev/push.js.map +1 -0
- package/dist/dialect.d.ts +17 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +12 -0
- package/dist/dialect.js.map +1 -0
- package/dist/email/smtp.d.ts +20 -0
- package/dist/email/smtp.d.ts.map +1 -0
- package/dist/email/smtp.js +31 -0
- package/dist/email/smtp.js.map +1 -0
- package/dist/email.d.ts +26 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +2 -0
- package/dist/email.js.map +1 -0
- package/dist/env-probe.d.ts +9 -0
- package/dist/env-probe.d.ts.map +1 -0
- package/dist/env-probe.js +72 -0
- package/dist/env-probe.js.map +1 -0
- package/dist/env.d.ts +62 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +86 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +153 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +106 -0
- package/dist/errors.js.map +1 -0
- package/dist/handler.d.ts +11 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +21 -0
- package/dist/handler.js.map +1 -0
- package/dist/hosted-contract.d.ts +11 -0
- package/dist/hosted-contract.d.ts.map +1 -0
- package/dist/hosted-contract.js +50 -0
- package/dist/hosted-contract.js.map +1 -0
- package/dist/idempotency.d.ts +17 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +65 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect.d.ts +15 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +44 -0
- package/dist/inspect.js.map +1 -0
- package/dist/internal-tables.d.ts +1767 -0
- package/dist/internal-tables.d.ts.map +1 -0
- package/dist/internal-tables.js +114 -0
- package/dist/internal-tables.js.map +1 -0
- package/dist/jobs/cron.d.ts +15 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +74 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/define.d.ts +186 -0
- package/dist/jobs/define.d.ts.map +1 -0
- package/dist/jobs/define.js +99 -0
- package/dist/jobs/define.js.map +1 -0
- package/dist/jobs/index.d.ts +9 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +13 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +71 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/slots.d.ts +30 -0
- package/dist/jobs/slots.d.ts.map +1 -0
- package/dist/jobs/slots.js +53 -0
- package/dist/jobs/slots.js.map +1 -0
- package/dist/jobs/worker.d.ts +45 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +605 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/lifecycle.d.ts +10 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +37 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/list-query.d.ts +62 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +190 -0
- package/dist/list-query.js.map +1 -0
- package/dist/live/apply.d.ts +13 -0
- package/dist/live/apply.d.ts.map +1 -0
- package/dist/live/apply.js +32 -0
- package/dist/live/apply.js.map +1 -0
- package/dist/live/index.d.ts +48 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +108 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/protocol.d.ts +47 -0
- package/dist/live/protocol.d.ts.map +1 -0
- package/dist/live/protocol.js +12 -0
- package/dist/live/protocol.js.map +1 -0
- package/dist/live/sse.d.ts +22 -0
- package/dist/live/sse.d.ts.map +1 -0
- package/dist/live/sse.js +41 -0
- package/dist/live/sse.js.map +1 -0
- package/dist/logging.d.ts +8 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +6 -0
- package/dist/logging.js.map +1 -0
- package/dist/manifest-diff.d.ts +6 -0
- package/dist/manifest-diff.d.ts.map +1 -0
- package/dist/manifest-diff.js +42 -0
- package/dist/manifest-diff.js.map +1 -0
- package/dist/manifest.d.ts +87 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +237 -0
- package/dist/manifest.js.map +1 -0
- package/dist/messaging/email.d.ts +16 -0
- package/dist/messaging/email.d.ts.map +1 -0
- package/dist/messaging/email.js +8 -0
- package/dist/messaging/email.js.map +1 -0
- package/dist/messaging/index.d.ts +8 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +4 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/journal.d.ts +4 -0
- package/dist/messaging/journal.d.ts.map +1 -0
- package/dist/messaging/journal.js +19 -0
- package/dist/messaging/journal.js.map +1 -0
- package/dist/messaging/runtime.d.ts +16 -0
- package/dist/messaging/runtime.d.ts.map +1 -0
- package/dist/messaging/runtime.js +213 -0
- package/dist/messaging/runtime.js.map +1 -0
- package/dist/messaging/standalone.d.ts +27 -0
- package/dist/messaging/standalone.d.ts.map +1 -0
- package/dist/messaging/standalone.js +18 -0
- package/dist/messaging/standalone.js.map +1 -0
- package/dist/messaging/telegram.d.ts +16 -0
- package/dist/messaging/telegram.d.ts.map +1 -0
- package/dist/messaging/telegram.js +5 -0
- package/dist/messaging/telegram.js.map +1 -0
- package/dist/messaging/types.d.ts +22 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +17 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/platform.d.ts +25 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +24 -0
- package/dist/platform.js.map +1 -0
- package/dist/provision-internals.d.ts +23 -0
- package/dist/provision-internals.d.ts.map +1 -0
- package/dist/provision-internals.js +7 -0
- package/dist/provision-internals.js.map +1 -0
- package/dist/provision-runtime.d.ts +6 -0
- package/dist/provision-runtime.d.ts.map +1 -0
- package/dist/provision-runtime.js +41 -0
- package/dist/provision-runtime.js.map +1 -0
- package/dist/provision-schema.d.ts +16 -0
- package/dist/provision-schema.d.ts.map +1 -0
- package/dist/provision-schema.js +59 -0
- package/dist/provision-schema.js.map +1 -0
- package/dist/provision.d.ts +8 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +16 -0
- package/dist/provision.js.map +1 -0
- package/dist/query/api.d.ts +10 -0
- package/dist/query/api.d.ts.map +1 -0
- package/dist/query/api.js +7 -0
- package/dist/query/api.js.map +1 -0
- package/dist/query/client.d.ts +28 -0
- package/dist/query/client.d.ts.map +1 -0
- package/dist/query/client.js +87 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/fetch.d.ts +3 -0
- package/dist/query/fetch.d.ts.map +1 -0
- package/dist/query/fetch.js +4 -0
- package/dist/query/fetch.js.map +1 -0
- package/dist/query/index.d.ts +8 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +4 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/infer.d.ts +25 -0
- package/dist/query/infer.d.ts.map +1 -0
- package/dist/query/infer.js +2 -0
- package/dist/query/infer.js.map +1 -0
- package/dist/query/react.d.ts +3 -0
- package/dist/query/react.d.ts.map +1 -0
- package/dist/query/react.js +2 -0
- package/dist/query/react.js.map +1 -0
- package/dist/query/realtime-flush.d.ts +26 -0
- package/dist/query/realtime-flush.d.ts.map +1 -0
- package/dist/query/realtime-flush.js +45 -0
- package/dist/query/realtime-flush.js.map +1 -0
- package/dist/query/realtime-stream.d.ts +3 -0
- package/dist/query/realtime-stream.d.ts.map +1 -0
- package/dist/query/realtime-stream.js +3 -0
- package/dist/query/realtime-stream.js.map +1 -0
- package/dist/query/realtime.d.ts +88 -0
- package/dist/query/realtime.d.ts.map +1 -0
- package/dist/query/realtime.js +255 -0
- package/dist/query/realtime.js.map +1 -0
- package/dist/rate-limit.d.ts +8 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +46 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/readiness-probes.d.ts +4 -0
- package/dist/readiness-probes.d.ts.map +1 -0
- package/dist/readiness-probes.js +23 -0
- package/dist/readiness-probes.js.map +1 -0
- package/dist/readiness.d.ts +39 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +72 -0
- package/dist/readiness.js.map +1 -0
- package/dist/realtime/facade.d.ts +20 -0
- package/dist/realtime/facade.d.ts.map +1 -0
- package/dist/realtime/facade.js +37 -0
- package/dist/realtime/facade.js.map +1 -0
- package/dist/realtime/filter.d.ts +42 -0
- package/dist/realtime/filter.d.ts.map +1 -0
- package/dist/realtime/filter.js +86 -0
- package/dist/realtime/filter.js.map +1 -0
- package/dist/realtime/heartbeat.d.ts +20 -0
- package/dist/realtime/heartbeat.d.ts.map +1 -0
- package/dist/realtime/heartbeat.js +64 -0
- package/dist/realtime/heartbeat.js.map +1 -0
- package/dist/realtime/publisher.d.ts +19 -0
- package/dist/realtime/publisher.d.ts.map +1 -0
- package/dist/realtime/publisher.js +8 -0
- package/dist/realtime/publisher.js.map +1 -0
- package/dist/runtime.d.ts +141 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +463 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-export.d.ts +2 -0
- package/dist/schema-export.d.ts.map +1 -0
- package/dist/schema-export.js +2 -0
- package/dist/schema-export.js.map +1 -0
- package/dist/scope.d.ts +4 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +13 -0
- package/dist/scope.js.map +1 -0
- package/dist/standard-schema.d.ts +13 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +34 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/start/auth-client.d.ts +11 -0
- package/dist/start/auth-client.d.ts.map +1 -0
- package/dist/start/auth-client.js +15 -0
- package/dist/start/auth-client.js.map +1 -0
- package/dist/start/create-start-worker.d.ts +16 -0
- package/dist/start/create-start-worker.d.ts.map +1 -0
- package/dist/start/create-start-worker.js +24 -0
- package/dist/start/create-start-worker.js.map +1 -0
- package/dist/start/index.d.ts +66 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +49 -0
- package/dist/start/index.js.map +1 -0
- package/dist/start/isomorphic-fetch.d.ts +22 -0
- package/dist/start/isomorphic-fetch.d.ts.map +1 -0
- package/dist/start/isomorphic-fetch.js +49 -0
- package/dist/start/isomorphic-fetch.js.map +1 -0
- package/dist/start/server-entry.d.ts +7 -0
- package/dist/start/server-entry.d.ts.map +1 -0
- package/dist/start/server-entry.js +8 -0
- package/dist/start/server-entry.js.map +1 -0
- package/dist/storage/background.d.ts +3 -0
- package/dist/storage/background.d.ts.map +1 -0
- package/dist/storage/background.js +3 -0
- package/dist/storage/background.js.map +1 -0
- package/dist/storage/buckets.d.ts +78 -0
- package/dist/storage/buckets.d.ts.map +1 -0
- package/dist/storage/buckets.js +177 -0
- package/dist/storage/buckets.js.map +1 -0
- package/dist/storage/delete.d.ts +8 -0
- package/dist/storage/delete.d.ts.map +1 -0
- package/dist/storage/delete.js +10 -0
- package/dist/storage/delete.js.map +1 -0
- package/dist/storage/file-meta.d.ts +37 -0
- package/dist/storage/file-meta.d.ts.map +1 -0
- package/dist/storage/file-meta.js +166 -0
- package/dist/storage/file-meta.js.map +1 -0
- package/dist/storage/index.d.ts +28 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +15 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +56 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/operations.d.ts +54 -0
- package/dist/storage/operations.d.ts.map +1 -0
- package/dist/storage/operations.js +212 -0
- package/dist/storage/operations.js.map +1 -0
- package/dist/storage/registry.d.ts +11 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +23 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/s3.d.ts +35 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +125 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/sigv4.d.ts +24 -0
- package/dist/storage/sigv4.d.ts.map +1 -0
- package/dist/storage/sigv4.js +107 -0
- package/dist/storage/sigv4.js.map +1 -0
- package/dist/storage/sweep.d.ts +9 -0
- package/dist/storage/sweep.d.ts.map +1 -0
- package/dist/storage/sweep.js +17 -0
- package/dist/storage/sweep.js.map +1 -0
- package/dist/sync/collection.d.ts +106 -0
- package/dist/sync/collection.d.ts.map +1 -0
- package/dist/sync/collection.js +258 -0
- package/dist/sync/collection.js.map +1 -0
- package/dist/sync/index.d.ts +8 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/realtime-sync.d.ts +31 -0
- package/dist/sync/realtime-sync.d.ts.map +1 -0
- package/dist/sync/realtime-sync.js +46 -0
- package/dist/sync/realtime-sync.js.map +1 -0
- package/dist/sync/sync-client.d.ts +28 -0
- package/dist/sync/sync-client.d.ts.map +1 -0
- package/dist/sync/sync-client.js +52 -0
- package/dist/sync/sync-client.js.map +1 -0
- package/dist/sync/update-queue.d.ts +27 -0
- package/dist/sync/update-queue.d.ts.map +1 -0
- package/dist/sync/update-queue.js +66 -0
- package/dist/sync/update-queue.js.map +1 -0
- package/dist/testing/auth.d.ts +85 -0
- package/dist/testing/auth.d.ts.map +1 -0
- package/dist/testing/auth.js +140 -0
- package/dist/testing/auth.js.map +1 -0
- package/dist/testing/client.d.ts +6 -0
- package/dist/testing/client.d.ts.map +1 -0
- package/dist/testing/client.js +9 -0
- package/dist/testing/client.js.map +1 -0
- package/dist/testing/database.d.ts +6 -0
- package/dist/testing/database.d.ts.map +1 -0
- package/dist/testing/database.js +8 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/email.d.ts +15 -0
- package/dist/testing/email.d.ts.map +1 -0
- package/dist/testing/email.js +32 -0
- package/dist/testing/email.js.map +1 -0
- package/dist/testing/fixture.d.ts +51 -0
- package/dist/testing/fixture.d.ts.map +1 -0
- package/dist/testing/fixture.js +177 -0
- package/dist/testing/fixture.js.map +1 -0
- package/dist/testing/jobs.d.ts +40 -0
- package/dist/testing/jobs.d.ts.map +1 -0
- package/dist/testing/jobs.js +76 -0
- package/dist/testing/jobs.js.map +1 -0
- package/dist/testing/logs.d.ts +18 -0
- package/dist/testing/logs.d.ts.map +1 -0
- package/dist/testing/logs.js +53 -0
- package/dist/testing/logs.js.map +1 -0
- package/dist/testing/messaging.d.ts +21 -0
- package/dist/testing/messaging.d.ts.map +1 -0
- package/dist/testing/messaging.js +34 -0
- package/dist/testing/messaging.js.map +1 -0
- package/dist/testing/storage.d.ts +7 -0
- package/dist/testing/storage.d.ts.map +1 -0
- package/dist/testing/storage.js +29 -0
- package/dist/testing/storage.js.map +1 -0
- package/dist/testing/workers-fakes.d.ts +17 -0
- package/dist/testing/workers-fakes.d.ts.map +1 -0
- package/dist/testing/workers-fakes.js +98 -0
- package/dist/testing/workers-fakes.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/typeid.d.ts +46 -0
- package/dist/typeid.d.ts.map +1 -0
- package/dist/typeid.js +130 -0
- package/dist/typeid.js.map +1 -0
- package/dist/vite.d.ts +26 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +100 -0
- package/dist/vite.js.map +1 -0
- package/dist/worker-plan.d.ts +37 -0
- package/dist/worker-plan.d.ts.map +1 -0
- package/dist/worker-plan.js +63 -0
- package/dist/worker-plan.js.map +1 -0
- package/dist/workers/app.d.ts +19 -0
- package/dist/workers/app.d.ts.map +1 -0
- package/dist/workers/app.js +56 -0
- package/dist/workers/app.js.map +1 -0
- package/dist/workers/entry.d.ts +7 -0
- package/dist/workers/entry.d.ts.map +1 -0
- package/dist/workers/entry.js +8 -0
- package/dist/workers/entry.js.map +1 -0
- package/dist/workers/index.d.ts +23 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +39 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/r2.d.ts +24 -0
- package/dist/workers/r2.d.ts.map +1 -0
- package/dist/workers/r2.js +76 -0
- package/dist/workers/r2.js.map +1 -0
- package/dist/workers/rate-limiter.d.ts +9 -0
- package/dist/workers/rate-limiter.d.ts.map +1 -0
- package/dist/workers/rate-limiter.js +22 -0
- package/dist/workers/rate-limiter.js.map +1 -0
- package/dist/workers/realtime-hub.d.ts +20 -0
- package/dist/workers/realtime-hub.d.ts.map +1 -0
- package/dist/workers/realtime-hub.js +117 -0
- package/dist/workers/realtime-hub.js.map +1 -0
- package/dist/workers/registry.d.ts +13 -0
- package/dist/workers/registry.d.ts.map +1 -0
- package/dist/workers/registry.js +19 -0
- package/dist/workers/registry.js.map +1 -0
- package/dist/workers/scheduler.d.ts +13 -0
- package/dist/workers/scheduler.d.ts.map +1 -0
- package/dist/workers/scheduler.js +71 -0
- package/dist/workers/scheduler.js.map +1 -0
- package/dist/workers/types.d.ts +55 -0
- package/dist/workers/types.d.ts.map +1 -0
- package/dist/workers/types.js +4 -0
- package/dist/workers/types.js.map +1 -0
- package/dist/workers/wrangler.d.ts +62 -0
- package/dist/workers/wrangler.d.ts.map +1 -0
- package/dist/workers/wrangler.js +90 -0
- package/dist/workers/wrangler.js.map +1 -0
- package/package.json +286 -0
- package/skills/creating-workerstack-apps/SKILL.md +45 -0
- package/skills/creating-workerstack-apps/agents/openai.yaml +4 -0
- package/skills/creating-workerstack-apps/references/application-structure.md +219 -0
- package/skills/creating-workerstack-apps/references/runtime-integrations.md +96 -0
- package/skills/creating-workerstack-apps/references/verification.md +29 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createORPCClient } from '@orpc/client';
|
|
2
|
+
import { RPCLink } from '@orpc/client/fetch';
|
|
3
|
+
export const OPERATION_ID_HEADER = 'x-workerstack-operation-id';
|
|
4
|
+
function rpcUrl(baseUrl = '/api') {
|
|
5
|
+
return (baseUrl.endsWith('/') ? `${baseUrl}rpc` : `${baseUrl}/rpc`);
|
|
6
|
+
}
|
|
7
|
+
function adaptClient(client) {
|
|
8
|
+
const cache = new Map();
|
|
9
|
+
return new Proxy(function () { }, {
|
|
10
|
+
get(_target, property) {
|
|
11
|
+
if (!cache.has(property)) {
|
|
12
|
+
const value = Reflect.get(client, property);
|
|
13
|
+
cache.set(property, value === null ||
|
|
14
|
+
(typeof value !== 'object' && typeof value !== 'function')
|
|
15
|
+
? value
|
|
16
|
+
: adaptClient(value));
|
|
17
|
+
}
|
|
18
|
+
return cache.get(property);
|
|
19
|
+
},
|
|
20
|
+
apply(_target, _thisArg, args) {
|
|
21
|
+
const [input, options = {}] = args;
|
|
22
|
+
return Reflect.apply(client, undefined, [
|
|
23
|
+
input,
|
|
24
|
+
{
|
|
25
|
+
signal: options.signal,
|
|
26
|
+
lastEventId: options.lastEventId,
|
|
27
|
+
context: {
|
|
28
|
+
operationId: options.operationId,
|
|
29
|
+
headers: options.headers,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function createRpcClient(options = {}) {
|
|
37
|
+
const fetcher = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
|
|
38
|
+
const link = new RPCLink({
|
|
39
|
+
url: rpcUrl(options.baseUrl),
|
|
40
|
+
fetch: (url, init) => fetcher(url, init),
|
|
41
|
+
headers: async ({ context }) => {
|
|
42
|
+
const defaults = typeof options.headers === 'function'
|
|
43
|
+
? await options.headers()
|
|
44
|
+
: options.headers;
|
|
45
|
+
const headers = new Headers(defaults);
|
|
46
|
+
new Headers(context.headers).forEach((value, key) => headers.set(key, value));
|
|
47
|
+
if (context.operationId) {
|
|
48
|
+
headers.set(OPERATION_ID_HEADER, context.operationId);
|
|
49
|
+
}
|
|
50
|
+
return headers;
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const client = createORPCClient(link);
|
|
54
|
+
return adaptClient(client);
|
|
55
|
+
}
|
|
56
|
+
export function createClient(options = {}) {
|
|
57
|
+
return createRpcClient(options);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=rpc-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/client/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StandardUrl } from '@orpc/client'\nimport type { AnyRouter, RouterClient } from '@orpc/server'\n\nimport { createORPCClient } from '@orpc/client'\nimport { RPCLink } from '@orpc/client/fetch'\n\nexport const OPERATION_ID_HEADER = 'x-workerstack-operation-id'\n\nexport type Fetch = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>\n\nexport type ClientOptions = {\n baseUrl?: string\n fetch?: Fetch\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>)\n}\n\nexport type CallOptions = {\n signal?: AbortSignal\n lastEventId?: string\n operationId?: string\n headers?: HeadersInit\n}\n\nexport type ClientCarrier = {\n api: AnyRouter\n buckets: string\n}\n\nexport type AnyWorkerstackApp = {\n $inferClient?: ClientCarrier | undefined\n}\n\nexport type InferApiRouter<TApp extends AnyWorkerstackApp> = NonNullable<\n TApp['$inferClient']\n>['api']\n\ntype RpcContext = {\n operationId?: string\n headers?: HeadersInit\n}\n\ntype AdaptCallArgs<TArgs extends unknown[]> = {\n [K in keyof TArgs]: K extends 1 | '1' ? CallOptions : TArgs[K]\n}\n\nexport type DirectClient<T> = T extends (...args: infer TArgs) => infer TResult\n ? (...args: AdaptCallArgs<TArgs>) => TResult\n : { [K in keyof T]: DirectClient<T[K]> }\n\nexport type RpcClient<TRouter extends AnyRouter> = DirectClient<\n RouterClient<TRouter, RpcContext>\n>\n\nexport type WorkerstackClient<TApp extends AnyWorkerstackApp> = RpcClient<\n InferApiRouter<TApp>\n>\n\nfunction rpcUrl(baseUrl = '/api'): StandardUrl {\n return (\n baseUrl.endsWith('/') ? `${baseUrl}rpc` : `${baseUrl}/rpc`\n ) as StandardUrl\n}\n\nfunction adaptClient<T>(client: T): DirectClient<T> {\n const cache = new Map<PropertyKey, unknown>()\n return new Proxy(function () {} as (...args: unknown[]) => unknown, {\n get(_target, property) {\n if (!cache.has(property)) {\n const value = Reflect.get(client as object, property)\n cache.set(\n property,\n value === null ||\n (typeof value !== 'object' && typeof value !== 'function')\n ? value\n : adaptClient(value),\n )\n }\n return cache.get(property)\n },\n apply(_target, _thisArg, args: [unknown, CallOptions?]) {\n const [input, options = {}] = args\n return Reflect.apply(\n client as (...args: unknown[]) => unknown,\n undefined,\n [\n input,\n {\n signal: options.signal,\n lastEventId: options.lastEventId,\n context: {\n operationId: options.operationId,\n headers: options.headers,\n },\n },\n ],\n )\n },\n }) as unknown as DirectClient<T>\n}\n\nexport function createRpcClient<TRouter extends AnyRouter>(\n options: ClientOptions = {},\n): RpcClient<TRouter> {\n const fetcher =\n options.fetch ?? ((input, init) => globalThis.fetch(input, init))\n const link = new RPCLink<RpcContext>({\n url: rpcUrl(options.baseUrl),\n fetch: (url, init) => fetcher(url, init),\n headers: async ({ context }) => {\n const defaults =\n typeof options.headers === 'function'\n ? await options.headers()\n : options.headers\n const headers = new Headers(defaults)\n new Headers(context.headers).forEach((value, key) =>\n headers.set(key, value),\n )\n if (context.operationId) {\n headers.set(OPERATION_ID_HEADER, context.operationId)\n }\n return headers\n },\n })\n const client = createORPCClient<RouterClient<TRouter, RpcContext>>(link)\n return adaptClient(client)\n}\n\nexport function createClient<TApp extends AnyWorkerstackApp>(\n options: ClientOptions = {},\n): WorkerstackClient<TApp> {\n return createRpcClient<InferApiRouter<TApp>>(options)\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Store } from 'solid-js';
|
|
2
|
+
import type { LiveView, LiveViewSnapshot } from './live-view.js';
|
|
3
|
+
/** Mirrors confirmed LiveView snapshots into a keyed Solid store. */
|
|
4
|
+
export declare function createLiveStore<T extends {
|
|
5
|
+
id: unknown;
|
|
6
|
+
}>(view: LiveView<T>): Store<LiveViewSnapshot<T>>;
|
|
7
|
+
//# sourceMappingURL=solid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../src/client/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EACvD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAiB5B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createStore, onCleanup, reconcile } from 'solid-js';
|
|
2
|
+
/** Mirrors confirmed LiveView snapshots into a keyed Solid store. */
|
|
3
|
+
export function createLiveStore(view) {
|
|
4
|
+
const initial = view.getSnapshot();
|
|
5
|
+
const [state, setState] = createStore({
|
|
6
|
+
items: [...initial.items],
|
|
7
|
+
status: initial.status,
|
|
8
|
+
error: initial.error,
|
|
9
|
+
});
|
|
10
|
+
const unsubscribe = view.subscribe(() => {
|
|
11
|
+
const next = view.getSnapshot();
|
|
12
|
+
setState((draft) => {
|
|
13
|
+
reconcile([...next.items], (item) => item.id)(draft.items);
|
|
14
|
+
draft.status = next.status;
|
|
15
|
+
draft.error = next.error;
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
onCleanup(unsubscribe);
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=solid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid.js","sourceRoot":"","sources":["../../src/client/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAc,MAAM,UAAU,CAAA;AAIxE,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAC7B,IAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAClC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC;QACpC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC/B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAO,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC7D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,WAAW,CAAC,CAAA;IACtB,OAAO,KAAmC,CAAA;AAC5C,CAAC","sourcesContent":["import { createStore, onCleanup, reconcile, type Store } from 'solid-js'\n\nimport type { LiveView, LiveViewSnapshot } from './live-view'\n\n/** Mirrors confirmed LiveView snapshots into a keyed Solid store. */\nexport function createLiveStore<T extends { id: unknown }>(\n view: LiveView<T>,\n): Store<LiveViewSnapshot<T>> {\n const initial = view.getSnapshot()\n const [state, setState] = createStore({\n items: [...initial.items],\n status: initial.status,\n error: initial.error,\n })\n const unsubscribe = view.subscribe(() => {\n const next = view.getSnapshot()\n setState((draft) => {\n reconcile([...next.items], (item: T) => item.id)(draft.items)\n draft.status = next.status\n draft.error = next.error\n })\n })\n onCleanup(unsubscribe)\n return state as Store<LiveViewSnapshot<T>>\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LiveView, LiveViewSnapshot } from './live-view.js';
|
|
2
|
+
export type Readable<T> = {
|
|
3
|
+
subscribe(run: (value: T) => void): () => void;
|
|
4
|
+
};
|
|
5
|
+
export declare function liveStore<T>(view: LiveView<T>): Readable<LiveViewSnapshot<T>>;
|
|
6
|
+
//# sourceMappingURL=svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../src/client/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC/C,CAAA;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAO7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../src/client/svelte.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,SAAS,CAAI,IAAiB;IAC5C,OAAO;QACL,SAAS,CAAC,GAAG;YACX,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACtD,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["import type { LiveView, LiveViewSnapshot } from './live-view'\n\nexport type Readable<T> = {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport function liveStore<T>(view: LiveView<T>): Readable<LiveViewSnapshot<T>> {\n return {\n subscribe(run) {\n run(view.getSnapshot())\n return view.subscribe(() => run(view.getSnapshot()))\n },\n }\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ShallowRef } from 'vue';
|
|
2
|
+
import type { LiveView, LiveViewSnapshot } from './live-view.js';
|
|
3
|
+
/** Vue owns reactivity; LiveView supplies immutable external snapshots. */
|
|
4
|
+
export declare function useLiveView<T>(view: LiveView<T>): ShallowRef<LiveViewSnapshot<T>>;
|
|
5
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/client/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CASjC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { onScopeDispose, shallowRef } from 'vue';
|
|
2
|
+
/** Vue owns reactivity; LiveView supplies immutable external snapshots. */
|
|
3
|
+
export function useLiveView(view) {
|
|
4
|
+
const state = shallowRef(view.getSnapshot());
|
|
5
|
+
const unsubscribe = view.subscribe(() => {
|
|
6
|
+
state.value = view.getSnapshot();
|
|
7
|
+
});
|
|
8
|
+
onScopeDispose(unsubscribe);
|
|
9
|
+
return state;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/client/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAA;AAIjE,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CACzB,IAAiB;IAEjB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAE1C,CAAA;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IACF,cAAc,CAAC,WAAW,CAAC,CAAA;IAC3B,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import { onScopeDispose, shallowRef, type ShallowRef } from 'vue'\n\nimport type { LiveView, LiveViewSnapshot } from './live-view'\n\n/** Vue owns reactivity; LiveView supplies immutable external snapshots. */\nexport function useLiveView<T>(\n view: LiveView<T>,\n): ShallowRef<LiveViewSnapshot<T>> {\n const state = shallowRef(view.getSnapshot()) as ShallowRef<\n LiveViewSnapshot<T>\n >\n const unsubscribe = view.subscribe(() => {\n state.value = view.getSnapshot()\n })\n onScopeDispose(unsubscribe)\n return state\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed route-map generation from the app's OpenAPI document.
|
|
3
|
+
*
|
|
4
|
+
* `generateRouteMap` turns `/api/openapi.json` into a small standalone module:
|
|
5
|
+
* an `ApiRoutes` type — one `Op` entry per operation, carrying its method,
|
|
6
|
+
* path literal, query/body/output types and whether it streams — plus a
|
|
7
|
+
* runtime `routes` descriptor object for that same list.
|
|
8
|
+
*
|
|
9
|
+
* The transport itself is deliberately NOT generated: a ~90-line handwritten
|
|
10
|
+
* client (`createRestClient`) consumes any route map. Types change with every API
|
|
11
|
+
* edit and are regenerated; the client never changes at all.
|
|
12
|
+
*/
|
|
13
|
+
type JsonSchema = {
|
|
14
|
+
$ref?: string;
|
|
15
|
+
type?: string | string[];
|
|
16
|
+
anyOf?: JsonSchema[];
|
|
17
|
+
oneOf?: JsonSchema[];
|
|
18
|
+
allOf?: JsonSchema[];
|
|
19
|
+
const?: unknown;
|
|
20
|
+
enum?: unknown[];
|
|
21
|
+
items?: JsonSchema;
|
|
22
|
+
properties?: Record<string, JsonSchema>;
|
|
23
|
+
required?: string[];
|
|
24
|
+
additionalProperties?: boolean | JsonSchema;
|
|
25
|
+
};
|
|
26
|
+
/** JSON-schema subset → TypeScript type expression, with $refs inlined. */
|
|
27
|
+
export declare function schemaToType(schema: JsonSchema | undefined, components?: Record<string, JsonSchema>, depth?: number): string;
|
|
28
|
+
/**
|
|
29
|
+
* Deterministic operation names from the path shape:
|
|
30
|
+
* `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;
|
|
31
|
+
* `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function operationName(path: string, method: string): string;
|
|
34
|
+
export declare function generateRouteMap(input: unknown): string;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,oBAAoB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;CAC5C,CAAA;AAoCD,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,EAC3C,KAAK,SAAI,GACR,MAAM,CA+DR;AAUD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBlE;AA+FD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAwDvD"}
|
package/dist/codegen.js
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed route-map generation from the app's OpenAPI document.
|
|
3
|
+
*
|
|
4
|
+
* `generateRouteMap` turns `/api/openapi.json` into a small standalone module:
|
|
5
|
+
* an `ApiRoutes` type — one `Op` entry per operation, carrying its method,
|
|
6
|
+
* path literal, query/body/output types and whether it streams — plus a
|
|
7
|
+
* runtime `routes` descriptor object for that same list.
|
|
8
|
+
*
|
|
9
|
+
* The transport itself is deliberately NOT generated: a ~90-line handwritten
|
|
10
|
+
* client (`createRestClient`) consumes any route map. Types change with every API
|
|
11
|
+
* edit and are regenerated; the client never changes at all.
|
|
12
|
+
*/
|
|
13
|
+
function pascal(value) {
|
|
14
|
+
return value
|
|
15
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.map((part) => part[0].toUpperCase() + part.slice(1))
|
|
18
|
+
.join('');
|
|
19
|
+
}
|
|
20
|
+
function camel(value) {
|
|
21
|
+
const asPascal = pascal(value);
|
|
22
|
+
return asPascal ? asPascal[0].toLowerCase() + asPascal.slice(1) : 'root';
|
|
23
|
+
}
|
|
24
|
+
/** JSON-schema subset → TypeScript type expression, with $refs inlined. */
|
|
25
|
+
export function schemaToType(schema, components = {}, depth = 0) {
|
|
26
|
+
if (!schema || depth > 4)
|
|
27
|
+
return 'unknown';
|
|
28
|
+
if (schema.$ref) {
|
|
29
|
+
const name = schema.$ref.split('/').pop() ?? '';
|
|
30
|
+
return schemaToType(components[name], components, depth + 1);
|
|
31
|
+
}
|
|
32
|
+
if (schema.const !== undefined)
|
|
33
|
+
return JSON.stringify(schema.const);
|
|
34
|
+
if (schema.enum) {
|
|
35
|
+
return [...new Set(schema.enum.map((value) => JSON.stringify(value)))].join(' | ');
|
|
36
|
+
}
|
|
37
|
+
const variants = schema.anyOf ?? schema.oneOf;
|
|
38
|
+
if (variants) {
|
|
39
|
+
const members = [
|
|
40
|
+
...new Set(variants.map((member) => schemaToType(member, components, depth))),
|
|
41
|
+
];
|
|
42
|
+
const withoutNull = members.filter((member) => member !== 'null');
|
|
43
|
+
const joined = withoutNull.join(' | ');
|
|
44
|
+
const core = withoutNull.length > 1 ? `(${joined})` : joined || 'unknown';
|
|
45
|
+
return members.length !== withoutNull.length ? `${core} | null` : core;
|
|
46
|
+
}
|
|
47
|
+
if (schema.allOf) {
|
|
48
|
+
return schema.allOf
|
|
49
|
+
.map((member) => schemaToType(member, components, depth))
|
|
50
|
+
.join(' & ');
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(schema.type)) {
|
|
53
|
+
return schema.type
|
|
54
|
+
.map((entry) => (entry === 'integer' ? 'number' : entry))
|
|
55
|
+
.join(' | ');
|
|
56
|
+
}
|
|
57
|
+
switch (schema.type) {
|
|
58
|
+
case 'string':
|
|
59
|
+
return 'string';
|
|
60
|
+
case 'integer':
|
|
61
|
+
case 'number':
|
|
62
|
+
return 'number';
|
|
63
|
+
case 'boolean':
|
|
64
|
+
return 'boolean';
|
|
65
|
+
case 'null':
|
|
66
|
+
return 'null';
|
|
67
|
+
case 'array':
|
|
68
|
+
return `${schemaToType(schema.items, components, depth)}[]`;
|
|
69
|
+
case 'object': {
|
|
70
|
+
const properties = schema.properties ?? {};
|
|
71
|
+
const required = new Set(schema.required ?? []);
|
|
72
|
+
if (Object.keys(properties).length === 0) {
|
|
73
|
+
return schema.additionalProperties === false
|
|
74
|
+
? 'Record<string, never>'
|
|
75
|
+
: 'Record<string, unknown>';
|
|
76
|
+
}
|
|
77
|
+
const fields = Object.entries(properties).map(([key, child]) => {
|
|
78
|
+
const optional = required.has(key) ? '' : '?';
|
|
79
|
+
return `${JSON.stringify(key)}${optional}: ${schemaToType(child, components, depth)}`;
|
|
80
|
+
});
|
|
81
|
+
return `{ ${fields.join('; ')} }`;
|
|
82
|
+
}
|
|
83
|
+
default:
|
|
84
|
+
return 'unknown';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const METHOD_ACTIONS = {
|
|
88
|
+
get: 'Get',
|
|
89
|
+
post: 'Create',
|
|
90
|
+
patch: 'Update',
|
|
91
|
+
put: 'Update',
|
|
92
|
+
delete: 'Delete',
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Deterministic operation names from the path shape:
|
|
96
|
+
* `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;
|
|
97
|
+
* `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.
|
|
98
|
+
*/
|
|
99
|
+
export function operationName(path, method) {
|
|
100
|
+
const segments = path.split('/').filter(Boolean);
|
|
101
|
+
if (segments[0] === 'api')
|
|
102
|
+
segments.shift();
|
|
103
|
+
const last = segments[segments.length - 1] ?? '';
|
|
104
|
+
const action = METHOD_ACTIONS[method] ?? pascal(method);
|
|
105
|
+
if (last.startsWith('{')) {
|
|
106
|
+
return `${camel(segments.slice(0, -1).join('_'))}${action}`;
|
|
107
|
+
}
|
|
108
|
+
const statics = segments.filter((segment) => !segment.startsWith('{'));
|
|
109
|
+
if (statics.length === 1 && method === 'get')
|
|
110
|
+
return `${camel(last)}List`;
|
|
111
|
+
if (statics.length === 1 && method === 'post')
|
|
112
|
+
return `${camel(last)}Create`;
|
|
113
|
+
// A deeper static path reads as its own name (`/api/posts/live`) — the
|
|
114
|
+
// method suffix would only add noise.
|
|
115
|
+
if (method === 'get')
|
|
116
|
+
return camel(statics.join('_'));
|
|
117
|
+
return `${camel(statics.join('_'))}${action}`;
|
|
118
|
+
}
|
|
119
|
+
const HTTP_METHODS = ['get', 'post', 'patch', 'put', 'delete'];
|
|
120
|
+
function collectOperations(spec) {
|
|
121
|
+
const components = spec.components?.schemas ?? {};
|
|
122
|
+
const operations = [];
|
|
123
|
+
for (const [path, methods] of Object.entries(spec.paths ?? {})) {
|
|
124
|
+
// Better Auth owns its client contract. Keeping auth endpoints out of the
|
|
125
|
+
// generic REST artifact avoids a second, less capable auth API surface.
|
|
126
|
+
if (path === '/api/auth' || path.startsWith('/api/auth/'))
|
|
127
|
+
continue;
|
|
128
|
+
for (const rawMethod of Object.keys(methods)) {
|
|
129
|
+
if (!HTTP_METHODS.includes(rawMethod))
|
|
130
|
+
continue;
|
|
131
|
+
const operation = methods[rawMethod];
|
|
132
|
+
if (!operation)
|
|
133
|
+
continue;
|
|
134
|
+
const parameters = operation.parameters ?? [];
|
|
135
|
+
const queryParameters = parameters.filter((parameter) => parameter.in === 'query');
|
|
136
|
+
let queryType;
|
|
137
|
+
if (queryParameters.length > 0) {
|
|
138
|
+
const fields = queryParameters.map((parameter) => {
|
|
139
|
+
const schema = parameter.schema ?? parameter.content?.['application/json']?.schema;
|
|
140
|
+
return `${JSON.stringify(parameter.name)}?: ${schemaToType(schema, components)}`;
|
|
141
|
+
});
|
|
142
|
+
queryType = `{ ${fields.join('; ')} }`;
|
|
143
|
+
}
|
|
144
|
+
const requestSchema = operation.requestBody?.content?.['application/json']?.schema;
|
|
145
|
+
const rawBodyType = requestSchema
|
|
146
|
+
? schemaToType(requestSchema, components)
|
|
147
|
+
: undefined;
|
|
148
|
+
// oRPC emits an empty-object request body even for body-less
|
|
149
|
+
// procedures like DELETE; a free-form record there is noise.
|
|
150
|
+
const bodyType = rawBodyType === 'Record<string, unknown>' && rawMethod === 'delete'
|
|
151
|
+
? undefined
|
|
152
|
+
: rawBodyType;
|
|
153
|
+
const okResponse = operation.responses?.['200'] ?? operation.responses?.['201'];
|
|
154
|
+
const jsonSchema = okResponse?.content?.['application/json']?.schema;
|
|
155
|
+
const eventSchema = okResponse?.content?.['text/event-stream']?.schema;
|
|
156
|
+
let outputType = 'void';
|
|
157
|
+
let isStream = false;
|
|
158
|
+
if (eventSchema) {
|
|
159
|
+
isStream = true;
|
|
160
|
+
// oRPC wraps each SSE data frame as {event, data}; unwrap the payload.
|
|
161
|
+
// Wrapper variants that carry no data (or map to `unknown`) would
|
|
162
|
+
// swallow the whole union, so they are dropped here.
|
|
163
|
+
const wrapper = eventSchema.oneOf ?? eventSchema.anyOf ?? [];
|
|
164
|
+
outputType =
|
|
165
|
+
[
|
|
166
|
+
...new Set(wrapper
|
|
167
|
+
.map((variant) => variant.properties?.['data'])
|
|
168
|
+
.filter((variant) => Boolean(variant))
|
|
169
|
+
.map((variant) => schemaToType(variant, components))
|
|
170
|
+
.filter((type) => type !== 'unknown')),
|
|
171
|
+
].join(' | ') || 'void';
|
|
172
|
+
}
|
|
173
|
+
else if (jsonSchema) {
|
|
174
|
+
outputType = schemaToType(jsonSchema, components);
|
|
175
|
+
}
|
|
176
|
+
operations.push({
|
|
177
|
+
name: operationName(path, rawMethod),
|
|
178
|
+
method: rawMethod.toUpperCase(),
|
|
179
|
+
path,
|
|
180
|
+
queryType,
|
|
181
|
+
bodyType,
|
|
182
|
+
outputType,
|
|
183
|
+
isStream,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return operations;
|
|
188
|
+
}
|
|
189
|
+
export function generateRouteMap(input) {
|
|
190
|
+
const spec = input;
|
|
191
|
+
const operations = collectOperations(spec);
|
|
192
|
+
const lines = [];
|
|
193
|
+
lines.push('// Generated by workerstack codegen from /api/openapi.json.');
|
|
194
|
+
lines.push('// Regenerate with `bun run gen`; do not edit by hand.');
|
|
195
|
+
lines.push('');
|
|
196
|
+
lines.push('/** One API operation: literals describe the wire, phantoms the shapes. */');
|
|
197
|
+
lines.push('export interface Op<');
|
|
198
|
+
lines.push(' M extends string,');
|
|
199
|
+
lines.push(' P extends string,');
|
|
200
|
+
lines.push(' Query = undefined,');
|
|
201
|
+
lines.push(' Body = undefined,');
|
|
202
|
+
lines.push(' Output = void,');
|
|
203
|
+
lines.push(' Stream extends boolean = false,');
|
|
204
|
+
lines.push('> {');
|
|
205
|
+
lines.push(' method: M');
|
|
206
|
+
lines.push(' path: P');
|
|
207
|
+
lines.push(' stream: Stream');
|
|
208
|
+
lines.push(' query?: Query');
|
|
209
|
+
lines.push(' body?: Body');
|
|
210
|
+
lines.push(' output?: Output');
|
|
211
|
+
lines.push('}');
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('export type ApiRoutes = {');
|
|
214
|
+
const runtimeEntries = [];
|
|
215
|
+
for (const operation of operations) {
|
|
216
|
+
const generics = [
|
|
217
|
+
`'${operation.method}'`,
|
|
218
|
+
`'${operation.path}'`,
|
|
219
|
+
operation.queryType ?? 'undefined',
|
|
220
|
+
operation.bodyType ?? 'undefined',
|
|
221
|
+
operation.isStream ? operation.outputType : operation.outputType,
|
|
222
|
+
String(operation.isStream),
|
|
223
|
+
].join(', ');
|
|
224
|
+
lines.push(` ${operation.name}: Op<${generics}>`);
|
|
225
|
+
runtimeEntries.push(` ${operation.name}: { method: '${operation.method}', path: '${operation.path}'${operation.isStream ? ', stream: true' : ''} },`);
|
|
226
|
+
}
|
|
227
|
+
lines.push('}');
|
|
228
|
+
lines.push('');
|
|
229
|
+
lines.push('/** Wire descriptors for createRestClient — same keys, runtime values. */');
|
|
230
|
+
lines.push('export const routes = {');
|
|
231
|
+
lines.push(...runtimeEntries);
|
|
232
|
+
lines.push('} as const');
|
|
233
|
+
return lines.join('\n');
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Typed route-map generation from the app's OpenAPI document.\n *\n * `generateRouteMap` turns `/api/openapi.json` into a small standalone module:\n * an `ApiRoutes` type — one `Op` entry per operation, carrying its method,\n * path literal, query/body/output types and whether it streams — plus a\n * runtime `routes` descriptor object for that same list.\n *\n * The transport itself is deliberately NOT generated: a ~90-line handwritten\n * client (`createRestClient`) consumes any route map. Types change with every API\n * edit and are regenerated; the client never changes at all.\n */\n\ntype JsonSchema = {\n $ref?: string\n type?: string | string[]\n anyOf?: JsonSchema[]\n oneOf?: JsonSchema[]\n allOf?: JsonSchema[]\n const?: unknown\n enum?: unknown[]\n items?: JsonSchema\n properties?: Record<string, JsonSchema>\n required?: string[]\n additionalProperties?: boolean | JsonSchema\n}\n\ntype Parameter = {\n in: string\n name: string\n schema?: JsonSchema\n content?: Record<string, { schema: JsonSchema }>\n}\n\ntype Operation = {\n parameters?: Parameter[]\n requestBody?: { content?: Record<string, { schema: JsonSchema }> }\n responses?: Record<\n string,\n { content?: Record<string, { schema: JsonSchema }> }\n >\n}\n\ntype OpenApiSpec = {\n paths?: Record<string, Record<string, Operation | undefined>>\n components?: { schemas?: Record<string, JsonSchema> }\n}\n\nfunction pascal(value: string): string {\n return value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part[0]!.toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction camel(value: string): string {\n const asPascal = pascal(value)\n return asPascal ? asPascal[0]!.toLowerCase() + asPascal.slice(1) : 'root'\n}\n\n/** JSON-schema subset → TypeScript type expression, with $refs inlined. */\nexport function schemaToType(\n schema: JsonSchema | undefined,\n components: Record<string, JsonSchema> = {},\n depth = 0,\n): string {\n if (!schema || depth > 4) return 'unknown'\n if (schema.$ref) {\n const name = schema.$ref.split('/').pop() ?? ''\n return schemaToType(components[name], components, depth + 1)\n }\n if (schema.const !== undefined) return JSON.stringify(schema.const)\n if (schema.enum) {\n return [...new Set(schema.enum.map((value) => JSON.stringify(value)))].join(\n ' | ',\n )\n }\n const variants = schema.anyOf ?? schema.oneOf\n if (variants) {\n const members = [\n ...new Set(\n variants.map((member) => schemaToType(member, components, depth)),\n ),\n ]\n const withoutNull = members.filter((member) => member !== 'null')\n const joined = withoutNull.join(' | ')\n const core = withoutNull.length > 1 ? `(${joined})` : joined || 'unknown'\n return members.length !== withoutNull.length ? `${core} | null` : core\n }\n if (schema.allOf) {\n return schema.allOf\n .map((member) => schemaToType(member, components, depth))\n .join(' & ')\n }\n if (Array.isArray(schema.type)) {\n return schema.type\n .map((entry) => (entry === 'integer' ? 'number' : entry))\n .join(' | ')\n }\n switch (schema.type) {\n case 'string':\n return 'string'\n case 'integer':\n case 'number':\n return 'number'\n case 'boolean':\n return 'boolean'\n case 'null':\n return 'null'\n case 'array':\n return `${schemaToType(schema.items, components, depth)}[]`\n case 'object': {\n const properties = schema.properties ?? {}\n const required = new Set(schema.required ?? [])\n if (Object.keys(properties).length === 0) {\n return schema.additionalProperties === false\n ? 'Record<string, never>'\n : 'Record<string, unknown>'\n }\n const fields = Object.entries(properties).map(([key, child]) => {\n const optional = required.has(key) ? '' : '?'\n return `${JSON.stringify(key)}${optional}: ${schemaToType(child, components, depth)}`\n })\n return `{ ${fields.join('; ')} }`\n }\n default:\n return 'unknown'\n }\n}\n\nconst METHOD_ACTIONS: Record<string, string> = {\n get: 'Get',\n post: 'Create',\n patch: 'Update',\n put: 'Update',\n delete: 'Delete',\n}\n\n/**\n * Deterministic operation names from the path shape:\n * `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;\n * `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.\n */\nexport function operationName(path: string, method: string): string {\n const segments = path.split('/').filter(Boolean)\n if (segments[0] === 'api') segments.shift()\n const last = segments[segments.length - 1] ?? ''\n const action = METHOD_ACTIONS[method] ?? pascal(method)\n\n if (last.startsWith('{')) {\n return `${camel(segments.slice(0, -1).join('_'))}${action}`\n }\n const statics = segments.filter((segment) => !segment.startsWith('{'))\n if (statics.length === 1 && method === 'get') return `${camel(last)}List`\n if (statics.length === 1 && method === 'post') return `${camel(last)}Create`\n // A deeper static path reads as its own name (`/api/posts/live`) — the\n // method suffix would only add noise.\n if (method === 'get') return camel(statics.join('_'))\n return `${camel(statics.join('_'))}${action}`\n}\n\ntype EmittedOperation = {\n name: string\n method: string\n path: string\n queryType?: string\n bodyType?: string\n outputType: string\n isStream: boolean\n}\n\nconst HTTP_METHODS = ['get', 'post', 'patch', 'put', 'delete']\n\nfunction collectOperations(spec: OpenApiSpec): EmittedOperation[] {\n const components = spec.components?.schemas ?? {}\n const operations: EmittedOperation[] = []\n\n for (const [path, methods] of Object.entries(spec.paths ?? {})) {\n // Better Auth owns its client contract. Keeping auth endpoints out of the\n // generic REST artifact avoids a second, less capable auth API surface.\n if (path === '/api/auth' || path.startsWith('/api/auth/')) continue\n for (const rawMethod of Object.keys(methods)) {\n if (!HTTP_METHODS.includes(rawMethod)) continue\n const operation = methods[rawMethod]\n if (!operation) continue\n\n const parameters = operation.parameters ?? []\n const queryParameters = parameters.filter(\n (parameter) => parameter.in === 'query',\n )\n\n let queryType: string | undefined\n if (queryParameters.length > 0) {\n const fields = queryParameters.map((parameter) => {\n const schema =\n parameter.schema ?? parameter.content?.['application/json']?.schema\n return `${JSON.stringify(parameter.name)}?: ${schemaToType(schema, components)}`\n })\n queryType = `{ ${fields.join('; ')} }`\n }\n\n const requestSchema =\n operation.requestBody?.content?.['application/json']?.schema\n const rawBodyType = requestSchema\n ? schemaToType(requestSchema, components)\n : undefined\n // oRPC emits an empty-object request body even for body-less\n // procedures like DELETE; a free-form record there is noise.\n const bodyType =\n rawBodyType === 'Record<string, unknown>' && rawMethod === 'delete'\n ? undefined\n : rawBodyType\n\n const okResponse =\n operation.responses?.['200'] ?? operation.responses?.['201']\n const jsonSchema = okResponse?.content?.['application/json']?.schema\n const eventSchema = okResponse?.content?.['text/event-stream']?.schema\n\n let outputType = 'void'\n let isStream = false\n if (eventSchema) {\n isStream = true\n // oRPC wraps each SSE data frame as {event, data}; unwrap the payload.\n // Wrapper variants that carry no data (or map to `unknown`) would\n // swallow the whole union, so they are dropped here.\n const wrapper = eventSchema.oneOf ?? eventSchema.anyOf ?? []\n outputType =\n [\n ...new Set(\n wrapper\n .map((variant) => variant.properties?.['data'])\n .filter((variant): variant is JsonSchema => Boolean(variant))\n .map((variant) => schemaToType(variant, components))\n .filter((type) => type !== 'unknown'),\n ),\n ].join(' | ') || 'void'\n } else if (jsonSchema) {\n outputType = schemaToType(jsonSchema, components)\n }\n\n operations.push({\n name: operationName(path, rawMethod),\n method: rawMethod.toUpperCase(),\n path,\n queryType,\n bodyType,\n outputType,\n isStream,\n })\n }\n }\n return operations\n}\n\nexport function generateRouteMap(input: unknown): string {\n const spec = input as OpenApiSpec\n const operations = collectOperations(spec)\n\n const lines: string[] = []\n lines.push('// Generated by workerstack codegen from /api/openapi.json.')\n lines.push('// Regenerate with `bun run gen`; do not edit by hand.')\n lines.push('')\n lines.push(\n '/** One API operation: literals describe the wire, phantoms the shapes. */',\n )\n lines.push('export interface Op<')\n lines.push(' M extends string,')\n lines.push(' P extends string,')\n lines.push(' Query = undefined,')\n lines.push(' Body = undefined,')\n lines.push(' Output = void,')\n lines.push(' Stream extends boolean = false,')\n lines.push('> {')\n lines.push(' method: M')\n lines.push(' path: P')\n lines.push(' stream: Stream')\n lines.push(' query?: Query')\n lines.push(' body?: Body')\n lines.push(' output?: Output')\n lines.push('}')\n lines.push('')\n lines.push('export type ApiRoutes = {')\n\n const runtimeEntries: string[] = []\n for (const operation of operations) {\n const generics = [\n `'${operation.method}'`,\n `'${operation.path}'`,\n operation.queryType ?? 'undefined',\n operation.bodyType ?? 'undefined',\n operation.isStream ? operation.outputType : operation.outputType,\n String(operation.isStream),\n ].join(', ')\n lines.push(` ${operation.name}: Op<${generics}>`)\n runtimeEntries.push(\n ` ${operation.name}: { method: '${operation.method}', path: '${operation.path}'${\n operation.isStream ? ', stream: true' : ''\n } },`,\n )\n }\n lines.push('}')\n lines.push('')\n lines.push(\n '/** Wire descriptors for createRestClient — same keys, runtime values. */',\n )\n lines.push('export const routes = {')\n lines.push(...runtimeEntries)\n lines.push('} as const')\n\n return lines.join('\\n')\n}\n"]}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { AnyMiddleware, AnyRouter } from '@orpc/server';
|
|
2
|
+
import { betterAuth } from 'better-auth';
|
|
3
|
+
import type { AuthSessionResolver, SessionUserConfig, SessionUserExtraOf, TableAccessInput } from './access.js';
|
|
4
|
+
import type { WorkerstackApiBuilder } from './api/builder.js';
|
|
5
|
+
import type { DatabaseAdapter } from './database/adapter.js';
|
|
6
|
+
import type { DbFor } from './db.js';
|
|
7
|
+
import type { AnyDb } from './dialect.js';
|
|
8
|
+
import type { IdempotencyConfig } from './idempotency.js';
|
|
9
|
+
import type { MessagingConfig } from './messaging/index.js';
|
|
10
|
+
import type { RateLimitConfig } from './rate-limit.js';
|
|
11
|
+
import { type BaseEnv, type EnvConfigInput, type ValidatedEnv } from './env.js';
|
|
12
|
+
import { type ResolvedStorageBuckets, type StorageConfigInput } from './storage/buckets.js';
|
|
13
|
+
export type BetterAuthConfig = Omit<NonNullable<Parameters<typeof betterAuth>[0]>, 'database'>;
|
|
14
|
+
/**
|
|
15
|
+
* What an `auth` builder is handed. `db` is the app's own connection, typed
|
|
16
|
+
* from `schema` alone — that is what keeps the builder cycle-free: better-auth
|
|
17
|
+
* hooks living in another file get a db without importing the app whose type
|
|
18
|
+
* they help produce.
|
|
19
|
+
*/
|
|
20
|
+
export type AuthConfigContext<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined> = {
|
|
21
|
+
db: DbFor<TSchema>;
|
|
22
|
+
env: ValidatedEnv<TEnv>;
|
|
23
|
+
};
|
|
24
|
+
export type AuthConfigInput<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined, TConfig extends BetterAuthConfig = BetterAuthConfig> = TConfig | ((ctx: AuthConfigContext<TSchema, TEnv>) => TConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Identity helper for defining an auth config in a separate file with full
|
|
27
|
+
* type inference — no explicit generic annotations required.
|
|
28
|
+
*
|
|
29
|
+
* Follows the `defineConfig` / `defineComponent` ecosystem convention:
|
|
30
|
+
* the function does nothing at runtime but gives TypeScript an inference
|
|
31
|
+
* anchor through the `schema` parameter.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* // Static config (no db/env access needed)
|
|
36
|
+
* export const authConfig = defineAuth({ ... })
|
|
37
|
+
*
|
|
38
|
+
* // Builder with schema-typed db
|
|
39
|
+
* export const authConfig = defineAuth(schema, ({ db }) => ({
|
|
40
|
+
* databaseHooks: {
|
|
41
|
+
* user: { create: { after: async (user) => { await db.insert(...) } } }
|
|
42
|
+
* }
|
|
43
|
+
* }))
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function defineAuth<const TConfig extends BetterAuthConfig>(config: TConfig): TConfig;
|
|
47
|
+
export declare function defineAuth<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined, const TConfig extends BetterAuthConfig>(context: {
|
|
48
|
+
schema: TSchema;
|
|
49
|
+
env: TEnv;
|
|
50
|
+
}, builder: (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig): (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig;
|
|
51
|
+
export declare function defineAuth<TSchema extends Record<string, unknown>, const TConfig extends BetterAuthConfig, TEnv extends EnvConfigInput | undefined = undefined>(schema: TSchema, builder: (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig): (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig;
|
|
52
|
+
/**
|
|
53
|
+
* The builder as {@link ResolvedConfig} carries it: schema-agnostic, because
|
|
54
|
+
* ResolvedConfig is not generic. {@link resolveAuthConfig} is the only caller.
|
|
55
|
+
*/
|
|
56
|
+
export type AuthConfigFactory = (ctx: {
|
|
57
|
+
db: AnyDb;
|
|
58
|
+
env: BaseEnv;
|
|
59
|
+
}) => BetterAuthConfig;
|
|
60
|
+
/** Realtime declaration. Independent of schema, storage, and env. */
|
|
61
|
+
export type RealtimeConfigInput = boolean | {
|
|
62
|
+
bufferSize?: number;
|
|
63
|
+
resumeSeconds?: number;
|
|
64
|
+
};
|
|
65
|
+
export type WorkerstackConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = Record<string, TableAccessInput> | undefined, TStorage extends StorageConfigInput | undefined = StorageConfigInput | undefined, TEnv extends EnvConfigInput | undefined = EnvConfigInput | undefined, TCustomApiRouter extends AnyRouter | undefined = AnyRouter | undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined> = {
|
|
66
|
+
schema: TSchema;
|
|
67
|
+
access?: TAccess;
|
|
68
|
+
database: {
|
|
69
|
+
adapter: DatabaseAdapter;
|
|
70
|
+
url?: string;
|
|
71
|
+
authToken?: string;
|
|
72
|
+
migrations?: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* better-auth options, or a builder receiving `{ db, env }`. Use the builder
|
|
76
|
+
* form when database hooks need to write: it hands out the app's own
|
|
77
|
+
* connection, so the application never opens a second one just to satisfy a
|
|
78
|
+
* config that is built before the app exists.
|
|
79
|
+
*/
|
|
80
|
+
auth?: AuthConfigInput<NoInfer<TSchema>, NoInfer<TEnv>, TAuthConfig>;
|
|
81
|
+
/**
|
|
82
|
+
* Reuse an application-owned session reader for the unified API while
|
|
83
|
+
* keeping Workerstack's auth handler available.
|
|
84
|
+
*/
|
|
85
|
+
authResolver?: AuthSessionResolver<SessionUserExtraOf<TSession>>;
|
|
86
|
+
/** Explicitly project application fields from Better Auth into API users. */
|
|
87
|
+
session?: TSession;
|
|
88
|
+
storage?: TStorage;
|
|
89
|
+
messaging?: MessagingConfig;
|
|
90
|
+
/**
|
|
91
|
+
* The application's oRPC router. Pass the finished router object, or a
|
|
92
|
+
* callback when the router needs the framework builder at configuration
|
|
93
|
+
* time. Declare the router at module scope with `defineApi` and the object
|
|
94
|
+
* form keeps router modules free of factory wrappers.
|
|
95
|
+
*/
|
|
96
|
+
api?: TCustomApiRouter | ((builder: WorkerstackApiBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig, SessionUserExtraOf<TSession>>) => TCustomApiRouter);
|
|
97
|
+
/**
|
|
98
|
+
* Middleware applied to every procedure in the graph: generated CRUD,
|
|
99
|
+
* storage, realtime, health, and the application's own procedures. Declare
|
|
100
|
+
* each one with `o.middleware(...)` from `defineApi`.
|
|
101
|
+
*
|
|
102
|
+
* It runs before authentication, so `context.user` is not available inside
|
|
103
|
+
* it. Read an already-resolved caller with `context.peekSession()`.
|
|
104
|
+
*/
|
|
105
|
+
middleware?: AnyMiddleware[];
|
|
106
|
+
rateLimit?: boolean | RateLimitConfig;
|
|
107
|
+
idempotency?: boolean | IdempotencyConfig;
|
|
108
|
+
/** Generate and serve `/api/openapi.json`. Disabled by default. */
|
|
109
|
+
openapi?: boolean;
|
|
110
|
+
realtime?: RealtimeConfigInput;
|
|
111
|
+
};
|
|
112
|
+
export type ResolvedConfig = {
|
|
113
|
+
database: {
|
|
114
|
+
adapter: DatabaseAdapter;
|
|
115
|
+
url: string;
|
|
116
|
+
authToken?: string;
|
|
117
|
+
migrations: string;
|
|
118
|
+
};
|
|
119
|
+
auth: BetterAuthConfig | AuthConfigFactory;
|
|
120
|
+
storage: ResolvedStorageBuckets;
|
|
121
|
+
realtime?: RealtimeConfigInput;
|
|
122
|
+
};
|
|
123
|
+
export declare function resolveConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TEnv extends EnvConfigInput | undefined = undefined, TCustomApiRouter extends AnyRouter | undefined = undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined>(options: WorkerstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter, TAuthConfig, TSession>, env?: BaseEnv, platformSource?: Record<string, string | undefined>): ResolvedConfig;
|
|
124
|
+
/** Collapse the object/builder union once the db is up. */
|
|
125
|
+
export declare function resolveAuthConfig(auth: ResolvedConfig['auth'], ctx: {
|
|
126
|
+
db: AnyDb;
|
|
127
|
+
env: BaseEnv;
|
|
128
|
+
}): BetterAuthConfig;
|
|
129
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|