@lix-js/sdk 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/services/env-variables/index.d.ts +1 -1
  2. package/dist/services/env-variables/index.js +2 -2
  3. package/dist/services/env-variables/index.js.map +1 -1
  4. package/package.json +4 -4
  5. package/dist/change-queue/change-queue-settled.d.ts +0 -13
  6. package/dist/change-queue/change-queue-settled.d.ts.map +0 -1
  7. package/dist/change-queue/change-queue-settled.js +0 -25
  8. package/dist/change-queue/change-queue-settled.js.map +0 -1
  9. package/dist/change-queue/change-queue-settled.test.d.ts +0 -2
  10. package/dist/change-queue/change-queue-settled.test.d.ts.map +0 -1
  11. package/dist/change-queue/change-queue-settled.test.js +0 -47
  12. package/dist/change-queue/change-queue-settled.test.js.map +0 -1
  13. package/dist/change-queue/file-handlers.d.ts +0 -24
  14. package/dist/change-queue/file-handlers.d.ts.map +0 -1
  15. package/dist/change-queue/file-handlers.js +0 -209
  16. package/dist/change-queue/file-handlers.js.map +0 -1
  17. package/dist/change-queue/index.d.ts +0 -2
  18. package/dist/change-queue/index.d.ts.map +0 -1
  19. package/dist/change-queue/index.js +0 -2
  20. package/dist/change-queue/index.js.map +0 -1
  21. package/dist/change-queue/init-change-queue.d.ts +0 -7
  22. package/dist/change-queue/init-change-queue.d.ts.map +0 -1
  23. package/dist/change-queue/init-change-queue.js +0 -80
  24. package/dist/change-queue/init-change-queue.js.map +0 -1
  25. package/dist/change-queue/init-change-queue.test.d.ts +0 -2
  26. package/dist/change-queue/init-change-queue.test.d.ts.map +0 -1
  27. package/dist/change-queue/init-change-queue.test.js +0 -373
  28. package/dist/change-queue/init-change-queue.test.js.map +0 -1
  29. package/dist/change-queue/with-skip-change-queue.d.ts +0 -3
  30. package/dist/change-queue/with-skip-change-queue.d.ts.map +0 -1
  31. package/dist/change-queue/with-skip-change-queue.js +0 -26
  32. package/dist/change-queue/with-skip-change-queue.js.map +0 -1
  33. package/dist/change-queue/with-skip-change-queue.test.d.ts +0 -2
  34. package/dist/change-queue/with-skip-change-queue.test.d.ts.map +0 -1
  35. package/dist/change-queue/with-skip-change-queue.test.js +0 -138
  36. package/dist/change-queue/with-skip-change-queue.test.js.map +0 -1
  37. package/dist/own-entity-change-control/apply-own-entity-change.d.ts +0 -10
  38. package/dist/own-entity-change-control/apply-own-entity-change.d.ts.map +0 -1
  39. package/dist/own-entity-change-control/apply-own-entity-change.js +0 -69
  40. package/dist/own-entity-change-control/apply-own-entity-change.js.map +0 -1
  41. package/dist/own-entity-change-control/apply-own-entity-change.test.d.ts +0 -2
  42. package/dist/own-entity-change-control/apply-own-entity-change.test.d.ts.map +0 -1
  43. package/dist/own-entity-change-control/apply-own-entity-change.test.js +0 -297
  44. package/dist/own-entity-change-control/apply-own-entity-change.test.js.map +0 -1
  45. package/dist/own-entity-change-control/change-controlled-tables.d.ts +0 -61
  46. package/dist/own-entity-change-control/change-controlled-tables.d.ts.map +0 -1
  47. package/dist/own-entity-change-control/change-controlled-tables.js +0 -71
  48. package/dist/own-entity-change-control/change-controlled-tables.js.map +0 -1
  49. package/dist/own-entity-change-control/change-controlled-tables.test.d.ts +0 -2
  50. package/dist/own-entity-change-control/change-controlled-tables.test.d.ts.map +0 -1
  51. package/dist/own-entity-change-control/change-controlled-tables.test.js +0 -48
  52. package/dist/own-entity-change-control/change-controlled-tables.test.js.map +0 -1
  53. package/dist/own-entity-change-control/database-triggers.d.ts +0 -5
  54. package/dist/own-entity-change-control/database-triggers.d.ts.map +0 -1
  55. package/dist/own-entity-change-control/database-triggers.js +0 -135
  56. package/dist/own-entity-change-control/database-triggers.js.map +0 -1
  57. package/dist/own-entity-change-control/database-triggers.test.d.ts +0 -2
  58. package/dist/own-entity-change-control/database-triggers.test.d.ts.map +0 -1
  59. package/dist/own-entity-change-control/database-triggers.test.js +0 -214
  60. package/dist/own-entity-change-control/database-triggers.test.js.map +0 -1
  61. package/dist/own-entity-change-control/index.d.ts +0 -2
  62. package/dist/own-entity-change-control/index.d.ts.map +0 -1
  63. package/dist/own-entity-change-control/index.js +0 -2
  64. package/dist/own-entity-change-control/index.js.map +0 -1
  65. package/dist/own-entity-change-control/with-skip-own-change-control.d.ts +0 -3
  66. package/dist/own-entity-change-control/with-skip-own-change-control.d.ts.map +0 -1
  67. package/dist/own-entity-change-control/with-skip-own-change-control.js +0 -24
  68. package/dist/own-entity-change-control/with-skip-own-change-control.js.map +0 -1
  69. package/dist/own-entity-change-control/with-skip-own-change-control.test.d.ts +0 -2
  70. package/dist/own-entity-change-control/with-skip-own-change-control.test.d.ts.map +0 -1
  71. package/dist/own-entity-change-control/with-skip-own-change-control.test.js +0 -49
  72. package/dist/own-entity-change-control/with-skip-own-change-control.test.js.map +0 -1
