@roomle/web-sdk 3.6.0 → 3.7.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/lib/{BufferGeometry-DLEagG41.mjs → BufferGeometry-C696z6r3.mjs} +2 -2
  2. package/lib/{BufferGeometry-DLEagG41.mjs.map → BufferGeometry-C696z6r3.mjs.map} +1 -1
  3. package/lib/ConfiguratorKernel.js +54 -73
  4. package/lib/ConfiguratorKernel.wasm +0 -0
  5. package/lib/{GLTFExporter-D8qsdwDK.mjs → GLTFExporter-AfQIvZAD.mjs} +141 -141
  6. package/lib/{GLTFExporter-D8qsdwDK.mjs.map → GLTFExporter-AfQIvZAD.mjs.map} +1 -1
  7. package/lib/{Object3D-DSjIOhON.mjs → Object3D-C3wqWk6O.mjs} +1 -1
  8. package/lib/{Object3D-DSjIOhON.mjs.map → Object3D-C3wqWk6O.mjs.map} +1 -1
  9. package/lib/{PointLightHelper-BnjxGaOG.mjs → PointLightHelper-wVSmrAnD.mjs} +4 -4
  10. package/lib/{PointLightHelper-BnjxGaOG.mjs.map → PointLightHelper-wVSmrAnD.mjs.map} +1 -1
  11. package/lib/RoomleCore.js +59 -79
  12. package/lib/RoomleCore.wasm +0 -0
  13. package/lib/RoomleToolsCore.js +54 -74
  14. package/lib/RoomleToolsCore.wasm +0 -0
  15. package/lib/{SpotLightHelper-DqsfqCrs.mjs → SpotLightHelper-C7J95t4f.mjs} +3 -3
  16. package/lib/{SpotLightHelper-DqsfqCrs.mjs.map → SpotLightHelper-C7J95t4f.mjs.map} +1 -1
  17. package/lib/{USDZExporter-DxIqi8St.mjs → USDZExporter-BBk0APeK.mjs} +3 -3
  18. package/lib/{USDZExporter-DxIqi8St.mjs.map → USDZExporter-BBk0APeK.mjs.map} +1 -1
  19. package/lib/{Vector4-DGmBYfpK.mjs → Vector4-DUqY3Egg.mjs} +2 -2
  20. package/lib/{Vector4-DGmBYfpK.mjs.map → Vector4-DUqY3Egg.mjs.map} +1 -1
  21. package/lib/{api-xDJ-Uyom.mjs → api-oYzhcs_W.mjs} +2 -2
  22. package/lib/{api-xDJ-Uyom.mjs.map → api-oYzhcs_W.mjs.map} +1 -1
  23. package/lib/asset-loader.worker-A7nEeQB4.mjs +6 -0
  24. package/lib/asset-loader.worker-A7nEeQB4.mjs.map +1 -0
  25. package/lib/{banana-for-scale-C_iNmlCT.mjs → banana-for-scale-D8t2dmc7.mjs} +4 -4
  26. package/lib/banana-for-scale-D8t2dmc7.mjs.map +1 -0
  27. package/lib/budgeteer.sw-CQWYbQSc.mjs +6 -0
  28. package/lib/budgeteer.sw-CQWYbQSc.mjs.map +1 -0
  29. package/lib/{common-utils-DMSTohiS.mjs → common-utils-qErzZAiR.mjs} +2 -2
  30. package/lib/common-utils-qErzZAiR.mjs.map +1 -0
  31. package/lib/{component-dimensioning-CvRmUja4.mjs → component-dimensioning-DlB7-9Om.mjs} +49 -49
  32. package/lib/{component-dimensioning-CvRmUja4.mjs.map → component-dimensioning-DlB7-9Om.mjs.map} +1 -1
  33. package/lib/{component-raycast-helper-CEp7wy9c.mjs → component-raycast-helper-C6ptEb0K.mjs} +27 -32
  34. package/lib/component-raycast-helper-C6ptEb0K.mjs.map +1 -0
  35. package/lib/component-raycast-helper-LrhRpeDD.mjs +2 -0
  36. package/lib/configurator-CRMunIq7.mjs +45 -0
  37. package/lib/{configurator-CmuhFgC9.mjs.map → configurator-CRMunIq7.mjs.map} +1 -1
  38. package/lib/configurator-DqiW717d.mjs +2 -0
  39. package/lib/{continuous-drawing-helper-v_5UAM9A.mjs → continuous-drawing-helper-BwulJHKj.mjs} +12 -12
  40. package/lib/continuous-drawing-helper-BwulJHKj.mjs.map +1 -0
  41. package/lib/dat.gui.module-CZHqOVGq.mjs +1500 -0
  42. package/lib/dat.gui.module-CZHqOVGq.mjs.map +1 -0
  43. package/lib/{decorate-C1QnXPYw.mjs → decorate-BAtqSPNS.mjs} +3 -3
  44. package/lib/decorate-BAtqSPNS.mjs.map +1 -0
  45. package/lib/{dimensioning-helper-Fwpt1HTT.mjs → dimensioning-helper--Y0Y-Wr1.mjs} +42 -42
  46. package/lib/{dimensioning-helper-Fwpt1HTT.mjs.map → dimensioning-helper--Y0Y-Wr1.mjs.map} +1 -1
  47. package/lib/dimensioning-helper-BpUreWo2.mjs +2 -0
  48. package/lib/{fflate.module-dFNj5UPI.mjs → fflate.module-CBz7CLOg.mjs} +1 -1
  49. package/lib/{fflate.module-dFNj5UPI.mjs.map → fflate.module-CBz7CLOg.mjs.map} +1 -1
  50. package/lib/{glb-viewer-BzNA9-zH.mjs → glb-viewer-CXEoIw1b.mjs} +48 -48
  51. package/lib/glb-viewer-CXEoIw1b.mjs.map +1 -0
  52. package/lib/glb-viewer-IDXgmONx.mjs +2 -0
  53. package/lib/{homag-intelligence-BwGjJEws.mjs → homag-intelligence-gb9MqBrz.mjs} +6 -3
  54. package/lib/{homag-intelligence-BwGjJEws.mjs.map → homag-intelligence-gb9MqBrz.mjs.map} +1 -1
  55. package/lib/{imos-ix-poc-export-helper-CQh94HsO.mjs → imos-ix-poc-export-helper-CW7QZhhn.mjs} +5 -4
  56. package/lib/imos-ix-poc-export-helper-CW7QZhhn.mjs.map +1 -0
  57. package/lib/{kernel-BAQSG9r5.mjs → kernel-C7YDLxq8.mjs} +3 -2
  58. package/lib/kernel-C7YDLxq8.mjs.map +1 -0
  59. package/lib/{kernel-utils-H74uNY1h.mjs → kernel-utils-DCnHzW4n.mjs} +15 -15
  60. package/lib/kernel-utils-DCnHzW4n.mjs.map +1 -0
  61. package/lib/{layer-C_JtkhdO.mjs → layer-CFAr2mK_.mjs} +1 -1
  62. package/lib/{layer-C_JtkhdO.mjs.map → layer-CFAr2mK_.mjs.map} +1 -1
  63. package/lib/{main-CtVIB52l.mjs → main-BJZ9-cDk.mjs} +14470 -14187
  64. package/lib/main-BJZ9-cDk.mjs.map +1 -0
  65. package/lib/{material-viewer-Bq4smZ6f.mjs → material-viewer-D8Nmpwg0.mjs} +41 -41
  66. package/lib/material-viewer-D8Nmpwg0.mjs.map +1 -0
  67. package/lib/packages-Uv53SHfb.mjs +4 -0
  68. package/lib/planner-5VarJrpy.mjs +44 -0
  69. package/lib/{planner-CVw_xzGh.mjs.map → planner-5VarJrpy.mjs.map} +1 -1
  70. package/lib/planner-DJcn-iih.mjs +2 -0
  71. package/lib/{plugin-system-D9K46xJk.mjs → plugin-system-DInww4H_.mjs} +3 -3
  72. package/lib/{plugin-system-D9K46xJk.mjs.map → plugin-system-DInww4H_.mjs.map} +1 -1
  73. package/lib/rolldown-runtime-DgwB9i60.mjs +13 -0
  74. package/lib/roomle-headless-setup-LoBO7UJe.mjs +1150 -0
  75. package/lib/roomle-headless-setup-LoBO7UJe.mjs.map +1 -0
  76. package/lib/roomle-headless.d.ts +9910 -0
  77. package/lib/roomle-headless.js +321 -0
  78. package/lib/roomle-headless.js.map +1 -0
  79. package/lib/roomle-renderer-DVlJsHYn.mjs +49 -0
  80. package/lib/roomle-renderer-DVlJsHYn.mjs.map +1 -0
  81. package/lib/roomle-sdk.d.ts +466 -1129
  82. package/lib/roomle-sdk.js +8 -7
  83. package/lib/roomle-webgpu-renderer-CVxBRv6o.mjs +217 -0
  84. package/lib/roomle-webgpu-renderer-CVxBRv6o.mjs.map +1 -0
  85. package/lib/{scene-renderer-D8HkTFeZ.mjs → scene-renderer-BHZrQYAH.mjs} +501 -518
  86. package/lib/scene-renderer-BHZrQYAH.mjs.map +1 -0
  87. package/lib/script-loader-gpkcl1h-.mjs +86 -0
  88. package/lib/script-loader-gpkcl1h-.mjs.map +1 -0
  89. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  90. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCallback.d.ts +3 -3
  91. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCallback.js +3 -3
  92. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCallback.js.map +1 -1
  93. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +5 -3
  94. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js +1 -1
  95. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js.map +1 -1
  96. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreCallback.d.ts +1 -0
  97. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreCallback.js +3 -0
  98. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreCallback.js.map +1 -1
  99. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +4 -3
  100. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
  101. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/loader/configurationLoader.d.ts +3 -2
  102. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/loader/configurationLoader.js +31 -9
  103. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/loader/configurationLoader.js.map +1 -1
  104. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/loader/configurationManager.js +8 -1
  105. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/loader/configurationManager.js.map +1 -1
  106. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.js +54 -73
  107. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  108. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js +59 -79
  109. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  110. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.js +54 -74
  111. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  112. package/lib/{stats-helper-HM0TaIM5.mjs → stats-helper-Cv5SoEWT.mjs} +4 -3
  113. package/lib/{stats-helper-HM0TaIM5.mjs.map → stats-helper-Cv5SoEWT.mjs.map} +1 -1
  114. package/lib/{three.core-CLIofecG.mjs → three.core-mM-jZdgg.mjs} +926 -926
  115. package/lib/{three.core-CLIofecG.mjs.map → three.core-mM-jZdgg.mjs.map} +1 -1
  116. package/lib/{three.module-C4Q1skJQ.mjs → three.module-Bmy3sVQ-.mjs} +1210 -1210
  117. package/lib/{three.module-C4Q1skJQ.mjs.map → three.module-Bmy3sVQ-.mjs.map} +1 -1
  118. package/lib/{three.webgpu-dFspy2yF.mjs → three.webgpu-BbVYfCDp.mjs} +5360 -2940
  119. package/lib/{three.webgpu-dFspy2yF.mjs.map → three.webgpu-BbVYfCDp.mjs.map} +1 -1
  120. package/lib/three.webgpu-Bnp8Whu8.mjs +3 -0
  121. package/lib/threejs-utils-Bq4pVWBA.mjs +753 -0
  122. package/lib/threejs-utils-Bq4pVWBA.mjs.map +1 -0
  123. package/lib/{tools-core-Bf9WsK5v.mjs → tools-core-DqnhFefF.mjs} +6 -6
  124. package/lib/{tools-core-Bf9WsK5v.mjs.map → tools-core-DqnhFefF.mjs.map} +1 -1
  125. package/lib/workers-BJYv3y38.mjs +6 -0
  126. package/lib/workers-BJYv3y38.mjs.map +1 -0
  127. package/package.json +20 -5
  128. package/lib/banana-for-scale-C_iNmlCT.mjs.map +0 -1
  129. package/lib/common-utils-DMSTohiS.mjs.map +0 -1
  130. package/lib/component-raycast-helper-CEp7wy9c.mjs.map +0 -1
  131. package/lib/configurator-BaUt4_LF.mjs +0 -2
  132. package/lib/configurator-CmuhFgC9.mjs +0 -45
  133. package/lib/continuous-drawing-helper-v_5UAM9A.mjs.map +0 -1
  134. package/lib/decorate-C1QnXPYw.mjs.map +0 -1
  135. package/lib/dimensioning-helper-DTcW85Oq.mjs +0 -2
  136. package/lib/glb-viewer-BzNA9-zH.mjs.map +0 -1
  137. package/lib/glb-viewer-DOxBD5k-.mjs +0 -2
  138. package/lib/imos-ix-poc-export-helper-CQh94HsO.mjs.map +0 -1
  139. package/lib/kernel-BAQSG9r5.mjs.map +0 -1
  140. package/lib/kernel-utils-H74uNY1h.mjs.map +0 -1
  141. package/lib/main-CtVIB52l.mjs.map +0 -1
  142. package/lib/material-viewer-Bq4smZ6f.mjs.map +0 -1
  143. package/lib/planner-CVw_xzGh.mjs +0 -44
  144. package/lib/planner-si70gWA2.mjs +0 -2
  145. package/lib/scene-renderer-D8HkTFeZ.mjs.map +0 -1
  146. package/lib/script-loader-D8xCRzTr.mjs +0 -45
  147. package/lib/script-loader-D8xCRzTr.mjs.map +0 -1
  148. package/lib/threejs-utils-jEzvlJF1.mjs +0 -2233
  149. package/lib/threejs-utils-jEzvlJF1.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomle-headless-setup-LoBO7UJe.mjs","names":["#registered"],"sources":["../../packages/headless-core/src/setup-environment.ts"],"sourcesContent":["import {\n createCanvas as createNapiCanvas,\n Image as NapiImage,\n ImageData as NapiImageData,\n} from '@napi-rs/canvas';\nimport { createRequire } from 'module';\nimport { GlobalWindow, PropertySymbol } from 'happy-dom';\nimport type { IOptionalBrowserSettings } from 'happy-dom';\n\n// Network APIs and built-ins that happy-dom must not override —\n// we rely on Node/Bun native implementations for these.\nconst IGNORE_LIST = [\n 'fetch',\n 'Response',\n 'Request',\n 'Headers',\n 'AbortController',\n 'AbortSignal',\n 'ReadableStream',\n 'WritableStream',\n 'TransformStream',\n 'FormData',\n 'URL',\n 'URLSearchParams',\n 'constructor',\n 'undefined',\n 'NaN',\n 'global',\n 'globalThis',\n];\n\nclass GlobalRegistrator {\n static #registered: {\n [key: string | symbol]: PropertyDescriptor | null;\n } | null = null;\n\n public static get isRegistered(): boolean {\n return this.#registered !== null;\n }\n\n public static register(options?: {\n width?: number;\n height?: number;\n url?: string;\n settings?: IOptionalBrowserSettings;\n }): void {\n if (this.#registered !== null) {\n throw new Error(\n 'Failed to register. Happy DOM has already been globally registered.',\n );\n }\n\n const window = new GlobalWindow({\n ...options,\n console: globalThis.console,\n });\n\n this.#registered = {};\n\n const propertyDescriptors = Object.getOwnPropertyDescriptors(window);\n\n for (const key of Object.keys(propertyDescriptors)) {\n if (!IGNORE_LIST.includes(key)) {\n const windowPropertyDescriptor = propertyDescriptors[key];\n const globalPropertyDescriptor = Object.getOwnPropertyDescriptor(\n globalThis,\n key,\n );\n\n if (\n globalPropertyDescriptor?.value === undefined ||\n globalPropertyDescriptor?.value !== windowPropertyDescriptor?.value\n ) {\n this.#registered[key] = globalPropertyDescriptor || null;\n\n if (windowPropertyDescriptor?.value === window) {\n (window as any)[key] = globalThis;\n windowPropertyDescriptor.value = globalThis;\n }\n\n Object.defineProperty(globalThis, key, {\n ...windowPropertyDescriptor,\n configurable: true,\n });\n }\n }\n }\n\n const propertySymbols = Object.getOwnPropertySymbols(window);\n\n for (const key of propertySymbols) {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(window, key);\n this.#registered[key] = null;\n\n if (propertyDescriptor!.value === window) {\n (window as any)[key] = globalThis;\n propertyDescriptor!.value = globalThis;\n }\n\n Object.defineProperty(globalThis, key, {\n ...propertyDescriptor,\n configurable: true,\n });\n }\n\n (globalThis as any).document[PropertySymbol.defaultView] = globalThis;\n }\n\n public static async unregister(): Promise<void> {\n if (this.#registered === null) {\n throw new Error(\n 'Failed to unregister. Happy DOM has not previously been globally registered.',\n );\n }\n\n const happyDOM = (globalThis as any).happyDOM;\n\n for (const key of Object.keys(this.#registered)) {\n if (this.#registered[key] !== null) {\n Object.defineProperty(globalThis, key, this.#registered[key]!);\n } else {\n delete (globalThis as any)[key];\n }\n }\n\n this.#registered = null;\n\n if (happyDOM) {\n await happyDOM.close();\n }\n }\n}\n\n// Resolves the bundle directory so root-relative Vite asset URLs like\n// \"/default_256.exr\" can be mapped to real files next to the bundle.\n// We use a bare `import.meta.url` (not wrapped in `new URL(…, import.meta.url)`)\n// because Rollup replaces the latter pattern with a data: URI at build time.\nconst _setupRequire = createRequire(import.meta.url);\nconst _fsSync = _setupRequire('fs');\nconst _pathSync = _setupRequire('path');\nconst _urlSync = _setupRequire('url');\nlet _bundleDir = '';\ntry {\n _bundleDir = _pathSync.dirname(_urlSync.fileURLToPath(import.meta.url));\n} catch {\n // Not a file: URL (e.g. some test runners) — root-relative resolution skipped.\n}\n\n/** Maps a root-relative path (e.g. \"/default_256.exr\") to a local file path\n * next to the bundle. Returns null when the file doesn't exist. */\nconst _resolveRootRelative = (urlPath: string): string | null => {\n if (!_bundleDir || !urlPath.startsWith('/') || urlPath.startsWith('//')) {\n return null;\n }\n const candidate = _pathSync.join(_bundleDir, urlPath);\n return _fsSync.existsSync(candidate) ? candidate : null;\n};\n\n// Patch globalThis.fetch to handle:\n// 1. file:// URLs — Node/undici rejects these natively; Bun accepts them.\n// 2. Root-relative URLs (e.g. \"/default_256.exr\") — emitted by Vite's ?url\n// transform; no web server in Node means native fetch throws \"Invalid URL\".\nconst _nativeFetch = globalThis.fetch;\nglobalThis.fetch = async (\n input: string | URL | Request,\n init?: RequestInit,\n): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : (input as any).url ?? String(input);\n\n if (url.startsWith('file://')) {\n const buffer = _fsSync.readFileSync(_urlSync.fileURLToPath(url));\n return new Response(buffer, {\n status: 200,\n headers: { 'Content-Type': 'application/octet-stream' },\n });\n }\n\n if (url.startsWith('/') && !url.startsWith('//')) {\n const localPath = _resolveRootRelative(url);\n if (localPath) {\n return new Response(_fsSync.readFileSync(localPath), {\n status: 200,\n headers: { 'Content-Type': 'application/octet-stream' },\n });\n }\n console.warn(\n `[headless] fetch: root-relative asset not found: ${url} (bundle dir: ${_bundleDir || 'unknown'})`,\n );\n return new Response(null, { status: 404, statusText: 'Not Found' });\n }\n\n return _nativeFetch.call(this, input, init);\n};\n\n// Proxy-wrap globalThis.Request so root-relative paths are converted to\n// file:// URLs before the constructor validates them. Three.js's FileLoader\n// calls `new Request(url)` before fetch(), so our fetch patch above is never\n// reached if the constructor throws first.\nconst _OrigRequest = (globalThis as any).Request;\nif (_OrigRequest) {\n (globalThis as any).Request = new Proxy(_OrigRequest, {\n construct(Target: any, [input, init]: [any, any]) {\n if (\n typeof input === 'string' &&\n input.startsWith('/') &&\n !input.startsWith('//')\n ) {\n const localPath =\n _resolveRootRelative(input) ??\n _pathSync.join(_bundleDir || '/tmp', input);\n input = _urlSync.pathToFileURL(localPath).href;\n }\n return Reflect.construct(\n Target,\n init !== undefined ? [input, init] : [input],\n Target,\n );\n },\n get(target: any, prop: string | symbol) {\n return target[prop];\n },\n });\n}\n\nGlobalRegistrator.register();\n\n// Provide napi-rs/canvas ImageData globally — GLTFExporter uses `new ImageData(…)`\n// directly, and we excluded happy-dom's version from the registration above.\nif (typeof (globalThis as any).ImageData === 'undefined') {\n (globalThis as any).ImageData = NapiImageData;\n}\n\n// Symbol for storing the underlying NapiImage on wrapper elements so that\n// the patched 2d context can unwrap it before calling the native drawImage.\nconst NAPI_IMAGE = Symbol('napiImage');\n\nconst origCreateElement = document.createElement.bind(document);\nconst origCreateElementNS = document.createElementNS.bind(document);\n\n// Patches a napi-rs/canvas 2d context so drawImage() unwraps NAPI_IMAGE wrappers.\n// Skia's native drawImage only accepts its own Image/Canvas types.\nconst patchContext2d = (ctx: any): any => {\n const origDrawImage = ctx.drawImage.bind(ctx);\n ctx.drawImage = (image: any, ...args: any[]) => {\n const real = image?.[NAPI_IMAGE] ?? image;\n return origDrawImage(real, ...args);\n };\n return ctx;\n};\n\nlet createHeadlessGL: ((w: number, h: number, opts?: any) => any) | null = null;\n\ntry {\n // @ts-ignore -- We do not install gl by default during dev, only when consuming the sdk for headless mode, this is temporary.\n const { createContext } = await import('gl');\n createHeadlessGL = createContext;\n console.log('[headless] Using headless-gl (ANGLE) for real WebGL rendering');\n} catch (e) {\n console.log(e);\n console.log('[headless] headless-gl not available, using mock WebGL context');\n}\n\n// No-op WebGL2 context — all draw calls are no-ops but Three.js initialises\n// successfully. Used when headless-gl is unavailable (Bun).\nconst createMockWebGL2Context = (canvas: any): any => {\n let _id = 1;\n const nextId = () => ({ _mockId: _id++ });\n\n const ctx: Record<string, any> = {\n canvas,\n drawingBufferWidth: canvas.width || 300,\n drawingBufferHeight: canvas.height || 150,\n drawingBufferColorSpace: 'srgb',\n\n // ── Capability queries ──\n getParameter(pname: number) {\n const params: Record<number, any> = {\n 0x1f02: 'WebGL 2.0 (Mock)', // VERSION\n 0x8b8c: 'OpenGL ES GLSL ES 3.00', // SHADING_LANGUAGE_VERSION\n 0x1f00: 'Mock', // VENDOR\n 0x1f01: 'Mock Headless Renderer', // RENDERER\n 0x0d33: 16384, // MAX_TEXTURE_SIZE\n 0x851c: 16, // MAX_TEXTURE_IMAGE_UNITS\n 0x8869: 16, // MAX_VERTEX_ATTRIBS\n 0x8872: 32, // MAX_COMBINED_TEXTURE_IMAGE_UNITS\n 0x8dfb: 32, // MAX_VARYING_VECTORS\n 0x8b4c: 4096, // MAX_VERTEX_UNIFORM_VECTORS\n 0x8b49: 4096, // MAX_FRAGMENT_UNIFORM_VECTORS\n 0x88ff: 16, // MAX_VERTEX_TEXTURE_IMAGE_UNITS\n 0x8073: 2048, // MAX_3D_TEXTURE_SIZE\n 0x8cdf: 32, // MAX_COLOR_ATTACHMENTS\n 0x8824: 8, // MAX_DRAW_BUFFERS\n 0x80e9: 65536, // MAX_ELEMENTS_VERTICES\n 0x80ea: 65536, // MAX_ELEMENTS_INDICES\n 0x9122: 16, // MAX_SAMPLES\n 0x8d6b: 2048, // MAX_ARRAY_TEXTURE_LAYERS\n 0x8a2b: 16384, // MAX_UNIFORM_BLOCK_SIZE\n 0x8c2b: 16, // MAX_VERTEX_UNIFORM_BLOCKS\n 0x8a30: 24, // MAX_UNIFORM_BUFFER_BINDINGS\n 0x8a2f: 256, // UNIFORM_BUFFER_OFFSET_ALIGNMENT\n 0x0d32: new Int32Array([16384, 16384]), // MAX_VIEWPORT_DIMS\n 0x84fe: 16, // MAX_TEXTURE_MAX_ANISOTROPY_EXT\n 0x8b4a: 4096, // MAX_FRAGMENT_UNIFORM_COMPONENTS\n 0x8b4d: 4096, // MAX_VERTEX_UNIFORM_COMPONENTS\n 0x8c8a: 0, // MAX_VARYING_COMPONENTS\n 0x0b71: 1, // DEPTH_BITS\n 0x0d55: 4, // PACK_ALIGNMENT\n 0x0cf5: 4, // UNPACK_ALIGNMENT\n 0x9245: 0, // UNPACK_ROW_LENGTH\n 0x9243: 0, // UNPACK_IMAGE_HEIGHT\n 0x9244: 0, // UNPACK_SKIP_PIXELS\n 0x9246: 0, // UNPACK_SKIP_ROWS\n 0x9247: 0, // UNPACK_SKIP_IMAGES\n };\n return params[pname] ?? 0;\n },\n\n getExtension(name: string) {\n if (\n name === 'EXT_texture_filter_anisotropic' ||\n name === 'WEBKIT_EXT_texture_filter_anisotropic'\n ) {\n return {\n TEXTURE_MAX_ANISOTROPY_EXT: 0x84fe,\n MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\n };\n }\n if (\n name === 'EXT_color_buffer_float' ||\n name === 'EXT_color_buffer_half_float' ||\n name === 'OES_texture_float_linear' ||\n name === 'OES_texture_half_float_linear' ||\n name === 'EXT_float_blend'\n ) {\n return {};\n }\n return null;\n },\n\n getSupportedExtensions() {\n return [\n 'EXT_texture_filter_anisotropic',\n 'EXT_color_buffer_float',\n 'OES_texture_float_linear',\n 'OES_texture_half_float_linear',\n 'EXT_float_blend',\n ];\n },\n\n // ── Shader / Program ──\n createShader: () => nextId(),\n shaderSource() {},\n compileShader() {},\n getShaderParameter(_s: any, pname: number) {\n return pname === 0x8b81 ? true : 0; // COMPILE_STATUS\n },\n getShaderInfoLog() {\n return '';\n },\n deleteShader() {},\n createProgram: () => nextId(),\n attachShader() {},\n linkProgram() {},\n getProgramParameter(_p: any, pname: number) {\n if (pname === 0x8b82) {\n return true;\n } // LINK_STATUS\n if (pname === 0x8b86) {\n return 0;\n } // ACTIVE_UNIFORMS\n if (pname === 0x8b89) {\n return 0;\n } // ACTIVE_ATTRIBUTES\n if (pname === 0x8a36) {\n return 0;\n } // ACTIVE_UNIFORM_BLOCKS\n if (pname === 0x8c76) {\n return 0;\n } // TRANSFORM_FEEDBACK_VARYINGS\n return 0;\n },\n getProgramInfoLog() {\n return '';\n },\n useProgram() {},\n deleteProgram() {},\n detachShader() {},\n validateProgram() {},\n\n // ── Precision ──\n getShaderPrecisionFormat() {\n return { rangeMin: 127, rangeMax: 127, precision: 23 };\n },\n\n // ── Uniforms / Attributes ──\n getAttribLocation() {\n return 0;\n },\n getUniformLocation() {\n return nextId();\n },\n getActiveAttrib() {\n return { name: 'a', type: 0x1406, size: 1 };\n },\n getActiveUniform() {\n return { name: 'u', type: 0x1406, size: 1 };\n },\n uniform1f() {},\n uniform2f() {},\n uniform3f() {},\n uniform4f() {},\n uniform1i() {},\n uniform2i() {},\n uniform3i() {},\n uniform4i() {},\n uniform1ui() {},\n uniform2ui() {},\n uniform3ui() {},\n uniform4ui() {},\n uniform1fv() {},\n uniform2fv() {},\n uniform3fv() {},\n uniform4fv() {},\n uniform1iv() {},\n uniform2iv() {},\n uniform3iv() {},\n uniform4iv() {},\n uniform1uiv() {},\n uniform2uiv() {},\n uniform3uiv() {},\n uniform4uiv() {},\n uniformMatrix2fv() {},\n uniformMatrix3fv() {},\n uniformMatrix4fv() {},\n uniformMatrix2x3fv() {},\n uniformMatrix3x2fv() {},\n uniformMatrix2x4fv() {},\n uniformMatrix4x2fv() {},\n uniformMatrix3x4fv() {},\n uniformMatrix4x3fv() {},\n\n // ── Buffers ──\n createBuffer: () => nextId(),\n bindBuffer() {},\n bufferData() {},\n bufferSubData() {},\n deleteBuffer() {},\n getBufferSubData() {},\n copyBufferSubData() {},\n isBuffer() {\n return true;\n },\n bindBufferBase() {},\n bindBufferRange() {},\n\n // ── Vertex Arrays ──\n createVertexArray: () => nextId(),\n bindVertexArray() {},\n deleteVertexArray() {},\n isVertexArray() {\n return true;\n },\n enableVertexAttribArray() {},\n disableVertexAttribArray() {},\n vertexAttribPointer() {},\n vertexAttribIPointer() {},\n vertexAttribDivisor() {},\n vertexAttrib1f() {},\n vertexAttrib2f() {},\n vertexAttrib3f() {},\n vertexAttrib4f() {},\n vertexAttrib1fv() {},\n vertexAttrib2fv() {},\n vertexAttrib3fv() {},\n vertexAttrib4fv() {},\n\n // ── Textures ──\n createTexture: () => nextId(),\n bindTexture() {},\n activeTexture() {},\n pixelStorei() {},\n texImage2D() {},\n texImage3D() {},\n texSubImage2D() {},\n texSubImage3D() {},\n compressedTexImage2D() {},\n compressedTexSubImage2D() {},\n compressedTexImage3D() {},\n compressedTexSubImage3D() {},\n texParameteri() {},\n texParameterf() {},\n texStorage2D() {},\n texStorage3D() {},\n generateMipmap() {},\n deleteTexture() {},\n copyTexImage2D() {},\n copyTexSubImage2D() {},\n isTexture() {\n return true;\n },\n\n // ── Framebuffers ──\n createFramebuffer: () => nextId(),\n bindFramebuffer() {},\n deleteFramebuffer() {},\n framebufferTexture2D() {},\n framebufferTextureLayer() {},\n framebufferRenderbuffer() {},\n checkFramebufferStatus() {\n return 0x8cd5;\n }, // FRAMEBUFFER_COMPLETE\n readPixels() {},\n blitFramebuffer() {},\n invalidateFramebuffer() {},\n readBuffer() {},\n drawBuffers() {},\n isFramebuffer() {\n return true;\n },\n\n // ── Renderbuffers ──\n createRenderbuffer: () => nextId(),\n bindRenderbuffer() {},\n renderbufferStorage() {},\n renderbufferStorageMultisample() {},\n deleteRenderbuffer() {},\n isRenderbuffer() {\n return true;\n },\n getRenderbufferParameter() {\n return 0;\n },\n\n // ── Draw / Clear ──\n clear() {},\n clearColor() {},\n clearDepth() {},\n clearStencil() {},\n colorMask() {},\n depthMask() {},\n stencilMask() {},\n stencilMaskSeparate() {},\n viewport() {},\n scissor() {},\n drawArrays() {},\n drawElements() {},\n drawArraysInstanced() {},\n drawElementsInstanced() {},\n drawRangeElements() {},\n\n // ── State ──\n enable() {},\n disable() {},\n isEnabled() {\n return false;\n },\n blendFunc() {},\n blendFuncSeparate() {},\n blendEquation() {},\n blendEquationSeparate() {},\n blendColor() {},\n depthFunc() {},\n depthRange() {},\n stencilFunc() {},\n stencilFuncSeparate() {},\n stencilOp() {},\n stencilOpSeparate() {},\n cullFace() {},\n frontFace() {},\n lineWidth() {},\n polygonOffset() {},\n sampleCoverage() {},\n\n // ── Transform Feedback ──\n createTransformFeedback: () => nextId(),\n bindTransformFeedback() {},\n beginTransformFeedback() {},\n endTransformFeedback() {},\n transformFeedbackVaryings() {},\n deleteTransformFeedback() {},\n pauseTransformFeedback() {},\n resumeTransformFeedback() {},\n\n // ── Queries ──\n createQuery: () => nextId(),\n deleteQuery() {},\n beginQuery() {},\n endQuery() {},\n getQueryParameter() {\n return 0;\n },\n getQuery(): null {\n return null;\n },\n\n // ── Sync ──\n fenceSync: () => nextId(),\n deleteSync() {},\n clientWaitSync() {\n return 0x911d;\n },\n waitSync() {},\n getSyncParameter() {\n return 0x9119;\n },\n\n // ── Samplers ──\n createSampler: () => nextId(),\n deleteSampler() {},\n bindSampler() {},\n samplerParameteri() {},\n samplerParameterf() {},\n isSampler() {\n return true;\n },\n\n // ── Uniform Blocks ──\n getUniformBlockIndex() {\n return 0;\n },\n uniformBlockBinding() {},\n getActiveUniformBlockParameter() {\n return 0;\n },\n getActiveUniformBlockName() {\n return '';\n },\n getUniformIndices(): any[] {\n return [];\n },\n getActiveUniforms(): any[] {\n return [];\n },\n\n // ── Misc ──\n finish() {},\n flush() {},\n getError() {\n return 0;\n },\n isContextLost() {\n return false;\n },\n getContextAttributes() {\n return {\n alpha: true,\n antialias: true,\n depth: true,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'default',\n premultipliedAlpha: true,\n preserveDrawingBuffer: false,\n stencil: true,\n desynchronized: false,\n };\n },\n getInternalformatParameter() {\n return new Int32Array([8]);\n },\n hint() {},\n makeXRCompatible() {\n return Promise.resolve();\n },\n };\n\n // WebGL 1 + 2 constants needed by Three.js\n const GL_CONSTANTS: Record<string, number> = {\n DEPTH_BUFFER_BIT: 0x00000100,\n STENCIL_BUFFER_BIT: 0x00000400,\n COLOR_BUFFER_BIT: 0x00004000,\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006,\n ZERO: 0,\n ONE: 1,\n SRC_COLOR: 0x0300,\n ONE_MINUS_SRC_COLOR: 0x0301,\n SRC_ALPHA: 0x0302,\n ONE_MINUS_SRC_ALPHA: 0x0303,\n DST_ALPHA: 0x0304,\n ONE_MINUS_DST_ALPHA: 0x0305,\n DST_COLOR: 0x0306,\n ONE_MINUS_DST_COLOR: 0x0307,\n SRC_ALPHA_SATURATE: 0x0308,\n CONSTANT_COLOR: 0x8001,\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n CONSTANT_ALPHA: 0x8003,\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n FUNC_ADD: 0x8006,\n FUNC_SUBTRACT: 0x800a,\n FUNC_REVERSE_SUBTRACT: 0x800b,\n MIN: 0x8007,\n MAX: 0x8008,\n BLEND_EQUATION: 0x8009,\n BLEND_EQUATION_RGB: 0x8009,\n BLEND_EQUATION_ALPHA: 0x883d,\n BLEND_DST_RGB: 0x80c8,\n BLEND_SRC_RGB: 0x80c9,\n BLEND_DST_ALPHA: 0x80ca,\n BLEND_SRC_ALPHA: 0x80cb,\n BLEND_COLOR: 0x8005,\n BLEND: 0x0be2,\n ARRAY_BUFFER: 0x8892,\n ELEMENT_ARRAY_BUFFER: 0x8893,\n ARRAY_BUFFER_BINDING: 0x8894,\n ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\n STREAM_DRAW: 0x88e0,\n STATIC_DRAW: 0x88e4,\n DYNAMIC_DRAW: 0x88e8,\n STREAM_READ: 0x88e1,\n STREAM_COPY: 0x88e2,\n STATIC_READ: 0x88e5,\n STATIC_COPY: 0x88e6,\n DYNAMIC_READ: 0x88e9,\n DYNAMIC_COPY: 0x88ea,\n BUFFER_SIZE: 0x8764,\n BUFFER_USAGE: 0x8765,\n CURRENT_VERTEX_ATTRIB: 0x8626,\n CULL_FACE: 0x0b44,\n FRONT: 0x0404,\n BACK: 0x0405,\n FRONT_AND_BACK: 0x0408,\n DEPTH_TEST: 0x0b71,\n DEPTH_WRITEMASK: 0x0b72,\n STENCIL_TEST: 0x0b90,\n SCISSOR_TEST: 0x0c11,\n POLYGON_OFFSET_FILL: 0x8037,\n SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\n SAMPLE_COVERAGE: 0x80a0,\n DITHER: 0x0bd0,\n NEVER: 0x0200,\n LESS: 0x0201,\n EQUAL: 0x0202,\n LEQUAL: 0x0203,\n GREATER: 0x0204,\n NOTEQUAL: 0x0205,\n GEQUAL: 0x0206,\n ALWAYS: 0x0207,\n KEEP: 0x1e00,\n REPLACE: 0x1e01,\n INCR: 0x1e02,\n DECR: 0x1e03,\n INVERT: 0x150a,\n INCR_WRAP: 0x8507,\n DECR_WRAP: 0x8508,\n NEAREST: 0x2600,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_NEAREST: 0x2700,\n LINEAR_MIPMAP_NEAREST: 0x2701,\n NEAREST_MIPMAP_LINEAR: 0x2702,\n LINEAR_MIPMAP_LINEAR: 0x2703,\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n TEXTURE_2D: 0x0de1,\n TEXTURE_3D: 0x806f,\n TEXTURE: 0x1702,\n TEXTURE_CUBE_MAP: 0x8513,\n TEXTURE_BINDING_CUBE_MAP: 0x8514,\n TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\n TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\n TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\n TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\n MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\n TEXTURE0: 0x84c0,\n TEXTURE1: 0x84c1,\n TEXTURE2: 0x84c2,\n TEXTURE3: 0x84c3,\n TEXTURE4: 0x84c4,\n TEXTURE5: 0x84c5,\n TEXTURE6: 0x84c6,\n TEXTURE7: 0x84c7,\n TEXTURE8: 0x84c8,\n TEXTURE9: 0x84c9,\n TEXTURE10: 0x84ca,\n TEXTURE11: 0x84cb,\n TEXTURE12: 0x84cc,\n TEXTURE13: 0x84cd,\n TEXTURE14: 0x84ce,\n TEXTURE15: 0x84cf,\n TEXTURE16: 0x84d0,\n TEXTURE17: 0x84d1,\n TEXTURE18: 0x84d2,\n TEXTURE19: 0x84d3,\n TEXTURE20: 0x84d4,\n TEXTURE21: 0x84d5,\n TEXTURE22: 0x84d6,\n TEXTURE23: 0x84d7,\n TEXTURE24: 0x84d8,\n TEXTURE25: 0x84d9,\n TEXTURE26: 0x84da,\n TEXTURE27: 0x84db,\n TEXTURE28: 0x84dc,\n TEXTURE29: 0x84dd,\n TEXTURE30: 0x84de,\n TEXTURE31: 0x84df,\n ACTIVE_TEXTURE: 0x84e0,\n REPEAT: 0x2901,\n CLAMP_TO_EDGE: 0x812f,\n MIRRORED_REPEAT: 0x8370,\n FLOAT: 0x1406,\n FLOAT_VEC2: 0x8b50,\n FLOAT_VEC3: 0x8b51,\n FLOAT_VEC4: 0x8b52,\n INT: 0x1404,\n INT_VEC2: 0x8b53,\n INT_VEC3: 0x8b54,\n INT_VEC4: 0x8b55,\n UNSIGNED_INT: 0x1405,\n BOOL: 0x8b56,\n BOOL_VEC2: 0x8b57,\n BOOL_VEC3: 0x8b58,\n BOOL_VEC4: 0x8b59,\n FLOAT_MAT2: 0x8b5a,\n FLOAT_MAT3: 0x8b5b,\n FLOAT_MAT4: 0x8b5c,\n SAMPLER_2D: 0x8b5e,\n SAMPLER_CUBE: 0x8b60,\n BYTE: 0x1400,\n UNSIGNED_BYTE: 0x1401,\n SHORT: 0x1402,\n UNSIGNED_SHORT: 0x1403,\n UNSIGNED_SHORT_4_4_4_4: 0x8033,\n UNSIGNED_SHORT_5_5_5_1: 0x8034,\n UNSIGNED_SHORT_5_6_5: 0x8363,\n UNSIGNED_INT_24_8: 0x84fa,\n HALF_FLOAT: 0x140b,\n FRAGMENT_SHADER: 0x8b30,\n VERTEX_SHADER: 0x8b31,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8b4c,\n MAX_VARYING_VECTORS: 0x8dfb,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x88ff,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8b49,\n SHADER_TYPE: 0x8b4f,\n DELETE_STATUS: 0x8b80,\n LINK_STATUS: 0x8b82,\n VALIDATE_STATUS: 0x8b83,\n ATTACHED_SHADERS: 0x8b85,\n ACTIVE_UNIFORMS: 0x8b86,\n ACTIVE_ATTRIBUTES: 0x8b89,\n COMPILE_STATUS: 0x8b81,\n FRAMEBUFFER: 0x8d40,\n RENDERBUFFER: 0x8d41,\n RGBA4: 0x8056,\n RGB5_A1: 0x8057,\n RGB565: 0x8d62,\n DEPTH_COMPONENT16: 0x81a5,\n DEPTH_COMPONENT24: 0x81a6,\n DEPTH_COMPONENT32F: 0x8cac,\n DEPTH24_STENCIL8: 0x88f0,\n DEPTH32F_STENCIL8: 0x8cad,\n STENCIL_INDEX8: 0x8d48,\n RENDERBUFFER_WIDTH: 0x8d42,\n RENDERBUFFER_HEIGHT: 0x8d43,\n RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\n COLOR_ATTACHMENT0: 0x8ce0,\n COLOR_ATTACHMENT1: 0x8ce1,\n COLOR_ATTACHMENT2: 0x8ce2,\n COLOR_ATTACHMENT3: 0x8ce3,\n DEPTH_ATTACHMENT: 0x8d00,\n STENCIL_ATTACHMENT: 0x8d20,\n DEPTH_STENCIL_ATTACHMENT: 0x821a,\n DEPTH_STENCIL: 0x84f9,\n FRAMEBUFFER_COMPLETE: 0x8cd5,\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\n FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\n FRAMEBUFFER_BINDING: 0x8ca6,\n RENDERBUFFER_BINDING: 0x8ca7,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n INVALID_FRAMEBUFFER_OPERATION: 0x0506,\n UNPACK_FLIP_Y_WEBGL: 0x9240,\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\n UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\n READ_BUFFER: 0x0c02,\n UNPACK_ROW_LENGTH: 0x0cf2,\n UNPACK_SKIP_ROWS: 0x0cf3,\n UNPACK_SKIP_PIXELS: 0x0cf4,\n PACK_ROW_LENGTH: 0x0d02,\n PACK_SKIP_ROWS: 0x0d03,\n PACK_SKIP_PIXELS: 0x0d04,\n TEXTURE_BINDING_3D: 0x806a,\n UNPACK_SKIP_IMAGES: 0x806d,\n UNPACK_IMAGE_HEIGHT: 0x806e,\n MAX_3D_TEXTURE_SIZE: 0x8073,\n MAX_ELEMENTS_VERTICES: 0x80e9,\n MAX_ELEMENTS_INDICES: 0x80ea,\n MAX_TEXTURE_LOD_BIAS: 0x84fd,\n MAX_DRAW_BUFFERS: 0x8824,\n DRAW_BUFFER0: 0x8825,\n MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\n MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\n MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\n MAX_VARYING_COMPONENTS: 0x8b4b,\n TEXTURE_2D_ARRAY: 0x8c1a,\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n UNIFORM_BUFFER: 0x8a11,\n UNIFORM_BUFFER_BINDING: 0x8a28,\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n TRANSFORM_FEEDBACK: 0x8e22,\n PIXEL_PACK_BUFFER: 0x88eb,\n PIXEL_UNPACK_BUFFER: 0x88ec,\n COPY_READ_BUFFER: 0x8f36,\n COPY_WRITE_BUFFER: 0x8f37,\n DRAW_FRAMEBUFFER: 0x8ca9,\n READ_FRAMEBUFFER: 0x8ca8,\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6,\n READ_FRAMEBUFFER_BINDING: 0x8caa,\n RENDERBUFFER_SAMPLES: 0x8cab,\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\n TEXTURE_COMPARE_MODE: 0x884c,\n TEXTURE_COMPARE_FUNC: 0x884d,\n COMPARE_REF_TO_TEXTURE: 0x884e,\n TEXTURE_WRAP_R: 0x8072,\n TEXTURE_MIN_LOD: 0x813a,\n TEXTURE_MAX_LOD: 0x813b,\n TEXTURE_BASE_LEVEL: 0x813c,\n TEXTURE_MAX_LEVEL: 0x813d,\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n RGBA8: 0x8058,\n RGB8: 0x8051,\n RG8: 0x822b,\n R8: 0x8229,\n RGBA16F: 0x881a,\n RGB16F: 0x881b,\n RG16F: 0x822f,\n R16F: 0x822d,\n RGBA32F: 0x8814,\n RGB32F: 0x8815,\n RG32F: 0x8230,\n R32F: 0x822e,\n RGBA8UI: 0x8d7c,\n RGBA8I: 0x8d8e,\n RGB8UI: 0x8d7d,\n RGB8I: 0x8d8f,\n RGBA16UI: 0x8d76,\n RGBA16I: 0x8d88,\n RGB16UI: 0x8d77,\n RGB16I: 0x8d89,\n RGBA32UI: 0x8d70,\n RGBA32I: 0x8d82,\n RGB32UI: 0x8d71,\n RGB32I: 0x8d83,\n R8I: 0x8231,\n R8UI: 0x8232,\n R16I: 0x8233,\n R16UI: 0x8234,\n R32I: 0x8235,\n R32UI: 0x8236,\n RG8I: 0x8237,\n RG8UI: 0x8238,\n RG16I: 0x8239,\n RG16UI: 0x823a,\n RG32I: 0x823b,\n RG32UI: 0x823c,\n R11F_G11F_B10F: 0x8c3a,\n RGB9_E5: 0x8c3d,\n SRGB8: 0x8c41,\n SRGB8_ALPHA8: 0x8c43,\n SRGB: 0x8c40,\n RGB10_A2: 0x8059,\n RGB10_A2UI: 0x906f,\n RGBA_INTEGER: 0x8d99,\n RGB_INTEGER: 0x8d98,\n RG_INTEGER: 0x8228,\n RED_INTEGER: 0x8d94,\n ALPHA: 0x1906,\n RGB: 0x1907,\n RGBA: 0x1908,\n LUMINANCE: 0x1909,\n LUMINANCE_ALPHA: 0x190a,\n DEPTH_COMPONENT: 0x1902,\n RED: 0x1903,\n RG: 0x8227,\n VERSION: 0x1f02,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\n IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\n NO_ERROR: 0,\n INVALID_ENUM: 0x0500,\n INVALID_VALUE: 0x0501,\n INVALID_OPERATION: 0x0502,\n OUT_OF_MEMORY: 0x0505,\n CW: 0x0900,\n CCW: 0x0901,\n DONT_CARE: 0x1100,\n FASTEST: 0x1101,\n NICEST: 0x1102,\n GENERATE_MIPMAP_HINT: 0x8192,\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n MAX_SAMPLES: 0x8d57,\n RASTERIZER_DISCARD: 0x8c89,\n ANY_SAMPLES_PASSED: 0x8c2f,\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n };\n\n Object.assign(ctx, GL_CONSTANTS);\n\n // Proxy so unknown constants return 0 and unknown methods return a no-op.\n return new Proxy(ctx, {\n get(target, prop) {\n if (prop in target) {\n return target[prop as string];\n }\n if (typeof prop === 'string') {\n if (/^[A-Z][A-Z0-9_]*$/.test(prop)) {\n console.warn(`[headless] Unknown WebGL constant accessed: ${prop}`);\n return 0;\n }\n return () => {};\n }\n },\n });\n};\n\n// Wraps a real headless-gl (ANGLE) context with WebGL2 constants and any\n// missing methods so Three.js sees a fully-featured WebGL2RenderingContext.\nconst createHybridWebGL2Context = (canvas: any, attrs?: any): any => {\n const w = canvas.width || 300;\n const h = canvas.height || 150;\n const realGL = createHeadlessGL!(w, h, {\n createWebGL2Context: true,\n preserveDrawingBuffer: true,\n antialias: attrs?.antialias ?? true,\n alpha: attrs?.alpha ?? true,\n });\n\n const GL2_CONSTANTS: Record<string, number> = {\n TEXTURE_2D_ARRAY: 0x8c1a,\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n TEXTURE_3D: 0x806f,\n TEXTURE_BINDING_3D: 0x806a,\n TEXTURE_WRAP_R: 0x8072,\n TEXTURE_COMPARE_MODE: 0x884c,\n TEXTURE_COMPARE_FUNC: 0x884d,\n COMPARE_REF_TO_TEXTURE: 0x884e,\n TEXTURE_MIN_LOD: 0x813a,\n TEXTURE_MAX_LOD: 0x813b,\n TEXTURE_BASE_LEVEL: 0x813c,\n TEXTURE_MAX_LEVEL: 0x813d,\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n UNIFORM_BUFFER: 0x8a11,\n UNIFORM_BUFFER_BINDING: 0x8a28,\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n TRANSFORM_FEEDBACK: 0x8e22,\n PIXEL_PACK_BUFFER: 0x88eb,\n PIXEL_UNPACK_BUFFER: 0x88ec,\n COPY_READ_BUFFER: 0x8f36,\n COPY_WRITE_BUFFER: 0x8f37,\n DRAW_FRAMEBUFFER: 0x8ca9,\n READ_FRAMEBUFFER: 0x8ca8,\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6,\n READ_FRAMEBUFFER_BINDING: 0x8caa,\n RENDERBUFFER_SAMPLES: 0x8cab,\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\n COLOR_ATTACHMENT1: 0x8ce1,\n COLOR_ATTACHMENT2: 0x8ce2,\n COLOR_ATTACHMENT3: 0x8ce3,\n DEPTH_COMPONENT24: 0x81a6,\n DEPTH_COMPONENT32F: 0x8cac,\n DEPTH24_STENCIL8: 0x88f0,\n DEPTH32F_STENCIL8: 0x8cad,\n READ_BUFFER: 0x0c02,\n UNPACK_ROW_LENGTH: 0x0cf2,\n UNPACK_SKIP_ROWS: 0x0cf3,\n UNPACK_SKIP_PIXELS: 0x0cf4,\n UNPACK_IMAGE_HEIGHT: 0x806e,\n UNPACK_SKIP_IMAGES: 0x806d,\n PACK_ROW_LENGTH: 0x0d02,\n PACK_SKIP_ROWS: 0x0d03,\n PACK_SKIP_PIXELS: 0x0d04,\n RGBA8: 0x8058,\n RGB8: 0x8051,\n RG8: 0x822b,\n R8: 0x8229,\n RGBA16F: 0x881a,\n RGB16F: 0x881b,\n RG16F: 0x822f,\n R16F: 0x822d,\n RGBA32F: 0x8814,\n RGB32F: 0x8815,\n RG32F: 0x8230,\n R32F: 0x822e,\n RGBA8UI: 0x8d7c,\n RGBA8I: 0x8d8e,\n RGB8UI: 0x8d7d,\n RGB8I: 0x8d8f,\n RGBA16UI: 0x8d76,\n RGBA16I: 0x8d88,\n RGB16UI: 0x8d77,\n RGB16I: 0x8d89,\n RGBA32UI: 0x8d70,\n RGBA32I: 0x8d82,\n RGB32UI: 0x8d71,\n RGB32I: 0x8d83,\n R8I: 0x8231,\n R8UI: 0x8232,\n R16I: 0x8233,\n R16UI: 0x8234,\n R32I: 0x8235,\n R32UI: 0x8236,\n RG8I: 0x8237,\n RG8UI: 0x8238,\n RG16I: 0x8239,\n RG16UI: 0x823a,\n RG32I: 0x823b,\n RG32UI: 0x823c,\n R11F_G11F_B10F: 0x8c3a,\n RGB9_E5: 0x8c3d,\n SRGB8: 0x8c41,\n SRGB8_ALPHA8: 0x8c43,\n SRGB: 0x8c40,\n RGB10_A2: 0x8059,\n RGB10_A2UI: 0x906f,\n RGBA_INTEGER: 0x8d99,\n RGB_INTEGER: 0x8d98,\n RG_INTEGER: 0x8228,\n RED_INTEGER: 0x8d94,\n RED: 0x1903,\n RG: 0x8227,\n HALF_FLOAT: 0x140b,\n MIN: 0x8007,\n MAX: 0x8008,\n UNSIGNED_INT_24_8: 0x84fa,\n RASTERIZER_DISCARD: 0x8c89,\n ANY_SAMPLES_PASSED: 0x8c2f,\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n MAX_3D_TEXTURE_SIZE: 0x8073,\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n MAX_DRAW_BUFFERS: 0x8824,\n DRAW_BUFFER0: 0x8825,\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n STREAM_READ: 0x88e1,\n STREAM_COPY: 0x88e2,\n STATIC_READ: 0x88e5,\n STATIC_COPY: 0x88e6,\n DYNAMIC_READ: 0x88e9,\n DYNAMIC_COPY: 0x88ea,\n VERSION: 0x1f02,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n };\n\n const origGetParameter = realGL.getParameter.bind(realGL);\n const getParameterOverrides: Record<number, any> = {\n 0x1f02: 'WebGL 2.0 (headless-gl ANGLE)', // VERSION\n 0x8b8c: 'OpenGL ES GLSL ES 3.00', // SHADING_LANGUAGE_VERSION\n 0x1f00: 'headless-gl', // VENDOR\n 0x1f01: 'ANGLE', // RENDERER\n 0x8cdf: 8, // MAX_COLOR_ATTACHMENTS\n 0x8824: 8, // MAX_DRAW_BUFFERS\n 0x8073: 2048, // MAX_3D_TEXTURE_SIZE\n 0x88ff: 2048, // MAX_ARRAY_TEXTURE_LAYERS\n 0x8a2b: 16, // MAX_VERTEX_UNIFORM_BLOCKS\n 0x8a2d: 16, // MAX_FRAGMENT_UNIFORM_BLOCKS\n 0x8a2e: 24, // MAX_COMBINED_UNIFORM_BLOCKS\n 0x8a2f: 24, // MAX_UNIFORM_BUFFER_BINDINGS\n 0x8a30: 16384, // MAX_UNIFORM_BLOCK_SIZE\n 0x8a34: 256, // UNIFORM_BUFFER_OFFSET_ALIGNMENT\n 0x8d57: 4, // MAX_SAMPLES\n 0x8cab: 4, // RENDERBUFFER_SAMPLES\n };\n\n // WebGL2 methods to stub when not present on the native context\n const noop = () => {};\n const webgl2Stubs: Record<string, any> = {\n createVertexArray:\n realGL.createVertexArray?.bind(realGL) ?? (() => ({ _mockId: 1 })),\n bindVertexArray: realGL.bindVertexArray?.bind(realGL) ?? noop,\n deleteVertexArray: realGL.deleteVertexArray?.bind(realGL) ?? noop,\n isVertexArray: realGL.isVertexArray?.bind(realGL) ?? (() => true),\n drawArraysInstanced: realGL.drawArraysInstanced?.bind(realGL) ?? noop,\n drawElementsInstanced: realGL.drawElementsInstanced?.bind(realGL) ?? noop,\n vertexAttribDivisor: realGL.vertexAttribDivisor?.bind(realGL) ?? noop,\n drawBuffers: realGL.drawBuffers?.bind(realGL) ?? noop,\n readBuffer: realGL.readBuffer?.bind(realGL) ?? noop,\n texImage3D: realGL.texImage3D?.bind(realGL) ?? noop,\n texSubImage3D: realGL.texSubImage3D?.bind(realGL) ?? noop,\n texStorage2D: realGL.texStorage2D?.bind(realGL) ?? noop,\n texStorage3D: realGL.texStorage3D?.bind(realGL) ?? noop,\n compressedTexImage3D: realGL.compressedTexImage3D?.bind(realGL) ?? noop,\n compressedTexSubImage3D:\n realGL.compressedTexSubImage3D?.bind(realGL) ?? noop,\n bindBufferBase: realGL.bindBufferBase?.bind(realGL) ?? noop,\n bindBufferRange: realGL.bindBufferRange?.bind(realGL) ?? noop,\n getUniformBlockIndex:\n realGL.getUniformBlockIndex?.bind(realGL) ?? (() => 0),\n uniformBlockBinding: realGL.uniformBlockBinding?.bind(realGL) ?? noop,\n getActiveUniformBlockParameter:\n realGL.getActiveUniformBlockParameter?.bind(realGL) ?? (() => 0),\n getActiveUniformBlockName:\n realGL.getActiveUniformBlockName?.bind(realGL) ?? (() => ''),\n getUniformIndices:\n realGL.getUniformIndices?.bind(realGL) ?? ((): any[] => []),\n getActiveUniforms:\n realGL.getActiveUniforms?.bind(realGL) ?? ((): any[] => []),\n createTransformFeedback:\n realGL.createTransformFeedback?.bind(realGL) ?? (() => ({ _mockId: 1 })),\n bindTransformFeedback: realGL.bindTransformFeedback?.bind(realGL) ?? noop,\n beginTransformFeedback: realGL.beginTransformFeedback?.bind(realGL) ?? noop,\n endTransformFeedback: realGL.endTransformFeedback?.bind(realGL) ?? noop,\n transformFeedbackVaryings:\n realGL.transformFeedbackVaryings?.bind(realGL) ?? noop,\n deleteTransformFeedback:\n realGL.deleteTransformFeedback?.bind(realGL) ?? noop,\n pauseTransformFeedback: realGL.pauseTransformFeedback?.bind(realGL) ?? noop,\n resumeTransformFeedback:\n realGL.resumeTransformFeedback?.bind(realGL) ?? noop,\n createQuery: realGL.createQuery?.bind(realGL) ?? (() => ({ _mockId: 1 })),\n deleteQuery: realGL.deleteQuery?.bind(realGL) ?? noop,\n beginQuery: realGL.beginQuery?.bind(realGL) ?? noop,\n endQuery: realGL.endQuery?.bind(realGL) ?? noop,\n getQueryParameter: realGL.getQueryParameter?.bind(realGL) ?? (() => 0),\n getQuery: realGL.getQuery?.bind(realGL) ?? ((): null => null),\n fenceSync: realGL.fenceSync?.bind(realGL) ?? (() => ({ _mockId: 1 })),\n deleteSync: realGL.deleteSync?.bind(realGL) ?? noop,\n clientWaitSync: realGL.clientWaitSync?.bind(realGL) ?? (() => 0x911d),\n waitSync: realGL.waitSync?.bind(realGL) ?? noop,\n getSyncParameter: realGL.getSyncParameter?.bind(realGL) ?? (() => 0x9119),\n createSampler:\n realGL.createSampler?.bind(realGL) ?? (() => ({ _mockId: 1 })),\n deleteSampler: realGL.deleteSampler?.bind(realGL) ?? noop,\n bindSampler: realGL.bindSampler?.bind(realGL) ?? noop,\n samplerParameteri: realGL.samplerParameteri?.bind(realGL) ?? noop,\n samplerParameterf: realGL.samplerParameterf?.bind(realGL) ?? noop,\n isSampler: realGL.isSampler?.bind(realGL) ?? (() => true),\n blitFramebuffer: realGL.blitFramebuffer?.bind(realGL) ?? noop,\n invalidateFramebuffer: realGL.invalidateFramebuffer?.bind(realGL) ?? noop,\n framebufferTextureLayer:\n realGL.framebufferTextureLayer?.bind(realGL) ?? noop,\n renderbufferStorageMultisample:\n realGL.renderbufferStorageMultisample?.bind(realGL) ?? noop,\n getBufferSubData: realGL.getBufferSubData?.bind(realGL) ?? noop,\n copyBufferSubData: realGL.copyBufferSubData?.bind(realGL) ?? noop,\n drawRangeElements: realGL.drawRangeElements?.bind(realGL) ?? noop,\n vertexAttribIPointer: realGL.vertexAttribIPointer?.bind(realGL) ?? noop,\n uniform1ui: realGL.uniform1ui?.bind(realGL) ?? noop,\n uniform2ui: realGL.uniform2ui?.bind(realGL) ?? noop,\n uniform3ui: realGL.uniform3ui?.bind(realGL) ?? noop,\n uniform4ui: realGL.uniform4ui?.bind(realGL) ?? noop,\n uniform1uiv: realGL.uniform1uiv?.bind(realGL) ?? noop,\n uniform2uiv: realGL.uniform2uiv?.bind(realGL) ?? noop,\n uniform3uiv: realGL.uniform3uiv?.bind(realGL) ?? noop,\n uniform4uiv: realGL.uniform4uiv?.bind(realGL) ?? noop,\n uniformMatrix2x3fv: realGL.uniformMatrix2x3fv?.bind(realGL) ?? noop,\n uniformMatrix3x2fv: realGL.uniformMatrix3x2fv?.bind(realGL) ?? noop,\n uniformMatrix2x4fv: realGL.uniformMatrix2x4fv?.bind(realGL) ?? noop,\n uniformMatrix4x2fv: realGL.uniformMatrix4x2fv?.bind(realGL) ?? noop,\n uniformMatrix3x4fv: realGL.uniformMatrix3x4fv?.bind(realGL) ?? noop,\n uniformMatrix4x3fv: realGL.uniformMatrix4x3fv?.bind(realGL) ?? noop,\n getInternalformatParameter:\n realGL.getInternalformatParameter?.bind(realGL) ??\n (() => new Int32Array([8])),\n };\n\n return new Proxy(realGL, {\n get(target: any, prop: string | symbol) {\n if (typeof prop !== 'string') {\n return target[prop];\n }\n\n if (prop === 'canvas') {\n return canvas;\n }\n if (prop === 'drawingBufferWidth') {\n return canvas.width || 300;\n }\n if (prop === 'drawingBufferHeight') {\n return canvas.height || 150;\n }\n if (prop === 'drawingBufferColorSpace') {\n return 'srgb';\n }\n\n if (prop === 'getParameter') {\n return (pname: number) => {\n if (pname in getParameterOverrides) {\n return getParameterOverrides[pname];\n }\n try {\n return origGetParameter(pname);\n } catch {\n return 0;\n }\n };\n }\n\n if (prop in webgl2Stubs && typeof target[prop] !== 'function') {\n return webgl2Stubs[prop];\n }\n if (prop in GL2_CONSTANTS && !(prop in target)) {\n return GL2_CONSTANTS[prop];\n }\n\n const value = target[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n },\n });\n};\n\n// Wraps a napi-rs/canvas Canvas so it behaves like an HTMLCanvasElement.\n// Fakes the prototype chain via Proxy getPrototypeOf (GLTFExporter checks instanceof).\n// The 2d context's drawImage is patched to unwrap NAPI_IMAGE symbols.\nconst createCanvasProxy = (\n width: number = 300,\n height: number = 150,\n): HTMLCanvasElement => {\n const napiCanvas = createNapiCanvas(width, height);\n let cachedCtx: any = null;\n let cachedWebGLCtx: any = null;\n\n const proxy = new Proxy(napiCanvas as unknown as HTMLCanvasElement, {\n get(target: any, prop: string | symbol) {\n if (prop === 'style') {\n return target._style ?? (target._style = {});\n }\n if (prop === 'classList') {\n return (\n target._classList ??\n (target._classList = {\n add() {},\n remove() {},\n contains() {\n return false;\n },\n toggle() {},\n })\n );\n }\n if (prop === Symbol.toStringTag) {\n return 'HTMLCanvasElement';\n }\n\n if (prop === 'getContext') {\n return (contextType: string, attrs?: any) => {\n if (contextType === '2d') {\n if (!cachedCtx) {\n cachedCtx = patchContext2d(target.getContext('2d', attrs));\n }\n return cachedCtx;\n }\n if (contextType === 'webgl2' || contextType === 'webgl') {\n if (!cachedWebGLCtx) {\n cachedWebGLCtx = createHeadlessGL\n ? createHybridWebGL2Context(proxy, attrs)\n : createMockWebGL2Context(proxy);\n }\n return cachedWebGLCtx;\n }\n return target.getContext(contextType, attrs);\n };\n }\n\n if (prop === 'addEventListener' || prop === 'removeEventListener') {\n return () => {};\n }\n\n if (prop === 'getBoundingClientRect') {\n return () => ({\n x: 0,\n y: 0,\n width: target.width,\n height: target.height,\n top: 0,\n left: 0,\n bottom: target.height,\n right: target.width,\n });\n }\n\n // When a real GL context exists, blit its pixels into the 2d canvas\n // before exporting so the image contains actual rendered content.\n if (prop === 'toDataURL' && cachedWebGLCtx && createHeadlessGL) {\n return (mimeType?: string, quality?: number) => {\n const w = target.width;\n const h = target.height;\n const pixels = new Uint8Array(w * h * 4);\n cachedWebGLCtx.readPixels(\n 0,\n 0,\n w,\n h,\n cachedWebGLCtx.RGBA ?? 0x1908,\n cachedWebGLCtx.UNSIGNED_BYTE ?? 0x1401,\n pixels,\n );\n // GL produces bottom-up rows; flip for canvas coordinate system.\n const flipped = new Uint8Array(w * h * 4);\n const rowSize = w * 4;\n for (let y = 0; y < h; y++) {\n flipped.set(\n pixels.subarray((h - y - 1) * rowSize, (h - y) * rowSize),\n y * rowSize,\n );\n }\n const ctx2d = target.getContext('2d');\n ctx2d.putImageData(\n new NapiImageData(new Uint8ClampedArray(flipped.buffer), w, h),\n 0,\n 0,\n );\n return target.toDataURL(mimeType, quality);\n };\n }\n\n const value = target[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n },\n\n set(target: any, prop: string | symbol, value: any) {\n target[prop] = value;\n // Resize the ANGLE framebuffer when the canvas dimensions change.\n if (\n cachedWebGLCtx &&\n createHeadlessGL &&\n (prop === 'width' || prop === 'height')\n ) {\n const ext = cachedWebGLCtx.getExtension?.(\n 'STACKGL_resize_drawingbuffer',\n );\n if (ext) {\n ext.resize(target.width, target.height);\n }\n }\n return true;\n },\n\n getPrototypeOf() {\n return HTMLCanvasElement.prototype;\n },\n });\n\n return proxy;\n};\n\n// Creates a happy-dom HTMLImageElement backed by a napi-rs/canvas Image so that\n// images are actually decoded and canvas drawImage() works correctly.\nconst createNapiImageElement = (): HTMLImageElement => {\n const el = origCreateElementNS(\n 'http://www.w3.org/1999/xhtml',\n 'img',\n ) as HTMLImageElement;\n const napiImg = new NapiImage();\n\n (el as any)[NAPI_IMAGE] = napiImg;\n\n let currentSrc = '';\n Object.defineProperty(el, 'src', {\n get() {\n return currentSrc;\n },\n set(url: string) {\n currentSrc = url;\n napiImg.src = url;\n },\n configurable: true,\n });\n\n napiImg.onload = () => {\n Object.defineProperty(el, 'width', {\n value: napiImg.width,\n writable: true,\n configurable: true,\n });\n Object.defineProperty(el, 'height', {\n value: napiImg.height,\n writable: true,\n configurable: true,\n });\n Object.defineProperty(el, 'naturalWidth', {\n value: napiImg.naturalWidth,\n configurable: true,\n });\n Object.defineProperty(el, 'naturalHeight', {\n value: napiImg.naturalHeight,\n configurable: true,\n });\n Object.defineProperty(el, 'complete', { value: true, configurable: true });\n el.dispatchEvent(new Event('load'));\n };\n\n napiImg.onerror = (err: Error) => {\n el.dispatchEvent(\n new ErrorEvent('error', { error: err, message: err?.message }),\n );\n };\n\n return el;\n};\n\ndocument.createElement = (\n tagName: string,\n options?: ElementCreationOptions,\n) => {\n if (tagName.toLowerCase() === 'canvas') {\n return createCanvasProxy();\n }\n return origCreateElement(tagName, options);\n};\n\ndocument.createElementNS = (\n namespaceURI: string | null,\n qualifiedName: string,\n options?: ElementCreationOptions,\n) => {\n const tag = qualifiedName.toLowerCase();\n if (tag === 'canvas') {\n return createCanvasProxy();\n }\n if (tag === 'img') {\n return createNapiImageElement();\n }\n return origCreateElementNS(namespaceURI, qualifiedName, options);\n};\n"],"mappings":"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"}