@lix-js/sdk 0.6.0-preview.2 → 0.6.0-preview.4

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.
Files changed (169) hide show
  1. package/SKILL.md +46 -8
  2. package/dist/engine-wasm/wasm/lix_engine.d.ts +25 -1
  3. package/dist/engine-wasm/wasm/lix_engine.js +60 -2
  4. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  5. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +5 -0
  6. package/dist/generated/builtin-schemas.d.ts +87 -162
  7. package/dist/generated/builtin-schemas.js +139 -236
  8. package/dist/open-lix.d.ts +10 -3
  9. package/dist/open-lix.js +39 -0
  10. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  11. package/dist-engine-src/src/catalog/context.rs +412 -0
  12. package/dist-engine-src/src/catalog/mod.rs +10 -0
  13. package/dist-engine-src/src/catalog/schema.rs +4 -0
  14. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  15. package/dist-engine-src/src/cel/mod.rs +1 -1
  16. package/dist-engine-src/src/cel/provider.rs +1 -1
  17. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  18. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  19. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  20. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  21. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  22. package/dist-engine-src/src/commit_store/context.rs +944 -0
  23. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  24. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  25. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  26. package/dist-engine-src/src/commit_store/types.rs +215 -0
  27. package/dist-engine-src/src/common/identity.rs +15 -5
  28. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  29. package/dist-engine-src/src/common/metadata.rs +17 -12
  30. package/dist-engine-src/src/common/mod.rs +5 -5
  31. package/dist-engine-src/src/domain.rs +324 -0
  32. package/dist-engine-src/src/engine.rs +29 -43
  33. package/dist-engine-src/src/entity_identity.rs +238 -118
  34. package/dist-engine-src/src/functions/context.rs +17 -52
  35. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  36. package/dist-engine-src/src/functions/mod.rs +1 -1
  37. package/dist-engine-src/src/functions/provider.rs +4 -4
  38. package/dist-engine-src/src/functions/state.rs +39 -66
  39. package/dist-engine-src/src/functions/types.rs +1 -1
  40. package/dist-engine-src/src/init.rs +204 -151
  41. package/dist-engine-src/src/json_store/context.rs +354 -60
  42. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  43. package/dist-engine-src/src/json_store/mod.rs +4 -1
  44. package/dist-engine-src/src/json_store/store.rs +884 -11
  45. package/dist-engine-src/src/json_store/types.rs +166 -1
  46. package/dist-engine-src/src/lib.rs +11 -10
  47. package/dist-engine-src/src/live_state/context.rs +608 -830
  48. package/dist-engine-src/src/live_state/mod.rs +3 -3
  49. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  50. package/dist-engine-src/src/live_state/reader.rs +5 -5
  51. package/dist-engine-src/src/live_state/types.rs +19 -36
  52. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  53. package/dist-engine-src/src/plugin/archive.rs +3 -6
  54. package/dist-engine-src/src/plugin/install.rs +0 -18
  55. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  56. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  57. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  58. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  60. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  61. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  63. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  64. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  65. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  66. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  67. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  68. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  69. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  70. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  71. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  72. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  73. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  74. package/dist-engine-src/src/schema/definition.json +47 -17
  75. package/dist-engine-src/src/schema/definition.rs +202 -96
  76. package/dist-engine-src/src/schema/key.rs +9 -77
  77. package/dist-engine-src/src/schema/mod.rs +4 -4
  78. package/dist-engine-src/src/schema/tests.rs +133 -92
  79. package/dist-engine-src/src/session/context.rs +86 -48
  80. package/dist-engine-src/src/session/create_version.rs +22 -14
  81. package/dist-engine-src/src/session/execute.rs +117 -23
  82. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  83. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  84. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  85. package/dist-engine-src/src/session/merge/version.rs +35 -45
  86. package/dist-engine-src/src/session/mod.rs +9 -7
  87. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  88. package/dist-engine-src/src/session/switch_version.rs +17 -28
  89. package/dist-engine-src/src/session/transaction.rs +76 -0
  90. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  91. package/dist-engine-src/src/sql2/classify.rs +75 -48
  92. package/dist-engine-src/src/sql2/context.rs +22 -18
  93. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  94. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  95. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  96. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  97. package/dist-engine-src/src/sql2/error.rs +24 -5
  98. package/dist-engine-src/src/sql2/execute.rs +426 -272
  99. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  100. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  101. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  102. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  103. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  104. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  105. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  106. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  107. package/dist-engine-src/src/sql2/mod.rs +8 -4
  108. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  109. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  110. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  111. package/dist-engine-src/src/sql2/public_bind/dml.rs +172 -0
  112. package/dist-engine-src/src/sql2/public_bind/mod.rs +26 -0
  113. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  114. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  115. package/dist-engine-src/src/sql2/session.rs +7 -10
  116. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  117. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  118. package/dist-engine-src/src/sql2/udfs/public_call.rs +238 -0
  119. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  120. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  121. package/dist-engine-src/src/storage_bench.rs +1782 -325
  122. package/dist-engine-src/src/test_support.rs +183 -36
  123. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  124. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  125. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  126. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  127. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  128. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  129. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  130. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  131. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  132. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  133. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  134. package/dist-engine-src/src/transaction/commit.rs +695 -435
  135. package/dist-engine-src/src/transaction/context.rs +551 -310
  136. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  137. package/dist-engine-src/src/transaction/mod.rs +2 -0
  138. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  139. package/dist-engine-src/src/transaction/prep.rs +37 -0
  140. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  141. package/dist-engine-src/src/transaction/staging.rs +701 -406
  142. package/dist-engine-src/src/transaction/types.rs +231 -122
  143. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  144. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  145. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  146. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  147. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  148. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  149. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  150. package/dist-engine-src/src/version/context.rs +1 -13
  151. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  152. package/dist-engine-src/src/version/mod.rs +3 -2
  153. package/dist-engine-src/src/version/refs.rs +12 -103
  154. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  155. package/package.json +1 -1
  156. package/dist-engine-src/src/changelog/codec.rs +0 -321
  157. package/dist-engine-src/src/changelog/context.rs +0 -92
  158. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  159. package/dist-engine-src/src/changelog/mod.rs +0 -13
  160. package/dist-engine-src/src/changelog/reader.rs +0 -20
  161. package/dist-engine-src/src/changelog/storage.rs +0 -220
  162. package/dist-engine-src/src/changelog/types.rs +0 -38
  163. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  164. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  165. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  166. package/dist-engine-src/src/schema_registry.rs +0 -294
  167. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  168. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  169. package/dist-engine-src/src/tracked_state/tree_types.rs +0 -176
