@chipmobilesdk/rn-local-db 0.3.0 → 0.5.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 +160 -1
- package/README.md +99 -19
- package/lib/commonjs/adapter/budgets.js +79 -0
- package/lib/commonjs/adapter/budgets.js.map +1 -0
- package/lib/commonjs/adapter/collection.js +236 -0
- package/lib/commonjs/adapter/collection.js.map +1 -0
- package/lib/commonjs/adapter/deletion.js +291 -0
- package/lib/commonjs/adapter/deletion.js.map +1 -0
- package/lib/commonjs/adapter/handle.js +259 -0
- package/lib/commonjs/adapter/handle.js.map +1 -0
- package/lib/commonjs/adapter/index.js +67 -0
- package/lib/commonjs/adapter/index.js.map +1 -0
- package/lib/commonjs/adapter/lifecycle.js +176 -0
- package/lib/commonjs/adapter/lifecycle.js.map +1 -0
- package/lib/commonjs/adapter/schema-sync.js +124 -0
- package/lib/commonjs/adapter/schema-sync.js.map +1 -0
- package/lib/commonjs/adapter/transaction.js +58 -0
- package/lib/commonjs/adapter/transaction.js.map +1 -0
- package/lib/commonjs/artifacts/availability.js +90 -0
- package/lib/commonjs/artifacts/availability.js.map +1 -0
- package/lib/commonjs/artifacts/cascade.js +80 -0
- package/lib/commonjs/artifacts/cascade.js.map +1 -0
- package/lib/commonjs/artifacts/paths.js +31 -0
- package/lib/commonjs/artifacts/paths.js.map +1 -0
- package/lib/commonjs/artifacts/reconcile.js +55 -0
- package/lib/commonjs/artifacts/reconcile.js.map +1 -0
- package/lib/commonjs/artifacts/store.js +300 -0
- package/lib/commonjs/artifacts/store.js.map +1 -0
- package/lib/commonjs/contract/adapter.js +6 -0
- package/lib/commonjs/contract/adapter.js.map +1 -0
- package/lib/commonjs/contract/attachment.js +2 -0
- package/lib/commonjs/contract/attachment.js.map +1 -0
- package/lib/commonjs/contract/backup.js +2 -0
- package/lib/commonjs/contract/backup.js.map +1 -0
- package/lib/commonjs/contract/config.js +31 -0
- package/lib/commonjs/contract/config.js.map +1 -0
- package/lib/commonjs/contract/encryption.js +6 -0
- package/lib/commonjs/contract/encryption.js.map +1 -0
- package/lib/commonjs/contract/errors.js +64 -0
- package/lib/commonjs/contract/errors.js.map +1 -0
- package/lib/commonjs/contract/migration.js +6 -0
- package/lib/commonjs/contract/migration.js.map +1 -0
- package/lib/commonjs/contract/query.js +6 -0
- package/lib/commonjs/contract/query.js.map +1 -0
- package/lib/commonjs/contract/record.js +6 -0
- package/lib/commonjs/contract/record.js.map +1 -0
- package/lib/commonjs/contract/schema.js +2 -0
- package/lib/commonjs/contract/schema.js.map +1 -0
- package/lib/commonjs/contract/scope.js +2 -0
- package/lib/commonjs/contract/scope.js.map +1 -0
- package/lib/commonjs/contract/transaction.js +6 -0
- package/lib/commonjs/contract/transaction.js.map +1 -0
- package/lib/commonjs/crypto/chunked-cipher.js +147 -0
- package/lib/commonjs/crypto/chunked-cipher.js.map +1 -0
- package/lib/commonjs/crypto/derive.js +61 -0
- package/lib/commonjs/crypto/derive.js.map +1 -0
- package/lib/commonjs/crypto/key-provider.js +70 -0
- package/lib/commonjs/crypto/key-provider.js.map +1 -0
- package/lib/commonjs/crypto/provider.js +54 -0
- package/lib/commonjs/crypto/provider.js.map +1 -0
- package/lib/commonjs/diagnostics/dev-log.js +127 -0
- package/lib/commonjs/diagnostics/dev-log.js.map +1 -0
- package/lib/commonjs/diagnostics/errors.js +57 -0
- package/lib/commonjs/diagnostics/errors.js.map +1 -0
- package/lib/commonjs/diagnostics/faults.js +54 -0
- package/lib/commonjs/diagnostics/faults.js.map +1 -0
- package/lib/commonjs/diagnostics/map-native.js +98 -0
- package/lib/commonjs/diagnostics/map-native.js.map +1 -0
- package/lib/commonjs/diagnostics/redact.js +110 -0
- package/lib/commonjs/diagnostics/redact.js.map +1 -0
- package/lib/commonjs/index.js +70 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/migration/executor.js +136 -0
- package/lib/commonjs/migration/executor.js.map +1 -0
- package/lib/commonjs/migration/ledger.js +64 -0
- package/lib/commonjs/migration/ledger.js.map +1 -0
- package/lib/commonjs/migration/validate-chain.js +76 -0
- package/lib/commonjs/migration/validate-chain.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/platform/backup-android-verify.js +76 -0
- package/lib/commonjs/platform/backup-android-verify.js.map +1 -0
- package/lib/commonjs/platform/backup-ios.js +50 -0
- package/lib/commonjs/platform/backup-ios.js.map +1 -0
- package/lib/commonjs/platform/bytes.js +158 -0
- package/lib/commonjs/platform/bytes.js.map +1 -0
- package/lib/commonjs/platform/fs.js +59 -0
- package/lib/commonjs/platform/fs.js.map +1 -0
- package/lib/commonjs/platform/location.js +129 -0
- package/lib/commonjs/platform/location.js.map +1 -0
- package/lib/commonjs/query/budgets.js +95 -0
- package/lib/commonjs/query/budgets.js.map +1 -0
- package/lib/commonjs/query/compare.js +97 -0
- package/lib/commonjs/query/compare.js.map +1 -0
- package/lib/commonjs/query/cursor.js +97 -0
- package/lib/commonjs/query/cursor.js.map +1 -0
- package/lib/commonjs/query/filter.js +82 -0
- package/lib/commonjs/query/filter.js.map +1 -0
- package/lib/commonjs/query/paginate.js +48 -0
- package/lib/commonjs/query/paginate.js.map +1 -0
- package/lib/commonjs/query/sort.js +61 -0
- package/lib/commonjs/query/sort.js.map +1 -0
- package/lib/commonjs/query/validate.js +180 -0
- package/lib/commonjs/query/validate.js.map +1 -0
- package/lib/commonjs/schema/declare.js +47 -0
- package/lib/commonjs/schema/declare.js.map +1 -0
- package/lib/commonjs/schema/validate-config.js +115 -0
- package/lib/commonjs/schema/validate-config.js.map +1 -0
- package/lib/commonjs/scope/hash.js +107 -0
- package/lib/commonjs/scope/hash.js.map +1 -0
- package/lib/commonjs/scope/normalize.js +73 -0
- package/lib/commonjs/scope/normalize.js.map +1 -0
- package/lib/commonjs/scope/validate.js +81 -0
- package/lib/commonjs/scope/validate.js.map +1 -0
- package/lib/commonjs/sqlite/adapter.js +31 -0
- package/lib/commonjs/sqlite/adapter.js.map +1 -0
- package/lib/commonjs/sqlite/batch.js +218 -0
- package/lib/commonjs/sqlite/batch.js.map +1 -0
- package/lib/commonjs/sqlite/catalog.js +81 -0
- package/lib/commonjs/sqlite/catalog.js.map +1 -0
- package/lib/commonjs/sqlite/connection.js +210 -0
- package/lib/commonjs/sqlite/connection.js.map +1 -0
- package/lib/commonjs/sqlite/index-coverage.js +42 -0
- package/lib/commonjs/sqlite/index-coverage.js.map +1 -0
- package/lib/commonjs/sqlite/native.js +54 -0
- package/lib/commonjs/sqlite/native.js.map +1 -0
- package/lib/commonjs/sqlite/row-codec.js +192 -0
- package/lib/commonjs/sqlite/row-codec.js.map +1 -0
- package/lib/commonjs/sqlite/sql-builder.js +253 -0
- package/lib/commonjs/sqlite/sql-builder.js.map +1 -0
- package/lib/commonjs/sqlite/statements.js +54 -0
- package/lib/commonjs/sqlite/statements.js.map +1 -0
- package/lib/commonjs/sqlite/transaction-queue.js +79 -0
- package/lib/commonjs/sqlite/transaction-queue.js.map +1 -0
- package/lib/commonjs/sqlite/transactions.js +33 -0
- package/lib/commonjs/sqlite/transactions.js.map +1 -0
- package/lib/commonjs/sqlite/values.js +31 -0
- package/lib/commonjs/sqlite/values.js.map +1 -0
- package/lib/commonjs/testing/conformance/attachments.js +180 -0
- package/lib/commonjs/testing/conformance/attachments.js.map +1 -0
- package/lib/commonjs/testing/conformance/encryption.js +187 -0
- package/lib/commonjs/testing/conformance/encryption.js.map +1 -0
- package/lib/commonjs/testing/conformance/index.js +103 -0
- package/lib/commonjs/testing/conformance/index.js.map +1 -0
- package/lib/commonjs/testing/conformance/lifecycle.js +134 -0
- package/lib/commonjs/testing/conformance/lifecycle.js.map +1 -0
- package/lib/commonjs/testing/conformance/migrations.js +167 -0
- package/lib/commonjs/testing/conformance/migrations.js.map +1 -0
- package/lib/commonjs/testing/conformance/queries.js +278 -0
- package/lib/commonjs/testing/conformance/queries.js.map +1 -0
- package/lib/commonjs/testing/conformance/records.js +224 -0
- package/lib/commonjs/testing/conformance/records.js.map +1 -0
- package/lib/commonjs/testing/conformance/scopes.js +107 -0
- package/lib/commonjs/testing/conformance/scopes.js.map +1 -0
- package/lib/commonjs/testing/conformance/transactions.js +228 -0
- package/lib/commonjs/testing/conformance/transactions.js.map +1 -0
- package/lib/commonjs/testing/faults.js +38 -0
- package/lib/commonjs/testing/faults.js.map +1 -0
- package/lib/commonjs/testing/index.js +59 -0
- package/lib/commonjs/testing/index.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/attachments.js +145 -0
- package/lib/commonjs/testing/memory-adapter/attachments.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/collection.js +224 -0
- package/lib/commonjs/testing/memory-adapter/collection.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/index.js +366 -0
- package/lib/commonjs/testing/memory-adapter/index.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/migrations.js +126 -0
- package/lib/commonjs/testing/memory-adapter/migrations.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/reset.js +49 -0
- package/lib/commonjs/testing/memory-adapter/reset.js.map +1 -0
- package/lib/commonjs/testing/memory-adapter/store.js +107 -0
- package/lib/commonjs/testing/memory-adapter/store.js.map +1 -0
- package/lib/module/adapter/budgets.js +51 -0
- package/lib/module/adapter/budgets.js.map +1 -0
- package/lib/module/adapter/collection.js +232 -0
- package/lib/module/adapter/collection.js.map +1 -0
- package/lib/module/adapter/deletion.js +280 -0
- package/lib/module/adapter/deletion.js.map +1 -0
- package/lib/module/adapter/handle.js +254 -0
- package/lib/module/adapter/handle.js.map +1 -0
- package/lib/module/adapter/index.js +59 -0
- package/lib/module/adapter/index.js.map +1 -0
- package/lib/module/adapter/lifecycle.js +172 -0
- package/lib/module/adapter/lifecycle.js.map +1 -0
- package/lib/module/adapter/schema-sync.js +121 -0
- package/lib/module/adapter/schema-sync.js.map +1 -0
- package/lib/module/adapter/transaction.js +54 -0
- package/lib/module/adapter/transaction.js.map +1 -0
- package/lib/module/artifacts/availability.js +86 -0
- package/lib/module/artifacts/availability.js.map +1 -0
- package/lib/module/artifacts/cascade.js +75 -0
- package/lib/module/artifacts/cascade.js.map +1 -0
- package/lib/module/artifacts/paths.js +26 -0
- package/lib/module/artifacts/paths.js.map +1 -0
- package/lib/module/artifacts/reconcile.js +51 -0
- package/lib/module/artifacts/reconcile.js.map +1 -0
- package/lib/module/artifacts/store.js +289 -0
- package/lib/module/artifacts/store.js.map +1 -0
- package/lib/module/contract/adapter.js +4 -0
- package/lib/module/contract/adapter.js.map +1 -0
- package/lib/module/contract/attachment.js +2 -0
- package/lib/module/contract/attachment.js.map +1 -0
- package/lib/module/contract/backup.js +2 -0
- package/lib/module/contract/backup.js.map +1 -0
- package/lib/module/contract/config.js +27 -0
- package/lib/module/contract/config.js.map +1 -0
- package/lib/module/contract/encryption.js +4 -0
- package/lib/module/contract/encryption.js.map +1 -0
- package/lib/module/contract/errors.js +60 -0
- package/lib/module/contract/errors.js.map +1 -0
- package/lib/module/contract/migration.js +4 -0
- package/lib/module/contract/migration.js.map +1 -0
- package/lib/module/contract/query.js +4 -0
- package/lib/module/contract/query.js.map +1 -0
- package/lib/module/contract/record.js +4 -0
- package/lib/module/contract/record.js.map +1 -0
- package/lib/module/contract/schema.js +2 -0
- package/lib/module/contract/schema.js.map +1 -0
- package/lib/module/contract/scope.js +2 -0
- package/lib/module/contract/scope.js.map +1 -0
- package/lib/module/contract/transaction.js +4 -0
- package/lib/module/contract/transaction.js.map +1 -0
- package/lib/module/crypto/chunked-cipher.js +134 -0
- package/lib/module/crypto/chunked-cipher.js.map +1 -0
- package/lib/module/crypto/derive.js +56 -0
- package/lib/module/crypto/derive.js.map +1 -0
- package/lib/module/crypto/key-provider.js +67 -0
- package/lib/module/crypto/key-provider.js.map +1 -0
- package/lib/module/crypto/provider.js +49 -0
- package/lib/module/crypto/provider.js.map +1 -0
- package/lib/module/diagnostics/dev-log.js +120 -0
- package/lib/module/diagnostics/dev-log.js.map +1 -0
- package/lib/module/diagnostics/errors.js +44 -0
- package/lib/module/diagnostics/errors.js.map +1 -0
- package/lib/module/diagnostics/faults.js +47 -0
- package/lib/module/diagnostics/faults.js.map +1 -0
- package/lib/module/diagnostics/map-native.js +93 -0
- package/lib/module/diagnostics/map-native.js.map +1 -0
- package/lib/module/diagnostics/redact.js +102 -0
- package/lib/module/diagnostics/redact.js.map +1 -0
- package/lib/module/index.js +28 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/migration/executor.js +132 -0
- package/lib/module/migration/executor.js.map +1 -0
- package/lib/module/migration/ledger.js +57 -0
- package/lib/module/migration/ledger.js.map +1 -0
- package/lib/module/migration/validate-chain.js +70 -0
- package/lib/module/migration/validate-chain.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/platform/backup-android-verify.js +69 -0
- package/lib/module/platform/backup-android-verify.js.map +1 -0
- package/lib/module/platform/backup-ios.js +44 -0
- package/lib/module/platform/backup-ios.js.map +1 -0
- package/lib/module/platform/bytes.js +148 -0
- package/lib/module/platform/bytes.js.map +1 -0
- package/lib/module/platform/fs.js +54 -0
- package/lib/module/platform/fs.js.map +1 -0
- package/lib/module/platform/location.js +120 -0
- package/lib/module/platform/location.js.map +1 -0
- package/lib/module/query/budgets.js +88 -0
- package/lib/module/query/budgets.js.map +1 -0
- package/lib/module/query/compare.js +90 -0
- package/lib/module/query/compare.js.map +1 -0
- package/lib/module/query/cursor.js +91 -0
- package/lib/module/query/cursor.js.map +1 -0
- package/lib/module/query/filter.js +78 -0
- package/lib/module/query/filter.js.map +1 -0
- package/lib/module/query/paginate.js +40 -0
- package/lib/module/query/paginate.js.map +1 -0
- package/lib/module/query/sort.js +53 -0
- package/lib/module/query/sort.js.map +1 -0
- package/lib/module/query/validate.js +173 -0
- package/lib/module/query/validate.js.map +1 -0
- package/lib/module/schema/declare.js +37 -0
- package/lib/module/schema/declare.js.map +1 -0
- package/lib/module/schema/validate-config.js +111 -0
- package/lib/module/schema/validate-config.js.map +1 -0
- package/lib/module/scope/hash.js +102 -0
- package/lib/module/scope/hash.js.map +1 -0
- package/lib/module/scope/normalize.js +67 -0
- package/lib/module/scope/normalize.js.map +1 -0
- package/lib/module/scope/validate.js +76 -0
- package/lib/module/scope/validate.js.map +1 -0
- package/lib/module/sqlite/adapter.js +27 -0
- package/lib/module/sqlite/adapter.js.map +1 -0
- package/lib/module/sqlite/batch.js +214 -0
- package/lib/module/sqlite/batch.js.map +1 -0
- package/lib/module/sqlite/catalog.js +72 -0
- package/lib/module/sqlite/catalog.js.map +1 -0
- package/lib/module/sqlite/connection.js +206 -0
- package/lib/module/sqlite/connection.js.map +1 -0
- package/lib/module/sqlite/index-coverage.js +38 -0
- package/lib/module/sqlite/index-coverage.js.map +1 -0
- package/lib/module/sqlite/native.js +48 -0
- package/lib/module/sqlite/native.js.map +1 -0
- package/lib/module/sqlite/row-codec.js +176 -0
- package/lib/module/sqlite/row-codec.js.map +1 -0
- package/lib/module/sqlite/sql-builder.js +247 -0
- package/lib/module/sqlite/sql-builder.js.map +1 -0
- package/lib/module/sqlite/statements.js +49 -0
- package/lib/module/sqlite/statements.js.map +1 -0
- package/lib/module/sqlite/transaction-queue.js +75 -0
- package/lib/module/sqlite/transaction-queue.js.map +1 -0
- package/lib/module/sqlite/transactions.js +29 -0
- package/lib/module/sqlite/transactions.js.map +1 -0
- package/lib/module/sqlite/values.js +24 -0
- package/lib/module/sqlite/values.js.map +1 -0
- package/lib/module/testing/conformance/attachments.js +176 -0
- package/lib/module/testing/conformance/attachments.js.map +1 -0
- package/lib/module/testing/conformance/encryption.js +183 -0
- package/lib/module/testing/conformance/encryption.js.map +1 -0
- package/lib/module/testing/conformance/index.js +97 -0
- package/lib/module/testing/conformance/index.js.map +1 -0
- package/lib/module/testing/conformance/lifecycle.js +130 -0
- package/lib/module/testing/conformance/lifecycle.js.map +1 -0
- package/lib/module/testing/conformance/migrations.js +163 -0
- package/lib/module/testing/conformance/migrations.js.map +1 -0
- package/lib/module/testing/conformance/queries.js +274 -0
- package/lib/module/testing/conformance/queries.js.map +1 -0
- package/lib/module/testing/conformance/records.js +220 -0
- package/lib/module/testing/conformance/records.js.map +1 -0
- package/lib/module/testing/conformance/scopes.js +103 -0
- package/lib/module/testing/conformance/scopes.js.map +1 -0
- package/lib/module/testing/conformance/transactions.js +224 -0
- package/lib/module/testing/conformance/transactions.js.map +1 -0
- package/lib/module/testing/faults.js +16 -0
- package/lib/module/testing/faults.js.map +1 -0
- package/lib/module/testing/index.js +16 -0
- package/lib/module/testing/index.js.map +1 -0
- package/lib/module/testing/memory-adapter/attachments.js +142 -0
- package/lib/module/testing/memory-adapter/attachments.js.map +1 -0
- package/lib/module/testing/memory-adapter/collection.js +220 -0
- package/lib/module/testing/memory-adapter/collection.js.map +1 -0
- package/lib/module/testing/memory-adapter/index.js +351 -0
- package/lib/module/testing/memory-adapter/index.js.map +1 -0
- package/lib/module/testing/memory-adapter/migrations.js +122 -0
- package/lib/module/testing/memory-adapter/migrations.js.map +1 -0
- package/lib/module/testing/memory-adapter/reset.js +44 -0
- package/lib/module/testing/memory-adapter/reset.js.map +1 -0
- package/lib/module/testing/memory-adapter/store.js +94 -0
- package/lib/module/testing/memory-adapter/store.js.map +1 -0
- package/lib/typescript/commonjs/adapter/budgets.d.ts +19 -0
- package/lib/typescript/commonjs/adapter/budgets.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/collection.d.ts +25 -0
- package/lib/typescript/commonjs/adapter/collection.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/deletion.d.ts +48 -0
- package/lib/typescript/commonjs/adapter/deletion.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/handle.d.ts +30 -0
- package/lib/typescript/commonjs/adapter/handle.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/index.d.ts +30 -0
- package/lib/typescript/commonjs/adapter/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/lifecycle.d.ts +25 -0
- package/lib/typescript/commonjs/adapter/lifecycle.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/schema-sync.d.ts +19 -0
- package/lib/typescript/commonjs/adapter/schema-sync.d.ts.map +1 -0
- package/lib/typescript/commonjs/adapter/transaction.d.ts +32 -0
- package/lib/typescript/commonjs/adapter/transaction.d.ts.map +1 -0
- package/lib/typescript/commonjs/artifacts/availability.d.ts +19 -0
- package/lib/typescript/commonjs/artifacts/availability.d.ts.map +1 -0
- package/lib/typescript/commonjs/artifacts/cascade.d.ts +26 -0
- package/lib/typescript/commonjs/artifacts/cascade.d.ts.map +1 -0
- package/lib/typescript/commonjs/artifacts/paths.d.ts +16 -0
- package/lib/typescript/commonjs/artifacts/paths.d.ts.map +1 -0
- package/lib/typescript/commonjs/artifacts/reconcile.d.ts +23 -0
- package/lib/typescript/commonjs/artifacts/reconcile.d.ts.map +1 -0
- package/lib/typescript/commonjs/artifacts/store.d.ts +45 -0
- package/lib/typescript/commonjs/artifacts/store.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/adapter.d.ts +55 -0
- package/lib/typescript/commonjs/contract/adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/attachment.d.ts +84 -0
- package/lib/typescript/commonjs/contract/attachment.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/backup.d.ts +26 -0
- package/lib/typescript/commonjs/contract/backup.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/config.d.ts +50 -0
- package/lib/typescript/commonjs/contract/config.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/encryption.d.ts +31 -0
- package/lib/typescript/commonjs/contract/encryption.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/errors.d.ts +50 -0
- package/lib/typescript/commonjs/contract/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/migration.d.ts +37 -0
- package/lib/typescript/commonjs/contract/migration.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/query.d.ts +79 -0
- package/lib/typescript/commonjs/contract/query.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/record.d.ts +43 -0
- package/lib/typescript/commonjs/contract/record.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/schema.d.ts +33 -0
- package/lib/typescript/commonjs/contract/schema.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/scope.d.ts +33 -0
- package/lib/typescript/commonjs/contract/scope.d.ts.map +1 -0
- package/lib/typescript/commonjs/contract/transaction.d.ts +66 -0
- package/lib/typescript/commonjs/contract/transaction.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/chunked-cipher.d.ts +57 -0
- package/lib/typescript/commonjs/crypto/chunked-cipher.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/derive.d.ts +28 -0
- package/lib/typescript/commonjs/crypto/derive.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/key-provider.d.ts +30 -0
- package/lib/typescript/commonjs/crypto/key-provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/provider.d.ts +35 -0
- package/lib/typescript/commonjs/crypto/provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/dev-log.d.ts +35 -0
- package/lib/typescript/commonjs/diagnostics/dev-log.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts +34 -0
- package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/faults.d.ts +26 -0
- package/lib/typescript/commonjs/diagnostics/faults.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/map-native.d.ts +31 -0
- package/lib/typescript/commonjs/diagnostics/map-native.d.ts.map +1 -0
- package/lib/typescript/commonjs/diagnostics/redact.d.ts +70 -0
- package/lib/typescript/commonjs/diagnostics/redact.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +30 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/migration/executor.d.ts +40 -0
- package/lib/typescript/commonjs/migration/executor.d.ts.map +1 -0
- package/lib/typescript/commonjs/migration/ledger.d.ts +34 -0
- package/lib/typescript/commonjs/migration/ledger.d.ts.map +1 -0
- package/lib/typescript/commonjs/migration/validate-chain.d.ts +20 -0
- package/lib/typescript/commonjs/migration/validate-chain.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/platform/backup-android-verify.d.ts +30 -0
- package/lib/typescript/commonjs/platform/backup-android-verify.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/backup-ios.d.ts +26 -0
- package/lib/typescript/commonjs/platform/backup-ios.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/bytes.d.ts +36 -0
- package/lib/typescript/commonjs/platform/bytes.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/fs.d.ts +47 -0
- package/lib/typescript/commonjs/platform/fs.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/location.d.ts +53 -0
- package/lib/typescript/commonjs/platform/location.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/budgets.d.ts +23 -0
- package/lib/typescript/commonjs/query/budgets.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/compare.d.ts +42 -0
- package/lib/typescript/commonjs/query/compare.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/cursor.d.ts +27 -0
- package/lib/typescript/commonjs/query/cursor.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/filter.d.ts +11 -0
- package/lib/typescript/commonjs/query/filter.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/paginate.d.ts +15 -0
- package/lib/typescript/commonjs/query/paginate.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/sort.d.ts +19 -0
- package/lib/typescript/commonjs/query/sort.d.ts.map +1 -0
- package/lib/typescript/commonjs/query/validate.d.ts +15 -0
- package/lib/typescript/commonjs/query/validate.d.ts.map +1 -0
- package/lib/typescript/commonjs/schema/declare.d.ts +20 -0
- package/lib/typescript/commonjs/schema/declare.d.ts.map +1 -0
- package/lib/typescript/commonjs/schema/validate-config.d.ts +11 -0
- package/lib/typescript/commonjs/schema/validate-config.d.ts.map +1 -0
- package/lib/typescript/commonjs/scope/hash.d.ts +24 -0
- package/lib/typescript/commonjs/scope/hash.d.ts.map +1 -0
- package/lib/typescript/commonjs/scope/normalize.d.ts +46 -0
- package/lib/typescript/commonjs/scope/normalize.d.ts.map +1 -0
- package/lib/typescript/commonjs/scope/validate.d.ts +15 -0
- package/lib/typescript/commonjs/scope/validate.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/adapter.d.ts +16 -0
- package/lib/typescript/commonjs/sqlite/adapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/batch.d.ts +25 -0
- package/lib/typescript/commonjs/sqlite/batch.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/catalog.d.ts +34 -0
- package/lib/typescript/commonjs/sqlite/catalog.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/connection.d.ts +58 -0
- package/lib/typescript/commonjs/sqlite/connection.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/index-coverage.d.ts +18 -0
- package/lib/typescript/commonjs/sqlite/index-coverage.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/native.d.ts +48 -0
- package/lib/typescript/commonjs/sqlite/native.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/row-codec.d.ts +69 -0
- package/lib/typescript/commonjs/sqlite/row-codec.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/sql-builder.d.ts +34 -0
- package/lib/typescript/commonjs/sqlite/sql-builder.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/statements.d.ts +26 -0
- package/lib/typescript/commonjs/sqlite/statements.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/transaction-queue.d.ts +31 -0
- package/lib/typescript/commonjs/sqlite/transaction-queue.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/transactions.d.ts +26 -0
- package/lib/typescript/commonjs/sqlite/transactions.d.ts.map +1 -0
- package/lib/typescript/commonjs/sqlite/values.d.ts +13 -0
- package/lib/typescript/commonjs/sqlite/values.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/attachments.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/attachments.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/encryption.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/encryption.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/index.d.ts +58 -0
- package/lib/typescript/commonjs/testing/conformance/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/lifecycle.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/lifecycle.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/migrations.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/migrations.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/queries.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/queries.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/records.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/records.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/scopes.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/scopes.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/conformance/transactions.d.ts +4 -0
- package/lib/typescript/commonjs/testing/conformance/transactions.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/faults.d.ts +13 -0
- package/lib/typescript/commonjs/testing/faults.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/index.d.ts +13 -0
- package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/attachments.d.ts +23 -0
- package/lib/typescript/commonjs/testing/memory-adapter/attachments.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/collection.d.ts +19 -0
- package/lib/typescript/commonjs/testing/memory-adapter/collection.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/index.d.ts +22 -0
- package/lib/typescript/commonjs/testing/memory-adapter/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/migrations.d.ts +11 -0
- package/lib/typescript/commonjs/testing/memory-adapter/migrations.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/reset.d.ts +23 -0
- package/lib/typescript/commonjs/testing/memory-adapter/reset.d.ts.map +1 -0
- package/lib/typescript/commonjs/testing/memory-adapter/store.d.ts +54 -0
- package/lib/typescript/commonjs/testing/memory-adapter/store.d.ts.map +1 -0
- package/lib/typescript/module/adapter/budgets.d.ts +19 -0
- package/lib/typescript/module/adapter/budgets.d.ts.map +1 -0
- package/lib/typescript/module/adapter/collection.d.ts +25 -0
- package/lib/typescript/module/adapter/collection.d.ts.map +1 -0
- package/lib/typescript/module/adapter/deletion.d.ts +48 -0
- package/lib/typescript/module/adapter/deletion.d.ts.map +1 -0
- package/lib/typescript/module/adapter/handle.d.ts +30 -0
- package/lib/typescript/module/adapter/handle.d.ts.map +1 -0
- package/lib/typescript/module/adapter/index.d.ts +30 -0
- package/lib/typescript/module/adapter/index.d.ts.map +1 -0
- package/lib/typescript/module/adapter/lifecycle.d.ts +25 -0
- package/lib/typescript/module/adapter/lifecycle.d.ts.map +1 -0
- package/lib/typescript/module/adapter/schema-sync.d.ts +19 -0
- package/lib/typescript/module/adapter/schema-sync.d.ts.map +1 -0
- package/lib/typescript/module/adapter/transaction.d.ts +32 -0
- package/lib/typescript/module/adapter/transaction.d.ts.map +1 -0
- package/lib/typescript/module/artifacts/availability.d.ts +19 -0
- package/lib/typescript/module/artifacts/availability.d.ts.map +1 -0
- package/lib/typescript/module/artifacts/cascade.d.ts +26 -0
- package/lib/typescript/module/artifacts/cascade.d.ts.map +1 -0
- package/lib/typescript/module/artifacts/paths.d.ts +16 -0
- package/lib/typescript/module/artifacts/paths.d.ts.map +1 -0
- package/lib/typescript/module/artifacts/reconcile.d.ts +23 -0
- package/lib/typescript/module/artifacts/reconcile.d.ts.map +1 -0
- package/lib/typescript/module/artifacts/store.d.ts +45 -0
- package/lib/typescript/module/artifacts/store.d.ts.map +1 -0
- package/lib/typescript/module/contract/adapter.d.ts +55 -0
- package/lib/typescript/module/contract/adapter.d.ts.map +1 -0
- package/lib/typescript/module/contract/attachment.d.ts +84 -0
- package/lib/typescript/module/contract/attachment.d.ts.map +1 -0
- package/lib/typescript/module/contract/backup.d.ts +26 -0
- package/lib/typescript/module/contract/backup.d.ts.map +1 -0
- package/lib/typescript/module/contract/config.d.ts +50 -0
- package/lib/typescript/module/contract/config.d.ts.map +1 -0
- package/lib/typescript/module/contract/encryption.d.ts +31 -0
- package/lib/typescript/module/contract/encryption.d.ts.map +1 -0
- package/lib/typescript/module/contract/errors.d.ts +50 -0
- package/lib/typescript/module/contract/errors.d.ts.map +1 -0
- package/lib/typescript/module/contract/migration.d.ts +37 -0
- package/lib/typescript/module/contract/migration.d.ts.map +1 -0
- package/lib/typescript/module/contract/query.d.ts +79 -0
- package/lib/typescript/module/contract/query.d.ts.map +1 -0
- package/lib/typescript/module/contract/record.d.ts +43 -0
- package/lib/typescript/module/contract/record.d.ts.map +1 -0
- package/lib/typescript/module/contract/schema.d.ts +33 -0
- package/lib/typescript/module/contract/schema.d.ts.map +1 -0
- package/lib/typescript/module/contract/scope.d.ts +33 -0
- package/lib/typescript/module/contract/scope.d.ts.map +1 -0
- package/lib/typescript/module/contract/transaction.d.ts +66 -0
- package/lib/typescript/module/contract/transaction.d.ts.map +1 -0
- package/lib/typescript/module/crypto/chunked-cipher.d.ts +57 -0
- package/lib/typescript/module/crypto/chunked-cipher.d.ts.map +1 -0
- package/lib/typescript/module/crypto/derive.d.ts +28 -0
- package/lib/typescript/module/crypto/derive.d.ts.map +1 -0
- package/lib/typescript/module/crypto/key-provider.d.ts +30 -0
- package/lib/typescript/module/crypto/key-provider.d.ts.map +1 -0
- package/lib/typescript/module/crypto/provider.d.ts +35 -0
- package/lib/typescript/module/crypto/provider.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/dev-log.d.ts +35 -0
- package/lib/typescript/module/diagnostics/dev-log.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/errors.d.ts +34 -0
- package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/faults.d.ts +26 -0
- package/lib/typescript/module/diagnostics/faults.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/map-native.d.ts +31 -0
- package/lib/typescript/module/diagnostics/map-native.d.ts.map +1 -0
- package/lib/typescript/module/diagnostics/redact.d.ts +70 -0
- package/lib/typescript/module/diagnostics/redact.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +30 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/migration/executor.d.ts +40 -0
- package/lib/typescript/module/migration/executor.d.ts.map +1 -0
- package/lib/typescript/module/migration/ledger.d.ts +34 -0
- package/lib/typescript/module/migration/ledger.d.ts.map +1 -0
- package/lib/typescript/module/migration/validate-chain.d.ts +20 -0
- package/lib/typescript/module/migration/validate-chain.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/platform/backup-android-verify.d.ts +30 -0
- package/lib/typescript/module/platform/backup-android-verify.d.ts.map +1 -0
- package/lib/typescript/module/platform/backup-ios.d.ts +26 -0
- package/lib/typescript/module/platform/backup-ios.d.ts.map +1 -0
- package/lib/typescript/module/platform/bytes.d.ts +36 -0
- package/lib/typescript/module/platform/bytes.d.ts.map +1 -0
- package/lib/typescript/module/platform/fs.d.ts +47 -0
- package/lib/typescript/module/platform/fs.d.ts.map +1 -0
- package/lib/typescript/module/platform/location.d.ts +53 -0
- package/lib/typescript/module/platform/location.d.ts.map +1 -0
- package/lib/typescript/module/query/budgets.d.ts +23 -0
- package/lib/typescript/module/query/budgets.d.ts.map +1 -0
- package/lib/typescript/module/query/compare.d.ts +42 -0
- package/lib/typescript/module/query/compare.d.ts.map +1 -0
- package/lib/typescript/module/query/cursor.d.ts +27 -0
- package/lib/typescript/module/query/cursor.d.ts.map +1 -0
- package/lib/typescript/module/query/filter.d.ts +11 -0
- package/lib/typescript/module/query/filter.d.ts.map +1 -0
- package/lib/typescript/module/query/paginate.d.ts +15 -0
- package/lib/typescript/module/query/paginate.d.ts.map +1 -0
- package/lib/typescript/module/query/sort.d.ts +19 -0
- package/lib/typescript/module/query/sort.d.ts.map +1 -0
- package/lib/typescript/module/query/validate.d.ts +15 -0
- package/lib/typescript/module/query/validate.d.ts.map +1 -0
- package/lib/typescript/module/schema/declare.d.ts +20 -0
- package/lib/typescript/module/schema/declare.d.ts.map +1 -0
- package/lib/typescript/module/schema/validate-config.d.ts +11 -0
- package/lib/typescript/module/schema/validate-config.d.ts.map +1 -0
- package/lib/typescript/module/scope/hash.d.ts +24 -0
- package/lib/typescript/module/scope/hash.d.ts.map +1 -0
- package/lib/typescript/module/scope/normalize.d.ts +46 -0
- package/lib/typescript/module/scope/normalize.d.ts.map +1 -0
- package/lib/typescript/module/scope/validate.d.ts +15 -0
- package/lib/typescript/module/scope/validate.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/adapter.d.ts +16 -0
- package/lib/typescript/module/sqlite/adapter.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/batch.d.ts +25 -0
- package/lib/typescript/module/sqlite/batch.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/catalog.d.ts +34 -0
- package/lib/typescript/module/sqlite/catalog.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/connection.d.ts +58 -0
- package/lib/typescript/module/sqlite/connection.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/index-coverage.d.ts +18 -0
- package/lib/typescript/module/sqlite/index-coverage.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/native.d.ts +48 -0
- package/lib/typescript/module/sqlite/native.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/row-codec.d.ts +69 -0
- package/lib/typescript/module/sqlite/row-codec.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/sql-builder.d.ts +34 -0
- package/lib/typescript/module/sqlite/sql-builder.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/statements.d.ts +26 -0
- package/lib/typescript/module/sqlite/statements.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/transaction-queue.d.ts +31 -0
- package/lib/typescript/module/sqlite/transaction-queue.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/transactions.d.ts +26 -0
- package/lib/typescript/module/sqlite/transactions.d.ts.map +1 -0
- package/lib/typescript/module/sqlite/values.d.ts +13 -0
- package/lib/typescript/module/sqlite/values.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/attachments.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/attachments.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/encryption.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/encryption.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/index.d.ts +58 -0
- package/lib/typescript/module/testing/conformance/index.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/lifecycle.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/lifecycle.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/migrations.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/migrations.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/queries.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/queries.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/records.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/records.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/scopes.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/scopes.d.ts.map +1 -0
- package/lib/typescript/module/testing/conformance/transactions.d.ts +4 -0
- package/lib/typescript/module/testing/conformance/transactions.d.ts.map +1 -0
- package/lib/typescript/module/testing/faults.d.ts +13 -0
- package/lib/typescript/module/testing/faults.d.ts.map +1 -0
- package/lib/typescript/module/testing/index.d.ts +13 -0
- package/lib/typescript/module/testing/index.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/attachments.d.ts +23 -0
- package/lib/typescript/module/testing/memory-adapter/attachments.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/collection.d.ts +19 -0
- package/lib/typescript/module/testing/memory-adapter/collection.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/index.d.ts +22 -0
- package/lib/typescript/module/testing/memory-adapter/index.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/migrations.d.ts +11 -0
- package/lib/typescript/module/testing/memory-adapter/migrations.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/reset.d.ts +23 -0
- package/lib/typescript/module/testing/memory-adapter/reset.d.ts.map +1 -0
- package/lib/typescript/module/testing/memory-adapter/store.d.ts +54 -0
- package/lib/typescript/module/testing/memory-adapter/store.d.ts.map +1 -0
- package/package.json +51 -16
- package/skills/sdk-rn-local-db/SKILL.md +1 -1
- package/src/adapter/budgets.ts +1 -10
- package/src/adapter/collection.ts +38 -66
- package/src/adapter/deletion.ts +48 -0
- package/src/adapter/handle.ts +311 -0
- package/src/adapter/lifecycle.ts +10 -338
- package/src/adapter/schema-sync.ts +155 -0
- package/src/artifacts/cascade.ts +0 -14
- package/src/artifacts/store.ts +60 -10
- package/src/contract/attachment.ts +24 -3
- package/src/contract/migration.ts +4 -1
- package/src/crypto/provider.ts +7 -3
- package/src/diagnostics/dev-log.ts +5 -1
- package/src/migration/executor.ts +27 -6
- package/src/migration/ledger.ts +18 -27
- package/src/platform/fs.ts +2 -8
- package/src/platform/location.ts +0 -3
- package/src/query/budgets.ts +32 -5
- package/src/schema/validate-config.ts +3 -53
- package/src/sqlite/batch.ts +40 -51
- package/src/sqlite/connection.ts +0 -9
- package/src/sqlite/row-codec.ts +5 -2
- package/src/sqlite/statements.ts +74 -0
- package/src/testing/index.ts +2 -0
- package/src/testing/memory-adapter/attachments.ts +146 -0
- package/src/testing/memory-adapter/index.ts +13 -111
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildHandle = buildHandle;
|
|
7
|
+
exports.schemaFor = schemaFor;
|
|
8
|
+
var _errors = require("../contract/errors.js");
|
|
9
|
+
var _availability = require("../artifacts/availability.js");
|
|
10
|
+
var _cascade = require("../artifacts/cascade.js");
|
|
11
|
+
var _reconcile = require("../artifacts/reconcile.js");
|
|
12
|
+
var _store = require("../artifacts/store.js");
|
|
13
|
+
var _derive = require("../crypto/derive.js");
|
|
14
|
+
var _errors2 = require("../diagnostics/errors.js");
|
|
15
|
+
var _devLog = require("../diagnostics/dev-log.js");
|
|
16
|
+
var _faults = require("../diagnostics/faults.js");
|
|
17
|
+
var _sort = require("../query/sort.js");
|
|
18
|
+
var _batch = require("../sqlite/batch.js");
|
|
19
|
+
var _indexCoverage = require("../sqlite/index-coverage.js");
|
|
20
|
+
var _transactions = require("../sqlite/transactions.js");
|
|
21
|
+
var _budgets = require("./budgets.js");
|
|
22
|
+
var _collection = require("./collection.js");
|
|
23
|
+
var _deletion = require("./deletion.js");
|
|
24
|
+
var _transaction = require("./transaction.js");
|
|
25
|
+
/**
|
|
26
|
+
* The handle an open returns: collections, transactions, batches and
|
|
27
|
+
* attachments over one connection, bound to one scope.
|
|
28
|
+
*
|
|
29
|
+
* Scope is bound here and nowhere else. The handle carries its scope key and
|
|
30
|
+
* no operation on it accepts a scope argument, so there is no `switchScope`
|
|
31
|
+
* to misuse and no read that could address another scope (FR-008a, FR-015).
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
function schemaFor(schemas, name) {
|
|
35
|
+
const schema = schemas.get(name);
|
|
36
|
+
if (!schema) {
|
|
37
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.CONFIG_INVALID, {
|
|
38
|
+
message: 'collection is not declared',
|
|
39
|
+
detail: {
|
|
40
|
+
collection: name
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return schema;
|
|
45
|
+
}
|
|
46
|
+
function buildHandle(context) {
|
|
47
|
+
const {
|
|
48
|
+
config,
|
|
49
|
+
connection,
|
|
50
|
+
layout,
|
|
51
|
+
scope,
|
|
52
|
+
schemas
|
|
53
|
+
} = context;
|
|
54
|
+
let closed = false;
|
|
55
|
+
// Set when a deletion took the connection away rather than the app closing it.
|
|
56
|
+
let revoked = false;
|
|
57
|
+
const releaseNative = async () => {
|
|
58
|
+
// The key goes first: a close that fails at the filesystem must not
|
|
59
|
+
// leave key material alive in a handle nobody can use (FR-098).
|
|
60
|
+
context.key?.release();
|
|
61
|
+
await connection.close();
|
|
62
|
+
(0, _budgets.releaseHandleSlot)();
|
|
63
|
+
};
|
|
64
|
+
const unregister = (0, _deletion.registerOpenHandle)(config.name, scope.key, async () => {
|
|
65
|
+
if (closed) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
closed = true;
|
|
69
|
+
revoked = true;
|
|
70
|
+
await releaseNative();
|
|
71
|
+
});
|
|
72
|
+
const assertUsable = () => {
|
|
73
|
+
if (closed && !revoked) {
|
|
74
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.CLOSED_HANDLE, {
|
|
75
|
+
message: 'handle is closed'
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (revoked || (0, _deletion.isScopeInvalidated)(config.name, scope.key)) {
|
|
79
|
+
// The deletion did not wait for this handle, and this handle does
|
|
80
|
+
// not get to keep answering from data that is gone (FR-059a).
|
|
81
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.SCOPE_DELETED, {
|
|
82
|
+
message: 'scope was deleted beneath this handle',
|
|
83
|
+
detail: {
|
|
84
|
+
scopeKey: scope.key
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// Everything below is built against an explicit executor: the connection for
|
|
91
|
+
// the handle, the transaction's own executor inside `transaction`. Nothing
|
|
92
|
+
// infers which one from the connection's state, which is how a write from
|
|
93
|
+
// outside used to be swallowed by an in-flight transaction (LDB-01).
|
|
94
|
+
const artifactsOn = executor => ({
|
|
95
|
+
executor: () => executor,
|
|
96
|
+
layout,
|
|
97
|
+
scopeKey: scope.key,
|
|
98
|
+
artifactKey: attachmentId => context.key ? (0, _derive.deriveArtifactKey)(context.key.value(), scope.key, attachmentId) : null,
|
|
99
|
+
now: context.now
|
|
100
|
+
});
|
|
101
|
+
const rawCollection = (name, executor) => {
|
|
102
|
+
assertUsable();
|
|
103
|
+
return (0, _devLog.instrument)(name, 'sqlite', (0, _collection.createSqlCollection)({
|
|
104
|
+
executor: () => executor,
|
|
105
|
+
schema: schemaFor(schemas, name),
|
|
106
|
+
now: context.now,
|
|
107
|
+
assertUsable
|
|
108
|
+
}));
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Record deletion optionally takes its artifacts with it (FR-070).
|
|
113
|
+
*
|
|
114
|
+
* Off unless the app asks: a package that deleted a user's files as a side
|
|
115
|
+
* effect of a record delete would be making a decision that is not its to
|
|
116
|
+
* make. The outcome carries what was removed and what could not be.
|
|
117
|
+
*/
|
|
118
|
+
const collectionOn = (name, executor, deferred) => {
|
|
119
|
+
const ops = rawCollection(name, executor);
|
|
120
|
+
if (config.cascadeAttachments !== true) {
|
|
121
|
+
return ops;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
...ops,
|
|
125
|
+
async delete(id) {
|
|
126
|
+
const outcome = await ops.delete(id);
|
|
127
|
+
const cascade = await (0, _cascade.cascadeForOwner)(artifactsOn(executor), executor, {
|
|
128
|
+
collection: name,
|
|
129
|
+
id
|
|
130
|
+
}, deferred);
|
|
131
|
+
return {
|
|
132
|
+
...outcome,
|
|
133
|
+
cascade
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
const attachmentsOn = (executor, deferred) => {
|
|
139
|
+
const artifacts = artifactsOn(executor);
|
|
140
|
+
return {
|
|
141
|
+
write(input) {
|
|
142
|
+
assertUsable();
|
|
143
|
+
return (0, _store.writeArtifact)(artifacts, input);
|
|
144
|
+
},
|
|
145
|
+
read(id, range) {
|
|
146
|
+
assertUsable();
|
|
147
|
+
return (0, _store.readArtifact)(artifacts, id, range);
|
|
148
|
+
},
|
|
149
|
+
availability(id) {
|
|
150
|
+
assertUsable();
|
|
151
|
+
return (0, _availability.artifactAvailability)(artifacts, executor, id);
|
|
152
|
+
},
|
|
153
|
+
remove(id) {
|
|
154
|
+
assertUsable();
|
|
155
|
+
return (0, _store.removeArtifact)(artifacts, id, deferred);
|
|
156
|
+
},
|
|
157
|
+
listFor(owner) {
|
|
158
|
+
assertUsable();
|
|
159
|
+
return (0, _store.listReferencesFor)(executor, owner);
|
|
160
|
+
},
|
|
161
|
+
reconcile(options) {
|
|
162
|
+
assertUsable();
|
|
163
|
+
return (0, _reconcile.reconcileArtifacts)(artifacts, executor, options);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
const collectionFor = name => collectionOn(name, connection);
|
|
168
|
+
const attachments = attachmentsOn(connection);
|
|
169
|
+
const handle = {
|
|
170
|
+
scopeKey: scope.key,
|
|
171
|
+
schemaVersion: context.schemaVersion,
|
|
172
|
+
backupPosture: context.posture,
|
|
173
|
+
isEncrypted: context.key !== null,
|
|
174
|
+
collection: collectionFor,
|
|
175
|
+
async transaction(fn) {
|
|
176
|
+
assertUsable();
|
|
177
|
+
const pendingUnlinks = [];
|
|
178
|
+
const deferred = {
|
|
179
|
+
add: path => pendingUnlinks.push(path)
|
|
180
|
+
};
|
|
181
|
+
let aborted = false;
|
|
182
|
+
const result = await (0, _transactions.runInTransaction)(connection, async tx => {
|
|
183
|
+
const managed = (0, _transaction.createTransaction)({
|
|
184
|
+
collection: name => collectionOn(name, tx, deferred),
|
|
185
|
+
attachments: () => attachmentsOn(tx, deferred),
|
|
186
|
+
rollback: async () => {
|
|
187
|
+
aborted = true;
|
|
188
|
+
await tx.rollback();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
const value = await fn(managed.transaction);
|
|
192
|
+
if (!managed.isSettled()) {
|
|
193
|
+
(0, _faults.throwIfFaulted)('commit');
|
|
194
|
+
}
|
|
195
|
+
managed.settle();
|
|
196
|
+
return value;
|
|
197
|
+
});
|
|
198
|
+
// Committed (a thrown body never gets here). Only now are files whose
|
|
199
|
+
// references the transaction deleted safe to remove; one that cannot be
|
|
200
|
+
// removed stays on disk as an orphan reconciliation reports.
|
|
201
|
+
if (!aborted) {
|
|
202
|
+
for (const path of pendingUnlinks) {
|
|
203
|
+
await (0, _cascade.unlinkArtifact)(path);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
},
|
|
208
|
+
async batch(operations) {
|
|
209
|
+
assertUsable();
|
|
210
|
+
const outcome = await (0, _batch.runBatch)({
|
|
211
|
+
connection,
|
|
212
|
+
schemaFor: name => schemaFor(schemas, name),
|
|
213
|
+
now: context.now
|
|
214
|
+
}, operations);
|
|
215
|
+
if (config.cascadeAttachments !== true) {
|
|
216
|
+
return outcome;
|
|
217
|
+
}
|
|
218
|
+
// The batch has committed, so its hard deletes cascade exactly as a
|
|
219
|
+
// collection delete does. Skipping them left every attachment of a
|
|
220
|
+
// batch-deleted record behind as an orphan.
|
|
221
|
+
const artifacts = artifactsOn(connection);
|
|
222
|
+
const outcomes = [];
|
|
223
|
+
for (const [index, operation] of operations.entries()) {
|
|
224
|
+
const written = outcome.outcomes[index];
|
|
225
|
+
if (operation.type !== 'delete') {
|
|
226
|
+
outcomes.push(written);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
const cascade = await (0, _cascade.cascadeForOwner)(artifacts, connection, {
|
|
230
|
+
collection: operation.collection,
|
|
231
|
+
id: operation.id
|
|
232
|
+
});
|
|
233
|
+
outcomes.push({
|
|
234
|
+
...written,
|
|
235
|
+
cascade
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
...outcome,
|
|
240
|
+
outcomes
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
attachments: () => attachments,
|
|
244
|
+
explain(collection, query) {
|
|
245
|
+
assertUsable();
|
|
246
|
+
return (0, _indexCoverage.explainQuery)(connection, schemaFor(schemas, collection), query, (0, _sort.withStableTiebreaker)(query?.sort));
|
|
247
|
+
},
|
|
248
|
+
async close() {
|
|
249
|
+
if (closed) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
closed = true;
|
|
253
|
+
unregister();
|
|
254
|
+
await releaseNative();
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
return handle;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=handle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_errors","require","_availability","_cascade","_reconcile","_store","_derive","_errors2","_devLog","_faults","_sort","_batch","_indexCoverage","_transactions","_budgets","_collection","_deletion","_transaction","schemaFor","schemas","name","schema","get","raise","DiagnosticCodes","CONFIG_INVALID","message","detail","collection","buildHandle","context","config","connection","layout","scope","closed","revoked","releaseNative","key","release","close","releaseHandleSlot","unregister","registerOpenHandle","assertUsable","CLOSED_HANDLE","isScopeInvalidated","SCOPE_DELETED","scopeKey","artifactsOn","executor","artifactKey","attachmentId","deriveArtifactKey","value","now","rawCollection","instrument","createSqlCollection","collectionOn","deferred","ops","cascadeAttachments","delete","id","outcome","cascade","cascadeForOwner","attachmentsOn","artifacts","write","input","writeArtifact","read","range","readArtifact","availability","artifactAvailability","remove","removeArtifact","listFor","owner","listReferencesFor","reconcile","options","reconcileArtifacts","collectionFor","attachments","handle","schemaVersion","backupPosture","posture","isEncrypted","transaction","fn","pendingUnlinks","add","path","push","aborted","result","runInTransaction","tx","managed","createTransaction","rollback","isSettled","throwIfFaulted","settle","unlinkArtifact","batch","operations","runBatch","outcomes","index","operation","entries","written","type","explain","query","explainQuery","withStableTiebreaker","sort"],"sourceRoot":"../../../src","sources":["adapter/handle.ts"],"mappings":";;;;;;;AAmBA,IAAAA,OAAA,GAAAC,OAAA;AAWA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAOA,IAAAK,OAAA,GAAAL,OAAA;AAEA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AAEA,IAAAS,KAAA,GAAAT,OAAA;AACA,IAAAU,MAAA,GAAAV,OAAA;AAEA,IAAAW,cAAA,GAAAX,OAAA;AACA,IAAAY,aAAA,GAAAZ,OAAA;AACA,IAAAa,QAAA,GAAAb,OAAA;AACA,IAAAc,WAAA,GAAAd,OAAA;AACA,IAAAe,SAAA,GAAAf,OAAA;AACA,IAAAgB,YAAA,GAAAhB,OAAA;AAtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiDO,SAASiB,SAASA,CACxBC,OAA8C,EAC9CC,IAAY,EACO;EACnB,MAAMC,MAAM,GAAGF,OAAO,CAACG,GAAG,CAACF,IAAI,CAAC;EAChC,IAAI,CAACC,MAAM,EAAE;IACZ,IAAAE,cAAK,EAACC,uBAAe,CAACC,cAAc,EAAE;MACrCC,OAAO,EAAE,4BAA4B;MACrCC,MAAM,EAAE;QAAEC,UAAU,EAAER;MAAK;IAC5B,CAAC,CAAC;EACH;EACA,OAAOC,MAAM;AACd;AAcO,SAASQ,WAAWA,CAACC,OAAsB,EAAkB;EACnE,MAAM;IAAEC,MAAM;IAAEC,UAAU;IAAEC,MAAM;IAAEC,KAAK;IAAEf;EAAQ,CAAC,GAAGW,OAAO;EAC9D,IAAIK,MAAM,GAAG,KAAK;EAClB;EACA,IAAIC,OAAO,GAAG,KAAK;EAEnB,MAAMC,aAAa,GAAG,MAAAA,CAAA,KAA2B;IAChD;IACA;IACAP,OAAO,CAACQ,GAAG,EAAEC,OAAO,CAAC,CAAC;IACtB,MAAMP,UAAU,CAACQ,KAAK,CAAC,CAAC;IACxB,IAAAC,0BAAiB,EAAC,CAAC;EACpB,CAAC;EAED,MAAMC,UAAU,GAAG,IAAAC,4BAAkB,EAACZ,MAAM,CAACX,IAAI,EAAEc,KAAK,CAACI,GAAG,EAAE,YAAY;IACzE,IAAIH,MAAM,EAAE;MACX;IACD;IACAA,MAAM,GAAG,IAAI;IACbC,OAAO,GAAG,IAAI;IACd,MAAMC,aAAa,CAAC,CAAC;EACtB,CAAC,CAAC;EAEF,MAAMO,YAAY,GAAGA,CAAA,KAAY;IAChC,IAAIT,MAAM,IAAI,CAACC,OAAO,EAAE;MACvB,IAAAb,cAAK,EAACC,uBAAe,CAACqB,aAAa,EAAE;QAAEnB,OAAO,EAAE;MAAmB,CAAC,CAAC;IACtE;IACA,IAAIU,OAAO,IAAI,IAAAU,4BAAkB,EAACf,MAAM,CAACX,IAAI,EAAEc,KAAK,CAACI,GAAG,CAAC,EAAE;MAC1D;MACA;MACA,IAAAf,cAAK,EAACC,uBAAe,CAACuB,aAAa,EAAE;QACpCrB,OAAO,EAAE,uCAAuC;QAChDC,MAAM,EAAE;UAAEqB,QAAQ,EAAEd,KAAK,CAACI;QAAI;MAC/B,CAAC,CAAC;IACH;EACD,CAAC;;EAED;EACA;EACA;EACA;EACA,MAAMW,WAAW,GAAIC,QAAkB,KAAuB;IAC7DA,QAAQ,EAAEA,CAAA,KAAMA,QAAQ;IACxBjB,MAAM;IACNe,QAAQ,EAAEd,KAAK,CAACI,GAAG;IACnBa,WAAW,EAAEC,YAAY,IACxBtB,OAAO,CAACQ,GAAG,GAAG,IAAAe,yBAAiB,EAACvB,OAAO,CAACQ,GAAG,CAACgB,KAAK,CAAC,CAAC,EAAEpB,KAAK,CAACI,GAAG,EAAEc,YAAY,CAAC,GAAG,IAAI;IACrFG,GAAG,EAAEzB,OAAO,CAACyB;EACd,CAAC,CAAC;EAEF,MAAMC,aAAa,GAAGA,CACrBpC,IAAY,EACZ8B,QAAkB,KACI;IACtBN,YAAY,CAAC,CAAC;IACd,OAAO,IAAAa,kBAAU,EAChBrC,IAAI,EACJ,QAAQ,EACR,IAAAsC,+BAAmB,EAAI;MACtBR,QAAQ,EAAEA,CAAA,KAAMA,QAAQ;MACxB7B,MAAM,EAAEH,SAAS,CAACC,OAAO,EAAEC,IAAI,CAAC;MAChCmC,GAAG,EAAEzB,OAAO,CAACyB,GAAG;MAChBX;IACD,CAAC,CACF,CAAC;EACF,CAAC;;EAED;AACD;AACA;AACA;AACA;AACA;AACA;EACC,MAAMe,YAAY,GAAGA,CACpBvC,IAAY,EACZ8B,QAAkB,EAClBU,QAA0B,KACJ;IACtB,MAAMC,GAAG,GAAGL,aAAa,CAAIpC,IAAI,EAAE8B,QAAQ,CAAC;IAC5C,IAAInB,MAAM,CAAC+B,kBAAkB,KAAK,IAAI,EAAE;MACvC,OAAOD,GAAG;IACX;IACA,OAAO;MACN,GAAGA,GAAG;MACN,MAAME,MAAMA,CAACC,EAAU,EAAE;QACxB,MAAMC,OAAO,GAAG,MAAMJ,GAAG,CAACE,MAAM,CAACC,EAAE,CAAC;QACpC,MAAME,OAAO,GAAG,MAAM,IAAAC,wBAAe,EACpClB,WAAW,CAACC,QAAQ,CAAC,EACrBA,QAAQ,EACR;UAAEtB,UAAU,EAAER,IAAI;UAAE4C;QAAG,CAAC,EACxBJ,QACD,CAAC;QACD,OAAO;UAAE,GAAGK,OAAO;UAAEC;QAAQ,CAAC;MAC/B;IACD,CAAC;EACF,CAAC;EAED,MAAME,aAAa,GAAGA,CAAClB,QAAkB,EAAEU,QAA0B,KAAkB;IACtF,MAAMS,SAAS,GAAGpB,WAAW,CAACC,QAAQ,CAAC;IACvC,OAAO;MACNoB,KAAKA,CAACC,KAAsB,EAAE;QAC7B3B,YAAY,CAAC,CAAC;QACd,OAAO,IAAA4B,oBAAa,EAACH,SAAS,EAAEE,KAAK,CAAC;MACvC,CAAC;MACDE,IAAIA,CAACT,EAAU,EAAEU,KAAiB,EAAE;QACnC9B,YAAY,CAAC,CAAC;QACd,OAAO,IAAA+B,mBAAY,EAACN,SAAS,EAAEL,EAAE,EAAEU,KAAK,CAAC;MAC1C,CAAC;MACDE,YAAYA,CAACZ,EAAU,EAAE;QACxBpB,YAAY,CAAC,CAAC;QACd,OAAO,IAAAiC,kCAAoB,EAACR,SAAS,EAAEnB,QAAQ,EAAEc,EAAE,CAAC;MACrD,CAAC;MACDc,MAAMA,CAACd,EAAU,EAA4B;QAC5CpB,YAAY,CAAC,CAAC;QACd,OAAO,IAAAmC,qBAAc,EAACV,SAAS,EAAEL,EAAE,EAAEJ,QAAQ,CAAC;MAC/C,CAAC;MACDoB,OAAOA,CAACC,KAAsB,EAAE;QAC/BrC,YAAY,CAAC,CAAC;QACd,OAAO,IAAAsC,wBAAiB,EAAChC,QAAQ,EAAE+B,KAAK,CAAC;MAC1C,CAAC;MACDE,SAASA,CAACC,OAAO,EAAiC;QACjDxC,YAAY,CAAC,CAAC;QACd,OAAO,IAAAyC,6BAAkB,EAAChB,SAAS,EAAEnB,QAAQ,EAAEkC,OAAO,CAAC;MACxD;IACD,CAAC;EACF,CAAC;EAED,MAAME,aAAa,GAAkClE,IAAY,IAChEuC,YAAY,CAAIvC,IAAI,EAAEY,UAAU,CAAC;EAClC,MAAMuD,WAAW,GAAGnB,aAAa,CAACpC,UAAU,CAAC;EAE7C,MAAMwD,MAAsB,GAAG;IAC9BxC,QAAQ,EAAEd,KAAK,CAACI,GAAG;IACnBmD,aAAa,EAAE3D,OAAO,CAAC2D,aAAa;IACpCC,aAAa,EAAE5D,OAAO,CAAC6D,OAAO;IAC9BC,WAAW,EAAE9D,OAAO,CAACQ,GAAG,KAAK,IAAI;IAEjCV,UAAU,EAAE0D,aAAa;IAEzB,MAAMO,WAAWA,CAAIC,EAAmC,EAAc;MACrElD,YAAY,CAAC,CAAC;MACd,MAAMmD,cAAwB,GAAG,EAAE;MACnC,MAAMnC,QAAyB,GAAG;QAAEoC,GAAG,EAAEC,IAAI,IAAIF,cAAc,CAACG,IAAI,CAACD,IAAI;MAAE,CAAC;MAC5E,IAAIE,OAAO,GAAG,KAAK;MACnB,MAAMC,MAAM,GAAG,MAAM,IAAAC,8BAAgB,EAACrE,UAAU,EAAE,MAAMsE,EAAE,IAAI;QAC7D,MAAMC,OAAO,GAAG,IAAAC,8BAAiB,EAAC;UACjC5E,UAAU,EAAER,IAAI,IAAIuC,YAAY,CAACvC,IAAI,EAAEkF,EAAE,EAAE1C,QAAQ,CAAC;UACpD2B,WAAW,EAAEA,CAAA,KAAMnB,aAAa,CAACkC,EAAE,EAAE1C,QAAQ,CAAC;UAC9C6C,QAAQ,EAAE,MAAAA,CAAA,KAAY;YACrBN,OAAO,GAAG,IAAI;YACd,MAAMG,EAAE,CAACG,QAAQ,CAAC,CAAC;UACpB;QACD,CAAC,CAAC;QACF,MAAMnD,KAAK,GAAG,MAAMwC,EAAE,CAACS,OAAO,CAACV,WAAW,CAAC;QAC3C,IAAI,CAACU,OAAO,CAACG,SAAS,CAAC,CAAC,EAAE;UACzB,IAAAC,sBAAc,EAAC,QAAQ,CAAC;QACzB;QACAJ,OAAO,CAACK,MAAM,CAAC,CAAC;QAChB,OAAOtD,KAAK;MACb,CAAC,CAAC;MACF;MACA;MACA;MACA,IAAI,CAAC6C,OAAO,EAAE;QACb,KAAK,MAAMF,IAAI,IAAIF,cAAc,EAAE;UAClC,MAAM,IAAAc,uBAAc,EAACZ,IAAI,CAAC;QAC3B;MACD;MACA,OAAOG,MAAM;IACd,CAAC;IAED,MAAMU,KAAKA,CAACC,UAA4B,EAAyB;MAChEnE,YAAY,CAAC,CAAC;MACd,MAAMqB,OAAO,GAAG,MAAM,IAAA+C,eAAQ,EAC7B;QACChF,UAAU;QACVd,SAAS,EAAEE,IAAI,IAAIF,SAAS,CAACC,OAAO,EAAEC,IAAI,CAAC;QAC3CmC,GAAG,EAAEzB,OAAO,CAACyB;MACd,CAAC,EACDwD,UACD,CAAC;MACD,IAAIhF,MAAM,CAAC+B,kBAAkB,KAAK,IAAI,EAAE;QACvC,OAAOG,OAAO;MACf;MACA;MACA;MACA;MACA,MAAMI,SAAS,GAAGpB,WAAW,CAACjB,UAAU,CAAC;MACzC,MAAMiF,QAAQ,GAAG,EAAE;MACnB,KAAK,MAAM,CAACC,KAAK,EAAEC,SAAS,CAAC,IAAIJ,UAAU,CAACK,OAAO,CAAC,CAAC,EAAE;QACtD,MAAMC,OAAO,GAAGpD,OAAO,CAACgD,QAAQ,CAACC,KAAK,CAAE;QACxC,IAAIC,SAAS,CAACG,IAAI,KAAK,QAAQ,EAAE;UAChCL,QAAQ,CAACf,IAAI,CAACmB,OAAO,CAAC;UACtB;QACD;QACA,MAAMnD,OAAO,GAAG,MAAM,IAAAC,wBAAe,EAACE,SAAS,EAAErC,UAAU,EAAE;UAC5DJ,UAAU,EAAEuF,SAAS,CAACvF,UAAU;UAChCoC,EAAE,EAAEmD,SAAS,CAACnD;QACf,CAAC,CAAC;QACFiD,QAAQ,CAACf,IAAI,CAAC;UAAE,GAAGmB,OAAO;UAAEnD;QAAQ,CAAC,CAAC;MACvC;MACA,OAAO;QAAE,GAAGD,OAAO;QAAEgD;MAAS,CAAC;IAChC,CAAC;IAED1B,WAAW,EAAEA,CAAA,KAAMA,WAAW;IAE9BgC,OAAOA,CAAC3F,UAAkB,EAAE4F,KAAa,EAAgC;MACxE5E,YAAY,CAAC,CAAC;MACd,OAAO,IAAA6E,2BAAY,EAClBzF,UAAU,EACVd,SAAS,CAACC,OAAO,EAAES,UAAU,CAAC,EAC9B4F,KAAK,EACL,IAAAE,0BAAoB,EAACF,KAAK,EAAEG,IAAI,CACjC,CAAC;IACF,CAAC;IAED,MAAMnF,KAAKA,CAAA,EAAkB;MAC5B,IAAIL,MAAM,EAAE;QACX;MACD;MACAA,MAAM,GAAG,IAAI;MACbO,UAAU,CAAC,CAAC;MACZ,MAAML,aAAa,CAAC,CAAC;IACtB;EACD,CAAC;EAED,OAAOmD,MAAM;AACd","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deleteDatabase = deleteDatabase;
|
|
7
|
+
exports.deleteScopeData = deleteScopeData;
|
|
8
|
+
exports.openDatabase = openDatabase;
|
|
9
|
+
exports.resetScope = resetScope;
|
|
10
|
+
exports.setStorageAdapter = setStorageAdapter;
|
|
11
|
+
/**
|
|
12
|
+
* The public lifecycle functions.
|
|
13
|
+
*
|
|
14
|
+
* Scope deletion and reset are module-level rather than handle methods: they
|
|
15
|
+
* must work whether or not a handle is open on the target (FR-059), and
|
|
16
|
+
* `resetScope` in particular must never be reachable as a fallback from
|
|
17
|
+
* `openDatabase` (FR-057a).
|
|
18
|
+
*
|
|
19
|
+
* The active adapter is resolved lazily so a consuming app that only ever
|
|
20
|
+
* uses the in-memory adapter in tests never loads the native peers.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
let override = null;
|
|
24
|
+
let cached = null;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Swap the adapter. Intended for tests and for the demo app's in-memory
|
|
28
|
+
* mode; production code never calls this.
|
|
29
|
+
*/
|
|
30
|
+
function setStorageAdapter(adapter) {
|
|
31
|
+
override = adapter;
|
|
32
|
+
}
|
|
33
|
+
function activeAdapter() {
|
|
34
|
+
if (override) {
|
|
35
|
+
return override;
|
|
36
|
+
}
|
|
37
|
+
if (!cached) {
|
|
38
|
+
// Lazy require, matching how rn-auth and rn-camera reach their native
|
|
39
|
+
// peers: importing at module scope would pull op-sqlite into every
|
|
40
|
+
// consumer, including ones that only run the in-memory adapter.
|
|
41
|
+
const {
|
|
42
|
+
createSqliteAdapter
|
|
43
|
+
} = require('../sqlite/adapter');
|
|
44
|
+
cached = createSqliteAdapter();
|
|
45
|
+
}
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
function openDatabase(config) {
|
|
49
|
+
return activeAdapter().open(config);
|
|
50
|
+
}
|
|
51
|
+
function deleteScopeData(config) {
|
|
52
|
+
return activeAdapter().deleteScopeData(config);
|
|
53
|
+
}
|
|
54
|
+
function deleteDatabase(config) {
|
|
55
|
+
return activeAdapter().deleteDatabase(config);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Destructive. Discards one scope's data and leaves it ready for a clean
|
|
60
|
+
* first-run migration. Named apart from `deleteScopeData` deliberately: one
|
|
61
|
+
* is a lifecycle operation, the other is an admission that a database is
|
|
62
|
+
* broken.
|
|
63
|
+
*/
|
|
64
|
+
function resetScope(config) {
|
|
65
|
+
return activeAdapter().resetScope(config);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["override","cached","setStorageAdapter","adapter","activeAdapter","createSqliteAdapter","require","openDatabase","config","open","deleteScopeData","deleteDatabase","resetScope"],"sourceRoot":"../../../src","sources":["adapter/index.ts"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,IAAIA,QAA+B,GAAG,IAAI;AAC1C,IAAIC,MAA6B,GAAG,IAAI;;AAExC;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAACC,OAA8B,EAAQ;EACvEH,QAAQ,GAAGG,OAAO;AACnB;AAEA,SAASC,aAAaA,CAAA,EAAmB;EACxC,IAAIJ,QAAQ,EAAE;IACb,OAAOA,QAAQ;EAChB;EACA,IAAI,CAACC,MAAM,EAAE;IACZ;IACA;IACA;IACA,MAAM;MAAEI;IAAoB,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAE1D;IACDL,MAAM,GAAGI,mBAAmB,CAAC,CAAC;EAC/B;EACA,OAAOJ,MAAM;AACd;AAEO,SAASM,YAAYA,CAACC,MAAsB,EAA2B;EAC7E,OAAOJ,aAAa,CAAC,CAAC,CAACK,IAAI,CAACD,MAAM,CAAC;AACpC;AAEO,SAASE,eAAeA,CAACF,MAAyB,EAA4B;EACpF,OAAOJ,aAAa,CAAC,CAAC,CAACM,eAAe,CAACF,MAAM,CAAC;AAC/C;AAEO,SAASG,cAAcA,CAACH,MAA4B,EAA4B;EACtF,OAAOJ,aAAa,CAAC,CAAC,CAACO,cAAc,CAACH,MAAM,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,UAAUA,CAACJ,MAAyB,EAA4B;EAC/E,OAAOJ,aAAa,CAAC,CAAC,CAACQ,UAAU,CAACJ,MAAM,CAAC;AAC1C","ignoreList":[]}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.openSqliteDatabase = openSqliteDatabase;
|
|
7
|
+
var _errors = require("../contract/errors.js");
|
|
8
|
+
var _keyProvider = require("../crypto/key-provider.js");
|
|
9
|
+
var _provider = require("../crypto/provider.js");
|
|
10
|
+
var _errors2 = require("../diagnostics/errors.js");
|
|
11
|
+
var _faults = require("../diagnostics/faults.js");
|
|
12
|
+
var _executor = require("../migration/executor.js");
|
|
13
|
+
var _backupAndroidVerify = require("../platform/backup-android-verify.js");
|
|
14
|
+
var _backupIos = require("../platform/backup-ios.js");
|
|
15
|
+
var _location = require("../platform/location.js");
|
|
16
|
+
var _declare = require("../schema/declare.js");
|
|
17
|
+
var _validateConfig = require("../schema/validate-config.js");
|
|
18
|
+
var _validate = require("../scope/validate.js");
|
|
19
|
+
var _catalog = require("../sqlite/catalog.js");
|
|
20
|
+
var _connection = require("../sqlite/connection.js");
|
|
21
|
+
var _native = require("../sqlite/native.js");
|
|
22
|
+
var _budgets = require("./budgets.js");
|
|
23
|
+
var _deletion = require("./deletion.js");
|
|
24
|
+
var _handle = require("./handle.js");
|
|
25
|
+
var _schemaSync = require("./schema-sync.js");
|
|
26
|
+
/**
|
|
27
|
+
* Opening and closing a database.
|
|
28
|
+
*
|
|
29
|
+
* The order of operations here is the design, not an implementation detail:
|
|
30
|
+
*
|
|
31
|
+
* 1. **Validate everything first.** Configuration, scope, and the migration
|
|
32
|
+
* chain are checked before a file is touched, so a developer error is
|
|
33
|
+
* reported against an untouched database (FR-006, FR-053).
|
|
34
|
+
* 2. **Consult the catalog before opening the scope file.** A posture
|
|
35
|
+
* mismatch is detectable there; discovering it from SQLCipher's "file is
|
|
36
|
+
* not a database" would report corruption for what is actually an app
|
|
37
|
+
* configuration change (FR-101).
|
|
38
|
+
* 3. **Migrate before returning.** Nothing observes a half-migrated schema,
|
|
39
|
+
* because there is no handle to observe it with until the chain completes
|
|
40
|
+
* (FR-055). A failure returns no handle at all (FR-050).
|
|
41
|
+
*
|
|
42
|
+
* The handle itself is built in `handle.ts`.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
function resolveEncryption(config) {
|
|
46
|
+
if (config.encryption?.enabled !== true) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
// Writing plaintext to a file the app believes is encrypted is the one
|
|
50
|
+
// outcome worse than refusing to open (research.md R1a).
|
|
51
|
+
if (!(0, _native.isEncryptionAvailable)()) {
|
|
52
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.ENCRYPTION_UNAVAILABLE, {
|
|
53
|
+
message: 'encryption was requested but SQLCipher is not compiled into this build'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (!(0, _provider.isCipherAvailable)()) {
|
|
57
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.ENCRYPTION_UNAVAILABLE, {
|
|
58
|
+
message: 'encryption was requested but the cipher peer is not installed'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
async function assertPostureMatches(catalog, scope, encrypted) {
|
|
64
|
+
const entry = await (0, _catalog.readEntry)(catalog, scope.key);
|
|
65
|
+
if (!entry) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (entry.deletionState === 'deleting') {
|
|
69
|
+
// An interrupted deletion is reported rather than opened over: the
|
|
70
|
+
// scope is neither present nor gone, and presenting it as healthy is
|
|
71
|
+
// the one answer FR-063 forbids. `deleteScopeData` finishes the job.
|
|
72
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.SCOPE_DELETED, {
|
|
73
|
+
message: 'a previous deletion of this scope was interrupted',
|
|
74
|
+
detail: {
|
|
75
|
+
scopeKey: scope.key
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (entry.encrypted !== encrypted) {
|
|
80
|
+
// In-place conversion is not supported this phase (FR-103). Reporting
|
|
81
|
+
// the mismatch lets an app migrate deliberately; opening would either
|
|
82
|
+
// fail obscurely or write the wrong posture.
|
|
83
|
+
(0, _errors2.raise)(_errors.DiagnosticCodes.ENCRYPTION_MISMATCH, {
|
|
84
|
+
message: 'encryption posture does not match the stored database',
|
|
85
|
+
detail: {
|
|
86
|
+
scopeKey: scope.key
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function openSqliteDatabase(config, options = {}) {
|
|
92
|
+
const now = options.now ?? (() => Date.now());
|
|
93
|
+
(0, _validateConfig.validateConfig)(config);
|
|
94
|
+
(0, _faults.throwIfFaulted)('open');
|
|
95
|
+
const scope = (0, _validate.resolveScope)(config.scope);
|
|
96
|
+
const encrypted = resolveEncryption(config);
|
|
97
|
+
const includeInBackup = config.backup?.includeInPlatformBackup === true;
|
|
98
|
+
const layout = (0, _location.layoutFor)(config.name);
|
|
99
|
+
await (0, _backupIos.ensureManagedRoot)(layout, includeInBackup);
|
|
100
|
+
const catalog = await (0, _connection.openConnection)({
|
|
101
|
+
path: layout.catalogPath
|
|
102
|
+
});
|
|
103
|
+
let key = null;
|
|
104
|
+
let connection = null;
|
|
105
|
+
let released = false;
|
|
106
|
+
const releaseConnection = async () => {
|
|
107
|
+
if (released || !connection) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
released = true;
|
|
111
|
+
await connection.close();
|
|
112
|
+
(0, _budgets.releaseHandleSlot)();
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
await (0, _catalog.ensureCatalog)(catalog);
|
|
116
|
+
await assertPostureMatches(catalog, scope, encrypted);
|
|
117
|
+
if (encrypted) {
|
|
118
|
+
key = await (0, _keyProvider.acquireKey)(config.encryption, scope);
|
|
119
|
+
}
|
|
120
|
+
(0, _budgets.acquireHandleSlot)();
|
|
121
|
+
try {
|
|
122
|
+
connection = await (0, _connection.openConnection)({
|
|
123
|
+
path: layout.scopeDataPath(scope.key),
|
|
124
|
+
...(key ? {
|
|
125
|
+
encryptionKey: key.value()
|
|
126
|
+
} : {})
|
|
127
|
+
});
|
|
128
|
+
} catch (error) {
|
|
129
|
+
(0, _budgets.releaseHandleSlot)();
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
await (0, _connection.assertReadable)(connection);
|
|
133
|
+
const schemas = (0, _declare.indexSchemas)(config.collections);
|
|
134
|
+
// No DDL at all when the declaration is the one already applied (LDB-07).
|
|
135
|
+
const schema = await (0, _schemaSync.syncSchema)(connection, config);
|
|
136
|
+
const scopeConnection = connection;
|
|
137
|
+
const schemaVersion = await (0, _executor.runMigrations)({
|
|
138
|
+
connection: scopeConnection,
|
|
139
|
+
config,
|
|
140
|
+
schemaFor: name => (0, _handle.schemaFor)(schemas, name),
|
|
141
|
+
now,
|
|
142
|
+
closeOnFailure: releaseConnection,
|
|
143
|
+
ledgerReady: schema.unchanged
|
|
144
|
+
});
|
|
145
|
+
await schema.record();
|
|
146
|
+
await (0, _catalog.registerScope)(catalog, {
|
|
147
|
+
scopeKey: scope.key,
|
|
148
|
+
createdAt: now(),
|
|
149
|
+
deletionState: 'active',
|
|
150
|
+
backupPosture: includeInBackup ? 'included' : 'excluded',
|
|
151
|
+
encrypted
|
|
152
|
+
});
|
|
153
|
+
await catalog.close();
|
|
154
|
+
(0, _deletion.clearScopeInvalidation)(config.name, scope.key);
|
|
155
|
+
return (0, _handle.buildHandle)({
|
|
156
|
+
config,
|
|
157
|
+
connection: scopeConnection,
|
|
158
|
+
key,
|
|
159
|
+
layout,
|
|
160
|
+
now,
|
|
161
|
+
schemaVersion,
|
|
162
|
+
schemas,
|
|
163
|
+
scope,
|
|
164
|
+
posture: (0, _backupAndroidVerify.effectivePostureFor)(layout, includeInBackup, _backupIos.iosPosture)
|
|
165
|
+
});
|
|
166
|
+
} catch (error) {
|
|
167
|
+
// No usable handle after a failed open (FR-002). Anything already
|
|
168
|
+
// acquired is released here rather than left for a caller who is about
|
|
169
|
+
// to be handed an exception instead of a handle.
|
|
170
|
+
key?.release();
|
|
171
|
+
await releaseConnection();
|
|
172
|
+
await catalog.close();
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_errors","require","_keyProvider","_provider","_errors2","_faults","_executor","_backupAndroidVerify","_backupIos","_location","_declare","_validateConfig","_validate","_catalog","_connection","_native","_budgets","_deletion","_handle","_schemaSync","resolveEncryption","config","encryption","enabled","isEncryptionAvailable","raise","DiagnosticCodes","ENCRYPTION_UNAVAILABLE","message","isCipherAvailable","assertPostureMatches","catalog","scope","encrypted","entry","readEntry","key","deletionState","SCOPE_DELETED","detail","scopeKey","ENCRYPTION_MISMATCH","openSqliteDatabase","options","now","Date","validateConfig","throwIfFaulted","resolveScope","includeInBackup","backup","includeInPlatformBackup","layout","layoutFor","name","ensureManagedRoot","openConnection","path","catalogPath","connection","released","releaseConnection","close","releaseHandleSlot","ensureCatalog","acquireKey","acquireHandleSlot","scopeDataPath","encryptionKey","value","error","assertReadable","schemas","indexSchemas","collections","schema","syncSchema","scopeConnection","schemaVersion","runMigrations","schemaFor","closeOnFailure","ledgerReady","unchanged","record","registerScope","createdAt","backupPosture","clearScopeInvalidation","buildHandle","posture","effectivePostureFor","iosPosture","release"],"sourceRoot":"../../../src","sources":["adapter/lifecycle.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.syncSchema = syncSchema;
|
|
7
|
+
var _store = require("../artifacts/store.js");
|
|
8
|
+
var _rowCodec = require("../sqlite/row-codec.js");
|
|
9
|
+
var _values = require("../sqlite/values.js");
|
|
10
|
+
/**
|
|
11
|
+
* Bringing the physical tables in line with the declared schema, and skipping
|
|
12
|
+
* that work when nothing changed (LDB-07, LDB-11).
|
|
13
|
+
*
|
|
14
|
+
* Until 0.4.0 every open ran the whole set — CREATE TABLE, PRAGMA table_info,
|
|
15
|
+
* CREATE INDEX per index, for every collection — some sixty native round-trips
|
|
16
|
+
* for ten collections, on the startup path. The applied schema is now recorded
|
|
17
|
+
* in `_meta`; an open whose declaration matches it runs no DDL at all.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** Bumped whenever the DDL this package generates changes, so it is re-applied once. */
|
|
21
|
+
const DDL_VERSION = 1;
|
|
22
|
+
const FINGERPRINT_KEY = 'schema_fingerprint';
|
|
23
|
+
|
|
24
|
+
/** What was declared, and by which generation of this package's DDL. */
|
|
25
|
+
function fingerprintOf(config) {
|
|
26
|
+
return JSON.stringify([DDL_VERSION, config.collections]);
|
|
27
|
+
}
|
|
28
|
+
async function appliedFingerprint(connection) {
|
|
29
|
+
try {
|
|
30
|
+
const result = await connection.execute('SELECT value FROM _meta WHERE key = ?', [FINGERPRINT_KEY]);
|
|
31
|
+
const row = result.rows[0];
|
|
32
|
+
return row ? (0, _values.text)(row.value) : null;
|
|
33
|
+
} catch {
|
|
34
|
+
// A database that has never been opened has no `_meta` yet.
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** `unique` and the column list of an index, read back from the statement SQLite stored. */
|
|
40
|
+
function definitionOf(sql) {
|
|
41
|
+
const unique = /^\s*CREATE\s+UNIQUE\s/i.test(sql);
|
|
42
|
+
const columns = sql.slice(sql.lastIndexOf('(') + 1, sql.lastIndexOf(')')).replace(/["\s]/g, '');
|
|
43
|
+
return `${unique ? 'unique' : 'plain'}:${columns}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Indexes follow their declaration (LDB-11). `CREATE INDEX IF NOT EXISTS` keyed
|
|
48
|
+
* on the name alone meant that adding `unique: true` to an existing index, or
|
|
49
|
+
* changing its fields, did nothing, and an index no longer declared stayed
|
|
50
|
+
* forever. An index whose definition changed is dropped and recreated, and one
|
|
51
|
+
* of this package's that is no longer declared is dropped. Only indexes carrying
|
|
52
|
+
* the collection's own prefix are touched.
|
|
53
|
+
*/
|
|
54
|
+
async function syncIndexes(connection, schema) {
|
|
55
|
+
const table = `c_${schema.name}`;
|
|
56
|
+
const existing = await connection.execute("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = ? AND sql IS NOT NULL", [table]);
|
|
57
|
+
const current = new Map(existing.rows.map(row => [(0, _values.text)(row.name), (0, _values.text)(row.sql)]));
|
|
58
|
+
const wanted = new Map((0, _rowCodec.createIndexSql)(schema).map(statement => {
|
|
59
|
+
const name = /INDEX IF NOT EXISTS "([^"]+)"/.exec(statement)?.[1] ?? '';
|
|
60
|
+
return [name, statement];
|
|
61
|
+
}));
|
|
62
|
+
for (const index of schema.indexes ?? []) {
|
|
63
|
+
// Indexes created before 0.2.0 carry the bare declared name; they are
|
|
64
|
+
// recreated under the collection-scoped one. No row data moves.
|
|
65
|
+
if (current.has(index.name) && index.name !== (0, _rowCodec.physicalIndexName)(schema, index.name)) {
|
|
66
|
+
await connection.execute(`DROP INDEX IF EXISTS "${index.name}"`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const [name, sql] of current) {
|
|
70
|
+
const statement = wanted.get(name);
|
|
71
|
+
const ours = name.startsWith(`${table}__`);
|
|
72
|
+
if (statement === undefined && ours || statement && definitionOf(statement) !== definitionOf(sql)) {
|
|
73
|
+
await connection.execute(`DROP INDEX IF EXISTS "${name}"`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const statement of wanted.values()) {
|
|
77
|
+
await connection.execute(statement);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Adding a column rather than recreating the table is what makes declaring a
|
|
83
|
+
* new queryable field non-destructive: the payload already holds the value, so
|
|
84
|
+
* the new column is backfilled from it and no record is rewritten by hand
|
|
85
|
+
* (research.md R6).
|
|
86
|
+
*/
|
|
87
|
+
async function ensureCollection(connection, schema) {
|
|
88
|
+
await connection.execute((0, _rowCodec.createTableSql)(schema));
|
|
89
|
+
const info = await connection.execute(`PRAGMA table_info("c_${schema.name}")`);
|
|
90
|
+
const present = new Set(info.rows.map(row => (0, _values.text)(row.name)));
|
|
91
|
+
for (const field of schema.fields ?? []) {
|
|
92
|
+
const column = `f_${field.name}`;
|
|
93
|
+
if (present.has(column)) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
await connection.execute((0, _rowCodec.addColumnSql)(schema, field));
|
|
97
|
+
// The same projection a write applies (`projectValue`): an object or an
|
|
98
|
+
// array projects to NULL. A bare json_extract backfilled those as JSON
|
|
99
|
+
// text, so a filter matched old records and new ones differently (LDB-11).
|
|
100
|
+
const path = `'$."${field.name}"'`;
|
|
101
|
+
await connection.execute(`UPDATE "c_${schema.name}" SET "${column}" = CASE WHEN json_type(payload, ${path}) IN ('object', 'array') THEN NULL ELSE json_extract(payload, ${path}) END`);
|
|
102
|
+
}
|
|
103
|
+
await syncIndexes(connection, schema);
|
|
104
|
+
}
|
|
105
|
+
async function syncSchema(connection, config) {
|
|
106
|
+
const fingerprint = fingerprintOf(config);
|
|
107
|
+
if ((await appliedFingerprint(connection)) === fingerprint) {
|
|
108
|
+
return {
|
|
109
|
+
unchanged: true,
|
|
110
|
+
record: async () => undefined
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
for (const schema of config.collections) {
|
|
114
|
+
await ensureCollection(connection, schema);
|
|
115
|
+
}
|
|
116
|
+
await (0, _store.ensureAttachmentTable)(connection);
|
|
117
|
+
return {
|
|
118
|
+
unchanged: false,
|
|
119
|
+
async record() {
|
|
120
|
+
await connection.execute('INSERT INTO _meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value', [FINGERPRINT_KEY, fingerprint]);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=schema-sync.js.map
|