@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
@@ -22,7 +22,6 @@ use serde::Deserialize;
22
22
  use tokio::sync::Mutex;
23
23
 
24
24
  use crate::binary_cas::{BlobDataReader, BlobHash};
25
- use crate::changelog::MaterializedCanonicalChange;
26
25
  use crate::commit_graph::CommitGraphReader;
27
26
  use crate::serialize_row_metadata;
28
27
  use crate::LixError;
@@ -33,10 +32,11 @@ use super::history_route::{
33
32
  HistoryColumnStyle, HistoryEntry, HistoryRoute, HistoryViewDescriptor, HISTORY_COL_CHANGE_ID,
34
33
  HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_ID, HISTORY_COL_FILE_ID,
35
34
  HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID, HISTORY_COL_SCHEMA_KEY,
36
- HISTORY_COL_SCHEMA_VERSION, HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
35
+ HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
37
36
  };
38
37
  use super::result_metadata::json_field;
39
- use super::SqlChangelogQuerySource;
38
+ use super::SqlCommitStoreQuerySource;
39
+ use crate::commit_store::MaterializedChange;
40
40
 
41
41
  const FILE_DESCRIPTOR_SCHEMA_KEY: &str = "lix_file_descriptor";
42
42
  const DIRECTORY_DESCRIPTOR_SCHEMA_KEY: &str = "lix_directory_descriptor";
