anchordb 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/cjs/conflict/strategies.d.ts +110 -0
- package/dist/cjs/conflict/strategies.d.ts.map +1 -0
- package/dist/cjs/conflict/strategies.js +298 -0
- package/dist/cjs/conflict/strategies.js.map +1 -0
- package/dist/cjs/conflict/types.d.ts +38 -0
- package/dist/cjs/conflict/types.d.ts.map +1 -0
- package/dist/cjs/conflict/types.js +3 -0
- package/dist/cjs/conflict/types.js.map +1 -0
- package/dist/cjs/core/anchor-db.d.ts +154 -0
- package/dist/cjs/core/anchor-db.d.ts.map +1 -0
- package/dist/cjs/core/anchor-db.js +273 -0
- package/dist/cjs/core/anchor-db.js.map +1 -0
- package/dist/cjs/core/errors.d.ts +125 -0
- package/dist/cjs/core/errors.d.ts.map +1 -0
- package/dist/cjs/core/errors.js +174 -0
- package/dist/cjs/core/errors.js.map +1 -0
- package/dist/cjs/core/hex.d.ts +4 -0
- package/dist/cjs/core/hex.d.ts.map +1 -0
- package/dist/cjs/core/hex.js +41 -0
- package/dist/cjs/core/hex.js.map +1 -0
- package/dist/cjs/core/hlc.d.ts +96 -0
- package/dist/cjs/core/hlc.d.ts.map +1 -0
- package/dist/cjs/core/hlc.js +161 -0
- package/dist/cjs/core/hlc.js.map +1 -0
- package/dist/cjs/core/object-id.d.ts +38 -0
- package/dist/cjs/core/object-id.d.ts.map +1 -0
- package/dist/cjs/core/object-id.js +167 -0
- package/dist/cjs/core/object-id.js.map +1 -0
- package/dist/cjs/core/random.d.ts +6 -0
- package/dist/cjs/core/random.d.ts.map +1 -0
- package/dist/cjs/core/random.js +39 -0
- package/dist/cjs/core/random.js.map +1 -0
- package/dist/cjs/core/runtime.d.ts +96 -0
- package/dist/cjs/core/runtime.d.ts.map +1 -0
- package/dist/cjs/core/runtime.js +3 -0
- package/dist/cjs/core/runtime.js.map +1 -0
- package/dist/cjs/core/uuid.d.ts +16 -0
- package/dist/cjs/core/uuid.d.ts.map +1 -0
- package/dist/cjs/core/uuid.js +37 -0
- package/dist/cjs/core/uuid.js.map +1 -0
- package/dist/cjs/decorators/index.d.ts +48 -0
- package/dist/cjs/decorators/index.d.ts.map +1 -0
- package/dist/cjs/decorators/index.js +295 -0
- package/dist/cjs/decorators/index.js.map +1 -0
- package/dist/cjs/events/emitter.d.ts +16 -0
- package/dist/cjs/events/emitter.d.ts.map +1 -0
- package/dist/cjs/events/emitter.js +56 -0
- package/dist/cjs/events/emitter.js.map +1 -0
- package/dist/cjs/index/keys.d.ts +79 -0
- package/dist/cjs/index/keys.d.ts.map +1 -0
- package/dist/cjs/index/keys.js +208 -0
- package/dist/cjs/index/keys.js.map +1 -0
- package/dist/cjs/index.d.ts +81 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +193 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/inspector/agent.d.ts +75 -0
- package/dist/cjs/inspector/agent.d.ts.map +1 -0
- package/dist/cjs/inspector/agent.js +520 -0
- package/dist/cjs/inspector/agent.js.map +1 -0
- package/dist/cjs/inspector/auth.d.ts +49 -0
- package/dist/cjs/inspector/auth.d.ts.map +1 -0
- package/dist/cjs/inspector/auth.js +234 -0
- package/dist/cjs/inspector/auth.js.map +1 -0
- package/dist/cjs/inspector/bridge.d.ts +141 -0
- package/dist/cjs/inspector/bridge.d.ts.map +1 -0
- package/dist/cjs/inspector/bridge.js +190 -0
- package/dist/cjs/inspector/bridge.js.map +1 -0
- package/dist/cjs/inspector/client.d.ts +111 -0
- package/dist/cjs/inspector/client.d.ts.map +1 -0
- package/dist/cjs/inspector/client.js +218 -0
- package/dist/cjs/inspector/client.js.map +1 -0
- package/dist/cjs/inspector/protocol.d.ts +160 -0
- package/dist/cjs/inspector/protocol.d.ts.map +1 -0
- package/dist/cjs/inspector/protocol.js +53 -0
- package/dist/cjs/inspector/protocol.js.map +1 -0
- package/dist/cjs/inspector/transports/in-process.d.ts +7 -0
- package/dist/cjs/inspector/transports/in-process.d.ts.map +1 -0
- package/dist/cjs/inspector/transports/in-process.js +58 -0
- package/dist/cjs/inspector/transports/in-process.js.map +1 -0
- package/dist/cjs/inspector/transports/websocket.d.ts +39 -0
- package/dist/cjs/inspector/transports/websocket.d.ts.map +1 -0
- package/dist/cjs/inspector/transports/websocket.js +60 -0
- package/dist/cjs/inspector/transports/websocket.js.map +1 -0
- package/dist/cjs/interop/csv.d.ts +53 -0
- package/dist/cjs/interop/csv.d.ts.map +1 -0
- package/dist/cjs/interop/csv.js +230 -0
- package/dist/cjs/interop/csv.js.map +1 -0
- package/dist/cjs/interop/ejson.d.ts +41 -0
- package/dist/cjs/interop/ejson.d.ts.map +1 -0
- package/dist/cjs/interop/ejson.js +182 -0
- package/dist/cjs/interop/ejson.js.map +1 -0
- package/dist/cjs/interop/export-import.d.ts +98 -0
- package/dist/cjs/interop/export-import.d.ts.map +1 -0
- package/dist/cjs/interop/export-import.js +222 -0
- package/dist/cjs/interop/export-import.js.map +1 -0
- package/dist/cjs/model/document.d.ts +66 -0
- package/dist/cjs/model/document.d.ts.map +1 -0
- package/dist/cjs/model/document.js +302 -0
- package/dist/cjs/model/document.js.map +1 -0
- package/dist/cjs/model/model.d.ts +178 -0
- package/dist/cjs/model/model.d.ts.map +1 -0
- package/dist/cjs/model/model.js +823 -0
- package/dist/cjs/model/model.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/query/aggregation/expressions.d.ts +34 -0
- package/dist/cjs/query/aggregation/expressions.d.ts.map +1 -0
- package/dist/cjs/query/aggregation/expressions.js +552 -0
- package/dist/cjs/query/aggregation/expressions.js.map +1 -0
- package/dist/cjs/query/aggregation/pipeline.d.ts +79 -0
- package/dist/cjs/query/aggregation/pipeline.d.ts.map +1 -0
- package/dist/cjs/query/aggregation/pipeline.js +597 -0
- package/dist/cjs/query/aggregation/pipeline.js.map +1 -0
- package/dist/cjs/query/aggregation/source.d.ts +35 -0
- package/dist/cjs/query/aggregation/source.d.ts.map +1 -0
- package/dist/cjs/query/aggregation/source.js +81 -0
- package/dist/cjs/query/aggregation/source.js.map +1 -0
- package/dist/cjs/query/builder/query.d.ts +113 -0
- package/dist/cjs/query/builder/query.d.ts.map +1 -0
- package/dist/cjs/query/builder/query.js +215 -0
- package/dist/cjs/query/builder/query.js.map +1 -0
- package/dist/cjs/query/filter.d.ts +50 -0
- package/dist/cjs/query/filter.d.ts.map +1 -0
- package/dist/cjs/query/filter.js +275 -0
- package/dist/cjs/query/filter.js.map +1 -0
- package/dist/cjs/query/path.d.ts +41 -0
- package/dist/cjs/query/path.d.ts.map +1 -0
- package/dist/cjs/query/path.js +294 -0
- package/dist/cjs/query/path.js.map +1 -0
- package/dist/cjs/query/update.d.ts +30 -0
- package/dist/cjs/query/update.d.ts.map +1 -0
- package/dist/cjs/query/update.js +205 -0
- package/dist/cjs/query/update.js.map +1 -0
- package/dist/cjs/reactive/live-query.d.ts +41 -0
- package/dist/cjs/reactive/live-query.d.ts.map +1 -0
- package/dist/cjs/reactive/live-query.js +88 -0
- package/dist/cjs/reactive/live-query.js.map +1 -0
- package/dist/cjs/schema/cast.d.ts +38 -0
- package/dist/cjs/schema/cast.d.ts.map +1 -0
- package/dist/cjs/schema/cast.js +280 -0
- package/dist/cjs/schema/cast.js.map +1 -0
- package/dist/cjs/schema/index.d.ts +5 -0
- package/dist/cjs/schema/index.d.ts.map +1 -0
- package/dist/cjs/schema/index.js +27 -0
- package/dist/cjs/schema/index.js.map +1 -0
- package/dist/cjs/schema/schema.d.ts +58 -0
- package/dist/cjs/schema/schema.d.ts.map +1 -0
- package/dist/cjs/schema/schema.js +363 -0
- package/dist/cjs/schema/schema.js.map +1 -0
- package/dist/cjs/schema/types.d.ts +144 -0
- package/dist/cjs/schema/types.d.ts.map +1 -0
- package/dist/cjs/schema/types.js +20 -0
- package/dist/cjs/schema/types.js.map +1 -0
- package/dist/cjs/schema/validate.d.ts +15 -0
- package/dist/cjs/schema/validate.d.ts.map +1 -0
- package/dist/cjs/schema/validate.js +101 -0
- package/dist/cjs/schema/validate.js.map +1 -0
- package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts +67 -0
- package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/capacitor-sqlite.js +69 -0
- package/dist/cjs/storage/adapters/capacitor-sqlite.js.map +1 -0
- package/dist/cjs/storage/adapters/expo-sqlite.d.ts +55 -0
- package/dist/cjs/storage/adapters/expo-sqlite.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/expo-sqlite.js +53 -0
- package/dist/cjs/storage/adapters/expo-sqlite.js.map +1 -0
- package/dist/cjs/storage/adapters/indexeddb.d.ts +55 -0
- package/dist/cjs/storage/adapters/indexeddb.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/indexeddb.js +393 -0
- package/dist/cjs/storage/adapters/indexeddb.js.map +1 -0
- package/dist/cjs/storage/adapters/memory.d.ts +44 -0
- package/dist/cjs/storage/adapters/memory.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/memory.js +286 -0
- package/dist/cjs/storage/adapters/memory.js.map +1 -0
- package/dist/cjs/storage/adapters/node-sqlite.d.ts +59 -0
- package/dist/cjs/storage/adapters/node-sqlite.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/node-sqlite.js +457 -0
- package/dist/cjs/storage/adapters/node-sqlite.js.map +1 -0
- package/dist/cjs/storage/adapters/sql-base.d.ts +84 -0
- package/dist/cjs/storage/adapters/sql-base.d.ts.map +1 -0
- package/dist/cjs/storage/adapters/sql-base.js +393 -0
- package/dist/cjs/storage/adapters/sql-base.js.map +1 -0
- package/dist/cjs/storage/types.d.ts +131 -0
- package/dist/cjs/storage/types.d.ts.map +1 -0
- package/dist/cjs/storage/types.js +3 -0
- package/dist/cjs/storage/types.js.map +1 -0
- package/dist/cjs/sync/adapters/rest.d.ts +31 -0
- package/dist/cjs/sync/adapters/rest.d.ts.map +1 -0
- package/dist/cjs/sync/adapters/rest.js +75 -0
- package/dist/cjs/sync/adapters/rest.js.map +1 -0
- package/dist/cjs/sync/attach.d.ts +30 -0
- package/dist/cjs/sync/attach.d.ts.map +1 -0
- package/dist/cjs/sync/attach.js +104 -0
- package/dist/cjs/sync/attach.js.map +1 -0
- package/dist/cjs/sync/engine.d.ts +96 -0
- package/dist/cjs/sync/engine.d.ts.map +1 -0
- package/dist/cjs/sync/engine.js +491 -0
- package/dist/cjs/sync/engine.js.map +1 -0
- package/dist/cjs/sync/protocol.d.ts +128 -0
- package/dist/cjs/sync/protocol.d.ts.map +1 -0
- package/dist/cjs/sync/protocol.js +38 -0
- package/dist/cjs/sync/protocol.js.map +1 -0
- package/dist/cjs/sync/queue.d.ts +77 -0
- package/dist/cjs/sync/queue.d.ts.map +1 -0
- package/dist/cjs/sync/queue.js +245 -0
- package/dist/cjs/sync/queue.js.map +1 -0
- package/dist/cjs/sync/server/memory-server.d.ts +65 -0
- package/dist/cjs/sync/server/memory-server.d.ts.map +1 -0
- package/dist/cjs/sync/server/memory-server.js +193 -0
- package/dist/cjs/sync/server/memory-server.js.map +1 -0
- package/dist/cjs/timestamps/index.d.ts +47 -0
- package/dist/cjs/timestamps/index.d.ts.map +1 -0
- package/dist/cjs/timestamps/index.js +88 -0
- package/dist/cjs/timestamps/index.js.map +1 -0
- package/dist/cjs/timestamps/timezone.d.ts +65 -0
- package/dist/cjs/timestamps/timezone.d.ts.map +1 -0
- package/dist/cjs/timestamps/timezone.js +208 -0
- package/dist/cjs/timestamps/timezone.js.map +1 -0
- package/dist/esm/conflict/strategies.d.ts +110 -0
- package/dist/esm/conflict/strategies.d.ts.map +1 -0
- package/dist/esm/conflict/strategies.js +289 -0
- package/dist/esm/conflict/strategies.js.map +1 -0
- package/dist/esm/conflict/types.d.ts +38 -0
- package/dist/esm/conflict/types.d.ts.map +1 -0
- package/dist/esm/conflict/types.js +2 -0
- package/dist/esm/conflict/types.js.map +1 -0
- package/dist/esm/core/anchor-db.d.ts +154 -0
- package/dist/esm/core/anchor-db.d.ts.map +1 -0
- package/dist/esm/core/anchor-db.js +269 -0
- package/dist/esm/core/anchor-db.js.map +1 -0
- package/dist/esm/core/errors.d.ts +125 -0
- package/dist/esm/core/errors.d.ts.map +1 -0
- package/dist/esm/core/errors.js +161 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/hex.d.ts +4 -0
- package/dist/esm/core/hex.d.ts.map +1 -0
- package/dist/esm/core/hex.js +37 -0
- package/dist/esm/core/hex.js.map +1 -0
- package/dist/esm/core/hlc.d.ts +96 -0
- package/dist/esm/core/hlc.d.ts.map +1 -0
- package/dist/esm/core/hlc.js +153 -0
- package/dist/esm/core/hlc.js.map +1 -0
- package/dist/esm/core/object-id.d.ts +38 -0
- package/dist/esm/core/object-id.d.ts.map +1 -0
- package/dist/esm/core/object-id.js +163 -0
- package/dist/esm/core/object-id.js.map +1 -0
- package/dist/esm/core/random.d.ts +6 -0
- package/dist/esm/core/random.d.ts.map +1 -0
- package/dist/esm/core/random.js +34 -0
- package/dist/esm/core/random.js.map +1 -0
- package/dist/esm/core/runtime.d.ts +96 -0
- package/dist/esm/core/runtime.d.ts.map +1 -0
- package/dist/esm/core/runtime.js +2 -0
- package/dist/esm/core/runtime.js.map +1 -0
- package/dist/esm/core/uuid.d.ts +16 -0
- package/dist/esm/core/uuid.d.ts.map +1 -0
- package/dist/esm/core/uuid.js +33 -0
- package/dist/esm/core/uuid.js.map +1 -0
- package/dist/esm/decorators/index.d.ts +48 -0
- package/dist/esm/decorators/index.d.ts.map +1 -0
- package/dist/esm/decorators/index.js +286 -0
- package/dist/esm/decorators/index.js.map +1 -0
- package/dist/esm/events/emitter.d.ts +16 -0
- package/dist/esm/events/emitter.d.ts.map +1 -0
- package/dist/esm/events/emitter.js +52 -0
- package/dist/esm/events/emitter.js.map +1 -0
- package/dist/esm/index/keys.d.ts +79 -0
- package/dist/esm/index/keys.d.ts.map +1 -0
- package/dist/esm/index/keys.js +198 -0
- package/dist/esm/index/keys.js.map +1 -0
- package/dist/esm/index.d.ts +81 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +59 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/inspector/agent.d.ts +75 -0
- package/dist/esm/inspector/agent.d.ts.map +1 -0
- package/dist/esm/inspector/agent.js +482 -0
- package/dist/esm/inspector/agent.js.map +1 -0
- package/dist/esm/inspector/auth.d.ts +49 -0
- package/dist/esm/inspector/auth.d.ts.map +1 -0
- package/dist/esm/inspector/auth.js +228 -0
- package/dist/esm/inspector/auth.js.map +1 -0
- package/dist/esm/inspector/bridge.d.ts +141 -0
- package/dist/esm/inspector/bridge.d.ts.map +1 -0
- package/dist/esm/inspector/bridge.js +182 -0
- package/dist/esm/inspector/bridge.js.map +1 -0
- package/dist/esm/inspector/client.d.ts +111 -0
- package/dist/esm/inspector/client.d.ts.map +1 -0
- package/dist/esm/inspector/client.js +213 -0
- package/dist/esm/inspector/client.js.map +1 -0
- package/dist/esm/inspector/protocol.d.ts +160 -0
- package/dist/esm/inspector/protocol.d.ts.map +1 -0
- package/dist/esm/inspector/protocol.js +43 -0
- package/dist/esm/inspector/protocol.js.map +1 -0
- package/dist/esm/inspector/transports/in-process.d.ts +7 -0
- package/dist/esm/inspector/transports/in-process.d.ts.map +1 -0
- package/dist/esm/inspector/transports/in-process.js +55 -0
- package/dist/esm/inspector/transports/in-process.js.map +1 -0
- package/dist/esm/inspector/transports/websocket.d.ts +39 -0
- package/dist/esm/inspector/transports/websocket.d.ts.map +1 -0
- package/dist/esm/inspector/transports/websocket.js +56 -0
- package/dist/esm/inspector/transports/websocket.js.map +1 -0
- package/dist/esm/interop/csv.d.ts +53 -0
- package/dist/esm/interop/csv.d.ts.map +1 -0
- package/dist/esm/interop/csv.js +222 -0
- package/dist/esm/interop/csv.js.map +1 -0
- package/dist/esm/interop/ejson.d.ts +41 -0
- package/dist/esm/interop/ejson.d.ts.map +1 -0
- package/dist/esm/interop/ejson.js +176 -0
- package/dist/esm/interop/ejson.js.map +1 -0
- package/dist/esm/interop/export-import.d.ts +98 -0
- package/dist/esm/interop/export-import.d.ts.map +1 -0
- package/dist/esm/interop/export-import.js +210 -0
- package/dist/esm/interop/export-import.js.map +1 -0
- package/dist/esm/model/document.d.ts +66 -0
- package/dist/esm/model/document.d.ts.map +1 -0
- package/dist/esm/model/document.js +297 -0
- package/dist/esm/model/document.js.map +1 -0
- package/dist/esm/model/model.d.ts +178 -0
- package/dist/esm/model/model.d.ts.map +1 -0
- package/dist/esm/model/model.js +815 -0
- package/dist/esm/model/model.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/query/aggregation/expressions.d.ts +34 -0
- package/dist/esm/query/aggregation/expressions.d.ts.map +1 -0
- package/dist/esm/query/aggregation/expressions.js +545 -0
- package/dist/esm/query/aggregation/expressions.js.map +1 -0
- package/dist/esm/query/aggregation/pipeline.d.ts +79 -0
- package/dist/esm/query/aggregation/pipeline.d.ts.map +1 -0
- package/dist/esm/query/aggregation/pipeline.js +591 -0
- package/dist/esm/query/aggregation/pipeline.js.map +1 -0
- package/dist/esm/query/aggregation/source.d.ts +35 -0
- package/dist/esm/query/aggregation/source.d.ts.map +1 -0
- package/dist/esm/query/aggregation/source.js +77 -0
- package/dist/esm/query/aggregation/source.js.map +1 -0
- package/dist/esm/query/builder/query.d.ts +113 -0
- package/dist/esm/query/builder/query.d.ts.map +1 -0
- package/dist/esm/query/builder/query.js +209 -0
- package/dist/esm/query/builder/query.js.map +1 -0
- package/dist/esm/query/filter.d.ts +50 -0
- package/dist/esm/query/filter.d.ts.map +1 -0
- package/dist/esm/query/filter.js +267 -0
- package/dist/esm/query/filter.js.map +1 -0
- package/dist/esm/query/path.d.ts +41 -0
- package/dist/esm/query/path.d.ts.map +1 -0
- package/dist/esm/query/path.js +282 -0
- package/dist/esm/query/path.js.map +1 -0
- package/dist/esm/query/update.d.ts +30 -0
- package/dist/esm/query/update.d.ts.map +1 -0
- package/dist/esm/query/update.js +198 -0
- package/dist/esm/query/update.js.map +1 -0
- package/dist/esm/reactive/live-query.d.ts +41 -0
- package/dist/esm/reactive/live-query.d.ts.map +1 -0
- package/dist/esm/reactive/live-query.js +83 -0
- package/dist/esm/reactive/live-query.js.map +1 -0
- package/dist/esm/schema/cast.d.ts +38 -0
- package/dist/esm/schema/cast.d.ts.map +1 -0
- package/dist/esm/schema/cast.js +275 -0
- package/dist/esm/schema/cast.js.map +1 -0
- package/dist/esm/schema/index.d.ts +5 -0
- package/dist/esm/schema/index.d.ts.map +1 -0
- package/dist/esm/schema/index.js +5 -0
- package/dist/esm/schema/index.js.map +1 -0
- package/dist/esm/schema/schema.d.ts +58 -0
- package/dist/esm/schema/schema.d.ts.map +1 -0
- package/dist/esm/schema/schema.js +358 -0
- package/dist/esm/schema/schema.js.map +1 -0
- package/dist/esm/schema/types.d.ts +144 -0
- package/dist/esm/schema/types.d.ts.map +1 -0
- package/dist/esm/schema/types.js +17 -0
- package/dist/esm/schema/types.js.map +1 -0
- package/dist/esm/schema/validate.d.ts +15 -0
- package/dist/esm/schema/validate.d.ts.map +1 -0
- package/dist/esm/schema/validate.js +98 -0
- package/dist/esm/schema/validate.js.map +1 -0
- package/dist/esm/storage/adapters/capacitor-sqlite.d.ts +67 -0
- package/dist/esm/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
- package/dist/esm/storage/adapters/capacitor-sqlite.js +65 -0
- package/dist/esm/storage/adapters/capacitor-sqlite.js.map +1 -0
- package/dist/esm/storage/adapters/expo-sqlite.d.ts +55 -0
- package/dist/esm/storage/adapters/expo-sqlite.d.ts.map +1 -0
- package/dist/esm/storage/adapters/expo-sqlite.js +49 -0
- package/dist/esm/storage/adapters/expo-sqlite.js.map +1 -0
- package/dist/esm/storage/adapters/indexeddb.d.ts +55 -0
- package/dist/esm/storage/adapters/indexeddb.d.ts.map +1 -0
- package/dist/esm/storage/adapters/indexeddb.js +389 -0
- package/dist/esm/storage/adapters/indexeddb.js.map +1 -0
- package/dist/esm/storage/adapters/memory.d.ts +44 -0
- package/dist/esm/storage/adapters/memory.d.ts.map +1 -0
- package/dist/esm/storage/adapters/memory.js +282 -0
- package/dist/esm/storage/adapters/memory.js.map +1 -0
- package/dist/esm/storage/adapters/node-sqlite.d.ts +59 -0
- package/dist/esm/storage/adapters/node-sqlite.d.ts.map +1 -0
- package/dist/esm/storage/adapters/node-sqlite.js +450 -0
- package/dist/esm/storage/adapters/node-sqlite.js.map +1 -0
- package/dist/esm/storage/adapters/sql-base.d.ts +84 -0
- package/dist/esm/storage/adapters/sql-base.d.ts.map +1 -0
- package/dist/esm/storage/adapters/sql-base.js +383 -0
- package/dist/esm/storage/adapters/sql-base.js.map +1 -0
- package/dist/esm/storage/types.d.ts +131 -0
- package/dist/esm/storage/types.d.ts.map +1 -0
- package/dist/esm/storage/types.js +2 -0
- package/dist/esm/storage/types.js.map +1 -0
- package/dist/esm/sync/adapters/rest.d.ts +31 -0
- package/dist/esm/sync/adapters/rest.d.ts.map +1 -0
- package/dist/esm/sync/adapters/rest.js +71 -0
- package/dist/esm/sync/adapters/rest.js.map +1 -0
- package/dist/esm/sync/attach.d.ts +30 -0
- package/dist/esm/sync/attach.d.ts.map +1 -0
- package/dist/esm/sync/attach.js +98 -0
- package/dist/esm/sync/attach.js.map +1 -0
- package/dist/esm/sync/engine.d.ts +96 -0
- package/dist/esm/sync/engine.d.ts.map +1 -0
- package/dist/esm/sync/engine.js +487 -0
- package/dist/esm/sync/engine.js.map +1 -0
- package/dist/esm/sync/protocol.d.ts +128 -0
- package/dist/esm/sync/protocol.d.ts.map +1 -0
- package/dist/esm/sync/protocol.js +33 -0
- package/dist/esm/sync/protocol.js.map +1 -0
- package/dist/esm/sync/queue.d.ts +77 -0
- package/dist/esm/sync/queue.d.ts.map +1 -0
- package/dist/esm/sync/queue.js +241 -0
- package/dist/esm/sync/queue.js.map +1 -0
- package/dist/esm/sync/server/memory-server.d.ts +65 -0
- package/dist/esm/sync/server/memory-server.d.ts.map +1 -0
- package/dist/esm/sync/server/memory-server.js +189 -0
- package/dist/esm/sync/server/memory-server.js.map +1 -0
- package/dist/esm/timestamps/index.d.ts +47 -0
- package/dist/esm/timestamps/index.d.ts.map +1 -0
- package/dist/esm/timestamps/index.js +70 -0
- package/dist/esm/timestamps/index.js.map +1 -0
- package/dist/esm/timestamps/timezone.d.ts +65 -0
- package/dist/esm/timestamps/timezone.d.ts.map +1 -0
- package/dist/esm/timestamps/timezone.js +196 -0
- package/dist/esm/timestamps/timezone.js.map +1 -0
- package/package.json +163 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasPath = exports.getPath = exports.deepClone = exports.compareValues = exports.NodeSqliteAdapter = void 0;
|
|
4
|
+
const errors_ts_1 = require("../../core/errors.js");
|
|
5
|
+
const path_ts_1 = require("../../query/path.js");
|
|
6
|
+
Object.defineProperty(exports, "compareValues", { enumerable: true, get: function () { return path_ts_1.compareValues; } });
|
|
7
|
+
Object.defineProperty(exports, "deepClone", { enumerable: true, get: function () { return path_ts_1.deepClone; } });
|
|
8
|
+
Object.defineProperty(exports, "getPath", { enumerable: true, get: function () { return path_ts_1.getPath; } });
|
|
9
|
+
Object.defineProperty(exports, "hasPath", { enumerable: true, get: function () { return path_ts_1.hasPath; } });
|
|
10
|
+
const keys_ts_1 = require("../../index/keys.js");
|
|
11
|
+
let cachedCtor = null;
|
|
12
|
+
function loadDatabaseSync() {
|
|
13
|
+
if (cachedCtor)
|
|
14
|
+
return cachedCtor;
|
|
15
|
+
const getBuiltin = process.getBuiltinModule;
|
|
16
|
+
if (typeof getBuiltin !== "function") {
|
|
17
|
+
throw new errors_ts_1.AnchorConfigError("process.getBuiltinModule is unavailable, so node:sqlite cannot be loaded. " +
|
|
18
|
+
"NodeSqliteAdapter requires Node 22.5+. On React Native use the Expo SQLite adapter instead.");
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const mod = getBuiltin("node:sqlite");
|
|
22
|
+
if (!mod?.DatabaseSync)
|
|
23
|
+
throw new Error("node:sqlite did not expose DatabaseSync");
|
|
24
|
+
cachedCtor = mod.DatabaseSync;
|
|
25
|
+
return cachedCtor;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new errors_ts_1.AnchorConfigError("node:sqlite is unavailable. NodeSqliteAdapter requires Node 22.5+ (it is built in, no install needed). " +
|
|
29
|
+
"On React Native use the Expo SQLite adapter instead. Original error: " +
|
|
30
|
+
String(err));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
class NodeSqliteAdapter {
|
|
34
|
+
constructor(opts = {}) {
|
|
35
|
+
this.name = "node-sqlite";
|
|
36
|
+
this.indexCache = new Map();
|
|
37
|
+
this.stmtCache = new Map();
|
|
38
|
+
this.location = opts.location ?? ":memory:";
|
|
39
|
+
this.dbName = opts.dbName ?? "anchor";
|
|
40
|
+
}
|
|
41
|
+
prepare(sql) {
|
|
42
|
+
let s = this.stmtCache.get(sql);
|
|
43
|
+
if (!s) {
|
|
44
|
+
s = this.db.prepare(sql);
|
|
45
|
+
this.stmtCache.set(sql, s);
|
|
46
|
+
}
|
|
47
|
+
return s;
|
|
48
|
+
}
|
|
49
|
+
async open() {
|
|
50
|
+
const DatabaseSync = loadDatabaseSync();
|
|
51
|
+
this.db = new DatabaseSync(this.location);
|
|
52
|
+
this.db.exec("PRAGMA journal_mode = WAL");
|
|
53
|
+
this.db.exec("PRAGMA foreign_keys = ON");
|
|
54
|
+
this.db.exec(`
|
|
55
|
+
CREATE TABLE IF NOT EXISTS anchor_collections (
|
|
56
|
+
name TEXT PRIMARY KEY
|
|
57
|
+
);
|
|
58
|
+
CREATE TABLE IF NOT EXISTS anchor_state (
|
|
59
|
+
key TEXT PRIMARY KEY,
|
|
60
|
+
value TEXT NOT NULL
|
|
61
|
+
);
|
|
62
|
+
CREATE TABLE IF NOT EXISTS anchor_indexes (
|
|
63
|
+
collection TEXT NOT NULL,
|
|
64
|
+
name TEXT NOT NULL,
|
|
65
|
+
spec TEXT NOT NULL,
|
|
66
|
+
PRIMARY KEY (collection, name)
|
|
67
|
+
);
|
|
68
|
+
-- One row per (index, extracted key). The UNIQUE constraint here is what actually rejects
|
|
69
|
+
-- duplicates, atomically, inside the write transaction.
|
|
70
|
+
CREATE TABLE IF NOT EXISTS anchor_index_entries (
|
|
71
|
+
collection TEXT NOT NULL,
|
|
72
|
+
index_name TEXT NOT NULL,
|
|
73
|
+
key TEXT NOT NULL,
|
|
74
|
+
document_id TEXT NOT NULL
|
|
75
|
+
);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS anchor_index_entries_lookup
|
|
77
|
+
ON anchor_index_entries (collection, index_name, key);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS anchor_index_entries_doc
|
|
79
|
+
ON anchor_index_entries (collection, index_name, document_id);
|
|
80
|
+
`);
|
|
81
|
+
this.loadIndexes();
|
|
82
|
+
}
|
|
83
|
+
async close() {
|
|
84
|
+
this.stmtCache.clear();
|
|
85
|
+
this.db.close();
|
|
86
|
+
}
|
|
87
|
+
async destroy() {
|
|
88
|
+
const names = await this.listCollections();
|
|
89
|
+
for (const name of names)
|
|
90
|
+
this.db.exec(`DROP TABLE IF EXISTS "${tableName(name)}"`);
|
|
91
|
+
this.db.exec("DELETE FROM anchor_collections");
|
|
92
|
+
this.db.exec("DELETE FROM anchor_state");
|
|
93
|
+
this.db.exec("DELETE FROM anchor_indexes");
|
|
94
|
+
this.db.exec("DELETE FROM anchor_index_entries");
|
|
95
|
+
this.stmtCache.clear();
|
|
96
|
+
this.indexCache.clear();
|
|
97
|
+
}
|
|
98
|
+
loadIndexes() {
|
|
99
|
+
this.indexCache.clear();
|
|
100
|
+
const rows = this.db.prepare("SELECT collection, name, spec FROM anchor_indexes").all();
|
|
101
|
+
for (const r of rows) {
|
|
102
|
+
let map = this.indexCache.get(r.collection);
|
|
103
|
+
if (!map) {
|
|
104
|
+
map = new Map();
|
|
105
|
+
this.indexCache.set(r.collection, map);
|
|
106
|
+
}
|
|
107
|
+
map.set(r.name, JSON.parse(r.spec));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async ensureCollection(collection) {
|
|
111
|
+
const table = tableName(collection);
|
|
112
|
+
this.db.exec(`
|
|
113
|
+
CREATE TABLE IF NOT EXISTS "${table}" (
|
|
114
|
+
id TEXT PRIMARY KEY,
|
|
115
|
+
doc TEXT NOT NULL,
|
|
116
|
+
version INTEGER NOT NULL DEFAULT 0,
|
|
117
|
+
hlc TEXT NOT NULL DEFAULT '',
|
|
118
|
+
dirty INTEGER NOT NULL DEFAULT 0,
|
|
119
|
+
deleted INTEGER NOT NULL DEFAULT 0,
|
|
120
|
+
created_at TEXT NOT NULL,
|
|
121
|
+
updated_at TEXT NOT NULL,
|
|
122
|
+
deleted_at TEXT
|
|
123
|
+
);
|
|
124
|
+
CREATE INDEX IF NOT EXISTS "${table}_deleted" ON "${table}" (deleted);
|
|
125
|
+
CREATE INDEX IF NOT EXISTS "${table}_dirty" ON "${table}" (dirty);
|
|
126
|
+
CREATE INDEX IF NOT EXISTS "${table}_updated" ON "${table}" (updated_at);
|
|
127
|
+
`);
|
|
128
|
+
this.prepare("INSERT OR IGNORE INTO anchor_collections (name) VALUES (?)").run(collection);
|
|
129
|
+
}
|
|
130
|
+
async listCollections() {
|
|
131
|
+
const rows = this.prepare("SELECT name FROM anchor_collections ORDER BY name").all();
|
|
132
|
+
return rows.map((r) => r.name);
|
|
133
|
+
}
|
|
134
|
+
async get(collection, id, includeDeleted = false) {
|
|
135
|
+
if (!this.tableExists(collection))
|
|
136
|
+
return null;
|
|
137
|
+
const row = this.prepare(`SELECT * FROM "${tableName(collection)}" WHERE id = ?`).get(id);
|
|
138
|
+
if (!row)
|
|
139
|
+
return null;
|
|
140
|
+
if (row.deleted === 1 && !includeDeleted)
|
|
141
|
+
return null;
|
|
142
|
+
return hydrate(row);
|
|
143
|
+
}
|
|
144
|
+
tableExists(collection) {
|
|
145
|
+
const r = this.prepare("SELECT 1 AS ok FROM sqlite_master WHERE type='table' AND name = ?").get(tableName(collection));
|
|
146
|
+
return Boolean(r);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Choose an index for this query.
|
|
150
|
+
*
|
|
151
|
+
* Only an index whose *every* key field carries an equality constraint is eligible. A partially
|
|
152
|
+
* covered compound index cannot become an exact lookup against the entries table, and
|
|
153
|
+
* approximating it with a prefix match risks dropping rows — so we decline and scan instead.
|
|
154
|
+
* Longer keys win, being more selective.
|
|
155
|
+
*/
|
|
156
|
+
chooseIndex(collection, constraints) {
|
|
157
|
+
const equalities = new Map();
|
|
158
|
+
for (const c of constraints) {
|
|
159
|
+
if (c.op === "eq" && c.path !== "_id")
|
|
160
|
+
equalities.set(c.path, c.value);
|
|
161
|
+
}
|
|
162
|
+
if (equalities.size === 0)
|
|
163
|
+
return null;
|
|
164
|
+
let best = null;
|
|
165
|
+
for (const spec of this.indexCache.get(collection)?.values() ?? []) {
|
|
166
|
+
// A sparse or partial index does not contain every document, so using it for a general query
|
|
167
|
+
// would silently omit rows that legitimately match the filter.
|
|
168
|
+
if (spec.sparse || spec.partialFilterExpression)
|
|
169
|
+
continue;
|
|
170
|
+
const encoded = (0, keys_ts_1.encodeLookupKey)(spec, equalities);
|
|
171
|
+
if (encoded === null)
|
|
172
|
+
continue;
|
|
173
|
+
if (!best || spec.key.length > best.paths.size) {
|
|
174
|
+
best = { name: spec.name, key: encoded, paths: new Set(spec.key.map(([p]) => p)) };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return best;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Pushes what SQL can do into SQL and reports honestly about the rest.
|
|
181
|
+
*
|
|
182
|
+
* Equality constraints covered by an index become a join against the index-entries table; `_id`
|
|
183
|
+
* lookups hit the primary key directly. Anything needing Mongo array semantics or BSON type
|
|
184
|
+
* ordering is left to the JS layer, because SQLite's comparison rules are not Mongo's and
|
|
185
|
+
* pretending otherwise would return wrong rows.
|
|
186
|
+
*/
|
|
187
|
+
async find(plan) {
|
|
188
|
+
if (!this.tableExists(plan.collection)) {
|
|
189
|
+
return { rows: [], applied: { constraints: true, sort: true, skip: true, limit: true } };
|
|
190
|
+
}
|
|
191
|
+
const table = tableName(plan.collection);
|
|
192
|
+
const q = `"${table}"`;
|
|
193
|
+
const where = [];
|
|
194
|
+
const params = [];
|
|
195
|
+
if (!plan.includeDeleted)
|
|
196
|
+
where.push(`${q}.deleted = 0`);
|
|
197
|
+
let pushedConstraints = true;
|
|
198
|
+
let indexUsed;
|
|
199
|
+
let joinSql = "";
|
|
200
|
+
const chosen = this.chooseIndex(plan.collection, plan.constraints);
|
|
201
|
+
const coveredByIndex = chosen ? chosen.paths : new Set();
|
|
202
|
+
if (chosen) {
|
|
203
|
+
joinSql = ` JOIN anchor_index_entries e ON e.document_id = ${q}.id`;
|
|
204
|
+
where.push("e.collection = ?", "e.index_name = ?", "e.key = ?");
|
|
205
|
+
params.push(plan.collection, chosen.name, chosen.key);
|
|
206
|
+
indexUsed = chosen.name;
|
|
207
|
+
}
|
|
208
|
+
for (const c of plan.constraints) {
|
|
209
|
+
if (chosen && c.op === "eq" && coveredByIndex.has(c.path))
|
|
210
|
+
continue; // satisfied by the index
|
|
211
|
+
if (c.path === "_id" && (c.op === "eq" || c.op === "in")) {
|
|
212
|
+
if (c.op === "eq") {
|
|
213
|
+
where.push(`${q}.id = ?`);
|
|
214
|
+
params.push(String(c.value));
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const list = c.value;
|
|
218
|
+
if (list.length === 0) {
|
|
219
|
+
return { rows: [], applied: { constraints: true, sort: true, skip: true, limit: true } };
|
|
220
|
+
}
|
|
221
|
+
where.push(`${q}.id IN (${list.map(() => "?").join(",")})`);
|
|
222
|
+
params.push(...list.map((v) => String(v)));
|
|
223
|
+
}
|
|
224
|
+
indexUsed ??= "_id_";
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
pushedConstraints = false;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Sorting only pushes down for `_id`, where the hex ObjectId's text order equals creation
|
|
231
|
+
// order. Every other path may hold mixed BSON types, which SQLite would order differently.
|
|
232
|
+
let pushedSort = false;
|
|
233
|
+
let orderBy = "";
|
|
234
|
+
if (plan.sort && plan.sort.length === 1 && plan.sort[0][0] === "_id") {
|
|
235
|
+
orderBy = ` ORDER BY ${q}.id ${plan.sort[0][1] === 1 ? "ASC" : "DESC"}`;
|
|
236
|
+
pushedSort = true;
|
|
237
|
+
}
|
|
238
|
+
const canPage = pushedConstraints && (pushedSort || !plan.sort || plan.sort.length === 0);
|
|
239
|
+
let tail = "";
|
|
240
|
+
if (canPage && plan.limit !== undefined) {
|
|
241
|
+
tail += ` LIMIT ${Number(plan.limit)}`;
|
|
242
|
+
if (plan.skip)
|
|
243
|
+
tail += ` OFFSET ${Number(plan.skip)}`;
|
|
244
|
+
}
|
|
245
|
+
else if (canPage && plan.skip) {
|
|
246
|
+
tail += ` LIMIT -1 OFFSET ${Number(plan.skip)}`;
|
|
247
|
+
}
|
|
248
|
+
// DISTINCT because a multikey index can match one document through several entries.
|
|
249
|
+
const sql = `SELECT DISTINCT ${q}.* FROM ${q}` +
|
|
250
|
+
joinSql +
|
|
251
|
+
(where.length ? ` WHERE ${where.join(" AND ")}` : "") +
|
|
252
|
+
orderBy +
|
|
253
|
+
tail;
|
|
254
|
+
const raw = this.prepare(sql).all(...params);
|
|
255
|
+
return {
|
|
256
|
+
rows: raw.map(hydrate),
|
|
257
|
+
applied: {
|
|
258
|
+
constraints: pushedConstraints,
|
|
259
|
+
sort: pushedSort || !plan.sort || plan.sort.length === 0,
|
|
260
|
+
skip: canPage && Boolean(plan.skip !== undefined),
|
|
261
|
+
limit: canPage && plan.limit !== undefined,
|
|
262
|
+
},
|
|
263
|
+
indexUsed,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
async count(plan) {
|
|
267
|
+
if (!this.tableExists(plan.collection))
|
|
268
|
+
return 0;
|
|
269
|
+
// Only a constraint-free count can be answered in SQL; otherwise defer to the JS layer.
|
|
270
|
+
if (plan.constraints.length > 0)
|
|
271
|
+
return null;
|
|
272
|
+
const sql = `SELECT COUNT(*) AS n FROM "${tableName(plan.collection)}"${plan.includeDeleted ? "" : " WHERE deleted = 0"}`;
|
|
273
|
+
const r = this.prepare(sql).get();
|
|
274
|
+
return r.n;
|
|
275
|
+
}
|
|
276
|
+
async write(ops) {
|
|
277
|
+
this.db.exec("BEGIN IMMEDIATE");
|
|
278
|
+
try {
|
|
279
|
+
for (const op of ops)
|
|
280
|
+
this.applyOp(op);
|
|
281
|
+
this.db.exec("COMMIT");
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
this.db.exec("ROLLBACK");
|
|
285
|
+
throw err;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
applyOp(op) {
|
|
289
|
+
const table = tableName(op.collection);
|
|
290
|
+
const specs = [...(this.indexCache.get(op.collection)?.values() ?? [])];
|
|
291
|
+
// Index entries are rebuilt for the document on every write, so an update that changes an
|
|
292
|
+
// indexed field releases its old key and claims the new one in the same transaction.
|
|
293
|
+
this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND document_id = ?").run(op.collection, op._id);
|
|
294
|
+
if (op.type === "hardDelete") {
|
|
295
|
+
this.prepare(`DELETE FROM "${table}" WHERE id = ?`).run(op._id);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (!op.row)
|
|
299
|
+
throw new Error(`write op "${op.type}" requires a row`);
|
|
300
|
+
const { doc, meta } = op.row;
|
|
301
|
+
if (!meta.deleted) {
|
|
302
|
+
for (const spec of specs) {
|
|
303
|
+
for (const key of (0, keys_ts_1.extractIndexKeys)(doc, spec)) {
|
|
304
|
+
try {
|
|
305
|
+
this.prepare("INSERT INTO anchor_index_entries (collection, index_name, key, document_id) VALUES (?, ?, ?, ?)").run(op.collection, spec.name, key.encoded, op._id);
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
throw this.toDuplicateError(err, op.collection, spec, key.values);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
this.prepare(`INSERT INTO "${table}" (id, doc, version, hlc, dirty, deleted, created_at, updated_at, deleted_at)
|
|
314
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
315
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
316
|
+
doc = excluded.doc, version = excluded.version, hlc = excluded.hlc,
|
|
317
|
+
dirty = excluded.dirty, deleted = excluded.deleted,
|
|
318
|
+
created_at = excluded.created_at, updated_at = excluded.updated_at,
|
|
319
|
+
deleted_at = excluded.deleted_at`).run(op._id, JSON.stringify(doc), meta.version, meta.hlc, meta.dirty ? 1 : 0, meta.deleted ? 1 : 0, meta.createdAt, meta.updatedAt, meta.deletedAt ?? null);
|
|
320
|
+
}
|
|
321
|
+
toDuplicateError(err, collection, spec, keyValue) {
|
|
322
|
+
const e = err;
|
|
323
|
+
// 2067 == SQLITE_CONSTRAINT_UNIQUE; 1555 == SQLITE_CONSTRAINT_PRIMARYKEY
|
|
324
|
+
if (e?.errcode === 2067 || e?.errcode === 1555 || /UNIQUE constraint failed/.test(e?.message ?? "")) {
|
|
325
|
+
return (0, errors_ts_1.duplicateKeyError)({
|
|
326
|
+
dbName: this.dbName,
|
|
327
|
+
collection,
|
|
328
|
+
index: spec.name,
|
|
329
|
+
keyPattern: (0, keys_ts_1.indexKeyPattern)(spec),
|
|
330
|
+
keyValue,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
return err;
|
|
334
|
+
}
|
|
335
|
+
async createIndex(collection, spec) {
|
|
336
|
+
await this.ensureCollection(collection);
|
|
337
|
+
const name = spec.name || (0, keys_ts_1.defaultIndexName)(spec.key);
|
|
338
|
+
const full = { ...spec, name };
|
|
339
|
+
this.db.exec("BEGIN IMMEDIATE");
|
|
340
|
+
try {
|
|
341
|
+
this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND index_name = ?").run(collection, name);
|
|
342
|
+
if (full.unique) {
|
|
343
|
+
// The partial unique SQL index is created *before* backfilling, so building over data that
|
|
344
|
+
// already violates the constraint fails loudly — matching Mongo — instead of producing an
|
|
345
|
+
// index that silently does not enforce.
|
|
346
|
+
this.db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"
|
|
347
|
+
ON anchor_index_entries (collection, index_name, key)
|
|
348
|
+
WHERE collection = '${collection.replace(/'/g, "''")}' AND index_name = '${name.replace(/'/g, "''")}'`);
|
|
349
|
+
}
|
|
350
|
+
const rows = this.tableExists(collection)
|
|
351
|
+
? this.prepare(`SELECT * FROM "${tableName(collection)}" WHERE deleted = 0`).all()
|
|
352
|
+
: [];
|
|
353
|
+
for (const raw of rows) {
|
|
354
|
+
const row = hydrate(raw);
|
|
355
|
+
for (const key of (0, keys_ts_1.extractIndexKeys)(row.doc, full)) {
|
|
356
|
+
try {
|
|
357
|
+
this.prepare("INSERT INTO anchor_index_entries (collection, index_name, key, document_id) VALUES (?, ?, ?, ?)").run(collection, name, key.encoded, row.doc._id);
|
|
358
|
+
}
|
|
359
|
+
catch (err) {
|
|
360
|
+
throw this.toDuplicateError(err, collection, full, key.values);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
this.prepare("INSERT OR REPLACE INTO anchor_indexes (collection, name, spec) VALUES (?, ?, ?)").run(collection, name, JSON.stringify(full));
|
|
365
|
+
this.db.exec("COMMIT");
|
|
366
|
+
}
|
|
367
|
+
catch (err) {
|
|
368
|
+
this.db.exec("ROLLBACK");
|
|
369
|
+
try {
|
|
370
|
+
this.db.exec(`DROP INDEX IF EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"`);
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
/* best effort */
|
|
374
|
+
}
|
|
375
|
+
throw err;
|
|
376
|
+
}
|
|
377
|
+
let map = this.indexCache.get(collection);
|
|
378
|
+
if (!map) {
|
|
379
|
+
map = new Map();
|
|
380
|
+
this.indexCache.set(collection, map);
|
|
381
|
+
}
|
|
382
|
+
map.set(name, full);
|
|
383
|
+
}
|
|
384
|
+
async dropIndex(collection, name) {
|
|
385
|
+
this.db.exec(`DROP INDEX IF EXISTS "uxe_${sanitize(collection)}_${sanitize(name)}"`);
|
|
386
|
+
this.prepare("DELETE FROM anchor_index_entries WHERE collection = ? AND index_name = ?").run(collection, name);
|
|
387
|
+
this.prepare("DELETE FROM anchor_indexes WHERE collection = ? AND name = ?").run(collection, name);
|
|
388
|
+
this.indexCache.get(collection)?.delete(name);
|
|
389
|
+
}
|
|
390
|
+
async listIndexes(collection) {
|
|
391
|
+
return [...(this.indexCache.get(collection)?.values() ?? [])].map((s) => ({ ...s }));
|
|
392
|
+
}
|
|
393
|
+
async getState(key) {
|
|
394
|
+
const r = this.prepare("SELECT value FROM anchor_state WHERE key = ?").get(key);
|
|
395
|
+
return r?.value ?? null;
|
|
396
|
+
}
|
|
397
|
+
async setState(key, value) {
|
|
398
|
+
this.prepare("INSERT OR REPLACE INTO anchor_state (key, value) VALUES (?, ?)").run(key, value);
|
|
399
|
+
}
|
|
400
|
+
async stats() {
|
|
401
|
+
const collections = await this.listCollections();
|
|
402
|
+
let documents = 0;
|
|
403
|
+
let tombstones = 0;
|
|
404
|
+
for (const name of collections) {
|
|
405
|
+
if (!this.tableExists(name))
|
|
406
|
+
continue;
|
|
407
|
+
const r = this.prepare(`SELECT SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) AS live,
|
|
408
|
+
SUM(CASE WHEN deleted = 1 THEN 1 ELSE 0 END) AS dead FROM "${tableName(name)}"`).get();
|
|
409
|
+
documents += r.live ?? 0;
|
|
410
|
+
tombstones += r.dead ?? 0;
|
|
411
|
+
}
|
|
412
|
+
const idx = this.prepare("SELECT COUNT(*) AS n FROM anchor_indexes").get();
|
|
413
|
+
const page = this.prepare("PRAGMA page_count").get();
|
|
414
|
+
const size = this.prepare("PRAGMA page_size").get();
|
|
415
|
+
const sizeBytes = (Object.values(page)[0] ?? 0) * (Object.values(size)[0] ?? 0);
|
|
416
|
+
return { collections: collections.length, documents, indexes: idx.n, tombstones, sizeBytes };
|
|
417
|
+
}
|
|
418
|
+
async *scan(collection, opts = {}) {
|
|
419
|
+
if (!this.tableExists(collection))
|
|
420
|
+
return;
|
|
421
|
+
const batchSize = opts.batchSize ?? 500;
|
|
422
|
+
const table = tableName(collection);
|
|
423
|
+
let after = "";
|
|
424
|
+
for (;;) {
|
|
425
|
+
const sql = `SELECT * FROM "${table}" WHERE id > ?` +
|
|
426
|
+
(opts.includeDeleted ? "" : " AND deleted = 0") +
|
|
427
|
+
` ORDER BY id ASC LIMIT ${batchSize}`;
|
|
428
|
+
const rows = this.prepare(sql).all(after);
|
|
429
|
+
if (rows.length === 0)
|
|
430
|
+
return;
|
|
431
|
+
for (const r of rows)
|
|
432
|
+
yield hydrate(r);
|
|
433
|
+
after = rows[rows.length - 1].id;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
exports.NodeSqliteAdapter = NodeSqliteAdapter;
|
|
438
|
+
function tableName(collection) {
|
|
439
|
+
return `c_${sanitize(collection)}`;
|
|
440
|
+
}
|
|
441
|
+
function sanitize(name) {
|
|
442
|
+
return name.replace(/[^A-Za-z0-9_]/g, "_");
|
|
443
|
+
}
|
|
444
|
+
function hydrate(row) {
|
|
445
|
+
const doc = JSON.parse(row.doc);
|
|
446
|
+
const meta = {
|
|
447
|
+
version: row.version,
|
|
448
|
+
hlc: row.hlc,
|
|
449
|
+
dirty: row.dirty === 1,
|
|
450
|
+
deleted: row.deleted === 1,
|
|
451
|
+
createdAt: row.created_at,
|
|
452
|
+
updatedAt: row.updated_at,
|
|
453
|
+
deletedAt: row.deleted_at,
|
|
454
|
+
};
|
|
455
|
+
return { doc, meta };
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=node-sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../../../src/storage/adapters/node-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { compareValues, deepClone, getPath, hasPath } from "../../query/path.js";
|
|
2
|
+
import type { AdapterStats, DatabaseAdapter, IndexSpec, StoragePlan, StorageResult, StoredRow, WriteOp } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared SQL implementation for every SQLite-backed adapter.
|
|
5
|
+
*
|
|
6
|
+
* Expo SQLite, Capacitor SQLite and `node:sqlite` differ only in how you execute a statement and
|
|
7
|
+
* open a transaction — the schema, the index-entry mechanics and the unique-violation mapping are
|
|
8
|
+
* identical. Writing those three times would guarantee they drift, and the drift would show up as
|
|
9
|
+
* "unique indexes behave differently on iOS", which is exactly the class of bug nobody can
|
|
10
|
+
* reproduce.
|
|
11
|
+
*
|
|
12
|
+
* So each platform adapter supplies a tiny `SqlDriver` and inherits everything else. The shared
|
|
13
|
+
* storage conformance suite then runs against all of them.
|
|
14
|
+
*/
|
|
15
|
+
export interface SqlDriver {
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** Statement with no result rows. */
|
|
18
|
+
run(sql: string, params?: unknown[]): Promise<void>;
|
|
19
|
+
/** Statement returning rows. */
|
|
20
|
+
all<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
21
|
+
/** Multiple statements, typically DDL. */
|
|
22
|
+
exec(sql: string): Promise<void>;
|
|
23
|
+
/** Run `fn` inside a transaction, rolling back if it throws. */
|
|
24
|
+
transaction<T>(fn: () => Promise<T>): Promise<T>;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
interface Row {
|
|
28
|
+
id: string;
|
|
29
|
+
doc: string;
|
|
30
|
+
version: number;
|
|
31
|
+
hlc: string;
|
|
32
|
+
dirty: number;
|
|
33
|
+
deleted: number;
|
|
34
|
+
created_at: string;
|
|
35
|
+
updated_at: string;
|
|
36
|
+
deleted_at: string | null;
|
|
37
|
+
}
|
|
38
|
+
export declare abstract class SqlAdapterBase implements DatabaseAdapter {
|
|
39
|
+
abstract readonly name: string;
|
|
40
|
+
protected driver: SqlDriver;
|
|
41
|
+
protected readonly dbName: string;
|
|
42
|
+
private indexCache;
|
|
43
|
+
private knownTables;
|
|
44
|
+
constructor(dbName: string);
|
|
45
|
+
/** Platform adapters build their driver here. */
|
|
46
|
+
protected abstract createDriver(): Promise<SqlDriver>;
|
|
47
|
+
open(): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
destroy(): Promise<void>;
|
|
50
|
+
private loadIndexes;
|
|
51
|
+
ensureCollection(collection: string): Promise<void>;
|
|
52
|
+
listCollections(): Promise<string[]>;
|
|
53
|
+
protected tableExists(collection: string): boolean;
|
|
54
|
+
get(collection: string, id: string, includeDeleted?: boolean): Promise<StoredRow | null>;
|
|
55
|
+
/** Identical index-selection rule to the node:sqlite adapter — see its documentation. */
|
|
56
|
+
private chooseIndex;
|
|
57
|
+
find(plan: StoragePlan): Promise<StorageResult>;
|
|
58
|
+
count(plan: StoragePlan): Promise<number | null>;
|
|
59
|
+
write(ops: WriteOp[]): Promise<void>;
|
|
60
|
+
private applyOp;
|
|
61
|
+
/**
|
|
62
|
+
* Map a driver-specific constraint failure onto Mongo's E11000.
|
|
63
|
+
*
|
|
64
|
+
* Each SQLite binding reports the violation differently — an `errcode`, a `code` string, or only
|
|
65
|
+
* a message — so all three shapes are checked. Missing one would surface a raw SQL error to
|
|
66
|
+
* application code that is written to catch `err.code === 11000`.
|
|
67
|
+
*/
|
|
68
|
+
protected toDuplicateError(err: unknown, collection: string, spec: IndexSpec, keyValue: Record<string, unknown>): Error;
|
|
69
|
+
createIndex(collection: string, spec: IndexSpec): Promise<void>;
|
|
70
|
+
dropIndex(collection: string, name: string): Promise<void>;
|
|
71
|
+
listIndexes(collection: string): Promise<IndexSpec[]>;
|
|
72
|
+
getState(key: string): Promise<string | null>;
|
|
73
|
+
setState(key: string, value: string): Promise<void>;
|
|
74
|
+
stats(): Promise<AdapterStats>;
|
|
75
|
+
scan(collection: string, opts?: {
|
|
76
|
+
includeDeleted?: boolean;
|
|
77
|
+
batchSize?: number;
|
|
78
|
+
}): AsyncIterable<StoredRow>;
|
|
79
|
+
}
|
|
80
|
+
export declare function tableName(collection: string): string;
|
|
81
|
+
export declare function sanitize(name: string): string;
|
|
82
|
+
export declare function hydrate(row: Row): StoredRow;
|
|
83
|
+
export { compareValues, deepClone, getPath, hasPath };
|
|
84
|
+
//# sourceMappingURL=sql-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-base.d.ts","sourceRoot":"","sources":["../../../../src/storage/adapters/sql-base.ts"],"names":[],"mappings":"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"}
|