@lix-js/sdk 0.5.0-preview.0 → 0.5.0-preview.1
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/dist/account/create-account.d.ts +5 -5
- package/dist/account/create-account.d.ts.map +1 -1
- package/dist/account/create-account.js +2 -2
- package/dist/account/create-account.js.map +1 -1
- package/dist/account/index.d.ts +1 -1
- package/dist/account/index.d.ts.map +1 -1
- package/dist/account/schema.d.ts +23 -7
- package/dist/account/schema.d.ts.map +1 -1
- package/dist/account/schema.js +84 -27
- package/dist/account/schema.js.map +1 -1
- package/dist/account/schema.test.js +87 -83
- package/dist/account/schema.test.js.map +1 -1
- package/dist/account/switch-account.d.ts +2 -2
- package/dist/account/switch-account.d.ts.map +1 -1
- package/dist/account/switch-account.js +3 -4
- package/dist/account/switch-account.js.map +1 -1
- package/dist/account/switch-account.test.js +4 -4
- package/dist/account/switch-account.test.js.map +1 -1
- package/dist/change/apply-changes.d.ts +13 -0
- package/dist/change/apply-changes.d.ts.map +1 -1
- package/dist/change/apply-changes.js +14 -4
- package/dist/change/apply-changes.js.map +1 -1
- package/dist/change/apply-changes.test.js +91 -1
- package/dist/change/apply-changes.test.js.map +1 -1
- package/dist/change/create-change-v2.d.ts +11 -0
- package/dist/change/create-change-v2.d.ts.map +1 -0
- package/dist/change/create-change-v2.js +31 -0
- package/dist/change/create-change-v2.js.map +1 -0
- package/dist/change/create-change-v2.test.d.ts +2 -0
- package/dist/change/create-change-v2.test.d.ts.map +1 -0
- package/dist/change/create-change-v2.test.js +39 -0
- package/dist/change/create-change-v2.test.js.map +1 -0
- package/dist/change/create-change.d.ts +2 -2
- package/dist/change/create-change.d.ts.map +1 -1
- package/dist/change/create-change.js +3 -1
- package/dist/change/create-change.js.map +1 -1
- package/dist/change/create-change.test.js +4 -6
- package/dist/change/create-change.test.js.map +1 -1
- package/dist/change/index.d.ts +1 -1
- package/dist/change/index.d.ts.map +1 -1
- package/dist/change/index.js.map +1 -1
- package/dist/change/schema.d.ts +40 -2
- package/dist/change/schema.d.ts.map +1 -1
- package/dist/change/schema.js +50 -9
- package/dist/change/schema.js.map +1 -1
- package/dist/change/schema.test.js +33 -0
- package/dist/change/schema.test.js.map +1 -1
- package/dist/change-author/index.d.ts +1 -1
- package/dist/change-author/index.d.ts.map +1 -1
- package/dist/change-author/index.js +1 -1
- package/dist/change-author/index.js.map +1 -1
- package/dist/change-author/schema.d.ts +12 -9
- package/dist/change-author/schema.d.ts.map +1 -1
- package/dist/change-author/schema.js +16 -10
- package/dist/change-author/schema.js.map +1 -1
- package/dist/change-author/schema.test.js +283 -229
- package/dist/change-author/schema.test.js.map +1 -1
- package/dist/change-proposal/create-change-proposal.d.ts +3 -3
- package/dist/change-proposal/create-change-proposal.d.ts.map +1 -1
- package/dist/change-proposal/database-schema.js +1 -1
- package/dist/change-set/apply-change-set.d.ts +2 -2
- package/dist/change-set/apply-change-set.d.ts.map +1 -1
- package/dist/change-set/apply-change-set.js +40 -51
- package/dist/change-set/apply-change-set.js.map +1 -1
- package/dist/change-set/apply-change-set.test.js +6 -3
- package/dist/change-set/apply-change-set.test.js.map +1 -1
- package/dist/change-set/before-after-of-file.d.ts +31 -0
- package/dist/change-set/before-after-of-file.d.ts.map +1 -0
- package/dist/change-set/before-after-of-file.js +191 -0
- package/dist/change-set/before-after-of-file.js.map +1 -0
- package/dist/change-set/before-after-of-file.test.d.ts +2 -0
- package/dist/change-set/before-after-of-file.test.d.ts.map +1 -0
- package/dist/change-set/before-after-of-file.test.js +221 -0
- package/dist/change-set/before-after-of-file.test.js.map +1 -0
- package/dist/change-set/change-set-element-in-symmetric-difference.d.ts +2 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +1 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.js.map +1 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.test.js +204 -34
- package/dist/change-set/change-set-element-in-symmetric-difference.test.js.map +1 -1
- package/dist/change-set/checkout-change-set.d.ts +15 -0
- package/dist/change-set/checkout-change-set.d.ts.map +1 -0
- package/dist/change-set/checkout-change-set.js +64 -0
- package/dist/change-set/checkout-change-set.js.map +1 -0
- package/dist/change-set/checkout-change-set.test.d.ts +2 -0
- package/dist/change-set/checkout-change-set.test.d.ts.map +1 -0
- package/dist/change-set/checkout-change-set.test.js +127 -0
- package/dist/change-set/checkout-change-set.test.js.map +1 -0
- package/dist/change-set/create-change-set.d.ts +7 -9
- package/dist/change-set/create-change-set.d.ts.map +1 -1
- package/dist/change-set/create-change-set.js +3 -25
- package/dist/change-set/create-change-set.js.map +1 -1
- package/dist/change-set/create-change-set.test.js +0 -31
- package/dist/change-set/create-change-set.test.js.map +1 -1
- package/dist/change-set/create-checkpoint.d.ts.map +1 -1
- package/dist/change-set/create-checkpoint.js +11 -2
- package/dist/change-set/create-checkpoint.js.map +1 -1
- package/dist/change-set/create-checkpoint.test.js +53 -0
- package/dist/change-set/create-checkpoint.test.js.map +1 -1
- package/dist/change-set/create-merge-change-set.d.ts +4 -4
- package/dist/change-set/create-merge-change-set.d.ts.map +1 -1
- package/dist/change-set/create-transition-change-set.d.ts +4 -4
- package/dist/change-set/create-transition-change-set.d.ts.map +1 -1
- package/dist/change-set/create-undo-change-set.d.ts +5 -5
- package/dist/change-set/create-undo-change-set.d.ts.map +1 -1
- package/dist/change-set/create-undo-change-set.js +4 -3
- package/dist/change-set/create-undo-change-set.js.map +1 -1
- package/dist/change-set/database-schema.d.ts +39 -0
- package/dist/change-set/database-schema.d.ts.map +1 -0
- package/dist/change-set/database-schema.js +86 -0
- package/dist/change-set/database-schema.js.map +1 -0
- package/dist/change-set/database-schema.test.d.ts +2 -0
- package/dist/change-set/database-schema.test.d.ts.map +1 -0
- package/dist/change-set/database-schema.test.js +547 -0
- package/dist/change-set/database-schema.test.js.map +1 -0
- package/dist/change-set/diff-for-file.d.ts +29 -0
- package/dist/change-set/diff-for-file.d.ts.map +1 -0
- package/dist/change-set/diff-for-file.js +19 -0
- package/dist/change-set/diff-for-file.js.map +1 -0
- package/dist/change-set/get-before-after-of-file.d.ts +31 -0
- package/dist/change-set/get-before-after-of-file.d.ts.map +1 -0
- package/dist/change-set/get-before-after-of-file.js +189 -0
- package/dist/change-set/get-before-after-of-file.js.map +1 -0
- package/dist/change-set/get-before-after-of-file.test.d.ts +2 -0
- package/dist/change-set/get-before-after-of-file.test.d.ts.map +1 -0
- package/dist/change-set/get-before-after-of-file.test.js +220 -0
- package/dist/change-set/get-before-after-of-file.test.js.map +1 -0
- package/dist/change-set/index.d.ts +1 -5
- package/dist/change-set/index.d.ts.map +1 -1
- package/dist/change-set/index.js +1 -5
- package/dist/change-set/index.js.map +1 -1
- package/dist/change-set/merge-change-sets.d.ts +23 -0
- package/dist/change-set/merge-change-sets.d.ts.map +1 -0
- package/dist/change-set/merge-change-sets.js +69 -0
- package/dist/change-set/merge-change-sets.js.map +1 -0
- package/dist/change-set/merge-change-sets.test.d.ts +2 -0
- package/dist/change-set/merge-change-sets.test.d.ts.map +1 -0
- package/dist/change-set/merge-change-sets.test.js +184 -0
- package/dist/change-set/merge-change-sets.test.js.map +1 -0
- package/dist/change-set/restore-change-set.d.ts +14 -0
- package/dist/change-set/restore-change-set.d.ts.map +1 -0
- package/dist/change-set/restore-change-set.js +98 -0
- package/dist/change-set/restore-change-set.js.map +1 -0
- package/dist/change-set/restore-change-set.test.d.ts +2 -0
- package/dist/change-set/restore-change-set.test.d.ts.map +1 -0
- package/dist/change-set/restore-change-set.test.js +238 -0
- package/dist/change-set/restore-change-set.test.js.map +1 -0
- package/dist/change-set/schema.d.ts +28 -72
- package/dist/change-set/schema.d.ts.map +1 -1
- package/dist/change-set/schema.js +37 -84
- package/dist/change-set/schema.js.map +1 -1
- package/dist/change-set/schema.test.js +0 -247
- package/dist/change-set/schema.test.js.map +1 -1
- package/dist/change-set-edge/database-schema.d.ts +11 -0
- package/dist/change-set-edge/database-schema.d.ts.map +1 -0
- package/dist/change-set-edge/database-schema.js +29 -0
- package/dist/change-set-edge/database-schema.js.map +1 -0
- package/dist/change-set-edge/database-schema.test.d.ts +2 -0
- package/dist/change-set-edge/database-schema.test.d.ts.map +1 -0
- package/dist/change-set-edge/database-schema.test.js +166 -0
- package/dist/change-set-edge/database-schema.test.js.map +1 -0
- package/dist/change-set-edge/index.d.ts +2 -0
- package/dist/change-set-edge/index.d.ts.map +1 -0
- package/dist/change-set-edge/index.js +2 -0
- package/dist/change-set-edge/index.js.map +1 -0
- package/dist/change-set-v2/apply-change-set.d.ts +10 -0
- package/dist/change-set-v2/apply-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/apply-change-set.js +147 -0
- package/dist/change-set-v2/apply-change-set.js.map +1 -0
- package/dist/change-set-v2/apply-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/apply-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/apply-change-set.test.js +270 -0
- package/dist/change-set-v2/apply-change-set.test.js.map +1 -0
- package/dist/change-set-v2/create-change-set.d.ts +10 -0
- package/dist/change-set-v2/create-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/create-change-set.js +57 -0
- package/dist/change-set-v2/create-change-set.js.map +1 -0
- package/dist/change-set-v2/create-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/create-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-change-set.test.js +59 -0
- package/dist/change-set-v2/create-change-set.test.js.map +1 -0
- package/dist/change-set-v2/create-checkpoint.d.ts +7 -0
- package/dist/change-set-v2/create-checkpoint.d.ts.map +1 -0
- package/dist/change-set-v2/create-checkpoint.js +79 -0
- package/dist/change-set-v2/create-checkpoint.js.map +1 -0
- package/dist/change-set-v2/create-checkpoint.test.d.ts +2 -0
- package/dist/change-set-v2/create-checkpoint.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-checkpoint.test.js +289 -0
- package/dist/change-set-v2/create-checkpoint.test.js.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.d.ts +23 -0
- package/dist/change-set-v2/create-merge-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.js +68 -0
- package/dist/change-set-v2/create-merge-change-set.js.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/create-merge-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.test.js +223 -0
- package/dist/change-set-v2/create-merge-change-set.test.js.map +1 -0
- package/dist/change-set-v2/index.d.ts +5 -0
- package/dist/change-set-v2/index.d.ts.map +1 -0
- package/dist/change-set-v2/index.js +5 -0
- package/dist/change-set-v2/index.js.map +1 -0
- package/dist/change-set-v2/schema.d.ts +50 -0
- package/dist/change-set-v2/schema.d.ts.map +1 -0
- package/dist/change-set-v2/schema.js +347 -0
- package/dist/change-set-v2/schema.js.map +1 -0
- package/dist/change-set-v2/schema.test.d.ts +2 -0
- package/dist/change-set-v2/schema.test.d.ts.map +1 -0
- package/dist/change-set-v2/schema.test.js +713 -0
- package/dist/change-set-v2/schema.test.js.map +1 -0
- package/dist/commit/apply-commit.d.ts +32 -0
- package/dist/commit/apply-commit.d.ts.map +1 -0
- package/dist/commit/apply-commit.js +63 -0
- package/dist/commit/apply-commit.js.map +1 -0
- package/dist/commit/apply-commit.test.d.ts +2 -0
- package/dist/commit/apply-commit.test.d.ts.map +1 -0
- package/dist/commit/apply-commit.test.js +367 -0
- package/dist/commit/apply-commit.test.js.map +1 -0
- package/dist/commit/create-checkpoint.d.ts +19 -0
- package/dist/commit/create-checkpoint.d.ts.map +1 -0
- package/dist/commit/create-checkpoint.js +118 -0
- package/dist/commit/create-checkpoint.js.map +1 -0
- package/dist/commit/create-checkpoint.test.d.ts +2 -0
- package/dist/commit/create-checkpoint.test.d.ts.map +1 -0
- package/dist/commit/create-checkpoint.test.js +472 -0
- package/dist/commit/create-checkpoint.test.js.map +1 -0
- package/dist/commit/create-commit.d.ts +38 -0
- package/dist/commit/create-commit.d.ts.map +1 -0
- package/dist/commit/create-commit.js +68 -0
- package/dist/commit/create-commit.js.map +1 -0
- package/dist/commit/create-merge-commit.d.ts +24 -0
- package/dist/commit/create-merge-commit.d.ts.map +1 -0
- package/dist/commit/create-merge-commit.js +103 -0
- package/dist/commit/create-merge-commit.js.map +1 -0
- package/dist/commit/create-merge-commit.test.d.ts +2 -0
- package/dist/commit/create-merge-commit.test.d.ts.map +1 -0
- package/dist/commit/create-merge-commit.test.js +242 -0
- package/dist/commit/create-merge-commit.test.js.map +1 -0
- package/dist/commit/create-transition-commit.d.ts +18 -0
- package/dist/commit/create-transition-commit.d.ts.map +1 -0
- package/dist/commit/create-transition-commit.js +136 -0
- package/dist/commit/create-transition-commit.js.map +1 -0
- package/dist/commit/create-transition-commit.test.d.ts +2 -0
- package/dist/commit/create-transition-commit.test.d.ts.map +1 -0
- package/dist/commit/create-transition-commit.test.js +221 -0
- package/dist/commit/create-transition-commit.test.js.map +1 -0
- package/dist/commit/create-undo-commit.d.ts +27 -0
- package/dist/commit/create-undo-commit.d.ts.map +1 -0
- package/dist/commit/create-undo-commit.js +143 -0
- package/dist/commit/create-undo-commit.js.map +1 -0
- package/dist/commit/create-undo-commit.test.d.ts +2 -0
- package/dist/commit/create-undo-commit.test.d.ts.map +1 -0
- package/dist/commit/create-undo-commit.test.js +298 -0
- package/dist/commit/create-undo-commit.test.js.map +1 -0
- package/dist/commit/index.d.ts +6 -0
- package/dist/commit/index.d.ts.map +1 -0
- package/dist/commit/index.js +6 -0
- package/dist/commit/index.js.map +1 -0
- package/dist/commit/schema.d.ts +73 -0
- package/dist/commit/schema.d.ts.map +1 -0
- package/dist/commit/schema.js +90 -0
- package/dist/commit/schema.js.map +1 -0
- package/dist/commit/schema.test.d.ts +2 -0
- package/dist/commit/schema.test.d.ts.map +1 -0
- package/dist/commit/schema.test.js +216 -0
- package/dist/commit/schema.test.js.map +1 -0
- package/dist/database/apply-schema.d.ts +3 -0
- package/dist/database/apply-schema.d.ts.map +1 -1
- package/dist/database/apply-schema.js +91 -258
- package/dist/database/apply-schema.js.map +1 -1
- package/dist/database/index.d.ts +0 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +0 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/init-db.d.ts.map +1 -1
- package/dist/database/init-db.js +83 -44
- package/dist/database/init-db.js.map +1 -1
- package/dist/database/init-db.test.js +2 -480
- package/dist/database/init-db.test.js.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.d.ts +5 -1
- package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.js +52 -10
- package/dist/database/kysely-plugin/json-column-plugin.js.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.test.d.ts +2 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.d.ts.map +1 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.js +329 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.js.map +1 -0
- package/dist/database/mutation-log/database-schema.d.ts.map +1 -1
- package/dist/database/mutation-log/database-schema.js +0 -4
- package/dist/database/mutation-log/database-schema.js.map +1 -1
- package/dist/database/nano-id.d.ts +4 -1
- package/dist/database/nano-id.d.ts.map +1 -1
- package/dist/database/nano-id.js +4 -1
- package/dist/database/nano-id.js.map +1 -1
- package/dist/database/nano-id.test.js +3 -3
- package/dist/database/nano-id.test.js.map +1 -1
- package/dist/database/schema.d.ts +21 -14
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +9 -5
- package/dist/database/schema.js.map +1 -1
- package/dist/deterministic/generate-human-id.d.ts +20 -0
- package/dist/deterministic/generate-human-id.d.ts.map +1 -0
- package/dist/deterministic/generate-human-id.js +86 -0
- package/dist/deterministic/generate-human-id.js.map +1 -0
- package/dist/deterministic/generate-human-id.test.d.ts +2 -0
- package/dist/deterministic/generate-human-id.test.d.ts.map +1 -0
- package/dist/deterministic/generate-human-id.test.js +123 -0
- package/dist/deterministic/generate-human-id.test.js.map +1 -0
- package/dist/deterministic/index.d.ts +8 -0
- package/dist/deterministic/index.d.ts.map +1 -0
- package/dist/deterministic/index.js +8 -0
- package/dist/deterministic/index.js.map +1 -0
- package/dist/deterministic/is-deterministic-mode.d.ts +14 -0
- package/dist/deterministic/is-deterministic-mode.d.ts.map +1 -0
- package/dist/deterministic/is-deterministic-mode.js +25 -0
- package/dist/deterministic/is-deterministic-mode.js.map +1 -0
- package/dist/deterministic/is-deterministic-mode.test.d.ts +2 -0
- package/dist/deterministic/is-deterministic-mode.test.d.ts.map +1 -0
- package/dist/deterministic/is-deterministic-mode.test.js +103 -0
- package/dist/deterministic/is-deterministic-mode.test.js.map +1 -0
- package/dist/deterministic/nano-id.d.ts +61 -0
- package/dist/deterministic/nano-id.d.ts.map +1 -0
- package/dist/deterministic/nano-id.js +161 -0
- package/dist/deterministic/nano-id.js.map +1 -0
- package/dist/deterministic/nano-id.test.d.ts +2 -0
- package/dist/deterministic/nano-id.test.d.ts.map +1 -0
- package/dist/deterministic/nano-id.test.js +163 -0
- package/dist/deterministic/nano-id.test.js.map +1 -0
- package/dist/deterministic/options.d.ts +53 -0
- package/dist/deterministic/options.d.ts.map +1 -0
- package/dist/deterministic/options.js +52 -0
- package/dist/deterministic/options.js.map +1 -0
- package/dist/deterministic/options.test.d.ts +2 -0
- package/dist/deterministic/options.test.d.ts.map +1 -0
- package/dist/deterministic/options.test.js +111 -0
- package/dist/deterministic/options.test.js.map +1 -0
- package/dist/deterministic/random.d.ts +68 -0
- package/dist/deterministic/random.d.ts.map +1 -0
- package/dist/deterministic/random.js +225 -0
- package/dist/deterministic/random.js.map +1 -0
- package/dist/deterministic/random.test.d.ts +2 -0
- package/dist/deterministic/random.test.d.ts.map +1 -0
- package/dist/deterministic/random.test.js +244 -0
- package/dist/deterministic/random.test.js.map +1 -0
- package/dist/deterministic/sequence.d.ts +56 -0
- package/dist/deterministic/sequence.d.ts.map +1 -0
- package/dist/deterministic/sequence.js +107 -0
- package/dist/deterministic/sequence.js.map +1 -0
- package/dist/deterministic/sequence.test.d.ts +2 -0
- package/dist/deterministic/sequence.test.d.ts.map +1 -0
- package/dist/deterministic/sequence.test.js +71 -0
- package/dist/deterministic/sequence.test.js.map +1 -0
- package/dist/deterministic/timestamp.d.ts +47 -0
- package/dist/deterministic/timestamp.d.ts.map +1 -0
- package/dist/deterministic/timestamp.js +74 -0
- package/dist/deterministic/timestamp.js.map +1 -0
- package/dist/deterministic/timestamp.test.d.ts +2 -0
- package/dist/deterministic/timestamp.test.d.ts.map +1 -0
- package/dist/deterministic/timestamp.test.js +145 -0
- package/dist/deterministic/timestamp.test.js.map +1 -0
- package/dist/deterministic/uuid-v7.d.ts +49 -0
- package/dist/deterministic/uuid-v7.d.ts.map +1 -0
- package/dist/deterministic/uuid-v7.js +75 -0
- package/dist/deterministic/uuid-v7.js.map +1 -0
- package/dist/deterministic/uuid-v7.test.d.ts +2 -0
- package/dist/deterministic/uuid-v7.test.d.ts.map +1 -0
- package/dist/deterministic/uuid-v7.test.js +114 -0
- package/dist/deterministic/uuid-v7.test.js.map +1 -0
- package/dist/discussion/create-discussion.d.ts +2 -1
- package/dist/discussion/create-discussion.d.ts.map +1 -1
- package/dist/discussion/create-discussion.js.map +1 -1
- package/dist/discussion/create-discussion.test.js +13 -2
- package/dist/discussion/create-discussion.test.js.map +1 -1
- package/dist/entity/eb-entity.d.ts +76 -0
- package/dist/entity/eb-entity.d.ts.map +1 -0
- package/dist/entity/eb-entity.js +156 -0
- package/dist/entity/eb-entity.js.map +1 -0
- package/dist/entity/eb-entity.test.d.ts +2 -0
- package/dist/entity/eb-entity.test.d.ts.map +1 -0
- package/dist/entity/eb-entity.test.js +573 -0
- package/dist/entity/eb-entity.test.js.map +1 -0
- package/dist/entity/index.d.ts +7 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +4 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/label/create-entity-label.d.ts +61 -0
- package/dist/entity/label/create-entity-label.d.ts.map +1 -0
- package/dist/entity/label/create-entity-label.js +92 -0
- package/dist/entity/label/create-entity-label.js.map +1 -0
- package/dist/entity/label/create-entity-label.test.d.ts +2 -0
- package/dist/entity/label/create-entity-label.test.d.ts.map +1 -0
- package/dist/entity/label/create-entity-label.test.js +261 -0
- package/dist/entity/label/create-entity-label.test.js.map +1 -0
- package/dist/entity/label/schema.d.ts +40 -0
- package/dist/entity/label/schema.d.ts.map +1 -0
- package/dist/entity/label/schema.js +42 -0
- package/dist/entity/label/schema.js.map +1 -0
- package/dist/entity/label/schema.test.d.ts +2 -0
- package/dist/entity/label/schema.test.d.ts.map +1 -0
- package/dist/entity/label/schema.test.js +596 -0
- package/dist/entity/label/schema.test.js.map +1 -0
- package/dist/entity/schema.d.ts +13 -0
- package/dist/entity/schema.d.ts.map +1 -0
- package/dist/entity/schema.js +5 -0
- package/dist/entity/schema.js.map +1 -0
- package/dist/entity/thread/create-entity-thread.d.ts +75 -0
- package/dist/entity/thread/create-entity-thread.d.ts.map +1 -0
- package/dist/entity/thread/create-entity-thread.js +109 -0
- package/dist/entity/thread/create-entity-thread.js.map +1 -0
- package/dist/entity/thread/create-entity-thread.test.d.ts +2 -0
- package/dist/entity/thread/create-entity-thread.test.d.ts.map +1 -0
- package/dist/entity/thread/create-entity-thread.test.js +240 -0
- package/dist/entity/thread/create-entity-thread.test.js.map +1 -0
- package/dist/entity/thread/query-threads.test.d.ts +2 -0
- package/dist/entity/thread/query-threads.test.d.ts.map +1 -0
- package/dist/entity/thread/query-threads.test.js +330 -0
- package/dist/entity/thread/query-threads.test.js.map +1 -0
- package/dist/entity/thread/schema.d.ts +40 -0
- package/dist/entity/thread/schema.d.ts.map +1 -0
- package/dist/entity/thread/schema.js +42 -0
- package/dist/entity/thread/schema.js.map +1 -0
- package/dist/entity/thread/schema.test.d.ts +2 -0
- package/dist/entity/thread/schema.test.d.ts.map +1 -0
- package/dist/entity/thread/schema.test.js +144 -0
- package/dist/entity/thread/schema.test.js.map +1 -0
- package/dist/entity-views/entity-state-all.d.ts +52 -0
- package/dist/entity-views/entity-state-all.d.ts.map +1 -1
- package/dist/entity-views/entity-state-all.js +19 -11
- package/dist/entity-views/entity-state-all.js.map +1 -1
- package/dist/entity-views/entity-state-all.test.js +173 -0
- package/dist/entity-views/entity-state-all.test.js.map +1 -1
- package/dist/entity-views/entity-state-history.d.ts +55 -15
- package/dist/entity-views/entity-state-history.d.ts.map +1 -1
- package/dist/entity-views/entity-state-history.js +7 -4
- package/dist/entity-views/entity-state-history.js.map +1 -1
- package/dist/entity-views/entity-state-history.test.js +70 -15
- package/dist/entity-views/entity-state-history.test.js.map +1 -1
- package/dist/entity-views/entity-state.d.ts +52 -0
- package/dist/entity-views/entity-state.d.ts.map +1 -1
- package/dist/entity-views/entity-state.js +18 -10
- package/dist/entity-views/entity-state.js.map +1 -1
- package/dist/entity-views/entity-state.test.js +120 -1
- package/dist/entity-views/entity-state.test.js.map +1 -1
- package/dist/entity-views/entity-view-builder.test.js +6 -6
- package/dist/entity-views/entity-view-builder.test.js.map +1 -1
- package/dist/entity-views/types.d.ts +2 -2
- package/dist/file/database-schema.d.ts +25 -0
- package/dist/file/database-schema.d.ts.map +1 -0
- package/dist/file/database-schema.js +26 -0
- package/dist/file/database-schema.js.map +1 -0
- package/dist/file/database-schema.test.d.ts +2 -0
- package/dist/file/database-schema.test.d.ts.map +1 -0
- package/dist/file/database-schema.test.js +60 -0
- package/dist/file/database-schema.test.js.map +1 -0
- package/dist/file/file-handlers.d.ts.map +1 -1
- package/dist/file/file-handlers.js +36 -0
- package/dist/file/file-handlers.js.map +1 -1
- package/dist/file/file-handlers.test.js +4 -4
- package/dist/file/file-handlers.test.js.map +1 -1
- package/dist/file/materialize-file-data-at-changeset.d.ts +1 -1
- package/dist/file/materialize-file-data-at-changeset.d.ts.map +1 -1
- package/dist/file/materialize-file-data-at-changeset.js +55 -29
- package/dist/file/materialize-file-data-at-changeset.js.map +1 -1
- package/dist/file/materialize-file-data-at-commit.d.ts +9 -0
- package/dist/file/materialize-file-data-at-commit.d.ts.map +1 -0
- package/dist/file/materialize-file-data-at-commit.js +119 -0
- package/dist/file/materialize-file-data-at-commit.js.map +1 -0
- package/dist/file/schema.d.ts +68 -5
- package/dist/file/schema.d.ts.map +1 -1
- package/dist/file/schema.js +118 -50
- package/dist/file/schema.js.map +1 -1
- package/dist/file/schema.test.js +543 -35
- package/dist/file/schema.test.js.map +1 -1
- package/dist/file-queue/database-schema.d.ts +17 -0
- package/dist/file-queue/database-schema.d.ts.map +1 -0
- package/dist/file-queue/database-schema.js +53 -0
- package/dist/file-queue/database-schema.js.map +1 -0
- package/dist/file-queue/file-handlers.d.ts +1 -1
- package/dist/file-queue/file-handlers.d.ts.map +1 -1
- package/dist/file-queue/file-handlers.js +60 -29
- package/dist/file-queue/file-handlers.js.map +1 -1
- package/dist/file-queue/file-queue-process.d.ts.map +1 -1
- package/dist/file-queue/file-queue-process.js +26 -17
- package/dist/file-queue/file-queue-process.js.map +1 -1
- package/dist/file-queue/file-queue-process.test.js +133 -43
- package/dist/file-queue/file-queue-process.test.js.map +1 -1
- package/dist/file-queue/with-skip-file-queue.d.ts +18 -0
- package/dist/file-queue/with-skip-file-queue.d.ts.map +1 -1
- package/dist/file-queue/with-skip-file-queue.js +56 -10
- package/dist/file-queue/with-skip-file-queue.js.map +1 -1
- package/dist/file-queue/with-skip-file-queue.test.js +28 -12
- package/dist/file-queue/with-skip-file-queue.test.js.map +1 -1
- package/dist/hooks/create-hooks.d.ts +4 -26
- package/dist/hooks/create-hooks.d.ts.map +1 -1
- package/dist/hooks/create-hooks.js +3 -7
- package/dist/hooks/create-hooks.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/key-value/database-schema.d.ts +3 -2
- package/dist/key-value/database-schema.d.ts.map +1 -1
- package/dist/key-value/database-schema.js +3 -3
- package/dist/key-value/database-schema.test.js +13 -4
- package/dist/key-value/database-schema.test.js.map +1 -1
- package/dist/key-value/index.d.ts +1 -1
- package/dist/key-value/index.d.ts.map +1 -1
- package/dist/key-value/index.js.map +1 -1
- package/dist/key-value/schema.d.ts +63 -3
- package/dist/key-value/schema.d.ts.map +1 -1
- package/dist/key-value/schema.js +8 -2
- package/dist/key-value/schema.js.map +1 -1
- package/dist/key-value/schema.test.js +91 -2
- package/dist/key-value/schema.test.js.map +1 -1
- package/dist/key-value-v2/schema.d.ts +27 -0
- package/dist/key-value-v2/schema.d.ts.map +1 -0
- package/dist/key-value-v2/schema.js +73 -0
- package/dist/key-value-v2/schema.js.map +1 -0
- package/dist/key-value-v2/schema.test.d.ts +2 -0
- package/dist/key-value-v2/schema.test.d.ts.map +1 -0
- package/dist/key-value-v2/schema.test.js +144 -0
- package/dist/key-value-v2/schema.test.js.map +1 -0
- package/dist/label/create-label.d.ts +5 -5
- package/dist/label/create-label.d.ts.map +1 -1
- package/dist/label/create-label.js +2 -2
- package/dist/label/create-label.js.map +1 -1
- package/dist/label/index.d.ts +1 -1
- package/dist/label/index.d.ts.map +1 -1
- package/dist/label/index.js.map +1 -1
- package/dist/label/schema.d.ts +3 -3
- package/dist/label/schema.d.ts.map +1 -1
- package/dist/label/schema.js +4 -6
- package/dist/label/schema.js.map +1 -1
- package/dist/lix/close-lix.d.ts +1 -10
- package/dist/lix/close-lix.d.ts.map +1 -1
- package/dist/lix/close-lix.js +1 -10
- package/dist/lix/close-lix.js.map +1 -1
- package/dist/lix/merge.test.js +4 -1
- package/dist/lix/merge.test.js.map +1 -1
- package/dist/lix/new-lix.d.ts +4 -2
- package/dist/lix/new-lix.d.ts.map +1 -1
- package/dist/lix/new-lix.js +244 -60
- package/dist/lix/new-lix.js.map +1 -1
- package/dist/lix/new-lix.test.js +175 -1
- package/dist/lix/new-lix.test.js.map +1 -1
- package/dist/lix/open-lix-in-memory.d.ts +1 -9
- package/dist/lix/open-lix-in-memory.d.ts.map +1 -1
- package/dist/lix/open-lix-in-memory.js +7 -15
- package/dist/lix/open-lix-in-memory.js.map +1 -1
- package/dist/lix/open-lix-in-memory.test.js +2 -1
- package/dist/lix/open-lix-in-memory.test.js.map +1 -1
- package/dist/lix/open-lix.d.ts +12 -13
- package/dist/lix/open-lix.d.ts.map +1 -1
- package/dist/lix/open-lix.js +147 -55
- package/dist/lix/open-lix.js.map +1 -1
- package/dist/lix/open-lix.test.js +242 -3
- package/dist/lix/open-lix.test.js.map +1 -1
- package/dist/lix/storage/in-memory.d.ts +7 -6
- package/dist/lix/storage/in-memory.d.ts.map +1 -1
- package/dist/lix/storage/in-memory.js +10 -17
- package/dist/lix/storage/in-memory.js.map +1 -1
- package/dist/lix/storage/in-memory.test.js +7 -68
- package/dist/lix/storage/in-memory.test.js.map +1 -1
- package/dist/lix/storage/lix-storage-adapter.d.ts +35 -5
- package/dist/lix/storage/lix-storage-adapter.d.ts.map +1 -1
- package/dist/lix/storage/opfs.d.ts +39 -10
- package/dist/lix/storage/opfs.d.ts.map +1 -1
- package/dist/lix/storage/opfs.js +148 -37
- package/dist/lix/storage/opfs.js.map +1 -1
- package/dist/lix/storage/opfs.test.js +203 -24
- package/dist/lix/storage/opfs.test.js.map +1 -1
- package/dist/lix/to-blob.d.ts +2 -9
- package/dist/lix/to-blob.d.ts.map +1 -1
- package/dist/lix/to-blob.js +2 -9
- package/dist/lix/to-blob.js.map +1 -1
- package/dist/log/create-lix-own-log.d.ts +9 -1
- package/dist/log/create-lix-own-log.d.ts.map +1 -1
- package/dist/log/create-lix-own-log.js +14 -25
- package/dist/log/create-lix-own-log.js.map +1 -1
- package/dist/log/create-lix-own-log.test.js +9 -5
- package/dist/log/create-lix-own-log.test.js.map +1 -1
- package/dist/log/create-log.d.ts +2 -2
- package/dist/log/create-log.d.ts.map +1 -1
- package/dist/log/create-log.js +2 -2
- package/dist/log/create-log.js.map +1 -1
- package/dist/log/database-schema.d.ts +33 -0
- package/dist/log/database-schema.d.ts.map +1 -0
- package/dist/log/database-schema.js +14 -0
- package/dist/log/database-schema.js.map +1 -0
- package/dist/log/database-schema.test.d.ts +2 -0
- package/dist/log/database-schema.test.d.ts.map +1 -0
- package/dist/log/database-schema.test.js +22 -0
- package/dist/log/database-schema.test.js.map +1 -0
- package/dist/log/index.d.ts +1 -1
- package/dist/log/index.d.ts.map +1 -1
- package/dist/log/index.js.map +1 -1
- package/dist/log/schema.d.ts +3 -3
- package/dist/log/schema.d.ts.map +1 -1
- package/dist/log/schema.js +4 -5
- package/dist/log/schema.js.map +1 -1
- package/dist/observe/create-observe.d.ts.map +1 -1
- package/dist/observe/create-observe.js +32 -3
- package/dist/observe/create-observe.js.map +1 -1
- package/dist/observe/create-observe.test.js +298 -44
- package/dist/observe/create-observe.test.js.map +1 -1
- package/dist/observe/determine-schema-keys.d.ts +6 -0
- package/dist/observe/determine-schema-keys.d.ts.map +1 -0
- package/dist/observe/determine-schema-keys.js +145 -0
- package/dist/observe/determine-schema-keys.js.map +1 -0
- package/dist/observe/determine-schema-keys.test.d.ts +2 -0
- package/dist/observe/determine-schema-keys.test.d.ts.map +1 -0
- package/dist/observe/determine-schema-keys.test.js +266 -0
- package/dist/observe/determine-schema-keys.test.js.map +1 -0
- package/dist/own-change-control/apply-own-change.d.ts +5 -1
- package/dist/own-change-control/apply-own-change.d.ts.map +1 -1
- package/dist/own-change-control/apply-own-change.js +26 -12
- package/dist/own-change-control/apply-own-change.js.map +1 -1
- package/dist/own-change-control/apply-own-change.test.js +86 -48
- package/dist/own-change-control/apply-own-change.test.js.map +1 -1
- package/dist/own-change-control/change-controlled-tables.d.ts +5 -7
- package/dist/own-change-control/change-controlled-tables.d.ts.map +1 -1
- package/dist/own-change-control/change-controlled-tables.js +27 -21
- package/dist/own-change-control/change-controlled-tables.js.map +1 -1
- package/dist/own-change-control/change-controlled-tables.test.js +35 -5
- package/dist/own-change-control/change-controlled-tables.test.js.map +1 -1
- package/dist/own-change-control/database-triggers.d.ts +2 -1
- package/dist/own-change-control/database-triggers.d.ts.map +1 -1
- package/dist/own-change-control/database-triggers.js +209 -67
- package/dist/own-change-control/database-triggers.js.map +1 -1
- package/dist/own-change-control/database-triggers.test.js +139 -8
- package/dist/own-change-control/database-triggers.test.js.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.d.ts.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.js +28 -6
- package/dist/own-change-control/with-skip-own-change-control.js.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.test.js +38 -1
- package/dist/own-change-control/with-skip-own-change-control.test.js.map +1 -1
- package/dist/plugin/lix-plugin.d.ts +3 -3
- package/dist/plugin/lix-plugin.d.ts.map +1 -1
- package/dist/plugin/load-plugin.d.ts.map +1 -1
- package/dist/plugin/load-plugin.js.map +1 -1
- package/dist/prototype/database-schema.d.ts +43 -0
- package/dist/prototype/database-schema.d.ts.map +1 -0
- package/dist/prototype/database-schema.js +72 -0
- package/dist/prototype/database-schema.js.map +1 -0
- package/dist/prototype/file-handlers.d.ts +24 -0
- package/dist/prototype/file-handlers.d.ts.map +1 -0
- package/dist/prototype/file-handlers.js +129 -0
- package/dist/prototype/file-handlers.js.map +1 -0
- package/dist/prototype/file-schema.d.ts +47 -0
- package/dist/prototype/file-schema.d.ts.map +1 -0
- package/dist/prototype/file-schema.js +135 -0
- package/dist/prototype/file-schema.js.map +1 -0
- package/dist/prototype/file-schema.test.d.ts +2 -0
- package/dist/prototype/file-schema.test.d.ts.map +1 -0
- package/dist/prototype/file-schema.test.js +146 -0
- package/dist/prototype/file-schema.test.js.map +1 -0
- package/dist/prototype/get-and-materialize-row.d.ts +5 -0
- package/dist/prototype/get-and-materialize-row.d.ts.map +1 -0
- package/dist/prototype/get-and-materialize-row.js +99 -0
- package/dist/prototype/get-and-materialize-row.js.map +1 -0
- package/dist/prototype/json-plugin.d.ts +49 -0
- package/dist/prototype/json-plugin.d.ts.map +1 -0
- package/dist/prototype/json-plugin.js +104 -0
- package/dist/prototype/json-plugin.js.map +1 -0
- package/dist/prototype/validate-file-path.d.ts +16 -0
- package/dist/prototype/validate-file-path.d.ts.map +1 -0
- package/dist/prototype/validate-file-path.js +44 -0
- package/dist/prototype/validate-file-path.js.map +1 -0
- package/dist/prototype/validate-file-path.test.d.ts +2 -0
- package/dist/prototype/validate-file-path.test.d.ts.map +1 -0
- package/dist/prototype/validate-file-path.test.js +36 -0
- package/dist/prototype/validate-file-path.test.js.map +1 -0
- package/dist/prototype/version-schema.d.ts +34 -0
- package/dist/prototype/version-schema.d.ts.map +1 -0
- package/dist/prototype/version-schema.js +86 -0
- package/dist/prototype/version-schema.js.map +1 -0
- package/dist/prototype/version-schema.test.d.ts +2 -0
- package/dist/prototype/version-schema.test.d.ts.map +1 -0
- package/dist/prototype/version-schema.test.js +114 -0
- package/dist/prototype/version-schema.test.js.map +1 -0
- package/dist/query-filter/change-conflict-in-version.d.ts +2 -0
- package/dist/query-filter/change-conflict-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-conflict-in-version.js +2 -0
- package/dist/query-filter/change-conflict-in-version.js.map +1 -1
- package/dist/query-filter/change-in-version.d.ts +2 -0
- package/dist/query-filter/change-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-in-version.js +2 -0
- package/dist/query-filter/change-in-version.js.map +1 -1
- package/dist/query-filter/change-is-leaf-in-version.d.ts +1 -0
- package/dist/query-filter/change-is-leaf-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf-in-version.js +1 -0
- package/dist/query-filter/change-is-leaf-in-version.js.map +1 -1
- package/dist/query-filter/change-is-leaf-of.d.ts +2 -0
- package/dist/query-filter/change-is-leaf-of.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf-of.js +2 -0
- package/dist/query-filter/change-is-leaf-of.js.map +1 -1
- package/dist/query-filter/change-is-leaf-v2.d.ts +69 -0
- package/dist/query-filter/change-is-leaf-v2.d.ts.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.js +116 -0
- package/dist/query-filter/change-is-leaf-v2.js.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.test.d.ts +2 -0
- package/dist/query-filter/change-is-leaf-v2.test.d.ts.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.test.js +237 -0
- package/dist/query-filter/change-is-leaf-v2.test.js.map +1 -0
- package/dist/query-filter/change-is-leaf.d.ts +2 -0
- package/dist/query-filter/change-is-leaf.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf.js +2 -0
- package/dist/query-filter/change-is-leaf.js.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts +2 -0
- package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.js +4 -0
- package/dist/query-filter/change-is-lowest-common-ancestor-of.js.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js +5 -3
- package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +10 -10
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.js +22 -17
- package/dist/query-filter/change-set-element-in-ancestry-of.js.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js +99 -26
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts +21 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.js +37 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js +276 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +2 -2
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts +11 -11
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.js +58 -36
- package/dist/query-filter/change-set-element-is-leaf-of.js.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.test.js +83 -24
- package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +1 -1
- package/dist/query-filter/change-set-is-ancestor-of.d.ts +2 -2
- package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-is-ancestor-of.js.map +1 -1
- package/dist/query-filter/change-set-is-descendant-of.d.ts +2 -2
- package/dist/query-filter/change-set-is-descendant-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-is-descendant-of.js.map +1 -1
- package/dist/query-filter/commit-is-ancestor-of.d.ts +51 -0
- package/dist/query-filter/commit-is-ancestor-of.d.ts.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.js +63 -0
- package/dist/query-filter/commit-is-ancestor-of.js.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.test.d.ts +2 -0
- package/dist/query-filter/commit-is-ancestor-of.test.d.ts.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.test.js +292 -0
- package/dist/query-filter/commit-is-ancestor-of.test.js.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.d.ts +44 -0
- package/dist/query-filter/commit-is-descendant-of.d.ts.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.js +56 -0
- package/dist/query-filter/commit-is-descendant-of.js.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.test.d.ts +2 -0
- package/dist/query-filter/commit-is-descendant-of.test.d.ts.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.test.js +325 -0
- package/dist/query-filter/commit-is-descendant-of.test.js.map +1 -0
- package/dist/query-filter/index.d.ts +2 -4
- package/dist/query-filter/index.d.ts.map +1 -1
- package/dist/query-filter/index.js +2 -4
- package/dist/query-filter/index.js.map +1 -1
- package/dist/query-filter/version-change-in-difference.d.ts +2 -0
- package/dist/query-filter/version-change-in-difference.d.ts.map +1 -1
- package/dist/query-filter/version-change-in-difference.js +2 -0
- package/dist/query-filter/version-change-in-difference.js.map +1 -1
- package/dist/query-filter/version-change-in-symmetric-difference.d.ts +2 -0
- package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +1 -1
- package/dist/query-filter/version-change-in-symmetric-difference.js +2 -0
- package/dist/query-filter/version-change-in-symmetric-difference.js.map +1 -1
- package/dist/schema-definition/definition.d.ts +73 -30
- package/dist/schema-definition/definition.d.ts.map +1 -1
- package/dist/schema-definition/definition.js +38 -14
- package/dist/schema-definition/definition.js.map +1 -1
- package/dist/schema-definition/definition.test.js +70 -25
- package/dist/schema-definition/definition.test.js.map +1 -1
- package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -1
- package/dist/schema-definition/validate-lix-schema.js.map +1 -1
- package/dist/schema-definition/validate-lix-schema.test.js +1 -1
- package/dist/schema-definition/validate-lix-schema.test.js.map +1 -1
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +2 -2
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
- package/dist/server-protocol-handler/routes/push-v1.test.js +1 -1
- package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/dist/services/env-variables/index.js.map +1 -1
- package/dist/snapshot/create-snapshot.d.ts +2 -2
- package/dist/snapshot/create-snapshot.d.ts.map +1 -1
- package/dist/snapshot/create-snapshot.test.js +3 -3
- package/dist/snapshot/create-snapshot.test.js.map +1 -1
- package/dist/snapshot/database-schema.d.ts +19 -0
- package/dist/snapshot/database-schema.d.ts.map +1 -0
- package/dist/snapshot/database-schema.js +33 -0
- package/dist/snapshot/database-schema.js.map +1 -0
- package/dist/snapshot/database-schema.test.d.ts +2 -0
- package/dist/snapshot/database-schema.test.d.ts.map +1 -0
- package/dist/snapshot/database-schema.test.js +58 -0
- package/dist/snapshot/database-schema.test.js.map +1 -0
- package/dist/snapshot/schema.d.ts.map +1 -1
- package/dist/snapshot/schema.js +10 -2
- package/dist/snapshot/schema.js.map +1 -1
- package/dist/snapshot/schema.test.js +86 -0
- package/dist/snapshot/schema.test.js.map +1 -1
- package/dist/state/cache/clear-state-cache.d.ts +8 -0
- package/dist/state/cache/clear-state-cache.d.ts.map +1 -0
- package/dist/state/cache/clear-state-cache.js +14 -0
- package/dist/state/cache/clear-state-cache.js.map +1 -0
- package/dist/state/cache/clear-state-cache.test.d.ts +2 -0
- package/dist/state/cache/clear-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/clear-state-cache.test.js +34 -0
- package/dist/state/cache/clear-state-cache.test.js.map +1 -0
- package/dist/state/cache/is-stale-state-cache.d.ts +5 -0
- package/dist/state/cache/is-stale-state-cache.d.ts.map +1 -0
- package/dist/state/cache/is-stale-state-cache.js +22 -0
- package/dist/state/cache/is-stale-state-cache.js.map +1 -0
- package/dist/state/cache/is-stale-state-cache.test.d.ts +2 -0
- package/dist/state/cache/is-stale-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/is-stale-state-cache.test.js +27 -0
- package/dist/state/cache/is-stale-state-cache.test.js.map +1 -0
- package/dist/state/cache/mark-state-cache-as-stale.d.ts +10 -0
- package/dist/state/cache/mark-state-cache-as-stale.d.ts.map +1 -0
- package/dist/state/cache/mark-state-cache-as-stale.js +42 -0
- package/dist/state/cache/mark-state-cache-as-stale.js.map +1 -0
- package/dist/state/cache/populate-state-cache.d.ts +9 -0
- package/dist/state/cache/populate-state-cache.d.ts.map +1 -0
- package/dist/state/cache/populate-state-cache.js +106 -0
- package/dist/state/cache/populate-state-cache.js.map +1 -0
- package/dist/state/cache/populate-state-cache.test.d.ts +2 -0
- package/dist/state/cache/populate-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/populate-state-cache.test.js +204 -0
- package/dist/state/cache/populate-state-cache.test.js.map +1 -0
- package/dist/state/cache/schema.d.ts +20 -0
- package/dist/state/cache/schema.d.ts.map +1 -0
- package/dist/state/cache/schema.js +21 -0
- package/dist/state/cache/schema.js.map +1 -0
- package/dist/state/cache/update-state-cache.d.ts +21 -0
- package/dist/state/cache/update-state-cache.d.ts.map +1 -0
- package/dist/state/cache/update-state-cache.js +294 -0
- package/dist/state/cache/update-state-cache.js.map +1 -0
- package/dist/state/cache/update-state-cache.test.d.ts +2 -0
- package/dist/state/cache/update-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/update-state-cache.test.js +440 -0
- package/dist/state/cache/update-state-cache.test.js.map +1 -0
- package/dist/state/commit.d.ts +18 -0
- package/dist/state/commit.d.ts.map +1 -0
- package/dist/state/commit.js +457 -0
- package/dist/state/commit.js.map +1 -0
- package/dist/state/commit.test.d.ts +2 -0
- package/dist/state/commit.test.d.ts.map +1 -0
- package/dist/state/commit.test.js +1173 -0
- package/dist/state/commit.test.js.map +1 -0
- package/dist/state/get-version-record-by-id-or-throw.d.ts +2 -2
- package/dist/state/get-version-record-by-id-or-throw.d.ts.map +1 -1
- package/dist/state/get-version-record-by-id-or-throw.js.map +1 -1
- package/dist/state/handle-state-mutation.d.ts +0 -12
- package/dist/state/handle-state-mutation.d.ts.map +1 -1
- package/dist/state/handle-state-mutation.js +11 -206
- package/dist/state/handle-state-mutation.js.map +1 -1
- package/dist/state/handle-state-mutation.test.js +213 -159
- package/dist/state/handle-state-mutation.test.js.map +1 -1
- package/dist/state/insert-transaction-state.d.ts +71 -0
- package/dist/state/insert-transaction-state.d.ts.map +1 -0
- package/dist/state/insert-transaction-state.js +272 -0
- package/dist/state/insert-transaction-state.js.map +1 -0
- package/dist/state/insert-transaction-state.test.d.ts +2 -0
- package/dist/state/insert-transaction-state.test.d.ts.map +1 -0
- package/dist/state/insert-transaction-state.test.js +789 -0
- package/dist/state/insert-transaction-state.test.js.map +1 -0
- package/dist/state/materialize-state.d.ts +3 -0
- package/dist/state/materialize-state.d.ts.map +1 -0
- package/dist/state/materialize-state.js +230 -0
- package/dist/state/materialize-state.js.map +1 -0
- package/dist/state/materialize-state.test.d.ts +2 -0
- package/dist/state/materialize-state.test.d.ts.map +1 -0
- package/dist/state/materialize-state.test.js +1934 -0
- package/dist/state/materialize-state.test.js.map +1 -0
- package/dist/state/primary-key.d.ts +39 -0
- package/dist/state/primary-key.d.ts.map +1 -0
- package/dist/state/primary-key.js +62 -0
- package/dist/state/primary-key.js.map +1 -0
- package/dist/state/primary-key.test.d.ts +2 -0
- package/dist/state/primary-key.test.d.ts.map +1 -0
- package/dist/state/primary-key.test.js +114 -0
- package/dist/state/primary-key.test.js.map +1 -0
- package/dist/state/resolved-state-view.d.ts +33 -0
- package/dist/state/resolved-state-view.d.ts.map +1 -0
- package/dist/state/resolved-state-view.js +182 -0
- package/dist/state/resolved-state-view.js.map +1 -0
- package/dist/state/resolved-state-view.test.d.ts +2 -0
- package/dist/state/resolved-state-view.test.d.ts.map +1 -0
- package/dist/state/resolved-state-view.test.js +433 -0
- package/dist/state/resolved-state-view.test.js.map +1 -0
- package/dist/state/schema.d.ts +6 -19
- package/dist/state/schema.d.ts.map +1 -1
- package/dist/state/schema.js +533 -796
- package/dist/state/schema.js.map +1 -1
- package/dist/state/schema.test.js +1684 -1013
- package/dist/state/schema.test.js.map +1 -1
- package/dist/state/untracked/schema.d.ts +25 -0
- package/dist/state/untracked/schema.d.ts.map +1 -0
- package/dist/state/untracked/schema.js +38 -0
- package/dist/state/untracked/schema.js.map +1 -0
- package/dist/state/untracked/schema.test.d.ts +2 -0
- package/dist/state/untracked/schema.test.d.ts.map +1 -0
- package/dist/state/untracked/schema.test.js +275 -0
- package/dist/state/untracked/schema.test.js.map +1 -0
- package/dist/state/untracked/update-untracked-state.d.ts +36 -0
- package/dist/state/untracked/update-untracked-state.d.ts.map +1 -0
- package/dist/state/untracked/update-untracked-state.js +113 -0
- package/dist/state/untracked/update-untracked-state.js.map +1 -0
- package/dist/state/untracked/update-untracked-state.test.d.ts +2 -0
- package/dist/state/untracked/update-untracked-state.test.d.ts.map +1 -0
- package/dist/state/untracked/update-untracked-state.test.js +417 -0
- package/dist/state/untracked/update-untracked-state.test.js.map +1 -0
- package/dist/state/validate-snapshot-content.d.ts +9 -0
- package/dist/state/validate-snapshot-content.d.ts.map +1 -0
- package/dist/state/validate-snapshot-content.js +42 -0
- package/dist/state/validate-snapshot-content.js.map +1 -0
- package/dist/state/validate-snapshot-content.test.d.ts +2 -0
- package/dist/state/validate-snapshot-content.test.d.ts.map +1 -0
- package/dist/state/validate-snapshot-content.test.js +67 -0
- package/dist/state/validate-snapshot-content.test.js.map +1 -0
- package/dist/state/validate-state-mutation.d.ts +2 -2
- package/dist/state/validate-state-mutation.d.ts.map +1 -1
- package/dist/state/validate-state-mutation.js +211 -51
- package/dist/state/validate-state-mutation.js.map +1 -1
- package/dist/state/validate-state-mutation.test.js +910 -75
- package/dist/state/validate-state-mutation.test.js.map +1 -1
- package/dist/state-history/schema.d.ts +29 -19
- package/dist/state-history/schema.d.ts.map +1 -1
- package/dist/state-history/schema.js +49 -37
- package/dist/state-history/schema.js.map +1 -1
- package/dist/state-history/schema.test.js +221 -67
- package/dist/state-history/schema.test.js.map +1 -1
- package/dist/stored-schema/index.d.ts +1 -1
- package/dist/stored-schema/index.d.ts.map +1 -1
- package/dist/stored-schema/index.js +1 -1
- package/dist/stored-schema/index.js.map +1 -1
- package/dist/stored-schema/schema.d.ts +1 -1
- package/dist/stored-schema/schema.d.ts.map +1 -1
- package/dist/stored-schema/schema.test.js.map +1 -1
- package/dist/sync/push-to-server.test.js.map +1 -1
- package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts +8 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.js +79 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js +127 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js.map +1 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts +2 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js +2 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts +10 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js +52 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js +71 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.d.ts +82 -0
- package/dist/test-utilities/simulation-test/simulation-test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.js +85 -0
- package/dist/test-utilities/simulation-test/simulation-test.js.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.js +310 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.js.map +1 -0
- package/dist/thread/comment-utils.d.ts +2 -0
- package/dist/thread/comment-utils.d.ts.map +1 -0
- package/dist/thread/comment-utils.js +2 -0
- package/dist/thread/comment-utils.js.map +1 -0
- package/dist/thread/comment.d.ts +24 -0
- package/dist/thread/comment.d.ts.map +1 -0
- package/dist/thread/comment.js +43 -0
- package/dist/thread/comment.js.map +1 -0
- package/dist/thread/create-thread-comment.d.ts +2 -2
- package/dist/thread/create-thread-comment.d.ts.map +1 -1
- package/dist/thread/create-thread-comment.js +20 -3
- package/dist/thread/create-thread-comment.js.map +1 -1
- package/dist/thread/create-thread-comment.test.js +49 -3
- package/dist/thread/create-thread-comment.test.js.map +1 -1
- package/dist/thread/create-thread.d.ts +18 -4
- package/dist/thread/create-thread.d.ts.map +1 -1
- package/dist/thread/create-thread.js +24 -3
- package/dist/thread/create-thread.js.map +1 -1
- package/dist/thread/create-thread.test.js +149 -0
- package/dist/thread/create-thread.test.js.map +1 -1
- package/dist/thread/database-schema.d.ts +20 -0
- package/dist/thread/database-schema.d.ts.map +1 -0
- package/dist/thread/database-schema.js +57 -0
- package/dist/thread/database-schema.js.map +1 -0
- package/dist/thread/database-schema.test.d.ts +2 -0
- package/dist/thread/database-schema.test.d.ts.map +1 -0
- package/dist/thread/database-schema.test.js +59 -0
- package/dist/thread/database-schema.test.js.map +1 -0
- package/dist/thread/index.d.ts +2 -1
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/schema.d.ts +13 -10
- package/dist/thread/schema.d.ts.map +1 -1
- package/dist/thread/schema.js +20 -14
- package/dist/thread/schema.js.map +1 -1
- package/dist/thread/schema.test.js +65 -0
- package/dist/thread/schema.test.js.map +1 -1
- package/dist/version/create-version.d.ts +14 -9
- package/dist/version/create-version.d.ts.map +1 -1
- package/dist/version/create-version.js +40 -12
- package/dist/version/create-version.js.map +1 -1
- package/dist/version/create-version.test.js +80 -25
- package/dist/version/create-version.test.js.map +1 -1
- package/dist/version/database-schema.d.ts +21 -0
- package/dist/version/database-schema.d.ts.map +1 -0
- package/dist/version/database-schema.js +169 -0
- package/dist/version/database-schema.js.map +1 -0
- package/dist/version/database-schema.test.d.ts +2 -0
- package/dist/version/database-schema.test.d.ts.map +1 -0
- package/dist/version/database-schema.test.js +625 -0
- package/dist/version/database-schema.test.js.map +1 -0
- package/dist/version/index.d.ts +1 -1
- package/dist/version/index.d.ts.map +1 -1
- package/dist/version/merge-version.d.ts +3 -0
- package/dist/version/merge-version.d.ts.map +1 -1
- package/dist/version/merge-version.js +3 -0
- package/dist/version/merge-version.js.map +1 -1
- package/dist/version/merge-version.test.js +10 -5
- package/dist/version/merge-version.test.js.map +1 -1
- package/dist/version/schema.d.ts +28 -23
- package/dist/version/schema.d.ts.map +1 -1
- package/dist/version/schema.js +42 -30
- package/dist/version/schema.js.map +1 -1
- package/dist/version/schema.test.js +311 -88
- package/dist/version/schema.test.js.map +1 -1
- package/dist/version/select-active-version.d.ts +7 -0
- package/dist/version/select-active-version.d.ts.map +1 -0
- package/dist/version/select-active-version.js +7 -0
- package/dist/version/select-active-version.js.map +1 -0
- package/dist/version/switch-version.d.ts +3 -3
- package/dist/version/switch-version.d.ts.map +1 -1
- package/dist/version/switch-version.js +1 -1
- package/dist/version/switch-version.test.js +1 -1
- package/dist/version/switch-version.test.js.map +1 -1
- package/dist/version/update-changes-in-version.d.ts +2 -0
- package/dist/version/update-changes-in-version.d.ts.map +1 -1
- package/dist/version/update-changes-in-version.js +2 -0
- package/dist/version/update-changes-in-version.js.map +1 -1
- package/dist/version-v2/create-version.d.ts +18 -0
- package/dist/version-v2/create-version.d.ts.map +1 -0
- package/dist/version-v2/create-version.js +35 -0
- package/dist/version-v2/create-version.js.map +1 -0
- package/dist/version-v2/create-version.test.d.ts +2 -0
- package/dist/version-v2/create-version.test.d.ts.map +1 -0
- package/dist/version-v2/create-version.test.js +88 -0
- package/dist/version-v2/create-version.test.js.map +1 -0
- package/dist/version-v2/database-schema.d.ts +21 -0
- package/dist/version-v2/database-schema.d.ts.map +1 -0
- package/dist/version-v2/database-schema.js +169 -0
- package/dist/version-v2/database-schema.js.map +1 -0
- package/dist/version-v2/database-schema.test.d.ts +2 -0
- package/dist/version-v2/database-schema.test.d.ts.map +1 -0
- package/dist/version-v2/database-schema.test.js +625 -0
- package/dist/version-v2/database-schema.test.js.map +1 -0
- package/dist/version-v2/index.d.ts +2 -0
- package/dist/version-v2/index.d.ts.map +1 -0
- package/dist/version-v2/index.js +2 -0
- package/dist/version-v2/index.js.map +1 -0
- package/dist/version-v2/swich-version.d.ts +27 -0
- package/dist/version-v2/swich-version.d.ts.map +1 -0
- package/dist/version-v2/swich-version.js +46 -0
- package/dist/version-v2/swich-version.js.map +1 -0
- package/dist/version-v2/switch-version.d.ts +27 -0
- package/dist/version-v2/switch-version.d.ts.map +1 -0
- package/dist/version-v2/switch-version.js +91 -0
- package/dist/version-v2/switch-version.js.map +1 -0
- package/dist/version-v2/switch-version.test.d.ts +2 -0
- package/dist/version-v2/switch-version.test.d.ts.map +1 -0
- package/dist/version-v2/switch-version.test.js +110 -0
- package/dist/version-v2/switch-version.test.js.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.d.ts +3 -0
- package/dist/version-v2/with-skip-update-working-change-set.d.ts.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.js +50 -0
- package/dist/version-v2/with-skip-update-working-change-set.js.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.d.ts +2 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.d.ts.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.js +49 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.js.map +1 -0
- package/package.json +3 -3
- package/src/account/create-account.ts +7 -7
- package/src/account/index.ts +2 -2
- package/src/account/schema.test.ts +99 -99
- package/src/account/schema.ts +91 -35
- package/src/account/switch-account.test.ts +4 -4
- package/src/account/switch-account.ts +6 -6
- package/src/change/index.ts +4 -1
- package/src/change/schema.test.ts +38 -0
- package/src/change/schema.ts +91 -11
- package/src/change-author/index.ts +4 -1
- package/src/change-author/schema.test.ts +306 -242
- package/src/change-author/schema.ts +18 -12
- package/src/change-proposal/create-change-proposal.ts +3 -3
- package/src/change-proposal/database-schema.ts +1 -1
- package/src/change-set/apply-change-set.test.ts +10 -7
- package/src/change-set/apply-change-set.ts +44 -56
- package/src/change-set/create-change-set.test.ts +0 -39
- package/src/change-set/create-change-set.ts +9 -33
- package/src/change-set/index.ts +3 -11
- package/src/change-set/schema.test.ts +0 -310
- package/src/change-set/schema.ts +43 -100
- package/src/commit/apply-commit.test.ts +426 -0
- package/src/commit/apply-commit.ts +74 -0
- package/src/{change-set → commit}/create-checkpoint.test.ts +244 -26
- package/src/commit/create-checkpoint.ts +140 -0
- package/src/commit/create-commit.ts +80 -0
- package/src/{change-set/create-merge-change-set.test.ts → commit/create-merge-commit.test.ts} +50 -19
- package/src/{change-set/create-merge-change-set.ts → commit/create-merge-commit.ts} +55 -16
- package/src/{change-set/create-transition-change-set.test.ts → commit/create-transition-commit.test.ts} +43 -32
- package/src/{change-set/create-transition-change-set.ts → commit/create-transition-commit.ts} +60 -22
- package/src/{change-set/create-undo-change-set.test.ts → commit/create-undo-commit.test.ts} +52 -23
- package/src/{change-set/create-undo-change-set.ts → commit/create-undo-commit.ts} +59 -26
- package/src/commit/index.ts +11 -0
- package/src/commit/schema.test.ts +257 -0
- package/src/commit/schema.ts +104 -0
- package/src/database/index.ts +0 -2
- package/src/database/init-db.ts +113 -45
- package/src/database/kysely-plugin/json-column-plugin.test.ts +404 -0
- package/src/database/kysely-plugin/json-column-plugin.ts +80 -15
- package/src/database/nano-id.test.ts +3 -3
- package/src/database/nano-id.ts +4 -1
- package/src/database/schema.ts +26 -24
- package/src/deterministic/generate-human-id.test.ts +154 -0
- package/src/deterministic/generate-human-id.ts +94 -0
- package/src/deterministic/index.ts +7 -0
- package/src/deterministic/is-deterministic-mode.test.ts +133 -0
- package/src/deterministic/is-deterministic-mode.ts +32 -0
- package/src/deterministic/nano-id.test.ts +200 -0
- package/src/deterministic/nano-id.ts +188 -0
- package/src/deterministic/options.test.ts +157 -0
- package/src/deterministic/options.ts +62 -0
- package/src/deterministic/random.test.ts +293 -0
- package/src/deterministic/random.ts +261 -0
- package/src/deterministic/sequence.test.ts +93 -0
- package/src/deterministic/sequence.ts +132 -0
- package/src/deterministic/timestamp.test.ts +170 -0
- package/src/deterministic/timestamp.ts +83 -0
- package/src/deterministic/uuid-v7.test.ts +144 -0
- package/src/deterministic/uuid-v7.ts +82 -0
- package/src/entity/eb-entity.test.ts +687 -0
- package/src/entity/eb-entity.ts +203 -0
- package/src/entity/index.ts +12 -0
- package/src/entity/label/create-entity-label.test.ts +316 -0
- package/src/entity/label/create-entity-label.ts +113 -0
- package/src/entity/label/schema.test.ts +692 -0
- package/src/entity/label/schema.ts +55 -0
- package/src/entity/schema.ts +22 -0
- package/src/entity/thread/create-entity-thread.test.ts +282 -0
- package/src/entity/thread/create-entity-thread.ts +134 -0
- package/src/entity/thread/query-threads.test.ts +394 -0
- package/src/entity/thread/schema.test.ts +170 -0
- package/src/entity/thread/schema.ts +55 -0
- package/src/entity-views/README.md +214 -0
- package/src/entity-views/entity-state-all.test.ts +202 -0
- package/src/entity-views/entity-state-all.ts +80 -11
- package/src/entity-views/entity-state-history.test.ts +78 -16
- package/src/entity-views/entity-state-history.ts +68 -19
- package/src/entity-views/entity-state.test.ts +141 -1
- package/src/entity-views/entity-state.ts +79 -10
- package/src/entity-views/entity-view-builder.test.ts +6 -6
- package/src/entity-views/types.ts +2 -2
- package/src/file/file-handlers.test.ts +4 -4
- package/src/file/file-handlers.ts +40 -0
- package/src/file/materialize-file-data-at-commit.ts +157 -0
- package/src/file/schema.test.ts +693 -37
- package/src/file/schema.ts +183 -56
- package/src/hooks/create-hooks.ts +7 -40
- package/src/index.ts +3 -0
- package/src/key-value/index.ts +1 -1
- package/src/key-value/schema.test.ts +103 -2
- package/src/key-value/schema.ts +66 -5
- package/src/label/create-label.ts +7 -7
- package/src/label/index.ts +1 -1
- package/src/label/schema.ts +7 -10
- package/src/lix/new-lix.test.ts +202 -2
- package/src/lix/new-lix.ts +305 -81
- package/src/lix/open-lix.test.ts +308 -5
- package/src/lix/open-lix.ts +169 -68
- package/src/lix/storage/in-memory.test.ts +9 -83
- package/src/lix/storage/in-memory.ts +13 -18
- package/src/lix/storage/lix-storage-adapter.ts +41 -5
- package/src/lix/storage/opfs.test.ts +254 -31
- package/src/lix/storage/opfs.ts +178 -40
- package/src/log/create-lix-own-log.test.ts +11 -7
- package/src/log/create-lix-own-log.ts +21 -32
- package/src/log/create-log.ts +4 -4
- package/src/log/index.ts +1 -1
- package/src/log/schema.ts +6 -10
- package/src/observe/create-observe.test.ts +395 -60
- package/src/observe/create-observe.ts +41 -3
- package/src/observe/determine-schema-keys.test.ts +371 -0
- package/src/observe/determine-schema-keys.ts +165 -0
- package/src/plugin/lix-plugin.ts +3 -3
- package/src/query-filter/change-set-element-in-ancestry-of.test.ts +112 -26
- package/src/query-filter/change-set-element-in-ancestry-of.ts +25 -20
- package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +6 -6
- package/src/query-filter/change-set-element-in-symmetric-difference.ts +3 -3
- package/src/query-filter/change-set-element-is-leaf-of.test.ts +83 -24
- package/src/query-filter/change-set-element-is-leaf-of.ts +61 -39
- package/src/query-filter/commit-is-ancestor-of.test.ts +333 -0
- package/src/query-filter/commit-is-ancestor-of.ts +77 -0
- package/src/query-filter/commit-is-descendant-of.test.ts +365 -0
- package/src/query-filter/commit-is-descendant-of.ts +70 -0
- package/src/query-filter/index.ts +2 -4
- package/src/schema-definition/definition.test.ts +73 -25
- package/src/schema-definition/definition.ts +87 -30
- package/src/schema-definition/index.ts +1 -1
- package/src/schema-definition/validate-lix-schema.test.ts +14 -5
- package/src/schema-definition/validate-lix-schema.ts +9 -13
- package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +2 -2
- package/src/server-protocol-handler/routes/push-v1.test.ts +1 -1
- package/src/snapshot/schema.test.ts +113 -0
- package/src/snapshot/schema.ts +10 -2
- package/src/state/README.md +95 -0
- package/src/state/cache/clear-state-cache.test.ts +43 -0
- package/src/state/cache/clear-state-cache.ts +16 -0
- package/src/state/cache/is-stale-state-cache.test.ts +35 -0
- package/src/state/cache/is-stale-state-cache.ts +29 -0
- package/src/state/cache/mark-state-cache-as-stale.ts +53 -0
- package/src/state/cache/populate-state-cache.test.ts +259 -0
- package/src/state/cache/populate-state-cache.ts +124 -0
- package/src/state/cache/schema.ts +41 -0
- package/src/state/cache/update-state-cache.test.ts +510 -0
- package/src/state/cache/update-state-cache.ts +317 -0
- package/src/state/commit.test.ts +1402 -0
- package/src/state/commit.ts +587 -0
- package/src/state/insert-transaction-state.test.ts +928 -0
- package/src/state/insert-transaction-state.ts +306 -0
- package/src/state/materialize-state.test.ts +2358 -0
- package/src/state/materialize-state.ts +235 -0
- package/src/state/primary-key.test.ts +158 -0
- package/src/state/primary-key.ts +80 -0
- package/src/state/resolved-state-view.test.ts +521 -0
- package/src/state/resolved-state-view.ts +202 -0
- package/src/state/schema.test.ts +3116 -2272
- package/src/state/schema.ts +614 -910
- package/src/state/untracked/schema.test.ts +301 -0
- package/src/state/untracked/schema.ts +55 -0
- package/src/state/untracked/update-untracked-state.test.ts +466 -0
- package/src/state/untracked/update-untracked-state.ts +133 -0
- package/src/state/validate-state-mutation.test.ts +1032 -77
- package/src/state/validate-state-mutation.ts +270 -68
- package/src/state-history/schema.test.ts +246 -71
- package/src/state-history/schema.ts +78 -55
- package/src/stored-schema/index.ts +4 -1
- package/src/stored-schema/schema.test.ts +7 -7
- package/src/stored-schema/schema.ts +1 -1
- package/src/sync/push-to-server.test.ts +6 -6
- package/src/test-utilities/simulation-test/cache-miss-simulation.test.ts +162 -0
- package/src/test-utilities/simulation-test/cache-miss-simulation.ts +99 -0
- package/src/test-utilities/simulation-test/chaotic-timestamp-simulation.ts +0 -0
- package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.test.ts +88 -0
- package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.ts +69 -0
- package/src/test-utilities/simulation-test/simulation-test.test.ts +400 -0
- package/src/test-utilities/simulation-test/simulation-test.ts +176 -0
- package/src/thread/create-thread-comment.test.ts +62 -3
- package/src/thread/create-thread-comment.ts +34 -6
- package/src/thread/create-thread.test.ts +180 -0
- package/src/thread/create-thread.ts +32 -7
- package/src/thread/index.ts +3 -2
- package/src/thread/schema.test.ts +81 -0
- package/src/thread/schema.ts +24 -19
- package/src/version/create-version.test.ts +92 -26
- package/src/version/create-version.ts +49 -19
- package/src/version/index.ts +2 -2
- package/src/version/schema.test.ts +328 -92
- package/src/version/schema.ts +47 -33
- package/src/version/select-active-version.ts +18 -0
- package/src/version/switch-version.test.ts +1 -1
- package/src/version/switch-version.ts +3 -3
- package/dist/entity-views/entity-state_history.d.ts +0 -67
- package/dist/entity-views/entity-state_history.d.ts.map +0 -1
- package/dist/entity-views/entity-state_history.js +0 -58
- package/dist/entity-views/entity-state_history.js.map +0 -1
- package/dist/entity-views/generic-types.d.ts +0 -128
- package/dist/entity-views/generic-types.d.ts.map +0 -1
- package/dist/entity-views/generic-types.js +0 -2
- package/dist/entity-views/generic-types.js.map +0 -1
- package/dist/entity-views/generic-types.test.d.ts +0 -2
- package/dist/entity-views/generic-types.test.d.ts.map +0 -1
- package/dist/entity-views/generic-types.test.js +0 -99
- package/dist/entity-views/generic-types.test.js.map +0 -1
- package/dist/lix/to-blob.test.d.ts +0 -2
- package/dist/lix/to-blob.test.d.ts.map +0 -1
- package/dist/lix/to-blob.test.js +0 -18
- package/dist/lix/to-blob.test.js.map +0 -1
- package/dist/repository/comparison-example.js +0 -173
- package/dist/repository/comparison-example.js.map +0 -1
- package/dist/repository/entity-repository.d.ts +0 -53
- package/dist/repository/entity-repository.d.ts.map +0 -1
- package/dist/repository/entity-repository.js +0 -187
- package/dist/repository/entity-repository.js.map +0 -1
- package/dist/repository/entity-repository.test.d.ts +0 -2
- package/dist/repository/entity-repository.test.d.ts.map +0 -1
- package/dist/repository/entity-repository.test.js +0 -94
- package/dist/repository/entity-repository.test.js.map +0 -1
- package/dist/repository/example.d.ts +0 -6
- package/dist/repository/example.d.ts.map +0 -1
- package/dist/repository/example.js +0 -87
- package/dist/repository/example.js.map +0 -1
- package/dist/repository/file-repository.d.ts +0 -39
- package/dist/repository/file-repository.d.ts.map +0 -1
- package/dist/repository/file-repository.js +0 -93
- package/dist/repository/file-repository.js.map +0 -1
- package/dist/repository/file-repository.test.d.ts +0 -2
- package/dist/repository/file-repository.test.d.ts.map +0 -1
- package/dist/repository/file-repository.test.js +0 -165
- package/dist/repository/file-repository.test.js.map +0 -1
- package/dist/repository/index.d.ts +0 -6
- package/dist/repository/index.d.ts.map +0 -1
- package/dist/repository/index.js +0 -6
- package/dist/repository/index.js.map +0 -1
- package/dist/repository/integration.test.d.ts +0 -2
- package/dist/repository/integration.test.d.ts.map +0 -1
- package/dist/repository/integration.test.js +0 -136
- package/dist/repository/integration.test.js.map +0 -1
- package/dist/repository/key-value-repository.d.ts +0 -30
- package/dist/repository/key-value-repository.d.ts.map +0 -1
- package/dist/repository/key-value-repository.js +0 -60
- package/dist/repository/key-value-repository.js.map +0 -1
- package/dist/repository/key-value-repository.test.d.ts +0 -2
- package/dist/repository/key-value-repository.test.d.ts.map +0 -1
- package/dist/repository/key-value-repository.test.js +0 -122
- package/dist/repository/key-value-repository.test.js.map +0 -1
- package/dist/repository/markdown-plugin-example.js +0 -118
- package/dist/repository/markdown-plugin-example.js.map +0 -1
- package/dist/repository/query-builder.d.ts +0 -69
- package/dist/repository/query-builder.d.ts.map +0 -1
- package/dist/repository/query-builder.js +0 -155
- package/dist/repository/query-builder.js.map +0 -1
- package/dist/repository/query-builder.test.d.ts +0 -2
- package/dist/repository/query-builder.test.d.ts.map +0 -1
- package/dist/repository/query-builder.test.js +0 -244
- package/dist/repository/query-builder.test.js.map +0 -1
- package/dist/repository/repository-manager.d.ts +0 -27
- package/dist/repository/repository-manager.d.ts.map +0 -1
- package/dist/repository/repository-manager.js +0 -19
- package/dist/repository/repository-manager.js.map +0 -1
- package/dist/repository/repository-manager.test.d.ts +0 -2
- package/dist/repository/repository-manager.test.d.ts.map +0 -1
- package/dist/repository/repository-manager.test.js +0 -65
- package/dist/repository/repository-manager.test.js.map +0 -1
- package/dist/repository/test-helpers.js +0 -402
- package/dist/repository/test-helpers.js.map +0 -1
- package/dist/schema-definition/lix-generated.test.d.ts +0 -2
- package/dist/schema-definition/lix-generated.test.d.ts.map +0 -1
- package/dist/schema-definition/lix-generated.test.js +0 -127
- package/dist/schema-definition/lix-generated.test.js.map +0 -1
- package/dist/state/entity-view-builder.d.ts +0 -145
- package/dist/state/entity-view-builder.d.ts.map +0 -1
- package/dist/state/entity-view-builder.js +0 -280
- package/dist/state/entity-view-builder.js.map +0 -1
- package/dist/state/entity-view-builder.test.d.ts +0 -2
- package/dist/state/entity-view-builder.test.d.ts.map +0 -1
- package/dist/state/entity-view-builder.test.js +0 -523
- package/dist/state/entity-view-builder.test.js.map +0 -1
- package/src/change-set/create-checkpoint.ts +0 -101
- package/src/file/materialize-file-data-at-changeset.ts +0 -123
- package/src/query-filter/change-has-label.test.ts +0 -79
- package/src/query-filter/change-has-label.ts +0 -45
- package/src/query-filter/change-set-has-label.test.ts +0 -42
- package/src/query-filter/change-set-has-label.ts +0 -50
- package/src/query-filter/change-set-is-ancestor-of.test.ts +0 -178
- package/src/query-filter/change-set-is-ancestor-of.ts +0 -77
- package/src/query-filter/change-set-is-descendant-of.test.ts +0 -169
- package/src/query-filter/change-set-is-descendant-of.ts +0 -70
- package/src/state/create-changeset-for-transaction.ts +0 -321
- package/src/state/get-version-record-by-id-or-throw.ts +0 -51
- package/src/state/handle-state-mutation.test.ts +0 -761
- package/src/state/handle-state-mutation.ts +0 -418
package/dist/state/schema.js
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
import { validateStateMutation } from "./validate-state-mutation.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { sql } from "kysely";
|
|
3
|
+
import { insertTransactionState } from "./insert-transaction-state.js";
|
|
4
|
+
import { executeSync } from "../database/execute-sync.js";
|
|
5
|
+
import { applyMaterializeStateSchema } from "./materialize-state.js";
|
|
6
|
+
import { applyResolvedStateView } from "./resolved-state-view.js";
|
|
7
|
+
import { applyStateCacheSchema } from "./cache/schema.js";
|
|
8
|
+
import { isStaleStateCache } from "./cache/is-stale-state-cache.js";
|
|
9
|
+
import { markStateCacheAsFresh } from "./cache/mark-state-cache-as-stale.js";
|
|
10
|
+
import { applyUntrackedStateSchema } from "./untracked/schema.js";
|
|
11
|
+
import { commit } from "./commit.js";
|
|
12
|
+
import { parseStatePk, serializeStatePk } from "./primary-key.js";
|
|
13
|
+
import { uuidV7 } from "../deterministic/uuid-v7.js";
|
|
14
|
+
import { LixLogSchema } from "../log/schema.js";
|
|
15
|
+
import { shouldLog } from "../log/create-lix-own-log.js";
|
|
16
|
+
import { populateStateCache } from "./cache/populate-state-cache.js";
|
|
17
|
+
// import { createLixOwnLogSync } from "../log/create-lix-own-log.js";
|
|
18
|
+
// Virtual table schema definition
|
|
19
|
+
const VTAB_CREATE_SQL = `CREATE TABLE x(
|
|
20
|
+
_pk HIDDEN TEXT NOT NULL PRIMARY KEY,
|
|
21
|
+
entity_id TEXT,
|
|
22
|
+
schema_key TEXT,
|
|
23
|
+
file_id TEXT,
|
|
24
|
+
version_id TEXT,
|
|
25
|
+
plugin_key TEXT,
|
|
26
|
+
snapshot_content TEXT,
|
|
27
|
+
schema_version TEXT,
|
|
28
|
+
created_at TEXT,
|
|
29
|
+
updated_at TEXT,
|
|
30
|
+
inherited_from_version_id TEXT,
|
|
31
|
+
change_id TEXT,
|
|
32
|
+
untracked INTEGER,
|
|
33
|
+
commit_id TEXT
|
|
34
|
+
) WITHOUT ROWID;`;
|
|
5
35
|
export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
36
|
+
applyMaterializeStateSchema(sqlite);
|
|
37
|
+
applyStateCacheSchema({ sqlite });
|
|
38
|
+
applyUntrackedStateSchema({ sqlite });
|
|
39
|
+
applyResolvedStateView({ sqlite, db });
|
|
6
40
|
sqlite.createFunction({
|
|
7
41
|
name: "validate_snapshot_content",
|
|
8
42
|
deterministic: true,
|
|
@@ -24,196 +58,72 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
24
58
|
const module = new capi.sqlite3_module();
|
|
25
59
|
// Store cursor state
|
|
26
60
|
const cursorStates = new Map();
|
|
27
|
-
//
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return loggingInitialized;
|
|
43
|
-
};
|
|
44
|
-
const create_temp_change_table_sql = `
|
|
45
|
-
-- add a table we use within the transaction
|
|
46
|
-
CREATE TEMP TABLE IF NOT EXISTS internal_change_in_transaction (
|
|
47
|
-
id TEXT PRIMARY KEY DEFAULT (uuid_v7()),
|
|
48
|
-
entity_id TEXT NOT NULL,
|
|
49
|
-
schema_key TEXT NOT NULL,
|
|
50
|
-
schema_version TEXT NOT NULL,
|
|
51
|
-
file_id TEXT NOT NULL,
|
|
52
|
-
plugin_key TEXT NOT NULL,
|
|
53
|
-
version_id TEXT NOT NULL,
|
|
54
|
-
snapshot_content BLOB,
|
|
55
|
-
created_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (created_at LIKE '%Z'),
|
|
56
|
-
--- NOTE schena_key must be unique per entity_id and file_id
|
|
57
|
-
UNIQUE(entity_id, file_id, schema_key, version_id)
|
|
58
|
-
) STRICT;
|
|
59
|
-
|
|
60
|
-
`;
|
|
61
|
-
sqlite.exec(create_temp_change_table_sql);
|
|
61
|
+
// Guard flag to prevent recursion when logging
|
|
62
|
+
let loggingIsInProgress = false;
|
|
63
|
+
/**
|
|
64
|
+
* Flag to prevent recursion when updating cache state.
|
|
65
|
+
*
|
|
66
|
+
* The guard ensures that while we're marking cache as fresh, any nested state queries
|
|
67
|
+
* bypass the cache and use materialized state directly, preventing recursion.
|
|
68
|
+
*
|
|
69
|
+
* Why is this needed is unclear. Queries are executed in sync. Why concurrent
|
|
70
|
+
* reads simultaneously update the cache is not clear. Given that state
|
|
71
|
+
* materialization is rare, this workaround has been deemed sufficient.
|
|
72
|
+
*
|
|
73
|
+
* This is a temporary fix and should be revisited in the future.
|
|
74
|
+
*/
|
|
75
|
+
let isUpdatingCacheState = false;
|
|
62
76
|
module.installMethods({
|
|
63
|
-
xCreate: (
|
|
64
|
-
const
|
|
65
|
-
entity_id TEXT,
|
|
66
|
-
schema_key TEXT,
|
|
67
|
-
file_id TEXT,
|
|
68
|
-
version_id TEXT,
|
|
69
|
-
plugin_key TEXT,
|
|
70
|
-
snapshot_content TEXT,
|
|
71
|
-
schema_version TEXT,
|
|
72
|
-
created_at TEXT,
|
|
73
|
-
updated_at TEXT,
|
|
74
|
-
inherited_from_version_id TEXT,
|
|
75
|
-
change_id TEXT,
|
|
76
|
-
untracked INTEGER
|
|
77
|
-
)`;
|
|
78
|
-
const result = capi.sqlite3_declare_vtab(db, sql);
|
|
77
|
+
xCreate: (dbHandle, _pAux, _argc, _argv, pVTab) => {
|
|
78
|
+
const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
|
|
79
79
|
if (result !== capi.SQLITE_OK) {
|
|
80
80
|
return result;
|
|
81
81
|
}
|
|
82
82
|
sqlite.sqlite3.vtab.xVtab.create(pVTab);
|
|
83
83
|
return capi.SQLITE_OK;
|
|
84
84
|
},
|
|
85
|
-
xConnect: (
|
|
86
|
-
const
|
|
87
|
-
entity_id TEXT,
|
|
88
|
-
schema_key TEXT,
|
|
89
|
-
file_id TEXT,
|
|
90
|
-
version_id TEXT,
|
|
91
|
-
plugin_key TEXT,
|
|
92
|
-
snapshot_content TEXT,
|
|
93
|
-
schema_version TEXT,
|
|
94
|
-
created_at TEXT,
|
|
95
|
-
updated_at TEXT,
|
|
96
|
-
inherited_from_version_id TEXT,
|
|
97
|
-
change_id TEXT,
|
|
98
|
-
untracked INTEGER
|
|
99
|
-
)`;
|
|
100
|
-
const result = capi.sqlite3_declare_vtab(db, sql);
|
|
85
|
+
xConnect: (dbHandle, _pAux, _argc, _argv, pVTab) => {
|
|
86
|
+
const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
|
|
101
87
|
if (result !== capi.SQLITE_OK) {
|
|
102
88
|
return result;
|
|
103
89
|
}
|
|
90
|
+
// wiping all rows on connect simulates a temp table for internal_change_in_transaction.
|
|
91
|
+
// we need to clear any existing changes on connect in case a transaction remained open.
|
|
92
|
+
// otherwise, the lix can't boot up properly and will throw an error.
|
|
93
|
+
//
|
|
94
|
+
// an open transaction can happen if the storage layer crashes or is not properly shut down.
|
|
95
|
+
//
|
|
96
|
+
// PS internal_change_in_transaction is not a temp table because sqlite
|
|
97
|
+
// prohibits access to temp tables from virtual tables
|
|
98
|
+
executeSync({
|
|
99
|
+
lix: { sqlite },
|
|
100
|
+
query: db.deleteFrom("internal_change_in_transaction"),
|
|
101
|
+
});
|
|
104
102
|
sqlite.sqlite3.vtab.xVtab.create(pVTab);
|
|
105
103
|
return capi.SQLITE_OK;
|
|
106
104
|
},
|
|
107
105
|
xBegin: () => {
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
106
|
+
// TODO comment in after all internal v-table logic uses underlying state view
|
|
107
|
+
// // assert that we are not already in a transaction (the internal_change_in_transaction table is empty)
|
|
108
|
+
// const existingChangesInTransaction = executeSync({
|
|
109
|
+
// lix: { sqlite },
|
|
110
|
+
// query: db.selectFrom("internal_change_in_transaction").selectAll(),
|
|
111
|
+
// });
|
|
112
|
+
// if (existingChangesInTransaction.length > 0) {
|
|
113
|
+
// const errorMessage = "Transaction already in progress";
|
|
114
|
+
// if (canLog()) {
|
|
115
|
+
// createLixOwnLogSync({
|
|
116
|
+
// lix: { sqlite, db: db as any },
|
|
117
|
+
// key: "lix_state_xbegin_error",
|
|
118
|
+
// level: "error",
|
|
119
|
+
// message: `xBegin error: ${errorMessage}`,
|
|
120
|
+
// });
|
|
121
|
+
// }
|
|
122
|
+
// throw new Error(errorMessage);
|
|
123
|
+
// }
|
|
124
124
|
},
|
|
125
125
|
xCommit: () => {
|
|
126
|
-
|
|
127
|
-
// Insert each row from internal_change_in_transaction into internal_snapshot and internal_change,
|
|
128
|
-
// using the same id for snapshot_id in internal_change as in internal_snapshot.
|
|
129
|
-
const changesWithoutChangeSets = sqlite.exec({
|
|
130
|
-
sql: `
|
|
131
|
-
SELECT
|
|
132
|
-
id,
|
|
133
|
-
entity_id,
|
|
134
|
-
schema_key,
|
|
135
|
-
schema_version,
|
|
136
|
-
file_id,
|
|
137
|
-
plugin_key,
|
|
138
|
-
version_id,
|
|
139
|
-
CASE
|
|
140
|
-
WHEN snapshot_content IS NOT NULL THEN json(snapshot_content)
|
|
141
|
-
ELSE NULL
|
|
142
|
-
END as snapshot_content,
|
|
143
|
-
created_at
|
|
144
|
-
FROM internal_change_in_transaction
|
|
145
|
-
ORDER BY version_id
|
|
146
|
-
`,
|
|
147
|
-
returnValue: "resultRows",
|
|
148
|
-
});
|
|
149
|
-
// Group changes by version_id
|
|
150
|
-
const changesByVersion = new Map();
|
|
151
|
-
for (const changeWithoutChangeset of changesWithoutChangeSets) {
|
|
152
|
-
const version_id = changeWithoutChangeset[6];
|
|
153
|
-
if (!changesByVersion.has(version_id)) {
|
|
154
|
-
changesByVersion.set(version_id, []);
|
|
155
|
-
}
|
|
156
|
-
changesByVersion.get(version_id).push({
|
|
157
|
-
id: changeWithoutChangeset[0],
|
|
158
|
-
entity_id: changeWithoutChangeset[1],
|
|
159
|
-
schema_key: changeWithoutChangeset[2],
|
|
160
|
-
schema_version: changeWithoutChangeset[3],
|
|
161
|
-
file_id: changeWithoutChangeset[4],
|
|
162
|
-
plugin_key: changeWithoutChangeset[5],
|
|
163
|
-
snapshot_content: changeWithoutChangeset[7],
|
|
164
|
-
created_at: changeWithoutChangeset[8],
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
// Process each version's changes to create changesets
|
|
168
|
-
for (const [version_id, versionChanges] of changesByVersion) {
|
|
169
|
-
// Create changeset and edges for this version's transaction
|
|
170
|
-
createChangesetForTransaction(sqlite, db, currentTime, version_id, versionChanges);
|
|
171
|
-
}
|
|
172
|
-
const changesToRealize = sqlite.exec({
|
|
173
|
-
sql: "SELECT id, entity_id, schema_key, schema_version, file_id, plugin_key, version_id, snapshot_content, created_at FROM internal_change_in_transaction ORDER BY version_id",
|
|
174
|
-
returnValue: "resultRows",
|
|
175
|
-
});
|
|
176
|
-
for (const changeToRealize of changesToRealize) {
|
|
177
|
-
const [id, entity_id, schema_key, schema_version, file_id, plugin_key,
|
|
178
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
179
|
-
version_id, snapshot_content, created_at,] = changeToRealize;
|
|
180
|
-
let snapshot_id = "no-content";
|
|
181
|
-
if (snapshot_content) {
|
|
182
|
-
// Insert into internal_snapshot
|
|
183
|
-
const result = sqlite.exec({
|
|
184
|
-
sql: `INSERT OR IGNORE INTO internal_snapshot (content) VALUES (?) RETURNING id`,
|
|
185
|
-
bind: [snapshot_content],
|
|
186
|
-
returnValue: "resultRows",
|
|
187
|
-
});
|
|
188
|
-
// Get the 'id' column of the newly created row
|
|
189
|
-
if (result && result.length > 0) {
|
|
190
|
-
snapshot_id = result[0][0]; // assuming 'id' is the first column
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// Insert into internal_change
|
|
194
|
-
sqlite.exec({
|
|
195
|
-
sql: `INSERT INTO internal_change (id, entity_id, schema_key, schema_version, file_id, plugin_key, snapshot_id, created_at)
|
|
196
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
197
|
-
bind: [
|
|
198
|
-
id,
|
|
199
|
-
entity_id,
|
|
200
|
-
schema_key,
|
|
201
|
-
schema_version,
|
|
202
|
-
file_id,
|
|
203
|
-
plugin_key,
|
|
204
|
-
snapshot_id,
|
|
205
|
-
created_at,
|
|
206
|
-
],
|
|
207
|
-
returnValue: "resultRows",
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
sqlite.exec({
|
|
211
|
-
sql: "DELETE FROM internal_change_in_transaction",
|
|
212
|
-
returnValue: "resultRows",
|
|
213
|
-
});
|
|
214
|
-
// Emit state commit hook after transaction is successfully committed
|
|
215
|
-
hooks._emit("state_commit");
|
|
216
|
-
return capi.SQLITE_OK;
|
|
126
|
+
return commit({ lix: { sqlite, db: db, hooks } });
|
|
217
127
|
},
|
|
218
128
|
xRollback: () => {
|
|
219
129
|
sqlite.exec({
|
|
@@ -221,7 +131,70 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
221
131
|
returnValue: "resultRows",
|
|
222
132
|
});
|
|
223
133
|
},
|
|
224
|
-
xBestIndex: () => {
|
|
134
|
+
xBestIndex: (pVTab, pIdxInfo) => {
|
|
135
|
+
const idxInfo = sqlite.sqlite3.vtab.xIndexInfo(pIdxInfo);
|
|
136
|
+
// Track which columns have equality constraints
|
|
137
|
+
const usableConstraints = [];
|
|
138
|
+
let argIndex = 0;
|
|
139
|
+
// Column mapping (matching the CREATE TABLE order in xCreate/xConnect)
|
|
140
|
+
const columnMap = [
|
|
141
|
+
"_pk", // 0 (HIDDEN column)
|
|
142
|
+
"entity_id", // 1
|
|
143
|
+
"schema_key", // 2
|
|
144
|
+
"file_id", // 3
|
|
145
|
+
"version_id", // 4
|
|
146
|
+
"plugin_key", // 5
|
|
147
|
+
"snapshot_content", // 6
|
|
148
|
+
"schema_version", // 7
|
|
149
|
+
"created_at", // 8
|
|
150
|
+
"updated_at", // 9
|
|
151
|
+
"inherited_from_version_id", // 10
|
|
152
|
+
"change_id", // 11
|
|
153
|
+
"untracked", // 12
|
|
154
|
+
"commit_id", // 13
|
|
155
|
+
];
|
|
156
|
+
// Process constraints
|
|
157
|
+
// @ts-expect-error - idxInfo.$nConstraint is not defined in the type
|
|
158
|
+
for (let i = 0; i < idxInfo.$nConstraint; i++) {
|
|
159
|
+
// @ts-expect-error - idxInfo.nthConstraint is not defined in the type
|
|
160
|
+
const constraint = idxInfo.nthConstraint(i);
|
|
161
|
+
// Only handle equality constraints that are usable
|
|
162
|
+
if (constraint.$op === capi.SQLITE_INDEX_CONSTRAINT_EQ &&
|
|
163
|
+
constraint.$usable) {
|
|
164
|
+
const columnName = columnMap[constraint.$iColumn];
|
|
165
|
+
if (columnName) {
|
|
166
|
+
usableConstraints.push(columnName);
|
|
167
|
+
// Mark this constraint as used
|
|
168
|
+
// @ts-expect-error - idxInfo.nthConstraintUsage is not defined in the type
|
|
169
|
+
idxInfo.nthConstraintUsage(i).$argvIndex = ++argIndex;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const fullTableCost = 1000000; // Default cost for full table scan
|
|
174
|
+
const fullTableRows = 10000000;
|
|
175
|
+
// Set the index string to pass column names to xFilter
|
|
176
|
+
if (usableConstraints.length > 0) {
|
|
177
|
+
const idxStr = usableConstraints.join(",");
|
|
178
|
+
// @ts-expect-error - idxInfo.$idxStr is not defined in the type
|
|
179
|
+
idxInfo.$idxStr = sqlite.sqlite3.wasm.allocCString(idxStr, false);
|
|
180
|
+
// @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
|
|
181
|
+
idxInfo.$needToFreeIdxStr = 1; // We don't need SQLite to free this string
|
|
182
|
+
// Lower cost when we can use filters (more selective)
|
|
183
|
+
// @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
|
|
184
|
+
idxInfo.$estimatedCost =
|
|
185
|
+
fullTableCost / (usableConstraints.length + 1);
|
|
186
|
+
// @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
|
|
187
|
+
idxInfo.$estimatedRows = Math.ceil(fullTableRows / (usableConstraints.length + 1));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
|
|
191
|
+
idxInfo.$needToFreeIdxStr = 0;
|
|
192
|
+
// Higher cost for full table scan
|
|
193
|
+
// @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
|
|
194
|
+
idxInfo.$estimatedCost = fullTableCost;
|
|
195
|
+
// @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
|
|
196
|
+
idxInfo.$estimatedRows = fullTableRows;
|
|
197
|
+
}
|
|
225
198
|
return capi.SQLITE_OK;
|
|
226
199
|
},
|
|
227
200
|
xDisconnect: () => {
|
|
@@ -242,235 +215,115 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
242
215
|
cursorStates.delete(pCursor);
|
|
243
216
|
return capi.SQLITE_OK;
|
|
244
217
|
},
|
|
245
|
-
xFilter: (pCursor) => {
|
|
218
|
+
xFilter: (pCursor, idxNum, idxStrPtr, argc, argv) => {
|
|
246
219
|
const cursorState = cursorStates.get(pCursor);
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
UNION ALL
|
|
273
|
-
|
|
274
|
-
-- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
|
|
275
|
-
SELECT isc.entity_id, isc.schema_key, isc.file_id,
|
|
276
|
-
vi.version_id, -- Return child version_id
|
|
277
|
-
isc.plugin_key, isc.snapshot_content, isc.schema_version,
|
|
278
|
-
isc.created_at, isc.updated_at,
|
|
279
|
-
vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
|
|
280
|
-
FROM (
|
|
281
|
-
-- Get version inheritance relationships from cache
|
|
282
|
-
SELECT
|
|
283
|
-
json_extract(isc_v.snapshot_content, '$.id') AS version_id,
|
|
284
|
-
json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
285
|
-
FROM internal_state_cache isc_v
|
|
286
|
-
WHERE isc_v.schema_key = 'lix_version'
|
|
287
|
-
) vi
|
|
288
|
-
JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
|
|
289
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
290
|
-
-- Only inherit entities that exist (not deleted) in parent
|
|
291
|
-
AND isc.inheritance_delete_marker = 0
|
|
292
|
-
-- Don't inherit if child has tracked state
|
|
293
|
-
AND NOT EXISTS (
|
|
294
|
-
SELECT 1 FROM internal_state_cache child_isc
|
|
295
|
-
WHERE child_isc.version_id = vi.version_id
|
|
296
|
-
AND child_isc.entity_id = isc.entity_id
|
|
297
|
-
AND child_isc.schema_key = isc.schema_key
|
|
298
|
-
AND child_isc.file_id = isc.file_id
|
|
299
|
-
)
|
|
300
|
-
-- Don't inherit if child has untracked state
|
|
301
|
-
AND NOT EXISTS (
|
|
302
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
303
|
-
WHERE unt.version_id = vi.version_id
|
|
304
|
-
AND unt.entity_id = isc.entity_id
|
|
305
|
-
AND unt.schema_key = isc.schema_key
|
|
306
|
-
AND unt.file_id = isc.file_id
|
|
307
|
-
)
|
|
308
|
-
`,
|
|
309
|
-
returnValue: "resultRows",
|
|
310
|
-
});
|
|
311
|
-
cursorState.results = cacheResults || [];
|
|
312
|
-
cursorState.rowIndex = 0;
|
|
313
|
-
// Cache miss - populate cache with actual recursive state query
|
|
314
|
-
if (cursorState.results.length === 0) {
|
|
315
|
-
if (canLog()) {
|
|
316
|
-
createLixOwnLogSync({
|
|
317
|
-
lix: { sqlite, db: db },
|
|
318
|
-
key: "lix_state_cache_miss",
|
|
319
|
-
level: "debug",
|
|
320
|
-
message: `Cache miss detected - materializing state from CTE`,
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
// Run the expensive recursive CTE to materialize state
|
|
324
|
-
// Include deletions when populating cache so inheritance blocking works
|
|
325
|
-
const stateResults = selectStateViaCTE(sqlite, {}, true);
|
|
326
|
-
// Populate cache with materialized state results
|
|
327
|
-
if (stateResults && stateResults.length > 0) {
|
|
328
|
-
let cachePopulated = false;
|
|
329
|
-
for (const row of stateResults) {
|
|
330
|
-
// CTE returns rows as arrays, so access by index
|
|
331
|
-
const entity_id = Array.isArray(row) ? row[0] : row.entity_id;
|
|
332
|
-
const schema_key = Array.isArray(row) ? row[1] : row.schema_key;
|
|
333
|
-
const file_id = Array.isArray(row) ? row[2] : row.file_id;
|
|
334
|
-
const plugin_key = Array.isArray(row) ? row[3] : row.plugin_key;
|
|
335
|
-
const snapshot_content = Array.isArray(row)
|
|
336
|
-
? row[4]
|
|
337
|
-
: row.snapshot_content;
|
|
338
|
-
const schema_version = Array.isArray(row)
|
|
339
|
-
? row[5]
|
|
340
|
-
: row.schema_version;
|
|
341
|
-
const version_id = Array.isArray(row) ? row[6] : row.version_id;
|
|
342
|
-
const created_at = Array.isArray(row) ? row[7] : row.created_at;
|
|
343
|
-
const updated_at = Array.isArray(row) ? row[8] : row.updated_at;
|
|
344
|
-
const inherited_from_version_id = Array.isArray(row)
|
|
345
|
-
? row[9]
|
|
346
|
-
: row.inherited_from_version_id;
|
|
347
|
-
const change_id = Array.isArray(row) ? row[10] : row.change_id;
|
|
348
|
-
// Skip rows with null entity_id (no actual state data found)
|
|
349
|
-
if (!entity_id) {
|
|
350
|
-
continue;
|
|
351
|
-
}
|
|
352
|
-
const isDeletion = snapshot_content === null;
|
|
353
|
-
// TODO the CTE should not return inherited entities (optimization for later)
|
|
354
|
-
// Skip inherited entities - they should be resolved via inheritance logic, not stored as duplicates
|
|
355
|
-
if (inherited_from_version_id !== null &&
|
|
356
|
-
inherited_from_version_id !== undefined) {
|
|
357
|
-
continue;
|
|
220
|
+
const idxStr = sqlite.sqlite3.wasm.cstrToJs(idxStrPtr);
|
|
221
|
+
// Debug: Track recursion depth
|
|
222
|
+
const recursionKey = "_vtab_recursion_depth";
|
|
223
|
+
// @ts-expect-error - using global for debugging
|
|
224
|
+
const currentDepth = (globalThis[recursionKey] || 0) + 1;
|
|
225
|
+
// @ts-expect-error - using global for debugging
|
|
226
|
+
globalThis[recursionKey] = currentDepth;
|
|
227
|
+
if (currentDepth > 10) {
|
|
228
|
+
// @ts-expect-error - using global for debugging
|
|
229
|
+
globalThis[recursionKey] = 0; // Reset
|
|
230
|
+
throw new Error(`Virtual table recursion depth exceeded: ${currentDepth}`);
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
// Extract filter arguments if provided
|
|
234
|
+
const filters = {};
|
|
235
|
+
if (argc > 0 && argv) {
|
|
236
|
+
const args = sqlite.sqlite3.capi.sqlite3_values_to_js(argc, argv);
|
|
237
|
+
// Parse idxStr to understand which columns are being filtered
|
|
238
|
+
// idxStr format: "column1,column2,..."
|
|
239
|
+
if (idxStr) {
|
|
240
|
+
const columns = idxStr.split(",").filter((c) => c.length > 0);
|
|
241
|
+
for (let i = 0; i < Math.min(columns.length, args.length); i++) {
|
|
242
|
+
if (args[i] !== null) {
|
|
243
|
+
filters[columns[i]] = args[i]; // Keep original type
|
|
244
|
+
}
|
|
358
245
|
}
|
|
359
|
-
sqlite.exec({
|
|
360
|
-
sql: `INSERT OR REPLACE INTO internal_state_cache
|
|
361
|
-
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id)
|
|
362
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
363
|
-
bind: [
|
|
364
|
-
entity_id,
|
|
365
|
-
schema_key,
|
|
366
|
-
file_id,
|
|
367
|
-
version_id,
|
|
368
|
-
plugin_key,
|
|
369
|
-
isDeletion
|
|
370
|
-
? null
|
|
371
|
-
: typeof snapshot_content === "string"
|
|
372
|
-
? snapshot_content
|
|
373
|
-
: JSON.stringify(snapshot_content),
|
|
374
|
-
schema_version,
|
|
375
|
-
created_at,
|
|
376
|
-
updated_at,
|
|
377
|
-
inherited_from_version_id === null ||
|
|
378
|
-
inherited_from_version_id === undefined
|
|
379
|
-
? null
|
|
380
|
-
: inherited_from_version_id,
|
|
381
|
-
isDeletion ? 1 : 0,
|
|
382
|
-
change_id || "unknown-change-id",
|
|
383
|
-
],
|
|
384
|
-
});
|
|
385
|
-
cachePopulated = true;
|
|
386
246
|
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
247
|
+
}
|
|
248
|
+
// If we're updating cache state, we must use resolved state view directly to avoid recursion
|
|
249
|
+
if (isUpdatingCacheState) {
|
|
250
|
+
// Query directly from resolved state view which handles inheritance correctly
|
|
251
|
+
let query = db
|
|
252
|
+
.selectFrom("internal_resolved_state_all")
|
|
253
|
+
.selectAll();
|
|
254
|
+
// Apply filters
|
|
255
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
256
|
+
query = query.where(column, "=", value);
|
|
394
257
|
}
|
|
258
|
+
const stateResults = executeSync({
|
|
259
|
+
lix: { sqlite },
|
|
260
|
+
query,
|
|
261
|
+
});
|
|
262
|
+
cursorState.results = stateResults || [];
|
|
263
|
+
cursorState.rowIndex = 0;
|
|
264
|
+
return capi.SQLITE_OK;
|
|
395
265
|
}
|
|
396
|
-
//
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
sql: `
|
|
400
|
-
-- 1. Untracked state (highest priority)
|
|
401
|
-
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
402
|
-
snapshot_content, schema_version, created_at, updated_at,
|
|
403
|
-
NULL as inherited_from_version_id, 'untracked' as change_id, 1 as untracked
|
|
404
|
-
FROM internal_state_all_untracked
|
|
405
|
-
|
|
406
|
-
UNION ALL
|
|
407
|
-
|
|
408
|
-
-- 2. Tracked state (second priority) - only if no untracked exists
|
|
409
|
-
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
410
|
-
snapshot_content, schema_version, created_at, updated_at,
|
|
411
|
-
inherited_from_version_id, change_id, 0 as untracked
|
|
412
|
-
FROM internal_state_cache
|
|
413
|
-
WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
|
|
414
|
-
AND NOT EXISTS (
|
|
415
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
416
|
-
WHERE unt.entity_id = internal_state_cache.entity_id
|
|
417
|
-
AND unt.schema_key = internal_state_cache.schema_key
|
|
418
|
-
AND unt.file_id = internal_state_cache.file_id
|
|
419
|
-
AND unt.version_id = internal_state_cache.version_id
|
|
420
|
-
)
|
|
421
|
-
|
|
422
|
-
UNION ALL
|
|
423
|
-
|
|
424
|
-
-- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
|
|
425
|
-
SELECT isc.entity_id, isc.schema_key, isc.file_id,
|
|
426
|
-
vi.version_id, -- Return child version_id
|
|
427
|
-
isc.plugin_key, isc.snapshot_content, isc.schema_version,
|
|
428
|
-
isc.created_at, isc.updated_at,
|
|
429
|
-
vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
|
|
430
|
-
FROM (
|
|
431
|
-
-- Get version inheritance relationships from cache
|
|
432
|
-
SELECT
|
|
433
|
-
json_extract(isc_v.snapshot_content, '$.id') AS version_id,
|
|
434
|
-
json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
435
|
-
FROM internal_state_cache isc_v
|
|
436
|
-
WHERE isc_v.schema_key = 'lix_version'
|
|
437
|
-
) vi
|
|
438
|
-
JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
|
|
439
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
440
|
-
-- Only inherit entities that exist (not deleted) in parent
|
|
441
|
-
AND isc.inheritance_delete_marker = 0
|
|
442
|
-
-- Don't inherit if child has tracked state
|
|
443
|
-
AND NOT EXISTS (
|
|
444
|
-
SELECT 1 FROM internal_state_cache child_isc
|
|
445
|
-
WHERE child_isc.version_id = vi.version_id
|
|
446
|
-
AND child_isc.entity_id = isc.entity_id
|
|
447
|
-
AND child_isc.schema_key = isc.schema_key
|
|
448
|
-
AND child_isc.file_id = isc.file_id
|
|
449
|
-
)
|
|
450
|
-
-- Don't inherit if child has untracked state
|
|
451
|
-
AND NOT EXISTS (
|
|
452
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
453
|
-
WHERE unt.version_id = vi.version_id
|
|
454
|
-
AND unt.entity_id = isc.entity_id
|
|
455
|
-
AND unt.schema_key = isc.schema_key
|
|
456
|
-
AND unt.file_id = isc.file_id
|
|
457
|
-
)
|
|
458
|
-
`,
|
|
459
|
-
returnValue: "resultRows",
|
|
266
|
+
// Normal path: check cache staleness
|
|
267
|
+
const cacheIsStale = isStaleStateCache({
|
|
268
|
+
lix: { sqlite, db: db },
|
|
460
269
|
});
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
270
|
+
// Try cache first - but only if it's not stale
|
|
271
|
+
let cacheResults = null;
|
|
272
|
+
if (!cacheIsStale) {
|
|
273
|
+
// Select directly from resolved state view using Kysely
|
|
274
|
+
let query = db
|
|
275
|
+
.selectFrom("internal_resolved_state_all")
|
|
276
|
+
.selectAll();
|
|
277
|
+
// Apply filters
|
|
278
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
279
|
+
query = query.where(column, "=", value);
|
|
280
|
+
}
|
|
281
|
+
cacheResults = executeSync({
|
|
282
|
+
lix: { sqlite },
|
|
283
|
+
query,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
cursorState.results = cacheResults || [];
|
|
287
|
+
cursorState.rowIndex = 0;
|
|
288
|
+
if (cacheIsStale) {
|
|
289
|
+
// Populate cache directly with materialized state
|
|
290
|
+
populateStateCache(sqlite);
|
|
291
|
+
// Log the cache miss
|
|
292
|
+
insertVTableLog({
|
|
293
|
+
sqlite,
|
|
294
|
+
db: db,
|
|
295
|
+
key: "lix_state_cache_miss",
|
|
468
296
|
level: "debug",
|
|
469
|
-
message: `Cache
|
|
297
|
+
message: `Cache miss detected - materialized state`,
|
|
470
298
|
});
|
|
299
|
+
// Mark cache as fresh after population
|
|
300
|
+
isUpdatingCacheState = true;
|
|
301
|
+
try {
|
|
302
|
+
markStateCacheAsFresh({ lix: { sqlite, db: db } });
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
isUpdatingCacheState = false;
|
|
306
|
+
}
|
|
307
|
+
let query = db
|
|
308
|
+
.selectFrom("internal_resolved_state_all")
|
|
309
|
+
.selectAll();
|
|
310
|
+
// Apply filters
|
|
311
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
312
|
+
query = query.where(column, "=", value);
|
|
313
|
+
}
|
|
314
|
+
const newResults = executeSync({
|
|
315
|
+
lix: { sqlite },
|
|
316
|
+
query,
|
|
317
|
+
});
|
|
318
|
+
cursorState.results = newResults || [];
|
|
471
319
|
}
|
|
320
|
+
return capi.SQLITE_OK;
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
// Always decrement recursion depth
|
|
324
|
+
// @ts-expect-error - using global for debugging
|
|
325
|
+
globalThis[recursionKey] = currentDepth - 1;
|
|
472
326
|
}
|
|
473
|
-
return capi.SQLITE_OK;
|
|
474
327
|
},
|
|
475
328
|
xNext: (pCursor) => {
|
|
476
329
|
const cursorState = cursorStates.get(pCursor);
|
|
@@ -488,9 +341,28 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
488
341
|
capi.sqlite3_result_null(pContext);
|
|
489
342
|
return capi.SQLITE_OK;
|
|
490
343
|
}
|
|
344
|
+
// Handle primary key column (_pk)
|
|
345
|
+
if (iCol === 0) {
|
|
346
|
+
if (Array.isArray(row)) {
|
|
347
|
+
// For array results, _pk is at index 0
|
|
348
|
+
capi.sqlite3_result_js(pContext, row[0]);
|
|
349
|
+
}
|
|
350
|
+
else if (row._pk) {
|
|
351
|
+
// If row already has _pk, use it
|
|
352
|
+
capi.sqlite3_result_js(pContext, row._pk);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
// Generate primary key from row data
|
|
356
|
+
const tag = row.untracked ? "U" : "C";
|
|
357
|
+
const primaryKey = serializeStatePk(tag, row.file_id, row.entity_id, row.version_id);
|
|
358
|
+
capi.sqlite3_result_js(pContext, primaryKey);
|
|
359
|
+
}
|
|
360
|
+
return capi.SQLITE_OK;
|
|
361
|
+
}
|
|
491
362
|
// Handle array-style results from SQLite exec
|
|
492
363
|
let value;
|
|
493
364
|
if (Array.isArray(row)) {
|
|
365
|
+
// For array results, composite_key is at index 0, so we use iCol directly
|
|
494
366
|
value = row[iCol];
|
|
495
367
|
}
|
|
496
368
|
else {
|
|
@@ -503,54 +375,54 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
503
375
|
capi.sqlite3_result_null(pContext);
|
|
504
376
|
return capi.SQLITE_OK;
|
|
505
377
|
}
|
|
506
|
-
if (value === null
|
|
378
|
+
if (value === null) {
|
|
507
379
|
capi.sqlite3_result_null(pContext);
|
|
508
380
|
}
|
|
509
|
-
else if (typeof value === "object") {
|
|
510
|
-
capi.sqlite3_result_js(pContext, JSON.stringify(value));
|
|
511
|
-
}
|
|
512
381
|
else {
|
|
513
382
|
capi.sqlite3_result_js(pContext, value);
|
|
514
383
|
}
|
|
515
384
|
return capi.SQLITE_OK;
|
|
516
385
|
},
|
|
517
|
-
xRowid: (
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
return capi.
|
|
386
|
+
xRowid: () => {
|
|
387
|
+
// For WITHOUT ROWID tables, xRowid should not be called
|
|
388
|
+
// But if it is, we return an error
|
|
389
|
+
return capi.SQLITE_ERROR;
|
|
521
390
|
},
|
|
522
391
|
xUpdate: (_pVTab, nArg, ppArgv) => {
|
|
523
392
|
try {
|
|
524
393
|
// Extract arguments using the proper SQLite WASM API
|
|
525
394
|
const args = sqlite.sqlite3.capi.sqlite3_values_to_js(nArg, ppArgv);
|
|
526
|
-
// DELETE operation: nArg = 1, args[0] = old
|
|
395
|
+
// DELETE operation: nArg = 1, args[0] = old primary key
|
|
527
396
|
if (nArg === 1) {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
handleStateDelete
|
|
397
|
+
const oldPk = args[0];
|
|
398
|
+
if (!oldPk) {
|
|
399
|
+
throw new Error("Missing primary key for DELETE operation");
|
|
400
|
+
}
|
|
401
|
+
// Use handleStateDelete for all cases - it handles both tracked and untracked
|
|
402
|
+
handleStateDelete(sqlite, oldPk, db);
|
|
533
403
|
return capi.SQLITE_OK;
|
|
534
404
|
}
|
|
535
|
-
// INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new
|
|
536
|
-
// UPDATE operation: nArg = N+2, args[0] = old
|
|
537
|
-
const isInsert = args[0] === null
|
|
538
|
-
const isUpdate = args[0] !== null
|
|
405
|
+
// INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new primary key
|
|
406
|
+
// UPDATE operation: nArg = N+2, args[0] = old primary key, args[1] = new primary key
|
|
407
|
+
const isInsert = args[0] === null;
|
|
408
|
+
const isUpdate = args[0] !== null;
|
|
539
409
|
if (!isInsert && !isUpdate) {
|
|
540
410
|
throw new Error("Invalid xUpdate operation");
|
|
541
411
|
}
|
|
542
412
|
// Extract column values (args[2] through args[N+1])
|
|
543
|
-
// Column order: entity_id, schema_key, file_id, version_id, plugin_key,
|
|
413
|
+
// Column order: _pk, entity_id, schema_key, file_id, version_id, plugin_key,
|
|
544
414
|
// snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
|
|
545
|
-
const entity_id = args[
|
|
546
|
-
const schema_key = args[
|
|
547
|
-
const file_id = args[
|
|
548
|
-
const version_id = args[
|
|
549
|
-
const plugin_key = args[
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
const
|
|
415
|
+
const entity_id = args[3];
|
|
416
|
+
const schema_key = args[4];
|
|
417
|
+
const file_id = args[5];
|
|
418
|
+
const version_id = args[6];
|
|
419
|
+
const plugin_key = args[7];
|
|
420
|
+
// this is an update where we have a snapshot_content
|
|
421
|
+
// the snapshot_content is a JSON string as returned by SQlite
|
|
422
|
+
const snapshot_content = args[8];
|
|
423
|
+
const schema_version = args[9];
|
|
424
|
+
// Skip created_at (args[10]), updated_at (args[11]), inherited_from_version_id (args[12]), change_id (args[13])
|
|
425
|
+
const untracked = args[14] ?? false;
|
|
554
426
|
// assert required fields
|
|
555
427
|
if (!entity_id || !schema_key || !file_id || !plugin_key) {
|
|
556
428
|
throw new Error("Missing required fields for state mutation");
|
|
@@ -558,99 +430,75 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
558
430
|
if (!version_id) {
|
|
559
431
|
throw new Error("version_id is required for state mutation");
|
|
560
432
|
}
|
|
561
|
-
// Ensure snapshot_content is a string
|
|
562
|
-
const snapshotStr = typeof snapshot_content === "string"
|
|
563
|
-
? snapshot_content
|
|
564
|
-
: JSON.stringify(snapshot_content);
|
|
565
433
|
// Call validation function (same logic as triggers)
|
|
566
|
-
const
|
|
567
|
-
sql: "SELECT value FROM stored_schema WHERE key = ?",
|
|
568
|
-
bind: [String(schema_key)],
|
|
569
|
-
returnValue: "resultRows",
|
|
570
|
-
});
|
|
571
|
-
const storedSchema = storedSchemaResult && storedSchemaResult.length > 0
|
|
572
|
-
? storedSchemaResult[0][0]
|
|
573
|
-
: null;
|
|
434
|
+
const storedSchema = getStoredSchema(sqlite, db, schema_key);
|
|
574
435
|
validateStateMutation({
|
|
575
436
|
lix: { sqlite, db: db },
|
|
576
437
|
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
577
|
-
snapshot_content: JSON.parse(
|
|
438
|
+
snapshot_content: JSON.parse(snapshot_content),
|
|
578
439
|
operation: isInsert ? "insert" : "update",
|
|
579
440
|
entity_id: String(entity_id),
|
|
580
441
|
version_id: String(version_id),
|
|
581
442
|
untracked: Boolean(untracked),
|
|
582
443
|
});
|
|
583
|
-
//
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
});
|
|
600
|
-
}
|
|
601
|
-
else {
|
|
602
|
-
// Handle tracked mutation - normal change control
|
|
603
|
-
// If there's existing untracked state, delete it first (tracked overrides untracked)
|
|
604
|
-
sqlite.exec({
|
|
605
|
-
sql: `DELETE FROM internal_state_all_untracked
|
|
606
|
-
WHERE entity_id = ? AND schema_key = ? AND file_id = ? AND version_id = ?`,
|
|
607
|
-
bind: [
|
|
608
|
-
String(entity_id),
|
|
609
|
-
String(schema_key),
|
|
610
|
-
String(file_id),
|
|
611
|
-
String(version_id),
|
|
612
|
-
],
|
|
613
|
-
});
|
|
614
|
-
// Call handleStateMutation (same logic as triggers)
|
|
615
|
-
handleStateMutation(sqlite, db, String(entity_id), String(schema_key), String(file_id), String(plugin_key), snapshotStr, String(version_id), String(schema_version));
|
|
616
|
-
}
|
|
617
|
-
// TODO: This cache copying logic is a temporary workaround for shared change sets.
|
|
618
|
-
// The proper solution requires improving cache miss logic to handle change set sharing
|
|
444
|
+
// Use insertTransactionState which handles both tracked and untracked entities
|
|
445
|
+
insertTransactionState({
|
|
446
|
+
lix: { sqlite, db },
|
|
447
|
+
data: {
|
|
448
|
+
entity_id: String(entity_id),
|
|
449
|
+
schema_key: String(schema_key),
|
|
450
|
+
file_id: String(file_id),
|
|
451
|
+
plugin_key: String(plugin_key),
|
|
452
|
+
snapshot_content,
|
|
453
|
+
schema_version: String(schema_version),
|
|
454
|
+
version_id: String(version_id),
|
|
455
|
+
untracked: Boolean(untracked),
|
|
456
|
+
},
|
|
457
|
+
});
|
|
458
|
+
// TODO: This cache copying logic is a temporary workaround for shared commits.
|
|
459
|
+
// The proper solution requires improving cache miss logic to handle commit sharing
|
|
619
460
|
// without duplicating entries. See: https://github.com/opral/lix-sdk/issues/309
|
|
620
461
|
//
|
|
621
|
-
// Handle cache copying for new versions that share
|
|
462
|
+
// Handle cache copying for new versions that share commits
|
|
622
463
|
if (isInsert && String(schema_key) === "lix_version") {
|
|
623
|
-
const versionData = JSON.parse(
|
|
464
|
+
const versionData = JSON.parse(snapshot_content);
|
|
624
465
|
const newVersionId = versionData.id;
|
|
625
|
-
const
|
|
626
|
-
if (newVersionId &&
|
|
627
|
-
// Find other versions that
|
|
628
|
-
const
|
|
466
|
+
const commitId = versionData.commit_id;
|
|
467
|
+
if (newVersionId && commitId) {
|
|
468
|
+
// Find other versions that point to the same commit
|
|
469
|
+
const existingVersionsWithSameCommit = sqlite.exec({
|
|
629
470
|
sql: `
|
|
630
471
|
SELECT json_extract(snapshot_content, '$.id') as version_id
|
|
631
472
|
FROM internal_state_cache
|
|
632
473
|
WHERE schema_key = 'lix_version'
|
|
633
|
-
AND json_extract(snapshot_content, '$.
|
|
474
|
+
AND json_extract(snapshot_content, '$.commit_id') = ?
|
|
634
475
|
AND json_extract(snapshot_content, '$.id') != ?
|
|
635
476
|
`,
|
|
636
|
-
bind: [
|
|
477
|
+
bind: [commitId, newVersionId],
|
|
637
478
|
returnValue: "resultRows",
|
|
638
479
|
});
|
|
639
|
-
// If there are existing versions with the same
|
|
640
|
-
if (
|
|
641
|
-
|
|
642
|
-
const sourceVersionId =
|
|
480
|
+
// If there are existing versions with the same commit, copy their cache entries
|
|
481
|
+
if (existingVersionsWithSameCommit &&
|
|
482
|
+
existingVersionsWithSameCommit.length > 0) {
|
|
483
|
+
const sourceVersionId = existingVersionsWithSameCommit[0][0]; // Take first existing version
|
|
643
484
|
// Copy cache entries from source version to new version
|
|
485
|
+
// IMPORTANT: When copying cache entries, we need to mark them as inherited
|
|
486
|
+
// if they don't have an inherited_from_version_id already
|
|
644
487
|
sqlite.exec({
|
|
645
488
|
sql: `
|
|
646
489
|
INSERT OR IGNORE INTO internal_state_cache
|
|
647
|
-
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id)
|
|
490
|
+
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id, commit_id)
|
|
648
491
|
SELECT
|
|
649
|
-
entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at,
|
|
492
|
+
entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at,
|
|
493
|
+
CASE
|
|
494
|
+
WHEN inherited_from_version_id IS NULL THEN ?
|
|
495
|
+
ELSE inherited_from_version_id
|
|
496
|
+
END as inherited_from_version_id,
|
|
497
|
+
inheritance_delete_marker, change_id, commit_id
|
|
650
498
|
FROM internal_state_cache
|
|
651
499
|
WHERE version_id = ? AND schema_key != 'lix_version'
|
|
652
500
|
`,
|
|
653
|
-
bind: [newVersionId, sourceVersionId],
|
|
501
|
+
bind: [newVersionId, sourceVersionId, sourceVersionId],
|
|
654
502
|
});
|
|
655
503
|
}
|
|
656
504
|
}
|
|
@@ -660,31 +508,14 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
660
508
|
catch (error) {
|
|
661
509
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
662
510
|
// Log error for debugging
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
throw error; //new Error("test");
|
|
672
|
-
// const vtab = sqlite.sqlite3.vtab.xVtab.get(_pVTab);
|
|
673
|
-
// // Set proper error message on the virtual table
|
|
674
|
-
// if (vtab) {
|
|
675
|
-
// // Free any existing error message first
|
|
676
|
-
// if (vtab.zErrMsg) {
|
|
677
|
-
// capi.sqlite3_free(vtab.zErrMsg);
|
|
678
|
-
// }
|
|
679
|
-
// // Allocate new error message using sqlite3_malloc
|
|
680
|
-
// const errorBytes = new TextEncoder().encode(errorMessage + "\0");
|
|
681
|
-
// const errorPtr = capi.sqlite3_malloc(errorBytes.length);
|
|
682
|
-
// if (errorPtr) {
|
|
683
|
-
// sqlite.sqlite3.wasm.heap8u().set(errorBytes, errorPtr);
|
|
684
|
-
// vtab.zErrMsg = errorPtr;
|
|
685
|
-
// }
|
|
686
|
-
// }
|
|
687
|
-
// return capi.SQLITE_ERROR;
|
|
511
|
+
insertVTableLog({
|
|
512
|
+
sqlite,
|
|
513
|
+
db: db,
|
|
514
|
+
key: "lix_state_xupdate_error",
|
|
515
|
+
level: "error",
|
|
516
|
+
message: `xUpdate error: ${errorMessage}`,
|
|
517
|
+
});
|
|
518
|
+
throw error; // Re-throw to propagate error
|
|
688
519
|
}
|
|
689
520
|
},
|
|
690
521
|
}, false);
|
|
@@ -694,7 +525,19 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
694
525
|
// Create state view that filters to active version only
|
|
695
526
|
sqlite.exec(`
|
|
696
527
|
CREATE VIEW IF NOT EXISTS state AS
|
|
697
|
-
SELECT
|
|
528
|
+
SELECT
|
|
529
|
+
entity_id,
|
|
530
|
+
schema_key,
|
|
531
|
+
file_id,
|
|
532
|
+
plugin_key,
|
|
533
|
+
snapshot_content,
|
|
534
|
+
schema_version,
|
|
535
|
+
created_at,
|
|
536
|
+
updated_at,
|
|
537
|
+
inherited_from_version_id,
|
|
538
|
+
change_id,
|
|
539
|
+
untracked,
|
|
540
|
+
commit_id
|
|
698
541
|
FROM state_all
|
|
699
542
|
WHERE version_id IN (SELECT version_id FROM active_version);
|
|
700
543
|
|
|
@@ -703,11 +546,33 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
703
546
|
INSTEAD OF INSERT ON state
|
|
704
547
|
BEGIN
|
|
705
548
|
INSERT INTO state_all (
|
|
706
|
-
entity_id,
|
|
707
|
-
|
|
549
|
+
entity_id,
|
|
550
|
+
schema_key,
|
|
551
|
+
file_id,
|
|
552
|
+
version_id,
|
|
553
|
+
plugin_key,
|
|
554
|
+
snapshot_content,
|
|
555
|
+
schema_version,
|
|
556
|
+
created_at,
|
|
557
|
+
updated_at,
|
|
558
|
+
inherited_from_version_id,
|
|
559
|
+
change_id,
|
|
560
|
+
untracked,
|
|
561
|
+
commit_id
|
|
708
562
|
) VALUES (
|
|
709
|
-
NEW.entity_id,
|
|
710
|
-
NEW.
|
|
563
|
+
NEW.entity_id,
|
|
564
|
+
NEW.schema_key,
|
|
565
|
+
NEW.file_id,
|
|
566
|
+
(SELECT version_id FROM active_version),
|
|
567
|
+
NEW.plugin_key,
|
|
568
|
+
NEW.snapshot_content,
|
|
569
|
+
NEW.schema_version,
|
|
570
|
+
NEW.created_at,
|
|
571
|
+
NEW.updated_at,
|
|
572
|
+
NEW.inherited_from_version_id,
|
|
573
|
+
NEW.change_id,
|
|
574
|
+
NEW.untracked,
|
|
575
|
+
NEW.commit_id
|
|
711
576
|
);
|
|
712
577
|
END;
|
|
713
578
|
|
|
@@ -719,7 +584,7 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
719
584
|
entity_id = NEW.entity_id,
|
|
720
585
|
schema_key = NEW.schema_key,
|
|
721
586
|
file_id = NEW.file_id,
|
|
722
|
-
version_id =
|
|
587
|
+
version_id = (SELECT version_id FROM active_version),
|
|
723
588
|
plugin_key = NEW.plugin_key,
|
|
724
589
|
snapshot_content = NEW.snapshot_content,
|
|
725
590
|
schema_version = NEW.schema_version,
|
|
@@ -727,108 +592,145 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
|
727
592
|
updated_at = NEW.updated_at,
|
|
728
593
|
inherited_from_version_id = NEW.inherited_from_version_id,
|
|
729
594
|
change_id = NEW.change_id,
|
|
730
|
-
untracked = NEW.untracked
|
|
595
|
+
untracked = NEW.untracked,
|
|
596
|
+
commit_id = NEW.commit_id
|
|
731
597
|
WHERE
|
|
732
598
|
entity_id = OLD.entity_id
|
|
733
599
|
AND schema_key = OLD.schema_key
|
|
734
600
|
AND file_id = OLD.file_id
|
|
735
|
-
AND version_id =
|
|
601
|
+
AND version_id = (SELECT version_id FROM active_version);
|
|
736
602
|
END;
|
|
737
603
|
|
|
738
604
|
CREATE TRIGGER IF NOT EXISTS state_delete
|
|
739
605
|
INSTEAD OF DELETE ON state
|
|
740
606
|
BEGIN
|
|
607
|
+
-- Delete from state_all (handles both tracked and untracked entities)
|
|
741
608
|
DELETE FROM state_all
|
|
742
|
-
WHERE
|
|
609
|
+
WHERE
|
|
610
|
+
entity_id = OLD.entity_id
|
|
743
611
|
AND schema_key = OLD.schema_key
|
|
744
612
|
AND file_id = OLD.file_id
|
|
745
|
-
AND version_id =
|
|
613
|
+
AND version_id = (SELECT version_id FROM active_version);
|
|
746
614
|
END;
|
|
747
615
|
`);
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
616
|
+
/**
|
|
617
|
+
* Insert a log entry directly using insertTransactionState to avoid recursion
|
|
618
|
+
* when logging from within the virtual table methods.
|
|
619
|
+
*/
|
|
620
|
+
function insertVTableLog(args) {
|
|
621
|
+
if (loggingIsInProgress) {
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
// preventing recursivly logging that we inserted a log entry
|
|
625
|
+
// with this flag
|
|
626
|
+
loggingIsInProgress = true;
|
|
627
|
+
// Check log levels directly from internal state tables to avoid recursion
|
|
628
|
+
const logLevelsResult = executeSync({
|
|
629
|
+
lix: { sqlite: args.sqlite },
|
|
630
|
+
query: args.db
|
|
631
|
+
.selectFrom("internal_resolved_state_all")
|
|
632
|
+
.select(sql `json_extract(snapshot_content, '$.value')`.as("value"))
|
|
633
|
+
.where("schema_key", "=", "lix_key_value")
|
|
634
|
+
.where(sql `json_extract(snapshot_content, '$.key')`, "=", "lix_log_levels")
|
|
635
|
+
.limit(1),
|
|
636
|
+
});
|
|
637
|
+
const logLevelsValue = logLevelsResult[0]?.value;
|
|
638
|
+
// Check if the level is allowed
|
|
639
|
+
if (!shouldLog(logLevelsValue, args.level)) {
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
// Create log entry data
|
|
643
|
+
const lix = { sqlite: args.sqlite, db: args.db };
|
|
644
|
+
const logData = {
|
|
645
|
+
id: uuidV7({ lix }),
|
|
646
|
+
key: args.key,
|
|
647
|
+
message: args.message,
|
|
648
|
+
level: args.level,
|
|
649
|
+
};
|
|
650
|
+
// Insert log using insertTransactionState
|
|
651
|
+
insertTransactionState({
|
|
652
|
+
lix,
|
|
653
|
+
data: {
|
|
654
|
+
entity_id: logData.id,
|
|
655
|
+
schema_key: LixLogSchema["x-lix-key"],
|
|
656
|
+
file_id: "lix",
|
|
657
|
+
plugin_key: "lix_own_entity",
|
|
658
|
+
snapshot_content: JSON.stringify(logData),
|
|
659
|
+
schema_version: LixLogSchema["x-lix-version"],
|
|
660
|
+
// Using global and untracked for vtable logs.
|
|
661
|
+
// if we need to track them, we can change this later
|
|
662
|
+
version_id: "global",
|
|
663
|
+
untracked: true,
|
|
664
|
+
},
|
|
665
|
+
});
|
|
666
|
+
loggingIsInProgress = false;
|
|
667
|
+
}
|
|
793
668
|
}
|
|
794
|
-
export function handleStateDelete(sqlite,
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
669
|
+
export function handleStateDelete(sqlite, primaryKey, db) {
|
|
670
|
+
// Query the row to delete using the resolved state view with Kysely
|
|
671
|
+
const rowToDelete = executeSync({
|
|
672
|
+
lix: { sqlite },
|
|
673
|
+
query: db
|
|
674
|
+
.selectFrom("internal_resolved_state_all")
|
|
675
|
+
.select([
|
|
676
|
+
"entity_id",
|
|
677
|
+
"schema_key",
|
|
678
|
+
"file_id",
|
|
679
|
+
"version_id",
|
|
680
|
+
"plugin_key",
|
|
681
|
+
"snapshot_content",
|
|
682
|
+
"schema_version",
|
|
683
|
+
"untracked",
|
|
684
|
+
"inherited_from_version_id",
|
|
685
|
+
])
|
|
686
|
+
.where("_pk", "=", primaryKey),
|
|
799
687
|
})[0];
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
const
|
|
804
|
-
const
|
|
805
|
-
const
|
|
806
|
-
const
|
|
807
|
-
|
|
808
|
-
const
|
|
809
|
-
|
|
688
|
+
if (!rowToDelete) {
|
|
689
|
+
throw new Error(`Row not found for primary key: ${primaryKey}`);
|
|
690
|
+
}
|
|
691
|
+
const entity_id = rowToDelete.entity_id;
|
|
692
|
+
const schema_key = rowToDelete.schema_key;
|
|
693
|
+
const file_id = rowToDelete.file_id;
|
|
694
|
+
const version_id = rowToDelete.version_id;
|
|
695
|
+
const plugin_key = rowToDelete.plugin_key;
|
|
696
|
+
const snapshot_content = rowToDelete.snapshot_content;
|
|
697
|
+
const schema_version = rowToDelete.schema_version;
|
|
698
|
+
const untracked = rowToDelete.untracked;
|
|
699
|
+
// If entity is untracked, handle differently based on whether it's inherited
|
|
810
700
|
if (untracked) {
|
|
811
|
-
//
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
701
|
+
// Parse the primary key to check if it's inherited untracked (UI tag)
|
|
702
|
+
const parsed = parseStatePk(primaryKey);
|
|
703
|
+
if (parsed.tag === "UI") {
|
|
704
|
+
// For inherited untracked, create a tombstone to block inheritance
|
|
705
|
+
insertTransactionState({
|
|
706
|
+
lix: { sqlite, db },
|
|
707
|
+
data: {
|
|
708
|
+
entity_id: String(entity_id),
|
|
709
|
+
schema_key: String(schema_key),
|
|
710
|
+
file_id: String(file_id),
|
|
711
|
+
plugin_key: String(plugin_key),
|
|
712
|
+
snapshot_content: null, // Deletion tombstone
|
|
713
|
+
schema_version: String(schema_version),
|
|
714
|
+
version_id: String(version_id),
|
|
715
|
+
untracked: true,
|
|
716
|
+
},
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
// For direct untracked (U tag), just delete from untracked table
|
|
721
|
+
executeSync({
|
|
722
|
+
lix: { sqlite },
|
|
723
|
+
query: db
|
|
724
|
+
.deleteFrom("internal_state_all_untracked")
|
|
725
|
+
.where("entity_id", "=", String(entity_id))
|
|
726
|
+
.where("schema_key", "=", String(schema_key))
|
|
727
|
+
.where("file_id", "=", String(file_id))
|
|
728
|
+
.where("version_id", "=", String(version_id)),
|
|
729
|
+
});
|
|
730
|
+
}
|
|
822
731
|
return;
|
|
823
732
|
}
|
|
824
|
-
const
|
|
825
|
-
sql: "SELECT value FROM stored_schema WHERE key = ?",
|
|
826
|
-
bind: [String(schema_key)],
|
|
827
|
-
returnValue: "resultRows",
|
|
828
|
-
});
|
|
829
|
-
const storedSchema = storedSchemaResult && storedSchemaResult.length > 0
|
|
830
|
-
? storedSchemaResult[0][0]
|
|
831
|
-
: null;
|
|
733
|
+
const storedSchema = getStoredSchema(sqlite, db, schema_key);
|
|
832
734
|
validateStateMutation({
|
|
833
735
|
lix: { sqlite, db: db },
|
|
834
736
|
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
@@ -837,12 +739,37 @@ export function handleStateDelete(sqlite, rowId, db) {
|
|
|
837
739
|
entity_id: String(entity_id),
|
|
838
740
|
version_id: String(version_id),
|
|
839
741
|
});
|
|
840
|
-
|
|
841
|
-
|
|
742
|
+
insertTransactionState({
|
|
743
|
+
lix: { sqlite, db },
|
|
744
|
+
data: {
|
|
745
|
+
entity_id: String(entity_id),
|
|
746
|
+
schema_key: String(schema_key),
|
|
747
|
+
file_id: String(file_id),
|
|
748
|
+
plugin_key: String(plugin_key),
|
|
749
|
+
snapshot_content: null, // No snapshot content for DELETE
|
|
750
|
+
schema_version: String(schema_version),
|
|
751
|
+
version_id: String(version_id),
|
|
752
|
+
untracked: false, // tracked entity
|
|
753
|
+
},
|
|
754
|
+
});
|
|
842
755
|
}
|
|
843
756
|
// Helper functions for the virtual table
|
|
757
|
+
function getStoredSchema(sqlite, db, schemaKey) {
|
|
758
|
+
// Query directly from internal_resolved_state_all to avoid vtable recursion
|
|
759
|
+
const result = executeSync({
|
|
760
|
+
lix: { sqlite },
|
|
761
|
+
query: db
|
|
762
|
+
.selectFrom("internal_resolved_state_all")
|
|
763
|
+
.select(sql `json_extract(snapshot_content, '$.value')`.as("value"))
|
|
764
|
+
.where("schema_key", "=", "lix_stored_schema")
|
|
765
|
+
.where(sql `json_extract(snapshot_content, '$.key')`, "=", String(schemaKey))
|
|
766
|
+
.limit(1),
|
|
767
|
+
});
|
|
768
|
+
return result && result.length > 0 ? result[0].value : null;
|
|
769
|
+
}
|
|
844
770
|
function getColumnName(columnIndex) {
|
|
845
771
|
const columns = [
|
|
772
|
+
"_pk",
|
|
846
773
|
"entity_id",
|
|
847
774
|
"schema_key",
|
|
848
775
|
"file_id",
|
|
@@ -855,198 +782,8 @@ function getColumnName(columnIndex) {
|
|
|
855
782
|
"inherited_from_version_id",
|
|
856
783
|
"change_id",
|
|
857
784
|
"untracked",
|
|
785
|
+
"commit_id",
|
|
858
786
|
];
|
|
859
787
|
return columns[columnIndex] || "unknown";
|
|
860
788
|
}
|
|
861
|
-
function selectStateViaCTE(sqlite, filters, includeDeletions = false) {
|
|
862
|
-
let sql = `
|
|
863
|
-
WITH
|
|
864
|
-
all_changes_with_snapshots AS (
|
|
865
|
-
-- Include committed changes
|
|
866
|
-
SELECT ic.id, ic.entity_id, ic.schema_key, ic.file_id, ic.plugin_key,
|
|
867
|
-
ic.schema_version,
|
|
868
|
-
CASE
|
|
869
|
-
WHEN ic.snapshot_id = 'no-content' THEN NULL
|
|
870
|
-
ELSE json(s.content)
|
|
871
|
-
END AS snapshot_content
|
|
872
|
-
FROM internal_change ic
|
|
873
|
-
LEFT JOIN internal_snapshot s ON ic.snapshot_id = s.id
|
|
874
|
-
|
|
875
|
-
UNION ALL
|
|
876
|
-
|
|
877
|
-
-- Include changes from current transaction
|
|
878
|
-
SELECT ict.id, ict.entity_id, ict.schema_key, ict.file_id, ict.plugin_key,
|
|
879
|
-
ict.schema_version, ict.snapshot_content
|
|
880
|
-
FROM internal_change_in_transaction ict
|
|
881
|
-
|
|
882
|
-
UNION ALL
|
|
883
|
-
|
|
884
|
-
-- Include untracked state (pseudo-changes with special change_id)
|
|
885
|
-
SELECT 'untracked-' || unt.entity_id || '-' || unt.schema_key AS id,
|
|
886
|
-
unt.entity_id, unt.schema_key, unt.file_id, unt.plugin_key,
|
|
887
|
-
unt.schema_version, json(unt.snapshot_content) AS snapshot_content
|
|
888
|
-
FROM internal_state_all_untracked unt
|
|
889
|
-
),
|
|
890
|
-
root_cs_of_all_versions AS (
|
|
891
|
-
SELECT json_extract(v.snapshot_content, '$.change_set_id') AS version_change_set_id,
|
|
892
|
-
v.entity_id AS version_id
|
|
893
|
-
FROM all_changes_with_snapshots v
|
|
894
|
-
WHERE v.schema_key = 'lix_version'
|
|
895
|
-
),
|
|
896
|
-
reachable_cs_from_roots(id, version_id) AS (
|
|
897
|
-
SELECT version_change_set_id, version_id FROM root_cs_of_all_versions
|
|
898
|
-
UNION
|
|
899
|
-
SELECT json_extract(e.snapshot_content, '$.parent_id'), r.version_id
|
|
900
|
-
FROM all_changes_with_snapshots e
|
|
901
|
-
JOIN reachable_cs_from_roots r ON json_extract(e.snapshot_content, '$.child_id') = r.id
|
|
902
|
-
WHERE e.schema_key = 'lix_change_set_edge'
|
|
903
|
-
),
|
|
904
|
-
cse_in_reachable_cs AS (
|
|
905
|
-
SELECT json_extract(ias.snapshot_content, '$.entity_id') AS target_entity_id,
|
|
906
|
-
json_extract(ias.snapshot_content, '$.file_id') AS target_file_id,
|
|
907
|
-
json_extract(ias.snapshot_content, '$.schema_key') AS target_schema_key,
|
|
908
|
-
json_extract(ias.snapshot_content, '$.change_id') AS target_change_id,
|
|
909
|
-
json_extract(ias.snapshot_content, '$.change_set_id') AS cse_origin_change_set_id,
|
|
910
|
-
rcs.version_id
|
|
911
|
-
FROM all_changes_with_snapshots ias
|
|
912
|
-
JOIN reachable_cs_from_roots rcs ON json_extract(ias.snapshot_content, '$.change_set_id') = rcs.id
|
|
913
|
-
WHERE ias.schema_key = 'lix_change_set_element'
|
|
914
|
-
),
|
|
915
|
-
leaf_target_snapshots AS (
|
|
916
|
-
SELECT target_change.entity_id, target_change.schema_key, target_change.file_id,
|
|
917
|
-
target_change.plugin_key, target_change.snapshot_content AS snapshot_content,
|
|
918
|
-
target_change.schema_version, r.version_id, target_change.id as change_id
|
|
919
|
-
FROM cse_in_reachable_cs r
|
|
920
|
-
INNER JOIN all_changes_with_snapshots target_change ON r.target_change_id = target_change.id
|
|
921
|
-
WHERE NOT EXISTS (
|
|
922
|
-
WITH RECURSIVE descendants_of_current_cs(id) AS (
|
|
923
|
-
SELECT r.cse_origin_change_set_id
|
|
924
|
-
UNION
|
|
925
|
-
SELECT json_extract(edge.snapshot_content, '$.child_id')
|
|
926
|
-
FROM all_changes_with_snapshots edge
|
|
927
|
-
JOIN descendants_of_current_cs d ON json_extract(edge.snapshot_content, '$.parent_id') = d.id
|
|
928
|
-
WHERE edge.schema_key = 'lix_change_set_edge'
|
|
929
|
-
AND json_extract(edge.snapshot_content, '$.child_id') IN (
|
|
930
|
-
SELECT id FROM reachable_cs_from_roots WHERE version_id = r.version_id
|
|
931
|
-
)
|
|
932
|
-
)
|
|
933
|
-
SELECT 1 FROM cse_in_reachable_cs newer_r
|
|
934
|
-
WHERE newer_r.target_entity_id = r.target_entity_id
|
|
935
|
-
AND newer_r.target_file_id = r.target_file_id
|
|
936
|
-
AND newer_r.target_schema_key = r.target_schema_key
|
|
937
|
-
AND newer_r.version_id = r.version_id
|
|
938
|
-
AND (newer_r.cse_origin_change_set_id != r.cse_origin_change_set_id OR newer_r.target_change_id != r.target_change_id)
|
|
939
|
-
AND newer_r.cse_origin_change_set_id IN descendants_of_current_cs
|
|
940
|
-
)
|
|
941
|
-
),
|
|
942
|
-
-- Get version inheritance relationships
|
|
943
|
-
version_inheritance AS (
|
|
944
|
-
SELECT DISTINCT
|
|
945
|
-
v.entity_id AS version_id,
|
|
946
|
-
json_extract(v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
947
|
-
FROM all_changes_with_snapshots v
|
|
948
|
-
WHERE v.schema_key = 'lix_version'
|
|
949
|
-
),
|
|
950
|
-
-- Combine direct entities with inherited entities
|
|
951
|
-
all_entities AS (
|
|
952
|
-
-- Direct entities from leaf_target_snapshots
|
|
953
|
-
SELECT
|
|
954
|
-
entity_id, schema_key, file_id, plugin_key, snapshot_content, schema_version,
|
|
955
|
-
version_id, version_id as visible_in_version, NULL as inherited_from_version_id, change_id
|
|
956
|
-
FROM leaf_target_snapshots
|
|
957
|
-
|
|
958
|
-
UNION ALL
|
|
959
|
-
|
|
960
|
-
-- Inherited entities from parent versions
|
|
961
|
-
SELECT
|
|
962
|
-
ls.entity_id, ls.schema_key, ls.file_id, ls.plugin_key, ls.snapshot_content, ls.schema_version,
|
|
963
|
-
vi.version_id, -- Use child version_id for testing
|
|
964
|
-
vi.version_id as visible_in_version, -- Make visible in child version
|
|
965
|
-
vi.parent_version_id as inherited_from_version_id, ls.change_id
|
|
966
|
-
FROM version_inheritance vi
|
|
967
|
-
JOIN leaf_target_snapshots ls ON ls.version_id = vi.parent_version_id
|
|
968
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
969
|
-
AND ls.snapshot_content IS NOT NULL -- Don't inherit deleted entities
|
|
970
|
-
-- Don't inherit if child already has this entity (including deletion markers)
|
|
971
|
-
-- Use a more comprehensive check that includes both leaf snapshots and direct inheritance blocking
|
|
972
|
-
AND NOT EXISTS (
|
|
973
|
-
-- Check if there's ANY change for this entity in the child version
|
|
974
|
-
-- This includes creation, update, AND deletion changes
|
|
975
|
-
SELECT 1 FROM leaf_target_snapshots child_ls
|
|
976
|
-
WHERE child_ls.version_id = vi.version_id
|
|
977
|
-
AND child_ls.entity_id = ls.entity_id
|
|
978
|
-
AND child_ls.schema_key = ls.schema_key
|
|
979
|
-
AND child_ls.file_id = ls.file_id
|
|
980
|
-
)
|
|
981
|
-
-- Additional safeguard: check that no change set element exists for this entity in child
|
|
982
|
-
AND NOT EXISTS (
|
|
983
|
-
SELECT 1 FROM cse_in_reachable_cs cse
|
|
984
|
-
JOIN all_changes_with_snapshots target_change ON cse.target_change_id = target_change.id
|
|
985
|
-
WHERE cse.version_id = vi.version_id
|
|
986
|
-
AND target_change.entity_id = ls.entity_id
|
|
987
|
-
AND target_change.schema_key = ls.schema_key
|
|
988
|
-
AND target_change.file_id = ls.file_id
|
|
989
|
-
)
|
|
990
|
-
),
|
|
991
|
-
-- Prioritize direct entities over inherited ones, then deduplicate
|
|
992
|
-
prioritized_entities AS (
|
|
993
|
-
SELECT *,
|
|
994
|
-
-- Priority: direct entities (inherited_from_version_id IS NULL) over inherited
|
|
995
|
-
CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END as priority,
|
|
996
|
-
-- Row number for deduplication within same priority
|
|
997
|
-
ROW_NUMBER() OVER (
|
|
998
|
-
PARTITION BY entity_id, schema_key, file_id, visible_in_version
|
|
999
|
-
ORDER BY CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END,
|
|
1000
|
-
-- Among inherited entities, prefer those with earlier timestamps
|
|
1001
|
-
version_id
|
|
1002
|
-
) as rn
|
|
1003
|
-
FROM all_entities ae
|
|
1004
|
-
-- Don't filter out entities with null snapshot_content here
|
|
1005
|
-
-- We need deletion markers to be included for proper inheritance blocking
|
|
1006
|
-
)
|
|
1007
|
-
SELECT DISTINCT
|
|
1008
|
-
pe.entity_id,
|
|
1009
|
-
pe.schema_key,
|
|
1010
|
-
pe.file_id,
|
|
1011
|
-
pe.plugin_key,
|
|
1012
|
-
pe.snapshot_content,
|
|
1013
|
-
pe.schema_version,
|
|
1014
|
-
pe.version_id,
|
|
1015
|
-
(SELECT MIN(ic.created_at) FROM internal_change ic
|
|
1016
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id) AS created_at,
|
|
1017
|
-
COALESCE(
|
|
1018
|
-
(SELECT MAX(ic.created_at) FROM internal_change ic
|
|
1019
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id
|
|
1020
|
-
AND ic.id IN (SELECT cse.target_change_id FROM cse_in_reachable_cs cse WHERE cse.version_id = pe.version_id)),
|
|
1021
|
-
(SELECT MIN(ic.created_at) FROM internal_change ic
|
|
1022
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id)
|
|
1023
|
-
) AS updated_at,
|
|
1024
|
-
pe.inherited_from_version_id,
|
|
1025
|
-
pe.change_id
|
|
1026
|
-
FROM prioritized_entities pe
|
|
1027
|
-
WHERE pe.rn = 1
|
|
1028
|
-
${includeDeletions ? "" : "-- Filter out deletion markers from final results\n AND pe.snapshot_content IS NOT NULL"}
|
|
1029
|
-
`;
|
|
1030
|
-
const bindings = [];
|
|
1031
|
-
const conditions = [];
|
|
1032
|
-
Object.entries(filters).forEach(([key, value]) => {
|
|
1033
|
-
if (key === "version_id") {
|
|
1034
|
-
// For version_id filter, use visible_in_version
|
|
1035
|
-
conditions.push(`ae.visible_in_version = ?`);
|
|
1036
|
-
}
|
|
1037
|
-
else {
|
|
1038
|
-
conditions.push(`ae.${key} = ?`);
|
|
1039
|
-
}
|
|
1040
|
-
bindings.push(value);
|
|
1041
|
-
});
|
|
1042
|
-
if (conditions.length > 0) {
|
|
1043
|
-
sql += " AND " + conditions.join(" AND ");
|
|
1044
|
-
}
|
|
1045
|
-
const result = sqlite.exec({
|
|
1046
|
-
sql,
|
|
1047
|
-
bind: bindings,
|
|
1048
|
-
returnValue: "resultRows",
|
|
1049
|
-
});
|
|
1050
|
-
return result || [];
|
|
1051
|
-
}
|
|
1052
789
|
//# sourceMappingURL=schema.js.map
|