@@ -1,4 +1,37 @@
1
- #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
1
+ use std::sync::Arc;
2
+
3
+ use crate::LixError;
4
+
5
+ #[derive(Debug, Clone, PartialEq, Eq)]
6
+ pub(crate) struct NormalizedJson(Arc<str>);
7
+
8
+ impl NormalizedJson {
9
+ pub(crate) fn from_arc_unchecked(normalized: Arc<str>) -> Self {
10
+ Self(normalized)
11
+ }
12
+
13
+ pub(crate) fn from_value(value: &serde_json::Value, context: &str) -> Result<Self, LixError> {
14
+ let normalized: Arc<str> = serde_json::to_string(value)
15
+ .map_err(|error| {
16
+ LixError::new(
17
+ LixError::CODE_UNKNOWN,
18
+ format!("{context} failed to serialize as normalized JSON: {error}"),
19
+ )
20
+ })?
21
+ .into();
22
+ Ok(Self(normalized))
23
+ }
24
+
25
+ pub(crate) fn as_str(&self) -> &str {
26
+ self.0.as_ref()
27
+ }
28
+
29
+ pub(crate) fn as_bytes(&self) -> &[u8] {
30
+ self.as_str().as_bytes()
31
+ }
32
+ }
33
+
34
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
2
35
  pub(crate) struct JsonRef {
3
36
  hash: [u8; 32],
4
37
  }
@@ -14,15 +47,128 @@ impl JsonRef {
14
47
  Self { hash }
15
48
  }
16
49
 
50
+ pub(crate) fn for_content(bytes: &[u8]) -> Self {
51
+ Self::from_hash(blake3::hash(bytes))
52
+ }
53
+
17
54
  pub(crate) fn as_hash_bytes(&self) -> &[u8] {
18
55
  &self.hash
19
56
  }
