@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,524 @@
|
|
|
1
|
+
import { TreeQueryResult, TreeQuerySpec } from "./tree-query.cjs";
|
|
2
|
+
import { DirtyPathRow, ListDirtyPathOptions } from "./dirty-path-queue.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/tree-index.d.ts
|
|
5
|
+
interface TreeEntry {
|
|
6
|
+
cid: string;
|
|
7
|
+
size: number;
|
|
8
|
+
mtime: number;
|
|
9
|
+
ctime: number;
|
|
10
|
+
mimeType?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Inline copy of the entry's bytes (Layer 0 inline-content capability, see
|
|
13
|
+
* `inline-content.ts`). cid-verified: when present, `hash(content) === cid`
|
|
14
|
+
* holds — the cid stays the identity; content is a co-located copy.
|
|
15
|
+
*
|
|
16
|
+
* On `put`: an index constructed with `inlineCache: "on"` stores text
|
|
17
|
+
* content ≤ its threshold (verified against cid, mismatch rejected);
|
|
18
|
+
* default-off indexes ignore the field (byte-identical legacy behavior).
|
|
19
|
+
* Passing NO content on overwrite clears any prior inline copy — the
|
|
20
|
+
* column can never go stale relative to the cid.
|
|
21
|
+
*
|
|
22
|
+
* On reads: `get` returns it when stored; `listEntries`/`listChildren`
|
|
23
|
+
* include it ONLY under `{ includeContent: true }` (default projection
|
|
24
|
+
* stays content-free).
|
|
25
|
+
*/
|
|
26
|
+
content?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Application metadata (planning/agent-hub/metadata-foundation.md).
|
|
29
|
+
* Stores `AFSWriteEntryPayload.meta` — application-level dimension
|
|
30
|
+
* fields the application uses for collection-query `meta.*` paths.
|
|
31
|
+
*
|
|
32
|
+
* Provider-computed fields (`kind / size / cid / mimeType`) are NOT in
|
|
33
|
+
* here — they live in their own TreeEntry properties / columns and the
|
|
34
|
+
* provider merges them on top at read time.
|
|
35
|
+
*
|
|
36
|
+
* On `put`: persisted as a JSON blob to the `entries.metadata` column.
|
|
37
|
+
* Undefined / empty object → stored as NULL.
|
|
38
|
+
*
|
|
39
|
+
* On reads: returned exactly as written (after provider-reserved fields
|
|
40
|
+
* are stripped by the application-layer write path).
|
|
41
|
+
*/
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Dedup-on-write secondary-index columns (#1159). Together they back the
|
|
45
|
+
* `(scope, dedup_scope, dedup_key)` partial UNIQUE index that resolves a
|
|
46
|
+
* dedup write to at-most-one entry — replacing the old cid-in-path scheme.
|
|
47
|
+
*
|
|
48
|
+
* - `dedupScope`: the COLLECTION the record dedups within (the write `path`
|
|
49
|
+
* argument, e.g. `user/items`). Decoupled from the row's physical `parent`
|
|
50
|
+
* so a flat `{coll}/{uuid}.json` and a legacy dir-per-record
|
|
51
|
+
* `{coll}/{uuid}/item.json` dedup against the SAME scope.
|
|
52
|
+
* - `dedupKey`: the normalized identity value (e.g. `normalizeItemUrl(url)`).
|
|
53
|
+
*
|
|
54
|
+
* Set ONLY by the provider's dedup write path (and the reindex seam); a plain
|
|
55
|
+
* write leaves them undefined. On overwrite the SQL upserts COALESCE the
|
|
56
|
+
* existing value when the incoming entry omits them, so a non-dedup edit of a
|
|
57
|
+
* dedup row never drops it out of the index.
|
|
58
|
+
*/
|
|
59
|
+
dedupScope?: string;
|
|
60
|
+
dedupKey?: string;
|
|
61
|
+
}
|
|
62
|
+
interface TreeIndexListOptions {
|
|
63
|
+
limit?: number;
|
|
64
|
+
cursor?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Include each entry's inline `content` (when stored) in the result.
|
|
67
|
+
* Default OFF — the default SELECT never touches the content column, so
|
|
68
|
+
* every existing list path is zero-regression, zero extra bytes. Entries
|
|
69
|
+
* without an inline copy come back without `content` (best-effort).
|
|
70
|
+
*/
|
|
71
|
+
includeContent?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Sort column. `name` is `listChildren`'s historical hardcoded default,
|
|
74
|
+
* now explicit (the `entries` table has a `name` column, so `list` /
|
|
75
|
+
* `listEntries` map it naturally too).
|
|
76
|
+
*
|
|
77
|
+
* Semantics when set (all three impls, enforced by
|
|
78
|
+
* `test/tree-index-order.test.ts`):
|
|
79
|
+
* - tiebreak on the listing's unique key (`name` for `listChildren`,
|
|
80
|
+
* `path` for `list`/`listEntries`), same direction;
|
|
81
|
+
* - missing values (NULL `mime_type`) sort LAST regardless of direction;
|
|
82
|
+
* - the resume cursor is the keyset v2 format (`v2:<b64>:<b64>`, see
|
|
83
|
+
* {@link buildKeysetCursor}) so duplicate sort values never skip rows
|
|
84
|
+
* across a page boundary;
|
|
85
|
+
* - a legacy (non-v2) cursor combined with `orderBy` is rejected.
|
|
86
|
+
*
|
|
87
|
+
* When UNSET the listing keeps its historical byte-identical behavior:
|
|
88
|
+
* `listChildren` orders by `name` with a plain name-string cursor;
|
|
89
|
+
* `list`/`listEntries` order by `path` with a plain sort-value cursor.
|
|
90
|
+
*/
|
|
91
|
+
orderBy?: "path" | "mtime" | "size" | "ctime" | "mimeType" | "name";
|
|
92
|
+
order?: "asc" | "desc";
|
|
93
|
+
}
|
|
94
|
+
/** Decoded keyset cursor: the last row's sort value + unique tiebreak value. */
|
|
95
|
+
interface TreeKeysetCursor {
|
|
96
|
+
/** Raw sort-column value of the last row; `null` for NULL (missing) values. */
|
|
97
|
+
sortValue: string | number | null;
|
|
98
|
+
/** Unique tiebreak value of the last row (`name` or `path`). */
|
|
99
|
+
tie: string;
|
|
100
|
+
}
|
|
101
|
+
/** Build a v2 keyset cursor: `v2:<b64(json(sortValue))>:<b64(tie)>`. */
|
|
102
|
+
declare function buildKeysetCursor(sortValue: string | number | null, tie: string): string;
|
|
103
|
+
type ParsedTreeCursor = {
|
|
104
|
+
kind: "none";
|
|
105
|
+
} | {
|
|
106
|
+
kind: "legacy";
|
|
107
|
+
value: string;
|
|
108
|
+
} | {
|
|
109
|
+
kind: "v2";
|
|
110
|
+
cursor: TreeKeysetCursor;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Parse a list cursor. Shared by all three TreeIndex impls so the
|
|
114
|
+
* legacy-vs-v2 dance can never drift between them.
|
|
115
|
+
*
|
|
116
|
+
* - undefined → none
|
|
117
|
+
* - `v2:`-prefixed → keyset cursor; REQUIRES `hasOrderBy` (a keyset cursor
|
|
118
|
+
* replayed onto a default-order listing would be a wrong page); malformed
|
|
119
|
+
* payloads throw a clean error instead of producing a wrong page.
|
|
120
|
+
* - anything else → legacy plain cursor, accepted ONLY for default
|
|
121
|
+
* (no-orderBy) order.
|
|
122
|
+
*/
|
|
123
|
+
declare function parseTreeCursor(cursor: string | undefined, hasOrderBy: boolean): ParsedTreeCursor;
|
|
124
|
+
/** SQL fragments for an ordered, keyset-resumable listing. */
|
|
125
|
+
interface OrderedQueryParts {
|
|
126
|
+
/** Extra WHERE condition (empty string when no cursor). */
|
|
127
|
+
cursorWhereSql: string;
|
|
128
|
+
cursorArgs: Array<string | number>;
|
|
129
|
+
/** ORDER BY clause body (without the `ORDER BY` keyword). */
|
|
130
|
+
orderSql: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build the ORDER BY + keyset-resume WHERE for an ordered listing. Shared
|
|
134
|
+
* by SQLiteTreeIndex and D1TreeIndex (identical SQL dialect).
|
|
135
|
+
*
|
|
136
|
+
* - Missing values sort LAST regardless of direction: nullable columns get
|
|
137
|
+
* a leading `(col IS NULL) ASC` term. Non-nullable columns skip it so the
|
|
138
|
+
* `(scope, parent, col, name)` indexes stay usable.
|
|
139
|
+
* - Resume uses the expansion `col > ? OR (col = ? AND tie > ?)` (row-value
|
|
140
|
+
* free — works on every SQLite the runtimes target) plus NULL-run
|
|
141
|
+
* handling for nullable columns.
|
|
142
|
+
*/
|
|
143
|
+
declare function buildOrderedQueryParts(opts: {
|
|
144
|
+
col: string;
|
|
145
|
+
nullable: boolean;
|
|
146
|
+
order: "asc" | "desc";
|
|
147
|
+
tieCol: string;
|
|
148
|
+
cursor?: TreeKeysetCursor;
|
|
149
|
+
}): OrderedQueryParts;
|
|
150
|
+
/**
|
|
151
|
+
* In-memory equivalents of the SQL ordering semantics, used by
|
|
152
|
+
* MemoryTreeIndex so all three impls stay in lockstep.
|
|
153
|
+
*/
|
|
154
|
+
declare function compareTreeSortValues(a: string | number | null, b: string | number | null, order: "asc" | "desc"): number;
|
|
155
|
+
/** Keyset predicate mirroring {@link buildOrderedQueryParts}'s WHERE. */
|
|
156
|
+
declare function keysetAfter(rowSort: string | number | null, rowTie: string, cursor: TreeKeysetCursor, order: "asc" | "desc"): boolean;
|
|
157
|
+
interface TreeIndexListResult {
|
|
158
|
+
entries: Array<{
|
|
159
|
+
path: string;
|
|
160
|
+
}>;
|
|
161
|
+
hasMore: boolean;
|
|
162
|
+
cursor?: string;
|
|
163
|
+
}
|
|
164
|
+
interface TreeIndexListEntriesResult {
|
|
165
|
+
entries: Array<{
|
|
166
|
+
path: string;
|
|
167
|
+
} & TreeEntry>;
|
|
168
|
+
hasMore: boolean;
|
|
169
|
+
cursor?: string;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Options for mutation methods (Task 2.4a — atomic changelog write).
|
|
173
|
+
*
|
|
174
|
+
* Every put/delete/putBatch/deleteByPrefix call carries:
|
|
175
|
+
* - `deviceId`: opaque per-device identifier persisted into the changelog row.
|
|
176
|
+
* Required, non-empty, ≤ 128 bytes. Validated at runtime by
|
|
177
|
+
* `validateDeviceId()` in `changelog-write.ts`.
|
|
178
|
+
* - `skipChangelog`: when `true`, the underlying TreeIndex writes the `entries`
|
|
179
|
+
* row but skips the corresponding `changelog` INSERT. Used by
|
|
180
|
+
* Task 2.4b to exempt blocklet-publish CLI uploads (the publish
|
|
181
|
+
* flow is already batched and does not need per-file sync fan-out).
|
|
182
|
+
*
|
|
183
|
+
* Strict-TypeScript design: `opts` is a REQUIRED trailing parameter on every
|
|
184
|
+
* mutation method (see `tree-index.ts`). Callers that go through the `TreeIndex`
|
|
185
|
+
* interface (e.g. `CloudflareDIDSpace`, `DIDSpaceProvider`) get a compile-time
|
|
186
|
+
* error if they omit `opts` — that is the enforcement point for Phase 2 sync.
|
|
187
|
+
*/
|
|
188
|
+
interface PutOpts {
|
|
189
|
+
/** Required. Non-empty string ≤ 128 bytes. Written into `changelog.device_id`. */
|
|
190
|
+
deviceId: string;
|
|
191
|
+
/**
|
|
192
|
+
* Optional client mtime (unix millis) written into `changelog.mtime` for
|
|
193
|
+
* delete/deleteByPrefix rows (T1.5). When absent, implementations fall back to
|
|
194
|
+
* the server clock (`Date.now()`). `put` carries its mtime via the `TreeEntry`,
|
|
195
|
+
* so this only affects the delete paths where there is no entry to read it from.
|
|
196
|
+
*/
|
|
197
|
+
mtime?: number;
|
|
198
|
+
/** When `true`, skip the `changelog` INSERT. Default `false`. */
|
|
199
|
+
skipChangelog?: boolean;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* In-memory shape of a `changelog` row.
|
|
203
|
+
*
|
|
204
|
+
* Matches the D1/libsql row shape 1:1 so MemoryTreeIndex tests can assert
|
|
205
|
+
* against the same fields that production code will see on the wire. Exposed
|
|
206
|
+
* via `MemoryTreeIndex.getChangelogSnapshot()` for unit tests.
|
|
207
|
+
*/
|
|
208
|
+
interface ChangelogEntry {
|
|
209
|
+
/** Monotonically increasing row ID (1-based in MemoryTreeIndex; AUTOINCREMENT in D1). */
|
|
210
|
+
seq: number;
|
|
211
|
+
scope: string;
|
|
212
|
+
path: string;
|
|
213
|
+
op: "put" | "delete";
|
|
214
|
+
/** `null` on delete rows; non-null on put rows. */
|
|
215
|
+
cid: string | null;
|
|
216
|
+
/** `null` on first write; prior cid on overwrite/delete. */
|
|
217
|
+
old_cid: string | null;
|
|
218
|
+
/** `null` on delete rows; file size on put rows. */
|
|
219
|
+
size: number | null;
|
|
220
|
+
mtime: number;
|
|
221
|
+
device_id: string;
|
|
222
|
+
}
|
|
223
|
+
/** Per-entry options for the batch sync fast path. */
|
|
224
|
+
interface BatchEntryOpts {
|
|
225
|
+
/** Required. Written into `changelog.device_id` (echo prevention / LWW). */
|
|
226
|
+
deviceId: string;
|
|
227
|
+
/** Client mtime for DELETE changelog rows (put rows take mtime from the entry). */
|
|
228
|
+
mtime?: number;
|
|
229
|
+
/** Optimistic-concurrency precondition against the current entry cid. */
|
|
230
|
+
ifMatch?: string;
|
|
231
|
+
}
|
|
232
|
+
interface BatchPutEntry {
|
|
233
|
+
path: string;
|
|
234
|
+
entry: TreeEntry;
|
|
235
|
+
opts: BatchEntryOpts;
|
|
236
|
+
}
|
|
237
|
+
interface BatchDeleteEntry {
|
|
238
|
+
path: string;
|
|
239
|
+
opts: BatchEntryOpts;
|
|
240
|
+
}
|
|
241
|
+
/** Conflict triple — mirrors the single-op AFSConflictError fields
|
|
242
|
+
* (deviceId is null, exactly like the single write path which never reads it). */
|
|
243
|
+
interface BatchEntryConflict {
|
|
244
|
+
currentCid: string | null;
|
|
245
|
+
currentMtime: number | null;
|
|
246
|
+
currentDeviceId: string | null;
|
|
247
|
+
}
|
|
248
|
+
interface BatchPutEntryResult {
|
|
249
|
+
path: string;
|
|
250
|
+
/** Prior cid when the path existed (drives the caller's GC enqueue). */
|
|
251
|
+
oldCid?: string;
|
|
252
|
+
/** Skip-if-unchanged hit: same cid+mimeType — no changelog row, no watermark bump. */
|
|
253
|
+
skipped?: boolean;
|
|
254
|
+
/** Present iff the entry failed its ifMatch precondition (nothing written). */
|
|
255
|
+
conflict?: BatchEntryConflict;
|
|
256
|
+
/** Non-conflict per-entry failure (e.g. quota) — message parity with single put. */
|
|
257
|
+
error?: string;
|
|
258
|
+
/**
|
|
259
|
+
* Stable code for a non-conflict failure (upload-limits Phase 5):
|
|
260
|
+
* `STORAGE_QUOTA_EXCEEDED` on a file-count OR byte-quota rejection. Lets a
|
|
261
|
+
* consumer distinguish quota from other per-entry errors (the single-put path
|
|
262
|
+
* carries it on the thrown Error's `.code`).
|
|
263
|
+
*/
|
|
264
|
+
code?: string;
|
|
265
|
+
/** This entry's own watermark seq (+1 per write, batch-order ascending).
|
|
266
|
+
* Absent for skip/conflict/error entries and root-level paths (no collection root). */
|
|
267
|
+
liveSeq?: number;
|
|
268
|
+
}
|
|
269
|
+
interface BatchDeleteEntryResult {
|
|
270
|
+
path: string;
|
|
271
|
+
/** The deleted entry's cid (drives the caller's GC enqueue). */
|
|
272
|
+
deletedCid?: string;
|
|
273
|
+
/** Path had no file entry — per-entry not-found, never aborts neighbors. */
|
|
274
|
+
notFound?: boolean;
|
|
275
|
+
conflict?: BatchEntryConflict;
|
|
276
|
+
error?: string;
|
|
277
|
+
liveSeq?: number;
|
|
278
|
+
}
|
|
279
|
+
/** Shared context: a caller-supplied preread snapshot (one IN query reused
|
|
280
|
+
* across the provider's preflight AND the index batch — design §4.3). */
|
|
281
|
+
interface BatchIndexContext {
|
|
282
|
+
preread?: Map<string, TreeEntry | null>;
|
|
283
|
+
}
|
|
284
|
+
interface TreeIndex {
|
|
285
|
+
/**
|
|
286
|
+
* Read a single file's metadata. `includeContent` (default true) projects the
|
|
287
|
+
* inline `content` copy; metadata-only callers (stat / list / readMeta) pass
|
|
288
|
+
* `false` to skip marshalling the inline bytes. A projection hint — an
|
|
289
|
+
* in-memory backend may still return content (zero marshalling cost there).
|
|
290
|
+
*/
|
|
291
|
+
get(path: string, opts?: {
|
|
292
|
+
includeContent?: boolean;
|
|
293
|
+
}): Promise<TreeEntry | null>;
|
|
294
|
+
/**
|
|
295
|
+
* Read a directory row's own `ctime`/`mtime`. Directory rows are scaffolded
|
|
296
|
+
* by the put path (`ancestorDirs` + `buildDirChainStmt`) with no `cid`, so
|
|
297
|
+
* {@link get} — which returns null for cid-less rows — never surfaces them.
|
|
298
|
+
* This is the read used to expose a directory's created/modified time on
|
|
299
|
+
* `stat` (the file path already returns them via {@link get}).
|
|
300
|
+
*
|
|
301
|
+
* `dirPath` is the trailing-slash index key (e.g. `user/photos/`), i.e. the
|
|
302
|
+
* value {@link treeListPrefix} produces. Returns null for a directory with
|
|
303
|
+
* no scaffolded row (the absolute scope root, or an as-yet-unwritten dir).
|
|
304
|
+
*
|
|
305
|
+
* Optional: callers MUST guard and simply omit the timestamps when an
|
|
306
|
+
* implementation does not provide it.
|
|
307
|
+
*/
|
|
308
|
+
getDirTimes?(dirPath: string): Promise<{
|
|
309
|
+
ctime: number;
|
|
310
|
+
mtime: number;
|
|
311
|
+
} | null>;
|
|
312
|
+
/**
|
|
313
|
+
* Batch metadata read for the sync fast path's ONE-query preflight
|
|
314
|
+
* (afs-rpc-batch §4.3). Returns a map with an entry for EVERY requested
|
|
315
|
+
* path (`null` when absent). Optional: callers fall back to per-path `get`.
|
|
316
|
+
*/
|
|
317
|
+
getMany?(paths: string[]): Promise<Map<string, TreeEntry | null>>;
|
|
318
|
+
/**
|
|
319
|
+
* Batch `get(filePath)` + `hasChildren(dirPrefix)` in a single storage
|
|
320
|
+
* round-trip. Used by `readHandler` to cut miss-path D1 calls in half:
|
|
321
|
+
* a non-existent file previously paid `get` + `hasChildren` sequentially
|
|
322
|
+
* (2 HTTP round-trips); this collapses both into one batch call.
|
|
323
|
+
* Optional — callers fall back to sequential `get` + `hasChildren` when absent.
|
|
324
|
+
*/
|
|
325
|
+
getAndHasChildren?(filePath: string, dirPrefix: string): Promise<[TreeEntry | null, boolean]>;
|
|
326
|
+
/**
|
|
327
|
+
* Batch sync fast path (afs-rpc-batch P3) — per-entry opts
|
|
328
|
+
* (deviceId/mtime/ifMatch) and per-entry results (oldCid / skipped /
|
|
329
|
+
* conflict / liveSeq). Entries arrive with UNIQUE paths (the core splits
|
|
330
|
+
* duplicate-path batches) so a one-shot preread is serial-equivalent.
|
|
331
|
+
* Watermark semantics match single `put`: +1 per written entry, each
|
|
332
|
+
* result carrying its own seq. See the section comment above for why this
|
|
333
|
+
* is NOT the legacy `putBatch`.
|
|
334
|
+
*/
|
|
335
|
+
batchPutEntries?(entries: BatchPutEntry[], ctx?: BatchIndexContext): Promise<BatchPutEntryResult[]>;
|
|
336
|
+
/** Delete twin of {@link batchPutEntries}. FILE entries only (no dir fallback). */
|
|
337
|
+
batchDeleteEntries?(entries: BatchDeleteEntry[], ctx?: BatchIndexContext): Promise<BatchDeleteEntryResult[]>;
|
|
338
|
+
/** Write/update file metadata (ctime preserved by implementation). Returns previous CID if entry existed. */
|
|
339
|
+
put(path: string, entry: TreeEntry, opts: PutOpts): Promise<{
|
|
340
|
+
oldCid?: string;
|
|
341
|
+
}>;
|
|
342
|
+
/**
|
|
343
|
+
* Dedup-on-write lookup (#1159): resolve the single entry whose
|
|
344
|
+
* `(dedup_scope, dedup_key)` matches within this scope, or `null`. Backed by
|
|
345
|
+
* the `(scope, dedup_scope, dedup_key)` partial UNIQUE index → O(log n) point
|
|
346
|
+
* seek, never a `json_extract` full scan. Returns the entry's REAL path so the
|
|
347
|
+
* provider can merge into it in place.
|
|
348
|
+
*
|
|
349
|
+
* Optional during rollout: a TreeIndex without it makes the owning provider
|
|
350
|
+
* treat `dedupBy` writes as unsupported (explicit error, never silent).
|
|
351
|
+
*/
|
|
352
|
+
findByDedupKey?(dedupScope: string, dedupKey: string): Promise<({
|
|
353
|
+
path: string;
|
|
354
|
+
} & TreeEntry) | null>;
|
|
355
|
+
/**
|
|
356
|
+
* Populate the dedup columns of an EXISTING row WITHOUT rewriting its
|
|
357
|
+
* content/cid or emitting a changelog row — the one-time reindex/backfill seam
|
|
358
|
+
* (#1159, deferred script). Index-only UPDATE keyed on `(scope, path)`. No-op
|
|
359
|
+
* if the path has no row. Optional: reindex callers guard on its presence.
|
|
360
|
+
*/
|
|
361
|
+
setDedupKey?(path: string, dedupScope: string, dedupKey: string, opts: PutOpts): Promise<void>;
|
|
362
|
+
/**
|
|
363
|
+
* Resolve the inline `content` this entry WOULD store under the index's
|
|
364
|
+
* configured inline policy (or `null` for "store NULL"). Exposed so
|
|
365
|
+
* {@link loopBatchPutEntries} can mirror D1's content-aware skip — a cid+mime
|
|
366
|
+
* match whose inline column is out of sync must fall through to `put()` to
|
|
367
|
+
* self-repair, instead of being early-skipped. Optional: indexes without
|
|
368
|
+
* inline support omit it and the loop keeps the legacy cid+mime skip.
|
|
369
|
+
*/
|
|
370
|
+
inlineForEntry?(entry: TreeEntry): Promise<string | null>;
|
|
371
|
+
/** Delete a single file */
|
|
372
|
+
delete(path: string, opts: PutOpts): Promise<void>;
|
|
373
|
+
/** List entries under a prefix (for directory browsing) */
|
|
374
|
+
list(prefix: string, options?: TreeIndexListOptions): Promise<TreeIndexListResult>;
|
|
375
|
+
/** List entries with full metadata under a prefix */
|
|
376
|
+
listEntries(prefix: string, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
|
|
377
|
+
/** Check if prefix has any child entries (directory existence) */
|
|
378
|
+
hasChildren(prefix: string): Promise<boolean>;
|
|
379
|
+
/** Count entries under a prefix (exact value) */
|
|
380
|
+
count(prefix: string): Promise<number>;
|
|
381
|
+
/** Bulk-delete all entries under a prefix, return count deleted */
|
|
382
|
+
deleteByPrefix(prefix: string, opts: PutOpts): Promise<number>;
|
|
383
|
+
/** List direct children of a parent directory (uses parent index) */
|
|
384
|
+
listChildren(parent: string, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
|
|
385
|
+
/** Count direct children of a parent directory (exact, O(log n)) */
|
|
386
|
+
countChildren(parent: string): Promise<number>;
|
|
387
|
+
/**
|
|
388
|
+
* Count direct children for EACH of the given parent directories in one
|
|
389
|
+
* round-trip, returned as `Map<parentPath, count>` keyed by the same path
|
|
390
|
+
* form `listChildren` yields for a directory child (trailing-slash, and —
|
|
391
|
+
* for {@link PrefixedTreeIndex} — prefix-stripped).
|
|
392
|
+
*
|
|
393
|
+
* PAGE-BOUNDED by contract: callers pass only the directories on the page
|
|
394
|
+
* being listed, so the cost is Σ direct children of those dirs. This
|
|
395
|
+
* replaces the retired subtree-wide `countChildrenGrouped(prefix)`, whose
|
|
396
|
+
* `parent >= lo AND parent < hi` range scanned EVERY descendant (all
|
|
397
|
+
* depths) under the listed prefix on every list — ~100M+ D1 rows_read/day
|
|
398
|
+
* once a hot collection grew to ~1k dirs (2026-06 free-tier exhaustion).
|
|
399
|
+
*
|
|
400
|
+
* Optional: callers MUST fall back to per-path {@link countChildren} when
|
|
401
|
+
* an implementation does not provide it. The returned map omits empty
|
|
402
|
+
* directories (count 0) — look up with `map.get(path) ?? 0`.
|
|
403
|
+
*/
|
|
404
|
+
countChildrenMany?(parents: string[]): Promise<Map<string, number>>;
|
|
405
|
+
/** Get aggregate stats (file count + total size) for a prefix */
|
|
406
|
+
aggregate(prefix: string): Promise<{
|
|
407
|
+
fileCount: number;
|
|
408
|
+
totalSize: number;
|
|
409
|
+
}>;
|
|
410
|
+
/** Batch write entries in a transaction */
|
|
411
|
+
putBatch(entries: Array<{
|
|
412
|
+
path: string;
|
|
413
|
+
entry: TreeEntry;
|
|
414
|
+
}>, opts: PutOpts): Promise<void>;
|
|
415
|
+
/** List entries modified since a timestamp */
|
|
416
|
+
listModifiedSince(prefix: string, since: number, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
|
|
417
|
+
/**
|
|
418
|
+
* Return the maximum changelog seq for this scope.
|
|
419
|
+
* Used by `DIDSpaceProvider.list(path, { maxDepth: -1 })` to include
|
|
420
|
+
* the snapshot waterline in `meta.cursor`. Returns 0 when the changelog
|
|
421
|
+
* is empty (no writes have been recorded yet).
|
|
422
|
+
*/
|
|
423
|
+
getMaxSeq(): Promise<number>;
|
|
424
|
+
/**
|
|
425
|
+
* Read the per-prefix watermark `version` for a collection root (Live Update
|
|
426
|
+
* Resilience §11.4). `prefix` is a scope-relative path; the implementation
|
|
427
|
+
* reduces it to its first path segment (the `/user` first-level collection
|
|
428
|
+
* root) and returns that row's `version`, or `0` when no row exists yet
|
|
429
|
+
* ("nothing written under this collection root").
|
|
430
|
+
*
|
|
431
|
+
* This is the O(1) change-detector that web reconcile reads on every
|
|
432
|
+
* connection edge: it never scans the changelog and never grows with history
|
|
433
|
+
* or global write volume. Optional during rollout — a TreeIndex without it
|
|
434
|
+
* leaves the owning provider unable to emit `liveSeq` (consumer falls back to
|
|
435
|
+
* full re-list on every edge/poll, still correct).
|
|
436
|
+
*
|
|
437
|
+
* Tri-state return:
|
|
438
|
+
* - `null` — the path has no collection root (no watermark key): the owner
|
|
439
|
+
* emits NO `liveSeq`, consumers stay on the conservative full-refetch path.
|
|
440
|
+
* - `0` — valid collection root with no writes yet: the owner emits
|
|
441
|
+
* `liveSeq: "0"` so consumers baseline at 0 and DON'T refetch every poll
|
|
442
|
+
* tick on a read-only collection (the first write bumps to 1 > 0).
|
|
443
|
+
* - `>0` — the row's version.
|
|
444
|
+
*/
|
|
445
|
+
getPrefixWatermark?(prefix: string): Promise<number | null>;
|
|
446
|
+
/**
|
|
447
|
+
* Return changelog rows with `seq > sinceSeq` (ascending), capped at `limit`.
|
|
448
|
+
*
|
|
449
|
+
* `cursor` is the highest **inner** seq this scan observed — NOT the seq of
|
|
450
|
+
* the last returned entry. This distinction matters for {@link
|
|
451
|
+
* PrefixedTreeIndex}: when a prefix filter drops every row on a page, the page
|
|
452
|
+
* returns `entries: []` but `cursor` still advances to the max inner seq so
|
|
453
|
+
* the caller never re-requests the same window (no infinite loop on empty
|
|
454
|
+
* pages). `hasMore` follows the inner pagination ("are there more inner rows
|
|
455
|
+
* with seq > cursor"), not "are there more rows under this prefix".
|
|
456
|
+
*
|
|
457
|
+
* On an empty changelog (or no rows past `sinceSeq`) returns
|
|
458
|
+
* `{ entries: [], hasMore: false, cursor: sinceSeq }` — cursor never goes
|
|
459
|
+
* backwards.
|
|
460
|
+
*/
|
|
461
|
+
getChangelogSince(sinceSeq: number, limit: number): Promise<{
|
|
462
|
+
entries: ChangelogEntry[];
|
|
463
|
+
hasMore: boolean;
|
|
464
|
+
cursor: number;
|
|
465
|
+
}>;
|
|
466
|
+
/**
|
|
467
|
+
* Compaction watermark for this scope (Phase 1 of changelog compaction).
|
|
468
|
+
* Returns 0 when no compaction has ever run (safe permissive default).
|
|
469
|
+
*/
|
|
470
|
+
getCompactedBelowSeq?(): Promise<number>;
|
|
471
|
+
/**
|
|
472
|
+
* Collection query over DIRECT children of `parent` (afs-collection-query
|
|
473
|
+
* Phase 1, design §3.5): typed where σ on the record document (doc-joined
|
|
474
|
+
* for dir-per-record, inline content for file-per-record), entry-column
|
|
475
|
+
* orderBy, exact post-WHERE total, keyset/offset pagination, groupBy
|
|
476
|
+
* counting. Spec semantics are locked to the core reference evaluator by
|
|
477
|
+
* conformance + the cross-backend lockstep test (`tree-query.ts`).
|
|
478
|
+
*
|
|
479
|
+
* Optional during rollout: implementations without it leave the owning
|
|
480
|
+
* provider undeclared (the root action then fails AFS_UNSUPPORTED).
|
|
481
|
+
*/
|
|
482
|
+
query?(parent: string, spec: TreeQuerySpec): Promise<TreeQueryResult>;
|
|
483
|
+
/**
|
|
484
|
+
* True if `cid` is referenced within THIS index's VIEW (read-**auth**,
|
|
485
|
+
* design §4.1) — three-way `entries.cid ∪ changelog.cid ∪ changelog.old_cid`,
|
|
486
|
+
* always `WHERE scope = ?`.
|
|
487
|
+
*
|
|
488
|
+
* `pathPrefix` (default `""`) restricts the check to a sub-tree
|
|
489
|
+
* (`path >= lo AND path < hi`). {@link PrefixedTreeIndex} passes its own
|
|
490
|
+
* prefix so a blocklet/role provider authorizes ONLY cids its own fragment
|
|
491
|
+
* references (P0#2 blocklet isolation); the unprefixed space-root provider
|
|
492
|
+
* leaves it `""` and stays whole-scope.
|
|
493
|
+
*
|
|
494
|
+
* This is the authorization check, distinct from the scope-blind,
|
|
495
|
+
* entries-only GC-liveness check `referencedAnywhere` (design §3, §4.4b).
|
|
496
|
+
* Returns false for empty `cid`.
|
|
497
|
+
*/
|
|
498
|
+
isReferenced(cid: string, pathPrefix?: string): Promise<boolean>;
|
|
499
|
+
/**
|
|
500
|
+
* Batch read-auth (download plane, design §7.2): given a set of cids, return
|
|
501
|
+
* the SUBSET that is referenced within THIS index's VIEW — exactly the cids
|
|
502
|
+
* for which {@link isReferenced} would return `true`. A cid NOT in the result
|
|
503
|
+
* is `forbidden` (covers both unreferenced AND not-found — never distinguish).
|
|
504
|
+
*
|
|
505
|
+
* MUST be three-way-equivalent to per-cid `isReferenced`
|
|
506
|
+
* (`entries.cid ∪ changelog.cid ∪ changelog.old_cid`, scope-aware, optionally
|
|
507
|
+
* prefix-local) — a superseded cid that left `entries` but lives in
|
|
508
|
+
* `changelog.old_cid` MUST still be returned, or the read-auth invariant
|
|
509
|
+
* breaks (design Finding 2). The SQL backends shard the `IN (?,…)` list to
|
|
510
|
+
* stay under the bound-parameter cap (D1 = 100; the three-way UNION binds each
|
|
511
|
+
* cid 3×, so the per-query cid budget is small). Empty input → empty set, no
|
|
512
|
+
* query (avoid `IN ()`).
|
|
513
|
+
*/
|
|
514
|
+
isReferencedMany(cids: string[], pathPrefix?: string): Promise<Set<string>>;
|
|
515
|
+
/** Ready dirty rows under `prefix` with `next_attempt_at <= now`, capped at `limit`. */
|
|
516
|
+
listDirtyPaths?(options: ListDirtyPathOptions): Promise<DirtyPathRow[]>;
|
|
517
|
+
/** Guarded ack: delete the dirty row iff its `latest_seq` still equals `latestSeq`. */
|
|
518
|
+
ackDirtyPath?(path: string, latestSeq: number): Promise<boolean>;
|
|
519
|
+
/** Guarded failure record: bump attempts + set last_error/next_attempt_at on the matching row. */
|
|
520
|
+
markDirtyPathError?(path: string, latestSeq: number, error: string, nextAttemptAt: number): Promise<boolean>;
|
|
521
|
+
}
|
|
522
|
+
//#endregion
|
|
523
|
+
export { BatchDeleteEntry, BatchDeleteEntryResult, BatchIndexContext, BatchPutEntry, BatchPutEntryResult, ChangelogEntry, OrderedQueryParts, ParsedTreeCursor, PutOpts, TreeEntry, TreeIndex, TreeIndexListEntriesResult, TreeIndexListOptions, TreeIndexListResult, TreeKeysetCursor, buildKeysetCursor, buildOrderedQueryParts, compareTreeSortValues, keysetAfter, parseTreeCursor };
|
|
524
|
+
//# sourceMappingURL=tree-index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-index.d.cts","names":[],"sources":["../src/tree-index.ts"],"mappings":";;;;UA0BiB,SAAA;EACf,GAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EA2ImC;;;;;;;;AAoCrC;;;;;AAqBA;;EApLE,OAAA;EAoLgC;;AAIlC;;;;;;;;;;;;AAgBA;EAxLE,QAAA,GAAW,MAAA;;;;;;;;AAsNb;;;;;;;;;EArME,UAAA;EACA,QAAA;AAAA;AAAA,UAyFe,oBAAA;EACf,KAAA;EACA,MAAA;EAkNkC;;;;;;EA3MlC,cAAA;EA8MA;;;AAGF;;;;;;;;;;;;AAuBA;;;;EApNE,OAAA;EACA,KAAA;AAAA;;UAMe,gBAAA;EAkOA;EAhOf,SAAA;;EAEA,GAAA;AAAA;;iBAiBc,iBAAA,CAAkB,SAAA,0BAAmC,GAAA;AAAA,KAIzD,gBAAA;EACN,IAAA;AAAA;EACA,IAAA;EAAgB,KAAA;AAAA;EAChB,IAAA;EAAY,MAAA,EAAQ,gBAAA;AAAA;;;;;;;;;AAyO1B;;;iBA5NgB,eAAA,CAAgB,MAAA,sBAA4B,UAAA,YAAsB,gBAAA;;UA8BjE,iBAAA;EAgMR;EA9LP,cAAA;EACA,UAAA,EAAY,KAAA;EA8LQ;EA5LpB,QAAA;AAAA;;;;;;;;;AAsMF;;;iBAxLgB,sBAAA,CAAuB,IAAA;EACrC,GAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,MAAA,GAAS,gBAAA;AAAA,IACP,iBAAA;;;;;iBA0CY,qBAAA,CACd,CAAA,0BACA,CAAA,0BACA,KAAA;;iBAkBc,WAAA,CACd,OAAA,0BACA,MAAA,UACA,MAAA,EAAQ,gBAAA,EACR,KAAA;AAAA,UAae,mBAAA;EACf,OAAA,EAAS,KAAA;IAAQ,IAAA;EAAA;EACjB,OAAA;EACA,MAAA;AAAA;AAAA,UAGe,0BAAA;EACf,OAAA,EAAS,KAAA;IAAQ,IAAA;EAAA,IAAiB,SAAA;EAClC,OAAA;EACA,MAAA;AAAA;;;;;;AAkIF;;;;;;;;;AAqHA;;;UAnOiB,OAAA;EA0OyC;EAxOxD,QAAA;EA+P+C;;;;;;EAxP/C,KAAA;EA+QW;EA7QX,aAAA;AAAA;;;;;;;;UAUe,cAAA;EAmSwD;EAjSvE,GAAA;EACA,KAAA;EACA,IAAA;EACA,EAAA;EA2SqC;EAzSrC,GAAA;EA4S8D;EA1S9D,OAAA;EA6SsC;EA3StC,IAAA;EACA,KAAA;EACA,SAAA;AAAA;;UAae,cAAA;EA0SwB;EAxSvC,QAAA;EAwS8D;EAtS9D,KAAA;EA4T+C;EA1T/C,OAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,KAAA,EAAO,SAAA;EACP,IAAA,EAAM,cAAA;AAAA;AAAA,UAGS,gBAAA;EACf,IAAA;EACA,IAAA,EAAM,cAAA;AAAA;;;UAKS,kBAAA;EACf,UAAA;EACA,YAAA;EACA,eAAA;AAAA;AAAA,UAGe,mBAAA;EACf,IAAA;EAyayB;EAvazB,MAAA;EAuagD;EArahD,OAAA;EAgbG;EA9aH,QAAA,GAAW,kBAAA;EA8aD;EA5aV,KAAA;EAsJI;;;;;;EA/IJ,IAAA;EA+J+B;;EA5J/B,OAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EA+JmC;EA7JnC,UAAA;EAsKA;EApKA,QAAA;EACA,QAAA,GAAW,kBAAA;EACX,KAAA;EACA,OAAA;AAAA;;;UAKe,iBAAA;EACf,OAAA,GAAU,GAAA,SAAY,SAAA;AAAA;AAAA,UAoHP,SAAA;EA8DX;;;;;;EAvDJ,GAAA,CAAI,IAAA,UAAc,IAAA;IAAS,cAAA;EAAA,IAA6B,OAAA,CAAQ,SAAA;EAqE9D;;;;;;;;;;;;;;EArDF,WAAA,EAAa,OAAA,WAAkB,OAAA;IAAU,KAAA;IAAe,KAAA;EAAA;EA2EnC;;;;;EApErB,OAAA,EAAS,KAAA,aAAkB,OAAA,CAAQ,GAAA,SAAY,SAAA;EAuEO;;;;;;;EA9DtD,iBAAA,EAAmB,QAAA,UAAkB,SAAA,WAAoB,OAAA,EAAS,SAAA;EAoElE;;;;;;;;;EAzDA,eAAA,EACE,OAAA,EAAS,aAAA,IACT,GAAA,GAAM,iBAAA,GACL,OAAA,CAAQ,mBAAA;EA4DoC;EAzD/C,kBAAA,EACE,OAAA,EAAS,gBAAA,IACT,GAAA,GAAM,iBAAA,GACL,OAAA,CAAQ,sBAAA;EA2DE;EAxDb,GAAA,CAAI,IAAA,UAAc,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,OAAA,GAAU,OAAA;IAAU,MAAA;EAAA;EAwDQ;;;;;;;;;;EA5CtE,cAAA,EACE,UAAA,UACA,QAAA,WACC,OAAA;IAAW,IAAA;EAAA,IAAiB,SAAA;EAqE/B;;;;;;EA7DA,WAAA,EAAa,IAAA,UAAc,UAAA,UAAoB,QAAA,UAAkB,IAAA,EAAM,OAAA,GAAU,OAAA;EA6DpB;;;;;;;;EAnD7D,cAAA,EAAgB,KAAA,EAAO,SAAA,GAAY,OAAA;EAkEnC;EA/DA,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,OAAA,GAAU,OAAA;EAsFrC;EAnFA,IAAA,CAAK,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,mBAAA;EAmFzB;EAhFrC,WAAA,CAAY,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,0BAAA;EAkGnE;EA/FF,WAAA,CAAY,MAAA,WAAiB,OAAA;EAiG1B;EA9FH,KAAA,CAAM,MAAA,WAAiB,OAAA;EA8FD;EA3FtB,cAAA,CAAe,MAAA,UAAgB,IAAA,EAAM,OAAA,GAAU,OAAA;EA2FW;EAtF1D,YAAA,CAAa,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,0BAAA;EA4F7C;EAzFzB,aAAA,CAAc,MAAA,WAAiB,OAAA;EAuG7B;;;;;;;;;;;;;;;;;EApFF,iBAAA,EAAmB,OAAA,aAAoB,OAAA,CAAQ,GAAA;EAsIS;EAnIxD,SAAA,CAAU,MAAA,WAAiB,OAAA;IAAU,SAAA;IAAmB,SAAA;EAAA;EAyIxD;EAtIA,QAAA,CAAS,OAAA,EAAS,KAAA;IAAQ,IAAA;IAAc,KAAA,EAAO,SAAA;EAAA,IAAc,IAAA,EAAM,OAAA,GAAU,OAAA;EA2I1E;EAxIH,iBAAA,CACE,MAAA,UACA,KAAA,UACA,OAAA,GAAU,oBAAA,GACT,OAAA,CAAQ,0BAAA;EAoID;;;;;;EA5HV,SAAA,IAAa,OAAA;;;;;;;;;;;;;;;;;;;;;;EAuBb,kBAAA,EAAoB,MAAA,WAAiB,OAAA;;;;;;;;;;;;;;;;EAiBrC,iBAAA,CACE,QAAA,UACA,KAAA,WACC,OAAA;IAAU,OAAA,EAAS,cAAA;IAAkB,OAAA;IAAkB,MAAA;EAAA;;;;;EAM1D,oBAAA,KAAyB,OAAA;;;;;;;;;;;;EAazB,KAAA,EACE,MAAA,UACA,IAAA,EAf8B,aAAA,GAgB7B,OAAA,CAD4C,eAAA;;;;;;;;;;;;;;;;EAkB/C,YAAA,CAAa,GAAA,UAAa,UAAA,YAAsB,OAAA;;;;;;;;;;;;;;;;EAiBhD,gBAAA,CAAiB,IAAA,YAAgB,UAAA,YAAsB,OAAA,CAAQ,GAAA;;EAc/D,cAAA,EAAgB,OAAA,EAAS,oBAAA,GAAuB,OAAA,CAAQ,YAAA;;EAGxD,YAAA,EAAc,IAAA,UAAc,SAAA,WAAoB,OAAA;;EAGhD,kBAAA,EACE,IAAA,UACA,SAAA,UACA,KAAA,UACA,aAAA,WACC,OAAA;AAAA"}
|