@flighthq/scene2d-wgpu 0.3.1-next.975.01aea94 → 0.4.0-edge.1908.751021c

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.
@@ -1,4 +1,4 @@
1
- import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu/contract';
1
+ import { getWgpuRenderStateRuntime, setWgpuRenderPassScissorRect } from '@flighthq/render-wgpu/contract';
2
2
  import { flushWgpuQuadBatchWriter } from './wgpuQuadBatchWriter';
3
3
  export function popWgpuClipRectangle(state) {
4
4
  const runtime = getWgpuRenderStateRuntime(state);
@@ -12,14 +12,14 @@ export function popWgpuClipRectangle(state) {
12
12
  return;
13
13
  if (previous === null) {
14
14
  const viewport = runtime.renderTargetViewport ?? state.canvas;
15
- pass.setScissorRect(0, 0, viewport.width, viewport.height);
15
+ setWgpuRenderPassScissorRect(state, pass, 0, 0, viewport.width, viewport.height);
16
16
  }
17
17
  else if (previous.width <= 0 || previous.height <= 0) {
18
18
  // Empty intersection stored during push — maintain degenerate scissor until fully popped.
19
- pass.setScissorRect(0, 0, 1, 1);
19
+ setWgpuRenderPassScissorRect(state, pass, 0, 0, 1, 1);
20
20
  }
21
21
  else {
22
- pass.setScissorRect(previous.x, previous.y, previous.width, previous.height);
22
+ setWgpuRenderPassScissorRect(state, pass, previous.x, previous.y, previous.width, previous.height);
23
23
  }
24
24
  }
25
25
  export function pushWgpuClipRectangle(state, rect, transform) {
@@ -34,10 +34,10 @@ export function pushWgpuClipRectangle(state, rect, transform) {
34
34
  if (next.width <= 0 || next.height <= 0) {
35
35
  // Clip rect projects entirely outside the viewport — use a 1×1 degenerate scissor at
36
36
  // the origin so the node is effectively invisible while the rect remains Wgpu-valid.
37
- pass.setScissorRect(0, 0, 1, 1);
37
+ setWgpuRenderPassScissorRect(state, pass, 0, 0, 1, 1);
38
38
  }
39
39
  else {
40
- pass.setScissorRect(next.x, next.y, next.width, next.height);
40
+ setWgpuRenderPassScissorRect(state, pass, next.x, next.y, next.width, next.height);
41
41
  }
42
42
  }
43
43
  function computeWgpuScissorRect(state, rect, transform) {
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuClipRectangle.js","sourceRoot":"","sources":["../src/wgpuClipRectangle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgpuClipRectangle.js","sourceRoot":"","sources":["../src/wgpuClipRectangle.ts"],"names":[],"mappings":"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"}
@@ -48,14 +48,14 @@ export function drawWgpuShapeMeshBatch(state, renderProxy, meshes, buffers, pipe
48
48
  const indexBuffer = ensureShapeMeshIndexBuffer(state, buffers, i, mesh.indices.byteLength);
49
49
  queue.writeBuffer(vertexBuffer, 0, mesh.vertices.buffer, mesh.vertices.byteOffset, mesh.vertices.byteLength);
50
50
  writeShapeMeshIndices(queue, indexBuffer, mesh.indices);
51
- // Premultiplied color (r*a, g*a, b*a, a) for the one / one-minus-src-alpha target blend.
52
- const r = ((mesh.color >> 16) & 0xff) / 255;
53
- const g = ((mesh.color >> 8) & 0xff) / 255;
54
- const b = (mesh.color & 0xff) / 255;
55
- uniformData[12] = r * a;
56
- uniformData[13] = g * a;
57
- uniformData[14] = b * a;
58
- uniformData[15] = a;
51
+ const r = ((mesh.color >>> 24) & 0xff) / 255;
52
+ const g = ((mesh.color >>> 16) & 0xff) / 255;
53
+ const b = ((mesh.color >>> 8) & 0xff) / 255;
54
+ const ca = ((mesh.color & 0xff) / 255) * a;
55
+ uniformData[12] = r * ca;
56
+ uniformData[13] = g * ca;
57
+ uniformData[14] = b * ca;
58
+ uniformData[15] = ca;
59
59
  queue.writeBuffer(uniformBuffers[i], 0, uniformData.buffer, uniformData.byteOffset, uniformData.byteLength);
60
60
  pass.setBindGroup(0, bindGroups[i]);
61
61
  pass.setVertexBuffer(0, vertexBuffer);
@@ -1 +1 @@
1
- {"version":3,"file":"wgpuShapeMesh.js","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wgpuShapeMesh.js","sourceRoot":"","sources":["../src/wgpuShapeMesh.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/scene2d-wgpu",
3
- "version": "0.3.1-next.975.01aea94",
3
+ "version": "0.4.0-edge.1908.751021c",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,24 +38,24 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/color": "0.3.1-next.975.01aea94",
42
- "@flighthq/scene2d": "0.3.1-next.975.01aea94",
43
- "@flighthq/scene2d-canvas": "0.3.1-next.975.01aea94",
44
- "@flighthq/geometry": "0.3.1-next.975.01aea94",
45
- "@flighthq/image": "0.3.1-next.975.01aea94",
46
- "@flighthq/log": "0.3.1-next.975.01aea94",
47
- "@flighthq/node": "0.3.1-next.975.01aea94",
48
- "@flighthq/path": "0.3.1-next.975.01aea94",
49
- "@flighthq/registry": "0.3.1-next.975.01aea94",
50
- "@flighthq/render": "0.3.1-next.975.01aea94",
51
- "@flighthq/render-wgpu": "0.3.1-next.975.01aea94",
52
- "@flighthq/shape": "0.3.1-next.975.01aea94",
53
- "@flighthq/text": "0.3.1-next.975.01aea94",
54
- "@flighthq/textinput": "0.3.1-next.975.01aea94",
55
- "@flighthq/textlayout": "0.3.1-next.975.01aea94",
56
- "@flighthq/texture": "0.3.1-next.975.01aea94",
57
- "@flighthq/types": "0.3.1-next.975.01aea94",
58
- "@flighthq/velocity": "0.3.1-next.975.01aea94"
41
+ "@flighthq/color": "0.4.0-edge.1908.751021c",
42
+ "@flighthq/scene2d": "0.4.0-edge.1908.751021c",
43
+ "@flighthq/scene2d-canvas": "0.4.0-edge.1908.751021c",
44
+ "@flighthq/geometry": "0.4.0-edge.1908.751021c",
45
+ "@flighthq/image": "0.4.0-edge.1908.751021c",
46
+ "@flighthq/log": "0.4.0-edge.1908.751021c",
47
+ "@flighthq/node": "0.4.0-edge.1908.751021c",
48
+ "@flighthq/path": "0.4.0-edge.1908.751021c",
49
+ "@flighthq/registry": "0.4.0-edge.1908.751021c",
50
+ "@flighthq/render": "0.4.0-edge.1908.751021c",
51
+ "@flighthq/render-wgpu": "0.4.0-edge.1908.751021c",
52
+ "@flighthq/shape": "0.4.0-edge.1908.751021c",
53
+ "@flighthq/text": "0.4.0-edge.1908.751021c",
54
+ "@flighthq/textinput": "0.4.0-edge.1908.751021c",
55
+ "@flighthq/textlayout": "0.4.0-edge.1908.751021c",
56
+ "@flighthq/texture": "0.4.0-edge.1908.751021c",
57
+ "@flighthq/types": "0.4.0-edge.1908.751021c",
58
+ "@flighthq/velocity": "0.4.0-edge.1908.751021c"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "@webgpu/types": "^0.1.70"
@@ -20,116 +20,95 @@ import type {
20
20
  } from '@flighthq/types/contract';
21
21
  import { EntityRuntimeKey, RegistryEntryState } from '@flighthq/types/contract';
22
22
 
23
- import { scopeModuleMocks } from './moduleMockTestHelper';
24
- import type * as WgpuCacheModule from './wgpuCache';
25
23
  import type * as WgpuNode2DModule from './wgpuNode2D';
26
24
  import type * as WgpuQuadBatchWriterModule from './wgpuQuadBatchWriter';
27
25
 
28
26
  // The GPU render-target lifecycle (@flighthq/render-wgpu) and the two local collaborators
29
- // ./wgpuQuadBatchWriter and ./wgpuNode2D are stubbed so cache orchestration can be unit-tested
30
- // without a real GPU pipeline: createWgpuRenderTarget returns a plain descriptor, and the composite,
31
- // batch-flush, and subtree-render calls become spies for the call and ordering assertions below.
32
- // The mocks are scoped to this file's dynamic import of ./wgpuCache and unmocked in afterAll, so
33
- // under a shared (isolate:false) worker they never leak into the real render-wgpu / scene2d-
34
- // wgpu consumers. The mocked functions are read back from the same dynamic imports so the handles
35
- // the assertions observe are the exact vi.fn instances the cache module calls.
36
- let createWgpuCacheState: typeof WgpuCacheModule.createWgpuCacheState;
37
- let defaultWgpuRenderCacheRenderer: typeof WgpuCacheModule.defaultWgpuRenderCacheRenderer;
38
- let enableWgpuRenderCache: typeof WgpuCacheModule.enableWgpuRenderCache;
39
- let ensureWgpuRenderCacheTarget: typeof WgpuCacheModule.ensureWgpuRenderCacheTarget;
40
- let getWgpuRenderCacheScreenState: typeof WgpuCacheModule.getWgpuRenderCacheScreenState;
41
- let getWgpuRenderCacheTarget: typeof WgpuCacheModule.getWgpuRenderCacheTarget;
42
- let refreshWgpuRenderCache: typeof WgpuCacheModule.refreshWgpuRenderCache;
43
- let releaseWgpuRenderCache: typeof WgpuCacheModule.releaseWgpuRenderCache;
44
- let createWgpuRenderStateRuntime: typeof WgpuRenderWgpuModule.createWgpuRenderStateRuntime;
45
- let getWgpuRenderStateRuntime: typeof WgpuRenderWgpuModule.getWgpuRenderStateRuntime;
46
- let getWgpuMaterialRenderer: typeof WgpuRenderWgpuModule.getWgpuMaterialRenderer;
47
- let registerWgpuMaterialRenderer: typeof WgpuRenderWgpuModule.registerWgpuMaterialRenderer;
48
- let resolveWgpuApplyBlendMode: typeof WgpuRenderWgpuModule.resolveWgpuApplyBlendMode;
49
- let beginWgpuFrame: typeof WgpuRenderWgpuModule.beginWgpuFrame;
50
- let destroyWgpuRenderTarget: typeof WgpuRenderWgpuModule.destroyWgpuRenderTarget;
51
- let drawWgpuRenderTargetResult: typeof WgpuRenderWgpuModule.drawWgpuRenderTargetResult;
52
- let submitWgpuRenderPass: typeof WgpuRenderWgpuModule.submitWgpuRenderPass;
53
- let renderWgpuScene2D: typeof WgpuNode2DModule.renderWgpuScene2D;
54
- let flushWgpuQuadBatchWriter: typeof WgpuQuadBatchWriterModule.flushWgpuQuadBatchWriter;
55
-
56
- // EntityRuntimeKey (Symbol.for) and RenderCacheKind (a string) are identity-stable across the
57
- // registry reset scopeModuleMocks performs, and cache adapters are stored on the state, not module-
58
- // level, so the statically-imported @flighthq/render still interoperates with the re-evaluated
59
- // subject even though the subject re-imports @flighthq/render under the reset.
60
- scopeModuleMocks(['./wgpuQuadBatchWriter', '@flighthq/render-wgpu', './wgpuNode2D']);
61
-
62
- beforeAll(async () => {
63
- vi.doMock('./wgpuQuadBatchWriter', async (importOriginal) => {
64
- const actual = await importOriginal<typeof WgpuQuadBatchWriterModule>();
65
- return { ...actual, flushWgpuQuadBatchWriter: vi.fn() };
66
- });
67
- vi.doMock('@flighthq/render-wgpu/contract', async (importOriginal) => {
68
- const actual = await importOriginal<typeof WgpuRenderWgpuModule>();
69
- return {
70
- ...actual,
71
- beginWgpuFrame: vi.fn((state: WgpuRenderState) => {
72
- getWgpuRenderStateRuntime(state).commandEncoder = {} as GPUCommandEncoder;
73
- }),
74
- beginWgpuRenderPass: vi.fn(),
75
- setWgpuRenderTransform2D: vi.fn(),
76
- createWgpuRenderTarget: vi.fn(
77
- (_state: unknown, width: number, height: number): WgpuRenderTarget => ({
78
- bindGroup: {} as GPUBindGroup,
79
- colorSpace: 'srgb',
80
- depthStencilTexture: {} as GPUTexture,
81
- depthStencilView: {} as GPUTextureView,
82
- texture: {} as GPUTexture,
83
- view: {} as GPUTextureView,
84
- format: 'bgra8unorm',
85
- clearColors: [],
86
- clearDepth: 1,
87
- width,
88
- height,
89
- }),
90
- ),
91
- destroyWgpuRenderTarget: vi.fn(),
92
- drawWgpuRenderTargetResult: vi.fn(),
93
- endWgpuRenderPass: vi.fn(),
94
- resizeWgpuRenderTarget: vi.fn((_state: unknown, target: WgpuRenderTarget, width: number, height: number) => {
95
- target.width = width;
96
- target.height = height;
97
- }),
98
- submitWgpuRenderPass: vi.fn((state: WgpuRenderState) => {
99
- getWgpuRenderStateRuntime(state).commandEncoder = null;
27
+ // ./wgpuQuadBatchWriter and ./wgpuNode2D are stubbed so cache orchestration can be unit-tested without a
28
+ // real GPU pipeline: createWgpuRenderTarget returns a plain descriptor, and the composite, batch-flush
29
+ // and subtree-render calls become spies for the call and ordering assertions below.
30
+ //
31
+ // ★ HOISTED MOCKS, NOT HAND-ROLLED ONES. This file is in REGISTRY_ISOLATED_TESTS, so it already runs with
32
+ // its own module registry — the hermeticity the `scopeModuleMocks` + `vi.doMock` + dynamic-import dance
33
+ // bought by hand comes from the platform here, with no hook, and these stubs cannot reach the real
34
+ // render-wgpu / scene2d-wgpu consumers. The dance was not merely redundant: it rebuilt the subject's
35
+ // entire transitive module graph inside a FIXED `beforeAll` deadline — three modules plus everything they
36
+ // import — which is unbounded work against a fixed clock and the shape of flake tiering exists to remove.
37
+ //
38
+ // ★ THE FRAME STUBS REACH THROUGH `actual`, NOT THROUGH AN OUTER BINDING. A hoisted factory runs during
39
+ // this file's own import phase, so closing over a module-scope `const` declared below it would be a
40
+ // temporal-dead-zone trap that only fires once the import order changes. `actual` is in hand already.
41
+ vi.mock('./wgpuQuadBatchWriter', async (importOriginal) => {
42
+ const actual = await importOriginal<typeof WgpuQuadBatchWriterModule>();
43
+ return { ...actual, flushWgpuQuadBatchWriter: vi.fn() };
44
+ });
45
+ vi.mock('@flighthq/render-wgpu/contract', async (importOriginal) => {
46
+ const actual = await importOriginal<typeof WgpuRenderWgpuModule>();
47
+ return {
48
+ ...actual,
49
+ beginWgpuFrame: vi.fn((state: WgpuRenderState) => {
50
+ actual.getWgpuRenderStateRuntime(state).commandEncoder = {} as GPUCommandEncoder;
51
+ }),
52
+ beginWgpuRenderPass: vi.fn(),
53
+ setWgpuRenderTransform2D: vi.fn(),
54
+ createWgpuRenderTarget: vi.fn(
55
+ (_state: unknown, width: number, height: number): WgpuRenderTarget => ({
56
+ bindGroup: {} as GPUBindGroup,
57
+ colorSpace: 'srgb',
58
+ depthStencilTexture: {} as GPUTexture,
59
+ depthStencilView: {} as GPUTextureView,
60
+ texture: {} as GPUTexture,
61
+ view: {} as GPUTextureView,
62
+ format: 'bgra8unorm',
63
+ sampleCount: 1,
64
+ clearColors: [],
65
+ clearDepth: 1,
66
+ width,
67
+ height,
100
68
  }),
101
- };
102
- });
103
- vi.doMock('./wgpuNode2D', async (importOriginal) => {
104
- const actual = await importOriginal<typeof WgpuNode2DModule>();
105
- return { ...actual, renderWgpuScene2D: vi.fn() };
106
- });
107
-
108
- ({
109
- beginWgpuFrame,
110
- createWgpuRenderStateRuntime,
111
- destroyWgpuRenderTarget,
112
- drawWgpuRenderTargetResult,
113
- getWgpuMaterialRenderer,
114
- getWgpuRenderStateRuntime,
115
- registerWgpuMaterialRenderer,
116
- resolveWgpuApplyBlendMode,
117
- submitWgpuRenderPass,
118
- } = await import('@flighthq/render-wgpu/contract'));
119
- ({ flushWgpuQuadBatchWriter } = await import('./wgpuQuadBatchWriter'));
120
- ({ renderWgpuScene2D } = await import('./wgpuNode2D'));
121
- ({
122
- createWgpuCacheState,
123
- defaultWgpuRenderCacheRenderer,
124
- enableWgpuRenderCache,
125
- ensureWgpuRenderCacheTarget,
126
- getWgpuRenderCacheScreenState,
127
- getWgpuRenderCacheTarget,
128
- refreshWgpuRenderCache,
129
- releaseWgpuRenderCache,
130
- } = await import('./wgpuCache'));
69
+ ),
70
+ destroyWgpuRenderTarget: vi.fn(),
71
+ drawWgpuRenderTargetResult: vi.fn(),
72
+ endWgpuRenderPass: vi.fn(),
73
+ resizeWgpuRenderTarget: vi.fn((_state: unknown, target: WgpuRenderTarget, width: number, height: number) => {
74
+ target.width = width;
75
+ target.height = height;
76
+ }),
77
+ submitWgpuRenderPass: vi.fn((state: WgpuRenderState) => {
78
+ actual.getWgpuRenderStateRuntime(state).commandEncoder = null;
79
+ }),
80
+ };
81
+ });
82
+ vi.mock('./wgpuNode2D', async (importOriginal) => {
83
+ const actual = await importOriginal<typeof WgpuNode2DModule>();
84
+ return { ...actual, renderWgpuScene2D: vi.fn() };
131
85
  });
132
86
 
87
+ import {
88
+ beginWgpuFrame,
89
+ createWgpuRenderStateRuntime,
90
+ destroyWgpuRenderTarget,
91
+ drawWgpuRenderTargetResult,
92
+ getWgpuMaterialRenderer,
93
+ getWgpuRenderStateRuntime,
94
+ registerWgpuMaterialRenderer,
95
+ resolveWgpuApplyBlendMode,
96
+ submitWgpuRenderPass,
97
+ } from '@flighthq/render-wgpu/contract';
98
+
99
+ import {
100
+ createWgpuCacheState,
101
+ defaultWgpuRenderCacheRenderer,
102
+ enableWgpuRenderCache,
103
+ ensureWgpuRenderCacheTarget,
104
+ getWgpuRenderCacheScreenState,
105
+ getWgpuRenderCacheTarget,
106
+ refreshWgpuRenderCache,
107
+ releaseWgpuRenderCache,
108
+ } from './wgpuCache';
109
+ import { renderWgpuScene2D } from './wgpuNode2D';
110
+ import { flushWgpuQuadBatchWriter } from './wgpuQuadBatchWriter';
111
+
133
112
  function fakeScreen(options = {}): WgpuRenderState {
134
113
  const state = createRenderState(options) as unknown as WgpuRenderState;
135
114
  (state as any).device = {} as GPUDevice;
@@ -12,24 +12,22 @@ import {
12
12
  import type { RenderProxy2D } from '@flighthq/types/contract';
13
13
  import { BatchFormat, RenderRegistry } from '@flighthq/types/contract';
14
14
 
15
- import { scopeModuleMocks } from './moduleMockTestHelper';
16
- import type * as WgpuMeshShapeModule from './wgpuMeshShapeRenderer';
15
+ // ★ A HOISTED MOCK, NOT A HAND-ROLLED ONE. This file is in REGISTRY_ISOLATED_TESTS, so it already runs
16
+ // with its own module registry — the hermeticity the `scopeModuleMocks` + `vi.doMock` + dynamic-import
17
+ // dance bought by hand comes from the platform here, with no hook. The dance was not merely redundant:
18
+ // it rebuilt the subject's entire transitive module graph inside a FIXED `beforeAll` deadline, which is
19
+ // unbounded work against a fixed clock and the shape of flake that tiering exists to remove.
20
+ vi.mock('@flighthq/node/contract', async (importOriginal) => ({
21
+ ...(await importOriginal<typeof FlightNodeModule>()),
22
+ getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
23
+ getNodeLocalContentRevision: (source: { data?: { version?: number } } | null | undefined) =>
24
+ source?.data?.version ?? 0,
25
+ }));
26
+
27
+ import { defaultWgpuMeshShapeRenderer, drawWgpuMeshShape } from './wgpuMeshShapeRenderer';
17
28
  import { registerWgpuShapeRasterizer } from './wgpuShapeRasterizer';
18
29
 
19
- let defaultWgpuMeshShapeRenderer: typeof WgpuMeshShapeModule.defaultWgpuMeshShapeRenderer;
20
- let drawWgpuMeshShape: typeof WgpuMeshShapeModule.drawWgpuMeshShape;
21
-
22
- scopeModuleMocks(['@flighthq/node']);
23
-
24
- beforeAll(async () => {
25
- vi.doMock('@flighthq/node/contract', async (importOriginal) => ({
26
- ...(await importOriginal<typeof FlightNodeModule>()),
27
- getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
28
- getNodeLocalContentRevision: (source: any) => source?.data?.version ?? 0,
29
- }));
30
- ({ defaultWgpuMeshShapeRenderer, drawWgpuMeshShape } = await import('./wgpuMeshShapeRenderer'));
31
- installWgpuMock();
32
- });
30
+ beforeAll(() => installWgpuMock());
33
31
 
34
32
  function makeShapeData() {
35
33
  return {
@@ -80,7 +78,7 @@ function makeMeshPassSpy(): GPURenderPassEncoder {
80
78
 
81
79
  function gradientShape() {
82
80
  const shape = createShape();
83
- appendShapeBeginGradientFill(shape, 'linear', [0xff0000, 0x0000ff], [1, 1], [0, 255], null);
81
+ appendShapeBeginGradientFill(shape, 'linear', [0xff0000ff, 0x0000ffff], [1, 1], [0, 255], null);
84
82
  appendShapeRectangle(shape, 8, 8, 32, 24);
85
83
  appendShapeEndFill(shape);
86
84
  return shape;
@@ -133,7 +131,7 @@ describe('drawWgpuMeshShape', () => {
133
131
  const pass = makeMeshPassSpy();
134
132
  getWgpuRenderStateRuntime(state).renderPass = pass;
135
133
  const shape = createShape();
136
- appendShapeBeginFill(shape, 0x00cc00);
134
+ appendShapeBeginFill(shape, 0x00cc00ff);
137
135
  appendShapeRectangle(shape, 8, 8, 32, 24);
138
136
  appendShapeEndFill(shape);
139
137
 
@@ -154,7 +152,7 @@ describe('drawWgpuMeshShape', () => {
154
152
  const state = await createWgpuRenderStateForTest();
155
153
  renderWgpuBackground(state);
156
154
  const shape = createShape();
157
- appendShapeBeginFill(shape, 0x00cc00);
155
+ appendShapeBeginFill(shape, 0x00cc00ff);
158
156
  appendShapeRectangle(shape, 8, 8, 32, 24);
159
157
  appendShapeEndFill(shape);
160
158
 
@@ -6,25 +6,23 @@ import { appendShapeBeginFill, appendShapeEndFill, appendShapeRectangle, createS
6
6
  import type { RenderProxy2D } from '@flighthq/types/contract';
7
7
  import { BatchFormat, RenderRegistry } from '@flighthq/types/contract';
8
8
 
9
- import { scopeModuleMocks } from './moduleMockTestHelper';
10
- import type * as WgpuRasterShapeModule from './wgpuRasterShapeRenderer';
9
+ // ★ A HOISTED MOCK, NOT A HAND-ROLLED ONE. This file is in REGISTRY_ISOLATED_TESTS, so it already runs
10
+ // with its own module registry — the hermeticity the `scopeModuleMocks` + `vi.doMock` + dynamic-import
11
+ // dance bought by hand comes from the platform here, with no hook. The dance was not merely redundant:
12
+ // it rebuilt the subject's entire transitive module graph inside a FIXED `beforeAll` deadline, which is
13
+ // unbounded work against a fixed clock and the shape of flake that tiering exists to remove.
14
+ vi.mock('@flighthq/node/contract', async (importOriginal) => ({
15
+ ...(await importOriginal<typeof FlightNodeModule>()),
16
+ getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
17
+ getNodeLocalContentRevision: (source: { data?: { version?: number } } | null | undefined) =>
18
+ source?.data?.version ?? 0,
19
+ }));
20
+
21
+ import { defaultWgpuRasterShapeRenderer, drawWgpuRasterShape } from './wgpuRasterShapeRenderer';
11
22
  import { registerWgpuShapeRasterizer } from './wgpuShapeRasterizer';
12
23
  import { registerWgpuStandardMaterial } from './wgpuStandardMaterial';
13
24
 
14
- let defaultWgpuRasterShapeRenderer: typeof WgpuRasterShapeModule.defaultWgpuRasterShapeRenderer;
15
- let drawWgpuRasterShape: typeof WgpuRasterShapeModule.drawWgpuRasterShape;
16
-
17
- scopeModuleMocks(['@flighthq/node']);
18
-
19
- beforeAll(async () => {
20
- vi.doMock('@flighthq/node/contract', async (importOriginal) => ({
21
- ...(await importOriginal<typeof FlightNodeModule>()),
22
- getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
23
- getNodeLocalContentRevision: (source: any) => source?.data?.version ?? 0,
24
- }));
25
- ({ defaultWgpuRasterShapeRenderer, drawWgpuRasterShape } = await import('./wgpuRasterShapeRenderer'));
26
- installWgpuMock();
27
- });
25
+ beforeAll(() => installWgpuMock());
28
26
 
29
27
  function makeShapeData() {
30
28
  return {
@@ -76,7 +74,7 @@ function makeMeshPassSpy(): GPURenderPassEncoder {
76
74
  // A plain solid rectangle — precisely the shape the mesh strategy would tessellate.
77
75
  function solidShape() {
78
76
  const shape = createShape();
79
- appendShapeBeginFill(shape, 0x00cc00);
77
+ appendShapeBeginFill(shape, 0x00cc00ff);
80
78
  appendShapeRectangle(shape, 8, 8, 32, 24);
81
79
  appendShapeEndFill(shape);
82
80
  return shape;
@@ -60,7 +60,7 @@ describe('drawWgpuScale9Shape', () => {
60
60
  const state = await createWgpuRenderStateForTest();
61
61
  renderWgpuBackground(state);
62
62
  const shape = createScale9Shape(grid);
63
- appendShapeBeginFill(shape, 0xff0000);
63
+ appendShapeBeginFill(shape, 0xff0000ff);
64
64
  appendShapeRectangle(shape, 0, 0, 100, 100);
65
65
  prepareScene2DRender(state, shape);
66
66
  const renderProxy = getOrCreateRenderProxy2D(state, shape);
@@ -17,33 +17,29 @@ import type { RenderProxy2D } from '@flighthq/types/contract';
17
17
  import { BatchFormat, PathCommand } from '@flighthq/types/contract';
18
18
 
19
19
  import { enableWgpuStrokePathTessellation } from './enableWgpuStrokePathTessellation';
20
- import { scopeModuleMocks } from './moduleMockTestHelper';
21
- import type * as WgpuShapeModule from './wgpuShape';
20
+ // @flighthq/node's bounds/revision queries expect a real BoundsNode; these tests drive drawWgpuShape with
21
+ // lightweight fake proxies, so the two queries are stubbed.
22
+ //
23
+ // ★ A HOISTED MOCK, NOT A HAND-ROLLED ONE. This file is in REGISTRY_ISOLATED_TESTS, so it already runs
24
+ // with its own module registry — the hermeticity the `scopeModuleMocks` + `vi.doMock` + dynamic-import
25
+ // dance bought by hand comes from the platform here, with no hook, and the stub cannot reach the many
26
+ // real consumers of these functions (node, interaction, shape, text). The dance was not merely
27
+ // redundant: it rebuilt the subject's entire transitive module graph inside a FIXED `beforeAll`
28
+ // deadline, which is unbounded work against a fixed clock and the shape of flake tiering exists to remove.
29
+ vi.mock('@flighthq/node/contract', async (importOriginal) => ({
30
+ ...(await importOriginal<typeof FlightNodeModule>()),
31
+ getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
32
+ getNodeLocalContentRevision: (source: { data?: { version?: number } } | null | undefined) =>
33
+ source?.data?.version ?? 0,
34
+ }));
35
+
36
+ import { defaultWgpuMorphShapeRenderer, defaultWgpuShapeRenderer, drawWgpuShape } from './wgpuShape';
22
37
  import { registerWgpuShapeRasterizer } from './wgpuShapeRasterizer';
23
38
  import { registerWgpuStandardMaterial } from './wgpuStandardMaterial';
24
39
 
25
40
  const noopRasterizer = (): void => {};
26
41
 
27
- // @flighthq/node's bounds/revision queries expect a real BoundsNode; these tests drive drawWgpuShape
28
- // with lightweight fake proxies, so the two queries are stubbed. scopeModuleMocks scopes the stub to
29
- // this file (registry reset before the mock applies, unmock + reset after), so under a shared
30
- // (isolate:false) worker it never leaks into the many real consumers of these functions (node,
31
- // interaction, shape, text) — and a sibling that pre-evaluated ./wgpuShape still picks up the stub.
32
- let defaultWgpuMorphShapeRenderer: typeof WgpuShapeModule.defaultWgpuMorphShapeRenderer;
33
- let defaultWgpuShapeRenderer: typeof WgpuShapeModule.defaultWgpuShapeRenderer;
34
- let drawWgpuShape: typeof WgpuShapeModule.drawWgpuShape;
35
-
36
- scopeModuleMocks(['@flighthq/node']);
37
-
38
- beforeAll(async () => {
39
- vi.doMock('@flighthq/node/contract', async (importOriginal) => ({
40
- ...(await importOriginal<typeof FlightNodeModule>()),
41
- getNodeLocalBoundsRectangle: () => ({ x: 0, y: 0, width: 64, height: 48 }),
42
- getNodeLocalContentRevision: (source: any) => source?.data?.version ?? 0,
43
- }));
44
- ({ defaultWgpuMorphShapeRenderer, defaultWgpuShapeRenderer, drawWgpuShape } = await import('./wgpuShape'));
45
- installWgpuMock();
46
- });
42
+ beforeAll(() => installWgpuMock());
47
43
 
48
44
  // Mirrors createWgpuShapeData: the rasterization surface is absent until a shape actually needs one,
49
45
  // so a scene drawn entirely through the mesh path carries no canvases.
@@ -116,10 +112,10 @@ describe('drawWgpuShape', () => {
116
112
  renderWgpuBackground(state);
117
113
  getWgpuRenderStateRuntime(state).renderPass = makeMeshPassSpy();
118
114
  const shape = createShape();
119
- appendShapeBeginFill(shape, 0x00cc00);
115
+ appendShapeBeginFill(shape, 0x00cc00ff);
120
116
  appendShapeRectangle(shape, 8, 8, 32, 24);
121
117
  appendShapeEndFill(shape);
122
- appendShapeLineStyle(shape, 4, 0xff0000);
118
+ appendShapeLineStyle(shape, 4, 0xff0000ff);
123
119
  appendShapeMoveTo(shape, 8, 4);
124
120
  appendShapeLineTo(shape, 40, 4);
125
121
  const rendererData = defaultWgpuShapeRenderer.createData!(state, shape)!;
@@ -141,7 +137,7 @@ describe('drawWgpuShape', () => {
141
137
  renderWgpuBackground(state);
142
138
  getWgpuRenderStateRuntime(state).renderPass = makeMeshPassSpy();
143
139
  const shape = createShape();
144
- appendShapeLineStyle(shape, 8, 0xff0000);
140
+ appendShapeLineStyle(shape, 8, 0xff0000ff);
145
141
  appendShapeRectangle(shape, 8, 8, 32, 24);
146
142
  const rendererData = defaultWgpuShapeRenderer.createData!(state, shape)!;
147
143
 
@@ -163,7 +159,7 @@ describe('drawWgpuShape', () => {
163
159
  const pass = makeMeshPassSpy();
164
160
  getWgpuRenderStateRuntime(state).renderPass = pass;
165
161
  const shape = createShape();
166
- appendShapeLineStyle(shape, 8, 0xff0000);
162
+ appendShapeLineStyle(shape, 8, 0xff0000ff);
167
163
  appendShapeRectangle(shape, 8, 8, 32, 24);
168
164
  const rendererData = defaultWgpuShapeRenderer.createData!(state, shape)!;
169
165
 
@@ -183,7 +179,7 @@ describe('drawWgpuShape', () => {
183
179
  const pass = makeMeshPassSpy();
184
180
  getWgpuRenderStateRuntime(state).renderPass = pass;
185
181
  const shape = createShape();
186
- appendShapeLineStyle(shape, 8, 0xff0000);
182
+ appendShapeLineStyle(shape, 8, 0xff0000ff);
187
183
  appendShapePath(
188
184
  shape,
189
185
  [PathCommand.MOVE_TO, PathCommand.LINE_TO, PathCommand.LINE_TO, PathCommand.LINE_TO, PathCommand.CLOSE],
@@ -21,7 +21,7 @@ beforeAll(() => {
21
21
  const TRIANGLE: WgpuShapeMesh = {
22
22
  vertices: new Float32Array([0, 0, 10, 0, 0, 10]),
23
23
  indices: new Uint16Array([0, 1, 2]),
24
- color: 0xff8040,
24
+ color: 0xff8040ff,
25
25
  alpha: 1,
26
26
  };
27
27
 
@@ -111,7 +111,7 @@ describe('drawWgpuShapeMeshBatch', () => {
111
111
  drawWgpuShapeMeshBatch(
112
112
  state,
113
113
  makeProxy({ alpha: 0.5 }),
114
- [{ ...TRIANGLE, color: 0xffffff }],
114
+ [{ ...TRIANGLE, color: 0xffffffff }],
115
115
  buffers,
116
116
  pipelineEntry,
117
117
  uniformBuffers,
@@ -146,7 +146,7 @@ describe('drawWgpuShapeMeshes', () => {
146
146
  const state = await makeState();
147
147
  const buffers = makeBuffers();
148
148
 
149
- drawWgpuShapeMeshes(state, makeProxy(), [TRIANGLE, { ...TRIANGLE, color: 0x0080ff }], buffers);
149
+ drawWgpuShapeMeshes(state, makeProxy(), [TRIANGLE, { ...TRIANGLE, color: 0x0080ffff }], buffers);
150
150
 
151
151
  expect(buffers.vertexBuffers).toHaveLength(2);
152
152
  expect(buffers.indexBuffers).toHaveLength(2);
@@ -219,7 +219,7 @@ describe('drawWgpuShapeMeshes', () => {
219
219
  }
220
220
  }) as unknown as GPUQueue['writeBuffer'];
221
221
 
222
- drawWgpuShapeMeshes(state, makeProxy({ alpha: 0.5 }), [{ ...TRIANGLE, color: 0xffffff }], buffers);
222
+ drawWgpuShapeMeshes(state, makeProxy({ alpha: 0.5 }), [{ ...TRIANGLE, color: 0xffffffff }], buffers);
223
223
 
224
224
  const uniformData = writes.get(buffers.uniformBuffers[0]);
225
225
  expect(uniformData).toBeDefined();
@@ -288,7 +288,7 @@ describe('drawWgpuShapeMeshes', () => {
288
288
  drawWgpuShapeMeshes(
289
289
  state,
290
290
  makeProxy({ alpha: 0.5, colorScaleBias: ct(0.25, 0.5, 0.75, 0.8, 0.1, 0.2, 0.3, 0.4) }),
291
- [{ ...TRIANGLE, color: 0xffffff }],
291
+ [{ ...TRIANGLE, color: 0xffffffff }],
292
292
  buffers,
293
293
  );
294
294
 
@@ -6,41 +6,37 @@ import { createTextLabel } from '@flighthq/text/contract';
6
6
  import type { RenderProxy2D } from '@flighthq/types/contract';
7
7
  import { BatchFormat } from '@flighthq/types/contract';
8
8
 
9
- import { scopeModuleMocks } from './moduleMockTestHelper';
10
- import { registerWgpuStandardMaterial } from './wgpuStandardMaterial';
11
- import type * as WgpuTextLabelModule from './wgpuTextLabel';
12
-
13
9
  // @flighthq/textlayout.computeTextLayout is stubbed to emit one deterministic glyph group.
14
- // scopeModuleMocks scopes the stub to this file (registry reset before the mock applies, unmock +
15
- // reset after), so under a shared (isolate:false) worker it never leaks into the real text-layout
16
- // consumers (text package) — and a sibling that pre-evaluated ./wgpuTextLabel still picks up the stub.
17
- let defaultWgpuTextLabelRenderer: typeof WgpuTextLabelModule.defaultWgpuTextLabelRenderer;
18
- let drawWgpuTextLabel: typeof WgpuTextLabelModule.drawWgpuTextLabel;
10
+ //
11
+ // ★ A HOISTED MOCK, NOT A HAND-ROLLED ONE. This file is in REGISTRY_ISOLATED_TESTS, so it already runs
12
+ // with its own module registry — the hermeticity the `scopeModuleMocks` + `vi.doMock` + dynamic-import
13
+ // dance bought by hand comes from the platform here, with no hook, and the stub cannot reach the real
14
+ // text-layout consumers. The dance was not merely redundant: it rebuilt the subject's entire transitive
15
+ // module graph inside a FIXED `beforeAll` deadline, which is unbounded work against a fixed clock and
16
+ // the shape of flake tiering exists to remove.
17
+ vi.mock('@flighthq/textlayout/contract', async (importOriginal) => {
18
+ const actual = (await importOriginal()) as Record<string, unknown>;
19
+ return {
20
+ ...actual,
21
+ computeTextLayout: vi.fn((result: { groups: object[] }, params: { formatRanges: Array<{ format: object }> }) => {
22
+ result.groups.push({
23
+ offsetX: 0,
24
+ offsetY: 0,
25
+ width: 50,
26
+ ascent: 12,
27
+ descent: 4,
28
+ format: params.formatRanges[0]?.format ?? {},
29
+ startIndex: 0,
30
+ endIndex: 5,
31
+ });
32
+ }),
33
+ };
34
+ });
19
35
 
20
- scopeModuleMocks(['@flighthq/textlayout']);
36
+ import { registerWgpuStandardMaterial } from './wgpuStandardMaterial';
37
+ import { defaultWgpuTextLabelRenderer, drawWgpuTextLabel } from './wgpuTextLabel';
21
38
 
22
- beforeAll(async () => {
23
- vi.doMock('@flighthq/textlayout/contract', async (importOriginal) => {
24
- const actual = (await importOriginal()) as Record<string, unknown>;
25
- return {
26
- ...actual,
27
- computeTextLayout: vi.fn((result: { groups: object[] }, params: { formatRanges: Array<{ format: object }> }) => {
28
- result.groups.push({
29
- offsetX: 0,
30
- offsetY: 0,
31
- width: 50,
32
- ascent: 12,
33
- descent: 4,
34
- format: params.formatRanges[0]?.format ?? {},
35
- startIndex: 0,
36
- endIndex: 5,
37
- });
38
- }),
39
- };
40
- });
41
- ({ defaultWgpuTextLabelRenderer, drawWgpuTextLabel } = await import('./wgpuTextLabel'));
42
- installWgpuMock();
43
- });
39
+ beforeAll(() => installWgpuMock());
44
40
 
45
41
  function makeTextData() {
46
42
  const canvas = document.createElement('canvas');
@@ -1,15 +0,0 @@
1
- /**
2
- * Makes vi.doMock-based module mocking safe under the shared (isolate:false) worker the root vitest
3
- * config uses. Call once at the top of a test file with every module id the file mocks, then apply
4
- * the mocks and dynamically import the subject inside a beforeAll — both must stay in the test file
5
- * so relative ids resolve against it. (This helper is colocated in the same package src, so the
6
- * doUnmock ids passed here resolve to the same modules the test's doMock ids do.)
7
- *
8
- * It brackets the file with two vi.resetModules() calls. The first is registered here so it runs
9
- * before the file's own beforeAll applies the mocks: it forces a subject a sibling already evaluated
10
- * against the real modules to re-evaluate under the mocks (otherwise the dynamic import returns the
11
- * cached, real-bound copy). The second, after unmocking, drops the mocked instances so a later file
12
- * re-imports the real modules instead of the mock left in the shared registry.
13
- */
14
- export declare function scopeModuleMocks(mockedIds: readonly string[]): void;
15
- //# sourceMappingURL=moduleMockTestHelper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moduleMockTestHelper.d.ts","sourceRoot":"","sources":["../src/moduleMockTestHelper.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAQnE"}
@@ -1,25 +0,0 @@
1
- import { afterAll, beforeAll, vi } from 'vitest';
2
- /**
3
- * Makes vi.doMock-based module mocking safe under the shared (isolate:false) worker the root vitest
4
- * config uses. Call once at the top of a test file with every module id the file mocks, then apply
5
- * the mocks and dynamically import the subject inside a beforeAll — both must stay in the test file
6
- * so relative ids resolve against it. (This helper is colocated in the same package src, so the
7
- * doUnmock ids passed here resolve to the same modules the test's doMock ids do.)
8
- *
9
- * It brackets the file with two vi.resetModules() calls. The first is registered here so it runs
10
- * before the file's own beforeAll applies the mocks: it forces a subject a sibling already evaluated
11
- * against the real modules to re-evaluate under the mocks (otherwise the dynamic import returns the
12
- * cached, real-bound copy). The second, after unmocking, drops the mocked instances so a later file
13
- * re-imports the real modules instead of the mock left in the shared registry.
14
- */
15
- export function scopeModuleMocks(mockedIds) {
16
- beforeAll(() => {
17
- vi.resetModules();
18
- });
19
- afterAll(() => {
20
- for (const id of mockedIds)
21
- vi.doUnmock(id);
22
- vi.resetModules();
23
- });
24
- }
25
- //# sourceMappingURL=moduleMockTestHelper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moduleMockTestHelper.js","sourceRoot":"","sources":["../src/moduleMockTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEjD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA4B;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE;QACZ,KAAK,MAAM,EAAE,IAAI,SAAS;YAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}