@lix-js/sdk 0.6.0-preview.1 → 0.6.0-preview.2
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/SKILL.md +305 -320
- package/dist/engine-wasm/wasm/lix_engine.d.ts +5 -0
- package/dist/engine-wasm/wasm/lix_engine.js +9 -13
- package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
- package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +1 -0
- package/dist/open-lix.d.ts +103 -14
- package/dist/open-lix.js +3 -0
- package/dist/sqlite/index.js +99 -22
- package/dist-engine-src/README.md +18 -0
- package/dist-engine-src/src/backend/kv.rs +358 -0
- package/dist-engine-src/src/backend/mod.rs +12 -0
- package/dist-engine-src/src/backend/testing.rs +658 -0
- package/dist-engine-src/src/backend/types.rs +96 -0
- package/dist-engine-src/src/binary_cas/chunking.rs +31 -0
- package/dist-engine-src/src/binary_cas/codec.rs +346 -0
- package/dist-engine-src/src/binary_cas/context.rs +139 -0
- package/dist-engine-src/src/binary_cas/kv.rs +1063 -0
- package/dist-engine-src/src/binary_cas/mod.rs +11 -0
- package/dist-engine-src/src/binary_cas/types.rs +127 -0
- package/dist-engine-src/src/cel/context.rs +86 -0
- package/dist-engine-src/src/cel/error.rs +19 -0
- package/dist-engine-src/src/cel/mod.rs +8 -0
- package/dist-engine-src/src/cel/provider.rs +9 -0
- package/dist-engine-src/src/cel/runtime.rs +167 -0
- package/dist-engine-src/src/cel/value.rs +50 -0
- package/dist-engine-src/src/changelog/codec.rs +321 -0
- package/dist-engine-src/src/changelog/context.rs +92 -0
- package/dist-engine-src/src/changelog/materialization.rs +121 -0
- package/dist-engine-src/src/changelog/mod.rs +13 -0
- package/dist-engine-src/src/changelog/reader.rs +20 -0
- package/dist-engine-src/src/changelog/storage.rs +220 -0
- package/dist-engine-src/src/changelog/types.rs +38 -0
- package/dist-engine-src/src/commit_graph/context.rs +1588 -0
- package/dist-engine-src/src/commit_graph/mod.rs +12 -0
- package/dist-engine-src/src/commit_graph/types.rs +145 -0
- package/dist-engine-src/src/commit_graph/walker.rs +780 -0
- package/dist-engine-src/src/common/error.rs +313 -0
- package/dist-engine-src/src/common/fingerprint.rs +3 -0
- package/dist-engine-src/src/common/fs_path.rs +1336 -0
- package/dist-engine-src/src/common/identity.rs +135 -0
- package/dist-engine-src/src/common/metadata.rs +35 -0
- package/dist-engine-src/src/common/mod.rs +23 -0
- package/dist-engine-src/src/common/types.rs +105 -0
- package/dist-engine-src/src/common/wire.rs +222 -0
- package/dist-engine-src/src/engine.rs +239 -0
- package/dist-engine-src/src/entity_identity.rs +285 -0
- package/dist-engine-src/src/functions/context.rs +327 -0
- package/dist-engine-src/src/functions/deterministic.rs +113 -0
- package/dist-engine-src/src/functions/mod.rs +18 -0
- package/dist-engine-src/src/functions/provider.rs +130 -0
- package/dist-engine-src/src/functions/state.rs +363 -0
- package/dist-engine-src/src/functions/types.rs +37 -0
- package/dist-engine-src/src/init.rs +505 -0
- package/dist-engine-src/src/json_store/compression.rs +77 -0
- package/dist-engine-src/src/json_store/context.rs +129 -0
- package/dist-engine-src/src/json_store/encoded.rs +15 -0
- package/dist-engine-src/src/json_store/mod.rs +9 -0
- package/dist-engine-src/src/json_store/store.rs +236 -0
- package/dist-engine-src/src/json_store/types.rs +52 -0
- package/dist-engine-src/src/lib.rs +61 -0
- package/dist-engine-src/src/live_state/context.rs +2241 -0
- package/dist-engine-src/src/live_state/mod.rs +15 -0
- package/dist-engine-src/src/live_state/overlay.rs +75 -0
- package/dist-engine-src/src/live_state/reader.rs +23 -0
- package/dist-engine-src/src/live_state/types.rs +239 -0
- package/dist-engine-src/src/live_state/visibility.rs +218 -0
- package/dist-engine-src/src/plugin/archive.rs +441 -0
- package/dist-engine-src/src/plugin/component.rs +183 -0
- package/dist-engine-src/src/plugin/install.rs +637 -0
- package/dist-engine-src/src/plugin/manifest.rs +516 -0
- package/dist-engine-src/src/plugin/materializer.rs +477 -0
- package/dist-engine-src/src/plugin/mod.rs +33 -0
- package/dist-engine-src/src/plugin/plugin_manifest.json +119 -0
- package/dist-engine-src/src/plugin/storage.rs +74 -0
- package/dist-engine-src/src/schema/annotations/defaults.rs +280 -0
- package/dist-engine-src/src/schema/annotations/mod.rs +1 -0
- package/dist-engine-src/src/schema/builtin/lix_account.json +22 -0
- package/dist-engine-src/src/schema/builtin/lix_active_account.json +30 -0
- package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +30 -0
- package/dist-engine-src/src/schema/builtin/lix_change.json +62 -0
- package/dist-engine-src/src/schema/builtin/lix_change_author.json +46 -0
- package/dist-engine-src/src/schema/builtin/lix_change_set.json +18 -0
- package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +75 -0
- package/dist-engine-src/src/schema/builtin/lix_commit.json +62 -0
- package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +46 -0
- package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +53 -0
- package/dist-engine-src/src/schema/builtin/lix_entity_label.json +63 -0
- package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +53 -0
- package/dist-engine-src/src/schema/builtin/lix_key_value.json +41 -0
- package/dist-engine-src/src/schema/builtin/lix_label.json +22 -0
- package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +31 -0
- package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +35 -0
- package/dist-engine-src/src/schema/builtin/lix_version_ref.json +49 -0
- package/dist-engine-src/src/schema/builtin/mod.rs +271 -0
- package/dist-engine-src/src/schema/definition.json +157 -0
- package/dist-engine-src/src/schema/definition.rs +636 -0
- package/dist-engine-src/src/schema/key.rs +206 -0
- package/dist-engine-src/src/schema/mod.rs +20 -0
- package/dist-engine-src/src/schema/seed.rs +14 -0
- package/dist-engine-src/src/schema/tests.rs +739 -0
- package/dist-engine-src/src/schema_registry.rs +294 -0
- package/dist-engine-src/src/session/context.rs +366 -0
- package/dist-engine-src/src/session/create_version.rs +80 -0
- package/dist-engine-src/src/session/execute.rs +447 -0
- package/dist-engine-src/src/session/merge/analysis.rs +102 -0
- package/dist-engine-src/src/session/merge/apply.rs +23 -0
- package/dist-engine-src/src/session/merge/conflicts.rs +62 -0
- package/dist-engine-src/src/session/merge/mod.rs +11 -0
- package/dist-engine-src/src/session/merge/stats.rs +65 -0
- package/dist-engine-src/src/session/merge/version.rs +437 -0
- package/dist-engine-src/src/session/mod.rs +25 -0
- package/dist-engine-src/src/session/switch_version.rs +121 -0
- package/dist-engine-src/src/sql2/change_provider.rs +337 -0
- package/dist-engine-src/src/sql2/classify.rs +147 -0
- package/dist-engine-src/src/sql2/commit_derived_provider.rs +591 -0
- package/dist-engine-src/src/sql2/context.rs +307 -0
- package/dist-engine-src/src/sql2/directory_history_provider.rs +623 -0
- package/dist-engine-src/src/sql2/directory_provider.rs +2405 -0
- package/dist-engine-src/src/sql2/dml.rs +148 -0
- package/dist-engine-src/src/sql2/entity_history_provider.rs +444 -0
- package/dist-engine-src/src/sql2/entity_provider.rs +2700 -0
- package/dist-engine-src/src/sql2/error.rs +196 -0
- package/dist-engine-src/src/sql2/execute.rs +3379 -0
- package/dist-engine-src/src/sql2/file_history_provider.rs +902 -0
- package/dist-engine-src/src/sql2/file_provider.rs +3254 -0
- package/dist-engine-src/src/sql2/filesystem_planner.rs +1526 -0
- package/dist-engine-src/src/sql2/filesystem_predicates.rs +159 -0
- package/dist-engine-src/src/sql2/filesystem_visibility.rs +369 -0
- package/dist-engine-src/src/sql2/history_projection.rs +80 -0
- package/dist-engine-src/src/sql2/history_provider.rs +418 -0
- package/dist-engine-src/src/sql2/history_route.rs +643 -0
- package/dist-engine-src/src/sql2/lix_state_provider.rs +2430 -0
- package/dist-engine-src/src/sql2/mod.rs +43 -0
- package/dist-engine-src/src/sql2/read_only.rs +65 -0
- package/dist-engine-src/src/sql2/record_batch.rs +17 -0
- package/dist-engine-src/src/sql2/result_metadata.rs +29 -0
- package/dist-engine-src/src/sql2/runtime.rs +60 -0
- package/dist-engine-src/src/sql2/session.rs +135 -0
- package/dist-engine-src/src/sql2/udfs/common.rs +295 -0
- package/dist-engine-src/src/sql2/udfs/lix_active_version_commit_id.rs +53 -0
- package/dist-engine-src/src/sql2/udfs/lix_empty_blob.rs +47 -0
- package/dist-engine-src/src/sql2/udfs/lix_json.rs +100 -0
- package/dist-engine-src/src/sql2/udfs/lix_json_get.rs +99 -0
- package/dist-engine-src/src/sql2/udfs/lix_json_get_text.rs +99 -0
- package/dist-engine-src/src/sql2/udfs/lix_text_decode.rs +82 -0
- package/dist-engine-src/src/sql2/udfs/lix_text_encode.rs +85 -0
- package/dist-engine-src/src/sql2/udfs/lix_uuid_v7.rs +76 -0
- package/dist-engine-src/src/sql2/udfs/mod.rs +82 -0
- package/dist-engine-src/src/sql2/version_provider.rs +1187 -0
- package/dist-engine-src/src/sql2/version_scope.rs +394 -0
- package/dist-engine-src/src/sql2/write_normalization.rs +345 -0
- package/dist-engine-src/src/storage/context.rs +356 -0
- package/dist-engine-src/src/storage/mod.rs +14 -0
- package/dist-engine-src/src/storage/read_scope.rs +88 -0
- package/dist-engine-src/src/storage/types.rs +501 -0
- package/dist-engine-src/src/storage_bench.rs +3406 -0
- package/dist-engine-src/src/test_support.rs +81 -0
- package/dist-engine-src/src/tracked_state/by_file_index.rs +102 -0
- package/dist-engine-src/src/tracked_state/codec.rs +747 -0
- package/dist-engine-src/src/tracked_state/context.rs +983 -0
- package/dist-engine-src/src/tracked_state/diff.rs +494 -0
- package/dist-engine-src/src/tracked_state/materialization.rs +141 -0
- package/dist-engine-src/src/tracked_state/merge.rs +474 -0
- package/dist-engine-src/src/tracked_state/mod.rs +31 -0
- package/dist-engine-src/src/tracked_state/rebuild.rs +771 -0
- package/dist-engine-src/src/tracked_state/storage.rs +243 -0
- package/dist-engine-src/src/tracked_state/tree.rs +2744 -0
- package/dist-engine-src/src/tracked_state/tree_types.rs +176 -0
- package/dist-engine-src/src/tracked_state/types.rs +61 -0
- package/dist-engine-src/src/transaction/commit.rs +1224 -0
- package/dist-engine-src/src/transaction/context.rs +1307 -0
- package/dist-engine-src/src/transaction/live_state_overlay.rs +34 -0
- package/dist-engine-src/src/transaction/mod.rs +11 -0
- package/dist-engine-src/src/transaction/normalization.rs +1026 -0
- package/dist-engine-src/src/transaction/schema_resolver.rs +127 -0
- package/dist-engine-src/src/transaction/staging.rs +1436 -0
- package/dist-engine-src/src/transaction/types.rs +351 -0
- package/dist-engine-src/src/transaction/validation.rs +4811 -0
- package/dist-engine-src/src/untracked_state/codec.rs +363 -0
- package/dist-engine-src/src/untracked_state/context.rs +82 -0
- package/dist-engine-src/src/untracked_state/materialization.rs +157 -0
- package/dist-engine-src/src/untracked_state/mod.rs +17 -0
- package/dist-engine-src/src/untracked_state/storage.rs +348 -0
- package/dist-engine-src/src/untracked_state/types.rs +96 -0
- package/dist-engine-src/src/version/context.rs +52 -0
- package/dist-engine-src/src/version/mod.rs +12 -0
- package/dist-engine-src/src/version/refs.rs +421 -0
- package/dist-engine-src/src/version/stage_rows.rs +71 -0
- package/dist-engine-src/src/version/types.rs +21 -0
- package/dist-engine-src/src/wasm/mod.rs +60 -0
- package/package.json +68 -64
|
@@ -39,6 +39,11 @@ export class Lix {
|
|
|
39
39
|
* @returns {Promise<any>}
|
|
40
40
|
*/
|
|
41
41
|
mergeVersion(args: any): Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* @param {any} args
|
|
44
|
+
* @returns {Promise<any>}
|
|
45
|
+
*/
|
|
46
|
+
mergeVersionPreview(args: any): Promise<any>;
|
|
42
47
|
/**
|
|
43
48
|
* @param {any} args
|
|
44
49
|
* @returns {Promise<any>}
|
|
@@ -63,6 +63,14 @@ export class Lix {
|
|
|
63
63
|
const ret = wasm.lix_mergeVersion(this.__wbg_ptr, args);
|
|
64
64
|
return ret;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* @param {any} args
|
|
68
|
+
* @returns {Promise<any>}
|
|
69
|
+
*/
|
|
70
|
+
mergeVersionPreview(args) {
|
|
71
|
+
const ret = wasm.lix_mergeVersionPreview(this.__wbg_ptr, args);
|
|
72
|
+
return ret;
|
|
73
|
+
}
|
|
66
74
|
/**
|
|
67
75
|
* @param {any} args
|
|
68
76
|
* @returns {Promise<any>}
|
|
@@ -183,18 +191,6 @@ function __wbg_get_imports() {
|
|
|
183
191
|
return ret;
|
|
184
192
|
}, arguments);
|
|
185
193
|
},
|
|
186
|
-
__wbg_call_812d25f1510c13c8: function () {
|
|
187
|
-
return handleError(function (arg0, arg1, arg2, arg3) {
|
|
188
|
-
const ret = arg0.call(arg1, arg2, arg3);
|
|
189
|
-
return ret;
|
|
190
|
-
}, arguments);
|
|
191
|
-
},
|
|
192
|
-
__wbg_call_e8c868596c950cf6: function () {
|
|
193
|
-
return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
|
194
|
-
const ret = arg0.call(arg1, arg2, arg3, arg4);
|
|
195
|
-
return ret;
|
|
196
|
-
}, arguments);
|
|
197
|
-
},
|
|
198
194
|
__wbg_done_57b39ecd9addfe81: function (arg0) {
|
|
199
195
|
const ret = arg0.done;
|
|
200
196
|
return ret;
|
|
@@ -434,7 +430,7 @@ function __wbg_get_imports() {
|
|
|
434
430
|
return ret;
|
|
435
431
|
},
|
|
436
432
|
__wbindgen_cast_0000000000000001: function (arg0, arg1) {
|
|
437
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
433
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 3067, function: Function { arguments: [Externref], shim_idx: 3068, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
438
434
|
const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h259bf120b5b35fc5, wasm_bindgen__convert__closures_____invoke__ha15a27e9815e3c81);
|
|
439
435
|
return ret;
|
|
440
436
|
},
|
|
Binary file
|
|
@@ -7,6 +7,7 @@ export const lix_close: (a: number) => any;
|
|
|
7
7
|
export const lix_createVersion: (a: number, b: any) => any;
|
|
8
8
|
export const lix_execute: (a: number, b: any, c: any) => any;
|
|
9
9
|
export const lix_mergeVersion: (a: number, b: any) => any;
|
|
10
|
+
export const lix_mergeVersionPreview: (a: number, b: any) => any;
|
|
10
11
|
export const lix_switchVersion: (a: number, b: any) => any;
|
|
11
12
|
export const openLix: (a: number) => any;
|
|
12
13
|
export const wasm_bindgen__closure__destroy__h259bf120b5b35fc5: (a: number, b: number) => void;
|
package/dist/open-lix.d.ts
CHANGED
|
@@ -30,8 +30,7 @@ export declare class Row {
|
|
|
30
30
|
toValueMap(): Record<string, Value>;
|
|
31
31
|
private availableColumns;
|
|
32
32
|
}
|
|
33
|
-
export type
|
|
34
|
-
export type KvScanRange = {
|
|
33
|
+
export type BackendKvScanRange = {
|
|
35
34
|
kind: "prefix";
|
|
36
35
|
prefix: Uint8Array;
|
|
37
36
|
} | {
|
|
@@ -39,22 +38,78 @@ export type KvScanRange = {
|
|
|
39
38
|
start: Uint8Array;
|
|
40
39
|
end: Uint8Array;
|
|
41
40
|
};
|
|
42
|
-
export type
|
|
41
|
+
export type BackendKvGetRequest = {
|
|
42
|
+
groups: BackendKvGetGroup[];
|
|
43
|
+
};
|
|
44
|
+
export type BackendKvGetGroup = {
|
|
45
|
+
namespace: string;
|
|
46
|
+
keys: Uint8Array[];
|
|
47
|
+
};
|
|
48
|
+
export type BackendKvValueBatch = {
|
|
49
|
+
groups: BackendKvValueGroup[];
|
|
50
|
+
};
|
|
51
|
+
export type BackendKvValueGroup = {
|
|
52
|
+
namespace: string;
|
|
53
|
+
values: Array<Uint8Array | null>;
|
|
54
|
+
};
|
|
55
|
+
export type BackendKvExistsBatch = {
|
|
56
|
+
groups: BackendKvExistsGroup[];
|
|
57
|
+
};
|
|
58
|
+
export type BackendKvExistsGroup = {
|
|
59
|
+
namespace: string;
|
|
60
|
+
exists: boolean[];
|
|
61
|
+
};
|
|
62
|
+
export type BackendKvScanRequest = {
|
|
63
|
+
namespace: string;
|
|
64
|
+
range: BackendKvScanRange;
|
|
65
|
+
after?: Uint8Array | null;
|
|
66
|
+
limit: number;
|
|
67
|
+
};
|
|
68
|
+
export type BackendKvKeyPage = {
|
|
69
|
+
keys: Uint8Array[];
|
|
70
|
+
resumeAfter?: Uint8Array | null;
|
|
71
|
+
};
|
|
72
|
+
export type BackendKvValuePage = {
|
|
73
|
+
values: Uint8Array[];
|
|
74
|
+
resumeAfter?: Uint8Array | null;
|
|
75
|
+
};
|
|
76
|
+
export type BackendKvEntryPage = {
|
|
77
|
+
keys: Uint8Array[];
|
|
78
|
+
values: Uint8Array[];
|
|
79
|
+
resumeAfter?: Uint8Array | null;
|
|
80
|
+
};
|
|
81
|
+
export type BackendKvPut = {
|
|
43
82
|
key: Uint8Array;
|
|
44
83
|
value: Uint8Array;
|
|
45
84
|
};
|
|
46
|
-
export type
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
85
|
+
export type BackendKvWriteBatch = {
|
|
86
|
+
groups: BackendKvWriteGroup[];
|
|
87
|
+
};
|
|
88
|
+
export type BackendKvWriteGroup = {
|
|
89
|
+
namespace: string;
|
|
90
|
+
puts: BackendKvPut[];
|
|
91
|
+
deletes: Uint8Array[];
|
|
92
|
+
};
|
|
93
|
+
export type BackendKvWriteStats = {
|
|
94
|
+
puts: number;
|
|
95
|
+
deletes: number;
|
|
96
|
+
bytesWritten: number;
|
|
97
|
+
};
|
|
98
|
+
export type LixBackendReadTransaction = {
|
|
99
|
+
getValues(request: BackendKvGetRequest): BackendKvValueBatch;
|
|
100
|
+
existsMany(request: BackendKvGetRequest): BackendKvExistsBatch;
|
|
101
|
+
scanKeys(request: BackendKvScanRequest): BackendKvKeyPage;
|
|
102
|
+
scanValues(request: BackendKvScanRequest): BackendKvValuePage;
|
|
103
|
+
scanEntries(request: BackendKvScanRequest): BackendKvEntryPage;
|
|
52
104
|
rollback(): void;
|
|
53
105
|
};
|
|
106
|
+
export type LixBackendWriteTransaction = LixBackendReadTransaction & {
|
|
107
|
+
writeKvBatch(batch: BackendKvWriteBatch): BackendKvWriteStats;
|
|
108
|
+
commit(): void;
|
|
109
|
+
};
|
|
54
110
|
export type LixBackend = {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
kvScan?(namespace: string, range: KvScanRange, limit?: number | null): KvPair[];
|
|
111
|
+
beginReadTransaction(): LixBackendReadTransaction;
|
|
112
|
+
beginWriteTransaction(): LixBackendWriteTransaction;
|
|
58
113
|
close?(): void;
|
|
59
114
|
};
|
|
60
115
|
export type OpenLixOptions = {
|
|
@@ -82,15 +137,48 @@ export type MergeVersionOptions = {
|
|
|
82
137
|
};
|
|
83
138
|
export type MergeVersionOutcome = "alreadyUpToDate" | "fastForward" | "mergeCommitted";
|
|
84
139
|
export type MergeVersionResult = {
|
|
140
|
+
/**
|
|
141
|
+
* How the merge was applied. `fastForward` advances the target ref without
|
|
142
|
+
* creating a merge commit, but can still make source changes visible.
|
|
143
|
+
*/
|
|
85
144
|
outcome: MergeVersionOutcome;
|
|
86
145
|
targetVersionId: string;
|
|
87
146
|
sourceVersionId: string;
|
|
88
|
-
|
|
147
|
+
baseCommitId: string;
|
|
89
148
|
targetHeadBeforeCommitId: string;
|
|
90
149
|
sourceHeadBeforeCommitId: string;
|
|
91
150
|
targetHeadAfterCommitId: string;
|
|
92
151
|
createdMergeCommitId: string | null;
|
|
93
|
-
|
|
152
|
+
changeStats: MergeChangeStats;
|
|
153
|
+
};
|
|
154
|
+
export type MergeVersionPreviewResult = {
|
|
155
|
+
outcome: MergeVersionOutcome;
|
|
156
|
+
targetVersionId: string;
|
|
157
|
+
sourceVersionId: string;
|
|
158
|
+
baseCommitId: string;
|
|
159
|
+
targetHeadCommitId: string;
|
|
160
|
+
sourceHeadCommitId: string;
|
|
161
|
+
changeStats: MergeChangeStats;
|
|
162
|
+
conflicts: MergeConflict[];
|
|
163
|
+
};
|
|
164
|
+
export type MergeChangeStats = {
|
|
165
|
+
total: number;
|
|
166
|
+
added: number;
|
|
167
|
+
modified: number;
|
|
168
|
+
removed: number;
|
|
169
|
+
};
|
|
170
|
+
export type MergeConflict = {
|
|
171
|
+
kind: "sameEntityChanged";
|
|
172
|
+
schemaKey: string;
|
|
173
|
+
entityId: string;
|
|
174
|
+
fileId: string | null;
|
|
175
|
+
target: MergeConflictSide;
|
|
176
|
+
source: MergeConflictSide;
|
|
177
|
+
};
|
|
178
|
+
export type MergeConflictSide = {
|
|
179
|
+
kind: "added" | "modified" | "removed";
|
|
180
|
+
beforeChangeId: string | null;
|
|
181
|
+
afterChangeId: string | null;
|
|
94
182
|
};
|
|
95
183
|
export type Lix = {
|
|
96
184
|
/**
|
|
@@ -105,6 +193,7 @@ export type Lix = {
|
|
|
105
193
|
activeVersionId(): Promise<string>;
|
|
106
194
|
createVersion(options: CreateVersionOptions): Promise<CreateVersionResult>;
|
|
107
195
|
switchVersion(options: SwitchVersionOptions): Promise<SwitchVersionResult>;
|
|
196
|
+
mergeVersionPreview(options: MergeVersionOptions): Promise<MergeVersionPreviewResult>;
|
|
108
197
|
mergeVersion(options: MergeVersionOptions): Promise<MergeVersionResult>;
|
|
109
198
|
close(): Promise<void>;
|
|
110
199
|
};
|
package/dist/open-lix.js
CHANGED
|
@@ -134,6 +134,9 @@ function createLixHandle(wasmLix) {
|
|
|
134
134
|
async switchVersion(options) {
|
|
135
135
|
return await runQueued(() => wasmLix.switchVersion(options));
|
|
136
136
|
},
|
|
137
|
+
async mergeVersionPreview(options) {
|
|
138
|
+
return await runQueued(() => wasmLix.mergeVersionPreview(options));
|
|
139
|
+
},
|
|
137
140
|
async mergeVersion(options) {
|
|
138
141
|
return await runQueued(() => wasmLix.mergeVersion(options));
|
|
139
142
|
},
|
package/dist/sqlite/index.js
CHANGED
|
@@ -51,21 +51,21 @@ class BetterSqlite3Backend {
|
|
|
51
51
|
this.#db = db;
|
|
52
52
|
this.#registryKey = registryKey;
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
beginReadTransaction() {
|
|
55
55
|
this.#ensureOpen();
|
|
56
56
|
if (this.#db.inTransaction) {
|
|
57
57
|
throw new Error("cannot open nested Lix backend transaction");
|
|
58
58
|
}
|
|
59
|
-
this.#db.exec(
|
|
59
|
+
this.#db.exec("BEGIN DEFERRED");
|
|
60
60
|
return new BetterSqlite3Transaction(this.#db);
|
|
61
61
|
}
|
|
62
|
-
|
|
62
|
+
beginWriteTransaction() {
|
|
63
63
|
this.#ensureOpen();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this.#
|
|
68
|
-
return
|
|
64
|
+
if (this.#db.inTransaction) {
|
|
65
|
+
throw new Error("cannot open nested Lix backend transaction");
|
|
66
|
+
}
|
|
67
|
+
this.#db.exec("BEGIN IMMEDIATE");
|
|
68
|
+
return new BetterSqlite3Transaction(this.#db);
|
|
69
69
|
}
|
|
70
70
|
close() {
|
|
71
71
|
if (this.#closed)
|
|
@@ -92,27 +92,59 @@ class BetterSqlite3Transaction {
|
|
|
92
92
|
constructor(db) {
|
|
93
93
|
this.#db = db;
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
getValues(request) {
|
|
96
|
+
this.#ensureOpen();
|
|
97
|
+
return getValues(this.#db, request);
|
|
98
|
+
}
|
|
99
|
+
existsMany(request) {
|
|
96
100
|
this.#ensureOpen();
|
|
97
|
-
return
|
|
101
|
+
return existsMany(this.#db, request);
|
|
98
102
|
}
|
|
99
|
-
|
|
103
|
+
scanKeys(request) {
|
|
100
104
|
this.#ensureOpen();
|
|
101
|
-
|
|
105
|
+
const { pairs, resumeAfter } = scanPage(this.#db, request);
|
|
106
|
+
return {
|
|
107
|
+
keys: pairs.map(({ key }) => key),
|
|
108
|
+
resumeAfter,
|
|
109
|
+
};
|
|
102
110
|
}
|
|
103
|
-
|
|
111
|
+
scanValues(request) {
|
|
104
112
|
this.#ensureOpen();
|
|
105
|
-
this.#db
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
const { pairs, resumeAfter } = scanPage(this.#db, request);
|
|
114
|
+
return {
|
|
115
|
+
values: pairs.map(({ value }) => value),
|
|
116
|
+
resumeAfter,
|
|
117
|
+
};
|
|
110
118
|
}
|
|
111
|
-
|
|
119
|
+
scanEntries(request) {
|
|
112
120
|
this.#ensureOpen();
|
|
113
|
-
this.#db
|
|
114
|
-
|
|
115
|
-
.
|
|
121
|
+
const { pairs, resumeAfter } = scanPage(this.#db, request);
|
|
122
|
+
return {
|
|
123
|
+
keys: pairs.map(({ key }) => key),
|
|
124
|
+
values: pairs.map(({ value }) => value),
|
|
125
|
+
resumeAfter,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
writeKvBatch(batch) {
|
|
129
|
+
this.#ensureOpen();
|
|
130
|
+
const stats = {
|
|
131
|
+
puts: 0,
|
|
132
|
+
deletes: 0,
|
|
133
|
+
bytesWritten: 0,
|
|
134
|
+
};
|
|
135
|
+
for (const group of batch.groups) {
|
|
136
|
+
for (const put of group.puts) {
|
|
137
|
+
stats.puts += 1;
|
|
138
|
+
stats.bytesWritten += put.key.length + put.value.length;
|
|
139
|
+
kvPut(this.#db, group.namespace, put.key, put.value);
|
|
140
|
+
}
|
|
141
|
+
for (const key of group.deletes) {
|
|
142
|
+
stats.deletes += 1;
|
|
143
|
+
stats.bytesWritten += key.length;
|
|
144
|
+
kvDelete(this.#db, group.namespace, key);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return stats;
|
|
116
148
|
}
|
|
117
149
|
commit() {
|
|
118
150
|
this.#ensureOpen();
|
|
@@ -130,6 +162,34 @@ class BetterSqlite3Transaction {
|
|
|
130
162
|
}
|
|
131
163
|
}
|
|
132
164
|
}
|
|
165
|
+
function getValues(db, request) {
|
|
166
|
+
return {
|
|
167
|
+
groups: request.groups.map((group) => ({
|
|
168
|
+
namespace: group.namespace,
|
|
169
|
+
values: group.keys.map((key) => kvGet(db, group.namespace, key)),
|
|
170
|
+
})),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function existsMany(db, request) {
|
|
174
|
+
return {
|
|
175
|
+
groups: request.groups.map((group) => ({
|
|
176
|
+
namespace: group.namespace,
|
|
177
|
+
exists: group.keys.map((key) => kvGet(db, group.namespace, key) !== null),
|
|
178
|
+
})),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function scanPage(db, request) {
|
|
182
|
+
const scanLimit = request.limit + 1 + (request.after ? 1 : 0);
|
|
183
|
+
const pairs = kvScan(db, request.namespace, request.range, scanLimit).filter((pair) => !request.after || compareBytes(pair.key, request.after) > 0);
|
|
184
|
+
const hasMore = pairs.length > request.limit;
|
|
185
|
+
const pagePairs = pairs.slice(0, request.limit);
|
|
186
|
+
return {
|
|
187
|
+
pairs: pagePairs,
|
|
188
|
+
resumeAfter: hasMore
|
|
189
|
+
? (pagePairs.at(-1)?.key ?? null)
|
|
190
|
+
: null,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
133
193
|
function kvGet(db, namespace, key) {
|
|
134
194
|
const row = db
|
|
135
195
|
.prepare("SELECT value FROM lix_kv WHERE namespace = ? AND key = ?")
|
|
@@ -139,6 +199,14 @@ function kvGet(db, namespace, key) {
|
|
|
139
199
|
}
|
|
140
200
|
return bytesFromUnknown(row.value, "lix_kv.value");
|
|
141
201
|
}
|
|
202
|
+
function kvPut(db, namespace, key, value) {
|
|
203
|
+
db.prepare(`INSERT INTO lix_kv (namespace, key, value)
|
|
204
|
+
VALUES (?, ?, ?)
|
|
205
|
+
ON CONFLICT(namespace, key) DO UPDATE SET value = excluded.value`).run(namespace, sqliteBytes(key), sqliteBytes(value));
|
|
206
|
+
}
|
|
207
|
+
function kvDelete(db, namespace, key) {
|
|
208
|
+
db.prepare("DELETE FROM lix_kv WHERE namespace = ? AND key = ?").run(namespace, sqliteBytes(key));
|
|
209
|
+
}
|
|
142
210
|
function kvScan(db, namespace, range, limit) {
|
|
143
211
|
const { sql, params } = scanQuery(namespace, range, limit);
|
|
144
212
|
return db.prepare(sql).all(...params).map((row) => {
|
|
@@ -174,6 +242,15 @@ function scanQuery(namespace, range, limit) {
|
|
|
174
242
|
}
|
|
175
243
|
return { sql, params };
|
|
176
244
|
}
|
|
245
|
+
function compareBytes(left, right) {
|
|
246
|
+
const length = Math.min(left.length, right.length);
|
|
247
|
+
for (let index = 0; index < length; index++) {
|
|
248
|
+
const delta = left[index] - right[index];
|
|
249
|
+
if (delta !== 0)
|
|
250
|
+
return delta;
|
|
251
|
+
}
|
|
252
|
+
return left.length - right.length;
|
|
253
|
+
}
|
|
177
254
|
function prefixUpperBound(prefix) {
|
|
178
255
|
const end = new Uint8Array(prefix);
|
|
179
256
|
for (let index = end.length - 1; index >= 0; index--) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Bundled Lix Engine Source
|
|
2
|
+
|
|
3
|
+
This directory is a generated snapshot of the Rust engine source that backs this @lix-js/sdk release.
|
|
4
|
+
|
|
5
|
+
Source in the Lix monorepo: `packages/engine/src`
|
|
6
|
+
|
|
7
|
+
Agents should inspect these files when SDK behavior is unclear instead of relying only on SKILL.md prose.
|
|
8
|
+
|
|
9
|
+
Useful entry points:
|
|
10
|
+
|
|
11
|
+
- `src/sql2/entity_provider.rs` - registered schema SQL surfaces
|
|
12
|
+
- `src/sql2/change_provider.rs` - `lix_change` projection
|
|
13
|
+
- `src/sql2/version_provider.rs` - writable `lix_version` surface
|
|
14
|
+
- `src/transaction/validation.rs` - primary-key, unique, foreign-key, and shape validation
|
|
15
|
+
- `src/schema/definition.json` - Lix schema-definition meta-schema
|
|
16
|
+
- `src/schema/builtin/` - built-in schema definitions
|
|
17
|
+
|
|
18
|
+
Regenerate with `pnpm --filter @lix-js/sdk sync:engine-src` from the repo root.
|