20
57
 
58
+ pub(crate) fn as_hash_array(&self) -> &[u8; 32] {
59
+ &self.hash
60
+ }
61
+
21
62
  pub(crate) fn to_hex(&self) -> String {
22
63
  self.hash.iter().map(|byte| format!("{byte:02x}")).collect()
23
64
  }
24
65
  }
25
66
 
67
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
68
+ pub(crate) struct NormalizedJsonRef<'a> {
69
+ normalized: &'a str,
70
+ trusted_json_ref: Option<JsonRef>,
71
+ }
72
+
73
+ impl<'a> NormalizedJsonRef<'a> {
74
+ pub(crate) fn new(normalized: &'a str) -> Self {
75
+ Self {
76
+ normalized,
77
+ trusted_json_ref: None,
78
+ }
79
+ }
80
+
81
+ /// Uses a caller-owned invariant that `json_ref` was computed from
82
+ /// `normalized`. This avoids rehashing JSON already normalized by the
83
+ /// transaction staging boundary.
84
+ pub(crate) fn trusted_prehashed(normalized: &'a str, json_ref: JsonRef) -> Self {
85
+ Self {
86
+ normalized,
87
+ trusted_json_ref: Some(json_ref),
88
+ }
89
+ }
90
+
91
+ pub(crate) fn normalized(&self) -> &'a str {
92
+ self.normalized
93
+ }
94
+
95
+ pub(crate) fn trusted_json_ref(&self) -> Option<JsonRef> {
96
+ self.trusted_json_ref
97
+ }
98
+ }
99
+
100
+ impl<'a> From<&'a NormalizedJson> for NormalizedJsonRef<'a> {
101
+ fn from(value: &'a NormalizedJson) -> Self {
102
+ Self::new(value.as_str())
103
+ }
104
+ }
105
+
106
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
107
+ pub(crate) enum JsonWritePlacementRef<'a> {
108
+ CommitPack { commit_id: &'a str, pack_id: u32 },
109
+ OutOfBand,
110
+ }
111
+
112
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
113
+ pub(crate) enum JsonReadScopeRef<'a> {
114
+ OutOfBand,
115
+ CommitPacks {
116
+ commit_id: &'a str,
117
+ pack_ids: &'a [u32],
118
+ },
119
+ }
120
+
121
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
122
+ pub(crate) struct JsonLoadRequestRef<'a> {
123
+ pub(crate) refs: &'a [JsonRef],
124
+ pub(crate) scope: JsonReadScopeRef<'a>,
125
+ }
126
+
127
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
128
+ pub(crate) struct JsonProjectionLoadRequestRef<'a> {
129
+ pub(crate) refs: &'a [JsonRef],
130
+ pub(crate) scope: JsonReadScopeRef<'a>,
131
+ pub(crate) paths: &'a [JsonProjectionPath],
132
+ }
133
+
134
+ #[derive(Debug, Clone, PartialEq, Eq)]
135
+ pub(crate) struct JsonLoadBatch {
136
+ values: Vec<Option<Vec<u8>>>,
137
+ }
138
+
139
+ impl JsonLoadBatch {
140
+ pub(crate) fn new(values: Vec<Option<Vec<u8>>>) -> Self {
141
+ Self { values }
142
+ }
143
+
144
+ pub(crate) fn values(&self) -> &[Option<Vec<u8>>] {
145
+ &self.values
146
+ }
147
+
148
+ pub(crate) fn into_values(self) -> Vec<Option<Vec<u8>>> {
149
+ self.values
150
+ }
151
+ }
152
+
153
+ #[derive(Debug, Clone, PartialEq)]
154
+ pub(crate) struct JsonValueBatch {
155
+ values: Vec<Option<serde_json::Value>>,
156
+ }
157
+
158
+ impl JsonValueBatch {
159
+ pub(crate) fn new(values: Vec<Option<serde_json::Value>>) -> Self {
160
+ Self { values }
161
+ }
162
+
163
+ pub(crate) fn values(&self) -> &[Option<serde_json::Value>] {
164
+ &self.values
165
+ }
166
+
167
+ pub(crate) fn into_values(self) -> Vec<Option<serde_json::Value>> {
168
+ self.values
169
+ }
170
+ }
171
+
26
172
  #[derive(Debug, Clone, PartialEq, Eq)]
