@ecsia/core 0.3.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/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/query/compile.d.ts +7 -0
- package/dist/query/compile.d.ts.map +1 -1
- package/dist/query/compile.js +41 -2
- package/dist/query/compile.js.map +1 -1
- package/dist/reactivity/observer-commands.d.ts +1 -0
- package/dist/reactivity/observer-commands.d.ts.map +1 -1
- package/dist/reactivity/observer-commands.js +12 -0
- package/dist/reactivity/observer-commands.js.map +1 -1
- package/dist/topics/codec.d.ts +23 -0
- package/dist/topics/codec.d.ts.map +1 -0
- package/dist/topics/codec.js +113 -0
- package/dist/topics/codec.js.map +1 -0
- package/dist/topics/define.d.ts +44 -0
- package/dist/topics/define.d.ts.map +1 -0
- package/dist/topics/define.js +61 -0
- package/dist/topics/define.js.map +1 -0
- package/dist/topics/index.d.ts +7 -0
- package/dist/topics/index.d.ts.map +1 -0
- package/dist/topics/index.js +4 -0
- package/dist/topics/index.js.map +1 -0
- package/dist/topics/store.d.ts +83 -0
- package/dist/topics/store.d.ts.map +1 -0
- package/dist/topics/store.js +416 -0
- package/dist/topics/store.js.map +1 -0
- package/dist/world.d.ts +56 -0
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +119 -9
- package/dist/world.js.map +1 -1
- package/package.json +2 -2
package/dist/config.d.ts
CHANGED
|
@@ -19,6 +19,13 @@ export interface WorldOptions {
|
|
|
19
19
|
maxEntities?: number;
|
|
20
20
|
generationBits?: number;
|
|
21
21
|
threaded?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Register the prefab built-ins: the `Prefab` tag component (auto-appended after user
|
|
24
|
+
* components, stable name "ecsia:Prefab") and — once `createRelations(world)` attaches — the
|
|
25
|
+
* `IsA` tag relation ("ecsia:IsA"). Opt-in because the IsA relation flips the world to
|
|
26
|
+
* two-word reactivity log entries, which a prefab-free, relation-free world should not pay.
|
|
27
|
+
*/
|
|
28
|
+
prefabs?: boolean;
|
|
22
29
|
maxHotArchetypes?: number;
|
|
23
30
|
reactivity?: ReactivityOptions;
|
|
24
31
|
scheduler?: SchedulerOptions;
|
|
@@ -40,6 +47,7 @@ export interface ResolvedWorldOptions {
|
|
|
40
47
|
/** Derived: 32 - generationBits. */
|
|
41
48
|
readonly indexBits: number;
|
|
42
49
|
readonly threaded: boolean;
|
|
50
|
+
readonly prefabs: boolean;
|
|
43
51
|
readonly maxHotArchetypes: number;
|
|
44
52
|
readonly reactivity: ResolvedReactivityOptions;
|
|
45
53
|
readonly scheduler: {
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAA;AACxD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,CAAA;AAClD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,qBAAqB,CAAC,EAAE,cAAc,CAAA;IACtC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAE3B,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAG5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,QAAQ,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAA;AACxD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,CAAA;AAClD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,qBAAqB,CAAC,EAAE,cAAc,CAAA;IACtC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAE3B,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAG5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAGjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAGzB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,qBAAqB,EAAE,cAAc,CAAA;IAC9C,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAA;CACvD;AAED,0EAA0E;AAC1E,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAkB,IAAI,iBAAgB;gBAC1B,OAAO,EAAE,MAAM;CAG5B;AAID,wBAAgB,cAAc,CAAC,OAAO,GAAE,YAAiB,GAAG,oBAAoB,CA6E/E"}
|
package/dist/config.js
CHANGED
|
@@ -32,6 +32,7 @@ export function resolveOptions(options = {}) {
|
|
|
32
32
|
throw new ConfigError(`maxHotArchetypes must be a positive integer; got ${maxHotArchetypes}`);
|
|
33
33
|
}
|
|
34
34
|
const relations = options.relations ?? [];
|
|
35
|
+
const prefabs = options.prefabs ?? false;
|
|
35
36
|
const r = options.reactivity ?? {};
|
|
36
37
|
const maxWritesPerFrame = r.maxWritesPerFrame ?? maxEntities * 4;
|
|
37
38
|
const maxShapeChangesPerFrame = r.maxShapeChangesPerFrame ?? maxEntities * 2;
|
|
@@ -41,8 +42,13 @@ export function resolveOptions(options = {}) {
|
|
|
41
42
|
if (!isPositiveInt(maxShapeChangesPerFrame)) {
|
|
42
43
|
throw new ConfigError(`reactivity.maxShapeChangesPerFrame must be a positive integer; got ${maxShapeChangesPerFrame}`);
|
|
43
44
|
}
|
|
44
|
-
// Two-word log entries when any relation is registered ( C2).
|
|
45
|
-
|
|
45
|
+
// Two-word log entries when any relation is registered ( C2). prefabs: true registers the
|
|
46
|
+
// built-in IsA relation, so it flips the width the same way a declared relation does. An
|
|
47
|
+
// explicit one-word override is contradictory there — pair shape entries need the second word.
|
|
48
|
+
if (r.logEntryWords === 1 && (relations.length > 0 || prefabs)) {
|
|
49
|
+
throw new ConfigError('reactivity.logEntryWords: 1 is incompatible with relations/prefabs — pair shape-log entries need two words; drop the override or use logEntryWords: 2');
|
|
50
|
+
}
|
|
51
|
+
const logEntryWords = r.logEntryWords ?? (relations.length > 0 || prefabs ? 2 : 1);
|
|
46
52
|
const workers = options.scheduler?.workers ?? 0;
|
|
47
53
|
if (typeof workers === 'number' && (!Number.isInteger(workers) || workers < 0)) {
|
|
48
54
|
throw new ConfigError(`scheduler.workers must be a non-negative integer or 'no-sab'; got ${workers}`);
|
|
@@ -55,6 +61,7 @@ export function resolveOptions(options = {}) {
|
|
|
55
61
|
generationBits,
|
|
56
62
|
indexBits,
|
|
57
63
|
threaded,
|
|
64
|
+
prefabs,
|
|
58
65
|
maxHotArchetypes,
|
|
59
66
|
reactivity: {
|
|
60
67
|
maxWritesPerFrame,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,13 +8,17 @@ export type { EntityHandle, EntityIndex, HandleLayout } from './entity/index.js'
|
|
|
8
8
|
export { defineComponent, defineTag, } from './component/index.js';
|
|
9
9
|
export { createStableIndex } from './util/stable-index.js';
|
|
10
10
|
export type { StableIndex } from './util/stable-index.js';
|
|
11
|
+
export { defineTopic } from './topics/index.js';
|
|
12
|
+
export type { TopicDef, TopicEvent, TopicEventInit, TopicFieldValue } from './topics/index.js';
|
|
11
13
|
export { ShapeKind, onAdd, onRemove, onChange, } from './reactivity/index.js';
|
|
12
14
|
export type { ObserverHandle, ObserverTerm, ObserverContext, } from './reactivity/index.js';
|
|
13
15
|
export type { SharedHandleManifest, ColumnGrowthNotice, ColumnGrowthLog } from './memory/index.js';
|
|
14
16
|
export { vec, vec2, vec3, vec4, staticString, object, field, MAX_QUERY_ARITY, read, write, has, without, optional, } from '@ecsia/schema';
|
|
15
|
-
export type { ScalarToken, VecToken, StaticStringToken, ObjectToken, RichToken, FieldToken, FieldSpec, FieldValue, Schema, ComponentDef, ComponentOptions, ReadView, WriteView, ReadOf, WriteOf, SchemaOf, QueryTerm, QueryElement, Query, QueryChunk, LooseQuery, ColumnSpec, ColumnSpecFor, ColumnFieldName, ColumnViewOf, ColumnViews, BoundColumnsMeta, DerivedQuery, Has, HasWrite, RelationDef, RelationOptions, PairDef, WildcardToken, Tick, } from '@ecsia/schema';
|
|
17
|
+
export type { ScalarToken, VecToken, StaticStringToken, ObjectToken, RichToken, FieldToken, FieldSpec, FieldValue, Schema, ComponentDef, ComponentOptions, ReadView, WriteView, ReadOf, WriteOf, SchemaOf, QueryTerm, QueryOptionsTerm, QueryElement, Query, QueryChunk, LooseQuery, ColumnSpec, ColumnSpecFor, ColumnFieldName, ColumnViewOf, ColumnViews, BoundColumnsMeta, DerivedQuery, Has, HasWrite, RelationDef, RelationOptions, PairDef, WildcardToken, Tick, } from '@ecsia/schema';
|
|
16
18
|
export { NO_COMPONENT, FIRST_USER_COMPONENT_ID } from './ids.js';
|
|
17
19
|
export type { WorldApplySurface, RelationsHost } from './world.js';
|
|
20
|
+
export { Topics, buildTopicCodec, TOPIC_HEADER_WORDS } from './topics/index.js';
|
|
21
|
+
export type { TopicCodec, TopicFieldCodec } from './topics/index.js';
|
|
18
22
|
export type { SerializationSurface, SerializeArchetype, SerializeComponentColumns, SerializeComponentMeta, SerializeRichField, SerializePair, SerializeRelationProvider, SerializeStructuralRecord, } from './serialize-surface.js';
|
|
19
23
|
export type { InspectSurface, InspectArchetype, InspectQuery } from './inspect-surface.js';
|
|
20
24
|
export { makeHandleLayout, ARCHETYPE_NONE, reserveEntityBlock, returnReservedIds } from './entity/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC9F,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhF,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAE9B,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGlG,OAAO,EACL,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,eAAe,EACf,IAAI,EACJ,KAAK,EACL,GAAG,EACH,OAAO,EACP,QAAQ,GACT,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,EACV,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EAER,SAAS,EACT,YAAY,EACZ,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,QAAQ,EACR,WAAW,EACX,eAAe,EACf,OAAO,EACP,aAAa,EACb,IAAI,GACL,MAAM,eAAe,CAAA;AAOtB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ export { createWorld } from './world.js';
|
|
|
17
17
|
export { NO_ENTITY, NULL_ENTITY, isNoEntity, EntityRef, handleIndex } from './entity/index.js';
|
|
18
18
|
export { defineComponent, defineTag, } from './component/index.js';
|
|
19
19
|
export { createStableIndex } from './util/stable-index.js';
|
|
20
|
+
export { defineTopic } from './topics/index.js';
|
|
20
21
|
export { ShapeKind, onAdd, onRemove, onChange, } from './reactivity/index.js';
|
|
21
22
|
// Schema surface re-exported so users import tokens/inference from @ecsia/core (the umbrella).
|
|
22
23
|
export { vec, vec2, vec3, vec4, staticString, object, field, MAX_QUERY_ARITY, read, write, has, without, optional, } from '@ecsia/schema';
|
|
@@ -25,6 +26,9 @@ export { vec, vec2, vec3, vec4, staticString, object, field, MAX_QUERY_ARITY, re
|
|
|
25
26
|
// NOT user API; kept here only because those siblings need them and exports map only `.`.
|
|
26
27
|
// ===========================================================================
|
|
27
28
|
export { NO_COMPONENT, FIRST_USER_COMPONENT_ID } from './ids.js';
|
|
29
|
+
// @ecsia/scheduler's topic seam: the store class behind `world.__topics`, plus the shared payload
|
|
30
|
+
// codec the worker-side OP_PUBLISH encoder reuses (one codec ⇒ byte-identical streams).
|
|
31
|
+
export { Topics, buildTopicCodec, TOPIC_HEADER_WORDS } from './topics/index.js';
|
|
28
32
|
export { makeHandleLayout, ARCHETYPE_NONE, reserveEntityBlock, returnReservedIds } from './entity/index.js';
|
|
29
33
|
export { encodeEid, decodeEid, elementCtor, elementBytes, makeColumnLayout, } from './memory/index.js';
|
|
30
34
|
export { buildColumnSet, bindAccessorRow } from './component/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,0CAA0C;AAC1C,mGAAmG;AACnG,gGAAgG;AAChG,4BAA4B;AAC5B,qGAAqG;AACrG,iGAAiG;AACjG,2FAA2F;AAC3F,wCAAwC;AACxC,EAAE;AACF,iGAAiG;AACjG,mGAAmG;AACnG,kFAAkF;AAOlF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG9F,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAS9B,+FAA+F;AAC/F,OAAO,EACL,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,eAAe,EACf,IAAI,EACJ,KAAK,EACL,GAAG,EACH,OAAO,EACP,QAAQ,GACT,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,0CAA0C;AAC1C,mGAAmG;AACnG,gGAAgG;AAChG,4BAA4B;AAC5B,qGAAqG;AACrG,iGAAiG;AACjG,2FAA2F;AAC3F,wCAAwC;AACxC,EAAE;AACF,iGAAiG;AACjG,mGAAmG;AACnG,kFAAkF;AAOlF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG9F,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAS9B,+FAA+F;AAC/F,OAAO,EACL,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,eAAe,EACf,IAAI,EACJ,KAAK,EACL,GAAG,EACH,OAAO,EACP,QAAQ,GACT,MAAM,eAAe,CAAA;AAyCtB,8EAA8E;AAC9E,6FAA6F;AAC7F,0FAA0F;AAC1F,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAEhE,kGAAkG;AAClG,wFAAwF;AACxF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAgB/E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG3G,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAW1B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAMtE,mDAAmD;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/query/compile.d.ts
CHANGED
|
@@ -66,6 +66,13 @@ export interface CompileContext {
|
|
|
66
66
|
* unsatisfiable, the behavior).: this NEVER mints — it only looks up already-minted ids.
|
|
67
67
|
*/
|
|
68
68
|
resolvePair?(relationId: number, target: number | symbol): ResolvedPair;
|
|
69
|
+
/**
|
|
70
|
+
* The `Prefab` tag's id when the world was created with `prefabs: true`; undefined otherwise.
|
|
71
|
+
* When set, compilation injects this bit into `notWords` (default prefab exclusion) unless the
|
|
72
|
+
* query mentions Prefab in any term or passes `{ matchPrefabs: true }`. Zero per-row cost — one
|
|
73
|
+
* more bit in a mask that is already ANDed.
|
|
74
|
+
*/
|
|
75
|
+
readonly prefabId?: ComponentId;
|
|
69
76
|
}
|
|
70
77
|
declare const WILDCARD_TAG: unique symbol;
|
|
71
78
|
export declare function compileQuery(terms: readonly QueryTerm[], ctx: CompileContext): CompiledQuery;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/query/compile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEjF,mFAAmF;AACnF,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAA;AAEhF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,yGAAyG;IACzG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qGAAqG;IACrG,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,uGAAuG;IACvG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CACnC;AAED,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9C,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAChC;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,WAAW,CAAA;IAC5C,oGAAoG;IACpG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B;;;;OAIG;IACH,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/query/compile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEjF,mFAAmF;AACnF,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAA;AAEhF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,yGAAyG;IACzG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qGAAqG;IACrG,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,uGAAuG;IACvG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CACnC;AAED,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9C,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAChC;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,WAAW,CAAA;IAC5C,oGAAoG;IACpG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B;;;;OAIG;IACH,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAA;IACvE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;CAChC;AAiBD,QAAA,MAAM,YAAY,eAAqC,CAAA;AA0GvD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa,CA0F5F;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/query/compile.js
CHANGED
|
@@ -10,7 +10,17 @@ const WILDCARD_TAG = Symbol.for('ecsia.query.wildcard');
|
|
|
10
10
|
function isPairDef(t) {
|
|
11
11
|
return typeof t === 'object' && t !== null && 'relation' in t && 'target' in t;
|
|
12
12
|
}
|
|
13
|
+
function isQueryOptions(t) {
|
|
14
|
+
return (typeof t === 'object' &&
|
|
15
|
+
t !== null &&
|
|
16
|
+
'matchPrefabs' in t &&
|
|
17
|
+
!('relation' in t) &&
|
|
18
|
+
!('__term' in t) &&
|
|
19
|
+
!('fields' in t));
|
|
20
|
+
}
|
|
13
21
|
function classifyTerm(t) {
|
|
22
|
+
if (isQueryOptions(t))
|
|
23
|
+
return { kind: 'options', def: null, pair: null, role: 'none' };
|
|
14
24
|
if (isPairDef(t)) {
|
|
15
25
|
const pair = t;
|
|
16
26
|
const isWildcard = typeof pair.target === 'symbol';
|
|
@@ -60,10 +70,17 @@ function pairHashId(pair) {
|
|
|
60
70
|
// exclusivity (the X-tag) is the relations module's contract; uses the tag/overflow form.
|
|
61
71
|
return 'p' + pair.relation.id + '.' + pair.target;
|
|
62
72
|
}
|
|
63
|
-
function canonicalHash(terms, ctx) {
|
|
73
|
+
function canonicalHash(terms, ctx, excludePrefabs) {
|
|
64
74
|
const parts = [];
|
|
75
|
+
// The injected Prefab exclusion is part of the matching constraint, so it must be part of the
|
|
76
|
+
// hash: query(A) and query(A, { matchPrefabs: true }) are distinct cache entries. An explicit
|
|
77
|
+
// without(Prefab) hashes to the same part — same constraint, same LiveQuery.
|
|
78
|
+
if (excludePrefabs)
|
|
79
|
+
parts.push('N:' + ctx.prefabId);
|
|
65
80
|
for (const t of terms) {
|
|
66
81
|
const cl = classifyTerm(t);
|
|
82
|
+
if (cl.kind === 'options')
|
|
83
|
+
continue;
|
|
67
84
|
let cid;
|
|
68
85
|
if (cl.pair !== null)
|
|
69
86
|
cid = pairHashId(cl.pair);
|
|
@@ -103,12 +120,22 @@ export function compileQuery(terms, ctx) {
|
|
|
103
120
|
const rowFilters = [];
|
|
104
121
|
const referenced = new Set();
|
|
105
122
|
let unsatisfiable = false;
|
|
123
|
+
const prefabId = ctx.prefabId;
|
|
124
|
+
let matchPrefabs = false;
|
|
125
|
+
let mentionsPrefab = false;
|
|
106
126
|
for (const t of terms) {
|
|
107
127
|
const cl = classifyTerm(t);
|
|
108
128
|
switch (cl.kind) {
|
|
129
|
+
case 'options': {
|
|
130
|
+
if (t.matchPrefabs)
|
|
131
|
+
matchPrefabs = true;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
109
134
|
case 'component': {
|
|
110
135
|
const def = cl.def;
|
|
111
136
|
const cid = ctx.idOf(def);
|
|
137
|
+
if (cid === prefabId)
|
|
138
|
+
mentionsPrefab = true;
|
|
112
139
|
referenced.add(cid);
|
|
113
140
|
addWithBit(withWords, residualWith, cid, ctx.fixedBitCount);
|
|
114
141
|
if (cl.role === 'read' || cl.role === 'write' || cl.role === 'bare') {
|
|
@@ -122,6 +149,8 @@ export function compileQuery(terms, ctx) {
|
|
|
122
149
|
}
|
|
123
150
|
case 'without': {
|
|
124
151
|
const cid = ctx.idOf(cl.def);
|
|
152
|
+
if (cid === prefabId)
|
|
153
|
+
mentionsPrefab = true;
|
|
125
154
|
referenced.add(cid);
|
|
126
155
|
addNotBit(notWords, residualWith, cid, ctx.fixedBitCount);
|
|
127
156
|
break;
|
|
@@ -129,6 +158,8 @@ export function compileQuery(terms, ctx) {
|
|
|
129
158
|
case 'optional': {
|
|
130
159
|
const def = cl.def;
|
|
131
160
|
const cid = ctx.idOf(def);
|
|
161
|
+
if (cid === prefabId)
|
|
162
|
+
mentionsPrefab = true;
|
|
132
163
|
referenced.add(cid);
|
|
133
164
|
optionalIds.push(cid);
|
|
134
165
|
valueTerms.push({ componentId: cid, role: 'optional', key: keyOf(def) });
|
|
@@ -153,6 +184,14 @@ export function compileQuery(terms, ctx) {
|
|
|
153
184
|
}
|
|
154
185
|
}
|
|
155
186
|
}
|
|
187
|
+
// Default prefab exclusion: a gameplay query must never iterate a prefab TEMPLATE. Skipped when
|
|
188
|
+
// the query names Prefab itself (With/Without/optional/read) or opts in via matchPrefabs. The bit
|
|
189
|
+
// joins referencedIds so adding/removing the Prefab tag re-tests the entity incrementally.
|
|
190
|
+
const excludePrefabs = prefabId !== undefined && !matchPrefabs && !mentionsPrefab;
|
|
191
|
+
if (excludePrefabs) {
|
|
192
|
+
referenced.add(prefabId);
|
|
193
|
+
addNotBit(notWords, residualWith, prefabId, ctx.fixedBitCount);
|
|
194
|
+
}
|
|
156
195
|
return Object.freeze({
|
|
157
196
|
withWords,
|
|
158
197
|
notWords,
|
|
@@ -161,7 +200,7 @@ export function compileQuery(terms, ctx) {
|
|
|
161
200
|
valueTerms,
|
|
162
201
|
referencedIds: [...referenced],
|
|
163
202
|
rowFilters,
|
|
164
|
-
hash: canonicalHash(terms, ctx),
|
|
203
|
+
hash: canonicalHash(terms, ctx, excludePrefabs),
|
|
165
204
|
unsatisfiable,
|
|
166
205
|
});
|
|
167
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/query/compile.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oGAAoG;AACpG,4FAA4F;AAC5F,EAAE;AACF,6EAA6E;AAC7E,6FAA6F;AAC7F,0FAA0F;AAC1F,8FAA8F;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/query/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export declare class ObserverCommandBuffer {
|
|
|
24
24
|
enterDrain(): boolean;
|
|
25
25
|
exitDrain(): void;
|
|
26
26
|
stageSpawnWith(handle: EntityHandle, defs: readonly ComponentDef<Schema>[], values?: readonly (readonly [ComponentDef<Schema>, Record<string, unknown>])[]): void;
|
|
27
|
+
stageBuildReserved(handle: EntityHandle, build: (handle: EntityHandle) => void): void;
|
|
27
28
|
stageAdd(handle: EntityHandle, def: ComponentDef<Schema>): void;
|
|
28
29
|
stageRemove(handle: EntityHandle, def: ComponentDef<Schema>): void;
|
|
29
30
|
stageDespawn(handle: EntityHandle): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer-commands.d.ts","sourceRoot":"","sources":["../../src/reactivity/observer-commands.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"observer-commands.d.ts","sourceRoot":"","sources":["../../src/reactivity/observer-commands.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAqChG,4FAA4F;AAC5F,MAAM,WAAW,oBAAoB;IACnC;yGACqG;IACrG,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAA;IAChF,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC1D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC7D,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAA;IACtC,qGAAqG;IACrG,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACpG,iEAAiE;IACjE,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAAA;IACjI,UAAU,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CACvF;AAED,qBAAa,qBAAqB;;IAOhC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,cAAc,IAAI,IAAI;IAItB,YAAY,IAAI,IAAI;IAIpB,UAAU,IAAI,OAAO;IAMrB,SAAS,IAAI,IAAI;IAIjB,cAAc,CACZ,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,SAAS,YAAY,CAAC,MAAM,CAAC,EAAE,EACrC,MAAM,GAAE,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAO,GACjF,IAAI;IAGP,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAGrF,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;IAG/D,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;IAGlE,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAGxC,YAAY,CACV,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,EACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C,IAAI;IAGP,eAAe,CACb,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,EACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,GACnB,IAAI;IAIP;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;CAgDzC"}
|
|
@@ -42,6 +42,9 @@ export class ObserverCommandBuffer {
|
|
|
42
42
|
stageSpawnWith(handle, defs, values = []) {
|
|
43
43
|
this.#pending.push({ kind: 'spawnWith', handle, defs: defs.slice(), values: values.slice() });
|
|
44
44
|
}
|
|
45
|
+
stageBuildReserved(handle, build) {
|
|
46
|
+
this.#pending.push({ kind: 'buildReserved', handle, build });
|
|
47
|
+
}
|
|
45
48
|
stageAdd(handle, def) {
|
|
46
49
|
this.#pending.push({ kind: 'add', handle, def });
|
|
47
50
|
}
|
|
@@ -82,6 +85,15 @@ export class ObserverCommandBuffer {
|
|
|
82
85
|
}
|
|
83
86
|
break;
|
|
84
87
|
}
|
|
88
|
+
case 'buildReserved': {
|
|
89
|
+
// Place the reserved handle into the EMPTY archetype, then hand it to the staged build
|
|
90
|
+
// (which performs its own single migration + value writes — the spawnFrom flush leg).
|
|
91
|
+
if (apply.isAlive(op.handle)) {
|
|
92
|
+
apply.placeReserved(op.handle, []);
|
|
93
|
+
op.build(op.handle);
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
85
97
|
case 'add':
|
|
86
98
|
if (apply.isAlive(op.handle))
|
|
87
99
|
apply.add(op.handle, op.def);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer-commands.js","sourceRoot":"","sources":["../../src/reactivity/observer-commands.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,kGAAkG;AAClG,mGAAmG;AACnG,kGAAkG;AAClG,oGAAoG;AACpG,EAAE;AACF,mGAAmG;AACnG,sGAAsG;AACtG,yFAAyF;AACzF,6FAA6F;AAC7F,2BAA2B;
|
|
1
|
+
{"version":3,"file":"observer-commands.js","sourceRoot":"","sources":["../../src/reactivity/observer-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FieldDescriptor } from '@ecsia/schema';
|
|
2
|
+
export interface TopicFieldCodec {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
/** Words this field occupies in a row. */
|
|
5
|
+
readonly words: number;
|
|
6
|
+
/** Word offset of this field within the row's payload section. */
|
|
7
|
+
readonly offset: number;
|
|
8
|
+
readonly encode: (value: unknown, out: {
|
|
9
|
+
[i: number]: number;
|
|
10
|
+
}, at: number) => void;
|
|
11
|
+
readonly decode: (words: ArrayLike<number>, at: number) => unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface TopicCodec {
|
|
14
|
+
/** Total payload words per event row (sum of field words; 0 for a payload-less topic). */
|
|
15
|
+
readonly fieldWords: number;
|
|
16
|
+
readonly fields: readonly TopicFieldCodec[];
|
|
17
|
+
/** Encode an init object into `out[at..at+fieldWords)`; missing fields take schema defaults. */
|
|
18
|
+
encode(init: Record<string, unknown> | undefined, out: {
|
|
19
|
+
[i: number]: number;
|
|
20
|
+
}, at: number): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function buildTopicCodec(fields: readonly FieldDescriptor[]): TopicCodec;
|
|
23
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/topics/codec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAUpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnF,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;CACnE;AAED,MAAM,WAAW,UAAU;IACzB,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;IAC3C,gGAAgG;IAChG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClG;AAkFD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,UAAU,CAoB9E"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Topic payload ↔ u32 field-word codec. An event encodes to fixed-width field words by the exact
|
|
2
|
+
// rules of the command-buffer field encoding (f64 two-word low/high, f32 stored as its bit-pattern,
|
|
3
|
+
// eid as the full handle word, vec as N consecutive slots, every sub-word integer widened to one
|
|
4
|
+
// word) so the worker-side OP_PUBLISH payload and the main-thread `publish()` staging produce
|
|
5
|
+
// byte-identical rows — the precondition for the byte-identical canonical stream.
|
|
6
|
+
// Shared scratch for f32-bit aliasing and the f64 two-word split (host-native byte order,
|
|
7
|
+
// consistent within a process; buffers are shared/transferred, never re-serialized).
|
|
8
|
+
const scratch = new ArrayBuffer(8);
|
|
9
|
+
const scratchF32 = new Float32Array(scratch);
|
|
10
|
+
const scratchF64 = new Float64Array(scratch);
|
|
11
|
+
const scratchU32 = new Uint32Array(scratch);
|
|
12
|
+
const scratchI32 = new Int32Array(scratch);
|
|
13
|
+
function scalarParts(token, d) {
|
|
14
|
+
if (token === 'f32') {
|
|
15
|
+
return {
|
|
16
|
+
words: 1,
|
|
17
|
+
encode: (v, out, at) => {
|
|
18
|
+
scratchF32[0] = +v;
|
|
19
|
+
out[at] = scratchU32[0];
|
|
20
|
+
},
|
|
21
|
+
decode: (w, at) => {
|
|
22
|
+
scratchU32[0] = w[at];
|
|
23
|
+
return scratchF32[0];
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (token === 'f64') {
|
|
28
|
+
return {
|
|
29
|
+
words: 2,
|
|
30
|
+
encode: (v, out, at) => {
|
|
31
|
+
scratchF64[0] = +v;
|
|
32
|
+
out[at] = scratchU32[0];
|
|
33
|
+
out[at + 1] = scratchU32[1];
|
|
34
|
+
},
|
|
35
|
+
decode: (w, at) => {
|
|
36
|
+
scratchU32[0] = w[at];
|
|
37
|
+
scratchU32[1] = w[at + 1];
|
|
38
|
+
return scratchF64[0];
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Integer / bool / eid / staticString: one word, round-tripped through the descriptor's own
|
|
43
|
+
// encode/decode so values read back exactly as a component column read would present them.
|
|
44
|
+
return {
|
|
45
|
+
words: 1,
|
|
46
|
+
encode: (v, out, at) => {
|
|
47
|
+
out[at] = d.encode(v) >>> 0;
|
|
48
|
+
},
|
|
49
|
+
decode: (w, at) => {
|
|
50
|
+
// i32-class slots round-trip through a signed reinterpret before the descriptor decode.
|
|
51
|
+
scratchU32[0] = w[at];
|
|
52
|
+
return d.decode(scratchI32[0]);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function fieldCodec(d, offset) {
|
|
57
|
+
const token = d.token;
|
|
58
|
+
if (typeof token === 'string') {
|
|
59
|
+
return { name: d.name, offset, ...scalarParts(token, d) };
|
|
60
|
+
}
|
|
61
|
+
const kind = token.kind;
|
|
62
|
+
if (kind === 'vec') {
|
|
63
|
+
const elem = token.elem;
|
|
64
|
+
const len = token.len;
|
|
65
|
+
const per = scalarParts(elem, d);
|
|
66
|
+
return {
|
|
67
|
+
name: d.name,
|
|
68
|
+
offset,
|
|
69
|
+
words: per.words * len,
|
|
70
|
+
encode: (v, out, at) => {
|
|
71
|
+
const arr = v;
|
|
72
|
+
for (let i = 0; i < len; i++)
|
|
73
|
+
per.encode(arr[i], out, at + i * per.words);
|
|
74
|
+
},
|
|
75
|
+
decode: (w, at) => {
|
|
76
|
+
const arr = [];
|
|
77
|
+
for (let i = 0; i < len; i++)
|
|
78
|
+
arr.push(per.decode(w, at + i * per.words));
|
|
79
|
+
return arr;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (kind === 'staticString') {
|
|
84
|
+
// Any non-f32/non-f64 token takes scalarParts' descriptor fallback (one word via d.encode /
|
|
85
|
+
// d.decode — the choice-index mapping); 'u32' only signals "one unsigned word" to the reader.
|
|
86
|
+
return { name: d.name, offset, ...scalarParts('u32', d) };
|
|
87
|
+
}
|
|
88
|
+
// Unreachable for a def produced by defineTopic (object/'string' rejected there).
|
|
89
|
+
throw new Error(`topics: field '${d.name}' is not encodable in a topic ring`);
|
|
90
|
+
}
|
|
91
|
+
export function buildTopicCodec(fields) {
|
|
92
|
+
const codecs = [];
|
|
93
|
+
let offset = 0;
|
|
94
|
+
for (const d of fields) {
|
|
95
|
+
const c = fieldCodec(d, offset);
|
|
96
|
+
codecs.push(c);
|
|
97
|
+
offset += c.words;
|
|
98
|
+
}
|
|
99
|
+
const defaults = new Map();
|
|
100
|
+
for (const d of fields)
|
|
101
|
+
defaults.set(d.name, d.default);
|
|
102
|
+
return {
|
|
103
|
+
fieldWords: offset,
|
|
104
|
+
fields: codecs,
|
|
105
|
+
encode(init, out, at) {
|
|
106
|
+
for (const f of codecs) {
|
|
107
|
+
const value = init?.[f.name] ?? defaults.get(f.name);
|
|
108
|
+
f.encode(value, out, at + f.offset);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/topics/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ComponentId, FieldDescriptor, FieldToken, FieldValue, ScalarToken, ScalarValue, Schema, TokenOf, VecToken } from '@ecsia/schema';
|
|
2
|
+
/**
|
|
3
|
+
* A typed inter-system message queue ("this happened"), as opposed to an observer ("this component
|
|
4
|
+
* changed"). Define once at module scope with `defineTopic`; systems declare interest with the
|
|
5
|
+
* `publish:` / `consume:` keys on `defineSystem`, and code outside systems publishes between frames
|
|
6
|
+
* via `world.publish`. `id` is the topic's virtual ComponentId, minted when a world registers it.
|
|
7
|
+
*/
|
|
8
|
+
export interface TopicDef<S extends Schema = Schema, N extends string = string> {
|
|
9
|
+
readonly name: N;
|
|
10
|
+
readonly schema: S;
|
|
11
|
+
readonly fields: readonly FieldDescriptor[];
|
|
12
|
+
/** The dense virtual ComponentId once registered with a world; -1 (UNREGISTERED) before. */
|
|
13
|
+
id: ComponentId;
|
|
14
|
+
readonly __ecsiaTopic: true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The value an event field decodes to on the consume side. Scalars decode like component reads;
|
|
18
|
+
* `vec` fields decode to a plain readonly number array (events are copied rows, not live views).
|
|
19
|
+
*/
|
|
20
|
+
export type TopicFieldValue<F extends FieldToken> = TokenOf<F> extends VecToken<infer E, number> ? readonly ScalarValue<E>[] : FieldValue<TokenOf<F>>;
|
|
21
|
+
/** One delivered event: a typed read view over the payload schema. Pooled — never store it. */
|
|
22
|
+
export type TopicEvent<S extends Schema> = {
|
|
23
|
+
readonly [K in keyof S]: TopicFieldValue<S[K]>;
|
|
24
|
+
};
|
|
25
|
+
/** The payload accepted by `publish` — missing fields take their schema defaults. */
|
|
26
|
+
export type TopicEventInit<S extends Schema> = {
|
|
27
|
+
readonly [K in keyof S]?: TokenOf<S[K]> extends VecToken<ScalarToken, number> ? ArrayLike<number> : FieldValue<TokenOf<S[K]>>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Define a typed event queue. `schema` uses the component field tokens (`'f32'`, `'eid'`, `vec`,
|
|
31
|
+
* `staticString`, ...); `object<T>` and `'string'` fields are rejected — event rows are fixed-width
|
|
32
|
+
* u32 words so the stream is shareable, byte-deterministic, and serializable.
|
|
33
|
+
*
|
|
34
|
+
* `eid` payload fields carry the full generational handle with NO liveness validation on delivery:
|
|
35
|
+
* an event is a fact about the past, and the referenced entity may legitimately be dead by the time
|
|
36
|
+
* a consumer reads it (especially on next-frame delivery). Check `world.isAlive(ev.target)` if the
|
|
37
|
+
* consumer needs the entity.
|
|
38
|
+
*
|
|
39
|
+
* Like a `defineComponent` def, a topic def binds to ONE world: registration writes the minted id
|
|
40
|
+
* into the def, so a second world (another test, an HMR cycle) must call `defineTopic` afresh
|
|
41
|
+
* rather than reuse the module-scope def — reuse throws "already registered with another world".
|
|
42
|
+
*/
|
|
43
|
+
export declare function defineTopic<const S extends Schema, const N extends string>(name: N, schema: S): TopicDef<S, N>;
|
|
44
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/topics/define.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,OAAO,EACP,QAAQ,EACT,MAAM,eAAe,CAAA;AAGtB;;;;;GAKG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM;IAC5E,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;IAC3C,4FAA4F;IAC5F,EAAE,EAAE,WAAW,CAAA;IACf,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,UAAU,IAC9C,OAAO,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnG,+FAA+F;AAC/F,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI;IACzC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI;IAC7C,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,GACzE,SAAS,CAAC,MAAM,CAAC,GACjB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAA;AAQD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAuC9G"}
|