iris-ecs 0.0.1

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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +721 -0
  3. package/dist/actions.d.ts +43 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +35 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/archetype.d.ts +194 -0
  8. package/dist/archetype.d.ts.map +1 -0
  9. package/dist/archetype.js +412 -0
  10. package/dist/archetype.js.map +1 -0
  11. package/dist/component.d.ts +89 -0
  12. package/dist/component.d.ts.map +1 -0
  13. package/dist/component.js +237 -0
  14. package/dist/component.js.map +1 -0
  15. package/dist/encoding.d.ts +204 -0
  16. package/dist/encoding.d.ts.map +1 -0
  17. package/dist/encoding.js +215 -0
  18. package/dist/encoding.js.map +1 -0
  19. package/dist/entity.d.ts +129 -0
  20. package/dist/entity.d.ts.map +1 -0
  21. package/dist/entity.js +243 -0
  22. package/dist/entity.js.map +1 -0
  23. package/dist/event.d.ts +237 -0
  24. package/dist/event.d.ts.map +1 -0
  25. package/dist/event.js +293 -0
  26. package/dist/event.js.map +1 -0
  27. package/dist/filters.d.ts +121 -0
  28. package/dist/filters.d.ts.map +1 -0
  29. package/dist/filters.js +202 -0
  30. package/dist/filters.js.map +1 -0
  31. package/dist/index.d.ts +24 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +54 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/name.d.ts +70 -0
  36. package/dist/name.d.ts.map +1 -0
  37. package/dist/name.js +172 -0
  38. package/dist/name.js.map +1 -0
  39. package/dist/observer.d.ts +83 -0
  40. package/dist/observer.d.ts.map +1 -0
  41. package/dist/observer.js +62 -0
  42. package/dist/observer.js.map +1 -0
  43. package/dist/query.d.ts +198 -0
  44. package/dist/query.d.ts.map +1 -0
  45. package/dist/query.js +299 -0
  46. package/dist/query.js.map +1 -0
  47. package/dist/registry.d.ts +118 -0
  48. package/dist/registry.d.ts.map +1 -0
  49. package/dist/registry.js +112 -0
  50. package/dist/registry.js.map +1 -0
  51. package/dist/relation.d.ts +60 -0
  52. package/dist/relation.d.ts.map +1 -0
  53. package/dist/relation.js +171 -0
  54. package/dist/relation.js.map +1 -0
  55. package/dist/removal.d.ts +27 -0
  56. package/dist/removal.d.ts.map +1 -0
  57. package/dist/removal.js +66 -0
  58. package/dist/removal.js.map +1 -0
  59. package/dist/resource.d.ts +78 -0
  60. package/dist/resource.d.ts.map +1 -0
  61. package/dist/resource.js +86 -0
  62. package/dist/resource.js.map +1 -0
  63. package/dist/scheduler.d.ts +106 -0
  64. package/dist/scheduler.d.ts.map +1 -0
  65. package/dist/scheduler.js +204 -0
  66. package/dist/scheduler.js.map +1 -0
  67. package/dist/schema.d.ts +117 -0
  68. package/dist/schema.d.ts.map +1 -0
  69. package/dist/schema.js +113 -0
  70. package/dist/schema.js.map +1 -0
  71. package/dist/world.d.ts +172 -0
  72. package/dist/world.d.ts.map +1 -0
  73. package/dist/world.js +127 -0
  74. package/dist/world.js.map +1 -0
  75. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archetype.js","sourceRoot":"","sources":["../src/archetype.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { Component, Entity, EntityId, Pair, Relation, Tag } from "./encoding.js";
