@react-three-dom/cypress 0.1.1 → 0.3.0
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/dist/index.cjs +1278 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +227 -17
- package/dist/index.d.ts +227 -17
- package/dist/index.js +1276 -96
- package/dist/index.js.map +1 -1
- package/package.json +12 -9
- package/src/index.d.ts +175 -18
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands.ts","../src/assertions.ts","../src/waiters.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/// <reference types=\"cypress\" />\nimport type { R3FDOM } from './types';\n\n// ---------------------------------------------------------------------------\n// Helper to get the R3F DOM bridge from the current window\n// ---------------------------------------------------------------------------\n\nfunction getR3F(win: Cypress.AUTWindow): R3FDOM {\n const api = (win as Window & { __R3F_DOM__?: R3FDOM }).__R3F_DOM__;\n if (!api) {\n throw new Error(\n 'react-three-dom bridge not found. Is <ThreeDom> mounted in your app?',\n );\n }\n return api;\n}\n\n// ---------------------------------------------------------------------------\n// Custom commands — all prefixed with `r3f` for clarity\n// ---------------------------------------------------------------------------\n\nexport function registerCommands(): void {\n Cypress.Commands.add('r3fClick', (idOrUuid: string) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).click(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fDoubleClick', (idOrUuid: string) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).doubleClick(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fContextMenu', (idOrUuid: string) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).contextMenu(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fHover', (idOrUuid: string) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).hover(idOrUuid);\n });\n });\n\n Cypress.Commands.add(\n 'r3fDrag',\n (idOrUuid: string, delta: { x: number; y: number; z: number }) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).drag(idOrUuid, delta);\n });\n },\n );\n\n Cypress.Commands.add(\n 'r3fWheel',\n (idOrUuid: string, options?: { deltaY?: number; deltaX?: number }) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).wheel(idOrUuid, options);\n });\n },\n );\n\n Cypress.Commands.add('r3fPointerMiss', () => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).pointerMiss();\n });\n });\n\n Cypress.Commands.add('r3fSelect', (idOrUuid: string) => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).select(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fClearSelection', () => {\n cy.window({ log: false }).then((win) => {\n getR3F(win).clearSelection();\n });\n });\n\n Cypress.Commands.add('r3fGetObject', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n return api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid) ?? null;\n });\n });\n\n Cypress.Commands.add('r3fInspect', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).inspect(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fSnapshot', () => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).snapshot();\n });\n });\n\n Cypress.Commands.add('r3fGetCount', () => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getCount();\n });\n });\n}\n","/// <reference types=\"cypress\" />\nimport type { R3FDOM, ObjectMetadata } from './types';\n\n// ---------------------------------------------------------------------------\n// Chai-based custom assertions for 3D scene testing\n// ---------------------------------------------------------------------------\n\nfunction getR3FFromWindow(): R3FDOM {\n const win = (cy as unknown as { state: (key: string) => { document: Document } })\n .state('window') as unknown as Window & { __R3F_DOM__?: R3FDOM };\n const api = win?.__R3F_DOM__;\n if (!api) {\n throw new Error('react-three-dom bridge not found. Is <ThreeDom> mounted?');\n }\n return api;\n}\n\nfunction resolveObject(api: R3FDOM, idOrUuid: string): ObjectMetadata | null {\n return api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid) ?? null;\n}\n\nexport function registerAssertions(): void {\n chai.use((_chai) => {\n const { Assertion } = _chai;\n\n // -------------------------------------------------------------------\n // r3fExist — assert that a 3D object with the given id exists\n // -------------------------------------------------------------------\n Assertion.addMethod('r3fExist', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const meta = resolveObject(api, idOrUuid);\n\n (this as unknown as Chai.Assertion).assert(\n meta !== null,\n `expected 3D object \"${idOrUuid}\" to exist in the scene`,\n `expected 3D object \"${idOrUuid}\" to NOT exist in the scene`,\n 'exists',\n meta === null ? 'not found' : 'found',\n );\n });\n\n // -------------------------------------------------------------------\n // r3fVisible — assert that a 3D object is visible\n // -------------------------------------------------------------------\n Assertion.addMethod('r3fVisible', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const meta = resolveObject(api, idOrUuid);\n\n if (!meta) {\n throw new Error(`3D object \"${idOrUuid}\" not found in the scene`);\n }\n\n (this as unknown as Chai.Assertion).assert(\n meta.visible,\n `expected 3D object \"${idOrUuid}\" to be visible`,\n `expected 3D object \"${idOrUuid}\" to NOT be visible`,\n true,\n meta.visible,\n );\n });\n\n // -------------------------------------------------------------------\n // r3fInFrustum — assert that a 3D object is in the camera frustum\n // -------------------------------------------------------------------\n Assertion.addMethod('r3fInFrustum', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const inspection = api.inspect(idOrUuid);\n\n if (!inspection) {\n throw new Error(`3D object \"${idOrUuid}\" not found in the scene`);\n }\n\n const { bounds } = inspection;\n const isFinite = (v: number[]) => v.every(Number.isFinite);\n const inFrustum = isFinite(bounds.min) && isFinite(bounds.max);\n\n (this as unknown as Chai.Assertion).assert(\n inFrustum,\n `expected 3D object \"${idOrUuid}\" to be in the camera frustum`,\n `expected 3D object \"${idOrUuid}\" to NOT be in the camera frustum`,\n 'in frustum',\n inFrustum ? 'in frustum' : 'out of frustum / invalid bounds',\n );\n });\n\n // -------------------------------------------------------------------\n // r3fPosition — assert object position within tolerance\n // -------------------------------------------------------------------\n Assertion.addMethod(\n 'r3fPosition',\n function (\n this: Chai.AssertionStatic,\n idOrUuid: string,\n expected: [number, number, number],\n tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const meta = resolveObject(api, idOrUuid);\n\n if (!meta) {\n throw new Error(`3D object \"${idOrUuid}\" not found in the scene`);\n }\n\n const [ex, ey, ez] = expected;\n const [ax, ay, az] = meta.position;\n const pass =\n Math.abs(ax - ex) <= tolerance &&\n Math.abs(ay - ey) <= tolerance &&\n Math.abs(az - ez) <= tolerance;\n\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected 3D object \"${idOrUuid}\" to be at [${expected}] (±${tolerance}), but was at [${meta.position}]`,\n `expected 3D object \"${idOrUuid}\" to NOT be at [${expected}] (±${tolerance})`,\n expected,\n meta.position,\n );\n },\n );\n\n // -------------------------------------------------------------------\n // r3fInstanceCount — assert InstancedMesh instance count\n // -------------------------------------------------------------------\n Assertion.addMethod(\n 'r3fInstanceCount',\n function (this: Chai.AssertionStatic, idOrUuid: string, expectedCount: number) {\n const api = getR3FFromWindow();\n const meta = resolveObject(api, idOrUuid);\n\n if (!meta) {\n throw new Error(`3D object \"${idOrUuid}\" not found in the scene`);\n }\n\n const actual = meta.instanceCount ?? 0;\n\n (this as unknown as Chai.Assertion).assert(\n actual === expectedCount,\n `expected 3D object \"${idOrUuid}\" to have instance count ${expectedCount}, but had ${actual}`,\n `expected 3D object \"${idOrUuid}\" to NOT have instance count ${expectedCount}`,\n expectedCount,\n actual,\n );\n },\n );\n\n // -------------------------------------------------------------------\n // r3fBounds — assert world-space bounding box within tolerance\n // -------------------------------------------------------------------\n Assertion.addMethod(\n 'r3fBounds',\n function (\n this: Chai.AssertionStatic,\n idOrUuid: string,\n expected: { min: [number, number, number]; max: [number, number, number] },\n tolerance = 0.1,\n ) {\n const api = getR3FFromWindow();\n const inspection = api.inspect(idOrUuid);\n\n if (!inspection) {\n throw new Error(`3D object \"${idOrUuid}\" not found in the scene`);\n }\n\n const { bounds } = inspection;\n const withinTol = (a: number[], b: number[]) =>\n a.every((v, i) => Math.abs(v - b[i]) <= tolerance);\n const pass = withinTol(bounds.min, expected.min) && withinTol(bounds.max, expected.max);\n\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected 3D object \"${idOrUuid}\" bounds to be min:${JSON.stringify(expected.min)} max:${JSON.stringify(expected.max)} (±${tolerance}), but got min:${JSON.stringify(bounds.min)} max:${JSON.stringify(bounds.max)}`,\n `expected 3D object \"${idOrUuid}\" bounds to NOT match`,\n expected,\n bounds,\n );\n },\n );\n });\n}\n","/// <reference types=\"cypress\" />\nimport type { R3FDOM } from './types';\n\n// ---------------------------------------------------------------------------\n// r3fWaitForSceneReady — wait until the bridge is ready and object count\n// has stabilised across several consecutive polls.\n// ---------------------------------------------------------------------------\n\nexport interface WaitForSceneReadyOptions {\n /** How many consecutive stable polls are required. Default: 3 */\n stableChecks?: number;\n /** Interval between polls in ms. Default: 100 */\n pollIntervalMs?: number;\n /** Overall timeout in ms. Default: 10_000 */\n timeout?: number;\n}\n\nexport function registerWaiters(): void {\n Cypress.Commands.add(\n 'r3fWaitForSceneReady',\n (options: WaitForSceneReadyOptions = {}) => {\n const {\n stableChecks = 3,\n pollIntervalMs = 100,\n timeout = 10_000,\n } = options;\n\n const startTime = Date.now();\n let lastCount = -1;\n let stableRuns = 0;\n\n function poll(): Cypress.Chainable<void> {\n if (Date.now() - startTime > timeout) {\n throw new Error(\n `r3fWaitForSceneReady timed out after ${timeout}ms. Last count: ${lastCount}, stable runs: ${stableRuns}/${stableChecks}`,\n );\n }\n\n return cy.window({ log: false }).then((win) => {\n const api = (win as Window & { __R3F_DOM__?: R3FDOM }).__R3F_DOM__;\n if (!api) {\n // Bridge not yet available, keep polling\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n }\n\n const count = api.getCount();\n\n if (count === lastCount && count > 0) {\n stableRuns++;\n if (stableRuns >= stableChecks) {\n return; // Done — scene is ready\n }\n } else {\n stableRuns = 0;\n }\n\n lastCount = count;\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n },\n );\n\n // -----------------------------------------------------------------------\n // r3fWaitForIdle — wait until no property changes for N polls\n // -----------------------------------------------------------------------\n\n Cypress.Commands.add(\n 'r3fWaitForIdle',\n (options: { idleChecks?: number; pollIntervalMs?: number; timeout?: number } = {}) => {\n const {\n idleChecks = 10,\n pollIntervalMs = 50,\n timeout = 10_000,\n } = options;\n\n const startTime = Date.now();\n let lastJson = '';\n let stableCount = 0;\n\n function poll(): Cypress.Chainable<void> {\n if (Date.now() - startTime > timeout) {\n throw new Error(`r3fWaitForIdle timed out after ${timeout}ms`);\n }\n\n return cy.window({ log: false }).then((win) => {\n const api = (win as Window & { __R3F_DOM__?: R3FDOM }).__R3F_DOM__;\n if (!api) {\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n }\n\n const snap = api.snapshot();\n const json = JSON.stringify(snap.tree);\n\n if (json === lastJson && json !== '') {\n stableCount++;\n if (stableCount >= idleChecks) {\n return; // Done — scene is idle\n }\n } else {\n stableCount = 0;\n }\n\n lastJson = json;\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n },\n );\n}\n","// @react-three-dom/cypress\n// Cypress E2E testing SDK for React Three Fiber apps\n//\n// Usage in cypress/support/e2e.ts:\n// import '@react-three-dom/cypress';\n//\n// This auto-registers all custom commands and Chai assertions.\n\n/// <reference types=\"cypress\" />\n\nimport { registerCommands } from './commands';\nimport { registerAssertions } from './assertions';\nimport { registerWaiters } from './waiters';\n\n// Auto-register on import\nregisterCommands();\nregisterAssertions();\nregisterWaiters();\n\n// Re-export types for programmatic use\nexport type {\n ObjectMetadata,\n ObjectInspection,\n SceneSnapshot,\n SnapshotNode,\n R3FDOM,\n} from './types';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/diffSnapshots.ts","../src/reporter.ts","../src/reporterState.ts","../src/commands.ts","../src/assertions.ts","../src/waiters.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// Pure scene-diff utility (mirrors @react-three-dom/playwright for Cypress parity).\n\nimport type { SceneSnapshot, SnapshotNode } from './types';\n\nexport interface SceneDiffChange {\n uuid: string;\n field: string;\n from: unknown;\n to: unknown;\n}\n\nexport interface SceneDiff {\n added: SnapshotNode[];\n removed: SnapshotNode[];\n changed: SceneDiffChange[];\n}\n\nconst FIELDS_TO_COMPARE: (keyof SnapshotNode)[] = [\n 'name',\n 'type',\n 'testId',\n 'visible',\n 'position',\n 'rotation',\n 'scale',\n];\n\nfunction flattenTree(node: SnapshotNode): Map<string, SnapshotNode> {\n const map = new Map<string, SnapshotNode>();\n function walk(n: SnapshotNode) {\n map.set(n.uuid, n);\n n.children.forEach(walk);\n }\n walk(node);\n return map;\n}\n\nfunction valueEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => valueEqual(v, b[i]));\n }\n return false;\n}\n\nexport function diffSnapshots(before: SceneSnapshot, after: SceneSnapshot): SceneDiff {\n const beforeMap = flattenTree(before.tree);\n const afterMap = flattenTree(after.tree);\n\n const added: SnapshotNode[] = [];\n const removed: SnapshotNode[] = [];\n const changed: SceneDiffChange[] = [];\n\n for (const [, node] of afterMap) {\n if (!beforeMap.has(node.uuid)) added.push(node);\n }\n for (const [, node] of beforeMap) {\n if (!afterMap.has(node.uuid)) removed.push(node);\n }\n\n for (const [uuid, afterNode] of afterMap) {\n const beforeNode = beforeMap.get(uuid);\n if (!beforeNode) continue;\n\n for (const field of FIELDS_TO_COMPARE) {\n const from = (beforeNode as unknown as Record<string, unknown>)[field];\n const to = (afterNode as unknown as Record<string, unknown>)[field];\n if (!valueEqual(from, to)) {\n changed.push({ uuid, field, from, to });\n }\n }\n }\n\n return { added, removed, changed };\n}\n","/**\n * @module reporter\n *\n * Rich diagnostic reporter for Cypress tests. Outputs ANSI-colored status\n * messages to the Node-side terminal (via `cy.task('r3fLog')`) and to the\n * Cypress command log for bridge lifecycle, scene readiness, object lookups,\n * interaction timings, assertion failures, and full bridge diagnostics.\n *\n * Register the Node-side task with {@link registerR3FTasks} in\n * `cypress.config.ts`, then use the browser-side {@link R3FReporter} class.\n */\n\n/// <reference types=\"cypress\" />\nimport type { R3FDOM, BridgeDiagnostics, ObjectMetadata } from './types';\n\n// ---------------------------------------------------------------------------\n// ANSI colors for Node-side terminal output via cy.task()\n// ---------------------------------------------------------------------------\n\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst GREEN = '\\x1b[32m';\nconst RED = '\\x1b[31m';\nconst YELLOW = '\\x1b[33m';\nconst CYAN = '\\x1b[36m';\nconst MAGENTA = '\\x1b[35m';\n\nconst TAG = `${CYAN}[r3f-dom]${RESET}`;\n\nfunction ok(msg: string): string { return `${TAG} ${GREEN}✓${RESET} ${msg}`; }\nfunction fail(msg: string): string { return `${TAG} ${RED}✗${RESET} ${msg}`; }\nfunction warn(msg: string): string { return `${TAG} ${YELLOW}⚠${RESET} ${msg}`; }\nfunction info(msg: string): string { return `${TAG} ${DIM}${msg}${RESET}`; }\nfunction heading(msg: string): string { return `\\n${TAG} ${BOLD}${MAGENTA}${msg}${RESET}`; }\n\n// ---------------------------------------------------------------------------\n// Node-side task registration — call once in cypress.config.ts setupNodeEvents\n// ---------------------------------------------------------------------------\n\n/**\n * Register the `r3fLog` task in your `cypress.config.ts`:\n *\n * ```ts\n * import { registerR3FTasks } from '@react-three-dom/cypress/reporter';\n * export default defineConfig({\n * e2e: {\n * setupNodeEvents(on) {\n * registerR3FTasks(on);\n * },\n * },\n * });\n * ```\n */\nexport function registerR3FTasks(\n on: Cypress.PluginEvents,\n): void {\n on('task', {\n r3fLog(message: string) {\n process.stdout.write(message + '\\n');\n return null;\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Browser-side reporter — logs to both Cypress command log and terminal\n// ---------------------------------------------------------------------------\n\nlet _enabled = true;\n\nfunction termLog(message: string): void {\n if (!_enabled) return;\n cy.task('r3fLog', message, { log: false });\n}\n\nfunction cmdLog(name: string, message: string, props?: Record<string, unknown>): void {\n Cypress.log({\n name,\n message,\n consoleProps: () => props ?? {},\n });\n}\n\nfunction getAPI(win: Cypress.AUTWindow): R3FDOM | null {\n return (win as Window & { __R3F_DOM__?: R3FDOM }).__R3F_DOM__ ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// R3FReporter — Cypress equivalent of Playwright's R3FReporter\n// ---------------------------------------------------------------------------\n\n/**\n * Browser-side reporter for Cypress tests. Logs bridge lifecycle,\n * interaction timings, assertion failures, and diagnostics to both\n * the Cypress command log and the Node-side terminal via `cy.task`.\n */\nexport class R3FReporter {\n constructor(enabled = true) {\n _enabled = enabled;\n }\n\n enable(): void { _enabled = true; }\n disable(): void { _enabled = false; }\n\n // ---- Lifecycle ----\n\n logBridgeWaiting(): void {\n termLog(info('Waiting for bridge (window.__R3F_DOM__)...'));\n cmdLog('r3f', 'Waiting for bridge...');\n }\n\n logBridgeConnected(diag?: BridgeDiagnostics): void {\n if (diag) {\n termLog(ok(`Bridge connected — v${diag.version}, ${diag.objectCount} objects, ${diag.meshCount} meshes`));\n termLog(info(` Canvas: ${diag.canvasWidth}×${diag.canvasHeight} GPU: ${diag.webglRenderer}`));\n termLog(info(` DOM nodes: ${diag.materializedDomNodes}/${diag.maxDomNodes} Dirty queue: ${diag.dirtyQueueSize}`));\n cmdLog('r3f', `Bridge connected v${diag.version} — ${diag.objectCount} objects`, { diagnostics: diag });\n } else {\n termLog(ok('Bridge connected'));\n cmdLog('r3f', 'Bridge connected');\n }\n }\n\n logBridgeError(error: string): void {\n termLog(fail(`Bridge error: ${error}`));\n cmdLog('r3f', `Bridge error: ${error}`);\n }\n\n logSceneReady(objectCount: number): void {\n termLog(ok(`Scene ready — ${objectCount} objects stabilized`));\n cmdLog('r3f', `Scene ready — ${objectCount} objects`);\n }\n\n logObjectFound(idOrUuid: string, type: string, name?: string): void {\n const label = name ? `\"${name}\" (${type})` : type;\n termLog(ok(`Object found: \"${idOrUuid}\" → ${label}`));\n cmdLog('r3f', `Object found: \"${idOrUuid}\" → ${label}`);\n }\n\n logObjectNotFound(\n idOrUuid: string,\n suggestions?: Array<{ testId?: string; name: string; uuid: string }>,\n ): void {\n termLog(fail(`Object not found: \"${idOrUuid}\"`));\n if (suggestions && suggestions.length > 0) {\n termLog(warn('Did you mean:'));\n for (const s of suggestions.slice(0, 5)) {\n const id = s.testId ? `testId=\"${s.testId}\"` : `uuid=\"${s.uuid}\"`;\n termLog(info(` → ${s.name || '(unnamed)'} [${id}]`));\n }\n }\n cmdLog('r3f', `Object not found: \"${idOrUuid}\"`, { suggestions });\n }\n\n // ---- Interactions ----\n\n logInteraction(action: string, idOrUuid: string, extra?: string): void {\n const suffix = extra ? ` ${extra}` : '';\n termLog(info(`${action}(\"${idOrUuid}\")${suffix}`));\n }\n\n logInteractionDone(action: string, idOrUuid: string, durationMs: number): void {\n termLog(ok(`${action}(\"${idOrUuid}\") — ${durationMs}ms`));\n }\n\n // ---- Assertions ----\n\n logAssertionFailure(\n matcherName: string,\n id: string,\n detail: string,\n diag?: BridgeDiagnostics,\n ): void {\n termLog(heading(`Assertion failed: ${matcherName}(\"${id}\")`));\n termLog(fail(detail));\n if (diag) {\n this._printDiagnosticsSummary(diag);\n }\n }\n\n // ---- Diagnostics ----\n\n logDiagnostics(): Cypress.Chainable<void> {\n return cy.window({ log: false }).then((win) => {\n const api = getAPI(win);\n if (!api || typeof api.getDiagnostics !== 'function') {\n termLog(fail('Cannot fetch diagnostics — bridge not available'));\n return;\n }\n const d = api.getDiagnostics();\n termLog(heading('Bridge Diagnostics'));\n this._printDiagnosticsFull(d);\n cmdLog('r3fDiagnostics', `v${d.version} ${d.objectCount} objects`, { diagnostics: d });\n });\n }\n\n fetchDiagnostics(): Cypress.Chainable<BridgeDiagnostics | null> {\n return cy.window({ log: false }).then((win) => {\n const api = getAPI(win);\n if (!api || typeof api.getDiagnostics !== 'function') return null;\n return api.getDiagnostics();\n });\n }\n\n fetchFuzzyMatches(\n query: string,\n limit = 5,\n ): Cypress.Chainable<Array<{ testId?: string; name: string; uuid: string }>> {\n return cy.window({ log: false }).then((win) => {\n const api = getAPI(win);\n if (!api || typeof api.fuzzyFind !== 'function') return [];\n return api.fuzzyFind(query, limit).map((m: ObjectMetadata) => ({\n testId: m.testId,\n name: m.name,\n uuid: m.uuid,\n }));\n });\n }\n\n // ---- Private formatting ----\n\n private _printDiagnosticsSummary(d: BridgeDiagnostics): void {\n termLog(info(` Bridge: v${d.version} ready=${d.ready}${d.error ? ` error=\"${d.error}\"` : ''}`));\n termLog(info(` Scene: ${d.objectCount} objects (${d.meshCount} meshes, ${d.groupCount} groups, ${d.lightCount} lights)`));\n termLog(info(` Canvas: ${d.canvasWidth}×${d.canvasHeight} GPU: ${d.webglRenderer}`));\n }\n\n private _printDiagnosticsFull(d: BridgeDiagnostics): void {\n const status = d.ready ? `${GREEN}READY${RESET}` : `${RED}NOT READY${RESET}`;\n termLog(` ${BOLD}Status:${RESET} ${status} v${d.version}`);\n if (d.error) termLog(` ${BOLD}Error:${RESET} ${RED}${d.error}${RESET}`);\n termLog(` ${BOLD}Objects:${RESET} ${d.objectCount} total`);\n termLog(` ${d.meshCount} meshes, ${d.groupCount} groups, ${d.lightCount} lights, ${d.cameraCount} cameras`);\n termLog(` ${BOLD}DOM:${RESET} ${d.materializedDomNodes}/${d.maxDomNodes} materialized`);\n termLog(` ${BOLD}Canvas:${RESET} ${d.canvasWidth}×${d.canvasHeight}`);\n termLog(` ${BOLD}GPU:${RESET} ${d.webglRenderer}`);\n termLog(` ${BOLD}Dirty:${RESET} ${d.dirtyQueueSize} queued updates`);\n }\n}\n","/**\n * @module reporterState\n *\n * Shared singleton state for the Cypress {@link R3FReporter} instance.\n * Separated from the reporter module to avoid circular imports between\n * commands, waiters, and the reporter itself.\n *\n * @internal\n */\n\nimport type { R3FReporter } from './reporter';\n\nlet _reporter: R3FReporter | null = null;\n\nexport function _setReporter(r: R3FReporter | null): void {\n _reporter = r;\n}\n\nexport function _getReporter(): R3FReporter | null {\n return _reporter;\n}\n","/**\n * @module commands\n *\n * Cypress custom commands for react-three-dom. Registers `cy.r3f*` commands\n * for scene queries, interactions (click, hover, drag, draw), waiters,\n * snapshot diffing, diagnostics, and multi-canvas support.\n *\n * All object-targeted commands auto-wait for the bridge and the target object,\n * mirroring the Playwright fixture's auto-wait behaviour.\n *\n * Call {@link registerCommands} from your Cypress support file to install.\n */\n\n/// <reference types=\"cypress\" />\nimport type { R3FDOM, SnapshotNode, SceneSnapshot, BridgeDiagnostics, ObjectMetadata } from './types';\nimport { diffSnapshots } from './diffSnapshots';\nimport { R3FReporter } from './reporter';\nimport { _setReporter, _getReporter } from './reporterState';\n\n// ---------------------------------------------------------------------------\n// Multi-canvas support — active canvas ID\n// ---------------------------------------------------------------------------\n\nlet _activeCanvasId: string | null = null;\n\n/** @internal Get the currently active canvas ID. */\nexport function _getActiveCanvasId(): string | null { return _activeCanvasId; }\n\n// ---------------------------------------------------------------------------\n// Bridge access helpers\n// ---------------------------------------------------------------------------\n\nfunction getR3F(win: Cypress.AUTWindow): R3FDOM {\n const w = win as Window & { __R3F_DOM__?: R3FDOM; __R3F_DOM_INSTANCES__?: Record<string, R3FDOM> };\n const api = _activeCanvasId\n ? w.__R3F_DOM_INSTANCES__?.[_activeCanvasId]\n : w.__R3F_DOM__;\n if (!api) {\n throw new Error(\n `react-three-dom bridge not found${_activeCanvasId ? ` (canvas: \"${_activeCanvasId}\")` : ''}. Is <ThreeDom${_activeCanvasId ? ` canvasId=\"${_activeCanvasId}\"` : ''}> mounted in your app?`,\n );\n }\n return api;\n}\n\n// ---------------------------------------------------------------------------\n// Auto-wait: poll until bridge is ready + object exists\n// ---------------------------------------------------------------------------\n\nconst AUTO_WAIT_TIMEOUT = 5_000;\nconst AUTO_WAIT_POLL_MS = 100;\n\nfunction resolveApi(win: Cypress.AUTWindow): R3FDOM | undefined {\n const w = win as Window & { __R3F_DOM__?: R3FDOM; __R3F_DOM_INSTANCES__?: Record<string, R3FDOM> };\n return _activeCanvasId\n ? w.__R3F_DOM_INSTANCES__?.[_activeCanvasId]\n : w.__R3F_DOM__;\n}\n\nfunction autoWaitForBridge(timeout = AUTO_WAIT_TIMEOUT): Cypress.Chainable<R3FDOM> {\n const deadline = Date.now() + timeout;\n\n function poll(): Cypress.Chainable<R3FDOM> {\n return cy.window({ log: false }).then((win) => {\n const api = resolveApi(win);\n\n if (api && api._ready) return api;\n\n if (api && !api._ready && api._error) {\n throw new Error(\n `[react-three-dom] Bridge initialization failed: ${api._error}`,\n );\n }\n\n if (Date.now() > deadline) {\n throw new Error(\n `[react-three-dom] Auto-wait timed out after ${timeout}ms: bridge not ready${_activeCanvasId ? ` (canvas: \"${_activeCanvasId}\")` : ''}.\\n` +\n `Ensure <ThreeDom${_activeCanvasId ? ` canvasId=\"${_activeCanvasId}\"` : ''}> is mounted inside your <Canvas> component.`,\n );\n }\n\n return cy.wait(AUTO_WAIT_POLL_MS, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n}\n\nfunction autoWaitForObject(\n idOrUuid: string,\n timeout = AUTO_WAIT_TIMEOUT,\n): Cypress.Chainable<R3FDOM> {\n const deadline = Date.now() + timeout;\n\n function poll(): Cypress.Chainable<R3FDOM> {\n return cy.window({ log: false }).then((win) => {\n const api = resolveApi(win);\n\n if (!api) {\n if (Date.now() > deadline) {\n throw new Error(\n `[react-three-dom] Auto-wait timed out after ${timeout}ms: bridge not found${_activeCanvasId ? ` (canvas: \"${_activeCanvasId}\")` : ''}.`,\n );\n }\n return cy.wait(AUTO_WAIT_POLL_MS, { log: false }).then(() => poll());\n }\n\n if (!api._ready && api._error) {\n throw new Error(\n `[react-three-dom] Bridge initialization failed: ${api._error}`,\n );\n }\n\n if (api._ready) {\n const found = (api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid)) !== null;\n if (found) return api;\n }\n\n if (Date.now() > deadline) {\n let msg =\n `[react-three-dom] Auto-wait timed out after ${timeout}ms: object \"${idOrUuid}\" not found${_activeCanvasId ? ` (canvas: \"${_activeCanvasId}\")` : ''}.\\n` +\n `Bridge: ready=${api._ready}, objectCount=${api.getCount()}.\\n` +\n `Ensure the object has userData.testId=\"${idOrUuid}\" or uuid=\"${idOrUuid}\".`;\n\n if (typeof api.fuzzyFind === 'function') {\n const suggestions = api.fuzzyFind(idOrUuid, 5);\n if (suggestions.length > 0) {\n msg += '\\nDid you mean:\\n' + suggestions.map((s) => {\n const id = s.testId ? `testId=\"${s.testId}\"` : `uuid=\"${s.uuid}\"`;\n return ` → ${s.name || '(unnamed)'} [${id}]`;\n }).join('\\n');\n }\n }\n\n throw new Error(msg);\n }\n\n return cy.wait(AUTO_WAIT_POLL_MS, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n}\n\n// ---------------------------------------------------------------------------\n// Scene tree formatter\n// ---------------------------------------------------------------------------\n\nfunction formatCypressSceneTree(node: SnapshotNode, prefix = '', isLast = true): string {\n const connector = prefix === '' ? '' : isLast ? '└─ ' : '├─ ';\n const childPrefix = prefix === '' ? '' : prefix + (isLast ? ' ' : '│ ');\n\n let label = node.type;\n if (node.name) label += ` \"${node.name}\"`;\n if (node.testId) label += ` [testId: ${node.testId}]`;\n label += node.visible ? ' visible' : ' HIDDEN';\n\n let result = prefix + connector + label + '\\n';\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const last = i === node.children.length - 1;\n result += formatCypressSceneTree(child, childPrefix, last);\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Custom commands\n// ---------------------------------------------------------------------------\n\n/** Register all `cy.r3f*` custom commands. Call once from your Cypress support file. */\nexport function registerCommands(): void {\n // ---- Multi-canvas ----\n Cypress.Commands.add('r3fUseCanvas', (canvasId: string | null) => {\n _activeCanvasId = canvasId;\n Cypress.log({\n name: 'r3fUseCanvas',\n message: canvasId ? `Switched to canvas \"${canvasId}\"` : 'Switched to default canvas',\n });\n });\n\n Cypress.Commands.add('r3fGetCanvasIds', () => {\n return cy.window({ log: false }).then((win) => {\n const instances = (win as Window & { __R3F_DOM_INSTANCES__?: Record<string, R3FDOM> }).__R3F_DOM_INSTANCES__;\n return instances ? Object.keys(instances) : [];\n });\n });\n\n // ---- Reporter ----\n Cypress.Commands.add('r3fEnableReporter', (enabled = true) => {\n if (enabled) {\n _setReporter(new R3FReporter(true));\n } else {\n _setReporter(null);\n }\n });\n\n // ---- Debug logging ----\n Cypress.Commands.add('r3fEnableDebug', () => {\n cy.window({ log: false }).then((win) => {\n (win as Window).__R3F_DOM_DEBUG__ = true;\n });\n Cypress.on('window:before:load', (win) => {\n const origLog = win.console.log;\n win.console.log = (...args: unknown[]) => {\n origLog.apply(win.console, args);\n const text = String(args[0]);\n if (text.startsWith('[r3f-dom:')) {\n Cypress.log({\n name: 'r3f-dom',\n message: args.slice(1).map(String).join(' '),\n consoleProps: () => ({ raw: args }),\n });\n }\n };\n });\n });\n\n // ---- Interactions (all auto-wait for bridge + object) ----\n\n Cypress.Commands.add('r3fClick', (idOrUuid: string) => {\n const reporter = _getReporter();\n const t0 = Date.now();\n reporter?.logInteraction('click', idOrUuid);\n return autoWaitForObject(idOrUuid).then((api) => {\n api.click(idOrUuid);\n reporter?.logInteractionDone('click', idOrUuid, Date.now() - t0);\n });\n });\n\n Cypress.Commands.add('r3fDoubleClick', (idOrUuid: string) => {\n const reporter = _getReporter();\n const t0 = Date.now();\n reporter?.logInteraction('doubleClick', idOrUuid);\n return autoWaitForObject(idOrUuid).then((api) => {\n api.doubleClick(idOrUuid);\n reporter?.logInteractionDone('doubleClick', idOrUuid, Date.now() - t0);\n });\n });\n\n Cypress.Commands.add('r3fContextMenu', (idOrUuid: string) => {\n const reporter = _getReporter();\n const t0 = Date.now();\n reporter?.logInteraction('contextMenu', idOrUuid);\n return autoWaitForObject(idOrUuid).then((api) => {\n api.contextMenu(idOrUuid);\n reporter?.logInteractionDone('contextMenu', idOrUuid, Date.now() - t0);\n });\n });\n\n Cypress.Commands.add('r3fHover', (idOrUuid: string) => {\n const reporter = _getReporter();\n const t0 = Date.now();\n reporter?.logInteraction('hover', idOrUuid);\n return autoWaitForObject(idOrUuid).then((api) => {\n api.hover(idOrUuid);\n reporter?.logInteractionDone('hover', idOrUuid, Date.now() - t0);\n });\n });\n\n Cypress.Commands.add('r3fUnhover', () => {\n const reporter = _getReporter();\n const t0 = Date.now();\n reporter?.logInteraction('unhover', '(canvas)');\n return autoWaitForBridge().then((api) => {\n api.unhover();\n reporter?.logInteractionDone('unhover', '(canvas)', Date.now() - t0);\n });\n });\n\n Cypress.Commands.add(\n 'r3fDrag',\n (idOrUuid: string, delta: { x: number; y: number; z: number }) => {\n return autoWaitForObject(idOrUuid).then((api) => {\n return Cypress.Promise.resolve(api.drag(idOrUuid, delta));\n });\n },\n );\n\n Cypress.Commands.add(\n 'r3fWheel',\n (idOrUuid: string, options?: { deltaY?: number; deltaX?: number }) => {\n return autoWaitForObject(idOrUuid).then((api) => {\n api.wheel(idOrUuid, options);\n });\n },\n );\n\n Cypress.Commands.add('r3fPointerMiss', () => {\n return autoWaitForBridge().then((api) => {\n api.pointerMiss();\n });\n });\n\n Cypress.Commands.add('r3fSelect', (idOrUuid: string) => {\n return autoWaitForObject(idOrUuid).then((api) => {\n api.select(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fClearSelection', () => {\n return autoWaitForBridge().then((api) => {\n api.clearSelection();\n });\n });\n\n // ---- Drawing (auto-wait for bridge, uses Cypress.Promise for async) ----\n\n Cypress.Commands.add(\n 'r3fDrawPath',\n (\n points: Array<{ x: number; y: number; pressure?: number }>,\n options?: { stepDelayMs?: number; pointerType?: 'mouse' | 'pen' | 'touch'; clickAtEnd?: boolean },\n ) => {\n return autoWaitForBridge().then((api) => {\n return Cypress.Promise.resolve(api.drawPath(points, options));\n });\n },\n );\n\n // ---- Diagnostics ----\n\n Cypress.Commands.add('r3fLogScene', () => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n const snap = api.snapshot();\n const lines = formatCypressSceneTree(snap.tree);\n const output = `Scene tree (${snap.objectCount} objects):\\n${lines}`;\n\n Cypress.log({\n name: 'r3fLogScene',\n message: `${snap.objectCount} objects`,\n consoleProps: () => ({ snapshot: snap, tree: output }),\n });\n\n // eslint-disable-next-line no-console\n console.log(`[r3f-dom] ${output}`);\n });\n });\n\n Cypress.Commands.add('r3fGetDiagnostics', () => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n if (typeof api.getDiagnostics !== 'function') return null;\n return api.getDiagnostics();\n });\n });\n\n Cypress.Commands.add('r3fLogDiagnostics', () => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n if (typeof api.getDiagnostics !== 'function') {\n Cypress.log({ name: 'r3fLogDiagnostics', message: 'getDiagnostics not available' });\n return;\n }\n const d = api.getDiagnostics();\n const lines = [\n `Bridge Diagnostics`,\n ` Status: ${d.ready ? 'READY' : 'NOT READY'} v${d.version}`,\n d.error ? ` Error: ${d.error}` : null,\n ` Objects: ${d.objectCount} total`,\n ` ${d.meshCount} meshes, ${d.groupCount} groups, ${d.lightCount} lights, ${d.cameraCount} cameras`,\n ` DOM: ${d.materializedDomNodes}/${d.maxDomNodes} materialized`,\n ` Canvas: ${d.canvasWidth}×${d.canvasHeight}`,\n ` GPU: ${d.webglRenderer}`,\n ` Dirty: ${d.dirtyQueueSize} queued updates`,\n ].filter(Boolean).join('\\n');\n\n Cypress.log({\n name: 'r3fLogDiagnostics',\n message: `v${d.version} ${d.objectCount} objects`,\n consoleProps: () => ({ diagnostics: d, formatted: lines }),\n });\n\n // eslint-disable-next-line no-console\n console.log(`[r3f-dom] ${lines}`);\n });\n });\n\n // ---- Queries ----\n\n Cypress.Commands.add('r3fGetObject', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n return api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid) ?? null;\n });\n });\n\n Cypress.Commands.add('r3fGetByTestId', (testId: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByTestId(testId);\n });\n });\n\n Cypress.Commands.add('r3fGetByName', (name: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByName(name);\n });\n });\n\n Cypress.Commands.add('r3fGetByUuid', (uuid: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByUuid(uuid);\n });\n });\n\n Cypress.Commands.add('r3fGetChildren', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getChildren(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fGetParent', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getParent(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fGetCanvas', () => {\n return cy.get('[data-r3f-canvas]');\n });\n\n Cypress.Commands.add('r3fGetWorldPosition', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n const insp = api.inspect(idOrUuid);\n if (!insp?.worldMatrix || insp.worldMatrix.length < 15) return null;\n const m = insp.worldMatrix;\n return [m[12], m[13], m[14]] as [number, number, number];\n });\n });\n\n Cypress.Commands.add('r3fDiffSnapshots', (before: SceneSnapshot, after: SceneSnapshot) => {\n return cy.wrap(diffSnapshots(before, after), { log: false });\n });\n\n Cypress.Commands.add('r3fTrackObjectCount', (action: () => Cypress.Chainable<unknown>) => {\n return cy.window({ log: false }).then((win) => {\n const before = getR3F(win).snapshot();\n return action().then(() =>\n cy.window({ log: false }).then((w) => {\n const after = getR3F(w).snapshot();\n const d = diffSnapshots(before, after);\n return { added: d.added.length, removed: d.removed.length };\n }),\n );\n });\n });\n\n Cypress.Commands.add('r3fInspect', (idOrUuid: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).inspect(idOrUuid);\n });\n });\n\n Cypress.Commands.add('r3fSnapshot', () => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).snapshot();\n });\n });\n\n Cypress.Commands.add('r3fGetCount', () => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getCount();\n });\n });\n\n // ---- BIM/CAD queries ----\n\n Cypress.Commands.add('r3fGetByType', (type: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByType(type);\n });\n });\n\n Cypress.Commands.add('r3fGetByUserData', (key: string, value?: unknown) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByUserData(key, value);\n });\n });\n\n Cypress.Commands.add('r3fGetCountByType', (type: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getCountByType(type);\n });\n });\n\n Cypress.Commands.add('r3fGetObjects', (ids: string[]) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getObjects(ids);\n });\n });\n\n Cypress.Commands.add('r3fGetByGeometryType', (type: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByGeometryType(type);\n });\n });\n\n Cypress.Commands.add('r3fGetByMaterialType', (type: string) => {\n return cy.window({ log: false }).then((win) => {\n return getR3F(win).getByMaterialType(type);\n });\n });\n\n Cypress.Commands.add('r3fFuzzyFind', (query: string, limit?: number) => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n if (typeof api.fuzzyFind !== 'function') return [];\n return api.fuzzyFind(query, limit);\n });\n });\n\n // ---- Camera ----\n\n Cypress.Commands.add('r3fGetCameraState', () => {\n return cy.window({ log: false }).then((win) => {\n const api = getR3F(win);\n return api.getCameraState();\n });\n });\n}\n","/**\n * @module assertions\n *\n * Cypress Chai assertion methods for 3D scene testing via react-three-dom.\n * Provides 27+ `r3f*` assertion methods covering object metadata (existence,\n * visibility, position, rotation, scale, type, geometry, material, hierarchy),\n * inspection data (frustum, bounds, color, opacity, transparency, vertices,\n * triangles, userData, textures), scene-level counts, camera state, and\n * batch assertions (allExist, allVisible, noneExist).\n *\n * Call {@link registerAssertions} from your Cypress support file to install.\n */\n\n/// <reference types=\"cypress\" />\nimport type { R3FDOM, ObjectMetadata, ObjectInspection, SnapshotNode } from './types';\nimport { _getActiveCanvasId } from './commands';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getR3FFromWindow(): R3FDOM {\n const win = (cy as unknown as { state: (key: string) => unknown })\n .state('window') as unknown as Window & { __R3F_DOM__?: R3FDOM; __R3F_DOM_INSTANCES__?: Record<string, R3FDOM> };\n const cid = _getActiveCanvasId();\n const api = cid\n ? win?.__R3F_DOM_INSTANCES__?.[cid]\n : win?.__R3F_DOM__;\n if (!api) {\n throw new Error(\n `react-three-dom bridge not found${cid ? ` (canvas: \"${cid}\")` : ''}. Is <ThreeDom${cid ? ` canvasId=\"${cid}\"` : ''}> mounted?`,\n );\n }\n return api;\n}\n\nfunction resolveObject(api: R3FDOM, idOrUuid: string): ObjectMetadata | null {\n return api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid) ?? null;\n}\n\nfunction requireObject(api: R3FDOM, idOrUuid: string, matcherName: string): ObjectMetadata {\n const meta = resolveObject(api, idOrUuid);\n if (!meta) {\n let msg = `[${matcherName}] 3D object \"${idOrUuid}\" not found in the scene`;\n if (typeof api.fuzzyFind === 'function') {\n const suggestions = api.fuzzyFind(idOrUuid, 5);\n if (suggestions.length > 0) {\n msg += '\\nDid you mean:\\n' + suggestions.map((s) => {\n const id = s.testId ? `testId=\"${s.testId}\"` : `uuid=\"${s.uuid}\"`;\n return ` → ${s.name || '(unnamed)'} [${id}]`;\n }).join('\\n');\n }\n }\n throw new Error(msg);\n }\n return meta;\n}\n\nfunction requireInspection(api: R3FDOM, idOrUuid: string, matcherName: string): ObjectInspection {\n const insp = api.inspect(idOrUuid);\n if (!insp) {\n throw new Error(`[${matcherName}] 3D object \"${idOrUuid}\" not found for inspection`);\n }\n return insp;\n}\n\nfunction collectTriangles(api: R3FDOM): number {\n const snap = api.snapshot();\n let total = 0;\n function walk(node: SnapshotNode) {\n const meta = api.getByUuid(node.uuid);\n if (meta?.triangleCount) total += meta.triangleCount;\n for (const child of node.children) walk(child);\n }\n walk(snap.tree);\n return total;\n}\n\n// ---------------------------------------------------------------------------\n// All 27 Chai assertions\n// ---------------------------------------------------------------------------\n\n/** Register all `r3f*` Chai assertion methods. Call once from your Cypress support file. */\nexport function registerAssertions(): void {\n chai.use((_chai) => {\n const { Assertion } = _chai;\n\n // ======================= TIER 1 — Metadata ============================\n\n Assertion.addMethod('r3fExist', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const meta = resolveObject(api, idOrUuid);\n (this as unknown as Chai.Assertion).assert(\n meta !== null,\n `expected 3D object \"${idOrUuid}\" to exist in the scene`,\n `expected 3D object \"${idOrUuid}\" to NOT exist in the scene`,\n 'exists', meta === null ? 'not found' : 'found',\n );\n });\n\n Assertion.addMethod('r3fVisible', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fVisible');\n (this as unknown as Chai.Assertion).assert(\n meta.visible,\n `expected \"${idOrUuid}\" to be visible`,\n `expected \"${idOrUuid}\" to NOT be visible`,\n true, meta.visible,\n );\n });\n\n Assertion.addMethod('r3fPosition', function (\n this: Chai.AssertionStatic, idOrUuid: string,\n expected: [number, number, number], tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fPosition');\n const pass = expected.every((v, i) => Math.abs(meta.position[i] - v) <= tolerance);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" at [${expected}] (±${tolerance}), got [${meta.position}]`,\n `expected \"${idOrUuid}\" to NOT be at [${expected}] (±${tolerance})`,\n expected, meta.position,\n );\n });\n\n Assertion.addMethod('r3fWorldPosition', function (\n this: Chai.AssertionStatic, idOrUuid: string,\n expected: [number, number, number], tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fWorldPosition');\n const m = insp.worldMatrix;\n const wp: [number, number, number] = [m[12], m[13], m[14]];\n const pass = expected.every((v, i) => Math.abs(wp[i] - v) <= tolerance);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" world position [${expected}] (±${tolerance}), got [${wp.map(v => v.toFixed(4))}]`,\n `expected \"${idOrUuid}\" to NOT have world position [${expected}] (±${tolerance})`,\n expected, wp,\n );\n });\n\n Assertion.addMethod('r3fRotation', function (\n this: Chai.AssertionStatic, idOrUuid: string,\n expected: [number, number, number], tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fRotation');\n const pass = expected.every((v, i) => Math.abs(meta.rotation[i] - v) <= tolerance);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" rotation [${expected}] (±${tolerance}), got [${meta.rotation}]`,\n `expected \"${idOrUuid}\" to NOT have rotation [${expected}] (±${tolerance})`,\n expected, meta.rotation,\n );\n });\n\n Assertion.addMethod('r3fScale', function (\n this: Chai.AssertionStatic, idOrUuid: string,\n expected: [number, number, number], tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fScale');\n const pass = expected.every((v, i) => Math.abs(meta.scale[i] - v) <= tolerance);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" scale [${expected}] (±${tolerance}), got [${meta.scale}]`,\n `expected \"${idOrUuid}\" to NOT have scale [${expected}] (±${tolerance})`,\n expected, meta.scale,\n );\n });\n\n Assertion.addMethod('r3fType', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedType: string,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fType');\n (this as unknown as Chai.Assertion).assert(\n meta.type === expectedType,\n `expected \"${idOrUuid}\" type \"${expectedType}\", got \"${meta.type}\"`,\n `expected \"${idOrUuid}\" to NOT have type \"${expectedType}\"`,\n expectedType, meta.type,\n );\n });\n\n Assertion.addMethod('r3fName', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedName: string,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fName');\n (this as unknown as Chai.Assertion).assert(\n meta.name === expectedName,\n `expected \"${idOrUuid}\" name \"${expectedName}\", got \"${meta.name}\"`,\n `expected \"${idOrUuid}\" to NOT have name \"${expectedName}\"`,\n expectedName, meta.name,\n );\n });\n\n Assertion.addMethod('r3fGeometryType', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedGeo: string,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fGeometryType');\n (this as unknown as Chai.Assertion).assert(\n meta.geometryType === expectedGeo,\n `expected \"${idOrUuid}\" geometry \"${expectedGeo}\", got \"${meta.geometryType ?? 'none'}\"`,\n `expected \"${idOrUuid}\" to NOT have geometry \"${expectedGeo}\"`,\n expectedGeo, meta.geometryType,\n );\n });\n\n Assertion.addMethod('r3fMaterialType', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedMat: string,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fMaterialType');\n (this as unknown as Chai.Assertion).assert(\n meta.materialType === expectedMat,\n `expected \"${idOrUuid}\" material \"${expectedMat}\", got \"${meta.materialType ?? 'none'}\"`,\n `expected \"${idOrUuid}\" to NOT have material \"${expectedMat}\"`,\n expectedMat, meta.materialType,\n );\n });\n\n Assertion.addMethod('r3fChildCount', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedCount: number,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fChildCount');\n const actual = meta.childrenUuids.length;\n (this as unknown as Chai.Assertion).assert(\n actual === expectedCount,\n `expected \"${idOrUuid}\" ${expectedCount} children, got ${actual}`,\n `expected \"${idOrUuid}\" to NOT have ${expectedCount} children`,\n expectedCount, actual,\n );\n });\n\n Assertion.addMethod('r3fParent', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedParent: string,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fParent');\n if (!meta.parentUuid) {\n throw new Error(`[r3fParent] \"${idOrUuid}\" has no parent (is scene root)`);\n }\n const parentMeta = api.getByUuid(meta.parentUuid);\n const pass = parentMeta !== null && (\n parentMeta.uuid === expectedParent ||\n parentMeta.testId === expectedParent ||\n parentMeta.name === expectedParent\n );\n const parentLabel = parentMeta?.testId ?? parentMeta?.name ?? meta.parentUuid;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" parent \"${expectedParent}\", got \"${parentLabel}\"`,\n `expected \"${idOrUuid}\" to NOT have parent \"${expectedParent}\"`,\n expectedParent, parentLabel,\n );\n });\n\n Assertion.addMethod('r3fInstanceCount', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedCount: number,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fInstanceCount');\n const actual = meta.instanceCount ?? 0;\n (this as unknown as Chai.Assertion).assert(\n actual === expectedCount,\n `expected \"${idOrUuid}\" instance count ${expectedCount}, got ${actual}`,\n `expected \"${idOrUuid}\" to NOT have instance count ${expectedCount}`,\n expectedCount, actual,\n );\n });\n\n // ======================= TIER 2 — Inspection ==========================\n\n Assertion.addMethod('r3fInFrustum', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fInFrustum');\n const fin = (v: number[]) => v.every(Number.isFinite);\n const pass = fin(insp.bounds.min) && fin(insp.bounds.max);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" to be in the camera frustum`,\n `expected \"${idOrUuid}\" to NOT be in the camera frustum`,\n 'in frustum', pass ? 'in frustum' : 'invalid bounds',\n );\n });\n\n Assertion.addMethod('r3fBounds', function (\n this: Chai.AssertionStatic, idOrUuid: string,\n expected: { min: [number, number, number]; max: [number, number, number] },\n tolerance = 0.1,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fBounds');\n const w = (a: number[], b: number[]) => a.every((v, i) => Math.abs(v - b[i]) <= tolerance);\n const pass = w(insp.bounds.min, expected.min) && w(insp.bounds.max, expected.max);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" bounds min:${JSON.stringify(expected.min)} max:${JSON.stringify(expected.max)} (±${tolerance}), got min:${JSON.stringify(insp.bounds.min)} max:${JSON.stringify(insp.bounds.max)}`,\n `expected \"${idOrUuid}\" bounds to NOT match`,\n expected, insp.bounds,\n );\n });\n\n Assertion.addMethod('r3fColor', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedColor: string,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fColor');\n const norm = expectedColor.startsWith('#') ? expectedColor.toLowerCase() : `#${expectedColor.toLowerCase()}`;\n const actual = insp.material?.color?.toLowerCase();\n (this as unknown as Chai.Assertion).assert(\n actual === norm,\n `expected \"${idOrUuid}\" color \"${norm}\", got \"${actual ?? 'no color'}\"`,\n `expected \"${idOrUuid}\" to NOT have color \"${norm}\"`,\n norm, actual,\n );\n });\n\n Assertion.addMethod('r3fOpacity', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedOpacity: number, tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fOpacity');\n const actual = insp.material?.opacity;\n const pass = actual !== undefined && Math.abs(actual - expectedOpacity) <= tolerance;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" opacity ${expectedOpacity} (±${tolerance}), got ${actual ?? 'no material'}`,\n `expected \"${idOrUuid}\" to NOT have opacity ${expectedOpacity} (±${tolerance})`,\n expectedOpacity, actual,\n );\n });\n\n Assertion.addMethod('r3fTransparent', function (this: Chai.AssertionStatic, idOrUuid: string) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fTransparent');\n const pass = insp.material?.transparent === true;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" transparent=true, got ${insp.material?.transparent ?? 'no material'}`,\n `expected \"${idOrUuid}\" to NOT be transparent`,\n true, insp.material?.transparent,\n );\n });\n\n Assertion.addMethod('r3fVertexCount', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedCount: number,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fVertexCount');\n const actual = meta.vertexCount ?? 0;\n (this as unknown as Chai.Assertion).assert(\n actual === expectedCount,\n `expected \"${idOrUuid}\" ${expectedCount} vertices, got ${actual}`,\n `expected \"${idOrUuid}\" to NOT have ${expectedCount} vertices`,\n expectedCount, actual,\n );\n });\n\n Assertion.addMethod('r3fTriangleCount', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedCount: number,\n ) {\n const api = getR3FFromWindow();\n const meta = requireObject(api, idOrUuid, 'r3fTriangleCount');\n const actual = meta.triangleCount ?? 0;\n (this as unknown as Chai.Assertion).assert(\n actual === expectedCount,\n `expected \"${idOrUuid}\" ${expectedCount} triangles, got ${actual}`,\n `expected \"${idOrUuid}\" to NOT have ${expectedCount} triangles`,\n expectedCount, actual,\n );\n });\n\n Assertion.addMethod('r3fUserData', function (\n this: Chai.AssertionStatic, idOrUuid: string, key: string, expectedValue?: unknown,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fUserData');\n const hasKey = key in insp.userData;\n if (expectedValue === undefined) {\n (this as unknown as Chai.Assertion).assert(\n hasKey,\n `expected \"${idOrUuid}\" to have userData key \"${key}\"`,\n `expected \"${idOrUuid}\" to NOT have userData key \"${key}\"`,\n `key \"${key}\"`, hasKey ? 'present' : 'missing',\n );\n } else {\n const actual = insp.userData[key];\n const pass = hasKey && JSON.stringify(actual) === JSON.stringify(expectedValue);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected \"${idOrUuid}\" userData.${key} = ${JSON.stringify(expectedValue)}, got ${JSON.stringify(actual)}`,\n `expected \"${idOrUuid}\" to NOT have userData.${key} = ${JSON.stringify(expectedValue)}`,\n expectedValue, actual,\n );\n }\n });\n\n Assertion.addMethod('r3fMapTexture', function (\n this: Chai.AssertionStatic, idOrUuid: string, expectedName?: string,\n ) {\n const api = getR3FFromWindow();\n const insp = requireInspection(api, idOrUuid, 'r3fMapTexture');\n const actual = insp.material?.map;\n if (!expectedName) {\n (this as unknown as Chai.Assertion).assert(\n actual !== undefined && actual !== null,\n `expected \"${idOrUuid}\" to have a map texture`,\n `expected \"${idOrUuid}\" to NOT have a map texture`,\n 'any map', actual,\n );\n } else {\n (this as unknown as Chai.Assertion).assert(\n actual === expectedName,\n `expected \"${idOrUuid}\" map \"${expectedName}\", got \"${actual ?? 'none'}\"`,\n `expected \"${idOrUuid}\" to NOT have map \"${expectedName}\"`,\n expectedName, actual,\n );\n }\n });\n\n // ===================== Scene-level assertions =========================\n\n Assertion.addMethod('r3fObjectCount', function (\n this: Chai.AssertionStatic, expected: number,\n ) {\n const api = getR3FFromWindow();\n const actual = api.getCount();\n (this as unknown as Chai.Assertion).assert(\n actual === expected,\n `expected scene to have ${expected} objects, got ${actual}`,\n `expected scene to NOT have ${expected} objects`,\n expected, actual,\n );\n });\n\n Assertion.addMethod('r3fObjectCountGreaterThan', function (\n this: Chai.AssertionStatic, min: number,\n ) {\n const api = getR3FFromWindow();\n const actual = api.getCount();\n (this as unknown as Chai.Assertion).assert(\n actual > min,\n `expected scene to have more than ${min} objects, got ${actual}`,\n `expected scene to have at most ${min} objects, but has ${actual}`,\n `> ${min}`, actual,\n );\n });\n\n Assertion.addMethod('r3fCountByType', function (\n this: Chai.AssertionStatic, type: string, expected: number,\n ) {\n const api = getR3FFromWindow();\n const actual = api.getCountByType(type);\n (this as unknown as Chai.Assertion).assert(\n actual === expected,\n `expected ${expected} \"${type}\" objects, got ${actual}`,\n `expected scene to NOT have ${expected} \"${type}\" objects`,\n expected, actual,\n );\n });\n\n Assertion.addMethod('r3fTotalTriangleCount', function (\n this: Chai.AssertionStatic, expected: number,\n ) {\n const api = getR3FFromWindow();\n const actual = collectTriangles(api);\n (this as unknown as Chai.Assertion).assert(\n actual === expected,\n `expected ${expected} total triangles, got ${actual}`,\n `expected scene to NOT have ${expected} total triangles`,\n expected, actual,\n );\n });\n\n Assertion.addMethod('r3fTotalTriangleCountLessThan', function (\n this: Chai.AssertionStatic, max: number,\n ) {\n const api = getR3FFromWindow();\n const actual = collectTriangles(api);\n (this as unknown as Chai.Assertion).assert(\n actual < max,\n `expected fewer than ${max} total triangles, got ${actual}`,\n `expected at least ${max} total triangles, but has ${actual}`,\n `< ${max}`, actual,\n );\n });\n\n // ===================== Camera assertions ===============================\n\n Assertion.addMethod('r3fCameraPosition', function (\n this: Chai.AssertionStatic,\n expected: [number, number, number], tolerance = 0.1,\n ) {\n const api = getR3FFromWindow();\n const cam = api.getCameraState();\n const pass = expected.every((v, i) => Math.abs(cam.position[i] - v) <= tolerance);\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected camera at [${expected}], got [${cam.position}] (tol=${tolerance})`,\n `expected camera NOT at [${expected}]`,\n expected, cam.position,\n );\n });\n\n Assertion.addMethod('r3fCameraFov', function (\n this: Chai.AssertionStatic, expected: number, tolerance = 0.1,\n ) {\n const api = getR3FFromWindow();\n const cam = api.getCameraState();\n const actual = cam.fov;\n const pass = actual !== undefined && Math.abs(actual - expected) <= tolerance;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected camera fov ${expected}, got ${actual ?? 'N/A'} (tol=${tolerance})`,\n `expected camera fov NOT ${expected}`,\n expected, actual,\n );\n });\n\n Assertion.addMethod('r3fCameraNear', function (\n this: Chai.AssertionStatic, expected: number, tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const cam = api.getCameraState();\n const pass = Math.abs(cam.near - expected) <= tolerance;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected camera near ${expected}, got ${cam.near} (tol=${tolerance})`,\n `expected camera near NOT ${expected}`,\n expected, cam.near,\n );\n });\n\n Assertion.addMethod('r3fCameraFar', function (\n this: Chai.AssertionStatic, expected: number, tolerance = 1,\n ) {\n const api = getR3FFromWindow();\n const cam = api.getCameraState();\n const pass = Math.abs(cam.far - expected) <= tolerance;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected camera far ${expected}, got ${cam.far} (tol=${tolerance})`,\n `expected camera far NOT ${expected}`,\n expected, cam.far,\n );\n });\n\n Assertion.addMethod('r3fCameraZoom', function (\n this: Chai.AssertionStatic, expected: number, tolerance = 0.01,\n ) {\n const api = getR3FFromWindow();\n const cam = api.getCameraState();\n const pass = Math.abs(cam.zoom - expected) <= tolerance;\n (this as unknown as Chai.Assertion).assert(\n pass,\n `expected camera zoom ${expected}, got ${cam.zoom} (tol=${tolerance})`,\n `expected camera zoom NOT ${expected}`,\n expected, cam.zoom,\n );\n });\n\n // ===================== Batch assertions ================================\n\n Assertion.addMethod('r3fAllExist', function (\n this: Chai.AssertionStatic, idsOrPattern: string[] | string,\n ) {\n const api = getR3FFromWindow();\n const ids = typeof idsOrPattern === 'string'\n ? resolvePatternSync(api, idsOrPattern)\n : idsOrPattern;\n const missing = ids.filter((id) => resolveObject(api, id) === null);\n (this as unknown as Chai.Assertion).assert(\n missing.length === 0 && ids.length > 0,\n `expected all objects to exist, missing: [${missing.join(', ')}]`,\n `expected some objects to NOT exist, but all do`,\n ids, { missing },\n );\n });\n\n Assertion.addMethod('r3fAllVisible', function (\n this: Chai.AssertionStatic, idsOrPattern: string[] | string,\n ) {\n const api = getR3FFromWindow();\n const ids = typeof idsOrPattern === 'string'\n ? resolvePatternSync(api, idsOrPattern)\n : idsOrPattern;\n const hidden = ids.filter((id) => {\n const m = resolveObject(api, id);\n return !m || !m.visible;\n });\n (this as unknown as Chai.Assertion).assert(\n hidden.length === 0 && ids.length > 0,\n `expected all objects to be visible, hidden/missing: [${hidden.join(', ')}]`,\n `expected some objects to NOT be visible, but all are`,\n ids, { hidden },\n );\n });\n\n Assertion.addMethod('r3fNoneExist', function (\n this: Chai.AssertionStatic, idsOrPattern: string[] | string,\n ) {\n const api = getR3FFromWindow();\n const ids = typeof idsOrPattern === 'string'\n ? resolvePatternSync(api, idsOrPattern)\n : idsOrPattern;\n const found = ids.filter((id) => resolveObject(api, id) !== null);\n (this as unknown as Chai.Assertion).assert(\n found.length === 0,\n `expected no objects to exist, but found: [${found.join(', ')}]`,\n `expected some objects to exist, but none do`,\n ids, { found },\n );\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Batch helper — resolve glob/wildcard patterns to matching testIds\n// ---------------------------------------------------------------------------\n\nfunction resolvePatternSync(api: R3FDOM, pattern: string): string[] {\n const snap = api.snapshot();\n const ids: string[] = [];\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$');\n function walk(node: SnapshotNode) {\n const testId = (node as SnapshotNode & { testId?: string }).testId ?? node.name;\n if (regex.test(testId) || regex.test(node.uuid)) ids.push(testId || node.uuid);\n for (const child of node.children) walk(child);\n }\n walk(snap.tree);\n return ids;\n}\n","/**\n * @module waiters\n *\n * Cypress custom commands for waiting on react-three-dom bridge and scene\n * state. Registers `cy.r3fWaitForSceneReady`, `cy.r3fWaitForIdle`,\n * `cy.r3fWaitForObject`, `cy.r3fWaitForNewObject`, and\n * `cy.r3fWaitForObjectRemoved`.\n *\n * All waiters fail fast with a rich diagnostic if the bridge reports an\n * `_error` state, preventing silent timeouts.\n *\n * Call {@link registerWaiters} from your Cypress support file to install.\n */\n\n/// <reference types=\"cypress\" />\nimport type { R3FDOM, ObjectMetadata, SnapshotNode, BridgeDiagnostics } from './types';\nimport { _getReporter } from './reporterState';\nimport { _getActiveCanvasId } from './commands';\n\n// ---------------------------------------------------------------------------\n// r3fWaitForSceneReady — wait until the bridge is ready and object count\n// has stabilised across several consecutive polls.\n// ---------------------------------------------------------------------------\n\nexport interface WaitForSceneReadyOptions {\n /** How many consecutive stable polls are required. Default: 3 */\n stableChecks?: number;\n /** Interval between polls in ms. Default: 100 */\n pollIntervalMs?: number;\n /** Overall timeout in ms. Default: 10_000 */\n timeout?: number;\n}\n\nfunction resolveApiFromWindow(win: Cypress.AUTWindow): R3FDOM | undefined {\n const w = win as Window & { __R3F_DOM__?: R3FDOM; __R3F_DOM_INSTANCES__?: Record<string, R3FDOM> };\n const cid = _getActiveCanvasId();\n return cid ? w.__R3F_DOM_INSTANCES__?.[cid] : w.__R3F_DOM__;\n}\n\nfunction getBridgeState(win: Cypress.AUTWindow): {\n exists: boolean;\n ready: boolean;\n error: string | null;\n count: number;\n} {\n const api = resolveApiFromWindow(win);\n if (!api) return { exists: false, ready: false, error: null, count: 0 };\n return {\n exists: true,\n ready: api._ready,\n error: api._error ?? null,\n count: api.getCount(),\n };\n}\n\nfunction assertBridgeNotErrored(state: { exists: boolean; ready: boolean; error: string | null }): void {\n if (state.exists && !state.ready && state.error) {\n const reporter = _getReporter();\n reporter?.logBridgeError(state.error);\n throw new Error(\n `[react-three-dom] Bridge initialization failed: ${state.error}\\n` +\n `The <ThreeDom> component mounted but threw during setup. ` +\n `Check the browser console for the full stack trace.`,\n );\n }\n}\n\n/** Register all `cy.r3fWaitFor*` custom commands. Call once from your Cypress support file. */\nexport function registerWaiters(): void {\n Cypress.Commands.add(\n 'r3fWaitForSceneReady',\n (options: WaitForSceneReadyOptions = {}) => {\n const {\n stableChecks = 3,\n pollIntervalMs = 100,\n timeout = 10_000,\n } = options;\n\n const reporter = _getReporter();\n reporter?.logBridgeWaiting();\n\n const startTime = Date.now();\n let lastCount = -1;\n let stableRuns = 0;\n let bridgeLogged = false;\n\n function poll(): Cypress.Chainable<void> {\n if (Date.now() - startTime > timeout) {\n reporter?.logBridgeError(\n `Timed out after ${timeout}ms. Last count: ${lastCount}, stable: ${stableRuns}/${stableChecks}`,\n );\n throw new Error(\n `r3fWaitForSceneReady timed out after ${timeout}ms. Last count: ${lastCount}, stable runs: ${stableRuns}/${stableChecks}`,\n );\n }\n\n return cy.window({ log: false }).then((win) => {\n const state = getBridgeState(win);\n assertBridgeNotErrored(state);\n\n if (!state.exists || !state.ready) {\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n }\n\n if (!bridgeLogged) {\n bridgeLogged = true;\n const api = resolveApiFromWindow(win)!;\n let diag: BridgeDiagnostics | undefined;\n if (typeof api.getDiagnostics === 'function') {\n diag = api.getDiagnostics();\n }\n reporter?.logBridgeConnected(diag);\n }\n\n const count = state.count;\n\n if (count === lastCount && count > 0) {\n stableRuns++;\n if (stableRuns >= stableChecks) {\n reporter?.logSceneReady(count);\n return;\n }\n } else {\n stableRuns = 0;\n }\n\n lastCount = count;\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n },\n );\n\n // -----------------------------------------------------------------------\n // r3fWaitForIdle — wait until no property changes for N polls\n // -----------------------------------------------------------------------\n\n Cypress.Commands.add(\n 'r3fWaitForIdle',\n (options: { idleChecks?: number; pollIntervalMs?: number; timeout?: number } = {}) => {\n const {\n idleChecks = 10,\n pollIntervalMs = 50,\n timeout = 10_000,\n } = options;\n\n const startTime = Date.now();\n let lastHash = '';\n let stableCount = 0;\n\n function hashTree(node: SnapshotNode): string {\n let h = `${node.uuid}:${node.visible ? 1 : 0}:${node.position[0].toFixed(3)},${node.position[1].toFixed(3)},${node.position[2].toFixed(3)}:${node.children.length}`;\n for (const c of node.children) h += '|' + hashTree(c);\n return h;\n }\n\n function poll(): Cypress.Chainable<void> {\n if (Date.now() - startTime > timeout) {\n throw new Error(`r3fWaitForIdle timed out after ${timeout}ms`);\n }\n\n return cy.window({ log: false }).then((win) => {\n const state = getBridgeState(win);\n assertBridgeNotErrored(state);\n\n if (!state.exists || !state.ready) {\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n }\n\n const api = resolveApiFromWindow(win)!;\n const snap = api.snapshot();\n const hash = hashTree(snap.tree);\n\n if (hash === lastHash && hash !== '') {\n stableCount++;\n if (stableCount >= idleChecks) {\n return;\n }\n } else {\n stableCount = 0;\n }\n\n lastHash = hash;\n return cy.wait(pollIntervalMs, { log: false }).then(() => poll());\n });\n }\n\n return poll();\n },\n );\n\n // -----------------------------------------------------------------------\n // r3fWaitForObject — wait until a specific object exists in the scene\n // -----------------------------------------------------------------------\n\n Cypress.Commands.add(\n 'r3fWaitForObject',\n (\n idOrUuid: string,\n options: {\n bridgeTimeout?: number;\n objectTimeout?: number;\n pollIntervalMs?: number;\n } = {},\n ) => {\n const {\n bridgeTimeout = 30_000,\n objectTimeout = 40_000,\n pollIntervalMs = 200,\n } = options;\n\n const reporter = _getReporter();\n const bridgeStart = Date.now();\n\n function waitForBridge(): Cypress.Chainable<void> {\n if (Date.now() - bridgeStart > bridgeTimeout) {\n reporter?.logBridgeError(\n `Timed out after ${bridgeTimeout}ms waiting for bridge`,\n );\n throw new Error(\n `r3fWaitForObject(\"${idOrUuid}\") timed out after ${bridgeTimeout}ms ` +\n `waiting for the bridge. Ensure <ThreeDom> is mounted inside your <Canvas>.`,\n );\n }\n\n return cy.window({ log: false }).then((win) => {\n const state = getBridgeState(win);\n assertBridgeNotErrored(state);\n\n if (state.exists && state.ready) {\n return pollForObject();\n }\n\n return cy.wait(pollIntervalMs, { log: false }).then(() => waitForBridge());\n });\n }\n\n const objectStart = Date.now();\n\n function pollForObject(): Cypress.Chainable<void> {\n if (Date.now() - objectStart > objectTimeout) {\n return cy.window({ log: false }).then((win) => {\n const api = resolveApiFromWindow(win);\n const state = getBridgeState(win);\n let msg =\n `r3fWaitForObject(\"${idOrUuid}\") timed out after ${objectTimeout}ms.\\n` +\n `Bridge: ${state.exists ? 'exists' : 'missing'}, ` +\n `ready: ${state.ready}, objectCount: ${state.count}.\\n` +\n `Ensure the object has userData.testId=\"${idOrUuid}\" or uuid=\"${idOrUuid}\".`;\n\n let suggestions: ObjectMetadata[] = [];\n if (api && typeof api.fuzzyFind === 'function') {\n suggestions = api.fuzzyFind(idOrUuid, 5);\n if (suggestions.length > 0) {\n msg += '\\nDid you mean:\\n' + suggestions.map((s: ObjectMetadata) => {\n const id = s.testId ? `testId=\"${s.testId}\"` : `uuid=\"${s.uuid}\"`;\n return ` → ${s.name || '(unnamed)'} [${id}]`;\n }).join('\\n');\n }\n }\n\n reporter?.logObjectNotFound(idOrUuid, suggestions);\n throw new Error(msg);\n });\n }\n\n return cy.window({ log: false }).then((win) => {\n const api = resolveApiFromWindow(win);\n if (!api || !api._ready) {\n return cy.wait(pollIntervalMs, { log: false }).then(() => pollForObject());\n }\n\n const meta = api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid);\n if (meta) {\n reporter?.logObjectFound(idOrUuid, meta.type, meta.name || undefined);\n Cypress.log({\n name: 'r3fWaitForObject',\n message: `\"${idOrUuid}\" found`,\n });\n return;\n }\n\n return cy.wait(pollIntervalMs, { log: false }).then(() => pollForObject());\n });\n }\n\n return waitForBridge();\n },\n );\n\n // -----------------------------------------------------------------------\n // r3fWaitForNewObject — wait until new objects appear in the scene\n // -----------------------------------------------------------------------\n\n Cypress.Commands.add(\n 'r3fWaitForNewObject',\n (options: {\n type?: string;\n nameContains?: string;\n pollIntervalMs?: number;\n timeout?: number;\n } = {}) => {\n const {\n type: filterType,\n nameContains,\n pollIntervalMs = 100,\n timeout = 10_000,\n } = options;\n\n const baselineUuids: string[] = [];\n\n function collectUuids(node: SnapshotNode): void {\n baselineUuids.push(node.uuid);\n for (const child of node.children) {\n collectUuids(child);\n }\n }\n\n return cy.window({ log: false }).then((win) => {\n const state = getBridgeState(win);\n assertBridgeNotErrored(state);\n\n if (state.exists && state.ready) {\n const api = resolveApiFromWindow(win)!;\n const snap = api.snapshot();\n collectUuids(snap.tree);\n }\n\n const baselineSet = new Set(baselineUuids);\n const startTime = Date.now();\n\n function poll(): Cypress.Chainable<{ newObjects: ObjectMetadata[]; newUuids: string[]; count: number }> {\n if (Date.now() - startTime > timeout) {\n const filterDesc = [\n filterType ? `type=\"${filterType}\"` : null,\n nameContains ? `nameContains=\"${nameContains}\"` : null,\n ].filter(Boolean).join(', ');\n throw new Error(\n `r3fWaitForNewObject timed out after ${timeout}ms. ` +\n `No new objects appeared${filterDesc ? ` matching ${filterDesc}` : ''}. ` +\n `Baseline had ${baselineUuids.length} objects.`,\n );\n }\n\n return cy.wait(pollIntervalMs, { log: false }).then(() => {\n return cy.window({ log: false }).then((w) => {\n const bridgeState = getBridgeState(w);\n assertBridgeNotErrored(bridgeState);\n\n if (!bridgeState.exists || !bridgeState.ready) return poll();\n\n const bridge = resolveApiFromWindow(w)!;\n\n const snap = bridge.snapshot();\n const newObjects: ObjectMetadata[] = [];\n const newUuids: string[] = [];\n\n function scanForNew(node: SnapshotNode): void {\n if (!baselineSet.has(node.uuid)) {\n const typeMatch = !filterType || node.type === filterType;\n const nameMatch = !nameContains || node.name.includes(nameContains);\n if (typeMatch && nameMatch) {\n const meta = bridge.getByUuid(node.uuid);\n if (meta) {\n newObjects.push(meta);\n newUuids.push(node.uuid);\n }\n }\n }\n for (const child of node.children) {\n scanForNew(child);\n }\n }\n\n scanForNew(snap.tree);\n\n if (newObjects.length > 0) {\n Cypress.log({\n name: 'r3fWaitForNewObject',\n message: `${newObjects.length} new object(s) found`,\n consoleProps: () => ({ newObjects, newUuids }),\n });\n return { newObjects, newUuids, count: newObjects.length };\n }\n\n return poll();\n });\n });\n }\n\n return poll();\n });\n },\n );\n\n // -----------------------------------------------------------------------\n // r3fWaitForObjectRemoved — wait until an object is no longer in the scene\n // -----------------------------------------------------------------------\n\n Cypress.Commands.add(\n 'r3fWaitForObjectRemoved',\n (\n idOrUuid: string,\n options: { bridgeTimeout?: number; pollIntervalMs?: number; timeout?: number } = {},\n ) => {\n const {\n bridgeTimeout = 30_000,\n pollIntervalMs = 100,\n timeout = 10_000,\n } = options;\n\n const bridgeStart = Date.now();\n\n function waitForBridge(): Cypress.Chainable<void> {\n if (Date.now() - bridgeStart > bridgeTimeout) {\n throw new Error(\n `r3fWaitForObjectRemoved(\"${idOrUuid}\") timed out after ${bridgeTimeout}ms ` +\n `waiting for the bridge.`,\n );\n }\n\n return cy.window({ log: false }).then((win) => {\n const state = getBridgeState(win);\n assertBridgeNotErrored(state);\n\n if (state.exists && state.ready) {\n return pollForRemoved();\n }\n\n return cy.wait(pollIntervalMs, { log: false }).then(() => waitForBridge());\n });\n }\n\n const removeDeadline = Date.now() + timeout;\n\n function pollForRemoved(): Cypress.Chainable<void> {\n if (Date.now() > removeDeadline) {\n throw new Error(\n `r3fWaitForObjectRemoved(\"${idOrUuid}\") timed out after ${timeout}ms. Object is still in the scene.`,\n );\n }\n\n return cy.window({ log: false }).then((win) => {\n const api = resolveApiFromWindow(win);\n if (!api || !api._ready) {\n return cy.wait(pollIntervalMs, { log: false }).then(() => pollForRemoved());\n }\n\n const stillPresent = (api.getByTestId(idOrUuid) ?? api.getByUuid(idOrUuid)) !== null;\n if (!stillPresent) {\n Cypress.log({\n name: 'r3fWaitForObjectRemoved',\n message: `\"${idOrUuid}\" removed`,\n });\n return;\n }\n\n return cy.wait(pollIntervalMs, { log: false }).then(() => pollForRemoved());\n });\n }\n\n return waitForBridge();\n },\n );\n}\n","// @react-three-dom/cypress\n// Cypress E2E testing SDK for React Three Fiber apps\n//\n// Usage in cypress/support/e2e.ts:\n// import '@react-three-dom/cypress';\n//\n// This auto-registers all custom commands and Chai assertions.\n\n/// <reference types=\"cypress\" />\n\nimport { registerCommands } from './commands';\nimport { registerAssertions } from './assertions';\nimport { registerWaiters } from './waiters';\n\n// Auto-register on import\nregisterCommands();\nregisterAssertions();\nregisterWaiters();\n\n// Re-export types for programmatic use\nexport type {\n ObjectMetadata,\n ObjectInspection,\n SceneSnapshot,\n SnapshotNode,\n BridgeDiagnostics,\n CameraState,\n R3FDOM,\n} from './types';\nexport type { SceneDiff, SceneDiffChange } from './diffSnapshots';\nexport { diffSnapshots } from './diffSnapshots';\nexport { R3FReporter, registerR3FTasks } from './reporter';\n"]}
|