@lix-js/sdk 0.0.1 → 0.1.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.
Files changed (278) hide show
  1. package/LICENSE +21 -0
  2. package/dist/change/apply-changes.js +9 -9
  3. package/dist/change/apply-changes.js.map +1 -1
  4. package/dist/change/apply-changes.test.js +5 -5
  5. package/dist/change/apply-changes.test.js.map +1 -1
  6. package/dist/database/apply-schema.d.ts.map +1 -1
  7. package/dist/database/apply-schema.js +20 -72
  8. package/dist/database/apply-schema.js.map +1 -1
  9. package/dist/database/execute-sync.test.js +3 -3
  10. package/dist/database/execute-sync.test.js.map +1 -1
  11. package/dist/database/init-db.d.ts.map +1 -1
  12. package/dist/database/init-db.js +18 -3
  13. package/dist/database/init-db.js.map +1 -1
  14. package/dist/database/init-db.test.js +128 -17
  15. package/dist/database/init-db.test.js.map +1 -1
  16. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.d.ts.map +1 -1
  17. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js +5 -2
  18. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js.map +1 -1
  19. package/dist/database/mutation-log/database-schema.d.ts.map +1 -1
  20. package/dist/database/mutation-log/database-schema.js +1 -3
  21. package/dist/database/mutation-log/database-schema.js.map +1 -1
  22. package/dist/database/nano-id.d.ts +21 -0
  23. package/dist/database/nano-id.d.ts.map +1 -0
  24. package/dist/database/nano-id.js +58 -0
  25. package/dist/database/nano-id.js.map +1 -0
  26. package/dist/database/nano-id.test.d.ts +2 -0
  27. package/dist/database/nano-id.test.d.ts.map +1 -0
  28. package/dist/database/nano-id.test.js +13 -0
  29. package/dist/database/nano-id.test.js.map +1 -0
  30. package/dist/database/schema.d.ts +15 -23
  31. package/dist/database/schema.d.ts.map +1 -1
  32. package/dist/discussion/create-comment.d.ts +0 -2
  33. package/dist/discussion/create-comment.d.ts.map +1 -1
  34. package/dist/discussion/create-comment.js +0 -1
  35. package/dist/discussion/create-comment.js.map +1 -1
  36. package/dist/discussion/create-discussion.d.ts +3 -5
  37. package/dist/discussion/create-discussion.d.ts.map +1 -1
  38. package/dist/discussion/create-discussion.js +4 -5
  39. package/dist/discussion/create-discussion.js.map +1 -1
  40. package/dist/discussion/create-discussion.test.js +8 -34
  41. package/dist/discussion/create-discussion.test.js.map +1 -1
  42. package/dist/file-queue/file-handlers.d.ts +24 -0
  43. package/dist/file-queue/file-handlers.d.ts.map +1 -0
  44. package/dist/file-queue/file-handlers.js +209 -0
  45. package/dist/file-queue/file-handlers.js.map +1 -0
  46. package/dist/file-queue/file-queue-process.d.ts +5 -0
  47. package/dist/file-queue/file-queue-process.d.ts.map +1 -0
  48. package/dist/file-queue/file-queue-process.js +85 -0
  49. package/dist/file-queue/file-queue-process.js.map +1 -0
  50. package/dist/file-queue/file-queue-process.test.d.ts +2 -0
  51. package/dist/file-queue/file-queue-process.test.d.ts.map +1 -0
  52. package/dist/file-queue/file-queue-process.test.js +373 -0
  53. package/dist/file-queue/file-queue-process.test.js.map +1 -0
  54. package/dist/file-queue/file-queue-settled.d.ts +13 -0
  55. package/dist/file-queue/file-queue-settled.d.ts.map +1 -0
  56. package/dist/file-queue/file-queue-settled.js +25 -0
  57. package/dist/file-queue/file-queue-settled.js.map +1 -0
  58. package/dist/file-queue/file-queue-settled.test.d.ts +2 -0
  59. package/dist/file-queue/file-queue-settled.test.d.ts.map +1 -0
  60. package/dist/file-queue/file-queue-settled.test.js +47 -0
  61. package/dist/file-queue/file-queue-settled.test.js.map +1 -0
  62. package/dist/file-queue/index.d.ts +2 -0
  63. package/dist/file-queue/index.d.ts.map +1 -0
  64. package/dist/file-queue/index.js +2 -0
  65. package/dist/file-queue/index.js.map +1 -0
  66. package/dist/file-queue/with-skip-file-queue.d.ts +3 -0
  67. package/dist/file-queue/with-skip-file-queue.d.ts.map +1 -0
  68. package/dist/file-queue/with-skip-file-queue.js +26 -0
  69. package/dist/file-queue/with-skip-file-queue.js.map +1 -0
  70. package/dist/file-queue/with-skip-file-queue.test.d.ts +2 -0
  71. package/dist/file-queue/with-skip-file-queue.test.d.ts.map +1 -0
  72. package/dist/file-queue/with-skip-file-queue.test.js +138 -0
  73. package/dist/file-queue/with-skip-file-queue.test.js.map +1 -0
  74. package/dist/index.d.ts +2 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +2 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/key-value/database-schema.d.ts +11 -2
  79. package/dist/key-value/database-schema.d.ts.map +1 -1
  80. package/dist/key-value/database-schema.js +7 -4
  81. package/dist/key-value/database-schema.js.map +1 -1
  82. package/dist/key-value/database-schema.test.js +21 -5
  83. package/dist/key-value/database-schema.test.js.map +1 -1
  84. package/dist/lix/close-lix.d.ts +8 -0
  85. package/dist/lix/close-lix.d.ts.map +1 -0
  86. package/dist/lix/close-lix.js +7 -0
  87. package/dist/lix/close-lix.js.map +1 -0
  88. package/dist/lix/index.d.ts +1 -0
  89. package/dist/lix/index.d.ts.map +1 -1
  90. package/dist/lix/index.js +1 -0
  91. package/dist/lix/index.js.map +1 -1
  92. package/dist/lix/merge.js +3 -3
  93. package/dist/lix/merge.js.map +1 -1
  94. package/dist/lix/merge.test.js +7 -18
  95. package/dist/lix/merge.test.js.map +1 -1
  96. package/dist/lix/new-lix.d.ts.map +1 -1
  97. package/dist/lix/new-lix.js +2 -3
  98. package/dist/lix/new-lix.js.map +1 -1
  99. package/dist/lix/open-lix-in-memory.test.js +2 -1
  100. package/dist/lix/open-lix-in-memory.test.js.map +1 -1
  101. package/dist/lix/open-lix.d.ts +3 -5
  102. package/dist/lix/open-lix.d.ts.map +1 -1
  103. package/dist/lix/open-lix.js +4 -18
  104. package/dist/lix/open-lix.js.map +1 -1
  105. package/dist/lix/open-lix.test.js +16 -7
  106. package/dist/lix/open-lix.test.js.map +1 -1
  107. package/dist/lix/to-blob.d.ts +11 -0
  108. package/dist/lix/to-blob.d.ts.map +1 -0
  109. package/dist/lix/to-blob.js +11 -0
  110. package/dist/lix/to-blob.js.map +1 -0
  111. package/dist/own-change-control/apply-own-change.d.ts +10 -0
  112. package/dist/own-change-control/apply-own-change.d.ts.map +1 -0
  113. package/dist/own-change-control/apply-own-change.js +69 -0
  114. package/dist/own-change-control/apply-own-change.js.map +1 -0
  115. package/dist/own-change-control/apply-own-change.test.d.ts +2 -0
  116. package/dist/own-change-control/apply-own-change.test.d.ts.map +1 -0
  117. package/dist/own-change-control/apply-own-change.test.js +297 -0
  118. package/dist/own-change-control/apply-own-change.test.js.map +1 -0
  119. package/dist/own-change-control/change-controlled-tables.d.ts +60 -0
  120. package/dist/own-change-control/change-controlled-tables.d.ts.map +1 -0
  121. package/dist/own-change-control/change-controlled-tables.js +70 -0
  122. package/dist/own-change-control/change-controlled-tables.js.map +1 -0
  123. package/dist/own-change-control/change-controlled-tables.test.d.ts +2 -0
  124. package/dist/own-change-control/change-controlled-tables.test.d.ts.map +1 -0
  125. package/dist/own-change-control/change-controlled-tables.test.js +48 -0
  126. package/dist/own-change-control/change-controlled-tables.test.js.map +1 -0
  127. package/dist/own-change-control/database-triggers.d.ts +5 -0
  128. package/dist/own-change-control/database-triggers.d.ts.map +1 -0
  129. package/dist/own-change-control/database-triggers.js +135 -0
  130. package/dist/own-change-control/database-triggers.js.map +1 -0
  131. package/dist/own-change-control/database-triggers.test.d.ts +2 -0
  132. package/dist/own-change-control/database-triggers.test.d.ts.map +1 -0
  133. package/dist/own-change-control/database-triggers.test.js +214 -0
  134. package/dist/own-change-control/database-triggers.test.js.map +1 -0
  135. package/dist/own-change-control/index.d.ts +2 -0
  136. package/dist/own-change-control/index.d.ts.map +1 -0
  137. package/dist/own-change-control/index.js +2 -0
  138. package/dist/own-change-control/index.js.map +1 -0
  139. package/dist/own-change-control/with-skip-own-change-control.d.ts +3 -0
  140. package/dist/own-change-control/with-skip-own-change-control.d.ts.map +1 -0
  141. package/dist/own-change-control/with-skip-own-change-control.js +28 -0
  142. package/dist/own-change-control/with-skip-own-change-control.js.map +1 -0
  143. package/dist/own-change-control/with-skip-own-change-control.test.d.ts +2 -0
  144. package/dist/own-change-control/with-skip-own-change-control.test.d.ts.map +1 -0
  145. package/dist/own-change-control/with-skip-own-change-control.test.js +49 -0
  146. package/dist/own-change-control/with-skip-own-change-control.test.js.map +1 -0
  147. package/dist/own-entity-change-control/apply-own-entity-change.js +2 -2
  148. package/dist/own-entity-change-control/apply-own-entity-change.js.map +1 -1
  149. package/dist/own-entity-change-control/apply-own-entity-change.test.js +9 -9
  150. package/dist/own-entity-change-control/apply-own-entity-change.test.js.map +1 -1
  151. package/dist/own-entity-change-control/database-triggers.js +6 -6
  152. package/dist/own-entity-change-control/database-triggers.js.map +1 -1
  153. package/dist/own-entity-change-control/database-triggers.test.js +1 -1
  154. package/dist/own-entity-change-control/database-triggers.test.js.map +1 -1
  155. package/dist/query-filter/version-change-in-difference.test.js +37 -29
  156. package/dist/query-filter/version-change-in-difference.test.js.map +1 -1
  157. package/dist/query-filter/version-change-in-symmetric-difference.test.js +37 -39
  158. package/dist/query-filter/version-change-in-symmetric-difference.test.js.map +1 -1
  159. package/dist/server-api-handler/environment/create-in-memory-environment.d.ts.map +1 -1
  160. package/dist/server-api-handler/environment/create-in-memory-environment.js +7 -3
  161. package/dist/server-api-handler/environment/create-in-memory-environment.js.map +1 -1
  162. package/dist/server-api-handler/environment/create-in-memory-environment.test.js +8 -7
  163. package/dist/server-api-handler/environment/create-in-memory-environment.test.js.map +1 -1
  164. package/dist/server-api-handler/routes/get-v1.d.ts.map +1 -1
  165. package/dist/server-api-handler/routes/get-v1.js +1 -2
  166. package/dist/server-api-handler/routes/get-v1.js.map +1 -1
  167. package/dist/server-api-handler/routes/get-v1.test.js +6 -5
  168. package/dist/server-api-handler/routes/get-v1.test.js.map +1 -1
  169. package/dist/server-api-handler/routes/new-v1.d.ts.map +1 -1
  170. package/dist/server-api-handler/routes/new-v1.js +3 -1
  171. package/dist/server-api-handler/routes/new-v1.js.map +1 -1
  172. package/dist/server-api-handler/routes/new-v1.test.js +2 -1
  173. package/dist/server-api-handler/routes/new-v1.test.js.map +1 -1
  174. package/dist/server-api-handler/routes/pull-v1.test.js +4 -3
  175. package/dist/server-api-handler/routes/pull-v1.test.js.map +1 -1
  176. package/dist/server-api-handler/routes/push-v1.test.js +5 -4
  177. package/dist/server-api-handler/routes/push-v1.test.js.map +1 -1
  178. package/dist/sync/pull-from-server.d.ts.map +1 -1
  179. package/dist/sync/pull-from-server.js +0 -2
  180. package/dist/sync/pull-from-server.js.map +1 -1
  181. package/dist/sync/pull-from-server.test.js +29 -14
  182. package/dist/sync/pull-from-server.test.js.map +1 -1
  183. package/dist/sync/push-to-server.test.js +17 -13
  184. package/dist/sync/push-to-server.test.js.map +1 -1
  185. package/dist/sync/sync-process.d.ts +2 -4
  186. package/dist/sync/sync-process.d.ts.map +1 -1
  187. package/dist/sync/sync-process.js +4 -9
  188. package/dist/sync/sync-process.js.map +1 -1
  189. package/dist/sync/sync-process.test.js +26 -38
  190. package/dist/sync/sync-process.test.js.map +1 -1
  191. package/dist/version/create-version.d.ts +5 -5
  192. package/dist/version/create-version.d.ts.map +1 -1
  193. package/dist/version/create-version.js +23 -11
  194. package/dist/version/create-version.js.map +1 -1
  195. package/dist/version/create-version.test.js +2 -2
  196. package/dist/version/create-version.test.js.map +1 -1
  197. package/dist/version/merge-version.d.ts.map +1 -1
  198. package/dist/version/merge-version.js +16 -26
  199. package/dist/version/merge-version.js.map +1 -1
  200. package/dist/version/switch-version.js +3 -3
  201. package/dist/version/switch-version.js.map +1 -1
  202. package/dist/version/switch-version.test.js +12 -15
  203. package/dist/version/switch-version.test.js.map +1 -1
  204. package/dist/version/update-changes-in-version.d.ts.map +1 -1
  205. package/dist/version/update-changes-in-version.js +11 -31
  206. package/dist/version/update-changes-in-version.js.map +1 -1
  207. package/node_modules/@lix-js/server-api-schema/CHANGELOG.md +9 -0
  208. package/node_modules/@lix-js/server-api-schema/LICENSE +21 -0
  209. package/node_modules/@lix-js/server-api-schema/dist/schema.js +0 -0
  210. package/node_modules/@lix-js/server-api-schema/package.json +2 -2
  211. package/node_modules/sqlite-wasm-kysely/LICENSE +21 -0
  212. package/package.json +4 -4
  213. package/src/change/apply-changes.test.ts +7 -7
  214. package/src/change/apply-changes.ts +9 -9
  215. package/src/database/apply-schema.ts +20 -73
  216. package/src/database/execute-sync.test.ts +3 -3
  217. package/src/database/init-db.test.ts +163 -19
  218. package/src/database/init-db.ts +20 -3
  219. package/src/database/kysely-plugin/parse-jsonb-plugin-v1.ts +9 -2
  220. package/src/database/mutation-log/database-schema.ts +1 -3
  221. package/src/database/nano-id.test.ts +15 -0
  222. package/src/database/nano-id.ts +72 -0
  223. package/src/database/schema.ts +15 -24
  224. package/src/discussion/create-comment.ts +0 -3
  225. package/src/discussion/create-discussion.test.ts +8 -39
  226. package/src/discussion/create-discussion.ts +6 -9
  227. package/src/{change-queue → file-queue}/file-handlers.ts +27 -27
  228. package/src/{change-queue/init-change-queue.test.ts → file-queue/file-queue-process.test.ts} +24 -24
  229. package/src/{change-queue/init-change-queue.ts → file-queue/file-queue-process.ts} +18 -16
  230. package/src/{change-queue/change-queue-settled.test.ts → file-queue/file-queue-settled.test.ts} +12 -12
  231. package/src/{change-queue/change-queue-settled.ts → file-queue/file-queue-settled.ts} +4 -4
  232. package/src/file-queue/index.ts +1 -0
  233. package/src/{change-queue/with-skip-change-queue.test.ts → file-queue/with-skip-file-queue.test.ts} +9 -9
  234. package/src/{change-queue/with-skip-change-queue.ts → file-queue/with-skip-file-queue.ts} +3 -3
  235. package/src/index.ts +2 -2
  236. package/src/key-value/database-schema.test.ts +26 -5
  237. package/src/key-value/database-schema.ts +18 -6
  238. package/src/lix/close-lix.ts +8 -0
  239. package/src/lix/index.ts +1 -0
  240. package/src/lix/merge.test.ts +7 -19
  241. package/src/lix/merge.ts +4 -4
  242. package/src/lix/new-lix.ts +2 -3
  243. package/src/lix/open-lix-in-memory.test.ts +5 -1
  244. package/src/lix/open-lix.test.ts +19 -7
  245. package/src/lix/open-lix.ts +7 -24
  246. package/src/lix/to-blob.ts +14 -0
  247. package/src/{own-entity-change-control/apply-own-entity-change.test.ts → own-change-control/apply-own-change.test.ts} +27 -31
  248. package/src/{own-entity-change-control/apply-own-entity-change.ts → own-change-control/apply-own-change.ts} +3 -3
  249. package/src/{own-entity-change-control → own-change-control}/change-controlled-tables.ts +0 -1
  250. package/src/{own-entity-change-control → own-change-control}/database-triggers.test.ts +7 -7
  251. package/src/{own-entity-change-control → own-change-control}/database-triggers.ts +11 -11
  252. package/src/{own-entity-change-control → own-change-control}/with-skip-own-change-control.ts +6 -2
  253. package/src/query-filter/version-change-in-difference.test.ts +41 -32
  254. package/src/query-filter/version-change-in-symmetric-difference.test.ts +41 -42
  255. package/src/server-api-handler/environment/create-in-memory-environment.test.ts +8 -7
  256. package/src/server-api-handler/environment/create-in-memory-environment.ts +7 -3
  257. package/src/server-api-handler/routes/get-v1.test.ts +6 -5
  258. package/src/server-api-handler/routes/get-v1.ts +1 -3
  259. package/src/server-api-handler/routes/new-v1.test.ts +2 -1
  260. package/src/server-api-handler/routes/new-v1.ts +3 -1
  261. package/src/server-api-handler/routes/pull-v1.test.ts +4 -3
  262. package/src/server-api-handler/routes/push-v1.test.ts +5 -4
  263. package/src/sync/pull-from-server.test.ts +29 -14
  264. package/src/sync/pull-from-server.ts +0 -2
  265. package/src/sync/push-to-server.test.ts +19 -15
  266. package/src/sync/sync-process.test.ts +37 -43
  267. package/src/sync/sync-process.ts +6 -18
  268. package/src/version/create-version.test.ts +2 -2
  269. package/src/version/create-version.ts +24 -12
  270. package/src/version/merge-version.ts +18 -26
  271. package/src/version/switch-version.test.ts +12 -15
  272. package/src/version/switch-version.ts +3 -3
  273. package/src/version/update-changes-in-version.ts +11 -30
  274. package/node_modules/@lix-js/server-api-schema/dist/schema.d.ts +0 -384
  275. package/src/change-queue/index.ts +0 -1
  276. /package/src/{own-entity-change-control → own-change-control}/change-controlled-tables.test.ts +0 -0
  277. /package/src/{own-entity-change-control → own-change-control}/index.ts +0 -0
  278. /package/src/{own-entity-change-control → own-change-control}/with-skip-own-change-control.test.ts +0 -0
