@spine-event-engine/storage 2.0.0-snapshot.10
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/LICENSE +201 -0
- package/README.md +190 -0
- package/REFERENCE.md +122 -0
- package/dist/entity/entity-history-record-spec.d.ts +26 -0
- package/dist/entity/entity-history-record-spec.d.ts.map +1 -0
- package/dist/entity/entity-history-record-spec.js +77 -0
- package/dist/entity/entity-history-record-spec.js.map +1 -0
- package/dist/entity/entity-history-storage.d.ts +111 -0
- package/dist/entity/entity-history-storage.d.ts.map +1 -0
- package/dist/entity/entity-history-storage.js +40 -0
- package/dist/entity/entity-history-storage.js.map +1 -0
- package/dist/entity/entity-record.d.ts +31 -0
- package/dist/entity/entity-record.d.ts.map +1 -0
- package/dist/entity/entity-record.js +15 -0
- package/dist/entity/entity-record.js.map +1 -0
- package/dist/entity/history-conformance.d.ts +55 -0
- package/dist/entity/history-conformance.d.ts.map +1 -0
- package/dist/entity/history-conformance.js +165 -0
- package/dist/entity/history-conformance.js.map +1 -0
- package/dist/event/event-store.d.ts +141 -0
- package/dist/event/event-store.d.ts.map +1 -0
- package/dist/event/event-store.js +407 -0
- package/dist/event/event-store.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/delivery-cleanup.d.ts +99 -0
- package/dist/internal/delivery-cleanup.d.ts.map +1 -0
- package/dist/internal/delivery-cleanup.js +38 -0
- package/dist/internal/delivery-cleanup.js.map +1 -0
- package/dist/internal/entity-commit.d.ts +108 -0
- package/dist/internal/entity-commit.d.ts.map +1 -0
- package/dist/internal/entity-commit.js +32 -0
- package/dist/internal/entity-commit.js.map +1 -0
- package/dist/internal/entity-history.d.ts +12 -0
- package/dist/internal/entity-history.d.ts.map +1 -0
- package/dist/internal/entity-history.js +17 -0
- package/dist/internal/entity-history.js.map +1 -0
- package/dist/internal/event-store.d.ts +8 -0
- package/dist/internal/event-store.d.ts.map +1 -0
- package/dist/internal/event-store.js +21 -0
- package/dist/internal/event-store.js.map +1 -0
- package/dist/internal/query-values.d.ts +5 -0
- package/dist/internal/query-values.d.ts.map +1 -0
- package/dist/internal/query-values.js +18 -0
- package/dist/internal/query-values.js.map +1 -0
- package/dist/internal/tenancy.d.ts +89 -0
- package/dist/internal/tenancy.d.ts.map +1 -0
- package/dist/internal/tenancy.js +97 -0
- package/dist/internal/tenancy.js.map +1 -0
- package/dist/memory/canonical-utf8.d.ts +21 -0
- package/dist/memory/canonical-utf8.d.ts.map +1 -0
- package/dist/memory/canonical-utf8.js +65 -0
- package/dist/memory/canonical-utf8.js.map +1 -0
- package/dist/memory/in-memory-entity-commit.d.ts +35 -0
- package/dist/memory/in-memory-entity-commit.d.ts.map +1 -0
- package/dist/memory/in-memory-entity-commit.js +183 -0
- package/dist/memory/in-memory-entity-commit.js.map +1 -0
- package/dist/memory/in-memory-entity-history.d.ts +379 -0
- package/dist/memory/in-memory-entity-history.d.ts.map +1 -0
- package/dist/memory/in-memory-entity-history.js +756 -0
- package/dist/memory/in-memory-entity-history.js.map +1 -0
- package/dist/memory/in-memory-record-storage.d.ts +78 -0
- package/dist/memory/in-memory-record-storage.d.ts.map +1 -0
- package/dist/memory/in-memory-record-storage.js +127 -0
- package/dist/memory/in-memory-record-storage.js.map +1 -0
- package/dist/memory/in-memory-storage-backend.d.ts +38 -0
- package/dist/memory/in-memory-storage-backend.d.ts.map +1 -0
- package/dist/memory/in-memory-storage-backend.js +108 -0
- package/dist/memory/in-memory-storage-backend.js.map +1 -0
- package/dist/memory/in-memory-storage-factory.d.ts +58 -0
- package/dist/memory/in-memory-storage-factory.d.ts.map +1 -0
- package/dist/memory/in-memory-storage-factory.js +148 -0
- package/dist/memory/in-memory-storage-factory.js.map +1 -0
- package/dist/memory/memory-delivery-cleanup.d.ts +32 -0
- package/dist/memory/memory-delivery-cleanup.d.ts.map +1 -0
- package/dist/memory/memory-delivery-cleanup.js +61 -0
- package/dist/memory/memory-delivery-cleanup.js.map +1 -0
- package/dist/memory/tenant-records.d.ts +66 -0
- package/dist/memory/tenant-records.d.ts.map +1 -0
- package/dist/memory/tenant-records.js +573 -0
- package/dist/memory/tenant-records.js.map +1 -0
- package/dist/provider.d.ts +18 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +23 -0
- package/dist/provider.js.map +1 -0
- package/dist/query/query-execution.d.ts +50 -0
- package/dist/query/query-execution.d.ts.map +1 -0
- package/dist/query/query-execution.js +222 -0
- package/dist/query/query-execution.js.map +1 -0
- package/dist/query/query-policy.d.ts +115 -0
- package/dist/query/query-policy.d.ts.map +1 -0
- package/dist/query/query-policy.js +294 -0
- package/dist/query/query-policy.js.map +1 -0
- package/dist/record/column-mapping.d.ts +41 -0
- package/dist/record/column-mapping.d.ts.map +1 -0
- package/dist/record/column-mapping.js +36 -0
- package/dist/record/column-mapping.js.map +1 -0
- package/dist/record/column-type.d.ts +75 -0
- package/dist/record/column-type.d.ts.map +1 -0
- package/dist/record/column-type.js +69 -0
- package/dist/record/column-type.js.map +1 -0
- package/dist/record/record-column.d.ts +23 -0
- package/dist/record/record-column.d.ts.map +1 -0
- package/dist/record/record-column.js +41 -0
- package/dist/record/record-column.js.map +1 -0
- package/dist/record/record-mask.d.ts +11 -0
- package/dist/record/record-mask.d.ts.map +1 -0
- package/dist/record/record-mask.js +82 -0
- package/dist/record/record-mask.js.map +1 -0
- package/dist/record/record-query.d.ts +102 -0
- package/dist/record/record-query.d.ts.map +1 -0
- package/dist/record/record-query.js +44 -0
- package/dist/record/record-query.js.map +1 -0
- package/dist/record/record-spec.d.ts +101 -0
- package/dist/record/record-spec.d.ts.map +1 -0
- package/dist/record/record-spec.js +159 -0
- package/dist/record/record-spec.js.map +1 -0
- package/dist/record/record-storage.d.ts +202 -0
- package/dist/record/record-storage.d.ts.map +1 -0
- package/dist/record/record-storage.js +234 -0
- package/dist/record/record-storage.js.map +1 -0
- package/dist/record/storage-group.d.ts +17 -0
- package/dist/record/storage-group.d.ts.map +1 -0
- package/dist/record/storage-group.js +37 -0
- package/dist/record/storage-group.js.map +1 -0
- package/dist/storage/storage-factory.d.ts +44 -0
- package/dist/storage/storage-factory.d.ts.map +1 -0
- package/dist/storage/storage-factory.js +54 -0
- package/dist/storage/storage-factory.js.map +1 -0
- package/dist/storage/storage.d.ts +62 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +15 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
import { CanonicalUtf8 } from "./canonical-utf8.js";
|
|
15
|
+
const tenantRecordsHost = globalThis;
|
|
16
|
+
/**
|
|
17
|
+
* Record slice owned by one tenant of an in-memory record storage.
|
|
18
|
+
*/
|
|
19
|
+
export class TenantRecords {
|
|
20
|
+
#records = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Compares and replaces an expected materialized record in this tenant slice.
|
|
23
|
+
* @param id Identifies the storage slot to compare and replace.
|
|
24
|
+
* @param expected Specifies the materialized record required at the slot.
|
|
25
|
+
* @param next Specifies the replacement record, or removes the slot when absent.
|
|
26
|
+
* @returns Whether the expected record matched and the mutation was applied.
|
|
27
|
+
*/
|
|
28
|
+
compareAndSet(id, expected, next) {
|
|
29
|
+
const key = StoredValues.key(id);
|
|
30
|
+
const current = this.#records.get(key)?.stored;
|
|
31
|
+
if (!StoredRecords.equal(current, expected)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (next === undefined) {
|
|
35
|
+
this.#records.delete(key);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
this.#records.set(key, {
|
|
39
|
+
slotId: id,
|
|
40
|
+
stored: next,
|
|
41
|
+
});
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Removes one storage slot from this tenant slice.
|
|
46
|
+
* @param id Identifies the storage slot to remove.
|
|
47
|
+
* @returns Whether a record occupied the slot.
|
|
48
|
+
*/
|
|
49
|
+
delete(id) {
|
|
50
|
+
return this.#records.delete(StoredValues.key(id));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns materialized records matching a tenant-scoped query.
|
|
54
|
+
* @param spec Supplies record identity cloning and materialized columns.
|
|
55
|
+
* @param query Specifies filters, ordering, continuation, and windowing.
|
|
56
|
+
* @returns The matching logical record entries in query order.
|
|
57
|
+
*/
|
|
58
|
+
queryEntries(spec, query) {
|
|
59
|
+
return TenantRecordQuery.entries(this.#records.values(), spec, query);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reads one record from this tenant slice.
|
|
63
|
+
* @param id Identifies the storage slot to read.
|
|
64
|
+
* @returns The stored record, or undefined when the slot is empty.
|
|
65
|
+
*/
|
|
66
|
+
read(id) {
|
|
67
|
+
return this.#records.get(StoredValues.key(id))?.stored.record;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stores one materialized record in this tenant slice.
|
|
71
|
+
* @param record Supplies the materialized record and storage identity.
|
|
72
|
+
*/
|
|
73
|
+
write(record) {
|
|
74
|
+
this.#records.set(StoredValues.key(record.id), {
|
|
75
|
+
slotId: record.id,
|
|
76
|
+
stored: record,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Stores all materialized records in this tenant slice.
|
|
81
|
+
* @param records Supplies the materialized records to store.
|
|
82
|
+
*/
|
|
83
|
+
writeAll(records) {
|
|
84
|
+
for (const record of records) {
|
|
85
|
+
this.write(record);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Copies the materialized rows for a provider-owned staged commit.
|
|
90
|
+
*
|
|
91
|
+
* @returns An independent snapshot of the current rows.
|
|
92
|
+
*/
|
|
93
|
+
snapshot() {
|
|
94
|
+
return tenantRecordsHost.structuredClone(this.#records);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Replaces all rows from a fully validated staged snapshot.
|
|
98
|
+
*
|
|
99
|
+
* @param snapshot Supplies the staged materialized rows.
|
|
100
|
+
*/
|
|
101
|
+
replace(snapshot) {
|
|
102
|
+
this.#records.clear();
|
|
103
|
+
for (const [key, value] of snapshot)
|
|
104
|
+
this.#records.set(key, value);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Compares materialized records held within one tenant slice.
|
|
109
|
+
*/
|
|
110
|
+
const StoredRecords = {
|
|
111
|
+
// prettier-ignore
|
|
112
|
+
/**
|
|
113
|
+
* Determines whether two materialized records represent the same stored value.
|
|
114
|
+
*/
|
|
115
|
+
equal(left, right) {
|
|
116
|
+
if (left === undefined || right === undefined)
|
|
117
|
+
return left === right;
|
|
118
|
+
return StoredValues.key(left.record) === StoredValues.key(right.record);
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Filters, orders, continues, and windows records for a tenant query.
|
|
123
|
+
*/
|
|
124
|
+
const TenantRecordQuery = {
|
|
125
|
+
// prettier-ignore
|
|
126
|
+
/**
|
|
127
|
+
* Produces logical entries for one tenant-scoped query.
|
|
128
|
+
*/
|
|
129
|
+
entries(entries, spec, query) {
|
|
130
|
+
const bounded = TenantRecordQuery.selectBounded(entries, spec, query);
|
|
131
|
+
if (bounded !== undefined) {
|
|
132
|
+
return bounded.map((entry) => ({
|
|
133
|
+
id: entry.slotId,
|
|
134
|
+
record: entry.stored.record,
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
const matching = [...entries].filter((entry) => TenantRecordQuery.matches(spec, entry, query));
|
|
138
|
+
const sorted = matching.sort((left, right) => TenantRecordQuery.compareEntries(left, right, query.sort ?? []));
|
|
139
|
+
const continued = TenantRecordQuery.continueAfter(sorted, query.sort ?? [], query.after);
|
|
140
|
+
return TenantRecordQuery.applyWindow(continued, query.offset, query.limit).map((entry) => ({
|
|
141
|
+
id: entry.slotId,
|
|
142
|
+
record: entry.stored.record,
|
|
143
|
+
}));
|
|
144
|
+
},
|
|
145
|
+
/**
|
|
146
|
+
* Selects the finite ordered window without retaining every matching entry.
|
|
147
|
+
*/
|
|
148
|
+
selectBounded(entries, spec, query) {
|
|
149
|
+
if (query.limit === undefined || !Number.isFinite(query.limit))
|
|
150
|
+
return undefined;
|
|
151
|
+
const offset = query.offset ?? 0;
|
|
152
|
+
const windowSize = offset + query.limit;
|
|
153
|
+
if (!Number.isInteger(offset) ||
|
|
154
|
+
!Number.isInteger(query.limit) ||
|
|
155
|
+
offset < 0 ||
|
|
156
|
+
query.limit < 0) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
if (windowSize === 0)
|
|
160
|
+
return [];
|
|
161
|
+
const orders = query.sort ?? [];
|
|
162
|
+
const selected = [];
|
|
163
|
+
for (const entry of entries) {
|
|
164
|
+
if (!TenantRecordQuery.matches(spec, entry, query) ||
|
|
165
|
+
(query.after !== undefined &&
|
|
166
|
+
TenantRecordQuery.compareToContinuation(entry, orders, query.after) <= 0)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
TenantRecordQuery.insertSelected(selected, entry, windowSize, orders);
|
|
170
|
+
}
|
|
171
|
+
return selected.slice(offset);
|
|
172
|
+
},
|
|
173
|
+
/**
|
|
174
|
+
* Inserts an entry into a bounded, ordered top window.
|
|
175
|
+
*/
|
|
176
|
+
insertSelected(selected, entry, windowSize, orders) {
|
|
177
|
+
const comparison = (candidate) => TenantRecordQuery.compareEntries(candidate, entry, orders);
|
|
178
|
+
let low = 0;
|
|
179
|
+
let high = selected.length;
|
|
180
|
+
while (low < high) {
|
|
181
|
+
const middle = low + Math.floor((high - low) / 2);
|
|
182
|
+
const candidate = selected[middle];
|
|
183
|
+
if (candidate === undefined)
|
|
184
|
+
throw new Error("Bounded record selection is sparse.");
|
|
185
|
+
if (comparison(candidate) <= 0)
|
|
186
|
+
low = middle + 1;
|
|
187
|
+
else
|
|
188
|
+
high = middle;
|
|
189
|
+
}
|
|
190
|
+
if (low === windowSize)
|
|
191
|
+
return;
|
|
192
|
+
selected.splice(low, 0, entry);
|
|
193
|
+
if (selected.length > windowSize)
|
|
194
|
+
selected.pop();
|
|
195
|
+
},
|
|
196
|
+
/**
|
|
197
|
+
* Applies offset and limit after filtering, ordering, and continuation.
|
|
198
|
+
*/
|
|
199
|
+
applyWindow(records, offset, limit) {
|
|
200
|
+
const start = offset ?? 0;
|
|
201
|
+
return records.slice(start, limit === undefined ? undefined : start + limit);
|
|
202
|
+
},
|
|
203
|
+
/**
|
|
204
|
+
* Removes entries at or before a keyset continuation.
|
|
205
|
+
*/
|
|
206
|
+
continueAfter(records, orders, after) {
|
|
207
|
+
return after === undefined
|
|
208
|
+
? records
|
|
209
|
+
: records.filter((entry) => TenantRecordQuery.compareToContinuation(entry, orders, after) > 0);
|
|
210
|
+
},
|
|
211
|
+
/**
|
|
212
|
+
* Orders entries by requested fields and storage-slot identity.
|
|
213
|
+
*/
|
|
214
|
+
compareEntries(left, right, orders) {
|
|
215
|
+
for (const order of orders) {
|
|
216
|
+
const comparison = order.field === "id"
|
|
217
|
+
? StoredValues.compareIdentity(left.slotId, right.slotId)
|
|
218
|
+
: StoredValues.compare(TenantRecordQuery.resolveValue(left.stored, order.field), TenantRecordQuery.resolveValue(right.stored, order.field));
|
|
219
|
+
if (comparison !== 0)
|
|
220
|
+
return order.direction === "desc" ? comparison * -1 : comparison;
|
|
221
|
+
}
|
|
222
|
+
return StoredValues.compareIdentity(left.slotId, right.slotId);
|
|
223
|
+
},
|
|
224
|
+
/**
|
|
225
|
+
* Orders an entry relative to one keyset continuation.
|
|
226
|
+
*/
|
|
227
|
+
compareToContinuation(entry, orders, after) {
|
|
228
|
+
for (let index = 0; index < orders.length; index += 1) {
|
|
229
|
+
const order = orders[index];
|
|
230
|
+
if (order === undefined)
|
|
231
|
+
throw new Error("Record query continuation sort order is invalid.");
|
|
232
|
+
const comparison = order.field === "id"
|
|
233
|
+
? StoredValues.compareIdentity(entry.slotId, after.values[index]?.value)
|
|
234
|
+
: StoredValues.compare(TenantRecordQuery.resolveValue(entry.stored, order.field), after.values[index]?.value);
|
|
235
|
+
if (comparison !== 0)
|
|
236
|
+
return order.direction === "desc" ? comparison * -1 : comparison;
|
|
237
|
+
}
|
|
238
|
+
return StoredValues.compareIdentity(entry.slotId, after.id);
|
|
239
|
+
},
|
|
240
|
+
/**
|
|
241
|
+
* Matches one entry against ID and column filters.
|
|
242
|
+
*/
|
|
243
|
+
matches(spec, entry, query) {
|
|
244
|
+
return (TenantRecordQuery.matchesIds(spec, entry, query.ids) &&
|
|
245
|
+
TenantRecordQuery.matchesFilters(entry.stored, query.filters));
|
|
246
|
+
},
|
|
247
|
+
/**
|
|
248
|
+
* Matches materialized values against all requested column filters.
|
|
249
|
+
*/
|
|
250
|
+
matchesFilters(entry, filters) {
|
|
251
|
+
if (filters === undefined || filters.length === 0)
|
|
252
|
+
return true;
|
|
253
|
+
return filters.every((filter) => {
|
|
254
|
+
const actual = TenantRecordQuery.resolveValue(entry, filter.column);
|
|
255
|
+
const expected = Array.isArray(filter.value) ? filter.value : [filter.value];
|
|
256
|
+
return expected.some((value) => StoredValues.key(actual) === StoredValues.key(value));
|
|
257
|
+
});
|
|
258
|
+
},
|
|
259
|
+
/**
|
|
260
|
+
* Matches an entry's storage slot against requested logical IDs.
|
|
261
|
+
*/
|
|
262
|
+
matchesIds(spec, entry, ids) {
|
|
263
|
+
if (ids === undefined || ids.length === 0)
|
|
264
|
+
return true;
|
|
265
|
+
return ids.some((id) => StoredValues.key(spec.cloneId(id)) === StoredValues.key(entry.slotId));
|
|
266
|
+
},
|
|
267
|
+
/**
|
|
268
|
+
* Resolves an ID, materialized column, or record path value.
|
|
269
|
+
*/
|
|
270
|
+
resolveValue(entry, field) {
|
|
271
|
+
if (field === "id")
|
|
272
|
+
return entry.id;
|
|
273
|
+
return entry.columns.has(field)
|
|
274
|
+
? entry.columns.get(field)
|
|
275
|
+
: StoredValues.readPath(entry.record, field);
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Produces canonical keys and deterministic comparisons for stored values.
|
|
280
|
+
*/
|
|
281
|
+
const StoredValues = {
|
|
282
|
+
// prettier-ignore
|
|
283
|
+
/**
|
|
284
|
+
* Creates a canonical value key.
|
|
285
|
+
*/
|
|
286
|
+
key(value) {
|
|
287
|
+
return StoredValues.encode(StoredValues.normalize(value));
|
|
288
|
+
},
|
|
289
|
+
/**
|
|
290
|
+
* Compares values with the storage ordering rules.
|
|
291
|
+
*/
|
|
292
|
+
compare(left, right) {
|
|
293
|
+
return StoredValues.compareNormalized(StoredValues.normalize(left), StoredValues.normalize(right));
|
|
294
|
+
},
|
|
295
|
+
/**
|
|
296
|
+
* Compares storage slot identities with canonical UTF-8 text ordering.
|
|
297
|
+
*/
|
|
298
|
+
compareIdentity(left, right) {
|
|
299
|
+
return StoredValues.compareIdentityNormalized(StoredValues.normalize(left), StoredValues.normalize(right));
|
|
300
|
+
},
|
|
301
|
+
/**
|
|
302
|
+
* Reads a dot-separated path from an object value.
|
|
303
|
+
*/
|
|
304
|
+
readPath(value, path) {
|
|
305
|
+
let current = value;
|
|
306
|
+
for (const segment of path.split(".").filter((part) => part.length > 0)) {
|
|
307
|
+
if (typeof current !== "object" || current === null)
|
|
308
|
+
return undefined;
|
|
309
|
+
current = Reflect.get(current, segment);
|
|
310
|
+
}
|
|
311
|
+
return current;
|
|
312
|
+
},
|
|
313
|
+
/**
|
|
314
|
+
* Compares normalized values of the same or distinct kinds.
|
|
315
|
+
*/
|
|
316
|
+
compareNormalized(left, right) {
|
|
317
|
+
const leftKind = StoredValues.kind(left);
|
|
318
|
+
const rightKind = StoredValues.kind(right);
|
|
319
|
+
if (leftKind !== rightKind)
|
|
320
|
+
return StoredValues.compareText(leftKind, rightKind);
|
|
321
|
+
switch (leftKind) {
|
|
322
|
+
case "undefined":
|
|
323
|
+
case "null":
|
|
324
|
+
return 0;
|
|
325
|
+
case "boolean":
|
|
326
|
+
return left === right ? 0 : left === false ? -1 : 1;
|
|
327
|
+
case "number":
|
|
328
|
+
return StoredValues.compareNumbers(left, right);
|
|
329
|
+
case "string":
|
|
330
|
+
return StoredValues.compareText(left, right);
|
|
331
|
+
case "bigint":
|
|
332
|
+
return StoredValues.compareBigInts(StoredValues.payload(left), StoredValues.payload(right));
|
|
333
|
+
case "bytes":
|
|
334
|
+
return StoredValues.compareLists(StoredValues.payload(left), StoredValues.payload(right));
|
|
335
|
+
case "array":
|
|
336
|
+
return StoredValues.compareLists(left, right);
|
|
337
|
+
case "object":
|
|
338
|
+
return StoredValues.compareObjects(left, right);
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
/**
|
|
342
|
+
* Compares normalized storage identities, treating text as canonical UTF-8 bytes.
|
|
343
|
+
*/
|
|
344
|
+
compareIdentityNormalized(left, right) {
|
|
345
|
+
const leftKind = StoredValues.kind(left);
|
|
346
|
+
const rightKind = StoredValues.kind(right);
|
|
347
|
+
if (leftKind !== rightKind)
|
|
348
|
+
return StoredValues.compareText(leftKind, rightKind);
|
|
349
|
+
switch (leftKind) {
|
|
350
|
+
case "undefined":
|
|
351
|
+
case "null":
|
|
352
|
+
return 0;
|
|
353
|
+
case "boolean":
|
|
354
|
+
return left === right ? 0 : left === false ? -1 : 1;
|
|
355
|
+
case "number":
|
|
356
|
+
return StoredValues.compareNumbers(left, right);
|
|
357
|
+
case "string":
|
|
358
|
+
return CanonicalUtf8.compare(left, right);
|
|
359
|
+
case "bigint":
|
|
360
|
+
return StoredValues.compareBigInts(StoredValues.payload(left), StoredValues.payload(right));
|
|
361
|
+
case "bytes":
|
|
362
|
+
return StoredValues.compareLists(StoredValues.payload(left), StoredValues.payload(right));
|
|
363
|
+
case "array":
|
|
364
|
+
return StoredValues.compareIdentityLists(left, right);
|
|
365
|
+
case "object":
|
|
366
|
+
return StoredValues.compareIdentityObjects(left, right);
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
/**
|
|
370
|
+
* Compares numbers while placing NaN after other numbers.
|
|
371
|
+
*/
|
|
372
|
+
compareNumbers(left, right) {
|
|
373
|
+
if (Number.isNaN(left) || Number.isNaN(right))
|
|
374
|
+
return Number.isNaN(left) && Number.isNaN(right) ? 0 : Number.isNaN(left) ? 1 : -1;
|
|
375
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
376
|
+
},
|
|
377
|
+
/**
|
|
378
|
+
* Compares encoded bigint payloads numerically.
|
|
379
|
+
*/
|
|
380
|
+
compareBigInts(left, right) {
|
|
381
|
+
const l = BigInt(left);
|
|
382
|
+
const r = BigInt(right);
|
|
383
|
+
return l < r ? -1 : l > r ? 1 : 0;
|
|
384
|
+
},
|
|
385
|
+
/**
|
|
386
|
+
* Compares lists lexicographically.
|
|
387
|
+
*/
|
|
388
|
+
compareLists(left, right) {
|
|
389
|
+
for (let index = 0; index < Math.min(left.length, right.length); index += 1) {
|
|
390
|
+
const comparison = typeof left[index] === "number" && typeof right[index] === "number"
|
|
391
|
+
? StoredValues.compareNumbers(left[index], right[index])
|
|
392
|
+
: StoredValues.compareNormalized(left[index], right[index]);
|
|
393
|
+
if (comparison !== 0)
|
|
394
|
+
return comparison;
|
|
395
|
+
}
|
|
396
|
+
return StoredValues.compareNumbers(left.length, right.length);
|
|
397
|
+
},
|
|
398
|
+
/**
|
|
399
|
+
* Compares normalized objects by keys and then values.
|
|
400
|
+
*/
|
|
401
|
+
compareObjects(left, right) {
|
|
402
|
+
const leftKeys = Object.keys(left);
|
|
403
|
+
const keyComparison = StoredValues.compareLists(leftKeys, Object.keys(right));
|
|
404
|
+
if (keyComparison !== 0)
|
|
405
|
+
return keyComparison;
|
|
406
|
+
for (const key of leftKeys) {
|
|
407
|
+
const comparison = StoredValues.compareNormalized(left[key], right[key]);
|
|
408
|
+
if (comparison !== 0)
|
|
409
|
+
return comparison;
|
|
410
|
+
}
|
|
411
|
+
return 0;
|
|
412
|
+
},
|
|
413
|
+
/**
|
|
414
|
+
* Compares strings in code-unit order.
|
|
415
|
+
*/
|
|
416
|
+
compareText(left, right) {
|
|
417
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
418
|
+
},
|
|
419
|
+
/**
|
|
420
|
+
* Compares identity-value lists recursively.
|
|
421
|
+
*/
|
|
422
|
+
compareIdentityLists(left, right) {
|
|
423
|
+
for (let index = 0; index < Math.min(left.length, right.length); index += 1) {
|
|
424
|
+
const comparison = StoredValues.compareIdentityNormalized(left[index], right[index]);
|
|
425
|
+
if (comparison !== 0)
|
|
426
|
+
return comparison;
|
|
427
|
+
}
|
|
428
|
+
return StoredValues.compareNumbers(left.length, right.length);
|
|
429
|
+
},
|
|
430
|
+
/**
|
|
431
|
+
* Compares object-shaped identities by canonical keys and values.
|
|
432
|
+
*/
|
|
433
|
+
compareIdentityObjects(left, right) {
|
|
434
|
+
const leftKeys = Object.keys(left);
|
|
435
|
+
const rightKeys = Object.keys(right);
|
|
436
|
+
const keyComparison = StoredValues.compareIdentityLists(leftKeys, rightKeys);
|
|
437
|
+
if (keyComparison !== 0)
|
|
438
|
+
return keyComparison;
|
|
439
|
+
for (const key of leftKeys) {
|
|
440
|
+
const comparison = StoredValues.compareIdentityNormalized(left[key], right[key]);
|
|
441
|
+
if (comparison !== 0)
|
|
442
|
+
return comparison;
|
|
443
|
+
}
|
|
444
|
+
return 0;
|
|
445
|
+
},
|
|
446
|
+
/**
|
|
447
|
+
* Normalizes a value for canonical storage comparison.
|
|
448
|
+
*/
|
|
449
|
+
normalize(value) {
|
|
450
|
+
if (typeof value === "bigint")
|
|
451
|
+
return StoredValues.tagged("bigint", value.toString());
|
|
452
|
+
if (value instanceof Uint8Array)
|
|
453
|
+
return StoredValues.tagged("bytes", [...value]);
|
|
454
|
+
if (Array.isArray(value))
|
|
455
|
+
return value.map((entry) => StoredValues.normalize(entry));
|
|
456
|
+
if (value === null ||
|
|
457
|
+
value === undefined ||
|
|
458
|
+
typeof value === "boolean" ||
|
|
459
|
+
typeof value === "number" ||
|
|
460
|
+
typeof value === "string")
|
|
461
|
+
return value;
|
|
462
|
+
if (typeof value !== "object")
|
|
463
|
+
return undefined;
|
|
464
|
+
return Object.keys(value)
|
|
465
|
+
.sort()
|
|
466
|
+
.reduce((result, key) => {
|
|
467
|
+
Object.defineProperty(result, key, {
|
|
468
|
+
value: StoredValues.normalize(Reflect.get(value, key)),
|
|
469
|
+
enumerable: true,
|
|
470
|
+
});
|
|
471
|
+
return result;
|
|
472
|
+
}, StoredValues.emptyObject());
|
|
473
|
+
},
|
|
474
|
+
/**
|
|
475
|
+
* Encodes a normalized value without type collisions.
|
|
476
|
+
*/
|
|
477
|
+
encode(value) {
|
|
478
|
+
return JSON.stringify(StoredValues.encoded(value));
|
|
479
|
+
},
|
|
480
|
+
/**
|
|
481
|
+
* Converts a normalized value to its tagged JSON representation.
|
|
482
|
+
*/
|
|
483
|
+
encoded(value) {
|
|
484
|
+
const kind = StoredValues.kind(value);
|
|
485
|
+
switch (kind) {
|
|
486
|
+
case "undefined":
|
|
487
|
+
return ["undefined"];
|
|
488
|
+
case "null":
|
|
489
|
+
return ["null"];
|
|
490
|
+
case "boolean":
|
|
491
|
+
if (typeof value !== "boolean")
|
|
492
|
+
throw new Error("Normalized boolean value has an unexpected type.");
|
|
493
|
+
return ["boolean", value];
|
|
494
|
+
case "number":
|
|
495
|
+
if (typeof value !== "number")
|
|
496
|
+
throw new Error("Normalized number value has an unexpected type.");
|
|
497
|
+
return ["number", String(value)];
|
|
498
|
+
case "string":
|
|
499
|
+
if (typeof value !== "string")
|
|
500
|
+
throw new Error("Normalized string value has an unexpected type.");
|
|
501
|
+
return ["string", value];
|
|
502
|
+
case "bigint":
|
|
503
|
+
return ["bigint", StoredValues.payload(value)];
|
|
504
|
+
case "bytes":
|
|
505
|
+
return ["bytes", StoredValues.payload(value)];
|
|
506
|
+
case "array":
|
|
507
|
+
return [
|
|
508
|
+
"array",
|
|
509
|
+
...value.map((entry) => StoredValues.encoded(entry)),
|
|
510
|
+
];
|
|
511
|
+
case "object":
|
|
512
|
+
return [
|
|
513
|
+
"object",
|
|
514
|
+
...Object.keys(value).map((key) => [
|
|
515
|
+
key,
|
|
516
|
+
StoredValues.encoded(value[key]),
|
|
517
|
+
]),
|
|
518
|
+
];
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
/**
|
|
522
|
+
* Identifies a normalized value kind.
|
|
523
|
+
*/
|
|
524
|
+
kind(value) {
|
|
525
|
+
if (value === undefined)
|
|
526
|
+
return "undefined";
|
|
527
|
+
if (value === null)
|
|
528
|
+
return "null";
|
|
529
|
+
if (typeof value === "boolean")
|
|
530
|
+
return "boolean";
|
|
531
|
+
if (typeof value === "number")
|
|
532
|
+
return "number";
|
|
533
|
+
if (typeof value === "string")
|
|
534
|
+
return "string";
|
|
535
|
+
if (Array.isArray(value))
|
|
536
|
+
return "array";
|
|
537
|
+
const tag = StoredValues.tag(value);
|
|
538
|
+
return tag ?? "object";
|
|
539
|
+
},
|
|
540
|
+
/**
|
|
541
|
+
* Creates a frozen tagged normalized value.
|
|
542
|
+
*/
|
|
543
|
+
tagged(kind, payload) {
|
|
544
|
+
const tagged = Object.create(null);
|
|
545
|
+
Object.defineProperties(tagged, {
|
|
546
|
+
[normalizedKind]: { value: kind },
|
|
547
|
+
[normalizedPayload]: { value: payload },
|
|
548
|
+
});
|
|
549
|
+
return Object.freeze(tagged);
|
|
550
|
+
},
|
|
551
|
+
/**
|
|
552
|
+
* Reads a recognized normalized tag.
|
|
553
|
+
*/
|
|
554
|
+
tag(value) {
|
|
555
|
+
const tag = value[normalizedKind];
|
|
556
|
+
return tag === "bigint" || tag === "bytes" ? tag : undefined;
|
|
557
|
+
},
|
|
558
|
+
/**
|
|
559
|
+
* Creates an object with no prototype for normalized fields.
|
|
560
|
+
*/
|
|
561
|
+
emptyObject() {
|
|
562
|
+
return Object.create(null);
|
|
563
|
+
},
|
|
564
|
+
/**
|
|
565
|
+
* Reads a tagged normalized payload.
|
|
566
|
+
*/
|
|
567
|
+
payload(value) {
|
|
568
|
+
return value[normalizedPayload];
|
|
569
|
+
},
|
|
570
|
+
};
|
|
571
|
+
const normalizedKind = Symbol("spine.storage.normalizedKind");
|
|
572
|
+
const normalizedPayload = Symbol("spine.storage.normalizedPayload");
|
|
573
|
+
//# sourceMappingURL=tenant-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-records.js","sourceRoot":"","sources":["../../src/memory/tenant-records.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EntityRecord as EntityRecordValue } from "./entity/entity-record.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exports provider-only contracts for implementing a Spine storage adapter.
|
|
4
|
+
*/
|
|
5
|
+
export * from "./internal/delivery-cleanup.js";
|
|
6
|
+
export * from "./internal/entity-commit.js";
|
|
7
|
+
export * from "./internal/entity-history.js";
|
|
8
|
+
export * from "./internal/event-store.js";
|
|
9
|
+
export * from "./internal/query-values.js";
|
|
10
|
+
export * from "./internal/tenancy.js";
|
|
11
|
+
/**
|
|
12
|
+
* A persisted entity record supplied to a storage-provider implementation.
|
|
13
|
+
*
|
|
14
|
+
* This local alias makes the provider entrypoint's EntityRecord contract visible in generated API
|
|
15
|
+
* documentation without changing its type.
|
|
16
|
+
*/
|
|
17
|
+
export type EntityRecord = EntityRecordValue;
|
|
18
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnF;;GAEG;AACH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, CodeMatters. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
5
|
+
* in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
10
|
+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
11
|
+
* or implied. See the License for the specific language governing permissions and limitations under
|
|
12
|
+
* the License.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Exports provider-only contracts for implementing a Spine storage adapter.
|
|
16
|
+
*/
|
|
17
|
+
export * from "./internal/delivery-cleanup.js";
|
|
18
|
+
export * from "./internal/entity-commit.js";
|
|
19
|
+
export * from "./internal/entity-history.js";
|
|
20
|
+
export * from "./internal/event-store.js";
|
|
21
|
+
export * from "./internal/query-values.js";
|
|
22
|
+
export * from "./internal/tenancy.js";
|
|
23
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;GAEG;AACH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC"}
|