@lix-js/sdk 0.4.7 → 0.5.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/create-account.d.ts +17 -3
- package/dist/account/create-account.d.ts.map +1 -1
- package/dist/account/create-account.js +27 -3
- package/dist/account/create-account.js.map +1 -1
- package/dist/account/create-account.test.js +42 -4
- package/dist/account/create-account.test.js.map +1 -1
- package/dist/account/index.d.ts +1 -1
- package/dist/account/index.d.ts.map +1 -1
- package/dist/account/index.js +1 -1
- package/dist/account/index.js.map +1 -1
- package/dist/account/schema.d.ts +28 -0
- package/dist/account/schema.d.ts.map +1 -0
- package/dist/account/schema.js +55 -0
- package/dist/account/schema.js.map +1 -0
- package/dist/account/schema.test.d.ts +2 -0
- package/dist/account/schema.test.d.ts.map +1 -0
- package/dist/account/schema.test.js +306 -0
- package/dist/account/schema.test.js.map +1 -0
- 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 +8 -1
- package/dist/account/switch-account.js.map +1 -1
- package/dist/account/switch-account.test.js +27 -6
- package/dist/account/switch-account.test.js.map +1 -1
- package/dist/change/create-change.d.ts +11 -22
- package/dist/change/create-change.d.ts.map +1 -1
- package/dist/change/create-change.js +29 -83
- package/dist/change/create-change.js.map +1 -1
- package/dist/change/create-change.test.js +129 -176
- package/dist/change/create-change.test.js.map +1 -1
- package/dist/change/index.d.ts +1 -2
- package/dist/change/index.d.ts.map +1 -1
- package/dist/change/index.js +1 -2
- package/dist/change/index.js.map +1 -1
- package/dist/change/mock-change.d.ts +1 -1
- package/dist/change/mock-change.d.ts.map +1 -1
- package/dist/change/mock-change.js +1 -0
- package/dist/change/mock-change.js.map +1 -1
- package/dist/change/schema.d.ts +28 -0
- package/dist/change/schema.d.ts.map +1 -0
- package/dist/change/schema.js +62 -0
- package/dist/change/schema.js.map +1 -0
- package/dist/change/schema.test.d.ts +2 -0
- package/dist/change/schema.test.d.ts.map +1 -0
- package/dist/change/schema.test.js +235 -0
- package/dist/change/schema.test.js.map +1 -0
- package/dist/change-author/index.d.ts +2 -0
- package/dist/change-author/index.d.ts.map +1 -0
- package/dist/change-author/index.js +2 -0
- package/dist/change-author/index.js.map +1 -0
- package/dist/change-author/schema.d.ts +31 -0
- package/dist/change-author/schema.d.ts.map +1 -0
- package/dist/change-author/schema.js +35 -0
- package/dist/change-author/schema.js.map +1 -0
- package/dist/change-author/schema.test.d.ts +2 -0
- package/dist/change-author/schema.test.d.ts.map +1 -0
- package/dist/change-author/schema.test.js +256 -0
- package/dist/change-author/schema.test.js.map +1 -0
- package/dist/change-conflict/create-change-conflict.d.ts.map +1 -1
- package/dist/change-conflict/create-change-conflict.js +24 -6
- package/dist/change-conflict/create-change-conflict.js.map +1 -1
- package/dist/change-conflict/create-change-conflict.test.js +13 -11
- package/dist/change-conflict/create-change-conflict.test.js.map +1 -1
- package/dist/change-conflict/detect-change-conflicts.d.ts.map +1 -1
- package/dist/change-conflict/detect-change-conflicts.js +2 -0
- package/dist/change-conflict/detect-change-conflicts.js.map +1 -1
- package/dist/change-conflict/detect-change-conflicts.test.js +17 -13
- package/dist/change-conflict/detect-change-conflicts.test.js.map +1 -1
- package/dist/change-conflict/detect-diverging-entity-conflict.d.ts.map +1 -1
- package/dist/change-conflict/detect-diverging-entity-conflict.js +3 -1
- package/dist/change-conflict/detect-diverging-entity-conflict.js.map +1 -1
- package/dist/change-conflict/detect-diverging-entity-conflict.test.js +23 -21
- package/dist/change-conflict/detect-diverging-entity-conflict.test.js.map +1 -1
- package/dist/change-conflict/garbage-collect-change-conflicts.d.ts.map +1 -1
- package/dist/change-conflict/garbage-collect-change-conflicts.js +2 -0
- package/dist/change-conflict/garbage-collect-change-conflicts.js.map +1 -1
- package/dist/change-conflict/garbage-collect-change-conflicts.test.js +15 -15
- package/dist/change-conflict/garbage-collect-change-conflicts.test.js.map +1 -1
- package/dist/change-conflict/resolve-conflict-by-selecting.d.ts.map +1 -1
- package/dist/change-conflict/resolve-conflict-by-selecting.js +2 -2
- package/dist/change-conflict/resolve-conflict-by-selecting.js.map +1 -1
- package/dist/change-conflict/resolve-conflict-by-selecting.test.js +17 -8
- package/dist/change-conflict/resolve-conflict-by-selecting.test.js.map +1 -1
- package/dist/change-proposal/create-change-proposal.d.ts +16 -0
- package/dist/change-proposal/create-change-proposal.d.ts.map +1 -0
- package/dist/change-proposal/create-change-proposal.js +52 -0
- package/dist/change-proposal/create-change-proposal.js.map +1 -0
- package/dist/change-proposal/create-change-proposal.test.d.ts +2 -0
- package/dist/change-proposal/create-change-proposal.test.d.ts.map +1 -0
- package/dist/change-proposal/create-change-proposal.test.js +91 -0
- package/dist/change-proposal/create-change-proposal.test.js.map +1 -0
- package/dist/change-proposal/database-schema.d.ts +13 -0
- package/dist/change-proposal/database-schema.d.ts.map +1 -0
- package/dist/change-proposal/database-schema.js +17 -0
- package/dist/change-proposal/database-schema.js.map +1 -0
- package/dist/change-proposal/database-schema.test.d.ts +2 -0
- package/dist/change-proposal/database-schema.test.d.ts.map +1 -0
- package/dist/change-proposal/database-schema.test.js +159 -0
- package/dist/change-proposal/database-schema.test.js.map +1 -0
- package/dist/change-proposal/index.d.ts +3 -0
- package/dist/change-proposal/index.d.ts.map +1 -0
- package/dist/change-proposal/index.js +3 -0
- package/dist/change-proposal/index.js.map +1 -0
- package/dist/change-set/apply-change-set.d.ts +10 -0
- package/dist/change-set/apply-change-set.d.ts.map +1 -0
- package/dist/change-set/apply-change-set.js +150 -0
- package/dist/change-set/apply-change-set.js.map +1 -0
- package/dist/change-set/apply-change-set.test.d.ts +2 -0
- package/dist/change-set/apply-change-set.test.d.ts.map +1 -0
- package/dist/change-set/apply-change-set.test.js +390 -0
- package/dist/change-set/apply-change-set.test.js.map +1 -0
- package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +1 -1
- package/dist/change-set/create-change-set.d.ts +19 -18
- package/dist/change-set/create-change-set.d.ts.map +1 -1
- package/dist/change-set/create-change-set.js +95 -34
- package/dist/change-set/create-change-set.js.map +1 -1
- package/dist/change-set/create-change-set.test.js +109 -27
- package/dist/change-set/create-change-set.test.js.map +1 -1
- package/dist/change-set/create-checkpoint.d.ts +19 -0
- package/dist/change-set/create-checkpoint.d.ts.map +1 -0
- package/dist/change-set/create-checkpoint.js +86 -0
- package/dist/change-set/create-checkpoint.js.map +1 -0
- package/dist/change-set/create-checkpoint.test.d.ts +2 -0
- package/dist/change-set/create-checkpoint.test.d.ts.map +1 -0
- package/dist/change-set/create-checkpoint.test.js +294 -0
- package/dist/change-set/create-checkpoint.test.js.map +1 -0
- package/dist/change-set/create-merge-change-set.d.ts +23 -0
- package/dist/change-set/create-merge-change-set.d.ts.map +1 -0
- package/dist/change-set/create-merge-change-set.js +68 -0
- package/dist/change-set/create-merge-change-set.js.map +1 -0
- package/dist/change-set/create-merge-change-set.test.d.ts +2 -0
- package/dist/change-set/create-merge-change-set.test.d.ts.map +1 -0
- package/dist/change-set/create-merge-change-set.test.js +211 -0
- package/dist/change-set/create-merge-change-set.test.js.map +1 -0
- package/dist/change-set/create-transition-change-set.d.ts +18 -0
- package/dist/change-set/create-transition-change-set.d.ts.map +1 -0
- package/dist/change-set/create-transition-change-set.js +102 -0
- package/dist/change-set/create-transition-change-set.js.map +1 -0
- package/dist/change-set/create-transition-change-set.test.d.ts +2 -0
- package/dist/change-set/create-transition-change-set.test.d.ts.map +1 -0
- package/dist/change-set/create-transition-change-set.test.js +211 -0
- package/dist/change-set/create-transition-change-set.test.js.map +1 -0
- package/dist/change-set/create-undo-change-set.d.ts +27 -0
- package/dist/change-set/create-undo-change-set.d.ts.map +1 -0
- package/dist/change-set/create-undo-change-set.js +121 -0
- package/dist/change-set/create-undo-change-set.js.map +1 -0
- package/dist/change-set/create-undo-change-set.test.d.ts +2 -0
- package/dist/change-set/create-undo-change-set.test.d.ts.map +1 -0
- package/dist/change-set/create-undo-change-set.test.js +273 -0
- package/dist/change-set/create-undo-change-set.test.js.map +1 -0
- package/dist/change-set/index.d.ts +6 -1
- package/dist/change-set/index.d.ts.map +1 -1
- package/dist/change-set/index.js +6 -1
- package/dist/change-set/index.js.map +1 -1
- package/dist/change-set/schema.d.ts +149 -0
- package/dist/change-set/schema.d.ts.map +1 -0
- package/dist/change-set/schema.js +169 -0
- package/dist/change-set/schema.js.map +1 -0
- package/dist/change-set/schema.test.d.ts +2 -0
- package/dist/change-set/schema.test.d.ts.map +1 -0
- package/dist/change-set/schema.test.js +821 -0
- package/dist/change-set/schema.test.js.map +1 -0
- package/dist/database/execute-sync.d.ts +12 -6
- package/dist/database/execute-sync.d.ts.map +1 -1
- package/dist/database/execute-sync.js +25 -24
- package/dist/database/execute-sync.js.map +1 -1
- package/dist/database/execute-sync.test.js +53 -60
- package/dist/database/execute-sync.test.js.map +1 -1
- package/dist/database/graph-traversal-mode.d.ts +72 -0
- package/dist/database/graph-traversal-mode.d.ts.map +1 -0
- package/dist/database/graph-traversal-mode.js +2 -0
- package/dist/database/graph-traversal-mode.js.map +1 -0
- package/dist/database/index.d.ts +3 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +3 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/init-db.d.ts +2 -0
- package/dist/database/init-db.d.ts.map +1 -1
- package/dist/database/init-db.js +69 -56
- package/dist/database/init-db.js.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.d.ts +3 -0
- package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +1 -0
- package/dist/database/kysely-plugin/json-column-plugin.js +168 -0
- package/dist/database/kysely-plugin/json-column-plugin.js.map +1 -0
- package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.d.ts.map +1 -1
- package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js +5 -10
- package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js.map +1 -1
- package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js +1 -1
- package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js.map +1 -1
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts +14 -2
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts.map +1 -1
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.js +145 -74
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.js.map +1 -1
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js +145 -1
- package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js.map +1 -1
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.d.ts +15 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.d.ts.map +1 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.js +31 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.js.map +1 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.d.ts +2 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.d.ts.map +1 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js +51 -0
- package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js.map +1 -0
- package/dist/database/schema.d.ts +42 -208
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +35 -1
- package/dist/database/schema.js.map +1 -1
- package/dist/entity-views/entity-state-all.d.ts +217 -0
- package/dist/entity-views/entity-state-all.d.ts.map +1 -0
- package/dist/entity-views/entity-state-all.js +246 -0
- package/dist/entity-views/entity-state-all.js.map +1 -0
- package/dist/entity-views/entity-state-all.test.d.ts +2 -0
- package/dist/entity-views/entity-state-all.test.d.ts.map +1 -0
- package/dist/entity-views/entity-state-all.test.js +371 -0
- package/dist/entity-views/entity-state-all.test.js.map +1 -0
- package/dist/entity-views/entity-state-history.d.ts +178 -0
- package/dist/entity-views/entity-state-history.d.ts.map +1 -0
- package/dist/entity-views/entity-state-history.js +58 -0
- package/dist/entity-views/entity-state-history.js.map +1 -0
- package/dist/entity-views/entity-state-history.test.d.ts +2 -0
- package/dist/entity-views/entity-state-history.test.d.ts.map +1 -0
- package/dist/entity-views/entity-state-history.test.js +274 -0
- package/dist/entity-views/entity-state-history.test.js.map +1 -0
- package/dist/entity-views/entity-state.d.ts +217 -0
- package/dist/entity-views/entity-state.d.ts.map +1 -0
- package/dist/entity-views/entity-state.js +243 -0
- package/dist/entity-views/entity-state.js.map +1 -0
- package/dist/entity-views/entity-state.test.d.ts +2 -0
- package/dist/entity-views/entity-state.test.d.ts.map +1 -0
- package/dist/entity-views/entity-state.test.js +497 -0
- package/dist/entity-views/entity-state.test.js.map +1 -0
- package/dist/entity-views/entity-state_history.d.ts +67 -0
- package/dist/entity-views/entity-state_history.d.ts.map +1 -0
- package/dist/entity-views/entity-state_history.js +58 -0
- package/dist/entity-views/entity-state_history.js.map +1 -0
- package/dist/entity-views/entity-view-builder.d.ts +92 -0
- package/dist/entity-views/entity-view-builder.d.ts.map +1 -0
- package/dist/entity-views/entity-view-builder.js +63 -0
- package/dist/entity-views/entity-view-builder.js.map +1 -0
- package/dist/entity-views/entity-view-builder.test.d.ts +2 -0
- package/dist/entity-views/entity-view-builder.test.d.ts.map +1 -0
- package/dist/entity-views/entity-view-builder.test.js +247 -0
- package/dist/entity-views/entity-view-builder.test.js.map +1 -0
- package/dist/entity-views/generic-types.d.ts +128 -0
- package/dist/entity-views/generic-types.d.ts.map +1 -0
- package/dist/entity-views/generic-types.js +2 -0
- package/dist/entity-views/generic-types.js.map +1 -0
- package/dist/entity-views/generic-types.test.d.ts +2 -0
- package/dist/entity-views/generic-types.test.d.ts.map +1 -0
- package/dist/entity-views/generic-types.test.js +99 -0
- package/dist/entity-views/generic-types.test.js.map +1 -0
- package/dist/entity-views/index.d.ts +2 -0
- package/dist/entity-views/index.d.ts.map +1 -0
- package/dist/entity-views/index.js +2 -0
- package/dist/entity-views/index.js.map +1 -0
- package/dist/entity-views/types.d.ts +309 -0
- package/dist/entity-views/types.d.ts.map +1 -0
- package/dist/entity-views/types.js +2 -0
- package/dist/entity-views/types.js.map +1 -0
- package/dist/entity-views/types.test.d.ts +2 -0
- package/dist/entity-views/types.test.d.ts.map +1 -0
- package/dist/entity-views/types.test.js +62 -0
- package/dist/entity-views/types.test.js.map +1 -0
- package/dist/file/file-handlers.d.ts +15 -0
- package/dist/file/file-handlers.d.ts.map +1 -0
- package/dist/file/file-handlers.js +318 -0
- package/dist/file/file-handlers.js.map +1 -0
- package/dist/file/file-handlers.test.d.ts +2 -0
- package/dist/file/file-handlers.test.d.ts.map +1 -0
- package/dist/file/file-handlers.test.js +151 -0
- package/dist/file/file-handlers.test.js.map +1 -0
- package/dist/file/index.d.ts +1 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +1 -1
- package/dist/file/index.js.map +1 -1
- package/dist/file/materialize-file-data-at-changeset.d.ts +9 -0
- package/dist/file/materialize-file-data-at-changeset.d.ts.map +1 -0
- package/dist/file/materialize-file-data-at-changeset.js +93 -0
- package/dist/file/materialize-file-data-at-changeset.js.map +1 -0
- package/dist/file/materialize-file-data.d.ts +8 -0
- package/dist/file/materialize-file-data.d.ts.map +1 -0
- package/dist/file/materialize-file-data.js +91 -0
- package/dist/file/materialize-file-data.js.map +1 -0
- package/dist/file/materialize-file-data.test.d.ts +2 -0
- package/dist/file/materialize-file-data.test.d.ts.map +1 -0
- package/dist/file/materialize-file-data.test.js +90 -0
- package/dist/file/materialize-file-data.test.js.map +1 -0
- package/dist/file/schema.d.ts +46 -0
- package/dist/file/schema.d.ts.map +1 -0
- package/dist/file/schema.js +265 -0
- package/dist/file/schema.js.map +1 -0
- package/dist/file/schema.test.d.ts +2 -0
- package/dist/file/schema.test.d.ts.map +1 -0
- package/dist/file/schema.test.js +805 -0
- package/dist/file/schema.test.js.map +1 -0
- package/dist/file/store-detected-change-schema.d.ts +8 -0
- package/dist/file/store-detected-change-schema.d.ts.map +1 -0
- package/dist/file/store-detected-change-schema.js +41 -0
- package/dist/file/store-detected-change-schema.js.map +1 -0
- package/dist/file/store-detected-change-schema.test.d.ts +2 -0
- package/dist/file/store-detected-change-schema.test.d.ts.map +1 -0
- package/dist/file/store-detected-change-schema.test.js +211 -0
- package/dist/file/store-detected-change-schema.test.js.map +1 -0
- package/dist/file/unknown-file-fallback-plugin.d.ts +22 -0
- package/dist/file/unknown-file-fallback-plugin.d.ts.map +1 -0
- package/dist/file/unknown-file-fallback-plugin.js +73 -0
- package/dist/file/unknown-file-fallback-plugin.js.map +1 -0
- package/dist/file/unknown-file-fallback-plugin.test.d.ts +2 -0
- package/dist/file/unknown-file-fallback-plugin.test.d.ts.map +1 -0
- package/dist/file/unknown-file-fallback-plugin.test.js +305 -0
- package/dist/file/unknown-file-fallback-plugin.test.js.map +1 -0
- package/dist/hooks/create-hooks.d.ts +72 -0
- package/dist/hooks/create-hooks.d.ts.map +1 -0
- package/dist/hooks/create-hooks.js +29 -0
- package/dist/hooks/create-hooks.js.map +1 -0
- package/dist/hooks/create-hooks.test.d.ts +2 -0
- package/dist/hooks/create-hooks.test.d.ts.map +1 -0
- package/dist/hooks/create-hooks.test.js +98 -0
- package/dist/hooks/create-hooks.test.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/key-value/index.d.ts +2 -0
- package/dist/key-value/index.d.ts.map +1 -0
- package/dist/key-value/index.js +2 -0
- package/dist/key-value/index.js.map +1 -0
- package/dist/key-value/schema.d.ts +21 -0
- package/dist/key-value/schema.d.ts.map +1 -0
- package/dist/key-value/schema.js +25 -0
- package/dist/key-value/schema.js.map +1 -0
- package/dist/key-value/schema.test.d.ts +2 -0
- package/dist/key-value/schema.test.d.ts.map +1 -0
- package/dist/key-value/schema.test.js +148 -0
- package/dist/key-value/schema.test.js.map +1 -0
- package/dist/label/create-label.d.ts +20 -0
- package/dist/label/create-label.d.ts.map +1 -0
- package/dist/label/create-label.js +45 -0
- package/dist/label/create-label.js.map +1 -0
- package/dist/label/create-label.test.d.ts +2 -0
- package/dist/label/create-label.test.d.ts.map +1 -0
- package/dist/label/create-label.test.js +191 -0
- package/dist/label/create-label.test.js.map +1 -0
- package/dist/label/index.d.ts +3 -0
- package/dist/label/index.d.ts.map +1 -0
- package/dist/label/index.js +3 -0
- package/dist/label/index.js.map +1 -0
- package/dist/label/schema.d.ts +22 -0
- package/dist/label/schema.d.ts.map +1 -0
- package/dist/label/schema.js +28 -0
- package/dist/label/schema.js.map +1 -0
- package/dist/label/schema.test.d.ts +2 -0
- package/dist/label/schema.test.d.ts.map +1 -0
- package/dist/label/schema.test.js +76 -0
- package/dist/label/schema.test.js.map +1 -0
- package/dist/lix/close-lix.d.ts +10 -1
- package/dist/lix/close-lix.d.ts.map +1 -1
- package/dist/lix/close-lix.js +10 -1
- package/dist/lix/close-lix.js.map +1 -1
- package/dist/lix/index.d.ts +3 -3
- package/dist/lix/index.d.ts.map +1 -1
- package/dist/lix/index.js +3 -6
- package/dist/lix/index.js.map +1 -1
- package/dist/lix/new-lix.d.ts +77 -4
- package/dist/lix/new-lix.d.ts.map +1 -1
- package/dist/lix/new-lix.js +303 -8
- package/dist/lix/new-lix.js.map +1 -1
- package/dist/lix/new-lix.test.js +171 -16
- package/dist/lix/new-lix.test.js.map +1 -1
- package/dist/lix/open-lix-in-memory.d.ts +9 -1
- package/dist/lix/open-lix-in-memory.d.ts.map +1 -1
- package/dist/lix/open-lix-in-memory.js +15 -7
- package/dist/lix/open-lix-in-memory.js.map +1 -1
- package/dist/lix/open-lix-in-memory.test.js +0 -6
- package/dist/lix/open-lix-in-memory.test.js.map +1 -1
- package/dist/lix/open-lix.d.ts +68 -6
- package/dist/lix/open-lix.d.ts.map +1 -1
- package/dist/lix/open-lix.js +80 -14
- package/dist/lix/open-lix.js.map +1 -1
- package/dist/lix/open-lix.test.js +54 -22
- package/dist/lix/open-lix.test.js.map +1 -1
- package/dist/lix/storage/in-memory.d.ts +34 -0
- package/dist/lix/storage/in-memory.d.ts.map +1 -0
- package/dist/lix/storage/in-memory.js +57 -0
- package/dist/lix/storage/in-memory.js.map +1 -0
- package/dist/lix/storage/in-memory.test.d.ts +2 -0
- package/dist/lix/storage/in-memory.test.d.ts.map +1 -0
- package/dist/lix/storage/in-memory.test.js +146 -0
- package/dist/lix/storage/in-memory.test.js.map +1 -0
- package/dist/lix/storage/lix-storage-adapter.d.ts +16 -0
- package/dist/lix/storage/lix-storage-adapter.d.ts.map +1 -0
- package/dist/lix/storage/lix-storage-adapter.js +2 -0
- package/dist/lix/storage/lix-storage-adapter.js.map +1 -0
- package/dist/lix/storage/opfs.d.ts +66 -0
- package/dist/lix/storage/opfs.d.ts.map +1 -0
- package/dist/lix/storage/opfs.js +152 -0
- package/dist/lix/storage/opfs.js.map +1 -0
- package/dist/lix/storage/opfs.test.d.ts +2 -0
- package/dist/lix/storage/opfs.test.d.ts.map +1 -0
- package/dist/lix/storage/opfs.test.js +171 -0
- package/dist/lix/storage/opfs.test.js.map +1 -0
- package/dist/lix/to-blob.d.ts +9 -2
- package/dist/lix/to-blob.d.ts.map +1 -1
- package/dist/lix/to-blob.js +9 -2
- package/dist/lix/to-blob.js.map +1 -1
- package/dist/lix/to-blob.test.d.ts +2 -0
- package/dist/lix/to-blob.test.d.ts.map +1 -0
- package/dist/lix/to-blob.test.js +18 -0
- package/dist/lix/to-blob.test.js.map +1 -0
- package/dist/log/create-lix-own-log.d.ts +66 -0
- package/dist/log/create-lix-own-log.d.ts.map +1 -0
- package/dist/log/create-lix-own-log.js +103 -0
- package/dist/log/create-lix-own-log.js.map +1 -0
- package/dist/log/create-lix-own-log.test.d.ts +2 -0
- package/dist/log/create-lix-own-log.test.d.ts.map +1 -0
- package/dist/log/create-lix-own-log.test.js +81 -0
- package/dist/log/create-lix-own-log.test.js.map +1 -0
- package/dist/log/create-log.d.ts +32 -0
- package/dist/log/create-log.d.ts.map +1 -0
- package/dist/log/create-log.js +43 -0
- package/dist/log/create-log.js.map +1 -0
- package/dist/log/index.d.ts +3 -0
- package/dist/log/index.d.ts.map +1 -0
- package/dist/log/index.js +3 -0
- package/dist/log/index.js.map +1 -0
- package/dist/log/schema.d.ts +32 -0
- package/dist/log/schema.d.ts.map +1 -0
- package/dist/log/schema.js +43 -0
- package/dist/log/schema.js.map +1 -0
- package/dist/log/schema.test.d.ts +2 -0
- package/dist/log/schema.test.d.ts.map +1 -0
- package/dist/log/schema.test.js +119 -0
- package/dist/log/schema.test.js.map +1 -0
- package/dist/observe/create-observe.d.ts +17 -0
- package/dist/observe/create-observe.d.ts.map +1 -0
- package/dist/observe/create-observe.js +118 -0
- package/dist/observe/create-observe.js.map +1 -0
- package/dist/observe/create-observe.test.d.ts +2 -0
- package/dist/observe/create-observe.test.d.ts.map +1 -0
- package/dist/observe/create-observe.test.js +384 -0
- package/dist/observe/create-observe.test.js.map +1 -0
- package/dist/observe/index.d.ts +2 -0
- package/dist/observe/index.d.ts.map +1 -0
- package/dist/observe/index.js +2 -0
- package/dist/observe/index.js.map +1 -0
- package/dist/observe/lix-observable.d.ts +31 -0
- package/dist/observe/lix-observable.d.ts.map +1 -0
- package/dist/observe/lix-observable.js +65 -0
- package/dist/observe/lix-observable.js.map +1 -0
- package/dist/observe/lix-observable.test.d.ts +2 -0
- package/dist/observe/lix-observable.test.d.ts.map +1 -0
- package/dist/observe/lix-observable.test.js +187 -0
- package/dist/observe/lix-observable.test.js.map +1 -0
- package/dist/plugin/index.d.ts +2 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +1 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/lix-plugin.d.ts +24 -45
- package/dist/plugin/lix-plugin.d.ts.map +1 -1
- package/dist/plugin/lix-plugin.js +1 -1
- package/dist/plugin/lix-plugin.js.map +1 -1
- package/dist/plugin/lix-plugin.test-d.js +17 -11
- package/dist/plugin/lix-plugin.test-d.js.map +1 -1
- package/dist/plugin/mock-json-plugin.d.ts +17 -0
- package/dist/plugin/mock-json-plugin.d.ts.map +1 -0
- package/dist/plugin/mock-json-plugin.flatten.d.ts +3 -0
- package/dist/plugin/mock-json-plugin.flatten.d.ts.map +1 -0
- package/dist/plugin/mock-json-plugin.flatten.js +124 -0
- package/dist/plugin/mock-json-plugin.flatten.js.map +1 -0
- package/dist/plugin/mock-json-plugin.js +101 -0
- package/dist/plugin/mock-json-plugin.js.map +1 -0
- package/dist/plugin/mock-json-plugin.test.d.ts +2 -0
- package/dist/plugin/mock-json-plugin.test.d.ts.map +1 -0
- package/dist/plugin/mock-json-plugin.test.js +164 -0
- package/dist/plugin/mock-json-plugin.test.js.map +1 -0
- package/dist/query-filter/change-conflict-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-has-label.d.ts +9 -3
- package/dist/query-filter/change-has-label.d.ts.map +1 -1
- package/dist/query-filter/change-has-label.js +7 -4
- package/dist/query-filter/change-has-label.js.map +1 -1
- package/dist/query-filter/change-has-label.test.js +36 -11
- package/dist/query-filter/change-has-label.test.js.map +1 -1
- package/dist/query-filter/change-is-leaf.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +30 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.js +46 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.js.map +1 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js +323 -0
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +20 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.js +36 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts +2 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.js +369 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +1 -0
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts +29 -0
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-is-leaf-of.js +91 -0
- package/dist/query-filter/change-set-element-is-leaf-of.js.map +1 -0
- package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-is-leaf-of.test.js +515 -0
- package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +1 -0
- package/dist/query-filter/change-set-has-label.d.ts +19 -3
- package/dist/query-filter/change-set-has-label.d.ts.map +1 -1
- package/dist/query-filter/change-set-has-label.js +17 -4
- package/dist/query-filter/change-set-has-label.js.map +1 -1
- package/dist/query-filter/change-set-has-label.test.js +13 -20
- package/dist/query-filter/change-set-has-label.test.js.map +1 -1
- package/dist/query-filter/change-set-is-ancestor-of.d.ts +51 -0
- package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-is-ancestor-of.js +63 -0
- package/dist/query-filter/change-set-is-ancestor-of.js.map +1 -0
- package/dist/query-filter/change-set-is-ancestor-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-is-ancestor-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-is-ancestor-of.test.js +153 -0
- package/dist/query-filter/change-set-is-ancestor-of.test.js.map +1 -0
- package/dist/query-filter/change-set-is-descendant-of.d.ts +44 -0
- package/dist/query-filter/change-set-is-descendant-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-is-descendant-of.js +56 -0
- package/dist/query-filter/change-set-is-descendant-of.js.map +1 -0
- package/dist/query-filter/change-set-is-descendant-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-is-descendant-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-is-descendant-of.test.js +137 -0
- package/dist/query-filter/change-set-is-descendant-of.test.js.map +1 -0
- package/dist/query-filter/index.d.ts +5 -6
- package/dist/query-filter/index.d.ts.map +1 -1
- package/dist/query-filter/index.js +5 -6
- package/dist/query-filter/index.js.map +1 -1
- package/dist/query-filter/version-change-in-difference.d.ts.map +1 -1
- package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +1 -1
- package/dist/repository/comparison-example.js +173 -0
- package/dist/repository/comparison-example.js.map +1 -0
- package/dist/repository/entity-repository.d.ts +53 -0
- package/dist/repository/entity-repository.d.ts.map +1 -0
- package/dist/repository/entity-repository.js +187 -0
- package/dist/repository/entity-repository.js.map +1 -0
- package/dist/repository/entity-repository.test.d.ts +2 -0
- package/dist/repository/entity-repository.test.d.ts.map +1 -0
- package/dist/repository/entity-repository.test.js +94 -0
- package/dist/repository/entity-repository.test.js.map +1 -0
- package/dist/repository/example.d.ts +6 -0
- package/dist/repository/example.d.ts.map +1 -0
- package/dist/repository/example.js +87 -0
- package/dist/repository/example.js.map +1 -0
- package/dist/repository/file-repository.d.ts +39 -0
- package/dist/repository/file-repository.d.ts.map +1 -0
- package/dist/repository/file-repository.js +93 -0
- package/dist/repository/file-repository.js.map +1 -0
- package/dist/repository/file-repository.test.d.ts +2 -0
- package/dist/repository/file-repository.test.d.ts.map +1 -0
- package/dist/repository/file-repository.test.js +165 -0
- package/dist/repository/file-repository.test.js.map +1 -0
- package/dist/repository/index.d.ts +6 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/repository/index.js +6 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/integration.test.d.ts +2 -0
- package/dist/repository/integration.test.d.ts.map +1 -0
- package/dist/repository/integration.test.js +136 -0
- package/dist/repository/integration.test.js.map +1 -0
- package/dist/repository/key-value-repository.d.ts +30 -0
- package/dist/repository/key-value-repository.d.ts.map +1 -0
- package/dist/repository/key-value-repository.js +60 -0
- package/dist/repository/key-value-repository.js.map +1 -0
- package/dist/repository/key-value-repository.test.d.ts +2 -0
- package/dist/repository/key-value-repository.test.d.ts.map +1 -0
- package/dist/repository/key-value-repository.test.js +122 -0
- package/dist/repository/key-value-repository.test.js.map +1 -0
- package/dist/repository/markdown-plugin-example.js +118 -0
- package/dist/repository/markdown-plugin-example.js.map +1 -0
- package/dist/repository/query-builder.d.ts +69 -0
- package/dist/repository/query-builder.d.ts.map +1 -0
- package/dist/repository/query-builder.js +155 -0
- package/dist/repository/query-builder.js.map +1 -0
- package/dist/repository/query-builder.test.d.ts +2 -0
- package/dist/repository/query-builder.test.d.ts.map +1 -0
- package/dist/repository/query-builder.test.js +244 -0
- package/dist/repository/query-builder.test.js.map +1 -0
- package/dist/repository/repository-manager.d.ts +27 -0
- package/dist/repository/repository-manager.d.ts.map +1 -0
- package/dist/repository/repository-manager.js +19 -0
- package/dist/repository/repository-manager.js.map +1 -0
- package/dist/repository/repository-manager.test.d.ts +2 -0
- package/dist/repository/repository-manager.test.d.ts.map +1 -0
- package/dist/repository/repository-manager.test.js +65 -0
- package/dist/repository/repository-manager.test.js.map +1 -0
- package/dist/repository/test-helpers.js +402 -0
- package/dist/repository/test-helpers.js.map +1 -0
- package/dist/schema-definition/definition.d.ts +406 -0
- package/dist/schema-definition/definition.d.ts.map +1 -0
- package/dist/schema-definition/definition.js +82 -0
- package/dist/schema-definition/definition.js.map +1 -0
- package/dist/schema-definition/definition.test-d.d.ts +2 -0
- package/dist/schema-definition/definition.test-d.d.ts.map +1 -0
- package/dist/schema-definition/definition.test-d.js +177 -0
- package/dist/schema-definition/definition.test-d.js.map +1 -0
- package/dist/schema-definition/definition.test.d.ts +2 -0
- package/dist/schema-definition/definition.test.d.ts.map +1 -0
- package/dist/schema-definition/definition.test.js +324 -0
- package/dist/schema-definition/definition.test.js.map +1 -0
- package/dist/schema-definition/index.d.ts +4 -0
- package/dist/schema-definition/index.d.ts.map +1 -0
- package/dist/schema-definition/index.js +4 -0
- package/dist/schema-definition/index.js.map +1 -0
- package/dist/schema-definition/json-type.d.ts +24 -0
- package/dist/schema-definition/json-type.d.ts.map +1 -0
- package/dist/schema-definition/json-type.js +42 -0
- package/dist/schema-definition/json-type.js.map +1 -0
- package/dist/schema-definition/json-type.test.d.ts +2 -0
- package/dist/schema-definition/json-type.test.d.ts.map +1 -0
- package/dist/schema-definition/json-type.test.js +21 -0
- package/dist/schema-definition/json-type.test.js.map +1 -0
- package/dist/schema-definition/lix-generated.test.d.ts +2 -0
- package/dist/schema-definition/lix-generated.test.d.ts.map +1 -0
- package/dist/schema-definition/lix-generated.test.js +127 -0
- package/dist/schema-definition/lix-generated.test.js.map +1 -0
- package/dist/schema-definition/validate-lix-schema.d.ts +65 -0
- package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -0
- package/dist/schema-definition/validate-lix-schema.js +93 -0
- package/dist/schema-definition/validate-lix-schema.js.map +1 -0
- package/dist/schema-definition/validate-lix-schema.test.d.ts +2 -0
- package/dist/schema-definition/validate-lix-schema.test.d.ts.map +1 -0
- package/dist/schema-definition/validate-lix-schema.test.js +73 -0
- package/dist/schema-definition/validate-lix-schema.test.js.map +1 -0
- package/dist/server-protocol-handler/create-server-protocol-handler.d.ts +0 -1
- package/dist/server-protocol-handler/create-server-protocol-handler.d.ts.map +1 -1
- package/dist/server-protocol-handler/create-server-protocol-handler.js +0 -2
- package/dist/server-protocol-handler/create-server-protocol-handler.js.map +1 -1
- package/dist/server-protocol-handler/environment/create-in-memory-environment.d.ts.map +1 -1
- package/dist/server-protocol-handler/environment/create-in-memory-environment.js +5 -20
- package/dist/server-protocol-handler/environment/create-in-memory-environment.js.map +1 -1
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +13 -14
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
- package/dist/server-protocol-handler/environment/environment.d.ts +0 -4
- package/dist/server-protocol-handler/environment/environment.d.ts.map +1 -1
- package/dist/server-protocol-handler/routes/get-v1.d.ts.map +1 -1
- package/dist/server-protocol-handler/routes/get-v1.js +1 -1
- package/dist/server-protocol-handler/routes/get-v1.js.map +1 -1
- package/dist/server-protocol-handler/routes/get-v1.test.js +11 -12
- package/dist/server-protocol-handler/routes/get-v1.test.js.map +1 -1
- package/dist/server-protocol-handler/routes/new-v1.d.ts.map +1 -1
- package/dist/server-protocol-handler/routes/new-v1.js +3 -5
- package/dist/server-protocol-handler/routes/new-v1.js.map +1 -1
- package/dist/server-protocol-handler/routes/new-v1.test.js +7 -8
- package/dist/server-protocol-handler/routes/new-v1.test.js.map +1 -1
- package/dist/server-protocol-handler/routes/pull-v1.test.js +48 -32
- package/dist/server-protocol-handler/routes/pull-v1.test.js.map +1 -1
- package/dist/server-protocol-handler/routes/push-v1.d.ts.map +1 -1
- package/dist/server-protocol-handler/routes/push-v1.js +2 -0
- package/dist/server-protocol-handler/routes/push-v1.js.map +1 -1
- package/dist/server-protocol-handler/routes/push-v1.test.js +22 -26
- package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
- package/dist/services/env-variables/index.d.ts +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/dist/services/env-variables/index.js.map +1 -1
- package/dist/services/telemetry/capture.d.ts.map +1 -1
- package/dist/snapshot/create-snapshot.d.ts +3 -14
- package/dist/snapshot/create-snapshot.d.ts.map +1 -1
- package/dist/snapshot/create-snapshot.js +14 -19
- package/dist/snapshot/create-snapshot.js.map +1 -1
- package/dist/snapshot/create-snapshot.test.js +49 -20
- package/dist/snapshot/create-snapshot.test.js.map +1 -1
- package/dist/snapshot/index.d.ts +1 -0
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +1 -0
- package/dist/snapshot/index.js.map +1 -1
- package/dist/snapshot/json-sha-256.d.ts +2 -1
- package/dist/snapshot/json-sha-256.d.ts.map +1 -1
- package/dist/snapshot/json-sha-256.js +1 -3
- package/dist/snapshot/json-sha-256.js.map +1 -1
- package/dist/snapshot/json-sha-256.test.js +40 -2
- package/dist/snapshot/json-sha-256.test.js.map +1 -1
- package/dist/snapshot/mock-json-snapshot.d.ts +1 -1
- package/dist/snapshot/mock-json-snapshot.d.ts.map +1 -1
- package/dist/snapshot/schema.d.ts +8 -0
- package/dist/snapshot/schema.d.ts.map +1 -0
- package/dist/snapshot/schema.js +12 -0
- package/dist/snapshot/schema.js.map +1 -0
- package/dist/snapshot/schema.test.d.ts +2 -0
- package/dist/snapshot/schema.test.d.ts.map +1 -0
- package/dist/snapshot/schema.test.js +116 -0
- package/dist/snapshot/schema.test.js.map +1 -0
- package/dist/state/create-changeset-for-transaction.d.ts +15 -0
- package/dist/state/create-changeset-for-transaction.d.ts.map +1 -0
- package/dist/state/create-changeset-for-transaction.js +237 -0
- package/dist/state/create-changeset-for-transaction.js.map +1 -0
- package/dist/state/entity-view-builder.d.ts +145 -0
- package/dist/state/entity-view-builder.d.ts.map +1 -0
- package/dist/state/entity-view-builder.js +280 -0
- package/dist/state/entity-view-builder.js.map +1 -0
- package/dist/state/entity-view-builder.test.d.ts +2 -0
- package/dist/state/entity-view-builder.test.d.ts.map +1 -0
- package/dist/state/entity-view-builder.test.js +523 -0
- package/dist/state/entity-view-builder.test.js.map +1 -0
- package/dist/state/get-version-record-by-id-or-throw.d.ts +6 -0
- package/dist/state/get-version-record-by-id-or-throw.d.ts.map +1 -0
- package/dist/state/get-version-record-by-id-or-throw.js +36 -0
- package/dist/state/get-version-record-by-id-or-throw.js.map +1 -0
- package/dist/state/handle-state-mutation.d.ts +18 -0
- package/dist/state/handle-state-mutation.d.ts.map +1 -0
- package/dist/state/handle-state-mutation.js +352 -0
- package/dist/state/handle-state-mutation.js.map +1 -0
- package/dist/state/handle-state-mutation.test.d.ts +2 -0
- package/dist/state/handle-state-mutation.test.d.ts.map +1 -0
- package/dist/state/handle-state-mutation.test.js +632 -0
- package/dist/state/handle-state-mutation.test.js.map +1 -0
- package/dist/state/schema.bench.d.ts +2 -0
- package/dist/state/schema.bench.d.ts.map +1 -0
- package/dist/state/schema.bench.js +36 -0
- package/dist/state/schema.bench.js.map +1 -0
- package/dist/state/schema.d.ts +56 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +1052 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/schema.test.d.ts +2 -0
- package/dist/state/schema.test.d.ts.map +1 -0
- package/dist/state/schema.test.js +2030 -0
- package/dist/state/schema.test.js.map +1 -0
- package/dist/state/validate-state-mutation.d.ts +13 -0
- package/dist/state/validate-state-mutation.d.ts.map +1 -0
- package/dist/state/validate-state-mutation.js +485 -0
- package/dist/state/validate-state-mutation.js.map +1 -0
- package/dist/state/validate-state-mutation.test.d.ts +2 -0
- package/dist/state/validate-state-mutation.test.d.ts.map +1 -0
- package/dist/state/validate-state-mutation.test.js +2024 -0
- package/dist/state/validate-state-mutation.test.js.map +1 -0
- package/dist/state-history/schema.d.ts +58 -0
- package/dist/state-history/schema.d.ts.map +1 -0
- package/dist/state-history/schema.js +104 -0
- package/dist/state-history/schema.js.map +1 -0
- package/dist/state-history/schema.test.d.ts +2 -0
- package/dist/state-history/schema.test.d.ts.map +1 -0
- package/dist/state-history/schema.test.js +701 -0
- package/dist/state-history/schema.test.js.map +1 -0
- package/dist/stored-schema/index.d.ts +2 -0
- package/dist/stored-schema/index.d.ts.map +1 -0
- package/dist/stored-schema/index.js +2 -0
- package/dist/stored-schema/index.js.map +1 -0
- package/dist/stored-schema/schema.d.ts +25 -0
- package/dist/stored-schema/schema.d.ts.map +1 -0
- package/dist/stored-schema/schema.js +48 -0
- package/dist/stored-schema/schema.js.map +1 -0
- package/dist/stored-schema/schema.test.d.ts +2 -0
- package/dist/stored-schema/schema.test.d.ts.map +1 -0
- package/dist/stored-schema/schema.test.js +192 -0
- package/dist/stored-schema/schema.test.js.map +1 -0
- package/dist/sync/get-diffing-rows.d.ts +12 -0
- package/dist/sync/get-diffing-rows.d.ts.map +1 -1
- package/dist/sync/get-diffing-rows.js +14 -0
- package/dist/sync/get-diffing-rows.js.map +1 -1
- package/dist/sync/merge-state.d.ts.map +1 -1
- package/dist/sync/merge-state.js +2 -1
- package/dist/sync/merge-state.js.map +1 -1
- package/dist/sync/pull-from-server.d.ts.map +1 -1
- package/dist/sync/pull-from-server.js +2 -1
- package/dist/sync/pull-from-server.js.map +1 -1
- package/dist/sync/pull-from-server.test.js +32 -28
- package/dist/sync/pull-from-server.test.js.map +1 -1
- package/dist/sync/push-to-server.d.ts +10 -1
- package/dist/sync/push-to-server.d.ts.map +1 -1
- package/dist/sync/push-to-server.js +10 -1
- package/dist/sync/push-to-server.js.map +1 -1
- package/dist/sync/push-to-server.test.js +62 -63
- package/dist/sync/push-to-server.test.js.map +1 -1
- package/dist/sync/sync-process.d.ts +1 -1
- package/dist/sync/sync-process.d.ts.map +1 -1
- package/dist/sync/sync-process.js +1 -2
- package/dist/sync/sync-process.js.map +1 -1
- package/dist/sync/sync-process.test.js +20 -17
- package/dist/sync/sync-process.test.js.map +1 -1
- package/dist/thread/create-thread-comment.d.ts +18 -0
- package/dist/thread/create-thread-comment.d.ts.map +1 -0
- package/dist/thread/create-thread-comment.js +47 -0
- package/dist/thread/create-thread-comment.js.map +1 -0
- package/dist/thread/create-thread-comment.test.d.ts +2 -0
- package/dist/thread/create-thread-comment.test.d.ts.map +1 -0
- package/dist/thread/create-thread-comment.test.js +51 -0
- package/dist/thread/create-thread-comment.test.js.map +1 -0
- package/dist/thread/create-thread.d.ts +28 -0
- package/dist/thread/create-thread.d.ts.map +1 -0
- package/dist/thread/create-thread.js +58 -0
- package/dist/thread/create-thread.js.map +1 -0
- package/dist/thread/create-thread.test.d.ts +2 -0
- package/dist/thread/create-thread.test.d.ts.map +1 -0
- package/dist/thread/create-thread.test.js +26 -0
- package/dist/thread/create-thread.test.js.map +1 -0
- package/dist/thread/index.d.ts +4 -0
- package/dist/thread/index.d.ts.map +1 -0
- package/dist/thread/index.js +4 -0
- package/dist/thread/index.js.map +1 -0
- package/dist/thread/schema.d.ts +59 -0
- package/dist/thread/schema.d.ts.map +1 -0
- package/dist/thread/schema.js +66 -0
- package/dist/thread/schema.js.map +1 -0
- package/dist/thread/schema.test.d.ts +2 -0
- package/dist/thread/schema.test.d.ts.map +1 -0
- package/dist/thread/schema.test.js +60 -0
- package/dist/thread/schema.test.js.map +1 -0
- package/dist/version/create-version.d.ts +9 -17
- package/dist/version/create-version.d.ts.map +1 -1
- package/dist/version/create-version.js +30 -57
- package/dist/version/create-version.js.map +1 -1
- package/dist/version/create-version.test.js +70 -113
- package/dist/version/create-version.test.js.map +1 -1
- package/dist/version/index.d.ts +1 -5
- package/dist/version/index.d.ts.map +1 -1
- package/dist/version/index.js +1 -5
- package/dist/version/index.js.map +1 -1
- package/dist/version/schema.d.ts +73 -0
- package/dist/version/schema.d.ts.map +1 -0
- package/dist/version/schema.js +135 -0
- package/dist/version/schema.js.map +1 -0
- package/dist/version/schema.test.d.ts +2 -0
- package/dist/version/schema.test.d.ts.map +1 -0
- package/dist/version/schema.test.js +661 -0
- package/dist/version/schema.test.js.map +1 -0
- package/dist/version/switch-version.d.ts +4 -4
- package/dist/version/switch-version.d.ts.map +1 -1
- package/dist/version/switch-version.js +6 -62
- package/dist/version/switch-version.js.map +1 -1
- package/dist/version/switch-version.test.js +14 -214
- package/dist/version/switch-version.test.js.map +1 -1
- package/dist/zettel-ast/index.d.ts +11 -0
- package/dist/zettel-ast/index.d.ts.map +1 -0
- package/dist/zettel-ast/index.js +11 -0
- package/dist/zettel-ast/index.js.map +1 -0
- package/package.json +10 -9
- package/src/account/create-account.test.ts +49 -4
- package/src/account/create-account.ts +36 -6
- package/src/account/index.ts +5 -1
- package/src/account/schema.test.ts +370 -0
- package/src/account/schema.ts +76 -0
- package/src/account/switch-account.test.ts +29 -6
- package/src/account/switch-account.ts +12 -3
- package/src/change/index.ts +1 -2
- package/src/change/schema.test.ts +284 -0
- package/src/change/schema.ts +93 -0
- package/src/change-author/index.ts +1 -0
- package/src/change-author/schema.test.ts +300 -0
- package/src/change-author/schema.ts +48 -0
- package/src/change-conflict/create-change-conflict.test.ts +14 -11
- package/src/change-conflict/create-change-conflict.ts +29 -6
- package/src/change-conflict/detect-change-conflicts.test.ts +18 -15
- package/src/change-conflict/detect-change-conflicts.ts +3 -0
- package/src/change-conflict/detect-diverging-entity-conflict.test.ts +24 -21
- package/src/change-conflict/detect-diverging-entity-conflict.ts +4 -1
- package/src/change-conflict/garbage-collect-change-conflicts.test.ts +16 -15
- package/src/change-conflict/garbage-collect-change-conflicts.ts +3 -0
- package/src/change-conflict/resolve-conflict-by-selecting.test.ts +18 -8
- package/src/change-conflict/resolve-conflict-by-selecting.ts +3 -2
- package/src/change-proposal/create-change-proposal.test.ts +106 -0
- package/src/change-proposal/create-change-proposal.ts +71 -0
- package/src/change-proposal/database-schema.test.ts +180 -0
- package/src/change-proposal/database-schema.ts +32 -0
- package/src/change-proposal/index.ts +2 -0
- package/src/change-set/apply-change-set.test.ts +469 -0
- package/src/change-set/apply-change-set.ts +186 -0
- package/src/change-set/create-change-set.test.ts +126 -27
- package/src/change-set/create-change-set.ts +117 -41
- package/src/change-set/create-checkpoint.test.ts +387 -0
- package/src/change-set/create-checkpoint.ts +101 -0
- package/src/change-set/create-merge-change-set.test.ts +237 -0
- package/src/change-set/create-merge-change-set.ts +99 -0
- package/src/change-set/create-transition-change-set.test.ts +245 -0
- package/src/change-set/create-transition-change-set.ts +149 -0
- package/src/change-set/create-undo-change-set.test.ts +329 -0
- package/src/change-set/create-undo-change-set.ts +147 -0
- package/src/change-set/index.ts +17 -1
- package/src/change-set/schema.test.ts +981 -0
- package/src/change-set/schema.ts +207 -0
- package/src/database/execute-sync.test.ts +60 -72
- package/src/database/execute-sync.ts +26 -27
- package/src/database/graph-traversal-mode.ts +75 -0
- package/src/database/index.ts +3 -2
- package/src/database/init-db.ts +82 -66
- package/src/database/kysely-plugin/json-column-plugin.ts +215 -0
- package/src/database/kysely-plugin/parse-jsonb-plugin-v1.ts +5 -10
- package/src/database/kysely-plugin/parse-jsonb-plugin-v2.ts +1 -1
- package/src/database/kysely-plugin/serialize-jsonb-plugin.test.ts +177 -2
- package/src/database/kysely-plugin/serialize-jsonb-plugin.ts +186 -87
- package/src/database/kysely-plugin/view-insert-returning-error-plugin.test.ts +62 -0
- package/src/database/kysely-plugin/view-insert-returning-error-plugin.ts +49 -0
- package/src/database/schema.ts +100 -267
- package/src/entity-views/entity-state-all.test.ts +445 -0
- package/src/entity-views/entity-state-all.ts +506 -0
- package/src/entity-views/entity-state-history.test.ts +325 -0
- package/src/entity-views/entity-state-history.ts +226 -0
- package/src/entity-views/entity-state.test.ts +592 -0
- package/src/entity-views/entity-state.ts +502 -0
- package/src/entity-views/entity-view-builder.test.ts +293 -0
- package/src/entity-views/entity-view-builder.ts +148 -0
- package/src/entity-views/index.ts +1 -0
- package/src/entity-views/types.test.ts +99 -0
- package/src/entity-views/types.ts +328 -0
- package/src/file/file-handlers.test.ts +174 -0
- package/src/file/file-handlers.ts +364 -0
- package/src/file/index.ts +5 -1
- package/src/file/materialize-file-data-at-changeset.ts +123 -0
- package/src/file/materialize-file-data.test.ts +107 -0
- package/src/file/materialize-file-data.ts +120 -0
- package/src/file/schema.test.ts +990 -0
- package/src/file/schema.ts +300 -0
- package/src/file/store-detected-change-schema.test.ts +248 -0
- package/src/file/store-detected-change-schema.ts +52 -0
- package/src/file/unknown-file-fallback-plugin.test.ts +368 -0
- package/src/file/unknown-file-fallback-plugin.ts +95 -0
- package/src/hooks/create-hooks.test.ts +125 -0
- package/src/hooks/create-hooks.ts +101 -0
- package/src/hooks/index.ts +1 -0
- package/src/index.ts +10 -6
- package/src/key-value/index.ts +1 -0
- package/src/key-value/schema.test.ts +179 -0
- package/src/key-value/schema.ts +37 -0
- package/src/label/create-label.test.ts +234 -0
- package/src/label/create-label.ts +61 -0
- package/src/label/index.ts +2 -0
- package/src/label/schema.test.ts +92 -0
- package/src/label/schema.ts +40 -0
- package/src/lix/index.ts +3 -6
- package/src/lix/new-lix.test.ts +213 -17
- package/src/lix/new-lix.ts +395 -8
- package/src/lix/open-lix.test.ts +65 -26
- package/src/lix/open-lix.ts +131 -22
- package/src/lix/storage/in-memory.test.ts +180 -0
- package/src/lix/storage/in-memory.ts +69 -0
- package/src/lix/storage/lix-storage-adapter.ts +16 -0
- package/src/lix/storage/opfs.test.ts +215 -0
- package/src/lix/storage/opfs.ts +175 -0
- package/src/log/create-lix-own-log.test.ts +119 -0
- package/src/log/create-lix-own-log.ts +124 -0
- package/src/log/create-log.ts +52 -0
- package/src/log/index.ts +2 -0
- package/src/log/schema.test.ts +140 -0
- package/src/log/schema.ts +55 -0
- package/src/observe/create-observe.test.ts +501 -0
- package/src/observe/create-observe.ts +146 -0
- package/src/observe/index.ts +1 -0
- package/src/observe/lix-observable.test.ts +247 -0
- package/src/observe/lix-observable.ts +92 -0
- package/src/plugin/index.ts +2 -2
- package/src/plugin/lix-plugin.test-d.ts +26 -15
- package/src/plugin/lix-plugin.ts +41 -50
- package/src/plugin/mock-json-plugin.flatten.ts +161 -0
- package/src/plugin/mock-json-plugin.test.ts +214 -0
- package/src/plugin/mock-json-plugin.ts +113 -0
- package/src/query-filter/change-has-label.test.ts +38 -11
- package/src/query-filter/change-has-label.ts +8 -4
- package/src/query-filter/change-set-element-in-ancestry-of.test.ts +354 -0
- package/src/query-filter/change-set-element-in-ancestry-of.ts +64 -0
- package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +410 -0
- package/src/{change-set → query-filter}/change-set-element-in-symmetric-difference.ts +2 -1
- package/src/query-filter/change-set-element-is-leaf-of.test.ts +564 -0
- package/src/query-filter/change-set-element-is-leaf-of.ts +110 -0
- package/src/query-filter/change-set-has-label.test.ts +13 -21
- package/src/query-filter/change-set-has-label.ts +18 -4
- package/src/query-filter/change-set-is-ancestor-of.test.ts +178 -0
- package/src/query-filter/change-set-is-ancestor-of.ts +77 -0
- package/src/query-filter/change-set-is-descendant-of.test.ts +169 -0
- package/src/query-filter/change-set-is-descendant-of.ts +70 -0
- package/src/query-filter/index.ts +5 -6
- package/src/schema-definition/definition.test-d.ts +253 -0
- package/src/schema-definition/definition.test.ts +377 -0
- package/src/schema-definition/definition.ts +445 -0
- package/src/schema-definition/index.ts +13 -0
- package/src/schema-definition/json-type.test.ts +30 -0
- package/src/schema-definition/json-type.ts +53 -0
- package/src/schema-definition/validate-lix-schema.test.ts +85 -0
- package/src/schema-definition/validate-lix-schema.ts +108 -0
- package/src/server-protocol-handler/create-server-protocol-handler.ts +0 -4
- package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +13 -14
- package/src/server-protocol-handler/environment/create-in-memory-environment.ts +5 -24
- package/src/server-protocol-handler/environment/environment.ts +0 -5
- package/src/server-protocol-handler/routes/get-v1.test.ts +11 -12
- package/src/server-protocol-handler/routes/get-v1.ts +3 -1
- package/src/server-protocol-handler/routes/new-v1.test.ts +7 -8
- package/src/server-protocol-handler/routes/new-v1.ts +3 -5
- package/src/server-protocol-handler/routes/pull-v1.test.ts +49 -33
- package/src/server-protocol-handler/routes/pull-v1.ts +1 -1
- package/src/server-protocol-handler/routes/push-v1.test.ts +26 -27
- package/src/server-protocol-handler/routes/push-v1.ts +4 -1
- package/src/snapshot/schema.test.ts +155 -0
- package/src/snapshot/schema.ts +21 -0
- package/src/state/create-changeset-for-transaction.ts +321 -0
- package/src/state/get-version-record-by-id-or-throw.ts +51 -0
- package/src/state/handle-state-mutation.test.ts +761 -0
- package/src/state/handle-state-mutation.ts +418 -0
- package/src/state/schema.bench.ts +43 -0
- package/src/state/schema.test.ts +2416 -0
- package/src/state/schema.ts +1288 -0
- package/src/state/validate-state-mutation.test.ts +2353 -0
- package/src/state/validate-state-mutation.ts +664 -0
- package/src/state-history/schema.test.ts +827 -0
- package/src/state-history/schema.ts +198 -0
- package/src/stored-schema/index.ts +1 -0
- package/src/stored-schema/schema.test.ts +240 -0
- package/src/stored-schema/schema.ts +67 -0
- package/src/sync/get-diffing-rows.ts +16 -0
- package/src/sync/merge-state.ts +7 -4
- package/src/sync/pull-from-server.test.ts +33 -28
- package/src/sync/pull-from-server.ts +4 -2
- package/src/sync/push-to-server.test.ts +77 -81
- package/src/sync/push-to-server.ts +11 -2
- package/src/sync/sync-process.test.ts +21 -18
- package/src/sync/sync-process.ts +2 -3
- package/src/thread/create-thread-comment.test.ts +63 -0
- package/src/thread/create-thread-comment.ts +56 -0
- package/src/thread/create-thread.test.ts +32 -0
- package/src/thread/create-thread.ts +83 -0
- package/src/thread/index.ts +8 -0
- package/src/thread/schema.test.ts +76 -0
- package/src/thread/schema.ts +85 -0
- package/src/version/create-version.test.ts +78 -125
- package/src/version/create-version.ts +37 -64
- package/src/version/index.ts +5 -6
- package/src/version/schema.test.ts +794 -0
- package/src/version/schema.ts +149 -0
- package/src/version/switch-version.test.ts +14 -275
- package/src/version/switch-version.ts +8 -78
- package/src/zettel-ast/index.ts +10 -0
- package/src/account/database-schema.test.ts +0 -184
- package/src/account/database-schema.ts +0 -54
- package/src/change/apply-changes.test.ts +0 -268
- package/src/change/apply-changes.ts +0 -114
- package/src/change/create-change.test.ts +0 -296
- package/src/change/create-change.ts +0 -129
- package/src/change/mock-change.ts +0 -21
- package/src/change-schema/README.md +0 -3
- package/src/change-schema/index.ts +0 -4
- package/src/change-schema/types.test-d.ts +0 -52
- package/src/change-schema/types.ts +0 -53
- package/src/change-set/change-set-element-in-symmetric-difference.test.ts +0 -128
- package/src/database/apply-schema.ts +0 -272
- package/src/database/init-db.test.ts +0 -626
- package/src/database/mutation-log/database-schema.ts +0 -128
- package/src/database/mutation-log/lix-session.ts +0 -19
- package/src/discussion/create-comment.ts +0 -18
- package/src/discussion/create-discussion.test.ts +0 -45
- package/src/discussion/create-discussion.ts +0 -48
- package/src/discussion/index.ts +0 -2
- package/src/file/validate-file-path.test.ts +0 -44
- package/src/file/validate-file-path.ts +0 -60
- package/src/file-queue/file-handlers.ts +0 -267
- package/src/file-queue/file-queue-process.test.ts +0 -456
- package/src/file-queue/file-queue-process.ts +0 -108
- package/src/file-queue/file-queue-settled.test.ts +0 -56
- package/src/file-queue/file-queue-settled.ts +0 -31
- package/src/file-queue/index.ts +0 -1
- package/src/file-queue/with-skip-file-queue.test.ts +0 -158
- package/src/file-queue/with-skip-file-queue.ts +0 -33
- package/src/key-value/database-schema.test.ts +0 -140
- package/src/key-value/database-schema.ts +0 -66
- package/src/lix/close-lix.ts +0 -8
- package/src/lix/merge.get-leaf-changes-only-in-source.test.ts +0 -143
- package/src/lix/merge.get-leaf-changes-only-in-source.ts +0 -46
- package/src/lix/merge.test.ts +0 -858
- package/src/lix/merge.ts +0 -244
- package/src/lix/open-lix-in-memory.test.ts +0 -34
- package/src/lix/open-lix-in-memory.ts +0 -28
- package/src/lix/to-blob.ts +0 -14
- package/src/own-change-control/apply-own-change.test.ts +0 -361
- package/src/own-change-control/apply-own-change.ts +0 -110
- package/src/own-change-control/change-controlled-tables.test.ts +0 -69
- package/src/own-change-control/change-controlled-tables.ts +0 -102
- package/src/own-change-control/database-triggers.test.ts +0 -259
- package/src/own-change-control/database-triggers.ts +0 -189
- package/src/own-change-control/index.ts +0 -1
- package/src/own-change-control/with-skip-own-change-control.test.ts +0 -57
- package/src/own-change-control/with-skip-own-change-control.ts +0 -34
- package/src/plugin/load-plugin.ts +0 -37
- package/src/plugin/with-transaction.ts +0 -22
- package/src/query-filter/change-conflict-in-version.test.ts +0 -62
- package/src/query-filter/change-conflict-in-version.ts +0 -25
- package/src/query-filter/change-in-version.test.ts +0 -82
- package/src/query-filter/change-in-version.ts +0 -31
- package/src/query-filter/change-is-leaf-in-version.test.ts +0 -77
- package/src/query-filter/change-is-leaf-in-version.ts +0 -36
- package/src/query-filter/change-is-leaf-of.bench.ts +0 -175
- package/src/query-filter/change-is-leaf-of.test.ts +0 -84
- package/src/query-filter/change-is-leaf-of.ts +0 -46
- package/src/query-filter/change-is-leaf.test.ts +0 -140
- package/src/query-filter/change-is-leaf.ts +0 -25
- package/src/query-filter/change-is-lowest-common-ancestor-of.test.ts +0 -173
- package/src/query-filter/change-is-lowest-common-ancestor-of.ts +0 -57
- package/src/query-filter/version-change-in-difference.test.ts +0 -105
- package/src/query-filter/version-change-in-difference.ts +0 -37
- package/src/query-filter/version-change-in-symmetric-difference.test.ts +0 -104
- package/src/query-filter/version-change-in-symmetric-difference.ts +0 -52
- package/src/snapshot/create-snapshot.test.ts +0 -68
- package/src/snapshot/create-snapshot.ts +0 -40
- package/src/snapshot/index.ts +0 -2
- package/src/snapshot/json-sha-256.test.ts +0 -12
- package/src/snapshot/json-sha-256.ts +0 -35
- package/src/snapshot/mock-json-snapshot.ts +0 -14
- package/src/version/merge-version.test.ts +0 -530
- package/src/version/merge-version.ts +0 -88
- package/src/version/update-changes-in-version.test.ts +0 -371
- package/src/version/update-changes-in-version.ts +0 -47
|
@@ -0,0 +1,1052 @@
|
|
|
1
|
+
import { validateStateMutation } from "./validate-state-mutation.js";
|
|
2
|
+
import { handleStateMutation } from "./handle-state-mutation.js";
|
|
3
|
+
import { createLixOwnLogSync } from "../log/create-lix-own-log.js";
|
|
4
|
+
import { createChangesetForTransaction } from "./create-changeset-for-transaction.js";
|
|
5
|
+
export function applyStateDatabaseSchema(sqlite, db, hooks) {
|
|
6
|
+
sqlite.createFunction({
|
|
7
|
+
name: "validate_snapshot_content",
|
|
8
|
+
deterministic: true,
|
|
9
|
+
arity: 5,
|
|
10
|
+
// @ts-expect-error - type mismatch
|
|
11
|
+
xFunc: (_ctxPtr, ...args) => {
|
|
12
|
+
return validateStateMutation({
|
|
13
|
+
lix: { sqlite, db: db },
|
|
14
|
+
schema: args[0] ? JSON.parse(args[0]) : null,
|
|
15
|
+
snapshot_content: JSON.parse(args[1]),
|
|
16
|
+
operation: args[2] || undefined,
|
|
17
|
+
entity_id: args[3] || undefined,
|
|
18
|
+
version_id: args[4],
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
// Create virtual table using the proper SQLite WASM API (following vtab-experiment pattern)
|
|
23
|
+
const capi = sqlite.sqlite3.capi;
|
|
24
|
+
const module = new capi.sqlite3_module();
|
|
25
|
+
// Store cursor state
|
|
26
|
+
const cursorStates = new Map();
|
|
27
|
+
// Cache initialization state to avoid repeated table existence checks
|
|
28
|
+
let loggingInitialized = null;
|
|
29
|
+
const canLog = () => {
|
|
30
|
+
if (loggingInitialized === null) {
|
|
31
|
+
try {
|
|
32
|
+
const tableExists = sqlite.exec({
|
|
33
|
+
sql: "SELECT 1 FROM sqlite_master WHERE type='table' AND name='key_value'",
|
|
34
|
+
returnValue: "resultRows",
|
|
35
|
+
});
|
|
36
|
+
loggingInitialized = tableExists && tableExists.length > 0;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
loggingInitialized = false;
|
|
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);
|
|
62
|
+
module.installMethods({
|
|
63
|
+
xCreate: (db, _pAux, _argc, _argv, pVTab) => {
|
|
64
|
+
const sql = `CREATE TABLE x(
|
|
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);
|
|
79
|
+
if (result !== capi.SQLITE_OK) {
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
sqlite.sqlite3.vtab.xVtab.create(pVTab);
|
|
83
|
+
return capi.SQLITE_OK;
|
|
84
|
+
},
|
|
85
|
+
xConnect: (db, _pAux, _argc, _argv, pVTab) => {
|
|
86
|
+
const sql = `CREATE TABLE x(
|
|
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);
|
|
101
|
+
if (result !== capi.SQLITE_OK) {
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
sqlite.sqlite3.vtab.xVtab.create(pVTab);
|
|
105
|
+
return capi.SQLITE_OK;
|
|
106
|
+
},
|
|
107
|
+
xBegin: () => {
|
|
108
|
+
// assert that we are not already in a transaction (the internal_change_in_transaction table is empty)
|
|
109
|
+
if (sqlite.exec({
|
|
110
|
+
sql: "SELECT * FROM internal_change_in_transaction",
|
|
111
|
+
returnValue: "resultRows",
|
|
112
|
+
}).length > 0) {
|
|
113
|
+
const errorMessage = "Transaction already in progress";
|
|
114
|
+
if (canLog()) {
|
|
115
|
+
createLixOwnLogSync({
|
|
116
|
+
lix: { sqlite, db: db },
|
|
117
|
+
key: "lix_state_xbegin_error",
|
|
118
|
+
level: "error",
|
|
119
|
+
message: `xBegin error: ${errorMessage}`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
throw new Error(errorMessage);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
xCommit: () => {
|
|
126
|
+
const currentTime = new Date().toISOString();
|
|
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;
|
|
217
|
+
},
|
|
218
|
+
xRollback: () => {
|
|
219
|
+
sqlite.exec({
|
|
220
|
+
sql: "DELETE FROM internal_change_in_transaction",
|
|
221
|
+
returnValue: "resultRows",
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
xBestIndex: () => {
|
|
225
|
+
return capi.SQLITE_OK;
|
|
226
|
+
},
|
|
227
|
+
xDisconnect: () => {
|
|
228
|
+
return capi.SQLITE_OK;
|
|
229
|
+
},
|
|
230
|
+
xDestroy: () => {
|
|
231
|
+
return capi.SQLITE_OK;
|
|
232
|
+
},
|
|
233
|
+
xOpen: (_pVTab, pCursor) => {
|
|
234
|
+
const cursor = sqlite.sqlite3.vtab.xCursor.create(pCursor);
|
|
235
|
+
cursorStates.set(cursor.pointer, {
|
|
236
|
+
results: [],
|
|
237
|
+
rowIndex: 0,
|
|
238
|
+
});
|
|
239
|
+
return capi.SQLITE_OK;
|
|
240
|
+
},
|
|
241
|
+
xClose: (pCursor) => {
|
|
242
|
+
cursorStates.delete(pCursor);
|
|
243
|
+
return capi.SQLITE_OK;
|
|
244
|
+
},
|
|
245
|
+
xFilter: (pCursor) => {
|
|
246
|
+
const cursorState = cursorStates.get(pCursor);
|
|
247
|
+
// Try cache first - UNION with priority: untracked > tracked > inherited
|
|
248
|
+
const cacheResults = sqlite.exec({
|
|
249
|
+
sql: `
|
|
250
|
+
-- 1. Untracked state (highest priority)
|
|
251
|
+
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
252
|
+
snapshot_content, schema_version, created_at, updated_at,
|
|
253
|
+
NULL as inherited_from_version_id, 'untracked' as change_id, 1 as untracked
|
|
254
|
+
FROM internal_state_all_untracked
|
|
255
|
+
|
|
256
|
+
UNION ALL
|
|
257
|
+
|
|
258
|
+
-- 2. Tracked state (second priority) - only if no untracked exists
|
|
259
|
+
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
260
|
+
snapshot_content, schema_version, created_at, updated_at,
|
|
261
|
+
inherited_from_version_id, change_id, 0 as untracked
|
|
262
|
+
FROM internal_state_cache
|
|
263
|
+
WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
|
|
264
|
+
AND NOT EXISTS (
|
|
265
|
+
SELECT 1 FROM internal_state_all_untracked unt
|
|
266
|
+
WHERE unt.entity_id = internal_state_cache.entity_id
|
|
267
|
+
AND unt.schema_key = internal_state_cache.schema_key
|
|
268
|
+
AND unt.file_id = internal_state_cache.file_id
|
|
269
|
+
AND unt.version_id = internal_state_cache.version_id
|
|
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;
|
|
358
|
+
}
|
|
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
|
+
}
|
|
387
|
+
if (cachePopulated && canLog()) {
|
|
388
|
+
createLixOwnLogSync({
|
|
389
|
+
lix: { sqlite, db: db },
|
|
390
|
+
key: "lix_state_cache_populated",
|
|
391
|
+
level: "debug",
|
|
392
|
+
message: `Cache populated with ${stateResults?.length || 0} rows from CTE`,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// Re-query cache after population
|
|
397
|
+
// Re-query after population with priority: untracked > tracked > inherited
|
|
398
|
+
const newResults = sqlite.exec({
|
|
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",
|
|
460
|
+
});
|
|
461
|
+
cursorState.results = newResults || [];
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
if (canLog()) {
|
|
465
|
+
createLixOwnLogSync({
|
|
466
|
+
lix: { sqlite, db: db },
|
|
467
|
+
key: "lix_state_cache_hit",
|
|
468
|
+
level: "debug",
|
|
469
|
+
message: `Cache hit - returning ${cursorState.results.length} cached rows`,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return capi.SQLITE_OK;
|
|
474
|
+
},
|
|
475
|
+
xNext: (pCursor) => {
|
|
476
|
+
const cursorState = cursorStates.get(pCursor);
|
|
477
|
+
cursorState.rowIndex++;
|
|
478
|
+
return capi.SQLITE_OK;
|
|
479
|
+
},
|
|
480
|
+
xEof: (pCursor) => {
|
|
481
|
+
const cursorState = cursorStates.get(pCursor);
|
|
482
|
+
return cursorState.rowIndex >= cursorState.results.length ? 1 : 0;
|
|
483
|
+
},
|
|
484
|
+
xColumn: (pCursor, pContext, iCol) => {
|
|
485
|
+
const cursorState = cursorStates.get(pCursor);
|
|
486
|
+
const row = cursorState.results[cursorState.rowIndex];
|
|
487
|
+
if (!row) {
|
|
488
|
+
capi.sqlite3_result_null(pContext);
|
|
489
|
+
return capi.SQLITE_OK;
|
|
490
|
+
}
|
|
491
|
+
// Handle array-style results from SQLite exec
|
|
492
|
+
let value;
|
|
493
|
+
if (Array.isArray(row)) {
|
|
494
|
+
value = row[iCol];
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
const columnName = getColumnName(iCol);
|
|
498
|
+
value = row[columnName];
|
|
499
|
+
}
|
|
500
|
+
// Handle special cases for null values that might be stored as strings
|
|
501
|
+
if (value === "null" &&
|
|
502
|
+
getColumnName(iCol) === "inherited_from_version_id") {
|
|
503
|
+
capi.sqlite3_result_null(pContext);
|
|
504
|
+
return capi.SQLITE_OK;
|
|
505
|
+
}
|
|
506
|
+
if (value === null || value === undefined) {
|
|
507
|
+
capi.sqlite3_result_null(pContext);
|
|
508
|
+
}
|
|
509
|
+
else if (typeof value === "object") {
|
|
510
|
+
capi.sqlite3_result_js(pContext, JSON.stringify(value));
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
capi.sqlite3_result_js(pContext, value);
|
|
514
|
+
}
|
|
515
|
+
return capi.SQLITE_OK;
|
|
516
|
+
},
|
|
517
|
+
xRowid: (pCursor, pRowid) => {
|
|
518
|
+
const cursorState = cursorStates.get(pCursor);
|
|
519
|
+
sqlite.sqlite3.vtab.xRowid(pRowid, cursorState.rowIndex);
|
|
520
|
+
return capi.SQLITE_OK;
|
|
521
|
+
},
|
|
522
|
+
xUpdate: (_pVTab, nArg, ppArgv) => {
|
|
523
|
+
try {
|
|
524
|
+
// Extract arguments using the proper SQLite WASM API
|
|
525
|
+
const args = sqlite.sqlite3.capi.sqlite3_values_to_js(nArg, ppArgv);
|
|
526
|
+
// DELETE operation: nArg = 1, args[0] = old rowid
|
|
527
|
+
if (nArg === 1) {
|
|
528
|
+
// For DELETE, we need the old row data to pass to handleStateMutation
|
|
529
|
+
// We can't get this from the virtual table directly, so we'll need to
|
|
530
|
+
// handle DELETE differently:
|
|
531
|
+
// we query the row by rowid and pass it to handleStateMutation
|
|
532
|
+
handleStateDelete(sqlite, args[0], db);
|
|
533
|
+
return capi.SQLITE_OK;
|
|
534
|
+
}
|
|
535
|
+
// INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new rowid
|
|
536
|
+
// UPDATE operation: nArg = N+2, args[0] = old rowid, args[1] = new rowid
|
|
537
|
+
const isInsert = args[0] === null || args[0] === undefined;
|
|
538
|
+
const isUpdate = args[0] !== null && args[0] !== undefined;
|
|
539
|
+
if (!isInsert && !isUpdate) {
|
|
540
|
+
throw new Error("Invalid xUpdate operation");
|
|
541
|
+
}
|
|
542
|
+
// Extract column values (args[2] through args[N+1])
|
|
543
|
+
// Column order: entity_id, schema_key, file_id, version_id, plugin_key,
|
|
544
|
+
// snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
|
|
545
|
+
const entity_id = args[2];
|
|
546
|
+
const schema_key = args[3];
|
|
547
|
+
const file_id = args[4];
|
|
548
|
+
const version_id = args[5];
|
|
549
|
+
const plugin_key = args[6];
|
|
550
|
+
const snapshot_content = args[7];
|
|
551
|
+
const schema_version = args[8];
|
|
552
|
+
// Skip created_at (args[9]), updated_at (args[10]), inherited_from_version_id (args[11]), change_id (args[12])
|
|
553
|
+
const untracked = args[13] ?? false;
|
|
554
|
+
// assert required fields
|
|
555
|
+
if (!entity_id || !schema_key || !file_id || !plugin_key) {
|
|
556
|
+
throw new Error("Missing required fields for state mutation");
|
|
557
|
+
}
|
|
558
|
+
if (!version_id) {
|
|
559
|
+
throw new Error("version_id is required for state mutation");
|
|
560
|
+
}
|
|
561
|
+
// Ensure snapshot_content is a string
|
|
562
|
+
const snapshotStr = typeof snapshot_content === "string"
|
|
563
|
+
? snapshot_content
|
|
564
|
+
: JSON.stringify(snapshot_content);
|
|
565
|
+
// Call validation function (same logic as triggers)
|
|
566
|
+
const storedSchemaResult = sqlite.exec({
|
|
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;
|
|
574
|
+
validateStateMutation({
|
|
575
|
+
lix: { sqlite, db: db },
|
|
576
|
+
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
577
|
+
snapshot_content: JSON.parse(snapshotStr),
|
|
578
|
+
operation: isInsert ? "insert" : "update",
|
|
579
|
+
entity_id: String(entity_id),
|
|
580
|
+
version_id: String(version_id),
|
|
581
|
+
untracked: Boolean(untracked),
|
|
582
|
+
});
|
|
583
|
+
// Route based on untracked flag
|
|
584
|
+
if (untracked) {
|
|
585
|
+
// Handle untracked mutation - write directly to untracked table
|
|
586
|
+
sqlite.exec({
|
|
587
|
+
sql: `INSERT OR REPLACE INTO internal_state_all_untracked
|
|
588
|
+
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version)
|
|
589
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
590
|
+
bind: [
|
|
591
|
+
String(entity_id),
|
|
592
|
+
String(schema_key),
|
|
593
|
+
String(file_id),
|
|
594
|
+
String(version_id),
|
|
595
|
+
String(plugin_key),
|
|
596
|
+
snapshotStr,
|
|
597
|
+
String(schema_version),
|
|
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
|
|
619
|
+
// without duplicating entries. See: https://github.com/opral/lix-sdk/issues/309
|
|
620
|
+
//
|
|
621
|
+
// Handle cache copying for new versions that share change sets
|
|
622
|
+
if (isInsert && String(schema_key) === "lix_version") {
|
|
623
|
+
const versionData = JSON.parse(snapshotStr);
|
|
624
|
+
const newVersionId = versionData.id;
|
|
625
|
+
const changeSetId = versionData.change_set_id;
|
|
626
|
+
if (newVersionId && changeSetId) {
|
|
627
|
+
// Find other versions that already use this change set
|
|
628
|
+
const existingVersionsWithSameChangeSet = sqlite.exec({
|
|
629
|
+
sql: `
|
|
630
|
+
SELECT json_extract(snapshot_content, '$.id') as version_id
|
|
631
|
+
FROM internal_state_cache
|
|
632
|
+
WHERE schema_key = 'lix_version'
|
|
633
|
+
AND json_extract(snapshot_content, '$.change_set_id') = ?
|
|
634
|
+
AND json_extract(snapshot_content, '$.id') != ?
|
|
635
|
+
`,
|
|
636
|
+
bind: [changeSetId, newVersionId],
|
|
637
|
+
returnValue: "resultRows",
|
|
638
|
+
});
|
|
639
|
+
// If there are existing versions with the same change set, copy their cache entries
|
|
640
|
+
if (existingVersionsWithSameChangeSet &&
|
|
641
|
+
existingVersionsWithSameChangeSet.length > 0) {
|
|
642
|
+
const sourceVersionId = existingVersionsWithSameChangeSet[0][0]; // Take first existing version
|
|
643
|
+
// Copy cache entries from source version to new version
|
|
644
|
+
sqlite.exec({
|
|
645
|
+
sql: `
|
|
646
|
+
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)
|
|
648
|
+
SELECT
|
|
649
|
+
entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id
|
|
650
|
+
FROM internal_state_cache
|
|
651
|
+
WHERE version_id = ? AND schema_key != 'lix_version'
|
|
652
|
+
`,
|
|
653
|
+
bind: [newVersionId, sourceVersionId],
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return capi.SQLITE_OK;
|
|
659
|
+
}
|
|
660
|
+
catch (error) {
|
|
661
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
662
|
+
// Log error for debugging
|
|
663
|
+
if (canLog()) {
|
|
664
|
+
createLixOwnLogSync({
|
|
665
|
+
lix: { sqlite, db: db },
|
|
666
|
+
key: "lix_state_xupdate_error",
|
|
667
|
+
level: "error",
|
|
668
|
+
message: `xUpdate error: ${errorMessage}`,
|
|
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;
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
}, false);
|
|
691
|
+
capi.sqlite3_create_module(sqlite.pointer, "state_vtab", module, 0);
|
|
692
|
+
// Create the virtual table as 'state' directly (no more _impl suffix or view layer)
|
|
693
|
+
sqlite.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS state_all USING state_vtab();`);
|
|
694
|
+
// Create state view that filters to active version only
|
|
695
|
+
sqlite.exec(`
|
|
696
|
+
CREATE VIEW IF NOT EXISTS state AS
|
|
697
|
+
SELECT *
|
|
698
|
+
FROM state_all
|
|
699
|
+
WHERE version_id IN (SELECT version_id FROM active_version);
|
|
700
|
+
|
|
701
|
+
-- Add INSTEAD OF triggers for state that forward to state virtual table
|
|
702
|
+
CREATE TRIGGER IF NOT EXISTS state_insert
|
|
703
|
+
INSTEAD OF INSERT ON state
|
|
704
|
+
BEGIN
|
|
705
|
+
INSERT INTO state_all (
|
|
706
|
+
entity_id, schema_key, file_id, version_id, plugin_key,
|
|
707
|
+
snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
|
|
708
|
+
) VALUES (
|
|
709
|
+
NEW.entity_id, NEW.schema_key, NEW.file_id, NEW.version_id, NEW.plugin_key,
|
|
710
|
+
NEW.snapshot_content, NEW.schema_version, NEW.created_at, NEW.updated_at, NEW.inherited_from_version_id, NEW.change_id, NEW.untracked
|
|
711
|
+
);
|
|
712
|
+
END;
|
|
713
|
+
|
|
714
|
+
CREATE TRIGGER IF NOT EXISTS state_update
|
|
715
|
+
INSTEAD OF UPDATE ON state
|
|
716
|
+
BEGIN
|
|
717
|
+
UPDATE state_all
|
|
718
|
+
SET
|
|
719
|
+
entity_id = NEW.entity_id,
|
|
720
|
+
schema_key = NEW.schema_key,
|
|
721
|
+
file_id = NEW.file_id,
|
|
722
|
+
version_id = NEW.version_id,
|
|
723
|
+
plugin_key = NEW.plugin_key,
|
|
724
|
+
snapshot_content = NEW.snapshot_content,
|
|
725
|
+
schema_version = NEW.schema_version,
|
|
726
|
+
created_at = NEW.created_at,
|
|
727
|
+
updated_at = NEW.updated_at,
|
|
728
|
+
inherited_from_version_id = NEW.inherited_from_version_id,
|
|
729
|
+
change_id = NEW.change_id,
|
|
730
|
+
untracked = NEW.untracked
|
|
731
|
+
WHERE
|
|
732
|
+
entity_id = OLD.entity_id
|
|
733
|
+
AND schema_key = OLD.schema_key
|
|
734
|
+
AND file_id = OLD.file_id
|
|
735
|
+
AND version_id = OLD.version_id;
|
|
736
|
+
END;
|
|
737
|
+
|
|
738
|
+
CREATE TRIGGER IF NOT EXISTS state_delete
|
|
739
|
+
INSTEAD OF DELETE ON state
|
|
740
|
+
BEGIN
|
|
741
|
+
DELETE FROM state_all
|
|
742
|
+
WHERE entity_id = OLD.entity_id
|
|
743
|
+
AND schema_key = OLD.schema_key
|
|
744
|
+
AND file_id = OLD.file_id
|
|
745
|
+
AND version_id = OLD.version_id;
|
|
746
|
+
END;
|
|
747
|
+
`);
|
|
748
|
+
// Create the cache table for performance optimization and the untracked state table
|
|
749
|
+
const sql = `
|
|
750
|
+
CREATE TABLE IF NOT EXISTS internal_state_cache (
|
|
751
|
+
entity_id TEXT NOT NULL,
|
|
752
|
+
schema_key TEXT NOT NULL,
|
|
753
|
+
file_id TEXT NOT NULL,
|
|
754
|
+
version_id TEXT NOT NULL,
|
|
755
|
+
plugin_key TEXT NOT NULL,
|
|
756
|
+
snapshot_content TEXT, -- Allow NULL for deletions
|
|
757
|
+
schema_version TEXT NOT NULL,
|
|
758
|
+
created_at TEXT NOT NULL,
|
|
759
|
+
updated_at TEXT NOT NULL,
|
|
760
|
+
inherited_from_version_id TEXT,
|
|
761
|
+
inheritance_delete_marker INTEGER DEFAULT 0, -- Flag for copy-on-write deletion markers
|
|
762
|
+
change_id TEXT, -- Allow NULL during migration and for deletion markers
|
|
763
|
+
PRIMARY KEY (entity_id, schema_key, file_id, version_id)
|
|
764
|
+
);
|
|
765
|
+
|
|
766
|
+
-- Table for untracked state that bypasses change control
|
|
767
|
+
CREATE TABLE IF NOT EXISTS internal_state_all_untracked (
|
|
768
|
+
entity_id TEXT NOT NULL,
|
|
769
|
+
schema_key TEXT NOT NULL,
|
|
770
|
+
file_id TEXT NOT NULL,
|
|
771
|
+
version_id TEXT NOT NULL,
|
|
772
|
+
plugin_key TEXT NOT NULL,
|
|
773
|
+
snapshot_content TEXT NOT NULL, -- JSON content
|
|
774
|
+
schema_version TEXT NOT NULL,
|
|
775
|
+
created_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (created_at LIKE '%Z'),
|
|
776
|
+
updated_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (updated_at LIKE '%Z'),
|
|
777
|
+
PRIMARY KEY (entity_id, schema_key, file_id, version_id)
|
|
778
|
+
) STRICT;
|
|
779
|
+
|
|
780
|
+
-- Trigger to update updated_at on untracked state changes
|
|
781
|
+
CREATE TRIGGER IF NOT EXISTS internal_state_all_untracked_update_timestamp
|
|
782
|
+
AFTER UPDATE ON internal_state_all_untracked
|
|
783
|
+
BEGIN
|
|
784
|
+
UPDATE internal_state_all_untracked
|
|
785
|
+
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
786
|
+
WHERE entity_id = NEW.entity_id
|
|
787
|
+
AND schema_key = NEW.schema_key
|
|
788
|
+
AND file_id = NEW.file_id
|
|
789
|
+
AND version_id = NEW.version_id;
|
|
790
|
+
END;
|
|
791
|
+
`;
|
|
792
|
+
return sqlite.exec(sql);
|
|
793
|
+
}
|
|
794
|
+
export function handleStateDelete(sqlite, rowId, db) {
|
|
795
|
+
const rowToDelete = sqlite.exec({
|
|
796
|
+
sql: "SELECT * FROM state_all WHERE rowid = ?",
|
|
797
|
+
bind: [rowId],
|
|
798
|
+
returnValue: "resultRows",
|
|
799
|
+
})[0];
|
|
800
|
+
const entity_id = rowToDelete[0];
|
|
801
|
+
const schema_key = rowToDelete[1];
|
|
802
|
+
const file_id = rowToDelete[2];
|
|
803
|
+
const version_id = rowToDelete[3];
|
|
804
|
+
const plugin_key = rowToDelete[4];
|
|
805
|
+
const snapshot_content = rowToDelete[5];
|
|
806
|
+
const schema_version = rowToDelete[6];
|
|
807
|
+
// Column indices: created_at[7], updated_at[8], inherited_from_version_id[9], change_id[10], untracked[11]
|
|
808
|
+
const untracked = rowToDelete[11];
|
|
809
|
+
// If entity is untracked, just delete it without creating changes
|
|
810
|
+
if (untracked) {
|
|
811
|
+
// Delete from untracked table
|
|
812
|
+
sqlite.exec({
|
|
813
|
+
sql: `DELETE FROM internal_state_all_untracked
|
|
814
|
+
WHERE entity_id = ? AND schema_key = ? AND file_id = ? AND version_id = ?`,
|
|
815
|
+
bind: [
|
|
816
|
+
String(entity_id),
|
|
817
|
+
String(schema_key),
|
|
818
|
+
String(file_id),
|
|
819
|
+
String(version_id),
|
|
820
|
+
],
|
|
821
|
+
});
|
|
822
|
+
return;
|
|
823
|
+
}
|
|
824
|
+
const storedSchemaResult = sqlite.exec({
|
|
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;
|
|
832
|
+
validateStateMutation({
|
|
833
|
+
lix: { sqlite, db: db },
|
|
834
|
+
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
835
|
+
snapshot_content: JSON.parse(snapshot_content),
|
|
836
|
+
operation: "delete",
|
|
837
|
+
entity_id: String(entity_id),
|
|
838
|
+
version_id: String(version_id),
|
|
839
|
+
});
|
|
840
|
+
handleStateMutation(sqlite, db, String(entity_id), String(schema_key), String(file_id), String(plugin_key), null, // No snapshot content for DELETE
|
|
841
|
+
String(version_id), String(schema_version));
|
|
842
|
+
}
|
|
843
|
+
// Helper functions for the virtual table
|
|
844
|
+
function getColumnName(columnIndex) {
|
|
845
|
+
const columns = [
|
|
846
|
+
"entity_id",
|
|
847
|
+
"schema_key",
|
|
848
|
+
"file_id",
|
|
849
|
+
"version_id",
|
|
850
|
+
"plugin_key",
|
|
851
|
+
"snapshot_content",
|
|
852
|
+
"schema_version",
|
|
853
|
+
"created_at",
|
|
854
|
+
"updated_at",
|
|
855
|
+
"inherited_from_version_id",
|
|
856
|
+
"change_id",
|
|
857
|
+
"untracked",
|
|
858
|
+
];
|
|
859
|
+
return columns[columnIndex] || "unknown";
|
|
860
|
+
}
|
|
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
|
+
//# sourceMappingURL=schema.js.map
|