@carbonenginejs/runtime-resource 0.12.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +21 -0
  2. package/dist/CjsResMan.js +393 -29
  3. package/dist/CjsResMan.js.map +1 -1
  4. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +165 -118
  5. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  6. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  7. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  8. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +7 -113
  9. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  10. package/dist/format/carbonEffect/carbonEffectRecords.js +258 -66
  11. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  12. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  13. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  14. package/dist/format/effect/effectBodyInventory.js +146 -0
  15. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  16. package/dist/format/effect/effectPermutationGraph.js +13 -13
  17. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  18. package/dist/format/index.js +4 -4
  19. package/dist/formats/black/CjsBlackFormat.js +19 -1
  20. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  21. package/dist/formats/bnk/CjsBnkFormat.js +28 -9
  22. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  23. package/dist/formats/bnk/core/busNodes.js +252 -0
  24. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  25. package/dist/formats/bnk/core/effectNodes.js +147 -0
  26. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  27. package/dist/formats/bnk/core/eventAction.js +135 -24
  28. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  29. package/dist/formats/bnk/core/globalSettings.js +215 -0
  30. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  31. package/dist/formats/bnk/core/helpers.js +37 -5
  32. package/dist/formats/bnk/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/core/musicNodes.js +43 -19
  34. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +28 -7
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  37. package/dist/formats/dds/core/helpers.js +40 -1
  38. package/dist/formats/dds/core/helpers.js.map +1 -1
  39. package/dist/formats/dxbc/CjsDxbcFormat.js +45 -0
  40. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  41. package/dist/formats/dxbc/core/disassemble.js +240 -0
  42. package/dist/formats/dxbc/core/disassemble.js.map +1 -0
  43. package/dist/formats/gltf/CjsGltfFormat.js +1 -39
  44. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  45. package/dist/formats/gltf/core/helpers.js +1 -21
  46. package/dist/formats/gltf/core/helpers.js.map +1 -1
  47. package/dist/formats/hlsl/CjsHlslFormat.js +0 -21
  48. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
  49. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +118 -49
  50. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  51. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  52. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  53. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  54. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  55. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +79 -73
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  57. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +8 -1
  58. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
  59. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +11 -691
  60. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  61. package/dist/formats/index.js +4 -2
  62. package/dist/formats/index.js.map +1 -1
  63. package/dist/formats/obj/CjsObjFormat.js +1 -22
  64. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  65. package/dist/formats/obj/core/helpers.js +1 -21
  66. package/dist/formats/obj/core/helpers.js.map +1 -1
  67. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  68. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  69. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  70. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  71. package/dist/formats/pickle/index.js +2 -0
  72. package/dist/formats/pickle/index.js.map +1 -0
  73. package/dist/formats/red/core/redGraph.js +11 -8
  74. package/dist/formats/red/core/redGraph.js.map +1 -1
  75. package/dist/formats/stl/CjsStlFormat.js +1 -46
  76. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  77. package/dist/formats/stl/core/helpers.js +1 -21
  78. package/dist/formats/stl/core/helpers.js.map +1 -1
  79. package/dist/formats/webgl/CjsWebglFormat.js +33 -55
  80. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  81. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  82. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  83. package/dist/formats/webgl/core/effectPackage.js +216 -108
  84. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  85. package/dist/formats/webgl/core/errors.js +1 -1
  86. package/dist/formats/webgl/core/errors.js.map +1 -1
  87. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +166 -24
  88. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  89. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +63 -5
  90. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  91. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  92. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  93. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  94. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  95. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  96. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  97. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +12 -8
  98. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  99. package/dist/formats/webgl/core/helpers.js +33 -172
  100. package/dist/formats/webgl/core/helpers.js.map +1 -1
  101. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  102. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  103. package/dist/formats/webgl/core/readGlslEffectContainer.js +249 -0
  104. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  105. package/dist/formats/webgpu/CjsWebgpuFormat.js +15 -15
  106. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  107. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +37 -145
  108. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  109. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +13 -27
  110. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  111. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +1 -1
  112. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  113. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +4 -4
  114. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  115. package/dist/formats/webgpu/core/effectBackendBodySet.js +18 -18
  116. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  117. package/dist/formats/webgpu/core/errors.js +1 -1
  118. package/dist/formats/webgpu/core/errors.js.map +1 -1
  119. package/dist/formats/webgpu/core/helpers.js +22 -22
  120. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  121. package/dist/formats/webgpu/core/packageEffect.js +11 -15
  122. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  123. package/dist/formats/webgpu/core/packageEffectSelection.js +1 -1
  124. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  125. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +23 -23
  126. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  127. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +6 -6
  128. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  129. package/dist/formats/yaml/CjsYamlFormat.js +3 -3
  130. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  131. package/dist/formats/yaml/core/CjsYamlReader.js +4 -6
  132. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  133. package/dist/formats/yaml/core/helpers.js +27 -1
  134. package/dist/formats/yaml/core/helpers.js.map +1 -1
  135. package/dist/index.js +2 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/resource/CjsLoadingObject.js +19 -0
  138. package/dist/resource/CjsLoadingObject.js.map +1 -0
  139. package/dist/resource/CjsResource.js +4 -0
  140. package/dist/resource/CjsResource.js.map +1 -1
  141. package/dist/resource/ResourceHandlerMode.js +14 -0
  142. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  143. package/dist/resource/index.js +2 -0
  144. package/dist/resource/index.js.map +1 -1
  145. package/dist/resource/shader/Tr2EffectRes.js +118 -213
  146. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  147. package/dist/resource/shader/Tr2Shader.js +37 -15
  148. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  149. package/dist/resource/shader/reflection/Tr2EffectConstant.js +37 -29
  150. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  151. package/dist/resource/shader/reflection/Tr2EffectDescription.js +39 -34
  152. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  153. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +51 -30
  154. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  155. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +45 -25
  156. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  157. package/dist/resource/shader/reflection/Tr2EffectResource.js +51 -17
  158. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  159. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +219 -88
  160. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  161. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +28 -18
  162. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  163. package/dist/resource/shader/reflection/Tr2Pass.js +96 -39
  164. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  165. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  166. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  167. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  168. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  169. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +68 -10
  170. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  171. package/dist/worker/CjsResManMainThreadLoader.js +9 -7
  172. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  173. package/dist/worker/CjsResManWorker.js +5 -4
  174. package/dist/worker/CjsResManWorker.js.map +1 -1
  175. package/dist/worker/CjsResManWorkerLoader.js +9 -6
  176. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  177. package/docs/README.md +2 -2
  178. package/docs/architecture.md +12 -3
  179. package/docs/concepts/resource-lifecycle.md +9 -8
  180. package/docs/concepts/shader-resource-model.md +14 -17
  181. package/docs/concepts/writing-an-engine-adapter.md +1 -1
  182. package/docs/formats/README.md +4 -2
  183. package/docs/formats/carbon-effect-container.md +127 -26
  184. package/docs/formats/dxbc/architecture.md +1 -1
  185. package/docs/formats/dxbc/reference/api.md +28 -0
  186. package/docs/formats/hlsl/README.md +3 -3
  187. package/docs/formats/hlsl/architecture.md +8 -9
  188. package/docs/formats/hlsl/guides/hydrating-json-output.md +3 -5
  189. package/docs/formats/hlsl/guides/reading-effects.md +5 -1
  190. package/docs/formats/hlsl/reference/advanced-analysis.md +20 -25
  191. package/docs/formats/hlsl/reference/api.md +0 -7
  192. package/docs/formats/hlsl/reference/json-graph.md +1 -4
  193. package/docs/formats/pickle.md +82 -0
  194. package/docs/formats/webgl/README.md +71 -13
  195. package/docs/formats/webgl/architecture.md +16 -17
  196. package/docs/formats/webgl/carbon-constant-layouts.md +3 -3
  197. package/docs/formats/webgl/decl-io.md +3 -3
  198. package/docs/formats/webgl/memory-structured.md +27 -8
  199. package/docs/formats/webgl/texture-sample.md +1 -1
  200. package/docs/formats/webgpu/README.md +3 -3
  201. package/docs/formats/webgpu/architecture.md +5 -6
  202. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +10 -11
  203. package/docs/formats/webgpu/guides/effect-packaging.md +6 -8
  204. package/docs/formats/webgpu/reference/api.md +11 -12
  205. package/docs/formats/webgpu/reference/wgsl-compatibility.md +11 -8
  206. package/docs/formats/wwise.md +63 -2
  207. package/docs/reference/classes/core.md +10 -0
  208. package/docs/reference/classes/formats.md +40 -48
  209. package/docs/reference/classes/resources.md +2 -2
  210. package/docs/reference/queues.md +88 -4
  211. package/docs/reference/workers.md +7 -0
  212. package/package.json +61 -61
  213. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  214. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  215. package/dist/format/effect/effectReflectionPackage.js +0 -636
  216. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  217. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  218. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  219. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  220. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  221. package/dist/formats/hlsl/portable.js +0 -2
  222. package/dist/formats/hlsl/portable.js.map +0 -1
  223. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  224. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  225. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  226. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  227. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  228. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  229. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  230. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  231. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  233. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  234. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  235. package/dist/resource/shader/portable.js +0 -33
  236. package/dist/resource/shader/portable.js.map +0 -1
  237. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  238. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"CjsResManMainThreadLoader.js","sources":["../../../src/worker/CjsResManMainThreadLoader.js"],"sourcesContent":["/**\n * Direct execution strategy that reads through a structural source and invokes registered format facades on the caller thread.\n *\n * It is used when no browser worker is selected or when a source or format\n * does not declare a worker-safe operation.\n */\nexport class CjsResManMainThreadLoader\n{\n /**\n * Read through an injected resource source.\n *\n * @param {object|Function} source Source exposing `Read(path, options)`.\n * @param {string} path Normalized resource path.\n * @param {object} [options={}] Source read options.\n * @returns {*} Source result or promise.\n */\n Read(source, path, options = {})\n {\n assertResourceSource(source);\n return source.Read(path, options);\n }\n\n /**\n * Main-thread loaders never claim worker execution.\n *\n * @returns {false}\n */\n CanReadFormat()\n {\n return false;\n }\n\n /**\n * Execute one normalized format read on the current thread.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} [formatOptions={}] Normalized format options.\n * @returns {Promise<*>} Format result.\n */\n ReadFormat(descriptor, input, formatOptions = {})\n {\n return readFormatOnCurrentThread(descriptor, input, formatOptions);\n }\n\n /**\n * Main-thread execution owns no pending worker requests.\n *\n * @returns {0}\n */\n GetPendingCount()\n {\n return 0;\n }\n}\n\n/**\n * Invoke a format facade without crossing a worker boundary.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} formatOptions Normalized format options.\n * @returns {Promise<*>} Reader result.\n */\nfunction readFormatOnCurrentThread(\n descriptor,\n input,\n formatOptions = {}\n)\n{\n const Format = descriptor?.Format;\n\n if (typeof Format !== \"function\")\n {\n throw new TypeError(\"Resource format descriptor requires a Format class.\");\n }\n if (typeof Format.readAsync === \"function\")\n {\n return Format.readAsync(input, formatOptions);\n }\n if (typeof Format.read === \"function\")\n {\n return Format.read(input, formatOptions);\n }\n\n const reader = new Format(formatOptions);\n\n if (typeof reader.ReadAsync === \"function\")\n {\n return reader.ReadAsync(input, formatOptions);\n }\n if (typeof reader.Read === \"function\")\n {\n return reader.Read(input, formatOptions);\n }\n\n throw new TypeError(`${Format.name} does not expose a read operation.`);\n}\n\nfunction assertResourceSource(source)\n{\n if (!source || (typeof source !== \"object\" && typeof source !== \"function\")\n || typeof source.Read !== \"function\")\n {\n throw new TypeError(\"Resource source must provide Read(path, options).\");\n }\n}\n"],"names":["CjsResManMainThreadLoader","Read","source","path","options","assertResourceSource","CanReadFormat","ReadFormat","descriptor","input","formatOptions","readFormatOnCurrentThread","GetPendingCount","Format","TypeError","readAsync","read","reader","ReadAsync","name"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,yBAAyB,CACtC;AACE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,IAAIA,CAACC,MAAM,EAAEC,IAAI,EAAEC,OAAO,GAAG,EAAE,EAC/B;IACEC,oBAAoB,CAACH,MAAM,CAAC;AAC5B,IAAA,OAAOA,MAAM,CAACD,IAAI,CAACE,IAAI,EAAEC,OAAO,CAAC;AACnC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEE,EAAAA,aAAaA,GACb;AACE,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAAUA,CAACC,UAAU,EAAEC,KAAK,EAAEC,aAAa,GAAG,EAAE,EAChD;AACE,IAAA,OAAOC,yBAAyB,CAACH,UAAU,EAAEC,KAAK,EAAEC,aAAa,CAAC;AACpE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEE,EAAAA,eAAeA,GACf;AACE,IAAA,OAAO,CAAC;AACV,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,yBAAyBA,CAChCH,UAAU,EACVC,KAAK,EACLC,aAAa,GAAG,EAAE,EAEpB;AACE,EAAA,MAAMG,MAAM,GAAGL,UAAU,EAAEK,MAAM;AAEjC,EAAA,IAAI,OAAOA,MAAM,KAAK,UAAU,EAChC;AACE,IAAA,MAAM,IAAIC,SAAS,CAAC,qDAAqD,CAAC;AAC5E,EAAA;AACA,EAAA,IAAI,OAAOD,MAAM,CAACE,SAAS,KAAK,UAAU,EAC1C;AACE,IAAA,OAAOF,MAAM,CAACE,SAAS,CAACN,KAAK,EAAEC,aAAa,CAAC;AAC/C,EAAA;AACA,EAAA,IAAI,OAAOG,MAAM,CAACG,IAAI,KAAK,UAAU,EACrC;AACE,IAAA,OAAOH,MAAM,CAACG,IAAI,CAACP,KAAK,EAAEC,aAAa,CAAC;AAC1C,EAAA;AAEA,EAAA,MAAMO,MAAM,GAAG,IAAIJ,MAAM,CAACH,aAAa,CAAC;AAExC,EAAA,IAAI,OAAOO,MAAM,CAACC,SAAS,KAAK,UAAU,EAC1C;AACE,IAAA,OAAOD,MAAM,CAACC,SAAS,CAACT,KAAK,EAAEC,aAAa,CAAC;AAC/C,EAAA;AACA,EAAA,IAAI,OAAOO,MAAM,CAAChB,IAAI,KAAK,UAAU,EACrC;AACE,IAAA,OAAOgB,MAAM,CAAChB,IAAI,CAACQ,KAAK,EAAEC,aAAa,CAAC;AAC1C,EAAA;EAEA,MAAM,IAAII,SAAS,CAAC,CAAA,EAAGD,MAAM,CAACM,IAAI,oCAAoC,CAAC;AACzE;AAEA,SAASd,oBAAoBA,CAACH,MAAM,EACpC;AACE,EAAA,IAAI,CAACA,MAAM,IAAK,OAAOA,MAAM,KAAK,QAAQ,IAAI,OAAOA,MAAM,KAAK,UAAW,IACtE,OAAOA,MAAM,CAACD,IAAI,KAAK,UAAU,EACtC;AACE,IAAA,MAAM,IAAIa,SAAS,CAAC,mDAAmD,CAAC;AAC1E,EAAA;AACF;;;;"}
1
+ {"version":3,"file":"CjsResManMainThreadLoader.js","sources":["../../../src/worker/CjsResManMainThreadLoader.js"],"sourcesContent":["/**\n * Direct execution strategy that reads through a structural source and invokes registered format facades on the caller thread.\n *\n * It is used when no browser worker is selected or when a source or format\n * does not declare a worker-safe operation.\n */\nexport class CjsResManMainThreadLoader\n{\n /**\n * Read through an injected resource source.\n *\n * @param {object|Function} source Source exposing `Read(path, options)`.\n * @param {string} path Normalized resource path.\n * @param {object} [options={}] Source read options.\n * @returns {*} Source result or promise.\n */\n Read(source, path, options = {})\n {\n assertResourceSource(source);\n return source.Read(path, options);\n }\n\n /**\n * Main-thread loaders never claim worker execution.\n *\n * @returns {false}\n */\n CanReadFormat()\n {\n return false;\n }\n\n /**\n * Execute one normalized format read on the current thread.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} [formatOptions={}] Normalized format options.\n * @param {object|null} [context=null] Normalized resource path context.\n * @returns {Promise<*>} Format result.\n */\n ReadFormat(descriptor, input, formatOptions = {}, context = null)\n {\n return readFormatOnCurrentThread(descriptor, input, formatOptions, context);\n }\n\n /**\n * Main-thread execution owns no pending worker requests.\n *\n * @returns {0}\n */\n GetPendingCount()\n {\n return 0;\n }\n}\n\n/**\n * Invoke a format facade without crossing a worker boundary.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} formatOptions Normalized format options.\n * @param {object|null} context Normalized resource path context.\n * @returns {Promise<*>} Reader result.\n */\nfunction readFormatOnCurrentThread(\n descriptor,\n input,\n formatOptions = {},\n context = null\n)\n{\n const Format = descriptor?.Format;\n\n if (typeof Format !== \"function\")\n {\n throw new TypeError(\"Resource format descriptor requires a Format class.\");\n }\n if (typeof Format.readAsync === \"function\")\n {\n return Format.readAsync(input, formatOptions, context);\n }\n if (typeof Format.read === \"function\")\n {\n return Format.read(input, formatOptions, context);\n }\n\n const reader = new Format(formatOptions);\n\n if (typeof reader.ReadAsync === \"function\")\n {\n return reader.ReadAsync(input, formatOptions, context);\n }\n if (typeof reader.Read === \"function\")\n {\n return reader.Read(input, formatOptions, context);\n }\n\n throw new TypeError(`${Format.name} does not expose a read operation.`);\n}\n\nfunction assertResourceSource(source)\n{\n if (!source || (typeof source !== \"object\" && typeof source !== \"function\")\n || typeof source.Read !== \"function\")\n {\n throw new TypeError(\"Resource source must provide Read(path, options).\");\n }\n}\n"],"names":["CjsResManMainThreadLoader","Read","source","path","options","assertResourceSource","CanReadFormat","ReadFormat","descriptor","input","formatOptions","context","readFormatOnCurrentThread","GetPendingCount","Format","TypeError","readAsync","read","reader","ReadAsync","name"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,yBAAyB,CACtC;AACE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,IAAIA,CAACC,MAAM,EAAEC,IAAI,EAAEC,OAAO,GAAG,EAAE,EAC/B;IACEC,oBAAoB,CAACH,MAAM,CAAC;AAC5B,IAAA,OAAOA,MAAM,CAACD,IAAI,CAACE,IAAI,EAAEC,OAAO,CAAC;AACnC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEE,EAAAA,aAAaA,GACb;AACE,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,UAAUA,CAACC,UAAU,EAAEC,KAAK,EAAEC,aAAa,GAAG,EAAE,EAAEC,OAAO,GAAG,IAAI,EAChE;IACE,OAAOC,yBAAyB,CAACJ,UAAU,EAAEC,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;AAC7E,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEE,EAAAA,eAAeA,GACf;AACE,IAAA,OAAO,CAAC;AACV,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,yBAAyBA,CAChCJ,UAAU,EACVC,KAAK,EACLC,aAAa,GAAG,EAAE,EAClBC,OAAO,GAAG,IAAI,EAEhB;AACE,EAAA,MAAMG,MAAM,GAAGN,UAAU,EAAEM,MAAM;AAEjC,EAAA,IAAI,OAAOA,MAAM,KAAK,UAAU,EAChC;AACE,IAAA,MAAM,IAAIC,SAAS,CAAC,qDAAqD,CAAC;AAC5E,EAAA;AACA,EAAA,IAAI,OAAOD,MAAM,CAACE,SAAS,KAAK,UAAU,EAC1C;IACE,OAAOF,MAAM,CAACE,SAAS,CAACP,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;AACxD,EAAA;AACA,EAAA,IAAI,OAAOG,MAAM,CAACG,IAAI,KAAK,UAAU,EACrC;IACE,OAAOH,MAAM,CAACG,IAAI,CAACR,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;AACnD,EAAA;AAEA,EAAA,MAAMO,MAAM,GAAG,IAAIJ,MAAM,CAACJ,aAAa,CAAC;AAExC,EAAA,IAAI,OAAOQ,MAAM,CAACC,SAAS,KAAK,UAAU,EAC1C;IACE,OAAOD,MAAM,CAACC,SAAS,CAACV,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;AACxD,EAAA;AACA,EAAA,IAAI,OAAOO,MAAM,CAACjB,IAAI,KAAK,UAAU,EACrC;IACE,OAAOiB,MAAM,CAACjB,IAAI,CAACQ,KAAK,EAAEC,aAAa,EAAEC,OAAO,CAAC;AACnD,EAAA;EAEA,MAAM,IAAII,SAAS,CAAC,CAAA,EAAGD,MAAM,CAACM,IAAI,oCAAoC,CAAC;AACzE;AAEA,SAASf,oBAAoBA,CAACH,MAAM,EACpC;AACE,EAAA,IAAI,CAACA,MAAM,IAAK,OAAOA,MAAM,KAAK,QAAQ,IAAI,OAAOA,MAAM,KAAK,UAAW,IACtE,OAAOA,MAAM,CAACD,IAAI,KAAK,UAAU,EACtC;AACE,IAAA,MAAM,IAAIc,SAAS,CAAC,mDAAmD,CAAC;AAC1E,EAAA;AACF;;;;"}
@@ -195,18 +195,19 @@ async function readFormat(payload) {
195
195
  throw new TypeError(`Worker format export was not found: ${payload.exportName || "default"}`);
196
196
  }
197
197
  const options = payload.options || {};
198
+ const context = payload.context || null;
198
199
  if (typeof Format.readAsync === "function") {
199
- return Format.readAsync(payload.input, options);
200
+ return Format.readAsync(payload.input, options, context);
200
201
  }
201
202
  if (typeof Format.read === "function") {
202
- return Format.read(payload.input, options);
203
+ return Format.read(payload.input, options, context);
203
204
  }
204
205
  const reader = new Format(options);
205
206
  if (typeof reader.ReadAsync === "function") {
206
- return reader.ReadAsync(payload.input, options);
207
+ return reader.ReadAsync(payload.input, options, context);
207
208
  }
208
209
  if (typeof reader.Read === "function") {
209
- return reader.Read(payload.input, options);
210
+ return reader.Read(payload.input, options, context);
210
211
  }
211
212
  throw new TypeError(`${Format.name} does not expose a read operation.`);
212
213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CjsResManWorker.js","sources":["../../../src/worker/CjsResManWorker.js"],"sourcesContent":["import { Message, Operation } from \"./protocol.js\";\n\n/**\n * Static browser-worker host that owns its operation/message vocabulary,\n * executes clone-safe source and format operations, installs the message\n * envelope, transfers owned buffers, and serializes failures for `CjsResMan`.\n */\nexport class CjsResManWorker\n{\n /** Stable operations understood by the bundled resource module worker. */\n static Operation = Operation;\n\n /** Stable message kinds exchanged with the resource module worker. */\n static Message = Message;\n\n /**\n * Execute one bundled resource worker operation.\n *\n * This method also permits deterministic non-browser tests and custom\n * worker hosts without installing global message handlers.\n *\n * @param {string} operation Worker operation name.\n * @param {*} payload Structured-cloneable operation payload.\n * @param {object} [context={}] Optional fetch and abort context.\n * @returns {Promise<*>} Operation result.\n */\n static async execute(operation, payload, context = {})\n {\n switch (operation)\n {\n case Operation.FETCH:\n return fetchResource(payload, context);\n\n case Operation.FORMAT_READ:\n return readFormat(payload);\n\n default:\n {\n const error = new Error(`Unknown resource worker operation: ${operation}`);\n error.code = \"CJS_RESOURCE_WORKER_OPERATION_UNKNOWN\";\n error.operation = operation;\n throw error;\n }\n }\n }\n\n /**\n * Install the ResMan message protocol on a Worker-compatible scope.\n *\n * @param {WorkerGlobalScope|object} scope Worker global.\n * @returns {() => void} Uninstall callback.\n */\n static install(scope = globalThis)\n {\n if (!scope || typeof scope.postMessage !== \"function\")\n {\n throw new TypeError(\"Resource worker scope must provide postMessage.\");\n }\n const controllers = new Map();\n const onMessage = async event =>\n {\n const message = event?.data;\n if (!message || typeof message !== \"object\") return;\n\n if (message.type === Message.CANCEL)\n {\n controllers.get(message.id)?.abort();\n return;\n }\n if (message.type !== Message.EXECUTE) return;\n\n const controller = typeof AbortController === \"function\"\n ? new AbortController()\n : null;\n if (controller) controllers.set(message.id, controller);\n try\n {\n const result = await CjsResManWorker.execute(\n message.operation,\n message.payload,\n { signal: controller?.signal }\n );\n scope.postMessage({\n type: Message.RESULT,\n id: message.id,\n ok: true,\n result\n }, CjsResManWorker.collectTransferables(result));\n }\n catch (error)\n {\n scope.postMessage({\n type: Message.RESULT,\n id: message.id,\n ok: false,\n error: CjsResManWorker.serializeError(error, message.operation)\n });\n }\n finally\n {\n controllers.delete(message.id);\n }\n };\n\n if (typeof scope.addEventListener === \"function\")\n {\n scope.addEventListener(\"message\", onMessage);\n return () => scope.removeEventListener?.(\"message\", onMessage);\n }\n const previous = scope.onmessage;\n scope.onmessage = onMessage;\n return () =>\n {\n if (scope.onmessage === onMessage) scope.onmessage = previous || null;\n };\n }\n\n /**\n * Collect unique transferable ArrayBuffers from a worker result.\n *\n * SharedArrayBuffer is intentionally excluded because it is shared rather\n * than transferable.\n *\n * @param {*} value Result graph.\n * @returns {ArrayBuffer[]} Transfer list.\n */\n static collectTransferables(value)\n {\n const buffers = new Set();\n const seen = new Set();\n\n const visit = entry =>\n {\n if (entry === null || entry === undefined) return;\n if (entry instanceof ArrayBuffer)\n {\n buffers.add(entry);\n return;\n }\n if (ArrayBuffer.isView(entry))\n {\n if (entry.buffer instanceof ArrayBuffer) buffers.add(entry.buffer);\n return;\n }\n if (typeof entry !== \"object\" || seen.has(entry)) return;\n seen.add(entry);\n if (Array.isArray(entry))\n {\n for (const item of entry) visit(item);\n return;\n }\n for (const item of Object.values(entry)) visit(item);\n };\n\n visit(value);\n return [ ...buffers ];\n }\n\n /**\n * Convert an exception into a cloneable diagnostic.\n *\n * @param {*} value Failure value.\n * @param {string} [operation] Operation name.\n * @returns {object} Cloneable error data.\n */\n static serializeError(value, operation = undefined)\n {\n return {\n name: value?.name || \"CjsResManWorkerError\",\n message: value?.message || String(value),\n code: value?.code,\n operation: value?.operation || operation,\n path: value?.path,\n status: value?.status,\n statusText: value?.statusText\n };\n }\n}\n\nasync function fetchResource(payload, context) {\n if (!payload || typeof payload.url !== \"string\") {\n throw new TypeError(\"Worker fetch requires a URL.\");\n }\n const fetchImplementation = context.fetch || globalThis.fetch;\n if (typeof fetchImplementation !== \"function\") {\n throw new ReferenceError(\"Worker fetch is unavailable.\");\n }\n const options = {\n ...(payload.options || {}),\n ...(context.signal ? { signal: context.signal } : {})\n };\n const response = await fetchImplementation(payload.url, options);\n if (!response.ok) {\n const error = new Error(\n `Resource fetch failed: ${response.status} ${response.statusText}`\n );\n error.code = \"CJS_RESOURCE_FETCH_FAILED\";\n error.path = payload.path;\n error.status = response.status;\n error.statusText = response.statusText;\n throw error;\n }\n\n switch (payload.responseType || \"arraybuffer\") {\n case \"arraybuffer\":\n return response.arrayBuffer();\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n case \"text\":\n return response.text();\n default: {\n const error = new Error(`Unsupported worker fetch response type: ${payload.responseType}`);\n error.code = \"CJS_RESOURCE_WORKER_RESPONSE_TYPE\";\n throw error;\n }\n }\n}\n\nasync function readFormat(payload) {\n if (!payload || typeof payload.module !== \"string\" || payload.module === \"\") {\n throw new TypeError(\"Worker format read requires a module URL.\");\n }\n const module = await import(payload.module);\n const Format = module[payload.exportName || \"default\"];\n if (typeof Format !== \"function\") {\n throw new TypeError(\n `Worker format export was not found: ${payload.exportName || \"default\"}`\n );\n }\n const options = payload.options || {};\n if (typeof Format.readAsync === \"function\") {\n return Format.readAsync(payload.input, options);\n }\n if (typeof Format.read === \"function\") {\n return Format.read(payload.input, options);\n }\n\n const reader = new Format(options);\n if (typeof reader.ReadAsync === \"function\") {\n return reader.ReadAsync(payload.input, options);\n }\n if (typeof reader.Read === \"function\") {\n return reader.Read(payload.input, options);\n }\n throw new TypeError(`${Format.name} does not expose a read operation.`);\n}\n\nconst isWorkerScope = typeof WorkerGlobalScope !== \"undefined\"\n && globalThis instanceof WorkerGlobalScope;\nif (isWorkerScope) CjsResManWorker.install(globalThis);\n"],"names":["CjsResManWorker","Operation","Message","execute","operation","payload","context","FETCH","fetchResource","FORMAT_READ","readFormat","error","Error","code","install","scope","globalThis","postMessage","TypeError","controllers","Map","onMessage","event","message","data","type","CANCEL","get","id","abort","EXECUTE","controller","AbortController","set","result","signal","RESULT","ok","collectTransferables","serializeError","delete","addEventListener","removeEventListener","previous","onmessage","value","buffers","Set","seen","visit","entry","undefined","ArrayBuffer","add","isView","buffer","has","Array","isArray","item","Object","values","name","String","path","status","statusText","url","fetchImplementation","fetch","ReferenceError","options","response","responseType","arrayBuffer","blob","json","text","module","Format","exportName","readAsync","input","read","reader","ReadAsync","Read","isWorkerScope","WorkerGlobalScope"],"mappings":"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"}
1
+ {"version":3,"file":"CjsResManWorker.js","sources":["../../../src/worker/CjsResManWorker.js"],"sourcesContent":["import { Message, Operation } from \"./protocol.js\";\n\n/**\n * Static browser-worker host that owns its operation/message vocabulary,\n * executes clone-safe source and format operations, installs the message\n * envelope, transfers owned buffers, and serializes failures for `CjsResMan`.\n */\nexport class CjsResManWorker\n{\n /** Stable operations understood by the bundled resource module worker. */\n static Operation = Operation;\n\n /** Stable message kinds exchanged with the resource module worker. */\n static Message = Message;\n\n /**\n * Execute one bundled resource worker operation.\n *\n * This method also permits deterministic non-browser tests and custom\n * worker hosts without installing global message handlers.\n *\n * @param {string} operation Worker operation name.\n * @param {*} payload Structured-cloneable operation payload.\n * @param {object} [context={}] Optional fetch and abort context.\n * @returns {Promise<*>} Operation result.\n */\n static async execute(operation, payload, context = {})\n {\n switch (operation)\n {\n case Operation.FETCH:\n return fetchResource(payload, context);\n\n case Operation.FORMAT_READ:\n return readFormat(payload);\n\n default:\n {\n const error = new Error(`Unknown resource worker operation: ${operation}`);\n error.code = \"CJS_RESOURCE_WORKER_OPERATION_UNKNOWN\";\n error.operation = operation;\n throw error;\n }\n }\n }\n\n /**\n * Install the ResMan message protocol on a Worker-compatible scope.\n *\n * @param {WorkerGlobalScope|object} scope Worker global.\n * @returns {() => void} Uninstall callback.\n */\n static install(scope = globalThis)\n {\n if (!scope || typeof scope.postMessage !== \"function\")\n {\n throw new TypeError(\"Resource worker scope must provide postMessage.\");\n }\n const controllers = new Map();\n const onMessage = async event =>\n {\n const message = event?.data;\n if (!message || typeof message !== \"object\") return;\n\n if (message.type === Message.CANCEL)\n {\n controllers.get(message.id)?.abort();\n return;\n }\n if (message.type !== Message.EXECUTE) return;\n\n const controller = typeof AbortController === \"function\"\n ? new AbortController()\n : null;\n if (controller) controllers.set(message.id, controller);\n try\n {\n const result = await CjsResManWorker.execute(\n message.operation,\n message.payload,\n { signal: controller?.signal }\n );\n scope.postMessage({\n type: Message.RESULT,\n id: message.id,\n ok: true,\n result\n }, CjsResManWorker.collectTransferables(result));\n }\n catch (error)\n {\n scope.postMessage({\n type: Message.RESULT,\n id: message.id,\n ok: false,\n error: CjsResManWorker.serializeError(error, message.operation)\n });\n }\n finally\n {\n controllers.delete(message.id);\n }\n };\n\n if (typeof scope.addEventListener === \"function\")\n {\n scope.addEventListener(\"message\", onMessage);\n return () => scope.removeEventListener?.(\"message\", onMessage);\n }\n const previous = scope.onmessage;\n scope.onmessage = onMessage;\n return () =>\n {\n if (scope.onmessage === onMessage) scope.onmessage = previous || null;\n };\n }\n\n /**\n * Collect unique transferable ArrayBuffers from a worker result.\n *\n * SharedArrayBuffer is intentionally excluded because it is shared rather\n * than transferable.\n *\n * @param {*} value Result graph.\n * @returns {ArrayBuffer[]} Transfer list.\n */\n static collectTransferables(value)\n {\n const buffers = new Set();\n const seen = new Set();\n\n const visit = entry =>\n {\n if (entry === null || entry === undefined) return;\n if (entry instanceof ArrayBuffer)\n {\n buffers.add(entry);\n return;\n }\n if (ArrayBuffer.isView(entry))\n {\n if (entry.buffer instanceof ArrayBuffer) buffers.add(entry.buffer);\n return;\n }\n if (typeof entry !== \"object\" || seen.has(entry)) return;\n seen.add(entry);\n if (Array.isArray(entry))\n {\n for (const item of entry) visit(item);\n return;\n }\n for (const item of Object.values(entry)) visit(item);\n };\n\n visit(value);\n return [ ...buffers ];\n }\n\n /**\n * Convert an exception into a cloneable diagnostic.\n *\n * @param {*} value Failure value.\n * @param {string} [operation] Operation name.\n * @returns {object} Cloneable error data.\n */\n static serializeError(value, operation = undefined)\n {\n return {\n name: value?.name || \"CjsResManWorkerError\",\n message: value?.message || String(value),\n code: value?.code,\n operation: value?.operation || operation,\n path: value?.path,\n status: value?.status,\n statusText: value?.statusText\n };\n }\n}\n\nasync function fetchResource(payload, context) {\n if (!payload || typeof payload.url !== \"string\") {\n throw new TypeError(\"Worker fetch requires a URL.\");\n }\n const fetchImplementation = context.fetch || globalThis.fetch;\n if (typeof fetchImplementation !== \"function\") {\n throw new ReferenceError(\"Worker fetch is unavailable.\");\n }\n const options = {\n ...(payload.options || {}),\n ...(context.signal ? { signal: context.signal } : {})\n };\n const response = await fetchImplementation(payload.url, options);\n if (!response.ok) {\n const error = new Error(\n `Resource fetch failed: ${response.status} ${response.statusText}`\n );\n error.code = \"CJS_RESOURCE_FETCH_FAILED\";\n error.path = payload.path;\n error.status = response.status;\n error.statusText = response.statusText;\n throw error;\n }\n\n switch (payload.responseType || \"arraybuffer\") {\n case \"arraybuffer\":\n return response.arrayBuffer();\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n case \"text\":\n return response.text();\n default: {\n const error = new Error(`Unsupported worker fetch response type: ${payload.responseType}`);\n error.code = \"CJS_RESOURCE_WORKER_RESPONSE_TYPE\";\n throw error;\n }\n }\n}\n\nasync function readFormat(payload) {\n if (!payload || typeof payload.module !== \"string\" || payload.module === \"\") {\n throw new TypeError(\"Worker format read requires a module URL.\");\n }\n const module = await import(payload.module);\n const Format = module[payload.exportName || \"default\"];\n if (typeof Format !== \"function\") {\n throw new TypeError(\n `Worker format export was not found: ${payload.exportName || \"default\"}`\n );\n }\n const options = payload.options || {};\n const context = payload.context || null;\n if (typeof Format.readAsync === \"function\") {\n return Format.readAsync(payload.input, options, context);\n }\n if (typeof Format.read === \"function\") {\n return Format.read(payload.input, options, context);\n }\n\n const reader = new Format(options);\n if (typeof reader.ReadAsync === \"function\") {\n return reader.ReadAsync(payload.input, options, context);\n }\n if (typeof reader.Read === \"function\") {\n return reader.Read(payload.input, options, context);\n }\n throw new TypeError(`${Format.name} does not expose a read operation.`);\n}\n\nconst isWorkerScope = typeof WorkerGlobalScope !== \"undefined\"\n && globalThis instanceof WorkerGlobalScope;\nif (isWorkerScope) CjsResManWorker.install(globalThis);\n"],"names":["CjsResManWorker","Operation","Message","execute","operation","payload","context","FETCH","fetchResource","FORMAT_READ","readFormat","error","Error","code","install","scope","globalThis","postMessage","TypeError","controllers","Map","onMessage","event","message","data","type","CANCEL","get","id","abort","EXECUTE","controller","AbortController","set","result","signal","RESULT","ok","collectTransferables","serializeError","delete","addEventListener","removeEventListener","previous","onmessage","value","buffers","Set","seen","visit","entry","undefined","ArrayBuffer","add","isView","buffer","has","Array","isArray","item","Object","values","name","String","path","status","statusText","url","fetchImplementation","fetch","ReferenceError","options","response","responseType","arrayBuffer","blob","json","text","module","Format","exportName","readAsync","input","read","reader","ReadAsync","Read","isWorkerScope","WorkerGlobalScope"],"mappings":"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"}
@@ -165,11 +165,12 @@ class CjsResManWorkerLoader {
165
165
  *
166
166
  * @param {object} descriptor Registered format descriptor.
167
167
  * @param {object} [formatOptions={}] Normalized format options.
168
+ * @param {object|null} [context=null] Clone-safe normalized resource path context.
168
169
  * @returns {boolean}
169
170
  */
170
- CanReadFormat(descriptor, formatOptions = {}) {
171
+ CanReadFormat(descriptor, formatOptions = {}, context = null) {
171
172
  const declaration = normalizeFormatWorkerDeclaration(descriptor);
172
- return Boolean(declaration && isWorkerFormatOutputSupported(declaration, formatOptions) && canCloneWorkerValue(formatOptions) && this.IsAvailable());
173
+ return Boolean(declaration && isWorkerFormatOutputSupported(declaration, formatOptions) && canCloneWorkerValue(formatOptions) && canCloneWorkerValue(context) && this.IsAvailable());
173
174
  }
174
175
 
175
176
  /**
@@ -182,19 +183,21 @@ class CjsResManWorkerLoader {
182
183
  * @param {object} descriptor Registered format descriptor.
183
184
  * @param {*} input Reader input.
184
185
  * @param {object} [formatOptions={}] Normalized format options.
186
+ * @param {object|null} [context=null] Clone-safe normalized resource path context.
185
187
  * @returns {Promise<*>} Format result.
186
188
  */
187
- ReadFormat(descriptor, input, formatOptions = {}) {
189
+ ReadFormat(descriptor, input, formatOptions = {}, context = null) {
188
190
  const declaration = normalizeFormatWorkerDeclaration(descriptor);
189
- if (!declaration || !isWorkerFormatOutputSupported(declaration, formatOptions) || !canCloneWorkerValue(formatOptions) || !this.IsAvailable()) {
190
- return this.fallback.ReadFormat(descriptor, input, formatOptions);
191
+ if (!declaration || !isWorkerFormatOutputSupported(declaration, formatOptions) || !canCloneWorkerValue(formatOptions) || !canCloneWorkerValue(context) || !this.IsAvailable()) {
192
+ return this.fallback.ReadFormat(descriptor, input, formatOptions, context);
191
193
  }
192
194
  const transfer = declaration.transferInput ? getExclusiveInputTransferables(input) : [];
193
195
  return this.Execute(Operation.FORMAT_READ, {
194
196
  module: declaration.module,
195
197
  exportName: declaration.exportName,
196
198
  input,
197
- options: formatOptions
199
+ options: formatOptions,
200
+ context
198
201
  }, {
199
202
  transfer
200
203
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CjsResManWorkerLoader.js","sources":["../../../src/worker/CjsResManWorkerLoader.js"],"sourcesContent":["import { Message, Operation } from \"./protocol.js\";\nimport { CjsResManMainThreadLoader } from \"./CjsResManMainThreadLoader.js\";\n\nconst DEFAULT_WORKER_OPTIONS = Object.freeze({\n type: \"module\",\n name: \"CjsResManWorker\"\n});\n\n/**\n * Browser module-worker strategy that correlates source/format requests, transfers owned buffers, propagates cancellation and fatal failure, and delegates unsupported operations to a main-thread loader.\n *\n * One module worker can overlap fetch requests and serializes synchronous\n * reader work on its own event loop. Sources opt in through\n * `CreateWorkerRequest(path, options)`. Formats opt in through a static\n * `worker` declaration containing their module URL and export name.\n */\nexport class CjsResManWorkerLoader\n{\n #boundError;\n #boundMessage;\n #nextId = 1;\n #pending = new Map();\n\n /**\n * @param {object} [options={}] Worker construction and fallback options.\n * @param {CjsResManMainThreadLoader|object} [options.fallback] Unsupported-operation fallback.\n * @param {Worker|object} [options.worker] Existing Worker-compatible instance.\n * @param {(url: string|URL, options: object) => Worker|object} [options.workerFactory] Worker factory.\n * @param {string|URL} [options.workerUrl] Module worker entry URL.\n * @param {object} [options.workerOptions] Options passed to the Worker constructor.\n * @param {boolean} [options.enabled=true] Whether worker execution may be used.\n */\n constructor(options = {}) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new TypeError(\"CjsResManWorkerLoader options must be an object.\");\n }\n\n this.fallback = options.fallback || new CjsResManMainThreadLoader();\n assertResourceLoader(this.fallback, \"fallback\");\n this.workerFactory = options.workerFactory || defaultWorkerFactory;\n if (typeof this.workerFactory !== \"function\") {\n throw new TypeError(\"CjsResManWorkerLoader workerFactory must be a function.\");\n }\n this.workerUrl = options.workerUrl\n || new URL(\"./CjsResManWorker.js\", import.meta.url);\n this.workerOptions = Object.freeze({\n ...DEFAULT_WORKER_OPTIONS,\n ...(options.workerOptions || {})\n });\n this.enabled = options.enabled !== false;\n this.failed = false;\n this.worker = options.worker || null;\n this.#boundMessage = event => this.#OnMessage(event);\n this.#boundError = event => this.#OnError(event);\n if (this.worker) this.#Attach(this.worker);\n }\n\n /**\n * Enable and lazily create the configured worker.\n *\n * @param {string|URL} [workerUrl] Optional replacement worker URL.\n * @returns {boolean} Whether a worker is ready.\n */\n Enable(workerUrl = this.workerUrl) {\n this.enabled = true;\n if (workerUrl !== undefined && workerUrl !== null) this.workerUrl = workerUrl;\n if (this.worker) return true;\n if (this.failed) return false;\n\n try {\n const worker = this.workerFactory(this.workerUrl, this.workerOptions);\n if (!worker || typeof worker.postMessage !== \"function\") {\n throw new TypeError(\"Worker factory did not return a Worker-compatible object.\");\n }\n this.worker = worker;\n this.#Attach(worker);\n return true;\n } catch {\n this.worker = null;\n this.failed = true;\n return false;\n }\n }\n\n /**\n * Stop worker use and reject every pending request.\n *\n * @param {*} [reason] Optional failure reason.\n * @returns {CjsResManWorkerLoader} This loader.\n */\n Disable(reason = null) {\n const worker = this.worker;\n if (worker) {\n this.#Detach(worker);\n worker.terminate?.();\n }\n this.worker = null;\n this.enabled = false;\n this.failed = reason !== null && reason !== undefined;\n\n if (this.#pending.size) {\n const error = normalizeWorkerError(\n reason || createWorkerUnavailableError(\"Resource worker was disabled.\")\n );\n for (const request of this.#pending.values()) {\n cleanupPendingRequest(request);\n request.reject(error);\n }\n this.#pending.clear();\n }\n return this;\n }\n\n /**\n * Clear a previous creation/fatal failure so a later enable can retry.\n *\n * @returns {CjsResManWorkerLoader} This loader.\n */\n Reset() {\n this.failed = false;\n this.enabled = true;\n return this;\n }\n\n /**\n * Replace the unsupported-operation fallback.\n *\n * @param {CjsResManMainThreadLoader|object} fallback Loader exposing Read and ReadFormat.\n * @returns {CjsResManWorkerLoader} This loader.\n */\n SetFallback(fallback) {\n assertResourceLoader(fallback, \"fallback\");\n this.fallback = fallback;\n return this;\n }\n\n /**\n * Report whether worker execution is configured and constructible.\n *\n * @returns {boolean}\n */\n IsAvailable() {\n return this.enabled && (Boolean(this.worker) || this.Enable());\n }\n\n /**\n * Read a source through its declared worker request, falling back when the\n * source is not worker-aware or a worker cannot be created.\n *\n * @param {object|Function} source Source implementation.\n * @param {string} path Normalized resource path.\n * @param {object} [options={}] Source options.\n * @returns {Promise<*>|*} Source result.\n */\n Read(source, path, options = {}) {\n assertResourceSource(source);\n if (typeof source.CreateWorkerRequest !== \"function\") {\n return this.fallback.Read(source, path, options);\n }\n\n const request = normalizeWorkerRequest(source.CreateWorkerRequest(path, options));\n if (!request || !this.IsAvailable()) {\n return this.fallback.Read(source, path, options);\n }\n return this.Execute(request.operation, request.payload, {\n signal: request.signal || options.signal,\n transfer: request.transfer\n });\n }\n\n /**\n * Test whether a registered format can be safely dispatched to this worker.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {object} [formatOptions={}] Normalized format options.\n * @returns {boolean}\n */\n CanReadFormat(descriptor, formatOptions = {}) {\n const declaration = normalizeFormatWorkerDeclaration(descriptor);\n return Boolean(\n declaration\n && isWorkerFormatOutputSupported(declaration, formatOptions)\n && canCloneWorkerValue(formatOptions)\n && this.IsAvailable()\n );\n }\n\n /**\n * Execute a worker-safe format reader or use the main-thread fallback.\n *\n * Inputs are cloned by default so shared source-cache ownership is not\n * detached. A format may explicitly declare `transferInput: true` when its\n * caller guarantees exclusive ownership.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} [formatOptions={}] Normalized format options.\n * @returns {Promise<*>} Format result.\n */\n ReadFormat(descriptor, input, formatOptions = {}) {\n const declaration = normalizeFormatWorkerDeclaration(descriptor);\n if (!declaration\n || !isWorkerFormatOutputSupported(declaration, formatOptions)\n || !canCloneWorkerValue(formatOptions)\n || !this.IsAvailable()) {\n return this.fallback.ReadFormat(descriptor, input, formatOptions);\n }\n\n const transfer = declaration.transferInput\n ? getExclusiveInputTransferables(input)\n : [];\n return this.Execute(Operation.FORMAT_READ, {\n module: declaration.module,\n exportName: declaration.exportName,\n input,\n options: formatOptions\n }, { transfer });\n }\n\n /**\n * Dispatch one operation using the stable worker message protocol.\n *\n * @param {string} operation Operation name.\n * @param {*} payload Structured-cloneable operation payload.\n * @param {object} [options={}] Transfer and cancellation options.\n * @returns {Promise<*>} Worker result.\n */\n Execute(operation, payload, options = {}) {\n if (typeof operation !== \"string\" || operation.trim() === \"\") {\n return Promise.reject(new TypeError(\"Worker operation must be a non-empty string.\"));\n }\n if (!this.IsAvailable()) {\n return Promise.reject(createWorkerUnavailableError());\n }\n const signal = options.signal || null;\n if (signal?.aborted) return Promise.reject(createAbortError(signal.reason));\n\n const id = this.#nextId++;\n let resolve;\n let reject;\n const promise = new Promise((onResolve, onReject) => {\n resolve = onResolve;\n reject = onReject;\n });\n const request = {\n id,\n resolve,\n reject,\n signal,\n onAbort: null\n };\n if (signal && typeof signal.addEventListener === \"function\") {\n request.onAbort = () => {\n if (!this.#pending.delete(id)) return;\n cleanupPendingRequest(request);\n try {\n this.worker?.postMessage({\n type: Message.CANCEL,\n id\n });\n } catch {\n // The local abort remains authoritative if the worker is already gone.\n }\n reject(createAbortError(signal.reason));\n };\n signal.addEventListener(\"abort\", request.onAbort, { once: true });\n }\n this.#pending.set(id, request);\n\n try {\n this.worker.postMessage({\n type: Message.EXECUTE,\n id,\n operation,\n payload\n }, normalizeTransferList(options.transfer));\n } catch (error) {\n this.#pending.delete(id);\n cleanupPendingRequest(request);\n reject(error);\n }\n return promise;\n }\n\n /**\n * Return the number of unresolved worker requests.\n *\n * @returns {number}\n */\n GetPendingCount() {\n return this.#pending.size;\n }\n\n /** Attach this loader's result and failure listeners to a worker. */\n #Attach(worker) {\n if (typeof worker.addEventListener === \"function\") {\n worker.addEventListener(\"message\", this.#boundMessage);\n worker.addEventListener(\"error\", this.#boundError);\n worker.addEventListener(\"messageerror\", this.#boundError);\n } else {\n worker.onmessage = this.#boundMessage;\n worker.onerror = this.#boundError;\n worker.onmessageerror = this.#boundError;\n }\n }\n\n /** Detach this loader's result and failure listeners from a worker. */\n #Detach(worker) {\n if (typeof worker.removeEventListener === \"function\") {\n worker.removeEventListener(\"message\", this.#boundMessage);\n worker.removeEventListener(\"error\", this.#boundError);\n worker.removeEventListener(\"messageerror\", this.#boundError);\n } else {\n if (worker.onmessage === this.#boundMessage) worker.onmessage = null;\n if (worker.onerror === this.#boundError) worker.onerror = null;\n if (worker.onmessageerror === this.#boundError) worker.onmessageerror = null;\n }\n }\n\n /** Settle the pending request identified by one worker result message. */\n #OnMessage(event) {\n const data = event?.data;\n if (!data || data.type !== Message.RESULT) return;\n const request = this.#pending.get(data.id);\n if (!request) return;\n this.#pending.delete(data.id);\n cleanupPendingRequest(request);\n if (data.ok) request.resolve(data.result);\n else request.reject(normalizeWorkerError(data.error));\n }\n\n /** Disable worker execution after a fatal worker or message failure. */\n #OnError(event) {\n const reason = event?.error || event || new Error(\"Resource worker failed.\");\n this.Disable(reason);\n }\n}\n\nfunction assertResourceSource(source) {\n if (!source || (typeof source !== \"object\" && typeof source !== \"function\")\n || typeof source.Read !== \"function\") {\n throw new TypeError(\"Resource source must provide Read(path, options).\");\n }\n}\n\nfunction assertResourceLoader(loader, name = \"loader\") {\n if (!loader || typeof loader.Read !== \"function\" || typeof loader.ReadFormat !== \"function\") {\n throw new TypeError(`CjsResManWorkerLoader ${name} must provide Read and ReadFormat.`);\n }\n}\n\nfunction defaultWorkerFactory(url, options) {\n if (typeof Worker === \"undefined\") {\n throw new ReferenceError(\"Browser Worker is not available.\");\n }\n return new Worker(url, options);\n}\n\nfunction normalizeWorkerRequest(request) {\n if (request === null || request === undefined || request === false) return null;\n if (!request || typeof request !== \"object\" || Array.isArray(request)) {\n throw new TypeError(\"CreateWorkerRequest must return an object or null.\");\n }\n if (typeof request.operation !== \"string\" || request.operation.trim() === \"\") {\n throw new TypeError(\"Worker source request requires a non-empty operation.\");\n }\n return {\n operation: request.operation,\n payload: request.payload,\n signal: request.signal || null,\n transfer: normalizeTransferList(request.transfer)\n };\n}\n\nfunction normalizeFormatWorkerDeclaration(descriptor) {\n const Format = descriptor?.Format;\n const declaration = descriptor?.worker || Format?.worker;\n if (!declaration) return null;\n\n const value = typeof declaration === \"string\"\n ? { module: declaration }\n : declaration;\n if (!value || typeof value !== \"object\" || !value.module) return null;\n return Object.freeze({\n module: String(value.module),\n exportName: String(value.exportName || Format?.name || \"default\"),\n outputTypes: Array.isArray(value.outputTypes)\n ? Object.freeze(value.outputTypes.map(String))\n : null,\n defaultOutput: value.defaultOutput === undefined\n ? undefined\n : String(value.defaultOutput),\n transferInput: value.transferInput === true\n });\n}\n\nfunction isWorkerFormatOutputSupported(declaration, formatOptions) {\n if (!declaration.outputTypes) return true;\n const output = formatOptions.emit ?? declaration.defaultOutput;\n return output !== undefined && declaration.outputTypes.includes(String(output));\n}\n\nfunction normalizeTransferList(value) {\n if (value === null || value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new TypeError(\"Worker transfer list must be an array.\");\n }\n return value;\n}\n\nfunction getExclusiveInputTransferables(input) {\n if (input instanceof ArrayBuffer) return [ input ];\n if (ArrayBuffer.isView(input)\n && input.byteOffset === 0\n && input.byteLength === input.buffer.byteLength) {\n return [ input.buffer ];\n }\n return [];\n}\n\nfunction canCloneWorkerValue(value, seen = new Set()) {\n if (value === null || value === undefined) return true;\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\" || type === \"bigint\") {\n return true;\n }\n if (type !== \"object\") return false;\n if (value instanceof ArrayBuffer || ArrayBuffer.isView(value) || value instanceof Date) {\n return true;\n }\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.every(entry => canCloneWorkerValue(entry, seen));\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return false;\n return Object.values(value).every(entry => canCloneWorkerValue(entry, seen));\n}\n\nfunction cleanupPendingRequest(request) {\n if (request.signal && request.onAbort\n && typeof request.signal.removeEventListener === \"function\") {\n request.signal.removeEventListener(\"abort\", request.onAbort);\n }\n}\n\nfunction createWorkerUnavailableError(message = \"Resource worker is unavailable.\") {\n const error = new Error(message);\n error.name = \"CjsResManWorkerUnavailableError\";\n error.code = \"CJS_RESOURCE_WORKER_UNAVAILABLE\";\n return error;\n}\n\nfunction createAbortError(reason) {\n if (reason instanceof Error) return reason;\n const error = new Error(reason === undefined ? \"Resource worker request was aborted.\" : String(reason));\n error.name = \"AbortError\";\n error.code = \"ABORT_ERR\";\n return error;\n}\n\nfunction normalizeWorkerError(value) {\n if (value instanceof Error) return value;\n const error = new Error(value?.message || \"Resource worker operation failed.\");\n error.name = value?.name || \"CjsResManWorkerError\";\n for (const key of [ \"code\", \"operation\", \"path\", \"status\", \"statusText\" ]) {\n if (value?.[key] !== undefined) error[key] = value[key];\n }\n return error;\n}\n"],"names":["DEFAULT_WORKER_OPTIONS","Object","freeze","type","name","CjsResManWorkerLoader","Map","constructor","options","Array","isArray","TypeError","fallback","CjsResManMainThreadLoader","assertResourceLoader","workerFactory","defaultWorkerFactory","workerUrl","URL","import","meta","url","workerOptions","enabled","failed","worker","event","Enable","undefined","postMessage","Disable","reason","terminate","size","error","normalizeWorkerError","createWorkerUnavailableError","request","values","cleanupPendingRequest","reject","clear","Reset","SetFallback","IsAvailable","Boolean","Read","source","path","assertResourceSource","CreateWorkerRequest","normalizeWorkerRequest","Execute","operation","payload","signal","transfer","CanReadFormat","descriptor","formatOptions","declaration","normalizeFormatWorkerDeclaration","isWorkerFormatOutputSupported","canCloneWorkerValue","ReadFormat","input","transferInput","getExclusiveInputTransferables","Operation","FORMAT_READ","module","exportName","trim","Promise","aborted","createAbortError","id","resolve","promise","onResolve","onReject","onAbort","addEventListener","delete","Message","CANCEL","once","set","EXECUTE","normalizeTransferList","GetPendingCount","#Attach","onmessage","onerror","onmessageerror","#Detach","removeEventListener","#OnMessage","data","RESULT","get","ok","result","#OnError","Error","loader","Worker","ReferenceError","Format","value","String","outputTypes","map","defaultOutput","output","emit","includes","ArrayBuffer","isView","byteOffset","byteLength","buffer","seen","Set","Date","has","add","every","entry","prototype","getPrototypeOf","message","code","key"],"mappings":"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"}
1
+ {"version":3,"file":"CjsResManWorkerLoader.js","sources":["../../../src/worker/CjsResManWorkerLoader.js"],"sourcesContent":["import { Message, Operation } from \"./protocol.js\";\nimport { CjsResManMainThreadLoader } from \"./CjsResManMainThreadLoader.js\";\n\nconst DEFAULT_WORKER_OPTIONS = Object.freeze({\n type: \"module\",\n name: \"CjsResManWorker\"\n});\n\n/**\n * Browser module-worker strategy that correlates source/format requests, transfers owned buffers, propagates cancellation and fatal failure, and delegates unsupported operations to a main-thread loader.\n *\n * One module worker can overlap fetch requests and serializes synchronous\n * reader work on its own event loop. Sources opt in through\n * `CreateWorkerRequest(path, options)`. Formats opt in through a static\n * `worker` declaration containing their module URL and export name.\n */\nexport class CjsResManWorkerLoader\n{\n #boundError;\n #boundMessage;\n #nextId = 1;\n #pending = new Map();\n\n /**\n * @param {object} [options={}] Worker construction and fallback options.\n * @param {CjsResManMainThreadLoader|object} [options.fallback] Unsupported-operation fallback.\n * @param {Worker|object} [options.worker] Existing Worker-compatible instance.\n * @param {(url: string|URL, options: object) => Worker|object} [options.workerFactory] Worker factory.\n * @param {string|URL} [options.workerUrl] Module worker entry URL.\n * @param {object} [options.workerOptions] Options passed to the Worker constructor.\n * @param {boolean} [options.enabled=true] Whether worker execution may be used.\n */\n constructor(options = {}) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new TypeError(\"CjsResManWorkerLoader options must be an object.\");\n }\n\n this.fallback = options.fallback || new CjsResManMainThreadLoader();\n assertResourceLoader(this.fallback, \"fallback\");\n this.workerFactory = options.workerFactory || defaultWorkerFactory;\n if (typeof this.workerFactory !== \"function\") {\n throw new TypeError(\"CjsResManWorkerLoader workerFactory must be a function.\");\n }\n this.workerUrl = options.workerUrl\n || new URL(\"./CjsResManWorker.js\", import.meta.url);\n this.workerOptions = Object.freeze({\n ...DEFAULT_WORKER_OPTIONS,\n ...(options.workerOptions || {})\n });\n this.enabled = options.enabled !== false;\n this.failed = false;\n this.worker = options.worker || null;\n this.#boundMessage = event => this.#OnMessage(event);\n this.#boundError = event => this.#OnError(event);\n if (this.worker) this.#Attach(this.worker);\n }\n\n /**\n * Enable and lazily create the configured worker.\n *\n * @param {string|URL} [workerUrl] Optional replacement worker URL.\n * @returns {boolean} Whether a worker is ready.\n */\n Enable(workerUrl = this.workerUrl) {\n this.enabled = true;\n if (workerUrl !== undefined && workerUrl !== null) this.workerUrl = workerUrl;\n if (this.worker) return true;\n if (this.failed) return false;\n\n try {\n const worker = this.workerFactory(this.workerUrl, this.workerOptions);\n if (!worker || typeof worker.postMessage !== \"function\") {\n throw new TypeError(\"Worker factory did not return a Worker-compatible object.\");\n }\n this.worker = worker;\n this.#Attach(worker);\n return true;\n } catch {\n this.worker = null;\n this.failed = true;\n return false;\n }\n }\n\n /**\n * Stop worker use and reject every pending request.\n *\n * @param {*} [reason] Optional failure reason.\n * @returns {CjsResManWorkerLoader} This loader.\n */\n Disable(reason = null) {\n const worker = this.worker;\n if (worker) {\n this.#Detach(worker);\n worker.terminate?.();\n }\n this.worker = null;\n this.enabled = false;\n this.failed = reason !== null && reason !== undefined;\n\n if (this.#pending.size) {\n const error = normalizeWorkerError(\n reason || createWorkerUnavailableError(\"Resource worker was disabled.\")\n );\n for (const request of this.#pending.values()) {\n cleanupPendingRequest(request);\n request.reject(error);\n }\n this.#pending.clear();\n }\n return this;\n }\n\n /**\n * Clear a previous creation/fatal failure so a later enable can retry.\n *\n * @returns {CjsResManWorkerLoader} This loader.\n */\n Reset() {\n this.failed = false;\n this.enabled = true;\n return this;\n }\n\n /**\n * Replace the unsupported-operation fallback.\n *\n * @param {CjsResManMainThreadLoader|object} fallback Loader exposing Read and ReadFormat.\n * @returns {CjsResManWorkerLoader} This loader.\n */\n SetFallback(fallback) {\n assertResourceLoader(fallback, \"fallback\");\n this.fallback = fallback;\n return this;\n }\n\n /**\n * Report whether worker execution is configured and constructible.\n *\n * @returns {boolean}\n */\n IsAvailable() {\n return this.enabled && (Boolean(this.worker) || this.Enable());\n }\n\n /**\n * Read a source through its declared worker request, falling back when the\n * source is not worker-aware or a worker cannot be created.\n *\n * @param {object|Function} source Source implementation.\n * @param {string} path Normalized resource path.\n * @param {object} [options={}] Source options.\n * @returns {Promise<*>|*} Source result.\n */\n Read(source, path, options = {}) {\n assertResourceSource(source);\n if (typeof source.CreateWorkerRequest !== \"function\") {\n return this.fallback.Read(source, path, options);\n }\n\n const request = normalizeWorkerRequest(source.CreateWorkerRequest(path, options));\n if (!request || !this.IsAvailable()) {\n return this.fallback.Read(source, path, options);\n }\n return this.Execute(request.operation, request.payload, {\n signal: request.signal || options.signal,\n transfer: request.transfer\n });\n }\n\n /**\n * Test whether a registered format can be safely dispatched to this worker.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {object} [formatOptions={}] Normalized format options.\n * @param {object|null} [context=null] Clone-safe normalized resource path context.\n * @returns {boolean}\n */\n CanReadFormat(descriptor, formatOptions = {}, context = null) {\n const declaration = normalizeFormatWorkerDeclaration(descriptor);\n return Boolean(\n declaration\n && isWorkerFormatOutputSupported(declaration, formatOptions)\n && canCloneWorkerValue(formatOptions)\n && canCloneWorkerValue(context)\n && this.IsAvailable()\n );\n }\n\n /**\n * Execute a worker-safe format reader or use the main-thread fallback.\n *\n * Inputs are cloned by default so shared source-cache ownership is not\n * detached. A format may explicitly declare `transferInput: true` when its\n * caller guarantees exclusive ownership.\n *\n * @param {object} descriptor Registered format descriptor.\n * @param {*} input Reader input.\n * @param {object} [formatOptions={}] Normalized format options.\n * @param {object|null} [context=null] Clone-safe normalized resource path context.\n * @returns {Promise<*>} Format result.\n */\n ReadFormat(descriptor, input, formatOptions = {}, context = null) {\n const declaration = normalizeFormatWorkerDeclaration(descriptor);\n if (!declaration\n || !isWorkerFormatOutputSupported(declaration, formatOptions)\n || !canCloneWorkerValue(formatOptions)\n || !canCloneWorkerValue(context)\n || !this.IsAvailable()) {\n return this.fallback.ReadFormat(descriptor, input, formatOptions, context);\n }\n\n const transfer = declaration.transferInput\n ? getExclusiveInputTransferables(input)\n : [];\n return this.Execute(Operation.FORMAT_READ, {\n module: declaration.module,\n exportName: declaration.exportName,\n input,\n options: formatOptions,\n context\n }, { transfer });\n }\n\n /**\n * Dispatch one operation using the stable worker message protocol.\n *\n * @param {string} operation Operation name.\n * @param {*} payload Structured-cloneable operation payload.\n * @param {object} [options={}] Transfer and cancellation options.\n * @returns {Promise<*>} Worker result.\n */\n Execute(operation, payload, options = {}) {\n if (typeof operation !== \"string\" || operation.trim() === \"\") {\n return Promise.reject(new TypeError(\"Worker operation must be a non-empty string.\"));\n }\n if (!this.IsAvailable()) {\n return Promise.reject(createWorkerUnavailableError());\n }\n const signal = options.signal || null;\n if (signal?.aborted) return Promise.reject(createAbortError(signal.reason));\n\n const id = this.#nextId++;\n let resolve;\n let reject;\n const promise = new Promise((onResolve, onReject) => {\n resolve = onResolve;\n reject = onReject;\n });\n const request = {\n id,\n resolve,\n reject,\n signal,\n onAbort: null\n };\n if (signal && typeof signal.addEventListener === \"function\") {\n request.onAbort = () => {\n if (!this.#pending.delete(id)) return;\n cleanupPendingRequest(request);\n try {\n this.worker?.postMessage({\n type: Message.CANCEL,\n id\n });\n } catch {\n // The local abort remains authoritative if the worker is already gone.\n }\n reject(createAbortError(signal.reason));\n };\n signal.addEventListener(\"abort\", request.onAbort, { once: true });\n }\n this.#pending.set(id, request);\n\n try {\n this.worker.postMessage({\n type: Message.EXECUTE,\n id,\n operation,\n payload\n }, normalizeTransferList(options.transfer));\n } catch (error) {\n this.#pending.delete(id);\n cleanupPendingRequest(request);\n reject(error);\n }\n return promise;\n }\n\n /**\n * Return the number of unresolved worker requests.\n *\n * @returns {number}\n */\n GetPendingCount() {\n return this.#pending.size;\n }\n\n /** Attach this loader's result and failure listeners to a worker. */\n #Attach(worker) {\n if (typeof worker.addEventListener === \"function\") {\n worker.addEventListener(\"message\", this.#boundMessage);\n worker.addEventListener(\"error\", this.#boundError);\n worker.addEventListener(\"messageerror\", this.#boundError);\n } else {\n worker.onmessage = this.#boundMessage;\n worker.onerror = this.#boundError;\n worker.onmessageerror = this.#boundError;\n }\n }\n\n /** Detach this loader's result and failure listeners from a worker. */\n #Detach(worker) {\n if (typeof worker.removeEventListener === \"function\") {\n worker.removeEventListener(\"message\", this.#boundMessage);\n worker.removeEventListener(\"error\", this.#boundError);\n worker.removeEventListener(\"messageerror\", this.#boundError);\n } else {\n if (worker.onmessage === this.#boundMessage) worker.onmessage = null;\n if (worker.onerror === this.#boundError) worker.onerror = null;\n if (worker.onmessageerror === this.#boundError) worker.onmessageerror = null;\n }\n }\n\n /** Settle the pending request identified by one worker result message. */\n #OnMessage(event) {\n const data = event?.data;\n if (!data || data.type !== Message.RESULT) return;\n const request = this.#pending.get(data.id);\n if (!request) return;\n this.#pending.delete(data.id);\n cleanupPendingRequest(request);\n if (data.ok) request.resolve(data.result);\n else request.reject(normalizeWorkerError(data.error));\n }\n\n /** Disable worker execution after a fatal worker or message failure. */\n #OnError(event) {\n const reason = event?.error || event || new Error(\"Resource worker failed.\");\n this.Disable(reason);\n }\n}\n\nfunction assertResourceSource(source) {\n if (!source || (typeof source !== \"object\" && typeof source !== \"function\")\n || typeof source.Read !== \"function\") {\n throw new TypeError(\"Resource source must provide Read(path, options).\");\n }\n}\n\nfunction assertResourceLoader(loader, name = \"loader\") {\n if (!loader || typeof loader.Read !== \"function\" || typeof loader.ReadFormat !== \"function\") {\n throw new TypeError(`CjsResManWorkerLoader ${name} must provide Read and ReadFormat.`);\n }\n}\n\nfunction defaultWorkerFactory(url, options) {\n if (typeof Worker === \"undefined\") {\n throw new ReferenceError(\"Browser Worker is not available.\");\n }\n return new Worker(url, options);\n}\n\nfunction normalizeWorkerRequest(request) {\n if (request === null || request === undefined || request === false) return null;\n if (!request || typeof request !== \"object\" || Array.isArray(request)) {\n throw new TypeError(\"CreateWorkerRequest must return an object or null.\");\n }\n if (typeof request.operation !== \"string\" || request.operation.trim() === \"\") {\n throw new TypeError(\"Worker source request requires a non-empty operation.\");\n }\n return {\n operation: request.operation,\n payload: request.payload,\n signal: request.signal || null,\n transfer: normalizeTransferList(request.transfer)\n };\n}\n\nfunction normalizeFormatWorkerDeclaration(descriptor) {\n const Format = descriptor?.Format;\n const declaration = descriptor?.worker || Format?.worker;\n if (!declaration) return null;\n\n const value = typeof declaration === \"string\"\n ? { module: declaration }\n : declaration;\n if (!value || typeof value !== \"object\" || !value.module) return null;\n return Object.freeze({\n module: String(value.module),\n exportName: String(value.exportName || Format?.name || \"default\"),\n outputTypes: Array.isArray(value.outputTypes)\n ? Object.freeze(value.outputTypes.map(String))\n : null,\n defaultOutput: value.defaultOutput === undefined\n ? undefined\n : String(value.defaultOutput),\n transferInput: value.transferInput === true\n });\n}\n\nfunction isWorkerFormatOutputSupported(declaration, formatOptions) {\n if (!declaration.outputTypes) return true;\n const output = formatOptions.emit ?? declaration.defaultOutput;\n return output !== undefined && declaration.outputTypes.includes(String(output));\n}\n\nfunction normalizeTransferList(value) {\n if (value === null || value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new TypeError(\"Worker transfer list must be an array.\");\n }\n return value;\n}\n\nfunction getExclusiveInputTransferables(input) {\n if (input instanceof ArrayBuffer) return [ input ];\n if (ArrayBuffer.isView(input)\n && input.byteOffset === 0\n && input.byteLength === input.buffer.byteLength) {\n return [ input.buffer ];\n }\n return [];\n}\n\nfunction canCloneWorkerValue(value, seen = new Set()) {\n if (value === null || value === undefined) return true;\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\" || type === \"bigint\") {\n return true;\n }\n if (type !== \"object\") return false;\n if (value instanceof ArrayBuffer || ArrayBuffer.isView(value) || value instanceof Date) {\n return true;\n }\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.every(entry => canCloneWorkerValue(entry, seen));\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return false;\n return Object.values(value).every(entry => canCloneWorkerValue(entry, seen));\n}\n\nfunction cleanupPendingRequest(request) {\n if (request.signal && request.onAbort\n && typeof request.signal.removeEventListener === \"function\") {\n request.signal.removeEventListener(\"abort\", request.onAbort);\n }\n}\n\nfunction createWorkerUnavailableError(message = \"Resource worker is unavailable.\") {\n const error = new Error(message);\n error.name = \"CjsResManWorkerUnavailableError\";\n error.code = \"CJS_RESOURCE_WORKER_UNAVAILABLE\";\n return error;\n}\n\nfunction createAbortError(reason) {\n if (reason instanceof Error) return reason;\n const error = new Error(reason === undefined ? \"Resource worker request was aborted.\" : String(reason));\n error.name = \"AbortError\";\n error.code = \"ABORT_ERR\";\n return error;\n}\n\nfunction normalizeWorkerError(value) {\n if (value instanceof Error) return value;\n const error = new Error(value?.message || \"Resource worker operation failed.\");\n error.name = value?.name || \"CjsResManWorkerError\";\n for (const key of [ \"code\", \"operation\", \"path\", \"status\", \"statusText\" ]) {\n if (value?.[key] !== undefined) error[key] = value[key];\n }\n return error;\n}\n"],"names":["DEFAULT_WORKER_OPTIONS","Object","freeze","type","name","CjsResManWorkerLoader","Map","constructor","options","Array","isArray","TypeError","fallback","CjsResManMainThreadLoader","assertResourceLoader","workerFactory","defaultWorkerFactory","workerUrl","URL","import","meta","url","workerOptions","enabled","failed","worker","event","Enable","undefined","postMessage","Disable","reason","terminate","size","error","normalizeWorkerError","createWorkerUnavailableError","request","values","cleanupPendingRequest","reject","clear","Reset","SetFallback","IsAvailable","Boolean","Read","source","path","assertResourceSource","CreateWorkerRequest","normalizeWorkerRequest","Execute","operation","payload","signal","transfer","CanReadFormat","descriptor","formatOptions","context","declaration","normalizeFormatWorkerDeclaration","isWorkerFormatOutputSupported","canCloneWorkerValue","ReadFormat","input","transferInput","getExclusiveInputTransferables","Operation","FORMAT_READ","module","exportName","trim","Promise","aborted","createAbortError","id","resolve","promise","onResolve","onReject","onAbort","addEventListener","delete","Message","CANCEL","once","set","EXECUTE","normalizeTransferList","GetPendingCount","#Attach","onmessage","onerror","onmessageerror","#Detach","removeEventListener","#OnMessage","data","RESULT","get","ok","result","#OnError","Error","loader","Worker","ReferenceError","Format","value","String","outputTypes","map","defaultOutput","output","emit","includes","ArrayBuffer","isView","byteOffset","byteLength","buffer","seen","Set","Date","has","add","every","entry","prototype","getPrototypeOf","message","code","key"],"mappings":"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"}
package/docs/README.md CHANGED
@@ -12,8 +12,8 @@ CarbonEngineJS: resource identity and state, the MotherLode cache, semantic
12
12
  resource classes, registered format readers, fetch providers, and the queued
13
13
  CPU load/publication pipeline. It stops at a published CPU payload; engine
14
14
  packages realize that payload into backend objects. It also owns the canonical
15
- device-free `Tr2EffectRes`/`Tr2Shader` reflection graph and portable-reflection
16
- hydration boundary.
15
+ device-free `Tr2EffectRes`/`Tr2Shader` reflection graph, built by reading the
16
+ compiled Carbon container directly.
17
17
 
18
18
  ## Use this package when
19
19
 
@@ -22,7 +22,7 @@ LOADED -> PREPARING -> PREPARED
22
22
  The package selects and runs registered readers, hydrates or returns the
23
23
  promised CPU outcome, and stores lifecycle state, cache entries, and loaded
24
24
  payloads. For compiled effects it independently validates complete permutation
25
- topology and the format package's plain portable reflection, selects a
25
+ topology and the Carbon v15 container records it read itself, selects a
26
26
  permutation, and hydrates a canonical device-free `Tr2Shader` graph. It never
27
27
  creates WebGL/WebGPU textures, buffers, shader modules, pipelines, or bind
28
28
  groups, and it never inspects backend capability.
@@ -40,7 +40,8 @@ historical mapping.
40
40
  - `CjsResource` state and Carbon-style resource methods.
41
41
  - `CjsMotherLode` canonical identity, explicit replacement results, activity
42
42
  and lock metadata, deterministic payload/adapter cleanup, and cache stats.
43
- - `CjsResMan` semantic resource construction, registered-format selection,
43
+ - `CjsResMan` extension-selected resource/object handlers, semantic resource
44
+ overrides, ordered and legacy registered-format selection,
44
45
  concurrency-limited source loading, staged prepare queues, layered
45
46
  source/read/resource deduplication, object loader dispatch, and prefetch.
46
47
  - Main-thread and browser-worker resource execution strategies, including
@@ -63,7 +64,7 @@ historical mapping.
63
64
  `TriGrannyRes`, `Tr2GrannyStateRes`, and `Tr2LightProfileRes`.
64
65
  - Canonical device-free shader/reflection classes: `Tr2Shader`, its effect,
65
66
  technique, pass, stage, constant, resource, sampler, annotation, and library
66
- records; portable hydration; permutation selection; and per-index caching.
67
+ records; Carbon-binary hydration; permutation selection; and per-index caching.
67
68
  - `Tr2TexturePipeline` CPU-only texture steps and `Tr2TextureLodManager`
68
69
  membership.
69
70
  - Opaque engine-owned subobject slots for backend adapters.
@@ -97,6 +98,14 @@ Concrete formats are not imported or registered by the package root; see
97
98
  Worker-safe formats provide their own exact module declaration and remain
98
99
  explicit registrations; see [browser worker execution](reference/workers.md).
99
100
 
101
+ Extension routes are manager-local configuration. They bind an extension to a
102
+ handler plus one format or an ordered format chain. The handler's
103
+ `ResourceHandlerMode` declaration determines whether path-only `Fetch()`
104
+ returns the stable resource or the constructed object. The route snapshot is
105
+ captured by the canonical handle, so later registration changes affect only a
106
+ new identity after explicit deletion or clearing. Target construction and
107
+ dynamic identification run after any worker decode on the main thread.
108
+
100
109
  ## Source layout
101
110
 
102
111
  Authoring source is decorated JavaScript; published output is built ESM in
@@ -88,6 +88,7 @@ Application / runtime object
88
88
  | |
89
89
  | - normalize source path and extension |
90
90
  | - resolve the promised output tag |
91
+ | - capture the registered extension route |
91
92
  +-----------------------------------------------+
92
93
  |
93
94
  v
@@ -102,7 +103,7 @@ Application / runtime object
102
103
  | |
103
104
  `--- cache miss -----------------------------+
104
105
  | |
105
- | resolve class from requirement |
106
+ | semantic class or extension Handler |
106
107
  | construct + Initialize() |
107
108
  | insert into CjsMotherLode |
108
109
  v |
@@ -132,10 +133,10 @@ Application / runtime object
132
133
  +-----------------------------------------------+
133
134
  | Read stage |
134
135
  | |
135
- | current object loader for extension? |
136
- | yes -> call it |
137
- | no -> resolve registered formats by |
138
- | bytes + request options |
136
+ | explicit extension route? |
137
+ | yes -> ordered Formats/content probes |
138
+ | no -> direct loader or legacy formats |
139
+ | target/identify -> hydrate on caller thread |
139
140
  +-----------------------------------------------+
140
141
  |
141
142
  | plain payload / hydrated object
@@ -143,9 +144,9 @@ Application / runtime object
143
144
  +-----------------------------------------------+
144
145
  | Publish stage |
145
146
  | |
146
- | semantic resource -> SetPayload(payload) |
147
- | generic resource -> SetPayload(value) |
148
- | object aliases payload |
147
+ | RESOURCE handler -> SetPayload + return handle|
148
+ | OBJECT handler -> SetPayload + return object|
149
+ | legacy path -> preserve current behavior |
149
150
  +-----------------------------------------------+
150
151
  |
151
152
  +--- validation failure --------------------+
@@ -45,7 +45,7 @@ file rather than loading another file.
45
45
  | shader map keyed by permutation index | private `#shaders` map |
46
46
  | `GetShader(options, count)` | option resolution followed by `GetShaderByIndex` |
47
47
  | permutation records | `permutationGraph.axes` and `variants` |
48
- | offset-table body lookup | portable reflection lookup; Carbon-record adapter pending |
48
+ | offset-table body lookup | `CjsCarbonEffectReader` retained by `DoLoad`, read per index |
49
49
  | retained file bytes | `GetPayload()` |
50
50
 
51
51
  `runtime-trinity`'s `Tr2Effect.RebuildCachedDataInternal` clears and
@@ -64,15 +64,15 @@ count are different:
64
64
  | `effect.gles2/.../geometryviewer.sm_hi` | 80 | 27 |
65
65
  | `effect.gles2/.../textureviewer.sm_hi` | 18 | 3 |
66
66
 
67
- Current `.cewgpu` bytes use Carbon's version-15 record layout and retain every
68
- permutation row and representable non-program description fields. Non-dynamic
69
- sampler names are unrecoverable and stage order is canonicalized. Emitted body
70
- dedupe follows exact emitted bytes, so it need not preserve the original source
71
- alias partition. `mode: "selected"` narrows which body receives translated
67
+ Current `.carbonwebgpu` bytes use Carbon's version-15 record layout and retain every
68
+ permutation row and representable non-program description fields, including
69
+ non-dynamic sampler names and the file's authored pass-stage order Carbon's
70
+ runtime discards both, the file does not. Emitted body dedupe follows exact
71
+ emitted bytes, so it need not preserve the original source alias partition. `mode: "selected"` narrows which body receives translated
72
72
  WGSL; it does not discard source permutations. `mode: "all"` attempts every
73
73
  distinct body after the resolved selection passes the initial translation gate.
74
74
 
75
- `.cewg` remains its own CEWG chunk format. Its current package contract also
75
+ `.carbonwebgl` remains its own Carbon WebGL chunk format. Its current package contract also
76
76
  preserves complete source permutation topology and supports selected versus
77
77
  all backend coverage.
78
78
 
@@ -82,16 +82,13 @@ when some bodies have no translated backend program.
82
82
 
83
83
  ## Current integration boundaries
84
84
 
85
- The wire topology is complete, but two adapters still require focused
86
- regression proof:
85
+ The read path is direct: `Tr2EffectRes.DoLoad` retains a
86
+ `CjsCarbonEffectReader` over the container bytes, and
87
+ `Tr2Shader.fromCarbonBinary(reader, index)` builds the device-free graph from
88
+ one description record. No intermediate document sits between them.
87
89
 
88
- - the raw CEWGPU container's Carbon description must be converted to the
89
- portable envelope expected by `Tr2Shader.fromPortable`; and
90
- - the engine's derived body-program view must agree on stable pass-unit
91
- identity.
92
-
93
- Until those adapters are reconciled, the presence of every permutation proves
94
- source preservation, not successful runtime hydration or execution.
90
+ What remains unproven is execution, not construction. The presence of every
91
+ permutation proves source preservation; it does not prove a rendered result.
95
92
 
96
93
  ## Reading the model without inventing gaps
97
94
 
@@ -109,6 +106,6 @@ classes, and record indirection before treating the absence as a design gap.
109
106
 
110
107
  ## Related documentation
111
108
 
112
- - [CEWGPU effect container](../formats/webgpu/formats/cewgpu.md)
109
+ - [Carbon WebGPU effect container](../formats/webgpu/formats/carbon-webgpu.md)
113
110
  - [Carbon compiled-effect container](../formats/carbon-effect-container.md)
114
111
  - [WebGPU effect packaging](../formats/webgpu/guides/effect-packaging.md)
@@ -52,7 +52,7 @@ shader is one permutation, and many effects share them — see
52
52
  [shader-resource-model.md](shader-resource-model.md). The surface is
53
53
  `GetConstant(name)`, `GetResource(name)`, `GetParameterAnnotations(parameterName)`,
54
54
  `GetEffectDescription()` and `iterateStages()`, reachable through
55
- `GetPortableEffectReflection` -> `Tr2Shader.fromPortable`.
55
+ `Tr2EffectRes.DoLoad(bytes)` -> `Tr2Shader.fromCarbonBinary(reader, index)`.
56
56
 
57
57
  **Backend binding topology belongs to the package**, because it has no Carbon
58
58
  counterpart — it comes from the lowered IR, not from Carbon's D3D-era reflection.
@@ -43,8 +43,8 @@ metadata. Worker eligibility never changes the format's direct API; see
43
43
  | DDS (`.dds`) | `CjsDdsFormat` | `@carbonenginejs/runtime-resource/formats/dds` |
44
44
  | DXBC (shader bytecode) | `CjsDxbcFormat` | `@carbonenginejs/runtime-resource/formats/dxbc` |
45
45
  | Compiled effect (`.sm_hi`, `.sm_lo`, `.sm_depth`) | `CjsHlslFormat` | `@carbonenginejs/runtime-resource/formats/hlsl` |
46
- | CEWG WebGL effect package | `CjsWebglFormat` | `@carbonenginejs/runtime-resource/formats/webgl` |
47
- | CEWGPU WebGPU effect package | `CjsWebgpuFormat` | `@carbonenginejs/runtime-resource/formats/webgpu` |
46
+ | Carbon WebGL WebGL effect package | `CjsWebglFormat` | `@carbonenginejs/runtime-resource/formats/webgl` |
47
+ | Carbon WebGPU WebGPU effect package | `CjsWebgpuFormat` | `@carbonenginejs/runtime-resource/formats/webgpu` |
48
48
  | FBX (`.fbx`) | `CjsFbxFormat` | `@carbonenginejs/runtime-resource/formats/fbx` |
49
49
  | FLAC (`.flac`) | `CjsFlacFormat` | `@carbonenginejs/runtime-resource/formats/flac` |
50
50
  | GIF (`.gif`) | `CjsGifFormat` | `@carbonenginejs/runtime-resource/formats/gif` |
@@ -55,6 +55,7 @@ metadata. Worker eligibility never changes the format's direct API; see
55
55
  | MP4 (`.mp4`) | `CjsMp4Format` | `@carbonenginejs/runtime-resource/formats/mp4` |
56
56
  | OBJ (`.obj`) | `CjsObjFormat` | `@carbonenginejs/runtime-resource/formats/obj` |
57
57
  | Ogg (`.ogg`) | `CjsOggFormat` | `@carbonenginejs/runtime-resource/formats/ogg` |
58
+ | Python pickle (`.pickle`, protocol 0 data subset) | `CjsPickleFormat` | `@carbonenginejs/runtime-resource/formats/pickle` |
58
59
  | PNG (`.png`) | `CjsPngFormat` | `@carbonenginejs/runtime-resource/formats/png` |
59
60
  | Red (`.red`) | `CjsRedFormat` | `@carbonenginejs/runtime-resource/formats/red` |
60
61
  | STL (`.stl`) | `CjsStlFormat` | `@carbonenginejs/runtime-resource/formats/stl` |
@@ -66,6 +67,7 @@ metadata. Worker eligibility never changes the format's direct API; see
66
67
  | YAML (`.yaml`/`.yml`) | `CjsYamlFormat` | `@carbonenginejs/runtime-resource/formats/yaml` |
67
68
 
68
69
  Detailed pages: [Granny GR2 and GSF](gr2.md),
70
+ [data-only pickle protocol 0](pickle.md),
69
71
  [Wwise soundbanks and media](wwise.md), and [STL export](stl.md). Ownership
70
72
  history, retained snapshots, and donor licensing are recorded in
71
73
  [provenance.md](provenance.md).