@@ -45,7 +45,7 @@ const BLOB_REF_SCHEMA_KEY: &str = "lix_binary_blob_ref";
45
45
  pub(crate) async fn register_lix_file_history_provider(
46
46
  session: &datafusion::prelude::SessionContext,
47
47
  commit_graph: Box<dyn CommitGraphReader>,
48
- query_source: SqlChangelogQuerySource,
48
+ query_source: SqlCommitStoreQuerySource,
49
49
  blob_reader: Arc<dyn BlobDataReader>,
50
50
  ) -> Result<(), LixError> {
51
51
  session
@@ -64,7 +64,7 @@ pub(crate) async fn register_lix_file_history_provider(
64
64
  struct LixFileHistoryProvider {
65
65
  schema: SchemaRef,
66
66
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
67
- query_source: SqlChangelogQuerySource,
67
+ query_source: SqlCommitStoreQuerySource,
68
68
  blob_reader: Arc<dyn BlobDataReader>,
69
69
  }
70
70
 
@@ -77,7 +77,7 @@ impl std::fmt::Debug for LixFileHistoryProvider {
77
77
  impl LixFileHistoryProvider {
78
78
  fn new(
79
79
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
80
- query_source: SqlChangelogQuerySource,
80
+ query_source: SqlCommitStoreQuerySource,
81
81
  blob_reader: Arc<dyn BlobDataReader>,
82
82
  ) -> Self {
83
83
  Self {
@@ -150,7 +150,7 @@ impl TableProvider for LixFileHistoryProvider {
150
150
 
151
151
  struct LixFileHistoryScanExec {
152
152
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
153
- query_source: SqlChangelogQuerySource,
153
+ query_source: SqlCommitStoreQuerySource,
154
154
  blob_reader: Arc<dyn BlobDataReader>,
155
155
  schema: SchemaRef,
156
156
  needs_data: bool,
@@ -171,7 +171,7 @@ impl std::fmt::Debug for LixFileHistoryScanExec {
171
171
  impl LixFileHistoryScanExec {
172
172
  fn new(
173
173
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
174
- query_source: SqlChangelogQuerySource,
174
+ query_source: SqlCommitStoreQuerySource,
175
175
  blob_reader: Arc<dyn BlobDataReader>,
176
176
  schema: SchemaRef,
177
177
  needs_data: bool,
@@ -312,7 +312,7 @@ struct FileHistoryEvent {
312
312
  start_commit_id: String,
313
313
  depth: u32,
314
314
  priority: u8,
315
- change: MaterializedCanonicalChange,
315
+ change: MaterializedChange,
316
316
  observed_commit_id: String,
317
317
  commit_created_at: String,
318
318
  }
@@ -326,7 +326,7 @@ struct FileHistoryOutputRow {
326
326
  name: Option<String>,
327
327
  hidden: Option<bool>,
328
328
  data: Option<Vec<u8>>,
329
- descriptor_change: MaterializedCanonicalChange,
329
+ descriptor_change: MaterializedChange,
330
330
  event: FileHistoryEvent,
331
331
  }
332
332
 
@@ -353,7 +353,7 @@ struct BlobRefSnapshot {
353
353
 
354
354
  async fn load_file_history_rows(
355
355
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
356
- query_source: SqlChangelogQuerySource,
356
+ query_source: SqlCommitStoreQuerySource,
357
357
  blob_reader: &Arc<dyn BlobDataReader>,
358
358
  route: &HistoryRoute,
359
359
  needs_data: bool,
@@ -440,9 +440,10 @@ async fn load_file_history_rows(
440
440
  });
441
441
  }
442
442
  output.retain(|row| {
443
+ let entity_id = entity_id_json_array(&row.entity_id).ok();
443
444
  route.matches_surface_row(
444
445
  FILE_DESCRIPTOR_SCHEMA_KEY,
445
- &row.entity_id,
446
+ entity_id.as_deref().unwrap_or(&row.entity_id),
446
447
  Some(&row.entity_id),
447
448
  row.event.depth,
448
449
  )
@@ -574,7 +575,7 @@ fn parse_file_history_descriptors(
574
575
  .map(|entry| {
575
576
  let Some(snapshot_content) = entry.change.snapshot_content.as_deref() else {
576
577
  return Ok(FileHistoryDescriptorRecord {
577
- id: entry.change.entity_id.as_string()?,
578
+ id: entry.change.entity_id.as_single_string_owned()?,
578
579
  directory_id: None,
579
580
  name: None,
580
581
  hidden: None,
@@ -640,7 +641,7 @@ fn parse_file_history_blobs(
640
641
  entry
641
642
  .change
642
643
  .entity_id
643
- .as_string()
644
+ .as_single_string_owned()
644
645
  .expect("canonical change entity identity should project")
645
646
  }),
646
647
  blob_hash: None,
@@ -806,15 +807,15 @@ fn file_history_column_array(
806
807
  .map(|row| row.data.as_deref())
807
808
  .collect::<Vec<_>>(),
808
809
  )) as ArrayRef,
809
- HISTORY_COL_ENTITY_ID => string_array(rows.iter().map(|row| Some(row.entity_id.as_str()))),
810
+ HISTORY_COL_ENTITY_ID => Arc::new(StringArray::from(
811
+ rows.iter()
812
+ .map(|row| entity_id_json_array(&row.entity_id).map(Some))
813
+ .collect::<std::result::Result<Vec<_>, _>>()?,
814
+ )) as ArrayRef,
810
815
  HISTORY_COL_SCHEMA_KEY => {
811
816
  string_array(rows.iter().map(|_| Some(FILE_DESCRIPTOR_SCHEMA_KEY)))
812
817
  }
813
818
  HISTORY_COL_FILE_ID => string_array(rows.iter().map(|row| Some(row.entity_id.as_str()))),
814
- HISTORY_COL_SCHEMA_VERSION => string_array(
815
- rows.iter()
816
- .map(|row| Some(row.descriptor_change.schema_version.as_str())),
817
- ),
818
819
  HISTORY_COL_CHANGE_ID => {
819
820
  string_array(rows.iter().map(|row| Some(row.event.change.id.as_str())))
820
821
  }
@@ -868,11 +869,10 @@ fn lix_file_history_schema() -> SchemaRef {
868
869
  Field::new("name", DataType::Utf8, true),
869
870
  Field::new("hidden", DataType::Boolean, true),
870
871
  Field::new("data", DataType::Binary, true),
871
- Field::new(HISTORY_COL_ENTITY_ID, DataType::Utf8, false),
872
+ json_field(HISTORY_COL_ENTITY_ID, false),
872
873
  Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
873
874
  Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
874
875
  json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
875
- Field::new(HISTORY_COL_SCHEMA_VERSION, DataType::Utf8, false),
876
876
  Field::new(HISTORY_COL_CHANGE_ID, DataType::Utf8, false),
877
877
  json_field(HISTORY_COL_METADATA, true),
878
878
  Field::new(HISTORY_COL_OBSERVED_COMMIT_ID, DataType::Utf8, false),
@@ -897,6 +897,14 @@ fn datafusion_error_to_lix_error(error: DataFusionError) -> LixError {
897
897
  super::error::datafusion_error_to_lix_error(error)
898
898
  }
899
899
 
900
+ fn entity_id_json_array(entity_id: &str) -> Result<String, LixError> {
901
+ serde_json::to_string(&[entity_id]).map_err(|error| {
902
+ LixError::unknown(format!(
903
+ "failed to encode history entity id as JSON: {error}"
904
+ ))
905
+ })
906
+ }
907
+
900
908
  fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
901
909
  super::error::lix_error_to_datafusion_error(error)
902
910
  }