@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,135 +0,0 @@
1
- import { changeControlledTableIds, entityIdForRow, } from "./change-controlled-tables.js";
2
- import { createChange } from "../change/create-change.js";
3
- import { executeSync } from "../database/execute-sync.js";
4
- export function applyOwnEntityChangeControlTriggers(sqlite, db) {
5
- const tableInfos = {};
6
- for (const table of Object.keys(changeControlledTableIds)) {
7
- tableInfos[table] = sqlite.exec({
8
- sql: `PRAGMA table_info(${table});`,
9
- returnValue: "resultRows",
10
- rowMode: "object",
11
- });
12
- }
13
- sqlite.createFunction({
14
- name: "handle_lix_own_change_control",
15
- arity: -1,
16
- // @ts-expect-error - dynamic function
17
- xFunc: (_ctx, tableName, operation, ...value) => {
18
- return handleLixOwnEntityChange(db, sqlite, tableName, tableInfos, operation, ...value);
19
- },
20
- });
21
- for (const table of Object.keys(changeControlledTableIds)) {
22
- const tableInfo = tableInfos[table];
23
- const sql = `
24
- CREATE TEMP TRIGGER IF NOT EXISTS ${table}_change_control_insert
25
- AFTER INSERT ON ${table}
26
- BEGIN
27
- SELECT handle_lix_own_change_control('${table}', 'insert', ${tableInfo.map((c) => "NEW." + c.name).join(", ")});
28
- END;
29
-
30
- CREATE TEMP TRIGGER IF NOT EXISTS ${table}_change_control_update
31
- AFTER UPDATE ON ${table}
32
- ${
33
- // ignore update trigger if the change controlled properties
34
- // did not change (a plugin likely called apply changes on the file.data)
35
- table === "file"
36
- ? `
37
- WHEN (
38
- OLD.id IS NOT NEW.id OR
39
- OLD.path IS NOT NEW.path OR
40
- OLD.metadata IS NOT NEW.metadata
41
- )`
42
- : ""}
43
- BEGIN
44
- SELECT handle_lix_own_change_control('${table}', 'update', ${tableInfo.map((c) => "NEW." + c.name).join(", ")});
45
- END;
46
-
47
- CREATE TEMP TRIGGER IF NOT EXISTS ${table}_change_control_delete
48
- AFTER DELETE ON ${table}
49
- BEGIN
50
- SELECT handle_lix_own_change_control('${table}', 'delete', ${tableInfo.map((c) => "OLD." + c.name).join(", ")});
51
- END;
52
- `;
53
- sqlite.exec(sql);
54
- }
55
- }
56
- function handleLixOwnEntityChange(db, sqlite, tableName, tableInfos, operation, ...values) {
57
- const lix = { db, sqlite };
58
- // keys starting with `#` are not change controlled
59
- if (tableName === "key_value" && values[0].startsWith("#")) {
60
- return;
61
- }
62
- const shouldSkip = executeSync({
63
- lix,
64
- query: db
65
- .selectFrom("key_value")
66
- .where("key", "=", "#lix_skip_own_change_control")
67
- .select("value"),
68
- })[0]?.value === "true";
69
- if (shouldSkip) {
70
- return;
71
- }
72
- // need to break the loop if own changes are detected
73
- const change = executeSync({
74
- lix,
75
- query: db
76
- .selectFrom("change")
77
- .where("id", "=", values[0])
78
- .select("plugin_key"),
79
- })[0];
80
- if (change?.plugin_key === "lix_own_change_control") {
81
- return;
82
- }
83
- const currentVersion = executeSync({
84
- lix,
85
- query: db
86
- .selectFrom("current_version")
87
- .innerJoin("version", "current_version.id", "version.id")
88
- .selectAll("version"),
89
- })[0];
90
- const authors = executeSync({
91
- lix,
92
- query: db.selectFrom("active_account").selectAll(),
93
- });
94
- if (authors.length === 0) {
95
- console.error(tableName, change);
96
- throw new Error("At least one author is required");
97
- }
98
- let snapshotContent;
99
- if (operation === "delete") {
100
- snapshotContent = null;
101
- }
102
- else {
103
- snapshotContent = {};
104
- // construct the values as json for the snapshot
105
- for (const [index, column] of tableInfos[tableName].entries()) {
106
- snapshotContent[column.name] = values[index];
107
- }
108
- }
109
- if (tableName === "file" && snapshotContent) {
110
- // sqlite has it's own jsonb format
111
- // hence, need to query sqlite to convert
112
- // to json
113
- const json = sqlite.exec("SELECT json(?)", {
114
- bind: [snapshotContent.metadata],
115
- returnValue: "resultRows",
116
- })[0][0];
117
- snapshotContent["metadata"] = JSON.parse(json);
118
- // remove the data field which is change controlled by plugins, not lix itself
119
- delete snapshotContent.data;
120
- }
121
- const entityId = entityIdForRow(tableName, ...values);
122
- createChange({
123
- lix,
124
- authors: authors,
125
- version: currentVersion,
126
- entityId,
127
- fileId: "null",
128
- pluginKey: "lix_own_change_control",
129
- schemaKey: `lix_${tableName}_table`,
130
- snapshotContent,
131
- }, {
132
- updateVersionChanges: tableName === "version_change" ? false : true,
133
- });
134
- }
135
- //# sourceMappingURL=database-triggers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-triggers.js","sourceRoot":"","sources":["../../src/own-entity-change-control/database-triggers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=database-triggers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-triggers.test.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/database-triggers.test.ts"],"names":[],"mappings":""}
@@ -1,214 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
- import { createAccount } from "../account/create-account.js";
4
- import { createChange } from "../change/create-change.js";
5
- test("it works for inserts, updates and deletions", async () => {
6
- const lix = await openLixInMemory({});
7
- // insert
8
- await lix.db
9
- .insertInto("key_value")
10
- .values({ key: "key1", value: "value1" })
11
- .execute();
12
- // update
13
- await lix.db
14
- .updateTable("key_value")
15
- .set("value", "value2")
16
- .where("key", "=", "key1")
17
- .execute();
18
- // delete
19
- await lix.db.deleteFrom("key_value").where("key", "=", "key1").execute();
20
- const changes = await lix.db
21
- .selectFrom("change")
22
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
23
- .where("schema_key", "=", "lix_key_value_table")
24
- .selectAll()
25
- .execute();
26
- const snapshots = changes.map((change) => change.content);
27
- expect(changes.length).toBe(3);
28
- for (const change of changes) {
29
- expect(change.entity_id).toBe("key1");
30
- expect(change.file_id).toBe("null");
31
- expect(change.plugin_key).toBe("lix_own_change_control");
32
- expect(change.schema_key).toBe("lix_key_value_table");
33
- }
34
- expect(snapshots).toStrictEqual([
35
- // insert
36
- { key: "key1", value: "value1" },
37
- // update
38
- { key: "key1", value: "value2" },
39
- // delete
40
- null,
41
- ]);
42
- });
43
- test("it works for compound entity ids like change_author", async () => {
44
- const lix = await openLixInMemory({});
45
- const account1 = await createAccount({ lix, name: "account1" });
46
- const currentVersion = await lix.db
47
- .selectFrom("current_version")
48
- .selectAll()
49
- .executeTakeFirstOrThrow();
50
- await createChange({
51
- lix,
52
- version: currentVersion,
53
- authors: [account1],
54
- pluginKey: "mock-plugin",
55
- schemaKey: "mock",
56
- fileId: "mock",
57
- entityId: "mock",
58
- snapshotContent: null,
59
- });
60
- const changes = await lix.db
61
- .selectFrom("change")
62
- .where("schema_key", "=", "lix_change_author_table")
63
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
64
- .selectAll()
65
- .execute();
66
- expect(changes.length).toBe(1);
67
- });
68
- test("if the trigger throws, the transaction is rolled back", async () => {
69
- const lix = await openLixInMemory({});
70
- const account1 = await createAccount({ lix, name: "account1" });
71
- const insertChange = await lix.db
72
- .selectFrom("change")
73
- .where("schema_key", "=", "lix_account_table")
74
- .where("entity_id", "=", account1.id)
75
- .selectAll()
76
- .executeTakeFirstOrThrow();
77
- expect(insertChange).toBeDefined();
78
- // deleting the active accounts aka there will be no change author
79
- // which will lead to a throw in the trigger
80
- await lix.db.deleteFrom("active_account").execute();
81
- // now we are deleting the account we just created
82
- try {
83
- await lix.db.deleteFrom("account").where("id", "=", account1.id).execute();
84
- }
85
- catch (e) {
86
- expect(e).toBeDefined();
87
- }
88
- const account1AfterFailedDeleted = await lix.db
89
- .selectFrom("account")
90
- .where("id", "=", account1.id)
91
- .selectAll()
92
- .executeTakeFirst();
93
- const deleteChange = await lix.db
94
- .selectFrom("change")
95
- .where("schema_key", "=", "lix_account_table")
96
- .where("entity_id", "=", account1.id)
97
- .where("snapshot_id", "=", "no-content")
98
- .selectAll()
99
- .executeTakeFirst();
100
- expect(account1AfterFailedDeleted).toBeDefined();
101
- expect(account1AfterFailedDeleted).toStrictEqual(account1);
102
- expect(deleteChange).toBeUndefined();
103
- });
104
- test("skips change control of key values if the key begins with `#`", async () => {
105
- const lix = await openLixInMemory({});
106
- await lix.db
107
- .insertInto("key_value")
108
- .values({ key: "#key1", value: "value1" })
109
- .execute();
110
- const key1 = await lix.db
111
- .selectFrom("key_value")
112
- .where("key", "=", "#key1")
113
- .selectAll()
114
- .executeTakeFirst();
115
- const key1Change = await lix.db
116
- .selectFrom("change")
117
- .where("entity_id", "=", "#key1")
118
- .selectAll()
119
- .executeTakeFirst();
120
- expect(key1).toBeDefined();
121
- expect(key1Change).toBeUndefined();
122
- });
123
- // the sqlite jsonb representation should not be used externally
124
- // hence, we need to store the metadata as string in the snapshot
125
- test("file.metadata is tracked as json string, not binary.", async () => {
126
- const lix = await openLixInMemory({});
127
- const file = await lix.db
128
- .insertInto("file")
129
- .values({
130
- data: new Uint8Array(),
131
- path: "/mock.txt",
132
- metadata: { key: "value" },
133
- })
134
- .returningAll()
135
- .executeTakeFirstOrThrow();
136
- const change = await lix.db
137
- .selectFrom("change")
138
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
139
- .where("schema_key", "=", "lix_file_table")
140
- .where("entity_id", "=", file.id)
141
- .selectAll()
142
- .executeTakeFirstOrThrow();
143
- expect(change.content?.metadata).toStrictEqual({
144
- key: "value",
145
- });
146
- });
147
- test("file.data is not own change controlled as plugins handle the change control of file data", async () => {
148
- const lix = await openLixInMemory({});
149
- const file = await lix.db
150
- .insertInto("file")
151
- .values({
152
- path: "/mock.txt",
153
- data: new TextEncoder().encode("hello world"),
154
- })
155
- .returningAll()
156
- .executeTakeFirstOrThrow();
157
- const change = await lix.db
158
- .selectFrom("change")
159
- .innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
160
- .where("schema_key", "=", "lix_file_table")
161
- .where("entity_id", "=", file.id)
162
- .selectAll()
163
- .executeTakeFirstOrThrow();
164
- expect(change.content?.data).toBe(undefined);
165
- });
166
- test("updating file.data does not trigger own change control", async () => {
167
- const lix = await openLixInMemory({});
168
- const file = await lix.db
169
- .insertInto("file")
170
- .values({
171
- id: "file1",
172
- data: new TextEncoder().encode("hello world"),
173
- path: "/mock.txt",
174
- metadata: null,
175
- })
176
- .returningAll()
177
- .executeTakeFirstOrThrow();
178
- let changes = await lix.db
179
- .selectFrom("change")
180
- .where("schema_key", "=", "lix_file_table")
181
- .where("entity_id", "=", file.id)
182
- .selectAll()
183
- .execute();
184
- expect(changes.length).toBe(1);
185
- await lix.db
186
- .updateTable("file")
187
- .set({ data: new TextEncoder().encode("hello world 2") })
188
- .where("id", "=", file.id)
189
- .execute();
190
- changes = await lix.db
191
- .selectFrom("change")
192
- .where("schema_key", "=", "lix_file_table")
193
- .where("entity_id", "=", file.id)
194
- .selectAll()
195
- .execute();
196
- expect(changes.length).toBe(1);
197
- // the metadata should be change controlled
198
- // hence, this should trigger a change
199
- await lix.db
200
- .updateTable("file")
201
- .set({
202
- data: new TextEncoder().encode("hello world 3"),
203
- metadata: { key: "value" },
204
- })
205
- .execute();
206
- changes = await lix.db
207
- .selectFrom("change")
208
- .where("schema_key", "=", "lix_file_table")
209
- .where("entity_id", "=", file.id)
210
- .selectAll()
211
- .execute();
212
- expect(changes.length).toBe(2);
213
- });
214
- //# sourceMappingURL=database-triggers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-triggers.test.js","sourceRoot":"","sources":["../../src/own-entity-change-control/database-triggers.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { withSkipOwnChangeControl } from "./with-skip-own-change-control.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -1,2 +0,0 @@
1
- export { withSkipOwnChangeControl } from "./with-skip-own-change-control.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/own-entity-change-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Lix } from "../lix/open-lix.js";
2
- export declare function withSkipOwnChangeControl<T>(db: Lix["db"], operation: (trx: Lix["db"]) => Promise<T>): Promise<T>;
3
- //# sourceMappingURL=with-skip-own-change-control.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-own-change-control.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/with-skip-own-change-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,wBAAsB,wBAAwB,CAAC,CAAC,EAC/C,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,CAwBZ"}
@@ -1,24 +0,0 @@
1
- export async function withSkipOwnChangeControl(db, operation) {
2
- const executeInTransaction = async (trx) => {
3
- await trx
4
- .insertInto("key_value")
5
- .values({ key: "#lix_skip_own_change_control", value: "true" })
6
- .onConflict((oc) => oc.doUpdateSet({ value: "true" }))
7
- .execute();
8
- // Perform the user's operation
9
- const result = await operation(trx);
10
- await trx
11
- .deleteFrom("key_value")
12
- .where("key", "=", "#lix_skip_own_change_control")
13
- .execute();
14
- // Return the result of the operation
15
- return result;
16
- };
17
- if (db.isTransaction) {
18
- return executeInTransaction(db);
19
- }
20
- else {
21
- return db.transaction().execute(executeInTransaction);
22
- }
23
- }
24
- //# sourceMappingURL=with-skip-own-change-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-own-change-control.js","sourceRoot":"","sources":["../../src/own-entity-change-control/with-skip-own-change-control.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,EAAa,EACb,SAAyC;IAEzC,MAAM,oBAAoB,GAAG,KAAK,EAAE,GAAc,EAAE,EAAE;QACrD,MAAM,GAAG;aACP,UAAU,CAAC,WAAW,CAAC;aACvB,MAAM,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC9D,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEZ,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,GAAG;aACP,UAAU,CAAC,WAAW,CAAC;aACvB,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,8BAA8B,CAAC;aACjD,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-own-change-control.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-own-change-control.test.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/with-skip-own-change-control.test.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { test, expect } from "vitest";
2
- import { openLixInMemory } from "../lix/open-lix-in-memory.js";
3
- import { withSkipOwnChangeControl } from "./with-skip-own-change-control.js";
4
- test("skipping works", async () => {
5
- const lix = await openLixInMemory({});
6
- await withSkipOwnChangeControl(lix.db, async (trx) => {
7
- await trx
8
- .insertInto("key_value")
9
- .values({ key: "foo", value: "bar" })
10
- .execute();
11
- await trx
12
- .insertInto("key_value")
13
- .values({ key: "foo2", value: "bar2" })
14
- .execute();
15
- });
16
- const keyValues = await lix.db.selectFrom("key_value").selectAll().execute();
17
- const changes = await lix.db
18
- .selectFrom("change")
19
- .where("schema_key", "=", "lix_key_value_table")
20
- .selectAll()
21
- .execute();
22
- expect(keyValues.find((kv) => kv.key === "foo")).toBeDefined();
23
- expect(keyValues.find((kv) => kv.key === "foo2")).toBeDefined();
24
- console.log(changes);
25
- expect(changes).toHaveLength(0);
26
- });
27
- test("if an outside transaction sets the value to true, no conflict should arise", async () => {
28
- const lix = await openLixInMemory({});
29
- // simulating an outside transaction setting the value to true
30
- await withSkipOwnChangeControl(lix.db, async (trx) => {
31
- // and an inside transaction setting the value to true as well
32
- await withSkipOwnChangeControl(trx, async (trx2) => {
33
- await trx2
34
- .insertInto("key_value")
35
- .values({ key: "foo", value: "bar" })
36
- .execute();
37
- });
38
- });
39
- const keyValues = await lix.db.selectFrom("key_value").selectAll().execute();
40
- const changes = await lix.db
41
- .selectFrom("change")
42
- .where("schema_key", "=", "lix_key_value_table")
43
- .where("entity_id", "=", "foo")
44
- .selectAll()
45
- .execute();
46
- expect(changes).toHaveLength(0);
47
- expect(keyValues.find((kv) => kv.key === "foo")).toBeDefined();
48
- });
49
- //# sourceMappingURL=with-skip-own-change-control.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-skip-own-change-control.test.js","sourceRoot":"","sources":["../../src/own-entity-change-control/with-skip-own-change-control.test.ts"],"names":[],"mappings":"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"}