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,269 @@
|
|
|
1
|
+
import { AnchorConfigError } from "./errors.js";
|
|
2
|
+
import { HybridLogicalClock } from "./hlc.js";
|
|
3
|
+
import { generateClientId } from "./uuid.js";
|
|
4
|
+
import { TypedEmitter } from "../events/emitter.js";
|
|
5
|
+
import { TimeService } from "../timestamps/index.js";
|
|
6
|
+
import { assertValidTimeZone } from "../timestamps/timezone.js";
|
|
7
|
+
import { Schema } from "../schema/schema.js";
|
|
8
|
+
import { Model } from "../model/model.js";
|
|
9
|
+
import { createModelConstructor } from "../model/document.js";
|
|
10
|
+
import { MemoryAdapter } from "../storage/adapters/memory.js";
|
|
11
|
+
/**
|
|
12
|
+
* AnchorDB — MongoDB + Mongoose for mobile apps.
|
|
13
|
+
*
|
|
14
|
+
* ## Two modes, one API
|
|
15
|
+
*
|
|
16
|
+
* Passing no `sync` block yields a **purely local database**: no mutation queue is created, no
|
|
17
|
+
* network code is instantiated, deletes are hard deletes rather than tombstones, and documents
|
|
18
|
+
* carry no sync metadata. That is not a degraded mode — it is the default, and an app with no
|
|
19
|
+
* backend never pays for machinery it does not use.
|
|
20
|
+
*
|
|
21
|
+
* Adding a `sync` block later changes no application code. Existing documents are adopted on first
|
|
22
|
+
* sync (seeded dirty at version 0) so nothing has to be rewritten or re-imported.
|
|
23
|
+
*/
|
|
24
|
+
export class AnchorDB {
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.emitter = new TypedEmitter();
|
|
27
|
+
this.models = new Map();
|
|
28
|
+
this.constructors = new Map();
|
|
29
|
+
this.openPromise = null;
|
|
30
|
+
this.closed = false;
|
|
31
|
+
/** Installed by the sync engine when sync is configured. */
|
|
32
|
+
this.mutationRecorder = null;
|
|
33
|
+
// ---- sync facade ---------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Always present, even with no backend, so UI bound to sync state does not have to branch. In
|
|
36
|
+
* local-only mode `status()` reports "disabled" and the actions are explicit no-ops rather than
|
|
37
|
+
* throwing — a dashboard that renders sync state should degrade, not crash.
|
|
38
|
+
*/
|
|
39
|
+
this.sync = {
|
|
40
|
+
status: () => this.syncStatusValue,
|
|
41
|
+
isEnabled: () => this.syncEnabled,
|
|
42
|
+
now: async () => {
|
|
43
|
+
if (!this.syncEnabled)
|
|
44
|
+
return null;
|
|
45
|
+
if (!this.syncRunner) {
|
|
46
|
+
throw new AnchorConfigError("Sync is configured but the sync engine has not been attached. Import and call attachSync(db).");
|
|
47
|
+
}
|
|
48
|
+
return this.syncRunner();
|
|
49
|
+
},
|
|
50
|
+
pending: async () => (this.pendingCounter ? this.pendingCounter() : 0),
|
|
51
|
+
};
|
|
52
|
+
this.syncRunner = null;
|
|
53
|
+
this.pendingCounter = null;
|
|
54
|
+
// ---- internals -----------------------------------------------------------
|
|
55
|
+
this.runtimeCache = null;
|
|
56
|
+
if (!config.name || typeof config.name !== "string") {
|
|
57
|
+
throw new AnchorConfigError("AnchorDB requires a `name`, e.g. new AnchorDB({ name: \"my-app\" }).");
|
|
58
|
+
}
|
|
59
|
+
this.config = config;
|
|
60
|
+
this.name = config.name;
|
|
61
|
+
// Validated at construction so a typo fails immediately rather than silently rendering wrong
|
|
62
|
+
// times for the life of the app (§26.10).
|
|
63
|
+
if (config.timezone?.server)
|
|
64
|
+
assertValidTimeZone(config.timezone.server, "timezone.server");
|
|
65
|
+
this.time = new TimeService(config.timezone?.server ? { serverTimeZone: config.timezone.server } : {});
|
|
66
|
+
this.clientIdValue = config.clientId ?? generateClientId();
|
|
67
|
+
this.clockInstance = new HybridLogicalClock({ node: this.clientIdValue, now: () => this.time.nowMs() });
|
|
68
|
+
this.adapterInstance = config.adapter ?? new MemoryAdapter(config.name);
|
|
69
|
+
this.syncStatusValue = config.sync ? "idle" : "disabled";
|
|
70
|
+
if (config.inspector?.enabled)
|
|
71
|
+
this.assertInspectorSafe(config.inspector);
|
|
72
|
+
}
|
|
73
|
+
/** True when a `sync` block was supplied. */
|
|
74
|
+
get syncEnabled() {
|
|
75
|
+
return this.config.sync !== undefined;
|
|
76
|
+
}
|
|
77
|
+
get clientId() {
|
|
78
|
+
return this.clientIdValue;
|
|
79
|
+
}
|
|
80
|
+
get adapter() {
|
|
81
|
+
return this.adapterInstance;
|
|
82
|
+
}
|
|
83
|
+
/** Exposed for the sync engine, which must stamp and advance the same clock the models use. */
|
|
84
|
+
get clock() {
|
|
85
|
+
return this.clockInstance;
|
|
86
|
+
}
|
|
87
|
+
/** Opened lazily on first use, so construction never does I/O. */
|
|
88
|
+
async open() {
|
|
89
|
+
this.openPromise ??= (async () => {
|
|
90
|
+
await this.adapterInstance.open();
|
|
91
|
+
const storedClientId = await this.adapterInstance.getState("anchor:clientId");
|
|
92
|
+
if (storedClientId) {
|
|
93
|
+
// Adopt the persisted identity, and correct the clock with it: the clock was built in the
|
|
94
|
+
// constructor with a freshly generated id, before storage could be consulted.
|
|
95
|
+
this.clientIdValue = storedClientId;
|
|
96
|
+
this.clockInstance.setNode(storedClientId);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
await this.adapterInstance.setState("anchor:clientId", this.clientIdValue);
|
|
100
|
+
}
|
|
101
|
+
// Restoring the clock keeps ordering monotonic across an app restart.
|
|
102
|
+
const storedClock = await this.adapterInstance.getState("anchor:hlc");
|
|
103
|
+
if (storedClock)
|
|
104
|
+
this.clockInstance.restore(storedClock);
|
|
105
|
+
})();
|
|
106
|
+
return this.openPromise;
|
|
107
|
+
}
|
|
108
|
+
async close() {
|
|
109
|
+
if (this.closed)
|
|
110
|
+
return;
|
|
111
|
+
if (this.openPromise) {
|
|
112
|
+
await this.openPromise;
|
|
113
|
+
await this.adapterInstance.setState("anchor:hlc", encodeClock(this.clockInstance));
|
|
114
|
+
await this.adapterInstance.close();
|
|
115
|
+
}
|
|
116
|
+
this.closed = true;
|
|
117
|
+
}
|
|
118
|
+
/** Mirrors `mongoose.model()`. Calling it again with the same name returns the existing model. */
|
|
119
|
+
model(name, schema, options) {
|
|
120
|
+
const existing = this.constructors.get(name);
|
|
121
|
+
if (existing) {
|
|
122
|
+
if (schema && existing.schema !== schema) {
|
|
123
|
+
throw new AnchorConfigError(`Model "${name}" is already registered with a different schema. ` +
|
|
124
|
+
`Call db.model("${name}") without a schema to retrieve it.`);
|
|
125
|
+
}
|
|
126
|
+
return existing;
|
|
127
|
+
}
|
|
128
|
+
if (!schema) {
|
|
129
|
+
throw new AnchorConfigError(`Model "${name}" has not been registered. Pass a schema: db.model("${name}", schema).`);
|
|
130
|
+
}
|
|
131
|
+
const model = new Model(name, schema, this.runtime(), options);
|
|
132
|
+
const ctor = createModelConstructor(model);
|
|
133
|
+
// Queries return Documents unless .lean(); the factory closes the loop without Model
|
|
134
|
+
// importing Document (which would be circular).
|
|
135
|
+
model._setDocumentFactory((doc) => ctor.hydrate(doc));
|
|
136
|
+
this.models.set(name, model);
|
|
137
|
+
this.constructors.set(name, ctor);
|
|
138
|
+
return ctor;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Schema-less access, matching the driver's `db.collection("users")`. Useful for scratch work and
|
|
142
|
+
* for Lens, which must browse collections whose schema it does not have.
|
|
143
|
+
*/
|
|
144
|
+
collection(name) {
|
|
145
|
+
const key = `__collection__${name}`;
|
|
146
|
+
const existing = this.constructors.get(key);
|
|
147
|
+
if (existing)
|
|
148
|
+
return existing;
|
|
149
|
+
const schema = new Schema({}, { strict: false, timestamps: this.config.timestamps ?? true });
|
|
150
|
+
const model = new Model(key, schema, this.runtime(), { collection: name });
|
|
151
|
+
const ctor = createModelConstructor(model);
|
|
152
|
+
model._setDocumentFactory((doc) => ctor.hydrate(doc));
|
|
153
|
+
this.models.set(key, model);
|
|
154
|
+
this.constructors.set(key, ctor);
|
|
155
|
+
return ctor;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The model registered for a storage collection, if any.
|
|
159
|
+
*
|
|
160
|
+
* Interop needs it: storage holds ObjectIds and Dates as strings, so an export has to consult the
|
|
161
|
+
* schema to restore their real types before encoding. Without this an export would emit bare
|
|
162
|
+
* strings and mongoimport would store String instead of ObjectId/Date.
|
|
163
|
+
*/
|
|
164
|
+
modelForCollection(collection) {
|
|
165
|
+
for (const model of this.models.values()) {
|
|
166
|
+
if (model.collectionName === collection)
|
|
167
|
+
return model;
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
modelNames() {
|
|
172
|
+
return [...this.models.keys()].filter((n) => !n.startsWith("__collection__"));
|
|
173
|
+
}
|
|
174
|
+
async listCollections() {
|
|
175
|
+
await this.open();
|
|
176
|
+
return this.adapterInstance.listCollections();
|
|
177
|
+
}
|
|
178
|
+
async stats() {
|
|
179
|
+
await this.open();
|
|
180
|
+
const stats = await this.adapterInstance.stats();
|
|
181
|
+
return { ...stats, name: this.name, syncEnabled: this.syncEnabled };
|
|
182
|
+
}
|
|
183
|
+
/** Deletes all local data. Lens exposes this as an explicit developer action. */
|
|
184
|
+
async destroy() {
|
|
185
|
+
await this.open();
|
|
186
|
+
await this.adapterInstance.destroy();
|
|
187
|
+
}
|
|
188
|
+
// ---- events --------------------------------------------------------------
|
|
189
|
+
on(event, listener) {
|
|
190
|
+
return this.emitter.on(event, listener);
|
|
191
|
+
}
|
|
192
|
+
off(event, listener) {
|
|
193
|
+
this.emitter.off(event, listener);
|
|
194
|
+
}
|
|
195
|
+
once(event, listener) {
|
|
196
|
+
return this.emitter.once(event, listener);
|
|
197
|
+
}
|
|
198
|
+
get events() {
|
|
199
|
+
return this.emitter;
|
|
200
|
+
}
|
|
201
|
+
/** Used by the sync engine to install itself without AnchorDB importing it. */
|
|
202
|
+
_attachSync(hooks) {
|
|
203
|
+
this.mutationRecorder = hooks.recordMutations;
|
|
204
|
+
this.syncRunner = hooks.run;
|
|
205
|
+
this.pendingCounter = hooks.pending;
|
|
206
|
+
hooks.setStatus((status) => {
|
|
207
|
+
this.syncStatusValue = status;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
runtime() {
|
|
211
|
+
this.runtimeCache ??= {
|
|
212
|
+
adapter: this.adapterInstance,
|
|
213
|
+
time: this.time,
|
|
214
|
+
clock: this.clockInstance,
|
|
215
|
+
events: this.emitter,
|
|
216
|
+
get syncEnabled() {
|
|
217
|
+
return false;
|
|
218
|
+
},
|
|
219
|
+
clientId: this.clientIdValue, // replaced below by a live getter
|
|
220
|
+
onMissingRef: this.config.onMissingRef ?? "null",
|
|
221
|
+
ready: () => this.open(),
|
|
222
|
+
getModelByCollection: (collection) => this.modelForCollection(collection),
|
|
223
|
+
getModel: (name) => {
|
|
224
|
+
const model = this.models.get(name);
|
|
225
|
+
if (!model) {
|
|
226
|
+
throw new AnchorConfigError(`Model "${name}" is referenced by a populate() but has not been registered on this database.`);
|
|
227
|
+
}
|
|
228
|
+
return model;
|
|
229
|
+
},
|
|
230
|
+
recordMutations: async (collection, ops) => {
|
|
231
|
+
if (this.mutationRecorder)
|
|
232
|
+
await this.mutationRecorder(collection, ops);
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
// Both must be live getters. `syncEnabled` because the sync engine may attach after models are
|
|
236
|
+
// created; `clientId` because open() may replace it with the persisted identity.
|
|
237
|
+
Object.defineProperty(this.runtimeCache, "syncEnabled", {
|
|
238
|
+
get: () => this.syncEnabled,
|
|
239
|
+
configurable: true,
|
|
240
|
+
});
|
|
241
|
+
Object.defineProperty(this.runtimeCache, "clientId", {
|
|
242
|
+
get: () => this.clientIdValue,
|
|
243
|
+
configurable: true,
|
|
244
|
+
});
|
|
245
|
+
return this.runtimeCache;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* The inspector exposes application data, so enabling it in production requires an explicit,
|
|
249
|
+
* separate acknowledgement — a config typo must never open a database over the network.
|
|
250
|
+
*/
|
|
251
|
+
assertInspectorSafe(inspector) {
|
|
252
|
+
const env = globalThis.process?.env?.NODE_ENV ?? "development";
|
|
253
|
+
if (env === "production" && !inspector.allowInProduction) {
|
|
254
|
+
throw new AnchorConfigError("The Anchor Inspector is enabled while NODE_ENV=production. It exposes your local database to " +
|
|
255
|
+
"Anchor Lens and must not ship in a release build. If this is deliberate (an internal build, " +
|
|
256
|
+
"say), set inspector.allowInProduction: true to acknowledge it.");
|
|
257
|
+
}
|
|
258
|
+
// eslint-disable-next-line no-console
|
|
259
|
+
console.warn(`[anchor] Inspector ENABLED for database "${this.name}". Your local data is reachable by Anchor Lens. ` +
|
|
260
|
+
`Disable it before shipping.`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function encodeClock(clock) {
|
|
264
|
+
const peek = clock.peek();
|
|
265
|
+
return `${String(peek.wall).padStart(15, "0")}-${String(peek.counter).padStart(5, "0")}-${peek.node}`;
|
|
266
|
+
}
|
|
267
|
+
/** Alias matching the brief's original naming. */
|
|
268
|
+
export const LocalDB = AnchorDB;
|
|
269
|
+
//# sourceMappingURL=anchor-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor-db.js","sourceRoot":"","sources":["../../../src/core/anchor-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mongoose-shaped error hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* Principle 1 (zero re-learning) applies to failures as much as to successes: code that already
|
|
5
|
+
* does `if (err.code === 11000)` or reads `err.errors[path].kind` on the backend must work
|
|
6
|
+
* unchanged here. Every class below mirrors the name, message format and enumerable properties
|
|
7
|
+
* Mongoose produces.
|
|
8
|
+
*/
|
|
9
|
+
/** Base class for every error AnchorDB raises. Mirrors Mongoose's `MongooseError`. */
|
|
10
|
+
export declare class AnchorError extends Error {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
/** Configuration rejected at construction time (bad timezone, unknown adapter, ...). */
|
|
15
|
+
export declare class AnchorConfigError extends AnchorError {
|
|
16
|
+
readonly name = "AnchorConfigError";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A single failed validator on one path. Mongoose calls this `ValidatorError` and nests instances
|
|
20
|
+
* inside `ValidationError.errors`.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ValidatorError extends AnchorError {
|
|
23
|
+
readonly name = "ValidatorError";
|
|
24
|
+
readonly path: string;
|
|
25
|
+
readonly value: unknown;
|
|
26
|
+
/** Which validator failed: `required`, `min`, `enum`, `user defined`, ... */
|
|
27
|
+
readonly kind: string;
|
|
28
|
+
readonly properties: Record<string, unknown>;
|
|
29
|
+
constructor(opts: {
|
|
30
|
+
path: string;
|
|
31
|
+
value: unknown;
|
|
32
|
+
kind: string;
|
|
33
|
+
message: string;
|
|
34
|
+
[k: string]: unknown;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Failure converting a value to its declared type. Message format matches Mongoose so that
|
|
39
|
+
* log-scraping and error reporting behave identically.
|
|
40
|
+
*/
|
|
41
|
+
export declare class CastError extends AnchorError {
|
|
42
|
+
readonly name = "CastError";
|
|
43
|
+
readonly stringValue: string;
|
|
44
|
+
readonly kind: string;
|
|
45
|
+
readonly value: unknown;
|
|
46
|
+
readonly path: string;
|
|
47
|
+
readonly valueType: string;
|
|
48
|
+
constructor(kind: string, value: unknown, path: string, reason?: string);
|
|
49
|
+
}
|
|
50
|
+
/** Aggregate of every path that failed validation for one document. */
|
|
51
|
+
export declare class ValidationError extends AnchorError {
|
|
52
|
+
readonly name = "ValidationError";
|
|
53
|
+
readonly errors: Record<string, ValidatorError | CastError>;
|
|
54
|
+
constructor(modelName?: string);
|
|
55
|
+
readonly modelName: string | undefined;
|
|
56
|
+
addError(path: string, error: ValidatorError | CastError): void;
|
|
57
|
+
get isEmpty(): boolean;
|
|
58
|
+
private buildMessage;
|
|
59
|
+
}
|
|
60
|
+
/** Raised by `orFail()` and by Lens edits targeting a document that vanished. */
|
|
61
|
+
export declare class DocumentNotFoundError extends AnchorError {
|
|
62
|
+
readonly name = "DocumentNotFoundError";
|
|
63
|
+
readonly filter: unknown;
|
|
64
|
+
constructor(filter: unknown, modelName?: string);
|
|
65
|
+
}
|
|
66
|
+
/** Writing a path not present in the schema while `strict: "throw"` is set. */
|
|
67
|
+
export declare class StrictModeError extends AnchorError {
|
|
68
|
+
readonly name = "StrictModeError";
|
|
69
|
+
readonly path: string;
|
|
70
|
+
constructor(path: string);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Server-style write error. A unique index violation surfaces as one of these with `code: 11000`,
|
|
74
|
+
* exactly like the MongoDB driver, so `err.code === 11000` branches port over untouched.
|
|
75
|
+
*/
|
|
76
|
+
export declare class MongoServerError extends AnchorError {
|
|
77
|
+
readonly name = "MongoServerError";
|
|
78
|
+
readonly code: number;
|
|
79
|
+
readonly keyPattern: Record<string, 1 | -1> | undefined;
|
|
80
|
+
readonly keyValue: Record<string, unknown> | undefined;
|
|
81
|
+
readonly index: string | undefined;
|
|
82
|
+
constructor(opts: {
|
|
83
|
+
message: string;
|
|
84
|
+
code: number;
|
|
85
|
+
keyPattern?: Record<string, 1 | -1>;
|
|
86
|
+
keyValue?: Record<string, unknown>;
|
|
87
|
+
index?: string;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export declare const DUPLICATE_KEY_CODE = 11000;
|
|
91
|
+
/**
|
|
92
|
+
* Build the duplicate-key error MongoDB produces. The message is reproduced literally — including
|
|
93
|
+
* the `E11000 duplicate key error collection:` prefix — because real code greps for it.
|
|
94
|
+
*/
|
|
95
|
+
export declare function duplicateKeyError(opts: {
|
|
96
|
+
dbName: string;
|
|
97
|
+
collection: string;
|
|
98
|
+
index: string;
|
|
99
|
+
keyPattern: Record<string, 1 | -1>;
|
|
100
|
+
keyValue: Record<string, unknown>;
|
|
101
|
+
}): MongoServerError;
|
|
102
|
+
/** Reported by `insertMany({ ordered: false })` after every insert has been attempted. */
|
|
103
|
+
export declare class BulkWriteError extends AnchorError {
|
|
104
|
+
readonly name = "MongoBulkWriteError";
|
|
105
|
+
readonly code = 11000;
|
|
106
|
+
readonly writeErrors: Array<{
|
|
107
|
+
index: number;
|
|
108
|
+
code: number;
|
|
109
|
+
errmsg: string;
|
|
110
|
+
err: Error;
|
|
111
|
+
}>;
|
|
112
|
+
readonly insertedCount: number;
|
|
113
|
+
readonly insertedIds: Record<number, unknown>;
|
|
114
|
+
constructor(opts: {
|
|
115
|
+
writeErrors: Array<{
|
|
116
|
+
index: number;
|
|
117
|
+
code: number;
|
|
118
|
+
errmsg: string;
|
|
119
|
+
err: Error;
|
|
120
|
+
}>;
|
|
121
|
+
insertedCount: number;
|
|
122
|
+
insertedIds: Record<number, unknown>;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mongoose-shaped error hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* Principle 1 (zero re-learning) applies to failures as much as to successes: code that already
|
|
5
|
+
* does `if (err.code === 11000)` or reads `err.errors[path].kind` on the backend must work
|
|
6
|
+
* unchanged here. Every class below mirrors the name, message format and enumerable properties
|
|
7
|
+
* Mongoose produces.
|
|
8
|
+
*/
|
|
9
|
+
/** Base class for every error AnchorDB raises. Mirrors Mongoose's `MongooseError`. */
|
|
10
|
+
export class AnchorError extends Error {
|
|
11
|
+
constructor(message) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "AnchorError";
|
|
14
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Configuration rejected at construction time (bad timezone, unknown adapter, ...). */
|
|
18
|
+
export class AnchorConfigError extends AnchorError {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
|
+
this.name = "AnchorConfigError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A single failed validator on one path. Mongoose calls this `ValidatorError` and nests instances
|
|
26
|
+
* inside `ValidationError.errors`.
|
|
27
|
+
*/
|
|
28
|
+
export class ValidatorError extends AnchorError {
|
|
29
|
+
constructor(opts) {
|
|
30
|
+
super(opts.message);
|
|
31
|
+
this.name = "ValidatorError";
|
|
32
|
+
this.path = opts.path;
|
|
33
|
+
this.value = opts.value;
|
|
34
|
+
this.kind = opts.kind;
|
|
35
|
+
this.properties = { ...opts };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Failure converting a value to its declared type. Message format matches Mongoose so that
|
|
40
|
+
* log-scraping and error reporting behave identically.
|
|
41
|
+
*/
|
|
42
|
+
export class CastError extends AnchorError {
|
|
43
|
+
constructor(kind, value, path, reason) {
|
|
44
|
+
const stringValue = stringifyValue(value);
|
|
45
|
+
super(`Cast to ${kind} failed for value ${stringValue} (type ${typeOf(value)}) at path "${path}"` +
|
|
46
|
+
(reason ? `: ${reason}` : ""));
|
|
47
|
+
this.name = "CastError";
|
|
48
|
+
this.kind = kind;
|
|
49
|
+
this.value = value;
|
|
50
|
+
this.path = path;
|
|
51
|
+
this.stringValue = stringValue;
|
|
52
|
+
this.valueType = typeOf(value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Aggregate of every path that failed validation for one document. */
|
|
56
|
+
export class ValidationError extends AnchorError {
|
|
57
|
+
constructor(modelName) {
|
|
58
|
+
super(modelName ? `${modelName} validation failed` : "Validation failed");
|
|
59
|
+
this.name = "ValidationError";
|
|
60
|
+
this.errors = {};
|
|
61
|
+
this.modelName = modelName;
|
|
62
|
+
}
|
|
63
|
+
addError(path, error) {
|
|
64
|
+
this.errors[path] = error;
|
|
65
|
+
this.message = this.buildMessage();
|
|
66
|
+
}
|
|
67
|
+
get isEmpty() {
|
|
68
|
+
return Object.keys(this.errors).length === 0;
|
|
69
|
+
}
|
|
70
|
+
buildMessage() {
|
|
71
|
+
const prefix = this.modelName ? `${this.modelName} validation failed` : "Validation failed";
|
|
72
|
+
const parts = Object.entries(this.errors).map(([path, err]) => `${path}: ${err.message}`);
|
|
73
|
+
return `${prefix}: ${parts.join(", ")}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Raised by `orFail()` and by Lens edits targeting a document that vanished. */
|
|
77
|
+
export class DocumentNotFoundError extends AnchorError {
|
|
78
|
+
constructor(filter, modelName) {
|
|
79
|
+
super(`No document found for query ${JSON.stringify(filter)}` + (modelName ? ` on model "${modelName}"` : ""));
|
|
80
|
+
this.name = "DocumentNotFoundError";
|
|
81
|
+
this.filter = filter;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Writing a path not present in the schema while `strict: "throw"` is set. */
|
|
85
|
+
export class StrictModeError extends AnchorError {
|
|
86
|
+
constructor(path) {
|
|
87
|
+
super(`Field \`${path}\` is not in schema and strict mode is set to throw.`);
|
|
88
|
+
this.name = "StrictModeError";
|
|
89
|
+
this.path = path;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Server-style write error. A unique index violation surfaces as one of these with `code: 11000`,
|
|
94
|
+
* exactly like the MongoDB driver, so `err.code === 11000` branches port over untouched.
|
|
95
|
+
*/
|
|
96
|
+
export class MongoServerError extends AnchorError {
|
|
97
|
+
constructor(opts) {
|
|
98
|
+
super(opts.message);
|
|
99
|
+
this.name = "MongoServerError";
|
|
100
|
+
this.code = opts.code;
|
|
101
|
+
this.keyPattern = opts.keyPattern;
|
|
102
|
+
this.keyValue = opts.keyValue;
|
|
103
|
+
this.index = opts.index;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export const DUPLICATE_KEY_CODE = 11000;
|
|
107
|
+
/**
|
|
108
|
+
* Build the duplicate-key error MongoDB produces. The message is reproduced literally — including
|
|
109
|
+
* the `E11000 duplicate key error collection:` prefix — because real code greps for it.
|
|
110
|
+
*/
|
|
111
|
+
export function duplicateKeyError(opts) {
|
|
112
|
+
const keyStr = Object.entries(opts.keyValue)
|
|
113
|
+
.map(([k, v]) => `${k}: ${stringifyValue(v)}`)
|
|
114
|
+
.join(", ");
|
|
115
|
+
return new MongoServerError({
|
|
116
|
+
message: `E11000 duplicate key error collection: ${opts.dbName}.${opts.collection} ` +
|
|
117
|
+
`index: ${opts.index} dup key: { ${keyStr} }`,
|
|
118
|
+
code: DUPLICATE_KEY_CODE,
|
|
119
|
+
keyPattern: opts.keyPattern,
|
|
120
|
+
keyValue: opts.keyValue,
|
|
121
|
+
index: opts.index,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/** Reported by `insertMany({ ordered: false })` after every insert has been attempted. */
|
|
125
|
+
export class BulkWriteError extends AnchorError {
|
|
126
|
+
constructor(opts) {
|
|
127
|
+
super(`Bulk write failed with ${opts.writeErrors.length} error(s)`);
|
|
128
|
+
this.name = "MongoBulkWriteError";
|
|
129
|
+
this.code = DUPLICATE_KEY_CODE;
|
|
130
|
+
this.writeErrors = opts.writeErrors;
|
|
131
|
+
this.insertedCount = opts.insertedCount;
|
|
132
|
+
this.insertedIds = opts.insertedIds;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function typeOf(value) {
|
|
136
|
+
if (value === null)
|
|
137
|
+
return "null";
|
|
138
|
+
if (Array.isArray(value))
|
|
139
|
+
return "Array";
|
|
140
|
+
return typeof value;
|
|
141
|
+
}
|
|
142
|
+
function stringifyValue(value) {
|
|
143
|
+
if (typeof value === "string")
|
|
144
|
+
return `"${value}"`;
|
|
145
|
+
if (value === undefined)
|
|
146
|
+
return "undefined";
|
|
147
|
+
if (value === null)
|
|
148
|
+
return "null";
|
|
149
|
+
if (value instanceof Date)
|
|
150
|
+
return `"${value.toISOString()}"`;
|
|
151
|
+
if (typeof value === "object") {
|
|
152
|
+
try {
|
|
153
|
+
return JSON.stringify(value);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return String(value);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return String(value);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
2
|
+
/** Returns null rather than throwing, so callers can produce their own typed error. */
|
|
3
|
+
export declare function hexToBytes(hex: string, expectedLength?: number): Uint8Array | null;
|
|
4
|
+
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../src/core/hex.ts"],"names":[],"mappings":"AASA,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAOpD;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAYlF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const HEX_CHARS = "0123456789abcdef";
|
|
2
|
+
const HEX_LOOKUP = (() => {
|
|
3
|
+
const table = new Array(256).fill(-1);
|
|
4
|
+
for (let i = 0; i < 10; i++)
|
|
5
|
+
table[48 + i] = i; // '0'-'9'
|
|
6
|
+
for (let i = 0; i < 6; i++)
|
|
7
|
+
table[97 + i] = 10 + i; // 'a'-'f'
|
|
8
|
+
for (let i = 0; i < 6; i++)
|
|
9
|
+
table[65 + i] = 10 + i; // 'A'-'F'
|
|
10
|
+
return table;
|
|
11
|
+
})();
|
|
12
|
+
export function bytesToHex(bytes) {
|
|
13
|
+
let out = "";
|
|
14
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
15
|
+
const b = bytes[i];
|
|
16
|
+
out += HEX_CHARS[b >> 4] + HEX_CHARS[b & 0x0f];
|
|
17
|
+
}
|
|
18
|
+
return out;
|
|
19
|
+
}
|
|
20
|
+
/** Returns null rather than throwing, so callers can produce their own typed error. */
|
|
21
|
+
export function hexToBytes(hex, expectedLength) {
|
|
22
|
+
if (hex.length % 2 !== 0)
|
|
23
|
+
return null;
|
|
24
|
+
const len = hex.length / 2;
|
|
25
|
+
if (expectedLength !== undefined && len !== expectedLength)
|
|
26
|
+
return null;
|
|
27
|
+
const out = new Uint8Array(len);
|
|
28
|
+
for (let i = 0; i < len; i++) {
|
|
29
|
+
const hi = HEX_LOOKUP[hex.charCodeAt(i * 2)] ?? -1;
|
|
30
|
+
const lo = HEX_LOOKUP[hex.charCodeAt(i * 2 + 1)] ?? -1;
|
|
31
|
+
if (hi < 0 || lo < 0)
|
|
32
|
+
return null;
|
|
33
|
+
out[i] = (hi << 4) | lo;
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=hex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../src/core/hex.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC;AACrC,MAAM,UAAU,GAAa,CAAC,GAAG,EAAE;IACjC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;IAC9D,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACpB,GAAG,IAAI,SAAS,CAAC,CAAC,IAAI,CAAC,CAAE,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAE,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,cAAuB;IAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,IAAI,cAAc,KAAK,SAAS,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|