@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -36,30 +36,33 @@ import { getApp } from './api.js';
36
36
  *
37
37
  * Responsibilities:
38
38
  * - Resolve logical module IDs to physical paths or URLs.
39
- * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.
39
+ * - In editor mode, bundle local script modules into a single data URL after transpile.
40
40
  * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).
41
41
  * - Gather static and dynamic import dependencies for tooling.
42
42
  *
43
43
  * Modes:
44
- * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.
44
+ * - Editor mode (`editorMode === true`): local script graphs are bundled to data URLs.
45
45
  * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\> .js mapping).
46
46
  *
47
47
  * Caching:
48
- * - Built modules are memoized in `_built` map keyed by logical ID.
48
+ * - Built bundles are memoized in `_built` map keyed by canonical source path.
49
49
  *
50
50
  * @public
51
51
  */ class ScriptRegistry {
52
52
  _vfs;
53
53
  _scriptsRoot;
54
54
  _built;
55
+ _building;
56
+ _builtDeps;
55
57
  /**
56
58
  * @param vfs - The virtual file system for existence checks, reads, and path ops.
57
59
  * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).
58
- * @param editorMode - Whether to build modules to data URLs and rewrite imports.
59
60
  */ constructor(vfs, scriptsRoot){
60
61
  this._vfs = vfs;
61
62
  this._scriptsRoot = scriptsRoot;
62
63
  this._built = new Map();
64
+ this._building = new Map();
65
+ this._builtDeps = new Map();
63
66
  }
64
67
  /**
65
68
  * The active virtual file system.
@@ -72,6 +75,8 @@ import { getApp } from './api.js';
72
75
  if (vfs !== this._vfs) {
73
76
  this._vfs = vfs;
74
77
  this._built.clear();
78
+ this._building.clear();
79
+ this._builtDeps.clear();
75
80
  }
76
81
  }
77
82
  /**
@@ -92,15 +97,39 @@ import { getApp } from './api.js';
92
97
  */ invalidate(moduleId) {
93
98
  if (!moduleId) {
94
99
  this._built.clear();
100
+ this._building.clear();
101
+ this._builtDeps.clear();
95
102
  return;
96
103
  }
97
104
  const normalized = String(moduleId);
98
- this._built.delete(normalized);
105
+ const variants = new Set([
106
+ normalized
107
+ ]);
99
108
  if (normalized.endsWith('.ts') || normalized.endsWith('.js')) {
100
- this._built.delete(normalized.slice(0, -3));
109
+ variants.add(normalized.slice(0, -3));
110
+ } else if (normalized.endsWith('.mjs')) {
111
+ variants.add(normalized.slice(0, -4));
101
112
  } else {
102
- this._built.delete(`${normalized}.ts`);
103
- this._built.delete(`${normalized}.js`);
113
+ variants.add(`${normalized}.ts`);
114
+ variants.add(`${normalized}.js`);
115
+ variants.add(`${normalized}.mjs`);
116
+ }
117
+ for (const key of variants){
118
+ this._built.delete(key);
119
+ this._building.delete(key);
120
+ this._builtDeps.delete(key);
121
+ }
122
+ for (const [entryId, deps] of [
123
+ ...this._builtDeps
124
+ ]){
125
+ for (const variant of variants){
126
+ if (deps.has(variant)) {
127
+ this._built.delete(entryId);
128
+ this._building.delete(entryId);
129
+ this._builtDeps.delete(entryId);
130
+ break;
131
+ }
132
+ }
104
133
  }
105
134
  }
106
135
  /**
@@ -216,103 +245,144 @@ import { getApp } from './api.js';
216
245
  await gather(code, reDynamic);
217
246
  }
218
247
  /**
219
- * Builds a logical module id into a data URL (editor mode pipeline).
248
+ * Builds a logical module id into a bundled data URL (editor mode pipeline).
220
249
  *
221
250
  * Steps:
222
251
  * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.
223
- * - Read source code.
224
- * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.
225
- * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.
226
- * - Convert to `data:` URL and memoize in `_built`.
252
+ * - Collect reachable local imports without recursively building data URLs.
253
+ * - Transpile local modules to `System.register`.
254
+ * - Emit a single `data:` URL with a small module loader and memoize it in `_built`.
227
255
  *
228
256
  * @param id - Logical module id to build.
229
257
  * @returns Data URL string for dynamic import, or empty string if not found.
230
258
  */ async build(id) {
231
- const key = String(id);
259
+ const entry = await this.resolveModuleInfo(String(id));
260
+ if (!entry) {
261
+ return '';
262
+ }
263
+ const key = entry.id;
232
264
  const cached = this._built.get(key);
233
265
  if (cached) {
234
266
  return cached;
235
267
  }
236
- const srcPath = await this.resolveSourcePath(key);
237
- if (!srcPath) {
268
+ const pending = this._building.get(key);
269
+ if (pending) {
270
+ return await pending;
271
+ }
272
+ const task = this.buildBundle(key);
273
+ this._building.set(key, task);
274
+ try {
275
+ const url = await task;
276
+ if (url) {
277
+ this._built.set(key, url);
278
+ }
279
+ return url;
280
+ } finally{
281
+ this._building.delete(key);
282
+ }
283
+ }
284
+ async buildBundle(entryId) {
285
+ const modules = new Map();
286
+ const entry = await this.collectModule(entryId, modules);
287
+ if (!entry) {
238
288
  return '';
239
289
  }
240
- const code = await this._vfs.readFile(srcPath.path, {
290
+ const chunks = [
291
+ this.getSystemBundleRuntime()
292
+ ];
293
+ for (const module of modules.values()){
294
+ chunks.push(`__z3dRegister(${JSON.stringify(module.id)}, () => {\n${module.systemCode}\n});`);
295
+ }
296
+ chunks.push(`const __z3dEntry = await __z3dLoad(${JSON.stringify(entry.id)});\n` + `const plugin = __z3dEntry.plugin;\n` + `const __z3dDefault = __z3dEntry.default ?? __z3dEntry.plugin ?? __z3dEntry;\n` + `export { plugin };\n` + `export default __z3dDefault;\n` + `//# sourceURL=${entry.id}`);
297
+ const url = toDataUrl(chunks.join('\n'), entry.id);
298
+ this._builtDeps.set(entry.id, new Set(modules.keys()));
299
+ return url;
300
+ }
301
+ async collectModule(id, modules) {
302
+ const module = await this.resolveModuleInfo(id);
303
+ if (!module) {
304
+ return null;
305
+ }
306
+ if (modules.has(module.id)) {
307
+ return modules.get(module.id);
308
+ }
309
+ modules.set(module.id, module);
310
+ const source = await this._vfs.readFile(module.path, {
241
311
  encoding: 'utf8'
242
312
  });
243
- const rewritten = await this.rewriteImports(code, key);
244
- const js = await this.transpile(rewritten, key, srcPath.type);
245
- const url = toDataUrl(js, key);
246
- this._built.set(key, url);
247
- return url;
313
+ const esmCode = await this.transpileToESModule(source, module.id, module.type);
314
+ const rewritten = await this.rewriteImportsToLogicalIds(esmCode, module.id);
315
+ module.deps = rewritten.deps;
316
+ module.systemCode = await this.transpileToSystemModule(rewritten.code, module.id);
317
+ for (const dep of module.deps){
318
+ await this.collectModule(dep, modules);
319
+ }
320
+ return module;
248
321
  }
249
- /**
250
- * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.
251
- *
252
- * Behavior:
253
- * - For `'js'`, returns code with `//# sourceURL=logicalId`.
254
- * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and
255
- * transpiles to ES2015/ESNext module with inline source maps.
256
- *
257
- * @param code - Source code to transpile.
258
- * @param _id - Logical module id (used for fileName/sourceURL).
259
- * @param type - Source type (`'js' | 'ts'`).
260
- * @returns Transpiled JavaScript source.
261
- * @throws If TypeScript runtime is not found for TS input.
262
- */ async transpile(code, _id, type) {
263
- const logicalId = String(_id);
264
- if (type === 'js') {
265
- return `${code}\n//# sourceURL=${logicalId}`;
322
+ async resolveModuleInfo(id) {
323
+ const srcPath = await this.resolveSourcePath(id);
324
+ if (!srcPath) {
325
+ return null;
266
326
  }
327
+ const path = this._vfs.normalizePath(srcPath.path);
328
+ return {
329
+ id: path,
330
+ path,
331
+ type: srcPath.type,
332
+ deps: [],
333
+ systemCode: ''
334
+ };
335
+ }
336
+ getTypeScriptRuntime() {
267
337
  const ts = window.ts;
268
338
  if (!ts) {
269
339
  throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');
270
340
  }
341
+ return ts;
342
+ }
343
+ async transpileToESModule(code, _id, type) {
344
+ const logicalId = String(_id);
345
+ if (type === 'js') {
346
+ return code;
347
+ }
348
+ const ts = this.getTypeScriptRuntime();
271
349
  const res = ts.transpileModule(code, {
272
350
  compilerOptions: {
273
351
  target: ts.ScriptTarget.ES2015,
274
352
  module: ts.ModuleKind.ESNext,
275
- sourceMap: true,
276
- inlineSources: true,
277
353
  experimentalDecorators: true,
278
354
  useDefineForClassFields: false
279
355
  },
280
356
  fileName: logicalId
281
357
  });
282
- let out = res.outputText || '';
283
- if (res.sourceMapText) {
284
- const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));
285
- out += `\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;
286
- }
287
- out += `\n//# sourceURL=${logicalId}`;
288
- return out;
358
+ return res.outputText || '';
359
+ }
360
+ async transpileToSystemModule(code, _id) {
361
+ const logicalId = String(_id);
362
+ const ts = this.getTypeScriptRuntime();
363
+ const res = ts.transpileModule(code, {
364
+ compilerOptions: {
365
+ allowJs: true,
366
+ target: ts.ScriptTarget.ES2015,
367
+ module: ts.ModuleKind.System,
368
+ esModuleInterop: true,
369
+ experimentalDecorators: true,
370
+ useDefineForClassFields: false
371
+ },
372
+ fileName: logicalId
373
+ });
374
+ return res.outputText || '';
289
375
  }
290
376
  /**
291
- * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.
292
- *
293
- * Parsing:
294
- * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.
295
- *
296
- * Replacement rules:
297
- * - Skip invalid spans or ones without quoted specifiers.
298
- * - If spec is absolute URL, special URL (data:, blob:), or bare module:
299
- * - If it starts with `@zephyr3d/`, keep as-is (external).
300
- * - Otherwise resolve to a logical id and attempt to `build` it (if available).
301
- * - Else (relative spec), resolve from `fromId` and `build` recursively.
302
- *
303
- * Output:
304
- * - Directly writes the replacement specifier without re-adding quotes,
305
- * so replacements must themselves be quoted or be valid URLs/data URLs.
306
- *
307
- * @param code - Module source code to transform.
308
- * @param fromId - The logical id of the current module (resolution base for relatives).
309
- * @returns Transformed source with rewritten import specifiers.
310
- */ async rewriteImports(code, fromId) {
377
+ * Rewrites local ESM specifiers to canonical source paths and records local deps.
378
+ * External URLs and package imports are left for the native dynamic import path.
379
+ */ async rewriteImportsToLogicalIds(code, fromId) {
311
380
  await init;
312
381
  const [imports] = parse(code);
313
382
  const list = [
314
383
  ...imports
315
384
  ].sort((a, b)=>(a.s || 0) - (b.s || 0));
385
+ const deps = new Set();
316
386
  let out = '';
317
387
  let last = 0;
318
388
  for (const im of list){
@@ -334,23 +404,124 @@ import { getApp } from './api.js';
334
404
  // append [last, s)
335
405
  out += code.slice(last, im.s);
336
406
  const spec = code.slice(im.s, im.e); // original spec
337
- let replacement = spec;
338
- if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {
339
- if (spec.startsWith('@zephyr3d/')) {
340
- replacement = spec;
341
- } else {
342
- const depId = await this.resolveLogicalId(spec);
343
- replacement = await this.build(depId); // try build as dependence
344
- }
345
- } else {
346
- const depId = await this.resolveLogicalId(spec, String(fromId));
347
- replacement = await this.build(depId); // recursively build as dataURL
407
+ const resolved = await this.resolveImportTarget(spec, String(fromId));
408
+ const replacement = resolved.id ?? spec;
409
+ if (resolved.id) {
410
+ deps.add(resolved.id);
348
411
  }
349
412
  out += replacement; // Do not wrap in quotes
350
413
  last = im.e;
351
414
  }
352
415
  out += code.slice(last);
353
- return out;
416
+ return {
417
+ code: out,
418
+ deps: [
419
+ ...deps
420
+ ]
421
+ };
422
+ }
423
+ async resolveImportTarget(spec, fromId) {
424
+ if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || spec.startsWith('@zephyr3d/')) {
425
+ return {
426
+ id: null
427
+ };
428
+ }
429
+ const depId = await this.resolveLogicalId(spec, isBareModule(spec) ? undefined : fromId);
430
+ const module = await this.resolveModuleInfo(depId);
431
+ return {
432
+ id: module?.id ?? null
433
+ };
434
+ }
435
+ getSystemBundleRuntime() {
436
+ return `
437
+ const __z3dRegistry = new Map();
438
+ let __z3dCurrentId = '';
439
+ const System = {
440
+ register(deps, declare) {
441
+ if (!__z3dCurrentId) {
442
+ throw new Error('System.register called without module id');
443
+ }
444
+ __z3dRegistry.set(__z3dCurrentId, {
445
+ id: __z3dCurrentId,
446
+ deps,
447
+ declare,
448
+ exports: Object.create(null),
449
+ setters: [],
450
+ execute: null,
451
+ importers: [],
452
+ state: 0
453
+ });
454
+ }
455
+ };
456
+ function __z3dRegister(id, factory) {
457
+ const prev = __z3dCurrentId;
458
+ __z3dCurrentId = id;
459
+ try {
460
+ factory();
461
+ } finally {
462
+ __z3dCurrentId = prev;
463
+ }
464
+ }
465
+ function __z3dResolve(spec, parentId) {
466
+ if (__z3dRegistry.has(spec)) {
467
+ return spec;
468
+ }
469
+ if (spec.startsWith('./') || spec.startsWith('../')) {
470
+ const base = parentId.slice(0, parentId.lastIndexOf('/') + 1);
471
+ return new URL(spec, 'file://' + base).pathname;
472
+ }
473
+ return spec;
474
+ }
475
+ function __z3dExport(record, name, value) {
476
+ if (name && typeof name === 'object') {
477
+ for (const key of Object.keys(name)) {
478
+ __z3dExport(record, key, name[key]);
479
+ }
480
+ return name;
481
+ }
482
+ record.exports[name] = value;
483
+ for (const notify of record.importers) {
484
+ notify(record.exports);
485
+ }
486
+ return value;
487
+ }
488
+ async function __z3dLoad(spec, parentId = '') {
489
+ const id = parentId ? __z3dResolve(spec, parentId) : spec;
490
+ const record = __z3dRegistry.get(id);
491
+ if (!record) {
492
+ return await import(id);
493
+ }
494
+ if (record.state === 2 || record.state === 1) {
495
+ return record.exports;
496
+ }
497
+ record.state = 1;
498
+ const declaration = record.declare((name, value) => __z3dExport(record, name, value), {
499
+ id,
500
+ import: (dep) => __z3dLoad(dep, id),
501
+ meta: { url: id }
502
+ }) || {};
503
+ record.setters = declaration.setters || [];
504
+ record.execute = declaration.execute || (() => {});
505
+ for (let i = 0; i < record.deps.length; i++) {
506
+ const depId = __z3dResolve(record.deps[i], id);
507
+ const depRecord = __z3dRegistry.get(depId);
508
+ const depExports = depRecord ? await __z3dLoad(depId) : await import(depId);
509
+ const setter = record.setters[i];
510
+ if (typeof setter === 'function') {
511
+ setter(depExports);
512
+ if (depRecord) {
513
+ depRecord.importers.push((exports) => setter(exports));
514
+ }
515
+ }
516
+ }
517
+ const result = record.execute();
518
+ if (result && typeof result.then === 'function') {
519
+ await result;
520
+ }
521
+ record.state = 2;
522
+ return record.exports;
523
+ }
524
+ `;
354
525
  }
355
526
  /**
356
527
  * Resolves a specifier to a logical id suitable for further processing.
@@ -1 +1 @@
1
- {"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\r\nimport type { Nullable, VFS } from '@zephyr3d/base';\r\nimport { textToBase64 } from '@zephyr3d/base';\r\nimport { init, parse } from 'es-module-lexer';\r\nimport { getApp } from './api';\r\n\r\n/**\r\n * Converts JavaScript source to a data URL tied to a logical module id.\r\n *\r\n * @param js - The JavaScript source code to embed.\r\n * @param id - Logical module identifier (used only for sourceURL tagging).\r\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\r\n * @internal\r\n */\r\nfunction toDataUrl(js: string, id: string) {\r\n const b64 = textToBase64(js);\r\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is an absolute HTTP(S) URL.\r\n * @internal\r\n */\r\nfunction isAbsoluteUrl(spec: string) {\r\n return /^https?:\\/\\//i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a special URL (data: or blob:).\r\n * @internal\r\n */\r\nfunction isSpecialUrl(spec: string) {\r\n return /^(data|blob):/i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\r\n * @internal\r\n */\r\nfunction isBareModule(spec: string) {\r\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\r\n}\r\n\r\n/**\r\n * Resolves, builds, and serves runtime modules using a VFS.\r\n *\r\n * Responsibilities:\r\n * - Resolve logical module IDs to physical paths or URLs.\r\n * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.\r\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\r\n * - Gather static and dynamic import dependencies for tooling.\r\n *\r\n * Modes:\r\n * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.\r\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\r\n *\r\n * Caching:\r\n * - Built modules are memoized in `_built` map keyed by logical ID.\r\n *\r\n * @public\r\n */\r\nexport class ScriptRegistry {\r\n private _vfs: VFS;\r\n private _scriptsRoot: string;\r\n private _built: Map<string, string>; // logicalId -> dataURL\r\n\r\n /**\r\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\r\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\r\n * @param editorMode - Whether to build modules to data URLs and rewrite imports.\r\n */\r\n constructor(vfs: VFS, scriptsRoot: string) {\r\n this._vfs = vfs;\r\n this._scriptsRoot = scriptsRoot;\r\n this._built = new Map();\r\n }\r\n\r\n /**\r\n * The active virtual file system.\r\n *\r\n * Assigning a new VFS clears the build cache.\r\n */\r\n get VFS() {\r\n return this._vfs;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._vfs) {\r\n this._vfs = vfs;\r\n this._built.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The root path used by `#/` specifiers.\r\n */\r\n get scriptsRoot() {\r\n return this._scriptsRoot;\r\n }\r\n set scriptsRoot(path: string) {\r\n this._scriptsRoot = path;\r\n }\r\n\r\n /**\r\n * Invalidates cached built module output for one logical module id, or clears the full cache.\r\n *\r\n * Pass the same logical id shape that callers use with {@link ScriptRegistry.resolveRuntimeUrl},\r\n * for example `/assets/scripts/foo.ts`, `/assets/scripts/foo.js`, or `/assets/scripts/foo`.\r\n *\r\n * @param moduleId - Optional logical module id to invalidate. Omit to clear the entire build cache.\r\n */\r\n invalidate(moduleId?: string) {\r\n if (!moduleId) {\r\n this._built.clear();\r\n return;\r\n }\r\n const normalized = String(moduleId);\r\n this._built.delete(normalized);\r\n if (normalized.endsWith('.ts') || normalized.endsWith('.js')) {\r\n this._built.delete(normalized.slice(0, -3));\r\n } else {\r\n this._built.delete(`${normalized}.ts`);\r\n this._built.delete(`${normalized}.js`);\r\n }\r\n }\r\n\r\n /**\r\n * Fetches raw source for a logical module id by probing known extensions.\r\n *\r\n * Search order:\r\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\r\n * - Else try `.id.ts`, then `.id.js`.\r\n *\r\n * @param id - Logical module identifier (absolute or logical path-like).\r\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\r\n */\r\n protected async fetchSource(id: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (id.endsWith('.ts')) {\r\n pathWithExt = id;\r\n type = 'ts';\r\n } else if (id.endsWith('.js')) {\r\n pathWithExt = id;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${id}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (type) {\r\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\r\n return { code, type, path: pathWithExt };\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a module entry to a URL suitable for dynamic import.\r\n *\r\n * Behavior:\r\n * - In editor mode, builds the module to a data URL.\r\n * - Otherwise, returns `.js` URL directly:\r\n * - If `id` ends with `.js`: return as-is.\r\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\r\n * - Else: append `.js`.\r\n *\r\n * @param entryId - Entry module identifier (logical or path-like).\r\n * @returns A URL string that can be used in `import(...)`.\r\n */\r\n async resolveRuntimeUrl(entryId: string) {\r\n const id = await this.resolveLogicalId(entryId);\r\n if (id.startsWith('/assets/@builtins/')) {\r\n return await this.build(String(id));\r\n }\r\n return getApp().editorMode !== 'none'\r\n ? await this.build(String(id))\r\n : id.endsWith('.js')\r\n ? id\r\n : id.endsWith('.ts')\r\n ? `${id.slice(0, -3)}.js`\r\n : `${id}.js`;\r\n }\r\n\r\n /**\r\n * Recursively gathers direct static and dynamic import dependencies for a module.\r\n *\r\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\r\n * module specifiers are ignored here.\r\n *\r\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\r\n * @param fromId - The logical id of the module containing `entryId`.\r\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\r\n */\r\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\r\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\r\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\r\n\r\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\r\n const srcPath = await this.resolveSourcePath(normalizedId);\r\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\r\n return;\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n dependencies[srcPath.path] = code;\r\n\r\n const gather = async (input: string, re: RegExp) => {\r\n for (;;) {\r\n const m = re.exec(input);\r\n if (!m) {\r\n break;\r\n }\r\n\r\n const spec = m[2];\r\n\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n await this.getDependencies(spec, normalizedId, dependencies);\r\n }\r\n }\r\n };\r\n\r\n await gather(code, reStatic);\r\n await gather(code, reDynamic);\r\n }\r\n\r\n /**\r\n * Builds a logical module id into a data URL (editor mode pipeline).\r\n *\r\n * Steps:\r\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\r\n * - Read source code.\r\n * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.\r\n * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.\r\n * - Convert to `data:` URL and memoize in `_built`.\r\n *\r\n * @param id - Logical module id to build.\r\n * @returns Data URL string for dynamic import, or empty string if not found.\r\n */\r\n private async build(id: string) {\r\n const key = String(id);\r\n const cached = this._built.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const srcPath = await this.resolveSourcePath(key);\r\n if (!srcPath) {\r\n return '';\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n\r\n const rewritten = await this.rewriteImports(code, key);\r\n const js = await this.transpile(rewritten, key, srcPath.type);\r\n const url = toDataUrl(js, key);\r\n this._built.set(key, url);\r\n return url;\r\n }\r\n\r\n /**\r\n * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.\r\n *\r\n * Behavior:\r\n * - For `'js'`, returns code with `//# sourceURL=logicalId`.\r\n * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and\r\n * transpiles to ES2015/ESNext module with inline source maps.\r\n *\r\n * @param code - Source code to transpile.\r\n * @param _id - Logical module id (used for fileName/sourceURL).\r\n * @param type - Source type (`'js' | 'ts'`).\r\n * @returns Transpiled JavaScript source.\r\n * @throws If TypeScript runtime is not found for TS input.\r\n */\r\n private async transpile(code: string, _id: string, type: 'js' | 'ts') {\r\n const logicalId = String(_id);\r\n\r\n if (type === 'js') {\r\n return `${code}\\n//# sourceURL=${logicalId}`;\r\n }\r\n\r\n const ts = (window as any).ts as typeof TS;\r\n if (!ts) {\r\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\r\n }\r\n\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.ESNext,\r\n sourceMap: true,\r\n inlineSources: true,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n\r\n let out = res.outputText || '';\r\n if (res.sourceMapText) {\r\n const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));\r\n out += `\\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;\r\n }\r\n out += `\\n//# sourceURL=${logicalId}`;\r\n return out;\r\n }\r\n\r\n /**\r\n * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.\r\n *\r\n * Parsing:\r\n * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.\r\n *\r\n * Replacement rules:\r\n * - Skip invalid spans or ones without quoted specifiers.\r\n * - If spec is absolute URL, special URL (data:, blob:), or bare module:\r\n * - If it starts with `@zephyr3d/`, keep as-is (external).\r\n * - Otherwise resolve to a logical id and attempt to `build` it (if available).\r\n * - Else (relative spec), resolve from `fromId` and `build` recursively.\r\n *\r\n * Output:\r\n * - Directly writes the replacement specifier without re-adding quotes,\r\n * so replacements must themselves be quoted or be valid URLs/data URLs.\r\n *\r\n * @param code - Module source code to transform.\r\n * @param fromId - The logical id of the current module (resolution base for relatives).\r\n * @returns Transformed source with rewritten import specifiers.\r\n */\r\n private async rewriteImports(code: string, fromId: string) {\r\n await init;\r\n const [imports] = parse(code);\r\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\r\n let out = '';\r\n let last = 0;\r\n\r\n for (const im of list) {\r\n // Skip import.meta entries reported by es-module-lexer.\r\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\r\n // which must remain untouched.\r\n if (im.d === -2) {\r\n continue;\r\n }\r\n // must have quotes\r\n const hasQuote = im.ss != null && im.se != null;\r\n if (!hasQuote || im.se <= im.ss) {\r\n continue;\r\n }\r\n // must have contents\r\n if (im.e <= im.s) {\r\n continue;\r\n }\r\n // append [last, s)\r\n out += code.slice(last, im.s);\r\n\r\n const spec = code.slice(im.s, im.e); // original spec\r\n let replacement = spec;\r\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {\r\n if (spec.startsWith('@zephyr3d/')) {\r\n replacement = spec;\r\n } else {\r\n const depId = await this.resolveLogicalId(spec);\r\n replacement = await this.build(depId); // try build as dependence\r\n }\r\n } else {\r\n const depId = await this.resolveLogicalId(spec, String(fromId));\r\n replacement = await this.build(depId); // recursively build as dataURL\r\n }\r\n out += replacement; // Do not wrap in quotes\r\n last = im.e;\r\n }\r\n out += code.slice(last);\r\n return out;\r\n }\r\n\r\n /**\r\n * Resolves a specifier to a logical id suitable for further processing.\r\n *\r\n * Resolution rules:\r\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\r\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\r\n * - `/absolute`: treated as absolute from root (normalized).\r\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\r\n * map to the dependency's `entry` path; otherwise return as-is.\r\n * - Else (non-editor bare module): return `spec` unchanged (external).\r\n *\r\n * @param spec - Import specifier string.\r\n * @param fromId - Optional base logical id used for relative resolution.\r\n * @returns A normalized logical id or an external specifier string.\r\n * @throws If a relative import is provided without `fromId`.\r\n */\r\n async resolveLogicalId(spec: string, fromId?: string) {\r\n if (spec.startsWith('#/')) {\r\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\r\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\r\n if (!fromId) {\r\n throw new Error(`Relative import \"${spec}\" requires fromId`);\r\n }\r\n return this._vfs.normalizePath(\r\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\r\n );\r\n } else if (spec.startsWith('/')) {\r\n return spec.replace(/^\\/+/, '/');\r\n } else if (getApp().editorMode !== 'none') {\r\n const libRoot = '/';\r\n // naked module, checking if it is a installed module in editor mode\r\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\r\n let depsExists = await this._vfs.exists(depsLockPath);\r\n if (depsExists) {\r\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\r\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\r\n if (depsInfo?.dependencies[spec]) {\r\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\r\n }\r\n }\r\n }\r\n return spec;\r\n }\r\n\r\n /**\r\n * Resolves a logical id to a concrete source path and type by probing extensions.\r\n *\r\n * Rules:\r\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\r\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\r\n * - Maps `.mjs` to type `'js'`.\r\n *\r\n * @param logicalId - The normalized logical module id (path-like).\r\n * @returns `{ type, path }` or `null` if not found.\r\n */\r\n async resolveSourcePath(logicalId: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (logicalId.endsWith('.ts')) {\r\n pathWithExt = logicalId;\r\n type = 'ts';\r\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\r\n pathWithExt = logicalId;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js', 'mjs'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${logicalId}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t === 'ts' ? 'ts' : 'js';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return type ? { type, path: pathWithExt } : null;\r\n }\r\n}\r\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","vfs","scriptsRoot","Map","VFS","clear","path","invalidate","moduleId","normalized","delete","endsWith","slice","fetchSource","type","pathWithExt","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","entryId","resolveLogicalId","build","getApp","editorMode","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","key","cached","get","rewritten","rewriteImports","transpile","url","set","_id","logicalId","ts","window","Error","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","module","ModuleKind","ESNext","sourceMap","inlineSources","experimentalDecorators","useDefineForClassFields","fileName","out","outputText","sourceMapText","mapBase64","btoa","unescape","init","imports","parse","list","sort","a","b","s","last","im","d","hasQuote","ss","se","e","replacement","depId","normalizePath","join","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo","JSON","entry"],"mappings":"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"}
1
+ {"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\r\nimport type { Nullable, VFS } from '@zephyr3d/base';\r\nimport { textToBase64 } from '@zephyr3d/base';\r\nimport { init, parse } from 'es-module-lexer';\r\nimport { getApp } from './api';\r\n\r\n/**\r\n * Converts JavaScript source to a data URL tied to a logical module id.\r\n *\r\n * @param js - The JavaScript source code to embed.\r\n * @param id - Logical module identifier (used only for sourceURL tagging).\r\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\r\n * @internal\r\n */\r\nfunction toDataUrl(js: string, id: string) {\r\n const b64 = textToBase64(js);\r\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is an absolute HTTP(S) URL.\r\n * @internal\r\n */\r\nfunction isAbsoluteUrl(spec: string) {\r\n return /^https?:\\/\\//i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a special URL (data: or blob:).\r\n * @internal\r\n */\r\nfunction isSpecialUrl(spec: string) {\r\n return /^(data|blob):/i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\r\n * @internal\r\n */\r\nfunction isBareModule(spec: string) {\r\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\r\n}\r\n\r\ntype ScriptModuleType = 'js' | 'ts';\r\n\r\ntype ScriptModuleInfo = {\r\n id: string;\r\n path: string;\r\n type: ScriptModuleType;\r\n deps: string[];\r\n systemCode: string;\r\n};\r\n\r\n/**\r\n * Resolves, builds, and serves runtime modules using a VFS.\r\n *\r\n * Responsibilities:\r\n * - Resolve logical module IDs to physical paths or URLs.\r\n * - In editor mode, bundle local script modules into a single data URL after transpile.\r\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\r\n * - Gather static and dynamic import dependencies for tooling.\r\n *\r\n * Modes:\r\n * - Editor mode (`editorMode === true`): local script graphs are bundled to data URLs.\r\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\r\n *\r\n * Caching:\r\n * - Built bundles are memoized in `_built` map keyed by canonical source path.\r\n *\r\n * @public\r\n */\r\nexport class ScriptRegistry {\r\n private _vfs: VFS;\r\n private _scriptsRoot: string;\r\n private _built: Map<string, string>; // logicalId -> dataURL\r\n private _building: Map<string, Promise<string>>;\r\n private _builtDeps: Map<string, Set<string>>;\r\n\r\n /**\r\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\r\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\r\n */\r\n constructor(vfs: VFS, scriptsRoot: string) {\r\n this._vfs = vfs;\r\n this._scriptsRoot = scriptsRoot;\r\n this._built = new Map();\r\n this._building = new Map();\r\n this._builtDeps = new Map();\r\n }\r\n\r\n /**\r\n * The active virtual file system.\r\n *\r\n * Assigning a new VFS clears the build cache.\r\n */\r\n get VFS() {\r\n return this._vfs;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._vfs) {\r\n this._vfs = vfs;\r\n this._built.clear();\r\n this._building.clear();\r\n this._builtDeps.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The root path used by `#/` specifiers.\r\n */\r\n get scriptsRoot() {\r\n return this._scriptsRoot;\r\n }\r\n set scriptsRoot(path: string) {\r\n this._scriptsRoot = path;\r\n }\r\n\r\n /**\r\n * Invalidates cached built module output for one logical module id, or clears the full cache.\r\n *\r\n * Pass the same logical id shape that callers use with {@link ScriptRegistry.resolveRuntimeUrl},\r\n * for example `/assets/scripts/foo.ts`, `/assets/scripts/foo.js`, or `/assets/scripts/foo`.\r\n *\r\n * @param moduleId - Optional logical module id to invalidate. Omit to clear the entire build cache.\r\n */\r\n invalidate(moduleId?: string) {\r\n if (!moduleId) {\r\n this._built.clear();\r\n this._building.clear();\r\n this._builtDeps.clear();\r\n return;\r\n }\r\n const normalized = String(moduleId);\r\n const variants = new Set([normalized]);\r\n if (normalized.endsWith('.ts') || normalized.endsWith('.js')) {\r\n variants.add(normalized.slice(0, -3));\r\n } else if (normalized.endsWith('.mjs')) {\r\n variants.add(normalized.slice(0, -4));\r\n } else {\r\n variants.add(`${normalized}.ts`);\r\n variants.add(`${normalized}.js`);\r\n variants.add(`${normalized}.mjs`);\r\n }\r\n for (const key of variants) {\r\n this._built.delete(key);\r\n this._building.delete(key);\r\n this._builtDeps.delete(key);\r\n }\r\n for (const [entryId, deps] of [...this._builtDeps]) {\r\n for (const variant of variants) {\r\n if (deps.has(variant)) {\r\n this._built.delete(entryId);\r\n this._building.delete(entryId);\r\n this._builtDeps.delete(entryId);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Fetches raw source for a logical module id by probing known extensions.\r\n *\r\n * Search order:\r\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\r\n * - Else try `.id.ts`, then `.id.js`.\r\n *\r\n * @param id - Logical module identifier (absolute or logical path-like).\r\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\r\n */\r\n protected async fetchSource(id: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (id.endsWith('.ts')) {\r\n pathWithExt = id;\r\n type = 'ts';\r\n } else if (id.endsWith('.js')) {\r\n pathWithExt = id;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${id}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (type) {\r\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\r\n return { code, type, path: pathWithExt };\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a module entry to a URL suitable for dynamic import.\r\n *\r\n * Behavior:\r\n * - In editor mode, builds the module to a data URL.\r\n * - Otherwise, returns `.js` URL directly:\r\n * - If `id` ends with `.js`: return as-is.\r\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\r\n * - Else: append `.js`.\r\n *\r\n * @param entryId - Entry module identifier (logical or path-like).\r\n * @returns A URL string that can be used in `import(...)`.\r\n */\r\n async resolveRuntimeUrl(entryId: string) {\r\n const id = await this.resolveLogicalId(entryId);\r\n if (id.startsWith('/assets/@builtins/')) {\r\n return await this.build(String(id));\r\n }\r\n return getApp().editorMode !== 'none'\r\n ? await this.build(String(id))\r\n : id.endsWith('.js')\r\n ? id\r\n : id.endsWith('.ts')\r\n ? `${id.slice(0, -3)}.js`\r\n : `${id}.js`;\r\n }\r\n\r\n /**\r\n * Recursively gathers direct static and dynamic import dependencies for a module.\r\n *\r\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\r\n * module specifiers are ignored here.\r\n *\r\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\r\n * @param fromId - The logical id of the module containing `entryId`.\r\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\r\n */\r\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\r\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\r\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\r\n\r\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\r\n const srcPath = await this.resolveSourcePath(normalizedId);\r\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\r\n return;\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n dependencies[srcPath.path] = code;\r\n\r\n const gather = async (input: string, re: RegExp) => {\r\n for (;;) {\r\n const m = re.exec(input);\r\n if (!m) {\r\n break;\r\n }\r\n\r\n const spec = m[2];\r\n\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n await this.getDependencies(spec, normalizedId, dependencies);\r\n }\r\n }\r\n };\r\n\r\n await gather(code, reStatic);\r\n await gather(code, reDynamic);\r\n }\r\n\r\n /**\r\n * Builds a logical module id into a bundled data URL (editor mode pipeline).\r\n *\r\n * Steps:\r\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\r\n * - Collect reachable local imports without recursively building data URLs.\r\n * - Transpile local modules to `System.register`.\r\n * - Emit a single `data:` URL with a small module loader and memoize it in `_built`.\r\n *\r\n * @param id - Logical module id to build.\r\n * @returns Data URL string for dynamic import, or empty string if not found.\r\n */\r\n private async build(id: string) {\r\n const entry = await this.resolveModuleInfo(String(id));\r\n if (!entry) {\r\n return '';\r\n }\r\n\r\n const key = entry.id;\r\n const cached = this._built.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const pending = this._building.get(key);\r\n if (pending) {\r\n return await pending;\r\n }\r\n\r\n const task = this.buildBundle(key);\r\n this._building.set(key, task);\r\n try {\r\n const url = await task;\r\n if (url) {\r\n this._built.set(key, url);\r\n }\r\n return url;\r\n } finally {\r\n this._building.delete(key);\r\n }\r\n }\r\n\r\n private async buildBundle(entryId: string) {\r\n const modules = new Map<string, ScriptModuleInfo>();\r\n const entry = await this.collectModule(entryId, modules);\r\n if (!entry) {\r\n return '';\r\n }\r\n\r\n const chunks = [this.getSystemBundleRuntime()];\r\n for (const module of modules.values()) {\r\n chunks.push(`__z3dRegister(${JSON.stringify(module.id)}, () => {\\n${module.systemCode}\\n});`);\r\n }\r\n chunks.push(\r\n `const __z3dEntry = await __z3dLoad(${JSON.stringify(entry.id)});\\n` +\r\n `const plugin = __z3dEntry.plugin;\\n` +\r\n `const __z3dDefault = __z3dEntry.default ?? __z3dEntry.plugin ?? __z3dEntry;\\n` +\r\n `export { plugin };\\n` +\r\n `export default __z3dDefault;\\n` +\r\n `//# sourceURL=${entry.id}`\r\n );\r\n\r\n const url = toDataUrl(chunks.join('\\n'), entry.id);\r\n this._builtDeps.set(entry.id, new Set(modules.keys()));\r\n return url;\r\n }\r\n\r\n private async collectModule(id: string, modules: Map<string, ScriptModuleInfo>) {\r\n const module = await this.resolveModuleInfo(id);\r\n if (!module) {\r\n return null;\r\n }\r\n if (modules.has(module.id)) {\r\n return modules.get(module.id)!;\r\n }\r\n\r\n modules.set(module.id, module);\r\n\r\n const source = (await this._vfs.readFile(module.path, { encoding: 'utf8' })) as string;\r\n const esmCode = await this.transpileToESModule(source, module.id, module.type);\r\n const rewritten = await this.rewriteImportsToLogicalIds(esmCode, module.id);\r\n module.deps = rewritten.deps;\r\n module.systemCode = await this.transpileToSystemModule(rewritten.code, module.id);\r\n\r\n for (const dep of module.deps) {\r\n await this.collectModule(dep, modules);\r\n }\r\n return module;\r\n }\r\n\r\n private async resolveModuleInfo(id: string): Promise<Nullable<ScriptModuleInfo>> {\r\n const srcPath = await this.resolveSourcePath(id);\r\n if (!srcPath) {\r\n return null;\r\n }\r\n const path = this._vfs.normalizePath(srcPath.path);\r\n return {\r\n id: path,\r\n path,\r\n type: srcPath.type,\r\n deps: [],\r\n systemCode: ''\r\n };\r\n }\r\n\r\n private getTypeScriptRuntime() {\r\n const ts = (window as any).ts as typeof TS;\r\n if (!ts) {\r\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\r\n }\r\n return ts;\r\n }\r\n\r\n private async transpileToESModule(code: string, _id: string, type: ScriptModuleType) {\r\n const logicalId = String(_id);\r\n\r\n if (type === 'js') {\r\n return code;\r\n }\r\n\r\n const ts = this.getTypeScriptRuntime();\r\n\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.ESNext,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n\r\n return res.outputText || '';\r\n }\r\n\r\n private async transpileToSystemModule(code: string, _id: string) {\r\n const logicalId = String(_id);\r\n const ts = this.getTypeScriptRuntime();\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n allowJs: true,\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.System,\r\n esModuleInterop: true,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n return res.outputText || '';\r\n }\r\n\r\n /**\r\n * Rewrites local ESM specifiers to canonical source paths and records local deps.\r\n * External URLs and package imports are left for the native dynamic import path.\r\n */\r\n private async rewriteImportsToLogicalIds(code: string, fromId: string) {\r\n await init;\r\n const [imports] = parse(code);\r\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\r\n const deps = new Set<string>();\r\n let out = '';\r\n let last = 0;\r\n\r\n for (const im of list) {\r\n // Skip import.meta entries reported by es-module-lexer.\r\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\r\n // which must remain untouched.\r\n if (im.d === -2) {\r\n continue;\r\n }\r\n // must have quotes\r\n const hasQuote = im.ss != null && im.se != null;\r\n if (!hasQuote || im.se <= im.ss) {\r\n continue;\r\n }\r\n // must have contents\r\n if (im.e <= im.s) {\r\n continue;\r\n }\r\n // append [last, s)\r\n out += code.slice(last, im.s);\r\n\r\n const spec = code.slice(im.s, im.e); // original spec\r\n const resolved = await this.resolveImportTarget(spec, String(fromId));\r\n const replacement = resolved.id ?? spec;\r\n if (resolved.id) {\r\n deps.add(resolved.id);\r\n }\r\n out += replacement; // Do not wrap in quotes\r\n last = im.e;\r\n }\r\n out += code.slice(last);\r\n return { code: out, deps: [...deps] };\r\n }\r\n\r\n private async resolveImportTarget(spec: string, fromId: string) {\r\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || spec.startsWith('@zephyr3d/')) {\r\n return { id: null };\r\n }\r\n\r\n const depId = await this.resolveLogicalId(spec, isBareModule(spec) ? undefined : fromId);\r\n const module = await this.resolveModuleInfo(depId);\r\n return { id: module?.id ?? null };\r\n }\r\n\r\n private getSystemBundleRuntime() {\r\n return `\r\nconst __z3dRegistry = new Map();\r\nlet __z3dCurrentId = '';\r\nconst System = {\r\n register(deps, declare) {\r\n if (!__z3dCurrentId) {\r\n throw new Error('System.register called without module id');\r\n }\r\n __z3dRegistry.set(__z3dCurrentId, {\r\n id: __z3dCurrentId,\r\n deps,\r\n declare,\r\n exports: Object.create(null),\r\n setters: [],\r\n execute: null,\r\n importers: [],\r\n state: 0\r\n });\r\n }\r\n};\r\nfunction __z3dRegister(id, factory) {\r\n const prev = __z3dCurrentId;\r\n __z3dCurrentId = id;\r\n try {\r\n factory();\r\n } finally {\r\n __z3dCurrentId = prev;\r\n }\r\n}\r\nfunction __z3dResolve(spec, parentId) {\r\n if (__z3dRegistry.has(spec)) {\r\n return spec;\r\n }\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n const base = parentId.slice(0, parentId.lastIndexOf('/') + 1);\r\n return new URL(spec, 'file://' + base).pathname;\r\n }\r\n return spec;\r\n}\r\nfunction __z3dExport(record, name, value) {\r\n if (name && typeof name === 'object') {\r\n for (const key of Object.keys(name)) {\r\n __z3dExport(record, key, name[key]);\r\n }\r\n return name;\r\n }\r\n record.exports[name] = value;\r\n for (const notify of record.importers) {\r\n notify(record.exports);\r\n }\r\n return value;\r\n}\r\nasync function __z3dLoad(spec, parentId = '') {\r\n const id = parentId ? __z3dResolve(spec, parentId) : spec;\r\n const record = __z3dRegistry.get(id);\r\n if (!record) {\r\n return await import(id);\r\n }\r\n if (record.state === 2 || record.state === 1) {\r\n return record.exports;\r\n }\r\n record.state = 1;\r\n const declaration = record.declare((name, value) => __z3dExport(record, name, value), {\r\n id,\r\n import: (dep) => __z3dLoad(dep, id),\r\n meta: { url: id }\r\n }) || {};\r\n record.setters = declaration.setters || [];\r\n record.execute = declaration.execute || (() => {});\r\n for (let i = 0; i < record.deps.length; i++) {\r\n const depId = __z3dResolve(record.deps[i], id);\r\n const depRecord = __z3dRegistry.get(depId);\r\n const depExports = depRecord ? await __z3dLoad(depId) : await import(depId);\r\n const setter = record.setters[i];\r\n if (typeof setter === 'function') {\r\n setter(depExports);\r\n if (depRecord) {\r\n depRecord.importers.push((exports) => setter(exports));\r\n }\r\n }\r\n }\r\n const result = record.execute();\r\n if (result && typeof result.then === 'function') {\r\n await result;\r\n }\r\n record.state = 2;\r\n return record.exports;\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Resolves a specifier to a logical id suitable for further processing.\r\n *\r\n * Resolution rules:\r\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\r\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\r\n * - `/absolute`: treated as absolute from root (normalized).\r\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\r\n * map to the dependency's `entry` path; otherwise return as-is.\r\n * - Else (non-editor bare module): return `spec` unchanged (external).\r\n *\r\n * @param spec - Import specifier string.\r\n * @param fromId - Optional base logical id used for relative resolution.\r\n * @returns A normalized logical id or an external specifier string.\r\n * @throws If a relative import is provided without `fromId`.\r\n */\r\n async resolveLogicalId(spec: string, fromId?: string) {\r\n if (spec.startsWith('#/')) {\r\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\r\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\r\n if (!fromId) {\r\n throw new Error(`Relative import \"${spec}\" requires fromId`);\r\n }\r\n return this._vfs.normalizePath(\r\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\r\n );\r\n } else if (spec.startsWith('/')) {\r\n return spec.replace(/^\\/+/, '/');\r\n } else if (getApp().editorMode !== 'none') {\r\n const libRoot = '/';\r\n // naked module, checking if it is a installed module in editor mode\r\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\r\n let depsExists = await this._vfs.exists(depsLockPath);\r\n if (depsExists) {\r\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\r\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\r\n if (depsInfo?.dependencies[spec]) {\r\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\r\n }\r\n }\r\n }\r\n return spec;\r\n }\r\n\r\n /**\r\n * Resolves a logical id to a concrete source path and type by probing extensions.\r\n *\r\n * Rules:\r\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\r\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\r\n * - Maps `.mjs` to type `'js'`.\r\n *\r\n * @param logicalId - The normalized logical module id (path-like).\r\n * @returns `{ type, path }` or `null` if not found.\r\n */\r\n async resolveSourcePath(logicalId: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (logicalId.endsWith('.ts')) {\r\n pathWithExt = logicalId;\r\n type = 'ts';\r\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\r\n pathWithExt = logicalId;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js', 'mjs'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${logicalId}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t === 'ts' ? 'ts' : 'js';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return type ? { type, path: pathWithExt } : null;\r\n }\r\n}\r\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","_building","_builtDeps","vfs","scriptsRoot","Map","VFS","clear","path","invalidate","moduleId","normalized","variants","Set","endsWith","add","slice","key","delete","entryId","deps","variant","has","fetchSource","type","pathWithExt","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","resolveLogicalId","build","getApp","editorMode","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","entry","resolveModuleInfo","cached","get","pending","task","buildBundle","set","url","modules","collectModule","chunks","getSystemBundleRuntime","module","values","push","JSON","stringify","systemCode","join","keys","source","esmCode","transpileToESModule","rewritten","rewriteImportsToLogicalIds","transpileToSystemModule","dep","normalizePath","getTypeScriptRuntime","ts","window","Error","_id","logicalId","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","ModuleKind","ESNext","experimentalDecorators","useDefineForClassFields","fileName","outputText","allowJs","System","esModuleInterop","init","imports","parse","list","sort","a","b","s","out","last","im","d","hasQuote","ss","se","e","resolved","resolveImportTarget","replacement","depId","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo"],"mappings":"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"}