2
+ import type { InferSchema, InferSchemaRecord, SchemaRecord } from "./schema.js";
3
+ import type { World } from "./world.js";
4
+ export declare function addComponent(world: World, entityId: EntityId, componentId: Entity | Tag | Pair<Relation<Record<string, never>>>): void;
5
+ export declare function addComponent<S extends SchemaRecord>(world: World, entityId: EntityId, componentId: Component<S> | Pair<Relation<S>>, data: InferSchemaRecord<S>): void;
6
+ /**
7
+ * Remove component from entity.
8
+ *
9
+ * Moves entity to new archetype without component. Idempotent if not present.
10
+ *
11
+ * @param world - World instance
12
+ * @param entityId - Entity to modify
13
+ * @param componentId - Component to remove
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * addComponent(world, entity, tag);
18
+ * removeComponent(world, entity, tag);
19
+ * ```
20
+ */
21
+ export declare function removeComponent(world: World, entityId: EntityId, componentId: EntityId): void;
22
+ /**
23
+ * Check if entity has component.
24
+ *
25
+ * Returns false for dead entities or if component not present.
26
+ *
27
+ * @param world - World instance
28
+ * @param entityId - Entity to check
29
+ * @param componentId - Component to check
30
+ * @returns True if entity has component
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * addComponent(world, entity, tag);
35
+ * hasComponent(world, entity, tag); // true
36
+ * ```
37
+ */
38
+ export declare function hasComponent(world: World, entityId: EntityId, componentId: EntityId): boolean;
39
+ /**
40
+ * Get component field value.
41
+ *
42
+ * @param world - World instance
43
+ * @param entityId - Entity to query
44
+ * @param componentId - Data component
45
+ * @param fieldName - Field name
46
+ * @returns Field value or undefined if component/field not present
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const Position = defineComponent("Position", { x: Type.f32(), y: Type.f32() });
51
+ * const x = getComponentValue(world, entity, Position, 'x');
52
+ * ```
53
+ */
54
+ export declare function getComponentValue<S extends SchemaRecord, K extends keyof S>(world: World, entityId: EntityId, componentId: Component<S> | Pair<Relation<S>>, fieldName: K): InferSchema<S[K]> | undefined;
55
+ /**
56
+ * Set component field value.
57
+ *
58
+ * @param world - World instance
59
+ * @param entityId - Entity to modify
60
+ * @param componentId - Data component
61
+ * @param fieldName - Field name
62
+ * @param value - New value
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * addComponent(world, entity, Position, { x: 0.0, y: 0.0 });
67
+ * setComponentValue(world, entity, Position, 'x', 10.0);
68
+ * ```
69
+ */
70
+ export declare function setComponentValue<S extends SchemaRecord, K extends keyof S>(world: World, entityId: EntityId, componentId: Component<S> | Pair<Relation<S>>, fieldName: K, value: InferSchema<S[K]>): void;
71
+ /**
72
+ * Emit component changed event without setting a value.
73
+ *
74
+ * @param world - World instance
75
+ * @param entityId - Entity with the component
76
+ * @param componentId - Component that was changed
77
+ *
78
+ * @example
79
+ * emitComponentChanged(world, entity, Position); // Notify change tracking
80
+ */
81
+ export declare function emitComponentChanged(world: World, entityId: EntityId, componentId: EntityId): void;
82
+ /**
83
+ * Remove component from all entities that have it.
84
+ *
85
+ * @param world - World instance
86
+ * @param componentId - Component to remove from all entities
87
+ */
88
+ export declare function cascadeRemoveComponent(world: World, componentId: EntityId): void;
89
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAMtF,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMxC,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAChE,IAAI,CAAC;AAER,wBAAgB,YAAY,CAAC,CAAC,SAAS,YAAY,EACjD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7C,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACzB,IAAI,CAAC;AAwER;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CAsD7F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAI7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,CAAC,EACzE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7C,SAAS,EAAE,CAAC,GACX,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAc/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,CAAC,EACzE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7C,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvB,IAAI,CAqBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CASlG;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CAiBhF"}
@@ -0,0 +1,237 @@
1
+ import { archetypeTraverseAdd, archetypeTraverseRemove, destroyArchetype } from "./archetype.js";
2
+ import { encodePair, isPair } from "./encoding.js";
3
+ import { ensureEntity, moveEntityToArchetype } from "./entity.js";
4
+ import { fireObserverEvent } from "./observer.js";
5
+ import { Exclusive, Wildcard } from "./registry.js";
6
+ import { getPairRelation, getPairTarget, getRelationTargets } from "./relation.js";
7
+ /**
8
+ * Add component to entity.
9
+ *
10
+ * Moves entity to new archetype with component. Idempotent if already present.
11
+ * For data components/pairs, pass initial field values.
12
+ *
13
+ * @param world - World instance
14
+ * @param entityId - Entity to modify
15
+ * @param componentId - Tag, data component, or pair to add
16
+ * @param data - Initial field values for data components (optional)
17
+ *
18
+ * @example
19
+ * addComponent(world, entity, Player);
20
+ * addComponent(world, entity, Position, { x: 0, y: 0 });
21
+ * addComponent(world, child, pair(ChildOf, parent));
22
+ */
23
+ export function addComponent(world, entityId, componentId, data) {
24
+ // Idempotent: already has component
25
+ if (hasComponent(world, entityId, componentId)) {
26
+ return;
27
+ }
28
+ // Exclusive enforcement: remove old target before adding new
29
+ if (isPair(componentId)) {
30
+ const target = getPairTarget(world, componentId);
31
+ const relation = getPairRelation(componentId);
32
+ if (hasComponent(world, relation, Exclusive) && target !== Wildcard) {
33
+ const oldTargets = getRelationTargets(world, entityId, relation);
34
+ if (oldTargets.length > 0) {
35
+ removeComponent(world, entityId, encodePair(relation, oldTargets[0]));
36
+ }
37
+ }
38
+ }
39
+ const entityMeta = ensureEntity(world, entityId);
40
+ const componentMeta = ensureEntity(world, componentId);
41
+ const schema = componentMeta.schema;
42
+ // Find target archetype
43
+ let toArchetype = archetypeTraverseAdd(world, entityMeta.archetype, componentId, schema);
44
+ // Add wildcard pairs for query patterns: pair(Wildcard, target) and pair(relation, Wildcard)
45
+ if (isPair(componentId)) {
46
+ const target = getPairTarget(world, componentId);
47
+ const relation = getPairRelation(componentId);
48
+ toArchetype = archetypeTraverseAdd(world, toArchetype, encodePair(Wildcard, target));
49
+ toArchetype = archetypeTraverseAdd(world, toArchetype, encodePair(relation, Wildcard));
50
+ }
51
+ moveEntityToArchetype(world, entityId, toArchetype);
52
+ if (data) {
53
+ for (const fieldName in data) {
54
+ const value = data[fieldName];
55
+ setComponentValue(world, entityId, componentId, fieldName, value);
56
+ }
57
+ }
58
+ // Fire after move so observers can access component data
59
+ fireObserverEvent(world, "componentAdded", componentId, entityId);
60
+ }
61
+ /**
62
+ * Remove component from entity.
63
+ *
64
+ * Moves entity to new archetype without component. Idempotent if not present.
65
+ *
66
+ * @param world - World instance
67
+ * @param entityId - Entity to modify
68
+ * @param componentId - Component to remove
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * addComponent(world, entity, tag);
73
+ * removeComponent(world, entity, tag);
74
+ * ```
75
+ */
76
+ export function removeComponent(world, entityId, componentId) {
77
+ const meta = ensureEntity(world, entityId);
78
+ // Find target archetype
79
+ let toArchetype = archetypeTraverseRemove(world, meta.archetype, componentId);
80
+ // Idempotent check
81
+ if (toArchetype === meta.archetype) {
82
+ return;
83
+ }
84
+ // Remove wildcard pairs only if no other pairs need them
85
+ if (isPair(componentId)) {
86
+ const target = getPairTarget(world, componentId);
87
+ const relation = getPairRelation(componentId);
88
+ const wildcardTargetPair = encodePair(Wildcard, target);
89
+ const relationWildcardPair = encodePair(relation, Wildcard);
90
+ let hasOtherTarget = false;
91
+ let hasOtherRelation = false;
92
+ for (const typeId of meta.archetype.types) {
93
+ if (typeId === componentId ||
94
+ typeId === wildcardTargetPair ||
95
+ typeId === relationWildcardPair ||
96
+ !isPair(typeId)) {
97
+ continue;
98
+ }
99
+ if (getPairTarget(world, typeId) === target) {
100
+ hasOtherTarget = true;
101
+ }
102
+ if (getPairRelation(typeId) === relation) {
103
+ hasOtherRelation = true;
104
+ }
105
+ }
106
+ if (!hasOtherTarget) {
107
+ toArchetype = archetypeTraverseRemove(world, toArchetype, wildcardTargetPair);
108
+ }
109
+ if (!hasOtherRelation) {
110
+ toArchetype = archetypeTraverseRemove(world, toArchetype, relationWildcardPair);
111
+ }
112
+ }
113
+ // Fire before move so observers can access component data
114
+ fireObserverEvent(world, "componentRemoved", componentId, entityId);
115
+ moveEntityToArchetype(world, entityId, toArchetype);
116
+ }
117
+ /**
118
+ * Check if entity has component.
119
+ *
120
+ * Returns false for dead entities or if component not present.
121
+ *
122
+ * @param world - World instance
123
+ * @param entityId - Entity to check
124
+ * @param componentId - Component to check
125
+ * @returns True if entity has component
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * addComponent(world, entity, tag);
130
+ * hasComponent(world, entity, tag); // true
131
+ * ```
132
+ */
133
+ export function hasComponent(world, entityId, componentId) {
134
+ const meta = ensureEntity(world, entityId);
135
+ return meta.archetype.typesSet.has(componentId);
136
+ }
137
+ /**
138
+ * Get component field value.
139
+ *
140
+ * @param world - World instance
141
+ * @param entityId - Entity to query
142
+ * @param componentId - Data component
143
+ * @param fieldName - Field name
144
+ * @returns Field value or undefined if component/field not present
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const Position = defineComponent("Position", { x: Type.f32(), y: Type.f32() });
149
+ * const x = getComponentValue(world, entity, Position, 'x');
150
+ * ```
151
+ */
152
+ export function getComponentValue(world, entityId, componentId, fieldName) {
153
+ const meta = ensureEntity(world, entityId);
154
+ const fieldColumns = meta.archetype.columns.get(componentId);
155
+ if (!fieldColumns) {
156
+ return;
157
+ }
158
+ const column = fieldColumns[fieldName];
159
+ if (!column) {
160
+ return;
161
+ }
162
+ return column[meta.row];
163
+ }
164
+ /**
165
+ * Set component field value.
166
+ *
167
+ * @param world - World instance
168
+ * @param entityId - Entity to modify
169
+ * @param componentId - Data component
170
+ * @param fieldName - Field name
171
+ * @param value - New value
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * addComponent(world, entity, Position, { x: 0.0, y: 0.0 });
176
+ * setComponentValue(world, entity, Position, 'x', 10.0);
177
+ * ```
178
+ */
179
+ export function setComponentValue(world, entityId, componentId, fieldName, value) {
180
+ const meta = ensureEntity(world, entityId);
181
+ const fieldColumns = meta.archetype.columns.get(componentId);
182
+ if (!fieldColumns) {
183
+ return;
184
+ }
185
+ const column = fieldColumns[fieldName];
186
+ if (!column) {
187
+ return;
188
+ }
189
+ column[meta.row] = value;
190
+ const ticks = meta.archetype.ticks.get(componentId);
191
+ if (ticks) {
192
+ ticks.changed[meta.row] = world.execution.tick;
193
+ }
194
+ fireObserverEvent(world, "componentChanged", componentId, entityId);
195
+ }
196
+ /**
197
+ * Emit component changed event without setting a value.
198
+ *
199
+ * @param world - World instance
200
+ * @param entityId - Entity with the component
201
+ * @param componentId - Component that was changed
202
+ *
203
+ * @example
204
+ * emitComponentChanged(world, entity, Position); // Notify change tracking
205
+ */
206
+ export function emitComponentChanged(world, entityId, componentId) {
207
+ const meta = ensureEntity(world, entityId);
208
+ const ticks = meta.archetype.ticks.get(componentId);
209
+ if (ticks) {
210
+ ticks.changed[meta.row] = world.execution.tick;
211
+ }
212
+ fireObserverEvent(world, "componentChanged", componentId, entityId);
213
+ }
214
+ // ============================================================================
215
+ // Component Cleanup
216
+ // ============================================================================
217
+ /**
218
+ * Remove component from all entities that have it.
219
+ *
220
+ * @param world - World instance
221
+ * @param componentId - Component to remove from all entities
222
+ */
223
+ export function cascadeRemoveComponent(world, componentId) {
224
+ const meta = ensureEntity(world, componentId);
225
+ // Copy records - will be modified during iteration as entities move
226
+ const archetypes = [...meta.records];
227
+ for (const archetype of archetypes) {
228
+ // Iterate backward for deletion safety (entities removed during iteration)
229
+ for (let i = archetype.entities.length - 1; i >= 0; i--) {
230
+ const entityId = archetype.entities[i];
231
+ removeComponent(world, entityId, componentId);
232
+ }
233
+ // Destroy now-invalid archetype (contains dead component type)
234
+ destroyArchetype(world, archetype);
235
+ }
236
+ }
237
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAqBnF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAY,EACZ,QAAkB,EAClB,WAAqB,EACrB,IAA2B;IAE3B,oCAAoC;IACpC,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE9C,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpE,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAEpC,wBAAwB;IACxB,IAAI,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAEzF,6FAA6F;IAC7F,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE9C,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAA2B,EAAE,SAAoB,EAAE,KAAK,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,QAAkB,EAAE,WAAqB;IACrF,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3C,wBAAwB;IACxB,IAAI,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9E,mBAAmB;IACnB,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IAED,yDAAyD;IACzD,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE9C,MAAM,kBAAkB,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,oBAAoB,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC1C,IACE,MAAM,KAAK,WAAW;gBACtB,MAAM,KAAK,kBAAkB;gBAC7B,MAAM,KAAK,oBAAoB;gBAC/B,CAAC,MAAM,CAAC,MAAM,CAAC,EACf,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC5C,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzC,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEpE,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,QAAkB,EAAE,WAAqB;IAClF,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAY,EACZ,QAAkB,EAClB,WAA6C,EAC7C,SAAY;IAEZ,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAmB,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAsB,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAY,EACZ,QAAkB,EAClB,WAA6C,EAC7C,SAAY,EACZ,KAAwB;IAExB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAmB,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,QAAkB,EAAE,WAAqB;IAC1F,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY,EAAE,WAAqB;IACxE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE9C,oEAAoE;IACpE,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,2EAA2E;QAC3E,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAExC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,+DAA+D;QAC/D,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,204 @@
1
+ import type { Schema, SchemaRecord } from "./schema.js";
2
+ /**
3
+ * Entity type constant (0x1).
4
+ */
5
+ export declare const ENTITY_TYPE = 1;
6
+ /**
7
+ * Tag type constant (0x2).
8
+ */
9
+ export declare const TAG_TYPE = 2;
10
+ /**
11
+ * Component type constant (0x3).
12
+ */
13
+ export declare const COMPONENT_TYPE = 3;
14
+ /**
15
+ * Relationship type constant (0x4).
16
+ */
17
+ export declare const RELATIONSHIP_TYPE = 4;
18
+ /**
19
+ * Maximum raw ID for entities, components, and tags (20-bit).
20
+ */
21
+ export declare const ID_MASK_20 = 1048575;
22
+ /**
23
+ * Maximum raw ID for relationships (8-bit).
24
+ */
25
+ export declare const ID_MASK_8 = 255;
26
+ /**
27
+ * Entity brand for nominal typing.
28
+ */
29
+ declare const ENTITY_BRAND: unique symbol;
30
+ /**
31
+ * Tag brand for nominal typing.
32
+ */
33
+ declare const TAG_BRAND: unique symbol;
34
+ /**
35
+ * Component brand for nominal typing.
36
+ */
37
+ declare const COMPONENT_BRAND: unique symbol;
38
+ /**
39
+ * Relation brand for nominal typing.
40
+ */
41
+ declare const RELATION_BRAND: unique symbol;
42
+ /**
43
+ * Pair brand for nominal typing.
44
+ */
45
+ declare const PAIR_BRAND: unique symbol;
46
+ /**
47
+ * Schema brand for carrying schema type in Component.
48
+ */
49
+ declare const SCHEMA_BRAND: unique symbol;
50
+ /**
51
+ * Entity ID (branded type).
52
+ *
53
+ * Nominal type preventing accidental mixing of entities with raw numbers.
54
+ */
55
+ export type Entity = number & {
56
+ [ENTITY_BRAND]: true;
57
+ };
58
+ /**
59
+ * Tag ID (branded type).
60
+ *
61
+ * Nominal type for component tags defined via defineTag().
62
+ */
63
+ export type Tag = number & {
64
+ [TAG_BRAND]: true;
65
+ };
66
+ /**
67
+ * Component ID (branded type).
68
+ *
69
+ * Nominal type for data components with field schemas.
70
+ */
71
+ export type Component<S extends SchemaRecord = SchemaRecord> = number & {
72
+ [COMPONENT_BRAND]: true;
73
+ [SCHEMA_BRAND]: S;
74
+ };
75
+ /**
76
+ * Relation ID (branded type).
77
+ *
78
+ * Nominal type for relations with optional schema for pair data.
79
+ */
80
+ export type Relation<S extends SchemaRecord = SchemaRecord> = number & {
81
+ [RELATION_BRAND]: true;
82
+ [SCHEMA_BRAND]: S;
83
+ };
84
+ /**
85
+ * Pair ID (branded type).
86
+ *
87
+ * Nominal type for relation-target pairs. Inherits schema from relation.
88
+ */
89
+ export type Pair<R extends Relation = Relation> = number & {
90
+ [PAIR_BRAND]: true;
91
+ [SCHEMA_BRAND]: R extends Relation<infer S> ? S : never;
92
+ };
93
+ /**
94
+ * Valid targets for relations.
95
+ *
96
+ * Pairs cannot target other pairs to prevent encoding issues.
97
+ */
98
+ export type RelationTargetId = Entity | Tag | Component | Relation;
99
+ /**
100
+ * Entity or Component ID (union type).
101
+ *
102
+ * Used in function signatures to accept entities, tags, data components, relations, and pairs.
103
+ */
104
+ export type EntityId = Entity | Tag | Component | Relation | Pair;
105
+ /**
106
+ * Pair flag bit position (bit 31).
107
+ */
108
+ export declare const PAIR_FLAG_SHIFT = 31;
109
+ /**
110
+ * Type bits position (bits 30-28).
111
+ */
112
+ export declare const TYPE_SHIFT = 28;
113
+ /**
114
+ * Type mask (3 bits).
115
+ */
116
+ export declare const TYPE_MASK = 7;
117
+ /**
118
+ * Encode entity ID from raw ID and generation.
119
+ *
120
+ * @param rawId - Raw entity ID (0 to 1,048,575)
121
+ * @param generation - Generation number (0 to 255)
122
+ * @returns Encoded 32-bit entity ID
123
+ */
124
+ export declare function encodeEntity(rawId: number, generation: number): Entity;
125
+ /**
126
+ * Encode component ID from raw ID.
127
+ *
128
+ * @param rawId - Raw component ID (0 to 1,048,575)
129
+ * @returns Encoded 32-bit component ID
130
+ */
131
+ export declare function encodeComponent<S extends Record<string, Schema> = Record<string, Schema>>(rawId: number): Component<S>;
132
+ /**
133
+ * Encode tag ID from raw ID.
134
+ *
135
+ * @param rawId - Raw tag ID (0 to 1,048,575)
136
+ * @returns Encoded 32-bit tag ID
137
+ */
138
+ export declare function encodeTag(rawId: number): Tag;
139
+ /**
140
+ * Encode relation ID from raw ID.
141
+ *
142
+ * @param rawId - Raw relation ID (0 to 255)
143
+ * @returns Encoded 32-bit relation ID
144
+ */
145
+ export declare function encodeRelation<S extends Record<string, Schema> = Record<string, Schema>>(rawId: number): Relation<S>;
146
+ /**
147
+ * Encode a pair from relation and target.
148
+ *
149
+ * @param relation - Relation ID
150
+ * @param target - Target ID (entity, tag, component, or relation)
151
+ * @returns Encoded pair ID
152
+ */
153
+ export declare function encodePair<R extends Relation>(relation: R, target: RelationTargetId): Pair<R>;
154
+ /**
155
+ * Extract type bits from encoded ID.
156
+ *
157
+ * @param id - Encoded ID
158
+ * @returns Type bits (0x0 - 0x7)
159
+ */
160
+ export declare function extractType(id: number): number;
161
+ /**
162
+ * Extract raw ID from encoded ID (type-aware).
163
+ *
164
+ * @param id - Encoded ID (any non-pair type)
165
+ * @returns Raw ID (20-bit for entities/components/tags, 8-bit for relationships)
166
+ */
167
+ export declare function extractId(id: number): number;
168
+ /**
169
+ * Extract meta field from encoded ID (type-aware).
170
+ *
171
+ * @param id - Encoded ID (any non-pair type)
172
+ * @returns Meta value (generation for entities, 0 for components/tags/relationships)
173
+ */
174
+ export declare function extractMeta(id: number): number;
175
+ /**
176
+ * Check if ID is a pair.
177
+ *
178
+ * @param id - Encoded ID
179
+ * @returns True if bit 31 is set, false otherwise
180
+ */
181
+ export declare function isPair(id: number): id is Pair;
182
+ /**
183
+ * Extract relation raw ID from pair.
184
+ *
185
+ * @param pairId - Encoded pair ID
186
+ * @returns Relation raw ID (8-bit)
187
+ */
188
+ export declare function extractPairRelationId(pairId: number): number;
189
+ /**
190
+ * Extract target raw ID from pair.
191
+ *
192
+ * @param pairId - Encoded pair ID
193
+ * @returns Target raw ID (20-bit)
194
+ */
195
+ export declare function extractPairTargetId(pairId: number): number;
196
+ /**
197
+ * Extract target type from pair.
198
+ *
199
+ * @param pairId - Encoded pair ID
200
+ * @returns Target type bits (3-bit)
201
+ */
202
+ export declare function extractPairTargetType(pairId: number): number;
203
+ export {};
204
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"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"}