@earendil-works/chord 1.4.0 → 1.5.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 +41 -0
- package/README.md +79 -14
- package/dist/cell.d.ts +7 -7
- package/dist/cell.d.ts.map +1 -1
- package/dist/cell.js.map +1 -1
- package/dist/context/index.d.ts +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -1
- package/dist/context/index.js.map +1 -1
- package/dist/contract.d.ts +51 -52
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +19 -24
- package/dist/contract.js.map +1 -1
- package/dist/delta/apply-immutable-trusted.js +3 -4
- package/dist/delta/apply-immutable-trusted.js.map +1 -1
- package/dist/delta/diff.d.ts.map +1 -1
- package/dist/delta/diff.js +5 -3
- package/dist/delta/diff.js.map +1 -1
- package/dist/delta/index.d.ts +9 -1
- package/dist/delta/index.d.ts.map +1 -1
- package/dist/delta/index.js +15 -11
- package/dist/delta/index.js.map +1 -1
- package/dist/delta/pending.d.ts +36 -0
- package/dist/delta/pending.d.ts.map +1 -0
- package/dist/delta/pending.js +143 -0
- package/dist/delta/pending.js.map +1 -0
- package/dist/delta/tracker.d.ts +12 -0
- package/dist/delta/tracker.d.ts.map +1 -1
- package/dist/delta/tracker.js +109 -39
- package/dist/delta/tracker.js.map +1 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +9 -7
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/next/contracts/accepts.d.ts +81 -0
- package/dist/next/contracts/accepts.d.ts.map +1 -0
- package/dist/next/contracts/accepts.js +123 -0
- package/dist/next/contracts/accepts.js.map +1 -0
- package/dist/next/contracts/contract.d.ts +121 -0
- package/dist/next/contracts/contract.d.ts.map +1 -0
- package/dist/next/contracts/contract.js +50 -0
- package/dist/next/contracts/contract.js.map +1 -0
- package/dist/next/contracts/declare.d.ts +107 -0
- package/dist/next/contracts/declare.d.ts.map +1 -0
- package/dist/next/contracts/declare.js +136 -0
- package/dist/next/contracts/declare.js.map +1 -0
- package/dist/next/contracts/evolve.d.ts +92 -0
- package/dist/next/contracts/evolve.d.ts.map +1 -0
- package/dist/next/contracts/evolve.js +179 -0
- package/dist/next/contracts/evolve.js.map +1 -0
- package/dist/next/contracts/fingerprint.d.ts +16 -0
- package/dist/next/contracts/fingerprint.d.ts.map +1 -0
- package/dist/next/contracts/fingerprint.js +50 -0
- package/dist/next/contracts/fingerprint.js.map +1 -0
- package/dist/next/contracts/history.d.ts +71 -0
- package/dist/next/contracts/history.d.ts.map +1 -0
- package/dist/next/contracts/history.js +3 -0
- package/dist/next/contracts/history.js.map +1 -0
- package/dist/next/contracts/host-kind.d.ts +40 -0
- package/dist/next/contracts/host-kind.d.ts.map +1 -0
- package/dist/next/contracts/host-kind.js +37 -0
- package/dist/next/contracts/host-kind.js.map +1 -0
- package/dist/next/contracts/index.d.ts +7 -0
- package/dist/next/contracts/index.d.ts.map +1 -0
- package/dist/next/contracts/index.js +6 -0
- package/dist/next/contracts/index.js.map +1 -0
- package/dist/next/contracts/internal.d.ts +10 -0
- package/dist/next/contracts/internal.d.ts.map +1 -0
- package/dist/next/contracts/internal.js +9 -0
- package/dist/next/contracts/internal.js.map +1 -0
- package/dist/next/contracts/names.d.ts +3 -0
- package/dist/next/contracts/names.d.ts.map +1 -0
- package/dist/next/contracts/names.js +13 -0
- package/dist/next/contracts/names.js.map +1 -0
- package/dist/next/contracts/params.d.ts +28 -0
- package/dist/next/contracts/params.d.ts.map +1 -0
- package/dist/next/contracts/params.js +50 -0
- package/dist/next/contracts/params.js.map +1 -0
- package/dist/next/contracts/schema.d.ts +102 -0
- package/dist/next/contracts/schema.d.ts.map +1 -0
- package/dist/next/contracts/schema.js +103 -0
- package/dist/next/contracts/schema.js.map +1 -0
- package/dist/next/contracts/snapshot.d.ts +16 -0
- package/dist/next/contracts/snapshot.d.ts.map +1 -0
- package/dist/next/contracts/snapshot.js +167 -0
- package/dist/next/contracts/snapshot.js.map +1 -0
- package/dist/next/data/args.d.ts +50 -0
- package/dist/next/data/args.d.ts.map +1 -0
- package/dist/next/data/args.js +83 -0
- package/dist/next/data/args.js.map +1 -0
- package/dist/next/data/errors.d.ts +73 -0
- package/dist/next/data/errors.d.ts.map +1 -0
- package/dist/next/data/errors.js +107 -0
- package/dist/next/data/errors.js.map +1 -0
- package/dist/next/data/failure.d.ts +26 -0
- package/dist/next/data/failure.d.ts.map +1 -0
- package/dist/next/data/failure.js +72 -0
- package/dist/next/data/failure.js.map +1 -0
- package/dist/next/data/index.d.ts +4 -0
- package/dist/next/data/index.d.ts.map +1 -0
- package/dist/next/data/index.js +4 -0
- package/dist/next/data/index.js.map +1 -0
- package/dist/next/data/internal.d.ts +7 -0
- package/dist/next/data/internal.d.ts.map +1 -0
- package/dist/next/data/internal.js +8 -0
- package/dist/next/data/internal.js.map +1 -0
- package/dist/next/data/params.d.ts +20 -0
- package/dist/next/data/params.d.ts.map +1 -0
- package/dist/next/data/params.js +31 -0
- package/dist/next/data/params.js.map +1 -0
- package/dist/next/data/principal.d.ts +17 -0
- package/dist/next/data/principal.d.ts.map +1 -0
- package/dist/next/data/principal.js +41 -0
- package/dist/next/data/principal.js.map +1 -0
- package/dist/next/data/validator.d.ts +12 -0
- package/dist/next/data/validator.d.ts.map +1 -0
- package/dist/next/data/validator.js +34 -0
- package/dist/next/data/validator.js.map +1 -0
- package/dist/next/documents/address-source.d.ts +20 -0
- package/dist/next/documents/address-source.d.ts.map +1 -0
- package/dist/next/documents/address-source.js +44 -0
- package/dist/next/documents/address-source.js.map +1 -0
- package/dist/next/documents/definition.d.ts +84 -0
- package/dist/next/documents/definition.d.ts.map +1 -0
- package/dist/next/documents/definition.js +73 -0
- package/dist/next/documents/definition.js.map +1 -0
- package/dist/next/documents/documents.d.ts +106 -0
- package/dist/next/documents/documents.d.ts.map +1 -0
- package/dist/next/documents/documents.js +224 -0
- package/dist/next/documents/documents.js.map +1 -0
- package/dist/next/documents/fence.d.ts +9 -0
- package/dist/next/documents/fence.d.ts.map +1 -0
- package/dist/next/documents/fence.js +15 -0
- package/dist/next/documents/fence.js.map +1 -0
- package/dist/next/documents/handles.d.ts +76 -0
- package/dist/next/documents/handles.d.ts.map +1 -0
- package/dist/next/documents/handles.js +66 -0
- package/dist/next/documents/handles.js.map +1 -0
- package/dist/next/documents/index.d.ts +4 -0
- package/dist/next/documents/index.d.ts.map +1 -0
- package/dist/next/documents/index.js +3 -0
- package/dist/next/documents/index.js.map +1 -0
- package/dist/next/documents/internal.d.ts +9 -0
- package/dist/next/documents/internal.d.ts.map +1 -0
- package/dist/next/documents/internal.js +9 -0
- package/dist/next/documents/internal.js.map +1 -0
- package/dist/next/documents/keyed-slot.d.ts +103 -0
- package/dist/next/documents/keyed-slot.d.ts.map +1 -0
- package/dist/next/documents/keyed-slot.js +395 -0
- package/dist/next/documents/keyed-slot.js.map +1 -0
- package/dist/next/documents/line.d.ts +7 -0
- package/dist/next/documents/line.d.ts.map +1 -0
- package/dist/next/documents/line.js +14 -0
- package/dist/next/documents/line.js.map +1 -0
- package/dist/next/documents/persistence.d.ts +104 -0
- package/dist/next/documents/persistence.d.ts.map +1 -0
- package/dist/next/documents/persistence.js +128 -0
- package/dist/next/documents/persistence.js.map +1 -0
- package/dist/next/documents/residency.d.ts +31 -0
- package/dist/next/documents/residency.d.ts.map +1 -0
- package/dist/next/documents/residency.js +93 -0
- package/dist/next/documents/residency.js.map +1 -0
- package/dist/next/documents/slot.d.ts +109 -0
- package/dist/next/documents/slot.d.ts.map +1 -0
- package/dist/next/documents/slot.js +181 -0
- package/dist/next/documents/slot.js.map +1 -0
- package/dist/next/documents/transaction.d.ts +133 -0
- package/dist/next/documents/transaction.d.ts.map +1 -0
- package/dist/next/documents/transaction.js +409 -0
- package/dist/next/documents/transaction.js.map +1 -0
- package/dist/next/host/activity.d.ts +31 -0
- package/dist/next/host/activity.d.ts.map +1 -0
- package/dist/next/host/activity.js +40 -0
- package/dist/next/host/activity.js.map +1 -0
- package/dist/next/host/adapted.d.ts +49 -0
- package/dist/next/host/adapted.d.ts.map +1 -0
- package/dist/next/host/adapted.js +214 -0
- package/dist/next/host/adapted.js.map +1 -0
- package/dist/next/host/attempt.d.ts +278 -0
- package/dist/next/host/attempt.d.ts.map +1 -0
- package/dist/next/host/attempt.js +1072 -0
- package/dist/next/host/attempt.js.map +1 -0
- package/dist/next/host/backoff.d.ts +29 -0
- package/dist/next/host/backoff.d.ts.map +1 -0
- package/dist/next/host/backoff.js +69 -0
- package/dist/next/host/backoff.js.map +1 -0
- package/dist/next/host/ctx.d.ts +47 -0
- package/dist/next/host/ctx.d.ts.map +1 -0
- package/dist/next/host/ctx.js +108 -0
- package/dist/next/host/ctx.js.map +1 -0
- package/dist/next/host/deadline.d.ts +12 -0
- package/dist/next/host/deadline.d.ts.map +1 -0
- package/dist/next/host/deadline.js +40 -0
- package/dist/next/host/deadline.js.map +1 -0
- package/dist/next/host/dependencies.d.ts +65 -0
- package/dist/next/host/dependencies.d.ts.map +1 -0
- package/dist/next/host/dependencies.js +115 -0
- package/dist/next/host/dependencies.js.map +1 -0
- package/dist/next/host/destination.d.ts +48 -0
- package/dist/next/host/destination.d.ts.map +1 -0
- package/dist/next/host/destination.js +101 -0
- package/dist/next/host/destination.js.map +1 -0
- package/dist/next/host/facet.d.ts +79 -0
- package/dist/next/host/facet.d.ts.map +1 -0
- package/dist/next/host/facet.js +55 -0
- package/dist/next/host/facet.js.map +1 -0
- package/dist/next/host/follow.d.ts +52 -0
- package/dist/next/host/follow.d.ts.map +1 -0
- package/dist/next/host/follow.js +207 -0
- package/dist/next/host/follow.js.map +1 -0
- package/dist/next/host/host.d.ts +495 -0
- package/dist/next/host/host.d.ts.map +1 -0
- package/dist/next/host/host.js +1075 -0
- package/dist/next/host/host.js.map +1 -0
- package/dist/next/host/index.d.ts +17 -0
- package/dist/next/host/index.d.ts.map +1 -0
- package/dist/next/host/index.js +6 -0
- package/dist/next/host/index.js.map +1 -0
- package/dist/next/host/internal.d.ts +10 -0
- package/dist/next/host/internal.d.ts.map +1 -0
- package/dist/next/host/internal.js +8 -0
- package/dist/next/host/internal.js.map +1 -0
- package/dist/next/host/members.d.ts +50 -0
- package/dist/next/host/members.d.ts.map +1 -0
- package/dist/next/host/members.js +107 -0
- package/dist/next/host/members.js.map +1 -0
- package/dist/next/host/native.d.ts +55 -0
- package/dist/next/host/native.d.ts.map +1 -0
- package/dist/next/host/native.js +92 -0
- package/dist/next/host/native.js.map +1 -0
- package/dist/next/host/object.d.ts +290 -0
- package/dist/next/host/object.d.ts.map +1 -0
- package/dist/next/host/object.js +1127 -0
- package/dist/next/host/object.js.map +1 -0
- package/dist/next/host/parked.d.ts +23 -0
- package/dist/next/host/parked.d.ts.map +1 -0
- package/dist/next/host/parked.js +79 -0
- package/dist/next/host/parked.js.map +1 -0
- package/dist/next/host/presence.d.ts +34 -0
- package/dist/next/host/presence.d.ts.map +1 -0
- package/dist/next/host/presence.js +117 -0
- package/dist/next/host/presence.js.map +1 -0
- package/dist/next/host/ref-state.d.ts +53 -0
- package/dist/next/host/ref-state.d.ts.map +1 -0
- package/dist/next/host/ref-state.js +83 -0
- package/dist/next/host/ref-state.js.map +1 -0
- package/dist/next/host/reference-keys.d.ts +36 -0
- package/dist/next/host/reference-keys.d.ts.map +1 -0
- package/dist/next/host/reference-keys.js +168 -0
- package/dist/next/host/reference-keys.js.map +1 -0
- package/dist/next/host/reference-source.d.ts +65 -0
- package/dist/next/host/reference-source.d.ts.map +1 -0
- package/dist/next/host/reference-source.js +285 -0
- package/dist/next/host/reference-source.js.map +1 -0
- package/dist/next/host/reference.d.ts +308 -0
- package/dist/next/host/reference.d.ts.map +1 -0
- package/dist/next/host/reference.js +775 -0
- package/dist/next/host/reference.js.map +1 -0
- package/dist/next/host/retry-on.d.ts +28 -0
- package/dist/next/host/retry-on.d.ts.map +1 -0
- package/dist/next/host/retry-on.js +52 -0
- package/dist/next/host/retry-on.js.map +1 -0
- package/dist/next/host/revocation.d.ts +16 -0
- package/dist/next/host/revocation.d.ts.map +1 -0
- package/dist/next/host/revocation.js +27 -0
- package/dist/next/host/revocation.js.map +1 -0
- package/dist/next/host/root.d.ts +27 -0
- package/dist/next/host/root.d.ts.map +1 -0
- package/dist/next/host/root.js +68 -0
- package/dist/next/host/root.js.map +1 -0
- package/dist/next/host/route.d.ts +64 -0
- package/dist/next/host/route.d.ts.map +1 -0
- package/dist/next/host/route.js +190 -0
- package/dist/next/host/route.js.map +1 -0
- package/dist/next/host/routines.d.ts +76 -0
- package/dist/next/host/routines.d.ts.map +1 -0
- package/dist/next/host/routines.js +350 -0
- package/dist/next/host/routines.js.map +1 -0
- package/dist/next/host/sleep.d.ts +9 -0
- package/dist/next/host/sleep.d.ts.map +1 -0
- package/dist/next/host/sleep.js +40 -0
- package/dist/next/host/sleep.js.map +1 -0
- package/dist/next/host/staging.d.ts +94 -0
- package/dist/next/host/staging.d.ts.map +1 -0
- package/dist/next/host/staging.js +302 -0
- package/dist/next/host/staging.js.map +1 -0
- package/dist/next/host/unbound.d.ts +30 -0
- package/dist/next/host/unbound.d.ts.map +1 -0
- package/dist/next/host/unbound.js +67 -0
- package/dist/next/host/unbound.js.map +1 -0
- package/dist/next/host/uuid.d.ts +3 -0
- package/dist/next/host/uuid.d.ts.map +1 -0
- package/dist/next/host/uuid.js +38 -0
- package/dist/next/host/uuid.js.map +1 -0
- package/dist/next/index.d.ts +28 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +18 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/jobs/definition.d.ts +96 -0
- package/dist/next/jobs/definition.d.ts.map +1 -0
- package/dist/next/jobs/definition.js +83 -0
- package/dist/next/jobs/definition.js.map +1 -0
- package/dist/next/jobs/index.d.ts +5 -0
- package/dist/next/jobs/index.d.ts.map +1 -0
- package/dist/next/jobs/index.js +3 -0
- package/dist/next/jobs/index.js.map +1 -0
- package/dist/next/jobs/internal.d.ts +3 -0
- package/dist/next/jobs/internal.d.ts.map +1 -0
- package/dist/next/jobs/internal.js +4 -0
- package/dist/next/jobs/internal.js.map +1 -0
- package/dist/next/jobs/job.d.ts +152 -0
- package/dist/next/jobs/job.d.ts.map +1 -0
- package/dist/next/jobs/job.js +320 -0
- package/dist/next/jobs/job.js.map +1 -0
- package/dist/next/jobs/persisted.d.ts +38 -0
- package/dist/next/jobs/persisted.d.ts.map +1 -0
- package/dist/next/jobs/persisted.js +95 -0
- package/dist/next/jobs/persisted.js.map +1 -0
- package/dist/next/jobs/records.d.ts +231 -0
- package/dist/next/jobs/records.d.ts.map +1 -0
- package/dist/next/jobs/records.js +869 -0
- package/dist/next/jobs/records.js.map +1 -0
- package/dist/next/jobs/run-states.d.ts +69 -0
- package/dist/next/jobs/run-states.d.ts.map +1 -0
- package/dist/next/jobs/run-states.js +228 -0
- package/dist/next/jobs/run-states.js.map +1 -0
- package/dist/next/jobs/run.d.ts +113 -0
- package/dist/next/jobs/run.d.ts.map +1 -0
- package/dist/next/jobs/run.js +200 -0
- package/dist/next/jobs/run.js.map +1 -0
- package/dist/next/jobs/running.d.ts +44 -0
- package/dist/next/jobs/running.d.ts.map +1 -0
- package/dist/next/jobs/running.js +117 -0
- package/dist/next/jobs/running.js.map +1 -0
- package/dist/next/jobs/stored.d.ts +63 -0
- package/dist/next/jobs/stored.d.ts.map +1 -0
- package/dist/next/jobs/stored.js +55 -0
- package/dist/next/jobs/stored.js.map +1 -0
- package/dist/next/link/binary.d.ts +4 -0
- package/dist/next/link/binary.d.ts.map +1 -0
- package/dist/next/link/binary.js +534 -0
- package/dist/next/link/binary.js.map +1 -0
- package/dist/next/link/channel.d.ts +63 -0
- package/dist/next/link/channel.d.ts.map +1 -0
- package/dist/next/link/channel.js +202 -0
- package/dist/next/link/channel.js.map +1 -0
- package/dist/next/link/errors.d.ts +7 -0
- package/dist/next/link/errors.d.ts.map +1 -0
- package/dist/next/link/errors.js +21 -0
- package/dist/next/link/errors.js.map +1 -0
- package/dist/next/link/index.d.ts +8 -0
- package/dist/next/link/index.d.ts.map +1 -0
- package/dist/next/link/index.js +8 -0
- package/dist/next/link/index.js.map +1 -0
- package/dist/next/link/internal.d.ts +9 -0
- package/dist/next/link/internal.d.ts.map +1 -0
- package/dist/next/link/internal.js +10 -0
- package/dist/next/link/internal.js.map +1 -0
- package/dist/next/link/ipc.d.ts +22 -0
- package/dist/next/link/ipc.d.ts.map +1 -0
- package/dist/next/link/ipc.js +64 -0
- package/dist/next/link/ipc.js.map +1 -0
- package/dist/next/link/link.d.ts +34 -0
- package/dist/next/link/link.d.ts.map +1 -0
- package/dist/next/link/link.js +87 -0
- package/dist/next/link/link.js.map +1 -0
- package/dist/next/link/message.d.ts +249 -0
- package/dist/next/link/message.d.ts.map +1 -0
- package/dist/next/link/message.js +123 -0
- package/dist/next/link/message.js.map +1 -0
- package/dist/next/link/part.d.ts +80 -0
- package/dist/next/link/part.d.ts.map +1 -0
- package/dist/next/link/part.js +164 -0
- package/dist/next/link/part.js.map +1 -0
- package/dist/next/link/text.d.ts +6 -0
- package/dist/next/link/text.d.ts.map +1 -0
- package/dist/next/link/text.js +335 -0
- package/dist/next/link/text.js.map +1 -0
- package/dist/next/link/values.d.ts +40 -0
- package/dist/next/link/values.d.ts.map +1 -0
- package/dist/next/link/values.js +117 -0
- package/dist/next/link/values.js.map +1 -0
- package/dist/next/link/websocket.d.ts +26 -0
- package/dist/next/link/websocket.d.ts.map +1 -0
- package/dist/next/link/websocket.js +91 -0
- package/dist/next/link/websocket.js.map +1 -0
- package/dist/next/registries/contribution.d.ts +50 -0
- package/dist/next/registries/contribution.d.ts.map +1 -0
- package/dist/next/registries/contribution.js +129 -0
- package/dist/next/registries/contribution.js.map +1 -0
- package/dist/next/registries/entries.d.ts +18 -0
- package/dist/next/registries/entries.d.ts.map +1 -0
- package/dist/next/registries/entries.js +42 -0
- package/dist/next/registries/entries.js.map +1 -0
- package/dist/next/registries/index.d.ts +3 -0
- package/dist/next/registries/index.d.ts.map +1 -0
- package/dist/next/registries/index.js +5 -0
- package/dist/next/registries/index.js.map +1 -0
- package/dist/next/registries/internal.d.ts +4 -0
- package/dist/next/registries/internal.d.ts.map +1 -0
- package/dist/next/registries/internal.js +5 -0
- package/dist/next/registries/internal.js.map +1 -0
- package/dist/next/registries/record.d.ts +94 -0
- package/dist/next/registries/record.d.ts.map +1 -0
- package/dist/next/registries/record.js +253 -0
- package/dist/next/registries/record.js.map +1 -0
- package/dist/next/registries/registry.d.ts +74 -0
- package/dist/next/registries/registry.d.ts.map +1 -0
- package/dist/next/registries/registry.js +14 -0
- package/dist/next/registries/registry.js.map +1 -0
- package/dist/next/registries/value.d.ts +48 -0
- package/dist/next/registries/value.d.ts.map +1 -0
- package/dist/next/registries/value.js +199 -0
- package/dist/next/registries/value.js.map +1 -0
- package/dist/next/remote/calls.d.ts +25 -0
- package/dist/next/remote/calls.d.ts.map +1 -0
- package/dist/next/remote/calls.js +62 -0
- package/dist/next/remote/calls.js.map +1 -0
- package/dist/next/remote/consumer.d.ts +42 -0
- package/dist/next/remote/consumer.d.ts.map +1 -0
- package/dist/next/remote/consumer.js +343 -0
- package/dist/next/remote/consumer.js.map +1 -0
- package/dist/next/remote/hold.d.ts +130 -0
- package/dist/next/remote/hold.d.ts.map +1 -0
- package/dist/next/remote/hold.js +537 -0
- package/dist/next/remote/hold.js.map +1 -0
- package/dist/next/remote/host-link.d.ts +77 -0
- package/dist/next/remote/host-link.d.ts.map +1 -0
- package/dist/next/remote/host-link.js +182 -0
- package/dist/next/remote/host-link.js.map +1 -0
- package/dist/next/remote/internal.d.ts +6 -0
- package/dist/next/remote/internal.d.ts.map +1 -0
- package/dist/next/remote/internal.js +6 -0
- package/dist/next/remote/internal.js.map +1 -0
- package/dist/next/remote/path.d.ts +46 -0
- package/dist/next/remote/path.d.ts.map +1 -0
- package/dist/next/remote/path.js +73 -0
- package/dist/next/remote/path.js.map +1 -0
- package/dist/next/remote/provider.d.ts +76 -0
- package/dist/next/remote/provider.d.ts.map +1 -0
- package/dist/next/remote/provider.js +506 -0
- package/dist/next/remote/provider.js.map +1 -0
- package/dist/next/remote/relay.d.ts +58 -0
- package/dist/next/remote/relay.d.ts.map +1 -0
- package/dist/next/remote/relay.js +117 -0
- package/dist/next/remote/relay.js.map +1 -0
- package/dist/next/remote/remote-object.d.ts +133 -0
- package/dist/next/remote/remote-object.d.ts.map +1 -0
- package/dist/next/remote/remote-object.js +411 -0
- package/dist/next/remote/remote-object.js.map +1 -0
- package/dist/next/remote/replica.d.ts +59 -0
- package/dist/next/remote/replica.d.ts.map +1 -0
- package/dist/next/remote/replica.js +125 -0
- package/dist/next/remote/replica.js.map +1 -0
- package/dist/next/state/batch.d.ts +64 -0
- package/dist/next/state/batch.d.ts.map +1 -0
- package/dist/next/state/batch.js +163 -0
- package/dist/next/state/batch.js.map +1 -0
- package/dist/next/state/derive.d.ts +52 -0
- package/dist/next/state/derive.d.ts.map +1 -0
- package/dist/next/state/derive.js +182 -0
- package/dist/next/state/derive.js.map +1 -0
- package/dist/next/state/index.d.ts +6 -0
- package/dist/next/state/index.d.ts.map +1 -0
- package/dist/next/state/index.js +4 -0
- package/dist/next/state/index.js.map +1 -0
- package/dist/next/state/internal.d.ts +6 -0
- package/dist/next/state/internal.d.ts.map +1 -0
- package/dist/next/state/internal.js +8 -0
- package/dist/next/state/internal.js.map +1 -0
- package/dist/next/state/native-source.d.ts +106 -0
- package/dist/next/state/native-source.d.ts.map +1 -0
- package/dist/next/state/native-source.js +240 -0
- package/dist/next/state/native-source.js.map +1 -0
- package/dist/next/state/watchable.d.ts +114 -0
- package/dist/next/state/watchable.d.ts.map +1 -0
- package/dist/next/state/watchable.js +156 -0
- package/dist/next/state/watchable.js.map +1 -0
- package/dist/next/state/writable.d.ts +32 -0
- package/dist/next/state/writable.d.ts.map +1 -0
- package/dist/next/state/writable.js +49 -0
- package/dist/next/state/writable.js.map +1 -0
- package/dist/next/store/adapter.d.ts +67 -0
- package/dist/next/store/adapter.d.ts.map +1 -0
- package/dist/next/store/adapter.js +118 -0
- package/dist/next/store/adapter.js.map +1 -0
- package/dist/next/store/allocator.d.ts +17 -0
- package/dist/next/store/allocator.d.ts.map +1 -0
- package/dist/next/store/allocator.js +30 -0
- package/dist/next/store/allocator.js.map +1 -0
- package/dist/next/store/applier.d.ts +8 -0
- package/dist/next/store/applier.d.ts.map +1 -0
- package/dist/next/store/applier.js +375 -0
- package/dist/next/store/applier.js.map +1 -0
- package/dist/next/store/apply-batch.d.ts +12 -0
- package/dist/next/store/apply-batch.d.ts.map +1 -0
- package/dist/next/store/apply-batch.js +83 -0
- package/dist/next/store/apply-batch.js.map +1 -0
- package/dist/next/store/archive.d.ts +32 -0
- package/dist/next/store/archive.d.ts.map +1 -0
- package/dist/next/store/archive.js +129 -0
- package/dist/next/store/archive.js.map +1 -0
- package/dist/next/store/backend.d.ts +10 -0
- package/dist/next/store/backend.d.ts.map +1 -0
- package/dist/next/store/backend.js +15 -0
- package/dist/next/store/backend.js.map +1 -0
- package/dist/next/store/catalog.d.ts +24 -0
- package/dist/next/store/catalog.d.ts.map +1 -0
- package/dist/next/store/catalog.js +17 -0
- package/dist/next/store/catalog.js.map +1 -0
- package/dist/next/store/claims.d.ts +23 -0
- package/dist/next/store/claims.d.ts.map +1 -0
- package/dist/next/store/claims.js +65 -0
- package/dist/next/store/claims.js.map +1 -0
- package/dist/next/store/columns.d.ts +77 -0
- package/dist/next/store/columns.d.ts.map +1 -0
- package/dist/next/store/columns.js +77 -0
- package/dist/next/store/columns.js.map +1 -0
- package/dist/next/store/engine.d.ts +176 -0
- package/dist/next/store/engine.d.ts.map +1 -0
- package/dist/next/store/engine.js +283 -0
- package/dist/next/store/engine.js.map +1 -0
- package/dist/next/store/evaluate.d.ts +17 -0
- package/dist/next/store/evaluate.d.ts.map +1 -0
- package/dist/next/store/evaluate.js +128 -0
- package/dist/next/store/evaluate.js.map +1 -0
- package/dist/next/store/export.d.ts +17 -0
- package/dist/next/store/export.d.ts.map +1 -0
- package/dist/next/store/export.js +200 -0
- package/dist/next/store/export.js.map +1 -0
- package/dist/next/store/expression.d.ts +150 -0
- package/dist/next/store/expression.d.ts.map +1 -0
- package/dist/next/store/expression.js +268 -0
- package/dist/next/store/expression.js.map +1 -0
- package/dist/next/store/import.d.ts +10 -0
- package/dist/next/store/import.d.ts.map +1 -0
- package/dist/next/store/import.js +276 -0
- package/dist/next/store/import.js.map +1 -0
- package/dist/next/store/index.d.ts +16 -0
- package/dist/next/store/index.d.ts.map +1 -0
- package/dist/next/store/index.js +13 -0
- package/dist/next/store/index.js.map +1 -0
- package/dist/next/store/json-column.d.ts +33 -0
- package/dist/next/store/json-column.d.ts.map +1 -0
- package/dist/next/store/json-column.js +61 -0
- package/dist/next/store/json-column.js.map +1 -0
- package/dist/next/store/jsonl.d.ts +9 -0
- package/dist/next/store/jsonl.d.ts.map +1 -0
- package/dist/next/store/jsonl.js +61 -0
- package/dist/next/store/jsonl.js.map +1 -0
- package/dist/next/store/outbox.d.ts +26 -0
- package/dist/next/store/outbox.d.ts.map +1 -0
- package/dist/next/store/outbox.js +80 -0
- package/dist/next/store/outbox.js.map +1 -0
- package/dist/next/store/query.d.ts +39 -0
- package/dist/next/store/query.d.ts.map +1 -0
- package/dist/next/store/query.js +97 -0
- package/dist/next/store/query.js.map +1 -0
- package/dist/next/store/refusal.d.ts +15 -0
- package/dist/next/store/refusal.d.ts.map +1 -0
- package/dist/next/store/refusal.js +36 -0
- package/dist/next/store/refusal.js.map +1 -0
- package/dist/next/store/rows.d.ts +80 -0
- package/dist/next/store/rows.d.ts.map +1 -0
- package/dist/next/store/rows.js +183 -0
- package/dist/next/store/rows.js.map +1 -0
- package/dist/next/store/schema.d.ts +25 -0
- package/dist/next/store/schema.d.ts.map +1 -0
- package/dist/next/store/schema.js +115 -0
- package/dist/next/store/schema.js.map +1 -0
- package/dist/next/store/sql.d.ts +73 -0
- package/dist/next/store/sql.d.ts.map +1 -0
- package/dist/next/store/sql.js +234 -0
- package/dist/next/store/sql.js.map +1 -0
- package/dist/next/store/step.d.ts +48 -0
- package/dist/next/store/step.d.ts.map +1 -0
- package/dist/next/store/step.js +50 -0
- package/dist/next/store/step.js.map +1 -0
- package/dist/next/store/store.d.ts +161 -0
- package/dist/next/store/store.d.ts.map +1 -0
- package/dist/next/store/store.js +627 -0
- package/dist/next/store/store.js.map +1 -0
- package/dist/next/store/table-changes.d.ts +29 -0
- package/dist/next/store/table-changes.d.ts.map +1 -0
- package/dist/next/store/table-changes.js +102 -0
- package/dist/next/store/table-changes.js.map +1 -0
- package/dist/next/store/table-evolve.d.ts +74 -0
- package/dist/next/store/table-evolve.d.ts.map +1 -0
- package/dist/next/store/table-evolve.js +201 -0
- package/dist/next/store/table-evolve.js.map +1 -0
- package/dist/next/store/table-handle.d.ts +67 -0
- package/dist/next/store/table-handle.d.ts.map +1 -0
- package/dist/next/store/table-handle.js +101 -0
- package/dist/next/store/table-handle.js.map +1 -0
- package/dist/next/store/table-history.d.ts +75 -0
- package/dist/next/store/table-history.d.ts.map +1 -0
- package/dist/next/store/table-history.js +42 -0
- package/dist/next/store/table-history.js.map +1 -0
- package/dist/next/store/table-migration.d.ts +16 -0
- package/dist/next/store/table-migration.d.ts.map +1 -0
- package/dist/next/store/table-migration.js +202 -0
- package/dist/next/store/table-migration.js.map +1 -0
- package/dist/next/store/table-writes.d.ts +125 -0
- package/dist/next/store/table-writes.d.ts.map +1 -0
- package/dist/next/store/table-writes.js +165 -0
- package/dist/next/store/table-writes.js.map +1 -0
- package/dist/next/store/table.d.ts +80 -0
- package/dist/next/store/table.d.ts.map +1 -0
- package/dist/next/store/table.js +103 -0
- package/dist/next/store/table.js.map +1 -0
- package/dist/next/store/text.d.ts +14 -0
- package/dist/next/store/text.d.ts.map +1 -0
- package/dist/next/store/text.js +51 -0
- package/dist/next/store/text.js.map +1 -0
- package/dist/next/store/writes.d.ts +5 -0
- package/dist/next/store/writes.d.ts.map +1 -0
- package/dist/next/store/writes.js +4 -0
- package/dist/next/store/writes.js.map +1 -0
- package/dist/next-node/compression.d.ts +7 -0
- package/dist/next-node/compression.d.ts.map +1 -0
- package/dist/next-node/compression.js +24 -0
- package/dist/next-node/compression.js.map +1 -0
- package/dist/next-node/http/admission.d.ts +63 -0
- package/dist/next-node/http/admission.d.ts.map +1 -0
- package/dist/next-node/http/admission.js +134 -0
- package/dist/next-node/http/admission.js.map +1 -0
- package/dist/next-node/http/authenticate.d.ts +21 -0
- package/dist/next-node/http/authenticate.d.ts.map +1 -0
- package/dist/next-node/http/authenticate.js +34 -0
- package/dist/next-node/http/authenticate.js.map +1 -0
- package/dist/next-node/http/cookies.d.ts +24 -0
- package/dist/next-node/http/cookies.d.ts.map +1 -0
- package/dist/next-node/http/cookies.js +62 -0
- package/dist/next-node/http/cookies.js.map +1 -0
- package/dist/next-node/http/file.d.ts +23 -0
- package/dist/next-node/http/file.d.ts.map +1 -0
- package/dist/next-node/http/file.js +94 -0
- package/dist/next-node/http/file.js.map +1 -0
- package/dist/next-node/http/headers.d.ts +37 -0
- package/dist/next-node/http/headers.d.ts.map +1 -0
- package/dist/next-node/http/headers.js +129 -0
- package/dist/next-node/http/headers.js.map +1 -0
- package/dist/next-node/http/http.d.ts +100 -0
- package/dist/next-node/http/http.d.ts.map +1 -0
- package/dist/next-node/http/http.js +462 -0
- package/dist/next-node/http/http.js.map +1 -0
- package/dist/next-node/http/incoming.d.ts +19 -0
- package/dist/next-node/http/incoming.d.ts.map +1 -0
- package/dist/next-node/http/incoming.js +31 -0
- package/dist/next-node/http/incoming.js.map +1 -0
- package/dist/next-node/http/index.d.ts +11 -0
- package/dist/next-node/http/index.d.ts.map +1 -0
- package/dist/next-node/http/index.js +12 -0
- package/dist/next-node/http/index.js.map +1 -0
- package/dist/next-node/http/node.d.ts +78 -0
- package/dist/next-node/http/node.d.ts.map +1 -0
- package/dist/next-node/http/node.js +291 -0
- package/dist/next-node/http/node.js.map +1 -0
- package/dist/next-node/http/request.d.ts +54 -0
- package/dist/next-node/http/request.d.ts.map +1 -0
- package/dist/next-node/http/request.js +116 -0
- package/dist/next-node/http/request.js.map +1 -0
- package/dist/next-node/http/response.d.ts +63 -0
- package/dist/next-node/http/response.d.ts.map +1 -0
- package/dist/next-node/http/response.js +202 -0
- package/dist/next-node/http/response.js.map +1 -0
- package/dist/next-node/http/router.d.ts +114 -0
- package/dist/next-node/http/router.d.ts.map +1 -0
- package/dist/next-node/http/router.js +261 -0
- package/dist/next-node/http/router.js.map +1 -0
- package/dist/next-node/http/upgrades.d.ts +58 -0
- package/dist/next-node/http/upgrades.d.ts.map +1 -0
- package/dist/next-node/http/upgrades.js +184 -0
- package/dist/next-node/http/upgrades.js.map +1 -0
- package/dist/next-node/plugins/build.d.ts +57 -0
- package/dist/next-node/plugins/build.d.ts.map +1 -0
- package/dist/next-node/plugins/build.js +334 -0
- package/dist/next-node/plugins/build.js.map +1 -0
- package/dist/next-node/plugins/discover.d.ts +36 -0
- package/dist/next-node/plugins/discover.d.ts.map +1 -0
- package/dist/next-node/plugins/discover.js +91 -0
- package/dist/next-node/plugins/discover.js.map +1 -0
- package/dist/next-node/plugins/evaluate.d.ts +33 -0
- package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
- package/dist/next-node/plugins/evaluate.js +98 -0
- package/dist/next-node/plugins/evaluate.js.map +1 -0
- package/dist/next-node/plugins/index.d.ts +9 -0
- package/dist/next-node/plugins/index.d.ts.map +1 -0
- package/dist/next-node/plugins/index.js +11 -0
- package/dist/next-node/plugins/index.js.map +1 -0
- package/dist/next-node/plugins/install.d.ts +13 -0
- package/dist/next-node/plugins/install.d.ts.map +1 -0
- package/dist/next-node/plugins/install.js +37 -0
- package/dist/next-node/plugins/install.js.map +1 -0
- package/dist/next-node/plugins/plugins.d.ts +135 -0
- package/dist/next-node/plugins/plugins.d.ts.map +1 -0
- package/dist/next-node/plugins/plugins.js +206 -0
- package/dist/next-node/plugins/plugins.js.map +1 -0
- package/dist/next-node/plugins/runtime.d.ts +41 -0
- package/dist/next-node/plugins/runtime.d.ts.map +1 -0
- package/dist/next-node/plugins/runtime.js +136 -0
- package/dist/next-node/plugins/runtime.js.map +1 -0
- package/dist/next-node/plugins/stack.d.ts +16 -0
- package/dist/next-node/plugins/stack.d.ts.map +1 -0
- package/dist/next-node/plugins/stack.js +61 -0
- package/dist/next-node/plugins/stack.js.map +1 -0
- package/dist/next-node/plugins/watcher.d.ts +58 -0
- package/dist/next-node/plugins/watcher.d.ts.map +1 -0
- package/dist/next-node/plugins/watcher.js +281 -0
- package/dist/next-node/plugins/watcher.js.map +1 -0
- package/dist/next-node/workers/control.d.ts +83 -0
- package/dist/next-node/workers/control.d.ts.map +1 -0
- package/dist/next-node/workers/control.js +77 -0
- package/dist/next-node/workers/control.js.map +1 -0
- package/dist/next-node/workers/index.d.ts +5 -0
- package/dist/next-node/workers/index.d.ts.map +1 -0
- package/dist/next-node/workers/index.js +7 -0
- package/dist/next-node/workers/index.js.map +1 -0
- package/dist/next-node/workers/lock.d.ts +21 -0
- package/dist/next-node/workers/lock.d.ts.map +1 -0
- package/dist/next-node/workers/lock.js +137 -0
- package/dist/next-node/workers/lock.js.map +1 -0
- package/dist/next-node/workers/main.d.ts +46 -0
- package/dist/next-node/workers/main.d.ts.map +1 -0
- package/dist/next-node/workers/main.js +230 -0
- package/dist/next-node/workers/main.js.map +1 -0
- package/dist/next-node/workers/process.d.ts +42 -0
- package/dist/next-node/workers/process.d.ts.map +1 -0
- package/dist/next-node/workers/process.js +125 -0
- package/dist/next-node/workers/process.js.map +1 -0
- package/dist/next-node/workers/workers.d.ts +80 -0
- package/dist/next-node/workers/workers.d.ts.map +1 -0
- package/dist/next-node/workers/workers.js +572 -0
- package/dist/next-node/workers/workers.js.map +1 -0
- package/dist/object.d.ts +4 -4
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +3 -4
- package/dist/object.js.map +1 -1
- package/dist/output.d.ts +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +4 -2
- package/dist/output.js.map +1 -1
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +2 -2
- package/dist/remote.js.map +1 -1
- package/dist/schema.d.ts +8 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +180 -5
- package/dist/schema.js.map +1 -1
- package/dist/sqlite/cloudflare.d.ts +2 -0
- package/dist/sqlite/cloudflare.d.ts.map +1 -1
- package/dist/sqlite/cloudflare.js +10 -0
- package/dist/sqlite/cloudflare.js.map +1 -1
- package/dist/sqlite/database.d.ts +5 -2
- package/dist/sqlite/database.d.ts.map +1 -1
- package/dist/sqlite/database.js.map +1 -1
- package/dist/sqlite/node.d.ts +4 -1
- package/dist/sqlite/node.d.ts.map +1 -1
- package/dist/sqlite/node.js +22 -5
- package/dist/sqlite/node.js.map +1 -1
- package/dist/watch.d.ts +194 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +383 -0
- package/dist/watch.js.map +1 -0
- package/dist/wire.d.ts +174 -193
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +81 -80
- package/dist/wire.js.map +1 -1
- package/docs/guide.md +15 -15
- package/docs/next/benchmarks.md +959 -0
- package/docs/next/decisions.md +2957 -0
- package/docs/next/dependencies/book.md +1671 -0
- package/docs/next/dependencies/index.html +2641 -0
- package/docs/next/dependencies/model.md +330 -0
- package/docs/next/design.md +2554 -0
- package/docs/next/durable-observers/book.md +432 -0
- package/docs/next/durable-observers/index.html +517 -0
- package/docs/next/flow-control/book.md +333 -0
- package/docs/next/flow-control/fold/index.html +265 -0
- package/docs/next/flow-control/index.html +548 -0
- package/docs/next/flow-control/window/index.html +228 -0
- package/docs/next/guide-plugins-hosts/book.md +607 -0
- package/docs/next/guide-plugins-hosts/index.html +652 -0
- package/docs/next/http-workers/book.md +378 -0
- package/docs/next/http-workers/index.html +515 -0
- package/docs/next/layer-1.md +311 -0
- package/docs/next/layer-2.md +216 -0
- package/docs/next/plugin-model/book.md +186 -0
- package/docs/next/plugin-model/index.html +310 -0
- package/docs/next/plugin-primer/book.md +273 -0
- package/docs/next/plugin-primer/index.html +430 -0
- package/docs/next/slice-1.md +236 -0
- package/docs/next/slice-10.md +285 -0
- package/docs/next/slice-11.md +93 -0
- package/docs/next/slice-2.md +174 -0
- package/docs/next/slice-3a.md +296 -0
- package/docs/next/slice-3b.md +197 -0
- package/docs/next/slice-4.md +146 -0
- package/docs/next/slice-4a.md +418 -0
- package/docs/next/slice-4b.md +208 -0
- package/docs/next/slice-5.md +281 -0
- package/docs/next/slice-6a.md +676 -0
- package/docs/next/slice-6b.md +332 -0
- package/docs/next/slice-7a.md +130 -0
- package/docs/next/slice-7b/book.md +608 -0
- package/docs/next/slice-7b/index.html +842 -0
- package/docs/next/slice-7b.md +255 -0
- package/docs/next/slice-7c.md +165 -0
- package/docs/next/slice-8.md +194 -0
- package/docs/next/slices.md +230 -0
- package/docs/next/store/book.md +665 -0
- package/docs/next/store/index.html +861 -0
- package/docs/next/store/walkthrough.md +193 -0
- package/docs/spec.md +9 -9
- package/docs/tutorial.md +26 -25
- package/package.json +22 -6
- package/src/delta/README.md +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../../src/next/host/reference.ts"],"names":[],"mappings":"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","sourcesContent":["// References (§7): what `get` and `hold` return, a plain object built from the contract's members, and its binding to\n// the object: counted as a reference, it follows the object's state, parks calls while loading, keeps the\n// per-reference watches and is released once. A binding whose object a reload removed, or whose version it no longer\n// binds, waits unbound and binds again (slice 7b §6); one of an older version reads adapted members (Q10).\n\nimport { BACKGROUND_CONTEXT, type Context } from \"../../context/index.ts\";\nimport type { JsonValue } from \"../../json.ts\";\nimport type { NativeWatchable, Watch, Watchable } from \"../../watch.ts\";\nimport type { Contract, Implementation, ParamsOf } from \"../contracts/index.ts\";\nimport {\n\ttype CurrentVariants,\n\tcurrentVariants,\n\tLOCAL,\n\ttype MethodData,\n\ttype ShapeOf,\n\ttakesNoArgs,\n\ttype VariantImplementation,\n} from \"../contracts/internal.ts\";\nimport { ChordError, type FailureCause, type Principal } from \"../data/index.ts\";\nimport { Keyed, type KeyedSlot, type SealToken, Singleton } from \"../documents/internal.ts\";\nimport { RETRY_HOPS } from \"../link/internal.ts\";\nimport { type Batch, Constant, type DeriveSource, Source } from \"../state/internal.ts\";\nimport type { PinnedKey } from \"./attempt.ts\";\nimport { type Caller, withLinkedAbortSignal } from \"./ctx.ts\";\nimport type { KeyedBinding } from \"./members.ts\";\nimport type { ChordObject, Holder, Removal } from \"./object.ts\";\nimport { ParkedCalls } from \"./parked.ts\";\nimport { type Ended, type Failed, LOADING, ReferenceState, type RefState } from \"./ref-state.ts\";\nimport { ReferenceKeys } from \"./reference-keys.ts\";\nimport { ReferenceSource } from \"./reference-source.ts\";\nimport type { UnboundRequest } from \"./unbound.ts\";\n\n/**\n * A reference: a local contract's members, or for a remote contract the members of the variant its object chose,\n * narrowed by `variant`; and its state, `retry()` and `release()`. Every use after release throws.\n */\nexport type Reference<C extends Contract> = ShapeOf<C>[\"kind\"] extends \"local\"\n\t? Implementation<C> & Lifecycle\n\t: InVariants<C, never>;\n\n/** What `host.hold` returns: a reference whose `variant` is `undefined` until its first binding. */\nexport type Held<C extends Contract> = ShapeOf<C>[\"kind\"] extends \"local\"\n\t? Implementation<C> & Lifecycle\n\t: InVariants<C, undefined>;\n\n/** A remote reference narrowed to some of its variants. */\nexport type RefIn<C extends Contract, V extends string> = Extract<Reference<C>, { readonly variant: V }>;\n\n/** One member of a remote reference's union per variant; `Unbound` is what `variant` may also be. */\ntype InVariants<C extends Contract, Unbound> = {\n\t[V in keyof CurrentVariants<C>]: { readonly variant: V | Unbound } & VariantImplementation<CurrentVariants<C>[V]> &\n\t\tLifecycle;\n}[keyof CurrentVariants<C>];\n\n/** What every reference has besides its members. */\ntype Lifecycle = {\n\t/** The reference's state: loading, live, failed or released; watches get every change. */\n\treadonly state: NativeWatchable<RefState>;\n\t/**\n\t * Asks a failed object for an attempt now (the backoff skipped, a broken one renewed); an object parked on failed\n\t * dependencies passes it on to them, once; otherwise nothing.\n\t */\n\tretry(): void;\n\trelease(): void;\n};\n\n/**\n * What a binding is bound to: an object on this host (`ChordObject`), or an object held over a path, the parent link\n * or a route address (`RemoteObject`). It tells its holders of each change of `state`.\n */\nexport interface Target {\n\t/** The object in errors: its type, and its params key when it has params. */\n\treadonly label: string;\n\t/** Its state as its references show it. */\n\treadonly state: RefState;\n\t/** Whether its state members have values: live once, for a remote object bound once. */\n\treadonly hydrated: boolean;\n\t/** The variant bound last; `undefined` for a local object and before the first binding. */\n\treadonly variant: string | undefined;\n\t/** The error of its last failure (an attempt's, or the dependencies it is parked on) while none went live since. */\n\treadonly lastFailure: ChordError | undefined;\n\t/** Its instance id while it activates on this host (Q5); `undefined` otherwise and over a link. */\n\treadonly activationId: string | undefined;\n\t/**\n\t * Whether it holds up this host's start barrier: an object here without its first outcome (decision (a)); a remote\n\t * object never does.\n\t */\n\treadonly blocksFirstPass: boolean;\n\t/** Counts `binding` as a reference; the binding reads `state` itself. */\n\thold(binding: Binding): void;\n\t/** `binding` was released. */\n\tunhold(binding: Binding): void;\n\t/** Calls a method of the live object for `caller`, bound at `version` (an older one is mapped, Q10). */\n\tcall(method: string, args: unknown, context: Context, caller: Caller, version: number): Promise<unknown>;\n\t/**\n\t * What a reference of `version` follows for state member `member` now (decision \"References are the only\n\t * indirection\"): the live instance's member (a replica over a link), or nothing (`loading`, or `failed` with the\n\t * cause's error), with the member a reference takes its last value from.\n\t */\n\tfollowed(member: string, version: number): Followed;\n\t/** The instance its references follow now (they attach to it); `undefined` once it stopped changing. */\n\treadonly attachable: Attachable | undefined;\n\t/** Its live instance (a reference's keys pin there; a new one, they pin again); `undefined` when not live. */\n\treadonly instance: unknown;\n\t/** The keyed member `member` of the live object: its ultimate slot (slice 6a §12; only local objects have any). */\n\tkeyedMember(member: string): KeyedSlot;\n\t/**\n\t * How a consumer of `version` reads keyed member `member`'s documents: mapped back to its version when older\n\t * (slice 7b §7), `undefined` when as they are; `contract_mismatch` when the provider refuses it.\n\t */\n\tkeyedMapping(member: string, version: number): ((current: JsonValue) => JsonValue) | undefined;\n\t/**\n\t * Pins `key` of keyed member `member` on the live instance, loaded, as a consumer of `version` reads it (mapped when\n\t * older); only a live local object has keyed members.\n\t */\n\tpinKey(member: string, key: string, version: number, context: Context): Promise<PinnedKey>;\n\t/**\n\t * `ref.retry()`, as one step of `walk`: an attempt now if failed; an object parked on failed dependencies passes it\n\t * on; ignored otherwise.\n\t */\n\tretry(walk: RetryWalk): void;\n\t/**\n\t * The chain of activation waits from this object to `target`, both included (Q5); `undefined` when there is none.\n\t * `visited` keeps a search over shared dependencies linear in the waits.\n\t */\n\tpathTo(target: ChordObject, visited: Set<Target>): ChordObject[] | undefined;\n}\n\n/** An instance a reference attaches to (`Target.attachable`): it keeps last values in that instance's variant. */\nexport type Attachable = { readonly variant: string | undefined };\n\n/**\n * What a reference follows of its target for one state member (`Target.followed`): the member of the instance it\n * follows (`instance`, still changing), a member its live variant lacks (`invalid/member`), or nothing: its target loads\n * (no call) or failed (one `failed` call with the cause's error); `last` is the member of `instance`, which stopped\n * changing, that a reference attached to it takes a last value from (never one it never attached to).\n */\nexport type Followed =\n\t| { readonly kind: \"live\"; readonly source: DeriveSource; readonly instance: unknown }\n\t| { readonly kind: \"lacking\"; readonly error: ChordError }\n\t| { readonly kind: \"loading\"; readonly last: DeriveSource | undefined; readonly instance: unknown }\n\t| {\n\t\t\treadonly kind: \"failed\";\n\t\t\treadonly error: ChordError;\n\t\t\treadonly last: DeriveSource | undefined;\n\t\t\treadonly instance: unknown;\n\t };\n\n/**\n * One retry's walk through parked objects on this host (dependency model §3.7, audit A5): the objects it reached (one\n * reached again, through a diamond, ignores it) and the hop budget a `retry` message to another host carries (none is\n * sent at 0, so a waiting ring of hosts stops).\n */\nexport type RetryWalk = { readonly visited: Set<ChordObject>; readonly hops: number };\n\n/** A walk starting here: `ref.retry()`'s, with the first host's budget, or a `retry` message's, with one hop less. */\nexport function retryWalk(hops = RETRY_HOPS): RetryWalk {\n\treturn { visited: new Set(), hops };\n}\n\n/** A reference's params as L1 checked them, with their identity key. */\nexport type CheckedParams = { readonly params: ParamsOf<Contract>; readonly key: string };\n\n/**\n * Where a binding stands. `unbound`: waiting for its object's activation to bind it (a `self.get`); `waiting`: in the\n * host's unbound index, `place` checking it again when woken: before the publication (no `failure`: `loading`), or after\n * a check that found no fitting provider (`failed { waiting }`, `not_served` or `version`); `refused`: a broken refusal\n * (a `hostAddress` or `authorize` that threw or refused) until `ref.retry()` places it again; a released binding keeps\n * nothing but its name and its end (`ref.state`'s `ended`). `dependent` is the object whose attempt declared the\n * reference with `self.get`, `undefined` for `host.get`, `host.hold` and `ctx.get`.\n */\ntype BindingState =\n\t| {\n\t\t\treadonly kind: \"unbound\";\n\t\t\treadonly batch: Batch;\n\t\t\treadonly dependent: ChordObject | undefined;\n\t }\n\t| {\n\t\t\treadonly kind: \"bound\";\n\t\t\treadonly batch: Batch;\n\t\t\treadonly dependent: ChordObject | undefined;\n\t\t\treadonly target: Target;\n\t }\n\t| {\n\t\t\treadonly kind: \"waiting\";\n\t\t\treadonly batch: Batch;\n\t\t\treadonly dependent: ChordObject | undefined;\n\t\t\treadonly failure: Failed | undefined;\n\t\t\treadonly place: () => void;\n\t\t\t/** Takes it out of the index (it ended). */\n\t\t\treadonly leave: () => void;\n\t }\n\t| {\n\t\t\treadonly kind: \"refused\";\n\t\t\treadonly batch: Batch;\n\t\t\treadonly dependent: ChordObject | undefined;\n\t\t\treadonly failure: Failed;\n\t\t\treadonly bind: () => void;\n\t }\n\t| { readonly kind: \"released\"; readonly state: Ended };\n\n/** What a wait for a state decides at each change. */\ntype Decision =\n\t| { readonly kind: \"wait\" }\n\t| { readonly kind: \"done\" }\n\t| { readonly kind: \"failed\"; readonly error: unknown };\n\nconst WAIT: Decision = { kind: \"wait\" };\n\nconst DONE: Decision = { kind: \"done\" };\n\n/** A wait for a state: checked at every change, rejected with the reference's end. */\ntype Waiter = { readonly check: () => void; readonly end: (error: ChordError) => void };\n\n/**\n * A reference's binding to its object: counted by the object as one of its references while bound, and told of each\n * change of its state. Calls run while live, park while loading (sent in order once live) and reject while failed.\n * Released, or ended with its object, it ends the watches taken through it and rejects the calls made through it.\n */\nexport class Binding implements Holder, UnboundRequest {\n\treadonly reference: Reference<Contract>;\n\t/** Who calls through this reference: the principal it was got as, and this host's incarnation. */\n\treadonly caller: Caller;\n\t/** The contract's name, for errors. */\n\treadonly #name: string;\n\t/** The consumer's contract (its version is the binding's) until the reference is released (it keeps none then). */\n\t#contract: Contract | undefined;\n\t/** How long a call made while loading waits: the reference's `readyTimeout`. */\n\treadonly #parkTimeout: number;\n\t#state: BindingState;\n\treadonly #watches = new Set<Watch<JsonValue>>();\n\t/**\n\t * Aborted when the reference ends: its calls' callers are rejected and their handlers' contexts aborted. Made by the\n\t * first call and dropped at the end, so a released reference keeps no error (whose stack keeps its frames).\n\t */\n\t#calls: AbortController | undefined;\n\t/** Calls made while loading; made by the first. */\n\t#parked: ParkedCalls | undefined;\n\t/** Waits for a state (getters, member watches before the first binding); each checks the state at every change. */\n\treadonly #waiters = new Set<Waiter>();\n\t/** `ref.state`, made on first access. */\n\t#refState: ReferenceState | undefined;\n\t/** The keys its object's factory pinned with `ref.member.at(key)`: pinned once bound, released with it. */\n\treadonly #ats: KeyedMemberAt[] = [];\n\t/** Its state members as consumers follow them (`ReferenceSource`), by name; each made by its first use. */\n\t#sources: Map<string, ReferenceSource> | undefined;\n\t/** The keys of its object's keyed members it holds (key watches, `at(key)` pins); made by the first. */\n\t#heldKeys: ReferenceKeys | undefined;\n\t/** The instance it attached to last: it takes last values only from that one (never one it never followed). */\n\t#attached: Attachable | undefined;\n\n\tconstructor(\n\t\tcontract: Contract,\n\t\tbatch: Batch,\n\t\tdependent: ChordObject | undefined,\n\t\tcaller: Caller,\n\t\tparkTimeout: number,\n\t) {\n\t\tthis.#name = contract.name;\n\t\tthis.#contract = contract;\n\t\tthis.caller = caller;\n\t\tthis.#parkTimeout = parkTimeout;\n\t\tthis.#state = { kind: \"unbound\", batch, dependent };\n\t\tconst reference: Record<string, unknown> = { release: () => this.release(), retry: () => this.retry() };\n\t\tObject.defineProperty(reference, \"state\", { get: () => this.#watchableState(), enumerable: true });\n\t\t// Every member of every variant (one kind and signature per name, D11); the bound variant decides which work.\n\t\tconst methods = new Map<string, MethodData>();\n\t\tfor (const variant of currentVariants(contract).values()) {\n\t\t\tfor (const member of variant.state.keys()) reference[member] = new ReferenceMember(this, member);\n\t\t\tfor (const member of variant.keyed.keys()) reference[member] = new ReferenceKeyed(this, member);\n\t\t\tfor (const [member, method] of variant.methods) methods.set(member, method);\n\t\t}\n\t\tfor (const [member, method] of methods) {\n\t\t\t// A method without arguments omits them; `null` is their internal and wire form.\n\t\t\treference[member] = takesNoArgs(method)\n\t\t\t\t? async (context: Context) => this.#call(member, null, context)\n\t\t\t\t: async (args: unknown, context: Context) => this.#call(member, args, context);\n\t\t}\n\t\tif (contract.kind === \"remote\") {\n\t\t\tObject.defineProperty(reference, \"variant\", { get: () => this.#variant(), enumerable: true });\n\t\t}\n\t\t// Built from the contract's own member lists.\n\t\tthis.reference = reference as Reference<Contract>;\n\t}\n\n\t/** The consumer's contract: its version is the binding's. Only an unreleased binding is asked. */\n\tget contract(): Contract {\n\t\treturn this.#contract!;\n\t}\n\n\t/** The object whose attempt declared this reference, until it is released. */\n\tget dependent(): ChordObject | undefined {\n\t\tconst state = this.#state;\n\t\treturn state.kind === \"released\" ? undefined : state.dependent;\n\t}\n\n\t/** Whom it acts for (the unbound index's revocation). */\n\tget principal(): Principal | undefined {\n\t\treturn this.caller.principal;\n\t}\n\n\t/** The reference's state. */\n\tget refState(): RefState {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"bound\") return state.target.state;\n\t\tif (state.kind === \"waiting\") return state.failure ?? LOADING;\n\t\tif (state.kind === \"refused\") return state.failure;\n\t\treturn state.kind === \"unbound\" ? LOADING : state.state;\n\t}\n\n\t/** The object it is bound to; `undefined` while it is not bound. */\n\tget target(): Target | undefined {\n\t\treturn this.#state.kind === \"bound\" ? this.#state.target : undefined;\n\t}\n\n\t/** The object in errors: its label once bound, else the contract's name. */\n\tget label(): string {\n\t\treturn this.#state.kind === \"bound\" ? this.#state.target.label : this.#name;\n\t}\n\n\t/** The error of the object's last failure while none went live since, or of the check that left it unbound. */\n\tget lastFailure(): ChordError | undefined {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"refused\") return state.failure.cause.error;\n\t\tif (state.kind === \"waiting\") return state.failure?.cause.error;\n\t\treturn state.kind === \"bound\" ? state.target.lastFailure : undefined;\n\t}\n\n\t/**\n\t * Binds to `target`, which counts this binding as a reference; its members and keys follow what `target` shows now\n\t * (one frame from their last values), and the reference takes its state.\n\t */\n\tbind(target: Target): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"unbound\") return;\n\t\tthis.#state = { kind: \"bound\", batch: state.batch, dependent: state.dependent, target };\n\t\ttarget.hold(this);\n\t\t// `hold` may release it at once (a presence derive): `retarget` sees that. A batch only when members move.\n\t\tif (this.following) state.batch.within(() => this.retarget(), BACKGROUND_CONTEXT);\n\t\telse this.retarget();\n\t\tthis.moved();\n\t}\n\n\t/** Whether its members or keys were used: `retarget` moves them (in a batch). */\n\tget following(): boolean {\n\t\treturn this.#sources !== undefined || this.#heldKeys !== undefined;\n\t}\n\n\t/**\n\t * Inside a batch when `following`: its members and keys follow what its object shows now (`Target.followed`): the live instance's\n\t * members (moved there, one frame each), or their last values (one `failed` call for a failure). The first time it\n\t * points at nothing, every member of its version gets its last value, read or not.\n\t */\n\tretarget(): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"bound\") return;\n\t\tconst { target } = state;\n\t\tconst { version } = this.contract;\n\t\tconst attachable = target.attachable;\n\t\tif (attachable !== undefined) this.#attached = attachable;\n\t\t// Detaching from an instance it attached to: every member keeps its last value (none before it ever attached).\n\t\telse if (this.#attached !== undefined) this.#keepAll(this.#attached);\n\t\tconst attached = this.#attached;\n\t\tfor (const [member, source] of this.#sources ?? []) place(source, target.followed(member, version), attached);\n\t\t// Its last values taken: it keeps no node of that instance (GC).\n\t\tif (attachable === undefined) this.#attached = undefined;\n\t\tthis.#heldKeys?.follow(BACKGROUND_CONTEXT);\n\t}\n\n\t/**\n\t * Its object left it (slice 7b §6): its type was removed, or its provider no longer binds its version. The request\n\t * waits unbound with `removal.cause` in the host's index, its members and keys keeping their last values (taken from\n\t * the instance it leaves; one `failed` call), and binds again, by name, when a publication serves it: its members\n\t * move to the next object's instance and its keys pin there again (one frame each); parked calls flush or reject;\n\t * presence lists it again.\n\t */\n\tremoved(removal: Removal): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"bound\") return;\n\t\tconst { error } = removal.cause;\n\t\tstate.batch.within(() => {\n\t\t\t// Its last values from the instance it attached to (one refused at its binding attached to none).\n\t\t\tif (this.#attached !== undefined) this.#keepAll(this.#attached);\n\t\t\tfor (const source of this.#sources?.values() ?? []) source.fail(error, BACKGROUND_CONTEXT);\n\t\t\tthis.#heldKeys?.fail(error, BACKGROUND_CONTEXT);\n\t\t}, BACKGROUND_CONTEXT);\n\t\t// Its last values taken: it keeps no node of that instance (GC).\n\t\tthis.#attached = undefined;\n\t\tthis.#state = { kind: \"unbound\", batch: state.batch, dependent: state.dependent };\n\t\tremoval.host.rewait(this, this.contract, removal.params, removal.cause, removal.context);\n\t}\n\n\t/**\n\t * Every state member of its version, in the variant of the instance it attached to (its object may be live no more),\n\t * gets a source, read or not, so each keeps a last value while it points at nothing (no-op for one already made).\n\t */\n\t#keepAll(attached: Attachable): void {\n\t\tconst variant = currentVariants(this.contract).get(attached.variant ?? LOCAL);\n\t\tfor (const member of variant?.state.keys() ?? []) this.#memberSource(member);\n\t}\n\n\t/**\n\t * Leaves the reference unbound in the host's unbound index (`leave` takes it out): `loading` before the publication\n\t * (no `cause`), else `failed` with `cause` (`waiting`); `place` checks it again when the index wakes it.\n\t */\n\twait(cause: FailureCause | undefined, place: () => void, leave: () => void): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"unbound\") return;\n\t\t// Kept while it waits: its stack made text now, so it keeps none of the frames' objects (an ended instance's).\n\t\tif (cause !== undefined) void cause.error.stack;\n\t\tconst failure: Failed | undefined =\n\t\t\tcause === undefined ? undefined : { kind: \"failed\", cause, retryAt: undefined };\n\t\tconst { batch, dependent } = state;\n\t\tthis.#state = { kind: \"waiting\", batch, dependent, failure, place, leave };\n\t\t// Unchanged while loading: nothing to tell.\n\t\tif (failure !== undefined) this.moved();\n\t}\n\n\t/** Woken by the unbound index (out of it already): checked again where it goes. */\n\twake(): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"waiting\") return;\n\t\tconst { batch, dependent } = state;\n\t\tthis.#state = { kind: \"unbound\", batch, dependent };\n\t\tstate.place();\n\t}\n\n\t/**\n\t * A reference that cannot be bound (where it goes refused it): failed broken with `cause` until `ref.retry()` runs\n\t * `bind` again (a route's `authorize` may admit it later).\n\t */\n\trefuse(cause: FailureCause, bind: () => void): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind !== \"unbound\") return;\n\t\tconst failure: Failed = { kind: \"failed\", cause, retryAt: undefined };\n\t\tthis.#state = { kind: \"refused\", batch: state.batch, dependent: state.dependent, failure, bind };\n\t\tthis.moved();\n\t}\n\n\t/**\n\t * The state may have changed: `ref.state`'s watches are told; live sends the parked calls in order, failed\n\t * rejects them with the cause; waits for a state decide; the object whose attempt declared it re-evaluates.\n\t */\n\tmoved(): void {\n\t\tthis.#refState?.moved();\n\t\tconst state = this.refState;\n\t\tif (state.kind === \"live\") {\n\t\t\tthis.#parked?.flush(\n\t\t\t\t(method, args, context) => this.#send(method, args, context),\n\t\t\t\t() => this.refState.kind === \"live\",\n\t\t\t);\n\t\t} else if (state.kind === \"failed\") {\n\t\t\tthis.#parked?.reject(state.cause.error);\n\t\t}\n\t\tfor (const waiter of [...this.#waiters]) waiter.check();\n\t\tthis.dependent?.dependencyMoved();\n\t}\n\n\t/** Resolves when the reference is live; rejects with a broken failure's error, or its end. Getters wait for it. */\n\tlive(context: Context): Promise<void> {\n\t\treturn this.#until((state) => {\n\t\t\tif (state.kind === \"live\") return DONE;\n\t\t\tconst broken = state.kind === \"failed\" && state.cause.kind === \"broken\";\n\t\t\treturn broken ? { kind: \"failed\", error: state.cause.error } : WAIT;\n\t\t}, context);\n\t}\n\n\t/**\n\t * The state member behind `member`, as consumers follow it (`ReferenceSource`): the instance's member while its\n\t * object is live, its last value while it points at nothing; reads throw `released`, the failure's error, or\n\t * `not_ready` when it never had a value.\n\t */\n\tmember(member: string): DeriveSource {\n\t\treturn this.#memberSource(member);\n\t}\n\n\t/** The source of state member `member`, made by its first use, following what its target shows now. */\n\t#memberSource(member: string): ReferenceSource {\n\t\tthis.#sources ??= new Map();\n\t\tlet source = this.#sources.get(member);\n\t\tif (source !== undefined) return source;\n\t\tconst state = this.#state;\n\t\t// A released reference throws its end (`#target`): it makes no source.\n\t\tif (state.kind === \"released\") throw state.state.error;\n\t\tsource = new ReferenceSource(state.batch, this);\n\t\tthis.#sources.set(member, source);\n\t\t// New, nothing follows it yet: placing it needs no batch.\n\t\tif (state.kind === \"bound\") place(source, state.target.followed(member, this.contract.version), this.#attached);\n\t\treturn source;\n\t}\n\n\t/** What a read of a member that never had a value throws: `released`, the failure's error, or `not_ready`. */\n\tnone(): ChordError {\n\t\ttry {\n\t\t\tthis.#target();\n\t\t} catch (error) {\n\t\t\treturn error as ChordError;\n\t\t}\n\t\treturn new ChordError({ code: \"not_ready\", message: `${this.label}: not live yet` });\n\t}\n\n\t/** The keyed member `member`'s slot (slice 6a §12), as `member` resolves a state member. */\n\tkeyedSlot(member: string): KeyedSlot {\n\t\treturn this.#target().keyedMember(member);\n\t}\n\n\t/** How this reference reads keyed member `member`'s documents (`Target.keyedMapping`), as `keyedSlot` resolves. */\n\tkeyedMapping(member: string): ((current: JsonValue) => JsonValue) | undefined {\n\t\treturn this.#target().keyedMapping(member, this.contract.version);\n\t}\n\n\t/**\n\t * Holds `key` of keyed member `member` (a key watch, a factory's `at(key)`, an object re-exposing this member): its\n\t * source, pinned on the live instance and following its object's instances (`ReferenceKeys`); `release` once.\n\t */\n\tpinKey(member: string, key: string, context: Context): Promise<PinnedKey> {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"released\") return Promise.reject(state.state.error);\n\t\tthis.#heldKeys ??= new ReferenceKeys({\n\t\t\tbatch: state.batch,\n\t\t\tversion: this.contract.version,\n\t\t\ttarget: () => this.target,\n\t\t\tnone: () => this.none(),\n\t\t});\n\t\treturn this.#heldKeys.hold(member, key, context);\n\t}\n\n\t/** The bound object unless it failed: throws `released`, the failure's error, `not_ready` before the binding. */\n\t#target(): Target {\n\t\tconst state = this.#state;\n\t\tswitch (state.kind) {\n\t\t\tcase \"bound\": {\n\t\t\t\tconst current = state.target.state;\n\t\t\t\tif (current.kind === \"failed\") throw current.cause.error;\n\t\t\t\treturn state.target;\n\t\t\t}\n\t\t\tcase \"unbound\":\n\t\t\t\tthrow new ChordError({ code: \"not_ready\", message: `${this.#name}: not live yet` });\n\t\t\tcase \"waiting\":\n\t\t\t\tif (state.failure === undefined) {\n\t\t\t\t\tthrow new ChordError({ code: \"not_ready\", message: `${this.#name}: not live yet` });\n\t\t\t\t}\n\t\t\t\tthrow state.failure.cause.error;\n\t\t\tcase \"refused\":\n\t\t\t\tthrow state.failure.cause.error;\n\t\t\tcase \"released\":\n\t\t\t\tthrow state.state.error;\n\t\t}\n\t}\n\n\t/**\n\t * A watch of `member` that ends when this reference is released, through its member (`ReferenceSource`): opened at\n\t * once once it has a value (its last one while its object is not live, frames again when it is); before its first\n\t * value it waits for its object's (`firstValues`: through failures, until the reference ends or `context` aborts).\n\t */\n\tasync watch(member: string, context: Context): Promise<Watch<JsonValue>> {\n\t\t// Checked here too: a constant's own watch has no batch to check. A released reference throws below.\n\t\tif (this.#state.kind !== \"released\") this.#state.batch.assertOutside(\"watch\");\n\t\tconst source = this.#memberSource(member);\n\t\t// Never had a value: it waits for its object's, as before the first binding.\n\t\tif (source.unbound) await this.firstValues(context);\n\t\treturn this.follow(source.openWatch(context));\n\t}\n\n\t/**\n\t * Resolves once its object's members have values (its first binding, for a watch on a reference that never had any);\n\t * rejects only when the reference ends (released, revoked, its host closed) or `context` aborts: a failure is waited\n\t * through (Opus G3).\n\t */\n\tasync firstValues(context: Context): Promise<void> {\n\t\tif (this.#state.kind === \"bound\" && this.#state.target.hydrated) return;\n\t\tawait this.#until((state) => (state.kind === \"live\" ? DONE : WAIT), context);\n\t}\n\n\t/** Resolves once the object's members have values; rejects when the reference fails or is released first. */\n\tasync hydrated(context: Context): Promise<void> {\n\t\tif (this.#state.kind === \"bound\" && this.#state.target.hydrated) return;\n\t\tawait this.#until((state) => {\n\t\t\tif (state.kind === \"live\") return DONE;\n\t\t\tif (state.kind === \"failed\") return { kind: \"failed\", error: state.cause.error };\n\t\t\treturn WAIT;\n\t\t}, context);\n\t}\n\n\t/**\n\t * Ends `watch` when this reference is released; returns it. A watch opened while the reference was released (an\n\t * async keyed watch racing `release`) is ended at once, its pin with it, and the caller gets `released`.\n\t */\n\tfollow<W extends Watch<JsonValue>>(watch: W): W {\n\t\tif (this.#state.kind === \"released\") {\n\t\t\twatch.end({ kind: \"ended\" });\n\t\t\tthrow this.#state.state.error;\n\t\t}\n\t\tthis.#watches.add(watch);\n\t\tvoid watch.closed.then(() => this.#watches.delete(watch));\n\t\treturn watch;\n\t}\n\n\t/**\n\t * `ref.member.at(key)`: only while its object's factory runs (the reference not yet bound); pinned once bound\n\t * (`pinKeys`), released with the reference.\n\t */\n\tat(member: string, key: string): KeyedMemberAt {\n\t\tif (this.#state.kind !== \"unbound\" || this.#state.dependent === undefined) {\n\t\t\tthrow new Error(`${this.#name}: ${member}.at(key) is valid only in the factory`);\n\t\t}\n\t\tconst at = new KeyedMemberAt(this, member, key);\n\t\tthis.#ats.push(at);\n\t\treturn at;\n\t}\n\n\t/** Whether its object's factory pinned keys on it (`at(key)`). */\n\tget pinsKeys(): boolean {\n\t\treturn this.#ats.length > 0;\n\t}\n\n\t/**\n\t * Pins the keys of `at(key)` on the live object's keyed members and loads those not in memory, before the\n\t * dependent goes live (slice 6a §12); `undefined` when there are none. A failed load rejects.\n\t */\n\tpinKeys(context: Context): Promise<void> | undefined {\n\t\tif (this.#ats.length === 0) return undefined;\n\t\treturn (async () => {\n\t\t\tfor (const at of this.#ats) await at.pin(this, context);\n\t\t})();\n\t}\n\n\t/**\n\t * `ref.retry()`, as a step of `walk` (a new one for `ref.retry()`, passed on through parked objects): the object is\n\t * asked for an attempt now (ignored unless failed; a parked one passes it on); a refused reference is placed again;\n\t * one waiting in the index is left as it is (an event wakes it).\n\t */\n\tretry(walk: RetryWalk = retryWalk()): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"bound\") {\n\t\t\tstate.target.retry(walk);\n\t\t\treturn;\n\t\t}\n\t\tif (state.kind !== \"refused\") return;\n\t\tthis.#state = { kind: \"unbound\", batch: state.batch, dependent: state.dependent };\n\t\tthis.moved();\n\t\tstate.bind();\n\t}\n\n\t/** Releases the reference (idempotent); the object may end when it was its last. */\n\trelease(): void {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"released\") return;\n\t\tstate.batch.assertOutside(\"release\");\n\t\t// First: an object over a link rejects the calls itself and sends no cancel for them.\n\t\tif (state.kind === \"bound\") state.target.unhold(this);\n\t\tthis.end(this.#released());\n\t}\n\n\t/**\n\t * Ends the reference without releasing it from its object (it ended): watches end, calls (running and parked)\n\t * reject with `error`, `ref.state` is `ended` with it; the object whose attempt declared it checks again.\n\t */\n\tend(error: ChordError): void {\n\t\t// Kept by `ref.state`: its stack is made text now, so the error holds none of the frames' objects.\n\t\tvoid error.stack;\n\t\tconst ended: Ended = { kind: \"ended\", error };\n\t\tconst previous = this.#state;\n\t\tthis.#state = { kind: \"released\", state: ended };\n\t\tthis.#contract = undefined;\n\t\tif (previous.kind === \"waiting\") previous.leave();\n\t\tfor (const at of this.#ats) at.release();\n\t\t// Its members' and keys' watches end, derives over them are marked; their instance subscriptions go.\n\t\tconst sources = this.#sources;\n\t\tconst keys = this.#heldKeys;\n\t\tthis.#sources = undefined;\n\t\tthis.#heldKeys = undefined;\n\t\tthis.#attached = undefined;\n\t\tif (previous.kind !== \"released\" && (sources !== undefined || keys !== undefined)) {\n\t\t\tconst end = (): void => {\n\t\t\t\tfor (const source of sources?.values() ?? []) source.end(error);\n\t\t\t\tkeys?.end(error);\n\t\t\t};\n\t\t\t// A batch only when something still follows them (an ending object's derives detached already).\n\t\t\tconst used = keys !== undefined || [...(sources?.values() ?? [])].some((source) => source.inUse);\n\t\t\tif (used) previous.batch.within(end, BACKGROUND_CONTEXT);\n\t\t\telse end();\n\t\t}\n\t\tthis.#calls?.abort(error);\n\t\tthis.#calls = undefined;\n\t\tthis.#parked?.reject(error);\n\t\tthis.#parked = undefined;\n\t\tfor (const watch of this.#watches) watch.end({ kind: \"ended\" });\n\t\tthis.#refState?.released(ended);\n\t\t// Each removes itself; promise reactions run later.\n\t\tfor (const waiter of this.#waiters) waiter.end(error);\n\t\t// An ended dependency breaks a parked dependent (it cannot come back).\n\t\tif (previous.kind !== \"released\") previous.dependent?.dependencyMoved();\n\t}\n\n\t#call(method: string, args: unknown, context: Context): Promise<unknown> {\n\t\tconst state = this.refState;\n\t\tswitch (state.kind) {\n\t\t\tcase \"live\":\n\t\t\t\t// Calls queued before it went live are still being sent: a new one never overtakes them.\n\t\t\t\tif (this.#parked?.waiting) return this.#parked.park(method, args, context);\n\t\t\t\treturn this.#send(method, args, context);\n\t\t\tcase \"loading\":\n\t\t\t\tthis.#parked ??= new ParkedCalls(this.#parkTimeout, this.label);\n\t\t\t\treturn this.#parked.park(method, args, context);\n\t\t\tcase \"failed\":\n\t\t\t\tthrow state.cause.error;\n\t\t\tcase \"ended\":\n\t\t\t\tthrow state.error;\n\t\t}\n\t}\n\n\t/** Calls the live object; the call is aborted when the reference ends. */\n\t#send(method: string, args: unknown, context: Context): Promise<unknown> {\n\t\t// Only a bound reference is live.\n\t\tconst { target } = this.#state as Extract<BindingState, { readonly kind: \"bound\" }>;\n\t\tthis.#calls ??= new AbortController();\n\t\tconst linked = withLinkedAbortSignal(this.#calls.signal, context);\n\t\treturn target.call(method, args, linked.context, this.caller, this.contract.version).finally(linked.release);\n\t}\n\n\t/**\n\t * Settles once `decide` does for the reference's state, checked now and at every change; rejects when the reference\n\t * ends (with its error, `released` when it is released already) or `context` aborts.\n\t */\n\t#until(decide: (state: RefState) => Decision, context: Context): Promise<void> {\n\t\tif (this.#state.kind === \"released\") return Promise.reject(this.#state.state.error);\n\t\tconst { promise, resolve, reject } = Promise.withResolvers<void>();\n\t\tconst signal = context.abortSignal;\n\t\tconst settle = (done: () => void): void => {\n\t\t\tthis.#waiters.delete(waiter);\n\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\tdone();\n\t\t};\n\t\tconst waiter: Waiter = {\n\t\t\tcheck: () => {\n\t\t\t\tconst decision = decide(this.refState);\n\t\t\t\tif (decision.kind === \"done\") settle(resolve);\n\t\t\t\telse if (decision.kind === \"failed\") settle(() => reject(decision.error));\n\t\t\t},\n\t\t\tend: (error) => settle(() => reject(error)),\n\t\t};\n\t\tconst abort = (): void => settle(() => reject(signal?.reason));\n\t\tthis.#waiters.add(waiter);\n\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\tif (signal?.aborted) abort();\n\t\telse waiter.check();\n\t\treturn promise;\n\t}\n\n\t#watchableState(): ReferenceState {\n\t\tif (this.#refState !== undefined) return this.#refState;\n\t\tconst state = this.#state;\n\t\t// A released reference's state never changes: it is made ended, keeping no batch.\n\t\tif (state.kind === \"released\") {\n\t\t\tconst made = new ReferenceState(() => this.refState, undefined);\n\t\t\tmade.released(state.state);\n\t\t\tthis.#refState = made;\n\t\t\treturn made;\n\t\t}\n\t\tthis.#refState = new ReferenceState(() => this.refState, state.batch);\n\t\treturn this.#refState;\n\t}\n\n\t#variant(): string | undefined {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"released\") throw state.state.error;\n\t\treturn state.kind === \"bound\" ? state.target.variant : undefined;\n\t}\n\n\t/** The error of this reference's release by its holder (`released`, no reason). */\n\t#released(): ChordError {\n\t\treturn new ChordError({ code: \"released\", message: `${this.#name}: released` });\n\t}\n}\n\n/** A state member of a reference: the provider's member, followed through this reference. */\nclass ReferenceMember {\n\treadonly #binding: Binding;\n\treadonly #member: string;\n\n\tconstructor(binding: Binding, member: string) {\n\t\tthis.#binding = binding;\n\t\tthis.#member = member;\n\t}\n\n\tget value(): JsonValue {\n\t\treturn this.source.value;\n\t}\n\n\twatch(context: Context): Promise<Watch<JsonValue>> {\n\t\treturn this.#binding.watch(this.#member, context);\n\t}\n\n\t/** The provider's member: a source or a constant. */\n\tget source(): DeriveSource {\n\t\treturn this.#binding.member(this.#member);\n\t}\n}\n\n/** A keyed member of a reference (slice 6a §12): reads by key behave as calls (they wait while loading). */\nclass ReferenceKeyed {\n\treadonly #binding: Binding;\n\treadonly #member: string;\n\n\tconstructor(binding: Binding, member: string) {\n\t\tthis.#binding = binding;\n\t\tthis.#member = member;\n\t}\n\n\t/** The provider's slot: the ultimate provider's, through re-exposures (rule 22). */\n\tget slot(): KeyedSlot {\n\t\treturn this.#binding.keyedSlot(this.#member);\n\t}\n\n\t/** This member as another object re-exposing it has it: its keys held through this reference. */\n\tget keyed(): KeyedBinding {\n\t\treturn { kind: \"reexposed\", binding: this.#binding, member: this.#member };\n\t}\n\n\tasync get(key: string, context: Context): Promise<JsonValue | undefined> {\n\t\tawait this.#binding.hydrated(context);\n\t\tconst slot = this.slot;\n\t\tconst map = this.#binding.keyedMapping(this.#member);\n\t\tconst value = await slot.get(key, ownAccess(slot), context);\n\t\treturn map === undefined || value === undefined ? value : map(value);\n\t}\n\n\t/**\n\t * A watch of the document at `key` across the object's attempts (it holds the key through the object), `undefined`\n\t * when absent; it ends with this reference.\n\t */\n\tasync watch(key: string, context: Context): Promise<Watch<JsonValue> | undefined> {\n\t\tawait this.#binding.firstValues(context);\n\t\tconst slot = this.slot;\n\t\tif ((await slot.get(key, ownAccess(slot), context)) === undefined) return undefined;\n\t\t// Mapped to its version when older (slice 7b §7), across its object's instances (`ReferenceKeys`).\n\t\tconst held = await this.#binding.pinKey(this.#member, key, context);\n\t\t// Retired between the read and now: absent.\n\t\tif (slot.current(slot.key(key)) === undefined) {\n\t\t\theld.release();\n\t\t\treturn undefined;\n\t\t}\n\t\tlet watch: Watch<JsonValue>;\n\t\ttry {\n\t\t\twatch = held.source.openWatch(context);\n\t\t} catch (error) {\n\t\t\theld.release();\n\t\t\tthrow error;\n\t\t}\n\t\tvoid watch.closed.then(held.release);\n\t\treturn this.#binding.follow(watch);\n\t}\n\n\tat(key: string): Watchable<JsonValue> {\n\t\t// The pinned key's values are the member's documents.\n\t\treturn this.#binding.at(this.#member, key) as unknown as Watchable<JsonValue>;\n\t}\n}\n\n/** A consumer reads its provider's keyed documents as the provider's own code may: current version, own token. */\nfunction ownAccess(slot: KeyedSlot): { readonly token: SealToken; readonly version: number } {\n\treturn { token: slot.owner.own, version: slot.definition.current.version };\n}\n\n/** Where a `ref.member.at(key)` stands: not held yet, held on the object's keyed member, or released for good. */\ntype AtState =\n\t| { readonly kind: \"unpinned\" }\n\t| { readonly kind: \"pinned\"; readonly source: DeriveSource; readonly release: () => void }\n\t| { readonly kind: \"released\" };\n\n/**\n * `ref.member.at(key)`: the key's source across the object's attempts once the reference is bound and the key held\n * (`pin`), until the reference ends (`release`, exactly once): then it drops the source (a retained reference keeps no\n * provider).\n */\nclass KeyedMemberAt {\n\treadonly #binding: Binding;\n\treadonly member: string;\n\treadonly key: string;\n\t#state: AtState = { kind: \"unpinned\" };\n\n\tconstructor(binding: Binding, member: string, key: string) {\n\t\tthis.#binding = binding;\n\t\tthis.member = member;\n\t\tthis.key = key;\n\t}\n\n\t/** The key's source; `not_ready` before it is held, `released` after. */\n\tget source(): DeriveSource {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"pinned\") return state.source;\n\t\tconst what = `${this.member}.at(${this.key})`;\n\t\tif (state.kind === \"released\") throw new ChordError({ code: \"released\", message: `${what}: released` });\n\t\tthrow new ChordError({ code: \"not_ready\", message: `${what}: not loaded yet` });\n\t}\n\n\tget value(): JsonValue {\n\t\treturn this.source.value;\n\t}\n\n\tasync watch(context: Context): Promise<Watch<JsonValue>> {\n\t\treturn this.#binding.follow(this.source.openWatch(context));\n\t}\n\n\t/**\n\t * Holds the key through `binding` (once), loaded, mapped to an older binding's version (slice 7b §7); nothing once\n\t * released (a hold that lands then is released).\n\t */\n\tasync pin(binding: Binding, context: Context): Promise<void> {\n\t\tif (this.#state.kind !== \"unpinned\") return;\n\t\tconst held = await binding.pinKey(this.member, this.key, context);\n\t\tif (this.#state.kind !== \"unpinned\") {\n\t\t\theld.release();\n\t\t\treturn;\n\t\t}\n\t\tthis.#state = { kind: \"pinned\", source: held.source, release: held.release };\n\t}\n\n\t/** Releases the pin and drops the source (once). */\n\trelease(): void {\n\t\tconst state = this.#state;\n\t\tthis.#state = { kind: \"released\" };\n\t\tif (state.kind === \"pinned\") state.release();\n\t}\n}\n\n/**\n * What a keyed member's value is (slice 6a §12): a keyed document handle's slot, or a reference's keyed member\n * (re-exposed); `undefined` for anything else.\n */\nexport function resolveKeyed(value: unknown): KeyedBinding | undefined {\n\tif (value instanceof Keyed) return { kind: \"own\", slot: value.slot };\n\tif (value instanceof ReferenceKeyed) return value.keyed;\n\treturn undefined;\n}\n\n/**\n * The watchable Chord follows behind a state member or a derive source (Q14): a source or a constant itself, a\n * singleton handle's slot, a reference member's provider member, a keyed member's pinned key (a key source itself for\n * `handle.at(key)`); `undefined` for anything else, a native watchable included.\n */\nexport function resolveWatchable(value: unknown): DeriveSource | undefined {\n\tif (value instanceof Singleton) return value.slot;\n\tif (value instanceof ReferenceMember) return value.source;\n\tif (value instanceof KeyedMemberAt) return value.source;\n\tif (value instanceof Source || value instanceof Constant) return value;\n\treturn undefined;\n}\n\n/**\n * Points `source` at what its reference follows now (`Followed`), inside a batch; a new one takes its last value from\n * the instance that stopped, only when its reference was attached to that one (`attached`).\n */\nfunction place(source: ReferenceSource, followed: Followed, attached: unknown): void {\n\tswitch (followed.kind) {\n\t\tcase \"live\":\n\t\t\tsource.bind(followed.source);\n\t\t\treturn;\n\t\tcase \"lacking\":\n\t\t\tsource.vanish(followed.error, BACKGROUND_CONTEXT);\n\t\t\treturn;\n\t\tcase \"loading\":\n\t\t\tif (source.unbound && followed.last !== undefined && followed.instance === attached)\n\t\t\t\tsource.bind(followed.last);\n\t\t\tsource.hold();\n\t\t\treturn;\n\t\tcase \"failed\":\n\t\t\tif (source.unbound && followed.last !== undefined && followed.instance === attached)\n\t\t\t\tsource.bind(followed.last);\n\t\t\tsource.fail(followed.error, BACKGROUND_CONTEXT);\n\t\t\treturn;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RegistryValueSource } from "../registries/internal.ts";
|
|
2
|
+
import { Constant } from "../state/internal.ts";
|
|
3
|
+
/** What `retryOn` takes: sources that live independently of the attempt (a registry value; a constant never wakes). */
|
|
4
|
+
export type RetrySource = RegistryValueSource | Constant;
|
|
5
|
+
/**
|
|
6
|
+
* Checks a `retryOn` source (declaration policy: TypeScript cannot tell a reference's member or this attempt's
|
|
7
|
+
* `writable` from a registry value or a constant).
|
|
8
|
+
*/
|
|
9
|
+
export declare function retrySource(source: unknown, label: string): RetrySource;
|
|
10
|
+
/**
|
|
11
|
+
* The wake signals of one object: its subscriptions (one set at a time, the last attempt's declaration) and what its
|
|
12
|
+
* object decides a wake by.
|
|
13
|
+
*/
|
|
14
|
+
export declare class RetryWakes {
|
|
15
|
+
#private;
|
|
16
|
+
/** The attempt a wake arrived during, while it activates: if it fails, it is retried at once. */
|
|
17
|
+
during: object | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Set from its object's contributions leaving until that batch delivered: a composition its own leaving made does
|
|
20
|
+
* not wake it (an object failing live would retry itself without backoff).
|
|
21
|
+
*/
|
|
22
|
+
leaving: boolean;
|
|
23
|
+
/** Follows `sources` instead of the previous set; `wake` runs inside the batch of each new value (it only records). */
|
|
24
|
+
replace(sources: readonly RetrySource[], wake: () => void): void;
|
|
25
|
+
/** Stops following (the object ended, or a new declaration replaces the set). */
|
|
26
|
+
stop(): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=retry-on.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-on.d.ts","sourceRoot":"","sources":["../../../src/next/host/retry-on.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AAErE,uHAAuH;AACvH,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAGvE;AAED;;;GAGG;AACH,qBAAa,UAAU;;IACtB,iGAAiG;IACjG,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;OAGG;IACH,OAAO,UAAS;IAGhB,uHAAuH;IACvH,OAAO,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAa/D;IAED,iFAAiF;IACjF,IAAI,IAAI,IAAI,CAGX;CACD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Wake signals (slice 8 §3, D2): `self.retryOn(...sources)`. The object follows each declared source while it lives,
|
|
2
|
+
// replaced by each attempt's declaration; a new value of a source wakes it (the object decides what a wake does: a
|
|
3
|
+
// retry while failed, remembered while it activates, nothing while live). Failures of a source wake nothing.
|
|
4
|
+
import { RegistryValueSource } from "../registries/internal.js";
|
|
5
|
+
import { Constant } from "../state/internal.js";
|
|
6
|
+
/**
|
|
7
|
+
* Checks a `retryOn` source (declaration policy: TypeScript cannot tell a reference's member or this attempt's
|
|
8
|
+
* `writable` from a registry value or a constant).
|
|
9
|
+
*/
|
|
10
|
+
export function retrySource(source, label) {
|
|
11
|
+
if (source instanceof RegistryValueSource || source instanceof Constant)
|
|
12
|
+
return source;
|
|
13
|
+
throw new Error(`${label}: self.retryOn takes registry values and constants (sources that outlive the attempt)`);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The wake signals of one object: its subscriptions (one set at a time, the last attempt's declaration) and what its
|
|
17
|
+
* object decides a wake by.
|
|
18
|
+
*/
|
|
19
|
+
export class RetryWakes {
|
|
20
|
+
/** The attempt a wake arrived during, while it activates: if it fails, it is retried at once. */
|
|
21
|
+
during;
|
|
22
|
+
/**
|
|
23
|
+
* Set from its object's contributions leaving until that batch delivered: a composition its own leaving made does
|
|
24
|
+
* not wake it (an object failing live would retry itself without backoff).
|
|
25
|
+
*/
|
|
26
|
+
leaving = false;
|
|
27
|
+
#subscribed = [];
|
|
28
|
+
/** Follows `sources` instead of the previous set; `wake` runs inside the batch of each new value (it only records). */
|
|
29
|
+
replace(sources, wake) {
|
|
30
|
+
this.stop();
|
|
31
|
+
const observer = {
|
|
32
|
+
advance: (call) => {
|
|
33
|
+
if (call.kind === "value")
|
|
34
|
+
wake();
|
|
35
|
+
},
|
|
36
|
+
end: () => { },
|
|
37
|
+
};
|
|
38
|
+
for (const source of sources) {
|
|
39
|
+
if (!(source instanceof RegistryValueSource))
|
|
40
|
+
continue;
|
|
41
|
+
source.subscribe(observer);
|
|
42
|
+
this.#subscribed.push({ source, observer });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Stops following (the object ended, or a new declaration replaces the set). */
|
|
46
|
+
stop() {
|
|
47
|
+
for (const { source, observer } of this.#subscribed)
|
|
48
|
+
source.unsubscribe(observer);
|
|
49
|
+
this.#subscribed = [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=retry-on.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-on.js","sourceRoot":"","sources":["../../../src/next/host/retry-on.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,mHAAmH;AACnH,6GAA6G;AAE7G,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AAKrE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,KAAa;IACzD,IAAI,MAAM,YAAY,mBAAmB,IAAI,MAAM,YAAY,QAAQ;QAAE,OAAO,MAAM,CAAC;IACvF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uFAAuF,CAAC,CAAC;AAClH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,UAAU;IACtB,iGAAiG;IACjG,MAAM,CAAqB;IAC3B;;;OAGG;IACH,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAA2F,EAAE,CAAC;IAEzG,uHAAuH;IACvH,OAAO,CAAC,OAA+B,EAAE,IAAgB;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAA4B;YACzC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,IAAI,EAAE,CAAC;YACnC,CAAC;YACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;SACb,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,YAAY,mBAAmB,CAAC;gBAAE,SAAS;YACvD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC;IAED,iFAAiF;IACjF,IAAI;QACH,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW;YAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACvB,CAAC;CACD","sourcesContent":["// Wake signals (slice 8 §3, D2): `self.retryOn(...sources)`. The object follows each declared source while it lives,\n// replaced by each attempt's declaration; a new value of a source wakes it (the object decides what a wake does: a\n// retry while failed, remembered while it activates, nothing while live). Failures of a source wake nothing.\n\nimport { RegistryValueSource } from \"../registries/internal.ts\";\nimport { Constant, type NativeObserver } from \"../state/internal.ts\";\n\n/** What `retryOn` takes: sources that live independently of the attempt (a registry value; a constant never wakes). */\nexport type RetrySource = RegistryValueSource | Constant;\n\n/**\n * Checks a `retryOn` source (declaration policy: TypeScript cannot tell a reference's member or this attempt's\n * `writable` from a registry value or a constant).\n */\nexport function retrySource(source: unknown, label: string): RetrySource {\n\tif (source instanceof RegistryValueSource || source instanceof Constant) return source;\n\tthrow new Error(`${label}: self.retryOn takes registry values and constants (sources that outlive the attempt)`);\n}\n\n/**\n * The wake signals of one object: its subscriptions (one set at a time, the last attempt's declaration) and what its\n * object decides a wake by.\n */\nexport class RetryWakes {\n\t/** The attempt a wake arrived during, while it activates: if it fails, it is retried at once. */\n\tduring: object | undefined;\n\t/**\n\t * Set from its object's contributions leaving until that batch delivered: a composition its own leaving made does\n\t * not wake it (an object failing live would retry itself without backoff).\n\t */\n\tleaving = false;\n\t#subscribed: { readonly source: RegistryValueSource; readonly observer: NativeObserver<unknown> }[] = [];\n\n\t/** Follows `sources` instead of the previous set; `wake` runs inside the batch of each new value (it only records). */\n\treplace(sources: readonly RetrySource[], wake: () => void): void {\n\t\tthis.stop();\n\t\tconst observer: NativeObserver<unknown> = {\n\t\t\tadvance: (call) => {\n\t\t\t\tif (call.kind === \"value\") wake();\n\t\t\t},\n\t\t\tend: () => {},\n\t\t};\n\t\tfor (const source of sources) {\n\t\t\tif (!(source instanceof RegistryValueSource)) continue;\n\t\t\tsource.subscribe(observer);\n\t\t\tthis.#subscribed.push({ source, observer });\n\t\t}\n\t}\n\n\t/** Stops following (the object ended, or a new declaration replaces the set). */\n\tstop(): void {\n\t\tfor (const { source, observer } of this.#subscribed) source.unsubscribe(observer);\n\t\tthis.#subscribed = [];\n\t}\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Context } from "../../context/index.ts";
|
|
2
|
+
import type { JsonValue } from "../../json.ts";
|
|
3
|
+
import type { Principal } from "../data/index.ts";
|
|
4
|
+
/** What revokes a principal: the app's typed values, the same function on every host. */
|
|
5
|
+
export type RevokedBy<P extends Principal, R extends JsonValue> = (principal: P) => readonly R[];
|
|
6
|
+
/** A host's revocation keys: each principal's, cached weakly by the principal object. */
|
|
7
|
+
export declare class RevocationKeys {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(revokedBy: RevokedBy<Principal, JsonValue> | undefined);
|
|
10
|
+
/**
|
|
11
|
+
* Whether `key` (a revocation's canonical JSON) is one of `principal`'s revocation keys: the canonical JSON of each
|
|
12
|
+
* value `revokedBy` returns for it, computed on its first use.
|
|
13
|
+
*/
|
|
14
|
+
revokes(principal: Principal, key: string, context: Context): boolean;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=revocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revocation.d.ts","sourceRoot":"","sources":["../../../src/next/host/revocation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,yFAAyF;AACzF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;AAEjG,yFAAyF;AACzF,qBAAa,cAAc;;IAI1B,YAAY,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,SAAS,EAEjE;IAED;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CASpE;CACD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Revocation keys (§4, R10, R11): what `revokedBy` says revokes a principal, as canonical JSON, computed once per
|
|
2
|
+
// principal object.
|
|
3
|
+
import { canonicalJson } from "../data/internal.js";
|
|
4
|
+
/** A host's revocation keys: each principal's, cached weakly by the principal object. */
|
|
5
|
+
export class RevocationKeys {
|
|
6
|
+
#revokedBy;
|
|
7
|
+
#keys = new WeakMap();
|
|
8
|
+
constructor(revokedBy) {
|
|
9
|
+
this.#revokedBy = revokedBy;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Whether `key` (a revocation's canonical JSON) is one of `principal`'s revocation keys: the canonical JSON of each
|
|
13
|
+
* value `revokedBy` returns for it, computed on its first use.
|
|
14
|
+
*/
|
|
15
|
+
revokes(principal, key, context) {
|
|
16
|
+
const revokedBy = this.#revokedBy;
|
|
17
|
+
if (revokedBy === undefined)
|
|
18
|
+
return false;
|
|
19
|
+
let keys = this.#keys.get(principal);
|
|
20
|
+
if (keys === undefined) {
|
|
21
|
+
keys = new Set(revokedBy(principal).map((revocation) => canonicalJson(revocation, context)));
|
|
22
|
+
this.#keys.set(principal, keys);
|
|
23
|
+
}
|
|
24
|
+
return keys.has(key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=revocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../../src/next/host/revocation.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,oBAAoB;AAKpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD,yFAAyF;AACzF,MAAM,OAAO,cAAc;IACjB,UAAU,CAA8C;IACxD,KAAK,GAAG,IAAI,OAAO,EAAkC,CAAC;IAE/D,YAAY,SAAsD;QACjE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,SAAoB,EAAE,GAAW,EAAE,OAAgB;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;CACD","sourcesContent":["// Revocation keys (§4, R10, R11): what `revokedBy` says revokes a principal, as canonical JSON, computed once per\n// principal object.\n\nimport type { Context } from \"../../context/index.ts\";\nimport type { JsonValue } from \"../../json.ts\";\nimport type { Principal } from \"../data/index.ts\";\nimport { canonicalJson } from \"../data/internal.ts\";\n\n/** What revokes a principal: the app's typed values, the same function on every host. */\nexport type RevokedBy<P extends Principal, R extends JsonValue> = (principal: P) => readonly R[];\n\n/** A host's revocation keys: each principal's, cached weakly by the principal object. */\nexport class RevocationKeys {\n\treadonly #revokedBy: RevokedBy<Principal, JsonValue> | undefined;\n\treadonly #keys = new WeakMap<Principal, ReadonlySet<string>>();\n\n\tconstructor(revokedBy: RevokedBy<Principal, JsonValue> | undefined) {\n\t\tthis.#revokedBy = revokedBy;\n\t}\n\n\t/**\n\t * Whether `key` (a revocation's canonical JSON) is one of `principal`'s revocation keys: the canonical JSON of each\n\t * value `revokedBy` returns for it, computed on its first use.\n\t */\n\trevokes(principal: Principal, key: string, context: Context): boolean {\n\t\tconst revokedBy = this.#revokedBy;\n\t\tif (revokedBy === undefined) return false;\n\t\tlet keys = this.#keys.get(principal);\n\t\tif (keys === undefined) {\n\t\t\tkeys = new Set(revokedBy(principal).map((revocation) => canonicalJson(revocation, context)));\n\t\t\tthis.#keys.set(principal, keys);\n\t\t}\n\t\treturn keys.has(key);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Context } from "../../context/index.ts";
|
|
2
|
+
import { type Principal } from "../data/index.ts";
|
|
3
|
+
import { type Ctx } from "./ctx.ts";
|
|
4
|
+
import type { AnyHost } from "./host.ts";
|
|
5
|
+
/** What `host.root` takes besides `fn` and the context. */
|
|
6
|
+
export type RootOptions<P extends Principal = Principal> = {
|
|
7
|
+
/**
|
|
8
|
+
* Whom the scope acts as: the host's principal when omitted; a trusted same-host caller's choice (base code), an
|
|
9
|
+
* explicit `undefined` anonymous (`ctx.principal` undefined).
|
|
10
|
+
*/
|
|
11
|
+
readonly principal?: P | undefined;
|
|
12
|
+
};
|
|
13
|
+
/** The open root scopes of a host, each sealed once; `close` seals the rest and rejects their callers. */
|
|
14
|
+
export declare class RootScopes {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(host: AnyHost);
|
|
17
|
+
/**
|
|
18
|
+
* Runs `fn` with a call context like a handler's (`principal`, this host's incarnation, `context`'s telemetry, a
|
|
19
|
+
* signal linked to `context`'s), sealed when `fn` settles, `context` aborts or the host closes. Resolves as `fn`
|
|
20
|
+
* does; rejects at once when `context` aborts or the host closes (an uncooperative `fn` runs on and fails at its
|
|
21
|
+
* next use of Chord), or when `context` was aborted already (`fn` does not run).
|
|
22
|
+
*/
|
|
23
|
+
run<T>(fn: (ctx: Ctx) => Promise<T>, principal: Principal | undefined, context: Context): Promise<T>;
|
|
24
|
+
/** The host closes: every open scope is sealed with `reason`, its caller rejected with it. */
|
|
25
|
+
close(reason: unknown): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/next/host/root.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,OAAO,EAAuC,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAe,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IAC1D;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;CACnC,CAAC;AAKF,0GAA0G;AAC1G,qBAAa,UAAU;;IAKtB,YAAY,IAAI,EAAE,OAAO,EAExB;IAED;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAsCnG;IAED,8FAA8F;IAC9F,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAK3B;CACD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Root scopes (slice 8 §4, D3, design §8): `host.root(fn, context, options?)`, a call context for code outside objects
|
|
2
|
+
// (a Durable tool, a CLI), sealed when `fn` settles, when `context` aborts and when the host closes: its signal aborted,
|
|
3
|
+
// its `ctx.get` refused `released`, every reference it took released.
|
|
4
|
+
import { awaitWithContext, withAbortSignal, withoutAbortSignal } from "../../context/index.js";
|
|
5
|
+
import { ChordError } from "../data/index.js";
|
|
6
|
+
import { CallContext } from "./ctx.js";
|
|
7
|
+
/** The open root scopes of a host, each sealed once; `close` seals the rest and rejects their callers. */
|
|
8
|
+
export class RootScopes {
|
|
9
|
+
#host;
|
|
10
|
+
/** Each open scope: how it is sealed with a reason, and its caller's rejection when the host closes. */
|
|
11
|
+
#open = new Set();
|
|
12
|
+
constructor(host) {
|
|
13
|
+
this.#host = host;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Runs `fn` with a call context like a handler's (`principal`, this host's incarnation, `context`'s telemetry, a
|
|
17
|
+
* signal linked to `context`'s), sealed when `fn` settles, `context` aborts or the host closes. Resolves as `fn`
|
|
18
|
+
* does; rejects at once when `context` aborts or the host closes (an uncooperative `fn` runs on and fails at its
|
|
19
|
+
* next use of Chord), or when `context` was aborted already (`fn` does not run).
|
|
20
|
+
*/
|
|
21
|
+
run(fn, principal, context) {
|
|
22
|
+
const caller = context.abortSignal;
|
|
23
|
+
caller?.throwIfAborted();
|
|
24
|
+
const host = this.#host;
|
|
25
|
+
// The scope's own signal, aborted by its seal; the caller's abort seals it (one listener, no linked signal: a
|
|
26
|
+
// request's scope is made per HTTP request).
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
const scope = withAbortSignal(controller.signal, caller === undefined ? context : withoutAbortSignal(context));
|
|
29
|
+
const ctx = new CallContext(scope, { principal, incarnation: host.incarnation }, host);
|
|
30
|
+
const result = Promise.withResolvers();
|
|
31
|
+
const open = {
|
|
32
|
+
seal: (reason) => {
|
|
33
|
+
if (!this.#open.delete(open))
|
|
34
|
+
return;
|
|
35
|
+
caller?.removeEventListener("abort", aborted);
|
|
36
|
+
// References first: a `get` still waiting gives up with `released`, not with the abort's reason.
|
|
37
|
+
ctx.settle();
|
|
38
|
+
controller.abort(reason);
|
|
39
|
+
},
|
|
40
|
+
reject: result.reject,
|
|
41
|
+
};
|
|
42
|
+
const aborted = () => open.seal(caller?.reason);
|
|
43
|
+
this.#open.add(open);
|
|
44
|
+
caller?.addEventListener("abort", aborted, { once: true });
|
|
45
|
+
// Plugin code: a synchronous throw becomes the rejection.
|
|
46
|
+
const running = (async () => fn(ctx))();
|
|
47
|
+
running.then((value) => {
|
|
48
|
+
open.seal(SETTLED);
|
|
49
|
+
result.resolve(value);
|
|
50
|
+
}, (error) => {
|
|
51
|
+
open.seal(SETTLED);
|
|
52
|
+
result.reject(error);
|
|
53
|
+
});
|
|
54
|
+
// A method's caller gets `released` when its object ends, whatever the handler still does: so does this one
|
|
55
|
+
// (`close` rejects `result`), and at once when its context aborts.
|
|
56
|
+
return caller === undefined ? result.promise : awaitWithContext(result.promise, context);
|
|
57
|
+
}
|
|
58
|
+
/** The host closes: every open scope is sealed with `reason`, its caller rejected with it. */
|
|
59
|
+
close(reason) {
|
|
60
|
+
for (const open of [...this.#open]) {
|
|
61
|
+
open.seal(reason);
|
|
62
|
+
open.reject(reason);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** The abort reason of a scope whose `fn` settled. */
|
|
67
|
+
const SETTLED = new ChordError({ code: "released", reason: "settled", message: "host.root: its fn settled" });
|
|
68
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/next/host/root.ts"],"names":[],"mappings":"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","sourcesContent":["// Root scopes (slice 8 §4, D3, design §8): `host.root(fn, context, options?)`, a call context for code outside objects\n// (a Durable tool, a CLI), sealed when `fn` settles, when `context` aborts and when the host closes: its signal aborted,\n// its `ctx.get` refused `released`, every reference it took released.\n\nimport { awaitWithContext, type Context, withAbortSignal, withoutAbortSignal } from \"../../context/index.ts\";\nimport { ChordError, type Principal } from \"../data/index.ts\";\nimport { CallContext, type Ctx } from \"./ctx.ts\";\nimport type { AnyHost } from \"./host.ts\";\n\n/** What `host.root` takes besides `fn` and the context. */\nexport type RootOptions<P extends Principal = Principal> = {\n\t/**\n\t * Whom the scope acts as: the host's principal when omitted; a trusted same-host caller's choice (base code), an\n\t * explicit `undefined` anonymous (`ctx.principal` undefined).\n\t */\n\treadonly principal?: P | undefined;\n};\n\n/** An open root scope: its seal, and how its caller is rejected when the host closes. */\ntype OpenScope = { readonly seal: (reason: unknown) => void; readonly reject: (reason: unknown) => void };\n\n/** The open root scopes of a host, each sealed once; `close` seals the rest and rejects their callers. */\nexport class RootScopes {\n\treadonly #host: AnyHost;\n\t/** Each open scope: how it is sealed with a reason, and its caller's rejection when the host closes. */\n\treadonly #open = new Set<OpenScope>();\n\n\tconstructor(host: AnyHost) {\n\t\tthis.#host = host;\n\t}\n\n\t/**\n\t * Runs `fn` with a call context like a handler's (`principal`, this host's incarnation, `context`'s telemetry, a\n\t * signal linked to `context`'s), sealed when `fn` settles, `context` aborts or the host closes. Resolves as `fn`\n\t * does; rejects at once when `context` aborts or the host closes (an uncooperative `fn` runs on and fails at its\n\t * next use of Chord), or when `context` was aborted already (`fn` does not run).\n\t */\n\trun<T>(fn: (ctx: Ctx) => Promise<T>, principal: Principal | undefined, context: Context): Promise<T> {\n\t\tconst caller = context.abortSignal;\n\t\tcaller?.throwIfAborted();\n\t\tconst host = this.#host;\n\t\t// The scope's own signal, aborted by its seal; the caller's abort seals it (one listener, no linked signal: a\n\t\t// request's scope is made per HTTP request).\n\t\tconst controller = new AbortController();\n\t\tconst scope = withAbortSignal(controller.signal, caller === undefined ? context : withoutAbortSignal(context));\n\t\tconst ctx = new CallContext(scope, { principal, incarnation: host.incarnation }, host);\n\t\tconst result = Promise.withResolvers<T>();\n\t\tconst open: OpenScope = {\n\t\t\tseal: (reason) => {\n\t\t\t\tif (!this.#open.delete(open)) return;\n\t\t\t\tcaller?.removeEventListener(\"abort\", aborted);\n\t\t\t\t// References first: a `get` still waiting gives up with `released`, not with the abort's reason.\n\t\t\t\tctx.settle();\n\t\t\t\tcontroller.abort(reason);\n\t\t\t},\n\t\t\treject: result.reject,\n\t\t};\n\t\tconst aborted = (): void => open.seal(caller?.reason);\n\t\tthis.#open.add(open);\n\t\tcaller?.addEventListener(\"abort\", aborted, { once: true });\n\t\t// Plugin code: a synchronous throw becomes the rejection.\n\t\tconst running = (async () => fn(ctx))();\n\t\trunning.then(\n\t\t\t(value) => {\n\t\t\t\topen.seal(SETTLED);\n\t\t\t\tresult.resolve(value);\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\topen.seal(SETTLED);\n\t\t\t\tresult.reject(error);\n\t\t\t},\n\t\t);\n\t\t// A method's caller gets `released` when its object ends, whatever the handler still does: so does this one\n\t\t// (`close` rejects `result`), and at once when its context aborts.\n\t\treturn caller === undefined ? result.promise : awaitWithContext(result.promise, context);\n\t}\n\n\t/** The host closes: every open scope is sealed with `reason`, its caller rejected with it. */\n\tclose(reason: unknown): void {\n\t\tfor (const open of [...this.#open]) {\n\t\t\topen.seal(reason);\n\t\t\topen.reject(reason);\n\t\t}\n\t}\n}\n\n/** The abort reason of a scope whose `fn` settled. */\nconst SETTLED = new ChordError({ code: \"released\", reason: \"settled\", message: \"host.root: its fn settled\" });\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Context } from "../../context/index.ts";
|
|
2
|
+
import type { Address, HostKind, KindShape } from "../contracts/index.ts";
|
|
3
|
+
import { type Principal } from "../data/index.ts";
|
|
4
|
+
import type { Codec, Link, PartLimits } from "../link/index.ts";
|
|
5
|
+
import { type HostLink, Path, type Upstream } from "../remote/internal.ts";
|
|
6
|
+
import type { AnyHost } from "./host.ts";
|
|
7
|
+
/** What `host.route` takes for a kind. */
|
|
8
|
+
export type RouteOptions<P extends Principal, K extends KindShape> = {
|
|
9
|
+
/** Whether `principal` may reach `address`; runs for every hold routed over the route, before anything starts. */
|
|
10
|
+
authorize(principal: P, address: Address<K>): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* The link to `address`: `principal` is who the host at the other end is, `trusted` skips the message check on it,
|
|
13
|
+
* `limits` bound its parts (as `accept`'s). `context` is the route's, aborted when this host closes. Runs at most
|
|
14
|
+
* once at a time per address.
|
|
15
|
+
*/
|
|
16
|
+
resolve(address: Address<K>, context: Context): Promise<{
|
|
17
|
+
readonly link: Link;
|
|
18
|
+
readonly principal: P;
|
|
19
|
+
readonly trusted?: boolean;
|
|
20
|
+
readonly codec?: Codec;
|
|
21
|
+
readonly limits?: PartLimits;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
/** What `host.route` returns: the app's controls of its addresses (D10b, R1). */
|
|
25
|
+
export type RouteHandle<K extends KindShape> = {
|
|
26
|
+
/**
|
|
27
|
+
* Resolves `address` again now if it has holders and no link: its failure and its suspension end (a Retry button);
|
|
28
|
+
* an address nobody holds resolves at its next hold.
|
|
29
|
+
*/
|
|
30
|
+
retry(address: Address<K>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Resolves nothing for `address` while it has holders: they wait `failed { waiting }` ("suspended") once its link is
|
|
33
|
+
* gone; the suspension ends with its last holder or `retry`.
|
|
34
|
+
*/
|
|
35
|
+
suspend(address: Address<K>): void;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A host's route for one kind. An address is kept while it has holders, a link or a running `resolve`: a resolve whose
|
|
39
|
+
* holds were all released meanwhile finishes, and its link is kept until it closes.
|
|
40
|
+
*/
|
|
41
|
+
export declare class Route {
|
|
42
|
+
#private;
|
|
43
|
+
readonly kind: string;
|
|
44
|
+
constructor(kind: HostKind, options: RouteOptions<Principal, KindShape>, host: AnyHost, context: Context);
|
|
45
|
+
/**
|
|
46
|
+
* The path to the address with `params`, for a hold acting as `principal`: the params checked against the kind
|
|
47
|
+
* (`invalid/host_address`), then `authorize` (`forbidden` when it refuses; a throw is the hold's failure).
|
|
48
|
+
*/
|
|
49
|
+
path(params: unknown, principal: Principal | undefined, context: Context): Path;
|
|
50
|
+
/** `RouteHandle.retry`: the address's failure and suspension end; it resolves now if held and unlinked. */
|
|
51
|
+
retry(key: string): void;
|
|
52
|
+
/** `RouteHandle.suspend`: a held address resolves nothing until `retry` or its last holder; unheld, nothing is kept. */
|
|
53
|
+
suspend(key: string): void;
|
|
54
|
+
/** One of this route's links completed its handshake: a later drop of it resolves its address again. */
|
|
55
|
+
opened(link: HostLink): void;
|
|
56
|
+
/**
|
|
57
|
+
* One of this route's links closed: its address resolves again once while held if the link had completed its
|
|
58
|
+
* handshake, else its holders fail (no loop over a worker that dies at start).
|
|
59
|
+
*/
|
|
60
|
+
closed(link: HostLink): boolean;
|
|
61
|
+
/** Every holder of every path of this route, linked or not (revocation ends a revoked principal's). */
|
|
62
|
+
holders(): Upstream[];
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/next/host/route.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,KAAK,QAAQ,EAAE,IAAI,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,0CAA0C;AAC1C,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI;IACpE,kHAAkH;IAClH,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACtD;;;;OAIG;IACH,OAAO,CACN,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,OAAO,GACd,OAAO,CAAC;QACV,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACpB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;CACH,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;IAC9C;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACnC,CAAC;AAYF;;;GAGG;AACH,qBAAa,KAAK;;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAUtB,YAAY,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAMvG;IAED;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB9E;IAED,2GAA2G;IAC3G,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMvB;IAED,wHAAwH;IACxH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKzB;IAED,wGAAwG;IACxG,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAG3B;IAED;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAa9B;IAED,uGAAuG;IACvG,OAAO,IAAI,QAAQ,EAAE,CAEpB;CAkFD"}
|