@forgeax/engine-ecs 0.1.4 → 0.1.7
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/README.md +6 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/component-nan-preflight.unit.test.d.ts +2 -0
- package/dist/__tests__/component-nan-preflight.unit.test.d.ts.map +1 -0
- package/dist/__tests__/externalization-render-read-lease.test-d.d.ts +2 -0
- package/dist/__tests__/externalization-render-read-lease.test-d.d.ts.map +1 -0
- package/dist/__tests__/externalization-render-read-lease.unit.test.d.ts +2 -0
- package/dist/__tests__/externalization-render-read-lease.unit.test.d.ts.map +1 -0
- package/dist/errors/validation-errors.d.ts +15 -0
- package/dist/errors/validation-errors.d.ts.map +1 -1
- package/dist/errors.d.ts +9 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.mjs +84 -16
- package/dist/index.mjs.map +1 -1
- package/dist/internal.mjs.map +1 -1
- package/dist/projection/index.d.ts +53 -0
- package/dist/projection/index.d.ts.map +1 -1
- package/dist/projection/index.mjs +99 -1
- package/dist/projection/index.mjs.map +1 -1
- package/dist/world-component-access.d.ts +1 -0
- package/dist/world-component-access.d.ts.map +1 -1
- package/dist/world.d.ts +2 -2
- package/dist/world.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/__tests__/component-nan-preflight.unit.test.ts +186 -0
- package/src/__tests__/errors.unit.test.ts +4 -0
- package/src/__tests__/externalization-render-read-lease.test-d.ts +30 -0
- package/src/__tests__/externalization-render-read-lease.unit.test.ts +79 -0
- package/src/__tests__/query-trs-flat-column-ratio.perf.test.ts +1 -1
- package/src/__tests__/stale-error.test-d.ts +1 -0
- package/src/errors/validation-errors.ts +88 -0
- package/src/errors.ts +11 -0
- package/src/projection/index.ts +176 -0
- package/src/world-component-access.ts +28 -19
- package/src/world.ts +2 -0
|
@@ -46,6 +46,7 @@ export declare class WorldComponentAccess {
|
|
|
46
46
|
private markComponentChanged;
|
|
47
47
|
private markStructureChanged;
|
|
48
48
|
relationshipTargetEntity(component: Component, value: Record<string, unknown>): EntityHandle | null;
|
|
49
|
+
private preflightComponentFieldValues;
|
|
49
50
|
/**
|
|
50
51
|
* Validate one structural component payload without touching archetypes,
|
|
51
52
|
* columns, relationship mirrors, epochs, or managed-reference stores.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world-component-access.d.ts","sourceRoot":"","sources":["../src/world-component-access.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,eAAe,EAGpB,KAAK,YAAY,EAMjB,KAAK,OAAO,EAEb,MAAM,aAAa,CAAC;AAKrB,OAAO,EAGL,KAAK,YAAY,EAIlB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"world-component-access.d.ts","sourceRoot":"","sources":["../src/world-component-access.ts"],"names":[],"mappings":"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"}
|
package/dist/world.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Handle, Result } from '@forgeax/engine-types';
|
|
2
2
|
import { type Component, ComponentCatalog, type ComponentSchema, type InputShapeOf, type ShapeOf } from './component';
|
|
3
3
|
import { type EntityHandle } from './entity-handle';
|
|
4
|
-
import type { CommandFailedError, ComponentAlreadyPresentError, ComponentFieldInvalidValueError, ComponentNotDefinedError, ComponentNotPresentError, FixedSizeMismatchError, ManagedArrayInvalidValueError, ManagedBufferOutOfBoundsError, ManagedBufferShrinkNotSupportedError, RelationshipDetachMismatchError, RelationshipMirrorComponentNotRegisteredError, RelationshipMirrorFieldTypeMismatchError, RelationshipSelfCycleError, RemoveEssentialComponentError, ScheduleMutationError, ScheduleScopeMismatchError, SharedKernelEligibilityError, SharedKernelFailureError, StaleEntityError, SystemFailedError, SystemSetNotRegisteredError, TimeConfigInvalidError, TimeDeltaInvalidError, UniqueRefDoubleReleaseError, UniqueRefReleasedError, WorldPoisonedError } from './errors';
|
|
4
|
+
import type { CommandFailedError, ComponentAlreadyPresentError, ComponentFieldInvalidValueError, ComponentNotDefinedError, ComponentNotPresentError, ComponentNumericValueInvalidError, FixedSizeMismatchError, ManagedArrayInvalidValueError, ManagedBufferOutOfBoundsError, ManagedBufferShrinkNotSupportedError, RelationshipDetachMismatchError, RelationshipMirrorComponentNotRegisteredError, RelationshipMirrorFieldTypeMismatchError, RelationshipSelfCycleError, RemoveEssentialComponentError, ScheduleMutationError, ScheduleScopeMismatchError, SharedKernelEligibilityError, SharedKernelFailureError, StaleEntityError, SystemFailedError, SystemSetNotRegisteredError, TimeConfigInvalidError, TimeDeltaInvalidError, UniqueRefDoubleReleaseError, UniqueRefReleasedError, WorldPoisonedError } from './errors';
|
|
5
5
|
import { RelationshipTargetReadonlyError } from './errors';
|
|
6
6
|
import { type WorldExecutionState } from './execution/shared-kernel';
|
|
7
7
|
import type { QueryDescriptor } from './query/query';
|
|
@@ -16,7 +16,7 @@ import { type WorldInternal, worldInternal } from './world-internal';
|
|
|
16
16
|
* Union of all EcsError types that World methods can return via Result.
|
|
17
17
|
* AI users: switch on `.code` for programmatic branching.
|
|
18
18
|
*/
|
|
19
|
-
export type EcsError = CommandFailedError | StaleEntityError | ComponentNotPresentError | ComponentAlreadyPresentError | ComponentFieldInvalidValueError | ManagedArrayInvalidValueError | UniqueRefReleasedError | UniqueRefDoubleReleaseError | ManagedBufferOutOfBoundsError | ManagedBufferShrinkNotSupportedError | FixedSizeMismatchError | RelationshipSelfCycleError | RelationshipMirrorComponentNotRegisteredError | RelationshipMirrorFieldTypeMismatchError | RelationshipDetachMismatchError | RelationshipTargetReadonlyError | ComponentNotDefinedError | RemoveEssentialComponentError | SystemSetNotRegisteredError | SystemFailedError | TimeDeltaInvalidError | TimeConfigInvalidError | ScheduleScopeMismatchError | SharedKernelEligibilityError | SharedKernelFailureError | WorldPoisonedError;
|
|
19
|
+
export type EcsError = CommandFailedError | StaleEntityError | ComponentNotPresentError | ComponentAlreadyPresentError | ComponentFieldInvalidValueError | ComponentNumericValueInvalidError | ManagedArrayInvalidValueError | UniqueRefReleasedError | UniqueRefDoubleReleaseError | ManagedBufferOutOfBoundsError | ManagedBufferShrinkNotSupportedError | FixedSizeMismatchError | RelationshipSelfCycleError | RelationshipMirrorComponentNotRegisteredError | RelationshipMirrorFieldTypeMismatchError | RelationshipDetachMismatchError | RelationshipTargetReadonlyError | ComponentNotDefinedError | RemoveEssentialComponentError | SystemSetNotRegisteredError | SystemFailedError | TimeDeltaInvalidError | TimeConfigInvalidError | ScheduleScopeMismatchError | SharedKernelEligibilityError | SharedKernelFailureError | WorldPoisonedError;
|
|
20
20
|
/** Component data for spawn/addComponent: component token + initial values.
|
|
21
21
|
*
|
|
22
22
|
* `data` is `Partial<InputShapeOf<S>>` (feat-20260517 / M2; tweak-20260616
|
package/dist/world.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,KAAK,SAAS,EACd,gBAAgB,EAChB,KAAK,eAAe,EAEpB,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,YAAY,EAA+C,MAAM,iBAAiB,CAAC;AACjG,OAAO,KAAK,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,EACxB,iCAAiC,EACjC,sBAAsB,EACtB,6BAA6B,EAC7B,6BAA6B,EAC7B,oCAAoC,EACpC,+BAA+B,EAC/B,6CAA6C,EAC7C,wCAAwC,EACxC,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAA6B,+BAA+B,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAe,KAAK,KAAK,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAiC,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAElG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,QAAQ,CAAC;AAahB,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAmBrE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,wBAAwB,GACxB,4BAA4B,GAC5B,+BAA+B,GAC/B,iCAAiC,GACjC,6BAA6B,GAC7B,sBAAsB,GACtB,2BAA2B,GAC3B,6BAA6B,GAC7B,oCAAoC,GACpC,sBAAsB,GACtB,0BAA0B,GAC1B,6CAA6C,GAC7C,wCAAwC,GACxC,+BAA+B,GAC/B,+BAA+B,GAC/B,wBAAwB,GACxB,6BAA6B,GAC7B,2BAA2B,GAC3B,iBAAiB,GACjB,qBAAqB,GACrB,sBAAsB,GACtB,0BAA0B,GAC1B,4BAA4B,GAC5B,wBAAwB,GACxB,kBAAkB,CAAC;AAEvB;;;;;;;;;;;oBAWoB;AACpB,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACxE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAChC;AAED,KAAK,iBAAiB,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,2BAA2B,GAAG,KAAK,GAAG,CAAC,CAAC;AAEhG;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6BAA6B;IAC7B,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IACpC,2FAA2F;IAC3F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC7F,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,CAAC;QAC5D,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC,CAAC;IACH,8CAA8C;IAC9C,mBAAmB,CAAC,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,GAAG,MAAM,CAAC;CACjF;AAED,uFAAuF;AACvF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,KAAK;IAChB,+EAA+E;IAC/E,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAGxC,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,IAAI,QAAQ,WAEX;IACD,wFAAwF;IACxF,QAAQ,CAAC,UAAU,mBAAyE;IAC5F,OAAO,CAAC,cAAc,CAAsB;IAC5C,qEAAqE;IACrE,2EAA2E;IAC3E,sFAAsF;IACtF,iFAAiF;IACjF,OAAO,KAAK,aAAa,GAExB;IACD,OAAO,KAAK,aAAa,QAExB;IACD,OAAO,KAAK,cAAc,GAEzB;IACD,OAAO,KAAK,cAAc,QAEzB;IACD,OAAO,KAAK,uBAAuB,GAElC;IACD,OAAO,KAAK,aAAa,GAExB;IACD,qCAAqC;IACrC,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,KAAK,WAAW,GAEtB;IACD;;uEAEmE;IACnE,OAAO,KAAK,KAAK,GAEhB;IACD,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGvB;IACH,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,iDAAiD;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B;;;;;;OAMG;IAKH,OAAO,KAAK,UAAU,GAErB;IACD;;;;;;;;;;;;OAYG;IACH,IAAI,UAAU,IAAI,cAAc,CAE/B;IACD;;;;;;;OAOG;IACH,OAAO,KAAK,UAAU,GAErB;IACD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;gBAE3C,OAAO,GAAE,YAAiB;IAwFtC,iFAAiF;IACjF,IAAI,SAAS,IAAI,mBAAmB,CAEnC;IAED,6FAA6F;IAC7F,aAAa,CACX,IAAI,EAAE,OAAO,kBAAkB,EAAE,YAAY,GAC5C,OAAO,kBAAkB,EAAE,aAAa;IAM3C,8FAA8F;IAC9F,OAAO,CAAC,uBAAuB;IAM/B,KAAK,CACH,KAAK,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAClD,KAAK,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAClD,KAAK,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAClD,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAQnF,uEAAuE;IACvE,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAYxB,oDAAoD;IACpD,OAAO,CAAC,wBAAwB;IAIhC,6DAA6D;IAC7D,OAAO,CAAC,uBAAuB;IAI/B,qEAAqE;IACrE,OAAO,CAAC,wBAAwB;IAIhC,oEAAoE;IACpE,OAAO,CAAC,yBAAyB;IAIjC,mEAAmE;IACnE,OAAO,CAAC,0BAA0B;IAMlC,gDAAgD;IAChD,OAAO,CAAC,0BAA0B;IASlC,yDAAyD;IACzD,OAAO,CAAC,yBAAyB;IAQjC,iDAAiD;IACjD,OAAO,CAAC,4BAA4B;IAIpC,iEAAiE;IACjE,iBAAiB,IAAI,MAAM;IAI3B,sEAAsE;IACtE,OAAO,CAAC,0BAA0B;IAIlC,mEAAmE;IACnE,OAAO,CAAC,2BAA2B;IAWnC,iEAAiE;IACjE,OAAO,CAAC,4BAA4B;IAcpC,+DAA+D;IAC/D,OAAO,CAAC,iCAAiC;IAoBzC,gEAAgE;IAChE,OAAO,CAAC,iCAAiC;IAIzC,2DAA2D;IAC3D,OAAO,CAAC,qCAAqC;IAO7C,+DAA+D;IAC/D,OAAO,CAAC,4BAA4B;IAIpC,6EAA6E;IAC7E,OAAO,CAAC,mCAAmC;IAS3C,uEAAuE;IACvE,OAAO,CAAC,mBAAmB;IAQ3B,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IAO3B,mEAAmE;IACnE,OAAO,CAAC,6BAA6B;IAIrC,kEAAkE;IAClE,OAAO,CAAC,2BAA2B;IAInC,gFAAgF;IAChF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAKxD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAU1B,MAAM,CAAC,OAAO,CAAC,kBAAkB;IAGjC,MAAM,CAAC,OAAO,CAAC,sBAAsB;IAGrC,MAAM,CAAC,OAAO,CAAC,oBAAoB;IAGnC,MAAM,CAAC,OAAO,CAAC,2BAA2B;IAG1C,MAAM,CAAC,OAAO,CAAC,2BAA2B;IAG1C,MAAM,CAAC,OAAO,CAAC,qBAAqB;IAGpC,MAAM,CAAC,OAAO,CAAC,qBAAqB;IAGpC,gDAAgD;IAChD,OAAO,CAAC,sBAAsB;IAG9B,MAAM,CAAC,OAAO,CAAC,mBAAmB;IAKlC,MAAM,CAAC,OAAO,CAAC,oBAAoB;IAMnC,MAAM,CAAC,OAAO,CAAC,qBAAqB;IAQpC;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,eAAe,CAAC,EACvD,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,EAClD,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAC/B,MAAM,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAI3C;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CACV,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,EAClD,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,0BAA0B,CAAC;IAInE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,eAAe,CAAC,EAC3D,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,EAClD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAC/B,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,0BAA0B,CAAC;IAInE;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,eAAe,CAAC,EACxD,QAAQ,EAAE,OAAO,kBAAkB,EAAE,aAAa,EAClD,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAC3C,MAAM,CAAC,IAAI,EAAE,2BAA2B,GAAG,0BAA0B,CAAC;IAIzE;;;;;;;;;;;OAWG;IACH,MAAM,CACJ,YAAY,SAAI,GACf,MAAM,CACP,IAAI,EACF,qBAAqB,GACrB,sBAAsB,GACtB,0BAA0B,GAC1B,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,OAAO,UAAU,EAAE,qBAAqB,GACxC,wBAAwB,CAC3B;IAQD,yDAAyD;IACzD,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI1E;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,cAAc,QAAQ,EAAE,IAAI,GAAG,OAAO,QAAQ,EAAE,YAAY;IAC7E,WAAW,CAAC,GAAG,EAAE,cAAc,QAAQ,EAAE,SAAS,GAAG,OAAO,QAAQ,EAAE,iBAAiB;IACvF,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC;IAK1D,kCAAkC;IAClC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAI7D,gCAAgC;IAChC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQ7D;;;;;;;;;;;;;;OAcG;IACH,OAAO,IAAI,eAAe;IAI1B,gFAAgF;IAChF,YAAY,IAAI,aAAa,CAAC,iBAAiB,CAAC;IAQhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,EACV,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAC/B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAI3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAI9F;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACrD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,GACT,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAQ3B,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,+BAA+B;IAQvC,GAAG,CAAC,CAAC,SAAS,eAAe,EAC3B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAI/B;;;;;;;;;OASG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO;IASjE,OAAO,CAAC,oBAAoB;IAQ5B,GAAG,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAC3D,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EACnC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC9B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAKzB,YAAY,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EACpE,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;QAAE,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;KAAE,GACxE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IASzB,OAAO,CAAC,wBAAwB;IAQhC,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EACvE,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAClC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAMzB,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,6BAA6B;IAGrC,MAAM,CAAC,OAAO,CAAC,2BAA2B;IAI1C,OAAO,CAAC,gCAAgC;IAOxC,kEAAkE;IAClE,OAAO,CAAC,8BAA8B;IActC,MAAM,CAAC,OAAO,CAAC,qBAAqB;IAGpC,MAAM,CAAC,OAAO,CAAC,oBAAoB;IAGnC,MAAM,CAAC,OAAO,CAAC,mBAAmB;IAOlC,MAAM,CAAC,OAAO,CAAC,eAAe;IAO9B,MAAM,CAAC,OAAO,CAAC,uBAAuB;IAGtC,MAAM,CAAC,OAAO,CAAC,gBAAgB;IAQ/B,MAAM,CAAC,OAAO,CAAC,+BAA+B;IAG9C,MAAM,CAAC,OAAO,CAAC,4BAA4B;IAO3C,MAAM,CAAC,OAAO,CAAC,4BAA4B;IAY3C;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,eAAe,EAAE,EACjD,GAAG,cAAc,EAAE;SAChB,CAAC,IAAI,MAAM,IAAI,GAAG;YACjB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;KACF,GACA,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC;IAWjC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAIrD,mFAAmF;IACnF,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAepC;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAS3B,QAAQ,CAAC,CAAC,SAAS,eAAe,EAChC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAC/B,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC7B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAIzB,WAAW,CAAC,CAAC,SAAS,eAAe,EACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAC9B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAIzB,QAAQ,CAAC,CAAC,SAAS,eAAe,EAChC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAC/B,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC7B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAIzB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAI3D,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;CAG9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-ecs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"LICENSE"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@forgeax/engine-math": "0.1.
|
|
42
|
-
"@forgeax/engine-plugin": "0.1.
|
|
43
|
-
"@forgeax/engine-types": "0.1.
|
|
41
|
+
"@forgeax/engine-math": "0.1.7",
|
|
42
|
+
"@forgeax/engine-plugin": "0.1.7",
|
|
43
|
+
"@forgeax/engine-types": "0.1.7"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^20.14.0"
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { defineComponent } from '../component';
|
|
3
|
+
import { defineRelationship } from '../relationship-index';
|
|
4
|
+
import { Update } from '../schedule-token';
|
|
5
|
+
import { World } from '../world';
|
|
6
|
+
|
|
7
|
+
const Marker = defineComponent('NanPreflightMarker', {});
|
|
8
|
+
const Numeric = defineComponent('NanPreflightNumeric', {
|
|
9
|
+
scalar: 'f32',
|
|
10
|
+
values: 'array<f32>',
|
|
11
|
+
});
|
|
12
|
+
const InlineNumeric = defineComponent('NanPreflightInlineNumeric', {
|
|
13
|
+
scalar: 'f32',
|
|
14
|
+
values: 'array<f32, 2>',
|
|
15
|
+
});
|
|
16
|
+
const { source: ParentOf, target: ChildrenOf } = defineRelationship({
|
|
17
|
+
sourceName: 'NanPreflightParentOf',
|
|
18
|
+
sourceField: 'parent',
|
|
19
|
+
targetName: 'NanPreflightChildrenOf',
|
|
20
|
+
targetField: 'children',
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
interface NumericValueError {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly detail: {
|
|
26
|
+
readonly component: string;
|
|
27
|
+
readonly field: string;
|
|
28
|
+
readonly received: unknown;
|
|
29
|
+
readonly index?: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function expectNumericValueError(
|
|
34
|
+
error: unknown,
|
|
35
|
+
expected: { readonly field: string; readonly received: unknown; readonly index?: number },
|
|
36
|
+
): void {
|
|
37
|
+
expect(error).toBeDefined();
|
|
38
|
+
if (error === undefined) return;
|
|
39
|
+
const numericError = error as NumericValueError;
|
|
40
|
+
expect(numericError.code).toBe('component-numeric-value-invalid');
|
|
41
|
+
expect(numericError.detail).toMatchObject({
|
|
42
|
+
component: Numeric.name,
|
|
43
|
+
field: expected.field,
|
|
44
|
+
received: expected.received,
|
|
45
|
+
...(expected.index === undefined ? {} : { index: expected.index }),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
describe('component NaN object-write preflight', () => {
|
|
50
|
+
it('rejects spawn scalar NaN before entity or relationship mutation', () => {
|
|
51
|
+
const world = new World();
|
|
52
|
+
const parent = world.spawn({ component: Marker, data: {} }).unwrap();
|
|
53
|
+
const beforeCount = world.inspect().entityCount;
|
|
54
|
+
const beforeEpoch = world.getStructureEpoch();
|
|
55
|
+
|
|
56
|
+
const result = world.spawn(
|
|
57
|
+
{ component: Numeric, data: { scalar: Number.NaN, values: [1, 2] } },
|
|
58
|
+
{ component: ParentOf, data: { parent } },
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
expect(result.ok).toBe(false);
|
|
62
|
+
if (!result.ok)
|
|
63
|
+
expectNumericValueError(result.error, { field: 'scalar', received: Number.NaN });
|
|
64
|
+
expect(world.inspect().entityCount).toBe(beforeCount);
|
|
65
|
+
expect(world.getStructureEpoch()).toBe(beforeEpoch);
|
|
66
|
+
expect(world.get(parent, ChildrenOf).ok).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('rejects addComponent array NaN before archetype or managed-array mutation', () => {
|
|
70
|
+
const world = new World();
|
|
71
|
+
const entity = world.spawn({ component: Marker, data: {} }).unwrap();
|
|
72
|
+
const beforeEpoch = world.getStructureEpoch();
|
|
73
|
+
|
|
74
|
+
const result = world.addComponent(entity, {
|
|
75
|
+
component: Numeric,
|
|
76
|
+
data: { scalar: 3, values: [1, Number.NaN] },
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
expect(result.ok).toBe(false);
|
|
80
|
+
if (!result.ok) {
|
|
81
|
+
expectNumericValueError(result.error, {
|
|
82
|
+
field: 'values',
|
|
83
|
+
received: Number.NaN,
|
|
84
|
+
index: 1,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
expect(world.get(entity, Numeric).ok).toBe(false);
|
|
88
|
+
expect(world.getStructureEpoch()).toBe(beforeEpoch);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('rejects set array NaN and preserves the complete old value', () => {
|
|
92
|
+
const world = new World();
|
|
93
|
+
const entity = world
|
|
94
|
+
.spawn({ component: Numeric, data: { scalar: 4, values: [1, 2] } })
|
|
95
|
+
.unwrap();
|
|
96
|
+
|
|
97
|
+
const result = world.set(entity, Numeric, { values: [7, Number.NaN] });
|
|
98
|
+
|
|
99
|
+
expect(result.ok).toBe(false);
|
|
100
|
+
if (!result.ok) {
|
|
101
|
+
expectNumericValueError(result.error, {
|
|
102
|
+
field: 'values',
|
|
103
|
+
received: Number.NaN,
|
|
104
|
+
index: 1,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const current = world.get(entity, Numeric).unwrap();
|
|
108
|
+
expect(current.scalar).toBe(4);
|
|
109
|
+
expect(Array.from(current.values)).toEqual([1, 2]);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('rejects QueryRow.mut scalar NaN and preserves the old field', () => {
|
|
113
|
+
const world = new World();
|
|
114
|
+
const entity = world
|
|
115
|
+
.spawn({ component: Numeric, data: { scalar: 5, values: [1, 2] } })
|
|
116
|
+
.unwrap();
|
|
117
|
+
const row = world
|
|
118
|
+
.query({ write: [Numeric] })
|
|
119
|
+
.unwrap()
|
|
120
|
+
.at(entity);
|
|
121
|
+
expect(row).toBeDefined();
|
|
122
|
+
let thrown: unknown;
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
if (row !== undefined) row.mut(Numeric).scalar = Number.NaN;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
thrown = error;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
expectNumericValueError(thrown, { field: 'scalar', received: Number.NaN });
|
|
131
|
+
expect(world.get(entity, Numeric).unwrap().scalar).toBe(5);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('rejects a deferred command before adding the component', () => {
|
|
135
|
+
const world = new World();
|
|
136
|
+
const entity = world.spawn({ component: Marker, data: {} }).unwrap();
|
|
137
|
+
world
|
|
138
|
+
.addSystem(Update, {
|
|
139
|
+
name: 'nan-preflight-command',
|
|
140
|
+
queries: [],
|
|
141
|
+
fn: (_world, _queries, commands) => {
|
|
142
|
+
commands.addComponent(entity, {
|
|
143
|
+
component: Numeric,
|
|
144
|
+
data: { scalar: Number.NaN, values: [1, 2] },
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
})
|
|
148
|
+
.unwrap();
|
|
149
|
+
|
|
150
|
+
const result = world.update(0);
|
|
151
|
+
|
|
152
|
+
expect(result.ok).toBe(false);
|
|
153
|
+
if (!result.ok) {
|
|
154
|
+
expect(result.error.code).toBe('command-failed');
|
|
155
|
+
if (result.error.code === 'command-failed') {
|
|
156
|
+
expectNumericValueError(result.error.detail.cause, {
|
|
157
|
+
field: 'scalar',
|
|
158
|
+
received: Number.NaN,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
expect(world.get(entity, Numeric).ok).toBe(false);
|
|
163
|
+
expect(world.execution.health).toBe('healthy');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('accepts positive Infinity while leaving QuerySpan as the raw numeric boundary', () => {
|
|
167
|
+
const world = new World({ storage: 'shared' });
|
|
168
|
+
const entity = world
|
|
169
|
+
.spawn({
|
|
170
|
+
component: InlineNumeric,
|
|
171
|
+
data: { scalar: Number.POSITIVE_INFINITY, values: [Number.POSITIVE_INFINITY, 2] },
|
|
172
|
+
})
|
|
173
|
+
.unwrap();
|
|
174
|
+
expect(world.set(entity, InlineNumeric, { scalar: Number.POSITIVE_INFINITY }).ok).toBe(true);
|
|
175
|
+
expect(world.get(entity, InlineNumeric).unwrap().scalar).toBe(Number.POSITIVE_INFINITY);
|
|
176
|
+
|
|
177
|
+
const spans = world
|
|
178
|
+
.query({ write: [InlineNumeric] })
|
|
179
|
+
.unwrap()
|
|
180
|
+
.spans()
|
|
181
|
+
.unwrap();
|
|
182
|
+
for (const span of spans) span.mut(InlineNumeric).scalar[0] = Number.NaN;
|
|
183
|
+
|
|
184
|
+
expect(world.get(entity, InlineNumeric).unwrap().scalar).toBeNaN();
|
|
185
|
+
});
|
|
186
|
+
});
|
|
@@ -518,6 +518,9 @@ import { World } from '../world';
|
|
|
518
518
|
// feat-20260822 ECS core reduction — managed array writes reject
|
|
519
519
|
// arbitrary object payloads before row/buffer mutation.
|
|
520
520
|
'managed-array-invalid-value',
|
|
521
|
+
// feat-20260825-engine-feedback-verifiable-remediation M1 / w4 —
|
|
522
|
+
// object-write numeric preflight rejects NaN before mutation.
|
|
523
|
+
'component-numeric-value-invalid',
|
|
521
524
|
'shared-kernel-ineligible',
|
|
522
525
|
'shared-kernel-failed',
|
|
523
526
|
'world-poisoned',
|
|
@@ -661,6 +664,7 @@ import { World } from '../world';
|
|
|
661
664
|
// visually closed.
|
|
662
665
|
case 'system-set-not-registered':
|
|
663
666
|
case 'component-field-invalid-value':
|
|
667
|
+
case 'component-numeric-value-invalid':
|
|
664
668
|
case 'managed-array-invalid-value':
|
|
665
669
|
case 'time-delta-invalid':
|
|
666
670
|
case 'time-config-invalid':
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { expectTypeOf } from 'vitest';
|
|
2
|
+
import { defineComponent } from '../component';
|
|
3
|
+
import {
|
|
4
|
+
createRenderReadLease,
|
|
5
|
+
type RenderChangeBatch,
|
|
6
|
+
type RenderProjectionRequest,
|
|
7
|
+
} from '../projection/index';
|
|
8
|
+
import { World } from '../world';
|
|
9
|
+
|
|
10
|
+
const Position = defineComponent('RenderReadTypePosition', { x: 'f32' });
|
|
11
|
+
const world = new World();
|
|
12
|
+
const lease = createRenderReadLease(world);
|
|
13
|
+
const request: RenderProjectionRequest = {
|
|
14
|
+
components: [{ component: Position, fields: ['x'] }],
|
|
15
|
+
};
|
|
16
|
+
const batch = lease.readChanges(lease.inspectCursor());
|
|
17
|
+
const projection = lease.querySpans(request);
|
|
18
|
+
|
|
19
|
+
expectTypeOf(lease.worldIdentity).toEqualTypeOf<string>();
|
|
20
|
+
expectTypeOf(lease.generation).toBeNumber();
|
|
21
|
+
expectTypeOf(batch).toMatchTypeOf<RenderChangeBatch>();
|
|
22
|
+
expectTypeOf(projection.generation).toBeNumber();
|
|
23
|
+
expectTypeOf<NonNullable<(typeof projection.spans)[number]['fields']['x']>>().toMatchTypeOf<
|
|
24
|
+
ArrayLike<number>
|
|
25
|
+
>();
|
|
26
|
+
|
|
27
|
+
// @ts-expect-error RenderReadLease does not expose storage internals.
|
|
28
|
+
lease._getArrayView;
|
|
29
|
+
// @ts-expect-error a renderer projection is not a public lease.
|
|
30
|
+
projection.readChanges;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { defineComponent } from '../component';
|
|
3
|
+
import { createRenderReadLease, type RenderProjectionRequest } from '../projection/index';
|
|
4
|
+
import { World } from '../world';
|
|
5
|
+
|
|
6
|
+
const Position = defineComponent('RenderReadPosition', {
|
|
7
|
+
x: 'f32',
|
|
8
|
+
y: 'f32',
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const request: RenderProjectionRequest = {
|
|
12
|
+
components: [{ component: Position, fields: ['x', 'y'] }],
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
describe('RenderReadLease contract', () => {
|
|
16
|
+
it('attaches, exposes a world generation, and reads continuous spans', () => {
|
|
17
|
+
const world = new World();
|
|
18
|
+
world.spawn({ component: Position, data: { x: 1, y: 2 } }).unwrap();
|
|
19
|
+
const lease = createRenderReadLease(world);
|
|
20
|
+
|
|
21
|
+
expect(lease.worldIdentity).toBe(world.identity);
|
|
22
|
+
expect(lease.generation).toBeGreaterThan(0);
|
|
23
|
+
const projection = lease.querySpans(request);
|
|
24
|
+
expect(projection.generation).toBe(lease.generation);
|
|
25
|
+
expect(projection.spans).toHaveLength(1);
|
|
26
|
+
expect(projection.spans[0]?.fields.x).toEqual(new Float32Array([1]));
|
|
27
|
+
expect(projection.spans[0]?.fields.y).toEqual(new Float32Array([2]));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('publishes world and shared-ref changes through one cursor contract', () => {
|
|
31
|
+
const world = new World();
|
|
32
|
+
const lease = createRenderReadLease(world);
|
|
33
|
+
const cursor = lease.inspectCursor();
|
|
34
|
+
const entity = world.spawn({ component: Position, data: { x: 0, y: 0 } }).unwrap();
|
|
35
|
+
world.set(entity, Position, { x: 3 }).unwrap();
|
|
36
|
+
const batch = lease.readChanges(cursor);
|
|
37
|
+
|
|
38
|
+
expect(batch.status).toBe('ok');
|
|
39
|
+
if (batch.status !== 'ok') return;
|
|
40
|
+
expect(batch.cursor).toBeGreaterThan(cursor);
|
|
41
|
+
expect(batch.world.records.some((record) => record.kind === 'component-changed')).toBe(true);
|
|
42
|
+
expect(batch.sharedRefs.status).toBe('ok');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('reports overflow and requires an explicit resync', () => {
|
|
46
|
+
const world = new World();
|
|
47
|
+
const lease = createRenderReadLease(world);
|
|
48
|
+
const staleCursor = 0;
|
|
49
|
+
|
|
50
|
+
for (let index = 0; index < 65537; index += 1) {
|
|
51
|
+
const entity = world.spawn({ component: Position, data: { x: index, y: 0 } }).unwrap();
|
|
52
|
+
world.despawn(entity).unwrap();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const batch = lease.readChanges(staleCursor);
|
|
56
|
+
expect(batch.status).toBe('overflow');
|
|
57
|
+
if (batch.status !== 'overflow') return;
|
|
58
|
+
expect(batch.resync).toBe(true);
|
|
59
|
+
expect(batch.oldestAvailable).toBeGreaterThan(staleCursor);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('detaches idempotently and rejects reads after dispose', () => {
|
|
63
|
+
const lease = createRenderReadLease(new World());
|
|
64
|
+
lease.dispose();
|
|
65
|
+
lease.dispose();
|
|
66
|
+
|
|
67
|
+
expect(() => lease.inspectCursor()).toThrow(/disposed/i);
|
|
68
|
+
expect(() => lease.querySpans(request)).toThrow(/disposed/i);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('distinguishes leases from renderer-owned projections', () => {
|
|
72
|
+
const world = new World();
|
|
73
|
+
const lease = createRenderReadLease(world);
|
|
74
|
+
const projection = lease.querySpans(request);
|
|
75
|
+
|
|
76
|
+
expect(projection).not.toBe(lease);
|
|
77
|
+
expect(Object.keys(projection)).toEqual(['generation', 'sharedRefEpoch', 'spans']);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -184,6 +184,7 @@ describe('[w13] EcsErrorCode union completeness — stale codes present', () =>
|
|
|
184
184
|
case 'time-config-invalid':
|
|
185
185
|
case 'schedule-scope-mismatch':
|
|
186
186
|
case 'component-field-invalid-value':
|
|
187
|
+
case 'component-numeric-value-invalid':
|
|
187
188
|
case 'shared-kernel-ineligible':
|
|
188
189
|
case 'shared-kernel-failed':
|
|
189
190
|
case 'world-poisoned':
|
|
@@ -102,6 +102,94 @@ export class ComponentFieldInvalidValueError extends Error {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
export class ComponentNumericValueInvalidError extends Error {
|
|
106
|
+
override readonly name = 'ComponentNumericValueInvalidError';
|
|
107
|
+
readonly code = 'component-numeric-value-invalid' as const;
|
|
108
|
+
readonly expected = 'a numeric value other than NaN';
|
|
109
|
+
readonly hint: string;
|
|
110
|
+
readonly detail: {
|
|
111
|
+
readonly entity: number | undefined;
|
|
112
|
+
readonly component: string;
|
|
113
|
+
readonly field: string;
|
|
114
|
+
readonly received: number;
|
|
115
|
+
readonly index?: number;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
constructor(
|
|
119
|
+
entity: number | undefined,
|
|
120
|
+
component: string,
|
|
121
|
+
field: string,
|
|
122
|
+
received: number,
|
|
123
|
+
index?: number,
|
|
124
|
+
) {
|
|
125
|
+
const location =
|
|
126
|
+
index === undefined ? `${component}.${field}` : `${component}.${field}[${index}]`;
|
|
127
|
+
const hint = `Replace NaN at ${location} with an authored numeric value; Number.POSITIVE_INFINITY remains valid where the component domain permits it.`;
|
|
128
|
+
super(
|
|
129
|
+
`${location} received NaN.\n` +
|
|
130
|
+
` code: component-numeric-value-invalid\n` +
|
|
131
|
+
` expected: a numeric value other than NaN\n` +
|
|
132
|
+
` hint: ${hint}`,
|
|
133
|
+
);
|
|
134
|
+
this.hint = hint;
|
|
135
|
+
this.detail = {
|
|
136
|
+
entity,
|
|
137
|
+
component,
|
|
138
|
+
field,
|
|
139
|
+
received,
|
|
140
|
+
...(index === undefined ? {} : { index }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const NUMERIC_FIELD_TYPES = new Set(['f32', 'f64', 'i32', 'u32', 'i16', 'u16', 'i8', 'u8', 'enum']);
|
|
146
|
+
|
|
147
|
+
export function validateNumericFieldValues<S extends ComponentSchema>(
|
|
148
|
+
component: Component<string, S>,
|
|
149
|
+
raw: Partial<Record<string, unknown>> | undefined,
|
|
150
|
+
entity?: number,
|
|
151
|
+
): ComponentNumericValueInvalidError | null {
|
|
152
|
+
if (raw === undefined) return null;
|
|
153
|
+
const fields = componentDefinition(component).fields as Readonly<Record<string, FieldReflection>>;
|
|
154
|
+
const rawValues = raw as Record<string, unknown>;
|
|
155
|
+
for (const fieldName of Object.keys(rawValues)) {
|
|
156
|
+
const reflection = fields[fieldName];
|
|
157
|
+
if (reflection === undefined) continue;
|
|
158
|
+
const value = rawValues[fieldName];
|
|
159
|
+
if (NUMERIC_FIELD_TYPES.has(reflection.type)) {
|
|
160
|
+
if (typeof value === 'number' && Number.isNaN(value)) {
|
|
161
|
+
return new ComponentNumericValueInvalidError(entity, component.name, fieldName, value);
|
|
162
|
+
}
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (
|
|
166
|
+
reflection.arrayMeta === undefined ||
|
|
167
|
+
!NUMERIC_FIELD_TYPES.has(reflection.arrayMeta.elementType)
|
|
168
|
+
) {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const length =
|
|
172
|
+
Array.isArray(value) || ArrayBuffer.isView(value)
|
|
173
|
+
? (value as { readonly length?: number }).length
|
|
174
|
+
: undefined;
|
|
175
|
+
if (length === undefined) continue;
|
|
176
|
+
const values = value as ArrayLike<unknown>;
|
|
177
|
+
for (let index = 0; index < length; index++) {
|
|
178
|
+
const received = values[index];
|
|
179
|
+
if (typeof received === 'number' && Number.isNaN(received)) {
|
|
180
|
+
return new ComponentNumericValueInvalidError(
|
|
181
|
+
entity,
|
|
182
|
+
component.name,
|
|
183
|
+
fieldName,
|
|
184
|
+
received,
|
|
185
|
+
index,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
105
193
|
/**
|
|
106
194
|
* Returned before an ECS write when a managed `array<T>` field receives a
|
|
107
195
|
* value that the storage boundary cannot interpret as an array payload. The
|
package/src/errors.ts
CHANGED
|
@@ -37,6 +37,7 @@ export {
|
|
|
37
37
|
} from './errors/sprite-and-shared-errors';
|
|
38
38
|
export {
|
|
39
39
|
ComponentFieldInvalidValueError,
|
|
40
|
+
ComponentNumericValueInvalidError,
|
|
40
41
|
ManagedArrayInvalidValueError,
|
|
41
42
|
ResourceInvalidValueError,
|
|
42
43
|
ScheduleScopeMismatchError,
|
|
@@ -45,6 +46,7 @@ export {
|
|
|
45
46
|
TimeConfigInvalidError,
|
|
46
47
|
TimeDeltaInvalidError,
|
|
47
48
|
validateEnumFieldValues,
|
|
49
|
+
validateNumericFieldValues,
|
|
48
50
|
} from './errors/validation-errors';
|
|
49
51
|
|
|
50
52
|
export {
|
|
@@ -1079,6 +1081,7 @@ export type EcsErrorCode =
|
|
|
1079
1081
|
| 'system-set-not-registered'
|
|
1080
1082
|
// Closed enum field writes fail before archetype or column mutation.
|
|
1081
1083
|
| 'component-field-invalid-value'
|
|
1084
|
+
| 'component-numeric-value-invalid'
|
|
1082
1085
|
| 'managed-array-invalid-value'
|
|
1083
1086
|
| 'shared-kernel-ineligible'
|
|
1084
1087
|
| 'shared-kernel-failed'
|
|
@@ -1345,6 +1348,14 @@ export type EcsErrorDetail =
|
|
|
1345
1348
|
readonly received: unknown;
|
|
1346
1349
|
readonly allowedValues: Readonly<Record<string, number>>;
|
|
1347
1350
|
}
|
|
1351
|
+
| {
|
|
1352
|
+
readonly code: 'component-numeric-value-invalid';
|
|
1353
|
+
readonly entity: number | undefined;
|
|
1354
|
+
readonly component: string;
|
|
1355
|
+
readonly field: string;
|
|
1356
|
+
readonly received: number;
|
|
1357
|
+
readonly index?: number;
|
|
1358
|
+
}
|
|
1348
1359
|
| {
|
|
1349
1360
|
readonly code: 'managed-array-invalid-value';
|
|
1350
1361
|
readonly component: string;
|