@antelopejs/interface-database 0.1.5 → 0.1.7
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/antelope.test.js +1 -1
- package/dist/atomic.d.ts +3 -37
- package/dist/atomic.js +39 -121
- package/dist/atomic.js.map +1 -1
- package/dist/common.d.ts +1 -58
- package/dist/common.js +15 -41
- package/dist/common.js.map +1 -1
- package/dist/datum.d.ts +1 -55
- package/dist/datum.js +2 -66
- package/dist/datum.js.map +1 -1
- package/dist/query.d.ts +11 -12
- package/dist/query.js +24 -22
- package/dist/query.js.map +1 -1
- package/dist/schema.d.ts +3 -120
- package/dist/schema.js +7 -88
- package/dist/schema.js.map +1 -1
- package/dist/selection.d.ts +1 -104
- package/dist/selection.js +5 -123
- package/dist/selection.js.map +1 -1
- package/dist/staged-query/atomic.d.ts +34 -0
- package/dist/staged-query/atomic.js +108 -0
- package/dist/staged-query/atomic.js.map +1 -0
- package/dist/staged-query/common.d.ts +58 -0
- package/dist/staged-query/common.js +45 -0
- package/dist/staged-query/common.js.map +1 -0
- package/dist/staged-query/datum.d.ts +55 -0
- package/dist/staged-query/datum.js +70 -0
- package/dist/staged-query/datum.js.map +1 -0
- package/dist/staged-query/index.d.ts +8 -0
- package/dist/staged-query/index.js +36 -0
- package/dist/staged-query/index.js.map +1 -0
- package/dist/staged-query/query.d.ts +3 -0
- package/dist/staged-query/query.js +9 -0
- package/dist/staged-query/query.js.map +1 -0
- package/dist/staged-query/schema.d.ts +122 -0
- package/dist/staged-query/schema.js +95 -0
- package/dist/staged-query/schema.js.map +1 -0
- package/dist/staged-query/selection.d.ts +104 -0
- package/dist/staged-query/selection.js +126 -0
- package/dist/staged-query/selection.js.map +1 -0
- package/dist/staged-query/stream.d.ts +185 -0
- package/dist/staged-query/stream.js +221 -0
- package/dist/staged-query/stream.js.map +1 -0
- package/dist/staged-query/valueproxy.d.ts +415 -0
- package/dist/staged-query/valueproxy.js +562 -0
- package/dist/staged-query/valueproxy.js.map +1 -0
- package/dist/stream.d.ts +1 -185
- package/dist/stream.js +2 -217
- package/dist/stream.js.map +1 -1
- package/dist/tests/atomic_mutation_operations.test.d.ts +1 -0
- package/dist/tests/atomic_mutation_operations.test.js +278 -0
- package/dist/tests/atomic_mutation_operations.test.js.map +1 -0
- package/dist/valueproxy.d.ts +1 -415
- package/dist/valueproxy.js +15 -559
- package/dist/valueproxy.js.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const interface_database_1 = require("@antelopejs/interface-database");
|
|
6
|
+
const schema = new interface_database_1.Schema("atomic-provider-contract", {
|
|
7
|
+
records: { fields: { value: "string", expires: "date" }, indexes: {} },
|
|
8
|
+
});
|
|
9
|
+
const owner = schema.instance("owner").table("records");
|
|
10
|
+
const other = schema.instance("other").table("records");
|
|
11
|
+
const defaults = schema.instance().table("records");
|
|
12
|
+
const initialRevision = "initial";
|
|
13
|
+
const raceRounds = 8;
|
|
14
|
+
const expiry = new Date("2026-01-05T10:00:00+02:00");
|
|
15
|
+
const sameExpiry = new Date("2026-01-05T08:00:00Z");
|
|
16
|
+
const differentExpiry = new Date("2026-01-05T08:00:01Z");
|
|
17
|
+
function Update(value) {
|
|
18
|
+
return {
|
|
19
|
+
type: "update",
|
|
20
|
+
revisionField: "revision",
|
|
21
|
+
expectedRevision: initialRevision,
|
|
22
|
+
nextRevision: `revision-${value}`,
|
|
23
|
+
patch: { value },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const deletion = {
|
|
27
|
+
type: "delete",
|
|
28
|
+
revisionField: "revision",
|
|
29
|
+
expectedRevision: initialRevision,
|
|
30
|
+
};
|
|
31
|
+
const equalityDeletion = {
|
|
32
|
+
type: "deleteIfEqual",
|
|
33
|
+
field: "value",
|
|
34
|
+
expectedValue: "original",
|
|
35
|
+
};
|
|
36
|
+
async function Insert(data = {}) {
|
|
37
|
+
const key = (0, node_crypto_1.randomUUID)();
|
|
38
|
+
await owner.insert({
|
|
39
|
+
_id: key,
|
|
40
|
+
revision: initialRevision,
|
|
41
|
+
value: "original",
|
|
42
|
+
...data,
|
|
43
|
+
});
|
|
44
|
+
return key;
|
|
45
|
+
}
|
|
46
|
+
describe("Atomic mutation provider conformance", () => {
|
|
47
|
+
before(async () => {
|
|
48
|
+
await schema.createInstance("owner");
|
|
49
|
+
await schema.createInstance("other");
|
|
50
|
+
await schema.createInstance();
|
|
51
|
+
});
|
|
52
|
+
after(async () => {
|
|
53
|
+
await schema.destroyInstance("owner");
|
|
54
|
+
await schema.destroyInstance("other");
|
|
55
|
+
await schema.destroyInstance();
|
|
56
|
+
});
|
|
57
|
+
it("persists revisions and replaces fields literally", ReplaceFields);
|
|
58
|
+
it("advances revision when the payload is unchanged", UnchangedPatch);
|
|
59
|
+
it("leaves stale updates and deletes unchanged", StaleRevision);
|
|
60
|
+
it("never upserts missing identities for any mutation", MissingIdentity);
|
|
61
|
+
it("isolates named and default instances", IsolateInstances);
|
|
62
|
+
it("updates and deletes records in the default instance", DefaultInstance);
|
|
63
|
+
it("bootstraps absence, never null or missing rows", MissingRevision);
|
|
64
|
+
it("deletes only absent revisions", DeleteMissingRevision);
|
|
65
|
+
it("preserves scalar types and checks equality at deletion", ScalarEquality);
|
|
66
|
+
it("compares declared dates by instant", DateEquality);
|
|
67
|
+
it("applies one competing update with its full patch", CompetingUpdates);
|
|
68
|
+
it("serializes revision deletion against update", CompetingRevisionDelete);
|
|
69
|
+
it("protects refreshes from scalar cleanup", CompetingEqualityDelete);
|
|
70
|
+
});
|
|
71
|
+
async function ReplaceFields() {
|
|
72
|
+
const key = await Insert({ nested: { removed: true, retained: "old" } });
|
|
73
|
+
(0, chai_1.expect)((await owner.get(key)).revision).to.equal(initialRevision);
|
|
74
|
+
const nested = { retained: "$literal", stage: "delete", args: ["data"] };
|
|
75
|
+
const request = { ...Update("unused"), patch: { nested } };
|
|
76
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("applied");
|
|
77
|
+
const stored = await owner.get(key);
|
|
78
|
+
(0, chai_1.expect)(stored.nested).to.deep.equal(nested);
|
|
79
|
+
(0, chai_1.expect)(stored.value).to.equal("original");
|
|
80
|
+
(0, chai_1.expect)(stored.revision).to.equal(request.nextRevision);
|
|
81
|
+
}
|
|
82
|
+
async function UnchangedPatch() {
|
|
83
|
+
const key = await Insert();
|
|
84
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, Update("original"))).to.equal("applied");
|
|
85
|
+
(0, chai_1.expect)(await owner.get(key)).to.include({
|
|
86
|
+
value: "original",
|
|
87
|
+
revision: "revision-original",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async function StaleRevision() {
|
|
91
|
+
const key = await Insert();
|
|
92
|
+
const count = await owner.count();
|
|
93
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, Update("fresh"))).to.equal("applied");
|
|
94
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, Update("stale"))).to.equal("not-applied");
|
|
95
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, deletion)).to.equal("not-applied");
|
|
96
|
+
(0, chai_1.expect)(await owner.count()).to.equal(count);
|
|
97
|
+
(0, chai_1.expect)(await owner.get(key)).to.include({
|
|
98
|
+
value: "fresh",
|
|
99
|
+
revision: "revision-fresh",
|
|
100
|
+
});
|
|
101
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, {
|
|
102
|
+
...deletion,
|
|
103
|
+
expectedRevision: "revision-fresh",
|
|
104
|
+
})).to.equal("applied");
|
|
105
|
+
(0, chai_1.expect)(await owner.get(key)).to.equal(undefined);
|
|
106
|
+
(0, chai_1.expect)(await owner.count()).to.equal(count - 1);
|
|
107
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, deletion)).to.equal("not-applied");
|
|
108
|
+
}
|
|
109
|
+
async function MissingIdentity() {
|
|
110
|
+
const key = (0, node_crypto_1.randomUUID)();
|
|
111
|
+
const count = await owner.count();
|
|
112
|
+
for (const request of [Update("absent"), deletion, equalityDeletion]) {
|
|
113
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
114
|
+
(0, chai_1.expect)(await owner.get(key)).to.equal(undefined);
|
|
115
|
+
(0, chai_1.expect)(await owner.count()).to.equal(count);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function IsolateInstances() {
|
|
119
|
+
const key = await Insert();
|
|
120
|
+
const ownerCount = await owner.count();
|
|
121
|
+
for (const table of [other, defaults]) {
|
|
122
|
+
const count = await table.count();
|
|
123
|
+
for (const request of [Update("intruder"), deletion, equalityDeletion]) {
|
|
124
|
+
(0, chai_1.expect)(await table.atomicMutation(key, request)).to.equal("not-applied");
|
|
125
|
+
(0, chai_1.expect)(await table.get(key)).to.equal(undefined);
|
|
126
|
+
(0, chai_1.expect)(await table.count()).to.equal(count);
|
|
127
|
+
(0, chai_1.expect)(await owner.count()).to.equal(ownerCount);
|
|
128
|
+
(0, chai_1.expect)(await owner.get(key)).to.include({
|
|
129
|
+
value: "original",
|
|
130
|
+
revision: initialRevision,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function DefaultInstance() {
|
|
136
|
+
const key = (0, node_crypto_1.randomUUID)();
|
|
137
|
+
(0, chai_1.expect)(await defaults.atomicMutation(key, Update("default"))).to.equal("not-applied");
|
|
138
|
+
await defaults.insert({
|
|
139
|
+
_id: key,
|
|
140
|
+
revision: initialRevision,
|
|
141
|
+
value: "original",
|
|
142
|
+
});
|
|
143
|
+
(0, chai_1.expect)(await defaults.atomicMutation(key, Update("default"))).to.equal("applied");
|
|
144
|
+
(0, chai_1.expect)(await defaults.get(key)).to.include({
|
|
145
|
+
value: "default",
|
|
146
|
+
revision: "revision-default",
|
|
147
|
+
});
|
|
148
|
+
(0, chai_1.expect)(await defaults.atomicMutation(key, {
|
|
149
|
+
...deletion,
|
|
150
|
+
expectedRevision: "revision-default",
|
|
151
|
+
})).to.equal("applied");
|
|
152
|
+
(0, chai_1.expect)(await defaults.get(key)).to.equal(undefined);
|
|
153
|
+
}
|
|
154
|
+
async function MissingRevision() {
|
|
155
|
+
const absent = (0, node_crypto_1.randomUUID)();
|
|
156
|
+
const storedNull = await Insert({ revision: null });
|
|
157
|
+
const missingRow = (0, node_crypto_1.randomUUID)();
|
|
158
|
+
await owner.insert({ _id: absent, value: "legacy" });
|
|
159
|
+
const request = {
|
|
160
|
+
...Update("adopted"),
|
|
161
|
+
expectedRevision: { kind: "missing" },
|
|
162
|
+
};
|
|
163
|
+
for (const key of [storedNull, missingRow]) {
|
|
164
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
165
|
+
}
|
|
166
|
+
(0, chai_1.expect)(await owner.atomicMutation(absent, request)).to.equal("applied");
|
|
167
|
+
(0, chai_1.expect)(await owner.atomicMutation(absent, request)).to.equal("not-applied");
|
|
168
|
+
(0, chai_1.expect)(await owner.get(absent)).to.include({
|
|
169
|
+
value: "adopted",
|
|
170
|
+
revision: "revision-adopted",
|
|
171
|
+
});
|
|
172
|
+
(0, chai_1.expect)((await owner.get(storedNull)).revision).to.equal(null);
|
|
173
|
+
(0, chai_1.expect)(await owner.get(missingRow)).to.equal(undefined);
|
|
174
|
+
}
|
|
175
|
+
async function DeleteMissingRevision() {
|
|
176
|
+
const absent = (0, node_crypto_1.randomUUID)();
|
|
177
|
+
const storedNull = await Insert({ revision: null });
|
|
178
|
+
const present = await Insert();
|
|
179
|
+
const missingRow = (0, node_crypto_1.randomUUID)();
|
|
180
|
+
await owner.insert({ _id: absent, value: "legacy" });
|
|
181
|
+
const request = {
|
|
182
|
+
...deletion,
|
|
183
|
+
expectedRevision: { kind: "missing" },
|
|
184
|
+
};
|
|
185
|
+
for (const key of [storedNull, present, missingRow]) {
|
|
186
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
187
|
+
}
|
|
188
|
+
(0, chai_1.expect)(await owner.atomicMutation(absent, request)).to.equal("applied");
|
|
189
|
+
(0, chai_1.expect)(await owner.get(absent)).to.equal(undefined);
|
|
190
|
+
(0, chai_1.expect)((await owner.get(storedNull)).revision).to.equal(null);
|
|
191
|
+
(0, chai_1.expect)((await owner.get(present)).revision).to.equal(initialRevision);
|
|
192
|
+
(0, chai_1.expect)(await owner.get(missingRow)).to.equal(undefined);
|
|
193
|
+
}
|
|
194
|
+
async function ScalarEquality() {
|
|
195
|
+
for (const expectedValue of ["saved", 0, false]) {
|
|
196
|
+
const key = await Insert();
|
|
197
|
+
const request = {
|
|
198
|
+
type: "deleteIfEqual",
|
|
199
|
+
field: "equal",
|
|
200
|
+
expectedValue,
|
|
201
|
+
};
|
|
202
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
203
|
+
await owner.get(key).update({ equal: null });
|
|
204
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
205
|
+
await owner.get(key).update({ equal: expectedValue });
|
|
206
|
+
(0, chai_1.expect)(await other.atomicMutation(key, request)).to.equal("not-applied");
|
|
207
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, {
|
|
208
|
+
...request,
|
|
209
|
+
expectedValue: `${expectedValue}-different`,
|
|
210
|
+
})).to.equal("not-applied");
|
|
211
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, {
|
|
212
|
+
...request,
|
|
213
|
+
expectedValue: expectedValue === 0 ? "0" : 0,
|
|
214
|
+
})).to.equal("not-applied");
|
|
215
|
+
(0, chai_1.expect)((await owner.get(key)).equal).to.equal(expectedValue);
|
|
216
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("applied");
|
|
217
|
+
(0, chai_1.expect)(await owner.get(key)).to.equal(undefined);
|
|
218
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async function DateEquality() {
|
|
222
|
+
const key = await Insert();
|
|
223
|
+
const request = {
|
|
224
|
+
type: "deleteIfEqual",
|
|
225
|
+
field: "expires",
|
|
226
|
+
expectedValue: sameExpiry,
|
|
227
|
+
};
|
|
228
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("not-applied");
|
|
229
|
+
await owner.get(key).update({ expires: expiry });
|
|
230
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, {
|
|
231
|
+
...request,
|
|
232
|
+
expectedValue: differentExpiry,
|
|
233
|
+
})).to.equal("not-applied");
|
|
234
|
+
(0, chai_1.expect)((await owner.get(key)).expires).to.deep.equal(expiry);
|
|
235
|
+
(0, chai_1.expect)(await owner.atomicMutation(key, request)).to.equal("applied");
|
|
236
|
+
(0, chai_1.expect)(await owner.get(key)).to.equal(undefined);
|
|
237
|
+
}
|
|
238
|
+
async function CompetingUpdates() {
|
|
239
|
+
for (let round = 0; round < raceRounds; round++) {
|
|
240
|
+
const key = await Insert();
|
|
241
|
+
const requests = [Update("left"), Update("right")];
|
|
242
|
+
requests[0].patch.nested = { left: true };
|
|
243
|
+
requests[1].patch.nested = { right: true };
|
|
244
|
+
const outcomes = await Promise.all(requests.map((request) => owner.atomicMutation(key, request).run()));
|
|
245
|
+
(0, chai_1.expect)([...outcomes].sort()).to.deep.equal(["applied", "not-applied"]);
|
|
246
|
+
const winner = requests[outcomes.indexOf("applied")];
|
|
247
|
+
(0, chai_1.expect)(await owner.get(key)).to.include({
|
|
248
|
+
revision: winner.nextRevision,
|
|
249
|
+
value: winner.patch.value,
|
|
250
|
+
});
|
|
251
|
+
(0, chai_1.expect)((await owner.get(key)).nested).to.deep.equal(winner.patch.nested);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function CompeteDeletion(request) {
|
|
255
|
+
const requests = [request, Update("refreshed")];
|
|
256
|
+
for (let round = 0; round < raceRounds; round++) {
|
|
257
|
+
const key = await Insert();
|
|
258
|
+
requests.reverse();
|
|
259
|
+
const outcomes = await Promise.all(requests.map((mutation) => owner.atomicMutation(key, mutation).run()));
|
|
260
|
+
(0, chai_1.expect)([...outcomes].sort()).to.deep.equal(["applied", "not-applied"]);
|
|
261
|
+
const stored = await owner.get(key);
|
|
262
|
+
if (requests[outcomes.indexOf("applied")].type !== "update") {
|
|
263
|
+
(0, chai_1.expect)(stored).to.equal(undefined);
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
(0, chai_1.expect)(stored).to.include({
|
|
267
|
+
value: "refreshed",
|
|
268
|
+
revision: "revision-refreshed",
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function CompetingRevisionDelete() {
|
|
273
|
+
await CompeteDeletion(deletion);
|
|
274
|
+
}
|
|
275
|
+
async function CompetingEqualityDelete() {
|
|
276
|
+
await CompeteDeletion(equalityDeletion);
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=atomic_mutation_operations.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic_mutation_operations.test.js","sourceRoot":"","sources":["../../src/tests/atomic_mutation_operations.test.ts"],"names":[],"mappings":"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"}
|