@ecsia/core 0.7.11 → 0.7.12
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/entity/ref.d.ts +4 -2
- package/dist/entity/ref.d.ts.map +1 -1
- package/dist/entity/ref.js +2 -2
- package/dist/entity/ref.js.map +1 -1
- package/dist/storage/storage.d.ts +2 -2
- package/dist/storage/storage.d.ts.map +1 -1
- package/dist/storage/storage.js +46 -6
- package/dist/storage/storage.js.map +1 -1
- package/package.json +2 -2
package/dist/entity/ref.d.ts
CHANGED
|
@@ -7,8 +7,10 @@ import type { ComponentDef, ReadOf, Schema, WriteOf } from '@ecsia/schema';
|
|
|
7
7
|
* column set, binds against the entity's real archetype (the archetype-binding seam).
|
|
8
8
|
*/
|
|
9
9
|
export interface AccessorResolver {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
/** `lenient` mirrors the ref's binding: a lenient resolve (observer-window read of a dying
|
|
11
|
+
* entity) opts out of the dev-mode stale-view guard the same way it opts out of #assertFresh. */
|
|
12
|
+
resolveRead(handle: EntityHandle, archetypeId: number, row: number, def: unknown, lenient?: boolean): unknown;
|
|
13
|
+
resolveWrite(handle: EntityHandle, archetypeId: number, row: number, def: unknown, lenient?: boolean): unknown;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* The accessor surface installed on `EntityRef`. The bare `entity.<comp>` getter shorthand
|
package/dist/entity/ref.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/entity/ref.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE1E;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/entity/ref.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE1E;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;qGACiG;IACjG,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC7G,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAC/G;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;IAC3B,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,SAAS;;IAKpB,QAAQ,EAAE,YAAY,CAAY;IAClC,aAAa,EAAE,MAAM,CAAiB;IACtC,KAAK,SAAI;IACT,4GAA4G;IAC5G,SAAS,UAAQ;gBAEL,OAAO,EAAE,YAAY;IAIjC,+FAA+F;IAC/F,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,2DAA2D;IAC3D,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI/C,sGAAsG;IACtG,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI;IAI/D,uFAAuF;IACvF,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,UAAQ,GAAG,IAAI;IAkCnD;;;;;OAKG;IACH,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAM7D;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAKhE"}
|
package/dist/entity/ref.js
CHANGED
|
@@ -86,7 +86,7 @@ export class EntityRef {
|
|
|
86
86
|
if (this.#resolver === null)
|
|
87
87
|
throw new Error('EntityRef.read: no accessor resolver installed');
|
|
88
88
|
this.#assertFresh('read');
|
|
89
|
-
return this.#resolver.resolveRead(this.__handle, this.__archetypeId, this.__row, def);
|
|
89
|
+
return this.#resolver.resolveRead(this.__handle, this.__archetypeId, this.__row, def, this.__lenient);
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
92
|
* Mutable, write-tracked `WriteView<S>` of `def`'s fields for this entity. The `const C` parameter
|
|
@@ -98,7 +98,7 @@ export class EntityRef {
|
|
|
98
98
|
if (this.#resolver === null)
|
|
99
99
|
throw new Error('EntityRef.write: no accessor resolver installed');
|
|
100
100
|
this.#assertFresh('write');
|
|
101
|
-
return this.#resolver.resolveWrite(this.__handle, this.__archetypeId, this.__row, def);
|
|
101
|
+
return this.#resolver.resolveWrite(this.__handle, this.__archetypeId, this.__row, def, this.__lenient);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=ref.js.map
|
package/dist/entity/ref.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/entity/ref.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yFAAyF;AACzF,4EAA4E;AAC5E,gGAAgG;AAChG,8CAA8C;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/entity/ref.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export declare class Storage {
|
|
|
66
66
|
* bitmask for a dead handle); this asserts world.phase === 'serial' inside bitmaskHas.
|
|
67
67
|
*/
|
|
68
68
|
has(handle: EntityHandle, def: ComponentDef<Schema>): boolean;
|
|
69
|
-
resolveRead(handle: EntityHandle, archetypeId: number, row: number, def: unknown): unknown;
|
|
70
|
-
resolveWrite(handle: EntityHandle, archetypeId: number, row: number, def: unknown): unknown;
|
|
69
|
+
resolveRead(handle: EntityHandle, archetypeId: number, row: number, def: unknown, lenient?: boolean): unknown;
|
|
70
|
+
resolveWrite(handle: EntityHandle, archetypeId: number, row: number, def: unknown, lenient?: boolean): unknown;
|
|
71
71
|
}
|
|
72
72
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEpF,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAoB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/storage.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// All structural verbs run serial / main-thread. In the single-thread executor
|
|
8
8
|
// world.phase stays 'serial' permanently, so every op takes the synchronous direct-apply path
|
|
9
9
|
import { bindAccessorRow } from '../component/index.js';
|
|
10
|
+
import { IS_DEV } from '../env.js';
|
|
10
11
|
import { ArchetypeStore, EMPTY_ARCHETYPE_ID } from './store.js';
|
|
11
12
|
import { coldRowOf } from './cold-store.js';
|
|
12
13
|
import { canonicalize } from './signature.js';
|
|
@@ -153,13 +154,13 @@ export class Storage {
|
|
|
153
154
|
return this.#cfg.bitmask.bitmaskHas(this.#cfg.handleIndex(handle), id);
|
|
154
155
|
}
|
|
155
156
|
// --- AccessorResolver -------------------------------
|
|
156
|
-
resolveRead(handle, archetypeId, row, def) {
|
|
157
|
-
return this.#resolve(handle, archetypeId, row, def);
|
|
157
|
+
resolveRead(handle, archetypeId, row, def, lenient) {
|
|
158
|
+
return this.#resolve(handle, archetypeId, row, def, lenient === true);
|
|
158
159
|
}
|
|
159
|
-
resolveWrite(handle, archetypeId, row, def) {
|
|
160
|
-
return this.#resolve(handle, archetypeId, row, def);
|
|
160
|
+
resolveWrite(handle, archetypeId, row, def, lenient) {
|
|
161
|
+
return this.#resolve(handle, archetypeId, row, def, lenient === true);
|
|
161
162
|
}
|
|
162
|
-
#resolve(handle, archetypeId, row, def) {
|
|
163
|
+
#resolve(handle, archetypeId, row, def, lenient) {
|
|
163
164
|
const id = this.#requireId(def);
|
|
164
165
|
const arch = this.archetypes.byId[archetypeId];
|
|
165
166
|
if (arch === undefined)
|
|
@@ -180,7 +181,12 @@ export class Storage {
|
|
|
180
181
|
}
|
|
181
182
|
throw new Error(`storage.resolve: entity does not hold component '${def.name}'`);
|
|
182
183
|
}
|
|
183
|
-
|
|
184
|
+
const acc = bindAccessorRow(set, boundRow, handle);
|
|
185
|
+
// A lenient resolve (observer-window read of a dying/shuffled entity) opts out of the guard the
|
|
186
|
+
// same way it opts out of EntityRef's #assertFresh — its rows ARE expected to be re-tenanted.
|
|
187
|
+
if (!IS_DEV || lenient)
|
|
188
|
+
return acc;
|
|
189
|
+
return guardAccessorView(acc, handle, arch.cold ? null : arch, boundRow);
|
|
184
190
|
}
|
|
185
191
|
#requireId(def) {
|
|
186
192
|
const id = this.#cfg.registry.idOf(def);
|
|
@@ -189,4 +195,38 @@ export class Storage {
|
|
|
189
195
|
return id;
|
|
190
196
|
}
|
|
191
197
|
}
|
|
198
|
+
// Dev-only stale-VIEW guard. The object read()/write() return is the pooled per-(archetype,
|
|
199
|
+
// component) accessor SINGLETON — a held view silently re-points when (a) a later world.entity(...)
|
|
200
|
+
// resolve re-pokes it at another entity, or (b) the entity dies/migrates and a swap-pop hands its
|
|
201
|
+
// row to a new tenant WITHOUT re-poking (__eid still matches, the data underneath changed). The
|
|
202
|
+
// EntityRef-level #assertFresh guard runs at resolve time and cannot see either later event, so in
|
|
203
|
+
// dev each resolve returns a per-call membrane stamped with (handle, row) that re-validates on EVERY
|
|
204
|
+
// property access. Production returns the bare singleton — zero allocation, zero indirection.
|
|
205
|
+
//
|
|
206
|
+
// Reflect uses `target` (not the proxy) as receiver so prototype getters/setters see the singleton
|
|
207
|
+
// as `this` — the cached per-field VecViews stay bound to the singleton exactly as without the
|
|
208
|
+
// guard. Known dev-guard limit: a held vec ELEMENT view (`const v = view.vel; ... v[0]`) re-reads
|
|
209
|
+
// the singleton's live cursor and is not covered; the `view.vel` access itself is.
|
|
210
|
+
function guardAccessorView(acc, expectedEid, arch, row) {
|
|
211
|
+
const a = acc;
|
|
212
|
+
const fail = (prop) => {
|
|
213
|
+
throw new Error(`stale accessor view (.${String(prop)}) for entity ${expectedEid} — the pooled view was re-pointed by a ` +
|
|
214
|
+
`later world.entity(...) resolve, or the entity died/moved since. Extract the plain values you need ` +
|
|
215
|
+
`before the next resolve, or re-resolve via world.entity(h). (Dev-mode guard; production reads the ` +
|
|
216
|
+
`pooled singleton without this check.)`);
|
|
217
|
+
};
|
|
218
|
+
const fresh = () => a.__eid === expectedEid && (arch === null || arch.rows[row] === (expectedEid >>> 0));
|
|
219
|
+
return new Proxy(acc, {
|
|
220
|
+
get(target, prop) {
|
|
221
|
+
if (!fresh())
|
|
222
|
+
fail(prop);
|
|
223
|
+
return Reflect.get(target, prop, target);
|
|
224
|
+
},
|
|
225
|
+
set(target, prop, value) {
|
|
226
|
+
if (!fresh())
|
|
227
|
+
fail(prop);
|
|
228
|
+
return Reflect.set(target, prop, value, target);
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
}
|
|
192
232
|
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kGAAkG;AAClG,6FAA6F;AAC7F,iGAAiG;AACjG,0EAA0E;AAC1E,EAAE;AACF,+EAA+E;AAC/E,8FAA8F;AAG9F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecsia/core",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.12",
|
|
4
4
|
"description": "The ecsia core: archetype storage, typed component accessors, queries, and change tracking. Works standalone on a single thread.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ecs",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@ecsia/schema": "0.7.
|
|
47
|
+
"@ecsia/schema": "0.7.12"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "tsc -b"
|