iris-ecs 0.0.1 → 0.0.3

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 (47) hide show
  1. package/README.md +70 -36
  2. package/dist/component.d.ts.map +1 -1
  3. package/dist/component.js +5 -5
  4. package/dist/component.js.map +1 -1
  5. package/dist/entity.d.ts +6 -5
  6. package/dist/entity.d.ts.map +1 -1
  7. package/dist/entity.js +14 -15
  8. package/dist/entity.js.map +1 -1
  9. package/dist/error.d.ts +129 -0
  10. package/dist/error.d.ts.map +1 -0
  11. package/dist/error.js +150 -0
  12. package/dist/error.js.map +1 -0
  13. package/dist/event.d.ts +19 -20
  14. package/dist/event.d.ts.map +1 -1
  15. package/dist/event.js +91 -65
  16. package/dist/event.js.map +1 -1
  17. package/dist/filters.d.ts.map +1 -1
  18. package/dist/filters.js +7 -6
  19. package/dist/filters.js.map +1 -1
  20. package/dist/index.d.ts +5 -4
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/name.d.ts +2 -1
  25. package/dist/name.d.ts.map +1 -1
  26. package/dist/name.js +5 -7
  27. package/dist/name.js.map +1 -1
  28. package/dist/query.d.ts +3 -12
  29. package/dist/query.d.ts.map +1 -1
  30. package/dist/query.js +11 -17
  31. package/dist/query.js.map +1 -1
  32. package/dist/registry.d.ts +3 -3
  33. package/dist/registry.d.ts.map +1 -1
  34. package/dist/registry.js +7 -12
  35. package/dist/registry.js.map +1 -1
  36. package/dist/relation.d.ts.map +1 -1
  37. package/dist/relation.js +4 -3
  38. package/dist/relation.js.map +1 -1
  39. package/dist/scheduler.d.ts +129 -27
  40. package/dist/scheduler.d.ts.map +1 -1
  41. package/dist/scheduler.js +258 -65
  42. package/dist/scheduler.js.map +1 -1
  43. package/dist/world.d.ts +33 -9
  44. package/dist/world.d.ts.map +1 -1
  45. package/dist/world.js +20 -6
  46. package/dist/world.js.map +1 -1
  47. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # iris-ecs
2
2
 
3
- High-performance, TypeScript-idiomatic Entity Component System.
3
+ Entity Component System implementation for TypeScript.
4
+
5
+ > **Early stage implementation.** APIs are unstable and breaking changes can happen between versions.
4
6
 
5
7
  ## What is ECS?
6
8
 
@@ -41,8 +43,7 @@ import {
41
43
  setComponentValue,
42
44
  fetchEntities,
43
45
  addSystem,
44
- buildSchedule,
45
- executeSchedule,
46
+ runOnce,
46
47
  Type,
47
48
  } from "iris-ecs";
48
49
 
@@ -72,10 +73,9 @@ function movementSystem(world) {
72
73
  }
73
74
  }
74
75
 
75
- // Register and run systems
76
+ // Register and run
76
77
  addSystem(world, movementSystem);
77
- buildSchedule(world);
78
- executeSchedule(world);
78
+ await runOnce(world);
79
79
 
80
80
  // Position is now { x: 1, y: 0 }
81
81
  ```
@@ -416,8 +416,8 @@ A **System** is a function that operates on the world. Systems query entities, r
416
416
  ```typescript
