@elaraai/e3 1.0.86 → 1.0.88
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/src/export.spec.js +34 -1
- package/dist/src/export.spec.js.map +1 -1
- package/dist/src/record-index.d.ts +73 -12
- package/dist/src/record-index.d.ts.map +1 -1
- package/dist/src/record-index.js +62 -7
- package/dist/src/record-index.js.map +1 -1
- package/dist/src/record-index.spec.js +82 -6
- package/dist/src/record-index.spec.js.map +1 -1
- package/dist/src/record-interval.d.ts +54 -0
- package/dist/src/record-interval.d.ts.map +1 -0
- package/dist/src/record-interval.js +111 -0
- package/dist/src/record-interval.js.map +1 -0
- package/dist/src/record-interval.spec.d.ts +2 -0
- package/dist/src/record-interval.spec.d.ts.map +1 -0
- package/dist/src/record-interval.spec.js +78 -0
- package/dist/src/record-interval.spec.js.map +1 -0
- package/dist/src/record-programs.d.ts.map +1 -1
- package/dist/src/record-programs.js +24 -7
- package/dist/src/record-programs.js.map +1 -1
- package/dist/src/types.d.ts +12 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { describe, it } from 'node:test';
|
|
19
19
|
import assert from 'node:assert/strict';
|
|
20
|
-
import { DictType, East, IntegerType, NullType, SetType, SortedMap, StringType, StructType, compareFor, printType, } from '@elaraai/east';
|
|
20
|
+
import { DateTimeType, DictType, East, IntegerType, NullType, OptionType, PatchType, SetType, SortedMap, StringType, StructType, compareFor, equalFor, none, some, printType, variant, } from '@elaraai/east';
|
|
21
21
|
import { record } from './record.js';
|
|
22
22
|
import { recordIndex } from './record-index.js';
|
|
23
|
-
import { indexBuildProgram } from './record-programs.js';
|
|
23
|
+
import { buildMutationProgram, indexBuildProgram } from './record-programs.js';
|
|
24
|
+
import { mutation } from './mutation.js';
|
|
24
25
|
import { package_ } from './package.js';
|
|
25
|
-
const RowType = StructType({ status: StringType, due: IntegerType, title: StringType, tags: SetType(StringType) });
|
|
26
|
+
const RowType = StructType({ status: StringType, due: IntegerType, title: StringType, tags: SetType(StringType), start: OptionType(DateTimeType), end: OptionType(DateTimeType) });
|
|
26
27
|
const StatusKeyType = StructType({ status: StringType, due: IntegerType });
|
|
27
28
|
const PlansType = DictType(StringType, RowType);
|
|
28
29
|
/** The `by_status` declaration: one key per row, with a covering projection. */
|
|
@@ -42,9 +43,9 @@ function emitted(recordType, def, rows) {
|
|
|
42
43
|
return out;
|
|
43
44
|
}
|
|
44
45
|
const rows = new SortedMap([
|
|
45
|
-
['p1', { status: 'late', due: 3n, title: 'One', tags: new Set(['a', 'b']) }],
|
|
46
|
-
['p2', { status: 'ok', due: 1n, title: 'Two', tags: new Set(['b']) }],
|
|
47
|
-
['p3', { status: 'late', due: 2n, title: 'Three', tags: new Set() }],
|
|
46
|
+
['p1', { status: 'late', due: 3n, title: 'One', tags: new Set(['a', 'b']), start: some(new Date(0)), end: some(new Date(86_400_000)) }],
|
|
47
|
+
['p2', { status: 'ok', due: 1n, title: 'Two', tags: new Set(['b']), start: some(new Date(100)), end: some(new Date(500)) }],
|
|
48
|
+
['p3', { status: 'late', due: 2n, title: 'Three', tags: new Set(), start: none, end: none }],
|
|
48
49
|
], compareFor(StringType));
|
|
49
50
|
describe('recordIndex — the declaration', () => {
|
|
50
51
|
// The typed bindings below are half of each test: they compile only when the
|
|
@@ -69,6 +70,35 @@ describe('recordIndex — the declaration', () => {
|
|
|
69
70
|
assert.equal(printType(keyType), printType(StringType), 'the SET is unwrapped to its element');
|
|
70
71
|
assert.equal(printType(valueType), printType(NullType));
|
|
71
72
|
});
|
|
73
|
+
it('types field indexes and keeps their declared field order', () => {
|
|
74
|
+
const one = recordIndex('by_status', plans(), { on: ['status'] });
|
|
75
|
+
const oneType = one.keyType;
|
|
76
|
+
const fields = one.on;
|
|
77
|
+
assert.equal(printType(oneType), printType(StringType));
|
|
78
|
+
assert.deepEqual(fields, ['status']);
|
|
79
|
+
const pair = recordIndex('by_status_due', plans(), { on: ['status', 'due'], value: titleOf });
|
|
80
|
+
const pairType = pair.keyType;
|
|
81
|
+
const projection = pair.valueType;
|
|
82
|
+
assert.equal(printType(pairType), printType(StatusKeyType));
|
|
83
|
+
assert.equal(printType(projection), printType(StringType));
|
|
84
|
+
assert.deepEqual(emitted(PlansType, pair, rows), emitted(PlansType, recordIndex('computed', plans(), { key: statusKey, value: titleOf }), rows));
|
|
85
|
+
const reversed = recordIndex('by_due_status', plans(), { on: ['due', 'status'] });
|
|
86
|
+
assert.deepEqual(Object.keys(reversed.keyType.fields), ['due', 'status']);
|
|
87
|
+
assert.equal(recordIndex('computed', plans(), { key: statusKey }).on, undefined);
|
|
88
|
+
});
|
|
89
|
+
it('fans a Set field out, alone and inside a compound key, and omits empty sets', () => {
|
|
90
|
+
const one = recordIndex('by_tag', plans(), { on: ['tags'] });
|
|
91
|
+
const keyType = one.keyType;
|
|
92
|
+
assert.equal(printType(keyType), printType(StringType));
|
|
93
|
+
assert.equal(one.multi, true);
|
|
94
|
+
assert.deepEqual(emitted(PlansType, one, rows), emitted(PlansType, recordIndex('computed', plans(), { keys: tagKeys }), rows));
|
|
95
|
+
const pair = recordIndex('by_status_tag', plans(), { on: ['status', 'tags'] });
|
|
96
|
+
assert.deepEqual(emitted(PlansType, pair, rows), [
|
|
97
|
+
[{ ik: { status: 'late', tags: 'a' }, k: 'p1' }, null],
|
|
98
|
+
[{ ik: { status: 'late', tags: 'b' }, k: 'p1' }, null],
|
|
99
|
+
[{ ik: { status: 'ok', tags: 'b' }, k: 'p2' }, null],
|
|
100
|
+
]);
|
|
101
|
+
});
|
|
72
102
|
it('is collected onto its record by the package', () => {
|
|
73
103
|
const rec = plans();
|
|
74
104
|
const pkg = package_('planning', '1.0.0', rec, recordIndex('by_status', rec, { key: statusKey }), recordIndex('by_tag', rec, { keys: tagKeys }));
|
|
@@ -97,6 +127,16 @@ describe('recordIndex — the declaration', () => {
|
|
|
97
127
|
assert.throws(() => recordIndex('both', plans(), { key: statusKey, keys: tagKeys }), /exactly one of 'key'/);
|
|
98
128
|
assert.throws(() => recordIndex('neither', plans(), {}), /exactly one of 'key'/);
|
|
99
129
|
});
|
|
130
|
+
it('invalid field declarations and a field declaration beside a computed key', () => {
|
|
131
|
+
assert.throws(() => recordIndex('empty', plans(), { on: [] }), /at least one field/);
|
|
132
|
+
assert.throws(() => recordIndex('repeat', plans(), { on: ['status', 'status'] }), /must not repeat/);
|
|
133
|
+
assert.throws(() => recordIndex('both', plans(), { on: ['status'], key: statusKey }), /exactly one/);
|
|
134
|
+
// @ts-expect-error — on names the record row's own fields
|
|
135
|
+
assert.throws(() => recordIndex('unknown', plans(), { on: ['missing'] }), /unknown row field 'missing'/);
|
|
136
|
+
const scalar = record('scalar', DictType(StringType, IntegerType), new Map());
|
|
137
|
+
// @ts-expect-error — scalar rows have no field to index
|
|
138
|
+
assert.throws(() => recordIndex('scalar', scalar, { on: ['status'] }), /Struct rows/);
|
|
139
|
+
});
|
|
100
140
|
it('a keys function that does not return a Set', () => {
|
|
101
141
|
assert.throws(() => recordIndex('flat', plans(), { keys: statusKey }), /must return a Set of index keys/);
|
|
102
142
|
});
|
|
@@ -157,4 +197,40 @@ describe('recordIndex — the build program', () => {
|
|
|
157
197
|
assert.deepEqual(emitted(PlansType, recordIndex('by_status', plans(), { key: statusKey }), new Map()), []);
|
|
158
198
|
});
|
|
159
199
|
});
|
|
200
|
+
describe('recordIndex — fields through mutation and rebuild', () => {
|
|
201
|
+
it('maintains the same collections that a rebuild emits after insert, update and delete', () => {
|
|
202
|
+
const rec = plans();
|
|
203
|
+
const indexes = [
|
|
204
|
+
recordIndex('by_status_due', rec, { on: ['status', 'due'], value: titleOf }),
|
|
205
|
+
recordIndex('by_tag', rec, { on: ['tags'] }),
|
|
206
|
+
recordIndex('by_time', rec, { interval: { from: 'start', to: 'end' } }),
|
|
207
|
+
recordIndex('by_status_time', rec, { on: ['status'], interval: { from: 'start', to: 'end' } }),
|
|
208
|
+
recordIndex('by_tag_time', rec, { on: ['tags'], interval: { from: 'start', to: 'end' } }),
|
|
209
|
+
];
|
|
210
|
+
const patch = mutation.patch(rec);
|
|
211
|
+
const assembled = package_('field_indexes', '1.0.0', rec, patch, ...indexes).records.plans;
|
|
212
|
+
assert.deepEqual(assembled.indexes.by_status_due.on, ['status', 'due']);
|
|
213
|
+
const after = new SortedMap([
|
|
214
|
+
['p1', { status: 'ok', due: 4n, title: 'Updated', tags: new Set(['b', 'c']), start: none, end: none }],
|
|
215
|
+
['p3', { ...rows.get('p3'), start: some(new Date(500)), end: some(new Date(1500)) }],
|
|
216
|
+
['p4', { status: 'new', due: 2n, title: 'Four', tags: new Set(['d']), start: some(new Date(1000)), end: some(new Date(2000)) }],
|
|
217
|
+
], compareFor(StringType));
|
|
218
|
+
const diff = East.compile(East.function([PlansType, PlansType], PatchType(PlansType), (_$, before, after) => East.diff(before, after)), []);
|
|
219
|
+
const changes = [];
|
|
220
|
+
const run = buildMutationProgram(assembled, patch).compile([]);
|
|
221
|
+
run(rows, diff(rows, after), (key, op) => {
|
|
222
|
+
changes.push({ index: key.type, key: key.value, op: op.value });
|
|
223
|
+
return null;
|
|
224
|
+
});
|
|
225
|
+
for (const index of indexes) {
|
|
226
|
+
const keyType = StructType({ ik: index.keyType, k: StringType });
|
|
227
|
+
const collection = DictType(keyType, index.valueType);
|
|
228
|
+
const before = new SortedMap(emitted(PlansType, index, rows), compareFor(keyType));
|
|
229
|
+
const rebuilt = new SortedMap(emitted(PlansType, index, after), compareFor(keyType));
|
|
230
|
+
const ops = new SortedMap(changes.filter((change) => change.index === index.name).map((change) => [change.key, change.op]), compareFor(keyType));
|
|
231
|
+
const apply = East.compile(East.function([collection, PatchType(collection)], collection, (_$, value, patch) => East.applyPatch(value, patch)), []);
|
|
232
|
+
assert.equal(equalFor(collection)(apply(before, variant('patch', ops)), rebuilt), true, index.name);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
});
|
|
160
236
|
//# sourceMappingURL=record-index.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-index.spec.js","sourceRoot":"","sources":["../../src/record-index.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"record-index.spec.js","sourceRoot":"","sources":["../../src/record-index.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/** Centred interval-tree keys for ordinary maintained record indexes. */
|
|
6
|
+
import { IntegerType, SetType, StructType, type EastType } from '@elaraai/east';
|
|
7
|
+
import type { IndexFunction } from './record-index.js';
|
|
8
|
+
/** Internal millisecond key before the row's declared DateTime type is restored. */
|
|
9
|
+
export declare const IntervalEntryType: StructType<{
|
|
10
|
+
readonly node: IntegerType;
|
|
11
|
+
readonly at: IntegerType;
|
|
12
|
+
}>;
|
|
13
|
+
/**
|
|
14
|
+
* Node zero stores the start. A positive-duration event is stored at the
|
|
15
|
+
* lowest common ancestor of its first and last included milliseconds, once
|
|
16
|
+
* ordered by start (even node code), once by end (odd node code).
|
|
17
|
+
*
|
|
18
|
+
* Every interval at a node crosses its centre. A carry-in query walks the
|
|
19
|
+
* ancestors of its lower bound: to the left of a centre it needs start < from;
|
|
20
|
+
* to the right it needs end > from. Each event lives at just one ancestor,
|
|
21
|
+
* and these carry-in results are disjoint from starts inside the window.
|
|
22
|
+
* At most 54 iterations and THREE entries, independent of event duration.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare const intervalEntries: import("@elaraai/east").CallableFunctionExpr<[IntegerType, IntegerType], SetType<StructType<{
|
|
26
|
+
readonly node: IntegerType;
|
|
27
|
+
readonly at: IntegerType;
|
|
28
|
+
}>>>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate the pure key function, using the existing field-index function for
|
|
31
|
+
* all leading fields (including Set membership). This stays an ordinary
|
|
32
|
+
* multi-entry index: mutation, rebuild, storage and transport are shared.
|
|
33
|
+
* @param name - Index name for authoring errors.
|
|
34
|
+
* @param keyType - Primary key type.
|
|
35
|
+
* @param valueType - Record row type.
|
|
36
|
+
* @param on - Exact leading fields.
|
|
37
|
+
* @param interval - Start and end row fields.
|
|
38
|
+
* @param prefix - The standard generated field-index key function.
|
|
39
|
+
* @returns The generated keys and its fan-out flag.
|
|
40
|
+
*/
|
|
41
|
+
export declare function intervalKey(name: string, keyType: EastType, valueType: EastType, on: readonly string[], interval: {
|
|
42
|
+
from: string;
|
|
43
|
+
to: string;
|
|
44
|
+
}, prefix?: {
|
|
45
|
+
fn: IndexFunction;
|
|
46
|
+
multi: boolean;
|
|
47
|
+
}): {
|
|
48
|
+
fn: import("@elaraai/east").CallableFunctionExpr<[never, StructType<Record<string, EastType>>], SetType<StructType<{
|
|
49
|
+
readonly [x: string]: any;
|
|
50
|
+
readonly __interval: IntegerType;
|
|
51
|
+
}>>>;
|
|
52
|
+
multi: boolean;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=record-interval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-interval.d.ts","sourceRoot":"","sources":["../../src/record-interval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yEAAyE;AACzE,OAAO,EAA4B,WAAW,EAAc,OAAO,EAAE,UAAU,EAC7E,KAAK,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,oFAAoF;AACpF,eAAO,MAAM,iBAAiB;;;EAAqD,CAAC;AAEpF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe;;;IAmB1B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,EACrG,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE;;;;;;EAkDvF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/** Centred interval-tree keys for ordinary maintained record indexes. */
|
|
6
|
+
import { DateTimeType, East, Expr, IntegerType, OptionType, SetType, StructType, isTypeEqual, none, some } from '@elaraai/east';
|
|
7
|
+
/** The signed millisecond domain containing every valid JavaScript Date. */
|
|
8
|
+
const BIAS = 1n << 53n;
|
|
9
|
+
const LEAVES = 1n << 54n;
|
|
10
|
+
/** Internal millisecond key before the row's declared DateTime type is restored. */
|
|
11
|
+
export const IntervalEntryType = StructType({ node: IntegerType, at: IntegerType });
|
|
12
|
+
/**
|
|
13
|
+
* Node zero stores the start. A positive-duration event is stored at the
|
|
14
|
+
* lowest common ancestor of its first and last included milliseconds, once
|
|
15
|
+
* ordered by start (even node code), once by end (odd node code).
|
|
16
|
+
*
|
|
17
|
+
* Every interval at a node crosses its centre. A carry-in query walks the
|
|
18
|
+
* ancestors of its lower bound: to the left of a centre it needs start < from;
|
|
19
|
+
* to the right it needs end > from. Each event lives at just one ancestor,
|
|
20
|
+
* and these carry-in results are disjoint from starts inside the window.
|
|
21
|
+
* At most 54 iterations and THREE entries, independent of event duration.
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export const intervalEntries = East.function([IntegerType, IntegerType], SetType(IntervalEntryType), ($, start, end) => {
|
|
25
|
+
const entries = $.let(new Set(), SetType(IntervalEntryType));
|
|
26
|
+
$(entries.insert({ node: 0n, at: start }));
|
|
27
|
+
$.if(start.less(-BIAS).or(() => start.greaterEqual(BIAS)).or(() => end.less(-BIAS)).or(() => end.greaterEqual(BIAS)), ($) => {
|
|
28
|
+
$.error('Interval endpoints must be valid DateTime milliseconds');
|
|
29
|
+
});
|
|
30
|
+
// Instants and one-millisecond intervals cannot carry into another
|
|
31
|
+
// millisecond. A missing or non-positive end keeps instant semantics.
|
|
32
|
+
$.if(end.greater(start.add(1n)), ($) => {
|
|
33
|
+
const left = $.let(start.add(BIAS + LEAVES));
|
|
34
|
+
const right = $.let(end.subtract(1n).add(BIAS + LEAVES));
|
|
35
|
+
$.while(left.notEqual(right), ($) => {
|
|
36
|
+
$.assign(left, left.divide(2n));
|
|
37
|
+
$.assign(right, right.divide(2n));
|
|
38
|
+
});
|
|
39
|
+
$(entries.insert({ node: left.multiply(2n), at: start }));
|
|
40
|
+
$(entries.insert({ node: left.multiply(2n).add(1n), at: end }));
|
|
41
|
+
});
|
|
42
|
+
return entries;
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Generate the pure key function, using the existing field-index function for
|
|
46
|
+
* all leading fields (including Set membership). This stays an ordinary
|
|
47
|
+
* multi-entry index: mutation, rebuild, storage and transport are shared.
|
|
48
|
+
* @param name - Index name for authoring errors.
|
|
49
|
+
* @param keyType - Primary key type.
|
|
50
|
+
* @param valueType - Record row type.
|
|
51
|
+
* @param on - Exact leading fields.
|
|
52
|
+
* @param interval - Start and end row fields.
|
|
53
|
+
* @param prefix - The standard generated field-index key function.
|
|
54
|
+
* @returns The generated keys and its fan-out flag.
|
|
55
|
+
*/
|
|
56
|
+
export function intervalKey(name, keyType, valueType, on, interval, prefix) {
|
|
57
|
+
if (valueType.type !== 'Struct')
|
|
58
|
+
throw new Error(`e3.recordIndex '${name}' interval requires Struct rows`);
|
|
59
|
+
const rowType = valueType;
|
|
60
|
+
const startType = rowType.fields[interval.from];
|
|
61
|
+
const endType = rowType.fields[interval.to];
|
|
62
|
+
for (const [field, type] of [[interval.from, startType], [interval.to, endType]]) {
|
|
63
|
+
if (type === undefined || (!isTypeEqual(type, DateTimeType) && !isTypeEqual(type, OptionType(DateTimeType)))) {
|
|
64
|
+
throw new Error(`e3.recordIndex '${name}' interval field '${field}' must be DateTime or Option<DateTime>`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (on.includes(interval.from) || on.includes('__interval') || interval.from === '__interval') {
|
|
68
|
+
throw new Error(`e3.recordIndex '${name}' interval start and reserved '__interval' cannot be leading fields`);
|
|
69
|
+
}
|
|
70
|
+
const fields = Object.fromEntries(on.map(field => {
|
|
71
|
+
const type = rowType.fields[field];
|
|
72
|
+
return [field, type.type === 'Set' ? type.key : type];
|
|
73
|
+
}));
|
|
74
|
+
const indexType = StructType({ ...fields, __interval: IntegerType, [interval.from]: startType });
|
|
75
|
+
const prefixType = prefix === undefined ? undefined : Expr.type(prefix.fn);
|
|
76
|
+
// Dynamic field names are erased only inside this generated East function,
|
|
77
|
+
// as in the standard field-key generator; all types were checked above.
|
|
78
|
+
const fn = East.function([keyType, rowType], SetType(indexType), ($, key, row) => {
|
|
79
|
+
const locate = $.const(intervalEntries);
|
|
80
|
+
const start = $.let(startType.type === 'DateTime' ? some(row[interval.from]) : row[interval.from], OptionType(DateTimeType));
|
|
81
|
+
const end = $.let(endType.type === 'DateTime' ? some(row[interval.to]) : row[interval.to], OptionType(DateTimeType));
|
|
82
|
+
const entries = $.let(new Set([{ node: 0n, at: 0n }]), SetType(IntervalEntryType));
|
|
83
|
+
$.match(start, { some: ($, from) => {
|
|
84
|
+
const to = $.let(end.match({ some: (_$, to) => to, none: () => from }));
|
|
85
|
+
$.assign(entries, locate(from.toEpochMilliseconds(), to.toEpochMilliseconds()));
|
|
86
|
+
} });
|
|
87
|
+
const keys = $.let(new Set(), SetType(indexType));
|
|
88
|
+
const append = ($, values) => {
|
|
89
|
+
const leading = Object.fromEntries(on.map(field => [field, on.length === 1 ? values : values[field]]));
|
|
90
|
+
$.for(entries, ($, entry) => {
|
|
91
|
+
const date = $.let(East.DateTime.fromEpochMilliseconds(entry.at));
|
|
92
|
+
const at = startType.type === 'DateTime' ? date
|
|
93
|
+
: start.match({ some: () => some(date), none: () => none });
|
|
94
|
+
$(keys.insert({ ...leading, __interval: entry.node, [interval.from]: at }));
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
if (prefix === undefined)
|
|
98
|
+
append($, undefined);
|
|
99
|
+
else {
|
|
100
|
+
const make = $.const(prefix.fn);
|
|
101
|
+
const values = $.let(make(key, row), prefixType.output);
|
|
102
|
+
if (prefix.multi)
|
|
103
|
+
$.for(values, ($, value) => append($, value));
|
|
104
|
+
else
|
|
105
|
+
append($, values);
|
|
106
|
+
}
|
|
107
|
+
return keys;
|
|
108
|
+
});
|
|
109
|
+
return { fn, multi: true };
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=record-interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-interval.js","sourceRoot":"","sources":["../../src/record-interval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-interval.spec.d.ts","sourceRoot":"","sources":["../../src/record-interval.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import { test } from 'node:test';
|
|
6
|
+
import assert from 'node:assert/strict';
|
|
7
|
+
import { DateTimeType, DictType, East, OptionType, SetType, StringType, StructType, decodeBeast2For, encodeBeast2For, none, some } from '@elaraai/east';
|
|
8
|
+
import { record } from './record.js';
|
|
9
|
+
import { recordIndex } from './record-index.js';
|
|
10
|
+
import { IntervalEntryType, intervalEntries } from './record-interval.js';
|
|
11
|
+
const entriesOf = East.compile(intervalEntries, []);
|
|
12
|
+
const leaf = 3n * (1n << 53n);
|
|
13
|
+
// Compare real, decoded generated keys against the direct interval oracle.
|
|
14
|
+
// Include the full supported domain, carry-in, epoch crossing and instants.
|
|
15
|
+
test('interval index preserves half-open overlap with at most three entries', () => {
|
|
16
|
+
const extremes = 8640000000000000n;
|
|
17
|
+
const spans = [[-extremes, extremes], [-86400000n, 86400000n], [-1n, 1n], [0n, 0n], [1n, 0n], [0n, 1n]];
|
|
18
|
+
for (let i = 0n; i < 100n; i++) {
|
|
19
|
+
const start = (i * 7919n) % 4000000n - 2000000n;
|
|
20
|
+
spans.push([start, start + (i * 104729n) % 10000000n]);
|
|
21
|
+
}
|
|
22
|
+
for (const [start, end] of spans) {
|
|
23
|
+
const entries = [...decodeBeast2For(SetType(IntervalEntryType))(encodeBeast2For(SetType(IntervalEntryType))(entriesOf(start, end)))];
|
|
24
|
+
assert.equal(entries.filter(entry => entry.node === 0n).length, 1);
|
|
25
|
+
assert.ok(entries.length <= 3);
|
|
26
|
+
for (const from of [start - 1n, start, start + 1n, end - 1n, end, end + 1n, 0n]) {
|
|
27
|
+
for (const width of [1n, 86400000n]) {
|
|
28
|
+
const to = from + width;
|
|
29
|
+
let hits = entries.filter(entry => entry.node === 0n && entry.at >= from && entry.at < to).length;
|
|
30
|
+
for (let child = leaf + from; child > 1n; child /= 2n) {
|
|
31
|
+
const parent = child / 2n;
|
|
32
|
+
const right = child % 2n === 1n;
|
|
33
|
+
hits += entries.filter(entry => entry.node === 2n * parent + (right ? 1n : 0n)
|
|
34
|
+
&& (right ? entry.at > from : entry.at < from)).length;
|
|
35
|
+
}
|
|
36
|
+
const expected = end <= start ? start >= from && start < to : start < to && end > from;
|
|
37
|
+
assert.equal(hits, expected ? 1 : 0, `interval ${start}..${end} in ${from}..${to}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
test('interval indexes retain declared fields, optional backlog and Set-member prefixes through real East IR', () => {
|
|
43
|
+
const Row = StructType({ resources: SetType(StringType), start: OptionType(DateTimeType), end: OptionType(DateTimeType) });
|
|
44
|
+
const records = record('interval_events', DictType(StringType, Row), new Map());
|
|
45
|
+
const index = recordIndex('by_resource_time', records, { on: ['resources'], interval: { from: 'start', to: 'end' } });
|
|
46
|
+
assert.deepEqual(index.on, ['resources', 'start']);
|
|
47
|
+
assert.deepEqual(index.interval, { from: 'start', to: 'end' });
|
|
48
|
+
assert.equal(index.multi, true);
|
|
49
|
+
const fn = East.compile(index.keyFn, []);
|
|
50
|
+
const start = new Date('2026-10-01T22:00:00Z');
|
|
51
|
+
const end = new Date('2026-10-03T06:00:00Z');
|
|
52
|
+
const decode = decodeBeast2For(Row);
|
|
53
|
+
const encode = encodeBeast2For(Row);
|
|
54
|
+
const scheduled = fn('night', decode(encode({ resources: new Set(['A', 'B']), start: some(start), end: some(end) })));
|
|
55
|
+
assert.equal([...scheduled].filter(key => key.__interval === 0n).length, 2);
|
|
56
|
+
assert.equal(scheduled.size, 6);
|
|
57
|
+
const from = BigInt(new Date('2026-10-02T00:00:00Z').getTime());
|
|
58
|
+
for (const resource of ['A', 'B']) {
|
|
59
|
+
let hits = 0;
|
|
60
|
+
for (let child = leaf + from; child > 1n; child /= 2n) {
|
|
61
|
+
const right = child % 2n === 1n;
|
|
62
|
+
hits += [...scheduled].filter(key => key.resources === resource && key.__interval === 2n * (child / 2n) + (right ? 1n : 0n)
|
|
63
|
+
&& key.start.type === 'some' && (right ? BigInt(key.start.value.getTime()) > from : BigInt(key.start.value.getTime()) < from)).length;
|
|
64
|
+
}
|
|
65
|
+
assert.equal(hits, 1);
|
|
66
|
+
}
|
|
67
|
+
const backlog = fn('backlog', decode(encode({ resources: new Set(['A']), start: none, end: none })));
|
|
68
|
+
assert.deepEqual([...backlog], [{ resources: 'A', __interval: 0n, start: none }]);
|
|
69
|
+
const simple = recordIndex('by_time', records, { interval: { from: 'start', to: 'end' } });
|
|
70
|
+
assert.deepEqual(simple.on, ['start']);
|
|
71
|
+
const simpleFn = East.compile(simple.keyFn, []);
|
|
72
|
+
assert.equal(simpleFn('instant', { resources: new Set(), start: some(start), end: none }).size, 1);
|
|
73
|
+
assert.throws(() => recordIndex('bad_interval', records, {
|
|
74
|
+
// @ts-expect-error Only DateTime fields are interval endpoints.
|
|
75
|
+
interval: { from: 'resources', to: 'end' },
|
|
76
|
+
}), /DateTime/);
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=record-interval.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-interval.spec.js","sourceRoot":"","sources":["../../src/record-interval.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-programs.d.ts","sourceRoot":"","sources":["../../src/record-programs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"record-programs.d.ts","sourceRoot":"","sources":["../../src/record-programs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAcL,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAC6E,KAAK,WAAW,EACnG,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoBvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAErF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAoB7F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CA2BpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,WAAW,EAAE,CAapG;AAUD;;iEAEiE;AACjE,wBAAgB,aAAa,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAG3D;AAkED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAwEvF"}
|
|
@@ -16,8 +16,25 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @packageDocumentation
|
|
18
18
|
*/
|
|
19
|
-
import { DictType, East, FunctionType, NullType, OptionType, PatchType, SetType, StructType, VariantType, none, some, variant, } from '@elaraai/east';
|
|
19
|
+
import { DictType, East, FunctionType, NullType, OptionType, PatchType, SetType, StructType, VariantType, none, some, variant, withLocationCapture, } from '@elaraai/east';
|
|
20
20
|
import { DELTA_CONFLICT, editTypeOf, indexCollectionType, mutationDeltaType, patchOpsType, } from '@elaraai/e3-types';
|
|
21
|
+
/**
|
|
22
|
+
* Builds a program's IR with no source location captured.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* A program is built as its package exports, so a location captured then
|
|
26
|
+
* would name the code that called `e3.export`, and two exports of one
|
|
27
|
+
* declaration would give two programs (#1284). e3 keeps a program, and every
|
|
28
|
+
* object that names it, by its hash, so its bytes are the declaration's
|
|
29
|
+
* alone. The author's functions it calls keep the locations they were built
|
|
30
|
+
* with.
|
|
31
|
+
*
|
|
32
|
+
* @param build - Builds the program
|
|
33
|
+
* @returns The program's IR bundle
|
|
34
|
+
*/
|
|
35
|
+
function locationFree(build) {
|
|
36
|
+
return withLocationCapture(false, () => build().toIR());
|
|
37
|
+
}
|
|
21
38
|
/**
|
|
22
39
|
* The entry key an index collection sorts under: `{ik, k}`.
|
|
23
40
|
*
|
|
@@ -56,7 +73,7 @@ export function indexBuildProgram(recordType, def) {
|
|
|
56
73
|
const dict = recordType;
|
|
57
74
|
const entryKey = indexEntryKeyType(dict.key, def.keyType);
|
|
58
75
|
const emitType = FunctionType([entryKey, def.valueType], NullType);
|
|
59
|
-
return East.function([recordType, emitType], NullType, ($, piece, emit) => {
|
|
76
|
+
return locationFree(() => East.function([recordType, emitType], NullType, ($, piece, emit) => {
|
|
60
77
|
const indexKey = $.const(def.keyFn);
|
|
61
78
|
const project = def.valueFn === undefined ? undefined : $.const(def.valueFn);
|
|
62
79
|
$.for(piece, ($, row, key) => {
|
|
@@ -71,7 +88,7 @@ export function indexBuildProgram(recordType, def) {
|
|
|
71
88
|
}
|
|
72
89
|
});
|
|
73
90
|
return null;
|
|
74
|
-
})
|
|
91
|
+
}));
|
|
75
92
|
}
|
|
76
93
|
/**
|
|
77
94
|
* The program a `rows` or `rekey` migration runs over each piece of a record's
|
|
@@ -102,7 +119,7 @@ export function migrationProgram(def) {
|
|
|
102
119
|
const emitType = to.type === 'Dict'
|
|
103
120
|
? FunctionType([to.key, to.value], NullType)
|
|
104
121
|
: FunctionType([(to.type === 'Array' ? to.value : to.key)], NullType);
|
|
105
|
-
return East.function([def.from, emitType], NullType, ($, piece, emit) => {
|
|
122
|
+
return locationFree(() => East.function([def.from, emitType], NullType, ($, piece, emit) => {
|
|
106
123
|
const step = $.const(def.fn);
|
|
107
124
|
if (to.type !== 'Dict') {
|
|
108
125
|
$.for(piece, ($, element) => {
|
|
@@ -121,7 +138,7 @@ export function migrationProgram(def) {
|
|
|
121
138
|
});
|
|
122
139
|
}
|
|
123
140
|
return null;
|
|
124
|
-
})
|
|
141
|
+
}));
|
|
125
142
|
}
|
|
126
143
|
/**
|
|
127
144
|
* The delta's targets for a record: its own collection, then each index.
|
|
@@ -272,7 +289,7 @@ export function buildMutationProgram(rec, mut) {
|
|
|
272
289
|
if (mut.form !== 'patch' && mut.fn === undefined) {
|
|
273
290
|
throw new Error(`e3 mutation '${mut.name}' has no body to build its program from`);
|
|
274
291
|
}
|
|
275
|
-
return East.function([rec.type, ...argTypes, emitType], NullType, ($, ...params) => {
|
|
292
|
+
return locationFree(() => East.function([rec.type, ...argTypes, emitType], NullType, ($, ...params) => {
|
|
276
293
|
const state = params[0];
|
|
277
294
|
const emit = params[params.length - 1];
|
|
278
295
|
const args = params.slice(1, params.length - 1);
|
|
@@ -320,7 +337,7 @@ export function buildMutationProgram(rec, mut) {
|
|
|
320
337
|
});
|
|
321
338
|
});
|
|
322
339
|
return null;
|
|
323
|
-
})
|
|
340
|
+
}));
|
|
324
341
|
}
|
|
325
342
|
/**
|
|
326
343
|
* Runs an `edit` body against a capability that folds its writes, then resolves
|