27
173
  pub(crate) struct JsonProjectionPath(String);
28
174
 
@@ -50,3 +196,22 @@ impl JsonProjection {
50
196
  &self.values
51
197
  }
52
198
  }
199
+
200
+ #[derive(Debug, Clone, PartialEq)]
201
+ pub(crate) struct JsonProjectionBatch {
202
+ values: Vec<Option<JsonProjection>>,
203
+ }
204
+
205
+ impl JsonProjectionBatch {
206
+ pub(crate) fn new(values: Vec<Option<JsonProjection>>) -> Self {
207
+ Self { values }
208
+ }
209
+
210
+ pub(crate) fn values(&self) -> &[Option<JsonProjection>] {
211
+ &self.values
212
+ }
213
+
214
+ pub(crate) fn into_values(self) -> Vec<Option<JsonProjection>> {
215
+ self.values
216
+ }
217
+ }
@@ -1,9 +1,12 @@
1
1
  mod backend;
2
2
  mod binary_cas;
3
+ pub(crate) mod catalog;
3
4
  pub(crate) mod cel;
4
- pub(crate) mod changelog;
5
5
  pub(crate) mod commit_graph;
6
+ #[allow(dead_code, unused_imports)]
7
+ pub(crate) mod commit_store;
6
8
  mod common;
9
+ pub(crate) mod domain;
7
10
  pub mod engine;
8
11
  pub(crate) mod entity_identity;
9
12
  pub(crate) mod functions;
@@ -12,14 +15,14 @@ pub(crate) mod init;
12
15
  pub(crate) mod json_store;
13
16
  pub(crate) mod live_state;
14
17
  mod schema;
15
- pub(crate) mod schema_registry;
16
18
  pub mod session;
17
19
  pub(crate) mod sql2;
18
20
  #[allow(dead_code, unused_imports)]
19
21
  pub(crate) mod storage;
20
22
  #[cfg(feature = "storage-benches")]
21
23
  pub mod storage_bench;
22
- #[cfg(test)]
24
+ #[cfg_attr(feature = "storage-benches", allow(dead_code))]
25
+ #[cfg(any(test, feature = "storage-benches"))]
23
26
  pub(crate) mod test_support;
24
27
  pub(crate) mod tracked_state;
25
28
  pub mod transaction;
@@ -40,21 +43,19 @@ pub use backend::{
40
43
  BytePage, BytePageBuilder,
41
44
  };
42
45
  pub use common::LixError;
43
- pub(crate) use common::{
44
- parse_row_metadata, serialize_row_metadata, validate_row_metadata, RowMetadata,
45
- };
46
- pub use common::{
47
- CanonicalPluginKey, CanonicalSchemaKey, CanonicalSchemaVersion, EntityId, FileId, VersionId,
48
- };
46
+ pub(crate) use common::{parse_row_metadata, parse_row_metadata_value, serialize_row_metadata};
47
+ pub use common::{CanonicalPluginKey, CanonicalSchemaKey, EntityId, FileId, VersionId};
49
48
  pub use common::{LixNotice, NullableKeyFilter, SqlQueryResult, Value, WriteReceipt};
50
49
  pub use common::{WireQueryResult, WireValue};
51
50
  pub use engine::Engine;
52
51
  pub use init::InitReceipt;
52
+ #[cfg(feature = "storage-benches")]
53
+ pub use session::optimization9_sql2_bench;
53
54
  pub use session::{
54
55
  CreateVersionOptions, CreateVersionReceipt, MergeChangeStats, MergeConflict,
55
56
  MergeConflictChangeKind, MergeConflictKind, MergeConflictSide, MergeVersionOptions,
56
57
  MergeVersionOutcome, MergeVersionPreview, MergeVersionPreviewOptions, MergeVersionReceipt,
57
- SessionContext, SwitchVersionOptions, SwitchVersionReceipt,
58
+ SessionContext, SessionTransaction, SwitchVersionOptions, SwitchVersionReceipt,
58
59
  };
59
60
  pub use session::{ExecuteResult, Row, RowRef, TryFromValue};
60
61