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

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 (165) hide show
  1. package/SKILL.md +4 -5
  2. package/dist/engine-wasm/wasm/lix_engine.js +1 -1
  3. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  4. package/dist/generated/builtin-schemas.d.ts +87 -162
  5. package/dist/generated/builtin-schemas.js +139 -236
  6. package/dist/open-lix.d.ts +1 -1
  7. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  8. package/dist-engine-src/src/catalog/context.rs +412 -0
  9. package/dist-engine-src/src/catalog/mod.rs +10 -0
  10. package/dist-engine-src/src/catalog/schema.rs +4 -0
  11. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  12. package/dist-engine-src/src/cel/mod.rs +1 -1
  13. package/dist-engine-src/src/cel/provider.rs +1 -1
  14. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  15. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  16. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  17. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  18. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  19. package/dist-engine-src/src/commit_store/context.rs +944 -0
  20. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  21. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  22. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  23. package/dist-engine-src/src/commit_store/types.rs +215 -0
  24. package/dist-engine-src/src/common/identity.rs +15 -5
  25. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  26. package/dist-engine-src/src/common/metadata.rs +17 -12
  27. package/dist-engine-src/src/common/mod.rs +5 -5
  28. package/dist-engine-src/src/domain.rs +324 -0
  29. package/dist-engine-src/src/engine.rs +29 -43
  30. package/dist-engine-src/src/entity_identity.rs +238 -118
  31. package/dist-engine-src/src/functions/context.rs +17 -52
  32. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  33. package/dist-engine-src/src/functions/mod.rs +1 -1
  34. package/dist-engine-src/src/functions/provider.rs +4 -4
  35. package/dist-engine-src/src/functions/state.rs +39 -66
  36. package/dist-engine-src/src/functions/types.rs +1 -1
  37. package/dist-engine-src/src/init.rs +204 -151
  38. package/dist-engine-src/src/json_store/context.rs +354 -60
  39. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  40. package/dist-engine-src/src/json_store/mod.rs +4 -1
  41. package/dist-engine-src/src/json_store/store.rs +884 -11
  42. package/dist-engine-src/src/json_store/types.rs +166 -1
  43. package/dist-engine-src/src/lib.rs +10 -9
  44. package/dist-engine-src/src/live_state/context.rs +608 -830
  45. package/dist-engine-src/src/live_state/mod.rs +3 -3
  46. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  47. package/dist-engine-src/src/live_state/reader.rs +5 -5
  48. package/dist-engine-src/src/live_state/types.rs +19 -36
  49. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  50. package/dist-engine-src/src/plugin/archive.rs +3 -6
  51. package/dist-engine-src/src/plugin/install.rs +0 -18
  52. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  53. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  54. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  55. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  56. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  57. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  58. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  60. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  61. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  63. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  64. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  65. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  66. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  67. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  68. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  69. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  70. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  71. package/dist-engine-src/src/schema/definition.json +47 -17
  72. package/dist-engine-src/src/schema/definition.rs +202 -96
  73. package/dist-engine-src/src/schema/key.rs +9 -77
  74. package/dist-engine-src/src/schema/mod.rs +4 -4
  75. package/dist-engine-src/src/schema/tests.rs +133 -92
  76. package/dist-engine-src/src/session/context.rs +40 -42
  77. package/dist-engine-src/src/session/create_version.rs +22 -14
  78. package/dist-engine-src/src/session/execute.rs +45 -14
  79. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  80. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  81. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  82. package/dist-engine-src/src/session/merge/version.rs +35 -45
  83. package/dist-engine-src/src/session/mod.rs +4 -2
  84. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  85. package/dist-engine-src/src/session/switch_version.rs +16 -28
  86. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  87. package/dist-engine-src/src/sql2/classify.rs +61 -26
  88. package/dist-engine-src/src/sql2/context.rs +22 -18
  89. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  90. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  91. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  92. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  93. package/dist-engine-src/src/sql2/error.rs +21 -1
  94. package/dist-engine-src/src/sql2/execute.rs +325 -264
  95. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  96. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  97. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  98. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  99. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  100. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  101. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  102. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  103. package/dist-engine-src/src/sql2/mod.rs +6 -3
  104. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  105. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  106. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  107. package/dist-engine-src/src/sql2/public_bind/dml.rs +166 -0
  108. package/dist-engine-src/src/sql2/public_bind/mod.rs +25 -0
  109. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  110. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  111. package/dist-engine-src/src/sql2/session.rs +7 -10
  112. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  113. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  114. package/dist-engine-src/src/sql2/udfs/public_call.rs +211 -0
  115. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  116. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  117. package/dist-engine-src/src/storage_bench.rs +1782 -325
  118. package/dist-engine-src/src/test_support.rs +183 -36
  119. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  120. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  121. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  122. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  123. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  124. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  125. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  126. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  127. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  128. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  129. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  130. package/dist-engine-src/src/transaction/commit.rs +695 -435
  131. package/dist-engine-src/src/transaction/context.rs +551 -310
  132. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  133. package/dist-engine-src/src/transaction/mod.rs +2 -0
  134. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  135. package/dist-engine-src/src/transaction/prep.rs +37 -0
  136. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  137. package/dist-engine-src/src/transaction/staging.rs +701 -406
  138. package/dist-engine-src/src/transaction/types.rs +231 -122
  139. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  140. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  141. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  142. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  143. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  144. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  145. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  146. package/dist-engine-src/src/version/context.rs +1 -13
  147. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  148. package/dist-engine-src/src/version/mod.rs +3 -2
  149. package/dist-engine-src/src/version/refs.rs +12 -103
  150. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  151. package/package.json +1 -1
  152. package/dist-engine-src/src/changelog/codec.rs +0 -321
  153. package/dist-engine-src/src/changelog/context.rs +0 -92
  154. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  155. package/dist-engine-src/src/changelog/mod.rs +0 -13
  156. package/dist-engine-src/src/changelog/reader.rs +0 -20
  157. package/dist-engine-src/src/changelog/storage.rs +0 -220
  158. package/dist-engine-src/src/changelog/types.rs +0 -38
  159. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  160. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  161. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  162. package/dist-engine-src/src/schema_registry.rs +0 -294
  163. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  164. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  165. 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,16 +43,14 @@ 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,