417
417
  import {
418
418
  addSystem,
419
- buildSchedule,
420
- executeSchedule,
419
+ run,
420
+ stop,
421
421
  fetchEntities,
422
422
  getComponentValue,
423
423
  setComponentValue,
@@ -436,15 +436,13 @@ function movementSystem(world) {
436
436
  }
437
437
 
438
438
  addSystem(world, movementSystem);
439
- buildSchedule(world);
439
+ run(world);
440
440
 
441
- // Game loop
442
- while (running) {
443
- executeSchedule(world);
444
- }
441
+ // ... later
442
+ await stop(world);
445
443
  ```
446
444
 
447
- Systems are registered with `addSystem()`, ordered by `buildSchedule()`, and run with `executeSchedule()`. The system function's name becomes its identifier.
445
+ Systems are registered with `addSystem()` and executed automatically when the world runs. The system function's name becomes its identifier.
448
446
 
449
447
  #### Ordering Constraints
450
448
 
@@ -458,8 +456,6 @@ function renderSystem(world) { /* draw frame */ }
458
456
  addSystem(world, inputSystem);
459
457
  addSystem(world, physicsSystem, { after: "inputSystem" });
460
458
  addSystem(world, renderSystem, { after: "physicsSystem" });
461
-
462
- buildSchedule(world);
463
459
  // Executes: inputSystem -> physicsSystem -> renderSystem
464
460
  ```
465
461
 
@@ -469,27 +465,70 @@ Without constraints, systems run in registration order. Use arrays for multiple
469
465
 
470
466
  #### Schedules
471
467
 
472
- Systems are grouped into **schedules**. The default schedule is `"runtime"`, but you can create others for initialization, cleanup, or custom phases:
468
+ Systems are grouped into **schedules** -- named execution phases. The default pipeline runs these schedules every frame:
469
+
470
+ ```
471
+ First -> PreUpdate -> Update -> PostUpdate -> Last
472
+ ```
473
+
474
+ `Update` is the default schedule. Assign systems to other phases based on when they should run:
473
475
 
474
476
  ```typescript
475
- addSystem(world, loadAssetsSystem, { schedule: "startup" });
476
- addSystem(world, saveGameSystem, { schedule: "shutdown" });
477
- addSystem(world, physicsSystem); // defaults to "runtime"
477
+ import { addSystem, First, PreUpdate, PostUpdate, Last, run, stop } from "iris-ecs";
478
478
 
479
- buildSchedule(world, "startup");
480
- buildSchedule(world, "runtime");
481
- buildSchedule(world, "shutdown");
479
+ addSystem(world, inputSystem, { schedule: First });
480
+ addSystem(world, physicsSystem, { schedule: PreUpdate });
481
+ addSystem(world, movementSystem); // defaults to Update
482
+ addSystem(world, collisionSystem, { schedule: PostUpdate });
483
+ addSystem(world, renderSystem, { schedule: Last });
482
484
 
483
- executeSchedule(world, "startup"); // Run once at start
484
- while (running) {
485
- executeSchedule(world); // "runtime" is default
486
- }
487
- executeSchedule(world, "shutdown"); // Run once at end
485
+ run(world);
486
+
487
+ // ... later
488
+ await stop(world);
489
+ ```
490
+
491
+ Two additional schedules run outside the main loop:
492
+
493
+ - **Startup** runs once before the first frame (asset loading, initialization)
494
+ - **Shutdown** runs once when `stop()` is called (cleanup, save state)
495
+
496
+ ```typescript
497
+ import { Startup, Shutdown } from "iris-ecs";
498
+
499
+ addSystem(world, loadAssetsSystem, { schedule: Startup });
500
+ addSystem(world, saveGameSystem, { schedule: Shutdown });
501
+ ```
502
+
503
+ #### Custom Schedules
504
+
505
+ Create custom pipeline phases with `defineSchedule()` and insert them relative to existing ones:
506
+
507
+ ```typescript
508
+ import { defineSchedule, insertScheduleAfter, PreUpdate } from "iris-ecs";
509
+
510
+ const Physics = defineSchedule("Physics");
511
+ insertScheduleAfter(world, Physics, PreUpdate);
512
+ addSystem(world, gravitySystem, { schedule: Physics });
513
+
514
+ // Pipeline is now: First -> PreUpdate -> Physics -> Update -> PostUpdate -> Last
515
+ ```
516
+
517
+ #### Running the World
518
+
519
+ `run(world)` starts a `requestAnimationFrame` loop. Each frame runs all pipeline schedules then flushes events. `stop(world)` stops the loop and runs Shutdown. Calling `stop()` then `run()` again re-triggers Startup and Shutdown for each cycle.
520
+
521
+ For manual frame stepping (tests, server-side), use `runOnce()`:
522
+
523
+ ```typescript
524
+ import { runOnce } from "iris-ecs";
525
+
526
+ await runOnce(world); // one frame
488
527
  ```
489
528
 
490
529
  #### Async Systems
491
530
 
492
- For systems that need to `await` (loading assets, network calls), use `executeScheduleAsync()`:
531
+ Systems can be async. Both `run()` and `runOnce()` handle sync and async systems transparently:
493
532
 
494
533
  ```typescript
495
534
  async function loadAssetsSystem(world) {
@@ -497,14 +536,9 @@ async function loadAssetsSystem(world) {
497
536
  // ...
498
537
  }
499
538
 
500
- addSystem(world, loadAssetsSystem, { schedule: "startup" });
501
- buildSchedule(world, "startup");
502
-
503
- await executeScheduleAsync(world, "startup");
539
+ addSystem(world, loadAssetsSystem, { schedule: Startup });
504
540
  ```
505
541
 
506
- ⚠️ `executeSchedule()` throws if any system returns a Promise. Use `executeScheduleAsync()` for schedules with async systems.
507
-
508
542
  ### Actions
509
543
 
510
544
  **Actions** bundle reusable operations with a world captured in closure. Define actions once, then call them without repeatedly passing the world.
@@ -614,7 +648,7 @@ if (isPaused) {
614
648
 
615
649
  #### Event Lifetime
616
650
 
617
- Events persist for a short window (2 ticks) to ensure all systems can read them regardless of execution order, then expire automatically. Calling `fetchEvents()` marks events as read for that system -- a second call in the same system sees nothing new.
651
+ Events use double-buffered storage. Buffers rotate automatically at the end of each frame -- events survive one frame (so systems that run next frame can still read them), then are discarded. Calling `fetchEvents()` marks events as read for that system -- a second call in the same system sees nothing new.
618
652
 
619
653
  ⚠️ **Events are not entities.** Unlike components and tags, events exist outside the entity-component model. You cannot query for events or attach them to entities.
620
654
 
@@ -1 +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"}
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;AAyER;;;;;;;;;;;;;;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"}
package/dist/component.js CHANGED
@@ -21,8 +21,9 @@ import { getPairRelation, getPairTarget, getRelationTargets } from "./relation.j
21
21
  * addComponent(world, child, pair(ChildOf, parent));
22
22
  */
23
23
  export function addComponent(world, entityId, componentId, data) {
24
+ const entityMeta = ensureEntity(world, entityId);
24
25
  // Idempotent: already has component
25
- if (hasComponent(world, entityId, componentId)) {
26
+ if (entityMeta.archetype.typesSet.has(componentId)) {
26
27
  return;
27
28
  }
28
29
  // Exclusive enforcement: remove old target before adding new
@@ -36,7 +37,6 @@ export function addComponent(world, entityId, componentId, data) {
36
37
  }
37
38
  }
38
39
  }
39
- const entityMeta = ensureEntity(world, entityId);
40
40
  const componentMeta = ensureEntity(world, componentId);
41
41
  const schema = componentMeta.schema;
42
42
  // Find target archetype
@@ -48,7 +48,7 @@ export function addComponent(world, entityId, componentId, data) {
48
48
  toArchetype = archetypeTraverseAdd(world, toArchetype, encodePair(Wildcard, target));
49
49
  toArchetype = archetypeTraverseAdd(world, toArchetype, encodePair(relation, Wildcard));
50
50
  }
51
- moveEntityToArchetype(world, entityId, toArchetype);
51
+ moveEntityToArchetype(world, entityMeta, toArchetype);
52
52
  if (data) {
53
53
  for (const fieldName in data) {
54
54
  const value = data[fieldName];
@@ -112,7 +112,7 @@ export function removeComponent(world, entityId, componentId) {
112
112
  }
113
113
  // Fire before move so observers can access component data
114
114
  fireObserverEvent(world, "componentRemoved", componentId, entityId);
115
- moveEntityToArchetype(world, entityId, toArchetype);
115
+ moveEntityToArchetype(world, meta, toArchetype);
116
116
  }
117
117
  /**
118
118
  * Check if entity has component.
@@ -221,7 +221,7 @@ export function emitComponentChanged(world, entityId, componentId) {
221
221
  * @param componentId - Component to remove from all entities
222
222
  */
223
223
  export function cascadeRemoveComponent(world, componentId) {
224
- const meta = ensureEntity(world, componentId);
224
+ const meta = world.entities.byId.get(componentId);
225
225
  // Copy records - will be modified during iteration as entities move
226
226
  const archetypes = [...meta.records];
227
227
  for (const archetype of archetypes) {
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
package/dist/entity.d.ts CHANGED
@@ -35,7 +35,8 @@ export type EntityMeta = {
35
35
  * @param world - World instance
36
36
  * @param entityId - Entity or component ID
37
37
  * @returns Entity metadata
38
- * @throws {Error} If entity not registered (ENTITY_TYPE) or unknown type
38
+ * @throws {NotFound} If entity not registered (ENTITY_TYPE)
39
+ * @throws {InvalidState} If unknown entity type
39
40
  *
40
41
  * @example
41
42
  * ```typescript
@@ -49,7 +50,7 @@ export declare function ensureEntity(world: World, entityId: EntityId): EntityMe
49
50
  *
50
51
  * @param world - World instance
51
52
  * @returns Encoded entity ID
52
- * @throws {RangeError} If entity limit (1,048,576) exceeded
53
+ * @throws {LimitExceeded} If entity limit (1,048,576) exceeded
53
54
  *
54
55
  * @example
55
56
  * ```typescript
@@ -90,16 +91,16 @@ export declare function isEntityAlive(world: World, entity: EntityId): boolean;
90
91
  * Moves entity to a different archetype, transferring component data.
91
92
  *
92
93
  * @param world - World instance
93
- * @param entityId - Entity to move
94
+ * @param meta - Entity metadata
94
95
  * @param toArchetype - Target archetype
95
96
  *
96
97
  * @example
97
98
  * ```typescript
98
99
  * const archetype = getOrCreateArchetype(world, [Position, Velocity]);
99
- * moveEntityToArchetype(world, entity, archetype);
100
+ * moveEntityToArchetype(world, meta, archetype);
100
101
  * ```
101
102
  */
102
- export declare function moveEntityToArchetype(world: World, entityId: EntityId, toArchetype: Archetype): void;
103
+ export declare function moveEntityToArchetype(world: World, meta: EntityMeta, toArchetype: Archetype): void;
103
104
  /**
104
105
  * Registers archetype in entity records for all its component types.
105
106
  *
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAa,MAAM,EAAE,QAAQ,EAAY,MAAM,eAAe,CAAC;AAiB3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMxC;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,SAAS,EAAE,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AA4CF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAkDzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAOjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CA0CpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAErE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,CAmBpG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAOxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAU3E"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAa,MAAM,EAAE,QAAQ,EAAY,MAAM,eAAe,CAAC;AAkB3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMxC;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,SAAS,EAAE,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AA0CF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAkDzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAOjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CA0CpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAErE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,CAkBlG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAOxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAU3E"}
package/dist/entity.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { addEntityToArchetype, removeEntityFromArchetypeByRow, transferEntityToArchetypeByRow } from "./archetype.js";
2
2
  import { addComponent, cascadeRemoveComponent } from "./component.js";
3
3
  import { COMPONENT_TYPE, ENTITY_TYPE, encodeEntity, extractId, extractMeta, extractType, ID_MASK_8, ID_MASK_20, isPair, RELATIONSHIP_TYPE, TAG_TYPE, } from "./encoding.js";
4
+ import { assert, InvalidState, LimitExceeded, NotFound } from "./error.js";
4
5
  import { fireObserverEvent } from "./observer.js";
5
6
  import { Exclusive, OnDeleteTarget } from "./registry.js";
6
7
  import { cleanupPairsTargetingEntity, getPairRelation } from "./relation.js";
@@ -16,9 +17,7 @@ function allocateEntityId(world) {
16
17
  return encodeEntity(rawId, generation);
17
18
  }
18
19
  const newRawId = world.entities.nextId++;
19
- if (newRawId > ID_MASK_20) {
20
- throw new RangeError(`Entity ID limit exceeded: cannot allocate ID ${newRawId} (max ${ID_MASK_20})`);
21
- }
20
+ assert(newRawId <= ID_MASK_20, LimitExceeded, { resource: "Entity", max: ID_MASK_20, id: newRawId });
22
21
  world.entities.generations.set(newRawId, 0);
23
22
  return encodeEntity(newRawId, 0);
24
23
  }
@@ -44,7 +43,8 @@ function registerEntity(world, entityId, schema) {
44
43
  * @param world - World instance
45
44
  * @param entityId - Entity or component ID
46
45
  * @returns Entity metadata
47
- * @throws {Error} If entity not registered (ENTITY_TYPE) or unknown type
46
+ * @throws {NotFound} If entity not registered (ENTITY_TYPE)
47
+ * @throws {InvalidState} If unknown entity type
48
48
  *
49
49
  * @example
50
50
  * ```typescript
@@ -85,10 +85,10 @@ export function ensureEntity(world, entityId) {
85
85
  return meta;
86
86
  }
87
87
  case ENTITY_TYPE: {
88
- throw new Error(`Entity ${entityId} not registered in world`);
88
+ throw new NotFound({ resource: "Entity", id: entityId, context: "world" });
89
89
  }
90
90
  default: {
91
- throw new Error(`Invalid entity type: ${type}`);
91
+ throw new InvalidState({ message: `Invalid entity type: ${type}` });
92
92
  }
93
93
  }
94
94
  }
@@ -97,7 +97,7 @@ export function ensureEntity(world, entityId) {
97
97
  *
98
98
  * @param world - World instance
99
99
  * @returns Encoded entity ID
100
- * @throws {RangeError} If entity limit (1,048,576) exceeded
100
+ * @throws {LimitExceeded} If entity limit (1,048,576) exceeded
101
101
  *
102
102
  * @example
103
103
  * ```typescript
@@ -128,7 +128,7 @@ export function destroyEntity(world, entityId) {
128
128
  if (!isEntityAlive(world, entityId)) {
129
129
  return;
130
130
  }
131
- const meta = ensureEntity(world, entityId);
131
+ const meta = world.entities.byId.get(entityId);
132
132
  // Cycle protection - prevent infinite loops from cascade deletes
133
133
  if (meta.destroying) {
134
134
  return;
@@ -141,7 +141,7 @@ export function destroyEntity(world, entityId) {
141
141
  const swappedEntityId = removeEntityFromArchetypeByRow(meta.archetype, meta.row);
142
142
  // Swap-remove updates: entity swapped into our slot needs row update
143
143
  if (swappedEntityId !== undefined) {
144
- const swappedMeta = ensureEntity(world, swappedEntityId);
144
+ const swappedMeta = world.entities.byId.get(swappedEntityId);
145
145
  swappedMeta.row = meta.row;
146
146
  }
147
147
  fireObserverEvent(world, "entityDestroyed", entityId);
@@ -177,24 +177,23 @@ export function isEntityAlive(world, entity) {
177
177
  * Moves entity to a different archetype, transferring component data.
178
178
  *
179
179
  * @param world - World instance
180
- * @param entityId - Entity to move
180
+ * @param meta - Entity metadata
181
181
  * @param toArchetype - Target archetype
182
182
  *
183
183
  * @example
184
184
  * ```typescript
185
185
  * const archetype = getOrCreateArchetype(world, [Position, Velocity]);
186
- * moveEntityToArchetype(world, entity, archetype);
186
+ * moveEntityToArchetype(world, meta, archetype);
187
187
  * ```
188
188
  */
189
- export function moveEntityToArchetype(world, entityId, toArchetype) {
190
- const meta = ensureEntity(world, entityId);
189
+ export function moveEntityToArchetype(world, meta, toArchetype) {
191
190
  const fromRow = meta.row;
192
191
  const { toRow, swappedEntityId } = transferEntityToArchetypeByRow(meta.archetype, meta.row, toArchetype, world.execution.tick);
193
192
  meta.archetype = toArchetype;
194
193
  meta.row = toRow;
195
194
  // Swap-remove updates: entity swapped into our old slot needs row update
196
195
  if (swappedEntityId !== undefined) {
197
- const swappedMeta = ensureEntity(world, swappedEntityId);
196
+ const swappedMeta = world.entities.byId.get(swappedEntityId);
198
197
  swappedMeta.row = fromRow;
199
198
  }
200
199
  }
@@ -233,7 +232,7 @@ export function addEntityRecord(world, archetype) {
233
232
  export function removeEntityRecord(world, archetype) {
234
233
  for (let i = 0; i < archetype.types.length; i++) {
235
234
  const typeId = archetype.types[i];
236
- const meta = ensureEntity(world, typeId);
235
+ const meta = world.entities.byId.get(typeId);
237
236
  const idx = meta.records.indexOf(archetype);
238
237
  if (idx !== -1) {
239
238
  meta.records.splice(idx, 1);
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Base error class for all Iris ECS errors.
3
+ *
4
+ * Provides structured error categories with typed parameters for
5
+ * programmatic error handling via `instanceof` checks.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * try {
10
+ * createEntity(world);
11
+ * } catch (error) {
12
+ * if (error instanceof LimitExceeded) {
13
+ * console.log(error.resource, error.max);
14
+ * }
15
+ * }
16
+ * ```
17
+ */
18
+ export declare class IrisError extends Error {
19
+ constructor(message: string, options?: {
20
+ cause?: unknown;
21
+ });
22
+ }
23
+ /**
24
+ * Thrown when an ID space is exhausted.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // Thrown when entity limit (1,048,576) is exceeded
29
+ * const entity = createEntity(world);
30
+ * ```
31
+ */
32
+ export declare class LimitExceeded extends IrisError {
33
+ readonly resource: string;
34
+ readonly max: number;
35
+ readonly id?: number;
36
+ constructor(params: {
37
+ resource: string;
38
+ max: number;
39
+ id?: number;
40
+ });
41
+ }
42
+ /**
43
+ * Thrown when a referenced item does not exist.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * // Thrown when accessing a destroyed entity
48
+ * ensureEntity(world, destroyedEntity);
49
+ * ```
50
+ */
51
+ export declare class NotFound extends IrisError {
52
+ readonly resource: string;
53
+ readonly id: string | number;
54
+ readonly context?: string;
55
+ constructor(params: {
56
+ resource: string;
57
+ id: string | number;
58
+ context?: string;
59
+ });
60
+ }
61
+ /**
62
+ * Thrown when attempting to register a duplicate item.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * // Thrown when registering a system with the same name twice
67
+ * addSystem(world, mySystem);
68
+ * addSystem(world, mySystem); // throws Duplicate
69
+ * ```
70
+ */
71
+ export declare class Duplicate extends IrisError {
72
+ readonly resource: string;
73
+ readonly id: string | number;
74
+ constructor(params: {
75
+ resource: string;
76
+ id: string | number;
77
+ });
78
+ }
79
+ /**
80
+ * Thrown when a function argument fails validation.
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * // Thrown when registering an anonymous system without a name
85
+ * addSystem(world, () => {});
86
+ * ```
87
+ */
88
+ export declare class InvalidArgument extends IrisError {
89
+ readonly expected: string;
90
+ readonly actual?: string;
91
+ constructor(params: {
92
+ expected: string;
93
+ actual?: string;
94
+ });
95
+ }
96
+ /**
97
+ * Thrown when the system reaches an invalid or unexpected state.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // Thrown on circular system dependencies
102
+ * addSystem(world, a, { before: "b" });
103
+ * addSystem(world, b, { before: "a" });
104
+ * await runOnce(world);
105
+ * ```
106
+ */
107
+ export declare class InvalidState extends IrisError {
108
+ constructor(params: {
109
+ message: string;
110
+ });
111
+ }
112
+ /**
113
+ * Assert a condition, throwing a typed error if false.
114
+ *
115
+ * Error is only constructed when the condition fails (lazy construction).
116
+ * TypeScript `asserts condition` narrows the type at call sites.
117
+ *
118
+ * @param condition - Value to check for truthiness
119
+ * @param ErrorClass - Error class to instantiate on failure
120
+ * @param params - Constructor parameters for the error class
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * assert(rawId <= ID_MASK_20, LimitExceeded, { resource: "Entity", max: ID_MASK_20, id: rawId });
125
+ * // rawId is narrowed to truthy after this point
126
+ * ```
127
+ */
128
+ export declare function assert<P>(condition: unknown, ErrorClass: new (params: P) => IrisError, params: P): asserts condition;
129
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAMD;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;gBAET,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;CAOnE;AAED;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAOhF;AAED;;;;;;;;;GASG;AACH,qBAAa,SAAU,SAAQ,SAAS;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEjB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;CAK9D;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAM1D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,SAAQ,SAAS;gBAC7B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;CAGxC;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC,KAAK,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAIpH"}