@adobe/data 0.9.44 → 0.9.46
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/AGENTS.md +1 -1
- package/dist/ecs/database/combine-plugins.js.map +1 -1
- package/dist/ecs/database/create-plugin.type-test.js +5 -5
- package/dist/ecs/database/public/create-database.d.ts +9 -1
- package/dist/ecs/database/public/create-database.js +4 -1
- package/dist/ecs/database/public/create-database.js.map +1 -1
- package/dist/ecs/database/public/create-database.test.js +84 -2
- package/dist/ecs/database/public/create-database.test.js.map +1 -1
- package/dist/ecs/database/public/create-database.type-test.js +50 -236
- package/dist/ecs/database/public/create-database.type-test.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.js +1 -2
- package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.js +2 -2
- package/dist/ecs/entity-location-table/create-entity-location-table.test.js +1 -1
- package/dist/ecs/optional-components.d.ts +1 -1
- package/dist/ecs/store/core/create-core.js +11 -16
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/create-core.test.js +38 -38
- package/dist/ecs/store/core/create-core.test.js.map +1 -1
- package/dist/functions/serialization/serialization.test.js +6 -9
- package/dist/functions/serialization/serialization.test.js.map +1 -1
- package/dist/functions/serialization/serialize-to-json.js +2 -2
- package/dist/functions/serialization/serialize-to-json.js.map +1 -1
- package/dist/schema/dynamic/enumerate-patches.test.d.ts +4 -4
- package/dist/schema/dynamic/enumerate-patches.test.js +8 -11
- package/dist/schema/dynamic/enumerate-patches.test.js.map +1 -1
- package/dist/schema/dynamic/get-dynamic-schema.test.js +4 -8
- package/dist/schema/dynamic/get-dynamic-schema.test.js.map +1 -1
- package/dist/schema/schema.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/typed-buffer/register-typed-buffer-codecs.js +3 -3
- 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-lit-tictactoe/tsconfig.json +1 -0
- 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
- package/references/data-react-pixie/tsconfig.json +1 -0
|
@@ -1,238 +1,52 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Temporary type verification — delete after confirming.
|
|
2
|
+
// Positive tests: valid usages that should compile.
|
|
3
|
+
// Negative tests: invalid usages that should produce type errors (marked with @ts-expect-error).
|
|
2
4
|
import { Database } from "../database.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
time: { default: 0 },
|
|
51
|
-
},
|
|
52
|
-
archetypes: {
|
|
53
|
-
Position: ["position"],
|
|
54
|
-
},
|
|
55
|
-
transactions: {
|
|
56
|
-
createPosition: (store, args) => {
|
|
57
|
-
return store.archetypes.Position.insert(args);
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
const extendedPlugin = Database.Plugin.create({
|
|
62
|
-
extends: basePlugin,
|
|
63
|
-
components: {
|
|
64
|
-
velocity: { type: "number" },
|
|
65
|
-
},
|
|
66
|
-
resources: {
|
|
67
|
-
deltaTime: { default: 0.016 },
|
|
68
|
-
},
|
|
69
|
-
archetypes: {
|
|
70
|
-
Moving: ["position", "velocity"],
|
|
71
|
-
},
|
|
72
|
-
transactions: {
|
|
73
|
-
createMoving: (store, args) => {
|
|
74
|
-
return store.archetypes.Moving.insert(args);
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
const db = Database.create(extendedPlugin);
|
|
79
|
-
}
|
|
80
|
-
// ============================================================================
|
|
81
|
-
// DEEP NESTING TESTS (multiple levels of Combine2)
|
|
82
|
-
// ============================================================================
|
|
83
|
-
function testDeepNestingInference() {
|
|
84
|
-
const level1 = Database.Plugin.create({
|
|
85
|
-
components: {
|
|
86
|
-
a: { type: "number" },
|
|
87
|
-
},
|
|
88
|
-
resources: {
|
|
89
|
-
r1: { default: 0 },
|
|
90
|
-
},
|
|
91
|
-
transactions: {
|
|
92
|
-
t1: (store) => { },
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
const level2 = Database.Plugin.create({
|
|
96
|
-
extends: level1,
|
|
97
|
-
components: {
|
|
98
|
-
b: { type: "string" },
|
|
99
|
-
},
|
|
100
|
-
resources: {
|
|
101
|
-
r2: { default: "" },
|
|
102
|
-
},
|
|
103
|
-
transactions: {
|
|
104
|
-
t2: (store, arg) => { },
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
const level3 = Database.Plugin.create({
|
|
108
|
-
extends: level2,
|
|
109
|
-
components: {
|
|
110
|
-
c: { type: "boolean" },
|
|
111
|
-
},
|
|
112
|
-
resources: {
|
|
113
|
-
r3: { default: false },
|
|
114
|
-
},
|
|
115
|
-
transactions: {
|
|
116
|
-
t3: (store, args) => 12,
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
const db = Database.create(level3);
|
|
120
|
-
}
|
|
121
|
-
// ============================================================================
|
|
122
|
-
// SYSTEMS AND ACTIONS TESTS
|
|
123
|
-
// ============================================================================
|
|
124
|
-
function testSystemsAndActionsInference() {
|
|
125
|
-
const basePlugin = Database.Plugin.create({
|
|
126
|
-
extends: undefined,
|
|
127
|
-
components: {},
|
|
128
|
-
resources: {},
|
|
129
|
-
archetypes: {},
|
|
130
|
-
transactions: {},
|
|
131
|
-
actions: {
|
|
132
|
-
baseAction: (db) => { },
|
|
133
|
-
baseActionWithInput: (db, input) => { },
|
|
134
|
-
},
|
|
135
|
-
systems: {
|
|
136
|
-
input: {
|
|
137
|
-
create: (db) => () => { },
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
const extendedPlugin = Database.Plugin.create({
|
|
142
|
-
extends: basePlugin,
|
|
143
|
-
components: {},
|
|
144
|
-
resources: {},
|
|
145
|
-
archetypes: {},
|
|
146
|
-
transactions: {},
|
|
147
|
-
actions: {
|
|
148
|
-
extendedAction: (db) => { },
|
|
149
|
-
extendedActionWithInput: (db, input) => { },
|
|
150
|
-
},
|
|
151
|
-
systems: {
|
|
152
|
-
render: {
|
|
153
|
-
create: (db) => () => { },
|
|
154
|
-
schedule: { after: ["input"] },
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
const db = Database.create(extendedPlugin);
|
|
159
|
-
}
|
|
160
|
-
// ============================================================================
|
|
161
|
-
// EXTENDED DB ASSIGNABLE TO BASE DB (computed type)
|
|
162
|
-
// ============================================================================
|
|
163
|
-
/**
|
|
164
|
-
* Verifies that db from an extended plugin's system create callback can be passed
|
|
165
|
-
* to a function expecting the base database type. This catches the "computed:
|
|
166
|
-
* unknown" bug where system create's db lacked the 8th Database parameter.
|
|
167
|
-
* We use Pick to test only resources and computed (the structural assignment).
|
|
168
|
-
*/
|
|
169
|
-
function testExtendedDbAssignableToBaseDb() {
|
|
170
|
-
const basePlugin = Database.Plugin.create({
|
|
171
|
-
components: { pos: { type: "number" } },
|
|
172
|
-
resources: { scale: { default: 1 } },
|
|
173
|
-
archetypes: { Entity: ["pos"] },
|
|
174
|
-
transactions: {},
|
|
175
|
-
actions: {},
|
|
176
|
-
systems: {},
|
|
177
|
-
});
|
|
178
|
-
const extendedPlugin = Database.Plugin.create({
|
|
179
|
-
extends: basePlugin,
|
|
180
|
-
components: { vel: { type: "number" } },
|
|
181
|
-
resources: {},
|
|
182
|
-
archetypes: { Moving: ["pos", "vel"] },
|
|
183
|
-
transactions: {},
|
|
184
|
-
actions: {},
|
|
185
|
-
systems: {
|
|
186
|
-
update: {
|
|
187
|
-
create: (db) => {
|
|
188
|
-
fnExpectingBaseResourcesAndComputed(db);
|
|
189
|
-
return () => { };
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
function fnExpectingBaseResourcesAndComputed(db) {
|
|
195
|
-
return db.resources.scale;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// ============================================================================
|
|
199
|
-
// EXTENDED DB ASSIGNABLE TO BASE DB (system.functions)
|
|
200
|
-
// ============================================================================
|
|
201
|
-
/**
|
|
202
|
-
* Verifies that db from an extended plugin's system create callback has
|
|
203
|
-
* system.functions with specific keys (not { [x: string]: ... }). This catches
|
|
204
|
-
* the "S = string" bug where system create's db had an index signature.
|
|
205
|
-
* We test resources + system.functions.input (avoids system.order variance).
|
|
206
|
-
*/
|
|
207
|
-
function testExtendedDbAssignableToBaseDbWithSystems() {
|
|
208
|
-
const basePlugin = Database.Plugin.create({
|
|
209
|
-
components: { pos: { type: "number" } },
|
|
210
|
-
resources: { scale: { default: 1 } },
|
|
211
|
-
archetypes: { Entity: ["pos"] },
|
|
212
|
-
transactions: {},
|
|
213
|
-
actions: {},
|
|
214
|
-
systems: {
|
|
215
|
-
input: { create: (db) => () => { } },
|
|
216
|
-
},
|
|
217
|
-
});
|
|
218
|
-
const extendedPlugin = Database.Plugin.create({
|
|
219
|
-
extends: basePlugin,
|
|
220
|
-
components: { vel: { type: "number" } },
|
|
221
|
-
resources: {},
|
|
222
|
-
archetypes: { Moving: ["pos", "vel"] },
|
|
223
|
-
transactions: {},
|
|
224
|
-
actions: {},
|
|
225
|
-
systems: {
|
|
226
|
-
update: {
|
|
227
|
-
create: (db) => {
|
|
228
|
-
fnExpectingBaseResourcesAndInputSystem(db);
|
|
229
|
-
return () => { };
|
|
230
|
-
},
|
|
231
|
-
},
|
|
232
|
-
},
|
|
233
|
-
});
|
|
234
|
-
function fnExpectingBaseResourcesAndInputSystem(db) {
|
|
235
|
-
return db.resources.scale + (db.system.functions.input ? 1 : 0);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
5
|
+
const pluginWithServices = Database.Plugin.create({
|
|
6
|
+
services: {
|
|
7
|
+
auth: (_db) => ({ token: 'abc', isAuthenticated: true }),
|
|
8
|
+
config: (_db) => ({ apiUrl: 'https://example.com', debug: false }),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
// --- Positive: no options ---
|
|
12
|
+
const db1 = Database.create(pluginWithServices);
|
|
13
|
+
db1.services.auth.token;
|
|
14
|
+
db1.services.config.apiUrl;
|
|
15
|
+
// --- Positive: empty options ---
|
|
16
|
+
const db2 = Database.create(pluginWithServices, {});
|
|
17
|
+
// --- Positive: override one service with correct type ---
|
|
18
|
+
const db3 = Database.create(pluginWithServices, {
|
|
19
|
+
services: { auth: { token: 'override', isAuthenticated: false } },
|
|
20
|
+
});
|
|
21
|
+
db3.services.auth.token;
|
|
22
|
+
// --- Positive: override both services ---
|
|
23
|
+
const db4 = Database.create(pluginWithServices, {
|
|
24
|
+
services: {
|
|
25
|
+
auth: { token: 'x', isAuthenticated: true },
|
|
26
|
+
config: { apiUrl: 'https://other.com', debug: true },
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
// --- Positive: no-arg call still works ---
|
|
30
|
+
const db5 = Database.create();
|
|
31
|
+
// --- Negative: wrong value type for an overridden service ---
|
|
32
|
+
const db6 = Database.create(pluginWithServices, {
|
|
33
|
+
services: {
|
|
34
|
+
// @ts-expect-error — token should be string, not number
|
|
35
|
+
auth: { token: 123, isAuthenticated: false },
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
// --- Negative: unknown service key ---
|
|
39
|
+
const db7 = Database.create(pluginWithServices, {
|
|
40
|
+
services: {
|
|
41
|
+
// @ts-expect-error — 'nonexistent' is not a declared service
|
|
42
|
+
nonexistent: { foo: 'bar' },
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
// --- Negative: missing required property in override ---
|
|
46
|
+
const db8 = Database.create(pluginWithServices, {
|
|
47
|
+
services: {
|
|
48
|
+
// @ts-expect-error — missing isAuthenticated
|
|
49
|
+
auth: { token: 'x' },
|
|
50
|
+
},
|
|
51
|
+
});
|
|
238
52
|
//# sourceMappingURL=create-database.type-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-database.type-test.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.type-test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"create-database.type-test.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.type-test.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oDAAoD;AACpD,iGAAiG;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACrE;CACJ,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAChD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAsB,CAAC;AACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAuB,CAAC;AAE5C,kCAAkC;AAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAEpD,2DAA2D;AAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE;CACpE,CAAC,CAAC;AACH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAsB,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;QAC3C,MAAM,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;KACvD;CACJ,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AAE9B,+DAA+D;AAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,wDAAwD;QACxD,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE;KAC/C;CACJ,CAAC,CAAC;AAEH,wCAAwC;AACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,6DAA6D;QAC7D,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;KAC9B;CACJ,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,6CAA6C;QAC7C,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;KACvB;CACJ,CAAC,CAAC"}
|
|
@@ -47,7 +47,6 @@ export function createTransactionalStore(store) {
|
|
|
47
47
|
const updateEntity = (entity, values) => {
|
|
48
48
|
const oldValues = store.read(entity);
|
|
49
49
|
if (!oldValues) {
|
|
50
|
-
debugger;
|
|
51
50
|
throw new Error(`Entity not found: ${entity}`);
|
|
52
51
|
}
|
|
53
52
|
const replacedValues = {};
|
|
@@ -190,7 +189,7 @@ export function createTransactionalStore(store) {
|
|
|
190
189
|
}
|
|
191
190
|
// Sync resources after extension (store may have new resource schemas)
|
|
192
191
|
for (const name of Object.keys(store.resources)) {
|
|
193
|
-
if (!
|
|
192
|
+
if (!Object.hasOwn(resources, name)) {
|
|
194
193
|
const resourceId = name;
|
|
195
194
|
const archetype = store.ensureArchetype(["id", resourceId]);
|
|
196
195
|
const entityId = archetype.columns.id.get(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-transactional-store.js","sourceRoot":"","sources":["../../../../src/ecs/database/transactional-store/create-transactional-store.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,gEAAgE;AAChE,MAAM,MAAM,GAAY,cAAc,CAAC;AAUvC,MAAM,UAAU,wBAAwB,CAKpC,KAAqB;IAGrB,2DAA2D;IAC3D,IAAI,4BAA4B,GAAmC,EAAE,CAAC;IACtE,IAAI,cAAc,GAAmC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG;QACZ,QAAQ,EAAE,IAAI,GAAG,EAAwC;QACzD,UAAU,EAAE,IAAI,GAAG,EAAW;QAC9B,UAAU,EAAE,IAAI,GAAG,EAAe;KACrC,CAAC;IAEF,8CAA8C;IAC9C,MAAM,aAAa,GAAG,CAAC,SAAyB,EAAE,EAAE;QAChD,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;QACzB,OAAO;YACH,GAAG,SAAS;YACZ,IAAI,QAAQ;gBACR,OAAO,SAAS,CAAC,QAAQ,CAAC;YAC9B,CAAC;YACD,MAAM,EAAE,CAAkC,MAAS,EAAE,EAAE;gBACnD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAe,CAAC,CAAC;gBACjD,cAAc,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,MAAM;iBACjB,CAAC,CAAC;gBACH,4BAA4B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAY,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;SACJ,CAAC;IACN,CAAC,CAAC;IAEF,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEtD,MAAM,mBAAmB,GAAG,CAAC,SAAc,EAAE,EAAE;QAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,oCAAoC;IACpC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,MAA6B,EAAE,EAAE;QACnE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,
|
|
1
|
+
{"version":3,"file":"create-transactional-store.js","sourceRoot":"","sources":["../../../../src/ecs/database/transactional-store/create-transactional-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { EntityLocationTable } from "./entity-location-table.js";
|
|
2
|
-
export declare const createEntityLocationTable: (initialCapacity?: number,
|
|
2
|
+
export declare const createEntityLocationTable: (initialCapacity?: number, ephemeral?: boolean) => EntityLocationTable;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
2
|
import { resize } from "../../internal/array-buffer-like/resize.js";
|
|
3
3
|
import { createSharedArrayBuffer } from "../../internal/shared-array-buffer/create-shared-array-buffer.js";
|
|
4
|
-
export const createEntityLocationTable = (initialCapacity = 16,
|
|
5
|
-
return
|
|
4
|
+
export const createEntityLocationTable = (initialCapacity = 16, ephemeral = false) => {
|
|
5
|
+
return ephemeral ? createNegativeEntityLocationTable(initialCapacity) : createPositiveEntityLocationTable(initialCapacity);
|
|
6
6
|
};
|
|
7
7
|
const createNegativeEntityLocationTable = (initialCapacity = 16) => {
|
|
8
8
|
const table = createEntityLocationTable(initialCapacity);
|
|
@@ -119,7 +119,7 @@ describe('createEntityLocationTable', () => {
|
|
|
119
119
|
expect(() => table.locate(-1)).toThrow("locate entity must be >= 0");
|
|
120
120
|
});
|
|
121
121
|
});
|
|
122
|
-
describe('
|
|
122
|
+
describe('createEphemeralEntityLocationTable', () => {
|
|
123
123
|
it('should create entities with increasing ids starting from -1', () => {
|
|
124
124
|
const table = createEntityLocationTable(16, true);
|
|
125
125
|
const entity0 = table.create({ archetype: 1, row: 10 });
|
|
@@ -7,16 +7,12 @@ import { True } from "../../../schema/true/index.js";
|
|
|
7
7
|
export function createCore(newComponentSchemas) {
|
|
8
8
|
const componentSchemas = {
|
|
9
9
|
id: Entity.schema,
|
|
10
|
-
|
|
10
|
+
ephemeral: True.schema,
|
|
11
11
|
...newComponentSchemas
|
|
12
12
|
};
|
|
13
|
-
// entity location table for entities that are not transient
|
|
14
|
-
// values >= 0
|
|
15
13
|
const persistentLocationTable = createEntityLocationTable(16, false);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const transientLocationTable = createEntityLocationTable(16, true);
|
|
19
|
-
const getLocationTable = (entity) => entity < 0 ? transientLocationTable : persistentLocationTable;
|
|
14
|
+
const ephemeralLocationTable = createEntityLocationTable(16, true);
|
|
15
|
+
const getLocationTable = (entity) => entity < 0 ? ephemeralLocationTable : persistentLocationTable;
|
|
20
16
|
const archetypes = [];
|
|
21
17
|
const queryArchetypes = (include, options) => {
|
|
22
18
|
const includeArray = Array.from(include);
|
|
@@ -42,25 +38,25 @@ export function createCore(newComponentSchemas) {
|
|
|
42
38
|
const id = archetypes.length;
|
|
43
39
|
const archetypeComponentSchemas = {};
|
|
44
40
|
let hasId = false;
|
|
45
|
-
let
|
|
41
|
+
let ephemeral = false;
|
|
46
42
|
for (const comp of componentNames) {
|
|
47
43
|
if (comp === "id") {
|
|
48
44
|
hasId = true;
|
|
49
45
|
}
|
|
50
|
-
if (comp === "
|
|
51
|
-
|
|
46
|
+
if (comp === "ephemeral") {
|
|
47
|
+
ephemeral = true;
|
|
52
48
|
}
|
|
53
49
|
archetypeComponentSchemas[comp] = componentSchemas[comp];
|
|
54
50
|
}
|
|
55
51
|
if (!hasId) {
|
|
56
52
|
throw new Error("id is required");
|
|
57
53
|
}
|
|
58
|
-
const archetype = ARCHETYPE.createArchetype(archetypeComponentSchemas, id,
|
|
54
|
+
const archetype = ARCHETYPE.createArchetype(archetypeComponentSchemas, id, ephemeral ? ephemeralLocationTable : persistentLocationTable);
|
|
59
55
|
archetypes.push(archetype);
|
|
60
56
|
return archetype;
|
|
61
57
|
};
|
|
62
58
|
const locateInternal = (entity) => {
|
|
63
|
-
return (entity < 0 ?
|
|
59
|
+
return (entity < 0 ? ephemeralLocationTable : persistentLocationTable).locate(entity);
|
|
64
60
|
};
|
|
65
61
|
const readEntity = (entity, minArchetype) => {
|
|
66
62
|
const location = locateInternal(entity);
|
|
@@ -88,11 +84,10 @@ export function createCore(newComponentSchemas) {
|
|
|
88
84
|
const updateEntity = (entity, components) => {
|
|
89
85
|
const currentLocation = locateInternal(entity);
|
|
90
86
|
if (currentLocation === null) {
|
|
91
|
-
|
|
92
|
-
throw `Entity not found ${entity}`;
|
|
87
|
+
throw new Error(`Entity not found ${entity}`);
|
|
93
88
|
}
|
|
94
|
-
if ("
|
|
95
|
-
throw new Error("Cannot update
|
|
89
|
+
if ("ephemeral" in components) {
|
|
90
|
+
throw new Error("Cannot update ephemeral component");
|
|
96
91
|
}
|
|
97
92
|
const currentArchetype = archetypes[currentLocation.archetype];
|
|
98
93
|
let newArchetype = currentArchetype;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-core.js","sourceRoot":"","sources":["../../../../src/ecs/store/core/create-core.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAKzC,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAErD,MAAM,UAAU,UAAU,CAA8B,mBAAuB;IAG3E,MAAM,gBAAgB,GAAyF;QAC3G,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,GAAG,mBAAmB;KACzB,CAAC;IACF,
|
|
1
|
+
{"version":3,"file":"create-core.js","sourceRoot":"","sources":["../../../../src/ecs/store/core/create-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -354,36 +354,36 @@ export function createCoreTestSuite(name, factory) {
|
|
|
354
354
|
expect(core.locate(entities[i])).toBeNull();
|
|
355
355
|
}
|
|
356
356
|
});
|
|
357
|
-
it("should create
|
|
357
|
+
it("should create ephemeral entities with negative ids", () => {
|
|
358
358
|
const core = factory({
|
|
359
359
|
position: positionSchema,
|
|
360
360
|
health: healthSchema,
|
|
361
361
|
});
|
|
362
|
-
const
|
|
363
|
-
const writeId =
|
|
362
|
+
const ephemeralPositionTable = core.ensureArchetype(["id", "position", "ephemeral"]);
|
|
363
|
+
const writeId = ephemeralPositionTable.insert({ position: { x: 1, y: 2, z: 3 }, ephemeral: true });
|
|
364
364
|
expect(writeId).toBe(-1);
|
|
365
|
-
const readId =
|
|
365
|
+
const readId = ephemeralPositionTable.columns.id.get(0);
|
|
366
366
|
expect(readId).toBe(writeId);
|
|
367
367
|
const locate = core.locate(writeId);
|
|
368
|
-
expect(locate?.archetype).toBe(
|
|
368
|
+
expect(locate?.archetype).toBe(ephemeralPositionTable);
|
|
369
369
|
const readComponent = core.get(writeId, "position");
|
|
370
370
|
expect(readComponent).toEqual({ x: 1, y: 2, z: 3 });
|
|
371
371
|
});
|
|
372
|
-
it("should throw when trying to update
|
|
372
|
+
it("should throw when trying to update ephemeral component", () => {
|
|
373
373
|
const core = factory({
|
|
374
374
|
position: positionSchema,
|
|
375
375
|
health: healthSchema,
|
|
376
376
|
});
|
|
377
|
-
const
|
|
378
|
-
const writeId =
|
|
377
|
+
const ephemeralPositionTable = core.ensureArchetype(["id", "position", "ephemeral"]);
|
|
378
|
+
const writeId = ephemeralPositionTable.insert({ position: { x: 1, y: 2, z: 3 }, ephemeral: true });
|
|
379
379
|
expect(() => {
|
|
380
|
-
core.update(writeId, {
|
|
380
|
+
core.update(writeId, { ephemeral: false });
|
|
381
381
|
}).toThrow();
|
|
382
382
|
expect(() => {
|
|
383
|
-
core.update(writeId, {
|
|
383
|
+
core.update(writeId, { ephemeral: true });
|
|
384
384
|
}).toThrow();
|
|
385
385
|
expect(() => {
|
|
386
|
-
core.update(writeId, {
|
|
386
|
+
core.update(writeId, { ephemeral: undefined });
|
|
387
387
|
}).toThrow();
|
|
388
388
|
});
|
|
389
389
|
describe("core read with minArchetype", () => {
|
|
@@ -598,49 +598,49 @@ export function createCoreTestSuite(name, factory) {
|
|
|
598
598
|
expect(archetype.rowCapacity).toBe(rowCountBefore);
|
|
599
599
|
});
|
|
600
600
|
});
|
|
601
|
-
it("should delete
|
|
601
|
+
it("should delete ephemeral entities correctly", () => {
|
|
602
602
|
const core = factory({
|
|
603
603
|
position: positionSchema,
|
|
604
604
|
});
|
|
605
|
-
const
|
|
606
|
-
const
|
|
605
|
+
const ephemeralArchetype = core.ensureArchetype(["id", "position", "ephemeral"]);
|
|
606
|
+
const ephemeralEntity = ephemeralArchetype.insert({
|
|
607
607
|
position: { x: 1, y: 2, z: 3 },
|
|
608
|
-
|
|
609
|
-
});
|
|
610
|
-
// Verify
|
|
611
|
-
expect(
|
|
612
|
-
expect(core.locate(
|
|
613
|
-
expect(core.read(
|
|
614
|
-
// Delete
|
|
615
|
-
core.delete(
|
|
616
|
-
// Verify
|
|
617
|
-
expect(core.locate(
|
|
618
|
-
expect(core.read(
|
|
608
|
+
ephemeral: true
|
|
609
|
+
});
|
|
610
|
+
// Verify ephemeral entity exists and has negative id
|
|
611
|
+
expect(ephemeralEntity).toBeLessThan(0);
|
|
612
|
+
expect(core.locate(ephemeralEntity)).not.toBeNull();
|
|
613
|
+
expect(core.read(ephemeralEntity)).not.toBeNull();
|
|
614
|
+
// Delete ephemeral entity
|
|
615
|
+
core.delete(ephemeralEntity);
|
|
616
|
+
// Verify ephemeral entity is deleted
|
|
617
|
+
expect(core.locate(ephemeralEntity)).toBeNull();
|
|
618
|
+
expect(core.read(ephemeralEntity)).toBeNull();
|
|
619
619
|
});
|
|
620
|
-
it("should update
|
|
620
|
+
it("should update ephemeral entities across archetypes correctly", () => {
|
|
621
621
|
const core = factory({
|
|
622
622
|
position: positionSchema,
|
|
623
623
|
health: healthSchema,
|
|
624
624
|
});
|
|
625
|
-
// Create
|
|
626
|
-
const
|
|
627
|
-
const
|
|
625
|
+
// Create an ephemeral entity with just position
|
|
626
|
+
const ephemeralArchetype1 = core.ensureArchetype(["id", "position", "ephemeral"]);
|
|
627
|
+
const ephemeralEntity = ephemeralArchetype1.insert({
|
|
628
628
|
position: { x: 1, y: 2, z: 3 },
|
|
629
|
-
|
|
629
|
+
ephemeral: true
|
|
630
630
|
});
|
|
631
|
-
// Verify
|
|
632
|
-
expect(
|
|
633
|
-
expect(core.locate(
|
|
631
|
+
// Verify ephemeral entity exists and has negative id
|
|
632
|
+
expect(ephemeralEntity).toBeLessThan(0);
|
|
633
|
+
expect(core.locate(ephemeralEntity)).not.toBeNull();
|
|
634
634
|
// Add health component to trigger archetype change
|
|
635
|
-
core.update(
|
|
635
|
+
core.update(ephemeralEntity, { health: { current: 100, max: 100 } });
|
|
636
636
|
// Verify entity moved to new archetype and data is correct
|
|
637
|
-
const location = core.locate(
|
|
637
|
+
const location = core.locate(ephemeralEntity);
|
|
638
638
|
expect(location).not.toBeNull();
|
|
639
|
-
expect(location?.archetype).not.toBe(
|
|
640
|
-
const data = core.read(
|
|
639
|
+
expect(location?.archetype).not.toBe(ephemeralArchetype1);
|
|
640
|
+
const data = core.read(ephemeralEntity);
|
|
641
641
|
expect(data?.position).toEqual({ x: 1, y: 2, z: 3 });
|
|
642
642
|
expect(data?.health).toEqual({ current: 100, max: 100 });
|
|
643
|
-
expect(data?.
|
|
643
|
+
expect(data?.ephemeral).toBe(true);
|
|
644
644
|
});
|
|
645
645
|
});
|
|
646
646
|
}
|