@@ -17,7 +17,7 @@ export type LixDatabaseSchema = {
17
17
 
18
18
  // file
19
19
  file: LixFileTable;
20
- change_queue: ChangeQueueTable;
20
+ file_queue: FileQueueTable;
21
21
 
22
22
  // change
23
23
  change: ChangeTable;
@@ -28,7 +28,6 @@ export type LixDatabaseSchema = {
28
28
  change_set: ChangeSetTable;
29
29
  change_set_element: ChangeSetElementTable;
30
30
  change_set_label: ChangeSetLabelTable;
31
- change_set_label_author: ChangeSetLabelAuthorTable;
32
31
 
33
32
  // key value
34
33
  key_value: KeyValueTable;
@@ -50,16 +49,16 @@ export type LixDatabaseSchema = {
50
49
  mutation_log: MutationLogTable;
51
50
  };
52
51
 
53
- export type ChangeQueueEntry = Selectable<ChangeQueueTable>;
54
- export type NewChangeQueueEntry = Insertable<ChangeQueueTable>;
55
- export type ChangeQueueEntryUpdate = Updateable<ChangeQueueTable>;
56
- type ChangeQueueTable = {
52
+ export type FileQueueEntry = Selectable<FileQueueTable>;
53
+ export type NewFileQueueEntry = Insertable<FileQueueTable>;
54
+ export type FileQueueEntryUpdate = Updateable<FileQueueTable>;
55
+ type FileQueueTable = {
57
56
  id: Generated<number>;
58
57
  file_id: string;
59
58
  path_before: string | null;
60
59
  path_after: string | null;
61
- data_before: ArrayBuffer | null;
62
- data_after: ArrayBuffer | null;
60
+ data_before: Uint8Array | null;
61
+ data_after: Uint8Array | null;
63
62
  metadata_before: Record<string, any> | null;
64
63
  metadata_after: Record<string, any> | null;
65
64
  };
@@ -80,7 +79,7 @@ type LixFileTable = {
80
79
  * - `/path/to/file.txt`
81
80
  */
82
81
  path: string;
83
- data: ArrayBuffer;
82
+ data: Uint8Array;
84
83
  metadata: Record<string, any> | null;
85
84
  };
86
85
 
@@ -175,8 +174,6 @@ type CommentTable = {
175
174
  id: Generated<string>;
176
175
  parent_id: string | null;
177
176
  discussion_id: string;
178
- created_at: Generated<string>;
179
- created_by: string;
180
177
  content: string;
181
178
  };
182
179
 
@@ -198,15 +195,6 @@ type ChangeSetLabelTable = {
198
195
  label_id: string;
199
196
  };
200
197
 
201
- export type ChangeSetLabelAuthor = Selectable<ChangeSetLabelAuthorTable>;
202
- export type NewChangeSetLabelAuthor = Insertable<ChangeSetLabelAuthorTable>;
203
- export type ChangeSetLabelAuthorUpdate = Updateable<ChangeSetLabelAuthorTable>;
204
- type ChangeSetLabelAuthorTable = {
205
- change_set_id: string;
206
- label_id: string;
207
- account_id: string;
208
- };
209
-
210
198
  // ------ versiones ------
211
199
 
212
200
  export type Version = Selectable<VersionTable>;
@@ -214,7 +202,7 @@ export type Newversion = Insertable<VersionTable>;
214
202
  export type VersionUpdate = Updateable<VersionTable>;
215
203
  type VersionTable = {
216
204
  id: Generated<string>;
217
- name: string | null;
205
+ name: Generated<string>;
218
206
  };
219
207
 
220
208
  export type VersionChange = Selectable<VersionChangeTable>;
@@ -223,6 +211,9 @@ export type VersionChangeUpdate = Updateable<VersionChangeTable>;
223
211
  type VersionChangeTable = {
224
212
  version_id: string;
225
213
  change_id: string;
214
+ entity_id: string;
215
+ file_id: string;
216
+ schema_key: string;
226
217
  };
227
218
 
228
219
  export type VersionChangeConflict = Selectable<VersionChangeConflictTable>;
@@ -234,9 +225,9 @@ type VersionChangeConflictTable = {
234
225
  change_conflict_id: string;
235
226
  };
236
227
 
237
- export type Currentversion = Selectable<CurrentVersionTable>;
238
- export type NewCurrentversion = Insertable<CurrentVersionTable>;
239
- export type CurrentversionUpdate = Updateable<CurrentVersionTable>;
228
+ export type CurrentVersion = Selectable<CurrentVersionTable>;
229
+ export type NewCurrentVersion = Insertable<CurrentVersionTable>;
230
+ export type CurrentVersionUpdate = Updateable<CurrentVersionTable>;
240
231
  type CurrentVersionTable = {
241
232
  id: string;
242
233
  };
@@ -1,4 +1,3 @@
1
- import type { Account } from "../account/database-schema.js";
2
1
  import type { Comment } from "../database/schema.js";
3
2
  import type { Lix } from "../lix/open-lix.js";
4
3
 
@@ -6,7 +5,6 @@ export async function createComment(args: {
6
5
  lix: Pick<Lix, "db">;
7
6
  parentComment: Pick<Comment, "id" | "discussion_id">;
8
7
  content: string;
9
- createdBy: Pick<Account, "id">;
10
8
  }): Promise<Comment> {
11
9
  return args.lix.db
12
10
  .insertInto("comment")
@@ -14,7 +12,6 @@ export async function createComment(args: {
14
12
  discussion_id: args.parentComment.discussion_id,
15
13
  parent_id: args.parentComment.id,
16
14
  content: args.content,
17
- created_by: args.createdBy.id,
18
15
  })
19
16
  .returningAll()
20
17
  .executeTakeFirstOrThrow();
@@ -1,50 +1,20 @@
1
1
  import { expect, test } from "vitest";
2
2
  import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
- import { newLixFile } from "../lix/new-lix.js";
4
- import type { DetectedChange, LixPlugin } from "../plugin/lix-plugin.js";
5
3
  import { createDiscussion } from "./create-discussion.js";
6
4
  import { createChangeSet } from "../change-set/create-change-set.js";
7
- import { changeQueueSettled } from "../change-queue/change-queue-settled.js";
8
-
9
- const mockPlugin: LixPlugin = {
10
- key: "mock-plugin",
11
- detectChangesGlob: "*",
12
- detectChanges: async ({ after }) => {
13
- return [
14
- {
15
- schema: {
16
- key: "text",
17
- type: "json",
18
- },
19
- entity_id: "test",
20
- snapshot: {
21
- text: after ? new TextDecoder().decode(after.data) : undefined,
22
- },
23
- } satisfies DetectedChange,
24
- ];
25
- },
26
- };
27
5
 
28
6
  test("should be able to start a discussion on changes", async () => {
29
- const lix = await openLixInMemory({
30
- blob: await newLixFile(),
31
- providePlugins: [mockPlugin],
32
- });
33
-
34
- const enc = new TextEncoder();
7
+ const lix = await openLixInMemory({});
35
8
 
9
+ // produce a change
36
10
  await lix.db
37
- .insertInto("file")
38
- .values({ id: "test", path: "/test.txt", data: enc.encode("test") })
11
+ .insertInto("key_value")
12
+ .values({
13
+ key: "mock_key",
14
+ value: "mock_value",
15
+ })
39
16
  .execute();
40
17
 
41
- await changeQueueSettled({ lix });
42
-
43
- const current_author = await lix.db
44
- .selectFrom("active_account")
45
- .selectAll()
46
- .executeTakeFirstOrThrow();
47
-
48
18
  const changes = await lix.db
49
19
  .selectFrom("change")
50
20
  .selectAll("change")
@@ -53,9 +23,8 @@ test("should be able to start a discussion on changes", async () => {
53
23
  await lix.db.transaction().execute(async (trx) => {
54
24
  await createDiscussion({
55
25
  lix: { db: trx },
26
+ firstComment: { content: "Hello, world!" },
56
27
  changeSet: await createChangeSet({ lix: { db: trx }, changes }),
57
- content: "comment on a change",
58
- createdBy: { id: current_author.id },
59
28
  });
60
29
  });
61
30
 
@@ -1,4 +1,3 @@
1
- import type { Account } from "../account/database-schema.js";
2
1
  import type { ChangeSet, Comment, Discussion } from "../database/schema.js";
3
2
  import type { Lix } from "../lix/open-lix.js";
4
3
 
@@ -8,7 +7,7 @@ import type { Lix } from "../lix/open-lix.js";
8
7
  * @example
9
8
  * ```ts
10
9
  * const changeSet = await createChangeSet({ lix, changes: ["change1", "change2"] });
11
- * const discussion = await createDiscussion({ lix, changeSet, body: "first comment" });
10
+ * const discussion = await createDiscussion({ lix, changeSet, firstComment: { content: "first comment" } });
12
11
  * ```
13
12
  *
14
13
  * @returns the created discussion
@@ -16,9 +15,8 @@ import type { Lix } from "../lix/open-lix.js";
16
15
  export async function createDiscussion(args: {
17
16
  lix: Pick<Lix, "db">;
18
17
  changeSet: Pick<ChangeSet, "id">;
19
- content: Comment["content"];
20
- createdBy: Pick<Account, "id">;
21
- }): Promise<Discussion & { comment: Comment }> {
18
+ firstComment: Pick<Comment, "content">;
19
+ }): Promise<Discussion & { firstComment: Comment }> {
22
20
  const executeInTransaction = async (trx: Lix["db"]) => {
23
21
  const discussion = await trx
24
22
  .insertInto("discussion")
@@ -28,18 +26,17 @@ export async function createDiscussion(args: {
28
26
  .returningAll()
29
27
  .executeTakeFirstOrThrow();
30
28
 
31
- const comment = await trx
29
+ const firstComment = await trx
32
30
  .insertInto("comment")
33
31
  .values({
34
32
  parent_id: null,
35
33
  discussion_id: discussion.id,
36
- content: args.content,
37
- created_by: args.createdBy.id,
34
+ content: args.firstComment.content,
38
35
  })
39
36
  .returningAll()
40
37
  .executeTakeFirstOrThrow();
41
38
 
42
- return { ...discussion, comment };
39
+ return { ...discussion, firstComment };
43
40
  };
44
41
 
45
42
  // user provided an open transaction
@@ -1,4 +1,4 @@
1
- import type { ChangeQueueEntry } from "../database/schema.js";
1
+ import type { FileQueueEntry } from "../database/schema.js";
2
2
  import type { DetectedChange } from "../plugin/lix-plugin.js";
3
3
  import type { Lix } from "../lix/open-lix.js";
4
4
  import { sql } from "kysely";
@@ -31,7 +31,7 @@ async function glob(args: {
31
31
  // creates initial changes for new files
32
32
  export async function handleFileInsert(args: {
33
33
  lix: Pick<Lix, "db" | "plugin" | "sqlite">;
34
- changeQueueEntry: ChangeQueueEntry;
34
+ fileQueueEntry: FileQueueEntry;
35
35
  }): Promise<void> {
36
36
  const detectedChanges: Array<DetectedChange & { pluginKey: string }> = [];
37
37
 
@@ -40,7 +40,7 @@ export async function handleFileInsert(args: {
40
40
  // the path of the file is either the after path or the before path
41
41
  // depending on whether the file was deleted, updated, or created
42
42
  const path =
43
- args.changeQueueEntry.path_after ?? args.changeQueueEntry.path_before;
43
+ args.fileQueueEntry.path_after ?? args.fileQueueEntry.path_before;
44
44
 
45
45
  if (path === null) {
46
46
  throw new Error("Both before and after paths are null");
@@ -67,7 +67,7 @@ export async function handleFileInsert(args: {
67
67
  throw error;
68
68
  }
69
69
 
70
- if (args.changeQueueEntry.data_after === null) {
70
+ if (args.fileQueueEntry.data_after === null) {
71
71
  throw new Error("Data after is null");
72
72
  }
73
73
 
@@ -75,10 +75,10 @@ export async function handleFileInsert(args: {
75
75
  lix: args.lix,
76
76
  before: undefined,
77
77
  after: {
78
- id: args.changeQueueEntry.file_id,
78
+ id: args.fileQueueEntry.file_id,
79
79
  path,
80
- metadata: args.changeQueueEntry.metadata_after,
81
- data: args.changeQueueEntry.data_after,
80
+ metadata: args.fileQueueEntry.metadata_after,
81
+ data: args.fileQueueEntry.data_after,
82
82
  },
83
83
  })) {
84
84
  detectedChanges.push({
@@ -107,7 +107,7 @@ export async function handleFileInsert(args: {
107
107
  authors: currentAuthors,
108
108
  version: currentVersion,
109
109
  entityId: detectedChange.entity_id,
110
- fileId: args.changeQueueEntry.file_id,
110
+ fileId: args.fileQueueEntry.file_id,
111
111
  pluginKey: detectedChange.pluginKey,
112
112
  schemaKey: detectedChange.schema.key,
113
113
  snapshotContent: detectedChange.snapshot,
@@ -116,15 +116,15 @@ export async function handleFileInsert(args: {
116
116
  );
117
117
 
118
118
  await trx
119
- .deleteFrom("change_queue")
120
- .where("id", "=", args.changeQueueEntry.id)
119
+ .deleteFrom("file_queue")
120
+ .where("id", "=", args.fileQueueEntry.id)
121
121
  .execute();
122
122
  });
123
123
  }
124
124
 
125
125
  export async function handleFileUpdate(args: {
126
126
  lix: Pick<Lix, "db" | "plugin" | "sqlite">;
127
- changeQueueEntry: ChangeQueueEntry;
127
+ fileQueueEntry: FileQueueEntry;
128
128
  }): Promise<void> {
129
129
  const detectedChanges: Array<DetectedChange & { pluginKey: string }> = [];
130
130
 
@@ -133,7 +133,7 @@ export async function handleFileUpdate(args: {
133
133
  // the path of the file is either the after path or the before path
134
134
  // depending on whether the file was deleted, updated, or created
135
135
  const path =
136
- args.changeQueueEntry.path_after ?? args.changeQueueEntry.path_before;
136
+ args.fileQueueEntry.path_after ?? args.fileQueueEntry.path_before;
137
137
 
138
138
  if (path === null) {
139
139
  throw new Error("Both before and after paths are null");
@@ -160,19 +160,19 @@ export async function handleFileUpdate(args: {
160
160
  }
161
161
  for (const change of await plugin.detectChanges({
162
162
  lix: args.lix,
163
- before: args.changeQueueEntry.data_before
163
+ before: args.fileQueueEntry.data_before
164
164
  ? {
165
- id: args.changeQueueEntry.file_id,
165
+ id: args.fileQueueEntry.file_id,
166
166
  path: path,
167
- metadata: args.changeQueueEntry.metadata_before,
168
- data: args.changeQueueEntry.data_before,
167
+ metadata: args.fileQueueEntry.metadata_before,
168
+ data: args.fileQueueEntry.data_before,
169
169
  }
170
170
  : undefined,
171
171
  after: {
172
- id: args.changeQueueEntry.file_id,
172
+ id: args.fileQueueEntry.file_id,
173
173
  path,
174
- metadata: args.changeQueueEntry.metadata_after,
175
- data: args.changeQueueEntry.data_after!,
174
+ metadata: args.fileQueueEntry.metadata_after,
175
+ data: args.fileQueueEntry.data_after!,
176
176
  },
177
177
  })) {
178
178
  detectedChanges.push({
@@ -201,7 +201,7 @@ export async function handleFileUpdate(args: {
201
201
  authors: currentAuthors,
202
202
  version: currentVersion,
203
203
  entityId: detectedChange.entity_id,
204
- fileId: args.changeQueueEntry.file_id,
204
+ fileId: args.fileQueueEntry.file_id,
205
205
  pluginKey: detectedChange.pluginKey,
206
206
  schemaKey: detectedChange.schema.key,
207
207
  snapshotContent: detectedChange.snapshot,
@@ -210,8 +210,8 @@ export async function handleFileUpdate(args: {
210
210
  );
211
211
 
212
212
  await trx
213
- .deleteFrom("change_queue")
214
- .where("id", "=", args.changeQueueEntry.id)
213
+ .deleteFrom("file_queue")
214
+ .where("id", "=", args.fileQueueEntry.id)
215
215
  .execute();
216
216
  });
217
217
  }
@@ -227,7 +227,7 @@ export async function handleFileUpdate(args: {
227
227
  */
228
228
  export async function handleFileDelete(args: {
229
229
  lix: Pick<Lix, "db" | "plugin" | "sqlite">;
230
- changeQueueEntry: ChangeQueueEntry;
230
+ fileQueueEntry: FileQueueEntry;
231
231
  }): Promise<void> {
232
232
  await args.lix.db.transaction().execute(async (trx) => {
233
233
  const currentVersion = await trx
@@ -238,7 +238,7 @@ export async function handleFileDelete(args: {
238
238
 
239
239
  const toBeDeletedEntities = await trx
240
240
  .selectFrom("change")
241
- .where("file_id", "=", args.changeQueueEntry.file_id)
241
+ .where("file_id", "=", args.fileQueueEntry.file_id)
242
242
  .where(changeIsLeafInVersion(currentVersion))
243
243
  .select("entity_id")
244
244
  .select("schema_key")
@@ -257,7 +257,7 @@ export async function handleFileDelete(args: {
257
257
  authors: currentAuthors,
258
258
  version: currentVersion,
259
259
  entityId: change.entity_id,
260
- fileId: args.changeQueueEntry.file_id,
260
+ fileId: args.fileQueueEntry.file_id,
261
261
  pluginKey: change.plugin_key,
262
262
  schemaKey: change.schema_key,
263
263
  snapshotContent: null, // Snapshot is null for deletions
@@ -266,8 +266,8 @@ export async function handleFileDelete(args: {
266
266
  );
267
267
 
268
268
  await trx
269
- .deleteFrom("change_queue")
270
- .where("id", "=", args.changeQueueEntry.id)
269
+ .deleteFrom("file_queue")
270
+ .where("id", "=", args.fileQueueEntry.id)
271
271
  .execute();
272
272
  });
273
273
  }
@@ -2,8 +2,8 @@ import { expect, test, vi } from "vitest";
2
2
  import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
3
  import { newLixFile } from "../lix/new-lix.js";
4
4
  import type { DetectedChange, LixPlugin } from "../plugin/lix-plugin.js";
5
- import type { ChangeQueueEntry, LixFile } from "../database/schema.js";
6
- import { changeQueueSettled } from "./change-queue-settled.js";
5
+ import type { FileQueueEntry, LixFile } from "../database/schema.js";
6
+ import { fileQueueSettled } from "./file-queue-settled.js";
7
7
 
8
8
  test("should use queue and settled correctly", async () => {
9
9
  const mockPlugin: LixPlugin = {
@@ -52,7 +52,7 @@ test("should use queue and settled correctly", async () => {
52
52
  .values({ id: "test", path: "/test.txt", data: dataInitial })
53
53
  .execute();
54
54
 
55
- const queue = await lix.db.selectFrom("change_queue").selectAll().execute();
55
+ const queue = await lix.db.selectFrom("file_queue").selectAll().execute();
56
56
 
57
57
  expect(queue).toEqual([
58
58
  expect.objectContaining({
@@ -61,13 +61,13 @@ test("should use queue and settled correctly", async () => {
61
61
  path_after: "/test.txt",
62
62
  data_after: dataInitial,
63
63
  data_before: null,
64
- } satisfies Partial<ChangeQueueEntry>),
64
+ } satisfies Partial<FileQueueEntry>),
65
65
  ]);
66
66
 
67
- await changeQueueSettled({ lix });
67
+ await fileQueueSettled({ lix });
68
68
 
69
69
  expect(
70
- (await lix.db.selectFrom("change_queue").selectAll().execute()).length
70
+ (await lix.db.selectFrom("file_queue").selectAll().execute()).length
71
71
  ).toBe(0);
72
72
 
73
73
  // TODO QUEUE check if the replacement of file_internal was expected
@@ -118,14 +118,14 @@ test("should use queue and settled correctly", async () => {
118
118
  .execute();
119
119
 
120
120
  // const beforeQueueTick = await lix.db
121
- // .selectFrom("change_queue")
121
+ // .selectFrom("file_queue")
122
122
  // .selectAll()
123
123
  // .execute();
124
124
 
125
125
  // expect(beforeQueueTick.length).toBe(1);
126
126
 
127
127
  // const afterQueueTick = await lix.db
128
- // .selectFrom("change_queue")
128
+ // .selectFrom("file_queue")
129
129
  // .selectAll()
130
130
  // .execute();
131
131
 
@@ -149,11 +149,11 @@ test("should use queue and settled correctly", async () => {
149
149
  .where("id", "=", "test")
150
150
  .execute();
151
151
 
152
- const queue2 = await lix.db.selectFrom("change_queue").selectAll().execute();
152
+ const queue2 = await lix.db.selectFrom("file_queue").selectAll().execute();
153
153
 
154
154
  expect(queue2).toEqual([
155
155
  // change update 1 is the same as change update 2
156
- // hence, only 2 change queue entries are expected
156
+ // hence, only 2 fil queue entries are expected
157
157
  expect.objectContaining({
158
158
  id: 3,
159
159
  file_id: "test",
@@ -161,7 +161,7 @@ test("should use queue and settled correctly", async () => {
161
161
  metadata_after: null,
162
162
  data_before: dataUpdate1,
163
163
  data_after: dataUpdate2,
164
- } satisfies Partial<ChangeQueueEntry>),
164
+ } satisfies Partial<FileQueueEntry>),
165
165
  expect.objectContaining({
166
166
  id: 4,
167
167
  file_id: "test",
@@ -169,13 +169,13 @@ test("should use queue and settled correctly", async () => {
169
169
  metadata_after: null,
170
170
  data_before: dataUpdate2,
171
171
  data_after: dataUpdate3,
172
- } satisfies Partial<ChangeQueueEntry>),
172
+ } satisfies Partial<FileQueueEntry>),
173
173
  ]);
174
174
 
175
- await changeQueueSettled({ lix });
175
+ await fileQueueSettled({ lix });
176
176
 
177
177
  expect(
178
- (await lix.db.selectFrom("change_queue").selectAll().execute()).length
178
+ (await lix.db.selectFrom("file_queue").selectAll().execute()).length
179
179
  ).toBe(0);
180
180
 
181
181
  const updatedChanges = await lix.db
@@ -303,7 +303,7 @@ test.todo("changes should contain the author", async () => {
303
303
  })
304
304
  .execute();
305
305
 
306
- await changeQueueSettled({ lix });
306
+ await fileQueueSettled({ lix });
307
307
 
308
308
  // const changes1 = await lix.db.selectFrom("change").selectAll().execute();
309
309
 
@@ -319,7 +319,7 @@ test.todo("changes should contain the author", async () => {
319
319
  .where("id", "=", "mock")
320
320
  .execute();
321
321
 
322
- await changeQueueSettled({ lix });
322
+ await fileQueueSettled({ lix });
323
323
 
324
324
  // const changes2 = await lix.db.selectFrom("change").selectAll().execute();
325
325
 
@@ -333,7 +333,7 @@ test.todo("changes should contain the author", async () => {
333
333
  .where("id", "=", "mock")
334
334
  .execute();
335
335
 
336
- await changeQueueSettled({ lix });
336
+ await fileQueueSettled({ lix });
337
337
 
338
338
  // const changes3 = await lix.db.selectFrom("change").selectAll().execute();
339
339
 
@@ -378,7 +378,7 @@ test("should handle file deletions correctly", async () => {
378
378
  .execute();
379
379
 
380
380
  // Queue deletion
381
- await changeQueueSettled({ lix });
381
+ await fileQueueSettled({ lix });
382
382
 
383
383
  const changesAfterInsert = await lix.db
384
384
  .selectFrom("change")
@@ -404,7 +404,7 @@ test("should handle file deletions correctly", async () => {
404
404
  await lix.db.deleteFrom("file").where("id", "=", "file0").execute();
405
405
 
406
406
  // Ensure the queue reflects the deletion entry
407
- const queue = await lix.db.selectFrom("change_queue").selectAll().execute();
407
+ const queue = await lix.db.selectFrom("file_queue").selectAll().execute();
408
408
 
409
409
  expect(queue).toEqual([
410
410
  expect.objectContaining({
@@ -413,15 +413,15 @@ test("should handle file deletions correctly", async () => {
413
413
  data_before: null,
414
414
  path_after: null,
415
415
  data_after: null,
416
- } satisfies Partial<ChangeQueueEntry>),
416
+ } satisfies Partial<FileQueueEntry>),
417
417
  ]);
418
418
 
419
- // Run the change queue settlement process
420
- await changeQueueSettled({ lix });
419
+ // Run the fil queue settlement process
420
+ await fileQueueSettled({ lix });
421
421
 
422
- // Verify the change queue is empty
422
+ // Verify the fil queue is empty
423
423
  expect(
424
- (await lix.db.selectFrom("change_queue").selectAll().execute()).length
424
+ (await lix.db.selectFrom("file_queue").selectAll().execute()).length
425
425
  ).toBe(0);
426
426
 
427
427
  // Verify the changes reflect the deletion
@@ -1,4 +1,3 @@
1
- import type { SqliteDatabase } from "sqlite-wasm-kysely";
2
1
  import {
3
2
  handleFileUpdate,
4
3
  handleFileInsert,
@@ -6,12 +5,11 @@ import {
6
5
  } from "./file-handlers.js";
7
6
  import type { Lix } from "../lix/open-lix.js";
8
7
 
9
- export async function initChangeQueue(args: {
8
+ export async function initFileQueueProcess(args: {
10
9
  lix: Pick<Lix, "db" | "plugin" | "sqlite">;
11
- rawDatabase: SqliteDatabase;
12
10
  }): Promise<void> {
13
- args.rawDatabase.createFunction({
14
- name: "triggerChangeQueue",
11
+ args.lix.sqlite.createFunction({
12
+ name: "triggerFileQueue",
15
13
  arity: 0,
16
14
  // @ts-expect-error - dynamic function
17
15
  xFunc: () => {
@@ -29,6 +27,11 @@ export async function initChangeQueue(args: {
29
27
  let hasMoreEntriesSince: number | undefined = undefined;
30
28
 
31
29
  async function queueWorker(trail = false) {
30
+ if (args.lix.sqlite.isOpen() === false) {
31
+ console.log("sqlite is closed");
32
+ return;
33
+ }
34
+
32
35
  try {
33
36
  if (pending && !trail) {
34
37
  hasMoreEntriesSince = runNumber;
@@ -43,7 +46,7 @@ export async function initChangeQueue(args: {
43
46
  }
44
47
 
45
48
  const entry = await args.lix.db
46
- .selectFrom("change_queue")
49
+ .selectFrom("file_queue")
47
50
  .selectAll()
48
51
  .orderBy("id asc")
49
52
  .limit(1)
@@ -52,17 +55,17 @@ export async function initChangeQueue(args: {
52
55
  if (entry) {
53
56
  if (entry.data_before && entry.data_after) {
54
57
  await handleFileUpdate({
55
- changeQueueEntry: entry,
58
+ fileQueueEntry: entry,
56
59
  lix: args.lix,
57
60
  });
58
61
  } else if (!entry.data_before && entry.data_after) {
59
62
  await handleFileInsert({
60
- changeQueueEntry: entry,
63
+ fileQueueEntry: entry,
61
64
  lix: args.lix,
62
65
  });
63
66
  } else {
64
67
  await handleFileDelete({
65
- changeQueueEntry: entry,
68
+ fileQueueEntry: entry,
66
69
  lix: args.lix,
67
70
  });
68
71
  }
@@ -71,7 +74,7 @@ export async function initChangeQueue(args: {
71
74
  // console.log("getrting { numEntries }");
72
75
 
73
76
  const { numEntries } = await args.lix.db
74
- .selectFrom("change_queue")
77
+ .selectFrom("file_queue")
75
78
  .select((eb) => eb.fn.count<number>("id").as("numEntries"))
76
79
  .executeTakeFirstOrThrow();
77
80
 
@@ -81,17 +84,16 @@ export async function initChangeQueue(args: {
81
84
  !hasMoreEntriesSince ||
82
85
  (numEntries === 0 && hasMoreEntriesSince < runNumber)
83
86
  ) {
84
- resolve!(); // TODO: fix type
87
+ resolve!();
85
88
  hasMoreEntriesSince = undefined;
86
89
  pending = undefined;
87
90
  // console.log("resolving");
91
+ } else {
92
+ // there are more entries to process
93
+ queueWorker(true);
88
94
  }
89
-
90
- // TODO: handle endless tries on failing quee entries
91
- // we either execute the queue immediately if we know there is more work or fall back to polling
92
- setTimeout(() => queueWorker(true), hasMoreEntriesSince ? 0 : 1000);
93
95
  } catch (e) {
94
- console.error("change queue failed ", e);
96
+ console.error("file queue failed ", e);
95
97
  }
96
98
  }
97
99
  // start a worker in case there are entries