tangram-core 0.3.0__cp310-cp310-manylinux_2_28_aarch64.whl

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 (162) hide show
  1. tangram_core/App.vue +441 -0
  2. tangram_core/CommandPalette.vue +200 -0
  3. tangram_core/HighlightText.vue +32 -0
  4. tangram_core/__Timeline.vue +300 -0
  5. tangram_core/__init__.py +5 -0
  6. tangram_core/__main__.py +331 -0
  7. tangram_core/_core.cpython-310-aarch64-linux-gnu.so +0 -0
  8. tangram_core/_core.pyi +38 -0
  9. tangram_core/api.ts +652 -0
  10. tangram_core/backend.py +458 -0
  11. tangram_core/components.ts +2 -0
  12. tangram_core/config.py +167 -0
  13. tangram_core/dist-frontend/aggregation-layers.js +521 -0
  14. tangram_core/dist-frontend/aggregation-layers.js.map +1 -0
  15. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js +2 -0
  16. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
  17. tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js +11 -0
  18. tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js.map +1 -0
  19. tangram_core/dist-frontend/assets/assert-cyW4mg7q.js +3 -0
  20. tangram_core/dist-frontend/assets/assert-cyW4mg7q.js.map +1 -0
  21. tangram_core/dist-frontend/assets/b612-latin-400-italic-DePNXA0a.woff +0 -0
  22. tangram_core/dist-frontend/assets/b612-latin-400-italic-a-4GLPtl.woff2 +0 -0
  23. tangram_core/dist-frontend/assets/b612-latin-400-normal-CC98FVm_.woff2 +0 -0
  24. tangram_core/dist-frontend/assets/b612-latin-400-normal-JbZ7xwUX.woff +0 -0
  25. tangram_core/dist-frontend/assets/b612-latin-700-normal-B_Snq1wd.woff +0 -0
  26. tangram_core/dist-frontend/assets/b612-latin-700-normal-BinQrnoB.woff2 +0 -0
  27. tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js +26 -0
  28. tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js.map +1 -0
  29. tangram_core/dist-frontend/assets/color-CUNNsFV-.js +17 -0
  30. tangram_core/dist-frontend/assets/color-CUNNsFV-.js.map +1 -0
  31. tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js +2 -0
  32. tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js.map +1 -0
  33. tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js +2 -0
  34. tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js.map +1 -0
  35. tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js +2 -0
  36. tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js.map +1 -0
  37. tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js +1010 -0
  38. tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js.map +1 -0
  39. tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js +94 -0
  40. tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js.map +1 -0
  41. tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js +2 -0
  42. tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js.map +1 -0
  43. tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js +2 -0
  44. tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js.map +1 -0
  45. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-DTZQ6lD6.woff2 +0 -0
  46. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-HYADljCo.woff +0 -0
  47. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-ByjKuJjN.woff2 +0 -0
  48. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-DzgUY3Rl.woff +0 -0
  49. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-BaHVOdFB.woff2 +0 -0
  50. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-yvPjCxxx.woff +0 -0
  51. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-D0Kpgs_9.woff2 +0 -0
  52. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-Dlt-daqV.woff +0 -0
  53. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-ByiM2lek.woff +0 -0
  54. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-DfC_iMic.woff2 +0 -0
  55. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DLCFFAUf.woff +0 -0
  56. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DuasYmn8.woff2 +0 -0
  57. tangram_core/dist-frontend/assets/index-CcogpxdD.js +824 -0
  58. tangram_core/dist-frontend/assets/index-CcogpxdD.js.map +1 -0
  59. tangram_core/dist-frontend/assets/index-SSLdizTv.css +1 -0
  60. tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js +555 -0
  61. tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js.map +1 -0
  62. tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js +2 -0
  63. tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js.map +1 -0
  64. tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js +1123 -0
  65. tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js.map +1 -0
  66. tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js +2 -0
  67. tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js.map +1 -0
  68. tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js +2 -0
  69. tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js.map +1 -0
  70. tangram_core/dist-frontend/assets/project-BTjD2Imj.js +760 -0
  71. tangram_core/dist-frontend/assets/project-BTjD2Imj.js.map +1 -0
  72. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-4qS3_zkX.woff2 +0 -0
  73. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-CDK-EZBY.woff +0 -0
  74. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-Bgns473E.woff +0 -0
  75. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-_T2aQlWs.woff2 +0 -0
  76. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-CvEVpWxD.woff +0 -0
  77. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-s4PklZE0.woff2 +0 -0
  78. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-9RN-Z7cI.woff2 +0 -0
  79. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-BGMkBBYx.woff +0 -0
  80. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-C7erd-g8.woff +0 -0
  81. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-DR5R5TWx.woff2 +0 -0
  82. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-DGo1Ayjq.woff2 +0 -0
  83. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-WtM1l1qc.woff +0 -0
  84. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-C8FNIdXm.woff2 +0 -0
  85. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-TLDmfi3Q.woff +0 -0
  86. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CTXjXnze.woff2 +0 -0
  87. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CWPRiRXS.woff +0 -0
  88. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-CR6qj4Z4.woff2 +0 -0
  89. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-DHRaIs10.woff +0 -0
  90. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-D5vBSIyg.woff2 +0 -0
  91. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-FabMgVmk.woff +0 -0
  92. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-BIN62cw9.woff +0 -0
  93. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-Hsn-wDIp.woff2 +0 -0
  94. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-89Up2Xly.woff +0 -0
  95. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-DWMOA2VK.woff2 +0 -0
  96. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-D_BR-3LG.woff2 +0 -0
  97. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-om57GXsO.woff +0 -0
  98. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-BICmKrXV.woff2 +0 -0
  99. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-D2e7XwB1.woff +0 -0
  100. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-3p2daRJW.woff2 +0 -0
  101. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-Dc9bsamC.woff +0 -0
  102. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-BOl6B_hI.woff +0 -0
  103. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-DRbp0YnP.woff2 +0 -0
  104. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-BXrkWnoY.woff +0 -0
  105. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-Bhem1d5z.woff2 +0 -0
  106. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-DT8nEsYA.woff +0 -0
  107. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-OHaX69iP.woff2 +0 -0
  108. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-CcSTXKtO.woff2 +0 -0
  109. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-JgPl2bDS.woff +0 -0
  110. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-B004qtqu.woff2 +0 -0
  111. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-O6H_RRvN.woff +0 -0
  112. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-BwUYFJ2t.woff2 +0 -0
  113. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-DV8QogUk.woff +0 -0
  114. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-0o1laQ-g.woff2 +0 -0
  115. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-CPsdS8_S.woff +0 -0
  116. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-G9shSJ2z.woff +0 -0
  117. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-TFWhjk13.woff2 +0 -0
  118. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-BtNeb9D6.woff +0 -0
  119. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-D35V1G0s.woff2 +0 -0
  120. tangram_core/dist-frontend/assets/shader-Cbdysp2j.js +843 -0
  121. tangram_core/dist-frontend/assets/shader-Cbdysp2j.js.map +1 -0
  122. tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js +392 -0
  123. tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js.map +1 -0
  124. tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js +2 -0
  125. tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js.map +1 -0
  126. tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js +7 -0
  127. tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js.map +1 -0
  128. tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js +3 -0
  129. tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js.map +1 -0
  130. tangram_core/dist-frontend/assets/widget-BjgEeHAL.js +2 -0
  131. tangram_core/dist-frontend/assets/widget-BjgEeHAL.js.map +1 -0
  132. tangram_core/dist-frontend/core.js +60 -0
  133. tangram_core/dist-frontend/core.js.map +1 -0
  134. tangram_core/dist-frontend/extensions.js +609 -0
  135. tangram_core/dist-frontend/extensions.js.map +1 -0
  136. tangram_core/dist-frontend/favicon.ico +0 -0
  137. tangram_core/dist-frontend/favicon.png +0 -0
  138. tangram_core/dist-frontend/geo-layers.js +115 -0
  139. tangram_core/dist-frontend/geo-layers.js.map +1 -0
  140. tangram_core/dist-frontend/index.html +39 -0
  141. tangram_core/dist-frontend/json.js +3 -0
  142. tangram_core/dist-frontend/json.js.map +1 -0
  143. tangram_core/dist-frontend/layers.js +268 -0
  144. tangram_core/dist-frontend/layers.js.map +1 -0
  145. tangram_core/dist-frontend/mapbox.js +2 -0
  146. tangram_core/dist-frontend/mapbox.js.map +1 -0
  147. tangram_core/dist-frontend/mesh-layers.js +2 -0
  148. tangram_core/dist-frontend/mesh-layers.js.map +1 -0
  149. tangram_core/dist-frontend/widgets.js +3 -0
  150. tangram_core/dist-frontend/widgets.js.map +1 -0
  151. tangram_core/main.ts +28 -0
  152. tangram_core/package.json +62 -0
  153. tangram_core/plugin.py +109 -0
  154. tangram_core/plugin.ts +47 -0
  155. tangram_core/redis.py +89 -0
  156. tangram_core/user.css +114 -0
  157. tangram_core/utils.ts +143 -0
  158. tangram_core/vite-plugin-tangram.mjs +155 -0
  159. tangram_core-0.3.0.dist-info/METADATA +101 -0
  160. tangram_core-0.3.0.dist-info/RECORD +162 -0
  161. tangram_core-0.3.0.dist-info/WHEEL +4 -0
  162. tangram_core-0.3.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-developer-tools-utTNOsNf.js","sources":["../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/assert.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/globals.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/log-utils/log.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/option-utils/merge-loader-options.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/version.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/assert.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/globals.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-job.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/node/worker_threads-browser.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-loadable-worker-url.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-transfer-list.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-thread.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-pool.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-farm.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/get-worker-url.js","../../../../node_modules/.pnpm/@loaders.gl+worker-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/validate-worker-version.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/worker-loader-utils/parse-with-worker.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/array-buffer-utils.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/iterators/async-iteration.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/file-aliases.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/memory-conversion-utils.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/get-cwd.js","../../../../node_modules/.pnpm/@loaders.gl+loader-utils@4.3.4_@loaders.gl+core@4.3.4/node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/path.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/javascript-utils/is-type.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/fetch/fetch-error.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/utils/mime-type-utils.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/utils/url-utils.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/utils/resource-utils.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/utils/response-utils.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/fetch/fetch-file.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/loggers.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/option-defaults.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/option-utils.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/normalize-loader.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/api/register-loaders.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/api/select-loader.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-string-iterator.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-array-buffer-iterator.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-blob-iterator.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-stream-iterator.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-iterator.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/get-data.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/get-fetch-function.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/loader-utils/loader-context.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/api/parse.js","../../../../node_modules/.pnpm/@loaders.gl+core@4.3.4/node_modules/@loaders.gl/core/dist/lib/api/load.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/debug/index.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/lifecycle/constants.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/utils/flatten.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/transitions/transition.js","../../../../node_modules/.pnpm/@luma.gl+constants@9.2.6/node_modules/@luma.gl/constants/dist/webgl-constants.js","../../../../node_modules/.pnpm/@luma.gl+webgl@9.2.6_@luma.gl+core@9.2.6/node_modules/@luma.gl/webgl/dist/utils/load-script.js","../../../../node_modules/.pnpm/@luma.gl+webgl@9.2.6_@luma.gl+core@9.2.6/node_modules/@luma.gl/webgl/dist/context/debug/spector.js","../../../../node_modules/.pnpm/@luma.gl+webgl@9.2.6_@luma.gl+core@9.2.6/node_modules/@luma.gl/webgl/dist/context/debug/webgl-developer-tools.js"],"sourcesContent":["/**\n * Throws an `Error` with the optional `message` if `condition` is falsy\n * @note Replacement for the external assert method to reduce bundle size\n */\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n","// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in a browser */\nexport const isBrowser = \n// @ts-ignore process does not exist on browser\nBoolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\n/** true if running in a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log } from '@probe.gl/log';\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.3.3\" !== 'undefined' ? \"4.3.3\" : 'latest';\nconst version = VERSION[0] >= '0' && VERSION[0] <= '9' ? `v${VERSION}` : '';\n// Make sure we set the global variable\nfunction createLog() {\n const log = new Log({ id: 'loaders.gl' });\n globalThis.loaders = globalThis.loaders || {};\n globalThis.loaders.log = log;\n globalThis.loaders.version = version;\n globalThis.probe = globalThis.probe || {};\n globalThis.probe.loaders = log;\n return log;\n}\nexport const log = createLog();\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n *\n * @param baseOptions Can be undefined, in which case a fresh options object will be minted\n * @param newOptions\n * @returns\n */\nexport function mergeLoaderOptions(baseOptions, newOptions) {\n return mergeOptionsRecursively(baseOptions || {}, newOptions);\n}\nfunction mergeOptionsRecursively(baseOptions, newOptions, level = 0) {\n // Sanity check (jest test runner overwrites the console object which can lead to infinite recursion)\n if (level > 3) {\n return newOptions;\n }\n const options = { ...baseOptions };\n for (const [key, newValue] of Object.entries(newOptions)) {\n if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) {\n options[key] = mergeOptionsRecursively(options[key] || {}, newOptions[key], level + 1);\n // Object.assign(options[key] as object, newOptions[key]);\n }\n else {\n options[key] = newOptions[key];\n }\n }\n return options;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n/**\n * TODO - unpkg.com doesn't seem to have a `latest` specifier for alpha releases...\n * 'beta' on beta branch, 'latest' on prod branch\n */\nexport const NPM_TAG = 'latest';\nfunction getVersion() {\n if (!globalThis._loadersgl_?.version) {\n globalThis._loadersgl_ = globalThis._loadersgl_ || {};\n // __VERSION__ is injected by babel-plugin-version-inline\n if (typeof \"4.3.3\" === 'undefined') {\n // eslint-disable-next-line\n console.warn('loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.');\n globalThis._loadersgl_.version = NPM_TAG;\n }\n else {\n globalThis._loadersgl_.version = \"4.3.3\";\n }\n }\n return globalThis._loadersgl_.version;\n}\nexport const VERSION = getVersion();\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\n/** Throws an `Error` with the optional `message` if `condition` is falsy */\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loaders.gl assertion failed.');\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in the browser, false if running in Node.js */\nexport const isBrowser = \n// @ts-ignore process.browser\ntypeof process !== 'object' || String(process) !== '[object process]' || process.browser;\n/** true if running on a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n/** true if running on a mobile device */\nexport const isMobile = typeof window !== 'undefined' && typeof window.orientation !== 'undefined';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Version of Node.js if running under Node, otherwise 0 */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n name;\n workerThread;\n isRunning = true;\n /** Promise that resolves when Job is done */\n result;\n _resolve = () => { };\n _reject = () => { };\n constructor(jobName, workerThread) {\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Send a message to the job's worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n */\n postMessage(type, payload) {\n this.workerThread.postMessage({\n source: 'loaders.gl', // Lets worker ignore unrelated messages\n type,\n payload\n });\n }\n /**\n * Call to resolve the `result` Promise with the supplied value\n */\n done(value) {\n assert(this.isRunning);\n this.isRunning = false;\n this._resolve(value);\n }\n /**\n * Call to reject the `result` Promise with the supplied error\n */\n error(error) {\n assert(this.isRunning);\n this.isRunning = false;\n this._reject(error);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Browser polyfill for Node.js built-in `worker_threads` module.\n * These fills are non-functional, and just intended to ensure that\n * `import 'worker_threads` doesn't break browser builds.\n * The replacement is done in package.json browser field\n */\nexport class NodeWorker {\n terminate() { }\n}\nexport const parentPort = null;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nconst workerURLCache = new Map();\n/**\n * Creates a loadable URL from worker source or URL\n * that can be used to create `Worker` instances.\n * Due to CORS issues it may be necessary to wrap a URL in a small importScripts\n * @param props\n * @param props.source Worker source\n * @param props.url Worker URL\n * @returns loadable url\n */\nexport function getLoadableWorkerURL(props) {\n assert((props.source && !props.url) || (!props.source && props.url)); // Either source or url must be defined\n let workerURL = workerURLCache.get(props.source || props.url);\n if (!workerURL) {\n // Differentiate worker urls from worker source code\n if (props.url) {\n workerURL = getLoadableWorkerURLFromURL(props.url);\n workerURLCache.set(props.url, workerURL);\n }\n if (props.source) {\n workerURL = getLoadableWorkerURLFromSource(props.source);\n workerURLCache.set(props.source, workerURL);\n }\n }\n assert(workerURL);\n return workerURL;\n}\n/**\n * Build a loadable worker URL from worker URL\n * @param url\n * @returns loadable URL\n */\nfunction getLoadableWorkerURLFromURL(url) {\n // A local script url, we can use it to initialize a Worker directly\n if (!url.startsWith('http')) {\n return url;\n }\n // A remote script, we need to use `importScripts` to load from different origin\n const workerSource = buildScriptSource(url);\n return getLoadableWorkerURLFromSource(workerSource);\n}\n/**\n * Build a loadable worker URL from worker source\n * @param workerSource\n * @returns loadable url\n */\nfunction getLoadableWorkerURLFromSource(workerSource) {\n const blob = new Blob([workerSource], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n/**\n * Per spec, worker cannot be initialized with a script from a different origin\n * However a local worker script can still import scripts from other origins,\n * so we simply build a wrapper script.\n *\n * @param workerUrl\n * @returns source\n */\nfunction buildScriptSource(workerUrl) {\n return `\\\ntry {\n importScripts('${workerUrl}');\n} catch (error) {\n console.error(error);\n throw error;\n}`;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// NOTE - there is a copy of this function is both in core and loader-utils\n// core does not need all the utils in loader-utils, just this one.\n/**\n * Returns an array of Transferrable objects that can be used with postMessage\n * https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param object data to be sent via postMessage\n * @param recursive - not for application use\n * @param transfers - not for application use\n * @returns a transfer list that can be passed to postMessage\n */\nexport function getTransferList(object, recursive = true, transfers) {\n // Make sure that items in the transfer list is unique\n const transfersSet = transfers || new Set();\n if (!object) {\n // ignore\n }\n else if (isTransferable(object)) {\n transfersSet.add(object);\n }\n else if (isTransferable(object.buffer)) {\n // Typed array\n transfersSet.add(object.buffer);\n }\n else if (ArrayBuffer.isView(object)) {\n // object is a TypeArray viewing into a SharedArrayBuffer (not transferable)\n // Do not iterate through the content in this case\n }\n else if (recursive && typeof object === 'object') {\n for (const key in object) {\n // Avoid perf hit - only go one level deep\n getTransferList(object[key], recursive, transfersSet);\n }\n }\n // If transfers is defined, is internal recursive call\n // Otherwise it's called by the user\n return transfers === undefined ? Array.from(transfersSet) : [];\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Transferable\nfunction isTransferable(object) {\n if (!object) {\n return false;\n }\n if (object instanceof ArrayBuffer) {\n return true;\n }\n if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {\n return true;\n }\n if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {\n return true;\n }\n // @ts-ignore\n if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {\n return true;\n }\n return false;\n}\n/**\n * Recursively drop non serializable values like functions and regexps.\n * @param object\n */\nexport function getTransferListForWriter(object) {\n if (object === null) {\n return {};\n }\n const clone = Object.assign({}, object);\n Object.keys(clone).forEach((key) => {\n // Typed Arrays and Arrays are passed with no change\n if (typeof object[key] === 'object' &&\n !ArrayBuffer.isView(object[key]) &&\n !(object[key] instanceof Array)) {\n clone[key] = getTransferListForWriter(object[key]);\n }\n else if (typeof clone[key] === 'function' || clone[key] instanceof RegExp) {\n clone[key] = {};\n }\n else {\n clone[key] = object[key];\n }\n });\n return clone;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { NodeWorker } from \"../node/worker_threads.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { assert } from \"../env-utils/assert.js\";\nimport { getLoadableWorkerURL } from \"../worker-utils/get-loadable-worker-url.js\";\nimport { getTransferList } from \"../worker-utils/get-transfer-list.js\";\nconst NOOP = () => { };\n/**\n * Represents one worker thread\n */\nexport default class WorkerThread {\n name;\n source;\n url;\n terminated = false;\n worker;\n onMessage;\n onError;\n _loadableURL = '';\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return ((typeof Worker !== 'undefined' && isBrowser) ||\n (typeof NodeWorker !== 'undefined' && !isBrowser));\n }\n constructor(props) {\n const { name, source, url } = props;\n assert(source || url); // Either source or url must be defined\n this.name = name;\n this.source = source;\n this.url = url;\n this.onMessage = NOOP;\n this.onError = (error) => console.log(error); // eslint-disable-line\n this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();\n }\n /**\n * Terminate this worker thread\n * @note Can free up significant memory\n */\n destroy() {\n this.onMessage = NOOP;\n this.onError = NOOP;\n this.worker.terminate(); // eslint-disable-line @typescript-eslint/no-floating-promises\n this.terminated = true;\n }\n get isRunning() {\n return Boolean(this.onMessage);\n }\n /**\n * Send a message to this worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n * @param transferList If not supplied, calculated automatically by traversing data\n */\n postMessage(data, transferList) {\n transferList = transferList || getTransferList(data);\n // @ts-ignore\n this.worker.postMessage(data, transferList);\n }\n // PRIVATE\n /**\n * Generate a standard Error from an ErrorEvent\n * @param event\n */\n _getErrorFromErrorEvent(event) {\n // Note Error object does not have the expected fields if loading failed completely\n // https://developer.mozilla.org/en-US/docs/Web/API/Worker#Event_handlers\n // https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n let message = 'Failed to load ';\n message += `worker ${this.name} from ${this.url}. `;\n if (event.message) {\n message += `${event.message} in `;\n }\n // const hasFilename = event.filename && !event.filename.startsWith('blob:');\n // message += hasFilename ? event.filename : this.source.slice(0, 100);\n if (event.lineno) {\n message += `:${event.lineno}:${event.colno}`;\n }\n return new Error(message);\n }\n /**\n * Creates a worker thread on the browser\n */\n _createBrowserWorker() {\n this._loadableURL = getLoadableWorkerURL({ source: this.source, url: this.url });\n const worker = new Worker(this._loadableURL, { name: this.name });\n worker.onmessage = (event) => {\n if (!event.data) {\n this.onError(new Error('No data received'));\n }\n else {\n this.onMessage(event.data);\n }\n };\n // This callback represents an uncaught exception in the worker thread\n worker.onerror = (error) => {\n this.onError(this._getErrorFromErrorEvent(error));\n this.terminated = true;\n };\n // TODO - not clear when this would be called, for now just log in case it happens\n worker.onmessageerror = (event) => console.error(event); // eslint-disable-line\n return worker;\n }\n /**\n * Creates a worker thread in node.js\n * @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool\n */\n _createNodeWorker() {\n let worker;\n if (this.url) {\n // Make sure relative URLs start with './'\n const absolute = this.url.includes(':/') || this.url.startsWith('/');\n const url = absolute ? this.url : `./${this.url}`;\n // console.log('Starting work from', url);\n worker = new NodeWorker(url, { eval: false });\n }\n else if (this.source) {\n worker = new NodeWorker(this.source, { eval: true });\n }\n else {\n throw new Error('no worker');\n }\n worker.on('message', (data) => {\n // console.error('message', data);\n this.onMessage(data);\n });\n worker.on('error', (error) => {\n // console.error('error', error);\n this.onError(error);\n });\n worker.on('exit', (code) => {\n // console.error('exit', code);\n });\n return worker;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isMobile, isBrowser } from \"../env-utils/globals.js\";\nimport WorkerThread from \"./worker-thread.js\";\nimport WorkerJob from \"./worker-job.js\";\n/**\n * Process multiple data messages with small pool of identical workers\n */\nexport default class WorkerPool {\n name = 'unnamed';\n source; // | Function;\n url;\n maxConcurrency = 1;\n maxMobileConcurrency = 1;\n onDebug = () => { };\n reuseWorkers = true;\n props = {};\n jobQueue = [];\n idleQueue = [];\n count = 0;\n isDestroyed = false;\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return WorkerThread.isSupported();\n }\n /**\n * @param processor - worker function\n * @param maxConcurrency - max count of workers\n */\n constructor(props) {\n this.source = props.source;\n this.url = props.url;\n this.setProps(props);\n }\n /**\n * Terminates all workers in the pool\n * @note Can free up significant memory\n */\n destroy() {\n // Destroy idle workers, active Workers will be destroyed on completion\n this.idleQueue.forEach((worker) => worker.destroy());\n this.isDestroyed = true;\n }\n setProps(props) {\n this.props = { ...this.props, ...props };\n if (props.name !== undefined) {\n this.name = props.name;\n }\n if (props.maxConcurrency !== undefined) {\n this.maxConcurrency = props.maxConcurrency;\n }\n if (props.maxMobileConcurrency !== undefined) {\n this.maxMobileConcurrency = props.maxMobileConcurrency;\n }\n if (props.reuseWorkers !== undefined) {\n this.reuseWorkers = props.reuseWorkers;\n }\n if (props.onDebug !== undefined) {\n this.onDebug = props.onDebug;\n }\n }\n async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {\n // Promise resolves when thread starts working on this job\n const startPromise = new Promise((onStart) => {\n // Promise resolves when thread completes or fails working on this job\n this.jobQueue.push({ name, onMessage, onError, onStart });\n return this;\n });\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n return await startPromise;\n }\n // PRIVATE\n /**\n * Starts first queued job if worker is available or can be created\n * Called when job is started and whenever a worker returns to the idleQueue\n */\n async _startQueuedJob() {\n if (!this.jobQueue.length) {\n return;\n }\n const workerThread = this._getAvailableWorker();\n if (!workerThread) {\n return;\n }\n // We have a worker, dequeue and start the job\n const queuedJob = this.jobQueue.shift();\n if (queuedJob) {\n // Emit a debug event\n // @ts-ignore\n this.onDebug({\n message: 'Starting job',\n name: queuedJob.name,\n workerThread,\n backlog: this.jobQueue.length\n });\n // Create a worker job to let the app access thread and manage job completion\n const job = new WorkerJob(queuedJob.name, workerThread);\n // Set the worker thread's message handlers\n workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);\n workerThread.onError = (error) => queuedJob.onError(job, error);\n // Resolve the start promise so that the app can start sending messages to worker\n queuedJob.onStart(job);\n // Wait for the app to signal that the job is complete, then return worker to queue\n try {\n await job.result;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Worker exception: ${error}`);\n }\n finally {\n this.returnWorkerToQueue(workerThread);\n }\n }\n }\n /**\n * Returns a worker to the idle queue\n * Destroys the worker if\n * - pool is destroyed\n * - if this pool doesn't reuse workers\n * - if maxConcurrency has been lowered\n * @param worker\n */\n returnWorkerToQueue(worker) {\n const shouldDestroyWorker = \n // Workers on Node.js prevent the process from exiting.\n // Until we figure out how to close them before exit, we always destroy them\n !isBrowser ||\n // If the pool is destroyed, there is no reason to keep the worker around\n this.isDestroyed ||\n // If the app has disabled worker reuse, any completed workers should be destroyed\n !this.reuseWorkers ||\n // If concurrency has been lowered, this worker might be surplus to requirements\n this.count > this._getMaxConcurrency();\n if (shouldDestroyWorker) {\n worker.destroy();\n this.count--;\n }\n else {\n this.idleQueue.push(worker);\n }\n if (!this.isDestroyed) {\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n /**\n * Returns idle worker or creates new worker if maxConcurrency has not been reached\n */\n _getAvailableWorker() {\n // If a worker has completed and returned to the queue, it can be used\n if (this.idleQueue.length > 0) {\n return this.idleQueue.shift() || null;\n }\n // Create fresh worker if we haven't yet created the max amount of worker threads for this worker source\n if (this.count < this._getMaxConcurrency()) {\n this.count++;\n const name = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;\n return new WorkerThread({ name, source: this.source, url: this.url });\n }\n // No worker available, have to wait\n return null;\n }\n _getMaxConcurrency() {\n return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport WorkerPool from \"./worker-pool.js\";\nimport WorkerThread from \"./worker-thread.js\";\nconst DEFAULT_PROPS = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => { }\n};\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n props;\n workerPools = new Map();\n // singleton\n static _workerFarm;\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return WorkerThread.isSupported();\n }\n /** Get the singleton instance of the global worker farm */\n static getWorkerFarm(props = {}) {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n WorkerFarm._workerFarm.setProps(props);\n return WorkerFarm._workerFarm;\n }\n /** get global instance with WorkerFarm.getWorkerFarm() */\n constructor(props) {\n this.props = { ...DEFAULT_PROPS };\n this.setProps(props);\n /** @type Map<string, WorkerPool>} */\n this.workerPools = new Map();\n }\n /**\n * Terminate all workers in the farm\n * @note Can free up significant memory\n */\n destroy() {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n this.workerPools = new Map();\n }\n /**\n * Set props used when initializing worker pools\n * @param props\n */\n setProps(props) {\n this.props = { ...this.props, ...props };\n // Update worker pool props\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n /**\n * Returns a worker pool for the specified worker\n * @param options - only used first time for a specific worker name\n * @param options.name - the name of the worker - used to identify worker pool\n * @param options.url -\n * @param options.source -\n * @example\n * const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n */\n getWorkerPool(options) {\n const { name, source, url } = options;\n let workerPool = this.workerPools.get(name);\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n return workerPool;\n }\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { VERSION, NPM_TAG } from \"../env-utils/version.js\";\n/**\n * Gets worker object's name (for debugging in Chrome thread inspector window)\n */\nexport function getWorkerName(worker) {\n const warning = worker.version !== VERSION ? ` (worker-utils@${VERSION})` : '';\n return `${worker.name}@${worker.version}${warning}`;\n}\n/**\n * Generate a worker URL based on worker object and options\n * @returns A URL to one of the following:\n * - a published worker on unpkg CDN\n * - a local test worker\n * - a URL provided by the user in options\n */\nexport function getWorkerURL(worker, options = {}) {\n const workerOptions = options[worker.id] || {};\n const workerFile = isBrowser ? `${worker.id}-worker.js` : `${worker.id}-worker-node.js`;\n let url = workerOptions.workerUrl;\n // HACK: Allow for non-nested workerUrl for the CompressionWorker.\n // For the compression worker, workerOptions is currently not nested correctly. For most loaders,\n // you'd have options within an object, i.e. `{mvt: {coordinates: ...}}` but the CompressionWorker\n // puts options at the top level, not within a `compression` key (its `id`). For this reason, the\n // above `workerOptions` will always be a string (i.e. `'gzip'`) for the CompressionWorker. To not\n // break backwards compatibility, we allow the CompressionWorker to have options at the top level.\n if (!url && worker.id === 'compression') {\n url = options.workerUrl;\n }\n // If URL is test, generate local loaders.gl url\n // @ts-ignore _workerType\n if (options._workerType === 'test') {\n if (isBrowser) {\n url = `modules/${worker.module}/dist/${workerFile}`;\n }\n else {\n // In the test environment the ts-node loader requires TypeScript code\n url = `modules/${worker.module}/src/workers/${worker.id}-worker-node.ts`;\n }\n }\n // If url override is not provided, generate a URL to published version on npm CDN unpkg.com\n if (!url) {\n // GENERATE\n let version = worker.version;\n // On master we need to load npm alpha releases published with the `beta` tag\n if (version === 'latest') {\n // throw new Error('latest worker version specified');\n version = NPM_TAG;\n }\n const versionTag = version ? `@${version}` : '';\n url = `https://unpkg.com/@loaders.gl/${worker.module}${versionTag}/dist/${workerFile}`;\n }\n assert(url);\n // Allow user to override location\n return url;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { VERSION } from \"../env-utils/version.js\";\n/**\n * Check if worker is compatible with this library version\n * @param worker\n * @param libVersion\n * @returns `true` if the two versions are compatible\n */\nexport function validateWorkerVersion(worker, coreVersion = VERSION) {\n assert(worker, 'no worker provided');\n const workerVersion = worker.version;\n if (!coreVersion || !workerVersion) {\n return false;\n }\n // TODO enable when fix the __version__ injection\n // const coreVersions = parseVersion(coreVersion);\n // const workerVersions = parseVersion(workerVersion);\n // assert(\n // coreVersion.major === workerVersion.major && coreVersion.minor <= workerVersion.minor,\n // `worker: ${worker.name} is not compatible. ${coreVersion.major}.${\n // coreVersion.minor\n // }+ is required.`\n // );\n return true;\n}\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction parseVersion(version) {\n const parts = version.split('.').map(Number);\n return { major: parts[0], minor: parts[1] };\n}\n","import { isBrowser, WorkerFarm, getWorkerURL } from '@loaders.gl/worker-utils';\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader, options) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n // Node workers are still experimental\n if (!isBrowser && !options?._nodeWorkers) {\n return false;\n }\n return loader.worker && options?.worker;\n}\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(loader, data, options, context, parseOnMainThread) {\n const name = loader.id; // TODO\n const url = getWorkerURL(loader, options);\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({ name, url });\n // options.log object contains functions which cannot be transferred\n // context.fetch & context.parse functions cannot be transferred\n // TODO - decide how to handle logging on workers\n options = JSON.parse(JSON.stringify(options));\n context = JSON.parse(JSON.stringify(context || {}));\n const job = await workerPool.startJob('process-on-worker', \n // @ts-expect-error\n onMessage.bind(null, parseOnMainThread) // eslint-disable-line @typescript-eslint/no-misused-promises\n );\n job.postMessage('process', {\n // @ts-ignore\n input: data,\n options,\n context\n });\n const result = await job.result;\n // TODO - what is going on here?\n return await result.result;\n}\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(parseOnMainThread, job, type, payload) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n case 'error':\n job.error(new Error(payload.error));\n break;\n case 'process':\n // Worker is asking for main thread to parseO\n const { id, input, options } = payload;\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', { id, result });\n }\n catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', { id, error: message });\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn(`parse-with-worker unknown message ${type}`);\n }\n}\n","/**\n * compare two binary arrays for equality\n * @param a\n * @param b\n * @param byteLength\n */\nexport function compareArrayBuffers(arrayBuffer1, arrayBuffer2, byteLength) {\n byteLength = byteLength || arrayBuffer1.byteLength;\n if (arrayBuffer1.byteLength < byteLength || arrayBuffer2.byteLength < byteLength) {\n return false;\n }\n const array1 = new Uint8Array(arrayBuffer1);\n const array2 = new Uint8Array(arrayBuffer2);\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Concatenate a sequence of ArrayBuffers from arguments\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffers(...sources) {\n return concatenateArrayBuffersFromArray(sources);\n}\n/**\n * Concatenate a sequence of ArrayBuffers from array\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffersFromArray(sources) {\n // Make sure all inputs are wrapped in typed arrays\n const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);\n // Get length of all inputs\n const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);\n // Allocate array with space for all inputs\n const result = new Uint8Array(byteLength);\n // Copy the subarrays\n let offset = 0;\n for (const sourceArray of sourceArrays) {\n result.set(sourceArray, offset);\n offset += sourceArray.byteLength;\n }\n // We work with ArrayBuffers, discard the typed array wrapper\n return result.buffer;\n}\n/**\n * Concatenate arbitrary count of typed arrays\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays\n * @param - list of arrays. All arrays should be the same type\n * @return A concatenated TypedArray\n */\nexport function concatenateTypedArrays(...typedArrays) {\n // @ts-ignore\n const arrays = typedArrays;\n // @ts-ignore\n const TypedArrayConstructor = (arrays && arrays.length > 1 && arrays[0].constructor) || null;\n if (!TypedArrayConstructor) {\n throw new Error('\"concatenateTypedArrays\" - incorrect quantity of arguments or arguments have incompatible data types');\n }\n const sumLength = arrays.reduce((acc, value) => acc + value.length, 0);\n // @ts-ignore typescript does not like dynamic constructors\n const result = new TypedArrayConstructor(sumLength);\n let offset = 0;\n for (const array of arrays) {\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n}\n/**\n * Copy a view of an ArrayBuffer into new ArrayBuffer with byteOffset = 0\n * @param arrayBuffer\n * @param byteOffset\n * @param byteLength\n */\nexport function sliceArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n const subArray = byteLength !== undefined\n ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength)\n : new Uint8Array(arrayBuffer).subarray(byteOffset);\n const arrayCopy = new Uint8Array(subArray);\n return arrayCopy.buffer;\n}\n","import { concatenateArrayBuffers } from \"../binary-utils/array-buffer-utils.js\";\n// GENERAL UTILITIES\n/**\n * Iterate over async iterator, without resetting iterator if end is not reached\n * - forEach intentionally does not reset iterator if exiting loop prematurely\n * so that iteration can continue in a second loop\n * - It is recommended to use a standard for-await as last loop to ensure\n * iterator gets properly reset\n *\n * TODO - optimize using sync iteration if argument is an Iterable?\n *\n * @param iterator\n * @param visitor\n */\nexport async function forEach(iterator, visitor) {\n // eslint-disable-next-line\n while (true) {\n const { done, value } = await iterator.next();\n if (done) {\n iterator.return();\n return;\n }\n const cancel = visitor(value);\n if (cancel) {\n return;\n }\n }\n}\n// Breaking big data into iterable chunks, concatenating iterable chunks into big data objects\n/**\n * Concatenates all data chunks yielded by an (async) iterator\n * This function can e.g. be used to enable atomic parsers to work on (async) iterator inputs\n */\nexport async function concatenateArrayBuffersAsync(asyncIterator) {\n const arrayBuffers = [];\n for await (const chunk of asyncIterator) {\n arrayBuffers.push(chunk);\n }\n return concatenateArrayBuffers(...arrayBuffers);\n}\nexport async function concatenateStringsAsync(asyncIterator) {\n const strings = [];\n for await (const chunk of asyncIterator) {\n strings.push(chunk);\n }\n return strings.join('');\n}\n","// Simple file alias mechanisms for tests.\nlet pathPrefix = '';\nconst fileAliases = {};\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix() {\n return pathPrefix;\n}\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases) {\n Object.assign(fileAliases, aliases);\n}\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename) {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport * as node from \"../node/buffer.js\";\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value) {\n return value && typeof value === 'object' && value.isBuffer;\n}\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data) {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\n/**\n * Convert an object to an array buffer\n */\nexport function toArrayBuffer(data) {\n // Note: Should be called first, Buffers can trigger other detections below\n if (isBuffer(data)) {\n return node.toArrayBuffer(data);\n }\n if (data instanceof ArrayBuffer) {\n return data;\n }\n // Careful - Node Buffers look like Uint8Arrays (keep after isBuffer)\n if (ArrayBuffer.isView(data)) {\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n }\n if (typeof data === 'string') {\n const text = data;\n const uint8Array = new TextEncoder().encode(text);\n return uint8Array.buffer;\n }\n // HACK to support Blob polyfill\n if (data && typeof data === 'object' && data._toArrayBuffer) {\n return data._toArrayBuffer();\n }\n throw new Error('toArrayBuffer');\n}\n","// loaders.gl MIT license\nexport function getCWD() {\n if (typeof process !== 'undefined' && typeof process.cwd !== 'undefined') {\n return process.cwd();\n }\n const pathname = window.location?.pathname;\n return pathname?.slice(0, pathname.lastIndexOf('/') + 1) || '';\n}\n","// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\nimport { getCWD } from \"./get-cwd.js\";\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url) {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';\n}\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url) {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(0, slashIndex) : '';\n}\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts) {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n/* eslint-disable no-continue */\n/**\n * https://nodejs.org/api/path.html#path_path_resolve_paths\n * @param paths A sequence of paths or path segments.\n * @return resolved path\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\nexport function resolve(...components) {\n const paths = [];\n for (let _i = 0; _i < components.length; _i++) {\n paths[_i] = components[_i];\n }\n let resolvedPath = '';\n let resolvedAbsolute = false;\n let cwd;\n for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path;\n if (i >= 0) {\n path = paths[i];\n }\n else {\n if (cwd === undefined) {\n cwd = getCWD();\n }\n path = cwd;\n }\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path (removes leading slash)\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n else if (resolvedPath.length > 0) {\n return resolvedPath;\n }\n return '.';\n}\nconst SLASH = 47;\nconst DOT = 46;\n/**\n * Resolves . and .. elements in a path with directory names\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\n/* eslint-disable max-depth */\n// eslint-disable-next-line complexity, max-statements\nfunction normalizeStringPosix(path, allowAboveRoot) {\n let res = '';\n let lastSlash = -1;\n let dots = 0;\n let code;\n let isAboveRoot = false;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n }\n else if (code === SLASH) {\n break;\n }\n else {\n code = SLASH;\n }\n if (code === SLASH) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 ||\n !isAboveRoot ||\n res.charCodeAt(res.length - 1) !== DOT ||\n res.charCodeAt(res.length - 2) !== DOT) {\n if (res.length > 2) {\n const start = res.length - 1;\n let j = start;\n for (; j >= 0; --j) {\n if (res.charCodeAt(j) === SLASH) {\n break;\n }\n }\n if (j !== start) {\n res = j === -1 ? '' : res.slice(0, j);\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n }\n else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += '/..';\n }\n else {\n res = '..';\n }\n isAboveRoot = true;\n }\n }\n else {\n const slice = path.slice(lastSlash + 1, i);\n if (res.length > 0) {\n res += `/${slice}`;\n }\n else {\n res = slice;\n }\n isAboveRoot = false;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === DOT && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst isBoolean = (x) => typeof x === 'boolean';\nconst isFunction = (x) => typeof x === 'function';\nexport const isObject = (x) => x !== null && typeof x === 'object';\nexport const isPureObject = (x) => isObject(x) && x.constructor === {}.constructor;\nexport const isPromise = (x) => isObject(x) && isFunction(x.then);\nexport const isIterable = (x) => Boolean(x) && typeof x[Symbol.iterator] === 'function';\nexport const isAsyncIterable = (x) => x && typeof x[Symbol.asyncIterator] === 'function';\nexport const isIterator = (x) => x && isFunction(x.next);\nexport const isResponse = (x) => (typeof Response !== 'undefined' && x instanceof Response) ||\n (x && x.arrayBuffer && x.text && x.json);\nexport const isFile = (x) => typeof File !== 'undefined' && x instanceof File;\nexport const isBlob = (x) => typeof Blob !== 'undefined' && x instanceof Blob;\n/** Check for Node.js `Buffer` without triggering bundler to include buffer polyfill */\nexport const isBuffer = (x) => x && typeof x === 'object' && x.isBuffer;\nexport const isWritableDOMStream = (x) => isObject(x) && isFunction(x.abort) && isFunction(x.getWriter);\nexport const isReadableDOMStream = (x) => (typeof ReadableStream !== 'undefined' && x instanceof ReadableStream) ||\n (isObject(x) && isFunction(x.tee) && isFunction(x.cancel) && isFunction(x.getReader));\n// Not implemented in Firefox: && isFunction(x.pipeTo)\nexport const isWritableNodeStream = (x) => isObject(x) && isFunction(x.end) && isFunction(x.write) && isBoolean(x.writable);\nexport const isReadableNodeStream = (x) => isObject(x) && isFunction(x.read) && isFunction(x.pipe) && isBoolean(x.readable);\nexport const isReadableStream = (x) => isReadableDOMStream(x) || isReadableNodeStream(x);\nexport const isWritableStream = (x) => isWritableDOMStream(x) || isWritableNodeStream(x);\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport class FetchError extends Error {\n constructor(message, info) {\n super(message);\n this.reason = info.reason;\n this.url = info.url;\n this.response = info.response;\n }\n /** A best effort reason for why the fetch failed */\n reason;\n /** The URL that failed to load. Empty string if not available. */\n url;\n /** The Response object, if any. */\n response;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n/**\n * Compare two MIME types, case insensitively etc.\n * @param mimeType1\n * @param mimeType2\n * @returns true if the MIME types are equivalent\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type\n */\nexport function compareMIMETypes(mimeType1, mimeType2) {\n if (mimeType1.toLowerCase() === mimeType2.toLowerCase()) {\n return true;\n }\n return false;\n}\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString) {\n // If resource is a data url, extract any embedded mime type\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n if (matches) {\n return matches[1];\n }\n return mimeString;\n}\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url) {\n // If resource is a data URL, extract any embedded mime type\n const matches = DATA_URL_PATTERN.exec(url);\n if (matches) {\n return matches[1];\n }\n return '';\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst QUERY_STRING_PATTERN = /\\?.*/;\nexport function extractQueryString(url) {\n const matches = url.match(QUERY_STRING_PATTERN);\n return matches && matches[0];\n}\nexport function stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\nexport function shortenUrlForDisplay(url) {\n if (url.length < 50) {\n return url;\n }\n const urlEnd = url.slice(url.length - 15);\n const urlStart = url.substr(0, 32);\n return `${urlStart}...${urlEnd}`;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse, isBlob } from \"../../javascript-utils/is-type.js\";\nimport { parseMIMEType, parseMIMETypeFromURL } from \"./mime-type-utils.js\";\nimport { stripQueryString } from \"./url-utils.js\";\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrl(resource) {\n // If resource is a `Response`, it contains the information directly as a field\n if (isResponse(resource)) {\n const response = resource;\n return response.url;\n }\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n const blob = resource;\n // File objects have a \"name\" property. Blob objects don't have any\n // url (name) information\n return blob.name || '';\n }\n if (typeof resource === 'string') {\n return resource;\n }\n // Unknown\n return '';\n}\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceMIMEType(resource) {\n // If resource is a response, it contains the information directly\n if (isResponse(resource)) {\n const response = resource;\n const contentTypeHeader = response.headers.get('content-type') || '';\n const noQueryUrl = stripQueryString(response.url);\n return parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(noQueryUrl);\n }\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n const blob = resource;\n return blob.type || '';\n }\n if (typeof resource === 'string') {\n return parseMIMETypeFromURL(resource);\n }\n // Unknown\n return '';\n}\n/**\n * Returns (approximate) content length for a resource if it can be determined.\n * Returns -1 if content length cannot be determined.\n * @param resource\n\n * @note string parameters are NOT assumed to be URLs\n */\nexport function getResourceContentLength(resource) {\n if (isResponse(resource)) {\n const response = resource;\n return response.headers['content-length'] || -1;\n }\n if (isBlob(resource)) {\n const blob = resource;\n return blob.size;\n }\n if (typeof resource === 'string') {\n // TODO - handle data URL?\n return resource.length;\n }\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n return -1;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse } from \"../../javascript-utils/is-type.js\";\nimport { FetchError } from \"../fetch/fetch-error.js\";\nimport { getResourceContentLength, getResourceUrl, getResourceMIMEType } from \"./resource-utils.js\";\nimport { shortenUrlForDisplay } from \"./url-utils.js\";\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource) {\n if (isResponse(resource)) {\n return resource;\n }\n // Add content-length header if possible\n const headers = {};\n const contentLength = getResourceContentLength(resource);\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n // `new Response(File)` does not preserve content-type and URL\n // so we add them here\n const url = getResourceUrl(resource);\n const type = getResourceMIMEType(resource);\n if (type) {\n headers['content-type'] = type;\n }\n // Add a custom header with initial bytes if available\n const initialDataUrl = await getInitialDataUrl(resource);\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n // TODO - is this the best way of handling strings?\n // Maybe package as data URL instead?\n if (typeof resource === 'string') {\n // Convert to ArrayBuffer to avoid Response treating it as a URL\n resource = new TextEncoder().encode(resource);\n }\n // Attempt to create a Response from the resource, adding headers and setting url\n const response = new Response(resource, { headers });\n // We can't control `Response.url` via constructor, use a property override to record URL.\n Object.defineProperty(response, 'url', { value: url });\n return response;\n}\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response) {\n if (!response.ok) {\n const error = await getResponseError(response);\n throw error;\n }\n}\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response) {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n message = message.length > 60 ? `${message.slice(0, 60)}...` : message;\n throw new Error(message);\n }\n}\n// HELPERS\nasync function getResponseError(response) {\n const shortUrl = shortenUrlForDisplay(response.url);\n let message = `Failed to fetch resource (${response.status}) ${response.statusText}: ${shortUrl}`;\n message = message.length > 100 ? `${message.slice(0, 100)}...` : message;\n const info = {\n reason: response.statusText,\n url: response.url,\n response\n };\n // See if we got an error message in the body\n try {\n const contentType = response.headers.get('Content-Type');\n info.reason =\n !response.bodyUsed && contentType?.includes('application/json')\n ? await response.json()\n : await response.text();\n }\n catch (error) {\n // eslint forbids return in a finally statement, so we just catch here\n }\n return new FetchError(message, info);\n}\nasync function getInitialDataUrl(resource) {\n const INITIAL_DATA_LENGTH = 5;\n if (typeof resource === 'string') {\n return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n }\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event?.target?.result);\n reader.readAsDataURL(blobSlice);\n });\n }\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return `data:base64,${base64}`;\n }\n return null;\n}\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\nimport { makeResponse } from \"../utils/response-utils.js\";\n// import {FetchError} from './fetch-error';\nexport function isNodePath(url) {\n return !isRequestURL(url) && !isDataURL(url);\n}\nexport function isRequestURL(url) {\n return url.startsWith('http:') || url.startsWith('https:');\n}\nexport function isDataURL(url) {\n return url.startsWith('data:');\n}\n/**\n * fetch API compatible function\n * - Supports fetching from Node.js local file system paths\n * - Respects pathPrefix and file aliases\n */\nexport async function fetchFile(urlOrData, fetchOptions) {\n if (typeof urlOrData === 'string') {\n const url = resolvePath(urlOrData);\n // Support fetching from local file system\n if (isNodePath(url)) {\n if (globalThis.loaders?.fetchNode) {\n return globalThis.loaders?.fetchNode(url, fetchOptions);\n }\n // throw new Error(\n // 'fetchFile: globalThis.loaders.fetchNode not defined. Install @loaders.gl/polyfills'\n // );\n }\n // Call global fetch\n return await fetch(url, fetchOptions);\n }\n // TODO - should we still call fetch on non-URL inputs?\n return await makeResponse(urlOrData);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// probe.gl Log compatible loggers\nimport { Log } from '@probe.gl/log';\nexport const probeLog = new Log({ id: 'loaders.gl' });\n// Logs nothing\nexport class NullLog {\n log() {\n return () => { };\n }\n info() {\n return () => { };\n }\n warn() {\n return () => { };\n }\n error() {\n return () => { };\n }\n}\n// Logs to console\nexport class ConsoleLog {\n console;\n constructor() {\n this.console = console; // eslint-disable-line\n }\n log(...args) {\n return this.console.log.bind(this.console, ...args);\n }\n info(...args) {\n return this.console.info.bind(this.console, ...args);\n }\n warn(...args) {\n return this.console.warn.bind(this.console, ...args);\n }\n error(...args) {\n return this.console.error.bind(this.console, ...args);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@loaders.gl/loader-utils';\nimport { ConsoleLog } from \"./loggers.js\";\nexport const DEFAULT_LOADER_OPTIONS = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n useLocalLibraries: false,\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n _nodeWorkers: false, // By default do not support node workers\n _workerType: '', // 'test' to use locally generated workers\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules } from '@loaders.gl/loader-utils';\nimport { isPureObject, isObject } from \"../../javascript-utils/is-type.js\";\nimport { probeLog, NullLog } from \"./loggers.js\";\nimport { DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS } from \"./option-defaults.js\";\n/**\n * Helper for safely accessing global loaders.gl variables\n * Wraps initialization of global variable in function to defeat overly aggressive tree-shakers\n */\nexport function getGlobalLoaderState() {\n // @ts-ignore\n globalThis.loaders = globalThis.loaders || {};\n // @ts-ignore\n const { loaders } = globalThis;\n // Add _state object to keep separate from modules added to globalThis.loaders\n if (!loaders._state) {\n loaders._state = {};\n }\n return loaders._state;\n}\n/**\n * Store global loader options on the global object to increase chances of cross loaders-version interoperability\n * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n * @returns global loader options merged with default loader options\n */\nexport function getGlobalLoaderOptions() {\n const state = getGlobalLoaderState();\n // Ensure all default loader options from this library are mentioned\n state.globalOptions = state.globalOptions || { ...DEFAULT_LOADER_OPTIONS };\n return state.globalOptions;\n}\n/**\n * Set global loader options\n * @param options\n */\nexport function setGlobalOptions(options) {\n const state = getGlobalLoaderState();\n const globalOptions = getGlobalLoaderOptions();\n // @ts-expect-error First param looks incorrect\n state.globalOptions = normalizeOptionsInternal(globalOptions, options);\n // Make sure any new modules are registered\n registerJSModules(options.modules);\n}\n/**\n * Merges options with global opts and loader defaults, also injects baseUri\n * @param options\n * @param loader\n * @param loaders\n * @param url\n */\nexport function normalizeOptions(options, loader, loaders, url) {\n loaders = loaders || [];\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n validateOptions(options, loaders);\n return normalizeOptionsInternal(loader, options, url);\n}\n// VALIDATE OPTIONS\n/**\n * Warn for unsupported options\n * @param options\n * @param loaders\n */\nfunction validateOptions(options, loaders) {\n // Check top level options\n validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);\n for (const loader of loaders) {\n // Get the scoped, loader specific options from the user supplied options\n const idOptions = ((options && options[loader.id]) || {});\n // Get scoped, loader specific default and deprecated options from the selected loader\n const loaderOptions = (loader.options && loader.options[loader.id]) || {};\n const deprecatedOptions = (loader.deprecatedOptions && loader.deprecatedOptions[loader.id]) || {};\n // Validate loader specific options\n // @ts-ignore\n validateOptionsObject(idOptions, loader.id, loaderOptions, deprecatedOptions, loaders);\n }\n}\n// eslint-disable-next-line max-params, complexity\nfunction validateOptionsObject(options, id, defaultOptions, deprecatedOptions, loaders) {\n const loaderName = id || 'Top level';\n const prefix = id ? `${id}.` : '';\n for (const key in options) {\n // If top level option value is an object it could options for a loader, so ignore\n const isSubOptions = !id && isObject(options[key]);\n const isBaseUriOption = key === 'baseUri' && !id;\n const isWorkerUrlOption = key === 'workerUrl' && id;\n // <loader>.workerUrl requires special handling as it is now auto-generated and no longer specified as a default option.\n if (!(key in defaultOptions) && !isBaseUriOption && !isWorkerUrlOption) {\n // Issue deprecation warnings\n if (key in deprecatedOptions) {\n probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' no longer supported, use \\'${deprecatedOptions[key]}\\'`)();\n }\n else if (!isSubOptions) {\n const suggestion = findSimilarOption(key, loaders);\n probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' not recognized. ${suggestion}`)();\n }\n }\n }\n}\nfunction findSimilarOption(optionKey, loaders) {\n const lowerCaseOptionKey = optionKey.toLowerCase();\n let bestSuggestion = '';\n for (const loader of loaders) {\n for (const key in loader.options) {\n if (optionKey === key) {\n return `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n const lowerCaseKey = key.toLowerCase();\n const isPartialMatch = lowerCaseOptionKey.startsWith(lowerCaseKey) || lowerCaseKey.startsWith(lowerCaseOptionKey);\n if (isPartialMatch) {\n bestSuggestion = bestSuggestion || `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n }\n }\n return bestSuggestion;\n}\nfunction normalizeOptionsInternal(loader, options, url) {\n const loaderDefaultOptions = loader.options || {};\n const mergedOptions = { ...loaderDefaultOptions };\n addUrlOptions(mergedOptions, url);\n // LOGGING: options.log can be set to `null` to defeat logging\n if (mergedOptions.log === null) {\n mergedOptions.log = new NullLog();\n }\n mergeNestedFields(mergedOptions, getGlobalLoaderOptions());\n mergeNestedFields(mergedOptions, options);\n return mergedOptions;\n}\n// Merge nested options objects\nfunction mergeNestedFields(mergedOptions, options) {\n for (const key in options) {\n // Check for nested options\n // object in options => either no key in defaultOptions or object in defaultOptions\n if (key in options) {\n const value = options[key];\n if (isPureObject(value) && isPureObject(mergedOptions[key])) {\n mergedOptions[key] = {\n ...mergedOptions[key],\n ...options[key]\n };\n }\n else {\n mergedOptions[key] = options[key];\n }\n }\n // else: No need to merge nested opts, and the initial merge already copied over the nested options\n }\n}\n/**\n * Harvest information from the url\n * @deprecated This is mainly there to support a hack in the GLTFLoader\n * TODO - baseUri should be a directory, i.e. remove file component from baseUri\n * TODO - extract extension?\n * TODO - extract query parameters?\n * TODO - should these be injected on context instead of options?\n */\nfunction addUrlOptions(options, url) {\n if (url && !('baseUri' in options)) {\n options.baseUri = url;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nexport function isLoaderObject(loader) {\n if (!loader) {\n return false;\n }\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n const hasExtensions = Array.isArray(loader?.extensions);\n /* Now handled by types and worker loaders do not have these\n let hasParser =\n loader.parseTextSync ||\n loader.parseSync ||\n loader.parse ||\n loader.parseStream || // TODO Remove, Replace with parseInBatches\n loader.parseInBatches;\n */\n return hasExtensions;\n}\nexport function normalizeLoader(loader) {\n // This error is fairly easy to trigger by mixing up import statements etc\n // So we make an exception and add a developer error message for this case\n // To help new users from getting stuck here\n assert(loader, 'null loader');\n assert(isLoaderObject(loader), 'invalid loader');\n // NORMALIZE [LOADER, OPTIONS] => LOADER\n // If [loader, options], create a new loaders object with options merged in\n let options;\n if (Array.isArray(loader)) {\n options = loader[1];\n loader = loader[0];\n loader = {\n ...loader,\n options: { ...loader.options, ...options }\n };\n }\n // NORMALIZE text and binary flags\n // Ensure at least one of text/binary flags are properly set\n // @ts-expect-error\n if (loader?.parseTextSync || loader?.parseText) {\n loader.text = true;\n }\n if (!loader.text) {\n loader.binary = true;\n }\n return loader;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { getGlobalLoaderState } from \"../loader-utils/option-utils.js\";\n/**\n * Store global registered loaders on the global object to increase chances of cross loaders-version interoperability\n * This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n */\nconst getGlobalLoaderRegistry = () => {\n const state = getGlobalLoaderState();\n state.loaderRegistry = state.loaderRegistry || [];\n return state.loaderRegistry;\n};\n/**\n * Register a list of global loaders\n * @note Registration erases loader type information.\n * @deprecated It is recommended that applications manage loader registration. This function will likely be remove in loaders.gl v5\n */\nexport function registerLoaders(loaders) {\n const loaderRegistry = getGlobalLoaderRegistry();\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n for (const loader of loaders) {\n const normalizedLoader = normalizeLoader(loader);\n if (!loaderRegistry.find((registeredLoader) => normalizedLoader === registeredLoader)) {\n // add to the beginning of the loaderRegistry, so the last registeredLoader get picked\n loaderRegistry.unshift(normalizedLoader);\n }\n }\n}\n/**\n * @deprecated It is recommended that applications manage loader registration. This function will likely be remove in loaders.gl v5\n */\nexport function getRegisteredLoaders() {\n return getGlobalLoaderRegistry();\n}\n/** @deprecated For testing only */\nexport function _unregisterLoaders() {\n const state = getGlobalLoaderState();\n state.loaderRegistry = [];\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { compareArrayBuffers, path, log } from '@loaders.gl/loader-utils';\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { getResourceUrl, getResourceMIMEType } from \"../utils/resource-utils.js\";\nimport { compareMIMETypes } from \"../utils/mime-type-utils.js\";\nimport { getRegisteredLoaders } from \"./register-loaders.js\";\nimport { isBlob } from \"../../javascript-utils/is-type.js\";\nimport { stripQueryString } from \"../utils/url-utils.js\";\nconst EXT_PATTERN = /\\.([^.]+)$/;\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, { ...options, nothrow: true }, context);\n if (loader) {\n return loader;\n }\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await data.slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n return loader;\n}\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n return loader;\n}\n/** Implements loaders selection logic */\n// eslint-disable-next-line complexity\nfunction selectLoaderInternal(data, loaders, options, context) {\n const url = getResourceUrl(data);\n const type = getResourceMIMEType(data);\n const testUrl = stripQueryString(url) || context?.url;\n let loader = null;\n let reason = '';\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n reason = `match forced by supplied MIME type ${options?.mimeType}`;\n }\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? `matched url ${testUrl}` : '');\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? `matched MIME type ${type}` : '');\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n // @ts-ignore Blob | Response\n loader = loader || findLoaderByInitialBytes(loaders, data);\n // @ts-ignore Blob | Response\n reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n // Look up loader by fallback mime type\n if (options?.fallbackMimeType) {\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n }\n if (reason) {\n log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n }\n return loader;\n}\n/** Check HTTP Response */\nfunction validHTTPResponse(data) {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data) {\n const url = getResourceUrl(data);\n const type = getResourceMIMEType(data);\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n // @ts-ignore Blob | Response\n const firstCharacters = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\nfunction normalizeLoaders(loaders) {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders, url) {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\nfunction findLoaderByExtension(loaders, extension) {\n extension = extension.toLowerCase();\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes?.some((mimeType1) => compareMIMETypes(mimeType, mimeType1))) {\n return loader;\n }\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (compareMIMETypes(mimeType, `application/x.${loader.id}`)) {\n return loader;\n }\n }\n return null;\n}\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n }\n else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n }\n else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data);\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n default:\n return false;\n }\n}\nfunction getFirstCharacters(data, length = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n }\n else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n }\n else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big string into chunks and yields them one-by-one as ArrayBuffers\n * @param blob string to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeStringIterator(string, options) {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n const textEncoder = new TextEncoder();\n while (offset < string.length) {\n // Create a chunk of the right size\n const chunkLength = Math.min(string.length - offset, chunkSize);\n const chunk = string.slice(offset, offset + chunkLength);\n offset += chunkLength;\n // yield an ArrayBuffer chunk\n yield textEncoder.encode(chunk);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big ArrayBuffer into chunks and yields them one-by-one\n * @param blob ArrayBuffer to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeArrayBufferIterator(arrayBuffer, options = {}) {\n const { chunkSize = DEFAULT_CHUNK_SIZE } = options;\n let byteOffset = 0;\n while (byteOffset < arrayBuffer.byteLength) {\n // Create a chunk of the right size\n const chunkByteLength = Math.min(arrayBuffer.byteLength - byteOffset, chunkSize);\n const chunk = new ArrayBuffer(chunkByteLength);\n // Copy data from the big chunk\n const sourceArray = new Uint8Array(arrayBuffer, byteOffset, chunkByteLength);\n const chunkArray = new Uint8Array(chunk);\n chunkArray.set(sourceArray);\n // yield the chunk\n byteOffset += chunkByteLength;\n yield chunk;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024; // 1MB — biggest value that keeps UI responsive\n/**\n * Returns an iterator that breaks a big Blob into chunks and yields them one-by-one\n * @param blob Blob or File object\n * @param options\n * @param options.chunkSize\n */\nexport async function* makeBlobIterator(blob, options) {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n while (offset < blob.size) {\n const end = offset + chunkSize;\n const chunk = await blob.slice(offset, end).arrayBuffer();\n offset = end;\n yield chunk;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';\n/**\n * Returns an async iterable that reads from a stream (works in both Node.js and browsers)\n * @param stream stream to iterator over\n */\nexport function makeStreamIterator(stream, options) {\n return isBrowser\n ? makeBrowserStreamIterator(stream, options)\n : makeNodeStreamIterator(stream, options);\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @see https://jakearchibald.com/2017/async-iterators-and-generators/#making-streams-iterate\n */\nasync function* makeBrowserStreamIterator(stream, options) {\n // WhatWG: stream is supposed to have a `getIterator` method\n // if (typeof stream.getIterator === 'function') {\n // return stream.getIterator();\n // }\n // if (typeof stream[Symbol.asyncIterator] === 'function') {\n // return makeToArrayBufferIterator(stream);\n // }\n // In the browser, we first need to get a lock on the stream\n const reader = stream.getReader();\n let nextBatchPromise;\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentBatchPromise = nextBatchPromise || reader.read();\n // Issue a read for an additional batch, while we await the next batch\n // Idea is to make fetching happen in parallel with processing / parsing\n if (options?._streamReadAhead) {\n nextBatchPromise = reader.read();\n }\n // Read from the stream\n // value is a Uint8Array\n const { done, value } = await currentBatchPromise;\n // Exit if we're done\n if (done) {\n return;\n }\n // Else yield the chunk\n yield toArrayBuffer(value);\n }\n }\n catch (error) {\n // TODO - examples makes it look like this should always be called,\n // but that generates exceptions so only call it if we do not reach the end\n reader.releaseLock();\n }\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @note Requires Node.js >= 10\n */\nasync function* makeNodeStreamIterator(stream, options) {\n // Hacky test for node version to ensure we don't call bad polyfills\n // NODE 10+: stream is an asyncIterator\n for await (const chunk of stream) {\n yield toArrayBuffer(chunk); // Coerce each chunk to ArrayBuffer\n }\n}\n/* TODO - remove NODE < 10\n * @see https://github.com/bustle/streaming-iterables, MIT license\n *\n if (typeof stream[Symbol.asyncIterator] === 'function') {\n return;\n }\n\n // TODO - check if is this ever used in Node 10+?\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const data = stream.read();\n if (data !== null) {\n yield toArrayBuffer(data);\n // eslint-disable-next-line no-continue\n continue;\n }\n if (stream._readableState?.ended) {\n return;\n }\n await onceReadable(stream);\n }\n\nasync function onceReadable(stream: Readable): Promise<any> {\n return new Promise((resolve) => {\n stream.once('readable', resolve);\n });\n}\n */\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { makeStringIterator } from \"./make-string-iterator.js\";\nimport { makeArrayBufferIterator } from \"./make-array-buffer-iterator.js\";\nimport { makeBlobIterator } from \"./make-blob-iterator.js\";\nimport { makeStreamIterator } from \"./make-stream-iterator.js\";\nimport { isBlob, isReadableStream, isResponse } from \"../../javascript-utils/is-type.js\";\n/**\n * Returns an iterator that breaks its input into chunks and yields them one-by-one.\n * @param data\n * @param options\n * @returns\n * This function can e.g. be used to enable data sources that can only be read atomically\n * (such as `Blob` and `File` via `FileReader`) to still be parsed in batches.\n */\nexport function makeIterator(data, options) {\n if (typeof data === 'string') {\n // Note: Converts string chunks to binary\n return makeStringIterator(data, options);\n }\n if (data instanceof ArrayBuffer) {\n return makeArrayBufferIterator(data, options);\n }\n if (isBlob(data)) {\n return makeBlobIterator(data, options);\n }\n if (isReadableStream(data)) {\n return makeStreamIterator(data, options);\n }\n if (isResponse(data)) {\n const response = data;\n return makeStreamIterator(response.body, options);\n }\n throw new Error('makeIterator');\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';\nimport { isResponse, isReadableStream, isAsyncIterable, isIterable, isIterator, isBlob, isBuffer } from \"../../javascript-utils/is-type.js\";\nimport { makeIterator } from \"../../iterators/make-iterator/make-iterator.js\";\nimport { checkResponse, makeResponse } from \"../utils/response-utils.js\";\nconst ERR_DATA = 'Cannot convert supplied data type';\n// eslint-disable-next-line complexity\nexport function getArrayBufferOrStringFromDataSync(data, loader, options) {\n if (loader.text && typeof data === 'string') {\n return data;\n }\n if (isBuffer(data)) {\n // @ts-ignore\n data = data.buffer;\n }\n if (data instanceof ArrayBuffer) {\n const arrayBuffer = data;\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(arrayBuffer);\n }\n return arrayBuffer;\n }\n // We may need to handle offsets\n if (ArrayBuffer.isView(data)) {\n // TextDecoder is invoked on typed arrays and will handle offsets\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(data);\n }\n let arrayBuffer = data.buffer;\n // Since we are returning the underlying arrayBuffer, we must create a new copy\n // if this typed array / Buffer is a partial view into the ArryayBuffer\n // TODO - this is a potentially unnecessary copy\n const byteLength = data.byteLength || data.length;\n if (data.byteOffset !== 0 || byteLength !== arrayBuffer.byteLength) {\n // console.warn(`loaders.gl copying arraybuffer of length ${byteLength}`);\n arrayBuffer = arrayBuffer.slice(data.byteOffset, data.byteOffset + byteLength);\n }\n return arrayBuffer;\n }\n throw new Error(ERR_DATA);\n}\n// Convert async iterator to a promise\nexport async function getArrayBufferOrStringFromData(data, loader, options) {\n const isArrayBuffer = data instanceof ArrayBuffer || ArrayBuffer.isView(data);\n if (typeof data === 'string' || isArrayBuffer) {\n return getArrayBufferOrStringFromDataSync(data, loader, options);\n }\n // Blobs and files are FileReader compatible\n if (isBlob(data)) {\n data = await makeResponse(data);\n }\n if (isResponse(data)) {\n const response = data;\n await checkResponse(response);\n return loader.binary ? await response.arrayBuffer() : await response.text();\n }\n if (isReadableStream(data)) {\n // @ts-expect-error TS2559 options type\n data = makeIterator(data, options);\n }\n if (isIterable(data) || isAsyncIterable(data)) {\n // Assume arrayBuffer iterator - attempt to concatenate\n return concatenateArrayBuffersAsync(data);\n }\n throw new Error(ERR_DATA);\n}\nexport async function getAsyncIterableFromData(data, options) {\n if (isIterator(data)) {\n return data;\n }\n if (isResponse(data)) {\n const response = data;\n // Note Since this function is not async, we currently can't load error message, just status\n await checkResponse(response);\n // TODO - bug in polyfill, body can be a Promise under Node.js\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const body = await response.body;\n // TODO - body can be null?\n return makeIterator(body, options);\n }\n if (isBlob(data) || isReadableStream(data)) {\n return makeIterator(data, options);\n }\n if (isAsyncIterable(data)) {\n return data;\n }\n return getIterableFromData(data);\n}\nexport async function getReadableStream(data) {\n if (isReadableStream(data)) {\n return data;\n }\n if (isResponse(data)) {\n // @ts-ignore\n return data.body;\n }\n const response = await makeResponse(data);\n // @ts-ignore\n return response.body;\n}\n// HELPERS\nfunction getIterableFromData(data) {\n // generate an iterator that emits a single chunk\n if (ArrayBuffer.isView(data)) {\n return (function* oneChunk() {\n yield data.buffer;\n })();\n }\n if (data instanceof ArrayBuffer) {\n return (function* oneChunk() {\n yield data;\n })();\n }\n if (isIterator(data)) {\n return data;\n }\n if (isIterable(data)) {\n return data[Symbol.iterator]();\n }\n throw new Error(ERR_DATA);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isObject } from \"../../javascript-utils/is-type.js\";\nimport { fetchFile } from \"../fetch/fetch-file.js\";\nimport { getGlobalLoaderOptions } from \"./option-utils.js\";\n/**\n * Gets the current fetch function from options and context\n * @param options\n * @param context\n */\nexport function getFetchFunction(options, context) {\n const globalOptions = getGlobalLoaderOptions();\n const loaderOptions = options || globalOptions;\n // options.fetch can be a function\n if (typeof loaderOptions.fetch === 'function') {\n return loaderOptions.fetch;\n }\n // options.fetch can be an options object\n if (isObject(loaderOptions.fetch)) {\n return (url) => fetchFile(url, loaderOptions.fetch);\n }\n // else refer to context (from parent loader) if available\n if (context?.fetch) {\n return context?.fetch;\n }\n // else return the default fetch function\n return fetchFile;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getFetchFunction } from \"./get-fetch-function.js\";\nimport { extractQueryString, stripQueryString } from \"../utils/url-utils.js\";\nimport { path } from '@loaders.gl/loader-utils';\n/**\n * \"sub\" loaders invoked by other loaders get a \"context\" injected on `this`\n * The context will inject core methods like `parse` and contain information\n * about loaders and options passed in to the top-level `parse` call.\n *\n * @param context\n * @param options\n * @param previousContext\n */\nexport function getLoaderContext(context, options, parentContext) {\n // For recursive calls, we already have a context\n // TODO - add any additional loaders to context?\n if (parentContext) {\n return parentContext;\n }\n const newContext = {\n fetch: getFetchFunction(options, context),\n ...context\n };\n // Parse URLs so that subloaders can easily generate correct strings\n if (newContext.url) {\n const baseUrl = stripQueryString(newContext.url);\n newContext.baseUrl = baseUrl;\n newContext.queryString = extractQueryString(newContext.url);\n newContext.filename = path.filename(baseUrl);\n newContext.baseUrl = path.dirname(baseUrl);\n }\n // Recursive loading does not use single loader\n if (!Array.isArray(newContext.loaders)) {\n newContext.loaders = null;\n }\n return newContext;\n}\n// eslint-disable-next-line complexity\nexport function getLoadersFromContext(loaders, context) {\n // A single loader (non-array) indicates no selection desired. Force select.\n if (loaders && !Array.isArray(loaders)) {\n return loaders;\n }\n // Create a merged list\n let candidateLoaders;\n if (loaders) {\n candidateLoaders = Array.isArray(loaders) ? loaders : [loaders];\n }\n if (context && context.loaders) {\n const contextLoaders = Array.isArray(context.loaders) ? context.loaders : [context.loaders];\n candidateLoaders = candidateLoaders ? [...candidateLoaders, ...contextLoaders] : contextLoaders;\n }\n // If no loaders, return null to look in globally registered loaders\n return candidateLoaders && candidateLoaders.length ? candidateLoaders : undefined;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { parseWithWorker, canParseWithWorker, mergeLoaderOptions } from '@loaders.gl/loader-utils';\nimport { assert, validateWorkerVersion } from '@loaders.gl/worker-utils';\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { isResponse } from \"../../javascript-utils/is-type.js\";\nimport { normalizeOptions } from \"../loader-utils/option-utils.js\";\nimport { getArrayBufferOrStringFromData } from \"../loader-utils/get-data.js\";\nimport { getLoaderContext, getLoadersFromContext } from \"../loader-utils/loader-context.js\";\nimport { getResourceUrl } from \"../utils/resource-utils.js\";\nimport { selectLoader } from \"./select-loader.js\";\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\n// implementation signature\nexport async function parse(data, loaders, options, context) {\n // Signature: parse(data, options, context | url)\n // Uses registered loaders\n if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders;\n loaders = undefined;\n }\n data = await data; // Resolve any promise\n options = options || {}; // Could be invalid...\n // Extract a url for auto detection\n const url = getResourceUrl(data);\n // Chooses a loader (and normalizes it)\n // Also use any loaders in the context, new loaders take priority\n const typedLoaders = loaders;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n // todo hacky type cast\n const loader = await selectLoader(data, candidateLoaders, options);\n // Note: if no loader was found, if so just return null\n if (!loader) {\n return null;\n }\n // Normalize options\n // @ts-expect-error\n options = normalizeOptions(options, loader, candidateLoaders, url); // Could be invalid...\n // Get a context (if already present, will be unchanged)\n context = getLoaderContext(\n // @ts-expect-error\n { url, _parse: parse, loaders: candidateLoaders }, options, context || null);\n return await parseWithLoader(loader, data, options, context);\n}\n// TODO: support progress and abort\n// TODO - should accept loader.parseAsyncIterator and concatenate.\nasync function parseWithLoader(loader, data, options, context) {\n validateWorkerVersion(loader);\n options = mergeLoaderOptions(loader.options, options);\n if (isResponse(data)) {\n // Serialize to support passing the response to web worker\n const response = data;\n const { ok, redirected, status, statusText, type, url } = response;\n const headers = Object.fromEntries(response.headers.entries());\n // @ts-expect-error TODO - fix this\n context.response = { headers, ok, redirected, status, statusText, type, url };\n }\n data = await getArrayBufferOrStringFromData(data, loader, options);\n const loaderWithParser = loader;\n // First check for synchronous text parser, wrap results in promises\n if (loaderWithParser.parseTextSync && typeof data === 'string') {\n return loaderWithParser.parseTextSync(data, options, context);\n }\n // If we have a workerUrl and the loader can parse the given options efficiently in a worker\n if (canParseWithWorker(loader, options)) {\n return await parseWithWorker(loader, data, options, context, parse);\n }\n // Check for asynchronous parser\n if (loaderWithParser.parseText && typeof data === 'string') {\n return await loaderWithParser.parseText(data, options, context);\n }\n if (loaderWithParser.parse) {\n return await loaderWithParser.parse(data, options, context);\n }\n // This should not happen, all sync loaders should also offer `parse` function\n assert(!loaderWithParser.parseSync);\n // TBD - If asynchronous parser not available, return null\n throw new Error(`${loader.id} loader - no parser found and worker is disabled`);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBlob } from \"../../javascript-utils/is-type.js\";\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { getFetchFunction } from \"../loader-utils/get-fetch-function.js\";\nimport { parse } from \"./parse.js\";\n// export async function load(url: string | DataType, loaders: LoaderOptions): Promise<any>;\n// implementation signature\nexport async function load(url, loaders, options, context) {\n let resolvedLoaders;\n let resolvedOptions;\n // Signature: load(url, options)\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n resolvedLoaders = [];\n resolvedOptions = loaders;\n context = undefined; // context not supported in short signature\n }\n else {\n resolvedLoaders = loaders;\n resolvedOptions = options;\n }\n // Select fetch function\n const fetch = getFetchFunction(resolvedOptions);\n // at this point, `url` could be already loaded binary data\n let data = url;\n // url is a string, fetch the url\n if (typeof url === 'string') {\n data = await fetch(url);\n // URL is Blob or File, fetchFile handles it (alt: we could generate ObjectURL here)\n }\n if (isBlob(url)) {\n // The fetch response object will contain blob.name\n // @ts-expect-error TODO - This may not work for overridden fetch functions\n data = await fetch(url);\n }\n // Data is loaded (at least we have a `Response` object) so time to hand over to `parse`\n // return await parse(data, loaders as Loader[], options);\n return Array.isArray(resolvedLoaders)\n ? await parse(data, resolvedLoaders, resolvedOptions) // loader array overload\n : await parse(data, resolvedLoaders, resolvedOptions); // single loader overload\n}\n","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport deckLog from \"../utils/log.js\";\nimport { getLoggers } from \"./loggers.js\";\n/* debug utility */\nlet loggers = {};\n// Conditionally load default loggers in development mode\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== 'production') {\n loggers = getLoggers(deckLog);\n}\nexport function register(handlers) {\n loggers = handlers;\n}\nexport default function debug(eventType, arg1, arg2, arg3) {\n if (deckLog.level > 0 && loggers[eventType]) {\n // Not using rest parameters to defeat perf hit from array construction\n loggers[eventType].call(null, arg1, arg2, arg3);\n }\n}\n//# sourceMappingURL=index.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const LIFECYCLE = {\n NO_STATE: 'Awaiting state',\n MATCHED: 'Matched. State transferred from previous layer',\n INITIALIZED: 'Initialized',\n AWAITING_GC: 'Discarded. Awaiting garbage collection',\n AWAITING_FINALIZATION: 'No longer matched. Awaiting garbage collection',\n FINALIZED: 'Finalized! Awaiting garbage collection'\n};\n/* Secret props keys */\n// Symbols are non-enumerable by default, does not show in for...in or Object.keys\n// but are copied with Object.assign ¯\\_(ツ)_/¯\n// Supported everywhere except IE11, can be polyfilled with core-js\nexport const COMPONENT_SYMBOL = Symbol.for('component');\nexport const PROP_TYPES_SYMBOL = Symbol.for('propTypes');\nexport const DEPRECATED_PROPS_SYMBOL = Symbol.for('deprecatedProps');\nexport const ASYNC_DEFAULTS_SYMBOL = Symbol.for('asyncPropDefaults');\nexport const ASYNC_ORIGINAL_SYMBOL = Symbol.for('asyncPropOriginal');\nexport const ASYNC_RESOLVED_SYMBOL = Symbol.for('asyncPropResolved');\n//# sourceMappingURL=constants.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Flattens a nested array into a single level array,\n * or a single value into an array with one value\n * @example flatten([[1, [2]], [3], 4]) => [1, 2, 3, 4]\n * @example flatten(1) => [1]\n * @param array The array to flatten.\n * @param filter= - Optional predicate called on each `value` to\n * determine if it should be included (pushed onto) the resulting array.\n * @return Returns the new flattened array (new array or `result` if provided)\n */\nexport function flatten(array, filter = () => true) {\n // Wrap single object in array\n if (!Array.isArray(array)) {\n return filter(array) ? [array] : [];\n }\n // Deep flatten and filter the array\n return flattenArray(array, filter, []);\n}\n/** Deep flattens an array. Helper to `flatten`, see its parameters */\nfunction flattenArray(array, filter, result) {\n let index = -1;\n while (++index < array.length) {\n const value = array[index];\n if (Array.isArray(value)) {\n flattenArray(value, filter, result);\n }\n else if (filter(value)) {\n result.push(value);\n }\n }\n return result;\n}\n/** Uses copyWithin to significantly speed up typed array value filling */\nexport function fillArray({ target, source, start = 0, count = 1 }) {\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n }\n else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n return target;\n}\n//# sourceMappingURL=flatten.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default class Transition {\n /**\n * @params timeline {Timeline}\n */\n constructor(timeline) {\n this._inProgress = false;\n this._handle = null;\n this.time = 0;\n // @ts-expect-error\n this.settings = {\n duration: 0\n };\n this._timeline = timeline;\n }\n /* Public API */\n get inProgress() {\n return this._inProgress;\n }\n /**\n * (re)start this transition.\n * @params props {object} - optional overriding props. see constructor\n */\n start(settings) {\n this.cancel();\n // @ts-expect-error\n this.settings = settings;\n this._inProgress = true;\n this.settings.onStart?.(this);\n }\n /**\n * end this transition if it is in progress.\n */\n end() {\n if (this._inProgress) {\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n this.settings.onEnd?.(this);\n }\n }\n /**\n * cancel this transition if it is in progress.\n */\n cancel() {\n if (this._inProgress) {\n this.settings.onInterrupt?.(this);\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n }\n }\n /**\n * update this transition. Returns `true` if updated.\n */\n update() {\n if (!this._inProgress) {\n return false;\n }\n // It is important to initialize the handle during `update` instead of `start`.\n // The CPU time that the `start` frame takes should not be counted towards the duration.\n // On the other hand, `update` always happens during a render cycle. The clock starts when the\n // transition is rendered for the first time.\n if (this._handle === null) {\n const { _timeline: timeline, settings } = this;\n this._handle = timeline.addChannel({\n delay: timeline.getTime(),\n duration: settings.duration\n });\n }\n this.time = this._timeline.getTime(this._handle);\n // Call subclass method\n this._onUpdate();\n // Call user callback\n this.settings.onUpdate?.(this);\n // This only works if `settings.duration` is set\n // Spring transition must call `end` manually\n if (this._timeline.isFinished(this._handle)) {\n this.end();\n }\n return true;\n }\n /* Private API */\n _onUpdate() {\n // for subclass override\n }\n}\n//# sourceMappingURL=transition.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable key-spacing, max-len, no-inline-comments, camelcase */\n/**\n * Standard WebGL, WebGL2 and extension constants (OpenGL constants)\n * @note (Most) of these constants are also defined on the WebGLRenderingContext interface.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants\n * @privateRemarks Locally called `GLEnum` instead of `GL`, because `babel-plugin-inline-webl-constants`\n * both depends on and processes this module, but shouldn't replace these declarations.\n */\n// eslint-disable-next-line no-shadow\nvar GLEnum;\n(function (GLEnum) {\n // Clearing buffers\n // Constants passed to clear() to clear buffer masks.\n /** Passed to clear to clear the current depth buffer. */\n GLEnum[GLEnum[\"DEPTH_BUFFER_BIT\"] = 256] = \"DEPTH_BUFFER_BIT\";\n /** Passed to clear to clear the current stencil buffer. */\n GLEnum[GLEnum[\"STENCIL_BUFFER_BIT\"] = 1024] = \"STENCIL_BUFFER_BIT\";\n /** Passed to clear to clear the current color buffer. */\n GLEnum[GLEnum[\"COLOR_BUFFER_BIT\"] = 16384] = \"COLOR_BUFFER_BIT\";\n // Rendering primitives\n // Constants passed to drawElements() or drawArrays() to specify what kind of primitive to render.\n /** Passed to drawElements or drawArrays to draw single points. */\n GLEnum[GLEnum[\"POINTS\"] = 0] = \"POINTS\";\n /** Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it. */\n GLEnum[GLEnum[\"LINES\"] = 1] = \"LINES\";\n /** Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment. */\n GLEnum[GLEnum[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n /** Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last. */\n GLEnum[GLEnum[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n /** Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle. */\n GLEnum[GLEnum[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n /** Passed to drawElements or drawArrays to draw a connected group of triangles. */\n GLEnum[GLEnum[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n /** Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan. */\n GLEnum[GLEnum[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n // Blending modes\n // Constants passed to blendFunc() or blendFuncSeparate() to specify the blending mode (for both, RBG and alpha, or separately).\n /** Passed to blendFunc or blendFuncSeparate to turn off a component. */\n GLEnum[GLEnum[\"ZERO\"] = 0] = \"ZERO\";\n /** Passed to blendFunc or blendFuncSeparate to turn on a component. */\n GLEnum[GLEnum[\"ONE\"] = 1] = \"ONE\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color. */\n GLEnum[GLEnum[\"SRC_COLOR\"] = 768] = \"SRC_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color. */\n GLEnum[GLEnum[\"ONE_MINUS_SRC_COLOR\"] = 769] = \"ONE_MINUS_SRC_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha. */\n GLEnum[GLEnum[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha. */\n GLEnum[GLEnum[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha. */\n GLEnum[GLEnum[\"DST_ALPHA\"] = 772] = \"DST_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha. */\n GLEnum[GLEnum[\"ONE_MINUS_DST_ALPHA\"] = 773] = \"ONE_MINUS_DST_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color. */\n GLEnum[GLEnum[\"DST_COLOR\"] = 774] = \"DST_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color. */\n GLEnum[GLEnum[\"ONE_MINUS_DST_COLOR\"] = 775] = \"ONE_MINUS_DST_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha. */\n GLEnum[GLEnum[\"SRC_ALPHA_SATURATE\"] = 776] = \"SRC_ALPHA_SATURATE\";\n /** Passed to blendFunc or blendFuncSeparate to specify a constant color blend function. */\n GLEnum[GLEnum[\"CONSTANT_COLOR\"] = 32769] = \"CONSTANT_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function. */\n GLEnum[GLEnum[\"ONE_MINUS_CONSTANT_COLOR\"] = 32770] = \"ONE_MINUS_CONSTANT_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function. */\n GLEnum[GLEnum[\"CONSTANT_ALPHA\"] = 32771] = \"CONSTANT_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function. */\n GLEnum[GLEnum[\"ONE_MINUS_CONSTANT_ALPHA\"] = 32772] = \"ONE_MINUS_CONSTANT_ALPHA\";\n // Blending equations\n // Constants passed to blendEquation() or blendEquationSeparate() to control\n // how the blending is calculated (for both, RBG and alpha, or separately).\n /** Passed to blendEquation or blendEquationSeparate to set an addition blend function. */\n /** Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination). */\n /** Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source). */\n GLEnum[GLEnum[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n GLEnum[GLEnum[\"FUNC_SUBTRACT\"] = 32778] = \"FUNC_SUBTRACT\";\n GLEnum[GLEnum[\"FUNC_REVERSE_SUBTRACT\"] = 32779] = \"FUNC_REVERSE_SUBTRACT\";\n // Getting GL parameter information\n // Constants passed to getParameter() to specify what information to return.\n /** Passed to getParameter to get the current RGB blend function. */\n GLEnum[GLEnum[\"BLEND_EQUATION\"] = 32777] = \"BLEND_EQUATION\";\n /** Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION */\n GLEnum[GLEnum[\"BLEND_EQUATION_RGB\"] = 32777] = \"BLEND_EQUATION_RGB\";\n /** Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION */\n GLEnum[GLEnum[\"BLEND_EQUATION_ALPHA\"] = 34877] = \"BLEND_EQUATION_ALPHA\";\n /** Passed to getParameter to get the current destination RGB blend function. */\n GLEnum[GLEnum[\"BLEND_DST_RGB\"] = 32968] = \"BLEND_DST_RGB\";\n /** Passed to getParameter to get the current destination RGB blend function. */\n GLEnum[GLEnum[\"BLEND_SRC_RGB\"] = 32969] = \"BLEND_SRC_RGB\";\n /** Passed to getParameter to get the current destination alpha blend function. */\n GLEnum[GLEnum[\"BLEND_DST_ALPHA\"] = 32970] = \"BLEND_DST_ALPHA\";\n /** Passed to getParameter to get the current source alpha blend function. */\n GLEnum[GLEnum[\"BLEND_SRC_ALPHA\"] = 32971] = \"BLEND_SRC_ALPHA\";\n /** Passed to getParameter to return a the current blend color. */\n GLEnum[GLEnum[\"BLEND_COLOR\"] = 32773] = \"BLEND_COLOR\";\n /** Passed to getParameter to get the array buffer binding. */\n GLEnum[GLEnum[\"ARRAY_BUFFER_BINDING\"] = 34964] = \"ARRAY_BUFFER_BINDING\";\n /** Passed to getParameter to get the current element array buffer. */\n GLEnum[GLEnum[\"ELEMENT_ARRAY_BUFFER_BINDING\"] = 34965] = \"ELEMENT_ARRAY_BUFFER_BINDING\";\n /** Passed to getParameter to get the current lineWidth (set by the lineWidth method). */\n GLEnum[GLEnum[\"LINE_WIDTH\"] = 2849] = \"LINE_WIDTH\";\n /** Passed to getParameter to get the current size of a point drawn with gl.POINTS */\n GLEnum[GLEnum[\"ALIASED_POINT_SIZE_RANGE\"] = 33901] = \"ALIASED_POINT_SIZE_RANGE\";\n /** Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1. */\n GLEnum[GLEnum[\"ALIASED_LINE_WIDTH_RANGE\"] = 33902] = \"ALIASED_LINE_WIDTH_RANGE\";\n /** Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK */\n GLEnum[GLEnum[\"CULL_FACE_MODE\"] = 2885] = \"CULL_FACE_MODE\";\n /** Passed to getParameter to determine the current value of frontFace. Should return CW or CCW. */\n GLEnum[GLEnum[\"FRONT_FACE\"] = 2886] = \"FRONT_FACE\";\n /** Passed to getParameter to return a length-2 array of floats giving the current depth range. */\n GLEnum[GLEnum[\"DEPTH_RANGE\"] = 2928] = \"DEPTH_RANGE\";\n /** Passed to getParameter to determine if the depth write mask is enabled. */\n GLEnum[GLEnum[\"DEPTH_WRITEMASK\"] = 2930] = \"DEPTH_WRITEMASK\";\n /** Passed to getParameter to determine the current depth clear value. */\n GLEnum[GLEnum[\"DEPTH_CLEAR_VALUE\"] = 2931] = \"DEPTH_CLEAR_VALUE\";\n /** Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL. */\n GLEnum[GLEnum[\"DEPTH_FUNC\"] = 2932] = \"DEPTH_FUNC\";\n /** Passed to getParameter to get the value the stencil will be cleared to. */\n GLEnum[GLEnum[\"STENCIL_CLEAR_VALUE\"] = 2961] = \"STENCIL_CLEAR_VALUE\";\n /** Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL. */\n GLEnum[GLEnum[\"STENCIL_FUNC\"] = 2962] = \"STENCIL_FUNC\";\n /** Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_FAIL\"] = 2964] = \"STENCIL_FAIL\";\n /** Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_PASS_DEPTH_FAIL\"] = 2965] = \"STENCIL_PASS_DEPTH_FAIL\";\n /** Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_PASS_DEPTH_PASS\"] = 2966] = \"STENCIL_PASS_DEPTH_PASS\";\n /** Passed to getParameter to get the reference value used for stencil tests. */\n GLEnum[GLEnum[\"STENCIL_REF\"] = 2967] = \"STENCIL_REF\";\n GLEnum[GLEnum[\"STENCIL_VALUE_MASK\"] = 2963] = \"STENCIL_VALUE_MASK\";\n GLEnum[GLEnum[\"STENCIL_WRITEMASK\"] = 2968] = \"STENCIL_WRITEMASK\";\n GLEnum[GLEnum[\"STENCIL_BACK_FUNC\"] = 34816] = \"STENCIL_BACK_FUNC\";\n GLEnum[GLEnum[\"STENCIL_BACK_FAIL\"] = 34817] = \"STENCIL_BACK_FAIL\";\n GLEnum[GLEnum[\"STENCIL_BACK_PASS_DEPTH_FAIL\"] = 34818] = \"STENCIL_BACK_PASS_DEPTH_FAIL\";\n GLEnum[GLEnum[\"STENCIL_BACK_PASS_DEPTH_PASS\"] = 34819] = \"STENCIL_BACK_PASS_DEPTH_PASS\";\n GLEnum[GLEnum[\"STENCIL_BACK_REF\"] = 36003] = \"STENCIL_BACK_REF\";\n GLEnum[GLEnum[\"STENCIL_BACK_VALUE_MASK\"] = 36004] = \"STENCIL_BACK_VALUE_MASK\";\n GLEnum[GLEnum[\"STENCIL_BACK_WRITEMASK\"] = 36005] = \"STENCIL_BACK_WRITEMASK\";\n /** An Int32Array with four elements for the current viewport dimensions. */\n GLEnum[GLEnum[\"VIEWPORT\"] = 2978] = \"VIEWPORT\";\n /** An Int32Array with four elements for the current scissor box dimensions. */\n GLEnum[GLEnum[\"SCISSOR_BOX\"] = 3088] = \"SCISSOR_BOX\";\n GLEnum[GLEnum[\"COLOR_CLEAR_VALUE\"] = 3106] = \"COLOR_CLEAR_VALUE\";\n GLEnum[GLEnum[\"COLOR_WRITEMASK\"] = 3107] = \"COLOR_WRITEMASK\";\n GLEnum[GLEnum[\"UNPACK_ALIGNMENT\"] = 3317] = \"UNPACK_ALIGNMENT\";\n GLEnum[GLEnum[\"PACK_ALIGNMENT\"] = 3333] = \"PACK_ALIGNMENT\";\n GLEnum[GLEnum[\"MAX_TEXTURE_SIZE\"] = 3379] = \"MAX_TEXTURE_SIZE\";\n GLEnum[GLEnum[\"MAX_VIEWPORT_DIMS\"] = 3386] = \"MAX_VIEWPORT_DIMS\";\n GLEnum[GLEnum[\"SUBPIXEL_BITS\"] = 3408] = \"SUBPIXEL_BITS\";\n GLEnum[GLEnum[\"RED_BITS\"] = 3410] = \"RED_BITS\";\n GLEnum[GLEnum[\"GREEN_BITS\"] = 3411] = \"GREEN_BITS\";\n GLEnum[GLEnum[\"BLUE_BITS\"] = 3412] = \"BLUE_BITS\";\n GLEnum[GLEnum[\"ALPHA_BITS\"] = 3413] = \"ALPHA_BITS\";\n GLEnum[GLEnum[\"DEPTH_BITS\"] = 3414] = \"DEPTH_BITS\";\n GLEnum[GLEnum[\"STENCIL_BITS\"] = 3415] = \"STENCIL_BITS\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_UNITS\"] = 10752] = \"POLYGON_OFFSET_UNITS\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_FACTOR\"] = 32824] = \"POLYGON_OFFSET_FACTOR\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_2D\"] = 32873] = \"TEXTURE_BINDING_2D\";\n GLEnum[GLEnum[\"SAMPLE_BUFFERS\"] = 32936] = \"SAMPLE_BUFFERS\";\n GLEnum[GLEnum[\"SAMPLES\"] = 32937] = \"SAMPLES\";\n GLEnum[GLEnum[\"SAMPLE_COVERAGE_VALUE\"] = 32938] = \"SAMPLE_COVERAGE_VALUE\";\n GLEnum[GLEnum[\"SAMPLE_COVERAGE_INVERT\"] = 32939] = \"SAMPLE_COVERAGE_INVERT\";\n GLEnum[GLEnum[\"COMPRESSED_TEXTURE_FORMATS\"] = 34467] = \"COMPRESSED_TEXTURE_FORMATS\";\n GLEnum[GLEnum[\"VENDOR\"] = 7936] = \"VENDOR\";\n GLEnum[GLEnum[\"RENDERER\"] = 7937] = \"RENDERER\";\n GLEnum[GLEnum[\"VERSION\"] = 7938] = \"VERSION\";\n GLEnum[GLEnum[\"IMPLEMENTATION_COLOR_READ_TYPE\"] = 35738] = \"IMPLEMENTATION_COLOR_READ_TYPE\";\n GLEnum[GLEnum[\"IMPLEMENTATION_COLOR_READ_FORMAT\"] = 35739] = \"IMPLEMENTATION_COLOR_READ_FORMAT\";\n GLEnum[GLEnum[\"BROWSER_DEFAULT_WEBGL\"] = 37444] = \"BROWSER_DEFAULT_WEBGL\";\n // Buffers\n // Constants passed to bufferData(), bufferSubData(), bindBuffer(), or\n // getBufferParameter().\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often. */\n GLEnum[GLEnum[\"STATIC_DRAW\"] = 35044] = \"STATIC_DRAW\";\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often. */\n GLEnum[GLEnum[\"STREAM_DRAW\"] = 35040] = \"STREAM_DRAW\";\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often. */\n GLEnum[GLEnum[\"DYNAMIC_DRAW\"] = 35048] = \"DYNAMIC_DRAW\";\n /** Passed to bindBuffer or bufferData to specify the type of buffer being used. */\n GLEnum[GLEnum[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n /** Passed to bindBuffer or bufferData to specify the type of buffer being used. */\n GLEnum[GLEnum[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n /** Passed to getBufferParameter to get a buffer's size. */\n GLEnum[GLEnum[\"BUFFER_SIZE\"] = 34660] = \"BUFFER_SIZE\";\n /** Passed to getBufferParameter to get the hint for the buffer passed in when it was created. */\n GLEnum[GLEnum[\"BUFFER_USAGE\"] = 34661] = \"BUFFER_USAGE\";\n // Vertex attributes\n // Constants passed to getVertexAttrib().\n /** Passed to getVertexAttrib to read back the current vertex attribute. */\n GLEnum[GLEnum[\"CURRENT_VERTEX_ATTRIB\"] = 34342] = \"CURRENT_VERTEX_ATTRIB\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_ENABLED\"] = 34338] = \"VERTEX_ATTRIB_ARRAY_ENABLED\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_SIZE\"] = 34339] = \"VERTEX_ATTRIB_ARRAY_SIZE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_STRIDE\"] = 34340] = \"VERTEX_ATTRIB_ARRAY_STRIDE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_TYPE\"] = 34341] = \"VERTEX_ATTRIB_ARRAY_TYPE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_NORMALIZED\"] = 34922] = \"VERTEX_ATTRIB_ARRAY_NORMALIZED\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_POINTER\"] = 34373] = \"VERTEX_ATTRIB_ARRAY_POINTER\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\"] = 34975] = \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\";\n // Culling\n // Constants passed to cullFace().\n /** Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method. */\n GLEnum[GLEnum[\"CULL_FACE\"] = 2884] = \"CULL_FACE\";\n /** Passed to cullFace to specify that only front faces should be culled. */\n GLEnum[GLEnum[\"FRONT\"] = 1028] = \"FRONT\";\n /** Passed to cullFace to specify that only back faces should be culled. */\n GLEnum[GLEnum[\"BACK\"] = 1029] = \"BACK\";\n /** Passed to cullFace to specify that front and back faces should be culled. */\n GLEnum[GLEnum[\"FRONT_AND_BACK\"] = 1032] = \"FRONT_AND_BACK\";\n // Enabling and disabling\n // Constants passed to enable() or disable().\n /** Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method. */\n GLEnum[GLEnum[\"BLEND\"] = 3042] = \"BLEND\";\n /** Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test. */\n GLEnum[GLEnum[\"DEPTH_TEST\"] = 2929] = \"DEPTH_TEST\";\n /** Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method. */\n GLEnum[GLEnum[\"DITHER\"] = 3024] = \"DITHER\";\n /** Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test. */\n GLEnum[GLEnum[\"POLYGON_OFFSET_FILL\"] = 32823] = \"POLYGON_OFFSET_FILL\";\n /** Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels. */\n GLEnum[GLEnum[\"SAMPLE_ALPHA_TO_COVERAGE\"] = 32926] = \"SAMPLE_ALPHA_TO_COVERAGE\";\n /** Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling. */\n GLEnum[GLEnum[\"SAMPLE_COVERAGE\"] = 32928] = \"SAMPLE_COVERAGE\";\n /** Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test. */\n GLEnum[GLEnum[\"SCISSOR_TEST\"] = 3089] = \"SCISSOR_TEST\";\n /** Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test. */\n GLEnum[GLEnum[\"STENCIL_TEST\"] = 2960] = \"STENCIL_TEST\";\n // Errors\n // Constants returned from getError().\n /** Returned from getError(). */\n GLEnum[GLEnum[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_ENUM\"] = 1280] = \"INVALID_ENUM\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_VALUE\"] = 1281] = \"INVALID_VALUE\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_OPERATION\"] = 1282] = \"INVALID_OPERATION\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"OUT_OF_MEMORY\"] = 1285] = \"OUT_OF_MEMORY\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"CONTEXT_LOST_WEBGL\"] = 37442] = \"CONTEXT_LOST_WEBGL\";\n // Front face directions\n // Constants passed to frontFace().\n /** Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction */\n GLEnum[GLEnum[\"CW\"] = 2304] = \"CW\";\n /** Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction */\n GLEnum[GLEnum[\"CCW\"] = 2305] = \"CCW\";\n // Hints\n // Constants passed to hint()\n /** There is no preference for this behavior. */\n GLEnum[GLEnum[\"DONT_CARE\"] = 4352] = \"DONT_CARE\";\n /** The most efficient behavior should be used. */\n GLEnum[GLEnum[\"FASTEST\"] = 4353] = \"FASTEST\";\n /** The most correct or the highest quality option should be used. */\n GLEnum[GLEnum[\"NICEST\"] = 4354] = \"NICEST\";\n /** Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap(). */\n GLEnum[GLEnum[\"GENERATE_MIPMAP_HINT\"] = 33170] = \"GENERATE_MIPMAP_HINT\";\n // Data types\n GLEnum[GLEnum[\"BYTE\"] = 5120] = \"BYTE\";\n GLEnum[GLEnum[\"UNSIGNED_BYTE\"] = 5121] = \"UNSIGNED_BYTE\";\n GLEnum[GLEnum[\"SHORT\"] = 5122] = \"SHORT\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT\"] = 5123] = \"UNSIGNED_SHORT\";\n GLEnum[GLEnum[\"INT\"] = 5124] = \"INT\";\n GLEnum[GLEnum[\"UNSIGNED_INT\"] = 5125] = \"UNSIGNED_INT\";\n GLEnum[GLEnum[\"FLOAT\"] = 5126] = \"FLOAT\";\n GLEnum[GLEnum[\"DOUBLE\"] = 5130] = \"DOUBLE\";\n // Pixel formats\n GLEnum[GLEnum[\"DEPTH_COMPONENT\"] = 6402] = \"DEPTH_COMPONENT\";\n GLEnum[GLEnum[\"ALPHA\"] = 6406] = \"ALPHA\";\n GLEnum[GLEnum[\"RGB\"] = 6407] = \"RGB\";\n GLEnum[GLEnum[\"RGBA\"] = 6408] = \"RGBA\";\n GLEnum[GLEnum[\"LUMINANCE\"] = 6409] = \"LUMINANCE\";\n GLEnum[GLEnum[\"LUMINANCE_ALPHA\"] = 6410] = \"LUMINANCE_ALPHA\";\n // Pixel types\n // UNSIGNED_BYTE = 0x1401,\n GLEnum[GLEnum[\"UNSIGNED_SHORT_4_4_4_4\"] = 32819] = \"UNSIGNED_SHORT_4_4_4_4\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT_5_5_5_1\"] = 32820] = \"UNSIGNED_SHORT_5_5_5_1\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT_5_6_5\"] = 33635] = \"UNSIGNED_SHORT_5_6_5\";\n // Shaders\n // Constants passed to createShader() or getShaderParameter()\n /** Passed to createShader to define a fragment shader. */\n GLEnum[GLEnum[\"FRAGMENT_SHADER\"] = 35632] = \"FRAGMENT_SHADER\";\n /** Passed to createShader to define a vertex shader */\n GLEnum[GLEnum[\"VERTEX_SHADER\"] = 35633] = \"VERTEX_SHADER\";\n /** Passed to getShaderParameter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error */\n GLEnum[GLEnum[\"COMPILE_STATUS\"] = 35713] = \"COMPILE_STATUS\";\n /** Passed to getShaderParameter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise. */\n GLEnum[GLEnum[\"DELETE_STATUS\"] = 35712] = \"DELETE_STATUS\";\n /** Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error. */\n GLEnum[GLEnum[\"LINK_STATUS\"] = 35714] = \"LINK_STATUS\";\n /** Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found. */\n GLEnum[GLEnum[\"VALIDATE_STATUS\"] = 35715] = \"VALIDATE_STATUS\";\n /** Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred. */\n GLEnum[GLEnum[\"ATTACHED_SHADERS\"] = 35717] = \"ATTACHED_SHADERS\";\n /** Passed to getProgramParameter to get the number of attributes active in a program. */\n GLEnum[GLEnum[\"ACTIVE_ATTRIBUTES\"] = 35721] = \"ACTIVE_ATTRIBUTES\";\n /** Passed to getProgramParameter to get the number of uniforms active in a program. */\n GLEnum[GLEnum[\"ACTIVE_UNIFORMS\"] = 35718] = \"ACTIVE_UNIFORMS\";\n /** The maximum number of entries possible in the vertex attribute list. */\n GLEnum[GLEnum[\"MAX_VERTEX_ATTRIBS\"] = 34921] = \"MAX_VERTEX_ATTRIBS\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_VECTORS\"] = 36347] = \"MAX_VERTEX_UNIFORM_VECTORS\";\n GLEnum[GLEnum[\"MAX_VARYING_VECTORS\"] = 36348] = \"MAX_VARYING_VECTORS\";\n GLEnum[GLEnum[\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\"] = 35661] = \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\";\n GLEnum[GLEnum[\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\"] = 35660] = \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\";\n /** Implementation dependent number of maximum texture units. At least 8. */\n GLEnum[GLEnum[\"MAX_TEXTURE_IMAGE_UNITS\"] = 34930] = \"MAX_TEXTURE_IMAGE_UNITS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_VECTORS\"] = 36349] = \"MAX_FRAGMENT_UNIFORM_VECTORS\";\n GLEnum[GLEnum[\"SHADER_TYPE\"] = 35663] = \"SHADER_TYPE\";\n GLEnum[GLEnum[\"SHADING_LANGUAGE_VERSION\"] = 35724] = \"SHADING_LANGUAGE_VERSION\";\n GLEnum[GLEnum[\"CURRENT_PROGRAM\"] = 35725] = \"CURRENT_PROGRAM\";\n // Depth or stencil tests\n // Constants passed to depthFunc() or stencilFunc().\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass, i.e., nothing will be drawn. */\n GLEnum[GLEnum[\"NEVER\"] = 512] = \"NEVER\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value. */\n GLEnum[GLEnum[\"LESS\"] = 513] = \"LESS\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value. */\n GLEnum[GLEnum[\"EQUAL\"] = 514] = \"EQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value. */\n GLEnum[GLEnum[\"LEQUAL\"] = 515] = \"LEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value. */\n GLEnum[GLEnum[\"GREATER\"] = 516] = \"GREATER\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value. */\n GLEnum[GLEnum[\"NOTEQUAL\"] = 517] = \"NOTEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value. */\n GLEnum[GLEnum[\"GEQUAL\"] = 518] = \"GEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass, i.e., pixels will be drawn in the order they are drawn. */\n GLEnum[GLEnum[\"ALWAYS\"] = 519] = \"ALWAYS\";\n // Stencil actions\n // Constants passed to stencilOp().\n GLEnum[GLEnum[\"KEEP\"] = 7680] = \"KEEP\";\n GLEnum[GLEnum[\"REPLACE\"] = 7681] = \"REPLACE\";\n GLEnum[GLEnum[\"INCR\"] = 7682] = \"INCR\";\n GLEnum[GLEnum[\"DECR\"] = 7683] = \"DECR\";\n GLEnum[GLEnum[\"INVERT\"] = 5386] = \"INVERT\";\n GLEnum[GLEnum[\"INCR_WRAP\"] = 34055] = \"INCR_WRAP\";\n GLEnum[GLEnum[\"DECR_WRAP\"] = 34056] = \"DECR_WRAP\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GLEnum[GLEnum[\"NEAREST\"] = 9728] = \"NEAREST\";\n GLEnum[GLEnum[\"LINEAR\"] = 9729] = \"LINEAR\";\n GLEnum[GLEnum[\"NEAREST_MIPMAP_NEAREST\"] = 9984] = \"NEAREST_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"NEAREST_MIPMAP_LINEAR\"] = 9986] = \"NEAREST_MIPMAP_LINEAR\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_LINEAR\"] = 9987] = \"LINEAR_MIPMAP_LINEAR\";\n /** The texture magnification function is used when the pixel being textured maps to an area less than or equal to one texture element. It sets the texture magnification function to either GL_NEAREST or GL_LINEAR (see below). GL_NEAREST is generally faster than GL_LINEAR, but it can produce textured images with sharper edges because the transition between texture elements is not as smooth. Default: GL_LINEAR. */\n GLEnum[GLEnum[\"TEXTURE_MAG_FILTER\"] = 10240] = \"TEXTURE_MAG_FILTER\";\n /** The texture minifying function is used whenever the pixel being textured maps to an area greater than one texture element. There are six defined minifying functions. Two of them use the nearest one or nearest four texture elements to compute the texture value. The other four use mipmaps. Default: GL_NEAREST_MIPMAP_LINEAR */\n GLEnum[GLEnum[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_S\"] = 10242] = \"TEXTURE_WRAP_S\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_T\"] = 10243] = \"TEXTURE_WRAP_T\";\n GLEnum[GLEnum[\"TEXTURE_2D\"] = 3553] = \"TEXTURE_2D\";\n GLEnum[GLEnum[\"TEXTURE\"] = 5890] = \"TEXTURE\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP\"] = 34067] = \"TEXTURE_CUBE_MAP\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_CUBE_MAP\"] = 34068] = \"TEXTURE_BINDING_CUBE_MAP\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_X\"] = 34069] = \"TEXTURE_CUBE_MAP_POSITIVE_X\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_X\"] = 34070] = \"TEXTURE_CUBE_MAP_NEGATIVE_X\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_Y\"] = 34071] = \"TEXTURE_CUBE_MAP_POSITIVE_Y\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_Y\"] = 34072] = \"TEXTURE_CUBE_MAP_NEGATIVE_Y\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_Z\"] = 34073] = \"TEXTURE_CUBE_MAP_POSITIVE_Z\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_Z\"] = 34074] = \"TEXTURE_CUBE_MAP_NEGATIVE_Z\";\n GLEnum[GLEnum[\"MAX_CUBE_MAP_TEXTURE_SIZE\"] = 34076] = \"MAX_CUBE_MAP_TEXTURE_SIZE\";\n // TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.\n GLEnum[GLEnum[\"TEXTURE0\"] = 33984] = \"TEXTURE0\";\n GLEnum[GLEnum[\"ACTIVE_TEXTURE\"] = 34016] = \"ACTIVE_TEXTURE\";\n GLEnum[GLEnum[\"REPEAT\"] = 10497] = \"REPEAT\";\n GLEnum[GLEnum[\"CLAMP_TO_EDGE\"] = 33071] = \"CLAMP_TO_EDGE\";\n GLEnum[GLEnum[\"MIRRORED_REPEAT\"] = 33648] = \"MIRRORED_REPEAT\";\n // Emulation\n GLEnum[GLEnum[\"TEXTURE_WIDTH\"] = 4096] = \"TEXTURE_WIDTH\";\n GLEnum[GLEnum[\"TEXTURE_HEIGHT\"] = 4097] = \"TEXTURE_HEIGHT\";\n // Uniform types\n GLEnum[GLEnum[\"FLOAT_VEC2\"] = 35664] = \"FLOAT_VEC2\";\n GLEnum[GLEnum[\"FLOAT_VEC3\"] = 35665] = \"FLOAT_VEC3\";\n GLEnum[GLEnum[\"FLOAT_VEC4\"] = 35666] = \"FLOAT_VEC4\";\n GLEnum[GLEnum[\"INT_VEC2\"] = 35667] = \"INT_VEC2\";\n GLEnum[GLEnum[\"INT_VEC3\"] = 35668] = \"INT_VEC3\";\n GLEnum[GLEnum[\"INT_VEC4\"] = 35669] = \"INT_VEC4\";\n GLEnum[GLEnum[\"BOOL\"] = 35670] = \"BOOL\";\n GLEnum[GLEnum[\"BOOL_VEC2\"] = 35671] = \"BOOL_VEC2\";\n GLEnum[GLEnum[\"BOOL_VEC3\"] = 35672] = \"BOOL_VEC3\";\n GLEnum[GLEnum[\"BOOL_VEC4\"] = 35673] = \"BOOL_VEC4\";\n GLEnum[GLEnum[\"FLOAT_MAT2\"] = 35674] = \"FLOAT_MAT2\";\n GLEnum[GLEnum[\"FLOAT_MAT3\"] = 35675] = \"FLOAT_MAT3\";\n GLEnum[GLEnum[\"FLOAT_MAT4\"] = 35676] = \"FLOAT_MAT4\";\n GLEnum[GLEnum[\"SAMPLER_2D\"] = 35678] = \"SAMPLER_2D\";\n GLEnum[GLEnum[\"SAMPLER_CUBE\"] = 35680] = \"SAMPLER_CUBE\";\n // Shader precision-specified types\n GLEnum[GLEnum[\"LOW_FLOAT\"] = 36336] = \"LOW_FLOAT\";\n GLEnum[GLEnum[\"MEDIUM_FLOAT\"] = 36337] = \"MEDIUM_FLOAT\";\n GLEnum[GLEnum[\"HIGH_FLOAT\"] = 36338] = \"HIGH_FLOAT\";\n GLEnum[GLEnum[\"LOW_INT\"] = 36339] = \"LOW_INT\";\n GLEnum[GLEnum[\"MEDIUM_INT\"] = 36340] = \"MEDIUM_INT\";\n GLEnum[GLEnum[\"HIGH_INT\"] = 36341] = \"HIGH_INT\";\n // Framebuffers and renderbuffers\n GLEnum[GLEnum[\"FRAMEBUFFER\"] = 36160] = \"FRAMEBUFFER\";\n GLEnum[GLEnum[\"RENDERBUFFER\"] = 36161] = \"RENDERBUFFER\";\n GLEnum[GLEnum[\"RGBA4\"] = 32854] = \"RGBA4\";\n GLEnum[GLEnum[\"RGB5_A1\"] = 32855] = \"RGB5_A1\";\n GLEnum[GLEnum[\"RGB565\"] = 36194] = \"RGB565\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT16\"] = 33189] = \"DEPTH_COMPONENT16\";\n GLEnum[GLEnum[\"STENCIL_INDEX\"] = 6401] = \"STENCIL_INDEX\";\n GLEnum[GLEnum[\"STENCIL_INDEX8\"] = 36168] = \"STENCIL_INDEX8\";\n GLEnum[GLEnum[\"DEPTH_STENCIL\"] = 34041] = \"DEPTH_STENCIL\";\n GLEnum[GLEnum[\"RENDERBUFFER_WIDTH\"] = 36162] = \"RENDERBUFFER_WIDTH\";\n GLEnum[GLEnum[\"RENDERBUFFER_HEIGHT\"] = 36163] = \"RENDERBUFFER_HEIGHT\";\n GLEnum[GLEnum[\"RENDERBUFFER_INTERNAL_FORMAT\"] = 36164] = \"RENDERBUFFER_INTERNAL_FORMAT\";\n GLEnum[GLEnum[\"RENDERBUFFER_RED_SIZE\"] = 36176] = \"RENDERBUFFER_RED_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_GREEN_SIZE\"] = 36177] = \"RENDERBUFFER_GREEN_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_BLUE_SIZE\"] = 36178] = \"RENDERBUFFER_BLUE_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_ALPHA_SIZE\"] = 36179] = \"RENDERBUFFER_ALPHA_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_DEPTH_SIZE\"] = 36180] = \"RENDERBUFFER_DEPTH_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_STENCIL_SIZE\"] = 36181] = \"RENDERBUFFER_STENCIL_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\"] = 36048] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\"] = 36049] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\"] = 36050] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\"] = 36051] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT0\"] = 36064] = \"COLOR_ATTACHMENT0\";\n GLEnum[GLEnum[\"DEPTH_ATTACHMENT\"] = 36096] = \"DEPTH_ATTACHMENT\";\n GLEnum[GLEnum[\"STENCIL_ATTACHMENT\"] = 36128] = \"STENCIL_ATTACHMENT\";\n GLEnum[GLEnum[\"DEPTH_STENCIL_ATTACHMENT\"] = 33306] = \"DEPTH_STENCIL_ATTACHMENT\";\n GLEnum[GLEnum[\"NONE\"] = 0] = \"NONE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_COMPLETE\"] = 36053] = \"FRAMEBUFFER_COMPLETE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\"] = 36054] = \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\"] = 36055] = \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\"] = 36057] = \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";\n GLEnum[GLEnum[\"FRAMEBUFFER_UNSUPPORTED\"] = 36061] = \"FRAMEBUFFER_UNSUPPORTED\";\n GLEnum[GLEnum[\"FRAMEBUFFER_BINDING\"] = 36006] = \"FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"RENDERBUFFER_BINDING\"] = 36007] = \"RENDERBUFFER_BINDING\";\n GLEnum[GLEnum[\"READ_FRAMEBUFFER\"] = 36008] = \"READ_FRAMEBUFFER\";\n GLEnum[GLEnum[\"DRAW_FRAMEBUFFER\"] = 36009] = \"DRAW_FRAMEBUFFER\";\n GLEnum[GLEnum[\"MAX_RENDERBUFFER_SIZE\"] = 34024] = \"MAX_RENDERBUFFER_SIZE\";\n GLEnum[GLEnum[\"INVALID_FRAMEBUFFER_OPERATION\"] = 1286] = \"INVALID_FRAMEBUFFER_OPERATION\";\n // Pixel storage modes\n // Constants passed to pixelStorei().\n GLEnum[GLEnum[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n GLEnum[GLEnum[\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\"] = 37441] = \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"UNPACK_COLORSPACE_CONVERSION_WEBGL\"] = 37443] = \"UNPACK_COLORSPACE_CONVERSION_WEBGL\";\n // Additional constants defined WebGL 2\n // These constants are defined on the WebGL2RenderingContext interface.\n // All WebGL 1 constants are also available in a WebGL 2 context.\n // Getting GL parameter information\n // Constants passed to getParameter()\n // to specify what information to return.\n GLEnum[GLEnum[\"READ_BUFFER\"] = 3074] = \"READ_BUFFER\";\n GLEnum[GLEnum[\"UNPACK_ROW_LENGTH\"] = 3314] = \"UNPACK_ROW_LENGTH\";\n GLEnum[GLEnum[\"UNPACK_SKIP_ROWS\"] = 3315] = \"UNPACK_SKIP_ROWS\";\n GLEnum[GLEnum[\"UNPACK_SKIP_PIXELS\"] = 3316] = \"UNPACK_SKIP_PIXELS\";\n GLEnum[GLEnum[\"PACK_ROW_LENGTH\"] = 3330] = \"PACK_ROW_LENGTH\";\n GLEnum[GLEnum[\"PACK_SKIP_ROWS\"] = 3331] = \"PACK_SKIP_ROWS\";\n GLEnum[GLEnum[\"PACK_SKIP_PIXELS\"] = 3332] = \"PACK_SKIP_PIXELS\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_3D\"] = 32874] = \"TEXTURE_BINDING_3D\";\n GLEnum[GLEnum[\"UNPACK_SKIP_IMAGES\"] = 32877] = \"UNPACK_SKIP_IMAGES\";\n GLEnum[GLEnum[\"UNPACK_IMAGE_HEIGHT\"] = 32878] = \"UNPACK_IMAGE_HEIGHT\";\n GLEnum[GLEnum[\"MAX_3D_TEXTURE_SIZE\"] = 32883] = \"MAX_3D_TEXTURE_SIZE\";\n GLEnum[GLEnum[\"MAX_ELEMENTS_VERTICES\"] = 33000] = \"MAX_ELEMENTS_VERTICES\";\n GLEnum[GLEnum[\"MAX_ELEMENTS_INDICES\"] = 33001] = \"MAX_ELEMENTS_INDICES\";\n GLEnum[GLEnum[\"MAX_TEXTURE_LOD_BIAS\"] = 34045] = \"MAX_TEXTURE_LOD_BIAS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_COMPONENTS\"] = 35657] = \"MAX_FRAGMENT_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_COMPONENTS\"] = 35658] = \"MAX_VERTEX_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_ARRAY_TEXTURE_LAYERS\"] = 35071] = \"MAX_ARRAY_TEXTURE_LAYERS\";\n GLEnum[GLEnum[\"MIN_PROGRAM_TEXEL_OFFSET\"] = 35076] = \"MIN_PROGRAM_TEXEL_OFFSET\";\n GLEnum[GLEnum[\"MAX_PROGRAM_TEXEL_OFFSET\"] = 35077] = \"MAX_PROGRAM_TEXEL_OFFSET\";\n GLEnum[GLEnum[\"MAX_VARYING_COMPONENTS\"] = 35659] = \"MAX_VARYING_COMPONENTS\";\n GLEnum[GLEnum[\"FRAGMENT_SHADER_DERIVATIVE_HINT\"] = 35723] = \"FRAGMENT_SHADER_DERIVATIVE_HINT\";\n GLEnum[GLEnum[\"RASTERIZER_DISCARD\"] = 35977] = \"RASTERIZER_DISCARD\";\n GLEnum[GLEnum[\"VERTEX_ARRAY_BINDING\"] = 34229] = \"VERTEX_ARRAY_BINDING\";\n GLEnum[GLEnum[\"MAX_VERTEX_OUTPUT_COMPONENTS\"] = 37154] = \"MAX_VERTEX_OUTPUT_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_INPUT_COMPONENTS\"] = 37157] = \"MAX_FRAGMENT_INPUT_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_SERVER_WAIT_TIMEOUT\"] = 37137] = \"MAX_SERVER_WAIT_TIMEOUT\";\n GLEnum[GLEnum[\"MAX_ELEMENT_INDEX\"] = 36203] = \"MAX_ELEMENT_INDEX\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GLEnum[GLEnum[\"RED\"] = 6403] = \"RED\";\n GLEnum[GLEnum[\"RGB8\"] = 32849] = \"RGB8\";\n GLEnum[GLEnum[\"RGBA8\"] = 32856] = \"RGBA8\";\n GLEnum[GLEnum[\"RGB10_A2\"] = 32857] = \"RGB10_A2\";\n GLEnum[GLEnum[\"TEXTURE_3D\"] = 32879] = \"TEXTURE_3D\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_R\"] = 32882] = \"TEXTURE_WRAP_R\";\n GLEnum[GLEnum[\"TEXTURE_MIN_LOD\"] = 33082] = \"TEXTURE_MIN_LOD\";\n GLEnum[GLEnum[\"TEXTURE_MAX_LOD\"] = 33083] = \"TEXTURE_MAX_LOD\";\n GLEnum[GLEnum[\"TEXTURE_BASE_LEVEL\"] = 33084] = \"TEXTURE_BASE_LEVEL\";\n GLEnum[GLEnum[\"TEXTURE_MAX_LEVEL\"] = 33085] = \"TEXTURE_MAX_LEVEL\";\n GLEnum[GLEnum[\"TEXTURE_COMPARE_MODE\"] = 34892] = \"TEXTURE_COMPARE_MODE\";\n GLEnum[GLEnum[\"TEXTURE_COMPARE_FUNC\"] = 34893] = \"TEXTURE_COMPARE_FUNC\";\n GLEnum[GLEnum[\"SRGB\"] = 35904] = \"SRGB\";\n GLEnum[GLEnum[\"SRGB8\"] = 35905] = \"SRGB8\";\n GLEnum[GLEnum[\"SRGB8_ALPHA8\"] = 35907] = \"SRGB8_ALPHA8\";\n GLEnum[GLEnum[\"COMPARE_REF_TO_TEXTURE\"] = 34894] = \"COMPARE_REF_TO_TEXTURE\";\n GLEnum[GLEnum[\"RGBA32F\"] = 34836] = \"RGBA32F\";\n GLEnum[GLEnum[\"RGB32F\"] = 34837] = \"RGB32F\";\n GLEnum[GLEnum[\"RGBA16F\"] = 34842] = \"RGBA16F\";\n GLEnum[GLEnum[\"RGB16F\"] = 34843] = \"RGB16F\";\n GLEnum[GLEnum[\"TEXTURE_2D_ARRAY\"] = 35866] = \"TEXTURE_2D_ARRAY\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_2D_ARRAY\"] = 35869] = \"TEXTURE_BINDING_2D_ARRAY\";\n GLEnum[GLEnum[\"R11F_G11F_B10F\"] = 35898] = \"R11F_G11F_B10F\";\n GLEnum[GLEnum[\"RGB9_E5\"] = 35901] = \"RGB9_E5\";\n GLEnum[GLEnum[\"RGBA32UI\"] = 36208] = \"RGBA32UI\";\n GLEnum[GLEnum[\"RGB32UI\"] = 36209] = \"RGB32UI\";\n GLEnum[GLEnum[\"RGBA16UI\"] = 36214] = \"RGBA16UI\";\n GLEnum[GLEnum[\"RGB16UI\"] = 36215] = \"RGB16UI\";\n GLEnum[GLEnum[\"RGBA8UI\"] = 36220] = \"RGBA8UI\";\n GLEnum[GLEnum[\"RGB8UI\"] = 36221] = \"RGB8UI\";\n GLEnum[GLEnum[\"RGBA32I\"] = 36226] = \"RGBA32I\";\n GLEnum[GLEnum[\"RGB32I\"] = 36227] = \"RGB32I\";\n GLEnum[GLEnum[\"RGBA16I\"] = 36232] = \"RGBA16I\";\n GLEnum[GLEnum[\"RGB16I\"] = 36233] = \"RGB16I\";\n GLEnum[GLEnum[\"RGBA8I\"] = 36238] = \"RGBA8I\";\n GLEnum[GLEnum[\"RGB8I\"] = 36239] = \"RGB8I\";\n GLEnum[GLEnum[\"RED_INTEGER\"] = 36244] = \"RED_INTEGER\";\n GLEnum[GLEnum[\"RGB_INTEGER\"] = 36248] = \"RGB_INTEGER\";\n GLEnum[GLEnum[\"RGBA_INTEGER\"] = 36249] = \"RGBA_INTEGER\";\n GLEnum[GLEnum[\"R8\"] = 33321] = \"R8\";\n GLEnum[GLEnum[\"RG8\"] = 33323] = \"RG8\";\n GLEnum[GLEnum[\"R16F\"] = 33325] = \"R16F\";\n GLEnum[GLEnum[\"R32F\"] = 33326] = \"R32F\";\n GLEnum[GLEnum[\"RG16F\"] = 33327] = \"RG16F\";\n GLEnum[GLEnum[\"RG32F\"] = 33328] = \"RG32F\";\n GLEnum[GLEnum[\"R8I\"] = 33329] = \"R8I\";\n GLEnum[GLEnum[\"R8UI\"] = 33330] = \"R8UI\";\n GLEnum[GLEnum[\"R16I\"] = 33331] = \"R16I\";\n GLEnum[GLEnum[\"R16UI\"] = 33332] = \"R16UI\";\n GLEnum[GLEnum[\"R32I\"] = 33333] = \"R32I\";\n GLEnum[GLEnum[\"R32UI\"] = 33334] = \"R32UI\";\n GLEnum[GLEnum[\"RG8I\"] = 33335] = \"RG8I\";\n GLEnum[GLEnum[\"RG8UI\"] = 33336] = \"RG8UI\";\n GLEnum[GLEnum[\"RG16I\"] = 33337] = \"RG16I\";\n GLEnum[GLEnum[\"RG16UI\"] = 33338] = \"RG16UI\";\n GLEnum[GLEnum[\"RG32I\"] = 33339] = \"RG32I\";\n GLEnum[GLEnum[\"RG32UI\"] = 33340] = \"RG32UI\";\n GLEnum[GLEnum[\"R8_SNORM\"] = 36756] = \"R8_SNORM\";\n GLEnum[GLEnum[\"RG8_SNORM\"] = 36757] = \"RG8_SNORM\";\n GLEnum[GLEnum[\"RGB8_SNORM\"] = 36758] = \"RGB8_SNORM\";\n GLEnum[GLEnum[\"RGBA8_SNORM\"] = 36759] = \"RGBA8_SNORM\";\n GLEnum[GLEnum[\"RGB10_A2UI\"] = 36975] = \"RGB10_A2UI\";\n /* covered by extension\n COMPRESSED_R11_EAC = 0x9270,\n COMPRESSED_SIGNED_R11_EAC = 0x9271,\n COMPRESSED_RG11_EAC = 0x9272,\n COMPRESSED_SIGNED_RG11_EAC = 0x9273,\n COMPRESSED_RGB8_ETC2 = 0x9274,\n COMPRESSED_SRGB8_ETC2 = 0x9275,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC = 0x9277,\n COMPRESSED_RGBA8_ETC2_EAC = 0x9278,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279,\n */\n GLEnum[GLEnum[\"TEXTURE_IMMUTABLE_FORMAT\"] = 37167] = \"TEXTURE_IMMUTABLE_FORMAT\";\n GLEnum[GLEnum[\"TEXTURE_IMMUTABLE_LEVELS\"] = 33503] = \"TEXTURE_IMMUTABLE_LEVELS\";\n // Pixel types\n GLEnum[GLEnum[\"UNSIGNED_INT_2_10_10_10_REV\"] = 33640] = \"UNSIGNED_INT_2_10_10_10_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_10F_11F_11F_REV\"] = 35899] = \"UNSIGNED_INT_10F_11F_11F_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_5_9_9_9_REV\"] = 35902] = \"UNSIGNED_INT_5_9_9_9_REV\";\n GLEnum[GLEnum[\"FLOAT_32_UNSIGNED_INT_24_8_REV\"] = 36269] = \"FLOAT_32_UNSIGNED_INT_24_8_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_24_8\"] = 34042] = \"UNSIGNED_INT_24_8\";\n GLEnum[GLEnum[\"HALF_FLOAT\"] = 5131] = \"HALF_FLOAT\";\n GLEnum[GLEnum[\"RG\"] = 33319] = \"RG\";\n GLEnum[GLEnum[\"RG_INTEGER\"] = 33320] = \"RG_INTEGER\";\n GLEnum[GLEnum[\"INT_2_10_10_10_REV\"] = 36255] = \"INT_2_10_10_10_REV\";\n // Queries\n GLEnum[GLEnum[\"CURRENT_QUERY\"] = 34917] = \"CURRENT_QUERY\";\n /** Returns a GLuint containing the query result. */\n GLEnum[GLEnum[\"QUERY_RESULT\"] = 34918] = \"QUERY_RESULT\";\n /** Whether query result is available. */\n GLEnum[GLEnum[\"QUERY_RESULT_AVAILABLE\"] = 34919] = \"QUERY_RESULT_AVAILABLE\";\n /** Occlusion query (if drawing passed depth test) */\n GLEnum[GLEnum[\"ANY_SAMPLES_PASSED\"] = 35887] = \"ANY_SAMPLES_PASSED\";\n /** Occlusion query less accurate/faster version */\n GLEnum[GLEnum[\"ANY_SAMPLES_PASSED_CONSERVATIVE\"] = 36202] = \"ANY_SAMPLES_PASSED_CONSERVATIVE\";\n // Draw buffers\n GLEnum[GLEnum[\"MAX_DRAW_BUFFERS\"] = 34852] = \"MAX_DRAW_BUFFERS\";\n GLEnum[GLEnum[\"DRAW_BUFFER0\"] = 34853] = \"DRAW_BUFFER0\";\n GLEnum[GLEnum[\"DRAW_BUFFER1\"] = 34854] = \"DRAW_BUFFER1\";\n GLEnum[GLEnum[\"DRAW_BUFFER2\"] = 34855] = \"DRAW_BUFFER2\";\n GLEnum[GLEnum[\"DRAW_BUFFER3\"] = 34856] = \"DRAW_BUFFER3\";\n GLEnum[GLEnum[\"DRAW_BUFFER4\"] = 34857] = \"DRAW_BUFFER4\";\n GLEnum[GLEnum[\"DRAW_BUFFER5\"] = 34858] = \"DRAW_BUFFER5\";\n GLEnum[GLEnum[\"DRAW_BUFFER6\"] = 34859] = \"DRAW_BUFFER6\";\n GLEnum[GLEnum[\"DRAW_BUFFER7\"] = 34860] = \"DRAW_BUFFER7\";\n GLEnum[GLEnum[\"DRAW_BUFFER8\"] = 34861] = \"DRAW_BUFFER8\";\n GLEnum[GLEnum[\"DRAW_BUFFER9\"] = 34862] = \"DRAW_BUFFER9\";\n GLEnum[GLEnum[\"DRAW_BUFFER10\"] = 34863] = \"DRAW_BUFFER10\";\n GLEnum[GLEnum[\"DRAW_BUFFER11\"] = 34864] = \"DRAW_BUFFER11\";\n GLEnum[GLEnum[\"DRAW_BUFFER12\"] = 34865] = \"DRAW_BUFFER12\";\n GLEnum[GLEnum[\"DRAW_BUFFER13\"] = 34866] = \"DRAW_BUFFER13\";\n GLEnum[GLEnum[\"DRAW_BUFFER14\"] = 34867] = \"DRAW_BUFFER14\";\n GLEnum[GLEnum[\"DRAW_BUFFER15\"] = 34868] = \"DRAW_BUFFER15\";\n GLEnum[GLEnum[\"MAX_COLOR_ATTACHMENTS\"] = 36063] = \"MAX_COLOR_ATTACHMENTS\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT1\"] = 36065] = \"COLOR_ATTACHMENT1\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT2\"] = 36066] = \"COLOR_ATTACHMENT2\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT3\"] = 36067] = \"COLOR_ATTACHMENT3\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT4\"] = 36068] = \"COLOR_ATTACHMENT4\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT5\"] = 36069] = \"COLOR_ATTACHMENT5\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT6\"] = 36070] = \"COLOR_ATTACHMENT6\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT7\"] = 36071] = \"COLOR_ATTACHMENT7\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT8\"] = 36072] = \"COLOR_ATTACHMENT8\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT9\"] = 36073] = \"COLOR_ATTACHMENT9\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT10\"] = 36074] = \"COLOR_ATTACHMENT10\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT11\"] = 36075] = \"COLOR_ATTACHMENT11\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT12\"] = 36076] = \"COLOR_ATTACHMENT12\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT13\"] = 36077] = \"COLOR_ATTACHMENT13\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT14\"] = 36078] = \"COLOR_ATTACHMENT14\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT15\"] = 36079] = \"COLOR_ATTACHMENT15\";\n // Samplers\n GLEnum[GLEnum[\"SAMPLER_3D\"] = 35679] = \"SAMPLER_3D\";\n GLEnum[GLEnum[\"SAMPLER_2D_SHADOW\"] = 35682] = \"SAMPLER_2D_SHADOW\";\n GLEnum[GLEnum[\"SAMPLER_2D_ARRAY\"] = 36289] = \"SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"SAMPLER_2D_ARRAY_SHADOW\"] = 36292] = \"SAMPLER_2D_ARRAY_SHADOW\";\n GLEnum[GLEnum[\"SAMPLER_CUBE_SHADOW\"] = 36293] = \"SAMPLER_CUBE_SHADOW\";\n GLEnum[GLEnum[\"INT_SAMPLER_2D\"] = 36298] = \"INT_SAMPLER_2D\";\n GLEnum[GLEnum[\"INT_SAMPLER_3D\"] = 36299] = \"INT_SAMPLER_3D\";\n GLEnum[GLEnum[\"INT_SAMPLER_CUBE\"] = 36300] = \"INT_SAMPLER_CUBE\";\n GLEnum[GLEnum[\"INT_SAMPLER_2D_ARRAY\"] = 36303] = \"INT_SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_2D\"] = 36306] = \"UNSIGNED_INT_SAMPLER_2D\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_3D\"] = 36307] = \"UNSIGNED_INT_SAMPLER_3D\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_CUBE\"] = 36308] = \"UNSIGNED_INT_SAMPLER_CUBE\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_2D_ARRAY\"] = 36311] = \"UNSIGNED_INT_SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"MAX_SAMPLES\"] = 36183] = \"MAX_SAMPLES\";\n GLEnum[GLEnum[\"SAMPLER_BINDING\"] = 35097] = \"SAMPLER_BINDING\";\n // Buffers\n GLEnum[GLEnum[\"PIXEL_PACK_BUFFER\"] = 35051] = \"PIXEL_PACK_BUFFER\";\n GLEnum[GLEnum[\"PIXEL_UNPACK_BUFFER\"] = 35052] = \"PIXEL_UNPACK_BUFFER\";\n GLEnum[GLEnum[\"PIXEL_PACK_BUFFER_BINDING\"] = 35053] = \"PIXEL_PACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"PIXEL_UNPACK_BUFFER_BINDING\"] = 35055] = \"PIXEL_UNPACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"COPY_READ_BUFFER\"] = 36662] = \"COPY_READ_BUFFER\";\n GLEnum[GLEnum[\"COPY_WRITE_BUFFER\"] = 36663] = \"COPY_WRITE_BUFFER\";\n GLEnum[GLEnum[\"COPY_READ_BUFFER_BINDING\"] = 36662] = \"COPY_READ_BUFFER_BINDING\";\n GLEnum[GLEnum[\"COPY_WRITE_BUFFER_BINDING\"] = 36663] = \"COPY_WRITE_BUFFER_BINDING\";\n // Data types\n GLEnum[GLEnum[\"FLOAT_MAT2x3\"] = 35685] = \"FLOAT_MAT2x3\";\n GLEnum[GLEnum[\"FLOAT_MAT2x4\"] = 35686] = \"FLOAT_MAT2x4\";\n GLEnum[GLEnum[\"FLOAT_MAT3x2\"] = 35687] = \"FLOAT_MAT3x2\";\n GLEnum[GLEnum[\"FLOAT_MAT3x4\"] = 35688] = \"FLOAT_MAT3x4\";\n GLEnum[GLEnum[\"FLOAT_MAT4x2\"] = 35689] = \"FLOAT_MAT4x2\";\n GLEnum[GLEnum[\"FLOAT_MAT4x3\"] = 35690] = \"FLOAT_MAT4x3\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC2\"] = 36294] = \"UNSIGNED_INT_VEC2\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC3\"] = 36295] = \"UNSIGNED_INT_VEC3\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC4\"] = 36296] = \"UNSIGNED_INT_VEC4\";\n GLEnum[GLEnum[\"UNSIGNED_NORMALIZED\"] = 35863] = \"UNSIGNED_NORMALIZED\";\n GLEnum[GLEnum[\"SIGNED_NORMALIZED\"] = 36764] = \"SIGNED_NORMALIZED\";\n // Vertex attributes\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_INTEGER\"] = 35069] = \"VERTEX_ATTRIB_ARRAY_INTEGER\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_DIVISOR\"] = 35070] = \"VERTEX_ATTRIB_ARRAY_DIVISOR\";\n // Transform feedback\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_MODE\"] = 35967] = \"TRANSFORM_FEEDBACK_BUFFER_MODE\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\"] = 35968] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_VARYINGS\"] = 35971] = \"TRANSFORM_FEEDBACK_VARYINGS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_START\"] = 35972] = \"TRANSFORM_FEEDBACK_BUFFER_START\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_SIZE\"] = 35973] = \"TRANSFORM_FEEDBACK_BUFFER_SIZE\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\"] = 35976] = \"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\"] = 35978] = \"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\"] = 35979] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\";\n GLEnum[GLEnum[\"INTERLEAVED_ATTRIBS\"] = 35980] = \"INTERLEAVED_ATTRIBS\";\n GLEnum[GLEnum[\"SEPARATE_ATTRIBS\"] = 35981] = \"SEPARATE_ATTRIBS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER\"] = 35982] = \"TRANSFORM_FEEDBACK_BUFFER\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_BINDING\"] = 35983] = \"TRANSFORM_FEEDBACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK\"] = 36386] = \"TRANSFORM_FEEDBACK\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_PAUSED\"] = 36387] = \"TRANSFORM_FEEDBACK_PAUSED\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_ACTIVE\"] = 36388] = \"TRANSFORM_FEEDBACK_ACTIVE\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BINDING\"] = 36389] = \"TRANSFORM_FEEDBACK_BINDING\";\n // Framebuffers and renderbuffers\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\"] = 33296] = \"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\"] = 33297] = \"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_RED_SIZE\"] = 33298] = \"FRAMEBUFFER_ATTACHMENT_RED_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\"] = 33299] = \"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\"] = 33300] = \"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\"] = 33301] = \"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\"] = 33302] = \"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\"] = 33303] = \"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_DEFAULT\"] = 33304] = \"FRAMEBUFFER_DEFAULT\";\n // DEPTH_STENCIL_ATTACHMENT = 0x821A,\n // DEPTH_STENCIL = 0x84F9,\n GLEnum[GLEnum[\"DEPTH24_STENCIL8\"] = 35056] = \"DEPTH24_STENCIL8\";\n GLEnum[GLEnum[\"DRAW_FRAMEBUFFER_BINDING\"] = 36006] = \"DRAW_FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"READ_FRAMEBUFFER_BINDING\"] = 36010] = \"READ_FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"RENDERBUFFER_SAMPLES\"] = 36011] = \"RENDERBUFFER_SAMPLES\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\"] = 36052] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\"] = 36182] = \"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\";\n // Uniforms\n GLEnum[GLEnum[\"UNIFORM_BUFFER\"] = 35345] = \"UNIFORM_BUFFER\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_BINDING\"] = 35368] = \"UNIFORM_BUFFER_BINDING\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_START\"] = 35369] = \"UNIFORM_BUFFER_START\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_SIZE\"] = 35370] = \"UNIFORM_BUFFER_SIZE\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_BLOCKS\"] = 35371] = \"MAX_VERTEX_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_BLOCKS\"] = 35373] = \"MAX_FRAGMENT_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_COMBINED_UNIFORM_BLOCKS\"] = 35374] = \"MAX_COMBINED_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_UNIFORM_BUFFER_BINDINGS\"] = 35375] = \"MAX_UNIFORM_BUFFER_BINDINGS\";\n GLEnum[GLEnum[\"MAX_UNIFORM_BLOCK_SIZE\"] = 35376] = \"MAX_UNIFORM_BLOCK_SIZE\";\n GLEnum[GLEnum[\"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\"] = 35377] = \"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\"] = 35379] = \"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_OFFSET_ALIGNMENT\"] = 35380] = \"UNIFORM_BUFFER_OFFSET_ALIGNMENT\";\n GLEnum[GLEnum[\"ACTIVE_UNIFORM_BLOCKS\"] = 35382] = \"ACTIVE_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"UNIFORM_TYPE\"] = 35383] = \"UNIFORM_TYPE\";\n GLEnum[GLEnum[\"UNIFORM_SIZE\"] = 35384] = \"UNIFORM_SIZE\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_INDEX\"] = 35386] = \"UNIFORM_BLOCK_INDEX\";\n GLEnum[GLEnum[\"UNIFORM_OFFSET\"] = 35387] = \"UNIFORM_OFFSET\";\n GLEnum[GLEnum[\"UNIFORM_ARRAY_STRIDE\"] = 35388] = \"UNIFORM_ARRAY_STRIDE\";\n GLEnum[GLEnum[\"UNIFORM_MATRIX_STRIDE\"] = 35389] = \"UNIFORM_MATRIX_STRIDE\";\n GLEnum[GLEnum[\"UNIFORM_IS_ROW_MAJOR\"] = 35390] = \"UNIFORM_IS_ROW_MAJOR\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_BINDING\"] = 35391] = \"UNIFORM_BLOCK_BINDING\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_DATA_SIZE\"] = 35392] = \"UNIFORM_BLOCK_DATA_SIZE\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_ACTIVE_UNIFORMS\"] = 35394] = \"UNIFORM_BLOCK_ACTIVE_UNIFORMS\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\"] = 35395] = \"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\"] = 35396] = \"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\"] = 35398] = \"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\";\n // Sync objects\n GLEnum[GLEnum[\"OBJECT_TYPE\"] = 37138] = \"OBJECT_TYPE\";\n GLEnum[GLEnum[\"SYNC_CONDITION\"] = 37139] = \"SYNC_CONDITION\";\n GLEnum[GLEnum[\"SYNC_STATUS\"] = 37140] = \"SYNC_STATUS\";\n GLEnum[GLEnum[\"SYNC_FLAGS\"] = 37141] = \"SYNC_FLAGS\";\n GLEnum[GLEnum[\"SYNC_FENCE\"] = 37142] = \"SYNC_FENCE\";\n GLEnum[GLEnum[\"SYNC_GPU_COMMANDS_COMPLETE\"] = 37143] = \"SYNC_GPU_COMMANDS_COMPLETE\";\n GLEnum[GLEnum[\"UNSIGNALED\"] = 37144] = \"UNSIGNALED\";\n GLEnum[GLEnum[\"SIGNALED\"] = 37145] = \"SIGNALED\";\n GLEnum[GLEnum[\"ALREADY_SIGNALED\"] = 37146] = \"ALREADY_SIGNALED\";\n GLEnum[GLEnum[\"TIMEOUT_EXPIRED\"] = 37147] = \"TIMEOUT_EXPIRED\";\n GLEnum[GLEnum[\"CONDITION_SATISFIED\"] = 37148] = \"CONDITION_SATISFIED\";\n GLEnum[GLEnum[\"WAIT_FAILED\"] = 37149] = \"WAIT_FAILED\";\n GLEnum[GLEnum[\"SYNC_FLUSH_COMMANDS_BIT\"] = 1] = \"SYNC_FLUSH_COMMANDS_BIT\";\n // Miscellaneous constants\n GLEnum[GLEnum[\"COLOR\"] = 6144] = \"COLOR\";\n GLEnum[GLEnum[\"DEPTH\"] = 6145] = \"DEPTH\";\n GLEnum[GLEnum[\"STENCIL\"] = 6146] = \"STENCIL\";\n GLEnum[GLEnum[\"MIN\"] = 32775] = \"MIN\";\n GLEnum[GLEnum[\"MAX\"] = 32776] = \"MAX\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT24\"] = 33190] = \"DEPTH_COMPONENT24\";\n GLEnum[GLEnum[\"STREAM_READ\"] = 35041] = \"STREAM_READ\";\n GLEnum[GLEnum[\"STREAM_COPY\"] = 35042] = \"STREAM_COPY\";\n GLEnum[GLEnum[\"STATIC_READ\"] = 35045] = \"STATIC_READ\";\n GLEnum[GLEnum[\"STATIC_COPY\"] = 35046] = \"STATIC_COPY\";\n GLEnum[GLEnum[\"DYNAMIC_READ\"] = 35049] = \"DYNAMIC_READ\";\n GLEnum[GLEnum[\"DYNAMIC_COPY\"] = 35050] = \"DYNAMIC_COPY\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT32F\"] = 36012] = \"DEPTH_COMPONENT32F\";\n GLEnum[GLEnum[\"DEPTH32F_STENCIL8\"] = 36013] = \"DEPTH32F_STENCIL8\";\n GLEnum[GLEnum[\"INVALID_INDEX\"] = 4294967295] = \"INVALID_INDEX\";\n GLEnum[GLEnum[\"TIMEOUT_IGNORED\"] = -1] = \"TIMEOUT_IGNORED\";\n GLEnum[GLEnum[\"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\"] = 37447] = \"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\";\n // Constants defined in WebGL extensions\n // WEBGL_debug_renderer_info\n /** Passed to getParameter to get the vendor string of the graphics driver. */\n GLEnum[GLEnum[\"UNMASKED_VENDOR_WEBGL\"] = 37445] = \"UNMASKED_VENDOR_WEBGL\";\n /** Passed to getParameter to get the renderer string of the graphics driver. */\n GLEnum[GLEnum[\"UNMASKED_RENDERER_WEBGL\"] = 37446] = \"UNMASKED_RENDERER_WEBGL\";\n // EXT_texture_filter_anisotropic\n /** Returns the maximum available anisotropy. */\n GLEnum[GLEnum[\"MAX_TEXTURE_MAX_ANISOTROPY_EXT\"] = 34047] = \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\";\n /** Passed to texParameter to set the desired maximum anisotropy for a texture. */\n GLEnum[GLEnum[\"TEXTURE_MAX_ANISOTROPY_EXT\"] = 34046] = \"TEXTURE_MAX_ANISOTROPY_EXT\";\n // EXT_texture_norm16 - https://khronos.org/registry/webgl/extensions/EXT_texture_norm16/\n GLEnum[GLEnum[\"R16_EXT\"] = 33322] = \"R16_EXT\";\n GLEnum[GLEnum[\"RG16_EXT\"] = 33324] = \"RG16_EXT\";\n GLEnum[GLEnum[\"RGB16_EXT\"] = 32852] = \"RGB16_EXT\";\n GLEnum[GLEnum[\"RGBA16_EXT\"] = 32859] = \"RGBA16_EXT\";\n GLEnum[GLEnum[\"R16_SNORM_EXT\"] = 36760] = \"R16_SNORM_EXT\";\n GLEnum[GLEnum[\"RG16_SNORM_EXT\"] = 36761] = \"RG16_SNORM_EXT\";\n GLEnum[GLEnum[\"RGB16_SNORM_EXT\"] = 36762] = \"RGB16_SNORM_EXT\";\n GLEnum[GLEnum[\"RGBA16_SNORM_EXT\"] = 36763] = \"RGBA16_SNORM_EXT\";\n // WEBGL_compressed_texture_s3tc (BC1, BC2, BC3)\n /** A DXT1-compressed image in an RGB image format. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n /** A DXT1-compressed image in an RGB image format with a simple on/off alpha value. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT1_EXT\"] = 33777] = \"COMPRESSED_RGBA_S3TC_DXT1_EXT\";\n /** A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT3_EXT\"] = 33778] = \"COMPRESSED_RGBA_S3TC_DXT3_EXT\";\n /** A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n // WEBGL_compressed_texture_s3tc_srgb (BC1, BC2, BC3 - SRGB)\n GLEnum[GLEnum[\"COMPRESSED_SRGB_S3TC_DXT1_EXT\"] = 35916] = \"COMPRESSED_SRGB_S3TC_DXT1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\"] = 35917] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\"] = 35918] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\"] = 35919] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\";\n // WEBGL_compressed_texture_rgtc (BC4, BC5)\n GLEnum[GLEnum[\"COMPRESSED_RED_RGTC1_EXT\"] = 36283] = \"COMPRESSED_RED_RGTC1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RED_RGTC1_EXT\"] = 36284] = \"COMPRESSED_SIGNED_RED_RGTC1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RED_GREEN_RGTC2_EXT\"] = 36285] = \"COMPRESSED_RED_GREEN_RGTC2_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT\"] = 36286] = \"COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT\";\n // WEBGL_compressed_texture_bptc (BC6, BC7)\n GLEnum[GLEnum[\"COMPRESSED_RGBA_BPTC_UNORM_EXT\"] = 36492] = \"COMPRESSED_RGBA_BPTC_UNORM_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT\"] = 36493] = \"COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT\"] = 36494] = \"COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT\"] = 36495] = \"COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT\";\n // WEBGL_compressed_texture_es3\n /** One-channel (red) unsigned format compression. */\n GLEnum[GLEnum[\"COMPRESSED_R11_EAC\"] = 37488] = \"COMPRESSED_R11_EAC\";\n /** One-channel (red) signed format compression. */\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_R11_EAC\"] = 37489] = \"COMPRESSED_SIGNED_R11_EAC\";\n /** Two-channel (red and green) unsigned format compression. */\n GLEnum[GLEnum[\"COMPRESSED_RG11_EAC\"] = 37490] = \"COMPRESSED_RG11_EAC\";\n /** Two-channel (red and green) signed format compression. */\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RG11_EAC\"] = 37491] = \"COMPRESSED_SIGNED_RG11_EAC\";\n /** Compresses RGB8 data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_RGB8_ETC2\"] = 37492] = \"COMPRESSED_RGB8_ETC2\";\n /** Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA8_ETC2_EAC\"] = 37493] = \"COMPRESSED_RGBA8_ETC2_EAC\";\n /** Compresses sRGB8 data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ETC2\"] = 37494] = \"COMPRESSED_SRGB8_ETC2\";\n /** Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\"] = 37495] = \"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\";\n /** Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent. */\n GLEnum[GLEnum[\"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37496] = \"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n /** Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37497] = \"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n // WEBGL_compressed_texture_pvrtc\n /** RGB compression in 4-bit mode. One block for each 4×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n /** RGBA compression in 4-bit mode. One block for each 4×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n /** RGB compression in 2-bit mode. One block for each 8×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\"] = 35841] = \"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\";\n /** RGBA compression in 2-bit mode. One block for each 8×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\"] = 35843] = \"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\";\n // WEBGL_compressed_texture_etc1\n /** Compresses 24-bit RGB data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n // WEBGL_compressed_texture_atc\n GLEnum[GLEnum[\"COMPRESSED_RGB_ATC_WEBGL\"] = 35986] = \"COMPRESSED_RGB_ATC_WEBGL\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\"] = 35986] = \"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\"] = 34798] = \"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\";\n // WEBGL_compressed_texture_astc\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_4x4_KHR\"] = 37808] = \"COMPRESSED_RGBA_ASTC_4x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_5x4_KHR\"] = 37809] = \"COMPRESSED_RGBA_ASTC_5x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_5x5_KHR\"] = 37810] = \"COMPRESSED_RGBA_ASTC_5x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_6x5_KHR\"] = 37811] = \"COMPRESSED_RGBA_ASTC_6x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_6x6_KHR\"] = 37812] = \"COMPRESSED_RGBA_ASTC_6x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x5_KHR\"] = 37813] = \"COMPRESSED_RGBA_ASTC_8x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x6_KHR\"] = 37814] = \"COMPRESSED_RGBA_ASTC_8x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x8_KHR\"] = 37815] = \"COMPRESSED_RGBA_ASTC_8x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x5_KHR\"] = 37816] = \"COMPRESSED_RGBA_ASTC_10x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x6_KHR\"] = 37817] = \"COMPRESSED_RGBA_ASTC_10x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x8_KHR\"] = 37818] = \"COMPRESSED_RGBA_ASTC_10x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x10_KHR\"] = 37819] = \"COMPRESSED_RGBA_ASTC_10x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_12x10_KHR\"] = 37820] = \"COMPRESSED_RGBA_ASTC_12x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_12x12_KHR\"] = 37821] = \"COMPRESSED_RGBA_ASTC_12x12_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR\"] = 37840] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR\"] = 37841] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR\"] = 37842] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR\"] = 37843] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR\"] = 37844] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR\"] = 37845] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR\"] = 37846] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR\"] = 37847] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR\"] = 37848] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR\"] = 37849] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR\"] = 37850] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR\"] = 37851] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR\"] = 37852] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\"] = 37853] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\";\n // EXT_disjoint_timer_query\n /** The number of bits used to hold the query result for the given target. */\n GLEnum[GLEnum[\"QUERY_COUNTER_BITS_EXT\"] = 34916] = \"QUERY_COUNTER_BITS_EXT\";\n /** The currently active query. */\n GLEnum[GLEnum[\"CURRENT_QUERY_EXT\"] = 34917] = \"CURRENT_QUERY_EXT\";\n /** The query result. */\n GLEnum[GLEnum[\"QUERY_RESULT_EXT\"] = 34918] = \"QUERY_RESULT_EXT\";\n /** A Boolean indicating whether or not a query result is available. */\n GLEnum[GLEnum[\"QUERY_RESULT_AVAILABLE_EXT\"] = 34919] = \"QUERY_RESULT_AVAILABLE_EXT\";\n /** Elapsed time (in nanoseconds). */\n GLEnum[GLEnum[\"TIME_ELAPSED_EXT\"] = 35007] = \"TIME_ELAPSED_EXT\";\n /** The current time. */\n GLEnum[GLEnum[\"TIMESTAMP_EXT\"] = 36392] = \"TIMESTAMP_EXT\";\n /** A Boolean indicating whether or not the GPU performed any disjoint operation (lost context) */\n GLEnum[GLEnum[\"GPU_DISJOINT_EXT\"] = 36795] = \"GPU_DISJOINT_EXT\";\n // KHR_parallel_shader_compile https://registry.khronos.org/webgl/extensions/KHR_parallel_shader_compile\n /** a non-blocking poll operation, so that compile/link status availability can be queried without potentially incurring stalls */\n GLEnum[GLEnum[\"COMPLETION_STATUS_KHR\"] = 37297] = \"COMPLETION_STATUS_KHR\";\n // EXT_depth_clamp https://registry.khronos.org/webgl/extensions/EXT_depth_clamp/\n /** Disables depth clipping */\n GLEnum[GLEnum[\"DEPTH_CLAMP_EXT\"] = 34383] = \"DEPTH_CLAMP_EXT\";\n // WEBGL_provoking_vertex https://registry.khronos.org/webgl/extensions/WEBGL_provoking_vertex/\n /** Values of first vertex in primitive are used for flat shading */\n GLEnum[GLEnum[\"FIRST_VERTEX_CONVENTION_WEBGL\"] = 36429] = \"FIRST_VERTEX_CONVENTION_WEBGL\";\n /** Values of first vertex in primitive are used for flat shading */\n GLEnum[GLEnum[\"LAST_VERTEX_CONVENTION_WEBGL\"] = 36430] = \"LAST_VERTEX_CONVENTION_WEBGL\";\n /** Controls which vertex in primitive is used for flat shading */\n GLEnum[GLEnum[\"PROVOKING_VERTEX_WEBL\"] = 36431] = \"PROVOKING_VERTEX_WEBL\";\n // WEBGL_polygon_mode https://registry.khronos.org/webgl/extensions/WEBGL_polygon_mode/\n GLEnum[GLEnum[\"POLYGON_MODE_WEBGL\"] = 2880] = \"POLYGON_MODE_WEBGL\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_LINE_WEBGL\"] = 10754] = \"POLYGON_OFFSET_LINE_WEBGL\";\n GLEnum[GLEnum[\"LINE_WEBGL\"] = 6913] = \"LINE_WEBGL\";\n GLEnum[GLEnum[\"FILL_WEBGL\"] = 6914] = \"FILL_WEBGL\";\n // WEBGL_clip_cull_distance https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/\n /** Max clip distances */\n GLEnum[GLEnum[\"MAX_CLIP_DISTANCES_WEBGL\"] = 3378] = \"MAX_CLIP_DISTANCES_WEBGL\";\n /** Max cull distances */\n GLEnum[GLEnum[\"MAX_CULL_DISTANCES_WEBGL\"] = 33529] = \"MAX_CULL_DISTANCES_WEBGL\";\n /** Max clip and cull distances */\n GLEnum[GLEnum[\"MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL\"] = 33530] = \"MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL\";\n /** Enable gl_ClipDistance[0] and gl_CullDistance[0] */\n GLEnum[GLEnum[\"CLIP_DISTANCE0_WEBGL\"] = 12288] = \"CLIP_DISTANCE0_WEBGL\";\n /** Enable gl_ClipDistance[1] and gl_CullDistance[1] */\n GLEnum[GLEnum[\"CLIP_DISTANCE1_WEBGL\"] = 12289] = \"CLIP_DISTANCE1_WEBGL\";\n /** Enable gl_ClipDistance[2] and gl_CullDistance[2] */\n GLEnum[GLEnum[\"CLIP_DISTANCE2_WEBGL\"] = 12290] = \"CLIP_DISTANCE2_WEBGL\";\n /** Enable gl_ClipDistance[3] and gl_CullDistance[3] */\n GLEnum[GLEnum[\"CLIP_DISTANCE3_WEBGL\"] = 12291] = \"CLIP_DISTANCE3_WEBGL\";\n /** Enable gl_ClipDistance[4] and gl_CullDistance[4] */\n GLEnum[GLEnum[\"CLIP_DISTANCE4_WEBGL\"] = 12292] = \"CLIP_DISTANCE4_WEBGL\";\n /** Enable gl_ClipDistance[5] and gl_CullDistance[5] */\n GLEnum[GLEnum[\"CLIP_DISTANCE5_WEBGL\"] = 12293] = \"CLIP_DISTANCE5_WEBGL\";\n /** Enable gl_ClipDistance[6] and gl_CullDistance[6] */\n GLEnum[GLEnum[\"CLIP_DISTANCE6_WEBGL\"] = 12294] = \"CLIP_DISTANCE6_WEBGL\";\n /** Enable gl_ClipDistance[7] and gl_CullDistance[7] */\n GLEnum[GLEnum[\"CLIP_DISTANCE7_WEBGL\"] = 12295] = \"CLIP_DISTANCE7_WEBGL\";\n /** EXT_polygon_offset_clamp https://registry.khronos.org/webgl/extensions/EXT_polygon_offset_clamp/ */\n GLEnum[GLEnum[\"POLYGON_OFFSET_CLAMP_EXT\"] = 36379] = \"POLYGON_OFFSET_CLAMP_EXT\";\n /** EXT_clip_control https://registry.khronos.org/webgl/extensions/EXT_clip_control/ */\n GLEnum[GLEnum[\"LOWER_LEFT_EXT\"] = 36001] = \"LOWER_LEFT_EXT\";\n GLEnum[GLEnum[\"UPPER_LEFT_EXT\"] = 36002] = \"UPPER_LEFT_EXT\";\n GLEnum[GLEnum[\"NEGATIVE_ONE_TO_ONE_EXT\"] = 37726] = \"NEGATIVE_ONE_TO_ONE_EXT\";\n GLEnum[GLEnum[\"ZERO_TO_ONE_EXT\"] = 37727] = \"ZERO_TO_ONE_EXT\";\n GLEnum[GLEnum[\"CLIP_ORIGIN_EXT\"] = 37724] = \"CLIP_ORIGIN_EXT\";\n GLEnum[GLEnum[\"CLIP_DEPTH_MODE_EXT\"] = 37725] = \"CLIP_DEPTH_MODE_EXT\";\n /** WEBGL_blend_func_extended https://registry.khronos.org/webgl/extensions/WEBGL_blend_func_extended/ */\n GLEnum[GLEnum[\"SRC1_COLOR_WEBGL\"] = 35065] = \"SRC1_COLOR_WEBGL\";\n GLEnum[GLEnum[\"SRC1_ALPHA_WEBGL\"] = 34185] = \"SRC1_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC1_COLOR_WEBGL\"] = 35066] = \"ONE_MINUS_SRC1_COLOR_WEBGL\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC1_ALPHA_WEBGL\"] = 35067] = \"ONE_MINUS_SRC1_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL\"] = 35068] = \"MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL\";\n /** EXT_texture_mirror_clamp_to_edge https://registry.khronos.org/webgl/extensions/EXT_texture_mirror_clamp_to_edge/ */\n GLEnum[GLEnum[\"MIRROR_CLAMP_TO_EDGE_EXT\"] = 34627] = \"MIRROR_CLAMP_TO_EDGE_EXT\";\n})(GLEnum || (GLEnum = {}));\nexport { GLEnum as GL };\n//# sourceMappingURL=webgl-constants.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Load a script (identified by an url). When the url returns, the\n * content of this file is added into a new script element, attached to the DOM (body element)\n * @param scriptUrl defines the url of the script to laod\n * @param scriptId defines the id of the script element\n */\nexport async function loadScript(scriptUrl, scriptId) {\n const head = document.getElementsByTagName('head')[0];\n if (!head) {\n throw new Error('loadScript');\n }\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', scriptUrl);\n if (scriptId) {\n script.id = scriptId;\n }\n return new Promise((resolve, reject) => {\n script.onload = resolve;\n script.onerror = error => reject(new Error(`Unable to load script '${scriptUrl}': ${error}`));\n head.appendChild(script);\n });\n}\n//# sourceMappingURL=load-script.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { loadScript } from \"../../utils/load-script.js\";\nconst LOG_LEVEL = 1;\nlet spector = null;\nlet initialized = false;\nexport const DEFAULT_SPECTOR_PROPS = {\n debugSpectorJS: log.get('debug-spectorjs'),\n // https://github.com/BabylonJS/Spector.js#basic-usage\n // https://forum.babylonjs.com/t/spectorcdn-is-temporarily-off/48241\n // spectorUrl: 'https://spectorcdn.babylonjs.com/spector.bundle.js';\n debugSpectorJSUrl: 'https://cdn.jsdelivr.net/npm/spectorjs@0.9.30/dist/spector.bundle.js',\n gl: undefined\n};\n/** Loads spector from CDN if not already installed */\nexport async function loadSpectorJS(props) {\n if (!globalThis.SPECTOR) {\n try {\n await loadScript(props.debugSpectorJSUrl || DEFAULT_SPECTOR_PROPS.debugSpectorJSUrl);\n }\n catch (error) {\n log.warn(String(error));\n }\n }\n}\nexport function initializeSpectorJS(props) {\n props = { ...DEFAULT_SPECTOR_PROPS, ...props };\n if (!props.debugSpectorJS) {\n return null;\n }\n if (!spector && globalThis.SPECTOR && !globalThis.luma?.spector) {\n log.probe(LOG_LEVEL, 'SPECTOR found and initialized. Start with `luma.spector.displayUI()`')();\n const { Spector: SpectorJS } = globalThis.SPECTOR;\n spector = new SpectorJS();\n if (globalThis.luma) {\n globalThis.luma.spector = spector;\n }\n }\n if (!spector) {\n return null;\n }\n if (!initialized) {\n initialized = true;\n // enables recording some extra information merged in the capture like texture memory sizes and formats\n spector.spyCanvases();\n // A callback when results are ready\n spector?.onCaptureStarted.add((capture) => log.info('Spector capture started:', capture)());\n spector?.onCapture.add((capture) => {\n log.info('Spector capture complete:', capture)();\n // Use undocumented Spector API to open the UI with our capture\n // See https://github.com/BabylonJS/Spector.js/blob/767ad1195a25b85a85c381f400eb50a979239eca/src/spector.ts#L124\n spector?.getResultUI();\n // @ts-expect-error private\n spector?.resultView.display();\n // @ts-expect-error private\n spector?.resultView.addCapture(capture);\n });\n }\n if (props.gl) {\n // capture startup\n const gl = props.gl;\n // @ts-expect-error\n const device = gl.device;\n spector?.startCapture(props.gl, 500); // 500 commands\n // @ts-expect-error\n gl.device = device;\n new Promise(resolve => setTimeout(resolve, 2000)).then(_ => {\n log.info('Spector capture stopped after 2 seconds')();\n spector?.stopCapture();\n // spector?.displayUI();\n });\n }\n return spector;\n}\n//# sourceMappingURL=spector.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\n// Rename constant to prevent inlining. We need the full set of constants for generating debug strings.\nimport { GL as GLEnum } from '@luma.gl/constants';\nimport { isBrowser } from '@probe.gl/env';\nimport { loadScript } from \"../../utils/load-script.js\";\nconst WEBGL_DEBUG_CDN_URL = 'https://unpkg.com/webgl-debug@2.0.1/index.js';\n// Helper to get shared context data\nfunction getWebGLContextData(gl) {\n gl.luma = gl.luma || {};\n return gl.luma;\n}\n/**\n * Loads Khronos WebGLDeveloperTools from CDN if not already installed\n * const WebGLDebugUtils = require('webgl-debug');\n * @see https://github.com/KhronosGroup/WebGLDeveloperTools\n * @see https://github.com/vorg/webgl-debug\n */\nexport async function loadWebGLDeveloperTools() {\n if (isBrowser() && !globalThis.WebGLDebugUtils) {\n globalThis.global = globalThis.global || globalThis;\n // @ts-expect-error Developer tools expects global to be set\n globalThis.global.module = {};\n await loadScript(WEBGL_DEBUG_CDN_URL);\n }\n}\n// Returns (a potentially new) context with debug instrumentation turned off or on.\n// Note that this actually returns a new context\nexport function makeDebugContext(gl, props = {}) {\n return props.debugWebGL || props.traceWebGL ? getDebugContext(gl, props) : getRealContext(gl);\n}\n// Returns the real context from either of the real/debug contexts\nfunction getRealContext(gl) {\n const data = getWebGLContextData(gl);\n // If the context has a realContext member, it is a debug context so return the realContext\n return data.realContext ? data.realContext : gl;\n}\n// Returns the debug context from either of the real/debug contexts\nfunction getDebugContext(gl, props) {\n if (!globalThis.WebGLDebugUtils) {\n log.warn('webgl-debug not loaded')();\n return gl;\n }\n const data = getWebGLContextData(gl);\n // If this already has a debug context, return it.\n if (data.debugContext) {\n return data.debugContext;\n }\n // Create a new debug context\n globalThis.WebGLDebugUtils.init({ ...GLEnum, ...gl });\n const glDebug = globalThis.WebGLDebugUtils.makeDebugContext(gl, onGLError.bind(null, props), onValidateGLFunc.bind(null, props));\n // Make sure we have all WebGL2 and extension constants (todo dynamic import to circumvent minification?)\n for (const key in GLEnum) {\n if (!(key in glDebug) && typeof GLEnum[key] === 'number') {\n glDebug[key] = GLEnum[key];\n }\n }\n // Ensure we have a clean prototype on the instrumented object\n // Note: setPrototypeOf does come with perf warnings, but we already take a bigger perf reduction\n // by synchronizing the WebGL errors after each WebGL call.\n class WebGLDebugContext {\n }\n Object.setPrototypeOf(glDebug, Object.getPrototypeOf(gl));\n Object.setPrototypeOf(WebGLDebugContext, glDebug);\n const debugContext = Object.create(WebGLDebugContext);\n // Store the debug context\n data.realContext = gl;\n data.debugContext = debugContext;\n debugContext.debug = true;\n // Return it\n return debugContext;\n}\n// DEBUG TRACING\nfunction getFunctionString(functionName, functionArgs) {\n // Cover bug in webgl-debug-tools\n functionArgs = Array.from(functionArgs).map(arg => (arg === undefined ? 'undefined' : arg));\n let args = globalThis.WebGLDebugUtils.glFunctionArgsToString(functionName, functionArgs);\n args = `${args.slice(0, 100)}${args.length > 100 ? '...' : ''}`;\n return `gl.${functionName}(${args})`;\n}\nfunction onGLError(props, err, functionName, args) {\n // Cover bug in webgl-debug-tools\n args = Array.from(args).map(arg => (arg === undefined ? 'undefined' : arg));\n const errorMessage = globalThis.WebGLDebugUtils.glEnumToString(err);\n const functionArgs = globalThis.WebGLDebugUtils.glFunctionArgsToString(functionName, args);\n const message = `${errorMessage} in gl.${functionName}(${functionArgs})`;\n // TODO - call device.reportError\n log.error(message)();\n debugger; // eslint-disable-line\n // throw new Error(message);\n}\n// Don't generate function string until it is needed\nfunction onValidateGLFunc(props, functionName, functionArgs) {\n let functionString = '';\n if (log.level >= 1) {\n functionString = getFunctionString(functionName, functionArgs);\n if (props.traceWebGL) {\n log.log(1, functionString)();\n }\n }\n for (const arg of functionArgs) {\n if (arg === undefined) {\n functionString = functionString || getFunctionString(functionName, functionArgs);\n debugger; // eslint-disable-line\n // throw new Error(`Undefined argument: ${functionString}`);\n }\n }\n}\n//# sourceMappingURL=webgl-developer-tools.js.map"],"names":["assert","condition","message","isBrowser","matches","VERSION","version","createLog","log","Log","mergeLoaderOptions","baseOptions","newOptions","mergeOptionsRecursively","level","options","key","newValue","NPM_TAG","getVersion","isWorker","isMobile","WorkerJob","jobName","workerThread","resolve","reject","type","payload","value","error","NodeWorker","workerURLCache","getLoadableWorkerURL","props","workerURL","getLoadableWorkerURLFromURL","getLoadableWorkerURLFromSource","url","workerSource","buildScriptSource","blob","workerUrl","getTransferList","object","recursive","transfers","transfersSet","isTransferable","NOOP","WorkerThread","name","source","data","transferList","event","worker","code","WorkerPool","onMessage","job","onError","startPromise","onStart","queuedJob","DEFAULT_PROPS","WorkerFarm","workerPool","getWorkerURL","workerOptions","workerFile","versionTag","validateWorkerVersion","coreVersion","workerVersion","canParseWithWorker","loader","parseWithWorker","context","parseOnMainThread","id","input","result","compareArrayBuffers","arrayBuffer1","arrayBuffer2","byteLength","array1","array2","i","concatenateArrayBuffers","sources","concatenateArrayBuffersFromArray","sourceArrays","source2","length","typedArray","offset","sourceArray","sliceArrayBuffer","arrayBuffer","byteOffset","subArray","concatenateArrayBuffersAsync","asyncIterator","arrayBuffers","chunk","pathPrefix","fileAliases","resolvePath","filename","alias","replacement","isBuffer","toArrayBuffer","text","getCWD","pathname","slashIndex","dirname","components","paths","_i","resolvedPath","resolvedAbsolute","cwd","path","SLASH","normalizeStringPosix","DOT","allowAboveRoot","res","lastSlash","dots","isAboveRoot","start","j","slice","isBoolean","x","isFunction","isObject","isPureObject","isIterable","isAsyncIterable","isResponse","isBlob","isReadableDOMStream","isReadableNodeStream","isReadableStream","FetchError","info","DATA_URL_PATTERN","MIME_TYPE_PATTERN","compareMIMETypes","mimeType1","mimeType2","parseMIMEType","mimeString","parseMIMETypeFromURL","QUERY_STRING_PATTERN","extractQueryString","stripQueryString","shortenUrlForDisplay","urlEnd","getResourceUrl","resource","getResourceMIMEType","response","contentTypeHeader","noQueryUrl","getResourceContentLength","makeResponse","headers","contentLength","initialDataUrl","getInitialDataUrl","checkResponse","getResponseError","shortUrl","contentType","blobSlice","reader","arrayBufferToBase64","buffer","binary","bytes","isNodePath","isRequestURL","isDataURL","fetchFile","urlOrData","fetchOptions","probeLog","NullLog","ConsoleLog","args","DEFAULT_LOADER_OPTIONS","REMOVED_LOADER_OPTIONS","getGlobalLoaderState","loaders","getGlobalLoaderOptions","state","normalizeOptions","validateOptions","normalizeOptionsInternal","validateOptionsObject","idOptions","loaderOptions","deprecatedOptions","defaultOptions","loaderName","prefix","isSubOptions","isBaseUriOption","isWorkerUrlOption","suggestion","findSimilarOption","optionKey","lowerCaseOptionKey","bestSuggestion","lowerCaseKey","mergedOptions","addUrlOptions","mergeNestedFields","isLoaderObject","normalizeLoader","getGlobalLoaderRegistry","registerLoaders","loaderRegistry","normalizedLoader","registeredLoader","getRegisteredLoaders","EXT_PATTERN","selectLoader","validHTTPResponse","selectLoaderSync","getNoValidLoaderMessage","candidateLoaders","normalizeLoaders","selectLoaderInternal","testUrl","reason","findLoaderByMIMEType","findLoaderByUrl","findLoaderByInitialBytes","getFirstCharacters","path.filename","firstCharacters","match","extension","findLoaderByExtension","loaderExtension","mimeType","testDataAgainstText","testDataAgainstBinary","test","testBinary","magic","getMagicString","dataView","DEFAULT_CHUNK_SIZE","makeStringIterator","string","chunkSize","textEncoder","chunkLength","makeArrayBufferIterator","chunkByteLength","makeBlobIterator","end","makeStreamIterator","stream","makeBrowserStreamIterator","makeNodeStreamIterator","nextBatchPromise","currentBatchPromise","done","makeIterator","ERR_DATA","getArrayBufferOrStringFromDataSync","getArrayBufferOrStringFromData","isArrayBuffer","getFetchFunction","globalOptions","getLoaderContext","parentContext","newContext","baseUrl","path.dirname","getLoadersFromContext","contextLoaders","parse","parseWithLoader","ok","redirected","status","statusText","loaderWithParser","load","resolvedLoaders","resolvedOptions","fetch","loggers","register","handlers","debug","eventType","arg1","arg2","arg3","deckLog","LIFECYCLE","COMPONENT_SYMBOL","PROP_TYPES_SYMBOL","DEPRECATED_PROPS_SYMBOL","ASYNC_DEFAULTS_SYMBOL","ASYNC_ORIGINAL_SYMBOL","ASYNC_RESOLVED_SYMBOL","flatten","array","filter","flattenArray","index","fillArray","target","count","total","copied","Transition","timeline","settings","GLEnum","loadScript","scriptUrl","scriptId","head","script","LOG_LEVEL","spector","initialized","DEFAULT_SPECTOR_PROPS","loadSpectorJS","initializeSpectorJS","SpectorJS","capture","gl","device","_","WEBGL_DEBUG_CDN_URL","getWebGLContextData","loadWebGLDeveloperTools","makeDebugContext","getDebugContext","getRealContext","glDebug","onGLError","onValidateGLFunc","WebGLDebugContext","debugContext","getFunctionString","functionName","functionArgs","arg","err","errorMessage","functionString"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53]}