@@ -1,373 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
- import { newLixFile } from "../lix/new-lix.js";
4
- import { changeQueueSettled } from "./change-queue-settled.js";
5
- test("should use queue and settled correctly", async () => {
6
- const mockPlugin = {
7
- key: "mock-plugin",
8
- detectChangesGlob: "*",
9
- detectChanges: async ({ before, after }) => {
10
- const textBefore = before
11
- ? new TextDecoder().decode(before?.data)
12
- : undefined;
13
- const textAfter = after
14
- ? new TextDecoder().decode(after.data)
15
- : undefined;
16
- if (textBefore === textAfter) {
17
- return [];
18
- }
19
- return [
20
- {
21
- schema: {
22
- key: "text",
23
- type: "json",
24
- },
25
- entity_id: "test",
26
- snapshot: textAfter ? { text: textAfter } : undefined,
27
- },
28
- ];
29
- },
30
- };
31
- const lix = await openLixInMemory({
32
- blob: await newLixFile(),
33
- providePlugins: [mockPlugin],
34
- });
35
- const currentVersion = await lix.db
36
- .selectFrom("current_version")
37
- .innerJoin("version", "current_version.id", "version.id")
38
- .selectAll()
39
- .executeTakeFirstOrThrow();
40
- const enc = new TextEncoder();
41
- const dataInitial = enc.encode("insert text");
42
- await lix.db
43
- .insertInto("file")
44
- .values({ id: "test", path: "/test.txt", data: dataInitial })
45
- .execute();
46
- const queue = await lix.db.selectFrom("change_queue").selectAll().execute();
47
- expect(queue).toEqual([
48
- expect.objectContaining({
49
- id: 1,
50
- file_id: "test",
51
- path_after: "/test.txt",
52
- data_after: dataInitial,
53
- data_before: null,
54
- }),
55
- ]);
56
- await changeQueueSettled({ lix });
57
- expect((await lix.db.selectFrom("change_queue").selectAll().execute()).length).toBe(0);
58
- // TODO QUEUE check if the replacement of file_internal was expected
59
- const internalFilesAfter = await lix.db
60
- .selectFrom("file")
61
- .selectAll()
62
- .execute();
63
- expect(internalFilesAfter).toEqual([
64
- expect.objectContaining({
65
- data: internalFilesAfter[0].data,
66
- id: "test",
67
- path: "/test.txt",
68
- metadata: null,
69
- }),
70
- ]);
71
- const changes = await lix.db
72
- .selectFrom("change")
73
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
74
- .innerJoin("change_author", "change_author.change_id", "change.id")
75
- .selectAll("change")
76
- .select("change_author.account_id")
77
- .select("snapshot.content")
78
- .execute();
79
- expect(changes).toEqual(expect.arrayContaining([
80
- expect.objectContaining({
81
- entity_id: "test",
82
- schema_key: "text",
83
- file_id: "test",
84
- plugin_key: "mock-plugin",
85
- content: {
86
- text: "insert text",
87
- },
88
- // handles the author (which defaults to anonymous)
89
- account_id: expect.stringMatching(/^anonymous_/),
90
- }),
91
- ]));
92
- const dataUpdate1 = enc.encode("updated text");
93
- await lix.db
94
- .updateTable("file")
95
- .set({ data: dataUpdate1 })
96
- .where("id", "=", "test")
97
- .execute();
98
- // const beforeQueueTick = await lix.db
99
- // .selectFrom("change_queue")
100
- // .selectAll()
101
- // .execute();
102
- // expect(beforeQueueTick.length).toBe(1);
103
- // const afterQueueTick = await lix.db
104
- // .selectFrom("change_queue")
105
- // .selectAll()
106
- // .execute();
107
- // expect(afterQueueTick.length).toBe(0);
108
- // update2 is equal to update1
109
- const dataUpdate2 = dataUpdate1;
110
- // insert same file again
111
- await lix.db
112
- .updateTable("file")
113
- .set({ data: dataUpdate2 })
114
- .where("id", "=", "test")
115
- .execute();
116
- const dataUpdate3 = enc.encode("second text update");
117
- await lix.db
118
- .updateTable("file")
119
- .set({ data: dataUpdate3 })
120
- .where("id", "=", "test")
121
- .execute();
122
- const queue2 = await lix.db.selectFrom("change_queue").selectAll().execute();
123
- expect(queue2).toEqual([
124
- // change update 1 is the same as change update 2
125
- // hence, only 2 change queue entries are expected
126
- expect.objectContaining({
127
- id: 3,
128
- file_id: "test",
129
- path_after: "/test.txt",
130
- metadata_after: null,
131
- data_before: dataUpdate1,
132
- data_after: dataUpdate2,
133
- }),
134
- expect.objectContaining({
135
- id: 4,
136
- file_id: "test",
137
- path_after: "/test.txt",
138
- metadata_after: null,
139
- data_before: dataUpdate2,
140
- data_after: dataUpdate3,
141
- }),
142
- ]);
143
- await changeQueueSettled({ lix });
144
- expect((await lix.db.selectFrom("change_queue").selectAll().execute()).length).toBe(0);
145
- const updatedChanges = await lix.db
146
- .selectFrom("change")
147
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
148
- .innerJoin("change_author", "change_author.change_id", "change.id")
149
- .selectAll("change")
150
- .where("schema_key", "=", "text")
151
- .select("change_author.account_id")
152
- .select("snapshot.content")
153
- .execute();
154
- const updatedEdges = await lix.db
155
- .selectFrom("change_edge")
156
- .selectAll()
157
- .execute();
158
- const versionChanges = await lix.db
159
- .selectFrom("version_change")
160
- .where("version_id", "=", currentVersion.id)
161
- .selectAll()
162
- .execute();
163
- expect(updatedChanges).toEqual(expect.arrayContaining([
164
- expect.objectContaining({
165
- entity_id: "test",
166
- schema_key: "text",
167
- file_id: "test",
168
- plugin_key: "mock-plugin",
169
- content: {
170
- text: "insert text",
171
- },
172
- account_id: expect.stringMatching(/^anonymous_/),
173
- }),
174
- expect.objectContaining({
175
- entity_id: "test",
176
- file_id: "test",
177
- plugin_key: "mock-plugin",
178
- schema_key: "text",
179
- content: {
180
- text: "updated text",
181
- },
182
- account_id: expect.stringMatching(/^anonymous_/),
183
- }),
184
- expect.objectContaining({
185
- file_id: "test",
186
- entity_id: "test",
187
- plugin_key: "mock-plugin",
188
- schema_key: "text",
189
- content: {
190
- text: "second text update",
191
- },
192
- account_id: expect.stringMatching(/^anonymous_/),
193
- }),
194
- ]));
195
- expect(updatedEdges).toEqual(expect.arrayContaining([
196
- // 0 is the parent of 1
197
- // 1 is the parent of 2
198
- expect.objectContaining({
199
- parent_id: updatedChanges[0]?.id,
200
- child_id: updatedChanges[1]?.id,
201
- }),
202
- expect.objectContaining({
203
- parent_id: updatedChanges[1]?.id,
204
- child_id: updatedChanges[2]?.id,
205
- }),
206
- ]));
207
- // the version change pointers points to the last change
208
- expect(versionChanges).toEqual(expect.arrayContaining([
209
- expect.objectContaining({
210
- version_id: currentVersion.id,
211
- change_id: updatedChanges[2]?.id,
212
- }),
213
- ]));
214
- });
215
- test.todo("changes should contain the author", async () => {
216
- const mockPlugin = {
217
- key: "mock-plugin",
218
- detectChangesGlob: "*",
219
- detectChanges: vi.fn().mockResolvedValue([
220
- {
221
- schema: {
222
- key: "mock",
223
- type: "json",
224
- },
225
- entity_id: "mock",
226
- snapshot: {
227
- text: "value1",
228
- },
229
- },
230
- {
231
- schema: {
232
- key: "mock",
233
- type: "json",
234
- },
235
- entity_id: "mock",
236
- snapshot: {
237
- text: "value2",
238
- },
239
- },
240
- ]),
241
- };
242
- const lix = await openLixInMemory({
243
- blob: await newLixFile(),
244
- providePlugins: [mockPlugin],
245
- });
246
- // testing an insert
247
- await lix.db
248
- .insertInto("file")
249
- .values({
250
- id: "mock",
251
- data: new Uint8Array(),
252
- path: "/mock-file.json",
253
- })
254
- .execute();
255
- await changeQueueSettled({ lix });
256
- // const changes1 = await lix.db.selectFrom("change").selectAll().execute();
257
- // expect(changes1[0]?.author).toBe("some-id");
258
- // testing an update
259
- await lix.db
260
- .updateTable("file")
261
- .set({
262
- data: new Uint8Array(),
263
- })
264
- .where("id", "=", "mock")
265
- .execute();
266
- await changeQueueSettled({ lix });
267
- // const changes2 = await lix.db.selectFrom("change").selectAll().execute();
268
- // expect(changes2[1]?.author).toBe("some-id");
269
- await lix.db
270
- .updateTable("file")
271
- .set({
272
- data: new Uint8Array(),
273
- })
274
- .where("id", "=", "mock")
275
- .execute();
276
- await changeQueueSettled({ lix });
277
- // const changes3 = await lix.db.selectFrom("change").selectAll().execute();
278
- // expect(changes3.at(-1)?.author).toBe("some-other-id");
279
- });
280
- // lix own change control handles file deletions
281
- test("should handle file deletions correctly", async () => {
282
- const mockPlugin = {
283
- key: "mock-plugin",
284
- detectChangesGlob: "*",
285
- detectChanges: async ({ before, after }) => {
286
- const txt = new TextDecoder().decode(before ? before.data : after.data);
287
- return [
288
- {
289
- schema: {
290
- key: "text",
291
- type: "json",
292
- },
293
- entity_id: "test",
294
- snapshot: {
295
- text: txt,
296
- },
297
- },
298
- ];
299
- },
300
- };
301
- const lix = await openLixInMemory({
302
- blob: await newLixFile(),
303
- providePlugins: [mockPlugin],
304
- });
305
- const enc = new TextEncoder();
306
- const dataInitial = enc.encode("file to be deleted");
307
- // Insert initial file
308
- await lix.db
309
- .insertInto("file")
310
- .values({ id: "file0", path: "/delete.txt", data: dataInitial })
311
- .execute();
312
- // Queue deletion
313
- await changeQueueSettled({ lix });
314
- const changesAfterInsert = await lix.db
315
- .selectFrom("change")
316
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
317
- .where("file_id", "=", "file0")
318
- .selectAll()
319
- .execute();
320
- expect(changesAfterInsert).toEqual(expect.arrayContaining([
321
- expect.objectContaining({
322
- entity_id: "test",
323
- file_id: "file0",
324
- plugin_key: "mock-plugin",
325
- schema_key: "text",
326
- content: {
327
- text: "file to be deleted",
328
- },
329
- }),
330
- ]));
331
- await lix.db.deleteFrom("file").where("id", "=", "file0").execute();
332
- // Ensure the queue reflects the deletion entry
333
- const queue = await lix.db.selectFrom("change_queue").selectAll().execute();
334
- expect(queue).toEqual([
335
- expect.objectContaining({
336
- file_id: "file0",
337
- path_before: null,
338
- data_before: null,
339
- path_after: null,
340
- data_after: null,
341
- }),
342
- ]);
343
- // Run the change queue settlement process
344
- await changeQueueSettled({ lix });
345
- // Verify the change queue is empty
346
- expect((await lix.db.selectFrom("change_queue").selectAll().execute()).length).toBe(0);
347
- // Verify the changes reflect the deletion
348
- const changes = await lix.db
349
- .selectFrom("change")
350
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
351
- .innerJoin("change_author", "change_author.change_id", "change.id")
352
- .where("file_id", "=", "file0")
353
- .selectAll("change")
354
- .select("change_author.account_id")
355
- .select("snapshot.content")
356
- .execute();
357
- expect(changes).toEqual(expect.arrayContaining([
358
- expect.objectContaining({
359
- entity_id: "test",
360
- file_id: "file0",
361
- plugin_key: "mock-plugin",
362
- schema_key: "text",
363
- content: null, // Content is null for deletions
364
- }),
365
- ]));
366
- // Verify the file no longer exists in the database
367
- const internalFilesAfter = await lix.db
368
- .selectFrom("file")
369
- .selectAll()
370
- .execute();
371
- expect(internalFilesAfter).toEqual([]);
372
- });
373
- //# sourceMappingURL=init-change-queue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-change-queue.test.js","sourceRoot":"","sources":["../../src/change-queue/init-change-queue.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Lix } from "../lix/open-lix.js";
2
- export declare function withSkipChangeQueue<T>(db: Lix["db"], operation: (trx: Lix["db"]) => Promise<T>): Promise<T>;
3
- //# sourceMappingURL=with-skip-change-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-change-queue.d.ts","sourceRoot":"","sources":["../../src/change-queue/with-skip-change-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,wBAAsB,mBAAmB,CAAC,CAAC,EAC1C,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EACb,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,CA2BZ"}
@@ -1,26 +0,0 @@
1
- export async function withSkipChangeQueue(db, operation) {
2
- const executeInTransaction = async (trx) => {
3
- const queryEntryBefore = await trx
4
- .selectFrom("change_queue")
5
- .selectAll()
6
- .orderBy("id desc")
7
- .executeTakeFirst();
8
- // Perform the user's operation
9
- const result = await operation(trx);
10
- // delete queue entries that came after
11
- // the queue entry before the transaction
12
- await trx
13
- .deleteFrom("change_queue")
14
- .where("id", ">", queryEntryBefore?.id ?? 0)
15
- .execute();
16
- // Return the result of the operation
17
- return result;
18
- };
19
- if (db.isTransaction) {
20
- return executeInTransaction(db);
21
- }
22
- else {
23
- return db.transaction().execute(executeInTransaction);
24
- }
25
- }
26
- //# sourceMappingURL=with-skip-change-queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-change-queue.js","sourceRoot":"","sources":["../../src/change-queue/with-skip-change-queue.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,EAAa,EACb,SAAyC;IAEzC,MAAM,oBAAoB,GAAG,KAAK,EAAE,GAAc,EAAE,EAAE;QACrD,MAAM,gBAAgB,GAAG,MAAM,GAAG;aAChC,UAAU,CAAC,cAAc,CAAC;aAC1B,SAAS,EAAE;aACX,OAAO,CAAC,SAAS,CAAC;aAClB,gBAAgB,EAAE,CAAC;QAErB,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpC,uCAAuC;QACvC,yCAAyC;QAEzC,MAAM,GAAG;aACP,UAAU,CAAC,cAAc,CAAC;aAC1B,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC;aAC3C,OAAO,EAAE,CAAC;QAEZ,qCAAqC;QACrC,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;QACtB,OAAO,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;AACF,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=with-skip-change-queue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-change-queue.test.d.ts","sourceRoot":"","sources":["../../src/change-queue/with-skip-change-queue.test.ts"],"names":[],"mappings":""}
@@ -1,138 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
- import { changeQueueSettled } from "./change-queue-settled.js";
4
- import { withSkipChangeQueue } from "./with-skip-change-queue.js";
5
- test("skipping the change queue should be possible", async () => {
6
- const mockPlugin = {
7
- key: "mock-plugin",
8
- detectChangesGlob: "*",
9
- detectChanges: async ({ after }) => {
10
- const textAfter = after
11
- ? new TextDecoder().decode(after.data)
12
- : undefined;
13
- return [
14
- {
15
- schema: {
16
- key: "text",
17
- type: "json",
18
- },
19
- entity_id: "test",
20
- snapshot: { text: textAfter },
21
- },
22
- ];
23
- },
24
- };
25
- const lix = await openLixInMemory({
26
- providePlugins: [mockPlugin],
27
- });
28
- await lix.db
29
- .insertInto("file")
30
- .values({
31
- id: "test",
32
- data: new TextEncoder().encode("update0"),
33
- path: "/test.txt",
34
- })
35
- .execute();
36
- await changeQueueSettled({ lix });
37
- const changes0 = await lix.db
38
- .selectFrom("change")
39
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
40
- .where("schema_key", "=", "text")
41
- .selectAll()
42
- .execute();
43
- expect(changes0).toHaveLength(1);
44
- expect(changes0[0]?.content).toEqual({ text: "update0" });
45
- await withSkipChangeQueue(lix.db, async (trx) => {
46
- await trx
47
- .updateTable("file")
48
- .set({
49
- data: new TextEncoder().encode("update1"),
50
- })
51
- .where("id", "=", "test")
52
- .execute();
53
- });
54
- await changeQueueSettled({ lix });
55
- const changes1 = await lix.db
56
- .selectFrom("change")
57
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
58
- .selectAll()
59
- .where("schema_key", "=", "text")
60
- .execute();
61
- // change is skipped, so no new change is created
62
- expect(changes1).toHaveLength(1);
63
- expect(changes1[0]?.content).toEqual({ text: "update0" });
64
- });
65
- test("skipping the change queue should be possible with multiple changes", async () => {
66
- const mockPlugin = {
67
- key: "mock-plugin",
68
- detectChangesGlob: "*",
69
- detectChanges: async ({ after }) => {
70
- const textAfter = after
71
- ? new TextDecoder().decode(after.data)
72
- : undefined;
73
- return [
74
- {
75
- schema: {
76
- key: "text",
77
- type: "json",
78
- },
79
- entity_id: "test",
80
- snapshot: { text: textAfter },
81
- },
82
- ];
83
- },
84
- };
85
- const lix = await openLixInMemory({
86
- providePlugins: [mockPlugin],
87
- });
88
- await lix.db
89
- .insertInto("file")
90
- .values({
91
- id: "test",
92
- data: new TextEncoder().encode("initial"),
93
- path: "/test.txt",
94
- })
95
- .execute();
96
- const manyUpdates = Array.from({ length: 100 }, (_, i) => `update${i}`);
97
- const first50Updates = manyUpdates.slice(0, 50);
98
- const last50Updates = manyUpdates.slice(50);
99
- await lix.db.transaction().execute(async (trx) => {
100
- for (const update of first50Updates) {
101
- await trx
102
- .updateTable("file")
103
- .set({
104
- data: new TextEncoder().encode(update),
105
- })
106
- .where("id", "=", "test")
107
- .execute();
108
- }
109
- for (const update of last50Updates) {
110
- await withSkipChangeQueue(trx, async (trx) => {
111
- await trx
112
- .updateTable("file")
113
- .set({
114
- data: new TextEncoder().encode(update),
115
- })
116
- .where("id", "=", "test")
117
- .execute();
118
- });
119
- }
120
- });
121
- await changeQueueSettled({ lix });
122
- const file = await lix.db
123
- .selectFrom("file")
124
- .selectAll()
125
- .where("id", "=", "test")
126
- .executeTakeFirstOrThrow();
127
- const changes = await lix.db
128
- .selectFrom("change")
129
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
130
- .where("file_id", "=", file.id)
131
- .selectAll()
132
- .execute();
133
- // expecting the latest change
134
- expect(file.data).toEqual(new TextEncoder().encode("update99"));
135
- // and only 50 changes + 1 insert change have been created
136
- expect(changes).toHaveLength(51);
137
- });
138
- //# sourceMappingURL=with-skip-change-queue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-change-queue.test.js","sourceRoot":"","sources":["../../src/change-queue/with-skip-change-queue.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { Change } from "../database/schema.js";
2
- import type { Lix } from "../lix/open-lix.js";
3
- /**
4
- * Applies own changes to lix itself.
5
- */
6
- export declare function applyOwnEntityChanges(args: {
7
- lix: Pick<Lix, "db">;
8
- changes: Change[];
9
- }): Promise<void>;
10
- //# sourceMappingURL=apply-own-entity-change.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-own-entity-change.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/apply-own-entity-change.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAO9C;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IACjD,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFhB"}