@aigne/afs-did-space 1.12.0-beta.5
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/LICENSE.md +26 -0
- package/README.md +129 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
- package/dist/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/afs-metadata-context.cjs +20 -0
- package/dist/afs-metadata-context.d.cts +21 -0
- package/dist/afs-metadata-context.d.cts.map +1 -0
- package/dist/afs-metadata-context.d.mts +21 -0
- package/dist/afs-metadata-context.d.mts.map +1 -0
- package/dist/afs-metadata-context.mjs +18 -0
- package/dist/afs-metadata-context.mjs.map +1 -0
- package/dist/blocklet-hook.cjs +180 -0
- package/dist/blocklet-hook.d.cts +29 -0
- package/dist/blocklet-hook.d.cts.map +1 -0
- package/dist/blocklet-hook.d.mts +29 -0
- package/dist/blocklet-hook.d.mts.map +1 -0
- package/dist/blocklet-hook.mjs +178 -0
- package/dist/blocklet-hook.mjs.map +1 -0
- package/dist/changelog-schema.cjs +603 -0
- package/dist/changelog-schema.d.cts +395 -0
- package/dist/changelog-schema.d.cts.map +1 -0
- package/dist/changelog-schema.d.mts +395 -0
- package/dist/changelog-schema.d.mts.map +1 -0
- package/dist/changelog-schema.mjs +570 -0
- package/dist/changelog-schema.mjs.map +1 -0
- package/dist/changelog-write.cjs +80 -0
- package/dist/changelog-write.d.cts +70 -0
- package/dist/changelog-write.d.cts.map +1 -0
- package/dist/changelog-write.d.mts +70 -0
- package/dist/changelog-write.d.mts.map +1 -0
- package/dist/changelog-write.mjs +77 -0
- package/dist/changelog-write.mjs.map +1 -0
- package/dist/cid-byte-cache.cjs +126 -0
- package/dist/cid-byte-cache.d.cts +46 -0
- package/dist/cid-byte-cache.d.cts.map +1 -0
- package/dist/cid-byte-cache.d.mts +47 -0
- package/dist/cid-byte-cache.d.mts.map +1 -0
- package/dist/cid-byte-cache.mjs +125 -0
- package/dist/cid-byte-cache.mjs.map +1 -0
- package/dist/cid.cjs +68 -0
- package/dist/cid.d.cts +22 -0
- package/dist/cid.d.cts.map +1 -0
- package/dist/cid.d.mts +22 -0
- package/dist/cid.d.mts.map +1 -0
- package/dist/cid.mjs +65 -0
- package/dist/cid.mjs.map +1 -0
- package/dist/client.cjs +221 -0
- package/dist/client.d.cts +72 -0
- package/dist/client.d.cts.map +1 -0
- package/dist/client.d.mts +72 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +220 -0
- package/dist/client.mjs.map +1 -0
- package/dist/cloudflare.cjs +510 -0
- package/dist/cloudflare.d.cts +307 -0
- package/dist/cloudflare.d.cts.map +1 -0
- package/dist/cloudflare.d.mts +308 -0
- package/dist/cloudflare.d.mts.map +1 -0
- package/dist/cloudflare.mjs +507 -0
- package/dist/cloudflare.mjs.map +1 -0
- package/dist/ctime-backfill.cjs +272 -0
- package/dist/ctime-backfill.d.cts +169 -0
- package/dist/ctime-backfill.d.cts.map +1 -0
- package/dist/ctime-backfill.d.mts +169 -0
- package/dist/ctime-backfill.d.mts.map +1 -0
- package/dist/ctime-backfill.mjs +267 -0
- package/dist/ctime-backfill.mjs.map +1 -0
- package/dist/d1-gc-queue.cjs +80 -0
- package/dist/d1-gc-queue.d.cts +59 -0
- package/dist/d1-gc-queue.d.cts.map +1 -0
- package/dist/d1-gc-queue.d.mts +59 -0
- package/dist/d1-gc-queue.d.mts.map +1 -0
- package/dist/d1-gc-queue.mjs +81 -0
- package/dist/d1-gc-queue.mjs.map +1 -0
- package/dist/d1-resolve-store.cjs +189 -0
- package/dist/d1-resolve-store.d.cts +93 -0
- package/dist/d1-resolve-store.d.cts.map +1 -0
- package/dist/d1-resolve-store.d.mts +93 -0
- package/dist/d1-resolve-store.d.mts.map +1 -0
- package/dist/d1-resolve-store.mjs +190 -0
- package/dist/d1-resolve-store.mjs.map +1 -0
- package/dist/d1-schema.cjs +361 -0
- package/dist/d1-schema.d.cts +237 -0
- package/dist/d1-schema.d.cts.map +1 -0
- package/dist/d1-schema.d.mts +237 -0
- package/dist/d1-schema.d.mts.map +1 -0
- package/dist/d1-schema.mjs +341 -0
- package/dist/d1-schema.mjs.map +1 -0
- package/dist/d1-share-store.cjs +0 -0
- package/dist/d1-share-store.d.cts +53 -0
- package/dist/d1-share-store.d.cts.map +1 -0
- package/dist/d1-share-store.d.mts +53 -0
- package/dist/d1-share-store.d.mts.map +1 -0
- package/dist/d1-share-store.mjs +0 -0
- package/dist/d1-share-store.mjs.map +1 -0
- package/dist/d1-tree-index.cjs +1098 -0
- package/dist/d1-tree-index.d.cts +203 -0
- package/dist/d1-tree-index.d.cts.map +1 -0
- package/dist/d1-tree-index.d.mts +203 -0
- package/dist/d1-tree-index.d.mts.map +1 -0
- package/dist/d1-tree-index.mjs +1094 -0
- package/dist/d1-tree-index.mjs.map +1 -0
- package/dist/data-backend.cjs +147 -0
- package/dist/data-backend.d.cts +30 -0
- package/dist/data-backend.d.cts.map +1 -0
- package/dist/data-backend.d.mts +30 -0
- package/dist/data-backend.d.mts.map +1 -0
- package/dist/data-backend.mjs +148 -0
- package/dist/data-backend.mjs.map +1 -0
- package/dist/dedup-backfill.cjs +278 -0
- package/dist/dedup-backfill.d.cts +165 -0
- package/dist/dedup-backfill.d.cts.map +1 -0
- package/dist/dedup-backfill.d.mts +165 -0
- package/dist/dedup-backfill.d.mts.map +1 -0
- package/dist/dedup-backfill.mjs +273 -0
- package/dist/dedup-backfill.mjs.map +1 -0
- package/dist/did-space-like.d.cts +2 -0
- package/dist/did-space-like.d.mts +2 -0
- package/dist/did-utils.cjs +44 -0
- package/dist/did-utils.d.cts +25 -0
- package/dist/did-utils.d.cts.map +1 -0
- package/dist/did-utils.d.mts +25 -0
- package/dist/did-utils.d.mts.map +1 -0
- package/dist/did-utils.mjs +43 -0
- package/dist/did-utils.mjs.map +1 -0
- package/dist/dirty-path-queue.cjs +31 -0
- package/dist/dirty-path-queue.d.cts +104 -0
- package/dist/dirty-path-queue.d.cts.map +1 -0
- package/dist/dirty-path-queue.d.mts +104 -0
- package/dist/dirty-path-queue.d.mts.map +1 -0
- package/dist/dirty-path-queue.mjs +31 -0
- package/dist/dirty-path-queue.mjs.map +1 -0
- package/dist/dirty-path-schema.cjs +142 -0
- package/dist/dirty-path-schema.d.cts +90 -0
- package/dist/dirty-path-schema.d.cts.map +1 -0
- package/dist/dirty-path-schema.d.mts +90 -0
- package/dist/dirty-path-schema.d.mts.map +1 -0
- package/dist/dirty-path-schema.mjs +136 -0
- package/dist/dirty-path-schema.mjs.map +1 -0
- package/dist/download-actions.cjs +43 -0
- package/dist/download-actions.mjs +40 -0
- package/dist/download-actions.mjs.map +1 -0
- package/dist/fs-object-store.cjs +153 -0
- package/dist/fs-object-store.d.cts +21 -0
- package/dist/fs-object-store.d.cts.map +1 -0
- package/dist/fs-object-store.d.mts +22 -0
- package/dist/fs-object-store.d.mts.map +1 -0
- package/dist/fs-object-store.mjs +153 -0
- package/dist/fs-object-store.mjs.map +1 -0
- package/dist/gc-queue.d.cts +43 -0
- package/dist/gc-queue.d.cts.map +1 -0
- package/dist/gc-queue.d.mts +43 -0
- package/dist/gc-queue.d.mts.map +1 -0
- package/dist/index.cjs +2712 -0
- package/dist/index.d.cts +504 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +505 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2537 -0
- package/dist/index.mjs.map +1 -0
- package/dist/inline-content-migration.cjs +212 -0
- package/dist/inline-content-migration.d.cts +110 -0
- package/dist/inline-content-migration.d.cts.map +1 -0
- package/dist/inline-content-migration.d.mts +111 -0
- package/dist/inline-content-migration.d.mts.map +1 -0
- package/dist/inline-content-migration.mjs +207 -0
- package/dist/inline-content-migration.mjs.map +1 -0
- package/dist/inline-content.cjs +145 -0
- package/dist/inline-content.d.cts +98 -0
- package/dist/inline-content.d.cts.map +1 -0
- package/dist/inline-content.d.mts +98 -0
- package/dist/inline-content.d.mts.map +1 -0
- package/dist/inline-content.mjs +137 -0
- package/dist/inline-content.mjs.map +1 -0
- package/dist/local-changelog.cjs +241 -0
- package/dist/local-changelog.d.cts +119 -0
- package/dist/local-changelog.d.cts.map +1 -0
- package/dist/local-changelog.d.mts +119 -0
- package/dist/local-changelog.d.mts.map +1 -0
- package/dist/local-changelog.mjs +240 -0
- package/dist/local-changelog.mjs.map +1 -0
- package/dist/local.cjs +435 -0
- package/dist/local.d.cts +254 -0
- package/dist/local.d.cts.map +1 -0
- package/dist/local.d.mts +254 -0
- package/dist/local.d.mts.map +1 -0
- package/dist/local.mjs +427 -0
- package/dist/local.mjs.map +1 -0
- package/dist/memory-gc-queue.cjs +36 -0
- package/dist/memory-gc-queue.d.cts +22 -0
- package/dist/memory-gc-queue.d.cts.map +1 -0
- package/dist/memory-gc-queue.d.mts +22 -0
- package/dist/memory-gc-queue.d.mts.map +1 -0
- package/dist/memory-gc-queue.mjs +36 -0
- package/dist/memory-gc-queue.mjs.map +1 -0
- package/dist/memory-tree-index.cjs +734 -0
- package/dist/memory-tree-index.d.cts +159 -0
- package/dist/memory-tree-index.d.cts.map +1 -0
- package/dist/memory-tree-index.d.mts +159 -0
- package/dist/memory-tree-index.d.mts.map +1 -0
- package/dist/memory-tree-index.mjs +735 -0
- package/dist/memory-tree-index.mjs.map +1 -0
- package/dist/metadata-db.cjs +562 -0
- package/dist/metadata-db.d.cts +102 -0
- package/dist/metadata-db.d.cts.map +1 -0
- package/dist/metadata-db.d.mts +102 -0
- package/dist/metadata-db.d.mts.map +1 -0
- package/dist/metadata-db.mjs +562 -0
- package/dist/metadata-db.mjs.map +1 -0
- package/dist/mime-utils.cjs +2 -0
- package/dist/mime-utils.d.cts +2 -0
- package/dist/mime-utils.d.mts +2 -0
- package/dist/mime-utils.mjs +3 -0
- package/dist/object-key.cjs +41 -0
- package/dist/object-key.d.cts +25 -0
- package/dist/object-key.d.cts.map +1 -0
- package/dist/object-key.d.mts +25 -0
- package/dist/object-key.d.mts.map +1 -0
- package/dist/object-key.mjs +40 -0
- package/dist/object-key.mjs.map +1 -0
- package/dist/packages/session/dist/index.cjs +788 -0
- package/dist/packages/session/dist/index.mjs +782 -0
- package/dist/packages/session/dist/index.mjs.map +1 -0
- package/dist/platform/r2/dist/types.d.cts +49 -0
- package/dist/platform/r2/dist/types.d.cts.map +1 -0
- package/dist/prefix-range.cjs +33 -0
- package/dist/prefix-range.d.cts +29 -0
- package/dist/prefix-range.d.cts.map +1 -0
- package/dist/prefix-range.d.mts +29 -0
- package/dist/prefix-range.d.mts.map +1 -0
- package/dist/prefix-range.mjs +33 -0
- package/dist/prefix-range.mjs.map +1 -0
- package/dist/prefixed-tree-index.cjs +238 -0
- package/dist/prefixed-tree-index.d.cts +85 -0
- package/dist/prefixed-tree-index.d.cts.map +1 -0
- package/dist/prefixed-tree-index.d.mts +85 -0
- package/dist/prefixed-tree-index.d.mts.map +1 -0
- package/dist/prefixed-tree-index.mjs +239 -0
- package/dist/prefixed-tree-index.mjs.map +1 -0
- package/dist/presign-signer.cjs +7 -0
- package/dist/presign-signer.d.cts +99 -0
- package/dist/presign-signer.d.cts.map +1 -0
- package/dist/presign-signer.d.mts +99 -0
- package/dist/presign-signer.d.mts.map +1 -0
- package/dist/presign-signer.mjs +7 -0
- package/dist/presign-signer.mjs.map +1 -0
- package/dist/providers/platform/r2/dist/index.d.mts +3 -0
- package/dist/providers/platform/r2/dist/types.d.mts +49 -0
- package/dist/providers/platform/r2/dist/types.d.mts.map +1 -0
- package/dist/reconcile.cjs +184 -0
- package/dist/reconcile.d.cts +26 -0
- package/dist/reconcile.d.cts.map +1 -0
- package/dist/reconcile.d.mts +26 -0
- package/dist/reconcile.d.mts.map +1 -0
- package/dist/reconcile.mjs +184 -0
- package/dist/reconcile.mjs.map +1 -0
- package/dist/reference-check.cjs +49 -0
- package/dist/reference-check.d.cts +10 -0
- package/dist/reference-check.d.cts.map +1 -0
- package/dist/reference-check.d.mts +10 -0
- package/dist/reference-check.d.mts.map +1 -0
- package/dist/reference-check.mjs +48 -0
- package/dist/reference-check.mjs.map +1 -0
- package/dist/remote-afs.cjs +681 -0
- package/dist/remote-afs.d.cts +236 -0
- package/dist/remote-afs.d.cts.map +1 -0
- package/dist/remote-afs.d.mts +236 -0
- package/dist/remote-afs.d.mts.map +1 -0
- package/dist/remote-afs.mjs +676 -0
- package/dist/remote-afs.mjs.map +1 -0
- package/dist/rename-guard.cjs +18 -0
- package/dist/rename-guard.mjs +18 -0
- package/dist/rename-guard.mjs.map +1 -0
- package/dist/resolve.cjs +260 -0
- package/dist/resolve.d.cts +113 -0
- package/dist/resolve.d.cts.map +1 -0
- package/dist/resolve.d.mts +113 -0
- package/dist/resolve.d.mts.map +1 -0
- package/dist/resolve.mjs +260 -0
- package/dist/resolve.mjs.map +1 -0
- package/dist/rsync-content.cjs +33 -0
- package/dist/rsync-content.mjs +33 -0
- package/dist/rsync-content.mjs.map +1 -0
- package/dist/rsync.cjs +400 -0
- package/dist/rsync.d.cts +157 -0
- package/dist/rsync.d.cts.map +1 -0
- package/dist/rsync.d.mts +157 -0
- package/dist/rsync.d.mts.map +1 -0
- package/dist/rsync.mjs +397 -0
- package/dist/rsync.mjs.map +1 -0
- package/dist/run-gc.cjs +57 -0
- package/dist/run-gc.d.cts +40 -0
- package/dist/run-gc.d.cts.map +1 -0
- package/dist/run-gc.d.mts +41 -0
- package/dist/run-gc.d.mts.map +1 -0
- package/dist/run-gc.mjs +57 -0
- package/dist/run-gc.mjs.map +1 -0
- package/dist/scope-id.cjs +70 -0
- package/dist/scope-id.d.cts +35 -0
- package/dist/scope-id.d.cts.map +1 -0
- package/dist/scope-id.d.mts +35 -0
- package/dist/scope-id.d.mts.map +1 -0
- package/dist/scope-id.mjs +68 -0
- package/dist/scope-id.mjs.map +1 -0
- package/dist/scope-migration-node.cjs +172 -0
- package/dist/scope-migration-node.d.cts +44 -0
- package/dist/scope-migration-node.d.cts.map +1 -0
- package/dist/scope-migration-node.d.mts +44 -0
- package/dist/scope-migration-node.d.mts.map +1 -0
- package/dist/scope-migration-node.mjs +171 -0
- package/dist/scope-migration-node.mjs.map +1 -0
- package/dist/scope-migration.cjs +155 -0
- package/dist/scope-migration.d.cts +65 -0
- package/dist/scope-migration.d.cts.map +1 -0
- package/dist/scope-migration.d.mts +65 -0
- package/dist/scope-migration.d.mts.map +1 -0
- package/dist/scope-migration.mjs +154 -0
- package/dist/scope-migration.mjs.map +1 -0
- package/dist/share-declaration.cjs +225 -0
- package/dist/share-declaration.d.cts +30 -0
- package/dist/share-declaration.d.cts.map +1 -0
- package/dist/share-declaration.d.mts +32 -0
- package/dist/share-declaration.d.mts.map +1 -0
- package/dist/share-declaration.mjs +221 -0
- package/dist/share-declaration.mjs.map +1 -0
- package/dist/share-hook.cjs +63 -0
- package/dist/share-hook.mjs +62 -0
- package/dist/share-hook.mjs.map +1 -0
- package/dist/share-resolve.cjs +176 -0
- package/dist/share-resolve.d.cts +36 -0
- package/dist/share-resolve.d.cts.map +1 -0
- package/dist/share-resolve.d.mts +36 -0
- package/dist/share-resolve.d.mts.map +1 -0
- package/dist/share-resolve.mjs +177 -0
- package/dist/share-resolve.mjs.map +1 -0
- package/dist/share-serve.cjs +145 -0
- package/dist/share-serve.d.cts +30 -0
- package/dist/share-serve.d.cts.map +1 -0
- package/dist/share-serve.d.mts +30 -0
- package/dist/share-serve.d.mts.map +1 -0
- package/dist/share-serve.mjs +144 -0
- package/dist/share-serve.mjs.map +1 -0
- package/dist/share-store.cjs +25 -0
- package/dist/share-store.d.cts +65 -0
- package/dist/share-store.d.cts.map +1 -0
- package/dist/share-store.d.mts +65 -0
- package/dist/share-store.d.mts.map +1 -0
- package/dist/share-store.mjs +25 -0
- package/dist/share-store.mjs.map +1 -0
- package/dist/share-virtual-path.cjs +102 -0
- package/dist/share-virtual-path.mjs +101 -0
- package/dist/share-virtual-path.mjs.map +1 -0
- package/dist/space-resolver.cjs +54 -0
- package/dist/space-resolver.d.cts +34 -0
- package/dist/space-resolver.d.cts.map +1 -0
- package/dist/space-resolver.d.mts +34 -0
- package/dist/space-resolver.d.mts.map +1 -0
- package/dist/space-resolver.mjs +55 -0
- package/dist/space-resolver.mjs.map +1 -0
- package/dist/sqlite-gc-queue.cjs +51 -0
- package/dist/sqlite-gc-queue.d.cts +22 -0
- package/dist/sqlite-gc-queue.d.cts.map +1 -0
- package/dist/sqlite-gc-queue.d.mts +22 -0
- package/dist/sqlite-gc-queue.d.mts.map +1 -0
- package/dist/sqlite-gc-queue.mjs +52 -0
- package/dist/sqlite-gc-queue.mjs.map +1 -0
- package/dist/sqlite-resolve-store.cjs +163 -0
- package/dist/sqlite-resolve-store.d.cts +50 -0
- package/dist/sqlite-resolve-store.d.cts.map +1 -0
- package/dist/sqlite-resolve-store.d.mts +50 -0
- package/dist/sqlite-resolve-store.d.mts.map +1 -0
- package/dist/sqlite-resolve-store.mjs +164 -0
- package/dist/sqlite-resolve-store.mjs.map +1 -0
- package/dist/sqlite-share-store.cjs +157 -0
- package/dist/sqlite-share-store.d.cts +31 -0
- package/dist/sqlite-share-store.d.cts.map +1 -0
- package/dist/sqlite-share-store.d.mts +31 -0
- package/dist/sqlite-share-store.d.mts.map +1 -0
- package/dist/sqlite-share-store.mjs +157 -0
- package/dist/sqlite-share-store.mjs.map +1 -0
- package/dist/sqlite-tree-index.cjs +901 -0
- package/dist/sqlite-tree-index.d.cts +107 -0
- package/dist/sqlite-tree-index.d.cts.map +1 -0
- package/dist/sqlite-tree-index.d.mts +107 -0
- package/dist/sqlite-tree-index.d.mts.map +1 -0
- package/dist/sqlite-tree-index.mjs +902 -0
- package/dist/sqlite-tree-index.mjs.map +1 -0
- package/dist/sync-engine.cjs +1324 -0
- package/dist/sync-engine.d.cts +473 -0
- package/dist/sync-engine.d.cts.map +1 -0
- package/dist/sync-engine.d.mts +473 -0
- package/dist/sync-engine.d.mts.map +1 -0
- package/dist/sync-engine.mjs +1315 -0
- package/dist/sync-engine.mjs.map +1 -0
- package/dist/sync-state.cjs +303 -0
- package/dist/sync-state.d.cts +224 -0
- package/dist/sync-state.d.cts.map +1 -0
- package/dist/sync-state.d.mts +224 -0
- package/dist/sync-state.d.mts.map +1 -0
- package/dist/sync-state.mjs +297 -0
- package/dist/sync-state.mjs.map +1 -0
- package/dist/timestamp.cjs +92 -0
- package/dist/timestamp.mjs +91 -0
- package/dist/timestamp.mjs.map +1 -0
- package/dist/transports/http.cjs +54 -0
- package/dist/transports/http.d.cts +26 -0
- package/dist/transports/http.d.cts.map +1 -0
- package/dist/transports/http.d.mts +26 -0
- package/dist/transports/http.d.mts.map +1 -0
- package/dist/transports/http.mjs +54 -0
- package/dist/transports/http.mjs.map +1 -0
- package/dist/transports/static.cjs +55 -0
- package/dist/transports/static.d.cts +28 -0
- package/dist/transports/static.d.cts.map +1 -0
- package/dist/transports/static.d.mts +28 -0
- package/dist/transports/static.d.mts.map +1 -0
- package/dist/transports/static.mjs +55 -0
- package/dist/transports/static.mjs.map +1 -0
- package/dist/transports/types.cjs +13 -0
- package/dist/transports/types.d.cts +72 -0
- package/dist/transports/types.d.cts.map +1 -0
- package/dist/transports/types.d.mts +72 -0
- package/dist/transports/types.d.mts.map +1 -0
- package/dist/transports/types.mjs +13 -0
- package/dist/transports/types.mjs.map +1 -0
- package/dist/transports/ws.cjs +207 -0
- package/dist/transports/ws.d.cts +47 -0
- package/dist/transports/ws.d.cts.map +1 -0
- package/dist/transports/ws.d.mts +47 -0
- package/dist/transports/ws.d.mts.map +1 -0
- package/dist/transports/ws.mjs +206 -0
- package/dist/transports/ws.mjs.map +1 -0
- package/dist/tree-index.cjs +333 -0
- package/dist/tree-index.d.cts +524 -0
- package/dist/tree-index.d.cts.map +1 -0
- package/dist/tree-index.d.mts +524 -0
- package/dist/tree-index.d.mts.map +1 -0
- package/dist/tree-index.mjs +322 -0
- package/dist/tree-index.mjs.map +1 -0
- package/dist/tree-query.cjs +655 -0
- package/dist/tree-query.d.cts +70 -0
- package/dist/tree-query.d.cts.map +1 -0
- package/dist/tree-query.d.mts +70 -0
- package/dist/tree-query.d.mts.map +1 -0
- package/dist/tree-query.mjs +648 -0
- package/dist/tree-query.mjs.map +1 -0
- package/dist/upload-actions.cjs +97 -0
- package/dist/upload-actions.d.cts +19 -0
- package/dist/upload-actions.d.cts.map +1 -0
- package/dist/upload-actions.d.mts +21 -0
- package/dist/upload-actions.d.mts.map +1 -0
- package/dist/upload-actions.mjs +90 -0
- package/dist/upload-actions.mjs.map +1 -0
- package/dist/upload-session-store.cjs +185 -0
- package/dist/upload-session-store.d.cts +99 -0
- package/dist/upload-session-store.d.cts.map +1 -0
- package/dist/upload-session-store.d.mts +99 -0
- package/dist/upload-session-store.d.mts.map +1 -0
- package/dist/upload-session-store.mjs +184 -0
- package/dist/upload-session-store.mjs.map +1 -0
- package/dist/url-normalize.cjs +61 -0
- package/dist/url-normalize.d.cts +33 -0
- package/dist/url-normalize.d.cts.map +1 -0
- package/dist/url-normalize.d.mts +33 -0
- package/dist/url-normalize.d.mts.map +1 -0
- package/dist/url-normalize.mjs +61 -0
- package/dist/url-normalize.mjs.map +1 -0
- package/dist/versioned-content-backends.cjs +155 -0
- package/dist/versioned-content-backends.d.cts +49 -0
- package/dist/versioned-content-backends.d.cts.map +1 -0
- package/dist/versioned-content-backends.d.mts +49 -0
- package/dist/versioned-content-backends.d.mts.map +1 -0
- package/dist/versioned-content-backends.mjs +154 -0
- package/dist/versioned-content-backends.mjs.map +1 -0
- package/dist/versioned-content-index.cjs +102 -0
- package/dist/versioned-content-index.d.cts +46 -0
- package/dist/versioned-content-index.d.cts.map +1 -0
- package/dist/versioned-content-index.d.mts +46 -0
- package/dist/versioned-content-index.d.mts.map +1 -0
- package/dist/versioned-content-index.mjs +103 -0
- package/dist/versioned-content-index.mjs.map +1 -0
- package/dist/versioned-content-store.cjs +121 -0
- package/dist/versioned-content-store.d.cts +90 -0
- package/dist/versioned-content-store.d.cts.map +1 -0
- package/dist/versioned-content-store.d.mts +90 -0
- package/dist/versioned-content-store.d.mts.map +1 -0
- package/dist/versioned-content-store.mjs +122 -0
- package/dist/versioned-content-store.mjs.map +1 -0
- package/dist/versioned-scope.cjs +39 -0
- package/dist/versioned-scope.d.cts +57 -0
- package/dist/versioned-scope.d.cts.map +1 -0
- package/dist/versioned-scope.d.mts +57 -0
- package/dist/versioned-scope.d.mts.map +1 -0
- package/dist/versioned-scope.mjs +37 -0
- package/dist/versioned-scope.mjs.map +1 -0
- package/migrations/0001_tree_entries.sql +17 -0
- package/migrations/0002_resolve_entries.sql +7 -0
- package/migrations/0003_entries_v2.sql +38 -0
- package/migrations/0004_gc_queue.sql +5 -0
- package/migrations/0006_resolve_enhance.sql +14 -0
- package/migrations/0007_resolve_created_at.sql +10 -0
- package/migrations/0008_changelog.sql +34 -0
- package/migrations/0009_device_sync_state.sql +29 -0
- package/migrations/0010_scope_meta.sql +33 -0
- package/migrations/0011_shares.sql +25 -0
- package/migrations/0012_scope_meta_file_count.sql +41 -0
- package/migrations/0013_scope_meta_total_bytes.sql +47 -0
- package/migrations/0014_rename_tables.sql +62 -0
- package/package.json +102 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
//#region src/changelog-schema.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Changelog table schema — single source of truth for the four runtimes:
|
|
4
|
+
* - D1 (Cloudflare Worker) : migrations/0008_changelog.sql + d1-tree-index.ts
|
|
5
|
+
* - desktop SQLite (libsql) : metadata-db.ts ensureChangelogTable()
|
|
6
|
+
* - Swift SQLite (mobile) : SQLiteTreeIndex.swift migrate()
|
|
7
|
+
* - Kotlin SQLite (mobile) : SQLiteTreeIndex.kt migrate()
|
|
8
|
+
*
|
|
9
|
+
* The CI parity script (`scripts/check-changelog-ddl-parity.ts`) reads the
|
|
10
|
+
* DDL strings out of all four locations, normalises whitespace, lower-cases
|
|
11
|
+
* keywords/identifiers, and asserts byte equality.
|
|
12
|
+
*
|
|
13
|
+
* **Do not edit any of those four sources without updating the others.**
|
|
14
|
+
*
|
|
15
|
+
* Phase 2 Task 2.1 introduces the schema only — `put`/`delete` start writing
|
|
16
|
+
* changelog rows in Task 2.4. Until then the table sits empty.
|
|
17
|
+
*/
|
|
18
|
+
/** CREATE TABLE statement. Idempotent (`IF NOT EXISTS`). */
|
|
19
|
+
declare const CHANGELOG_TABLE_SQL = "CREATE TABLE IF NOT EXISTS ds_changelog (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n scope TEXT NOT NULL,\n path TEXT NOT NULL,\n op TEXT NOT NULL,\n cid TEXT,\n old_cid TEXT,\n size INTEGER,\n mtime INTEGER NOT NULL,\n device_id TEXT NOT NULL,\n CHECK (op IN ('put', 'delete'))\n)";
|
|
20
|
+
/**
|
|
21
|
+
* CREATE INDEX statements. Order matches migration file.
|
|
22
|
+
*
|
|
23
|
+
* The cid / old_cid indexes are **scope-composite** (`(scope, cid)` /
|
|
24
|
+
* `(scope, old_cid)`), NOT bare `(cid)` / `(old_cid)`: the only readers are
|
|
25
|
+
* `isReferenced` / `isReferencedMany`, which ALWAYS filter `scope = ?` (read-
|
|
26
|
+
* auth, design §7.2). A bare-cid index forces the `cid IN (…)` seek to fan out
|
|
27
|
+
* across every scope + the whole append-only history (Model B global object
|
|
28
|
+
* pool) and residual-filter scope afterwards — the 7180× rows_read blow-up on
|
|
29
|
+
* staging D1. Leading `scope` collapses the seek to one user's rows. No live
|
|
30
|
+
* SCOPE-BLIND reader exists (GC liveness uses entries-only `referencedAnywhere`;
|
|
31
|
+
* the scope-blind three-way `D1GCQueue.isReferenced` is retired), so these
|
|
32
|
+
* replace the old globals rather than adding to them — index count unchanged,
|
|
33
|
+
* no extra write-amplification on the hot append-only changelog.
|
|
34
|
+
*/
|
|
35
|
+
declare const CHANGELOG_INDEX_SQL: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* Migration 0110 — swap the legacy bare-cid changelog indexes for the
|
|
38
|
+
* scope-composite ones above. An explicit `DROP` is required: `CREATE INDEX
|
|
39
|
+
* IF NOT EXISTS idx_changelog_scope_cid …` lands the new index on fresh DBs,
|
|
40
|
+
* but an already-deployed DB carries the OLD `idx_changelog_cid` / `_old_cid`
|
|
41
|
+
* names — those must be dropped or they linger as orphan indexes, still
|
|
42
|
+
* maintained on every changelog insert. Fresh DBs apply the regenerated 0100
|
|
43
|
+
* (new names) THEN this (DROP no-ops on the absent old names, CREATE no-ops on
|
|
44
|
+
* the already-present new ones) → idempotent both ways. Sourced here so the
|
|
45
|
+
* migration and `ensureTable` share one definition. D1 + Node libsql only
|
|
46
|
+
* (mobile single-device runtimes have no scope selectivity to gain).
|
|
47
|
+
*/
|
|
48
|
+
declare const CHANGELOG_SCOPE_CID_MIGRATION_SQL: readonly string[];
|
|
49
|
+
/**
|
|
50
|
+
* Combined DDL block (table + indices), separated by `;\n`.
|
|
51
|
+
*
|
|
52
|
+
* This is the canonical form against which Swift/Kotlin literals and the
|
|
53
|
+
* migration SQL file are compared. The parity script normalises whitespace
|
|
54
|
+
* and case before byte-comparing, so reformatting any one location is fine
|
|
55
|
+
* as long as the SQL semantics stay identical.
|
|
56
|
+
*/
|
|
57
|
+
declare const CHANGELOG_DDL: string;
|
|
58
|
+
/**
|
|
59
|
+
* Phase 2 Task 2.2 — `device_sync_state` table (D1 only).
|
|
60
|
+
*
|
|
61
|
+
* Worker-side per-device sync progress tracker. Unlike `changelog`, this
|
|
62
|
+
* table lives ONLY in Cloudflare D1; mobile runtimes do not mirror it.
|
|
63
|
+
* Each row records the highest changelog.seq a device has acknowledged
|
|
64
|
+
* plus heartbeat timestamps.
|
|
65
|
+
*
|
|
66
|
+
* Columns:
|
|
67
|
+
* - scope : DID Space scope (matches changelog.scope semantics)
|
|
68
|
+
* - device_id : opaque device identifier from request header
|
|
69
|
+
* - last_seq : highest changelog.seq this device has consumed
|
|
70
|
+
* - last_sync_at : unix millis of last successful advancement of last_seq
|
|
71
|
+
* - last_seen_at : unix millis of most recent heartbeat / HTTP touch
|
|
72
|
+
*
|
|
73
|
+
* Composite PRIMARY KEY `(scope, device_id)` means the table is a regular
|
|
74
|
+
* rowid table (no WITHOUT ROWID) so row updates stay cheap.
|
|
75
|
+
*
|
|
76
|
+
* NOT parity-checked by `scripts/check-changelog-ddl-parity.ts` — this DDL
|
|
77
|
+
* is D1-only. Kept here beside `CHANGELOG_*` so the full D1 schema sits in
|
|
78
|
+
* one file for future readers.
|
|
79
|
+
*/
|
|
80
|
+
declare const DEVICE_SYNC_STATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS ds_device_sync_state (\n scope TEXT NOT NULL,\n device_id TEXT NOT NULL,\n last_seq INTEGER NOT NULL DEFAULT 0,\n last_sync_at INTEGER NOT NULL,\n last_seen_at INTEGER NOT NULL,\n PRIMARY KEY (scope, device_id)\n)";
|
|
81
|
+
/** CREATE INDEX statements for `device_sync_state`. Order matches migration. */
|
|
82
|
+
declare const DEVICE_SYNC_STATE_INDEX_SQL: readonly string[];
|
|
83
|
+
/**
|
|
84
|
+
* Phase 2 Task 2.3 — `scope_meta` table (D1 only).
|
|
85
|
+
*
|
|
86
|
+
* Per-scope compaction metadata for the Cloudflare Worker. One row per
|
|
87
|
+
* DID Space scope. Written by G16 emergency compaction; read by the
|
|
88
|
+
* G5.a sync endpoint to decide whether to 409 incoming pulls whose
|
|
89
|
+
* `since` sits below the compaction watermark.
|
|
90
|
+
*
|
|
91
|
+
* Columns:
|
|
92
|
+
* - scope : DID Space scope (matches changelog.scope)
|
|
93
|
+
* - compacted_below_seq : highest seq that has been compacted away;
|
|
94
|
+
* incoming syncs with since < this value
|
|
95
|
+
* must receive a 409 requireFullResync.
|
|
96
|
+
* Monotonically non-decreasing.
|
|
97
|
+
* - last_compaction_at : unix millis of most recent compaction pass
|
|
98
|
+
* - total_changelog_writes : running counter of changelog rows ever
|
|
99
|
+
* written to this scope (deletes do NOT
|
|
100
|
+
* decrement); used by G16 to decide when to
|
|
101
|
+
* trigger emergency compaction
|
|
102
|
+
* - file_count : live count of `kind='file'` rows in `entries`
|
|
103
|
+
* for this scope. Maintained by the two
|
|
104
|
+
* `trg_entries_file_count_*` triggers below so
|
|
105
|
+
* the per-write capacity guard reads ONE row
|
|
106
|
+
* instead of a full-scope `COUNT(*)` scan (the
|
|
107
|
+
* O(N²) rows_read blow-up that exhausted the D1
|
|
108
|
+
* free tier during bulk sync). UNLIKE
|
|
109
|
+
* total_changelog_writes, deletes DO decrement it
|
|
110
|
+
* (floored at 0).
|
|
111
|
+
*
|
|
112
|
+
* Scopes are lazy-initialised: the row is NOT created on first changelog
|
|
113
|
+
* write. It's only materialised when compaction first runs for the
|
|
114
|
+
* scope. The `getCompactedBelowSeq` helper returns 0 for missing rows —
|
|
115
|
+
* the correct "nothing compacted yet" sentinel.
|
|
116
|
+
*
|
|
117
|
+
* PRIMARY KEY on `scope` makes this a regular rowid table; no secondary
|
|
118
|
+
* indices are needed since all lookups are by PK.
|
|
119
|
+
*
|
|
120
|
+
* NOT parity-checked by `scripts/check-changelog-ddl-parity.ts` — this
|
|
121
|
+
* DDL is D1-only (mobile runtimes do not mirror it). Kept here beside
|
|
122
|
+
* `CHANGELOG_*` and `DEVICE_SYNC_STATE_*` so the full D1 schema sits in
|
|
123
|
+
* one file for future readers.
|
|
124
|
+
*/
|
|
125
|
+
declare const SCOPE_META_TABLE_SQL = "CREATE TABLE IF NOT EXISTS ds_scope_meta (\n scope TEXT PRIMARY KEY,\n compacted_below_seq INTEGER NOT NULL DEFAULT 0,\n last_compaction_at INTEGER NOT NULL DEFAULT 0,\n total_changelog_writes INTEGER NOT NULL DEFAULT 0,\n file_count INTEGER NOT NULL DEFAULT 0\n)";
|
|
126
|
+
/**
|
|
127
|
+
* Additive ALTER for the `total_bytes` running-total (upload-limits Phase 5,
|
|
128
|
+
* byte-quota D3). total_bytes is added ONLY via this ALTER — NOT in the CREATE
|
|
129
|
+
* TABLE above — so the single migration that introduces it works on BOTH a
|
|
130
|
+
* fresh DB and an already-deployed scope_meta (an `ADD COLUMN` in the CREATE
|
|
131
|
+
* would collide with the migration's ALTER on a fresh DB; the runner is not
|
|
132
|
+
* idempotent on "duplicate column"). The runtime probe-then-ALTER in
|
|
133
|
+
* D1TreeIndex.ensureTable applies it to fresh test/dev DBs; production deploys
|
|
134
|
+
* apply the generated migration. Defaulted + NOT NULL → safe additive ALTER.
|
|
135
|
+
*/
|
|
136
|
+
declare const SCOPE_META_TOTAL_BYTES_COLUMN_SQL = "ALTER TABLE ds_scope_meta ADD COLUMN total_bytes INTEGER NOT NULL DEFAULT 0";
|
|
137
|
+
/**
|
|
138
|
+
* Trigger that keeps `scope_meta.file_count` incrementing in lock-step with
|
|
139
|
+
* new `kind='file'` rows in `entries`. It exists so the capacity guard in
|
|
140
|
+
* `D1TreeIndex.put()` can read a single `scope_meta` row instead of issuing a
|
|
141
|
+
* full-scope `SELECT COUNT(*) FROM entries` on every new-file write — that
|
|
142
|
+
* scan read the WHOLE scope each time, turning a bulk sync of N files into
|
|
143
|
+
* ~N²/2 D1 `rows_read` and blowing past the free-tier 5M/day ceiling.
|
|
144
|
+
*
|
|
145
|
+
* INCREMENT via trigger; DECREMENT in app code — asymmetric on purpose.
|
|
146
|
+
* Cloudflare's D1 counts a statement's TRIGGER side-effects in `meta.changes`
|
|
147
|
+
* (verified on workerd: deleting 2 files + 1 dir with an AFTER-DELETE trigger
|
|
148
|
+
* reports 5, not 3). `deleteByPrefix` RETURNS `meta.changes`, so an
|
|
149
|
+
* AFTER-DELETE trigger would silently inflate that documented count. Inserts
|
|
150
|
+
* are safe — neither `put` nor `putBatch` reads `meta.changes` — so the
|
|
151
|
+
* increment stays a trigger (covering both paths for free), while
|
|
152
|
+
* `delete`/`deleteByPrefix` decrement `file_count` with their own batch
|
|
153
|
+
* statement, computed atomically from the pre-delete entries state. See
|
|
154
|
+
* `D1TreeIndex.delete` / `deleteByPrefix`.
|
|
155
|
+
*
|
|
156
|
+
* Trigger semantics:
|
|
157
|
+
* - INSERT of a `kind='file'` row → +1 (upsert creates the scope_meta row
|
|
158
|
+
* lazily on first file). Dir rows (`kind='dir'`) and `INSERT OR IGNORE`
|
|
159
|
+
* no-ops never fire. An overwrite (`ON CONFLICT DO UPDATE` on entries) is
|
|
160
|
+
* an UPDATE, not an INSERT, so it correctly leaves the count alone.
|
|
161
|
+
*
|
|
162
|
+
* D1-only (mobile runtimes don't mirror scope_meta). NOT parity-checked.
|
|
163
|
+
*
|
|
164
|
+
* NOTE: the body contains an inner `;` (required by SQLite trigger grammar).
|
|
165
|
+
* Any SQL splitter that feeds this to D1 one statement at a time MUST keep
|
|
166
|
+
* the `CREATE TRIGGER … BEGIN … END` block whole — see
|
|
167
|
+
* `runtimes/cloudflare/scripts/apply-d1-migrations.mjs` `splitSqlStatements`.
|
|
168
|
+
*/
|
|
169
|
+
declare const SCOPE_META_FILE_COUNT_TRIGGER_SQL: readonly string[];
|
|
170
|
+
/**
|
|
171
|
+
* Triggers that keep `scope_meta.total_bytes` (upload-limits Phase 5 byte-quota
|
|
172
|
+
* D3) in lock-step with the `size` of `kind='file'` rows — mirroring the
|
|
173
|
+
* file_count trigger so the byte quota reads ONE scope_meta row instead of a
|
|
174
|
+
* `SELECT SUM(size)` full-scope scan (the rejected O(N) rows_read anti-pattern
|
|
175
|
+
* that caused the 503, did-space-d1-filecount-fix).
|
|
176
|
+
*
|
|
177
|
+
* - INSERT of a new file → `+= NEW.size` (lazy upsert of the scope_meta row).
|
|
178
|
+
* - UPDATE (overwrite, same path, new content/size) → `+= NEW.size - OLD.size`.
|
|
179
|
+
* Safe as a trigger because put/putBatch do NOT read `meta.changes` — only
|
|
180
|
+
* `deleteByPrefix` does, so DELETE decrements in app code (below), exactly
|
|
181
|
+
* like file_count. Floored at 0 against drift.
|
|
182
|
+
*
|
|
183
|
+
* D1-only (mobile runtimes don't mirror scope_meta). NOT parity-checked. Each
|
|
184
|
+
* `CREATE TRIGGER … BEGIN … END` block has an inner `;` — keep it whole when
|
|
185
|
+
* splitting SQL (see apply-d1-migrations.mjs splitSqlStatements).
|
|
186
|
+
*/
|
|
187
|
+
declare const SCOPE_META_TOTAL_BYTES_TRIGGER_SQL: readonly string[];
|
|
188
|
+
/**
|
|
189
|
+
* One-time backfill: seed `total_bytes` from the current file rows for every
|
|
190
|
+
* scope. Absolute (`SET = excluded.total_bytes`) so it self-corrects against a
|
|
191
|
+
* concurrent write between trigger creation and this statement. Migration-only.
|
|
192
|
+
*/
|
|
193
|
+
declare const SCOPE_META_TOTAL_BYTES_BACKFILL_SQL = "INSERT INTO ds_scope_meta (scope, total_bytes)\n SELECT scope, COALESCE(SUM(size), 0) FROM ds_entries WHERE kind = 'file' GROUP BY scope\n ON CONFLICT(scope) DO UPDATE SET total_bytes = excluded.total_bytes";
|
|
194
|
+
/**
|
|
195
|
+
* Decrement statement for `delete()`: −1 iff `path` is currently a file.
|
|
196
|
+
* Placed in the delete batch BEFORE the `DELETE FROM entries` so the EXISTS
|
|
197
|
+
* subquery observes the pre-delete row. Floored at 0. Bind order:
|
|
198
|
+
* `(scope, scope, path)`.
|
|
199
|
+
*/
|
|
200
|
+
declare const SCOPE_META_FILE_COUNT_DELETE_ONE_SQL = "UPDATE ds_scope_meta\n SET file_count = MAX(0, file_count - 1)\n WHERE scope = ? AND EXISTS (\n SELECT 1 FROM ds_entries WHERE scope = ? AND path = ? AND kind = 'file'\n )";
|
|
201
|
+
/**
|
|
202
|
+
* Decrement statement for `deleteByPrefix()`: subtract the number of file rows
|
|
203
|
+
* in the prefix range. Placed in the batch BEFORE the range `DELETE` so the
|
|
204
|
+
* COUNT observes the pre-delete rows; the COUNT scans only the range being
|
|
205
|
+
* deleted (never the whole scope). Floored at 0. Bind order:
|
|
206
|
+
* `(scope, scope, lo, hi)`.
|
|
207
|
+
*/
|
|
208
|
+
declare const SCOPE_META_FILE_COUNT_DELETE_RANGE_SQL = "UPDATE ds_scope_meta\n SET file_count = MAX(0, file_count - (\n SELECT COUNT(*) FROM ds_entries\n WHERE scope = ? AND path >= ? AND path < ? AND kind = 'file'\n ))\n WHERE scope = ?";
|
|
209
|
+
/**
|
|
210
|
+
* One-time backfill: seed `file_count` from the current `entries` rows for
|
|
211
|
+
* every scope that already has files. Absolute (`SET = excluded.file_count`,
|
|
212
|
+
* not `+=`) so it is self-correcting if a concurrent write fires a trigger
|
|
213
|
+
* between trigger creation and this statement. Migration-only — fresh DBs
|
|
214
|
+
* (tests / first deploy) start empty and need no backfill.
|
|
215
|
+
*/
|
|
216
|
+
declare const SCOPE_META_FILE_COUNT_BACKFILL_SQL = "INSERT INTO ds_scope_meta (scope, file_count)\n SELECT scope, COUNT(*) FROM ds_entries WHERE kind = 'file' GROUP BY scope\n ON CONFLICT(scope) DO UPDATE SET file_count = excluded.file_count";
|
|
217
|
+
/**
|
|
218
|
+
* CREATE INDEX statements for `scope_meta`. Empty by design — lookups are
|
|
219
|
+
* always by the PRIMARY KEY, so the autogenerated PK index is sufficient.
|
|
220
|
+
* Exported as an empty array for symmetry with `CHANGELOG_INDEX_SQL` and
|
|
221
|
+
* `DEVICE_SYNC_STATE_INDEX_SQL` so callers can loop uniformly.
|
|
222
|
+
*/
|
|
223
|
+
declare const SCOPE_META_INDEX_SQL: readonly string[];
|
|
224
|
+
/**
|
|
225
|
+
* Live Update Resilience Phase 0 (DEC-7 / design §11.4) — `prefix_watermark`.
|
|
226
|
+
*
|
|
227
|
+
* Per-`(scope, prefix)` monotonic write counter. `prefix` is the FIRST path
|
|
228
|
+
* segment of a write path (the `/user` first-level collection root, e.g.
|
|
229
|
+
* `items`, `tags`). Every file write/delete INSIDE a collection (`depth >= 2`)
|
|
230
|
+
* bumps the matching row's `version` by 1, in the SAME D1 batch as the
|
|
231
|
+
* changelog INSERT (typical +1 row write-amplification).
|
|
232
|
+
*
|
|
233
|
+
* Web live-update reconcile reads ONE row (`SELECT version WHERE scope=? AND
|
|
234
|
+
* prefix=?`) to decide "did my list change?" — true O(1), independent of
|
|
235
|
+
* changelog history size or global write activity (the append-only changelog
|
|
236
|
+
* `drain` would be `O(global increment)` rows_read and hit the D1 cliff; see
|
|
237
|
+
* design §11.1-11.3 for the rejected alternatives B/D).
|
|
238
|
+
*
|
|
239
|
+
* `version` is prefix-LOCAL: it only counts writes to THIS collection root, so
|
|
240
|
+
* exposing it as the wire `liveSeq` never leaks another blocklet's timing
|
|
241
|
+
* (invariant I3). It is a plain monotonic counter, so `+1` gap detection works
|
|
242
|
+
* within a prefix (Phase 3 push self-check).
|
|
243
|
+
*
|
|
244
|
+
* NOT parity-checked by `scripts/check-changelog-ddl-parity.ts` — this table is
|
|
245
|
+
* D1-only (Cloudflare) + Node sqlite. Mobile (Swift/Kotlin) does NOT mirror it:
|
|
246
|
+
* mobile sync drains the changelog and never reads the watermark. Same handling
|
|
247
|
+
* as `scope_meta` / `device_sync_state` above.
|
|
248
|
+
*/
|
|
249
|
+
declare const PREFIX_WATERMARK_TABLE_SQL = "CREATE TABLE IF NOT EXISTS ds_prefix_watermark (\n scope TEXT NOT NULL,\n prefix TEXT NOT NULL,\n version INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (scope, prefix)\n)";
|
|
250
|
+
/**
|
|
251
|
+
* Phase 3 Task 3.4 — `sync_state` local key-value table.
|
|
252
|
+
*
|
|
253
|
+
* Per-scope progress tracker for the local SyncEngine. Lives in the SAME
|
|
254
|
+
* SQLite DB as `changelog` on desktop (via MetadataDB) and mobile (via
|
|
255
|
+
* SQLiteTreeIndex). Byte-identical DDL across runtimes so the three-way
|
|
256
|
+
* parity script can treat it the same way as `changelog`.
|
|
257
|
+
*
|
|
258
|
+
* Schema (Task 3.4 minimum):
|
|
259
|
+
* key : `{scope}:local_seq` — max seq this device has pushed to cloud
|
|
260
|
+
* key : `{scope}:cloud_seq` — max seq pulled/applied from other devices
|
|
261
|
+
*
|
|
262
|
+
* Task 3.5 extends usage with more keys (device_id, last_sync_at, sync_status)
|
|
263
|
+
* backed by Keychain/Keystore on mobile. The table shape is unchanged — only
|
|
264
|
+
* the set of keys written to it grows.
|
|
265
|
+
*
|
|
266
|
+
* Values are always TEXT (SQLite's universal type). Integer keys like
|
|
267
|
+
* `local_seq` are stored as decimal strings and parsed at read time. This
|
|
268
|
+
* keeps the schema a single source of truth regardless of how many key types
|
|
269
|
+
* Task 3.5 adds later.
|
|
270
|
+
*
|
|
271
|
+
* Scope-prefixed keys let multiple DID Space scopes share the same SQLite DB
|
|
272
|
+
* without colliding — matching the existing scope isolation in the changelog
|
|
273
|
+
* table.
|
|
274
|
+
*/
|
|
275
|
+
declare const SYNC_STATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS ds_sync_state (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n)";
|
|
276
|
+
/** CREATE INDEX statements for `sync_state`. Empty by design — lookups are by PK. */
|
|
277
|
+
declare const SYNC_STATE_INDEX_SQL: readonly string[];
|
|
278
|
+
/**
|
|
279
|
+
* Combined DDL for the sync_state table + indices. Exported for the same
|
|
280
|
+
* three-way parity reasons as `CHANGELOG_DDL` — Swift and Kotlin each embed
|
|
281
|
+
* a byte-identical literal that must match this string after normalisation.
|
|
282
|
+
*/
|
|
283
|
+
declare const SYNC_STATE_DDL: string;
|
|
284
|
+
/**
|
|
285
|
+
* Whitespace+case normaliser used by the parity script and tests.
|
|
286
|
+
*
|
|
287
|
+
* Strategy:
|
|
288
|
+
* 1. Strip SQL line comments (`-- ...` to end of line).
|
|
289
|
+
* 2. Strip C-style block comments (`/* ... */`) — defensive, none currently.
|
|
290
|
+
* 3. Lower-case everything (SQLite keywords + identifiers are case-insensitive).
|
|
291
|
+
* 4. Strip ALL `;` characters — different sources may add/omit a trailing
|
|
292
|
+
* semicolon on the last statement; semantically equivalent so we drop them.
|
|
293
|
+
* 5. Collapse any whitespace run (spaces, tabs, newlines) into a single space.
|
|
294
|
+
* 6. Trim leading/trailing whitespace.
|
|
295
|
+
* 7. Remove spaces immediately around `(`, `)`, `,` so that
|
|
296
|
+
* `changelog(scope, seq)` and `changelog ( scope , seq )` compare equal.
|
|
297
|
+
*
|
|
298
|
+
* Note: this is intentionally conservative — string literals like `'put'` and
|
|
299
|
+
* `'delete'` already happen to be lower-case, and SQLite treats string values
|
|
300
|
+
* as case-sensitive. If a future column ever needed mixed-case literals, we
|
|
301
|
+
* would have to mask string-literal regions before lower-casing.
|
|
302
|
+
*/
|
|
303
|
+
declare function normalizeDdl(input: string): string;
|
|
304
|
+
/** `kind` discriminator for a changelog row entry on the sync wire. */
|
|
305
|
+
declare const CHANGELOG_ROW_KIND = "did-space:changelog-row";
|
|
306
|
+
/** `kind` discriminator for a manifest file entry on the sync wire. */
|
|
307
|
+
declare const MANIFEST_FILE_KIND = "did-space:file";
|
|
308
|
+
/**
|
|
309
|
+
* Field list for a changelog row's `meta.extra` (canonical sync wire).
|
|
310
|
+
* Order is documentary only — consumers read by key, never by position.
|
|
311
|
+
*/
|
|
312
|
+
declare const CHANGELOG_WIRE_EXTRA_FIELDS: readonly ["seq", "op", "originalPath", "cid", "oldCid", "size", "mtime", "deviceId"];
|
|
313
|
+
/** Field list for a manifest entry's `meta.extra` (canonical sync wire). */
|
|
314
|
+
declare const MANIFEST_WIRE_EXTRA_FIELDS: readonly ["cid", "mtime"];
|
|
315
|
+
/**
|
|
316
|
+
* Canonical `meta.extra` payload of a `.changelog` row. The single position
|
|
317
|
+
* (`extra`) all four runtimes can decode. `originalPath` is the tree-path with
|
|
318
|
+
* NO leading slash (matches `changelog.path` column semantics).
|
|
319
|
+
*/
|
|
320
|
+
interface ChangelogWireExtra {
|
|
321
|
+
seq: number;
|
|
322
|
+
op: "put" | "delete";
|
|
323
|
+
originalPath: string;
|
|
324
|
+
cid: string | null;
|
|
325
|
+
oldCid: string | null;
|
|
326
|
+
size: number | null;
|
|
327
|
+
mtime: number;
|
|
328
|
+
deviceId: string;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Input row shape for {@link serializeChangelogEntry} — the on-disk changelog
|
|
332
|
+
* row returned by `TreeIndex.getChangelogSince` (snake_case columns), a subset
|
|
333
|
+
* of {@link ChangelogEntry}.
|
|
334
|
+
*/
|
|
335
|
+
interface ChangelogRowInput {
|
|
336
|
+
seq: number;
|
|
337
|
+
path: string;
|
|
338
|
+
op: "put" | "delete";
|
|
339
|
+
cid: string | null;
|
|
340
|
+
old_cid: string | null;
|
|
341
|
+
size: number | null;
|
|
342
|
+
mtime: number;
|
|
343
|
+
device_id: string;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Canonical `meta` of a manifest file entry (`list("", {maxDepth:-1})`).
|
|
347
|
+
* `cid` is emitted BOTH at top-level (additive, TS/UI) and under `extra`
|
|
348
|
+
* (Swift/Kotlin) — see the module header.
|
|
349
|
+
*/
|
|
350
|
+
interface ManifestWireMeta {
|
|
351
|
+
kind: typeof MANIFEST_FILE_KIND;
|
|
352
|
+
cid: string;
|
|
353
|
+
size: number;
|
|
354
|
+
mimeType?: string;
|
|
355
|
+
extra: {
|
|
356
|
+
cid: string;
|
|
357
|
+
mtime: number;
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
/** Input for {@link serializeManifestEntry} — the file's tree metadata. */
|
|
361
|
+
interface ManifestRowInput {
|
|
362
|
+
cid: string;
|
|
363
|
+
size: number;
|
|
364
|
+
mtime: number;
|
|
365
|
+
mimeType?: string;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Serialize a changelog row to its canonical `meta.extra` payload. The provider
|
|
369
|
+
* wraps this as `meta: { kind: CHANGELOG_ROW_KIND, extra: serializeChangelogEntry(row) }`.
|
|
370
|
+
*/
|
|
371
|
+
declare function serializeChangelogEntry(row: ChangelogRowInput): ChangelogWireExtra;
|
|
372
|
+
/**
|
|
373
|
+
* Serialize a manifest file entry to its canonical `meta`. `cid` is emitted at
|
|
374
|
+
* BOTH top-level and `extra.cid` (additive — see module header).
|
|
375
|
+
*/
|
|
376
|
+
declare function serializeManifestEntry(row: ManifestRowInput): ManifestWireMeta;
|
|
377
|
+
/**
|
|
378
|
+
* Parse an untrusted changelog `meta.extra` bag into a typed {@link ChangelogWireExtra}.
|
|
379
|
+
* Returns `null` when required fields (`op`, `originalPath`) are missing/invalid —
|
|
380
|
+
* a malformed row is skipped, never crashes the parser. Numeric/optional fields
|
|
381
|
+
* degrade to safe defaults (`seq=0`, `cid=null`, …).
|
|
382
|
+
*/
|
|
383
|
+
declare function parseChangelogEntry(extra: unknown): ChangelogWireExtra | null;
|
|
384
|
+
/**
|
|
385
|
+
* Parse an untrusted manifest entry `meta` into its canonical `{ cid, mtime }`.
|
|
386
|
+
* Reads `extra.cid` FIRST (canonical, all-runtime), falling back to top-level
|
|
387
|
+
* `meta.cid` (additive). Returns `null` when no cid is resolvable.
|
|
388
|
+
*/
|
|
389
|
+
declare function parseManifestEntry(meta: unknown): {
|
|
390
|
+
cid: string;
|
|
391
|
+
mtime: number;
|
|
392
|
+
} | null;
|
|
393
|
+
//#endregion
|
|
394
|
+
export { CHANGELOG_DDL, CHANGELOG_INDEX_SQL, CHANGELOG_ROW_KIND, CHANGELOG_SCOPE_CID_MIGRATION_SQL, CHANGELOG_TABLE_SQL, CHANGELOG_WIRE_EXTRA_FIELDS, ChangelogRowInput, ChangelogWireExtra, DEVICE_SYNC_STATE_INDEX_SQL, DEVICE_SYNC_STATE_TABLE_SQL, MANIFEST_FILE_KIND, MANIFEST_WIRE_EXTRA_FIELDS, ManifestRowInput, ManifestWireMeta, PREFIX_WATERMARK_TABLE_SQL, SCOPE_META_FILE_COUNT_BACKFILL_SQL, SCOPE_META_FILE_COUNT_DELETE_ONE_SQL, SCOPE_META_FILE_COUNT_DELETE_RANGE_SQL, SCOPE_META_FILE_COUNT_TRIGGER_SQL, SCOPE_META_INDEX_SQL, SCOPE_META_TABLE_SQL, SCOPE_META_TOTAL_BYTES_BACKFILL_SQL, SCOPE_META_TOTAL_BYTES_COLUMN_SQL, SCOPE_META_TOTAL_BYTES_TRIGGER_SQL, SYNC_STATE_DDL, SYNC_STATE_INDEX_SQL, SYNC_STATE_TABLE_SQL, normalizeDdl, parseChangelogEntry, parseManifestEntry, serializeChangelogEntry, serializeManifestEntry };
|
|
395
|
+
//# sourceMappingURL=changelog-schema.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog-schema.d.cts","names":[],"sources":["../src/changelog-schema.ts"],"mappings":";;AAkBA;;;;;AA4BA;;;;;AAkBA;;;;;AAeA;AAAA,cA7Da,mBAAA;;;;AAqFb;;;;;AAUA;;;;;AA8CA;;cAjHa,mBAAA;;;AAmIb;;;;;AAmCA;;;;;cApJa,iCAAA;;;;;AAiOb;;;;cAlNa,aAAA;AA4Nb;;;;;AAaA;;;;;AAcA;;;;;AAUA;;;;;AA2BA;;AAhEA,cApMa,2BAAA;;cAUA,2BAAA;AA+Wb;;;;;AAMA;;;;;AAOA;;;;;AAqBA;;;;;AA+BA;;;;;AAGA;;;;;AAMA;;;;;AAYA;;;;;AAOA;;AA7FA,cAjUa,oBAAA;;;;;;;;;;;cAkBA,iCAAA;AA4Zb;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;AASA;;;;AAzBA,cAzXa,iCAAA;;;;;;AA6Zb;;;;;;;;;AAiBA;;;cApZa,kCAAA;;;;;;cAmDA,mCAAA;;;;;;;cAUA,oCAAA;;;;;;;;cAaA,sCAAA;;;;;;;;cAcA,kCAAA;;;;;;;cAUA,oBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BA,0BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;cAqHA,oBAAA;;cAMA,oBAAA;;;;;;cAOA,cAAA;;;;;;;;;;;;;;;;;;;;iBAqBG,YAAA,CAAa,KAAA;;cA+BhB,kBAAA;;cAGA,kBAAA;;;;;cAMA,2BAAA;;cAYA,0BAAA;;;;;;UAOI,kBAAA;EACf,GAAA;EACA,EAAA;EACA,YAAA;EACA,GAAA;EACA,MAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;AAAA;;;;;;UAQe,iBAAA;EACf,GAAA;EACA,IAAA;EACA,EAAA;EACA,GAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA;AAAA;;;;;;UAQe,gBAAA;EACf,IAAA,SAAa,kBAAA;EACb,GAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;IAAS,GAAA;IAAa,KAAA;EAAA;AAAA;;UAIP,gBAAA;EACf,GAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;AAAA;;;;;iBAOc,uBAAA,CAAwB,GAAA,EAAK,iBAAA,GAAoB,kBAAA;;;;;iBAiBjD,sBAAA,CAAuB,GAAA,EAAK,gBAAA,GAAmB,gBAAA;;;;;;;iBA2B/C,mBAAA,CAAoB,KAAA,YAAiB,kBAAA;;;;;;iBAyBrC,kBAAA,CAAmB,IAAA;EAAkB,GAAA;EAAa,KAAA;AAAA"}
|