@adobe/data 0.9.81 → 0.9.83
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/ecs/archetype/archetype.d.ts +23 -0
- package/dist/ecs/archetype/archetype.js.map +1 -1
- package/dist/ecs/database/create-plugin.d.ts +2 -1
- package/dist/ecs/database/create-plugin.js.map +1 -1
- package/dist/ecs/database/database-read.type-test.js +25 -0
- package/dist/ecs/database/database-read.type-test.js.map +1 -1
- package/dist/ecs/database/database.d.ts +26 -7
- package/dist/ecs/database/database.js.map +1 -1
- package/dist/ecs/database/database.partition.test.d.ts +1 -0
- package/dist/ecs/database/database.partition.test.js +45 -0
- package/dist/ecs/database/database.partition.test.js.map +1 -0
- package/dist/ecs/database/database.partition.type-test.d.ts +1 -0
- package/dist/ecs/database/database.partition.type-test.js +41 -0
- package/dist/ecs/database/database.partition.type-test.js.map +1 -0
- package/dist/ecs/database/deep-extends-chain.type-test.d.ts +255 -255
- package/dist/ecs/database/index.d.ts +0 -1
- package/dist/ecs/database/index.js +0 -1
- package/dist/ecs/database/index.js.map +1 -1
- package/dist/ecs/database/observe-derive.d.ts +4 -1
- package/dist/ecs/database/observe-derive.js +66 -35
- package/dist/ecs/database/observe-derive.js.map +1 -1
- package/dist/ecs/database/observe-derive.test.js +124 -0
- package/dist/ecs/database/observe-derive.test.js.map +1 -1
- package/dist/ecs/database/observed/observed-database.d.ts +3 -0
- package/dist/ecs/database/transactional-store/transactional-store.d.ts +6 -5
- package/dist/ecs/store/core/core.d.ts +33 -8
- package/dist/ecs/store/core/create-core.d.ts +12 -2
- package/dist/ecs/store/core/create-core.js +141 -22
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/create-core.partition.test.d.ts +1 -0
- package/dist/ecs/store/core/create-core.partition.test.js +229 -0
- package/dist/ecs/store/core/create-core.partition.test.js.map +1 -0
- package/dist/ecs/store/core/select-entities.js +87 -21
- package/dist/ecs/store/core/select-entities.js.map +1 -1
- package/dist/ecs/store/core/select-entities.partition.test.d.ts +1 -0
- package/dist/ecs/store/core/select-entities.partition.test.js +93 -0
- package/dist/ecs/store/core/select-entities.partition.test.js.map +1 -0
- package/dist/ecs/store/entity-select-options.d.ts +5 -1
- package/dist/ecs/store/partition.d.ts +63 -0
- package/dist/ecs/store/partition.js +3 -0
- package/dist/ecs/store/partition.js.map +1 -0
- package/dist/ecs/store/partition.type-test.d.ts +1 -0
- package/dist/ecs/store/partition.type-test.js +15 -0
- package/dist/ecs/store/partition.type-test.js.map +1 -0
- package/dist/ecs/store/public/create-store.d.ts +3 -1
- package/dist/ecs/store/public/create-store.js +19 -50
- package/dist/ecs/store/public/create-store.js.map +1 -1
- package/dist/ecs/store/public/create-store.partition.test.d.ts +1 -0
- package/dist/ecs/store/public/create-store.partition.test.js +111 -0
- package/dist/ecs/store/public/create-store.partition.test.js.map +1 -0
- package/dist/ecs/store/public/create-store.partition.type-test.d.ts +1 -0
- package/dist/ecs/store/public/create-store.partition.type-test.js +61 -0
- package/dist/ecs/store/public/create-store.partition.type-test.js.map +1 -0
- package/dist/ecs/store/store.d.ts +15 -10
- package/dist/ecs/store/store.js.map +1 -1
- package/dist/ecs/store/transaction-functions.d.ts +3 -3
- package/dist/schema/schema.d.ts +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
|
@@ -15,7 +15,15 @@ import { True } from "../../../schema/true/index.js";
|
|
|
15
15
|
* changes in a way older readers cannot load.
|
|
16
16
|
*/
|
|
17
17
|
export const ECS_SNAPSHOT_VERSION = 1;
|
|
18
|
-
export function createCore(newComponentSchemas
|
|
18
|
+
export function createCore(newComponentSchemas,
|
|
19
|
+
/**
|
|
20
|
+
* Called once, right after each archetype is created (direct or lazily as a
|
|
21
|
+
* partition value-child). The Store layer uses it to decorate the
|
|
22
|
+
* archetype's `insert` in place with index maintenance — so every write
|
|
23
|
+
* path (direct insert, router routing, migration target) shares one
|
|
24
|
+
* maintained insert with no wrapper or Proxy indirection.
|
|
25
|
+
*/
|
|
26
|
+
onArchetypeCreated) {
|
|
19
27
|
const componentSchemas = {
|
|
20
28
|
id: Entity.schema,
|
|
21
29
|
nonPersistent: True.schema,
|
|
@@ -25,47 +33,126 @@ export function createCore(newComponentSchemas) {
|
|
|
25
33
|
const nonPersistentLocationTable = createEntityLocationTable(16, true);
|
|
26
34
|
const getLocationTable = (entity) => entity < 0 ? nonPersistentLocationTable : persistentLocationTable;
|
|
27
35
|
const archetypes = [];
|
|
36
|
+
// A component declared `partition: true`: every distinct runtime value gets
|
|
37
|
+
// its own archetype whose column for that component is a const buffer (zero
|
|
38
|
+
// per-row bytes). Read from the *live* component schema so components added
|
|
39
|
+
// after createCore (via the Store layer's `extend`) are detected too. Cost
|
|
40
|
+
// is only paid when *resolving* an archetype (an O(names) scan) — never on
|
|
41
|
+
// the per-row insert hot path, which goes straight to a concrete archetype.
|
|
42
|
+
const isPartition = (name) => componentSchemas[name]?.partition === true;
|
|
43
|
+
// Identity → archetype. Replaces the former linear scan (O(archetypes) per
|
|
44
|
+
// resolve) with an O(1) lookup, and — for partition components — folds the
|
|
45
|
+
// per-archetype const value into the key so value-children are distinct.
|
|
46
|
+
const archetypeByIdentity = new Map();
|
|
47
|
+
const partitionNamesIn = (sortedNames) => sortedNames.filter(isPartition);
|
|
48
|
+
const identityKey = (sortedNames, partitionValues, partitionNames) => {
|
|
49
|
+
const base = sortedNames.join(",");
|
|
50
|
+
if (partitionNames.length === 0)
|
|
51
|
+
return base;
|
|
52
|
+
// `typeof` tag guards "1"(number) vs "1"(string) collisions.
|
|
53
|
+
const vals = partitionNames
|
|
54
|
+
.map((n) => `${n}=${typeof partitionValues[n]}:${String(partitionValues[n])}`)
|
|
55
|
+
.join(",");
|
|
56
|
+
return `${base}|${vals}`;
|
|
57
|
+
};
|
|
28
58
|
const queryArchetypes = (include, options) => {
|
|
29
59
|
const includeArray = Array.from(include);
|
|
60
|
+
const where = options?.where;
|
|
30
61
|
const results = [];
|
|
31
62
|
for (const archetype of archetypes) {
|
|
32
63
|
const hasAllRequired = includeArray.every(comp => archetype.columns[comp] !== undefined);
|
|
33
64
|
const hasNoExcluded = !options?.exclude || options.exclude.every(comp => archetype.columns[comp] === undefined);
|
|
34
|
-
|
|
65
|
+
// Partition `where`: a partition column is const per archetype, so a
|
|
66
|
+
// value filter is decidable at archetype granularity (O(archetypes),
|
|
67
|
+
// no row scan). Read the const via get(0) — valid even at rowCount 0.
|
|
68
|
+
let matchesWhere = true;
|
|
69
|
+
if (where) {
|
|
70
|
+
for (const key in where) {
|
|
71
|
+
const column = archetype.columns[key];
|
|
72
|
+
if (column === undefined || column.get(0) !== where[key]) {
|
|
73
|
+
matchesWhere = false;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (hasAllRequired && hasNoExcluded && matchesWhere) {
|
|
35
79
|
results.push(archetype);
|
|
36
80
|
}
|
|
37
81
|
}
|
|
38
82
|
return results;
|
|
39
83
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
84
|
+
// Concrete archetype for exactly `componentNames`, resolved by identity and
|
|
85
|
+
// created on first use. A partition component in the set requires its value
|
|
86
|
+
// in `partitionValues`; that value is baked into the column schema as
|
|
87
|
+
// `const`, so the column is a zero-per-row const buffer. This is the single
|
|
88
|
+
// internal primitive behind ensureArchetype, the router, migration, and
|
|
89
|
+
// restore — the *only* place archetypes are created.
|
|
90
|
+
const resolveArchetype = (componentNames, partitionValues) => {
|
|
91
|
+
const namesArr = Array.from(componentNames);
|
|
92
|
+
const sorted = namesArr.slice().sort();
|
|
93
|
+
const partitionNames = partitionNamesIn(sorted);
|
|
94
|
+
for (const n of partitionNames) {
|
|
95
|
+
if (partitionValues?.[n] === undefined) {
|
|
96
|
+
throw new Error(`partition component '${n}' requires a value to resolve a concrete archetype`);
|
|
47
97
|
}
|
|
48
98
|
}
|
|
99
|
+
const key = identityKey(sorted, partitionValues, partitionNames);
|
|
100
|
+
const existing = archetypeByIdentity.get(key);
|
|
101
|
+
if (existing)
|
|
102
|
+
return existing;
|
|
49
103
|
const id = archetypes.length;
|
|
50
104
|
const archetypeComponentSchemas = {};
|
|
51
105
|
let hasId = false;
|
|
52
106
|
let isNonPersistent = false;
|
|
53
|
-
for (const comp of
|
|
54
|
-
if (comp === "id")
|
|
107
|
+
for (const comp of namesArr) {
|
|
108
|
+
if (comp === "id")
|
|
55
109
|
hasId = true;
|
|
56
|
-
|
|
57
|
-
if (comp === "nonPersistent") {
|
|
110
|
+
if (comp === "nonPersistent")
|
|
58
111
|
isNonPersistent = true;
|
|
59
|
-
|
|
60
|
-
archetypeComponentSchemas[comp] =
|
|
112
|
+
const base = componentSchemas[comp];
|
|
113
|
+
archetypeComponentSchemas[comp] = isPartition(comp)
|
|
114
|
+
? { ...base, const: partitionValues[comp] }
|
|
115
|
+
: base;
|
|
61
116
|
}
|
|
62
117
|
if (!hasId) {
|
|
63
118
|
throw new Error("id is required");
|
|
64
119
|
}
|
|
65
120
|
const archetype = ARCHETYPE.createArchetype(archetypeComponentSchemas, id, isNonPersistent ? nonPersistentLocationTable : persistentLocationTable);
|
|
66
121
|
archetypes.push(archetype);
|
|
122
|
+
archetypeByIdentity.set(key, archetype);
|
|
123
|
+
onArchetypeCreated?.(archetype);
|
|
67
124
|
return archetype;
|
|
68
125
|
};
|
|
126
|
+
// Write-only handle over a partition family: reads the partition value(s)
|
|
127
|
+
// from each row, resolves (creating on first use) the concrete child, and
|
|
128
|
+
// inserts there. Its `insert` is the by-keys routing inserter.
|
|
129
|
+
const makeRouter = (componentNames) => {
|
|
130
|
+
const namesArr = Array.from(componentNames);
|
|
131
|
+
const partitionNames = partitionNamesIn(namesArr.slice().sort());
|
|
132
|
+
const partitionValuesOf = (rowData) => {
|
|
133
|
+
const values = {};
|
|
134
|
+
for (const n of partitionNames)
|
|
135
|
+
values[n] = rowData[n];
|
|
136
|
+
return values;
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
components: new Set(namesArr),
|
|
140
|
+
// Routes to the concrete child and calls its `insert`. When the Store
|
|
141
|
+
// layer has decorated inserts with index maintenance (via
|
|
142
|
+
// onArchetypeCreated), the child's `insert` is already the maintained
|
|
143
|
+
// one — so routing needs no special-casing at the Store layer.
|
|
144
|
+
insert: (rowData) => resolveArchetype(namesArr, partitionValuesOf(rowData)).insert(rowData),
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
const ensureArchetype = ((componentNames, partitionValues) => {
|
|
148
|
+
if (partitionValues === undefined) {
|
|
149
|
+
const namesArr = Array.from(componentNames);
|
|
150
|
+
if (namesArr.some(isPartition)) {
|
|
151
|
+
return makeRouter(componentNames);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return resolveArchetype(componentNames, partitionValues);
|
|
155
|
+
});
|
|
69
156
|
const locateInternal = (entity) => {
|
|
70
157
|
return (entity < 0 ? nonPersistentLocationTable : persistentLocationTable).locate(entity);
|
|
71
158
|
};
|
|
@@ -131,7 +218,18 @@ export function createCore(newComponentSchemas) {
|
|
|
131
218
|
(addComponents ??= []).push(key);
|
|
132
219
|
}
|
|
133
220
|
}
|
|
134
|
-
|
|
221
|
+
// A partition value change migrates the entity to a different child
|
|
222
|
+
// archetype even when the component *set* is unchanged, because the
|
|
223
|
+
// partition value is part of archetype identity.
|
|
224
|
+
let partitionValueChanged = false;
|
|
225
|
+
for (const key in components) {
|
|
226
|
+
if (isPartition(key) && currentArchetype.components.has(key)) {
|
|
227
|
+
if (components[key] !== currentArchetype.columns[key].get(currentLocation.row)) {
|
|
228
|
+
partitionValueChanged = true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (addComponents || removeComponents || partitionValueChanged) {
|
|
135
233
|
// currently changing archetype requires a set, but later we should have an edge map for better performance
|
|
136
234
|
// Alternatively we can have a faster path using addComponent and deleteComponent.
|
|
137
235
|
const newComponents = new Set(currentArchetype.components);
|
|
@@ -145,7 +243,19 @@ export function createCore(newComponentSchemas) {
|
|
|
145
243
|
newComponents.delete(comp);
|
|
146
244
|
}
|
|
147
245
|
}
|
|
148
|
-
|
|
246
|
+
// Target child's partition values: the updated value where provided,
|
|
247
|
+
// else the entity's current (const) value.
|
|
248
|
+
let newPartitionValues;
|
|
249
|
+
const targetPartitionNames = partitionNamesIn([...newComponents].sort());
|
|
250
|
+
if (targetPartitionNames.length > 0) {
|
|
251
|
+
newPartitionValues = {};
|
|
252
|
+
for (const n of targetPartitionNames) {
|
|
253
|
+
newPartitionValues[n] = (n in components)
|
|
254
|
+
? components[n]
|
|
255
|
+
: currentArchetype.columns[n]?.get(currentLocation.row);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
newArchetype = resolveArchetype(newComponents, newPartitionValues);
|
|
149
259
|
}
|
|
150
260
|
if (newArchetype !== currentArchetype) {
|
|
151
261
|
// create a new row in the new archetype
|
|
@@ -208,9 +318,16 @@ export function createCore(newComponentSchemas) {
|
|
|
208
318
|
// reproduced on load. Only persistent archetypes carry `data`;
|
|
209
319
|
// nonPersistent ones back the negative-ID space, whose location
|
|
210
320
|
// table is never serialized, so their rows aren't persistent.
|
|
211
|
-
archetypesData: archetypes.map((archetype) =>
|
|
212
|
-
|
|
213
|
-
|
|
321
|
+
archetypesData: archetypes.map((archetype) => {
|
|
322
|
+
const componentNames = [...archetype.components];
|
|
323
|
+
const partitionNames = partitionNamesIn(componentNames.slice().sort());
|
|
324
|
+
const partitionValues = partitionNames.length > 0
|
|
325
|
+
? Object.fromEntries(partitionNames.map((n) => [n, archetype.columns[n].get(0)]))
|
|
326
|
+
: undefined;
|
|
327
|
+
return archetype.components.has("nonPersistent")
|
|
328
|
+
? { componentNames, partitionValues }
|
|
329
|
+
: { componentNames, partitionValues, data: archetype.toData(copy) };
|
|
330
|
+
})
|
|
214
331
|
}),
|
|
215
332
|
fromData: (data) => {
|
|
216
333
|
if (data.version !== ECS_SNAPSHOT_VERSION) {
|
|
@@ -236,10 +353,12 @@ export function createCore(newComponentSchemas) {
|
|
|
236
353
|
}
|
|
237
354
|
}
|
|
238
355
|
persistentLocationTable.fromData(data.entityLocationTableData);
|
|
239
|
-
for (const { componentNames, data: archetypeData } of data.archetypesData) {
|
|
356
|
+
for (const { componentNames, partitionValues, data: archetypeData } of data.archetypesData) {
|
|
240
357
|
// Recreating the archetype reserves its id and leaves it
|
|
241
358
|
// empty; only persistent entries carry data to restore.
|
|
242
|
-
|
|
359
|
+
// resolveArchetype (not the public ensureArchetype) so a
|
|
360
|
+
// partition archetype restores as its concrete value-child.
|
|
361
|
+
const archetype = resolveArchetype(componentNames, partitionValues);
|
|
243
362
|
if (archetypeData !== undefined) {
|
|
244
363
|
archetype.fromData(archetypeData);
|
|
245
364
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-core.js","sourceRoot":"","sources":["../../../../src/ecs/store/core/create-core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-core.js","sourceRoot":"","sources":["../../../../src/ecs/store/core/create-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { createCore } from "./create-core.js";
|
|
4
|
+
import { constBufferType } from "../../../typed-buffer/create-const-buffer.js";
|
|
5
|
+
const positionSchema = {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: { x: { type: "number" }, y: { type: "number" } },
|
|
8
|
+
};
|
|
9
|
+
// A partition component: every distinct `cell` value gets its own archetype.
|
|
10
|
+
const cellSchema = { type: "integer", partition: true };
|
|
11
|
+
const makeCore = () => createCore({ cell: cellSchema, position: positionSchema });
|
|
12
|
+
describe("partition components", () => {
|
|
13
|
+
describe("ensureArchetype return discrimination", () => {
|
|
14
|
+
it("returns a Router (no dense view) when a partition key is present without a value", () => {
|
|
15
|
+
const core = makeCore();
|
|
16
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
17
|
+
expect(typeof router.insert).toBe("function");
|
|
18
|
+
// A family has no single dense column view. `in` (not a cast) — the
|
|
19
|
+
// Router type has no such members, so probe presence structurally.
|
|
20
|
+
expect("columns" in router).toBe(false);
|
|
21
|
+
expect("rowCount" in router).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
it("returns a concrete Archetype when the partition value is supplied", () => {
|
|
24
|
+
const core = makeCore();
|
|
25
|
+
const arch = core.ensureArchetype(["id", "cell", "position"], { cell: 7 });
|
|
26
|
+
expect(arch.columns).toBeDefined();
|
|
27
|
+
expect(arch.rowCount).toBe(0);
|
|
28
|
+
});
|
|
29
|
+
it("returns a concrete Archetype (not a Router) when no partition component is in the set", () => {
|
|
30
|
+
const core = makeCore();
|
|
31
|
+
const arch = core.ensureArchetype(["id", "position"]);
|
|
32
|
+
expect(arch.columns).toBeDefined();
|
|
33
|
+
expect(typeof arch.insert).toBe("function");
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("routing insert", () => {
|
|
37
|
+
it("routes rows with distinct partition values into distinct archetypes", () => {
|
|
38
|
+
const core = makeCore();
|
|
39
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
40
|
+
const a = router.insert({ cell: 1, position: { x: 1, y: 1 } });
|
|
41
|
+
const b = router.insert({ cell: 2, position: { x: 2, y: 2 } });
|
|
42
|
+
const c = router.insert({ cell: 1, position: { x: 3, y: 3 } });
|
|
43
|
+
const cell1 = core.ensureArchetype(["id", "cell", "position"], { cell: 1 });
|
|
44
|
+
const cell2 = core.ensureArchetype(["id", "cell", "position"], { cell: 2 });
|
|
45
|
+
// Same value → same archetype; different value → different archetype.
|
|
46
|
+
expect(cell1).not.toBe(cell2);
|
|
47
|
+
expect(cell1.rowCount).toBe(2); // a and c
|
|
48
|
+
expect(cell2.rowCount).toBe(1); // b
|
|
49
|
+
expect(core.locate(a).archetype).toBe(cell1);
|
|
50
|
+
expect(core.locate(c).archetype).toBe(cell1);
|
|
51
|
+
expect(core.locate(b).archetype).toBe(cell2);
|
|
52
|
+
});
|
|
53
|
+
it("stores the partition value as a const column (zero per-row bytes)", () => {
|
|
54
|
+
const core = makeCore();
|
|
55
|
+
core.ensureArchetype(["id", "cell", "position"]).insert({ cell: 42, position: { x: 0, y: 0 } });
|
|
56
|
+
const arch = core.ensureArchetype(["id", "cell", "position"], { cell: 42 });
|
|
57
|
+
expect(arch.columns.cell.type).toBe(constBufferType);
|
|
58
|
+
expect(arch.columns.cell.typedArrayElementSizeInBytes).toBe(0);
|
|
59
|
+
expect(arch.columns.cell.get(0)).toBe(42);
|
|
60
|
+
});
|
|
61
|
+
it("reads the routed partition value back through the entity", () => {
|
|
62
|
+
const core = makeCore();
|
|
63
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
64
|
+
const e = router.insert({ cell: 9, position: { x: 5, y: 6 } });
|
|
65
|
+
expect(core.get(e, "cell")).toBe(9);
|
|
66
|
+
expect(core.read(e)).toMatchObject({ cell: 9, position: { x: 5, y: 6 } });
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe("queryArchetypes", () => {
|
|
70
|
+
it("returns every value-child of a partitioned component set", () => {
|
|
71
|
+
const core = makeCore();
|
|
72
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
73
|
+
router.insert({ cell: 1, position: { x: 0, y: 0 } });
|
|
74
|
+
router.insert({ cell: 2, position: { x: 0, y: 0 } });
|
|
75
|
+
router.insert({ cell: 3, position: { x: 0, y: 0 } });
|
|
76
|
+
const all = core.queryArchetypes(["cell", "position"]);
|
|
77
|
+
expect(all.length).toBe(3);
|
|
78
|
+
});
|
|
79
|
+
it("filters to a single value-child with a partition `where` (broad phase)", () => {
|
|
80
|
+
const core = makeCore();
|
|
81
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
82
|
+
router.insert({ cell: 1, position: { x: 0, y: 0 } });
|
|
83
|
+
router.insert({ cell: 2, position: { x: 0, y: 0 } });
|
|
84
|
+
router.insert({ cell: 2, position: { x: 0, y: 0 } });
|
|
85
|
+
const cell2 = core.queryArchetypes(["cell", "position"], { where: { cell: 2 } });
|
|
86
|
+
expect(cell2.length).toBe(1);
|
|
87
|
+
expect(cell2[0].columns.cell.get(0)).toBe(2);
|
|
88
|
+
expect(cell2[0].rowCount).toBe(2);
|
|
89
|
+
const none = core.queryArchetypes(["cell", "position"], { where: { cell: 99 } });
|
|
90
|
+
expect(none.length).toBe(0);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe("update migration", () => {
|
|
94
|
+
it("migrates an entity to a new value-child when its partition value changes", () => {
|
|
95
|
+
const core = makeCore();
|
|
96
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
97
|
+
const e = router.insert({ cell: 1, position: { x: 7, y: 8 } });
|
|
98
|
+
const cell1 = core.ensureArchetype(["id", "cell", "position"], { cell: 1 });
|
|
99
|
+
const cell2 = core.ensureArchetype(["id", "cell", "position"], { cell: 2 });
|
|
100
|
+
expect(cell1.rowCount).toBe(1);
|
|
101
|
+
expect(cell2.rowCount).toBe(0);
|
|
102
|
+
core.update(e, { cell: 2 });
|
|
103
|
+
// Same entity id, moved archetype, position preserved.
|
|
104
|
+
expect(core.locate(e).archetype).toBe(cell2);
|
|
105
|
+
expect(cell1.rowCount).toBe(0);
|
|
106
|
+
expect(cell2.rowCount).toBe(1);
|
|
107
|
+
expect(core.get(e, "cell")).toBe(2);
|
|
108
|
+
expect(core.read(e)).toMatchObject({ cell: 2, position: { x: 7, y: 8 } });
|
|
109
|
+
});
|
|
110
|
+
it("does not migrate when a non-partition field changes", () => {
|
|
111
|
+
const core = makeCore();
|
|
112
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
113
|
+
const e = router.insert({ cell: 5, position: { x: 1, y: 1 } });
|
|
114
|
+
const cell5 = core.locate(e).archetype;
|
|
115
|
+
core.update(e, { position: { x: 9, y: 9 } });
|
|
116
|
+
expect(core.locate(e).archetype).toBe(cell5);
|
|
117
|
+
expect(core.read(e)).toMatchObject({ cell: 5, position: { x: 9, y: 9 } });
|
|
118
|
+
});
|
|
119
|
+
it("does not migrate when a partition value is set to its current value", () => {
|
|
120
|
+
const core = makeCore();
|
|
121
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
122
|
+
const e = router.insert({ cell: 3, position: { x: 0, y: 0 } });
|
|
123
|
+
const before = core.locate(e).archetype;
|
|
124
|
+
core.update(e, { cell: 3 });
|
|
125
|
+
expect(core.locate(e).archetype).toBe(before);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe("serialization", () => {
|
|
129
|
+
it("round-trips partition children (values + rows) through toData/fromData", () => {
|
|
130
|
+
const core = makeCore();
|
|
131
|
+
const router = core.ensureArchetype(["id", "cell", "position"]);
|
|
132
|
+
const a = router.insert({ cell: 1, position: { x: 1, y: 1 } });
|
|
133
|
+
const b = router.insert({ cell: 2, position: { x: 2, y: 2 } });
|
|
134
|
+
const snapshot = core.toData(true);
|
|
135
|
+
const restored = makeCore();
|
|
136
|
+
restored.fromData(snapshot);
|
|
137
|
+
expect(restored.get(a, "cell")).toBe(1);
|
|
138
|
+
expect(restored.get(b, "cell")).toBe(2);
|
|
139
|
+
expect(restored.read(a)).toMatchObject({ cell: 1, position: { x: 1, y: 1 } });
|
|
140
|
+
expect(restored.read(b)).toMatchObject({ cell: 2, position: { x: 2, y: 2 } });
|
|
141
|
+
const cell1 = restored.ensureArchetype(["id", "cell", "position"], { cell: 1 });
|
|
142
|
+
expect(cell1.columns.cell.type).toBe(constBufferType);
|
|
143
|
+
expect(cell1.rowCount).toBe(1);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe("multiple partition components together", () => {
|
|
147
|
+
// Two partition components → archetypes are the *cross product* of the
|
|
148
|
+
// distinct (cell, layer) value pairs actually used.
|
|
149
|
+
const makeGridCore = () => createCore({
|
|
150
|
+
cell: { type: "integer", partition: true },
|
|
151
|
+
layer: { type: "integer", partition: true },
|
|
152
|
+
value: { type: "number" },
|
|
153
|
+
});
|
|
154
|
+
const keys = ["id", "cell", "layer", "value"];
|
|
155
|
+
it("creates one archetype per distinct (cell, layer) pair, each with both const columns", () => {
|
|
156
|
+
const core = makeGridCore();
|
|
157
|
+
const router = core.ensureArchetype(keys);
|
|
158
|
+
const cells = [0, 1];
|
|
159
|
+
const layers = [0, 1, 2];
|
|
160
|
+
for (const cell of cells)
|
|
161
|
+
for (const layer of layers) {
|
|
162
|
+
router.insert({ cell, layer, value: cell * 10 + layer });
|
|
163
|
+
}
|
|
164
|
+
const archetypes = core.queryArchetypes(["cell", "layer", "value"]);
|
|
165
|
+
expect(archetypes.length).toBe(cells.length * layers.length); // 2 × 3 = 6
|
|
166
|
+
const combos = new Set();
|
|
167
|
+
for (const arch of archetypes) {
|
|
168
|
+
expect(arch.rowCount).toBe(1);
|
|
169
|
+
// BOTH partition columns are zero-per-row const buffers.
|
|
170
|
+
expect(arch.columns.cell.type).toBe(constBufferType);
|
|
171
|
+
expect(arch.columns.layer.type).toBe(constBufferType);
|
|
172
|
+
combos.add(`${arch.columns.cell.get(0)},${arch.columns.layer.get(0)}`);
|
|
173
|
+
}
|
|
174
|
+
expect(combos.size).toBe(6);
|
|
175
|
+
});
|
|
176
|
+
it("routes on the full (cell, layer) tuple — same pair shares an archetype, either differing splits", () => {
|
|
177
|
+
const core = makeGridCore();
|
|
178
|
+
const router = core.ensureArchetype(keys);
|
|
179
|
+
const a = router.insert({ cell: 1, layer: 2, value: 0 });
|
|
180
|
+
const b = router.insert({ cell: 1, layer: 2, value: 1 }); // same pair
|
|
181
|
+
const c = router.insert({ cell: 1, layer: 3, value: 2 }); // layer differs
|
|
182
|
+
const d = router.insert({ cell: 9, layer: 2, value: 3 }); // cell differs
|
|
183
|
+
expect(core.locate(a).archetype).toBe(core.locate(b).archetype);
|
|
184
|
+
expect(core.locate(a).archetype).not.toBe(core.locate(c).archetype);
|
|
185
|
+
expect(core.locate(a).archetype).not.toBe(core.locate(d).archetype);
|
|
186
|
+
const arch12 = core.ensureArchetype(keys, { cell: 1, layer: 2 });
|
|
187
|
+
expect(core.locate(a).archetype).toBe(arch12);
|
|
188
|
+
expect(arch12.rowCount).toBe(2);
|
|
189
|
+
expect(core.read(a)).toMatchObject({ cell: 1, layer: 2, value: 0 });
|
|
190
|
+
});
|
|
191
|
+
it("queryArchetypes `where` filters on one or both partition components", () => {
|
|
192
|
+
const core = makeGridCore();
|
|
193
|
+
const router = core.ensureArchetype(keys);
|
|
194
|
+
for (const cell of [0, 1])
|
|
195
|
+
for (const layer of [0, 1, 2]) {
|
|
196
|
+
router.insert({ cell, layer, value: 0 });
|
|
197
|
+
}
|
|
198
|
+
// One component → all pairs sharing it (cell=1 across 3 layers).
|
|
199
|
+
expect(core.queryArchetypes(["cell", "layer", "value"], { where: { cell: 1 } }).length).toBe(3);
|
|
200
|
+
// Both components → exactly the one pair.
|
|
201
|
+
const one = core.queryArchetypes(["cell", "layer", "value"], { where: { cell: 1, layer: 2 } });
|
|
202
|
+
expect(one.length).toBe(1);
|
|
203
|
+
expect(one[0].columns.cell.get(0)).toBe(1);
|
|
204
|
+
expect(one[0].columns.layer.get(0)).toBe(2);
|
|
205
|
+
});
|
|
206
|
+
it("migrating one partition value keeps the other and lands in the correct combined archetype", () => {
|
|
207
|
+
const core = makeGridCore();
|
|
208
|
+
const router = core.ensureArchetype(keys);
|
|
209
|
+
const e = router.insert({ cell: 1, layer: 2, value: 5 });
|
|
210
|
+
core.update(e, { cell: 3 }); // change cell only
|
|
211
|
+
expect(core.get(e, "cell")).toBe(3);
|
|
212
|
+
expect(core.get(e, "layer")).toBe(2); // preserved
|
|
213
|
+
expect(core.locate(e).archetype).toBe(core.ensureArchetype(keys, { cell: 3, layer: 2 }));
|
|
214
|
+
// The old (1, 2) archetype is now empty.
|
|
215
|
+
expect(core.ensureArchetype(keys, { cell: 1, layer: 2 }).rowCount).toBe(0);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe("feature is inert without partition components", () => {
|
|
219
|
+
it("a store with no partition component behaves exactly as before", () => {
|
|
220
|
+
const core = createCore({ position: positionSchema });
|
|
221
|
+
const arch = core.ensureArchetype(["id", "position"]);
|
|
222
|
+
// Concrete archetype, direct insert, dense columns — no Router anywhere.
|
|
223
|
+
expect(arch.columns).toBeDefined();
|
|
224
|
+
const e = arch.insert({ position: { x: 1, y: 2 } });
|
|
225
|
+
expect(core.read(e)).toMatchObject({ position: { x: 1, y: 2 } });
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=create-core.partition.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-core.partition.test.js","sourceRoot":"","sources":["../../../../src/ecs/store/core/create-core.partition.test.ts"],"names":[],"mappings":"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"}
|