@texaryn/core 0.4.0 → 0.5.0
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/CHANGELOG.md +6 -0
- package/README.md +9 -1
- package/dist/commands/handler.d.ts.map +1 -1
- package/dist/commands/handler.js +16 -8
- package/dist/commands/handler.js.map +1 -1
- package/dist/identity/index.d.ts +2 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +1 -0
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/key.d.ts +18 -0
- package/dist/identity/key.d.ts.map +1 -0
- package/dist/identity/key.js +7 -0
- package/dist/identity/key.js.map +1 -0
- package/dist/identity/map.d.ts +6 -5
- package/dist/identity/map.d.ts.map +1 -1
- package/dist/identity/map.js +14 -14
- package/dist/identity/map.js.map +1 -1
- package/dist/identity/reconcile.d.ts +3 -2
- package/dist/identity/reconcile.d.ts.map +1 -1
- package/dist/identity/reconcile.js +4 -4
- package/dist/identity/reconcile.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ir/compiler.d.ts.map +1 -1
- package/dist/ir/compiler.js +24 -9
- package/dist/ir/compiler.js.map +1 -1
- package/dist/ir/runtime-state.d.ts +3 -2
- package/dist/ir/runtime-state.d.ts.map +1 -1
- package/dist/ir/types.d.ts +3 -0
- package/dist/ir/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @texaryn/core
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8b20b6e: Array identity is keyed by an opaque `IdentityKey` for the logical container instead of the positional node id, exposed as `ArrayMeta.identityKey`. A nested array now keeps its `StableItemId`s when the row that contains it moves, or when a row is inserted or removed above it. `compile` returns identity for the arrays it visited only, so an array that leaves the document is minted afresh when it returns, and a compile that throws leaves the previous identity untouched. `registerArray`, `insertItem`, `removeItem`, `moveItem` and `reconcile` take an `IdentityKey` where they took a `NodeId`.
|
|
8
|
+
|
|
3
9
|
## 0.4.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -225,7 +225,11 @@ Framework packages can register concrete widget components without adding framew
|
|
|
225
225
|
|
|
226
226
|
## Stable array identity
|
|
227
227
|
|
|
228
|
-
The core includes identity helpers used to keep dynamic array items stable across inserts, removals, moves, and recompilation
|
|
228
|
+
The core includes identity helpers used to keep dynamic array items stable across inserts, removals, moves, and recompilation. Arrays are addressed by `ArrayMeta.identityKey`, an opaque key for the logical container that stays the same when rows above it move or change shape, so a nested array keeps its item identities when its parent row moves.
|
|
229
|
+
|
|
230
|
+
Identity follows structural edits: `InsertItem`, `RemoveItem` and `MoveItem` keep the ids of every item they do not touch, including the nested arrays inside a moved row. `Reset` is wholesale state replacement rather than a structural edit: it re-establishes identity by matching old and new items (by `ArrayMeta.itemKey` when set, otherwise by content), so the nested arrays under a row that changed position may be minted afresh.
|
|
231
|
+
|
|
232
|
+
The helpers:
|
|
229
233
|
|
|
230
234
|
- `createIdentityMap`
|
|
231
235
|
- `registerArray`
|
|
@@ -315,6 +319,10 @@ The core includes identity helpers used to keep dynamic array items stable acros
|
|
|
315
319
|
- `resolvePointer`
|
|
316
320
|
- `reconcile`
|
|
317
321
|
- `ReconcileOptions`
|
|
322
|
+
- `identityKey`
|
|
323
|
+
- `ROOT_IDENTITY_KEY`
|
|
324
|
+
- `IdentityKey`
|
|
325
|
+
- `IdentitySegment`
|
|
318
326
|
|
|
319
327
|
### Rendering
|
|
320
328
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAYxD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,GACnB,aAAa,CAiBf"}
|
package/dist/commands/handler.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { getAtPointer, setAtPointer } from '../json-pointer.js';
|
|
2
2
|
import { insertItem, removeItem, moveItem } from '../identity/map.js';
|
|
3
3
|
import { reconcile } from '../identity/reconcile.js';
|
|
4
|
+
/** Only an array container owns identity; anything else cannot be inserted into, removed from or reordered. */
|
|
5
|
+
function identityKeyOf(node) {
|
|
6
|
+
return node?.type === 'container' ? node.arrayMeta?.identityKey : undefined;
|
|
7
|
+
}
|
|
4
8
|
export function processCommand(state, command, document) {
|
|
5
9
|
switch (command.type) {
|
|
6
10
|
case 'SetValue':
|
|
@@ -43,14 +47,15 @@ function handleSetValue(state, cmd, document) {
|
|
|
43
47
|
}
|
|
44
48
|
function handleInsertItem(state, cmd, document) {
|
|
45
49
|
const container = document.nodes[cmd.containerId];
|
|
46
|
-
|
|
50
|
+
const key = identityKeyOf(container);
|
|
51
|
+
if (container?.dataPointer == null || key === undefined)
|
|
47
52
|
return { nextState: state, effects: [] };
|
|
48
53
|
const arr = getAtPointer(state.data, container.dataPointer) ?? [];
|
|
49
54
|
if (cmd.index < 0 || cmd.index > arr.length)
|
|
50
55
|
return { nextState: state, effects: [] };
|
|
51
56
|
const newArr = [...arr.slice(0, cmd.index), cmd.value ?? null, ...arr.slice(cmd.index)];
|
|
52
57
|
const newData = setAtPointer(state.data, container.dataPointer, newArr);
|
|
53
|
-
const { map: newIdentities } = insertItem(state.identities,
|
|
58
|
+
const { map: newIdentities } = insertItem(state.identities, key, cmd.index);
|
|
54
59
|
return {
|
|
55
60
|
nextState: { ...state, data: newData, identities: newIdentities },
|
|
56
61
|
effects: [
|
|
@@ -61,14 +66,15 @@ function handleInsertItem(state, cmd, document) {
|
|
|
61
66
|
}
|
|
62
67
|
function handleRemoveItem(state, cmd, document) {
|
|
63
68
|
const container = document.nodes[cmd.containerId];
|
|
64
|
-
|
|
69
|
+
const key = identityKeyOf(container);
|
|
70
|
+
if (container?.dataPointer == null || key === undefined)
|
|
65
71
|
return { nextState: state, effects: [] };
|
|
66
72
|
const arr = getAtPointer(state.data, container.dataPointer) ?? [];
|
|
67
73
|
if (cmd.index < 0 || cmd.index >= arr.length)
|
|
68
74
|
return { nextState: state, effects: [] };
|
|
69
75
|
const newArr = [...arr.slice(0, cmd.index), ...arr.slice(cmd.index + 1)];
|
|
70
76
|
const newData = setAtPointer(state.data, container.dataPointer, newArr);
|
|
71
|
-
const { map: newIdentities } = removeItem(state.identities,
|
|
77
|
+
const { map: newIdentities } = removeItem(state.identities, key, cmd.index);
|
|
72
78
|
return {
|
|
73
79
|
nextState: { ...state, data: newData, identities: newIdentities },
|
|
74
80
|
effects: [
|
|
@@ -79,7 +85,8 @@ function handleRemoveItem(state, cmd, document) {
|
|
|
79
85
|
}
|
|
80
86
|
function handleMoveItem(state, cmd, document) {
|
|
81
87
|
const container = document.nodes[cmd.containerId];
|
|
82
|
-
|
|
88
|
+
const key = identityKeyOf(container);
|
|
89
|
+
if (container?.dataPointer == null || key === undefined)
|
|
83
90
|
return { nextState: state, effects: [] };
|
|
84
91
|
const source = getAtPointer(state.data, container.dataPointer) ?? [];
|
|
85
92
|
if (cmd.from < 0 || cmd.from >= source.length || cmd.to < 0 || cmd.to >= source.length) {
|
|
@@ -89,7 +96,7 @@ function handleMoveItem(state, cmd, document) {
|
|
|
89
96
|
const [item] = arr.splice(cmd.from, 1);
|
|
90
97
|
arr.splice(cmd.to, 0, item);
|
|
91
98
|
const newData = setAtPointer(state.data, container.dataPointer, arr);
|
|
92
|
-
const newIdentities = moveItem(state.identities,
|
|
99
|
+
const newIdentities = moveItem(state.identities, key, cmd.from, cmd.to);
|
|
93
100
|
return {
|
|
94
101
|
nextState: { ...state, data: newData, identities: newIdentities },
|
|
95
102
|
effects: [
|
|
@@ -125,6 +132,7 @@ function handleSubmit(state) {
|
|
|
125
132
|
effects: [{ type: 'validate', nodeIds: allNodeIds, trigger: 'submit' }],
|
|
126
133
|
};
|
|
127
134
|
}
|
|
135
|
+
/** Reset replaces state wholesale: identity is re-matched, so nested arrays under a reordered row may be minted afresh. */
|
|
128
136
|
function handleReset(state, cmd, document) {
|
|
129
137
|
const newData = cmd.data ?? state.initialData;
|
|
130
138
|
const nodes = new Map();
|
|
@@ -139,12 +147,12 @@ function handleReset(state, cmd, document) {
|
|
|
139
147
|
for (const node of Object.values(document.nodes)) {
|
|
140
148
|
if (node.type !== 'container' || node.containerType !== 'array')
|
|
141
149
|
continue;
|
|
142
|
-
if (node.dataPointer == null)
|
|
150
|
+
if (node.dataPointer == null || node.arrayMeta === undefined)
|
|
143
151
|
continue;
|
|
144
152
|
const oldItems = getAtPointer(state.data, node.dataPointer);
|
|
145
153
|
const newItems = getAtPointer(newData, node.dataPointer);
|
|
146
154
|
if (Array.isArray(oldItems) && Array.isArray(newItems)) {
|
|
147
|
-
identities = reconcile(identities, node.
|
|
155
|
+
identities = reconcile(identities, node.arrayMeta.identityKey, oldItems, newItems, node.arrayMeta.itemKey ? { itemKey: node.arrayMeta.itemKey } : undefined);
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
158
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/identity/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { createIdentityMap, registerArray, insertItem, removeItem, moveItem, resolvePointer, } from './map.js';
|
|
2
2
|
export { reconcile } from './reconcile.js';
|
|
3
3
|
export type { ReconcileOptions } from './reconcile.js';
|
|
4
|
+
export { identityKey, ROOT_IDENTITY_KEY } from './key.js';
|
|
5
|
+
export type { IdentityKey, IdentitySegment } from './key.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,GACf,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,GACf,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACzD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/identity/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,GACf,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,GACf,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StableItemId } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Addresses a logical array container independently of position. Opaque to
|
|
4
|
+
* consumers: stable for the lifetime of that container, never to be parsed.
|
|
5
|
+
*/
|
|
6
|
+
export type IdentityKey = string & {
|
|
7
|
+
__brand: 'IdentityKey';
|
|
8
|
+
};
|
|
9
|
+
export type IdentitySegment = {
|
|
10
|
+
kind: 'property';
|
|
11
|
+
name: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'item';
|
|
14
|
+
id: StableItemId;
|
|
15
|
+
};
|
|
16
|
+
export declare const ROOT_IDENTITY_KEY: IdentityKey;
|
|
17
|
+
export declare function identityKey(segments: readonly IdentitySegment[]): IdentityKey;
|
|
18
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/identity/key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,CAAA;AAE7D,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,CAAA;AAEtC,eAAO,MAAM,iBAAiB,EAAS,WAAW,CAAA;AAElD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,WAAW,CAM7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/identity/key.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAiB,CAAA;AAElD,MAAM,UAAU,WAAW,CAAC,QAAoC;IAC9D,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,EAAE,CAC1F;SACA,IAAI,CAAC,GAAG,CAAgB,CAAA;AAC7B,CAAC"}
|
package/dist/identity/map.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StableItemId } from '../types.js';
|
|
2
|
+
import type { IdentityKey } from './key.js';
|
|
2
3
|
import type { IdentityMap } from '../ir/runtime-state.js';
|
|
3
4
|
export declare function createIdentityMap(): IdentityMap;
|
|
4
|
-
export declare function registerArray(map: IdentityMap,
|
|
5
|
-
export declare function insertItem(map: IdentityMap,
|
|
5
|
+
export declare function registerArray(map: IdentityMap, containerKey: IdentityKey): IdentityMap;
|
|
6
|
+
export declare function insertItem(map: IdentityMap, containerKey: IdentityKey, index: number): {
|
|
6
7
|
map: IdentityMap;
|
|
7
8
|
itemId: StableItemId;
|
|
8
9
|
};
|
|
9
|
-
export declare function removeItem(map: IdentityMap,
|
|
10
|
+
export declare function removeItem(map: IdentityMap, containerKey: IdentityKey, index: number): {
|
|
10
11
|
map: IdentityMap;
|
|
11
12
|
removedId: StableItemId;
|
|
12
13
|
};
|
|
13
|
-
export declare function moveItem(map: IdentityMap,
|
|
14
|
+
export declare function moveItem(map: IdentityMap, containerKey: IdentityKey, from: number, to: number): IdentityMap;
|
|
14
15
|
export declare function resolvePointer(map: IdentityMap, itemId: StableItemId): string;
|
|
15
16
|
//# sourceMappingURL=map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/identity/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/identity/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,wBAAgB,iBAAiB,IAAI,WAAW,CAM/C;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,WAAW,GACxB,WAAW,CAIb;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,WAAW,EACzB,KAAK,EAAE,MAAM,GACZ;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAiB5C;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,WAAW,EACzB,KAAK,EAAE,MAAM,GACZ;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAkB/C;AAED,wBAAgB,QAAQ,CACtB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,WAAW,EACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,WAAW,CAgBb;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,YAAY,GACnB,MAAM,CAIR"}
|
package/dist/identity/map.js
CHANGED
|
@@ -5,53 +5,53 @@ export function createIdentityMap() {
|
|
|
5
5
|
nextId: 0,
|
|
6
6
|
};
|
|
7
7
|
}
|
|
8
|
-
export function registerArray(map,
|
|
8
|
+
export function registerArray(map, containerKey) {
|
|
9
9
|
const arrayIdentities = new Map(map.arrayIdentities);
|
|
10
|
-
arrayIdentities.set(
|
|
10
|
+
arrayIdentities.set(containerKey, []);
|
|
11
11
|
return { ...map, arrayIdentities };
|
|
12
12
|
}
|
|
13
|
-
export function insertItem(map,
|
|
13
|
+
export function insertItem(map, containerKey, index) {
|
|
14
14
|
const itemId = `item_${map.nextId}`;
|
|
15
|
-
const ids = [...(map.arrayIdentities.get(
|
|
15
|
+
const ids = [...(map.arrayIdentities.get(containerKey) ?? [])];
|
|
16
16
|
ids.splice(index, 0, itemId);
|
|
17
17
|
const arrayIdentities = new Map(map.arrayIdentities);
|
|
18
|
-
arrayIdentities.set(
|
|
18
|
+
arrayIdentities.set(containerKey, ids);
|
|
19
19
|
const itemLookup = new Map(map.itemLookup);
|
|
20
20
|
for (let i = index; i < ids.length; i++) {
|
|
21
|
-
itemLookup.set(ids[i], {
|
|
21
|
+
itemLookup.set(ids[i], { containerKey, index: i });
|
|
22
22
|
}
|
|
23
23
|
return {
|
|
24
24
|
map: { ...map, arrayIdentities, itemLookup, nextId: map.nextId + 1 },
|
|
25
25
|
itemId,
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
export function removeItem(map,
|
|
29
|
-
const ids = [...(map.arrayIdentities.get(
|
|
28
|
+
export function removeItem(map, containerKey, index) {
|
|
29
|
+
const ids = [...(map.arrayIdentities.get(containerKey) ?? [])];
|
|
30
30
|
const removedId = ids[index];
|
|
31
31
|
ids.splice(index, 1);
|
|
32
32
|
const arrayIdentities = new Map(map.arrayIdentities);
|
|
33
|
-
arrayIdentities.set(
|
|
33
|
+
arrayIdentities.set(containerKey, ids);
|
|
34
34
|
const itemLookup = new Map(map.itemLookup);
|
|
35
35
|
itemLookup.delete(removedId);
|
|
36
36
|
for (let i = index; i < ids.length; i++) {
|
|
37
|
-
itemLookup.set(ids[i], {
|
|
37
|
+
itemLookup.set(ids[i], { containerKey, index: i });
|
|
38
38
|
}
|
|
39
39
|
return {
|
|
40
40
|
map: { ...map, arrayIdentities, itemLookup },
|
|
41
41
|
removedId,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
export function moveItem(map,
|
|
45
|
-
const ids = [...(map.arrayIdentities.get(
|
|
44
|
+
export function moveItem(map, containerKey, from, to) {
|
|
45
|
+
const ids = [...(map.arrayIdentities.get(containerKey) ?? [])];
|
|
46
46
|
const [item] = ids.splice(from, 1);
|
|
47
47
|
ids.splice(to, 0, item);
|
|
48
48
|
const arrayIdentities = new Map(map.arrayIdentities);
|
|
49
|
-
arrayIdentities.set(
|
|
49
|
+
arrayIdentities.set(containerKey, ids);
|
|
50
50
|
const itemLookup = new Map(map.itemLookup);
|
|
51
51
|
const lo = Math.min(from, to);
|
|
52
52
|
const hi = Math.max(from, to);
|
|
53
53
|
for (let i = lo; i <= hi; i++) {
|
|
54
|
-
itemLookup.set(ids[i], {
|
|
54
|
+
itemLookup.set(ids[i], { containerKey, index: i });
|
|
55
55
|
}
|
|
56
56
|
return { ...map, arrayIdentities, itemLookup };
|
|
57
57
|
}
|
package/dist/identity/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/identity/map.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/identity/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JsonPointer } from '../types.js';
|
|
2
|
+
import type { IdentityKey } from './key.js';
|
|
2
3
|
import type { IdentityMap } from '../ir/runtime-state.js';
|
|
3
4
|
export interface ReconcileOptions {
|
|
4
5
|
itemKey?: JsonPointer;
|
|
5
6
|
}
|
|
6
|
-
export declare function reconcile(map: IdentityMap,
|
|
7
|
+
export declare function reconcile(map: IdentityMap, containerKey: IdentityKey, oldItems: unknown[], newItems: unknown[], options?: ReconcileOptions): IdentityMap;
|
|
7
8
|
//# sourceMappingURL=reconcile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/identity/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/identity/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,WAAW,EACzB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CAwCb"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getAtPointer } from '../json-pointer.js';
|
|
2
|
-
export function reconcile(map,
|
|
3
|
-
const oldIds = map.arrayIdentities.get(
|
|
2
|
+
export function reconcile(map, containerKey, oldItems, newItems, options) {
|
|
3
|
+
const oldIds = map.arrayIdentities.get(containerKey) ?? [];
|
|
4
4
|
const matcher = options?.itemKey
|
|
5
5
|
? keyMatcher(options.itemKey)
|
|
6
6
|
: defaultMatcher;
|
|
@@ -26,14 +26,14 @@ export function reconcile(map, containerId, oldItems, newItems, options) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
const arrayIdentities = new Map(map.arrayIdentities);
|
|
29
|
-
arrayIdentities.set(
|
|
29
|
+
arrayIdentities.set(containerKey, newIds);
|
|
30
30
|
const itemLookup = new Map(map.itemLookup);
|
|
31
31
|
for (const oldId of oldIds) {
|
|
32
32
|
if (!newIds.includes(oldId))
|
|
33
33
|
itemLookup.delete(oldId);
|
|
34
34
|
}
|
|
35
35
|
for (let i = 0; i < newIds.length; i++) {
|
|
36
|
-
itemLookup.set(newIds[i], {
|
|
36
|
+
itemLookup.set(newIds[i], { containerKey, index: i });
|
|
37
37
|
}
|
|
38
38
|
return { ...map, arrayIdentities, itemLookup, nextId };
|
|
39
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/identity/reconcile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/identity/reconcile.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ export { processCommand } from './commands/index.js';
|
|
|
11
11
|
export type { FormRuntime, FormRuntimeOptions, NodeState } from './runtime/index.js';
|
|
12
12
|
export { createFormRuntime } from './runtime/index.js';
|
|
13
13
|
export { getAtPointer, setAtPointer, parsePointer } from './json-pointer.js';
|
|
14
|
-
export { createIdentityMap, registerArray, insertItem, removeItem, moveItem, resolvePointer, reconcile, } from './identity/index.js';
|
|
15
|
-
export type { ReconcileOptions } from './identity/index.js';
|
|
14
|
+
export { createIdentityMap, registerArray, insertItem, removeItem, moveItem, resolvePointer, reconcile, identityKey, ROOT_IDENTITY_KEY, } from './identity/index.js';
|
|
15
|
+
export type { ReconcileOptions, IdentityKey, IdentitySegment } from './identity/index.js';
|
|
16
16
|
export type { WidgetTester, WidgetEntry, RendererRegistry } from './renderer/index.js';
|
|
17
17
|
export { createRendererRegistry } from './renderer/index.js';
|
|
18
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEzF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,6 @@ export { createStore } from './state/index.js';
|
|
|
3
3
|
export { processCommand } from './commands/index.js';
|
|
4
4
|
export { createFormRuntime } from './runtime/index.js';
|
|
5
5
|
export { getAtPointer, setAtPointer, parsePointer } from './json-pointer.js';
|
|
6
|
-
export { createIdentityMap, registerArray, insertItem, removeItem, moveItem, resolvePointer, reconcile, } from './identity/index.js';
|
|
6
|
+
export { createIdentityMap, registerArray, insertItem, removeItem, moveItem, resolvePointer, reconcile, identityKey, ROOT_IDENTITY_KEY, } from './identity/index.js';
|
|
7
7
|
export { createRendererRegistry } from './renderer/index.js';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAavC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAavC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/ir/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAA0B,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/ir/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAA0B,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA0BrD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,OAAO,EACb,KAAK,CAAC,EAAE,OAAO,EACf,UAAU,CAAC,EAAE,WAAW,GACvB,aAAa,CA2Bf"}
|
package/dist/ir/compiler.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createIdentityMap, registerArray, insertItem } from '../identity/index.js';
|
|
2
|
+
import { identityKey } from '../identity/key.js';
|
|
2
3
|
import { getAtPointer } from '../json-pointer.js';
|
|
3
4
|
function nextId(ctx) {
|
|
4
5
|
return `node_${++ctx.nodeCounter}`;
|
|
@@ -22,14 +23,25 @@ export function compile(projection, data, hints, identities) {
|
|
|
22
23
|
if (!rootProjection) {
|
|
23
24
|
throw new Error('Schema projection missing root node');
|
|
24
25
|
}
|
|
25
|
-
const ctx = { nodes, identityMap, nodeCounter: 0 };
|
|
26
|
-
const rootId = compileNode('', rootProjection, null, 0, projection, data, hints, ctx);
|
|
26
|
+
const ctx = { nodes, identityMap, nodeCounter: 0, visited: new Set() };
|
|
27
|
+
const rootId = compileNode('', rootProjection, null, 0, projection, data, hints, ctx, undefined, []);
|
|
27
28
|
return {
|
|
28
29
|
document: { version: 1, rootId, nodes },
|
|
29
|
-
identityMap: ctx.identityMap,
|
|
30
|
+
identityMap: retainVisited(ctx.identityMap, ctx.visited),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Only the arrays this compile visited keep identity. An array whose pointer
|
|
35
|
+
* left the document starts fresh when it returns, and because this builds a
|
|
36
|
+
* new map rather than editing the input, a compile that throws leaves the
|
|
37
|
+
* previous state untouched.
|
|
38
|
+
*/
|
|
39
|
+
function retainVisited(map, visited) {
|
|
40
|
+
const arrayIdentities = new Map([...map.arrayIdentities].filter(([key]) => visited.has(key)));
|
|
41
|
+
const itemLookup = new Map([...map.itemLookup].filter(([, entry]) => visited.has(entry.containerKey)));
|
|
42
|
+
return { ...map, arrayIdentities, itemLookup };
|
|
43
|
+
}
|
|
44
|
+
function compileNode(pointer, proj, parentId, order, projection, data, hints, ctx, required, segments) {
|
|
33
45
|
const { nodes } = ctx;
|
|
34
46
|
const id = nextId(ctx);
|
|
35
47
|
const fieldHints = hints?.[pointer];
|
|
@@ -62,7 +74,7 @@ function compileNode(pointer, proj, parentId, order, projection, data, hints, ct
|
|
|
62
74
|
const child = ordered[i].child;
|
|
63
75
|
const childProj = projection.nodes.get(child.pointer);
|
|
64
76
|
if (childProj) {
|
|
65
|
-
const childId = compileNode(child.pointer, childProj, id, i, projection, data, hints, ctx, child.required);
|
|
77
|
+
const childId = compileNode(child.pointer, childProj, id, i, projection, data, hints, ctx, child.required, [...segments, { kind: 'property', name: child.key }]);
|
|
66
78
|
children.push(childId);
|
|
67
79
|
}
|
|
68
80
|
}
|
|
@@ -94,7 +106,9 @@ function compileNode(pointer, proj, parentId, order, projection, data, hints, ct
|
|
|
94
106
|
//
|
|
95
107
|
// Identity map API is pure: register/insert return new maps, so we always
|
|
96
108
|
// reassign ctx.identityMap rather than mutate in place.
|
|
97
|
-
const
|
|
109
|
+
const key = identityKey(segments);
|
|
110
|
+
ctx.visited.add(key);
|
|
111
|
+
const carried = ctx.identityMap.arrayIdentities.get(key);
|
|
98
112
|
let itemStableIds;
|
|
99
113
|
if (carried !== undefined && carried.length === arrayItems.length) {
|
|
100
114
|
itemStableIds = [...carried];
|
|
@@ -104,10 +118,10 @@ function compileNode(pointer, proj, parentId, order, projection, data, hints, ct
|
|
|
104
118
|
// produce. Minting positional ids is right for a first compile and is
|
|
105
119
|
// the only safe fallback otherwise: reconciling here would be a second
|
|
106
120
|
// identity system competing with the handler's.
|
|
107
|
-
ctx.identityMap = registerArray(ctx.identityMap,
|
|
121
|
+
ctx.identityMap = registerArray(ctx.identityMap, key);
|
|
108
122
|
itemStableIds = [];
|
|
109
123
|
for (let i = 0; i < arrayItems.length; i++) {
|
|
110
|
-
const result = insertItem(ctx.identityMap,
|
|
124
|
+
const result = insertItem(ctx.identityMap, key, i);
|
|
111
125
|
ctx.identityMap = result.map;
|
|
112
126
|
itemStableIds.push(result.itemId);
|
|
113
127
|
}
|
|
@@ -116,13 +130,14 @@ function compileNode(pointer, proj, parentId, order, projection, data, hints, ct
|
|
|
116
130
|
const itemPointer = `${pointer}/${i}`;
|
|
117
131
|
const itemProj = projection.nodes.get(itemPointer);
|
|
118
132
|
if (itemProj) {
|
|
119
|
-
const childId = compileNode(itemPointer, itemProj, id, i, projection, data, hints, ctx, false);
|
|
133
|
+
const childId = compileNode(itemPointer, itemProj, id, i, projection, data, hints, ctx, false, [...segments, { kind: 'item', id: itemStableIds[i] }]);
|
|
120
134
|
children.push(childId);
|
|
121
135
|
}
|
|
122
136
|
}
|
|
123
137
|
const arrayHints = hints?.[pointer];
|
|
124
138
|
const arrayMeta = {
|
|
125
139
|
itemIds: itemStableIds,
|
|
140
|
+
identityKey: key,
|
|
126
141
|
itemKey: arrayHints?.itemKey,
|
|
127
142
|
minItems: proj.constraints.minItems,
|
|
128
143
|
maxItems: proj.constraints.maxItems,
|
package/dist/ir/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/ir/compiler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/ir/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { NodeId, StableItemId, ValidationError } from '../types.js';
|
|
2
|
+
import type { IdentityKey } from '../identity/key.js';
|
|
2
3
|
export interface RuntimeState {
|
|
3
4
|
data: unknown;
|
|
4
5
|
initialData: unknown;
|
|
@@ -28,9 +29,9 @@ export interface SubmissionState {
|
|
|
28
29
|
attempts: number;
|
|
29
30
|
}
|
|
30
31
|
export interface IdentityMap {
|
|
31
|
-
arrayIdentities: Map<
|
|
32
|
+
arrayIdentities: Map<IdentityKey, StableItemId[]>;
|
|
32
33
|
itemLookup: Map<StableItemId, {
|
|
33
|
-
|
|
34
|
+
containerKey: IdentityKey;
|
|
34
35
|
index: number;
|
|
35
36
|
}>;
|
|
36
37
|
nextId: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/ir/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/ir/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACpC,UAAU,EAAE,WAAW,CAAA;IACvB,UAAU,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,WAAW,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAChD,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAAA;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uIAAuI;IACvI,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;IACjD,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE;QAAE,YAAY,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,MAAM,EAAE,MAAM,CAAA;CACf"}
|
package/dist/ir/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { NodeId, StableItemId, JsonPointer } from '../types.js';
|
|
2
|
+
import type { IdentityKey } from '../identity/key.js';
|
|
2
3
|
export interface UIDocument {
|
|
3
4
|
version: 1;
|
|
4
5
|
rootId: NodeId;
|
|
@@ -61,6 +62,8 @@ export interface ContainerNode extends NodeBase {
|
|
|
61
62
|
}
|
|
62
63
|
export interface ArrayMeta {
|
|
63
64
|
itemIds: StableItemId[];
|
|
65
|
+
/** Addresses this logical array container across recompiles; stable for its lifetime and otherwise opaque. */
|
|
66
|
+
identityKey: IdentityKey;
|
|
64
67
|
itemKey?: JsonPointer;
|
|
65
68
|
minItems?: number;
|
|
66
69
|
maxItems?: number;
|
package/dist/ir/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"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"}
|