@earendil-works/chord 1.4.0 → 1.5.1
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 +92 -0
- package/README.md +115 -90
- 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/contracts/accepts.d.ts +81 -0
- package/dist/contracts/accepts.d.ts.map +1 -0
- package/dist/contracts/accepts.js +123 -0
- package/dist/contracts/accepts.js.map +1 -0
- package/dist/contracts/contract.d.ts +121 -0
- package/dist/contracts/contract.d.ts.map +1 -0
- package/dist/contracts/contract.js +50 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/declare.d.ts +107 -0
- package/dist/contracts/declare.d.ts.map +1 -0
- package/dist/contracts/declare.js +136 -0
- package/dist/contracts/declare.js.map +1 -0
- package/dist/contracts/evolve.d.ts +92 -0
- package/dist/contracts/evolve.d.ts.map +1 -0
- package/dist/contracts/evolve.js +179 -0
- package/dist/contracts/evolve.js.map +1 -0
- package/dist/contracts/fingerprint.d.ts +16 -0
- package/dist/contracts/fingerprint.d.ts.map +1 -0
- package/dist/contracts/fingerprint.js +50 -0
- package/dist/contracts/fingerprint.js.map +1 -0
- package/dist/contracts/history.d.ts +71 -0
- package/dist/contracts/history.d.ts.map +1 -0
- package/dist/contracts/history.js +3 -0
- package/dist/contracts/history.js.map +1 -0
- package/dist/contracts/host-kind.d.ts +40 -0
- package/dist/contracts/host-kind.d.ts.map +1 -0
- package/dist/contracts/host-kind.js +37 -0
- package/dist/contracts/host-kind.js.map +1 -0
- package/dist/contracts/index.d.ts +7 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +6 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/internal.d.ts +10 -0
- package/dist/contracts/internal.d.ts.map +1 -0
- package/dist/contracts/internal.js +9 -0
- package/dist/contracts/internal.js.map +1 -0
- package/dist/contracts/names.d.ts +3 -0
- package/dist/contracts/names.d.ts.map +1 -0
- package/dist/contracts/names.js +13 -0
- package/dist/contracts/names.js.map +1 -0
- package/dist/contracts/params.d.ts +28 -0
- package/dist/contracts/params.d.ts.map +1 -0
- package/dist/contracts/params.js +50 -0
- package/dist/contracts/params.js.map +1 -0
- package/dist/contracts/schema.d.ts +102 -0
- package/dist/contracts/schema.d.ts.map +1 -0
- package/dist/contracts/schema.js +103 -0
- package/dist/contracts/schema.js.map +1 -0
- package/dist/contracts/snapshot.d.ts +16 -0
- package/dist/contracts/snapshot.d.ts.map +1 -0
- package/dist/contracts/snapshot.js +167 -0
- package/dist/contracts/snapshot.js.map +1 -0
- package/dist/data/args.d.ts +50 -0
- package/dist/data/args.d.ts.map +1 -0
- package/dist/data/args.js +83 -0
- package/dist/data/args.js.map +1 -0
- package/dist/data/errors.d.ts +80 -0
- package/dist/data/errors.d.ts.map +1 -0
- package/dist/data/errors.js +116 -0
- package/dist/data/errors.js.map +1 -0
- package/dist/data/failure.d.ts +26 -0
- package/dist/data/failure.d.ts.map +1 -0
- package/dist/data/failure.js +77 -0
- package/dist/data/failure.js.map +1 -0
- package/dist/data/index.d.ts +4 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +5 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/internal.d.ts +7 -0
- package/dist/data/internal.d.ts.map +1 -0
- package/dist/data/internal.js +8 -0
- package/dist/data/internal.js.map +1 -0
- package/dist/data/params.d.ts +20 -0
- package/dist/data/params.d.ts.map +1 -0
- package/dist/data/params.js +31 -0
- package/dist/data/params.js.map +1 -0
- package/dist/data/principal.d.ts +22 -0
- package/dist/data/principal.d.ts.map +1 -0
- package/dist/data/principal.js +49 -0
- package/dist/data/principal.js.map +1 -0
- package/dist/data/validator.d.ts +12 -0
- package/dist/data/validator.d.ts.map +1 -0
- package/dist/data/validator.js +35 -0
- package/dist/data/validator.js.map +1 -0
- 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/documents/address-source.d.ts +20 -0
- package/dist/documents/address-source.d.ts.map +1 -0
- package/dist/documents/address-source.js +44 -0
- package/dist/documents/address-source.js.map +1 -0
- package/dist/documents/definition.d.ts +84 -0
- package/dist/documents/definition.d.ts.map +1 -0
- package/dist/documents/definition.js +74 -0
- package/dist/documents/definition.js.map +1 -0
- package/dist/documents/documents.d.ts +126 -0
- package/dist/documents/documents.d.ts.map +1 -0
- package/dist/documents/documents.js +248 -0
- package/dist/documents/documents.js.map +1 -0
- package/dist/documents/fence.d.ts +9 -0
- package/dist/documents/fence.d.ts.map +1 -0
- package/dist/documents/fence.js +15 -0
- package/dist/documents/fence.js.map +1 -0
- package/dist/documents/handles.d.ts +76 -0
- package/dist/documents/handles.d.ts.map +1 -0
- package/dist/documents/handles.js +66 -0
- package/dist/documents/handles.js.map +1 -0
- package/dist/documents/index.d.ts +4 -0
- package/dist/documents/index.d.ts.map +1 -0
- package/dist/documents/index.js +3 -0
- package/dist/documents/index.js.map +1 -0
- package/dist/documents/internal.d.ts +9 -0
- package/dist/documents/internal.d.ts.map +1 -0
- package/dist/documents/internal.js +9 -0
- package/dist/documents/internal.js.map +1 -0
- package/dist/documents/keyed-slot.d.ts +103 -0
- package/dist/documents/keyed-slot.d.ts.map +1 -0
- package/dist/documents/keyed-slot.js +395 -0
- package/dist/documents/keyed-slot.js.map +1 -0
- package/dist/documents/line.d.ts +7 -0
- package/dist/documents/line.d.ts.map +1 -0
- package/dist/documents/line.js +14 -0
- package/dist/documents/line.js.map +1 -0
- package/dist/documents/persistence.d.ts +104 -0
- package/dist/documents/persistence.d.ts.map +1 -0
- package/dist/documents/persistence.js +129 -0
- package/dist/documents/persistence.js.map +1 -0
- package/dist/documents/residency.d.ts +31 -0
- package/dist/documents/residency.d.ts.map +1 -0
- package/dist/documents/residency.js +93 -0
- package/dist/documents/residency.js.map +1 -0
- package/dist/documents/slot.d.ts +109 -0
- package/dist/documents/slot.d.ts.map +1 -0
- package/dist/documents/slot.js +181 -0
- package/dist/documents/slot.js.map +1 -0
- package/dist/documents/transaction.d.ts +143 -0
- package/dist/documents/transaction.d.ts.map +1 -0
- package/dist/documents/transaction.js +442 -0
- package/dist/documents/transaction.js.map +1 -0
- package/dist/host/activity.d.ts +31 -0
- package/dist/host/activity.d.ts.map +1 -0
- package/dist/host/activity.js +40 -0
- package/dist/host/activity.js.map +1 -0
- package/dist/host/adapted.d.ts +49 -0
- package/dist/host/adapted.d.ts.map +1 -0
- package/dist/host/adapted.js +214 -0
- package/dist/host/adapted.js.map +1 -0
- package/dist/host/attempt.d.ts +308 -0
- package/dist/host/attempt.d.ts.map +1 -0
- package/dist/host/attempt.js +1199 -0
- package/dist/host/attempt.js.map +1 -0
- package/dist/host/backoff.d.ts +29 -0
- package/dist/host/backoff.d.ts.map +1 -0
- package/dist/host/backoff.js +69 -0
- package/dist/host/backoff.js.map +1 -0
- package/dist/host/ctx.d.ts +94 -0
- package/dist/host/ctx.d.ts.map +1 -0
- package/dist/host/ctx.js +200 -0
- package/dist/host/ctx.js.map +1 -0
- package/dist/host/deadline.d.ts +12 -0
- package/dist/host/deadline.d.ts.map +1 -0
- package/dist/host/deadline.js +40 -0
- package/dist/host/deadline.js.map +1 -0
- package/dist/host/dependencies.d.ts +65 -0
- package/dist/host/dependencies.d.ts.map +1 -0
- package/dist/host/dependencies.js +115 -0
- package/dist/host/dependencies.js.map +1 -0
- package/dist/host/destination.d.ts +48 -0
- package/dist/host/destination.d.ts.map +1 -0
- package/dist/host/destination.js +101 -0
- package/dist/host/destination.js.map +1 -0
- package/dist/host/facet.d.ts +84 -0
- package/dist/host/facet.d.ts.map +1 -0
- package/dist/host/facet.js +55 -0
- package/dist/host/facet.js.map +1 -0
- package/dist/host/follow.d.ts +52 -0
- package/dist/host/follow.d.ts.map +1 -0
- package/dist/host/follow.js +207 -0
- package/dist/host/follow.js.map +1 -0
- package/dist/host/host.d.ts +571 -0
- package/dist/host/host.d.ts.map +1 -0
- package/dist/host/host.js +1318 -0
- package/dist/host/host.js.map +1 -0
- package/dist/host/index.d.ts +17 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +6 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/internal.d.ts +11 -0
- package/dist/host/internal.d.ts.map +1 -0
- package/dist/host/internal.js +9 -0
- package/dist/host/internal.js.map +1 -0
- package/dist/host/members.d.ts +50 -0
- package/dist/host/members.d.ts.map +1 -0
- package/dist/host/members.js +107 -0
- package/dist/host/members.js.map +1 -0
- package/dist/host/native.d.ts +64 -0
- package/dist/host/native.d.ts.map +1 -0
- package/dist/host/native.js +126 -0
- package/dist/host/native.js.map +1 -0
- package/dist/host/object.d.ts +331 -0
- package/dist/host/object.d.ts.map +1 -0
- package/dist/host/object.js +1296 -0
- package/dist/host/object.js.map +1 -0
- package/dist/host/old-work.d.ts +34 -0
- package/dist/host/old-work.d.ts.map +1 -0
- package/dist/host/old-work.js +52 -0
- package/dist/host/old-work.js.map +1 -0
- package/dist/host/parked.d.ts +23 -0
- package/dist/host/parked.d.ts.map +1 -0
- package/dist/host/parked.js +79 -0
- package/dist/host/parked.js.map +1 -0
- package/dist/host/presence.d.ts +34 -0
- package/dist/host/presence.d.ts.map +1 -0
- package/dist/host/presence.js +117 -0
- package/dist/host/presence.js.map +1 -0
- package/dist/host/readiness.d.ts +27 -0
- package/dist/host/readiness.d.ts.map +1 -0
- package/dist/host/readiness.js +134 -0
- package/dist/host/readiness.js.map +1 -0
- package/dist/host/ref-state.d.ts +53 -0
- package/dist/host/ref-state.d.ts.map +1 -0
- package/dist/host/ref-state.js +83 -0
- package/dist/host/ref-state.js.map +1 -0
- package/dist/host/reference-keys.d.ts +36 -0
- package/dist/host/reference-keys.d.ts.map +1 -0
- package/dist/host/reference-keys.js +168 -0
- package/dist/host/reference-keys.js.map +1 -0
- package/dist/host/reference-source.d.ts +65 -0
- package/dist/host/reference-source.d.ts.map +1 -0
- package/dist/host/reference-source.js +285 -0
- package/dist/host/reference-source.js.map +1 -0
- package/dist/host/reference.d.ts +321 -0
- package/dist/host/reference.d.ts.map +1 -0
- package/dist/host/reference.js +797 -0
- package/dist/host/reference.js.map +1 -0
- package/dist/host/reload-cycle.d.ts +16 -0
- package/dist/host/reload-cycle.d.ts.map +1 -0
- package/dist/host/reload-cycle.js +81 -0
- package/dist/host/reload-cycle.js.map +1 -0
- package/dist/host/retry-on.d.ts +28 -0
- package/dist/host/retry-on.d.ts.map +1 -0
- package/dist/host/retry-on.js +52 -0
- package/dist/host/retry-on.js.map +1 -0
- package/dist/host/revocation.d.ts +16 -0
- package/dist/host/revocation.d.ts.map +1 -0
- package/dist/host/revocation.js +27 -0
- package/dist/host/revocation.js.map +1 -0
- package/dist/host/root.d.ts +37 -0
- package/dist/host/root.d.ts.map +1 -0
- package/dist/host/root.js +68 -0
- package/dist/host/root.js.map +1 -0
- package/dist/host/route.d.ts +64 -0
- package/dist/host/route.d.ts.map +1 -0
- package/dist/host/route.js +227 -0
- package/dist/host/route.js.map +1 -0
- package/dist/host/routines.d.ts +78 -0
- package/dist/host/routines.d.ts.map +1 -0
- package/dist/host/routines.js +398 -0
- package/dist/host/routines.js.map +1 -0
- package/dist/host/sleep.d.ts +9 -0
- package/dist/host/sleep.d.ts.map +1 -0
- package/dist/host/sleep.js +40 -0
- package/dist/host/sleep.js.map +1 -0
- package/dist/host/staging.d.ts +94 -0
- package/dist/host/staging.d.ts.map +1 -0
- package/dist/host/staging.js +304 -0
- package/dist/host/staging.js.map +1 -0
- package/dist/host/unbound-clock.d.ts +23 -0
- package/dist/host/unbound-clock.d.ts.map +1 -0
- package/dist/host/unbound-clock.js +58 -0
- package/dist/host/unbound-clock.js.map +1 -0
- package/dist/host/unbound.d.ts +37 -0
- package/dist/host/unbound.d.ts.map +1 -0
- package/dist/host/unbound.js +88 -0
- package/dist/host/unbound.js.map +1 -0
- package/dist/host/uuid.d.ts +3 -0
- package/dist/host/uuid.d.ts.map +1 -0
- package/dist/host/uuid.js +38 -0
- package/dist/host/uuid.js.map +1 -0
- package/dist/index.d.ts +29 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/dist/jobs/definition.d.ts +96 -0
- package/dist/jobs/definition.d.ts.map +1 -0
- package/dist/jobs/definition.js +83 -0
- package/dist/jobs/definition.js.map +1 -0
- package/dist/jobs/index.d.ts +5 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +3 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/internal.d.ts +3 -0
- package/dist/jobs/internal.d.ts.map +1 -0
- package/dist/jobs/internal.js +4 -0
- package/dist/jobs/internal.js.map +1 -0
- package/dist/jobs/job.d.ts +149 -0
- package/dist/jobs/job.d.ts.map +1 -0
- package/dist/jobs/job.js +387 -0
- package/dist/jobs/job.js.map +1 -0
- package/dist/jobs/persisted.d.ts +38 -0
- package/dist/jobs/persisted.d.ts.map +1 -0
- package/dist/jobs/persisted.js +95 -0
- package/dist/jobs/persisted.js.map +1 -0
- package/dist/jobs/records.d.ts +231 -0
- package/dist/jobs/records.d.ts.map +1 -0
- package/dist/jobs/records.js +871 -0
- package/dist/jobs/records.js.map +1 -0
- package/dist/jobs/run-states.d.ts +69 -0
- package/dist/jobs/run-states.d.ts.map +1 -0
- package/dist/jobs/run-states.js +228 -0
- package/dist/jobs/run-states.js.map +1 -0
- package/dist/jobs/run.d.ts +117 -0
- package/dist/jobs/run.d.ts.map +1 -0
- package/dist/jobs/run.js +204 -0
- package/dist/jobs/run.js.map +1 -0
- package/dist/jobs/running.d.ts +44 -0
- package/dist/jobs/running.d.ts.map +1 -0
- package/dist/jobs/running.js +117 -0
- package/dist/jobs/running.js.map +1 -0
- package/dist/jobs/stored.d.ts +63 -0
- package/dist/jobs/stored.d.ts.map +1 -0
- package/dist/jobs/stored.js +55 -0
- package/dist/jobs/stored.js.map +1 -0
- package/dist/link/binary.d.ts +4 -0
- package/dist/link/binary.d.ts.map +1 -0
- package/dist/link/binary.js +544 -0
- package/dist/link/binary.js.map +1 -0
- package/dist/link/channel.d.ts +68 -0
- package/dist/link/channel.d.ts.map +1 -0
- package/dist/link/channel.js +215 -0
- package/dist/link/channel.js.map +1 -0
- package/dist/link/errors.d.ts +7 -0
- package/dist/link/errors.d.ts.map +1 -0
- package/dist/link/errors.js +21 -0
- package/dist/link/errors.js.map +1 -0
- package/dist/link/index.d.ts +8 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +8 -0
- package/dist/link/index.js.map +1 -0
- package/dist/link/internal.d.ts +9 -0
- package/dist/link/internal.d.ts.map +1 -0
- package/dist/link/internal.js +10 -0
- package/dist/link/internal.js.map +1 -0
- package/dist/link/ipc.d.ts +22 -0
- package/dist/link/ipc.d.ts.map +1 -0
- package/dist/link/ipc.js +64 -0
- package/dist/link/ipc.js.map +1 -0
- package/dist/link/link.d.ts +34 -0
- package/dist/link/link.d.ts.map +1 -0
- package/dist/link/link.js +87 -0
- package/dist/link/link.js.map +1 -0
- package/dist/link/message.d.ts +262 -0
- package/dist/link/message.d.ts.map +1 -0
- package/dist/link/message.js +156 -0
- package/dist/link/message.js.map +1 -0
- package/dist/link/part.d.ts +80 -0
- package/dist/link/part.d.ts.map +1 -0
- package/dist/link/part.js +165 -0
- package/dist/link/part.js.map +1 -0
- package/dist/link/text.d.ts +6 -0
- package/dist/link/text.d.ts.map +1 -0
- package/dist/link/text.js +355 -0
- package/dist/link/text.js.map +1 -0
- package/dist/link/values.d.ts +40 -0
- package/dist/link/values.d.ts.map +1 -0
- package/dist/link/values.js +121 -0
- package/dist/link/values.js.map +1 -0
- package/dist/link/websocket.d.ts +26 -0
- package/dist/link/websocket.d.ts.map +1 -0
- package/dist/link/websocket.js +91 -0
- package/dist/link/websocket.js.map +1 -0
- package/dist/node/app/app.d.ts +269 -0
- package/dist/node/app/app.d.ts.map +1 -0
- package/dist/node/app/app.js +513 -0
- package/dist/node/app/app.js.map +1 -0
- package/dist/node/app/archive.d.ts +37 -0
- package/dist/node/app/archive.d.ts.map +1 -0
- package/dist/node/app/archive.js +204 -0
- package/dist/node/app/archive.js.map +1 -0
- package/dist/node/app/blobs.d.ts +23 -0
- package/dist/node/app/blobs.d.ts.map +1 -0
- package/dist/node/app/blobs.js +64 -0
- package/dist/node/app/blobs.js.map +1 -0
- package/dist/node/app/data.d.ts +35 -0
- package/dist/node/app/data.d.ts.map +1 -0
- package/dist/node/app/data.js +44 -0
- package/dist/node/app/data.js.map +1 -0
- package/dist/node/app/ephemeral-sessions.d.ts +20 -0
- package/dist/node/app/ephemeral-sessions.d.ts.map +1 -0
- package/dist/node/app/ephemeral-sessions.js +69 -0
- package/dist/node/app/ephemeral-sessions.js.map +1 -0
- package/dist/node/app/ephemeral.d.ts +11 -0
- package/dist/node/app/ephemeral.d.ts.map +1 -0
- package/dist/node/app/ephemeral.js +34 -0
- package/dist/node/app/ephemeral.js.map +1 -0
- package/dist/node/app/files-copy.d.ts +13 -0
- package/dist/node/app/files-copy.d.ts.map +1 -0
- package/dist/node/app/files-copy.js +86 -0
- package/dist/node/app/files-copy.js.map +1 -0
- package/dist/node/app/files-entry.d.ts +4 -0
- package/dist/node/app/files-entry.d.ts.map +1 -0
- package/dist/node/app/files-entry.js +7 -0
- package/dist/node/app/files-entry.js.map +1 -0
- package/dist/node/app/files-index.d.ts +180 -0
- package/dist/node/app/files-index.d.ts.map +1 -0
- package/dist/node/app/files-index.js +535 -0
- package/dist/node/app/files-index.js.map +1 -0
- package/dist/node/app/files.d.ts +363 -0
- package/dist/node/app/files.d.ts.map +1 -0
- package/dist/node/app/files.js +368 -0
- package/dist/node/app/files.js.map +1 -0
- package/dist/node/app/folder-views.d.ts +21 -0
- package/dist/node/app/folder-views.d.ts.map +1 -0
- package/dist/node/app/folder-views.js +55 -0
- package/dist/node/app/folder-views.js.map +1 -0
- package/dist/node/app/index.d.ts +12 -0
- package/dist/node/app/index.d.ts.map +1 -0
- package/dist/node/app/index.js +15 -0
- package/dist/node/app/index.js.map +1 -0
- package/dist/node/app/info.d.ts +66 -0
- package/dist/node/app/info.d.ts.map +1 -0
- package/dist/node/app/info.js +37 -0
- package/dist/node/app/info.js.map +1 -0
- package/dist/node/app/invite.d.ts +5 -0
- package/dist/node/app/invite.d.ts.map +1 -0
- package/dist/node/app/invite.js +64 -0
- package/dist/node/app/invite.js.map +1 -0
- package/dist/node/app/layout.d.ts +36 -0
- package/dist/node/app/layout.d.ts.map +1 -0
- package/dist/node/app/layout.js +87 -0
- package/dist/node/app/layout.js.map +1 -0
- package/dist/node/app/owner.d.ts +31 -0
- package/dist/node/app/owner.d.ts.map +1 -0
- package/dist/node/app/owner.js +104 -0
- package/dist/node/app/owner.js.map +1 -0
- package/dist/node/app/pairing.d.ts +55 -0
- package/dist/node/app/pairing.d.ts.map +1 -0
- package/dist/node/app/pairing.js +183 -0
- package/dist/node/app/pairing.js.map +1 -0
- package/dist/node/app/secrets.d.ts +16 -0
- package/dist/node/app/secrets.d.ts.map +1 -0
- package/dist/node/app/secrets.js +72 -0
- package/dist/node/app/secrets.js.map +1 -0
- package/dist/node/app/sessions.d.ts +72 -0
- package/dist/node/app/sessions.d.ts.map +1 -0
- package/dist/node/app/sessions.js +222 -0
- package/dist/node/app/sessions.js.map +1 -0
- package/dist/node/app/tar.d.ts +24 -0
- package/dist/node/app/tar.d.ts.map +1 -0
- package/dist/node/app/tar.js +167 -0
- package/dist/node/app/tar.js.map +1 -0
- package/dist/node/app/uploads.d.ts +37 -0
- package/dist/node/app/uploads.d.ts.map +1 -0
- package/dist/node/app/uploads.js +157 -0
- package/dist/node/app/uploads.js.map +1 -0
- package/dist/node/app/users.d.ts +37 -0
- package/dist/node/app/users.d.ts.map +1 -0
- package/dist/node/app/users.js +62 -0
- package/dist/node/app/users.js.map +1 -0
- package/dist/node/app/worker.d.ts +18 -0
- package/dist/node/app/worker.d.ts.map +1 -0
- package/dist/node/app/worker.js +84 -0
- package/dist/node/app/worker.js.map +1 -0
- package/dist/node/compression.d.ts +7 -0
- package/dist/node/compression.d.ts.map +1 -0
- package/dist/node/compression.js +25 -0
- package/dist/node/compression.js.map +1 -0
- package/dist/node/http/admission.d.ts +63 -0
- package/dist/node/http/admission.d.ts.map +1 -0
- package/dist/node/http/admission.js +134 -0
- package/dist/node/http/admission.js.map +1 -0
- package/dist/node/http/authenticate.d.ts +21 -0
- package/dist/node/http/authenticate.d.ts.map +1 -0
- package/dist/node/http/authenticate.js +34 -0
- package/dist/node/http/authenticate.js.map +1 -0
- package/dist/node/http/cookies.d.ts +32 -0
- package/dist/node/http/cookies.d.ts.map +1 -0
- package/dist/node/http/cookies.js +70 -0
- package/dist/node/http/cookies.js.map +1 -0
- package/dist/node/http/file.d.ts +23 -0
- package/dist/node/http/file.d.ts.map +1 -0
- package/dist/node/http/file.js +94 -0
- package/dist/node/http/file.js.map +1 -0
- package/dist/node/http/headers.d.ts +37 -0
- package/dist/node/http/headers.d.ts.map +1 -0
- package/dist/node/http/headers.js +136 -0
- package/dist/node/http/headers.js.map +1 -0
- package/dist/node/http/http.d.ts +111 -0
- package/dist/node/http/http.d.ts.map +1 -0
- package/dist/node/http/http.js +524 -0
- package/dist/node/http/http.js.map +1 -0
- package/dist/node/http/incoming.d.ts +19 -0
- package/dist/node/http/incoming.d.ts.map +1 -0
- package/dist/node/http/incoming.js +31 -0
- package/dist/node/http/incoming.js.map +1 -0
- package/dist/node/http/index.d.ts +11 -0
- package/dist/node/http/index.d.ts.map +1 -0
- package/dist/node/http/index.js +12 -0
- package/dist/node/http/index.js.map +1 -0
- package/dist/node/http/node.d.ts +78 -0
- package/dist/node/http/node.d.ts.map +1 -0
- package/dist/node/http/node.js +291 -0
- package/dist/node/http/node.js.map +1 -0
- package/dist/node/http/request.d.ts +60 -0
- package/dist/node/http/request.d.ts.map +1 -0
- package/dist/node/http/request.js +118 -0
- package/dist/node/http/request.js.map +1 -0
- package/dist/node/http/response.d.ts +63 -0
- package/dist/node/http/response.d.ts.map +1 -0
- package/dist/node/http/response.js +202 -0
- package/dist/node/http/response.js.map +1 -0
- package/dist/node/http/router.d.ts +132 -0
- package/dist/node/http/router.d.ts.map +1 -0
- package/dist/node/http/router.js +267 -0
- package/dist/node/http/router.js.map +1 -0
- package/dist/node/http/upgrades.d.ts +61 -0
- package/dist/node/http/upgrades.d.ts.map +1 -0
- package/dist/node/http/upgrades.js +192 -0
- package/dist/node/http/upgrades.js.map +1 -0
- package/dist/node/plugins/base-inputs.d.ts +14 -0
- package/dist/node/plugins/base-inputs.d.ts.map +1 -0
- package/dist/node/plugins/base-inputs.js +33 -0
- package/dist/node/plugins/base-inputs.js.map +1 -0
- package/dist/node/plugins/build.d.ts +77 -0
- package/dist/node/plugins/build.d.ts.map +1 -0
- package/dist/node/plugins/build.js +576 -0
- package/dist/node/plugins/build.js.map +1 -0
- package/dist/node/plugins/css-modules.d.ts +13 -0
- package/dist/node/plugins/css-modules.d.ts.map +1 -0
- package/dist/node/plugins/css-modules.js +58 -0
- package/dist/node/plugins/css-modules.js.map +1 -0
- package/dist/node/plugins/discover.d.ts +67 -0
- package/dist/node/plugins/discover.d.ts.map +1 -0
- package/dist/node/plugins/discover.js +369 -0
- package/dist/node/plugins/discover.js.map +1 -0
- package/dist/node/plugins/evaluate.d.ts +33 -0
- package/dist/node/plugins/evaluate.d.ts.map +1 -0
- package/dist/node/plugins/evaluate.js +121 -0
- package/dist/node/plugins/evaluate.js.map +1 -0
- package/dist/node/plugins/index.d.ts +11 -0
- package/dist/node/plugins/index.d.ts.map +1 -0
- package/dist/node/plugins/index.js +13 -0
- package/dist/node/plugins/index.js.map +1 -0
- package/dist/node/plugins/install.d.ts +38 -0
- package/dist/node/plugins/install.d.ts.map +1 -0
- package/dist/node/plugins/install.js +213 -0
- package/dist/node/plugins/install.js.map +1 -0
- package/dist/node/plugins/plugins.d.ts +162 -0
- package/dist/node/plugins/plugins.d.ts.map +1 -0
- package/dist/node/plugins/plugins.js +244 -0
- package/dist/node/plugins/plugins.js.map +1 -0
- package/dist/node/plugins/runtime.d.ts +57 -0
- package/dist/node/plugins/runtime.d.ts.map +1 -0
- package/dist/node/plugins/runtime.js +92 -0
- package/dist/node/plugins/runtime.js.map +1 -0
- package/dist/node/plugins/stack.d.ts +16 -0
- package/dist/node/plugins/stack.d.ts.map +1 -0
- package/dist/node/plugins/stack.js +61 -0
- package/dist/node/plugins/stack.js.map +1 -0
- package/dist/node/plugins/testing.d.ts +58 -0
- package/dist/node/plugins/testing.d.ts.map +1 -0
- package/dist/node/plugins/testing.js +210 -0
- package/dist/node/plugins/testing.js.map +1 -0
- package/dist/node/plugins/watcher.d.ts +69 -0
- package/dist/node/plugins/watcher.d.ts.map +1 -0
- package/dist/node/plugins/watcher.js +622 -0
- package/dist/node/plugins/watcher.js.map +1 -0
- package/dist/node/surfaces/bundle.d.ts +31 -0
- package/dist/node/surfaces/bundle.d.ts.map +1 -0
- package/dist/node/surfaces/bundle.js +118 -0
- package/dist/node/surfaces/bundle.js.map +1 -0
- package/dist/node/surfaces/current.d.ts +17 -0
- package/dist/node/surfaces/current.d.ts.map +1 -0
- package/dist/node/surfaces/current.js +54 -0
- package/dist/node/surfaces/current.js.map +1 -0
- package/dist/node/surfaces/index.d.ts +6 -0
- package/dist/node/surfaces/index.d.ts.map +1 -0
- package/dist/node/surfaces/index.js +6 -0
- package/dist/node/surfaces/index.js.map +1 -0
- package/dist/node/surfaces/published.d.ts +27 -0
- package/dist/node/surfaces/published.d.ts.map +1 -0
- package/dist/node/surfaces/published.js +142 -0
- package/dist/node/surfaces/published.js.map +1 -0
- package/dist/node/surfaces/served.d.ts +15 -0
- package/dist/node/surfaces/served.d.ts.map +1 -0
- package/dist/node/surfaces/served.js +42 -0
- package/dist/node/surfaces/served.js.map +1 -0
- package/dist/node/surfaces/surface-build.d.ts +53 -0
- package/dist/node/surfaces/surface-build.d.ts.map +1 -0
- package/dist/node/surfaces/surface-build.js +105 -0
- package/dist/node/surfaces/surface-build.js.map +1 -0
- package/dist/node/surfaces/tui.d.ts +40 -0
- package/dist/node/surfaces/tui.d.ts.map +1 -0
- package/dist/node/surfaces/tui.js +55 -0
- package/dist/node/surfaces/tui.js.map +1 -0
- package/dist/node/surfaces/web.d.ts +56 -0
- package/dist/node/surfaces/web.d.ts.map +1 -0
- package/dist/node/surfaces/web.js +108 -0
- package/dist/node/surfaces/web.js.map +1 -0
- package/dist/node/tui/actions.d.ts +49 -0
- package/dist/node/tui/actions.d.ts.map +1 -0
- package/dist/node/tui/actions.js +195 -0
- package/dist/node/tui/actions.js.map +1 -0
- package/dist/node/tui/credentials.d.ts +17 -0
- package/dist/node/tui/credentials.d.ts.map +1 -0
- package/dist/node/tui/credentials.js +54 -0
- package/dist/node/tui/credentials.js.map +1 -0
- package/dist/node/tui/filter.d.ts +5 -0
- package/dist/node/tui/filter.d.ts.map +1 -0
- package/dist/node/tui/filter.js +79 -0
- package/dist/node/tui/filter.js.map +1 -0
- package/dist/node/tui/index.d.ts +6 -0
- package/dist/node/tui/index.d.ts.map +1 -0
- package/dist/node/tui/index.js +6 -0
- package/dist/node/tui/index.js.map +1 -0
- package/dist/node/tui/launcher.d.ts +40 -0
- package/dist/node/tui/launcher.d.ts.map +1 -0
- package/dist/node/tui/launcher.js +439 -0
- package/dist/node/tui/launcher.js.map +1 -0
- package/dist/node/tui/pipe.d.ts +18 -0
- package/dist/node/tui/pipe.d.ts.map +1 -0
- package/dist/node/tui/pipe.js +134 -0
- package/dist/node/tui/pipe.js.map +1 -0
- package/dist/node/tui/sandbox.d.ts +54 -0
- package/dist/node/tui/sandbox.d.ts.map +1 -0
- package/dist/node/tui/sandbox.js +431 -0
- package/dist/node/tui/sandbox.js.map +1 -0
- package/dist/node/workers/base.d.ts +30 -0
- package/dist/node/workers/base.d.ts.map +1 -0
- package/dist/node/workers/base.js +255 -0
- package/dist/node/workers/base.js.map +1 -0
- package/dist/node/workers/child.d.ts +4 -0
- package/dist/node/workers/child.d.ts.map +1 -0
- package/dist/node/workers/child.js +6 -0
- package/dist/node/workers/child.js.map +1 -0
- package/dist/node/workers/control.d.ts +83 -0
- package/dist/node/workers/control.d.ts.map +1 -0
- package/dist/node/workers/control.js +77 -0
- package/dist/node/workers/control.js.map +1 -0
- package/dist/node/workers/index.d.ts +4 -0
- package/dist/node/workers/index.d.ts.map +1 -0
- package/dist/node/workers/index.js +7 -0
- package/dist/node/workers/index.js.map +1 -0
- package/dist/node/workers/lock.d.ts +30 -0
- package/dist/node/workers/lock.d.ts.map +1 -0
- package/dist/node/workers/lock.js +180 -0
- package/dist/node/workers/lock.js.map +1 -0
- package/dist/node/workers/main.d.ts +46 -0
- package/dist/node/workers/main.d.ts.map +1 -0
- package/dist/node/workers/main.js +230 -0
- package/dist/node/workers/main.js.map +1 -0
- package/dist/node/workers/process.d.ts +42 -0
- package/dist/node/workers/process.d.ts.map +1 -0
- package/dist/node/workers/process.js +125 -0
- package/dist/node/workers/process.js.map +1 -0
- package/dist/node/workers/workers.d.ts +122 -0
- package/dist/node/workers/workers.d.ts.map +1 -0
- package/dist/node/workers/workers.js +677 -0
- package/dist/node/workers/workers.js.map +1 -0
- 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/react/hooks.d.ts +43 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +82 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +4 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/stores.d.ts +9 -0
- package/dist/react/stores.d.ts.map +1 -0
- package/dist/react/stores.js +37 -0
- package/dist/react/stores.js.map +1 -0
- package/dist/registries/contribution.d.ts +50 -0
- package/dist/registries/contribution.d.ts.map +1 -0
- package/dist/registries/contribution.js +129 -0
- package/dist/registries/contribution.js.map +1 -0
- package/dist/registries/entries.d.ts +18 -0
- package/dist/registries/entries.d.ts.map +1 -0
- package/dist/registries/entries.js +42 -0
- package/dist/registries/entries.js.map +1 -0
- package/dist/registries/index.d.ts +3 -0
- package/dist/registries/index.d.ts.map +1 -0
- package/dist/registries/index.js +5 -0
- package/dist/registries/index.js.map +1 -0
- package/dist/registries/internal.d.ts +4 -0
- package/dist/registries/internal.d.ts.map +1 -0
- package/dist/registries/internal.js +5 -0
- package/dist/registries/internal.js.map +1 -0
- package/dist/registries/record.d.ts +115 -0
- package/dist/registries/record.d.ts.map +1 -0
- package/dist/registries/record.js +283 -0
- package/dist/registries/record.js.map +1 -0
- package/dist/registries/registry.d.ts +74 -0
- package/dist/registries/registry.d.ts.map +1 -0
- package/dist/registries/registry.js +14 -0
- package/dist/registries/registry.js.map +1 -0
- package/dist/registries/value.d.ts +48 -0
- package/dist/registries/value.d.ts.map +1 -0
- package/dist/registries/value.js +224 -0
- package/dist/registries/value.js.map +1 -0
- package/dist/remote/calls.d.ts +25 -0
- package/dist/remote/calls.d.ts.map +1 -0
- package/dist/remote/calls.js +62 -0
- package/dist/remote/calls.js.map +1 -0
- package/dist/remote/consumer.d.ts +43 -0
- package/dist/remote/consumer.d.ts.map +1 -0
- package/dist/remote/consumer.js +350 -0
- package/dist/remote/consumer.js.map +1 -0
- package/dist/remote/hold.d.ts +141 -0
- package/dist/remote/hold.d.ts.map +1 -0
- package/dist/remote/hold.js +579 -0
- package/dist/remote/hold.js.map +1 -0
- package/dist/remote/host-link.d.ts +77 -0
- package/dist/remote/host-link.d.ts.map +1 -0
- package/dist/remote/host-link.js +184 -0
- package/dist/remote/host-link.js.map +1 -0
- package/dist/remote/internal.d.ts +6 -0
- package/dist/remote/internal.d.ts.map +1 -0
- package/dist/remote/internal.js +6 -0
- package/dist/remote/internal.js.map +1 -0
- package/dist/remote/path.d.ts +46 -0
- package/dist/remote/path.d.ts.map +1 -0
- package/dist/remote/path.js +73 -0
- package/dist/remote/path.js.map +1 -0
- package/dist/remote/provider.d.ts +89 -0
- package/dist/remote/provider.d.ts.map +1 -0
- package/dist/remote/provider.js +597 -0
- package/dist/remote/provider.js.map +1 -0
- package/dist/remote/relay.d.ts +69 -0
- package/dist/remote/relay.d.ts.map +1 -0
- package/dist/remote/relay.js +219 -0
- package/dist/remote/relay.js.map +1 -0
- package/dist/remote/remote-object.d.ts +138 -0
- package/dist/remote/remote-object.d.ts.map +1 -0
- package/dist/remote/remote-object.js +492 -0
- package/dist/remote/remote-object.js.map +1 -0
- package/dist/remote/replica.d.ts +59 -0
- package/dist/remote/replica.d.ts.map +1 -0
- package/dist/remote/replica.js +125 -0
- package/dist/remote/replica.js.map +1 -0
- 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 +13 -2
- package/dist/sqlite/node.d.ts.map +1 -1
- package/dist/sqlite/node.js +31 -8
- package/dist/sqlite/node.js.map +1 -1
- package/dist/state/batch.d.ts +64 -0
- package/dist/state/batch.d.ts.map +1 -0
- package/dist/state/batch.js +164 -0
- package/dist/state/batch.js.map +1 -0
- package/dist/state/derive.d.ts +52 -0
- package/dist/state/derive.d.ts.map +1 -0
- package/dist/state/derive.js +182 -0
- package/dist/state/derive.js.map +1 -0
- package/dist/state/index.d.ts +6 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +4 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/internal.d.ts +6 -0
- package/dist/state/internal.d.ts.map +1 -0
- package/dist/state/internal.js +8 -0
- package/dist/state/internal.js.map +1 -0
- package/dist/state/native-source.d.ts +106 -0
- package/dist/state/native-source.d.ts.map +1 -0
- package/dist/state/native-source.js +240 -0
- package/dist/state/native-source.js.map +1 -0
- package/dist/state/watchable.d.ts +114 -0
- package/dist/state/watchable.d.ts.map +1 -0
- package/dist/state/watchable.js +156 -0
- package/dist/state/watchable.js.map +1 -0
- package/dist/state/writable.d.ts +32 -0
- package/dist/state/writable.d.ts.map +1 -0
- package/dist/state/writable.js +49 -0
- package/dist/state/writable.js.map +1 -0
- package/dist/store/adapter.d.ts +67 -0
- package/dist/store/adapter.d.ts.map +1 -0
- package/dist/store/adapter.js +118 -0
- package/dist/store/adapter.js.map +1 -0
- package/dist/store/allocator.d.ts +17 -0
- package/dist/store/allocator.d.ts.map +1 -0
- package/dist/store/allocator.js +30 -0
- package/dist/store/allocator.js.map +1 -0
- package/dist/store/applier.d.ts +8 -0
- package/dist/store/applier.d.ts.map +1 -0
- package/dist/store/applier.js +375 -0
- package/dist/store/applier.js.map +1 -0
- package/dist/store/apply-batch.d.ts +12 -0
- package/dist/store/apply-batch.d.ts.map +1 -0
- package/dist/store/apply-batch.js +83 -0
- package/dist/store/apply-batch.js.map +1 -0
- package/dist/store/archive.d.ts +32 -0
- package/dist/store/archive.d.ts.map +1 -0
- package/dist/store/archive.js +130 -0
- package/dist/store/archive.js.map +1 -0
- package/dist/store/backend.d.ts +10 -0
- package/dist/store/backend.d.ts.map +1 -0
- package/dist/store/backend.js +15 -0
- package/dist/store/backend.js.map +1 -0
- package/dist/store/catalog.d.ts +24 -0
- package/dist/store/catalog.d.ts.map +1 -0
- package/dist/store/catalog.js +17 -0
- package/dist/store/catalog.js.map +1 -0
- package/dist/store/claims.d.ts +23 -0
- package/dist/store/claims.d.ts.map +1 -0
- package/dist/store/claims.js +65 -0
- package/dist/store/claims.js.map +1 -0
- package/dist/store/columns.d.ts +77 -0
- package/dist/store/columns.d.ts.map +1 -0
- package/dist/store/columns.js +77 -0
- package/dist/store/columns.js.map +1 -0
- package/dist/store/engine.d.ts +176 -0
- package/dist/store/engine.d.ts.map +1 -0
- package/dist/store/engine.js +283 -0
- package/dist/store/engine.js.map +1 -0
- package/dist/store/evaluate.d.ts +17 -0
- package/dist/store/evaluate.d.ts.map +1 -0
- package/dist/store/evaluate.js +128 -0
- package/dist/store/evaluate.js.map +1 -0
- package/dist/store/export.d.ts +17 -0
- package/dist/store/export.d.ts.map +1 -0
- package/dist/store/export.js +200 -0
- package/dist/store/export.js.map +1 -0
- package/dist/store/expression.d.ts +150 -0
- package/dist/store/expression.d.ts.map +1 -0
- package/dist/store/expression.js +268 -0
- package/dist/store/expression.js.map +1 -0
- package/dist/store/import.d.ts +10 -0
- package/dist/store/import.d.ts.map +1 -0
- package/dist/store/import.js +276 -0
- package/dist/store/import.js.map +1 -0
- package/dist/store/index.d.ts +16 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +13 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json-column.d.ts +33 -0
- package/dist/store/json-column.d.ts.map +1 -0
- package/dist/store/json-column.js +62 -0
- package/dist/store/json-column.js.map +1 -0
- package/dist/store/jsonl.d.ts +9 -0
- package/dist/store/jsonl.d.ts.map +1 -0
- package/dist/store/jsonl.js +61 -0
- package/dist/store/jsonl.js.map +1 -0
- package/dist/store/live-query.d.ts +108 -0
- package/dist/store/live-query.d.ts.map +1 -0
- package/dist/store/live-query.js +254 -0
- package/dist/store/live-query.js.map +1 -0
- package/dist/store/outbox.d.ts +26 -0
- package/dist/store/outbox.d.ts.map +1 -0
- package/dist/store/outbox.js +80 -0
- package/dist/store/outbox.js.map +1 -0
- package/dist/store/query.d.ts +39 -0
- package/dist/store/query.d.ts.map +1 -0
- package/dist/store/query.js +97 -0
- package/dist/store/query.js.map +1 -0
- package/dist/store/refusal.d.ts +15 -0
- package/dist/store/refusal.d.ts.map +1 -0
- package/dist/store/refusal.js +36 -0
- package/dist/store/refusal.js.map +1 -0
- package/dist/store/rows.d.ts +80 -0
- package/dist/store/rows.d.ts.map +1 -0
- package/dist/store/rows.js +183 -0
- package/dist/store/rows.js.map +1 -0
- package/dist/store/schema.d.ts +25 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +115 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/sql.d.ts +73 -0
- package/dist/store/sql.d.ts.map +1 -0
- package/dist/store/sql.js +234 -0
- package/dist/store/sql.js.map +1 -0
- package/dist/store/step.d.ts +50 -0
- package/dist/store/step.d.ts.map +1 -0
- package/dist/store/step.js +52 -0
- package/dist/store/step.js.map +1 -0
- package/dist/store/store.d.ts +171 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +818 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/table-changes.d.ts +29 -0
- package/dist/store/table-changes.d.ts.map +1 -0
- package/dist/store/table-changes.js +102 -0
- package/dist/store/table-changes.js.map +1 -0
- package/dist/store/table-evolve.d.ts +74 -0
- package/dist/store/table-evolve.d.ts.map +1 -0
- package/dist/store/table-evolve.js +201 -0
- package/dist/store/table-evolve.js.map +1 -0
- package/dist/store/table-handle.d.ts +73 -0
- package/dist/store/table-handle.d.ts.map +1 -0
- package/dist/store/table-handle.js +101 -0
- package/dist/store/table-handle.js.map +1 -0
- package/dist/store/table-history.d.ts +75 -0
- package/dist/store/table-history.d.ts.map +1 -0
- package/dist/store/table-history.js +42 -0
- package/dist/store/table-history.js.map +1 -0
- package/dist/store/table-migration.d.ts +16 -0
- package/dist/store/table-migration.d.ts.map +1 -0
- package/dist/store/table-migration.js +202 -0
- package/dist/store/table-migration.js.map +1 -0
- package/dist/store/table-writes.d.ts +125 -0
- package/dist/store/table-writes.d.ts.map +1 -0
- package/dist/store/table-writes.js +170 -0
- package/dist/store/table-writes.js.map +1 -0
- package/dist/store/table.d.ts +80 -0
- package/dist/store/table.d.ts.map +1 -0
- package/dist/store/table.js +103 -0
- package/dist/store/table.js.map +1 -0
- package/dist/store/text.d.ts +14 -0
- package/dist/store/text.d.ts.map +1 -0
- package/dist/store/text.js +51 -0
- package/dist/store/text.js.map +1 -0
- package/dist/store/writes.d.ts +5 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +4 -0
- package/dist/store/writes.js.map +1 -0
- package/dist/surfaces/active-language.d.ts +20 -0
- package/dist/surfaces/active-language.d.ts.map +1 -0
- package/dist/surfaces/active-language.js +78 -0
- package/dist/surfaces/active-language.js.map +1 -0
- package/dist/surfaces/active-theme.d.ts +16 -0
- package/dist/surfaces/active-theme.d.ts.map +1 -0
- package/dist/surfaces/active-theme.js +47 -0
- package/dist/surfaces/active-theme.js.map +1 -0
- package/dist/surfaces/client.d.ts +96 -0
- package/dist/surfaces/client.d.ts.map +1 -0
- package/dist/surfaces/client.js +264 -0
- package/dist/surfaces/client.js.map +1 -0
- package/dist/surfaces/connection.d.ts +49 -0
- package/dist/surfaces/connection.d.ts.map +1 -0
- package/dist/surfaces/connection.js +142 -0
- package/dist/surfaces/connection.js.map +1 -0
- package/dist/surfaces/format.d.ts +5 -0
- package/dist/surfaces/format.d.ts.map +1 -0
- package/dist/surfaces/format.js +37 -0
- package/dist/surfaces/format.js.map +1 -0
- package/dist/surfaces/index.d.ts +15 -0
- package/dist/surfaces/index.d.ts.map +1 -0
- package/dist/surfaces/index.js +18 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/language.d.ts +53 -0
- package/dist/surfaces/language.d.ts.map +1 -0
- package/dist/surfaces/language.js +74 -0
- package/dist/surfaces/language.js.map +1 -0
- package/dist/surfaces/loaded.d.ts +42 -0
- package/dist/surfaces/loaded.d.ts.map +1 -0
- package/dist/surfaces/loaded.js +116 -0
- package/dist/surfaces/loaded.js.map +1 -0
- package/dist/surfaces/locale-choice.d.ts +25 -0
- package/dist/surfaces/locale-choice.d.ts.map +1 -0
- package/dist/surfaces/locale-choice.js +14 -0
- package/dist/surfaces/locale-choice.js.map +1 -0
- package/dist/surfaces/messages.d.ts +67 -0
- package/dist/surfaces/messages.d.ts.map +1 -0
- package/dist/surfaces/messages.js +112 -0
- package/dist/surfaces/messages.js.map +1 -0
- package/dist/surfaces/page-state.d.ts +14 -0
- package/dist/surfaces/page-state.d.ts.map +1 -0
- package/dist/surfaces/page-state.js +43 -0
- package/dist/surfaces/page-state.js.map +1 -0
- package/dist/surfaces/preference.d.ts +32 -0
- package/dist/surfaces/preference.d.ts.map +1 -0
- package/dist/surfaces/preference.js +72 -0
- package/dist/surfaces/preference.js.map +1 -0
- package/dist/surfaces/registered.d.ts +33 -0
- package/dist/surfaces/registered.d.ts.map +1 -0
- package/dist/surfaces/registered.js +51 -0
- package/dist/surfaces/registered.js.map +1 -0
- package/dist/surfaces/scripts.d.ts +84 -0
- package/dist/surfaces/scripts.d.ts.map +1 -0
- package/dist/surfaces/scripts.js +28 -0
- package/dist/surfaces/scripts.js.map +1 -0
- package/dist/surfaces/theme-choice.d.ts +31 -0
- package/dist/surfaces/theme-choice.d.ts.map +1 -0
- package/dist/surfaces/theme-choice.js +18 -0
- package/dist/surfaces/theme-choice.js.map +1 -0
- package/dist/surfaces/themes.d.ts +43 -0
- package/dist/surfaces/themes.d.ts.map +1 -0
- package/dist/surfaces/themes.js +110 -0
- package/dist/surfaces/themes.js.map +1 -0
- package/dist/surfaces/translations.d.ts +29 -0
- package/dist/surfaces/translations.d.ts.map +1 -0
- package/dist/surfaces/translations.js +57 -0
- package/dist/surfaces/translations.js.map +1 -0
- package/dist/sync/batch.d.ts +18 -0
- package/dist/sync/batch.d.ts.map +1 -0
- package/dist/sync/batch.js +125 -0
- package/dist/sync/batch.js.map +1 -0
- package/dist/sync/client.d.ts +166 -0
- package/dist/sync/client.d.ts.map +1 -0
- package/dist/sync/client.js +438 -0
- package/dist/sync/client.js.map +1 -0
- package/dist/sync/files.d.ts +46 -0
- package/dist/sync/files.d.ts.map +1 -0
- package/dist/sync/files.js +13 -0
- package/dist/sync/files.js.map +1 -0
- package/dist/sync/filesystem.d.ts +37 -0
- package/dist/sync/filesystem.d.ts.map +1 -0
- package/dist/sync/filesystem.js +185 -0
- package/dist/sync/filesystem.js.map +1 -0
- package/dist/sync/index.d.ts +8 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +9 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/lines.d.ts +18 -0
- package/dist/sync/lines.d.ts.map +1 -0
- package/dist/sync/lines.js +46 -0
- package/dist/sync/lines.js.map +1 -0
- package/dist/sync/remote.d.ts +130 -0
- package/dist/sync/remote.d.ts.map +1 -0
- package/dist/sync/remote.js +46 -0
- package/dist/sync/remote.js.map +1 -0
- package/dist/sync/state.d.ts +17 -0
- package/dist/sync/state.d.ts.map +1 -0
- package/dist/sync/state.js +40 -0
- package/dist/sync/state.js.map +1 -0
- package/dist/telemetry-ingest/batch.d.ts +70 -0
- package/dist/telemetry-ingest/batch.d.ts.map +1 -0
- package/dist/telemetry-ingest/batch.js +110 -0
- package/dist/telemetry-ingest/batch.js.map +1 -0
- package/dist/telemetry-ingest/facet.d.ts +21 -0
- package/dist/telemetry-ingest/facet.d.ts.map +1 -0
- package/dist/telemetry-ingest/facet.js +96 -0
- package/dist/telemetry-ingest/facet.js.map +1 -0
- package/dist/telemetry-ingest/index.d.ts +5 -0
- package/dist/telemetry-ingest/index.d.ts.map +1 -0
- package/dist/telemetry-ingest/index.js +8 -0
- package/dist/telemetry-ingest/index.js.map +1 -0
- package/dist/telemetry-ingest/recorder.d.ts +50 -0
- package/dist/telemetry-ingest/recorder.d.ts.map +1 -0
- package/dist/telemetry-ingest/recorder.js +298 -0
- package/dist/telemetry-ingest/recorder.js.map +1 -0
- package/dist/telemetry-ingest/sender.d.ts +14 -0
- package/dist/telemetry-ingest/sender.d.ts.map +1 -0
- package/dist/telemetry-ingest/sender.js +64 -0
- package/dist/telemetry-ingest/sender.js.map +1 -0
- package/dist/telemetry-sqlite/index.d.ts +13 -4
- package/dist/telemetry-sqlite/index.d.ts.map +1 -1
- package/dist/telemetry-sqlite/index.js +81 -241
- package/dist/telemetry-sqlite/index.js.map +1 -1
- package/dist/telemetry-sqlite/node.d.ts +13 -0
- package/dist/telemetry-sqlite/node.d.ts.map +1 -0
- package/dist/telemetry-sqlite/node.js +27 -0
- package/dist/telemetry-sqlite/node.js.map +1 -0
- package/dist/telemetry-sqlite/schema.d.ts +9 -0
- package/dist/telemetry-sqlite/schema.d.ts.map +1 -0
- package/dist/telemetry-sqlite/schema.js +61 -0
- package/dist/telemetry-sqlite/schema.js.map +1 -0
- package/dist/telemetry-sqlite/store.d.ts +3 -0
- package/dist/telemetry-sqlite/store.d.ts.map +1 -1
- package/dist/telemetry-sqlite/store.js +24 -13
- package/dist/telemetry-sqlite/store.js.map +1 -1
- package/dist/telemetry.d.ts +937 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +470 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tui/bridge.d.ts +112 -0
- package/dist/tui/bridge.d.ts.map +1 -0
- package/dist/tui/bridge.js +9 -0
- package/dist/tui/bridge.js.map +1 -0
- package/dist/tui/channel.d.ts +44 -0
- package/dist/tui/channel.d.ts.map +1 -0
- package/dist/tui/channel.js +150 -0
- package/dist/tui/channel.js.map +1 -0
- package/dist/tui/frames.d.ts +5 -0
- package/dist/tui/frames.d.ts.map +1 -0
- package/dist/tui/frames.js +52 -0
- package/dist/tui/frames.js.map +1 -0
- package/dist/tui/index.d.ts +7 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/runtime.d.ts +46 -0
- package/dist/tui/runtime.d.ts.map +1 -0
- package/dist/tui/runtime.js +101 -0
- package/dist/tui/runtime.js.map +1 -0
- package/dist/tui/scope.d.ts +46 -0
- package/dist/tui/scope.d.ts.map +1 -0
- package/dist/tui/scope.js +141 -0
- package/dist/tui/scope.js.map +1 -0
- package/dist/tui/terminal.d.ts +15 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +37 -0
- package/dist/tui/terminal.js.map +1 -0
- package/dist/tui/theme.d.ts +17 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +38 -0
- package/dist/tui/theme.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/web/environment.d.ts +4 -0
- package/dist/web/environment.d.ts.map +1 -0
- package/dist/web/environment.js +37 -0
- package/dist/web/environment.js.map +1 -0
- package/dist/web/index.d.ts +5 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +7 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/language.d.ts +7 -0
- package/dist/web/language.d.ts.map +1 -0
- package/dist/web/language.js +21 -0
- package/dist/web/language.js.map +1 -0
- package/dist/web/page.d.ts +29 -0
- package/dist/web/page.d.ts.map +1 -0
- package/dist/web/page.js +92 -0
- package/dist/web/page.js.map +1 -0
- package/dist/web/scripts.d.ts +23 -0
- package/dist/web/scripts.d.ts.map +1 -0
- package/dist/web/scripts.js +50 -0
- package/dist/web/scripts.js.map +1 -0
- package/dist/web/styles.d.ts +17 -0
- package/dist/web/styles.d.ts.map +1 -0
- package/dist/web/styles.js +218 -0
- package/dist/web/styles.js.map +1 -0
- package/dist/web/themes.d.ts +6 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +31 -0
- package/dist/web/themes.js.map +1 -0
- package/docs/benchmarks.md +1036 -0
- package/docs/decisions.md +3436 -0
- package/docs/dependencies/book.md +1671 -0
- package/docs/dependencies/index.html +2641 -0
- package/docs/dependencies/model.md +330 -0
- package/docs/design.md +3065 -0
- package/docs/durable-observers/book.md +432 -0
- package/docs/durable-observers/index.html +517 -0
- package/docs/flow-control/book.md +333 -0
- package/docs/flow-control/fold/index.html +265 -0
- package/docs/flow-control/index.html +548 -0
- package/docs/flow-control/window/index.html +228 -0
- package/docs/guide-plugins-hosts/book.md +957 -0
- package/docs/guide-plugins-hosts/index.html +952 -0
- package/docs/http-workers/book.md +378 -0
- package/docs/http-workers/index.html +515 -0
- package/docs/i18n/book.md +217 -0
- package/docs/i18n/index.html +344 -0
- package/docs/layer-1.md +311 -0
- package/docs/layer-2.md +216 -0
- package/docs/p3-features/README.md +6 -0
- package/docs/p3-features/book.md +478 -0
- package/docs/plugin-authoring.md +276 -0
- package/docs/plugin-model/book.md +186 -0
- package/docs/plugin-model/index.html +310 -0
- package/docs/plugin-primer/book.md +273 -0
- package/docs/plugin-primer/index.html +430 -0
- package/docs/slice-1.md +236 -0
- package/docs/slice-10.md +288 -0
- package/docs/slice-11.md +114 -0
- package/docs/slice-12.md +132 -0
- package/docs/slice-13.md +121 -0
- package/docs/slice-2.md +174 -0
- package/docs/slice-3a.md +296 -0
- package/docs/slice-3b.md +197 -0
- package/docs/slice-4.md +146 -0
- package/docs/slice-4a.md +418 -0
- package/docs/slice-4b.md +208 -0
- package/docs/slice-5.md +281 -0
- package/docs/slice-6a.md +676 -0
- package/docs/slice-6b.md +332 -0
- package/docs/slice-7a.md +130 -0
- package/docs/slice-7b/book.md +608 -0
- package/docs/slice-7b/index.html +842 -0
- package/docs/slice-7b.md +255 -0
- package/docs/slice-7c.md +165 -0
- package/docs/slice-8.md +194 -0
- package/docs/slice-9.md +110 -0
- package/docs/slices.md +241 -0
- package/docs/store/book.md +670 -0
- package/docs/store/index.html +861 -0
- package/docs/store/walkthrough.md +193 -0
- package/docs/theming/book.md +223 -0
- package/docs/theming/index.html +371 -0
- package/docs/tutorial/book.md +2169 -0
- package/docs/tutorial/index.html +2112 -0
- package/docs/tutorial/screens/click-after.png +0 -0
- package/docs/tutorial/screens/click-before.png +0 -0
- package/docs/tutorial/screens/edited.png +0 -0
- package/docs/tutorial/screens/french.png +0 -0
- package/docs/tutorial/screens/harbor.png +0 -0
- package/docs/tutorial/screens/page.png +0 -0
- package/docs/tutorial/screens/traces-ada.png +0 -0
- package/docs/tutorial/screens/traces.png +0 -0
- package/package.json +114 -20
- package/src/delta/README.md +69 -0
- package/dist/cell.d.ts +0 -122
- package/dist/cell.d.ts.map +0 -1
- package/dist/cell.js +0 -356
- package/dist/cell.js.map +0 -1
- package/dist/cluster.d.ts +0 -27
- package/dist/cluster.d.ts.map +0 -1
- package/dist/cluster.js +0 -230
- package/dist/cluster.js.map +0 -1
- package/dist/connection.d.ts +0 -270
- package/dist/connection.d.ts.map +0 -1
- package/dist/connection.js +0 -1216
- package/dist/connection.js.map +0 -1
- package/dist/contract.d.ts +0 -208
- package/dist/contract.d.ts.map +0 -1
- package/dist/contract.js +0 -246
- package/dist/contract.js.map +0 -1
- package/dist/declare.d.ts +0 -33
- package/dist/declare.d.ts.map +0 -1
- package/dist/declare.js +0 -2
- package/dist/declare.js.map +0 -1
- package/dist/errors.d.ts +0 -28
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -59
- package/dist/errors.js.map +0 -1
- package/dist/host.d.ts +0 -348
- package/dist/host.d.ts.map +0 -1
- package/dist/host.js +0 -1000
- package/dist/host.js.map +0 -1
- package/dist/link.d.ts +0 -107
- package/dist/link.d.ts.map +0 -1
- package/dist/link.js +0 -355
- package/dist/link.js.map +0 -1
- package/dist/loader.d.ts +0 -4
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -73
- package/dist/loader.js.map +0 -1
- package/dist/manager.d.ts +0 -115
- package/dist/manager.d.ts.map +0 -1
- package/dist/manager.js +0 -345
- package/dist/manager.js.map +0 -1
- package/dist/node.d.ts +0 -4
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -4
- package/dist/node.js.map +0 -1
- package/dist/object.d.ts +0 -438
- package/dist/object.d.ts.map +0 -1
- package/dist/object.js +0 -1571
- package/dist/object.js.map +0 -1
- package/dist/publish.d.ts +0 -5
- package/dist/publish.d.ts.map +0 -1
- package/dist/publish.js +0 -40
- package/dist/publish.js.map +0 -1
- package/dist/registry.d.ts +0 -25
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -6
- package/dist/registry.js.map +0 -1
- package/dist/reload.d.ts +0 -126
- package/dist/reload.d.ts.map +0 -1
- package/dist/reload.js +0 -653
- package/dist/reload.js.map +0 -1
- package/dist/remote.d.ts +0 -165
- package/dist/remote.d.ts.map +0 -1
- package/dist/remote.js +0 -612
- package/dist/remote.js.map +0 -1
- package/dist/schema.d.ts +0 -21
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js +0 -228
- package/dist/schema.js.map +0 -1
- package/dist/state.d.ts +0 -92
- package/dist/state.d.ts.map +0 -1
- package/dist/state.js +0 -287
- package/dist/state.js.map +0 -1
- package/dist/types.d.ts +0 -88
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/websocket.d.ts +0 -15
- package/dist/websocket.d.ts.map +0 -1
- package/dist/websocket.js +0 -16
- package/dist/websocket.js.map +0 -1
- package/dist/wire.d.ts +0 -216
- package/dist/wire.d.ts.map +0 -1
- package/dist/wire.js +0 -165
- package/dist/wire.js.map +0 -1
- package/docs/guide.md +0 -814
- package/docs/spec.md +0 -288
- package/docs/tutorial.md +0 -931
package/dist/watch.js
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
// Watch handles: the watch types and the one implementation of their lifecycle, for JSON and native values.
|
|
2
|
+
import { withoutAbortSignal } from "./context/index.js";
|
|
3
|
+
import { PendingOps } from "./delta/index.js";
|
|
4
|
+
const STOPPED = { kind: "stopped" };
|
|
5
|
+
const ABORTED = { kind: "aborted" };
|
|
6
|
+
const ENDED = { kind: "ended" };
|
|
7
|
+
/**
|
|
8
|
+
* The lifecycle both handles share: serialized delivery and termination. A source feeds it and ends it explicitly;
|
|
9
|
+
* termination drops every reference the watch holds into its source, so a stopped watch that is still referenced keeps
|
|
10
|
+
* nothing but its last value alive. Subclasses keep what is pending, each call apart from its frame's context, so the
|
|
11
|
+
* call a listener gets carries nothing but its data.
|
|
12
|
+
*/
|
|
13
|
+
class WatchLifecycle {
|
|
14
|
+
#detach;
|
|
15
|
+
#report;
|
|
16
|
+
#closed = Promise.withResolvers();
|
|
17
|
+
#value;
|
|
18
|
+
#listener;
|
|
19
|
+
#started = false;
|
|
20
|
+
#scheduled = false;
|
|
21
|
+
#running = false;
|
|
22
|
+
/** Set by `endAfterDelivery()`: the source sends nothing more; the watch ends `ended` once it delivered the rest. */
|
|
23
|
+
#ending = false;
|
|
24
|
+
/** Set once, by `#terminate()`. */
|
|
25
|
+
#end;
|
|
26
|
+
#abortSignal;
|
|
27
|
+
#abortListener;
|
|
28
|
+
constructor(value, detach, report) {
|
|
29
|
+
this.#value = value;
|
|
30
|
+
this.#detach = detach;
|
|
31
|
+
this.#report = report;
|
|
32
|
+
}
|
|
33
|
+
get value() {
|
|
34
|
+
return this.#value;
|
|
35
|
+
}
|
|
36
|
+
get closed() {
|
|
37
|
+
return this.#closed.promise;
|
|
38
|
+
}
|
|
39
|
+
start(listener) {
|
|
40
|
+
if (this.#started)
|
|
41
|
+
throw new Error("Watch is already started");
|
|
42
|
+
if (this.#end !== undefined)
|
|
43
|
+
throw new Error("Watch is stopped");
|
|
44
|
+
this.#started = true;
|
|
45
|
+
this.#listener = listener;
|
|
46
|
+
this.#schedule();
|
|
47
|
+
}
|
|
48
|
+
stop() {
|
|
49
|
+
this.#terminate(STOPPED);
|
|
50
|
+
return this.#closed.promise;
|
|
51
|
+
}
|
|
52
|
+
/** End the watch `aborted` when `signal` aborts; installed once. */
|
|
53
|
+
observeAbort(signal) {
|
|
54
|
+
if (this.#abortSignal !== undefined)
|
|
55
|
+
throw new Error("Watch abort is already installed");
|
|
56
|
+
if (this.#end !== undefined)
|
|
57
|
+
return;
|
|
58
|
+
this.#abortSignal = signal;
|
|
59
|
+
this.#abortListener = () => this.abort();
|
|
60
|
+
signal.addEventListener("abort", this.#abortListener, { once: true });
|
|
61
|
+
if (signal.aborted)
|
|
62
|
+
this.abort();
|
|
63
|
+
}
|
|
64
|
+
/** End the watch `aborted`: its acquisition context was aborted. */
|
|
65
|
+
abort() {
|
|
66
|
+
this.#terminate(ABORTED);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* End the watch with `end` at once, dropping what is pending: the source closed (`ended`), or failed for good
|
|
70
|
+
* (`failed`). A failure the source may recover from is a `failed` call instead (`fail()`).
|
|
71
|
+
*/
|
|
72
|
+
end(end) {
|
|
73
|
+
this.#terminate(end);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The source sends nothing more after its last frames, such as a retirement: take no more frames, deliver what is
|
|
77
|
+
* pending, then end `ended`, after the running call returns, if one runs. Until then the watch stays attached, so
|
|
78
|
+
* `end()`, `stop()`, an abort, and a throwing listener still end it first; a watch never started keeps what is
|
|
79
|
+
* pending until one of them or `start()`.
|
|
80
|
+
*/
|
|
81
|
+
endAfterDelivery() {
|
|
82
|
+
if (this.#end !== undefined || this.#ending)
|
|
83
|
+
return;
|
|
84
|
+
this.#ending = true;
|
|
85
|
+
if (!this.#running && this.pendingContext === undefined)
|
|
86
|
+
this.#terminate(ENDED);
|
|
87
|
+
}
|
|
88
|
+
/** Whether the watch still takes frames: it has not ended, and its source has not ended. */
|
|
89
|
+
get open() {
|
|
90
|
+
return this.#end === undefined && !this.#ending;
|
|
91
|
+
}
|
|
92
|
+
/** Something became pending: deliver it once started, never inline. */
|
|
93
|
+
pending() {
|
|
94
|
+
if (this.#started)
|
|
95
|
+
this.#schedule();
|
|
96
|
+
}
|
|
97
|
+
#schedule() {
|
|
98
|
+
if (this.#scheduled || this.#running || this.#end !== undefined)
|
|
99
|
+
return;
|
|
100
|
+
this.#scheduled = true;
|
|
101
|
+
queueMicrotask(() => {
|
|
102
|
+
this.#scheduled = false;
|
|
103
|
+
void this.#drain();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Deliver until nothing is pending; what arrives during a call is taken after it returns. A watch whose source ended
|
|
108
|
+
* ends once it delivered the rest and its last call returned.
|
|
109
|
+
*/
|
|
110
|
+
async #drain() {
|
|
111
|
+
if (this.#running || this.#end !== undefined || !this.#started)
|
|
112
|
+
return;
|
|
113
|
+
this.#running = true;
|
|
114
|
+
try {
|
|
115
|
+
while (this.#end === undefined) {
|
|
116
|
+
const listener = this.#listener;
|
|
117
|
+
if (listener === undefined)
|
|
118
|
+
break;
|
|
119
|
+
const frameContext = this.pendingContext;
|
|
120
|
+
if (frameContext === undefined) {
|
|
121
|
+
if (this.#ending)
|
|
122
|
+
this.#terminate(ENDED);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
const call = this.next();
|
|
126
|
+
if (call.kind === "value")
|
|
127
|
+
this.#value = call.value;
|
|
128
|
+
try {
|
|
129
|
+
await listener(call, withoutAbortSignal(frameContext));
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (this.#end === undefined) {
|
|
133
|
+
this.#report?.(error);
|
|
134
|
+
this.#terminate({ kind: "listener_error", error: toError(error) });
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
this.#running = false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* End the watch, once: detach, drop what is pending and every reference into the source, and settle `closed`. A
|
|
146
|
+
* callback already running keeps running.
|
|
147
|
+
*/
|
|
148
|
+
#terminate(end) {
|
|
149
|
+
if (this.#end !== undefined)
|
|
150
|
+
return;
|
|
151
|
+
this.#end = end;
|
|
152
|
+
const detach = this.#detach;
|
|
153
|
+
this.#detach = undefined;
|
|
154
|
+
this.#report = undefined;
|
|
155
|
+
this.#listener = undefined;
|
|
156
|
+
this.release();
|
|
157
|
+
if (this.#abortListener !== undefined)
|
|
158
|
+
this.#abortSignal?.removeEventListener("abort", this.#abortListener);
|
|
159
|
+
this.#abortSignal = undefined;
|
|
160
|
+
this.#abortListener = undefined;
|
|
161
|
+
detach?.();
|
|
162
|
+
this.#closed.resolve(end);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function toError(error) {
|
|
166
|
+
if (error instanceof Error)
|
|
167
|
+
return error;
|
|
168
|
+
try {
|
|
169
|
+
return new Error(String(error));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return new Error(Object.prototype.toString.call(error));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The watch handle of a JSON source. Frames that arrive before `start()` or while the listener runs wait in one
|
|
177
|
+
* `PendingOps` queue; the next call gets the newest value, the folded ops of every frame since the previous call (or
|
|
178
|
+
* `[["r", newest]]` after the queue overflowed), `retired` when any of them was a retirement, and the newest frame's
|
|
179
|
+
* context. A frame delivered alone is passed on as the source made it. A failure (`fail()`) drops the pending frames and
|
|
180
|
+
* waits as one `failed` call; a value after it replaces it, and the first value call after a failure is `[["r",
|
|
181
|
+
* value]]`. `detach` unsubscribes it from its source on termination; `report` gets a listener's throw, which also ends
|
|
182
|
+
* the watch.
|
|
183
|
+
*/
|
|
184
|
+
export class Watch extends WatchLifecycle {
|
|
185
|
+
#ops = new PendingOps();
|
|
186
|
+
/**
|
|
187
|
+
* The source's call while it is the only frame pending: the call passes it on, with no allocation. A second frame
|
|
188
|
+
* drops it, so its ops stay only as long as `PendingOps` keeps them (folded, or dropped by an overflow).
|
|
189
|
+
*/
|
|
190
|
+
#lone;
|
|
191
|
+
/** The newest frame's value and context, while a call is pending; the context also marks that one is. */
|
|
192
|
+
#newestValue;
|
|
193
|
+
#newestContext;
|
|
194
|
+
/** A pending frame was a retirement. */
|
|
195
|
+
#retired = false;
|
|
196
|
+
/** The newest frame was a failure: the next call is this. */
|
|
197
|
+
#failure;
|
|
198
|
+
/** A failure came after the last value call: the next value call replaces the root, and ops are not kept. */
|
|
199
|
+
#replace = false;
|
|
200
|
+
/**
|
|
201
|
+
* Queue the frame `call`. A value's ops turn the previous value into it, and `retired` says the document the watch
|
|
202
|
+
* follows was retired, which the next value call reports however many frames it folds; a failure is `fail()`.
|
|
203
|
+
*/
|
|
204
|
+
advance(call, context) {
|
|
205
|
+
if (call.kind === "failed") {
|
|
206
|
+
this.#fail(call, context);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (!this.open)
|
|
210
|
+
return;
|
|
211
|
+
if (this.#replace) {
|
|
212
|
+
this.#failure = undefined;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.#lone = this.#newestContext === undefined ? call : undefined;
|
|
216
|
+
this.#ops.push(call.ops);
|
|
217
|
+
}
|
|
218
|
+
this.#newestValue = call.value;
|
|
219
|
+
this.#newestContext = context;
|
|
220
|
+
if (call.retired)
|
|
221
|
+
this.#retired = true;
|
|
222
|
+
this.pending();
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Queue a failure the source may recover from: the pending frames are dropped (`value` keeps the last delivered
|
|
226
|
+
* value), the listener gets `{ kind: "failed", error }`, and the next value arrives as `[["r", value]]`.
|
|
227
|
+
*/
|
|
228
|
+
fail(error, context) {
|
|
229
|
+
this.#fail({ kind: "failed", error }, context);
|
|
230
|
+
}
|
|
231
|
+
#fail(call, context) {
|
|
232
|
+
if (!this.open)
|
|
233
|
+
return;
|
|
234
|
+
this.#ops.take();
|
|
235
|
+
this.#lone = undefined;
|
|
236
|
+
this.#newestValue = undefined;
|
|
237
|
+
this.#failure = call;
|
|
238
|
+
this.#newestContext = context;
|
|
239
|
+
this.#replace = true;
|
|
240
|
+
this.pending();
|
|
241
|
+
}
|
|
242
|
+
get pendingContext() {
|
|
243
|
+
return this.#newestContext;
|
|
244
|
+
}
|
|
245
|
+
next() {
|
|
246
|
+
// After a failure the call is that failure, or the value after it; otherwise one field read decides.
|
|
247
|
+
if (this.#replace)
|
|
248
|
+
return this.#nextAfterFailure();
|
|
249
|
+
const lone = this.#lone;
|
|
250
|
+
// Set with the context, which says a frame is pending.
|
|
251
|
+
const value = this.#newestValue;
|
|
252
|
+
const batch = this.#ops.take();
|
|
253
|
+
const retired = this.#retired;
|
|
254
|
+
this.#lone = undefined;
|
|
255
|
+
this.#newestValue = undefined;
|
|
256
|
+
this.#newestContext = undefined;
|
|
257
|
+
this.#retired = false;
|
|
258
|
+
// One frame never folds or overflows: its call is the listener's.
|
|
259
|
+
if (lone !== undefined)
|
|
260
|
+
return lone;
|
|
261
|
+
// Values of a JSON watch are JSON; `T` is the source's narrower or wider view of them (e.g. a typed document).
|
|
262
|
+
const ops = batch.kind === "ops" ? batch.ops : [["r", value]];
|
|
263
|
+
return { kind: "value", value, ops, retired };
|
|
264
|
+
}
|
|
265
|
+
/** The pending failure, or the value after one as a root replacement (no ops were kept since the failure). */
|
|
266
|
+
#nextAfterFailure() {
|
|
267
|
+
const failure = this.#failure;
|
|
268
|
+
this.#newestContext = undefined;
|
|
269
|
+
if (failure !== undefined) {
|
|
270
|
+
this.#failure = undefined;
|
|
271
|
+
return failure;
|
|
272
|
+
}
|
|
273
|
+
const value = this.#newestValue;
|
|
274
|
+
const retired = this.#retired;
|
|
275
|
+
this.#newestValue = undefined;
|
|
276
|
+
this.#retired = false;
|
|
277
|
+
this.#replace = false;
|
|
278
|
+
return { kind: "value", value, ops: [["r", value]], retired };
|
|
279
|
+
}
|
|
280
|
+
release() {
|
|
281
|
+
this.#ops.take();
|
|
282
|
+
this.#lone = undefined;
|
|
283
|
+
this.#newestValue = undefined;
|
|
284
|
+
this.#newestContext = undefined;
|
|
285
|
+
this.#retired = false;
|
|
286
|
+
this.#failure = undefined;
|
|
287
|
+
this.#replace = false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/** Maximum values retained behind one unavailable native watch listener. */
|
|
291
|
+
const MAX_PENDING_NATIVE_VALUES = 100;
|
|
292
|
+
/**
|
|
293
|
+
* The watch handle of a native source: every value in order, one call each; past 100 pending values they collapse to
|
|
294
|
+
* one, `replace()` or by default the newest value. A failure (`fail()`) drops the pending values and waits as one
|
|
295
|
+
* `failed` call; a value after it replaces it. `detach` and `report` as for `Watch`.
|
|
296
|
+
*/
|
|
297
|
+
export class NativeWatch extends WatchLifecycle {
|
|
298
|
+
/**
|
|
299
|
+
* Pending values in order, each followed by its frame's context, from `#head` on. Values are kept raw: the call a
|
|
300
|
+
* listener gets is built when it is taken, so a value an overflow drops costs no object. A read index instead of
|
|
301
|
+
* `shift()` takes a backlog in constant time per value; taken slots are cleared at once, the array is emptied once
|
|
302
|
+
* all of it was taken, and its taken prefix dropped after 100 values.
|
|
303
|
+
*/
|
|
304
|
+
#pending = [];
|
|
305
|
+
#head = 0;
|
|
306
|
+
#replace;
|
|
307
|
+
/** A pending failure and its frame's context; nothing else is pending meanwhile. */
|
|
308
|
+
#failure;
|
|
309
|
+
#failureContext;
|
|
310
|
+
constructor(value, detach, report, replace) {
|
|
311
|
+
super(value, detach, report);
|
|
312
|
+
this.#replace = replace;
|
|
313
|
+
}
|
|
314
|
+
/** Queue `value`, the source's new value; it replaces a pending failure. */
|
|
315
|
+
advance(value, context) {
|
|
316
|
+
if (!this.open)
|
|
317
|
+
return;
|
|
318
|
+
this.#failure = undefined;
|
|
319
|
+
this.#failureContext = undefined;
|
|
320
|
+
if (this.#pending.length - this.#head < 2 * MAX_PENDING_NATIVE_VALUES) {
|
|
321
|
+
this.#pending.push(value, context);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
this.#pending.length = 0;
|
|
325
|
+
this.#head = 0;
|
|
326
|
+
this.#pending.push(this.#replace === undefined ? value : this.#replace(), context);
|
|
327
|
+
}
|
|
328
|
+
this.pending();
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Queue a failure the source may recover from: the pending values are dropped (`value` keeps the last delivered
|
|
332
|
+
* value), and the listener gets `{ kind: "failed", error }`.
|
|
333
|
+
*/
|
|
334
|
+
fail(error, context) {
|
|
335
|
+
if (!this.open)
|
|
336
|
+
return;
|
|
337
|
+
this.#pending.length = 0;
|
|
338
|
+
this.#head = 0;
|
|
339
|
+
this.#failure = { kind: "failed", error };
|
|
340
|
+
this.#failureContext = context;
|
|
341
|
+
this.pending();
|
|
342
|
+
}
|
|
343
|
+
get pendingContext() {
|
|
344
|
+
// The slot after a value holds its context; past the end it is empty.
|
|
345
|
+
return this.#failureContext ?? this.#pending[this.#head + 1];
|
|
346
|
+
}
|
|
347
|
+
next() {
|
|
348
|
+
const failure = this.#failure;
|
|
349
|
+
if (failure !== undefined) {
|
|
350
|
+
this.#failure = undefined;
|
|
351
|
+
this.#failureContext = undefined;
|
|
352
|
+
return failure;
|
|
353
|
+
}
|
|
354
|
+
const head = this.#head;
|
|
355
|
+
const pending = this.#pending;
|
|
356
|
+
// The slot at `#head` holds a value.
|
|
357
|
+
const value = pending[head];
|
|
358
|
+
if (head + 2 === pending.length) {
|
|
359
|
+
pending.length = 0;
|
|
360
|
+
this.#head = 0;
|
|
361
|
+
}
|
|
362
|
+
else if (head + 2 >= 2 * MAX_PENDING_NATIVE_VALUES) {
|
|
363
|
+
// A backlog that never drains: drop the taken prefix, at most once per 100 values, so the array stays bounded.
|
|
364
|
+
pending.copyWithin(0, head + 2);
|
|
365
|
+
pending.length -= head + 2;
|
|
366
|
+
this.#head = 0;
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
pending[head] = undefined;
|
|
370
|
+
pending[head + 1] = undefined;
|
|
371
|
+
this.#head = head + 2;
|
|
372
|
+
}
|
|
373
|
+
return { kind: "value", value };
|
|
374
|
+
}
|
|
375
|
+
release() {
|
|
376
|
+
this.#pending.length = 0;
|
|
377
|
+
this.#head = 0;
|
|
378
|
+
this.#replace = undefined;
|
|
379
|
+
this.#failure = undefined;
|
|
380
|
+
this.#failureContext = undefined;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,OAAO,EAAgB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAW,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8FvD,MAAM,OAAO,GAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9C,MAAM,OAAO,GAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9C,MAAM,KAAK,GAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAK1C;;;;;GAKG;AACH,MAAe,cAAc;IAC5B,OAAO,CAA2B;IAClC,OAAO,CAAyC;IACvC,OAAO,GAAG,OAAO,CAAC,aAAa,EAAY,CAAC;IACrD,MAAM,CAAI;IACV,SAAS,CAA0B;IACnC,QAAQ,GAAG,KAAK,CAAC;IACjB,UAAU,GAAG,KAAK,CAAC;IACnB,QAAQ,GAAG,KAAK,CAAC;IACjB,qHAAqH;IACrH,OAAO,GAAG,KAAK,CAAC;IAChB,mCAAmC;IACnC,IAAI,CAAuB;IAC3B,YAAY,CAA0B;IACtC,cAAc,CAA2B;IAEzC,YAAY,KAAQ,EAAE,MAAkB,EAAE,MAAgC;QACzE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAqB;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC;IAED,IAAI;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,oEAAoE;IACpE,YAAY,CAAC,MAAmB;QAC/B,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACzF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,oEAAoE;IACpE,KAAK;QACJ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,GAAa;QAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,gBAAgB;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IAED,4FAA4F;IAC5F,IAAc,IAAI;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACjD,CAAC;IAWD,uEAAuE;IAC7D,OAAO;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,SAAS;QACR,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACxE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,cAAc,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACX,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChC,IAAI,QAAQ,KAAK,SAAS;oBAAE,MAAM;gBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;gBACzC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACzC,MAAM;gBACP,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;oBAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;gBACpD,IAAI,CAAC;oBACJ,MAAM,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC7B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;wBACtB,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACpE,CAAC;oBACD,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,GAAa;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5G,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,MAAM,EAAE,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACD;AAED,SAAS,OAAO,CAAC,KAAc;IAC9B,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC;QACJ,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,KAAS,SAAQ,cAA+B;IACnD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC;;;OAGG;IACH,KAAK,CAAgC;IACrC,yGAAyG;IACzG,YAAY,CAAgB;IAC5B,cAAc,CAAsB;IACpC,wCAAwC;IACxC,QAAQ,GAAG,KAAK,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAyB;IACjC,6GAA6G;IAC7G,QAAQ,GAAG,KAAK,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,IAAkB,EAAE,OAAgB;QAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAc,EAAE,OAAgB;QACpC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAgB,EAAE,OAAgB;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,IAAc,cAAc;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAES,IAAI;QACb,qGAAqG;QACrG,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,uDAAuD;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAiB,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,kEAAkE;QAClE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,+GAA+G;QAC/G,MAAM,GAAG,GAAkB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAkB,CAAC,CAAC,CAAC;QAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,8GAA8G;IAC9G,iBAAiB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAiB,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5E,CAAC;IAES,OAAO;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACvB,CAAC;CACD;AAKD,4EAA4E;AAC5E,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;GAIG;AACH,MAAM,OAAO,WAAe,SAAQ,cAAqC;IACxE;;;;;OAKG;IACM,QAAQ,GAAmC,EAAE,CAAC;IACvD,KAAK,GAAG,CAAC,CAAC;IACV,QAAQ,CAAwB;IAChC,oFAAoF;IACpF,QAAQ,CAAyB;IACjC,eAAe,CAAsB;IAErC,YAAY,KAAQ,EAAE,MAAkB,EAAE,MAAgC,EAAE,OAAiB;QAC5F,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,4EAA4E;IAC5E,OAAO,CAAC,KAAQ,EAAE,OAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,yBAAyB,EAAE,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAc,EAAE,OAAgB;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,IAAc,cAAc;QAC3B,sEAAsE;QACtE,OAAO,IAAI,CAAC,eAAe,IAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAyB,CAAC;IACvF,CAAC;IAES,IAAI;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,qCAAqC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAM,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,yBAAyB,EAAE,CAAC;YACtD,+GAA+G;YAC/G,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC1B,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAES,OAAO;QAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IAClC,CAAC;CACD","sourcesContent":["// Watch handles: the watch types and the one implementation of their lifecycle, for JSON and native values.\nimport { type Context, withoutAbortSignal } from \"./context/index.ts\";\nimport { type Op, PendingOps } from \"./delta/index.ts\";\nimport type { JsonValue } from \"./json.ts\";\n\n/**\n * Terminal result of one watch, tagged by `kind`. A watch ends only for good; a failure its source recovers from is a\n * `failed` call (`WatchCall`), and the watch stays open.\n *\n * - `stopped`: `stop()` was called.\n * - `aborted`: the context the watch was acquired with was aborted.\n * - `ended`: the source closed (its owner ended or closed).\n * - `listener_error`: the listener threw or rejected with `error`.\n * - `failed`: the source failed for good with `error`.\n */\nexport type WatchEnd =\n\t| { readonly kind: \"stopped\" | \"aborted\" | \"ended\" }\n\t| { readonly kind: \"listener_error\"; readonly error: Error }\n\t| { readonly kind: \"failed\"; readonly error: unknown };\n\n/**\n * One call of a JSON watch's listener, and one frame a source hands its watch, tagged by `kind`:\n *\n * - `value`: the newest value, the ops that turn the previous value into it, and whether the document the watch follows\n * was retired since the previous value call. A retirement does not end the watch: `value` is then what the address\n * shows after it (the source decides; a Durable document keeps the last value the watch was given, with no ops), and a\n * document created there later arrives as `[[\"r\", value]]`, possibly in the same call.\n * - `failed`: the source cannot compute its value now, with `error`; the watch stays open, and the next value arrives as\n * `[[\"r\", value]]`. `WatchHandle.value` keeps the last value.\n *\n * Plain data: the frame's context is the listener's second argument, never part of the call.\n */\nexport type WatchCall<T> =\n\t| { readonly kind: \"value\"; readonly value: T; readonly ops: readonly Op[]; readonly retired: boolean }\n\t| { readonly kind: \"failed\"; readonly error: unknown };\n\n/** One call of a native watch's listener: the new value, or a failure its source may recover from, as in `WatchCall`. */\nexport type NativeWatchCall<T> =\n\t| { readonly kind: \"value\"; readonly value: T }\n\t| { readonly kind: \"failed\"; readonly error: unknown };\n\n/**\n * Serialized observation of an immutable value: one listener call at a time; changes made meanwhile arrive folded into\n * the next call.\n */\nexport interface WatchHandle<T> {\n\t/** Acquisition revision before start; latest delivered immutable revision afterward (a `failed` call keeps it). */\n\treadonly value: T;\n\t/** Install the sole asynchronous listener. Never invokes it inline. */\n\tstart(listener: (call: WatchCall<T>, context: Context) => Promise<void>): void;\n\t/** Idempotently stop future callbacks and return this watch's terminal result. */\n\tstop(): Promise<WatchEnd>;\n\t/** Settle when the watch terminates; an already-running callback remains caller-owned. */\n\treadonly closed: Promise<WatchEnd>;\n}\n\n/**\n * A value that changes and can be watched: documents, derives, members of references. Values are immutable by\n * convention (JSON for state); each watch starts at the current value and then gets the changes, folded while its\n * listener is busy.\n */\nexport interface Watchable<T> {\n\t/** The current value. */\n\treadonly value: T;\n\t/** A watch holding the current value, then its changes; aborting the context ends it. */\n\twatch(context: Context): Promise<WatchHandle<T>>;\n}\n\n/**\n * An in-process value that changes and can be watched (it may hold anything, errors and functions included): a change\n * is a new value by identity, delivered without ops.\n */\nexport interface NativeWatchable<T> {\n\t/** The current value. */\n\treadonly value: T;\n\t/** A watch holding the current value, then one frame per new value; aborting the context ends it. */\n\twatch(context: Context): Promise<NativeWatchHandle<T>>;\n}\n\n/**\n * Serialized observation of an in-process value: as `WatchHandle`, but each new value is its own call, in order, without\n * ops.\n */\nexport interface NativeWatchHandle<T> {\n\t/** Acquisition value before start; latest delivered value afterward (a `failed` call keeps it). */\n\treadonly value: T;\n\t/** Install the sole asynchronous listener. Never invokes it inline. */\n\tstart(listener: (call: NativeWatchCall<T>, context: Context) => Promise<void>): void;\n\t/** Idempotently stop future callbacks and return this watch's terminal result. */\n\tstop(): Promise<WatchEnd>;\n\t/** Settle when the watch terminates; an already-running callback remains caller-owned. */\n\treadonly closed: Promise<WatchEnd>;\n}\n\ntype Listener<C> = (call: C, context: Context) => Promise<void>;\n\nconst STOPPED: WatchEnd = { kind: \"stopped\" };\nconst ABORTED: WatchEnd = { kind: \"aborted\" };\nconst ENDED: WatchEnd = { kind: \"ended\" };\n\n/** A failure call, as both call types have it. */\ntype FailedCall = { readonly kind: \"failed\"; readonly error: unknown };\n\n/**\n * The lifecycle both handles share: serialized delivery and termination. A source feeds it and ends it explicitly;\n * termination drops every reference the watch holds into its source, so a stopped watch that is still referenced keeps\n * nothing but its last value alive. Subclasses keep what is pending, each call apart from its frame's context, so the\n * call a listener gets carries nothing but its data.\n */\nabstract class WatchLifecycle<T, C extends { readonly kind: \"value\"; readonly value: T } | FailedCall> {\n\t#detach: (() => void) | undefined;\n\t#report: ((error: unknown) => void) | undefined;\n\treadonly #closed = Promise.withResolvers<WatchEnd>();\n\t#value: T;\n\t#listener: Listener<C> | undefined;\n\t#started = false;\n\t#scheduled = false;\n\t#running = false;\n\t/** Set by `endAfterDelivery()`: the source sends nothing more; the watch ends `ended` once it delivered the rest. */\n\t#ending = false;\n\t/** Set once, by `#terminate()`. */\n\t#end: WatchEnd | undefined;\n\t#abortSignal: AbortSignal | undefined;\n\t#abortListener: (() => void) | undefined;\n\n\tconstructor(value: T, detach: () => void, report: (error: unknown) => void) {\n\t\tthis.#value = value;\n\t\tthis.#detach = detach;\n\t\tthis.#report = report;\n\t}\n\n\tget value(): T {\n\t\treturn this.#value;\n\t}\n\n\tget closed(): Promise<WatchEnd> {\n\t\treturn this.#closed.promise;\n\t}\n\n\tstart(listener: Listener<C>): void {\n\t\tif (this.#started) throw new Error(\"Watch is already started\");\n\t\tif (this.#end !== undefined) throw new Error(\"Watch is stopped\");\n\t\tthis.#started = true;\n\t\tthis.#listener = listener;\n\t\tthis.#schedule();\n\t}\n\n\tstop(): Promise<WatchEnd> {\n\t\tthis.#terminate(STOPPED);\n\t\treturn this.#closed.promise;\n\t}\n\n\t/** End the watch `aborted` when `signal` aborts; installed once. */\n\tobserveAbort(signal: AbortSignal): void {\n\t\tif (this.#abortSignal !== undefined) throw new Error(\"Watch abort is already installed\");\n\t\tif (this.#end !== undefined) return;\n\t\tthis.#abortSignal = signal;\n\t\tthis.#abortListener = () => this.abort();\n\t\tsignal.addEventListener(\"abort\", this.#abortListener, { once: true });\n\t\tif (signal.aborted) this.abort();\n\t}\n\n\t/** End the watch `aborted`: its acquisition context was aborted. */\n\tabort(): void {\n\t\tthis.#terminate(ABORTED);\n\t}\n\n\t/**\n\t * End the watch with `end` at once, dropping what is pending: the source closed (`ended`), or failed for good\n\t * (`failed`). A failure the source may recover from is a `failed` call instead (`fail()`).\n\t */\n\tend(end: WatchEnd): void {\n\t\tthis.#terminate(end);\n\t}\n\n\t/**\n\t * The source sends nothing more after its last frames, such as a retirement: take no more frames, deliver what is\n\t * pending, then end `ended`, after the running call returns, if one runs. Until then the watch stays attached, so\n\t * `end()`, `stop()`, an abort, and a throwing listener still end it first; a watch never started keeps what is\n\t * pending until one of them or `start()`.\n\t */\n\tendAfterDelivery(): void {\n\t\tif (this.#end !== undefined || this.#ending) return;\n\t\tthis.#ending = true;\n\t\tif (!this.#running && this.pendingContext === undefined) this.#terminate(ENDED);\n\t}\n\n\t/** Whether the watch still takes frames: it has not ended, and its source has not ended. */\n\tprotected get open(): boolean {\n\t\treturn this.#end === undefined && !this.#ending;\n\t}\n\n\t/** The context of the newest frame the next call covers, or undefined when nothing is pending. */\n\tprotected abstract get pendingContext(): Context | undefined;\n\n\t/** Take the next call; called only while something is pending. */\n\tprotected abstract next(): C;\n\n\t/** Drop everything pending and every reference into the source; called once, on termination. */\n\tprotected abstract release(): void;\n\n\t/** Something became pending: deliver it once started, never inline. */\n\tprotected pending(): void {\n\t\tif (this.#started) this.#schedule();\n\t}\n\n\t#schedule(): void {\n\t\tif (this.#scheduled || this.#running || this.#end !== undefined) return;\n\t\tthis.#scheduled = true;\n\t\tqueueMicrotask(() => {\n\t\t\tthis.#scheduled = false;\n\t\t\tvoid this.#drain();\n\t\t});\n\t}\n\n\t/**\n\t * Deliver until nothing is pending; what arrives during a call is taken after it returns. A watch whose source ended\n\t * ends once it delivered the rest and its last call returned.\n\t */\n\tasync #drain(): Promise<void> {\n\t\tif (this.#running || this.#end !== undefined || !this.#started) return;\n\t\tthis.#running = true;\n\t\ttry {\n\t\t\twhile (this.#end === undefined) {\n\t\t\t\tconst listener = this.#listener;\n\t\t\t\tif (listener === undefined) break;\n\t\t\t\tconst frameContext = this.pendingContext;\n\t\t\t\tif (frameContext === undefined) {\n\t\t\t\t\tif (this.#ending) this.#terminate(ENDED);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst call = this.next();\n\t\t\t\tif (call.kind === \"value\") this.#value = call.value;\n\t\t\t\ttry {\n\t\t\t\t\tawait listener(call, withoutAbortSignal(frameContext));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.#end === undefined) {\n\t\t\t\t\t\tthis.#report?.(error);\n\t\t\t\t\t\tthis.#terminate({ kind: \"listener_error\", error: toError(error) });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#running = false;\n\t\t}\n\t}\n\n\t/**\n\t * End the watch, once: detach, drop what is pending and every reference into the source, and settle `closed`. A\n\t * callback already running keeps running.\n\t */\n\t#terminate(end: WatchEnd): void {\n\t\tif (this.#end !== undefined) return;\n\t\tthis.#end = end;\n\t\tconst detach = this.#detach;\n\t\tthis.#detach = undefined;\n\t\tthis.#report = undefined;\n\t\tthis.#listener = undefined;\n\t\tthis.release();\n\t\tif (this.#abortListener !== undefined) this.#abortSignal?.removeEventListener(\"abort\", this.#abortListener);\n\t\tthis.#abortSignal = undefined;\n\t\tthis.#abortListener = undefined;\n\t\tdetach?.();\n\t\tthis.#closed.resolve(end);\n\t}\n}\n\nfunction toError(error: unknown): Error {\n\tif (error instanceof Error) return error;\n\ttry {\n\t\treturn new Error(String(error));\n\t} catch {\n\t\treturn new Error(Object.prototype.toString.call(error));\n\t}\n}\n\n/**\n * The watch handle of a JSON source. Frames that arrive before `start()` or while the listener runs wait in one\n * `PendingOps` queue; the next call gets the newest value, the folded ops of every frame since the previous call (or\n * `[[\"r\", newest]]` after the queue overflowed), `retired` when any of them was a retirement, and the newest frame's\n * context. A frame delivered alone is passed on as the source made it. A failure (`fail()`) drops the pending frames and\n * waits as one `failed` call; a value after it replaces it, and the first value call after a failure is `[[\"r\",\n * value]]`. `detach` unsubscribes it from its source on termination; `report` gets a listener's throw, which also ends\n * the watch.\n */\nexport class Watch<T> extends WatchLifecycle<T, WatchCall<T>> implements WatchHandle<T> {\n\treadonly #ops = new PendingOps();\n\t/**\n\t * The source's call while it is the only frame pending: the call passes it on, with no allocation. A second frame\n\t * drops it, so its ops stay only as long as `PendingOps` keeps them (folded, or dropped by an overflow).\n\t */\n\t#lone: WatchValueCall<T> | undefined;\n\t/** The newest frame's value and context, while a call is pending; the context also marks that one is. */\n\t#newestValue: T | undefined;\n\t#newestContext: Context | undefined;\n\t/** A pending frame was a retirement. */\n\t#retired = false;\n\t/** The newest frame was a failure: the next call is this. */\n\t#failure: FailedCall | undefined;\n\t/** A failure came after the last value call: the next value call replaces the root, and ops are not kept. */\n\t#replace = false;\n\n\t/**\n\t * Queue the frame `call`. A value's ops turn the previous value into it, and `retired` says the document the watch\n\t * follows was retired, which the next value call reports however many frames it folds; a failure is `fail()`.\n\t */\n\tadvance(call: WatchCall<T>, context: Context): void {\n\t\tif (call.kind === \"failed\") {\n\t\t\tthis.#fail(call, context);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.open) return;\n\t\tif (this.#replace) {\n\t\t\tthis.#failure = undefined;\n\t\t} else {\n\t\t\tthis.#lone = this.#newestContext === undefined ? call : undefined;\n\t\t\tthis.#ops.push(call.ops);\n\t\t}\n\t\tthis.#newestValue = call.value;\n\t\tthis.#newestContext = context;\n\t\tif (call.retired) this.#retired = true;\n\t\tthis.pending();\n\t}\n\n\t/**\n\t * Queue a failure the source may recover from: the pending frames are dropped (`value` keeps the last delivered\n\t * value), the listener gets `{ kind: \"failed\", error }`, and the next value arrives as `[[\"r\", value]]`.\n\t */\n\tfail(error: unknown, context: Context): void {\n\t\tthis.#fail({ kind: \"failed\", error }, context);\n\t}\n\n\t#fail(call: FailedCall, context: Context): void {\n\t\tif (!this.open) return;\n\t\tthis.#ops.take();\n\t\tthis.#lone = undefined;\n\t\tthis.#newestValue = undefined;\n\t\tthis.#failure = call;\n\t\tthis.#newestContext = context;\n\t\tthis.#replace = true;\n\t\tthis.pending();\n\t}\n\n\tprotected get pendingContext(): Context | undefined {\n\t\treturn this.#newestContext;\n\t}\n\n\tprotected next(): WatchCall<T> {\n\t\t// After a failure the call is that failure, or the value after it; otherwise one field read decides.\n\t\tif (this.#replace) return this.#nextAfterFailure();\n\t\tconst lone = this.#lone;\n\t\t// Set with the context, which says a frame is pending.\n\t\tconst value = this.#newestValue as T;\n\t\tconst batch = this.#ops.take();\n\t\tconst retired = this.#retired;\n\t\tthis.#lone = undefined;\n\t\tthis.#newestValue = undefined;\n\t\tthis.#newestContext = undefined;\n\t\tthis.#retired = false;\n\t\t// One frame never folds or overflows: its call is the listener's.\n\t\tif (lone !== undefined) return lone;\n\t\t// Values of a JSON watch are JSON; `T` is the source's narrower or wider view of them (e.g. a typed document).\n\t\tconst ops: readonly Op[] = batch.kind === \"ops\" ? batch.ops : [[\"r\", value as JsonValue]];\n\t\treturn { kind: \"value\", value, ops, retired };\n\t}\n\n\t/** The pending failure, or the value after one as a root replacement (no ops were kept since the failure). */\n\t#nextAfterFailure(): WatchCall<T> {\n\t\tconst failure = this.#failure;\n\t\tthis.#newestContext = undefined;\n\t\tif (failure !== undefined) {\n\t\t\tthis.#failure = undefined;\n\t\t\treturn failure;\n\t\t}\n\t\tconst value = this.#newestValue as T;\n\t\tconst retired = this.#retired;\n\t\tthis.#newestValue = undefined;\n\t\tthis.#retired = false;\n\t\tthis.#replace = false;\n\t\treturn { kind: \"value\", value, ops: [[\"r\", value as JsonValue]], retired };\n\t}\n\n\tprotected release(): void {\n\t\tthis.#ops.take();\n\t\tthis.#lone = undefined;\n\t\tthis.#newestValue = undefined;\n\t\tthis.#newestContext = undefined;\n\t\tthis.#retired = false;\n\t\tthis.#failure = undefined;\n\t\tthis.#replace = false;\n\t}\n}\n\n/** The value call of a JSON watch. */\ntype WatchValueCall<T> = Extract<WatchCall<T>, { readonly kind: \"value\" }>;\n\n/** Maximum values retained behind one unavailable native watch listener. */\nconst MAX_PENDING_NATIVE_VALUES = 100;\n\n/**\n * The watch handle of a native source: every value in order, one call each; past 100 pending values they collapse to\n * one, `replace()` or by default the newest value. A failure (`fail()`) drops the pending values and waits as one\n * `failed` call; a value after it replaces it. `detach` and `report` as for `Watch`.\n */\nexport class NativeWatch<T> extends WatchLifecycle<T, NativeWatchCall<T>> implements NativeWatchHandle<T> {\n\t/**\n\t * Pending values in order, each followed by its frame's context, from `#head` on. Values are kept raw: the call a\n\t * listener gets is built when it is taken, so a value an overflow drops costs no object. A read index instead of\n\t * `shift()` takes a backlog in constant time per value; taken slots are cleared at once, the array is emptied once\n\t * all of it was taken, and its taken prefix dropped after 100 values.\n\t */\n\treadonly #pending: Array<T | Context | undefined> = [];\n\t#head = 0;\n\t#replace: (() => T) | undefined;\n\t/** A pending failure and its frame's context; nothing else is pending meanwhile. */\n\t#failure: FailedCall | undefined;\n\t#failureContext: Context | undefined;\n\n\tconstructor(value: T, detach: () => void, report: (error: unknown) => void, replace?: () => T) {\n\t\tsuper(value, detach, report);\n\t\tthis.#replace = replace;\n\t}\n\n\t/** Queue `value`, the source's new value; it replaces a pending failure. */\n\tadvance(value: T, context: Context): void {\n\t\tif (!this.open) return;\n\t\tthis.#failure = undefined;\n\t\tthis.#failureContext = undefined;\n\t\tif (this.#pending.length - this.#head < 2 * MAX_PENDING_NATIVE_VALUES) {\n\t\t\tthis.#pending.push(value, context);\n\t\t} else {\n\t\t\tthis.#pending.length = 0;\n\t\t\tthis.#head = 0;\n\t\t\tthis.#pending.push(this.#replace === undefined ? value : this.#replace(), context);\n\t\t}\n\t\tthis.pending();\n\t}\n\n\t/**\n\t * Queue a failure the source may recover from: the pending values are dropped (`value` keeps the last delivered\n\t * value), and the listener gets `{ kind: \"failed\", error }`.\n\t */\n\tfail(error: unknown, context: Context): void {\n\t\tif (!this.open) return;\n\t\tthis.#pending.length = 0;\n\t\tthis.#head = 0;\n\t\tthis.#failure = { kind: \"failed\", error };\n\t\tthis.#failureContext = context;\n\t\tthis.pending();\n\t}\n\n\tprotected get pendingContext(): Context | undefined {\n\t\t// The slot after a value holds its context; past the end it is empty.\n\t\treturn this.#failureContext ?? (this.#pending[this.#head + 1] as Context | undefined);\n\t}\n\n\tprotected next(): NativeWatchCall<T> {\n\t\tconst failure = this.#failure;\n\t\tif (failure !== undefined) {\n\t\t\tthis.#failure = undefined;\n\t\t\tthis.#failureContext = undefined;\n\t\t\treturn failure;\n\t\t}\n\t\tconst head = this.#head;\n\t\tconst pending = this.#pending;\n\t\t// The slot at `#head` holds a value.\n\t\tconst value = pending[head] as T;\n\t\tif (head + 2 === pending.length) {\n\t\t\tpending.length = 0;\n\t\t\tthis.#head = 0;\n\t\t} else if (head + 2 >= 2 * MAX_PENDING_NATIVE_VALUES) {\n\t\t\t// A backlog that never drains: drop the taken prefix, at most once per 100 values, so the array stays bounded.\n\t\t\tpending.copyWithin(0, head + 2);\n\t\t\tpending.length -= head + 2;\n\t\t\tthis.#head = 0;\n\t\t} else {\n\t\t\tpending[head] = undefined;\n\t\t\tpending[head + 1] = undefined;\n\t\t\tthis.#head = head + 2;\n\t\t}\n\t\treturn { kind: \"value\", value };\n\t}\n\n\tprotected release(): void {\n\t\tthis.#pending.length = 0;\n\t\tthis.#head = 0;\n\t\tthis.#replace = undefined;\n\t\tthis.#failure = undefined;\n\t\tthis.#failureContext = undefined;\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/web/environment.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,2CAA2C;AAC3C,wBAAgB,eAAe,IAAI,eAAe,CA4BjD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
// The page's environment for the connection loop (slice 11 §2, decision "Slice 11, P6"): the clock and timers, and
|
|
3
|
+
// the wakes that mean the page may have been away: visible again, back online, restored from the back/forward cache,
|
|
4
|
+
// or a network change (Chromium reports it; the old socket then looks fine until it is checked).
|
|
5
|
+
/** The browser page's loop environment. */
|
|
6
|
+
export function pageEnvironment() {
|
|
7
|
+
return {
|
|
8
|
+
now: () => Date.now(),
|
|
9
|
+
after: (ms, callback) => {
|
|
10
|
+
const timer = setTimeout(callback, ms);
|
|
11
|
+
return () => clearTimeout(timer);
|
|
12
|
+
},
|
|
13
|
+
online: () => navigator.onLine,
|
|
14
|
+
onWake: (listener) => {
|
|
15
|
+
const restored = (event) => {
|
|
16
|
+
if (event.persisted)
|
|
17
|
+
listener();
|
|
18
|
+
};
|
|
19
|
+
const visible = () => {
|
|
20
|
+
if (document.visibilityState === "visible")
|
|
21
|
+
listener();
|
|
22
|
+
};
|
|
23
|
+
const network = navigator.connection;
|
|
24
|
+
window.addEventListener("online", listener);
|
|
25
|
+
window.addEventListener("pageshow", restored);
|
|
26
|
+
document.addEventListener("visibilitychange", visible);
|
|
27
|
+
network?.addEventListener("change", listener);
|
|
28
|
+
return () => {
|
|
29
|
+
window.removeEventListener("online", listener);
|
|
30
|
+
window.removeEventListener("pageshow", restored);
|
|
31
|
+
document.removeEventListener("visibilitychange", visible);
|
|
32
|
+
network?.removeEventListener("change", listener);
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/web/environment.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,mHAAmH;AACnH,qHAAqH;AACrH,iGAAiG;AAIjG,2CAA2C;AAC3C,MAAM,UAAU,eAAe;IAC9B,OAAO;QACN,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,CAAC,KAA0B,EAAQ,EAAE;gBACrD,IAAI,KAAK,CAAC,SAAS;oBAAE,QAAQ,EAAE,CAAC;YACjC,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE;gBAC1B,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;oBAAE,QAAQ,EAAE,CAAC;YACxD,CAAC,CAAC;YACF,MAAM,OAAO,GAAI,SAAmD,CAAC,UAAU,CAAC;YAChF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC9C,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,GAAG,EAAE;gBACX,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/C,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACjD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;gBAC1D,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["/// <reference lib=\"dom\" />\n// The page's environment for the connection loop (slice 11 §2, decision \"Slice 11, P6\"): the clock and timers, and\n// the wakes that mean the page may have been away: visible again, back online, restored from the back/forward cache,\n// or a network change (Chromium reports it; the old socket then looks fine until it is checked).\n\nimport type { LoopEnvironment } from \"../surfaces/index.ts\";\n\n/** The browser page's loop environment. */\nexport function pageEnvironment(): LoopEnvironment {\n\treturn {\n\t\tnow: () => Date.now(),\n\t\tafter: (ms, callback) => {\n\t\t\tconst timer = setTimeout(callback, ms);\n\t\t\treturn () => clearTimeout(timer);\n\t\t},\n\t\tonline: () => navigator.onLine,\n\t\tonWake: (listener) => {\n\t\t\tconst restored = (event: PageTransitionEvent): void => {\n\t\t\t\tif (event.persisted) listener();\n\t\t\t};\n\t\t\tconst visible = (): void => {\n\t\t\t\tif (document.visibilityState === \"visible\") listener();\n\t\t\t};\n\t\t\tconst network = (navigator as { readonly connection?: EventTarget }).connection;\n\t\t\twindow.addEventListener(\"online\", listener);\n\t\t\twindow.addEventListener(\"pageshow\", restored);\n\t\t\tdocument.addEventListener(\"visibilitychange\", visible);\n\t\t\tnetwork?.addEventListener(\"change\", listener);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"online\", listener);\n\t\t\t\twindow.removeEventListener(\"pageshow\", restored);\n\t\t\t\tdocument.removeEventListener(\"visibilitychange\", visible);\n\t\t\t\tnetwork?.removeEventListener(\"change\", listener);\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Chord v2's web surface, the browser side (`@earendil-works/chord/web`; slice 11 §2): `startPage` in the app's web
|
|
2
|
+
// entry, and the themes and the language it writes. The server side is `/surfaces`.
|
|
3
|
+
export { pageEnvironment } from "./environment.js";
|
|
4
|
+
export { followLanguage } from "./language.js";
|
|
5
|
+
export { startPage } from "./page.js";
|
|
6
|
+
export { followThemes } from "./themes.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,oFAAoF;AAEpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAoB,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC","sourcesContent":["// Chord v2's web surface, the browser side (`@earendil-works/chord/web`; slice 11 §2): `startPage` in the app's web\n// entry, and the themes and the language it writes. The server side is `/surfaces`.\n\nexport { pageEnvironment } from \"./environment.ts\";\nexport { followLanguage } from \"./language.ts\";\nexport { type PageOptions, startPage } from \"./page.ts\";\nexport { followThemes } from \"./themes.ts\";\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Context } from "../context/index.ts";
|
|
2
|
+
import type { Principal } from "../data/index.ts";
|
|
3
|
+
import type { Host } from "../host/index.ts";
|
|
4
|
+
import { type MessagesReport } from "../surfaces/index.ts";
|
|
5
|
+
/** Follows the language on `host` and writes it on the root element until the returned stop; `report` gets reports. */
|
|
6
|
+
export declare function followLanguage<P extends Principal>(host: Host<P>, report: (report: MessagesReport) => void, context: Context): Promise<() => void>;
|
|
7
|
+
//# sourceMappingURL=language.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/web/language.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjF,uHAAuH;AACvH,wBAAsB,cAAc,CAAC,CAAC,SAAS,SAAS,EACvD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,EACxC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,IAAI,CAAC,CAkBrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
// The page's language (decision "Messages and languages in the app kit" (3)): the active language followed from the
|
|
3
|
+
// browser's `navigator.languages`, the user's `LocaleChoice` and the catalogs, written as `lang` and `dir` on the root
|
|
4
|
+
// element (right to left through the app's logical CSS properties). Components re-render through `useMessages`; nothing
|
|
5
|
+
// reloads.
|
|
6
|
+
import { followActiveLanguage } from "../surfaces/index.js";
|
|
7
|
+
/** Follows the language on `host` and writes it on the root element until the returned stop; `report` gets reports. */
|
|
8
|
+
export async function followLanguage(host, report, context) {
|
|
9
|
+
const root = document.documentElement;
|
|
10
|
+
const follower = await followActiveLanguage(host, navigator.languages, (language) => {
|
|
11
|
+
root.lang = language.locale;
|
|
12
|
+
root.dir = language.dir;
|
|
13
|
+
}, report, context);
|
|
14
|
+
const devicechanged = () => follower.setDevice(navigator.languages);
|
|
15
|
+
addEventListener("languagechange", devicechanged);
|
|
16
|
+
return () => {
|
|
17
|
+
follower.stop();
|
|
18
|
+
removeEventListener("languagechange", devicechanged);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/web/language.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,oHAAoH;AACpH,uHAAuH;AACvH,wHAAwH;AACxH,WAAW;AAKX,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AAEjF,uHAAuH;AACvH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,IAAa,EACb,MAAwC,EACxC,OAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAC1C,IAAI,EACJ,SAAS,CAAC,SAAS,EACnB,CAAC,QAAQ,EAAE,EAAE;QACZ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACzB,CAAC,EACD,MAAM,EACN,OAAO,CACP,CAAC;IACF,MAAM,aAAa,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1E,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAClD,OAAO,GAAG,EAAE;QACX,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC;AACH,CAAC","sourcesContent":["/// <reference lib=\"dom\" />\n// The page's language (decision \"Messages and languages in the app kit\" (3)): the active language followed from the\n// browser's `navigator.languages`, the user's `LocaleChoice` and the catalogs, written as `lang` and `dir` on the root\n// element (right to left through the app's logical CSS properties). Components re-render through `useMessages`; nothing\n// reloads.\n\nimport type { Context } from \"../context/index.ts\";\nimport type { Principal } from \"../data/index.ts\";\nimport type { Host } from \"../host/index.ts\";\nimport { followActiveLanguage, type MessagesReport } from \"../surfaces/index.ts\";\n\n/** Follows the language on `host` and writes it on the root element until the returned stop; `report` gets reports. */\nexport async function followLanguage<P extends Principal>(\n\thost: Host<P>,\n\treport: (report: MessagesReport) => void,\n\tcontext: Context,\n): Promise<() => void> {\n\tconst root = document.documentElement;\n\tconst follower = await followActiveLanguage(\n\t\thost,\n\t\tnavigator.languages,\n\t\t(language) => {\n\t\t\troot.lang = language.locale;\n\t\t\troot.dir = language.dir;\n\t\t},\n\t\treport,\n\t\tcontext,\n\t);\n\tconst devicechanged = (): void => follower.setDevice(navigator.languages);\n\taddEventListener(\"languagechange\", devicechanged);\n\treturn () => {\n\t\tfollower.stop();\n\t\tremoveEventListener(\"languagechange\", devicechanged);\n\t};\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Principal } from "../data/index.ts";
|
|
2
|
+
import type { PluginFacet } from "../host/index.ts";
|
|
3
|
+
import { type WebSocketLike } from "../link/index.ts";
|
|
4
|
+
import { type Client, type ClientError, type ClientModules, type ConnectionState } from "../surfaces/index.ts";
|
|
5
|
+
/** What `startPage` takes. */
|
|
6
|
+
export type PageOptions<P extends Principal> = {
|
|
7
|
+
/** Opens the page's socket to the server's links endpoint (`/chord`). */
|
|
8
|
+
readonly connect: () => WebSocketLike;
|
|
9
|
+
/** The modules the web plugins import, by specifier: the app's API modules for the web kind, React, ... */
|
|
10
|
+
readonly modules: ClientModules;
|
|
11
|
+
/** The app's own web facets. */
|
|
12
|
+
readonly core?: readonly PluginFacet<P>[];
|
|
13
|
+
/** Asked before each reconnect; `false` stops reconnecting (a guest's ended share). */
|
|
14
|
+
readonly canRetry?: () => Promise<boolean>;
|
|
15
|
+
readonly onConnection?: (state: ConnectionState) => void;
|
|
16
|
+
/** Renders the app with its host, once the plugins are loaded. */
|
|
17
|
+
readonly render: (host: Client<P>["host"]) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Records the page's telemetry (decision "Telemetry from browser pages"): its spans (a click started with
|
|
20
|
+
* `host.root(fn, ctx, { trace })`, the calls under it, carriers on its calls) are kept in memory and sent to the
|
|
21
|
+
* server's telemetry object every few seconds and when the page is hidden. Off by default.
|
|
22
|
+
*/
|
|
23
|
+
readonly telemetry?: boolean;
|
|
24
|
+
/** Plugins left out or kept old, a failed update, the host's errors, messages' reports: the console by default. */
|
|
25
|
+
readonly onError?: (error: ClientError) => void;
|
|
26
|
+
};
|
|
27
|
+
/** Starts the page; resolves with its client once rendered. */
|
|
28
|
+
export declare function startPage<P extends Principal>(options: PageOptions<P>): Promise<Client<P>>;
|
|
29
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/web/page.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACN,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EAKpB,MAAM,sBAAsB,CAAC;AAQ9B,8BAA8B;AAC9B,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,aAAa,CAAC;IACtC,2GAA2G;IAC3G,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACzD,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,mHAAmH;IACnH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAChD,CAAC;AAKF,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAiDhG"}
|