@rikalabs/akter 0.1.0-alpha.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 +15 -0
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +116 -0
- package/dist/actor/codecs.d.ts +77 -0
- package/dist/actor/codecs.js +87 -0
- package/dist/actor/connections.d.ts +34 -0
- package/dist/actor/connections.js +145 -0
- package/dist/actor/definition.d.ts +893 -0
- package/dist/actor/definition.js +147 -0
- package/dist/actor/descriptor.d.ts +172 -0
- package/dist/actor/descriptor.js +367 -0
- package/dist/actor/handles.d.ts +77 -0
- package/dist/actor/handles.js +265 -0
- package/dist/actor/jobs.d.ts +10 -0
- package/dist/actor/jobs.js +137 -0
- package/dist/actor/layers.d.ts +41 -0
- package/dist/actor/layers.js +177 -0
- package/dist/actor/reads.d.ts +47 -0
- package/dist/actor/reads.js +224 -0
- package/dist/actor/served.d.ts +120 -0
- package/dist/actor/served.js +72 -0
- package/dist/actor/turns.d.ts +13 -0
- package/dist/actor/turns.js +332 -0
- package/dist/actor/workflows.d.ts +16 -0
- package/dist/actor/workflows.js +37 -0
- package/dist/client/calls.d.ts +47 -0
- package/dist/client/calls.js +425 -0
- package/dist/client/clock.d.ts +56 -0
- package/dist/client/clock.js +119 -0
- package/dist/client/fleet-page.d.ts +15 -0
- package/dist/client/fleet-page.js +13 -0
- package/dist/client/fleet.d.ts +29 -0
- package/dist/client/fleet.js +51 -0
- package/dist/client/index.d.ts +17 -0
- package/dist/client/index.js +6 -0
- package/dist/client/make.d.ts +157 -0
- package/dist/client/make.js +221 -0
- package/dist/client/offline/queue.d.ts +118 -0
- package/dist/client/offline/queue.js +292 -0
- package/dist/client/offline/store.d.ts +74 -0
- package/dist/client/offline/store.js +78 -0
- package/dist/client/optimistic.d.ts +57 -0
- package/dist/client/optimistic.js +136 -0
- package/dist/client/report.d.ts +2 -0
- package/dist/client/report.js +8 -0
- package/dist/client/sessions/connection.d.ts +118 -0
- package/dist/client/sessions/connection.js +162 -0
- package/dist/client/sessions/feed.d.ts +42 -0
- package/dist/client/sessions/feed.js +43 -0
- package/dist/client/sessions/sse.d.ts +47 -0
- package/dist/client/sessions/sse.js +112 -0
- package/dist/client/sessions/stream.d.ts +28 -0
- package/dist/client/sessions/stream.js +35 -0
- package/dist/client/sessions/watch.d.ts +34 -0
- package/dist/client/sessions/watch.js +40 -0
- package/dist/client/transport.d.ts +37 -0
- package/dist/client/transport.js +66 -0
- package/dist/contexts/command.d.ts +132 -0
- package/dist/contexts/command.js +20 -0
- package/dist/contexts/connection.d.ts +68 -0
- package/dist/contexts/connection.js +0 -0
- package/dist/contexts/job.d.ts +49 -0
- package/dist/contexts/job.js +0 -0
- package/dist/contexts/workflow.d.ts +147 -0
- package/dist/contexts/workflow.js +22 -0
- package/dist/errors/actor.d.ts +200 -0
- package/dist/errors/actor.js +271 -0
- package/dist/errors/content.d.ts +19 -0
- package/dist/errors/content.js +14 -0
- package/dist/errors/database.d.ts +22 -0
- package/dist/errors/database.js +23 -0
- package/dist/errors/events.d.ts +17 -0
- package/dist/errors/events.js +14 -0
- package/dist/errors/subscription.d.ts +12 -0
- package/dist/errors/subscription.js +8 -0
- package/dist/errors/workflow.d.ts +28 -0
- package/dist/errors/workflow.js +17 -0
- package/dist/handles/actors.d.ts +17 -0
- package/dist/handles/actors.js +7 -0
- package/dist/handles/content.d.ts +59 -0
- package/dist/handles/content.js +36 -0
- package/dist/handles/intents.d.ts +164 -0
- package/dist/handles/intents.js +214 -0
- package/dist/handles/run.d.ts +31 -0
- package/dist/handles/run.js +21 -0
- package/dist/handles/workflow.d.ts +27 -0
- package/dist/handles/workflow.js +23 -0
- package/dist/identity/caller.d.ts +105 -0
- package/dist/identity/caller.js +68 -0
- package/dist/identity/child.d.ts +18 -0
- package/dist/identity/child.js +39 -0
- package/dist/identity/command.d.ts +19 -0
- package/dist/identity/command.js +21 -0
- package/dist/identity/connection.d.ts +24 -0
- package/dist/identity/connection.js +29 -0
- package/dist/identity/content.d.ts +18 -0
- package/dist/identity/content.js +12 -0
- package/dist/identity/digest.d.ts +4 -0
- package/dist/identity/digest.js +5 -0
- package/dist/identity/execution.d.ts +32 -0
- package/dist/identity/execution.js +63 -0
- package/dist/identity/mint.d.ts +51 -0
- package/dist/identity/mint.js +76 -0
- package/dist/identity/version.d.ts +2 -0
- package/dist/identity/version.js +3 -0
- package/dist/index.d.ts +159 -0
- package/dist/index.js +97 -0
- package/dist/members/blob.d.ts +43 -0
- package/dist/members/blob.js +29 -0
- package/dist/members/command.d.ts +109 -0
- package/dist/members/command.js +61 -0
- package/dist/members/connection.d.ts +55 -0
- package/dist/members/connection.js +49 -0
- package/dist/members/event.d.ts +36 -0
- package/dist/members/event.js +24 -0
- package/dist/members/job.d.ts +157 -0
- package/dist/members/job.js +67 -0
- package/dist/members/payload.d.ts +93 -0
- package/dist/members/payload.js +145 -0
- package/dist/members/reducer.d.ts +64 -0
- package/dist/members/reducer.js +27 -0
- package/dist/members/stream.d.ts +36 -0
- package/dist/members/stream.js +14 -0
- package/dist/members/subscription.d.ts +182 -0
- package/dist/members/subscription.js +91 -0
- package/dist/members/workflow.d.ts +99 -0
- package/dist/members/workflow.js +2 -0
- package/dist/policies/access.d.ts +35 -0
- package/dist/policies/access.js +6 -0
- package/dist/policies/command.d.ts +127 -0
- package/dist/policies/command.js +45 -0
- package/dist/policies/job.d.ts +28 -0
- package/dist/policies/job.js +60 -0
- package/dist/policies/schedules.d.ts +33 -0
- package/dist/policies/schedules.js +131 -0
- package/dist/protocol/frames.d.ts +66 -0
- package/dist/protocol/frames.js +55 -0
- package/dist/protocol/inspection.d.ts +807 -0
- package/dist/protocol/inspection.js +243 -0
- package/dist/protocol/wire.d.ts +184 -0
- package/dist/protocol/wire.js +150 -0
- package/dist/runtime/actors.d.ts +155 -0
- package/dist/runtime/actors.js +4 -0
- package/dist/runtime/admission.d.ts +34 -0
- package/dist/runtime/admission.js +72 -0
- package/dist/runtime/adoption/backfill.d.ts +27 -0
- package/dist/runtime/adoption/backfill.js +144 -0
- package/dist/runtime/adoption/enforce.d.ts +55 -0
- package/dist/runtime/adoption/enforce.js +241 -0
- package/dist/runtime/adoption/observe.d.ts +43 -0
- package/dist/runtime/adoption/observe.js +139 -0
- package/dist/runtime/adoption/plan.d.ts +45 -0
- package/dist/runtime/adoption/plan.js +192 -0
- package/dist/runtime/adoption/startup.d.ts +32 -0
- package/dist/runtime/adoption/startup.js +76 -0
- package/dist/runtime/adoption/status.d.ts +23 -0
- package/dist/runtime/adoption/status.js +47 -0
- package/dist/runtime/adoption/target.d.ts +33 -0
- package/dist/runtime/adoption/target.js +49 -0
- package/dist/runtime/connections/holder.d.ts +221 -0
- package/dist/runtime/connections/holder.js +816 -0
- package/dist/runtime/connections/owner.d.ts +263 -0
- package/dist/runtime/connections/owner.js +896 -0
- package/dist/runtime/connections/protocol.d.ts +441 -0
- package/dist/runtime/connections/protocol.js +222 -0
- package/dist/runtime/connections/reads.d.ts +24 -0
- package/dist/runtime/connections/reads.js +19 -0
- package/dist/runtime/connections/streams.d.ts +62 -0
- package/dist/runtime/connections/streams.js +128 -0
- package/dist/runtime/connections/transport.d.ts +40 -0
- package/dist/runtime/connections/transport.js +68 -0
- package/dist/runtime/connections/watch.d.ts +52 -0
- package/dist/runtime/connections/watch.js +159 -0
- package/dist/runtime/content/grant.d.ts +34 -0
- package/dist/runtime/content/grant.js +58 -0
- package/dist/runtime/content/store.d.ts +63 -0
- package/dist/runtime/content/store.js +294 -0
- package/dist/runtime/cron/key.d.ts +2 -0
- package/dist/runtime/cron/key.js +2 -0
- package/dist/runtime/cron/schedule.d.ts +69 -0
- package/dist/runtime/cron/schedule.js +144 -0
- package/dist/runtime/database/bounded.d.ts +43 -0
- package/dist/runtime/database/bounded.js +108 -0
- package/dist/runtime/database/connection.d.ts +8 -0
- package/dist/runtime/database/connection.js +18 -0
- package/dist/runtime/database/coordination.d.ts +19 -0
- package/dist/runtime/database/coordination.js +72 -0
- package/dist/runtime/database/flock.d.ts +10 -0
- package/dist/runtime/database/flock.js +60 -0
- package/dist/runtime/database/gate.d.ts +26 -0
- package/dist/runtime/database/gate.js +54 -0
- package/dist/runtime/database/keepalive.d.ts +11 -0
- package/dist/runtime/database/keepalive.js +22 -0
- package/dist/runtime/database/migrations.d.ts +177 -0
- package/dist/runtime/database/migrations.js +1018 -0
- package/dist/runtime/database/neki/migrations.d.ts +31 -0
- package/dist/runtime/database/neki/migrations.js +276 -0
- package/dist/runtime/database/neki/session.d.ts +23 -0
- package/dist/runtime/database/neki/session.js +31 -0
- package/dist/runtime/database/pglite.d.ts +21 -0
- package/dist/runtime/database/pglite.js +74 -0
- package/dist/runtime/database/replica.d.ts +41 -0
- package/dist/runtime/database/replica.js +51 -0
- package/dist/runtime/database/shards.d.ts +21 -0
- package/dist/runtime/database/shards.js +37 -0
- package/dist/runtime/database/snapshot.d.ts +7 -0
- package/dist/runtime/database/snapshot.js +7 -0
- package/dist/runtime/database/tenancy.d.ts +69 -0
- package/dist/runtime/database/tenancy.js +145 -0
- package/dist/runtime/database/transient.d.ts +10 -0
- package/dist/runtime/database/transient.js +25 -0
- package/dist/runtime/drain.d.ts +132 -0
- package/dist/runtime/drain.js +109 -0
- package/dist/runtime/entity/mailbox.d.ts +86 -0
- package/dist/runtime/entity/mailbox.js +121 -0
- package/dist/runtime/entity/register.d.ts +424 -0
- package/dist/runtime/entity/register.js +669 -0
- package/dist/runtime/events/append.d.ts +192 -0
- package/dist/runtime/events/append.js +128 -0
- package/dist/runtime/events/cursor.d.ts +2 -0
- package/dist/runtime/events/cursor.js +5 -0
- package/dist/runtime/events/replay.d.ts +20 -0
- package/dist/runtime/events/replay.js +45 -0
- package/dist/runtime/feeds.d.ts +26 -0
- package/dist/runtime/feeds.js +100 -0
- package/dist/runtime/fleet/checks.d.ts +17 -0
- package/dist/runtime/fleet/checks.js +106 -0
- package/dist/runtime/fleet/maintainer.d.ts +38 -0
- package/dist/runtime/fleet/maintainer.js +383 -0
- package/dist/runtime/fleet/pgoutput.d.ts +41 -0
- package/dist/runtime/fleet/pgoutput.js +102 -0
- package/dist/runtime/fleet/setup.d.ts +36 -0
- package/dist/runtime/fleet/setup.js +58 -0
- package/dist/runtime/fleet/subscribe.d.ts +42 -0
- package/dist/runtime/fleet/subscribe.js +147 -0
- package/dist/runtime/index.d.ts +66 -0
- package/dist/runtime/index.js +37 -0
- package/dist/runtime/inspector/http.d.ts +19 -0
- package/dist/runtime/inspector/http.js +36 -0
- package/dist/runtime/inspector/layer.d.ts +46 -0
- package/dist/runtime/inspector/layer.js +180 -0
- package/dist/runtime/inspector/queries.d.ts +711 -0
- package/dist/runtime/inspector/queries.js +494 -0
- package/dist/runtime/jobs/attempt.d.ts +254 -0
- package/dist/runtime/jobs/attempt.js +413 -0
- package/dist/runtime/jobs/isolation.d.ts +20 -0
- package/dist/runtime/jobs/isolation.js +10 -0
- package/dist/runtime/jobs/progress.d.ts +95 -0
- package/dist/runtime/jobs/progress.js +144 -0
- package/dist/runtime/layer.d.ts +260 -0
- package/dist/runtime/layer.js +876 -0
- package/dist/runtime/members.d.ts +381 -0
- package/dist/runtime/members.js +8 -0
- package/dist/runtime/operators/audit.d.ts +64 -0
- package/dist/runtime/operators/audit.js +56 -0
- package/dist/runtime/operators/auth.d.ts +29 -0
- package/dist/runtime/operators/auth.js +42 -0
- package/dist/runtime/operators/export.d.ts +68 -0
- package/dist/runtime/operators/export.js +137 -0
- package/dist/runtime/operators/grants.d.ts +45 -0
- package/dist/runtime/operators/grants.js +40 -0
- package/dist/runtime/operators/repair.d.ts +206 -0
- package/dist/runtime/operators/repair.js +226 -0
- package/dist/runtime/operators/routes.d.ts +35 -0
- package/dist/runtime/operators/routes.js +190 -0
- package/dist/runtime/operators/seed.d.ts +123 -0
- package/dist/runtime/operators/seed.js +123 -0
- package/dist/runtime/payloads/versions.d.ts +65 -0
- package/dist/runtime/payloads/versions.js +240 -0
- package/dist/runtime/peering/authority.d.ts +42 -0
- package/dist/runtime/peering/authority.js +132 -0
- package/dist/runtime/peering/credentials.d.ts +21 -0
- package/dist/runtime/peering/credentials.js +13 -0
- package/dist/runtime/peering/transport.d.ts +51 -0
- package/dist/runtime/peering/transport.js +175 -0
- package/dist/runtime/queries.d.ts +18 -0
- package/dist/runtime/queries.js +169 -0
- package/dist/runtime/readiness.d.ts +36 -0
- package/dist/runtime/readiness.js +44 -0
- package/dist/runtime/registration.d.ts +58 -0
- package/dist/runtime/registration.js +186 -0
- package/dist/runtime/request.d.ts +158 -0
- package/dist/runtime/request.js +102 -0
- package/dist/runtime/retry.d.ts +8 -0
- package/dist/runtime/retry.js +11 -0
- package/dist/runtime/runner.d.ts +93 -0
- package/dist/runtime/runner.js +122 -0
- package/dist/runtime/storage/codec.d.ts +39 -0
- package/dist/runtime/storage/codec.js +41 -0
- package/dist/runtime/storage/generation.d.ts +69 -0
- package/dist/runtime/storage/generation.js +49 -0
- package/dist/runtime/storage/placements.d.ts +15 -0
- package/dist/runtime/storage/placements.js +38 -0
- package/dist/runtime/storage/platform.d.ts +6 -0
- package/dist/runtime/storage/platform.js +9 -0
- package/dist/runtime/storage/retention.d.ts +73 -0
- package/dist/runtime/storage/retention.js +158 -0
- package/dist/runtime/subscriptions/identity.d.ts +31 -0
- package/dist/runtime/subscriptions/identity.js +45 -0
- package/dist/runtime/subscriptions/relay.d.ts +175 -0
- package/dist/runtime/subscriptions/relay.js +763 -0
- package/dist/runtime/subscriptions/storage.d.ts +40 -0
- package/dist/runtime/subscriptions/storage.js +98 -0
- package/dist/runtime/sweeps.d.ts +39 -0
- package/dist/runtime/sweeps.js +54 -0
- package/dist/runtime/telemetry/defects.d.ts +57 -0
- package/dist/runtime/telemetry/defects.js +43 -0
- package/dist/runtime/telemetry/metrics.d.ts +52 -0
- package/dist/runtime/telemetry/metrics.js +138 -0
- package/dist/runtime/telemetry/routes.d.ts +19 -0
- package/dist/runtime/telemetry/routes.js +18 -0
- package/dist/runtime/telemetry/sampler.d.ts +26 -0
- package/dist/runtime/telemetry/sampler.js +101 -0
- package/dist/runtime/telemetry/spans.d.ts +38 -0
- package/dist/runtime/telemetry/spans.js +44 -0
- package/dist/runtime/telemetry/usage.d.ts +52 -0
- package/dist/runtime/telemetry/usage.js +30 -0
- package/dist/runtime/topology/admission.d.ts +13 -0
- package/dist/runtime/topology/admission.js +36 -0
- package/dist/runtime/topology/locks.d.ts +56 -0
- package/dist/runtime/topology/locks.js +81 -0
- package/dist/runtime/topology/messages.d.ts +15 -0
- package/dist/runtime/topology/messages.js +32 -0
- package/dist/runtime/turn/admission.d.ts +22 -0
- package/dist/runtime/turn/admission.js +41 -0
- package/dist/runtime/turn/blobs.d.ts +38 -0
- package/dist/runtime/turn/blobs.js +215 -0
- package/dist/runtime/turn/execute.d.ts +208 -0
- package/dist/runtime/turn/execute.js +972 -0
- package/dist/runtime/turn/group.d.ts +165 -0
- package/dist/runtime/turn/group.js +326 -0
- package/dist/runtime/turn/hooks.d.ts +44 -0
- package/dist/runtime/turn/hooks.js +28 -0
- package/dist/runtime/turn/outbox.d.ts +159 -0
- package/dist/runtime/turn/outbox.js +269 -0
- package/dist/runtime/turn/pipeline.d.ts +68 -0
- package/dist/runtime/turn/pipeline.js +83 -0
- package/dist/runtime/turn/receipt.d.ts +81 -0
- package/dist/runtime/turn/receipt.js +32 -0
- package/dist/runtime/turn/relay.d.ts +179 -0
- package/dist/runtime/turn/relay.js +685 -0
- package/dist/runtime/turn/rows.d.ts +43 -0
- package/dist/runtime/turn/rows.js +592 -0
- package/dist/runtime/workflows/compatibility.d.ts +125 -0
- package/dist/runtime/workflows/compatibility.js +285 -0
- package/dist/runtime/workflows/engine.d.ts +107 -0
- package/dist/runtime/workflows/engine.js +826 -0
- package/dist/runtime/workflows/manifest.d.ts +34 -0
- package/dist/runtime/workflows/manifest.js +39 -0
- package/dist/runtime/workflows/steps.d.ts +33 -0
- package/dist/runtime/workflows/steps.js +152 -0
- package/dist/serve/api.d.ts +99 -0
- package/dist/serve/api.js +403 -0
- package/dist/serve/assertion/binding.d.ts +41 -0
- package/dist/serve/assertion/binding.js +92 -0
- package/dist/serve/assertion/verify.d.ts +93 -0
- package/dist/serve/assertion/verify.js +189 -0
- package/dist/serve/auth.d.ts +200 -0
- package/dist/serve/auth.js +92 -0
- package/dist/serve/clock.d.ts +10 -0
- package/dist/serve/clock.js +25 -0
- package/dist/serve/jwt.d.ts +65 -0
- package/dist/serve/jwt.js +202 -0
- package/dist/serve/layer.d.ts +98 -0
- package/dist/serve/layer.js +809 -0
- package/dist/serve/mcp/endpoint.d.ts +39 -0
- package/dist/serve/mcp/endpoint.js +187 -0
- package/dist/serve/mcp/tools.d.ts +37 -0
- package/dist/serve/mcp/tools.js +125 -0
- package/dist/serve/origin.d.ts +6 -0
- package/dist/serve/origin.js +21 -0
- package/dist/serve/sessions/feed.d.ts +79 -0
- package/dist/serve/sessions/feed.js +115 -0
- package/dist/serve/sessions/socket.d.ts +56 -0
- package/dist/serve/sessions/socket.js +212 -0
- package/dist/serve/sessions/sse.d.ts +27 -0
- package/dist/serve/sessions/sse.js +26 -0
- package/dist/serve/sessions/stream.d.ts +9 -0
- package/dist/serve/sessions/stream.js +9 -0
- package/dist/serve/sessions/watch.d.ts +12 -0
- package/dist/serve/sessions/watch.js +11 -0
- package/dist/serve/wire.d.ts +16 -0
- package/dist/serve/wire.js +50 -0
- package/dist/state/blob.d.ts +71 -0
- package/dist/state/blob.js +0 -0
- package/dist/state/migration.d.ts +53 -0
- package/dist/state/migration.js +29 -0
- package/dist/tables/fleet.d.ts +170 -0
- package/dist/tables/fleet.js +214 -0
- package/dist/tables/owned.d.ts +250 -0
- package/dist/tables/owned.js +233 -0
- package/dist/testing/actor-test.d.ts +360 -0
- package/dist/testing/actor-test.js +337 -0
- package/dist/testing/cluster.d.ts +93 -0
- package/dist/testing/cluster.js +296 -0
- package/dist/testing/conformance/access.d.ts +5 -0
- package/dist/testing/conformance/access.js +531 -0
- package/dist/testing/conformance/admission.d.ts +11 -0
- package/dist/testing/conformance/admission.js +182 -0
- package/dist/testing/conformance/adoption.d.ts +2 -0
- package/dist/testing/conformance/adoption.js +1019 -0
- package/dist/testing/conformance/assertions.d.ts +202 -0
- package/dist/testing/conformance/assertions.js +849 -0
- package/dist/testing/conformance/batches.d.ts +41 -0
- package/dist/testing/conformance/batches.js +388 -0
- package/dist/testing/conformance/blobs.d.ts +14 -0
- package/dist/testing/conformance/blobs.js +405 -0
- package/dist/testing/conformance/capacity.d.ts +8 -0
- package/dist/testing/conformance/capacity.js +433 -0
- package/dist/testing/conformance/client.d.ts +5 -0
- package/dist/testing/conformance/client.js +719 -0
- package/dist/testing/conformance/cold-serve.d.ts +16 -0
- package/dist/testing/conformance/cold-serve.js +254 -0
- package/dist/testing/conformance/connections/actors.d.ts +1143 -0
- package/dist/testing/conformance/connections/actors.js +180 -0
- package/dist/testing/conformance/connections/harness.d.ts +1754 -0
- package/dist/testing/conformance/connections/harness.js +142 -0
- package/dist/testing/conformance/connections/holders.d.ts +4 -0
- package/dist/testing/conformance/connections/holders.js +165 -0
- package/dist/testing/conformance/connections/lifecycle.d.ts +4 -0
- package/dist/testing/conformance/connections/lifecycle.js +113 -0
- package/dist/testing/conformance/connections/limits.d.ts +4 -0
- package/dist/testing/conformance/connections/limits.js +127 -0
- package/dist/testing/conformance/connections/reauthorization.d.ts +4 -0
- package/dist/testing/conformance/connections/reauthorization.js +170 -0
- package/dist/testing/conformance/connections/resync.d.ts +4 -0
- package/dist/testing/conformance/connections/resync.js +360 -0
- package/dist/testing/conformance/connections/takeover.d.ts +4 -0
- package/dist/testing/conformance/connections/takeover.js +287 -0
- package/dist/testing/conformance/connections.d.ts +4 -0
- package/dist/testing/conformance/connections.js +15 -0
- package/dist/testing/conformance/content-blobs.d.ts +16 -0
- package/dist/testing/conformance/content-blobs.js +534 -0
- package/dist/testing/conformance/counter.d.ts +16 -0
- package/dist/testing/conformance/counter.js +813 -0
- package/dist/testing/conformance/cron.d.ts +5 -0
- package/dist/testing/conformance/cron.js +665 -0
- package/dist/testing/conformance/drain.d.ts +26 -0
- package/dist/testing/conformance/drain.js +540 -0
- package/dist/testing/conformance/effect-control.d.ts +38 -0
- package/dist/testing/conformance/effect-control.js +1059 -0
- package/dist/testing/conformance/effects.d.ts +23 -0
- package/dist/testing/conformance/effects.js +432 -0
- package/dist/testing/conformance/events.d.ts +28 -0
- package/dist/testing/conformance/events.js +335 -0
- package/dist/testing/conformance/export.d.ts +2 -0
- package/dist/testing/conformance/export.js +368 -0
- package/dist/testing/conformance/fleet.d.ts +444 -0
- package/dist/testing/conformance/fleet.js +1009 -0
- package/dist/testing/conformance/groups.d.ts +7 -0
- package/dist/testing/conformance/groups.js +353 -0
- package/dist/testing/conformance/heap.d.ts +3 -0
- package/dist/testing/conformance/heap.js +149 -0
- package/dist/testing/conformance/http.d.ts +2809 -0
- package/dist/testing/conformance/http.js +1234 -0
- package/dist/testing/conformance/inspection-views.d.ts +8 -0
- package/dist/testing/conformance/inspection-views.js +272 -0
- package/dist/testing/conformance/inspector.d.ts +7 -0
- package/dist/testing/conformance/inspector.js +650 -0
- package/dist/testing/conformance/mint.d.ts +58 -0
- package/dist/testing/conformance/mint.js +692 -0
- package/dist/testing/conformance/multi-runner.d.ts +8 -0
- package/dist/testing/conformance/multi-runner.js +403 -0
- package/dist/testing/conformance/neki/plan.d.ts +19 -0
- package/dist/testing/conformance/neki/plan.js +30 -0
- package/dist/testing/conformance/observability.d.ts +3 -0
- package/dist/testing/conformance/observability.js +343 -0
- package/dist/testing/conformance/offline.d.ts +4 -0
- package/dist/testing/conformance/offline.js +474 -0
- package/dist/testing/conformance/operator-harness.d.ts +57 -0
- package/dist/testing/conformance/operator-harness.js +78 -0
- package/dist/testing/conformance/operator.d.ts +3 -0
- package/dist/testing/conformance/operator.js +379 -0
- package/dist/testing/conformance/outbox-cross-shard.d.ts +14 -0
- package/dist/testing/conformance/outbox-cross-shard.js +160 -0
- package/dist/testing/conformance/outbox.d.ts +36 -0
- package/dist/testing/conformance/outbox.js +437 -0
- package/dist/testing/conformance/payload-migrations.d.ts +3 -0
- package/dist/testing/conformance/payload-migrations.js +612 -0
- package/dist/testing/conformance/pipeline.d.ts +3 -0
- package/dist/testing/conformance/pipeline.js +1040 -0
- package/dist/testing/conformance/placement.d.ts +22 -0
- package/dist/testing/conformance/placement.js +539 -0
- package/dist/testing/conformance/platform.d.ts +40 -0
- package/dist/testing/conformance/platform.js +101 -0
- package/dist/testing/conformance/progress.d.ts +39 -0
- package/dist/testing/conformance/progress.js +666 -0
- package/dist/testing/conformance/properties.d.ts +6 -0
- package/dist/testing/conformance/properties.js +295 -0
- package/dist/testing/conformance/protocols.d.ts +4 -0
- package/dist/testing/conformance/protocols.js +618 -0
- package/dist/testing/conformance/provider/advertise.d.ts +21 -0
- package/dist/testing/conformance/provider/advertise.js +44 -0
- package/dist/testing/conformance/read-your-writes.d.ts +20 -0
- package/dist/testing/conformance/read-your-writes.js +192 -0
- package/dist/testing/conformance/reducers.d.ts +8 -0
- package/dist/testing/conformance/reducers.js +258 -0
- package/dist/testing/conformance/relay.d.ts +42 -0
- package/dist/testing/conformance/relay.js +1115 -0
- package/dist/testing/conformance/restore.d.ts +43 -0
- package/dist/testing/conformance/restore.js +341 -0
- package/dist/testing/conformance/retention.d.ts +14 -0
- package/dist/testing/conformance/retention.js +463 -0
- package/dist/testing/conformance/rls.d.ts +24 -0
- package/dist/testing/conformance/rls.js +576 -0
- package/dist/testing/conformance/simulation.d.ts +31 -0
- package/dist/testing/conformance/simulation.js +167 -0
- package/dist/testing/conformance/single-shard.d.ts +2 -0
- package/dist/testing/conformance/single-shard.js +125 -0
- package/dist/testing/conformance/singleton.d.ts +3 -0
- package/dist/testing/conformance/singleton.js +293 -0
- package/dist/testing/conformance/statements.d.ts +60 -0
- package/dist/testing/conformance/statements.js +108 -0
- package/dist/testing/conformance/streams.d.ts +7 -0
- package/dist/testing/conformance/streams.js +280 -0
- package/dist/testing/conformance/subscriptions/access.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/access.js +98 -0
- package/dist/testing/conformance/subscriptions/actors.d.ts +4910 -0
- package/dist/testing/conformance/subscriptions/actors.js +372 -0
- package/dist/testing/conformance/subscriptions/cluster.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/cluster.js +89 -0
- package/dist/testing/conformance/subscriptions/delivery.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/delivery.js +253 -0
- package/dist/testing/conformance/subscriptions/deploys.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/deploys.js +162 -0
- package/dist/testing/conformance/subscriptions/epochs.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/epochs.js +169 -0
- package/dist/testing/conformance/subscriptions/failures.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/failures.js +108 -0
- package/dist/testing/conformance/subscriptions/feeds.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/feeds.js +218 -0
- package/dist/testing/conformance/subscriptions/harness.d.ts +124 -0
- package/dist/testing/conformance/subscriptions/harness.js +143 -0
- package/dist/testing/conformance/subscriptions/operator.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/operator.js +128 -0
- package/dist/testing/conformance/subscriptions/retention.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/retention.js +288 -0
- package/dist/testing/conformance/subscriptions/routing.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/routing.js +179 -0
- package/dist/testing/conformance/subscriptions.d.ts +4 -0
- package/dist/testing/conformance/subscriptions.js +19 -0
- package/dist/testing/conformance/tables.d.ts +125 -0
- package/dist/testing/conformance/tables.js +664 -0
- package/dist/testing/conformance/transports/actors.d.ts +1907 -0
- package/dist/testing/conformance/transports/actors.js +163 -0
- package/dist/testing/conformance/transports/client.d.ts +3 -0
- package/dist/testing/conformance/transports/client.js +237 -0
- package/dist/testing/conformance/transports/feeds.d.ts +3 -0
- package/dist/testing/conformance/transports/feeds.js +232 -0
- package/dist/testing/conformance/transports/harness.d.ts +93 -0
- package/dist/testing/conformance/transports/harness.js +84 -0
- package/dist/testing/conformance/transports/streams.d.ts +3 -0
- package/dist/testing/conformance/transports/streams.js +96 -0
- package/dist/testing/conformance/transports/websocket.d.ts +3 -0
- package/dist/testing/conformance/transports/websocket.js +384 -0
- package/dist/testing/conformance/transports/wire.d.ts +141 -0
- package/dist/testing/conformance/transports/wire.js +204 -0
- package/dist/testing/conformance/transports.d.ts +3 -0
- package/dist/testing/conformance/transports.js +11 -0
- package/dist/testing/conformance/watch.d.ts +59 -0
- package/dist/testing/conformance/watch.js +879 -0
- package/dist/testing/conformance/workflow-engine.d.ts +97 -0
- package/dist/testing/conformance/workflow-engine.js +253 -0
- package/dist/testing/conformance/workflow-versions.d.ts +3 -0
- package/dist/testing/conformance/workflow-versions.js +545 -0
- package/dist/testing/conformance/workflows/access.d.ts +4 -0
- package/dist/testing/conformance/workflows/access.js +147 -0
- package/dist/testing/conformance/workflows/actors.d.ts +2317 -0
- package/dist/testing/conformance/workflows/actors.js +305 -0
- package/dist/testing/conformance/workflows/basics.d.ts +4 -0
- package/dist/testing/conformance/workflows/basics.js +144 -0
- package/dist/testing/conformance/workflows/engine.d.ts +4 -0
- package/dist/testing/conformance/workflows/engine.js +80 -0
- package/dist/testing/conformance/workflows/guards.d.ts +4 -0
- package/dist/testing/conformance/workflows/guards.js +172 -0
- package/dist/testing/conformance/workflows/harness.d.ts +14 -0
- package/dist/testing/conformance/workflows/harness.js +44 -0
- package/dist/testing/conformance/workflows/recovery.d.ts +4 -0
- package/dist/testing/conformance/workflows/recovery.js +181 -0
- package/dist/testing/conformance/workflows/starts.d.ts +4 -0
- package/dist/testing/conformance/workflows/starts.js +57 -0
- package/dist/testing/conformance/workflows/suspension.d.ts +4 -0
- package/dist/testing/conformance/workflows/suspension.js +106 -0
- package/dist/testing/conformance/workflows/waits.d.ts +4 -0
- package/dist/testing/conformance/workflows/waits.js +284 -0
- package/dist/testing/conformance/workflows.d.ts +4 -0
- package/dist/testing/conformance/workflows.js +19 -0
- package/dist/testing/conformance.d.ts +330 -0
- package/dist/testing/conformance.js +364 -0
- package/dist/testing/database.d.ts +31 -0
- package/dist/testing/database.js +70 -0
- package/dist/testing/foundation.d.ts +41 -0
- package/dist/testing/foundation.js +517 -0
- package/dist/testing/index.d.ts +20 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/property.d.ts +40 -0
- package/dist/testing/property.js +95 -0
- package/dist/testing/simulate-cluster.d.ts +112 -0
- package/dist/testing/simulate-cluster.js +257 -0
- package/dist/testing/simulate.d.ts +90 -0
- package/dist/testing/simulate.js +127 -0
- package/package.json +1 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { declareChain } from "./payload.js";
|
|
3
|
+
/**
|
|
4
|
+
* `EventMember.make` is `Actor.event`: declares a durable event class. Its schema identifier is
|
|
5
|
+
* fixed to the tag, so a stored event names its class. `migrations` upcasts
|
|
6
|
+
* events stored at older versions when they are read; stored events are never
|
|
7
|
+
* rewritten. An invalid migration chain throws when the class is built. The
|
|
8
|
+
* value is itself the class: `Posted.make(...)`, `new Posted(...)`, and
|
|
9
|
+
* `instanceof` all work.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const Posted = Actor.event("Posted", { text: Schema.String })
|
|
13
|
+
*/
|
|
14
|
+
const make = (tag, fields, options) => {
|
|
15
|
+
const declared = Schema.TaggedClass()(tag, fields);
|
|
16
|
+
declareChain({ schema: declared, label: `Event ${tag}`, fields: fields, options });
|
|
17
|
+
return declared;
|
|
18
|
+
};
|
|
19
|
+
/** `Actor.event`; see `make`. */
|
|
20
|
+
export const EventMember = { make };
|
|
21
|
+
/** Entries one `read.events` call returns when the reader names no `limit`. */
|
|
22
|
+
export const DEFAULT_REPLAY_LIMIT = 1_000;
|
|
23
|
+
/** The largest page a reader may ask for; it bounds rows per page, not their bytes. */
|
|
24
|
+
export const MAX_REPLAY_LIMIT = 10_000;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { type Duration, Schema } from "effect";
|
|
2
|
+
import type { AnyCommand, PayloadFields, ValueSchema } from "./command.ts";
|
|
3
|
+
import { type PayloadMigrations } from "./payload.ts";
|
|
4
|
+
/**
|
|
5
|
+
* An `Actor.job` value: a schema-backed class of requests for external I/O
|
|
6
|
+
* that a turn stages with `turn.enqueue` and an executor runs after commit.
|
|
7
|
+
* Its instances are the job's payload; `success` types the executor's return
|
|
8
|
+
* value and `progress` its transient frames.
|
|
9
|
+
*/
|
|
10
|
+
export type JobClass<Tag extends string, Fields extends PayloadFields, Success extends ValueSchema, Progress extends ValueSchema | undefined = undefined> = Schema.Class<Schema.TaggedStruct<Tag, Fields>["Type"], Schema.TaggedStruct<Tag, Fields>, {}> & {
|
|
11
|
+
readonly tag: Tag;
|
|
12
|
+
readonly success: Success;
|
|
13
|
+
readonly progress: Progress;
|
|
14
|
+
};
|
|
15
|
+
/** Any job, as a `jobs` binding names it. */
|
|
16
|
+
export type AnyJob = ValueSchema & {
|
|
17
|
+
readonly tag: string;
|
|
18
|
+
readonly success: ValueSchema;
|
|
19
|
+
readonly progress: ValueSchema | undefined;
|
|
20
|
+
readonly Type: {
|
|
21
|
+
readonly _tag: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
/** A job that declares a `progress` schema. */
|
|
25
|
+
export type ProgressJob = AnyJob & {
|
|
26
|
+
readonly progress: ValueSchema;
|
|
27
|
+
};
|
|
28
|
+
/** The frame type an executor of `J` reports with `X.Executor.progress`. */
|
|
29
|
+
export type ProgressOf<J extends ProgressJob> = J["progress"]["Type"];
|
|
30
|
+
/**
|
|
31
|
+
* `JobMember.make` is `Actor.job`: declares a job class. `payload` holds its record fields;
|
|
32
|
+
* `success` is the schema of the executor's return value and defaults to
|
|
33
|
+
* `Schema.Void`. `progress`, when declared, is the schema of the transient
|
|
34
|
+
* frames its executor may report before the result commits; they are never
|
|
35
|
+
* state. `migrations` upcasts payloads stored at older versions before each
|
|
36
|
+
* attempt and before a dead letter's route; `writeVersion` is as for events.
|
|
37
|
+
* The value is itself the class: `Charge.make(...)`, `new Charge(...)`, and
|
|
38
|
+
* `instanceof` all work, and one job may be bound by several actors.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* const Charge = Actor.job("Charge", {
|
|
42
|
+
* payload: { amount: Schema.Int },
|
|
43
|
+
* success: Schema.Struct({ providerId: Schema.String }),
|
|
44
|
+
* })
|
|
45
|
+
*/
|
|
46
|
+
declare const make: <const Tag extends string, const Fields extends PayloadFields = {}, Success extends ValueSchema = Schema.Void, Progress extends ValueSchema | undefined = undefined>(tag: Tag, options?: {
|
|
47
|
+
readonly payload?: Fields;
|
|
48
|
+
readonly success?: Success;
|
|
49
|
+
readonly progress?: Progress;
|
|
50
|
+
readonly migrations?: PayloadMigrations;
|
|
51
|
+
readonly writeVersion?: number;
|
|
52
|
+
}) => JobClass<Tag, Fields, Success, Progress>;
|
|
53
|
+
/** `Actor.job`; see `make`. */
|
|
54
|
+
export declare const JobMember: {
|
|
55
|
+
make: typeof make;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* The payload of an `onDeadLetter` command. `ambiguous` is true when the last
|
|
59
|
+
* attempt ended without a known outcome (a crash, timeout, interruption, or
|
|
60
|
+
* defect), so the provider may still have applied it.
|
|
61
|
+
*/
|
|
62
|
+
export declare const DeadLetter: <J extends AnyJob>(job: J) => Schema.Struct<{
|
|
63
|
+
readonly jobId: Schema.String;
|
|
64
|
+
readonly job: J;
|
|
65
|
+
readonly attempts: Schema.Int;
|
|
66
|
+
readonly cause: Schema.String;
|
|
67
|
+
readonly ambiguous: Schema.Boolean;
|
|
68
|
+
}>;
|
|
69
|
+
/** The decoded payload of an `onDeadLetter` command for job `J`. */
|
|
70
|
+
export type DeadLetter<J extends AnyJob> = ReturnType<typeof DeadLetter<J>>["Type"];
|
|
71
|
+
/**
|
|
72
|
+
* The payload of an `onCancelled` command: what is known of a cancelled job.
|
|
73
|
+
* `Succeeded` carries the provider's result; `Failed` is reported only when no
|
|
74
|
+
* attempt can have applied the call; every other case is `Unknown`, with
|
|
75
|
+
* `ambiguous` true, because the provider may have acted.
|
|
76
|
+
*/
|
|
77
|
+
export declare const Cancelled: <J extends AnyJob>(job: J) => Schema.Struct<{
|
|
78
|
+
readonly jobId: Schema.String;
|
|
79
|
+
readonly job: J;
|
|
80
|
+
readonly attempts: Schema.Int;
|
|
81
|
+
readonly outcome: Schema.TaggedUnion<{
|
|
82
|
+
readonly Failed: Schema.TaggedStruct<"Failed", {
|
|
83
|
+
readonly cause: Schema.String;
|
|
84
|
+
}>;
|
|
85
|
+
readonly Succeeded: Schema.TaggedStruct<"Succeeded", {
|
|
86
|
+
readonly value: ValueSchema;
|
|
87
|
+
}>;
|
|
88
|
+
readonly Unknown: Schema.TaggedStruct<"Unknown", {
|
|
89
|
+
readonly cause: Schema.String;
|
|
90
|
+
}>;
|
|
91
|
+
}>;
|
|
92
|
+
readonly ambiguous: Schema.Boolean;
|
|
93
|
+
}>;
|
|
94
|
+
/** The decoded payload of an `onCancelled` command for job `J`. */
|
|
95
|
+
export type Cancelled<J extends AnyJob> = ReturnType<typeof Cancelled<J>>["Type"];
|
|
96
|
+
/** A cancelled job's outcome before its route decodes `value`. */
|
|
97
|
+
export declare const CancelledOutcome: Schema.TaggedUnion<{
|
|
98
|
+
readonly Failed: Schema.TaggedStruct<"Failed", {
|
|
99
|
+
readonly cause: Schema.String;
|
|
100
|
+
}>;
|
|
101
|
+
readonly Succeeded: Schema.TaggedStruct<"Succeeded", {
|
|
102
|
+
readonly value: Schema.Unknown;
|
|
103
|
+
}>;
|
|
104
|
+
readonly Unknown: Schema.TaggedStruct<"Unknown", {
|
|
105
|
+
readonly cause: Schema.String;
|
|
106
|
+
}>;
|
|
107
|
+
}>;
|
|
108
|
+
/** Commands whose payload accepts `T`. */
|
|
109
|
+
type Accepting<Command extends AnyCommand, T> = Command extends AnyCommand ? [T] extends [Command["payload"]["Type"]] ? Command : never : never;
|
|
110
|
+
/**
|
|
111
|
+
* One actor's binding of a job: the job it enqueues and how this actor runs
|
|
112
|
+
* and routes it. Routes name commands of this actor whose payload accepts the
|
|
113
|
+
* executor's return value, the job's dead letter, or its cancellation; two
|
|
114
|
+
* actors may bind one job with different routes and limits.
|
|
115
|
+
*/
|
|
116
|
+
export interface JobBinding<J extends AnyJob, Command extends AnyCommand> {
|
|
117
|
+
readonly job: J;
|
|
118
|
+
/** Bounds one executor attempt, measured on the runner. Default 30 seconds. */
|
|
119
|
+
readonly timeout?: Duration.Input;
|
|
120
|
+
/**
|
|
121
|
+
* The least time between two progress frames one attempt sends; frames
|
|
122
|
+
* reported sooner replace the one waiting. Default 250 milliseconds, from
|
|
123
|
+
* 50 milliseconds to 1 minute.
|
|
124
|
+
*/
|
|
125
|
+
readonly progressEvery?: Duration.Input;
|
|
126
|
+
/**
|
|
127
|
+
* Retries after the first failed attempt (default 3), and the wait after
|
|
128
|
+
* failed attempt `n`: `min(base × 2^(n − 1), max)`. Default base 1 second,
|
|
129
|
+
* max 256 seconds. Retries are persisted, not process-local sleeps.
|
|
130
|
+
*/
|
|
131
|
+
readonly retry?: {
|
|
132
|
+
readonly times: number;
|
|
133
|
+
readonly backoff?: {
|
|
134
|
+
readonly base: Duration.Input;
|
|
135
|
+
readonly max: Duration.Input;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
/** Receives the executor's return value, with the job id as its command id. */
|
|
139
|
+
readonly onSuccess?: Accepting<Command, J["success"]["Type"]>;
|
|
140
|
+
/** Receives `Actor.DeadLetter(J)` once when retries are exhausted. */
|
|
141
|
+
readonly onDeadLetter?: Accepting<Command, DeadLetter<J>>;
|
|
142
|
+
/**
|
|
143
|
+
* Receives `Actor.Cancelled(J)` once for a job cancelled after an attempt
|
|
144
|
+
* started, with the job id as its command id.
|
|
145
|
+
*/
|
|
146
|
+
readonly onCancelled?: Accepting<Command, Cancelled<J>>;
|
|
147
|
+
/**
|
|
148
|
+
* Attempts of this job running at once for one actor, across every
|
|
149
|
+
* runner: an integer from 1 to 64. Unlimited when omitted.
|
|
150
|
+
*/
|
|
151
|
+
readonly concurrency?: {
|
|
152
|
+
readonly perActor: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Any job binding, whatever its job and routes. */
|
|
156
|
+
export type AnyJobBinding = JobBinding<AnyJob, AnyCommand>;
|
|
157
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { declareChain } from "./payload.js";
|
|
3
|
+
/**
|
|
4
|
+
* `JobMember.make` is `Actor.job`: declares a job class. `payload` holds its record fields;
|
|
5
|
+
* `success` is the schema of the executor's return value and defaults to
|
|
6
|
+
* `Schema.Void`. `progress`, when declared, is the schema of the transient
|
|
7
|
+
* frames its executor may report before the result commits; they are never
|
|
8
|
+
* state. `migrations` upcasts payloads stored at older versions before each
|
|
9
|
+
* attempt and before a dead letter's route; `writeVersion` is as for events.
|
|
10
|
+
* The value is itself the class: `Charge.make(...)`, `new Charge(...)`, and
|
|
11
|
+
* `instanceof` all work, and one job may be bound by several actors.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const Charge = Actor.job("Charge", {
|
|
15
|
+
* payload: { amount: Schema.Int },
|
|
16
|
+
* success: Schema.Struct({ providerId: Schema.String }),
|
|
17
|
+
* })
|
|
18
|
+
*/
|
|
19
|
+
const make = (tag, options) => {
|
|
20
|
+
if (tag.length === 0)
|
|
21
|
+
throw new Error("Actor.job needs a non-empty tag");
|
|
22
|
+
const fields = options?.payload ?? {};
|
|
23
|
+
const declared = Schema.TaggedClass()(tag, fields);
|
|
24
|
+
declareChain({ schema: declared, label: `Job ${tag}`, fields, options });
|
|
25
|
+
return Object.assign(declared, {
|
|
26
|
+
tag,
|
|
27
|
+
success: (options?.success ?? Schema.Void),
|
|
28
|
+
progress: options?.progress,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
/** `Actor.job`; see `make`. */
|
|
32
|
+
export const JobMember = { make };
|
|
33
|
+
/**
|
|
34
|
+
* The payload of an `onDeadLetter` command. `ambiguous` is true when the last
|
|
35
|
+
* attempt ended without a known outcome (a crash, timeout, interruption, or
|
|
36
|
+
* defect), so the provider may still have applied it.
|
|
37
|
+
*/
|
|
38
|
+
export const DeadLetter = (job) => Schema.Struct({
|
|
39
|
+
jobId: Schema.String,
|
|
40
|
+
job,
|
|
41
|
+
attempts: Schema.Int,
|
|
42
|
+
cause: Schema.String,
|
|
43
|
+
ambiguous: Schema.Boolean,
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* The payload of an `onCancelled` command: what is known of a cancelled job.
|
|
47
|
+
* `Succeeded` carries the provider's result; `Failed` is reported only when no
|
|
48
|
+
* attempt can have applied the call; every other case is `Unknown`, with
|
|
49
|
+
* `ambiguous` true, because the provider may have acted.
|
|
50
|
+
*/
|
|
51
|
+
export const Cancelled = (job) => Schema.Struct({
|
|
52
|
+
jobId: Schema.String,
|
|
53
|
+
job,
|
|
54
|
+
attempts: Schema.Int,
|
|
55
|
+
outcome: Schema.TaggedUnion({
|
|
56
|
+
Succeeded: { value: job.success },
|
|
57
|
+
Failed: { cause: Schema.String },
|
|
58
|
+
Unknown: { cause: Schema.String },
|
|
59
|
+
}),
|
|
60
|
+
ambiguous: Schema.Boolean,
|
|
61
|
+
});
|
|
62
|
+
/** A cancelled job's outcome before its route decodes `value`. */
|
|
63
|
+
export const CancelledOutcome = Schema.TaggedUnion({
|
|
64
|
+
Succeeded: { value: Schema.Unknown },
|
|
65
|
+
Failed: { cause: Schema.String },
|
|
66
|
+
Unknown: { cause: Schema.String },
|
|
67
|
+
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import type { StateMigration } from "../state/migration.ts";
|
|
3
|
+
import type { ValueSchema } from "./command.ts";
|
|
4
|
+
type Fields = Readonly<Record<string, ValueSchema>>;
|
|
5
|
+
/**
|
|
6
|
+
* An event's or effect's migration chain: every step since version 0, or,
|
|
7
|
+
* once no stored value needs the first `from` versions, the steps after them.
|
|
8
|
+
* Declaring the dropped count keeps every later version number unchanged.
|
|
9
|
+
*/
|
|
10
|
+
export type PayloadMigrations = ReadonlyArray<StateMigration> | {
|
|
11
|
+
readonly from: number;
|
|
12
|
+
readonly steps: ReadonlyArray<StateMigration>;
|
|
13
|
+
};
|
|
14
|
+
/** Migration options shared by `Actor.event` and `Actor.job`. */
|
|
15
|
+
export interface PayloadOptions {
|
|
16
|
+
readonly migrations?: PayloadMigrations;
|
|
17
|
+
/**
|
|
18
|
+
* The version new values are written at. During a rolling deploy that adds
|
|
19
|
+
* a step, runners that don't know the step yet must still read every new
|
|
20
|
+
* value, so the first release writes the previous version and needs that
|
|
21
|
+
* step's `downcast`. Defaults to the chain's current version.
|
|
22
|
+
*/
|
|
23
|
+
readonly writeVersion?: number;
|
|
24
|
+
}
|
|
25
|
+
/** A validated chain: stored versions `first..current` decode, and new values are written at `writeVersion`. */
|
|
26
|
+
interface PayloadChain {
|
|
27
|
+
readonly first: number;
|
|
28
|
+
readonly current: number;
|
|
29
|
+
readonly writeVersion: number;
|
|
30
|
+
/** Step `i` upcasts version `first + i` to `first + i + 1`. */
|
|
31
|
+
readonly steps: ReadonlyArray<StateMigration>;
|
|
32
|
+
}
|
|
33
|
+
declare const PayloadError_base: Schema.Class<PayloadError, Schema.TaggedStruct<"PayloadError", {
|
|
34
|
+
readonly message: Schema.String;
|
|
35
|
+
}>, import("effect/Cause").YieldableError>;
|
|
36
|
+
/** A stored value its chain cannot read; every read treats it as a defect, never a skip. */
|
|
37
|
+
declare class PayloadError extends PayloadError_base {
|
|
38
|
+
}
|
|
39
|
+
/** Records a class's chain when the class is built; an invalid chain throws there. */
|
|
40
|
+
export declare const declareChain: (declared: {
|
|
41
|
+
readonly schema: Schema.Top;
|
|
42
|
+
readonly label: string;
|
|
43
|
+
readonly fields: Fields;
|
|
44
|
+
readonly options: PayloadOptions | undefined;
|
|
45
|
+
}) => void;
|
|
46
|
+
/**
|
|
47
|
+
* The chain of an event or job class. Lookup follows the prototype chain, so
|
|
48
|
+
* a subclass of an `Actor.event` or `Actor.job` value shares its chain; a class
|
|
49
|
+
* declared without one reads and writes version 0.
|
|
50
|
+
*/
|
|
51
|
+
export declare const payloadChain: (schema: Schema.Top) => PayloadChain;
|
|
52
|
+
/**
|
|
53
|
+
* Encodes and decodes one tagged class's stored values, which carry the tag
|
|
54
|
+
* in `_tag` and their version beside them. Values at the current version take
|
|
55
|
+
* the class's own codec; older ones pass through each later step first, and
|
|
56
|
+
* new ones are downcast through each step above `writeVersion`. A stored
|
|
57
|
+
* value is its class's JSON object: the tag and the fields of its version.
|
|
58
|
+
*/
|
|
59
|
+
export declare const payloadCodec: <S extends ValueSchema & {
|
|
60
|
+
readonly Type: {
|
|
61
|
+
readonly _tag: string;
|
|
62
|
+
};
|
|
63
|
+
}>({ schema, tag, }: {
|
|
64
|
+
readonly schema: S;
|
|
65
|
+
readonly tag: string;
|
|
66
|
+
}) => {
|
|
67
|
+
chain: PayloadChain;
|
|
68
|
+
/** Encodes a value at the chain's write version. */
|
|
69
|
+
encode: (value: S["Type"]) => Effect.Effect<{
|
|
70
|
+
value: string;
|
|
71
|
+
version: number;
|
|
72
|
+
}, Schema.SchemaError, never>;
|
|
73
|
+
/** Decodes a stored value written at `version` into the current class. */
|
|
74
|
+
decode: (text: string, version: number) => Effect.Effect<S["Type"], PayloadError, S["DecodingServices"]>;
|
|
75
|
+
/** A stored value as the current version encodes it; unchanged when it is already current. */
|
|
76
|
+
upcast: (text: string, version: number) => Effect.Effect<string, PayloadError, S["DecodingServices"] | S["EncodingServices"]>;
|
|
77
|
+
};
|
|
78
|
+
/** One event or job class an actor type reads or writes, as the startup check sees it. */
|
|
79
|
+
export interface PayloadDeclaration {
|
|
80
|
+
readonly actorType: string;
|
|
81
|
+
readonly kind: "event" | "job";
|
|
82
|
+
readonly tag: string;
|
|
83
|
+
readonly chain: PayloadChain;
|
|
84
|
+
/** Whether this layer writes new values of the class, so it records and heartbeats its write version. */
|
|
85
|
+
readonly writes: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** What `durable payloads check` and `clear` need of an actor definition. */
|
|
88
|
+
export interface DefinitionPayloads {
|
|
89
|
+
readonly declarations: ReadonlyArray<PayloadDeclaration>;
|
|
90
|
+
readonly keepEventsMs: number;
|
|
91
|
+
readonly commandTimeoutMs: number;
|
|
92
|
+
}
|
|
93
|
+
export {};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
/** A stored value its chain cannot read; every read treats it as a defect, never a skip. */
|
|
3
|
+
class PayloadError extends Schema.TaggedError()("PayloadError", {
|
|
4
|
+
message: Schema.String,
|
|
5
|
+
}) {
|
|
6
|
+
}
|
|
7
|
+
const sameFields = (left, right) => {
|
|
8
|
+
const keys = Object.keys(left);
|
|
9
|
+
return (keys.length === Object.keys(right).length &&
|
|
10
|
+
keys.every((key) => Object.hasOwn(right, key) && left[key] === right[key]));
|
|
11
|
+
};
|
|
12
|
+
const isVersion = (value) => Number.isSafeInteger(value) && value >= 0;
|
|
13
|
+
/**
|
|
14
|
+
* Validates a chain against the declared fields, as the state chain is: each
|
|
15
|
+
* `to` has the next `from`'s fields and the last `to` has the declared ones.
|
|
16
|
+
* Fields compare key by key, so a step may restate them in a new object.
|
|
17
|
+
*/
|
|
18
|
+
const chainOf = (label, fields, options) => {
|
|
19
|
+
const declared = options?.migrations ?? [];
|
|
20
|
+
const { from: first, steps } = Array.isArray(declared)
|
|
21
|
+
? { from: 0, steps: declared }
|
|
22
|
+
: declared;
|
|
23
|
+
if (!isVersion(first))
|
|
24
|
+
throw new Error(`${label} migrations.from must be a non-negative integer`);
|
|
25
|
+
for (let index = 1; index < steps.length; index++)
|
|
26
|
+
if (!sameFields(steps[index - 1].to, steps[index].from))
|
|
27
|
+
throw new Error(`${label} migration ${index} must start from the previous migration's result`);
|
|
28
|
+
if (steps.length > 0 && !sameFields(steps.at(-1).to, fields))
|
|
29
|
+
throw new Error(`${label}'s last migration must produce its declared fields`);
|
|
30
|
+
for (const step of steps)
|
|
31
|
+
if ("_tag" in step.from || "_tag" in step.to)
|
|
32
|
+
throw new Error(`${label} migrations must not name _tag; the tag never changes`);
|
|
33
|
+
const current = first + steps.length;
|
|
34
|
+
const writeVersion = options?.writeVersion ?? current;
|
|
35
|
+
if (!isVersion(writeVersion) || writeVersion < first || writeVersion > current)
|
|
36
|
+
throw new Error(`${label} writeVersion must be a version from ${first} to ${current}`);
|
|
37
|
+
for (let version = writeVersion; version < current; version++)
|
|
38
|
+
if (steps[version - first].downcast === undefined)
|
|
39
|
+
throw new Error(`${label} writes version ${writeVersion}, so migration ${version - first} needs a downcast`);
|
|
40
|
+
return { first, current, writeVersion, steps };
|
|
41
|
+
};
|
|
42
|
+
const chains = new WeakMap();
|
|
43
|
+
const NO_CHAIN = { first: 0, current: 0, writeVersion: 0, steps: [] };
|
|
44
|
+
/** Records a class's chain when the class is built; an invalid chain throws there. */
|
|
45
|
+
export const declareChain = (declared) => {
|
|
46
|
+
chains.set(declared.schema, chainOf(declared.label, declared.fields, declared.options));
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* The chain of an event or job class. Lookup follows the prototype chain, so
|
|
50
|
+
* a subclass of an `Actor.event` or `Actor.job` value shares its chain; a class
|
|
51
|
+
* declared without one reads and writes version 0.
|
|
52
|
+
*/
|
|
53
|
+
export const payloadChain = (schema) => {
|
|
54
|
+
for (let current = schema; current !== null;) {
|
|
55
|
+
const chain = chains.get(current);
|
|
56
|
+
if (chain !== undefined)
|
|
57
|
+
return chain;
|
|
58
|
+
current = Object.getPrototypeOf(current);
|
|
59
|
+
}
|
|
60
|
+
return NO_CHAIN;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Encodes and decodes one tagged class's stored values, which carry the tag
|
|
64
|
+
* in `_tag` and their version beside them. Values at the current version take
|
|
65
|
+
* the class's own codec; older ones pass through each later step first, and
|
|
66
|
+
* new ones are downcast through each step above `writeVersion`. A stored
|
|
67
|
+
* value is its class's JSON object: the tag and the fields of its version.
|
|
68
|
+
*/
|
|
69
|
+
export const payloadCodec = ({ schema, tag, }) => {
|
|
70
|
+
const chain = payloadChain(schema);
|
|
71
|
+
const json = Schema.toCodecJson(schema);
|
|
72
|
+
const codec = Schema.fromJsonString(json);
|
|
73
|
+
const encodeCurrent = Schema.encodeEffect(codec);
|
|
74
|
+
const decodeCurrent = Schema.decodeEffect(codec);
|
|
75
|
+
const encodeCurrentJson = Schema.encodeEffect(json);
|
|
76
|
+
const decodeCurrentJson = Schema.decodeUnknownEffect(json);
|
|
77
|
+
const Stored = Schema.StructWithRest(Schema.Struct({ _tag: Schema.Literal(tag) }), [
|
|
78
|
+
Schema.Record(Schema.String, Schema.Json),
|
|
79
|
+
]);
|
|
80
|
+
const decodeStored = Schema.decodeUnknownEffect(Stored);
|
|
81
|
+
const decodeStoredText = Schema.decodeEffect(Schema.fromJsonString(Stored));
|
|
82
|
+
const encodeStoredText = Schema.encodeEffect(Schema.fromJsonString(Stored));
|
|
83
|
+
const steps = chain.steps.map((step) => {
|
|
84
|
+
const from = Schema.toCodecJson(Schema.Struct(step.from));
|
|
85
|
+
const to = Schema.toCodecJson(Schema.Struct(step.to));
|
|
86
|
+
return {
|
|
87
|
+
step,
|
|
88
|
+
decodeFrom: Schema.decodeUnknownEffect(from),
|
|
89
|
+
encodeFrom: Schema.encodeUnknownEffect(from),
|
|
90
|
+
decodeTo: Schema.decodeUnknownEffect(to),
|
|
91
|
+
encodeTo: Schema.encodeUnknownEffect(to),
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
const failure = (version, message) => PayloadError.make({
|
|
95
|
+
message: `Stored ${tag} at payload version ${version} does not decode: ${message}`,
|
|
96
|
+
});
|
|
97
|
+
const fieldsOf = ({ _tag, ...fields }) => fields;
|
|
98
|
+
const upcastStored = (text, version) => Effect.gen(function* () {
|
|
99
|
+
if (version > chain.current)
|
|
100
|
+
return yield* PayloadError.make({
|
|
101
|
+
message: `Stored ${tag} has payload version ${version}, newer than this code's chain (${chain.current}); roll forward`,
|
|
102
|
+
});
|
|
103
|
+
if (version < chain.first)
|
|
104
|
+
return yield* PayloadError.make({
|
|
105
|
+
message: `Stored ${tag} has payload version ${version}, older than this code's chain (${chain.first})`,
|
|
106
|
+
});
|
|
107
|
+
let value = fieldsOf(yield* decodeStoredText(text).pipe(Effect.mapError((error) => failure(version, error.message))));
|
|
108
|
+
for (const { step, decodeFrom, encodeTo } of steps.slice(version - chain.first)) {
|
|
109
|
+
const previous = yield* decodeFrom(value).pipe(Effect.mapError((error) => failure(version, error.message)));
|
|
110
|
+
const next = yield* Effect.try({
|
|
111
|
+
try: () => step.upcast(previous),
|
|
112
|
+
catch: (cause) => failure(version, String(cause)),
|
|
113
|
+
});
|
|
114
|
+
value = yield* encodeTo(next).pipe(Effect.mapError((error) => failure(version, error.message)));
|
|
115
|
+
}
|
|
116
|
+
return yield* decodeCurrentJson({ ...value, _tag: tag }).pipe(Effect.mapError((error) => failure(version, error.message)));
|
|
117
|
+
});
|
|
118
|
+
const downcast = (value) => Effect.gen(function* () {
|
|
119
|
+
let encoded = fieldsOf(yield* decodeStored(yield* encodeCurrentJson(value)));
|
|
120
|
+
for (let version = chain.current; version > chain.writeVersion; version--) {
|
|
121
|
+
const { step, decodeTo, encodeFrom } = steps[version - 1 - chain.first];
|
|
122
|
+
const next = yield* decodeTo(encoded);
|
|
123
|
+
encoded = yield* encodeFrom(step.downcast(next));
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
value: yield* encodeStoredText(yield* decodeStored({ ...encoded, _tag: tag })),
|
|
127
|
+
version: chain.writeVersion,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
chain,
|
|
132
|
+
/** Encodes a value at the chain's write version. */
|
|
133
|
+
encode: (value) => chain.writeVersion === chain.current
|
|
134
|
+
? encodeCurrent(value).pipe(Effect.map((text) => ({ value: text, version: chain.current })))
|
|
135
|
+
: downcast(value),
|
|
136
|
+
/** Decodes a stored value written at `version` into the current class. */
|
|
137
|
+
decode: (text, version) => version === chain.current
|
|
138
|
+
? decodeCurrent(text).pipe(Effect.mapError((error) => failure(version, error.message)))
|
|
139
|
+
: upcastStored(text, version),
|
|
140
|
+
/** A stored value as the current version encodes it; unchanged when it is already current. */
|
|
141
|
+
upcast: (text, version) => version === chain.current
|
|
142
|
+
? Effect.succeed(text)
|
|
143
|
+
: upcastStored(text, version).pipe(Effect.flatMap((decoded) => encodeCurrent(decoded).pipe(Effect.mapError((error) => failure(version, error.message))))),
|
|
144
|
+
};
|
|
145
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Schema, type Result } from "effect";
|
|
2
|
+
import type { ActorState } from "../state/migration.ts";
|
|
3
|
+
import { type DeclaredError, type Member, type PayloadOf, type PayloadOption, type ValueSchema } from "./command.ts";
|
|
4
|
+
type Fields = Readonly<Record<string, ValueSchema>>;
|
|
5
|
+
type StateOf<F extends Fields> = Schema.Struct<F>["Type"];
|
|
6
|
+
/**
|
|
7
|
+
* Ordered batching: `combine(first, second)` is one payload whose single
|
|
8
|
+
* reduction equals reducing `first` and then `second`, which lets the server
|
|
9
|
+
* fold consecutive queued calls, in their order, into one turn. It needs that
|
|
10
|
+
* fold equivalence only; it is not commutativity or a merge of concurrent
|
|
11
|
+
* replicas. Declared as a method so its parameters stay bivariant and any
|
|
12
|
+
* reducer fits `AnyReducer`.
|
|
13
|
+
*/
|
|
14
|
+
export interface Batch<Payload> {
|
|
15
|
+
combine(first: Payload, second: Payload): Payload;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A pure state transition declared in the contract. The server runs it as an
|
|
19
|
+
* ordinary fenced, receipted turn with no handler; a batched reducer replies
|
|
20
|
+
* `void` and declares no error, so combined turns stay equivalent to
|
|
21
|
+
* sequential ones and each call keeps its own receipt.
|
|
22
|
+
*/
|
|
23
|
+
export interface Reducer<Tag extends string, F extends Fields, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> extends Member<"reducer", Tag, Payload, Success, Error> {
|
|
24
|
+
readonly state: ActorState<F>;
|
|
25
|
+
/** Declared as a method so its parameters stay bivariant and any reducer fits `AnyReducer`. */
|
|
26
|
+
reduce(state: StateOf<F>, payload: Payload["Type"]): Result.Result<StateOf<F>, Error["Type"]>;
|
|
27
|
+
readonly batch: Batch<Payload["Type"]> | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Any reducer, whatever its schemas. */
|
|
30
|
+
export type AnyReducer = Reducer<string, Fields, ValueSchema, ValueSchema, DeclaredError>;
|
|
31
|
+
/**
|
|
32
|
+
* The overloads of `Actor.reducer`. A batched reducer replies `void` and
|
|
33
|
+
* cannot fail; any other replies the committed state. Declaring `error` on a
|
|
34
|
+
* batched reducer throws.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const Add = Actor.reducer("Add", {
|
|
38
|
+
* state: Counter,
|
|
39
|
+
* payload: { by: Schema.Int },
|
|
40
|
+
* reduce: (state, { by }) => Result.succeed({ count: state.count + by }),
|
|
41
|
+
* batch: { combine: (first, second) => ({ by: first.by + second.by }) },
|
|
42
|
+
* })
|
|
43
|
+
*/
|
|
44
|
+
export interface MakeReducer {
|
|
45
|
+
<const Tag extends string, const F extends Fields, const P extends PayloadOption = Schema.Void>(tag: Tag, options: {
|
|
46
|
+
readonly state: ActorState<F>;
|
|
47
|
+
readonly payload?: P;
|
|
48
|
+
readonly error?: Schema.Never;
|
|
49
|
+
readonly reduce: (state: StateOf<F>, payload: PayloadOf<P>["Type"]) => Result.Result<StateOf<F>, never>;
|
|
50
|
+
readonly batch: Batch<PayloadOf<P>["Type"]>;
|
|
51
|
+
}): Reducer<Tag, F, PayloadOf<P>, Schema.Void, Schema.Never>;
|
|
52
|
+
<const Tag extends string, const F extends Fields, const P extends PayloadOption = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options: {
|
|
53
|
+
readonly state: ActorState<F>;
|
|
54
|
+
readonly payload?: P;
|
|
55
|
+
readonly error?: Error;
|
|
56
|
+
readonly reduce: (state: StateOf<F>, payload: PayloadOf<P>["Type"]) => Result.Result<StateOf<F>, Error["Type"]>;
|
|
57
|
+
readonly batch?: undefined;
|
|
58
|
+
}): Reducer<Tag, F, PayloadOf<P>, Schema.Struct<F>, Error>;
|
|
59
|
+
}
|
|
60
|
+
/** `Reducer.make` is `Actor.reducer`; see `MakeReducer` for its two forms. */
|
|
61
|
+
export declare const Reducer: {
|
|
62
|
+
make: MakeReducer;
|
|
63
|
+
};
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { member, } from "./command.js";
|
|
3
|
+
const reducer = (tag, options) => {
|
|
4
|
+
const { state, reduce, batch } = options;
|
|
5
|
+
if (batch === undefined)
|
|
6
|
+
return {
|
|
7
|
+
...member("reducer")(tag, {
|
|
8
|
+
payload: options.payload,
|
|
9
|
+
success: Schema.Struct(state.fields),
|
|
10
|
+
error: options.error,
|
|
11
|
+
}),
|
|
12
|
+
state,
|
|
13
|
+
reduce,
|
|
14
|
+
batch,
|
|
15
|
+
};
|
|
16
|
+
if (options.error !== undefined && options.error !== Schema.Never)
|
|
17
|
+
throw new Error(`Batched reducer ${tag} cannot declare an error`);
|
|
18
|
+
return {
|
|
19
|
+
...member("reducer")(tag, { payload: options.payload }),
|
|
20
|
+
state,
|
|
21
|
+
reduce,
|
|
22
|
+
batch,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const make = reducer;
|
|
26
|
+
/** `Reducer.make` is `Actor.reducer`; see `MakeReducer` for its two forms. */
|
|
27
|
+
export const Reducer = { make };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { type DeclaredError, type Member, type PayloadOf, type PayloadOption, type ValueSchema } from "./command.ts";
|
|
3
|
+
import type { ProgressJob } from "./job.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A live, read-only feed that runs on the actor's activation for one
|
|
6
|
+
* subscriber. `payload` is the subscription's input and `success` the schema
|
|
7
|
+
* of each element; nothing it emits is stored.
|
|
8
|
+
*/
|
|
9
|
+
export interface Stream<Tag extends string, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> extends Member<"stream", Tag, Payload, Success, Error> {
|
|
10
|
+
/** Jobs whose executor progress its handler may read with `read.progress`. */
|
|
11
|
+
readonly progress: {
|
|
12
|
+
readonly jobs: ReadonlyArray<ProgressJob>;
|
|
13
|
+
} | undefined;
|
|
14
|
+
}
|
|
15
|
+
/** Any stream member, whatever its schemas. */
|
|
16
|
+
export type AnyStream = Stream<string, ValueSchema, ValueSchema, DeclaredError>;
|
|
17
|
+
declare const make: <const Tag extends string, Success extends ValueSchema, const P extends PayloadOption = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options: {
|
|
18
|
+
readonly success: Success;
|
|
19
|
+
readonly payload?: P;
|
|
20
|
+
readonly error?: Error;
|
|
21
|
+
readonly progress?: {
|
|
22
|
+
readonly jobs: ReadonlyArray<ProgressJob>;
|
|
23
|
+
};
|
|
24
|
+
}) => Stream<Tag, PayloadOf<P>, Success, Error>;
|
|
25
|
+
/**
|
|
26
|
+
* `StreamMember.make` is `Actor.stream`: declares a live, read-only feed by
|
|
27
|
+
* tag. `success` types each element; `payload` defaults to `Schema.Void`, and
|
|
28
|
+
* `progress.jobs` lists the jobs whose executor progress the handler may follow.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* const Ticks = Actor.stream("Ticks", { success: Schema.Int })
|
|
32
|
+
*/
|
|
33
|
+
export declare const StreamMember: {
|
|
34
|
+
make: typeof make;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { member, } from "./command.js";
|
|
2
|
+
const make = (tag, options) => ({
|
|
3
|
+
...member("stream")(tag, options),
|
|
4
|
+
progress: options.progress,
|
|
5
|
+
});
|
|
6
|
+
/**
|
|
7
|
+
* `StreamMember.make` is `Actor.stream`: declares a live, read-only feed by
|
|
8
|
+
* tag. `success` types each element; `payload` defaults to `Schema.Void`, and
|
|
9
|
+
* `progress.jobs` lists the jobs whose executor progress the handler may follow.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const Ticks = Actor.stream("Ticks", { success: Schema.Int })
|
|
13
|
+
*/
|
|
14
|
+
export const StreamMember = { make };
|