@lix-js/sdk 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/file-queue/file-queue-process.d.ts.map +1 -1
- package/dist/file-queue/file-queue-process.js +3 -1
- package/dist/file-queue/file-queue-process.js.map +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/package.json +3 -3
- package/src/file-queue/file-queue-process.ts +5 -1
- package/dist/change-queue/change-queue-settled.d.ts +0 -13
- package/dist/change-queue/change-queue-settled.d.ts.map +0 -1
- package/dist/change-queue/change-queue-settled.js +0 -25
- package/dist/change-queue/change-queue-settled.js.map +0 -1
- package/dist/change-queue/change-queue-settled.test.d.ts +0 -2
- package/dist/change-queue/change-queue-settled.test.d.ts.map +0 -1
- package/dist/change-queue/change-queue-settled.test.js +0 -47
- package/dist/change-queue/change-queue-settled.test.js.map +0 -1
- package/dist/change-queue/file-handlers.d.ts +0 -24
- package/dist/change-queue/file-handlers.d.ts.map +0 -1
- package/dist/change-queue/file-handlers.js +0 -209
- package/dist/change-queue/file-handlers.js.map +0 -1
- package/dist/change-queue/index.d.ts +0 -2
- package/dist/change-queue/index.d.ts.map +0 -1
- package/dist/change-queue/index.js +0 -2
- package/dist/change-queue/index.js.map +0 -1
- package/dist/change-queue/init-change-queue.d.ts +0 -7
- package/dist/change-queue/init-change-queue.d.ts.map +0 -1
- package/dist/change-queue/init-change-queue.js +0 -80
- package/dist/change-queue/init-change-queue.js.map +0 -1
- package/dist/change-queue/init-change-queue.test.d.ts +0 -2
- package/dist/change-queue/init-change-queue.test.d.ts.map +0 -1
- package/dist/change-queue/init-change-queue.test.js +0 -373
- package/dist/change-queue/init-change-queue.test.js.map +0 -1
- package/dist/change-queue/with-skip-change-queue.d.ts +0 -3
- package/dist/change-queue/with-skip-change-queue.d.ts.map +0 -1
- package/dist/change-queue/with-skip-change-queue.js +0 -26
- package/dist/change-queue/with-skip-change-queue.js.map +0 -1
- package/dist/change-queue/with-skip-change-queue.test.d.ts +0 -2
- package/dist/change-queue/with-skip-change-queue.test.d.ts.map +0 -1
- package/dist/change-queue/with-skip-change-queue.test.js +0 -138
- package/dist/change-queue/with-skip-change-queue.test.js.map +0 -1
- package/dist/own-entity-change-control/apply-own-entity-change.d.ts +0 -10
- package/dist/own-entity-change-control/apply-own-entity-change.d.ts.map +0 -1
- package/dist/own-entity-change-control/apply-own-entity-change.js +0 -69
- package/dist/own-entity-change-control/apply-own-entity-change.js.map +0 -1
- package/dist/own-entity-change-control/apply-own-entity-change.test.d.ts +0 -2
- package/dist/own-entity-change-control/apply-own-entity-change.test.d.ts.map +0 -1
- package/dist/own-entity-change-control/apply-own-entity-change.test.js +0 -297
- package/dist/own-entity-change-control/apply-own-entity-change.test.js.map +0 -1
- package/dist/own-entity-change-control/change-controlled-tables.d.ts +0 -61
- package/dist/own-entity-change-control/change-controlled-tables.d.ts.map +0 -1
- package/dist/own-entity-change-control/change-controlled-tables.js +0 -71
- package/dist/own-entity-change-control/change-controlled-tables.js.map +0 -1
- package/dist/own-entity-change-control/change-controlled-tables.test.d.ts +0 -2
- package/dist/own-entity-change-control/change-controlled-tables.test.d.ts.map +0 -1
- package/dist/own-entity-change-control/change-controlled-tables.test.js +0 -48
- package/dist/own-entity-change-control/change-controlled-tables.test.js.map +0 -1
- package/dist/own-entity-change-control/database-triggers.d.ts +0 -5
- package/dist/own-entity-change-control/database-triggers.d.ts.map +0 -1
- package/dist/own-entity-change-control/database-triggers.js +0 -135
- package/dist/own-entity-change-control/database-triggers.js.map +0 -1
- package/dist/own-entity-change-control/database-triggers.test.d.ts +0 -2
- package/dist/own-entity-change-control/database-triggers.test.d.ts.map +0 -1
- package/dist/own-entity-change-control/database-triggers.test.js +0 -214
- package/dist/own-entity-change-control/database-triggers.test.js.map +0 -1
- package/dist/own-entity-change-control/index.d.ts +0 -2
- package/dist/own-entity-change-control/index.d.ts.map +0 -1
- package/dist/own-entity-change-control/index.js +0 -2
- package/dist/own-entity-change-control/index.js.map +0 -1
- package/dist/own-entity-change-control/with-skip-own-change-control.d.ts +0 -3
- package/dist/own-entity-change-control/with-skip-own-change-control.d.ts.map +0 -1
- package/dist/own-entity-change-control/with-skip-own-change-control.js +0 -24
- package/dist/own-entity-change-control/with-skip-own-change-control.js.map +0 -1
- package/dist/own-entity-change-control/with-skip-own-change-control.test.d.ts +0 -2
- package/dist/own-entity-change-control/with-skip-own-change-control.test.d.ts.map +0 -1
- package/dist/own-entity-change-control/with-skip-own-change-control.test.js +0 -49
- package/dist/own-entity-change-control/with-skip-own-change-control.test.js.map +0 -1
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { CompiledQuery, } from "kysely";
|
|
2
|
-
import { changeControlledTableIds, primaryKeysForEntityId, } from "./change-controlled-tables.js";
|
|
3
|
-
import { withSkipOwnChangeControl } from "./with-skip-own-change-control.js";
|
|
4
|
-
/**
|
|
5
|
-
* Applies own changes to lix itself.
|
|
6
|
-
*/
|
|
7
|
-
export async function applyOwnEntityChanges(args) {
|
|
8
|
-
const executeInTransaction = async (trx) => {
|
|
9
|
-
await withSkipOwnChangeControl(trx, async (trx) => {
|
|
10
|
-
// defer foreign keys to avoid constraint violations
|
|
11
|
-
// until the end of the transaction. otherwise, we would
|
|
12
|
-
// need to apply the changes in the correct order.
|
|
13
|
-
await trx.executeQuery(CompiledQuery.raw("PRAGMA defer_foreign_keys = ON;"));
|
|
14
|
-
await Promise.all(args.changes.map(async (change) => {
|
|
15
|
-
if (change.plugin_key !== "lix_own_change_control") {
|
|
16
|
-
throw new Error("Expected 'lix_own_change_control' as plugin key but received " +
|
|
17
|
-
change.plugin_key);
|
|
18
|
-
}
|
|
19
|
-
const snapshot = await trx
|
|
20
|
-
.selectFrom("snapshot")
|
|
21
|
-
.where("id", "=", change.snapshot_id)
|
|
22
|
-
.select("content")
|
|
23
|
-
.executeTakeFirstOrThrow();
|
|
24
|
-
// remove the prefix and suffix from the schema key
|
|
25
|
-
// `lix_key_value_table` -> `key_value`
|
|
26
|
-
const tableName = change.schema_key
|
|
27
|
-
.replace(/^lix_/, "")
|
|
28
|
-
.replace(/_table$/, "");
|
|
29
|
-
const primaryKeys = primaryKeysForEntityId(tableName, change.entity_id);
|
|
30
|
-
let query;
|
|
31
|
-
// deletion
|
|
32
|
-
if (snapshot.content === null) {
|
|
33
|
-
query = trx.deleteFrom(tableName);
|
|
34
|
-
for (const [key, value] of primaryKeys) {
|
|
35
|
-
query = query.where(key, "=", value);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// upsert
|
|
39
|
-
else {
|
|
40
|
-
// take the current file data if the table is `file`
|
|
41
|
-
// (can be optimized later to adjust the query instead)
|
|
42
|
-
if (tableName === "file") {
|
|
43
|
-
const data = await trx
|
|
44
|
-
.selectFrom("file")
|
|
45
|
-
.where("id", "=", change.entity_id)
|
|
46
|
-
.select("data")
|
|
47
|
-
.executeTakeFirst();
|
|
48
|
-
snapshot.content.data =
|
|
49
|
-
data?.data ??
|
|
50
|
-
// empty uint8array will trigger applyChanges() to pass an empty file to the plugin
|
|
51
|
-
new Uint8Array();
|
|
52
|
-
}
|
|
53
|
-
query = trx
|
|
54
|
-
.insertInto(tableName)
|
|
55
|
-
.values(snapshot.content)
|
|
56
|
-
.onConflict((oc) => oc.doUpdateSet(snapshot.content));
|
|
57
|
-
}
|
|
58
|
-
await query.execute();
|
|
59
|
-
}));
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
if (args.lix.db.isTransaction) {
|
|
63
|
-
return await executeInTransaction(args.lix.db);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
return await args.lix.db.transaction().execute(executeInTransaction);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=apply-own-entity-change.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-own-entity-change.js","sourceRoot":"","sources":["../../src/own-entity-change-control/apply-own-entity-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-own-entity-change.test.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/apply-own-entity-change.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "vitest";
|
|
2
|
-
import { openLixInMemory } from "../lix/open-lix-in-memory.js";
|
|
3
|
-
import { applyOwnEntityChanges } from "./apply-own-entity-change.js";
|
|
4
|
-
import { mockJsonSnapshot } from "../snapshot/mock-json-snapshot.js";
|
|
5
|
-
import {} from "../key-value/database-schema.js";
|
|
6
|
-
test("it should apply insert changes correctly", async () => {
|
|
7
|
-
const lix = await openLixInMemory({});
|
|
8
|
-
const snapshot = mockJsonSnapshot({
|
|
9
|
-
key: "key1",
|
|
10
|
-
value: "value1",
|
|
11
|
-
});
|
|
12
|
-
const change = {
|
|
13
|
-
id: "change1",
|
|
14
|
-
entity_id: "key1",
|
|
15
|
-
schema_key: "lix_key_value_table",
|
|
16
|
-
plugin_key: "lix_own_change_control",
|
|
17
|
-
file_id: "null",
|
|
18
|
-
snapshot_id: snapshot.id,
|
|
19
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
20
|
-
};
|
|
21
|
-
await lix.db
|
|
22
|
-
.insertInto("snapshot")
|
|
23
|
-
.values({ content: snapshot.content })
|
|
24
|
-
.execute();
|
|
25
|
-
await applyOwnEntityChanges({ lix, changes: [change] });
|
|
26
|
-
const result = await lix.db
|
|
27
|
-
.selectFrom("key_value")
|
|
28
|
-
.where("key", "=", "key1")
|
|
29
|
-
.selectAll()
|
|
30
|
-
.executeTakeFirst();
|
|
31
|
-
expect(result).toEqual({ key: "key1", value: "value1" });
|
|
32
|
-
});
|
|
33
|
-
test("it should apply update changes correctly", async () => {
|
|
34
|
-
const lix = await openLixInMemory({});
|
|
35
|
-
await lix.db
|
|
36
|
-
.insertInto("key_value")
|
|
37
|
-
.values({ key: "key1", value: "old_value" })
|
|
38
|
-
.execute();
|
|
39
|
-
const snapshot = mockJsonSnapshot({
|
|
40
|
-
key: "key1",
|
|
41
|
-
value: "new_value",
|
|
42
|
-
});
|
|
43
|
-
const change = {
|
|
44
|
-
id: "change1",
|
|
45
|
-
schema_key: "lix_key_value_table",
|
|
46
|
-
entity_id: "key1",
|
|
47
|
-
file_id: "null",
|
|
48
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
49
|
-
plugin_key: "lix_own_change_control",
|
|
50
|
-
snapshot_id: snapshot.id,
|
|
51
|
-
};
|
|
52
|
-
await lix.db
|
|
53
|
-
.insertInto("snapshot")
|
|
54
|
-
.values({
|
|
55
|
-
content: snapshot.content,
|
|
56
|
-
})
|
|
57
|
-
.execute();
|
|
58
|
-
await applyOwnEntityChanges({ lix, changes: [change] });
|
|
59
|
-
const result = await lix.db
|
|
60
|
-
.selectFrom("key_value")
|
|
61
|
-
.where("key", "=", "key1")
|
|
62
|
-
.selectAll()
|
|
63
|
-
.executeTakeFirst();
|
|
64
|
-
expect(result).toEqual({ key: "key1", value: "new_value" });
|
|
65
|
-
});
|
|
66
|
-
test("it should apply delete changes correctly", async () => {
|
|
67
|
-
const lix = await openLixInMemory({});
|
|
68
|
-
await lix.db
|
|
69
|
-
.insertInto("key_value")
|
|
70
|
-
.values({ key: "key1", value: "value1" })
|
|
71
|
-
.execute();
|
|
72
|
-
const change = {
|
|
73
|
-
id: "change1",
|
|
74
|
-
schema_key: "lix_key_value_table",
|
|
75
|
-
file_id: "null",
|
|
76
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
77
|
-
entity_id: "key1",
|
|
78
|
-
plugin_key: "lix_own_change_control",
|
|
79
|
-
snapshot_id: "no-content",
|
|
80
|
-
};
|
|
81
|
-
await applyOwnEntityChanges({ lix, changes: [change] });
|
|
82
|
-
const result = await lix.db
|
|
83
|
-
.selectFrom("key_value")
|
|
84
|
-
.where("key", "=", "key1")
|
|
85
|
-
.selectAll()
|
|
86
|
-
.executeTakeFirst();
|
|
87
|
-
expect(result).toBeUndefined();
|
|
88
|
-
});
|
|
89
|
-
test("it should throw an error for invalid plugin key", async () => {
|
|
90
|
-
const lix = await openLixInMemory({});
|
|
91
|
-
const change = {
|
|
92
|
-
id: "change1",
|
|
93
|
-
schema_key: "lix_key_value_table",
|
|
94
|
-
entity_id: "key1",
|
|
95
|
-
file_id: "null",
|
|
96
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
97
|
-
plugin_key: "invalid-plugin",
|
|
98
|
-
snapshot_id: "snapshot1",
|
|
99
|
-
};
|
|
100
|
-
const snapshot = mockJsonSnapshot({
|
|
101
|
-
key: "key1",
|
|
102
|
-
value: "value1",
|
|
103
|
-
});
|
|
104
|
-
await lix.db
|
|
105
|
-
.insertInto("snapshot")
|
|
106
|
-
.values({
|
|
107
|
-
content: snapshot.content,
|
|
108
|
-
})
|
|
109
|
-
.execute();
|
|
110
|
-
await expect(applyOwnEntityChanges({ lix, changes: [change] })).rejects.toThrow("Expected 'lix_own_change_control' as plugin key but received invalid-plugin");
|
|
111
|
-
});
|
|
112
|
-
test("file.data is not changed by applyOwnEntityChanges", async () => {
|
|
113
|
-
const lix = await openLixInMemory({});
|
|
114
|
-
const file = await lix.db
|
|
115
|
-
.insertInto("file")
|
|
116
|
-
.values({
|
|
117
|
-
path: "/test.txt",
|
|
118
|
-
data: new TextEncoder().encode("hello"),
|
|
119
|
-
metadata: {
|
|
120
|
-
foo: "bar",
|
|
121
|
-
},
|
|
122
|
-
})
|
|
123
|
-
.returningAll()
|
|
124
|
-
.executeTakeFirstOrThrow();
|
|
125
|
-
const change = await lix.db
|
|
126
|
-
.selectFrom("change")
|
|
127
|
-
.innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
|
|
128
|
-
.where("schema_key", "=", "lix_file_table")
|
|
129
|
-
.where("entity_id", "=", file.id)
|
|
130
|
-
.selectAll()
|
|
131
|
-
.executeTakeFirst();
|
|
132
|
-
expect(change).toBeDefined();
|
|
133
|
-
expect(change?.content?.metadata).toEqual({ foo: "bar" });
|
|
134
|
-
const snapshot = await lix.db
|
|
135
|
-
.insertInto("snapshot")
|
|
136
|
-
.values({
|
|
137
|
-
content: {
|
|
138
|
-
id: file.id,
|
|
139
|
-
path: "/test.txt",
|
|
140
|
-
metadata: {
|
|
141
|
-
foo: "baz",
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
})
|
|
145
|
-
.returningAll()
|
|
146
|
-
.executeTakeFirstOrThrow();
|
|
147
|
-
const mockChange = {
|
|
148
|
-
id: "change1",
|
|
149
|
-
entity_id: file.id,
|
|
150
|
-
schema_key: "lix_file_table",
|
|
151
|
-
plugin_key: "lix_own_change_control",
|
|
152
|
-
file_id: "null",
|
|
153
|
-
snapshot_id: snapshot.id,
|
|
154
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
155
|
-
};
|
|
156
|
-
await applyOwnEntityChanges({ lix, changes: [mockChange] });
|
|
157
|
-
const result = await lix.db
|
|
158
|
-
.selectFrom("file")
|
|
159
|
-
.where("id", "=", file.id)
|
|
160
|
-
.selectAll()
|
|
161
|
-
.executeTakeFirst();
|
|
162
|
-
expect(result).toEqual({
|
|
163
|
-
id: file.id,
|
|
164
|
-
data: new TextEncoder().encode("hello"),
|
|
165
|
-
path: "/test.txt",
|
|
166
|
-
metadata: { foo: "baz" },
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
test("foreign key constraints are deferred to make the order of applying changes irrelevant", async () => {
|
|
170
|
-
const lix = await openLixInMemory({});
|
|
171
|
-
const snapshots = [
|
|
172
|
-
mockJsonSnapshot({
|
|
173
|
-
id: "change-set-1",
|
|
174
|
-
}),
|
|
175
|
-
mockJsonSnapshot({
|
|
176
|
-
change_id: "change0",
|
|
177
|
-
change_set_id: "change-set-1",
|
|
178
|
-
}),
|
|
179
|
-
];
|
|
180
|
-
const mockChanges = [
|
|
181
|
-
// applying changes in reverse order
|
|
182
|
-
{
|
|
183
|
-
id: "change2",
|
|
184
|
-
entity_id: "change-set-1,change0",
|
|
185
|
-
schema_key: "lix_change_set_element_table",
|
|
186
|
-
plugin_key: "lix_own_change_control",
|
|
187
|
-
file_id: "null",
|
|
188
|
-
snapshot_id: snapshots[1].id,
|
|
189
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
id: "change1",
|
|
193
|
-
entity_id: "change-set-1",
|
|
194
|
-
schema_key: "lix_change_set_table",
|
|
195
|
-
plugin_key: "lix_own_change_control",
|
|
196
|
-
file_id: "null",
|
|
197
|
-
snapshot_id: snapshots[0].id,
|
|
198
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
199
|
-
},
|
|
200
|
-
];
|
|
201
|
-
for (const snapshot of snapshots) {
|
|
202
|
-
// @ts-expect-error - 'cannot' insert into generated column error
|
|
203
|
-
delete snapshot.id;
|
|
204
|
-
}
|
|
205
|
-
await lix.db
|
|
206
|
-
.insertInto("snapshot")
|
|
207
|
-
.values(snapshots.map((s) => ({ content: s.content })))
|
|
208
|
-
.execute();
|
|
209
|
-
// insert change that the change set element references
|
|
210
|
-
await lix.db
|
|
211
|
-
.insertInto("change")
|
|
212
|
-
.values({
|
|
213
|
-
id: "change0",
|
|
214
|
-
plugin_key: "mock",
|
|
215
|
-
file_id: "null",
|
|
216
|
-
entity_id: "mock",
|
|
217
|
-
schema_key: "mock",
|
|
218
|
-
snapshot_id: "no-content",
|
|
219
|
-
})
|
|
220
|
-
.execute();
|
|
221
|
-
await expect(applyOwnEntityChanges({ lix, changes: mockChanges })).resolves.toBeUndefined();
|
|
222
|
-
});
|
|
223
|
-
test("foreign key constraints are obeyed", async () => {
|
|
224
|
-
const lix = await openLixInMemory({});
|
|
225
|
-
const snapshots = [
|
|
226
|
-
mockJsonSnapshot({
|
|
227
|
-
// both change 0 and the change set are missing
|
|
228
|
-
change_id: "change0",
|
|
229
|
-
change_set_id: "change-set-1",
|
|
230
|
-
}),
|
|
231
|
-
];
|
|
232
|
-
const mockChanges = [
|
|
233
|
-
{
|
|
234
|
-
id: "change2",
|
|
235
|
-
// the change set for this change does not exist
|
|
236
|
-
entity_id: "change-set-1,change0",
|
|
237
|
-
schema_key: "lix_change_set_element_table",
|
|
238
|
-
plugin_key: "lix_own_change_control",
|
|
239
|
-
file_id: "null",
|
|
240
|
-
snapshot_id: snapshots[0].id,
|
|
241
|
-
created_at: "2021-01-01T00:00:00.000Z",
|
|
242
|
-
},
|
|
243
|
-
];
|
|
244
|
-
for (const snapshot of snapshots) {
|
|
245
|
-
// @ts-expect-error - 'cannot' insert into generated column error
|
|
246
|
-
delete snapshot.id;
|
|
247
|
-
}
|
|
248
|
-
await lix.db
|
|
249
|
-
.insertInto("snapshot")
|
|
250
|
-
.values(snapshots.map((s) => ({ content: s.content })))
|
|
251
|
-
.execute();
|
|
252
|
-
// insert change that the change set element references
|
|
253
|
-
await lix.db
|
|
254
|
-
.insertInto("change")
|
|
255
|
-
.values({
|
|
256
|
-
id: "change0",
|
|
257
|
-
plugin_key: "mock",
|
|
258
|
-
file_id: "null",
|
|
259
|
-
entity_id: "mock",
|
|
260
|
-
schema_key: "mock",
|
|
261
|
-
snapshot_id: "no-content",
|
|
262
|
-
})
|
|
263
|
-
.execute();
|
|
264
|
-
expect(applyOwnEntityChanges({ lix, changes: mockChanges })).rejects.toThrow();
|
|
265
|
-
});
|
|
266
|
-
// https://github.com/opral/lix-sdk/issues/185
|
|
267
|
-
test("applying own entity changes doesn't lead to the creation of new changes", async () => {
|
|
268
|
-
const lix = await openLixInMemory({});
|
|
269
|
-
const snapshot = mockJsonSnapshot({
|
|
270
|
-
key: "mock-key",
|
|
271
|
-
value: "1+1=2",
|
|
272
|
-
});
|
|
273
|
-
await lix.db
|
|
274
|
-
.insertInto("snapshot")
|
|
275
|
-
.values({
|
|
276
|
-
content: snapshot.content,
|
|
277
|
-
})
|
|
278
|
-
.execute();
|
|
279
|
-
const changesBefore = await lix.db.selectFrom("change").selectAll().execute();
|
|
280
|
-
await applyOwnEntityChanges({
|
|
281
|
-
lix,
|
|
282
|
-
changes: [
|
|
283
|
-
{
|
|
284
|
-
id: "change0",
|
|
285
|
-
entity_id: "mock-key",
|
|
286
|
-
file_id: "null",
|
|
287
|
-
plugin_key: "lix_own_change_control",
|
|
288
|
-
schema_key: "lix_key_value_table",
|
|
289
|
-
snapshot_id: snapshot.id,
|
|
290
|
-
created_at: "2021-01-01T00:00:00Z",
|
|
291
|
-
},
|
|
292
|
-
],
|
|
293
|
-
});
|
|
294
|
-
const changesAfter = await lix.db.selectFrom("change").selectAll().execute();
|
|
295
|
-
expect(changesBefore).toEqual(changesAfter);
|
|
296
|
-
});
|
|
297
|
-
//# sourceMappingURL=apply-own-entity-change.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-own-entity-change.test.js","sourceRoot":"","sources":["../../src/own-entity-change-control/apply-own-entity-change.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
export declare const changeControlledTableIds: {
|
|
2
|
-
readonly account: readonly ["id"];
|
|
3
|
-
readonly comment: readonly ["id"];
|
|
4
|
-
readonly change_set: readonly ["id"];
|
|
5
|
-
readonly change_author: readonly ["change_id", "account_id"];
|
|
6
|
-
readonly change_set_element: readonly ["change_set_id", "change_id"];
|
|
7
|
-
readonly change_set_label: readonly ["label_id", "change_set_id"];
|
|
8
|
-
readonly change_set_label_author: readonly ["label_id", "change_set_id", "account_id"];
|
|
9
|
-
readonly discussion: readonly ["id"];
|
|
10
|
-
readonly file: readonly ["id"];
|
|
11
|
-
readonly key_value: readonly ["key"];
|
|
12
|
-
readonly version: readonly ["id"];
|
|
13
|
-
readonly version_change: readonly ["version_id", "change_id"];
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* The result of a PRAGMA table_info call.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* const tableInfo = sqlite.exec({
|
|
20
|
-
* sql: `PRAGMA table_info(change_author);`,
|
|
21
|
-
* returnValue: "resultRows",
|
|
22
|
-
* rowMode: "object",
|
|
23
|
-
* }) as PragmaTableInfo;
|
|
24
|
-
*/
|
|
25
|
-
export type PragmaTableInfo = Array<{
|
|
26
|
-
/**
|
|
27
|
-
* The column name
|
|
28
|
-
*/
|
|
29
|
-
name: string;
|
|
30
|
-
/**
|
|
31
|
-
* 0 if not a primary key
|
|
32
|
-
* 1 if primary key
|
|
33
|
-
* 2... if part of a multi-column primary key
|
|
34
|
-
*/
|
|
35
|
-
pk: number;
|
|
36
|
-
}>;
|
|
37
|
-
/**
|
|
38
|
-
* Returns the entity id for a row in a change controlled table.
|
|
39
|
-
*/
|
|
40
|
-
export declare function entityIdForRow(
|
|
41
|
-
/**
|
|
42
|
-
* The name of the table.
|
|
43
|
-
*/
|
|
44
|
-
tableName: keyof typeof changeControlledTableIds,
|
|
45
|
-
/**
|
|
46
|
-
* The values of the row.
|
|
47
|
-
*/
|
|
48
|
-
...values: any[]): string;
|
|
49
|
-
/**
|
|
50
|
-
* Returns the primary keys for a row in a change controlled table.
|
|
51
|
-
*/
|
|
52
|
-
export declare function primaryKeysForEntityId(
|
|
53
|
-
/**
|
|
54
|
-
* The name of the table.
|
|
55
|
-
*/
|
|
56
|
-
tableName: keyof typeof changeControlledTableIds,
|
|
57
|
-
/**
|
|
58
|
-
* The values of the row.
|
|
59
|
-
*/
|
|
60
|
-
entitiyId: string): [string, any][];
|
|
61
|
-
//# sourceMappingURL=change-controlled-tables.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-controlled-tables.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/change-controlled-tables.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;CAa3B,CAAC;AAKX;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAgB,cAAc;AAC7B;;GAEG;AACH,SAAS,EAAE,MAAM,OAAO,wBAAwB;AAChD;;GAEG;AACH,GAAG,MAAM,EAAE,GAAG,EAAE,GACd,MAAM,CA2BR;AAED;;GAEG;AACH,wBAAgB,sBAAsB;AACrC;;GAEG;AACH,SAAS,EAAE,MAAM,OAAO,wBAAwB;AAChD;;GAEG;AACH,SAAS,EAAE,MAAM,GACf,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAQjB"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
export const changeControlledTableIds = {
|
|
2
|
-
account: ["id"],
|
|
3
|
-
comment: ["id"],
|
|
4
|
-
change_set: ["id"],
|
|
5
|
-
change_author: ["change_id", "account_id"],
|
|
6
|
-
change_set_element: ["change_set_id", "change_id"],
|
|
7
|
-
change_set_label: ["label_id", "change_set_id"],
|
|
8
|
-
change_set_label_author: ["label_id", "change_set_id", "account_id"],
|
|
9
|
-
discussion: ["id"],
|
|
10
|
-
file: ["id"],
|
|
11
|
-
key_value: ["key"],
|
|
12
|
-
version: ["id"],
|
|
13
|
-
version_change: ["version_id", "change_id"],
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Returns the entity id for a row in a change controlled table.
|
|
17
|
-
*/
|
|
18
|
-
export function entityIdForRow(
|
|
19
|
-
/**
|
|
20
|
-
* The name of the table.
|
|
21
|
-
*/
|
|
22
|
-
tableName,
|
|
23
|
-
/**
|
|
24
|
-
* The values of the row.
|
|
25
|
-
*/
|
|
26
|
-
...values) {
|
|
27
|
-
let entityId = "";
|
|
28
|
-
// only has one primary key
|
|
29
|
-
if (changeControlledTableIds[tableName].length === 1) {
|
|
30
|
-
const index = changeControlledTableIds[tableName].indexOf(
|
|
31
|
-
// @ts-expect-error - no clue why
|
|
32
|
-
changeControlledTableIds[tableName][0]);
|
|
33
|
-
entityId = values[index];
|
|
34
|
-
}
|
|
35
|
-
// has compound primary key that are joined with a comma.
|
|
36
|
-
else {
|
|
37
|
-
for (const column of changeControlledTableIds[tableName]) {
|
|
38
|
-
const index = changeControlledTableIds[tableName].indexOf(
|
|
39
|
-
// @ts-expect-error - no clue why
|
|
40
|
-
column);
|
|
41
|
-
if (entityId === "") {
|
|
42
|
-
entityId = values[index];
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
entityId = [entityId, values[index]].join(",");
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return entityId;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Returns the primary keys for a row in a change controlled table.
|
|
53
|
-
*/
|
|
54
|
-
export function primaryKeysForEntityId(
|
|
55
|
-
/**
|
|
56
|
-
* The name of the table.
|
|
57
|
-
*/
|
|
58
|
-
tableName,
|
|
59
|
-
/**
|
|
60
|
-
* The values of the row.
|
|
61
|
-
*/
|
|
62
|
-
entitiyId) {
|
|
63
|
-
const primaryKeys = changeControlledTableIds[tableName];
|
|
64
|
-
if (primaryKeys.length === 1) {
|
|
65
|
-
return [[primaryKeys[0], entitiyId]];
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return entitiyId.split(",").map((id, index) => [primaryKeys[index], id]);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=change-controlled-tables.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-controlled-tables.js","sourceRoot":"","sources":["../../src/own-entity-change-control/change-controlled-tables.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,aAAa,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IAC1C,kBAAkB,EAAE,CAAC,eAAe,EAAE,WAAW,CAAC;IAClD,gBAAgB,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;IAC/C,uBAAuB,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,YAAY,CAAC;IACpE,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,SAAS,EAAE,CAAC,KAAK,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,cAAc,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;CAClC,CAAC;AA4BX;;GAEG;AACH,MAAM,UAAU,cAAc;AAC7B;;GAEG;AACH,SAAgD;AAChD;;GAEG;AACH,GAAG,MAAa;IAEhB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,2BAA2B;IAC3B,IAAI,wBAAwB,CAAC,SAAS,CAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,wBAAwB,CAAC,SAAS,CAAE,CAAC,OAAO;QACzD,iCAAiC;QACjC,wBAAwB,CAAC,SAAS,CAAE,CAAC,CAAC,CAAC,CACvC,CAAC;QACF,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,yDAAyD;SACpD,CAAC;QACL,KAAK,MAAM,MAAM,IAAI,wBAAwB,CAAC,SAAS,CAAE,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,wBAAwB,CAAC,SAAS,CAAE,CAAC,OAAO;YACzD,iCAAiC;YACjC,MAAM,CACN,CAAC;YACF,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;gBACrB,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;AACrC;;GAEG;AACH,SAAgD;AAChD;;GAEG;AACH,SAAiB;IAEjB,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAE,CAAC;IAEzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACP,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;AACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-controlled-tables.test.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/change-controlled-tables.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "vitest";
|
|
2
|
-
import { changeControlledTableIds, entityIdForRow, primaryKeysForEntityId, } from "./change-controlled-tables.js";
|
|
3
|
-
import { loadDatabaseInMemory } from "sqlite-wasm-kysely";
|
|
4
|
-
import { newLixFile } from "../lix/new-lix.js";
|
|
5
|
-
test("roundtrip entity_id test for single primary key", () => {
|
|
6
|
-
const tableName = "key_value";
|
|
7
|
-
const row = ["lix_mock_key", "value1"];
|
|
8
|
-
const entityId = entityIdForRow(tableName, ...row);
|
|
9
|
-
const primaryKeys = primaryKeysForEntityId(tableName, entityId);
|
|
10
|
-
expect(entityId).toBe("lix_mock_key");
|
|
11
|
-
expect(primaryKeys).toEqual([["key", "lix_mock_key"]]);
|
|
12
|
-
});
|
|
13
|
-
test("roundtrip entity_id test for compound primary keys", () => {
|
|
14
|
-
const tableName = "change_author";
|
|
15
|
-
const row = ["294u-2345", "0128-34928"];
|
|
16
|
-
const entityId = entityIdForRow(tableName, ...row);
|
|
17
|
-
const primaryKeys = primaryKeysForEntityId(tableName, entityId);
|
|
18
|
-
expect(entityId).toBe("294u-2345,0128-34928");
|
|
19
|
-
expect(primaryKeys).toEqual([
|
|
20
|
-
["change_id", "294u-2345"],
|
|
21
|
-
["account_id", "0128-34928"],
|
|
22
|
-
]);
|
|
23
|
-
});
|
|
24
|
-
// otherwise the change controlled entity_id will be wrong.
|
|
25
|
-
//* if this tests fails, someone did a db schema change
|
|
26
|
-
//* on the primary key order that should not have been done.
|
|
27
|
-
test("the primary key order matches the order the primary keys in the database schema", async () => {
|
|
28
|
-
const sqlite = await loadDatabaseInMemory(await (await newLixFile()).arrayBuffer());
|
|
29
|
-
const tableInfos = {};
|
|
30
|
-
for (const table of Object.keys(changeControlledTableIds)) {
|
|
31
|
-
tableInfos[table] = sqlite.exec({
|
|
32
|
-
sql: `PRAGMA table_info(${table});`,
|
|
33
|
-
returnValue: "resultRows",
|
|
34
|
-
rowMode: "object",
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
for (const table of Object.keys(changeControlledTableIds)) {
|
|
38
|
-
const tableInfo = tableInfos[table];
|
|
39
|
-
const primaryKeys = tableInfo
|
|
40
|
-
.filter((column) => column.pk)
|
|
41
|
-
.sort((a, b) => a.pk - b.pk)
|
|
42
|
-
.map((c) => c.name);
|
|
43
|
-
expect(primaryKeys).toEqual(
|
|
44
|
-
// @ts-expect-error - some type narrowing problem. not important
|
|
45
|
-
changeControlledTableIds[table]);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=change-controlled-tables.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"change-controlled-tables.test.js","sourceRoot":"","sources":["../../src/own-entity-change-control/change-controlled-tables.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACN,wBAAwB,EACxB,cAAc,EACd,sBAAsB,GAEtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC5D,MAAM,SAAS,GAA4B,WAAW,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC/D,MAAM,SAAS,GAA4B,eAAe,CAAC;IAE3D,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;QAC3B,CAAC,WAAW,EAAE,WAAW,CAAC;QAC1B,CAAC,YAAY,EAAE,YAAY,CAAC;KAC5B,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,2DAA2D;AAC3D,uDAAuD;AACvD,4DAA4D;AAC5D,IAAI,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;IAClG,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACxC,MAAM,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,CACxC,CAAC;IAEF,MAAM,UAAU,GAAoC,EAAE,CAAC;IAEvD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3D,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/B,GAAG,EAAE,qBAAqB,KAAK,IAAI;YACnC,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,QAAQ;SACjB,CAAoB,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAE,CAAC;QAErC,MAAM,WAAW,GAAG,SAAS;aAC3B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;aAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO;QAC1B,gEAAgE;QAChE,wBAAwB,CAAC,KAAK,CAAC,CAC/B,CAAC;IACH,CAAC;AACF,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { SqliteDatabase } from "sqlite-wasm-kysely";
|
|
2
|
-
import type { LixDatabaseSchema } from "../database/schema.js";
|
|
3
|
-
import type { Kysely } from "kysely";
|
|
4
|
-
export declare function applyOwnEntityChangeControlTriggers(sqlite: SqliteDatabase, db: Kysely<LixDatabaseSchema>): void;
|
|
5
|
-
//# sourceMappingURL=database-triggers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database-triggers.d.ts","sourceRoot":"","sources":["../../src/own-entity-change-control/database-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AASrC,wBAAgB,mCAAmC,CAClD,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAC3B,IAAI,CAqEN"}
|