@forgeax/engine-ecs 0.1.26 → 0.1.27
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 +94 -35
- package/dist/__tests__/world-read.unit.test.d.ts +2 -0
- package/dist/__tests__/world-read.unit.test.d.ts.map +1 -0
- package/dist/commands.d.ts +2 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/index.mjs +3471 -4263
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +2 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +3 -333
- package/dist/internal.mjs.map +1 -1
- package/dist/projection/index.mjs.map +1 -1
- package/dist/shared.mjs.map +1 -1
- package/dist/world-entity-lifecycle.d.ts +3 -14
- package/dist/world-entity-lifecycle.d.ts.map +1 -1
- package/dist/world-internal.d.ts +65 -5
- package/dist/world-internal.d.ts.map +1 -1
- package/dist/world-read.d.ts +16 -0
- package/dist/world-read.d.ts.map +1 -0
- package/dist/world-read.mjs +8 -0
- package/dist/world-read.mjs.map +1 -0
- package/dist/world-scheduling.d.ts +0 -4
- package/dist/world-scheduling.d.ts.map +1 -1
- package/dist/world-storage-primitives.d.ts +26 -0
- package/dist/world-storage-primitives.d.ts.map +1 -0
- package/dist/world.d.ts +352 -157
- package/dist/world.d.ts.map +1 -1
- package/package.json +8 -4
- package/src/__tests__/command-buffer.test.ts +29 -3
- package/src/__tests__/hierarchy.unit.test.ts +3 -3
- package/src/__tests__/world-health.contract.test.ts +195 -2
- package/src/__tests__/world-read.unit.test.ts +30 -0
- package/src/commands.ts +22 -9
- package/src/internal.ts +5 -3
- package/src/world-entity-lifecycle.ts +23 -252
- package/src/world-internal-augmentation.d.ts +11 -0
- package/src/world-internal.ts +114 -63
- package/src/world-read.ts +38 -0
- package/src/world-scheduling.ts +0 -26
- package/src/world-storage-primitives.ts +179 -0
- package/src/world.ts +2590 -509
- package/dist/world-component-access.d.ts +0 -311
- package/dist/world-component-access.d.ts.map +0 -1
- package/dist/world-component-storage.d.ts +0 -298
- package/dist/world-component-storage.d.ts.map +0 -1
- package/dist/world-core.d.ts +0 -39
- package/dist/world-core.d.ts.map +0 -1
- package/src/world-component-access.ts +0 -1769
- package/src/world-component-storage.ts +0 -1264
- package/src/world-core.ts +0 -74
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-ecs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.27",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
"./shared": {
|
|
28
28
|
"types": "./dist/shared.d.ts",
|
|
29
29
|
"import": "./dist/shared.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./world-read": {
|
|
32
|
+
"types": "./dist/world-read.d.ts",
|
|
33
|
+
"import": "./dist/world-read.mjs"
|
|
30
34
|
}
|
|
31
35
|
},
|
|
32
36
|
"main": "./dist/index.mjs",
|
|
@@ -38,9 +42,9 @@
|
|
|
38
42
|
"LICENSE"
|
|
39
43
|
],
|
|
40
44
|
"dependencies": {
|
|
41
|
-
"@forgeax/engine-math": "0.1.
|
|
42
|
-
"@forgeax/engine-plugin": "0.1.
|
|
43
|
-
"@forgeax/engine-types": "0.1.
|
|
45
|
+
"@forgeax/engine-math": "0.1.27",
|
|
46
|
+
"@forgeax/engine-plugin": "0.1.27",
|
|
47
|
+
"@forgeax/engine-types": "0.1.27"
|
|
44
48
|
},
|
|
45
49
|
"devDependencies": {
|
|
46
50
|
"@types/node": "^20.14.0"
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { err } from '@forgeax/engine-types';
|
|
1
2
|
import { describe, expect, it, vi } from 'vitest';
|
|
2
3
|
import { createCommandBuffer, flushCommands } from '../commands';
|
|
3
4
|
import { defineComponent } from '../component';
|
|
4
5
|
import { Entity } from '../entity';
|
|
5
6
|
import type { EntityHandle } from '../entity-handle';
|
|
6
|
-
import { CommandFailedError, SystemFailedError } from '../errors';
|
|
7
|
+
import { CommandFailedError, SharedKernelFailureError, SystemFailedError } from '../errors';
|
|
7
8
|
import { defineRelationship } from '../relationship-index';
|
|
8
9
|
import { Update } from '../schedule-token';
|
|
9
10
|
import { World } from '../world';
|
|
@@ -143,11 +144,12 @@ describe('CommandBuffer terminal lifecycle', () => {
|
|
|
143
144
|
const failed = world.update();
|
|
144
145
|
expect(failed.ok).toBe(false);
|
|
145
146
|
expect(world.execution.health).toBe('poisoned');
|
|
146
|
-
const
|
|
147
|
+
const replacementWorld = new World();
|
|
148
|
+
replacementWorld.spawn().unwrap();
|
|
147
149
|
const stale = world.get(pending as EntityHandle, CommandPosition);
|
|
148
150
|
expect(stale.ok).toBe(false);
|
|
149
151
|
if (!stale.ok) expect(stale.error.code).toBe('stale-entity');
|
|
150
|
-
expect(
|
|
152
|
+
expect(replacementWorld.identity).not.toBe(world.identity);
|
|
151
153
|
});
|
|
152
154
|
|
|
153
155
|
it('reports the last committed command when a later flush write unexpectedly fails', () => {
|
|
@@ -176,4 +178,28 @@ describe('CommandBuffer terminal lifecycle', () => {
|
|
|
176
178
|
}
|
|
177
179
|
expect(world.execution.health).toBe('poisoned');
|
|
178
180
|
});
|
|
181
|
+
|
|
182
|
+
it('poisons on a first-command materialization failure without reclaiming its row', () => {
|
|
183
|
+
const world = new World();
|
|
184
|
+
const buffer = createCommandBuffer(world, { systemName: 'flush', scheduleName: Update.name });
|
|
185
|
+
const pending = buffer.spawn({ component: CommandPosition, data: { x: 7 } });
|
|
186
|
+
const injected = new SharedKernelFailureError(
|
|
187
|
+
'World.materializeEntity',
|
|
188
|
+
world.identity,
|
|
189
|
+
new Error('post-write materialization fault'),
|
|
190
|
+
true,
|
|
191
|
+
);
|
|
192
|
+
const materialize = world[worldInternal].materializePendingEntity;
|
|
193
|
+
vi.spyOn(world[worldInternal], 'materializePendingEntity').mockImplementationOnce(
|
|
194
|
+
(entity, componentDatas) => {
|
|
195
|
+
const result = materialize(entity, componentDatas);
|
|
196
|
+
return result.ok ? err(injected) : result;
|
|
197
|
+
},
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
expect(() => flushCommands(buffer, world)).toThrow(SystemFailedError);
|
|
201
|
+
expect(world.execution.health).toBe('poisoned');
|
|
202
|
+
expect(world.execution.fault?.partialWrite).toBe(true);
|
|
203
|
+
expect(world.hasComponent(pending, CommandPosition)).toBe(true);
|
|
204
|
+
});
|
|
179
205
|
});
|
|
@@ -23,7 +23,7 @@ import { Update } from '../schedule-token';
|
|
|
23
23
|
// - packages/ecs/src/__tests__/world-array-reflection.test.ts
|
|
24
24
|
// - packages/ecs/src/__tests__/world-array-view.test.ts
|
|
25
25
|
// - packages/ecs/src/__tests__/world-buffer-fields.test.ts
|
|
26
|
-
// - packages/ecs/src/__tests__/world-
|
|
26
|
+
// - packages/ecs/src/__tests__/world-health.contract.test.ts
|
|
27
27
|
// - packages/ecs/src/__tests__/world-inspect-systems.test.ts
|
|
28
28
|
// - packages/ecs/src/__tests__/world-integration.test.ts
|
|
29
29
|
// - packages/ecs/src/__tests__/world-managed-refs-non-null.test.ts
|
|
@@ -935,7 +935,7 @@ import { handleNumeric } from './utils/handle-numeric';
|
|
|
935
935
|
describe('generation retirement (AC-03, E-08)', () => {
|
|
936
936
|
// These tests verify the retirement *constants* and *encoding* behavior.
|
|
937
937
|
// The actual World-level retirement logic (not pushing to free list) is
|
|
938
|
-
// tested in
|
|
938
|
+
// tested in the World lifecycle contract suite (w11).
|
|
939
939
|
|
|
940
940
|
it('ENTITY_MAX_GENERATION equals 255', () => {
|
|
941
941
|
expect(ENTITY_MAX_GENERATION).toBe(255);
|
|
@@ -1044,7 +1044,7 @@ import { handleNumeric } from './utils/handle-numeric';
|
|
|
1044
1044
|
});
|
|
1045
1045
|
}
|
|
1046
1046
|
{
|
|
1047
|
-
// ---
|
|
1047
|
+
// --- World lifecycle coverage ---
|
|
1048
1048
|
describe('World.spawn', () => {
|
|
1049
1049
|
it('single-component spawn returns a valid Entity handle', () => {
|
|
1050
1050
|
const world = new World();
|
|
@@ -1,17 +1,210 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createCommandBuffer, flushCommands } from '../commands';
|
|
3
|
+
import { componentId, defineComponent } from '../component';
|
|
4
|
+
import { ComponentNotPresentError } from '../errors';
|
|
3
5
|
import {
|
|
4
6
|
defineSharedKernel,
|
|
5
7
|
SHARED_KERNEL_EXECUTOR_RESOURCE_KEY,
|
|
6
8
|
type SharedKernelExecutor,
|
|
7
9
|
} from '../execution/shared-kernel';
|
|
10
|
+
import { defineRelationship } from '../relationship-index';
|
|
8
11
|
import { Update } from '../schedule-token';
|
|
9
12
|
import { World } from '../world';
|
|
13
|
+
import { worldInternal } from '../world-internal';
|
|
10
14
|
|
|
11
15
|
const Position = defineComponent('WorldHealthPosition', { x: 'f32' });
|
|
16
|
+
const { source: WorldHealthChildOf, target: WorldHealthChildren } = defineRelationship({
|
|
17
|
+
sourceName: 'WorldHealthChildOf',
|
|
18
|
+
sourceField: 'parent',
|
|
19
|
+
targetName: 'WorldHealthChildren',
|
|
20
|
+
targetField: 'entities',
|
|
21
|
+
});
|
|
12
22
|
function integrate(): void {}
|
|
13
23
|
|
|
14
24
|
describe('World execution health', () => {
|
|
25
|
+
it('poisons synchronous materialization after a row has been published', () => {
|
|
26
|
+
const world = new World();
|
|
27
|
+
const target = world.spawn().unwrap();
|
|
28
|
+
const injected = new ComponentNotPresentError(target as number, 'InjectedRelationshipFailure');
|
|
29
|
+
const mutationEpoch = world[worldInternal].getMutationEpoch();
|
|
30
|
+
const structureEpoch = world.getStructureEpoch();
|
|
31
|
+
const evidenceCursor = world[worldInternal].getStructuralEvidence().cursor;
|
|
32
|
+
const onInsert = vi.spyOn(
|
|
33
|
+
world as unknown as {
|
|
34
|
+
relationshipOnInsert: (...args: never[]) => unknown;
|
|
35
|
+
},
|
|
36
|
+
'relationshipOnInsert',
|
|
37
|
+
);
|
|
38
|
+
onInsert.mockReturnValueOnce({ ok: false, error: injected });
|
|
39
|
+
|
|
40
|
+
const failed = world.spawn({ component: WorldHealthChildOf, data: { parent: target } });
|
|
41
|
+
|
|
42
|
+
expect(failed.ok).toBe(false);
|
|
43
|
+
if (!failed.ok) expect(failed.error).toBe(injected);
|
|
44
|
+
expect(world.execution.health).toBe('poisoned');
|
|
45
|
+
expect(world.execution.fault?.partialWrite).toBe(true);
|
|
46
|
+
expect(world[worldInternal].getMutationEpoch()).toBe(mutationEpoch);
|
|
47
|
+
expect(world.getStructureEpoch()).toBe(structureEpoch);
|
|
48
|
+
expect(world[worldInternal].getStructuralEvidence().cursor).toBe(evidenceCursor);
|
|
49
|
+
const rejected = world.spawn();
|
|
50
|
+
expect(rejected.ok).toBe(false);
|
|
51
|
+
if (!rejected.ok) expect(rejected.error.code).toBe('world-poisoned');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('poisons before reclaim when archetype-row append fails after table append', () => {
|
|
55
|
+
const world = new World();
|
|
56
|
+
const existing = world.spawn().unwrap();
|
|
57
|
+
const archetype = world[worldInternal].getEntityArchetype(existing);
|
|
58
|
+
if (archetype === undefined) throw new Error('fixture archetype missing');
|
|
59
|
+
const injected = new Error('injected archetype row allocation fault');
|
|
60
|
+
const rows = archetype.rows;
|
|
61
|
+
archetype.rows = new Proxy(rows, {
|
|
62
|
+
set() {
|
|
63
|
+
throw injected;
|
|
64
|
+
},
|
|
65
|
+
}) as typeof rows;
|
|
66
|
+
|
|
67
|
+
expect(() => world.spawn()).toThrow(injected);
|
|
68
|
+
expect(world.execution.health).toBe('poisoned');
|
|
69
|
+
expect(world.execution.fault?.partialWrite).toBe(true);
|
|
70
|
+
expect(world.update(0).ok).toBe(false);
|
|
71
|
+
const rejected = world.spawn();
|
|
72
|
+
expect(rejected.ok).toBe(false);
|
|
73
|
+
if (!rejected.ok) expect(rejected.error.code).toBe('world-poisoned');
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('poisons deferred materialization on a real relationship storage failure', () => {
|
|
77
|
+
const world = new World();
|
|
78
|
+
const target = world.spawn({ component: WorldHealthChildren, data: { entities: [] } }).unwrap();
|
|
79
|
+
const targetArchetype = world[worldInternal].getEntityArchetype(target);
|
|
80
|
+
if (targetArchetype === undefined) throw new Error('fixture target archetype missing');
|
|
81
|
+
const targetTable = world[worldInternal].getGraph().tables[targetArchetype.tableId];
|
|
82
|
+
const targetStorage = targetTable?.storage.get(componentId(WorldHealthChildren));
|
|
83
|
+
if (targetStorage === undefined) throw new Error('fixture target storage missing');
|
|
84
|
+
targetStorage.fields.delete('entities:count');
|
|
85
|
+
|
|
86
|
+
const buffer = createCommandBuffer(world, {
|
|
87
|
+
systemName: 'relationship-flush',
|
|
88
|
+
scheduleName: Update.name,
|
|
89
|
+
});
|
|
90
|
+
const pending = buffer.spawn({ component: WorldHealthChildOf, data: { parent: target } });
|
|
91
|
+
const mutationEpoch = world[worldInternal].getMutationEpoch();
|
|
92
|
+
const evidenceCursor = world[worldInternal].getStructuralEvidence().cursor;
|
|
93
|
+
|
|
94
|
+
expect(() => flushCommands(buffer, world)).toThrow();
|
|
95
|
+
expect(buffer.status).toBe('aborted');
|
|
96
|
+
expect(world.execution.health).toBe('poisoned');
|
|
97
|
+
expect(world.execution.fault?.partialWrite).toBe(true);
|
|
98
|
+
expect(world.hasComponent(pending, WorldHealthChildOf)).toBe(true);
|
|
99
|
+
expect(world[worldInternal].getMutationEpoch()).toBe(mutationEpoch);
|
|
100
|
+
expect(world[worldInternal].getStructuralEvidence().cursor).toBe(evidenceCursor);
|
|
101
|
+
const rejected = world.spawn();
|
|
102
|
+
expect(rejected.ok).toBe(false);
|
|
103
|
+
if (!rejected.ok) expect(rejected.error.code).toBe('world-poisoned');
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('publishes target mirror evidence for direct addComponent', () => {
|
|
107
|
+
const world = new World();
|
|
108
|
+
const parent = world.spawn().unwrap();
|
|
109
|
+
const child = world.spawn().unwrap();
|
|
110
|
+
const added = world
|
|
111
|
+
.query({ read: [WorldHealthChildren], added: [WorldHealthChildren] })
|
|
112
|
+
.unwrap();
|
|
113
|
+
const childAdded = world
|
|
114
|
+
.query({ read: [WorldHealthChildOf], added: [WorldHealthChildOf] })
|
|
115
|
+
.unwrap();
|
|
116
|
+
const mutationEpoch = world[worldInternal].getMutationEpoch();
|
|
117
|
+
const structureEpoch = world.getStructureEpoch();
|
|
118
|
+
const evidenceCursor = world[worldInternal].getStructuralEvidence().cursor;
|
|
119
|
+
|
|
120
|
+
world.addComponent(child, { component: WorldHealthChildOf, data: { parent } }).unwrap();
|
|
121
|
+
|
|
122
|
+
expect(Array.from(added, (row) => row.entity)).toEqual([parent]);
|
|
123
|
+
expect(Array.from(childAdded, (row) => row.entity)).toEqual([child]);
|
|
124
|
+
expect(world.get(parent, WorldHealthChildren).unwrap().entities).toEqual(
|
|
125
|
+
new Uint32Array([child as number]),
|
|
126
|
+
);
|
|
127
|
+
const targetChange = world[worldInternal].getComponentChange(
|
|
128
|
+
parent,
|
|
129
|
+
componentId(WorldHealthChildren),
|
|
130
|
+
);
|
|
131
|
+
expect(targetChange?.added).toBeGreaterThan(0);
|
|
132
|
+
expect(world[worldInternal].getMutationEpoch()).toBeGreaterThan(mutationEpoch);
|
|
133
|
+
expect(world.getStructureEpoch()).toBeGreaterThan(structureEpoch);
|
|
134
|
+
const evidence = world[worldInternal].getStructuralEvidence().readAfter(evidenceCursor);
|
|
135
|
+
expect(evidence.status).toBe('ok');
|
|
136
|
+
if (evidence.status === 'ok') {
|
|
137
|
+
expect(evidence.events).toEqual(
|
|
138
|
+
expect.arrayContaining([
|
|
139
|
+
expect.objectContaining({
|
|
140
|
+
kind: 'component-added',
|
|
141
|
+
entity: parent,
|
|
142
|
+
componentId: componentId(WorldHealthChildren),
|
|
143
|
+
}),
|
|
144
|
+
expect.objectContaining({
|
|
145
|
+
kind: 'component-added',
|
|
146
|
+
entity: child,
|
|
147
|
+
componentId: componentId(WorldHealthChildOf),
|
|
148
|
+
}),
|
|
149
|
+
]),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('publishes target mirror evidence through addChild', () => {
|
|
155
|
+
const world = new World();
|
|
156
|
+
const parent = world.spawn().unwrap();
|
|
157
|
+
const child = world.spawn().unwrap();
|
|
158
|
+
const added = world
|
|
159
|
+
.query({ read: [WorldHealthChildren], added: [WorldHealthChildren] })
|
|
160
|
+
.unwrap();
|
|
161
|
+
const mutationEpoch = world[worldInternal].getMutationEpoch();
|
|
162
|
+
const structureEpoch = world.getStructureEpoch();
|
|
163
|
+
|
|
164
|
+
world.addChild(parent, child, WorldHealthChildOf, { parent }).unwrap();
|
|
165
|
+
|
|
166
|
+
expect(Array.from(added, (row) => row.entity)).toEqual([parent]);
|
|
167
|
+
expect(world[worldInternal].getMutationEpoch()).toBeGreaterThan(mutationEpoch);
|
|
168
|
+
expect(world.getStructureEpoch()).toBeGreaterThan(structureEpoch);
|
|
169
|
+
expect(world.get(parent, WorldHealthChildren).unwrap().entities).toEqual(
|
|
170
|
+
new Uint32Array([child as number]),
|
|
171
|
+
);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('preserves target mirror evidence across exclusive reparent', () => {
|
|
175
|
+
const world = new World();
|
|
176
|
+
const firstParent = world.spawn().unwrap();
|
|
177
|
+
const secondParent = world.spawn().unwrap();
|
|
178
|
+
const child = world
|
|
179
|
+
.spawn({ component: WorldHealthChildOf, data: { parent: firstParent } })
|
|
180
|
+
.unwrap();
|
|
181
|
+
const added = world
|
|
182
|
+
.query({ read: [WorldHealthChildren], added: [WorldHealthChildren] })
|
|
183
|
+
.unwrap();
|
|
184
|
+
expect(Array.from(added, (row) => row.entity)).toEqual([firstParent]);
|
|
185
|
+
const childAdded = world
|
|
186
|
+
.query({ read: [WorldHealthChildOf], added: [WorldHealthChildOf] })
|
|
187
|
+
.unwrap();
|
|
188
|
+
expect(Array.from(childAdded, (row) => row.entity)).toEqual([child]);
|
|
189
|
+
const mutationEpoch = world[worldInternal].getMutationEpoch();
|
|
190
|
+
const structureEpoch = world.getStructureEpoch();
|
|
191
|
+
|
|
192
|
+
world
|
|
193
|
+
.addComponent(child, { component: WorldHealthChildOf, data: { parent: secondParent } })
|
|
194
|
+
.unwrap();
|
|
195
|
+
|
|
196
|
+
expect(Array.from(added, (row) => row.entity)).toEqual([secondParent]);
|
|
197
|
+
expect(Array.from(childAdded, (row) => row.entity)).toEqual([child]);
|
|
198
|
+
expect(world[worldInternal].getMutationEpoch()).toBeGreaterThan(mutationEpoch);
|
|
199
|
+
expect(world.getStructureEpoch()).toBeGreaterThan(structureEpoch);
|
|
200
|
+
expect(world.get(firstParent, WorldHealthChildren).unwrap().entities).toEqual(
|
|
201
|
+
new Uint32Array(),
|
|
202
|
+
);
|
|
203
|
+
expect(world.get(secondParent, WorldHealthChildren).unwrap().entities).toEqual(
|
|
204
|
+
new Uint32Array([child as number]),
|
|
205
|
+
);
|
|
206
|
+
});
|
|
207
|
+
|
|
15
208
|
it('transitions once to poisoned after a possible partial write and rejects future update', () => {
|
|
16
209
|
const world = new World();
|
|
17
210
|
world.spawn({ component: Position, data: { x: 1 } }).unwrap();
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { defineRelationship } from '../relationship-index';
|
|
3
|
+
import { World } from '../world';
|
|
4
|
+
import { worldRead } from '../world-read';
|
|
5
|
+
|
|
6
|
+
const relationship = defineRelationship({
|
|
7
|
+
sourceName: 'WorldReadSource',
|
|
8
|
+
sourceField: 'target',
|
|
9
|
+
targetName: 'WorldReadTargets',
|
|
10
|
+
targetField: 'sources',
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
describe('World semantic read seam', () => {
|
|
14
|
+
it('reads relationship facts without exposing a storage view', () => {
|
|
15
|
+
const world = new World();
|
|
16
|
+
const target = world.spawn().unwrap();
|
|
17
|
+
const source = world.spawn({ component: relationship.source, data: { target } }).unwrap();
|
|
18
|
+
|
|
19
|
+
expect(world[worldRead].getFieldValue(source, relationship.source, 'target')).toBe(
|
|
20
|
+
target as number,
|
|
21
|
+
);
|
|
22
|
+
expect(world[worldRead].getArrayLength(target, relationship.target, 'sources')).toBe(1);
|
|
23
|
+
expect(world[worldRead].getArrayElement(target, relationship.target, 'sources', 0)).toBe(
|
|
24
|
+
source as number,
|
|
25
|
+
);
|
|
26
|
+
expect(world[worldRead].getArrayElement(target, relationship.target, 'sources', 1)).toBe(
|
|
27
|
+
undefined,
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
});
|
package/src/commands.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
StaleEntityError,
|
|
23
23
|
SystemFailedError,
|
|
24
24
|
} from './errors';
|
|
25
|
+
import type { WorldExecutionState } from './execution/shared-kernel';
|
|
25
26
|
import { isRelationshipTarget, relationshipRole } from './relationship-index';
|
|
26
27
|
import type { ComponentData, EcsError } from './world';
|
|
27
28
|
import { type WorldInternal, worldInternal } from './world-internal';
|
|
@@ -73,6 +74,7 @@ export interface CommandBuffer {
|
|
|
73
74
|
/** Minimal world interface needed by CommandBuffer for entity allocation. */
|
|
74
75
|
export interface WorldForCommands {
|
|
75
76
|
readonly [worldInternal]: WorldInternal;
|
|
77
|
+
readonly execution: WorldExecutionState;
|
|
76
78
|
/**
|
|
77
79
|
* Allocate a pending entity index, returning [entity handle, index slot].
|
|
78
80
|
* @internal
|
|
@@ -569,6 +571,11 @@ export function flushCommands(buffer: CommandBufferImpl, world: WorldForCommands
|
|
|
569
571
|
throw error;
|
|
570
572
|
}
|
|
571
573
|
let applied = 0;
|
|
574
|
+
// Once the preflight boundary has passed, a command may have touched
|
|
575
|
+
// storage even when its Result is an error (for example relationship
|
|
576
|
+
// maintenance after a row was appended). `applied` is intentionally not
|
|
577
|
+
// used as the poison decision: it only counts commands that returned ok.
|
|
578
|
+
let mutationStarted = false;
|
|
572
579
|
let commandIndex = -1;
|
|
573
580
|
let currentCommand: Command | undefined;
|
|
574
581
|
let lastCommittedCommand: CommandCommitEvidence | null = null;
|
|
@@ -590,6 +597,7 @@ export function flushCommands(buffer: CommandBufferImpl, world: WorldForCommands
|
|
|
590
597
|
currentCommand = cmd;
|
|
591
598
|
switch (cmd.type) {
|
|
592
599
|
case 'spawn':
|
|
600
|
+
mutationStarted = true;
|
|
593
601
|
requireSuccess(
|
|
594
602
|
world[worldInternal].materializePendingEntity(cmd.entity, cmd.componentDatas),
|
|
595
603
|
);
|
|
@@ -598,16 +606,19 @@ export function flushCommands(buffer: CommandBufferImpl, world: WorldForCommands
|
|
|
598
606
|
lastCommittedCommand = { index: commandIndex, kind: cmd.type };
|
|
599
607
|
break;
|
|
600
608
|
case 'despawn':
|
|
609
|
+
mutationStarted = true;
|
|
601
610
|
requireSuccess(world.despawn(cmd.entity));
|
|
602
611
|
applied += 1;
|
|
603
612
|
lastCommittedCommand = { index: commandIndex, kind: cmd.type };
|
|
604
613
|
break;
|
|
605
614
|
case 'addComponent':
|
|
615
|
+
mutationStarted = true;
|
|
606
616
|
requireSuccess(world.addComponent(cmd.entity, cmd.componentData));
|
|
607
617
|
applied += 1;
|
|
608
618
|
lastCommittedCommand = { index: commandIndex, kind: cmd.type };
|
|
609
619
|
break;
|
|
610
620
|
case 'removeComponent':
|
|
621
|
+
mutationStarted = true;
|
|
611
622
|
requireSuccess(world.removeComponent(cmd.entity, cmd.component));
|
|
612
623
|
applied += 1;
|
|
613
624
|
lastCommittedCommand = { index: commandIndex, kind: cmd.type };
|
|
@@ -618,7 +629,7 @@ export function flushCommands(buffer: CommandBufferImpl, world: WorldForCommands
|
|
|
618
629
|
} catch (error) {
|
|
619
630
|
buffer.abort(error);
|
|
620
631
|
if (error instanceof CommandFailedError) throw error;
|
|
621
|
-
if (applied === 0) {
|
|
632
|
+
if (!mutationStarted && applied === 0) {
|
|
622
633
|
throw commandFailure(
|
|
623
634
|
buffer,
|
|
624
635
|
Math.max(commandIndex, 0),
|
|
@@ -626,14 +637,16 @@ export function flushCommands(buffer: CommandBufferImpl, world: WorldForCommands
|
|
|
626
637
|
error,
|
|
627
638
|
);
|
|
628
639
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
640
|
+
if (world.execution.health === 'healthy') {
|
|
641
|
+
const poison = world[worldInternal].poisonExecution;
|
|
642
|
+
poison({
|
|
643
|
+
code: 'shared-kernel-failed',
|
|
644
|
+
kernelName: 'CommandBuffer.flush',
|
|
645
|
+
cause: error,
|
|
646
|
+
partialWrite: true,
|
|
647
|
+
retryable: false,
|
|
648
|
+
});
|
|
649
|
+
}
|
|
637
650
|
throw new SystemFailedError(
|
|
638
651
|
buffer._systemName,
|
|
639
652
|
buffer._scheduleName,
|
package/src/internal.ts
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
// owning package share the exact query implementation without a private path
|
|
8
8
|
// import or an untyped cast at each consumer.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
// Keep this entry limited to package-owner metadata and the derived writer.
|
|
11
|
+
// Raw World storage stays source-private; semantic World reads live behind the
|
|
12
|
+
// separate `./world-read` entry.
|
|
13
|
+
export { componentId, componentSchema } from './component';
|
|
14
|
+
export { componentDefinition } from './component-schema';
|
|
13
15
|
|
|
14
16
|
import type { Result } from '@forgeax/engine-types';
|
|
15
17
|
import type { Component } from './component';
|