@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 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: {
@@ -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;IAGlB,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,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,CAoE/E"}
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
- const logEntryWords = r.logEntryWords ?? (relations.length > 0 ? 2 : 1);
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,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AA+DxE,0EAA0E;AAC1E,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClB,IAAI,GAAG,aAAa,CAAA;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF;AAED,MAAM,aAAa,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE1E,MAAM,UAAU,cAAc,CAAC,UAAwB,EAAE;IACvD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAA;IACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,EAAE,EAAE,CAAC;QACnF,MAAM,IAAI,WAAW,CACnB,mGAAmG,cAAc,EAAE,CACpH,CAAA;IACH,CAAC;IACD,MAAM,SAAS,GAAG,EAAE,GAAG,cAAc,CAAA;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;IAE1C,4FAA4F;IAC5F,IAAI,cAAc,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,WAAW,CAAC,mFAAmF,CAAC,CAAA;IAC5G,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAA;IAClD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,WAAW,CAAC,+CAA+C,WAAW,EAAE,CAAC,CAAA;IACrF,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,IAAI,SAAS,CAAA;IAC/B,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,WAAW,CACnB,gBAAgB,WAAW,+BAA+B,SAAS,MAAM,QAAQ,uBAAuB,cAAc,EAAE,CACzH,CAAA;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,CAAC,CAAA;IACrF,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,WAAW,CAAC,oDAAoD,gBAAgB,EAAE,CAAC,CAAA;IAC/F,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAA;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;IAClC,MAAM,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,IAAI,WAAW,GAAG,CAAC,CAAA;IAChE,MAAM,uBAAuB,GAAG,CAAC,CAAC,uBAAuB,IAAI,WAAW,GAAG,CAAC,CAAA;IAC5E,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,WAAW,CAAC,gEAAgE,iBAAiB,EAAE,CAAC,CAAA;IAC5G,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,WAAW,CAAC,sEAAsE,uBAAuB,EAAE,CAAC,CAAA;IACxH,CAAC;IACD,8DAA8D;IAC9D,MAAM,aAAa,GAAU,CAAC,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9E,MAAM,OAAO,GAAiB,OAAO,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,CAAA;IAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,WAAW,CAAC,qEAAqE,OAAO,EAAE,CAAC,CAAA;IACvG,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,SAAS;QACT,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;QAC9B,WAAW;QACX,cAAc;QACd,SAAS;QACT,QAAQ;QACR,gBAAgB;QAChB,UAAU,EAAE;YACV,iBAAiB;YACjB,uBAAuB;YACvB,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,WAAW;YACjD,qBAAqB,EAAE,CAAC,CAAC,qBAAqB,IAAI,WAAW;YAC7D,aAAa;YACb,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,KAAK;SACpC;QACD,SAAS,EAAE,EAAE,OAAO,EAAE;KACvB,CAAA;AACH,CAAC"}
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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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;AAwCtB,8EAA8E;AAC9E,6FAA6F;AAC7F,0FAA0F;AAC1F,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAgBhE,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"}
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"}
@@ -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;CACxE;AAiBD,QAAA,MAAM,YAAY,eAAqC,CAAA;AAyFvD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa,CAuE5F;AAED,OAAO,EAAE,YAAY,EAAE,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"}
@@ -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":"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"}
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;AA6BhG,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,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;CAuCzC"}
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":"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"}
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"}