@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-migration.js","sourceRoot":"","sources":["../../src/store/table-migration.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,mHAAmH;AACnH,sHAAsH;AACtH,oHAAoH;AACpH,oHAAoH;AACpH,sHAAsH;AACtH,yGAAyG;AAEzG,OAAO,EAAgB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,WAAW,CAAC;AACjE,OAAO,EAAc,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIhD,OAAO,EAAiB,SAAS,EAAkB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACN,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAQ3B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,MAAgC,EAChC,KAAiB,EACjB,KAAkB,EAClB,IAAY,EACZ,OAAgB;IAEhB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAkG,EAAE,CAAC;IACrH,KAAK,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,YAAY,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;aACpE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACzE,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1C,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC;AAED,oGAAoG;AACpG,SAAS,QAAQ,CAAC,UAA2B,EAAE,KAAa;IAC3D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAClE,OAAO;QACN,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;QACxF,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KACxG,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CAC1B,IAAsD,EACtD,MAAuB,EACvB,OAAgB;IAEhB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;AACF,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,+FAA+F;AAC/F,KAAK,UAAU,cAAc,CAC5B,UAA2B,EAC3B,IAAwB,EACxB,MAAuB,EACvB,OAAgB;IAEhB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC;QACJ,MAAM,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACV,QAAQ,EAAE,CAAC;IACZ,CAAC;AACF,CAAC;AAED,uCAAuC;AACvC,KAAK,UAAU,YAAY,CAC1B,UAA2B,EAC3B,IAAwB,EACxB,MAAuB,EACvB,OAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,SAAU,CAAC,SAAS,CAAC;IAChE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAClF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrF,IAAI,IAAI,KAAK,OAAO;QACnB,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpH,MAAM,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,+GAA+G;AAC/G,SAAS,QAAQ,CAChB,OAAwB,EACxB,UAA2B,EAC3B,KAA4B,EAC5B,KAAa;IAEb,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAC5C,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,oHAAoH;AACpH,SAAS,UAAU,CAAC,IAAoD,EAAE,CAAS,EAAE,KAAa;IACjG,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAc,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IACzF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtF,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,QAAQ,CACtB,IAAkD,EAClD,CAAS,EACT,KAA6B,EAC7B,MAAuB,EACvB,OAAgB;IAEhB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAU,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChE,MAAM,KAAK,GAAc,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,KAAgC,CAAC;IACrC,6GAA6G;IAC7G,IAAI,OAAwD,CAAC;IAC7D,IAAI,CAAC;QACJ,SAAS,CAAC;YACT,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CACrC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAoC,SAAS,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,EACjG,OAAO,CACP,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC;YAC9C,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YACvF,IAAI,IAAI;gBAAE,OAAO,MAAM,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACtC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,CAAE,CAAC,IAAI,CAAE,CAAC,CAAC;YACvE,MAAM,SAAS,CAAC,GAAG,EAAE;gBACpB,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,sCAAsC;YACtC,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC;QACvC,CAAC;IACF,CAAC;YAAS,CAAC;QACV,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,OAAkD;IACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,mHAAmH;QACnH,mFAAmF;QACnF,MAAM,SAAS,GAAI,UAAkD,CAAC,YAAY,CAAC;QACnF,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACrC,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QACnC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,6FAA6F;QAC7F,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAChB,IAAkD,EAClD,MAAkD,EAClD,CAAS,EACT,GAAa,EACb,KAAa,EACb,OAAgB;IAEhB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uCAAuC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,GAAG,GAA0C,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,IAAI,GAAG,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,CAAC;QAClG,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,aAAa,IAAI,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,GAAG,GAAiC,EAAE,CAAC;IAC7C,0DAA0D;IAC1D,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAW,CAAC;IACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7E,OAAO,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,MAAc,EAAE,KAAc,EAAE,IAAY;IAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,qDAAqD;IACrD,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,CAAC;AACjF,CAAC;AAED,SAAS,KAAK,CAAC,UAA2B,EAAE,KAAa;IACxD,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1F,CAAC;AAED,wHAAwH;AACxH,KAAK,UAAU,MAAM,CAAC,MAAqB,EAAE,MAAsC,EAAE,OAAgB;IACpG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["// Declared tables brought to their version at activation (slice 6a §9): a table the store does not have is created at\n// the newest version with its indexes (no replay); an older one is migrated eagerly, one version at a time, in its\n// commits. Per version N: (A) the edits before the data step and `table { version: N, state: \"migrating\" }`; the data\n// step's chunks; (Z) the last chunk (or the `update`) with the edits after the step and `state: \"ready\"`. Without a\n// data step (A) and (Z) are one commit. A version recorded `migrating` resumes after (A), skipping the rows already\n// stamped `$v >= N`. Its record holds the columns during the step but version N's fingerprint, not the fingerprint of\n// those columns: the fingerprint names the version being reached, which resume, export and import check.\n\nimport { type Context, withoutAbortSignal } from \"../context/index.ts\";\nimport type { SqliteValue } from \"../sqlite/index.ts\";\nimport type { Column } from \"./columns.ts\";\nimport type { SetNode, WhereNode } from \"./expression.ts\";\nimport { encodeCell, ROW_VERSION, type Scalar } from \"./rows.ts\";\nimport { type Order, TableSql } from \"./sql.ts\";\nimport type { StagedWrite } from \"./step.ts\";\nimport type { ChordStore, CommitFence } from \"./store.ts\";\nimport type { TableDefinition } from \"./table.ts\";\nimport { type DataStep, planTable, type TablePlan } from \"./table-history.ts\";\nimport {\n\tjsonVersions,\n\trecordedVersions,\n\tstageEdit,\n\tstageIndex,\n\tstageTable,\n\tstageUpdate,\n\tstageUpdateWhere,\n} from \"./table-writes.ts\";\n\n/** A declared table: its newest definition and its SQL name. */\nexport type DeclaredTable = { readonly definition: TableDefinition; readonly table: string };\n\n/** Where a migration runs: the store, the table's SQL name and the commits' fence. */\ntype MigrationTarget = { readonly store: ChordStore; readonly table: string; readonly fence: CommitFence };\n\n/**\n * Brings `tables` to their definitions: the ones the store does not have created in one commit, then each older one\n * migrated. A table the code cannot use (see `planTable`) throws before anything is written; `what` names the owner.\n */\nexport async function prepareTables(\n\ttables: readonly DeclaredTable[],\n\tstore: ChordStore,\n\tfence: CommitFence,\n\twhat: string,\n\tcontext: Context,\n): Promise<void> {\n\tconst created: StagedWrite[] = [];\n\tconst migrations: { readonly table: string; readonly plan: Extract<TablePlan, { readonly kind: \"migrate\" }> }[] = [];\n\tfor (const { definition, table } of tables) {\n\t\tconst plan = planTable(definition, store.table(table), `${what}: table \"${definition.name}\"`);\n\t\tif (plan.kind === \"create\") created.push(...creation(definition, table));\n\t\telse if (plan.kind === \"migrate\") migrations.push({ table, plan });\n\t}\n\tif (created.length > 0) await commit(created, { store, fence }, context);\n\tfor (const { table, plan } of migrations) {\n\t\tawait migrateTable(plan, { store, table, fence }, context);\n\t}\n}\n\n/** The writes creating `definition` fresh as `table`: at its version, `ready`, with its indexes. */\nfunction creation(definition: TableDefinition, table: string): StagedWrite[] {\n\tconst { version, record: columns, key, fingerprint } = definition;\n\treturn [\n\t\tstageTable({ kind: \"table\", table, version, state: \"ready\", columns, key, fingerprint }),\n\t\t...[...definition.indexes].map(([name, columns]) => stageIndex({ kind: \"index\", table, name, columns })),\n\t];\n}\n\n/**\n * Migrates the table through the plan's versions (oldest first, each with its migration), the first resumed after its\n * (A) commit when the plan says so. `context`'s abort is checked between chunks (a chunk admitted to the step completes); a data\n * step that throws, or returns a patch the version cannot take, rejects: the table stays `migrating` and the committed\n * chunks stay.\n */\nasync function migrateTable(\n\tplan: Extract<TablePlan, { readonly kind: \"migrate\" }>,\n\ttarget: MigrationTarget,\n\tcontext: Context,\n): Promise<void> {\n\tfor (const [index, version] of plan.versions.entries()) {\n\t\tawait migrateVersion(version, index === 0 ? plan.first : \"begin\", target, context);\n\t}\n}\n\n/** The size of a `rows` chunk: one commit each. */\nexport const MIGRATION_CHUNK = 100;\n\n/** Migrates to `definition`'s version from its (A) commit (`begin`) or after it (`resume`). */\nasync function migrateVersion(\n\tdefinition: TableDefinition,\n\tfrom: \"begin\" | \"resume\",\n\ttarget: MigrationTarget,\n\tcontext: Context,\n): Promise<void> {\n\tconst { table } = target;\n\t// Old handles are refused from now on: their SQL must never queue behind this version's DDL.\n\tconst withdraw = target.store.announceTable(table, definition.version);\n\ttry {\n\t\tawait migrateSteps(definition, from, target, context);\n\t} finally {\n\t\twithdraw();\n\t}\n}\n\n/** The commits of `migrateVersion`. */\nasync function migrateSteps(\n\tdefinition: TableDefinition,\n\tfrom: \"begin\" | \"resume\",\n\ttarget: MigrationTarget,\n\tcontext: Context,\n): Promise<void> {\n\tconst { before, step, after } = definition.evolution!.migration;\n\tconst { table } = target;\n\tconst edits = (list: typeof before): StagedWrite[] => list.map((edit) => stageEdit(table, definition.version, edit));\n\tconst ready = [...edits(after), recordOf(definition, definition, \"ready\", table)];\n\tif (step === undefined) return commit([...edits(before), ...ready], target, context);\n\tif (from === \"begin\")\n\t\tawait commit([...edits(before), recordOf(step.table, definition, \"migrating\", table)], target, context);\n\tif (step.kind === \"update\") return commit([updateStep(step, definition.version, table), ...ready], target, context);\n\tawait rowsStep(step, definition.version, ready, target, context);\n}\n\n/** The `table` write of `table`'s columns and key, with `definition`'s version and fingerprint, in `state`. */\nfunction recordOf(\n\tcolumns: TableDefinition,\n\tdefinition: TableDefinition,\n\tstate: \"ready\" | \"migrating\",\n\ttable: string,\n): StagedWrite {\n\tconst { version, fingerprint } = definition;\n\treturn stageTable({ kind: \"table\", table, version, state, columns: columns.record, key: columns.key, fingerprint });\n}\n\n/** The `update` step: one `updateWhere` over the rows below version `v`, stamping it, so it never applies twice. */\nfunction updateStep(step: Extract<DataStep, { readonly kind: \"update\" }>, v: number, table: string): StagedWrite {\n\tconst sql = sqlOf(step.table, table);\n\tconst below: WhereNode = { lt: [ROW_VERSION, v] };\n\tconst where: WhereNode = step.where === undefined ? below : { and: [step.where, below] };\n\tconst versions = jsonVersions(step.table, step.set);\n\tconst statement = sql.updateWhere(where, { ...step.set, [ROW_VERSION]: v }, versions);\n\treturn stageUpdateWhere(statement, table, where, step.set, recordedVersions(step.set, versions), v);\n}\n\n/**\n * The `rows` step: chunks of `MIGRATION_CHUNK` rows below version `v` in key order, paging forward by the last key;\n * each patched row stamped `v`; the last chunk commits with `ready`.\n */\nasync function rowsStep(\n\tstep: Extract<DataStep, { readonly kind: \"rows\" }>,\n\tv: number,\n\tready: readonly StagedWrite[],\n\ttarget: MigrationTarget,\n\tcontext: Context,\n): Promise<void> {\n\tconst { table: columns } = step;\n\tconst sql = sqlOf(columns, target.table);\n\tconst order: Order = { columns: columns.key, direction: \"asc\" };\n\tconst below: WhereNode = { lt: [ROW_VERSION, v] };\n\tlet after: SqliteValue[] | undefined;\n\t// The fallback yield between chunks (`macrotask`), made by the first yield that needs it, closed at the end.\n\tlet channel: InstanceType<typeof MessageChannel> | undefined;\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst statement = sql.select(below, order, after, MIGRATION_CHUNK + 1);\n\t\t\tconst stored = await target.store.read(\n\t\t\t\t(executor) => executor.all<{ [column: string]: SqliteValue }>(statement.sql, ...statement.params),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\tconst last = stored.length <= MIGRATION_CHUNK;\n\t\t\tif (!last) stored.length = MIGRATION_CHUNK;\n\t\t\tconst writes = stored.map((row) => patchRow(step, row, v, sql, target.table, context));\n\t\t\tif (last) return await commit([...writes, ...ready], target, context);\n\t\t\tawait commit(writes, target, context);\n\t\t\tafter = columns.key.map((name) => stored[MIGRATION_CHUNK - 1]![name]!);\n\t\t\tawait macrotask(() => {\n\t\t\t\tchannel ??= new MessageChannel();\n\t\t\t\treturn channel;\n\t\t\t});\n\t\t\t// An abandoned activation stops here.\n\t\t\tcontext.abortSignal?.throwIfAborted();\n\t\t}\n\t} finally {\n\t\tchannel?.port1.close();\n\t}\n}\n\n/**\n * Resolves after one macrotask (other commits and timers run between chunks) without the 1 ms clamp of\n * `setTimeout(0)`: `setImmediate` where the runtime has it (Node), else a message through the channel `channel()`\n * gives (browsers, Workers). In Node a message costs 0.27 ms per yield against `setImmediate`'s 13 µs (the 10k-row\n * migration bench: 100 ms against 70 ms).\n */\nfunction macrotask(channel: () => InstanceType<typeof MessageChannel>): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\t// A runtime feature check: Workers and browsers have no `setImmediate`. Read once from the global, and called only\n\t\t// when it is a function: a check by name (`in`) and a later lookup could disagree.\n\t\tconst immediate = (globalThis as { readonly setImmediate?: unknown }).setImmediate;\n\t\tif (typeof immediate === \"function\") {\n\t\t\timmediate(resolve);\n\t\t\treturn;\n\t\t}\n\t\tconst { port1, port2 } = channel();\n\t\tport1.addEventListener(\"message\", () => resolve(), { once: true });\n\t\t// A port listened to with `addEventListener` delivers only once started (browsers, Workers).\n\t\tport1.start();\n\t\tport2.postMessage(null);\n\t});\n}\n\n/**\n * The write of one row's patch: `patch` run on the decoded row, its result checked (an object of non-key columns of\n * the version, values of their types) and stamped `v` through the internal form of `update`.\n */\nfunction patchRow(\n\tstep: Extract<DataStep, { readonly kind: \"rows\" }>,\n\tstored: { readonly [column: string]: SqliteValue },\n\tv: number,\n\tsql: TableSql,\n\ttable: string,\n\tcontext: Context,\n): StagedWrite {\n\tconst { table: definition } = step;\n\tconst patch = step.patch(definition.rows.decode(stored, context));\n\tconst what = `${definition.name} version ${v}: rows`;\n\tif (typeof patch !== \"object\" || patch === null || Array.isArray(patch)) {\n\t\tthrow new Error(`${what}: expected an object of column values`);\n\t}\n\tconst set: { [column: string]: SetNode[string] } = {};\n\tfor (const [name, value] of Object.entries(patch)) {\n\t\tconst column = definition.byName.get(name);\n\t\tif (column === undefined) throw new Error(`${what}: no column \"${name}\"`);\n\t\tif (definition.key.includes(name)) throw new Error(`${what}: key column \"${name}\" cannot change`);\n\t\tset[name] = cellOf(column, value, `${what}: column \"${name}\"`);\n\t}\n\tconst key: { [column: string]: Scalar } = {};\n\t// Key columns are non-opt `str` or `int`: stored scalars.\n\tfor (const name of definition.key) key[name] = stored[name] as Scalar;\n\tconst versions = jsonVersions(definition, set);\n\tconst params = definition.key.map((name) => stored[name]!);\n\tconst statement = sql.update({ ...set, [ROW_VERSION]: v }, params, versions);\n\treturn stageUpdate(statement, table, key, set, recordedVersions(set, versions), v);\n}\n\n/**\n * A patch value as a `set` node: `undefined` clears an `opt(...)` column, `json(...)` cells as JSON literals (a JSON\n * `null` too); a scalar `null` is refused by `encodeCell`.\n */\nfunction cellOf(column: Column, value: unknown, what: string): SetNode[string] {\n\tif (value === undefined) {\n\t\tif (!column.optional) throw new Error(`${what} is not opt(...) and cannot be cleared`);\n\t\treturn null;\n\t}\n\tconst cell = encodeCell(column, value, what);\n\t// `encodeCell` returns a scalar for a scalar column.\n\treturn column.type === \"json\" ? { json: cell.stored } : (cell.stored as Scalar);\n}\n\nfunction sqlOf(definition: TableDefinition, table: string): TableSql {\n\treturn new TableSql(table, definition.columns, definition.rows.physical, definition.key);\n}\n\n/** Commits `writes` without the activation's abort: a commit admitted to the step completes (the fence refuses one). */\nasync function commit(writes: StagedWrite[], target: Omit<MigrationTarget, \"table\">, context: Context): Promise<void> {\n\tawait target.store.commit(writes, target.fence, withoutAbortSignal(context));\n}\n"]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { ColumnRecord } from "./columns.ts";
|
|
2
|
+
import type { SetNode, WhereNode } from "./expression.ts";
|
|
3
|
+
import type { EncodedRow, Scalar, StoredRow } from "./rows.ts";
|
|
4
|
+
import { type Statement } from "./sql.ts";
|
|
5
|
+
import type { StagedWrite, Step } from "./step.ts";
|
|
6
|
+
import type { TableDefinition } from "./table.ts";
|
|
7
|
+
import type { AlterEdit, TableEdit } from "./table-history.ts";
|
|
8
|
+
/** A key as writes record it: the key columns' stored values. */
|
|
9
|
+
export type StoredKey = {
|
|
10
|
+
readonly [column: string]: Scalar;
|
|
11
|
+
};
|
|
12
|
+
/** `json(...)` columns' versions written by a write, by column. */
|
|
13
|
+
export type ColumnVersions = {
|
|
14
|
+
readonly [column: string]: number;
|
|
15
|
+
};
|
|
16
|
+
/** The table writes as the outbox and archives record them. */
|
|
17
|
+
export type TableWrite = {
|
|
18
|
+
readonly kind: "table";
|
|
19
|
+
readonly table: string;
|
|
20
|
+
readonly version: number;
|
|
21
|
+
readonly state: "ready" | "migrating";
|
|
22
|
+
readonly columns: {
|
|
23
|
+
readonly [name: string]: ColumnRecord;
|
|
24
|
+
};
|
|
25
|
+
readonly key: readonly string[];
|
|
26
|
+
readonly fingerprint: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "index";
|
|
29
|
+
readonly table: string;
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly columns: readonly string[];
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "dropIndex";
|
|
34
|
+
readonly table: string;
|
|
35
|
+
readonly name: string;
|
|
36
|
+
}
|
|
37
|
+
/** A column edit of the migration to `version`; DDL rendered from it. */
|
|
38
|
+
| {
|
|
39
|
+
readonly kind: "alter";
|
|
40
|
+
readonly table: string;
|
|
41
|
+
readonly version: number;
|
|
42
|
+
readonly edit: AlterEdit;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: "put";
|
|
45
|
+
readonly table: string;
|
|
46
|
+
readonly row: StoredRow;
|
|
47
|
+
/** The row's eager-step version (the table's version at the `put`). */
|
|
48
|
+
readonly version: number;
|
|
49
|
+
readonly columns: ColumnVersions;
|
|
50
|
+
} | {
|
|
51
|
+
readonly kind: "update";
|
|
52
|
+
readonly table: string;
|
|
53
|
+
readonly key: StoredKey;
|
|
54
|
+
readonly set: SetNode;
|
|
55
|
+
readonly columns: ColumnVersions;
|
|
56
|
+
readonly count: number;
|
|
57
|
+
/** A migration's data step: the version it stamps as the row's `$v` (a plugin's `update` never does). */
|
|
58
|
+
readonly version?: number;
|
|
59
|
+
} | {
|
|
60
|
+
readonly kind: "delete";
|
|
61
|
+
readonly table: string;
|
|
62
|
+
readonly key: StoredKey;
|
|
63
|
+
readonly count: number;
|
|
64
|
+
} | {
|
|
65
|
+
readonly kind: "updateWhere";
|
|
66
|
+
readonly table: string;
|
|
67
|
+
readonly where: WhereNode;
|
|
68
|
+
readonly set: SetNode;
|
|
69
|
+
readonly columns: ColumnVersions;
|
|
70
|
+
readonly count: number;
|
|
71
|
+
/** A migration's `update` step: the version it stamps as the rows' `$v`. */
|
|
72
|
+
readonly version?: number;
|
|
73
|
+
} | {
|
|
74
|
+
readonly kind: "deleteWhere";
|
|
75
|
+
readonly table: string;
|
|
76
|
+
readonly where: WhereNode;
|
|
77
|
+
readonly count: number;
|
|
78
|
+
};
|
|
79
|
+
/** The versions of the `json(...)` columns of `definition` that `set` writes, which its statement stamps. */
|
|
80
|
+
export declare function jsonVersions(definition: TableDefinition, set: SetNode): ReadonlyMap<string, number>;
|
|
81
|
+
/** The `columns` a write records: the versions of the `json(...)` columns it sets to a value (a clear has none). */
|
|
82
|
+
export declare function recordedVersions(set: SetNode, versions: ReadonlyMap<string, number>): ColumnVersions;
|
|
83
|
+
/** The `table` write. */
|
|
84
|
+
export type TableDefinitionWrite = Extract<TableWrite, {
|
|
85
|
+
readonly kind: "table";
|
|
86
|
+
}>;
|
|
87
|
+
/** Stages a `table` write: the table created when the store does not have it yet, its record replaced otherwise. */
|
|
88
|
+
export declare function stageTable(write: TableDefinitionWrite): StagedWrite;
|
|
89
|
+
/** Stages an `index` write. */
|
|
90
|
+
export declare function stageIndex(write: Extract<TableWrite, {
|
|
91
|
+
readonly kind: "index";
|
|
92
|
+
}>): StagedWrite;
|
|
93
|
+
/** Stages one edit of the migration of `table` to `version` as its `alter`, `index` or `dropIndex` write. */
|
|
94
|
+
export declare function stageEdit(table: string, version: number, edit: TableEdit): StagedWrite;
|
|
95
|
+
/** Stages a `put` of an encoded row with its `INSERT OR REPLACE` (an upsert: the whole row replaced). */
|
|
96
|
+
export declare function stagePut(sql: string, table: string, row: EncodedRow, version: number): StagedWrite;
|
|
97
|
+
/**
|
|
98
|
+
* Stages an `update` of one row by key; its count (0 for an absent key) is recorded, and `version` when the statement stamps
|
|
99
|
+
* the row's `$v` (a migration's `rows` step).
|
|
100
|
+
*/
|
|
101
|
+
export declare function stageUpdate(statement: Statement, table: string, key: StoredKey, set: SetNode, columns: ColumnVersions, version?: number): StagedWrite;
|
|
102
|
+
/** Stages a `delete` of one row by key; its count is recorded. */
|
|
103
|
+
export declare function stageDelete(statement: Statement, table: string, key: StoredKey): StagedWrite;
|
|
104
|
+
/**
|
|
105
|
+
* Stages an `updateWhere`: one statement, its count recorded (a replica affecting another count stops, S17), and `version`
|
|
106
|
+
* when it stamps the rows' `$v` (a migration's `update` step).
|
|
107
|
+
*/
|
|
108
|
+
export declare function stageUpdateWhere(statement: Statement, table: string, where: WhereNode, set: SetNode, columns: ColumnVersions, version?: number): StagedWrite;
|
|
109
|
+
/** Stages a `deleteWhere`: one statement, its count recorded. */
|
|
110
|
+
export declare function stageDeleteWhere(statement: Statement, table: string, where: WhereNode): StagedWrite;
|
|
111
|
+
/** Applies a `table` write: `CREATE TABLE` when the store does not have the table yet, then its record. */
|
|
112
|
+
export declare function applyTable(step: Step, write: TableDefinitionWrite): Promise<TableWrite>;
|
|
113
|
+
/** Applies an `index` write: `CREATE INDEX` and the record's index. */
|
|
114
|
+
export declare function applyIndex(step: Step, write: Extract<TableWrite, {
|
|
115
|
+
readonly kind: "index";
|
|
116
|
+
}>): Promise<TableWrite>;
|
|
117
|
+
/** Applies a `dropIndex` write: `DROP INDEX` and the record without it. */
|
|
118
|
+
export declare function applyDropIndex(step: Step, write: Extract<TableWrite, {
|
|
119
|
+
readonly kind: "dropIndex";
|
|
120
|
+
}>): Promise<TableWrite>;
|
|
121
|
+
/** Applies an `alter` write: its DDL (a `json(...)` column's version column follows it) and the record's change. */
|
|
122
|
+
export declare function applyAlter(step: Step, write: Extract<TableWrite, {
|
|
123
|
+
readonly kind: "alter";
|
|
124
|
+
}>): Promise<TableWrite>;
|
|
125
|
+
//# sourceMappingURL=table-writes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-writes.d.ts","sourceRoot":"","sources":["../../src/store/table-writes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// Table writes (slice 6a §5, §7, §9; S17; decisions "Writes carry their versions", "Index definitions are recorded"):
|
|
2
|
+
// the recorded form of every table write, the staged writes a transaction or an activation hands the commit step
|
|
3
|
+
// (their SQL rendered at staging, rule 8), and the appliers of the schema writes, which render DDL from the record.
|
|
4
|
+
import { versionColumn } from "./rows.js";
|
|
5
|
+
import { columnSql, createIndexSql, createTableSql, dropIndexSql, quote } from "./sql.js";
|
|
6
|
+
/** The versions of the `json(...)` columns of `definition` that `set` writes, which its statement stamps. */
|
|
7
|
+
export function jsonVersions(definition, set) {
|
|
8
|
+
const versions = new Map();
|
|
9
|
+
for (const name of Object.keys(set)) {
|
|
10
|
+
const column = definition.byName.get(name);
|
|
11
|
+
if (column.type === "json")
|
|
12
|
+
versions.set(name, column.json.version);
|
|
13
|
+
}
|
|
14
|
+
return versions;
|
|
15
|
+
}
|
|
16
|
+
/** The `columns` a write records: the versions of the `json(...)` columns it sets to a value (a clear has none). */
|
|
17
|
+
export function recordedVersions(set, versions) {
|
|
18
|
+
const columns = {};
|
|
19
|
+
for (const [column, version] of versions)
|
|
20
|
+
if (set[column] !== null)
|
|
21
|
+
columns[column] = version;
|
|
22
|
+
return columns;
|
|
23
|
+
}
|
|
24
|
+
/** Stages a `table` write: the table created when the store does not have it yet, its record replaced otherwise. */
|
|
25
|
+
export function stageTable(write) {
|
|
26
|
+
return { order: "write", apply: async (step) => [await applyTable(step, write)] };
|
|
27
|
+
}
|
|
28
|
+
/** Stages an `index` write. */
|
|
29
|
+
export function stageIndex(write) {
|
|
30
|
+
return { order: "write", apply: async (step) => [await applyIndex(step, write)] };
|
|
31
|
+
}
|
|
32
|
+
/** Stages one edit of the migration of `table` to `version` as its `alter`, `index` or `dropIndex` write. */
|
|
33
|
+
export function stageEdit(table, version, edit) {
|
|
34
|
+
switch (edit.kind) {
|
|
35
|
+
case "index":
|
|
36
|
+
return stageIndex({ kind: "index", table, name: edit.name, columns: edit.columns });
|
|
37
|
+
case "dropIndex": {
|
|
38
|
+
const write = { kind: "dropIndex", table, name: edit.name };
|
|
39
|
+
return { order: "write", apply: async (step) => [await applyDropIndex(step, write)] };
|
|
40
|
+
}
|
|
41
|
+
default: {
|
|
42
|
+
const write = { kind: "alter", table, version, edit };
|
|
43
|
+
return { order: "write", apply: async (step) => [await applyAlter(step, write)] };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Stages a `put` of an encoded row with its `INSERT OR REPLACE` (an upsert: the whole row replaced). */
|
|
48
|
+
export function stagePut(sql, table, row, version) {
|
|
49
|
+
const write = { kind: "put", table, row: row.row, version, columns: row.columns };
|
|
50
|
+
return {
|
|
51
|
+
order: "write",
|
|
52
|
+
apply: async (step) => {
|
|
53
|
+
await step.run(sql, ...row.params);
|
|
54
|
+
step.rows++;
|
|
55
|
+
return [write];
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Stages an `update` of one row by key; its count (0 for an absent key) is recorded, and `version` when the statement stamps
|
|
61
|
+
* the row's `$v` (a migration's `rows` step).
|
|
62
|
+
*/
|
|
63
|
+
export function stageUpdate(statement, table, key, set, columns, version) {
|
|
64
|
+
const stamped = version === undefined ? {} : { version };
|
|
65
|
+
return counted(statement, (count) => ({ kind: "update", table, key, set, columns, count, ...stamped }));
|
|
66
|
+
}
|
|
67
|
+
/** Stages a `delete` of one row by key; its count is recorded. */
|
|
68
|
+
export function stageDelete(statement, table, key) {
|
|
69
|
+
return counted(statement, (count) => ({ kind: "delete", table, key, count }));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Stages an `updateWhere`: one statement, its count recorded (a replica affecting another count stops, S17), and `version`
|
|
73
|
+
* when it stamps the rows' `$v` (a migration's `update` step).
|
|
74
|
+
*/
|
|
75
|
+
export function stageUpdateWhere(statement, table, where, set, columns, version) {
|
|
76
|
+
const stamped = version === undefined ? {} : { version };
|
|
77
|
+
return counted(statement, (count) => ({ kind: "updateWhere", table, where, set, columns, count, ...stamped }));
|
|
78
|
+
}
|
|
79
|
+
/** Stages a `deleteWhere`: one statement, its count recorded. */
|
|
80
|
+
export function stageDeleteWhere(statement, table, where) {
|
|
81
|
+
return counted(statement, (count) => ({ kind: "deleteWhere", table, where, count }));
|
|
82
|
+
}
|
|
83
|
+
function counted(statement, record) {
|
|
84
|
+
return {
|
|
85
|
+
order: "write",
|
|
86
|
+
apply: async (step) => {
|
|
87
|
+
const count = await step.runCounted(statement.sql, ...statement.params);
|
|
88
|
+
step.rows += count;
|
|
89
|
+
return [record(count)];
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/** Applies a `table` write: `CREATE TABLE` when the store does not have the table yet, then its record. */
|
|
94
|
+
export async function applyTable(step, write) {
|
|
95
|
+
const existing = step.table(write.table);
|
|
96
|
+
if (existing === undefined)
|
|
97
|
+
await step.run(createTableSql(write.table, write.columns, write.key));
|
|
98
|
+
const { table, version, state, columns, key, fingerprint } = write;
|
|
99
|
+
step.tables.set(table, { table, version, state, columns, key, fingerprint, indexes: existing?.indexes ?? {} });
|
|
100
|
+
return write;
|
|
101
|
+
}
|
|
102
|
+
/** Applies an `index` write: `CREATE INDEX` and the record's index. */
|
|
103
|
+
export async function applyIndex(step, write) {
|
|
104
|
+
const existing = recorded(step, write.table);
|
|
105
|
+
await step.run(createIndexSql(write.table, write.name, write.columns, existing.key));
|
|
106
|
+
step.tables.set(write.table, { ...existing, indexes: { ...existing.indexes, [write.name]: write.columns } });
|
|
107
|
+
return write;
|
|
108
|
+
}
|
|
109
|
+
/** Applies a `dropIndex` write: `DROP INDEX` and the record without it. */
|
|
110
|
+
export async function applyDropIndex(step, write) {
|
|
111
|
+
const existing = recorded(step, write.table);
|
|
112
|
+
await step.run(dropIndexSql(write.table, write.name));
|
|
113
|
+
const { [write.name]: _dropped, ...indexes } = existing.indexes;
|
|
114
|
+
step.tables.set(write.table, { ...existing, indexes });
|
|
115
|
+
return write;
|
|
116
|
+
}
|
|
117
|
+
/** Applies an `alter` write: its DDL (a `json(...)` column's version column follows it) and the record's change. */
|
|
118
|
+
export async function applyAlter(step, write) {
|
|
119
|
+
const existing = recorded(step, write.table);
|
|
120
|
+
const { edit } = write;
|
|
121
|
+
const id = quote(write.table);
|
|
122
|
+
switch (edit.kind) {
|
|
123
|
+
case "rename": {
|
|
124
|
+
const json = existing.columns[edit.from]?.type === "json";
|
|
125
|
+
await step.run(`ALTER TABLE ${id} RENAME COLUMN ${quote(edit.from)} TO ${quote(edit.to)}`);
|
|
126
|
+
if (json) {
|
|
127
|
+
const [from, to] = [versionColumn(edit.from), versionColumn(edit.to)];
|
|
128
|
+
await step.run(`ALTER TABLE ${id} RENAME COLUMN ${quote(from)} TO ${quote(to)}`);
|
|
129
|
+
}
|
|
130
|
+
const rename = (column) => (column === edit.from ? edit.to : column);
|
|
131
|
+
const columns = Object.entries(existing.columns).map(([name, column]) => [rename(name), column]);
|
|
132
|
+
const indexes = Object.entries(existing.indexes).map(([name, on]) => [name, on.map(rename)]);
|
|
133
|
+
step.tables.set(write.table, {
|
|
134
|
+
...existing,
|
|
135
|
+
columns: Object.fromEntries(columns),
|
|
136
|
+
key: existing.key.map(rename),
|
|
137
|
+
indexes: Object.fromEntries(indexes),
|
|
138
|
+
});
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case "add":
|
|
142
|
+
for (const definition of columnSql(edit.name, edit.column)) {
|
|
143
|
+
await step.run(`ALTER TABLE ${id} ADD COLUMN ${definition}`);
|
|
144
|
+
}
|
|
145
|
+
step.tables.set(write.table, { ...existing, columns: { ...existing.columns, [edit.name]: edit.column } });
|
|
146
|
+
break;
|
|
147
|
+
case "drop": {
|
|
148
|
+
const json = existing.columns[edit.name]?.type === "json";
|
|
149
|
+
await step.run(`ALTER TABLE ${id} DROP COLUMN ${quote(edit.name)}`);
|
|
150
|
+
if (json)
|
|
151
|
+
await step.run(`ALTER TABLE ${id} DROP COLUMN ${quote(versionColumn(edit.name))}`);
|
|
152
|
+
const { [edit.name]: _dropped, ...columns } = existing.columns;
|
|
153
|
+
step.tables.set(write.table, { ...existing, columns });
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case "json":
|
|
157
|
+
step.tables.set(write.table, { ...existing, columns: { ...existing.columns, [edit.name]: edit.column } });
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
return write;
|
|
161
|
+
}
|
|
162
|
+
/** The record of `table` in `step`; a write for a table the store does not have fails the step. */
|
|
163
|
+
function recorded(step, table) {
|
|
164
|
+
const record = step.table(table);
|
|
165
|
+
// Memory and disk disagree: the step fails, which stops the store.
|
|
166
|
+
if (record === undefined)
|
|
167
|
+
throw new Error(`table ${table}: not in the store`);
|
|
168
|
+
return record;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=table-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-writes.js","sourceRoot":"","sources":["../../src/store/table-writes.ts"],"names":[],"mappings":"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","sourcesContent":["// Table writes (slice 6a §5, §7, §9; S17; decisions \"Writes carry their versions\", \"Index definitions are recorded\"):\n// the recorded form of every table write, the staged writes a transaction or an activation hands the commit step\n// (their SQL rendered at staging, rule 8), and the appliers of the schema writes, which render DDL from the record.\n\nimport type { TableRecord } from \"./catalog.ts\";\nimport type { ColumnRecord } from \"./columns.ts\";\nimport type { SetNode, WhereNode } from \"./expression.ts\";\nimport type { EncodedRow, Scalar, StoredRow } from \"./rows.ts\";\nimport { versionColumn } from \"./rows.ts\";\nimport { columnSql, createIndexSql, createTableSql, dropIndexSql, quote, type Statement } from \"./sql.ts\";\nimport type { StagedWrite, Step } from \"./step.ts\";\nimport type { TableDefinition } from \"./table.ts\";\nimport type { AlterEdit, TableEdit } from \"./table-history.ts\";\n\n/** A key as writes record it: the key columns' stored values. */\nexport type StoredKey = { readonly [column: string]: Scalar };\n\n/** `json(...)` columns' versions written by a write, by column. */\nexport type ColumnVersions = { readonly [column: string]: number };\n\n/** The table writes as the outbox and archives record them. */\nexport type TableWrite =\n\t| {\n\t\t\treadonly kind: \"table\";\n\t\t\treadonly table: string;\n\t\t\treadonly version: number;\n\t\t\treadonly state: \"ready\" | \"migrating\";\n\t\t\treadonly columns: { readonly [name: string]: ColumnRecord };\n\t\t\treadonly key: readonly string[];\n\t\t\treadonly fingerprint: string;\n\t }\n\t| { readonly kind: \"index\"; readonly table: string; readonly name: string; readonly columns: readonly string[] }\n\t| { readonly kind: \"dropIndex\"; readonly table: string; readonly name: string }\n\t/** A column edit of the migration to `version`; DDL rendered from it. */\n\t| { readonly kind: \"alter\"; readonly table: string; readonly version: number; readonly edit: AlterEdit }\n\t| {\n\t\t\treadonly kind: \"put\";\n\t\t\treadonly table: string;\n\t\t\treadonly row: StoredRow;\n\t\t\t/** The row's eager-step version (the table's version at the `put`). */\n\t\t\treadonly version: number;\n\t\t\treadonly columns: ColumnVersions;\n\t }\n\t| {\n\t\t\treadonly kind: \"update\";\n\t\t\treadonly table: string;\n\t\t\treadonly key: StoredKey;\n\t\t\treadonly set: SetNode;\n\t\t\treadonly columns: ColumnVersions;\n\t\t\treadonly count: number;\n\t\t\t/** A migration's data step: the version it stamps as the row's `$v` (a plugin's `update` never does). */\n\t\t\treadonly version?: number;\n\t }\n\t| { readonly kind: \"delete\"; readonly table: string; readonly key: StoredKey; readonly count: number }\n\t| {\n\t\t\treadonly kind: \"updateWhere\";\n\t\t\treadonly table: string;\n\t\t\treadonly where: WhereNode;\n\t\t\treadonly set: SetNode;\n\t\t\treadonly columns: ColumnVersions;\n\t\t\treadonly count: number;\n\t\t\t/** A migration's `update` step: the version it stamps as the rows' `$v`. */\n\t\t\treadonly version?: number;\n\t }\n\t| { readonly kind: \"deleteWhere\"; readonly table: string; readonly where: WhereNode; readonly count: number };\n\n/** The versions of the `json(...)` columns of `definition` that `set` writes, which its statement stamps. */\nexport function jsonVersions(definition: TableDefinition, set: SetNode): ReadonlyMap<string, number> {\n\tconst versions = new Map<string, number>();\n\tfor (const name of Object.keys(set)) {\n\t\tconst column = definition.byName.get(name)!;\n\t\tif (column.type === \"json\") versions.set(name, column.json.version);\n\t}\n\treturn versions;\n}\n\n/** The `columns` a write records: the versions of the `json(...)` columns it sets to a value (a clear has none). */\nexport function recordedVersions(set: SetNode, versions: ReadonlyMap<string, number>): ColumnVersions {\n\tconst columns: { [column: string]: number } = {};\n\tfor (const [column, version] of versions) if (set[column] !== null) columns[column] = version;\n\treturn columns;\n}\n\n/** The `table` write. */\nexport type TableDefinitionWrite = Extract<TableWrite, { readonly kind: \"table\" }>;\n\n/** Stages a `table` write: the table created when the store does not have it yet, its record replaced otherwise. */\nexport function stageTable(write: TableDefinitionWrite): StagedWrite {\n\treturn { order: \"write\", apply: async (step) => [await applyTable(step, write)] };\n}\n\n/** Stages an `index` write. */\nexport function stageIndex(write: Extract<TableWrite, { readonly kind: \"index\" }>): StagedWrite {\n\treturn { order: \"write\", apply: async (step) => [await applyIndex(step, write)] };\n}\n\n/** Stages one edit of the migration of `table` to `version` as its `alter`, `index` or `dropIndex` write. */\nexport function stageEdit(table: string, version: number, edit: TableEdit): StagedWrite {\n\tswitch (edit.kind) {\n\t\tcase \"index\":\n\t\t\treturn stageIndex({ kind: \"index\", table, name: edit.name, columns: edit.columns });\n\t\tcase \"dropIndex\": {\n\t\t\tconst write = { kind: \"dropIndex\", table, name: edit.name } as const;\n\t\t\treturn { order: \"write\", apply: async (step) => [await applyDropIndex(step, write)] };\n\t\t}\n\t\tdefault: {\n\t\t\tconst write = { kind: \"alter\", table, version, edit } as const;\n\t\t\treturn { order: \"write\", apply: async (step) => [await applyAlter(step, write)] };\n\t\t}\n\t}\n}\n\n/** Stages a `put` of an encoded row with its `INSERT OR REPLACE` (an upsert: the whole row replaced). */\nexport function stagePut(sql: string, table: string, row: EncodedRow, version: number): StagedWrite {\n\tconst write: TableWrite = { kind: \"put\", table, row: row.row, version, columns: row.columns };\n\treturn {\n\t\torder: \"write\",\n\t\tapply: async (step) => {\n\t\t\tawait step.run(sql, ...row.params);\n\t\t\tstep.rows++;\n\t\t\treturn [write];\n\t\t},\n\t};\n}\n\n/**\n * Stages an `update` of one row by key; its count (0 for an absent key) is recorded, and `version` when the statement stamps\n * the row's `$v` (a migration's `rows` step).\n */\nexport function stageUpdate(\n\tstatement: Statement,\n\ttable: string,\n\tkey: StoredKey,\n\tset: SetNode,\n\tcolumns: ColumnVersions,\n\tversion?: number,\n): StagedWrite {\n\tconst stamped = version === undefined ? {} : { version };\n\treturn counted(statement, (count) => ({ kind: \"update\", table, key, set, columns, count, ...stamped }));\n}\n\n/** Stages a `delete` of one row by key; its count is recorded. */\nexport function stageDelete(statement: Statement, table: string, key: StoredKey): StagedWrite {\n\treturn counted(statement, (count) => ({ kind: \"delete\", table, key, count }));\n}\n\n/**\n * Stages an `updateWhere`: one statement, its count recorded (a replica affecting another count stops, S17), and `version`\n * when it stamps the rows' `$v` (a migration's `update` step).\n */\nexport function stageUpdateWhere(\n\tstatement: Statement,\n\ttable: string,\n\twhere: WhereNode,\n\tset: SetNode,\n\tcolumns: ColumnVersions,\n\tversion?: number,\n): StagedWrite {\n\tconst stamped = version === undefined ? {} : { version };\n\treturn counted(statement, (count) => ({ kind: \"updateWhere\", table, where, set, columns, count, ...stamped }));\n}\n\n/** Stages a `deleteWhere`: one statement, its count recorded. */\nexport function stageDeleteWhere(statement: Statement, table: string, where: WhereNode): StagedWrite {\n\treturn counted(statement, (count) => ({ kind: \"deleteWhere\", table, where, count }));\n}\n\nfunction counted(statement: Statement, record: (count: number) => TableWrite): StagedWrite {\n\treturn {\n\t\torder: \"write\",\n\t\tapply: async (step) => {\n\t\t\tconst count = await step.runCounted(statement.sql, ...statement.params);\n\t\t\tstep.rows += count;\n\t\t\treturn [record(count)];\n\t\t},\n\t};\n}\n\n/** Applies a `table` write: `CREATE TABLE` when the store does not have the table yet, then its record. */\nexport async function applyTable(step: Step, write: TableDefinitionWrite): Promise<TableWrite> {\n\tconst existing = step.table(write.table);\n\tif (existing === undefined) await step.run(createTableSql(write.table, write.columns, write.key));\n\tconst { table, version, state, columns, key, fingerprint } = write;\n\tstep.tables.set(table, { table, version, state, columns, key, fingerprint, indexes: existing?.indexes ?? {} });\n\treturn write;\n}\n\n/** Applies an `index` write: `CREATE INDEX` and the record's index. */\nexport async function applyIndex(\n\tstep: Step,\n\twrite: Extract<TableWrite, { readonly kind: \"index\" }>,\n): Promise<TableWrite> {\n\tconst existing = recorded(step, write.table);\n\tawait step.run(createIndexSql(write.table, write.name, write.columns, existing.key));\n\tstep.tables.set(write.table, { ...existing, indexes: { ...existing.indexes, [write.name]: write.columns } });\n\treturn write;\n}\n\n/** Applies a `dropIndex` write: `DROP INDEX` and the record without it. */\nexport async function applyDropIndex(\n\tstep: Step,\n\twrite: Extract<TableWrite, { readonly kind: \"dropIndex\" }>,\n): Promise<TableWrite> {\n\tconst existing = recorded(step, write.table);\n\tawait step.run(dropIndexSql(write.table, write.name));\n\tconst { [write.name]: _dropped, ...indexes } = existing.indexes;\n\tstep.tables.set(write.table, { ...existing, indexes });\n\treturn write;\n}\n\n/** Applies an `alter` write: its DDL (a `json(...)` column's version column follows it) and the record's change. */\nexport async function applyAlter(\n\tstep: Step,\n\twrite: Extract<TableWrite, { readonly kind: \"alter\" }>,\n): Promise<TableWrite> {\n\tconst existing = recorded(step, write.table);\n\tconst { edit } = write;\n\tconst id = quote(write.table);\n\tswitch (edit.kind) {\n\t\tcase \"rename\": {\n\t\t\tconst json = existing.columns[edit.from]?.type === \"json\";\n\t\t\tawait step.run(`ALTER TABLE ${id} RENAME COLUMN ${quote(edit.from)} TO ${quote(edit.to)}`);\n\t\t\tif (json) {\n\t\t\t\tconst [from, to] = [versionColumn(edit.from), versionColumn(edit.to)];\n\t\t\t\tawait step.run(`ALTER TABLE ${id} RENAME COLUMN ${quote(from)} TO ${quote(to)}`);\n\t\t\t}\n\t\t\tconst rename = (column: string): string => (column === edit.from ? edit.to : column);\n\t\t\tconst columns = Object.entries(existing.columns).map(([name, column]) => [rename(name), column] as const);\n\t\t\tconst indexes = Object.entries(existing.indexes).map(([name, on]) => [name, on.map(rename)] as const);\n\t\t\tstep.tables.set(write.table, {\n\t\t\t\t...existing,\n\t\t\t\tcolumns: Object.fromEntries(columns),\n\t\t\t\tkey: existing.key.map(rename),\n\t\t\t\tindexes: Object.fromEntries(indexes),\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"add\":\n\t\t\tfor (const definition of columnSql(edit.name, edit.column)) {\n\t\t\t\tawait step.run(`ALTER TABLE ${id} ADD COLUMN ${definition}`);\n\t\t\t}\n\t\t\tstep.tables.set(write.table, { ...existing, columns: { ...existing.columns, [edit.name]: edit.column } });\n\t\t\tbreak;\n\t\tcase \"drop\": {\n\t\t\tconst json = existing.columns[edit.name]?.type === \"json\";\n\t\t\tawait step.run(`ALTER TABLE ${id} DROP COLUMN ${quote(edit.name)}`);\n\t\t\tif (json) await step.run(`ALTER TABLE ${id} DROP COLUMN ${quote(versionColumn(edit.name))}`);\n\t\t\tconst { [edit.name]: _dropped, ...columns } = existing.columns;\n\t\t\tstep.tables.set(write.table, { ...existing, columns });\n\t\t\tbreak;\n\t\t}\n\t\tcase \"json\":\n\t\t\tstep.tables.set(write.table, { ...existing, columns: { ...existing.columns, [edit.name]: edit.column } });\n\t\t\tbreak;\n\t}\n\treturn write;\n}\n\n/** The record of `table` in `step`; a write for a table the store does not have fails the step. */\nfunction recorded(step: Step, table: string): TableRecord {\n\tconst record = step.table(table);\n\t// Memory and disk disagree: the step fails, which stops the store.\n\tif (record === undefined) throw new Error(`table ${table}: not in the store`);\n\treturn record;\n}\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type Column, type ColumnRecord, type Columns, type OrderColumn } from "./columns.ts";
|
|
2
|
+
import { type ColumnRef } from "./expression.ts";
|
|
3
|
+
import { RowCodec } from "./rows.ts";
|
|
4
|
+
import type { Migration } from "./table-history.ts";
|
|
5
|
+
/** What `defineTable` takes. */
|
|
6
|
+
export type TableOptions<C extends Columns, K extends readonly OrderColumn<C>[], V extends number = number> = {
|
|
7
|
+
/** The table's version: a positive integer, raised by every change (`evolveTable`). */
|
|
8
|
+
readonly version: V;
|
|
9
|
+
readonly columns: C;
|
|
10
|
+
/** The primary key's columns, non-`opt` `str` or `int` ones. */
|
|
11
|
+
readonly key: K;
|
|
12
|
+
/** Secondary indexes by name (`[a-z0-9_]+`); each ends with the primary key. */
|
|
13
|
+
readonly indexes?: {
|
|
14
|
+
readonly [name: string]: readonly OrderColumn<C>[];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
/** The key of a row of a table with columns `C` and key `K`: an object with exactly the key columns. */
|
|
18
|
+
export type KeyOf<C extends Columns, K extends readonly string[]> = {
|
|
19
|
+
readonly [P in K[number]]: P extends keyof C ? (C[P] extends {
|
|
20
|
+
readonly type: "integer";
|
|
21
|
+
} ? number : string) : never;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Declares a table: a base version written in full, the first of its history. Later versions come from
|
|
25
|
+
* `evolveTable`; a new base starts a new history.
|
|
26
|
+
*/
|
|
27
|
+
export declare function defineTable<C extends Columns, const K extends readonly OrderColumn<C>[], const V extends number>(name: string, options: TableOptions<C, K, V>): TableDefinition<C, K, V>;
|
|
28
|
+
/** The table form's version: the fingerprints of table definitions are persisted, so their input is versioned. */
|
|
29
|
+
export declare const TABLE_FORM_VERSION = 1;
|
|
30
|
+
/** The index name rule. */
|
|
31
|
+
export declare const INDEX_NAME: RegExp;
|
|
32
|
+
/** How a version came about: the version before it and the migration from there, for one `evolveTable`. */
|
|
33
|
+
export type Evolution = {
|
|
34
|
+
readonly previous: TableDefinition;
|
|
35
|
+
readonly migration: Migration;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A declared table at one version: its columns in declaration order, key, indexes (declared columns; the key is
|
|
39
|
+
* appended when they are rendered), the fingerprint of all of it and the row codec. `C` and `K` type its rows and keys,
|
|
40
|
+
* `V` its version.
|
|
41
|
+
*/
|
|
42
|
+
export declare class TableDefinition<C extends Columns = Columns, K extends readonly string[] = readonly string[], V extends number = number> {
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly version: V;
|
|
45
|
+
/** The column schemas as declared, which `evolveTable` edits into the next version's. */
|
|
46
|
+
readonly schemas: Columns;
|
|
47
|
+
readonly columns: readonly Column[];
|
|
48
|
+
readonly byName: ReadonlyMap<string, Column>;
|
|
49
|
+
readonly key: readonly string[];
|
|
50
|
+
readonly indexes: ReadonlyMap<string, readonly string[]>;
|
|
51
|
+
/** `hash64` of the columns, key and indexes in `TABLE_FORM_VERSION`'s form. */
|
|
52
|
+
readonly fingerprint: string;
|
|
53
|
+
/** The columns as the `table` write records them. */
|
|
54
|
+
readonly record: {
|
|
55
|
+
readonly [name: string]: ColumnRecord;
|
|
56
|
+
};
|
|
57
|
+
readonly rows: RowCodec;
|
|
58
|
+
/** One reference per column, for the `(t) => …` callbacks of queries and writes. */
|
|
59
|
+
readonly refs: {
|
|
60
|
+
readonly [column: string]: ColumnRef;
|
|
61
|
+
};
|
|
62
|
+
/** The version before this one and the migration from it; `undefined` for a base. */
|
|
63
|
+
readonly evolution: Evolution | undefined;
|
|
64
|
+
/** Type only: the columns and key. */
|
|
65
|
+
readonly "~columns"?: C;
|
|
66
|
+
readonly "~key"?: K;
|
|
67
|
+
constructor(name: string, options: TableOptions<C, K & readonly OrderColumn<C>[], V>, evolution?: Evolution);
|
|
68
|
+
/** The column `name`; an unknown one throws (`what` names the use). */
|
|
69
|
+
column(name: string, what: string): Column;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Checks `names` as key, index or order columns of a table whose columns are `byName`: existing, non-`opt` `str` or
|
|
73
|
+
* `int`, no column twice (declaration policy: JavaScript callers reach it); `what` names the use in errors.
|
|
74
|
+
*/
|
|
75
|
+
export declare function orderColumns(byName: ReadonlyMap<string, Column>, names: readonly string[], what: string): readonly string[];
|
|
76
|
+
/** The fingerprint of a table's columns, key and indexes; column and index names sorted (their order is no change). */
|
|
77
|
+
export declare function tableFingerprint(columns: {
|
|
78
|
+
readonly [name: string]: ColumnRecord;
|
|
79
|
+
}, key: readonly string[], indexes: ReadonlyMap<string, readonly string[]>): string;
|
|
80
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/store/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Table definitions (slice 6a §5, §9; decisions "Flat columns", "Restricted names", "Index definitions are recorded"):
|
|
2
|
+
// `defineTable(name, { version, columns, key, indexes? })`, checked and materialized once at declaration: its columns,
|
|
3
|
+
// its key, its indexes, its fingerprint and the compiled row codec its writes and reads use. A version `evolveTable`
|
|
4
|
+
// appends links to the one before it and to the migration between them.
|
|
5
|
+
import { checkName, hash64 } from "../contracts/internal.js";
|
|
6
|
+
import { columnRecord, describeColumns, } from "./columns.js";
|
|
7
|
+
import { columnRefs } from "./expression.js";
|
|
8
|
+
import { RowCodec } from "./rows.js";
|
|
9
|
+
/**
|
|
10
|
+
* Declares a table: a base version written in full, the first of its history. Later versions come from
|
|
11
|
+
* `evolveTable`; a new base starts a new history.
|
|
12
|
+
*/
|
|
13
|
+
export function defineTable(name, options) {
|
|
14
|
+
return new TableDefinition(name, options);
|
|
15
|
+
}
|
|
16
|
+
/** The table form's version: the fingerprints of table definitions are persisted, so their input is versioned. */
|
|
17
|
+
export const TABLE_FORM_VERSION = 1;
|
|
18
|
+
/** The index name rule. */
|
|
19
|
+
export const INDEX_NAME = /^[a-z0-9_]+$/;
|
|
20
|
+
/**
|
|
21
|
+
* A declared table at one version: its columns in declaration order, key, indexes (declared columns; the key is
|
|
22
|
+
* appended when they are rendered), the fingerprint of all of it and the row codec. `C` and `K` type its rows and keys,
|
|
23
|
+
* `V` its version.
|
|
24
|
+
*/
|
|
25
|
+
export class TableDefinition {
|
|
26
|
+
name;
|
|
27
|
+
version;
|
|
28
|
+
/** The column schemas as declared, which `evolveTable` edits into the next version's. */
|
|
29
|
+
schemas;
|
|
30
|
+
columns;
|
|
31
|
+
byName;
|
|
32
|
+
key;
|
|
33
|
+
indexes;
|
|
34
|
+
/** `hash64` of the columns, key and indexes in `TABLE_FORM_VERSION`'s form. */
|
|
35
|
+
fingerprint;
|
|
36
|
+
/** The columns as the `table` write records them. */
|
|
37
|
+
record;
|
|
38
|
+
rows;
|
|
39
|
+
/** One reference per column, for the `(t) => …` callbacks of queries and writes. */
|
|
40
|
+
refs;
|
|
41
|
+
/** The version before this one and the migration from it; `undefined` for a base. */
|
|
42
|
+
evolution;
|
|
43
|
+
constructor(name, options, evolution) {
|
|
44
|
+
checkName(name, "table");
|
|
45
|
+
const { version, columns, key, indexes = {} } = options;
|
|
46
|
+
// Declaration policy: JavaScript callers reach these checks.
|
|
47
|
+
if (!Number.isSafeInteger(version) || version < 1)
|
|
48
|
+
throw new Error(`${name}: version ${version} is not a positive integer`);
|
|
49
|
+
this.name = name;
|
|
50
|
+
this.version = version;
|
|
51
|
+
this.schemas = columns;
|
|
52
|
+
this.columns = describeColumns(columns, name);
|
|
53
|
+
this.byName = new Map(this.columns.map((column) => [column.name, column]));
|
|
54
|
+
this.key = orderColumns(this.byName, key, `${name}: the key`);
|
|
55
|
+
if (this.key.length === 0)
|
|
56
|
+
throw new Error(`${name}: the key has no column`);
|
|
57
|
+
this.indexes = new Map(Object.entries(indexes).map(([index, columns]) => {
|
|
58
|
+
if (!INDEX_NAME.test(index))
|
|
59
|
+
throw new Error(`${name}: index "${index}": expected [a-z0-9_]+`);
|
|
60
|
+
return [index, orderColumns(this.byName, columns, `${name}: index "${index}"`)];
|
|
61
|
+
}));
|
|
62
|
+
this.record = Object.fromEntries(this.columns.map((column) => [column.name, columnRecord(column)]));
|
|
63
|
+
this.fingerprint = tableFingerprint(this.record, this.key, this.indexes);
|
|
64
|
+
this.rows = new RowCodec(this.columns, this.key, name);
|
|
65
|
+
this.refs = columnRefs(this.columns);
|
|
66
|
+
this.evolution = evolution;
|
|
67
|
+
}
|
|
68
|
+
/** The column `name`; an unknown one throws (`what` names the use). */
|
|
69
|
+
column(name, what) {
|
|
70
|
+
const column = this.byName.get(name);
|
|
71
|
+
if (column === undefined)
|
|
72
|
+
throw new Error(`${this.name}: ${what}: no column "${name}"`);
|
|
73
|
+
return column;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Checks `names` as key, index or order columns of a table whose columns are `byName`: existing, non-`opt` `str` or
|
|
78
|
+
* `int`, no column twice (declaration policy: JavaScript callers reach it); `what` names the use in errors.
|
|
79
|
+
*/
|
|
80
|
+
export function orderColumns(byName, names, what) {
|
|
81
|
+
if (!Array.isArray(names))
|
|
82
|
+
throw new Error(`${what}: expected an array of column names`);
|
|
83
|
+
if (new Set(names).size !== names.length)
|
|
84
|
+
throw new Error(`${what}: a column occurs twice`);
|
|
85
|
+
for (const name of names) {
|
|
86
|
+
const column = byName.get(name);
|
|
87
|
+
if (column === undefined)
|
|
88
|
+
throw new Error(`${what}: no column "${name}"`);
|
|
89
|
+
if (column.optional || (column.type !== "str" && column.type !== "int")) {
|
|
90
|
+
throw new Error(`${what}: column "${name}" is not a non-opt str() or int() column`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return [...names];
|
|
94
|
+
}
|
|
95
|
+
/** The fingerprint of a table's columns, key and indexes; column and index names sorted (their order is no change). */
|
|
96
|
+
export function tableFingerprint(columns, key, indexes) {
|
|
97
|
+
const value = { columns: sorted(Object.entries(columns)), key, indexes: sorted([...indexes]) };
|
|
98
|
+
return hash64(JSON.stringify({ tableFormVersion: TABLE_FORM_VERSION, value }));
|
|
99
|
+
}
|
|
100
|
+
function sorted(entries) {
|
|
101
|
+
return Object.fromEntries(entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/store/table.ts"],"names":[],"mappings":"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","sourcesContent":["// Table definitions (slice 6a §5, §9; decisions \"Flat columns\", \"Restricted names\", \"Index definitions are recorded\"):\n// `defineTable(name, { version, columns, key, indexes? })`, checked and materialized once at declaration: its columns,\n// its key, its indexes, its fingerprint and the compiled row codec its writes and reads use. A version `evolveTable`\n// appends links to the one before it and to the migration between them.\n\nimport { checkName, hash64 } from \"../contracts/internal.ts\";\nimport {\n\ttype Column,\n\ttype ColumnRecord,\n\ttype Columns,\n\tcolumnRecord,\n\tdescribeColumns,\n\ttype OrderColumn,\n} from \"./columns.ts\";\nimport { type ColumnRef, columnRefs } from \"./expression.ts\";\nimport { RowCodec } from \"./rows.ts\";\nimport type { Migration } from \"./table-history.ts\";\n\n/** What `defineTable` takes. */\nexport type TableOptions<C extends Columns, K extends readonly OrderColumn<C>[], V extends number = number> = {\n\t/** The table's version: a positive integer, raised by every change (`evolveTable`). */\n\treadonly version: V;\n\treadonly columns: C;\n\t/** The primary key's columns, non-`opt` `str` or `int` ones. */\n\treadonly key: K;\n\t/** Secondary indexes by name (`[a-z0-9_]+`); each ends with the primary key. */\n\treadonly indexes?: { readonly [name: string]: readonly OrderColumn<C>[] };\n};\n\n/** The key of a row of a table with columns `C` and key `K`: an object with exactly the key columns. */\nexport type KeyOf<C extends Columns, K extends readonly string[]> = {\n\treadonly [P in K[number]]: P extends keyof C ? (C[P] extends { readonly type: \"integer\" } ? number : string) : never;\n};\n\n/**\n * Declares a table: a base version written in full, the first of its history. Later versions come from\n * `evolveTable`; a new base starts a new history.\n */\nexport function defineTable<C extends Columns, const K extends readonly OrderColumn<C>[], const V extends number>(\n\tname: string,\n\toptions: TableOptions<C, K, V>,\n): TableDefinition<C, K, V> {\n\treturn new TableDefinition(name, options);\n}\n\n/** The table form's version: the fingerprints of table definitions are persisted, so their input is versioned. */\nexport const TABLE_FORM_VERSION = 1;\n\n/** The index name rule. */\nexport const INDEX_NAME = /^[a-z0-9_]+$/;\n\n/** How a version came about: the version before it and the migration from there, for one `evolveTable`. */\nexport type Evolution = { readonly previous: TableDefinition; readonly migration: Migration };\n\n/**\n * A declared table at one version: its columns in declaration order, key, indexes (declared columns; the key is\n * appended when they are rendered), the fingerprint of all of it and the row codec. `C` and `K` type its rows and keys,\n * `V` its version.\n */\nexport class TableDefinition<\n\tC extends Columns = Columns,\n\tK extends readonly string[] = readonly string[],\n\tV extends number = number,\n> {\n\treadonly name: string;\n\treadonly version: V;\n\t/** The column schemas as declared, which `evolveTable` edits into the next version's. */\n\treadonly schemas: Columns;\n\treadonly columns: readonly Column[];\n\treadonly byName: ReadonlyMap<string, Column>;\n\treadonly key: readonly string[];\n\treadonly indexes: ReadonlyMap<string, readonly string[]>;\n\t/** `hash64` of the columns, key and indexes in `TABLE_FORM_VERSION`'s form. */\n\treadonly fingerprint: string;\n\t/** The columns as the `table` write records them. */\n\treadonly record: { readonly [name: string]: ColumnRecord };\n\treadonly rows: RowCodec;\n\t/** One reference per column, for the `(t) => …` callbacks of queries and writes. */\n\treadonly refs: { readonly [column: string]: ColumnRef };\n\t/** The version before this one and the migration from it; `undefined` for a base. */\n\treadonly evolution: Evolution | undefined;\n\t/** Type only: the columns and key. */\n\tdeclare readonly \"~columns\"?: C;\n\tdeclare readonly \"~key\"?: K;\n\n\tconstructor(name: string, options: TableOptions<C, K & readonly OrderColumn<C>[], V>, evolution?: Evolution) {\n\t\tcheckName(name, \"table\");\n\t\tconst { version, columns, key, indexes = {} } = options;\n\t\t// Declaration policy: JavaScript callers reach these checks.\n\t\tif (!Number.isSafeInteger(version) || version < 1)\n\t\t\tthrow new Error(`${name}: version ${version} is not a positive integer`);\n\t\tthis.name = name;\n\t\tthis.version = version;\n\t\tthis.schemas = columns;\n\t\tthis.columns = describeColumns(columns, name);\n\t\tthis.byName = new Map(this.columns.map((column) => [column.name, column]));\n\t\tthis.key = orderColumns(this.byName, key, `${name}: the key`);\n\t\tif (this.key.length === 0) throw new Error(`${name}: the key has no column`);\n\t\tthis.indexes = new Map(\n\t\t\tObject.entries(indexes).map(([index, columns]) => {\n\t\t\t\tif (!INDEX_NAME.test(index)) throw new Error(`${name}: index \"${index}\": expected [a-z0-9_]+`);\n\t\t\t\treturn [index, orderColumns(this.byName, columns, `${name}: index \"${index}\"`)] as const;\n\t\t\t}),\n\t\t);\n\t\tthis.record = Object.fromEntries(this.columns.map((column) => [column.name, columnRecord(column)]));\n\t\tthis.fingerprint = tableFingerprint(this.record, this.key, this.indexes);\n\t\tthis.rows = new RowCodec(this.columns, this.key, name);\n\t\tthis.refs = columnRefs(this.columns);\n\t\tthis.evolution = evolution;\n\t}\n\n\t/** The column `name`; an unknown one throws (`what` names the use). */\n\tcolumn(name: string, what: string): Column {\n\t\tconst column = this.byName.get(name);\n\t\tif (column === undefined) throw new Error(`${this.name}: ${what}: no column \"${name}\"`);\n\t\treturn column;\n\t}\n}\n\n/**\n * Checks `names` as key, index or order columns of a table whose columns are `byName`: existing, non-`opt` `str` or\n * `int`, no column twice (declaration policy: JavaScript callers reach it); `what` names the use in errors.\n */\nexport function orderColumns(\n\tbyName: ReadonlyMap<string, Column>,\n\tnames: readonly string[],\n\twhat: string,\n): readonly string[] {\n\tif (!Array.isArray(names)) throw new Error(`${what}: expected an array of column names`);\n\tif (new Set(names).size !== names.length) throw new Error(`${what}: a column occurs twice`);\n\tfor (const name of names) {\n\t\tconst column = byName.get(name);\n\t\tif (column === undefined) throw new Error(`${what}: no column \"${name}\"`);\n\t\tif (column.optional || (column.type !== \"str\" && column.type !== \"int\")) {\n\t\t\tthrow new Error(`${what}: column \"${name}\" is not a non-opt str() or int() column`);\n\t\t}\n\t}\n\treturn [...names];\n}\n\n/** The fingerprint of a table's columns, key and indexes; column and index names sorted (their order is no change). */\nexport function tableFingerprint(\n\tcolumns: { readonly [name: string]: ColumnRecord },\n\tkey: readonly string[],\n\tindexes: ReadonlyMap<string, readonly string[]>,\n): string {\n\tconst value = { columns: sorted(Object.entries(columns)), key, indexes: sorted([...indexes]) };\n\treturn hash64(JSON.stringify({ tableFormVersion: TABLE_FORM_VERSION, value }));\n}\n\nfunction sorted<T>(entries: [string, T][]): { [name: string]: T } {\n\treturn Object.fromEntries(entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));\n}\n"]}
|