@earendil-works/chord 1.3.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 +54 -0
- package/README.md +129 -10
- 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 +8 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +15 -0
- 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 +9 -3
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +21 -9
- 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 +54 -0
- package/dist/sqlite/cloudflare.d.ts.map +1 -0
- package/dist/sqlite/cloudflare.js +144 -0
- package/dist/sqlite/cloudflare.js.map +1 -0
- package/dist/sqlite/database.d.ts +40 -0
- package/dist/sqlite/database.d.ts.map +1 -0
- package/dist/sqlite/database.js +2 -0
- package/dist/sqlite/database.js.map +1 -0
- package/dist/sqlite/index.d.ts +4 -0
- package/dist/sqlite/index.d.ts.map +1 -0
- package/dist/sqlite/index.js +3 -0
- package/dist/sqlite/index.js.map +1 -0
- package/dist/sqlite/migrations.d.ts +10 -0
- package/dist/sqlite/migrations.d.ts.map +1 -0
- package/dist/sqlite/migrations.js +33 -0
- package/dist/sqlite/migrations.js.map +1 -0
- package/dist/sqlite/node.d.ts +41 -0
- package/dist/sqlite/node.d.ts.map +1 -0
- package/dist/sqlite/node.js +191 -0
- package/dist/sqlite/node.js.map +1 -0
- package/dist/sqlite/schema.d.ts +3 -0
- package/dist/sqlite/schema.d.ts.map +1 -0
- package/dist/sqlite/schema.js +10 -0
- package/dist/sqlite/schema.js.map +1 -0
- package/dist/telemetry-sqlite/index.d.ts +24 -0
- package/dist/telemetry-sqlite/index.d.ts.map +1 -0
- package/dist/telemetry-sqlite/index.js +273 -0
- package/dist/telemetry-sqlite/index.js.map +1 -0
- package/dist/telemetry-sqlite/store.d.ts +9 -0
- package/dist/telemetry-sqlite/store.d.ts.map +1 -0
- package/dist/telemetry-sqlite/store.js +110 -0
- package/dist/telemetry-sqlite/store.js.map +1 -0
- 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 +42 -5
- package/src/delta/README.md +69 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// The state of a reference (§7): loading, live, failed or ended; and `ref.state`, the native watchable that follows
|
|
2
|
+
// it.
|
|
3
|
+
import { BACKGROUND_CONTEXT } from "../../context/index.js";
|
|
4
|
+
import { NativeWatch } from "../../watch.js";
|
|
5
|
+
import { NativeSource } from "../state/internal.js";
|
|
6
|
+
/** The states without fields, one object each: a change of state is a new object (a native watch compares by identity). */
|
|
7
|
+
export const LOADING = { kind: "loading" };
|
|
8
|
+
export const LIVE = { kind: "live" };
|
|
9
|
+
/**
|
|
10
|
+
* `ref.state`, a native source: its value is the reference's state, read through `read`; each watch gets every new
|
|
11
|
+
* state, in its own context (not one call per batch, as a followed source's), and ends `ended` when the reference is
|
|
12
|
+
* released (the end is the notification). Derives reading it are marked in a batch of its own when it changes.
|
|
13
|
+
*/
|
|
14
|
+
export class ReferenceState extends NativeSource {
|
|
15
|
+
#read;
|
|
16
|
+
/** The watches with the contexts they were taken in, which their frames carry. */
|
|
17
|
+
#watches = new Map();
|
|
18
|
+
/** The state the watches have: a change is announced only when the state is another object. */
|
|
19
|
+
#last;
|
|
20
|
+
constructor(read, batch) {
|
|
21
|
+
super(batch);
|
|
22
|
+
this.#read = read;
|
|
23
|
+
this.#last = read();
|
|
24
|
+
}
|
|
25
|
+
get value() {
|
|
26
|
+
return this.#read();
|
|
27
|
+
}
|
|
28
|
+
/** Every state in order: a watch sees each step it went through. */
|
|
29
|
+
async watch(context) {
|
|
30
|
+
const state = this.#read();
|
|
31
|
+
const batch = this.batch;
|
|
32
|
+
// An ended reference has nothing more to announce, and keeps no host to report to.
|
|
33
|
+
if (batch === undefined || state.kind === "ended") {
|
|
34
|
+
const ended = new NativeWatch(state, IGNORE, IGNORE);
|
|
35
|
+
ended.end({ kind: "ended" });
|
|
36
|
+
return ended;
|
|
37
|
+
}
|
|
38
|
+
batch.assertOutside("watch");
|
|
39
|
+
const watch = new NativeWatch(state, () => this.#watches.delete(watch), batch.reportListener);
|
|
40
|
+
this.#watches.set(watch, context);
|
|
41
|
+
if (context.abortSignal !== undefined)
|
|
42
|
+
watch.observeAbort(context.abortSignal);
|
|
43
|
+
return watch;
|
|
44
|
+
}
|
|
45
|
+
/** The reference's state may have changed: every watch gets it when it is another state, derives are marked. */
|
|
46
|
+
moved() {
|
|
47
|
+
const state = this.#read();
|
|
48
|
+
if (state === this.#last)
|
|
49
|
+
return;
|
|
50
|
+
this.#last = state;
|
|
51
|
+
for (const [watch, context] of this.#watches)
|
|
52
|
+
watch.advance(state, context);
|
|
53
|
+
if (this.dependents.size > 0)
|
|
54
|
+
this.#mark();
|
|
55
|
+
}
|
|
56
|
+
/** The reference ended (`ended`, the reference's state): every watch ends `ended`, derives are marked a last time. */
|
|
57
|
+
released(ended) {
|
|
58
|
+
// An ended reference keeps nothing of its object: not the last failure's error, not the host.
|
|
59
|
+
this.#last = ended;
|
|
60
|
+
// Ending detaches, which deletes the current entry (safe while iterating) and runs no listener.
|
|
61
|
+
for (const watch of this.#watches.keys())
|
|
62
|
+
watch.end({ kind: "ended" });
|
|
63
|
+
const batch = this.batch;
|
|
64
|
+
if (batch === undefined || this.dependents.size === 0) {
|
|
65
|
+
this.end();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Ended where the marks run: a release while a batch's flushes send marks in the next commit, after this.
|
|
69
|
+
batch.within(() => {
|
|
70
|
+
this.changed();
|
|
71
|
+
this.end();
|
|
72
|
+
}, BACKGROUND_CONTEXT);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Marks the derives reading it, in the batch running now or one of its own (apart from `moved`: a closure there
|
|
76
|
+
* would allocate on every state change). A reference has no context of its own: the background context.
|
|
77
|
+
*/
|
|
78
|
+
#mark() {
|
|
79
|
+
this.batch?.within(() => this.changed(), BACKGROUND_CONTEXT);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const IGNORE = () => { };
|
|
83
|
+
//# sourceMappingURL=ref-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref-state.js","sourceRoot":"","sources":["../../../src/next/host/ref-state.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,MAAM;AAEN,OAAO,EAAE,kBAAkB,EAAgB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAc,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAuBhE,2HAA2H;AAC3H,MAAM,CAAC,MAAM,OAAO,GAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/C;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAsB;IAChD,KAAK,CAAiB;IAC/B,kFAAkF;IACzE,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC9D,+FAA+F;IAC/F,KAAK,CAAW;IAEhB,YAAY,IAAoB,EAAE,KAAwB;QACzD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,KAAK,CAAC,OAAgB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,mFAAmF;QACnF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAW,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/D,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACd,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAW,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QACxG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC;IACd,CAAC;IAED,gHAAgH;IAChH,KAAK;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,sHAAsH;IACtH,QAAQ,CAAC,KAAY;QACpB,8FAA8F;QAC9F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,gGAAgG;QAChG,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO;QACR,CAAC;QACD,0GAA0G;QAC1G,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK;QACJ,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAC9D,CAAC;CACD;AAED,MAAM,MAAM,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC","sourcesContent":["// The state of a reference (§7): loading, live, failed or ended; and `ref.state`, the native watchable that follows\n// it.\n\nimport { BACKGROUND_CONTEXT, type Context } from \"../../context/index.ts\";\nimport { NativeWatch } from \"../../watch.ts\";\nimport type { ChordError, FailureCause } from \"../data/index.ts\";\nimport { type Batch, NativeSource } from \"../state/internal.ts\";\n\n/**\n * Where a reference stands. `loading`: its object activates, retries or is parked on dependencies still under way, it\n * waits for its host's publication or a parent link, or its link is down (the reference's coarser view of its object's\n * waiting and activating); `failed`: its object failed and no attempt runs (`transient`: `retryAt` is when its backoff\n * retries it; `broken`: no automatic retry), or nothing fits it or its object is parked on a failed dependency\n * (`waiting`: an event wakes it, `retryAt` undefined); `live`: bound; `ended`: for good, with the error that says why\n * (`released` without a reason: released by its holder; `released/ended`: its object ended; `released/closed`: its\n * host closed; `forbidden/revoked`).\n */\nexport type RefState =\n\t| { readonly kind: \"loading\" }\n\t| { readonly kind: \"live\" }\n\t| { readonly kind: \"failed\"; readonly cause: FailureCause; readonly retryAt: number | undefined }\n\t| { readonly kind: \"ended\"; readonly error: ChordError };\n\n/** A failed reference's state. */\nexport type Failed = Extract<RefState, { readonly kind: \"failed\" }>;\n\n/** An ended reference's state. */\nexport type Ended = Extract<RefState, { readonly kind: \"ended\" }>;\n\n/** The states without fields, one object each: a change of state is a new object (a native watch compares by identity). */\nexport const LOADING: RefState = { kind: \"loading\" };\n\nexport const LIVE: RefState = { kind: \"live\" };\n\n/**\n * `ref.state`, a native source: its value is the reference's state, read through `read`; each watch gets every new\n * state, in its own context (not one call per batch, as a followed source's), and ends `ended` when the reference is\n * released (the end is the notification). Derives reading it are marked in a batch of its own when it changes.\n */\nexport class ReferenceState extends NativeSource<RefState> {\n\treadonly #read: () => RefState;\n\t/** The watches with the contexts they were taken in, which their frames carry. */\n\treadonly #watches = new Map<NativeWatch<RefState>, Context>();\n\t/** The state the watches have: a change is announced only when the state is another object. */\n\t#last: RefState;\n\n\tconstructor(read: () => RefState, batch: Batch | undefined) {\n\t\tsuper(batch);\n\t\tthis.#read = read;\n\t\tthis.#last = read();\n\t}\n\n\tget value(): RefState {\n\t\treturn this.#read();\n\t}\n\n\t/** Every state in order: a watch sees each step it went through. */\n\tasync watch(context: Context): Promise<NativeWatch<RefState>> {\n\t\tconst state = this.#read();\n\t\tconst batch = this.batch;\n\t\t// An ended reference has nothing more to announce, and keeps no host to report to.\n\t\tif (batch === undefined || state.kind === \"ended\") {\n\t\t\tconst ended = new NativeWatch<RefState>(state, IGNORE, IGNORE);\n\t\t\tended.end({ kind: \"ended\" });\n\t\t\treturn ended;\n\t\t}\n\t\tbatch.assertOutside(\"watch\");\n\t\tconst watch = new NativeWatch<RefState>(state, () => this.#watches.delete(watch), batch.reportListener);\n\t\tthis.#watches.set(watch, context);\n\t\tif (context.abortSignal !== undefined) watch.observeAbort(context.abortSignal);\n\t\treturn watch;\n\t}\n\n\t/** The reference's state may have changed: every watch gets it when it is another state, derives are marked. */\n\tmoved(): void {\n\t\tconst state = this.#read();\n\t\tif (state === this.#last) return;\n\t\tthis.#last = state;\n\t\tfor (const [watch, context] of this.#watches) watch.advance(state, context);\n\t\tif (this.dependents.size > 0) this.#mark();\n\t}\n\n\t/** The reference ended (`ended`, the reference's state): every watch ends `ended`, derives are marked a last time. */\n\treleased(ended: Ended): void {\n\t\t// An ended reference keeps nothing of its object: not the last failure's error, not the host.\n\t\tthis.#last = ended;\n\t\t// Ending detaches, which deletes the current entry (safe while iterating) and runs no listener.\n\t\tfor (const watch of this.#watches.keys()) watch.end({ kind: \"ended\" });\n\t\tconst batch = this.batch;\n\t\tif (batch === undefined || this.dependents.size === 0) {\n\t\t\tthis.end();\n\t\t\treturn;\n\t\t}\n\t\t// Ended where the marks run: a release while a batch's flushes send marks in the next commit, after this.\n\t\tbatch.within(() => {\n\t\t\tthis.changed();\n\t\t\tthis.end();\n\t\t}, BACKGROUND_CONTEXT);\n\t}\n\n\t/**\n\t * Marks the derives reading it, in the batch running now or one of its own (apart from `moved`: a closure there\n\t * would allocate on every state change). A reference has no context of its own: the background context.\n\t */\n\t#mark(): void {\n\t\tthis.batch?.within(() => this.changed(), BACKGROUND_CONTEXT);\n\t}\n}\n\nconst IGNORE = (): void => {};\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type Context } from "../../context/index.ts";
|
|
2
|
+
import { ChordError } from "../data/index.ts";
|
|
3
|
+
import type { Batch } from "../state/internal.ts";
|
|
4
|
+
import type { PinnedKey } from "./attempt.ts";
|
|
5
|
+
import type { Target } from "./reference.ts";
|
|
6
|
+
/** What a reference's keys need of it. */
|
|
7
|
+
export interface KeyHolder {
|
|
8
|
+
readonly batch: Batch;
|
|
9
|
+
/** Its contract version: keys are mapped to it. */
|
|
10
|
+
readonly version: number;
|
|
11
|
+
/** The object it is bound to; `undefined` while unbound. */
|
|
12
|
+
target(): Target | undefined;
|
|
13
|
+
/** What a read throws while a key never had a value. */
|
|
14
|
+
none(): ChordError;
|
|
15
|
+
}
|
|
16
|
+
/** A reference's held keys; every instance pin below them released exactly once. */
|
|
17
|
+
export declare class ReferenceKeys {
|
|
18
|
+
#private;
|
|
19
|
+
constructor(holder: KeyHolder);
|
|
20
|
+
/**
|
|
21
|
+
* Holds `key` of keyed member `member`: its source once pinned and loaded on the live instance; `context` ends only
|
|
22
|
+
* this caller's wait. `release` (once) lets it go with its last holder.
|
|
23
|
+
*/
|
|
24
|
+
hold(member: string, key: string, context: Context): Promise<PinnedKey>;
|
|
25
|
+
/**
|
|
26
|
+
* Its reference's target changed, inside a batch: a key pins again on a new live instance (last value meanwhile);
|
|
27
|
+
* while the target is not live it follows the instance it is pinned on as long as the object does (a commit admitted
|
|
28
|
+
* there still shows), then keeps its last value (one `failed` call for a failure) and its pin goes.
|
|
29
|
+
*/
|
|
30
|
+
follow(context: Context): void;
|
|
31
|
+
/** Its reference left its object (`error`: why it waits), inside a batch: keys keep their last values, pins go. */
|
|
32
|
+
fail(error: ChordError, context: Context): void;
|
|
33
|
+
/** Its reference ended, inside a batch: every key ends with `error` and releases its pin. */
|
|
34
|
+
end(error: ChordError): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=reference-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-keys.d.ts","sourceRoot":"","sources":["../../../src/next/host/reference-keys.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwC,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,0CAA0C;AAC1C,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC;IAC7B,wDAAwD;IACxD,IAAI,IAAI,UAAU,CAAC;CACnB;AAgBD,oFAAoF;AACpF,qBAAa,aAAa;;IAIzB,YAAY,MAAM,EAAE,SAAS,EAE5B;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAgB5E;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB7B;IAED,mHAAmH;IACnH,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAO9C;IAED,6FAA6F;IAC7F,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAQ3B;CA8ED"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// The keys a reference holds (slice 6a §12; decision "References are the only indirection" (4)): its key watches and
|
|
2
|
+
// its factory's pins (`at(key)`) of its object's keyed members, one source per member and key shared by them, pinned on
|
|
3
|
+
// the object's live instance (loaded, mapped to the reference's version). While the object still follows the instance a
|
|
4
|
+
// key is pinned on (a swap's old instance, a restart's drain, a live failure's admitted commits) the key follows it on,
|
|
5
|
+
// as members do. When the reference moves to a new instance or a new object it pins the key there again, keeping the
|
|
6
|
+
// last value until that pin loads, then one frame; while it points at nothing the key keeps its last value (one
|
|
7
|
+
// `failed` call when its target failed, none while it loads).
|
|
8
|
+
import { awaitWithContext, BACKGROUND_CONTEXT } from "../../context/index.js";
|
|
9
|
+
import { ChordError } from "../data/index.js";
|
|
10
|
+
import { asChordError } from "../data/internal.js";
|
|
11
|
+
import { ReferenceSource } from "./reference-source.js";
|
|
12
|
+
/** A reference's held keys; every instance pin below them released exactly once. */
|
|
13
|
+
export class ReferenceKeys {
|
|
14
|
+
#holder;
|
|
15
|
+
#entries = new Map();
|
|
16
|
+
constructor(holder) {
|
|
17
|
+
this.#holder = holder;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Holds `key` of keyed member `member`: its source once pinned and loaded on the live instance; `context` ends only
|
|
21
|
+
* this caller's wait. `release` (once) lets it go with its last holder.
|
|
22
|
+
*/
|
|
23
|
+
async hold(member, key, context) {
|
|
24
|
+
const entry = this.#entry(member, key);
|
|
25
|
+
entry.holders++;
|
|
26
|
+
let released = false;
|
|
27
|
+
const release = () => {
|
|
28
|
+
if (released)
|
|
29
|
+
return;
|
|
30
|
+
released = true;
|
|
31
|
+
this.#release(entry);
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
if (entry.pin === undefined)
|
|
35
|
+
await awaitWithContext(this.#pin(entry), context);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
release();
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
return { source: entry.source, release };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Its reference's target changed, inside a batch: a key pins again on a new live instance (last value meanwhile);
|
|
45
|
+
* while the target is not live it follows the instance it is pinned on as long as the object does (a commit admitted
|
|
46
|
+
* there still shows), then keeps its last value (one `failed` call for a failure) and its pin goes.
|
|
47
|
+
*/
|
|
48
|
+
follow(context) {
|
|
49
|
+
const target = this.#holder.target();
|
|
50
|
+
const instance = target?.instance;
|
|
51
|
+
const attachable = target?.attachable;
|
|
52
|
+
for (const byKey of this.#entries.values()) {
|
|
53
|
+
for (const entry of byKey.values()) {
|
|
54
|
+
if (instance !== undefined) {
|
|
55
|
+
// A failed load shows on the key (`failed`); nobody waits on this pin.
|
|
56
|
+
if (entry.instance !== instance)
|
|
57
|
+
this.#pin(entry).catch(() => { });
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (attachable !== undefined && entry.instance === attachable)
|
|
61
|
+
continue;
|
|
62
|
+
const state = target?.state;
|
|
63
|
+
if (state?.kind === "failed")
|
|
64
|
+
entry.source.fail(state.cause.error, context);
|
|
65
|
+
else
|
|
66
|
+
entry.source.hold();
|
|
67
|
+
this.#unpin(entry);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Its reference left its object (`error`: why it waits), inside a batch: keys keep their last values, pins go. */
|
|
72
|
+
fail(error, context) {
|
|
73
|
+
for (const byKey of this.#entries.values()) {
|
|
74
|
+
for (const entry of byKey.values()) {
|
|
75
|
+
entry.source.fail(error, context);
|
|
76
|
+
this.#unpin(entry);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Its reference ended, inside a batch: every key ends with `error` and releases its pin. */
|
|
81
|
+
end(error) {
|
|
82
|
+
for (const byKey of this.#entries.values()) {
|
|
83
|
+
for (const entry of byKey.values()) {
|
|
84
|
+
entry.source.end(error);
|
|
85
|
+
this.#unpin(entry);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
this.#entries.clear();
|
|
89
|
+
}
|
|
90
|
+
/** The entry of `member` and `key`, made by the first holder. */
|
|
91
|
+
#entry(member, key) {
|
|
92
|
+
let byKey = this.#entries.get(member);
|
|
93
|
+
if (byKey === undefined) {
|
|
94
|
+
byKey = new Map();
|
|
95
|
+
this.#entries.set(member, byKey);
|
|
96
|
+
}
|
|
97
|
+
let entry = byKey.get(key);
|
|
98
|
+
if (entry === undefined) {
|
|
99
|
+
const source = new ReferenceSource(this.#holder.batch, this.#holder);
|
|
100
|
+
entry = { member, key, source, holders: 0, instance: undefined, pin: undefined, loading: undefined };
|
|
101
|
+
byKey.set(key, entry);
|
|
102
|
+
}
|
|
103
|
+
return entry;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Pins `entry`'s key on the target's live instance (once per instance): the source keeps its last value meanwhile,
|
|
107
|
+
* follows the pin when it lands (one frame) and releases the previous one; a failed load shows as its failure.
|
|
108
|
+
*/
|
|
109
|
+
#pin(entry) {
|
|
110
|
+
const { batch, version } = this.#holder;
|
|
111
|
+
const target = this.#holder.target();
|
|
112
|
+
const instance = target?.instance;
|
|
113
|
+
if (target === undefined || instance === undefined)
|
|
114
|
+
return Promise.reject(this.#holder.none());
|
|
115
|
+
if (entry.instance === instance && entry.loading !== undefined)
|
|
116
|
+
return entry.loading;
|
|
117
|
+
entry.instance = instance;
|
|
118
|
+
// No frames from the old instance while the new one loads the key.
|
|
119
|
+
entry.source.hold();
|
|
120
|
+
const loading = target.pinKey(entry.member, entry.key, version, BACKGROUND_CONTEXT).then((pin) => {
|
|
121
|
+
if (entry.instance !== instance || entry.holders === 0) {
|
|
122
|
+
pin.release();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const previous = entry.pin;
|
|
126
|
+
entry.pin = pin;
|
|
127
|
+
batch.within(() => entry.source.bind(pin.source), BACKGROUND_CONTEXT);
|
|
128
|
+
previous?.release();
|
|
129
|
+
}, (error) => {
|
|
130
|
+
if (entry.instance === instance) {
|
|
131
|
+
entry.instance = undefined;
|
|
132
|
+
entry.loading = undefined;
|
|
133
|
+
const failure = asChordError(error, target.label);
|
|
134
|
+
batch.within(() => entry.source.fail(failure, BACKGROUND_CONTEXT), BACKGROUND_CONTEXT);
|
|
135
|
+
}
|
|
136
|
+
throw error;
|
|
137
|
+
});
|
|
138
|
+
entry.loading = loading;
|
|
139
|
+
return loading;
|
|
140
|
+
}
|
|
141
|
+
/** One holder of `entry` left; the last drops it and its pin. */
|
|
142
|
+
#release(entry) {
|
|
143
|
+
if (--entry.holders > 0)
|
|
144
|
+
return;
|
|
145
|
+
const byKey = this.#entries.get(entry.member);
|
|
146
|
+
if (byKey?.get(entry.key) !== entry)
|
|
147
|
+
return;
|
|
148
|
+
byKey.delete(entry.key);
|
|
149
|
+
if (byKey.size === 0)
|
|
150
|
+
this.#entries.delete(entry.member);
|
|
151
|
+
// Its source ends: it leaves the document, whose other holders would keep it and its reference (Astra, GC).
|
|
152
|
+
const released = new ChordError({ code: "released", message: `${entry.member}.at(${entry.key}): released` });
|
|
153
|
+
const end = () => entry.source.end(released);
|
|
154
|
+
if (entry.source.inUse)
|
|
155
|
+
this.#holder.batch.within(end, BACKGROUND_CONTEXT);
|
|
156
|
+
else
|
|
157
|
+
end();
|
|
158
|
+
this.#unpin(entry);
|
|
159
|
+
}
|
|
160
|
+
/** Releases the pin `entry` follows or awaits: it points at nothing until pinned again. */
|
|
161
|
+
#unpin(entry) {
|
|
162
|
+
entry.pin?.release();
|
|
163
|
+
entry.pin = undefined;
|
|
164
|
+
entry.instance = undefined;
|
|
165
|
+
entry.loading = undefined;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=reference-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-keys.js","sourceRoot":"","sources":["../../../src/next/host/reference-keys.ts"],"names":[],"mappings":"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","sourcesContent":["// The keys a reference holds (slice 6a §12; decision \"References are the only indirection\" (4)): its key watches and\n// its factory's pins (`at(key)`) of its object's keyed members, one source per member and key shared by them, pinned on\n// the object's live instance (loaded, mapped to the reference's version). While the object still follows the instance a\n// key is pinned on (a swap's old instance, a restart's drain, a live failure's admitted commits) the key follows it on,\n// as members do. When the reference moves to a new instance or a new object it pins the key there again, keeping the\n// last value until that pin loads, then one frame; while it points at nothing the key keeps its last value (one\n// `failed` call when its target failed, none while it loads).\n\nimport { awaitWithContext, BACKGROUND_CONTEXT, type Context } from \"../../context/index.ts\";\nimport { ChordError } from \"../data/index.ts\";\nimport { asChordError } from \"../data/internal.ts\";\nimport type { Batch } from \"../state/internal.ts\";\nimport type { PinnedKey } from \"./attempt.ts\";\nimport type { Target } from \"./reference.ts\";\nimport { ReferenceSource } from \"./reference-source.ts\";\n\n/** What a reference's keys need of it. */\nexport interface KeyHolder {\n\treadonly batch: Batch;\n\t/** Its contract version: keys are mapped to it. */\n\treadonly version: number;\n\t/** The object it is bound to; `undefined` while unbound. */\n\ttarget(): Target | undefined;\n\t/** What a read throws while a key never had a value. */\n\tnone(): ChordError;\n}\n\n/** One key of one keyed member held by the reference: its source, its users, and the instance pin it follows. */\ntype KeyEntry = {\n\treadonly member: string;\n\treadonly key: string;\n\treadonly source: ReferenceSource;\n\tholders: number;\n\t/** The live instance its pin is (or is being) taken on; `undefined` while it points at nothing. */\n\tinstance: unknown;\n\t/** The pin it follows. */\n\tpin: PinnedKey | undefined;\n\t/** The pin in flight, settled once the source follows it. */\n\tloading: Promise<void> | undefined;\n};\n\n/** A reference's held keys; every instance pin below them released exactly once. */\nexport class ReferenceKeys {\n\treadonly #holder: KeyHolder;\n\treadonly #entries = new Map<string, Map<string, KeyEntry>>();\n\n\tconstructor(holder: KeyHolder) {\n\t\tthis.#holder = holder;\n\t}\n\n\t/**\n\t * Holds `key` of keyed member `member`: its source once pinned and loaded on the live instance; `context` ends only\n\t * this caller's wait. `release` (once) lets it go with its last holder.\n\t */\n\tasync hold(member: string, key: string, context: Context): Promise<PinnedKey> {\n\t\tconst entry = this.#entry(member, key);\n\t\tentry.holders++;\n\t\tlet released = false;\n\t\tconst release = (): void => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tthis.#release(entry);\n\t\t};\n\t\ttry {\n\t\t\tif (entry.pin === undefined) await awaitWithContext(this.#pin(entry), context);\n\t\t} catch (error) {\n\t\t\trelease();\n\t\t\tthrow error;\n\t\t}\n\t\treturn { source: entry.source, release };\n\t}\n\n\t/**\n\t * Its reference's target changed, inside a batch: a key pins again on a new live instance (last value meanwhile);\n\t * while the target is not live it follows the instance it is pinned on as long as the object does (a commit admitted\n\t * there still shows), then keeps its last value (one `failed` call for a failure) and its pin goes.\n\t */\n\tfollow(context: Context): void {\n\t\tconst target = this.#holder.target();\n\t\tconst instance = target?.instance;\n\t\tconst attachable = target?.attachable;\n\t\tfor (const byKey of this.#entries.values()) {\n\t\t\tfor (const entry of byKey.values()) {\n\t\t\t\tif (instance !== undefined) {\n\t\t\t\t\t// A failed load shows on the key (`failed`); nobody waits on this pin.\n\t\t\t\t\tif (entry.instance !== instance) this.#pin(entry).catch(() => {});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (attachable !== undefined && entry.instance === attachable) continue;\n\t\t\t\tconst state = target?.state;\n\t\t\t\tif (state?.kind === \"failed\") entry.source.fail(state.cause.error, context);\n\t\t\t\telse entry.source.hold();\n\t\t\t\tthis.#unpin(entry);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Its reference left its object (`error`: why it waits), inside a batch: keys keep their last values, pins go. */\n\tfail(error: ChordError, context: Context): void {\n\t\tfor (const byKey of this.#entries.values()) {\n\t\t\tfor (const entry of byKey.values()) {\n\t\t\t\tentry.source.fail(error, context);\n\t\t\t\tthis.#unpin(entry);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Its reference ended, inside a batch: every key ends with `error` and releases its pin. */\n\tend(error: ChordError): void {\n\t\tfor (const byKey of this.#entries.values()) {\n\t\t\tfor (const entry of byKey.values()) {\n\t\t\t\tentry.source.end(error);\n\t\t\t\tthis.#unpin(entry);\n\t\t\t}\n\t\t}\n\t\tthis.#entries.clear();\n\t}\n\n\t/** The entry of `member` and `key`, made by the first holder. */\n\t#entry(member: string, key: string): KeyEntry {\n\t\tlet byKey = this.#entries.get(member);\n\t\tif (byKey === undefined) {\n\t\t\tbyKey = new Map();\n\t\t\tthis.#entries.set(member, byKey);\n\t\t}\n\t\tlet entry = byKey.get(key);\n\t\tif (entry === undefined) {\n\t\t\tconst source = new ReferenceSource(this.#holder.batch, this.#holder);\n\t\t\tentry = { member, key, source, holders: 0, instance: undefined, pin: undefined, loading: undefined };\n\t\t\tbyKey.set(key, entry);\n\t\t}\n\t\treturn entry;\n\t}\n\n\t/**\n\t * Pins `entry`'s key on the target's live instance (once per instance): the source keeps its last value meanwhile,\n\t * follows the pin when it lands (one frame) and releases the previous one; a failed load shows as its failure.\n\t */\n\t#pin(entry: KeyEntry): Promise<void> {\n\t\tconst { batch, version } = this.#holder;\n\t\tconst target = this.#holder.target();\n\t\tconst instance = target?.instance;\n\t\tif (target === undefined || instance === undefined) return Promise.reject(this.#holder.none());\n\t\tif (entry.instance === instance && entry.loading !== undefined) return entry.loading;\n\t\tentry.instance = instance;\n\t\t// No frames from the old instance while the new one loads the key.\n\t\tentry.source.hold();\n\t\tconst loading = target.pinKey(entry.member, entry.key, version, BACKGROUND_CONTEXT).then(\n\t\t\t(pin) => {\n\t\t\t\tif (entry.instance !== instance || entry.holders === 0) {\n\t\t\t\t\tpin.release();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst previous = entry.pin;\n\t\t\t\tentry.pin = pin;\n\t\t\t\tbatch.within(() => entry.source.bind(pin.source), BACKGROUND_CONTEXT);\n\t\t\t\tprevious?.release();\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tif (entry.instance === instance) {\n\t\t\t\t\tentry.instance = undefined;\n\t\t\t\t\tentry.loading = undefined;\n\t\t\t\t\tconst failure = asChordError(error, target.label);\n\t\t\t\t\tbatch.within(() => entry.source.fail(failure, BACKGROUND_CONTEXT), BACKGROUND_CONTEXT);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tentry.loading = loading;\n\t\treturn loading;\n\t}\n\n\t/** One holder of `entry` left; the last drops it and its pin. */\n\t#release(entry: KeyEntry): void {\n\t\tif (--entry.holders > 0) return;\n\t\tconst byKey = this.#entries.get(entry.member);\n\t\tif (byKey?.get(entry.key) !== entry) return;\n\t\tbyKey.delete(entry.key);\n\t\tif (byKey.size === 0) this.#entries.delete(entry.member);\n\t\t// Its source ends: it leaves the document, whose other holders would keep it and its reference (Astra, GC).\n\t\tconst released = new ChordError({ code: \"released\", message: `${entry.member}.at(${entry.key}): released` });\n\t\tconst end = (): void => entry.source.end(released);\n\t\tif (entry.source.inUse) this.#holder.batch.within(end, BACKGROUND_CONTEXT);\n\t\telse end();\n\t\tthis.#unpin(entry);\n\t}\n\n\t/** Releases the pin `entry` follows or awaits: it points at nothing until pinned again. */\n\t#unpin(entry: KeyEntry): void {\n\t\tentry.pin?.release();\n\t\tentry.pin = undefined;\n\t\tentry.instance = undefined;\n\t\tentry.loading = undefined;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Context } from "../../context/index.ts";
|
|
2
|
+
import type { JsonValue } from "../../json.ts";
|
|
3
|
+
import { Watch } from "../../watch.ts";
|
|
4
|
+
import type { ChordError } from "../data/index.ts";
|
|
5
|
+
import { type Batch, type Dependent, type DeriveSource, Source, type Subscriber, type WatchStart } from "../state/internal.ts";
|
|
6
|
+
/** A reference owning its sources: what a read of one that never had a value throws. */
|
|
7
|
+
export interface SourceOwner {
|
|
8
|
+
none(): ChordError;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* One member (or key) of one reference. Bound, it is a dependent of the instance's member (its own dependents are
|
|
12
|
+
* marked with it); its watches and subscribers subscribe to that member itself, so the member's frames reach them as
|
|
13
|
+
* they are, and a derive member stays lazy while nothing follows it; holding or moving moves them.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ReferenceSource extends Source implements Dependent {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(batch: Batch, owner: SourceOwner);
|
|
18
|
+
/** Whether it never had a value (a watch waits for its reference's values first). */
|
|
19
|
+
get unbound(): boolean;
|
|
20
|
+
get value(): JsonValue;
|
|
21
|
+
/** What a new watch starts at: the bound member's start, the held value (after its failure), or the failure. */
|
|
22
|
+
start(): WatchStart;
|
|
23
|
+
/**
|
|
24
|
+
* A watch subscribed to the bound member itself (as `Source.openWatch` starts one: on a failed member at its last
|
|
25
|
+
* good value, the failure first).
|
|
26
|
+
*/
|
|
27
|
+
openWatch(context: Context): Watch<JsonValue>;
|
|
28
|
+
/** Whether anything follows it: a watch, a subscriber or a derive (moving or ending it then needs a batch). */
|
|
29
|
+
get inUse(): boolean;
|
|
30
|
+
/** Whether a watch or a subscriber follows it (through the bound member). */
|
|
31
|
+
get watched(): boolean;
|
|
32
|
+
/** Feeds `subscriber` the bound member's frames (it subscribes there) and the moves' frames. */
|
|
33
|
+
subscribe(subscriber: Subscriber): void;
|
|
34
|
+
/** As `Source.unsubscribe`. */
|
|
35
|
+
unsubscribe(subscriber: Subscriber): void;
|
|
36
|
+
/** The bound member changed: its dependents are marked (its frames reach the subscribers directly). */
|
|
37
|
+
invalidate(): void;
|
|
38
|
+
/** The bound member's document was retired: its dependents carry the flag on. */
|
|
39
|
+
sourceRetired(visited: Set<Dependent>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Follows `source`, an instance's member, inside a batch: watches get one frame from the last value (a full one
|
|
42
|
+
* after a failure); derives downstream are marked and recompute, a failed one included (self-healing).
|
|
43
|
+
*/
|
|
44
|
+
bind(source: DeriveSource): void;
|
|
45
|
+
/** Its target loads (a restart, a retry, a new object not live yet): it keeps its last value, and tells nothing. */
|
|
46
|
+
hold(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Its target failed (`error`: its cause's, a refused version's, a removed type's), inside a batch: it keeps its last
|
|
49
|
+
* value, its watches and subscribers get one failure call (once per failure) and stay open.
|
|
50
|
+
*/
|
|
51
|
+
fail(error: ChordError, context: Context): void;
|
|
52
|
+
/**
|
|
53
|
+
* Its target's live variant lacks the member, inside a batch: reads throw `error`; watches and subscribers get one
|
|
54
|
+
* failure call and stay open (a later instance may bring the member back, as `[["r", value]]`).
|
|
55
|
+
*/
|
|
56
|
+
vanish(error: ChordError, context: Context): void;
|
|
57
|
+
/**
|
|
58
|
+
* Its reference ended, inside a batch: reads throw `error`, watches end `ended`, and derives over it are marked
|
|
59
|
+
* (their next read throws it, no cached value stays).
|
|
60
|
+
*/
|
|
61
|
+
end(error: ChordError): void;
|
|
62
|
+
/** Delivers a move's frame: the diff from the watches' value to the new member's. */
|
|
63
|
+
deliver(context: Context): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=reference-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-source.d.ts","sourceRoot":"","sources":["../../../src/next/host/reference-source.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAiC,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACN,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,YAAY,EAEjB,MAAM,EACN,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,sBAAsB,CAAC;AAgB9B,wFAAwF;AACxF,MAAM,WAAW,WAAW;IAC3B,IAAI,IAAI,UAAU,CAAC;CACnB;AAOD;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,MAAO,YAAW,SAAS;;IAY/D,YAAY,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAG3C;IAED,qFAAqF;IACrF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,KAAK,IAAI,SAAS,CAarB;IAED,gHAAgH;IAChH,KAAK,IAAI,UAAU,CAgBlB;IAED;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAU5C;IAED,+GAA+G;IAC/G,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,6EAA6E;IAC7E,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gGAAgG;IAChG,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAKtC;IAED,+BAA+B;IAC/B,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAIxC;IAED,uGAAuG;IACvG,UAAU,IAAI,IAAI,CAEjB;IAED,iFAAiF;IACjF,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAE3C;IAED;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS/B;IAED,oHAAoH;IACpH,IAAI,IAAI,IAAI,CAQX;IAED;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAa9C;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAQhD;IAED;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAS3B;IAED,qFAAqF;IACrF,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB9B;CAyDD"}
|