@adaas/a-frame 0.0.23 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/.conf/tsconfig.browser.json +7 -1
  2. package/.conf/tsconfig.node.json +7 -1
  3. package/dist/browser/A-FrameBrowserStorageBlobs.context-CZTTvpn2.d.mts +53 -0
  4. package/dist/browser/A-FrameBrowserStorageBlobs.context-CaGTyatz.d.mts +40 -0
  5. package/dist/browser/A-FrameBrowserStorageBlobs.context-DjeEH8cn.d.mts +53 -0
  6. package/dist/browser/A-FrameBrowserStorageBlobs.context-vCsuTea9.d.mts +40 -0
  7. package/dist/browser/A-FrameBundle.types-LzfgdMiQ.d.mts +71 -0
  8. package/dist/browser/A-FrameChannel.component-4mTNctXL.d.mts +704 -0
  9. package/dist/browser/A-FrameChannel.types-BXEKJK9t.d.mts +205 -0
  10. package/dist/browser/A-FrameChannel.types-Ba3wgUZj.d.mts +199 -0
  11. package/dist/browser/A-FrameChannel.types-BfINhQZe.d.mts +145 -0
  12. package/dist/browser/A-FrameChannel.types-DfacgYL1.d.mts +199 -0
  13. package/dist/browser/A-FrameCompletion.entity-Dzy9sIa8.d.mts +72 -0
  14. package/dist/browser/A-FrameDefinition.entity-C1aK-gdl.d.mts +370 -0
  15. package/dist/browser/A-FrameDefinition.entity-CKPXsarS.d.mts +358 -0
  16. package/dist/browser/A-FrameDefinition.entity-yA0GsBoe.d.mts +143 -0
  17. package/dist/browser/A-FrameDefinition.types-BT02yAhQ.d.mts +232 -0
  18. package/dist/browser/A-FrameDynamicContentOperation.context-CoViNb19.d.mts +297 -0
  19. package/dist/browser/A-FrameDynamicContentOperation.context-Dd7Lb7X2.d.mts +266 -0
  20. package/dist/browser/A-FrameDynamicPatch.entity-BRuF1tqs.d.mts +29 -0
  21. package/dist/browser/A-FrameDynamicStructure.entity-DMvI_EPT.d.mts +210 -0
  22. package/dist/browser/A-FrameDynamicStructure.entity-DxkPP9mR.d.mts +235 -0
  23. package/dist/browser/A-FrameEnv.types-DnK-CYVk.d.mts +21 -0
  24. package/dist/browser/A-FrameNamespace.entity-BDg1FUgo.d.mts +136 -0
  25. package/dist/browser/A-FrameSchema.entity-DjYIhsoj.d.mts +141 -0
  26. package/dist/browser/A-FrameSegment.entity-D1xjjWvG.d.mts +161 -0
  27. package/dist/browser/A-FrameSegment.entity-D7Aj39Wh.d.mts +146 -0
  28. package/dist/browser/bundle.d.mts +6 -2
  29. package/dist/browser/bundle.mjs +1 -1
  30. package/dist/browser/bundle.mjs.map +1 -1
  31. package/dist/browser/channel.d.mts +51 -74
  32. package/dist/browser/channel.mjs +1 -2
  33. package/dist/browser/channel.mjs.map +1 -1
  34. package/dist/browser/chunk-2RNFZSBL.mjs +2 -0
  35. package/dist/browser/chunk-2RNFZSBL.mjs.map +1 -0
  36. package/dist/browser/chunk-46LRNZRG.mjs +2 -0
  37. package/dist/browser/chunk-46LRNZRG.mjs.map +1 -0
  38. package/dist/browser/chunk-52HFO3OY.mjs +2 -0
  39. package/dist/browser/chunk-52HFO3OY.mjs.map +1 -0
  40. package/dist/browser/chunk-643KGQKR.mjs +3 -0
  41. package/dist/browser/chunk-643KGQKR.mjs.map +1 -0
  42. package/dist/browser/chunk-66BBIZAM.mjs +3 -0
  43. package/dist/browser/chunk-66BBIZAM.mjs.map +1 -0
  44. package/dist/browser/chunk-6NPQURSO.mjs +2 -0
  45. package/dist/browser/chunk-6NPQURSO.mjs.map +1 -0
  46. package/dist/browser/chunk-6WAOMX7M.mjs +2 -0
  47. package/dist/browser/chunk-6WAOMX7M.mjs.map +1 -0
  48. package/dist/browser/chunk-77HU5SRQ.mjs +2 -0
  49. package/dist/browser/chunk-77HU5SRQ.mjs.map +1 -0
  50. package/dist/browser/chunk-AET6XULU.mjs +2 -0
  51. package/dist/browser/chunk-AET6XULU.mjs.map +1 -0
  52. package/dist/browser/chunk-BIBPE2GT.mjs +3 -0
  53. package/dist/browser/chunk-BIBPE2GT.mjs.map +1 -0
  54. package/dist/browser/chunk-CDJKU4DK.mjs +2 -0
  55. package/dist/browser/chunk-CDJKU4DK.mjs.map +1 -0
  56. package/dist/browser/chunk-CT67Y46H.mjs +3 -0
  57. package/dist/browser/chunk-CT67Y46H.mjs.map +1 -0
  58. package/dist/browser/chunk-EFC7OUNO.mjs +2 -0
  59. package/dist/browser/chunk-EFC7OUNO.mjs.map +1 -0
  60. package/dist/browser/chunk-EJIX7H7A.mjs +2 -0
  61. package/dist/browser/chunk-EJIX7H7A.mjs.map +1 -0
  62. package/dist/browser/chunk-FHJ5ATND.mjs +3 -0
  63. package/dist/browser/chunk-FHJ5ATND.mjs.map +1 -0
  64. package/dist/browser/chunk-FVH2EEVP.mjs +3 -0
  65. package/dist/browser/chunk-FVH2EEVP.mjs.map +1 -0
  66. package/dist/browser/chunk-G6ULYKSU.mjs +2 -0
  67. package/dist/browser/chunk-G6ULYKSU.mjs.map +1 -0
  68. package/dist/browser/chunk-G7MKGKG5.mjs +2 -0
  69. package/dist/browser/chunk-G7MKGKG5.mjs.map +1 -0
  70. package/dist/browser/chunk-GOADBDTE.mjs +2 -0
  71. package/dist/browser/chunk-GOADBDTE.mjs.map +1 -0
  72. package/dist/browser/chunk-GOMJPGVB.mjs +3 -0
  73. package/dist/browser/chunk-GOMJPGVB.mjs.map +1 -0
  74. package/dist/browser/chunk-INQV5UZA.mjs +2 -0
  75. package/dist/browser/chunk-INQV5UZA.mjs.map +1 -0
  76. package/dist/browser/chunk-INXPVBTZ.mjs +2 -0
  77. package/dist/browser/chunk-INXPVBTZ.mjs.map +1 -0
  78. package/dist/browser/chunk-KFMVTZ7T.mjs +2 -0
  79. package/dist/browser/chunk-KFMVTZ7T.mjs.map +1 -0
  80. package/dist/browser/chunk-LK6C7C3S.mjs +2 -0
  81. package/dist/browser/chunk-LK6C7C3S.mjs.map +1 -0
  82. package/dist/browser/chunk-LOGRQOWP.mjs +3 -0
  83. package/dist/browser/chunk-LOGRQOWP.mjs.map +1 -0
  84. package/dist/browser/chunk-LZACYSUC.mjs +3 -0
  85. package/dist/browser/chunk-LZACYSUC.mjs.map +1 -0
  86. package/dist/browser/chunk-NTOIVRX3.mjs +2 -0
  87. package/dist/browser/chunk-NTOIVRX3.mjs.map +1 -0
  88. package/dist/browser/chunk-OES2N3X7.mjs +3 -0
  89. package/dist/browser/chunk-OES2N3X7.mjs.map +1 -0
  90. package/dist/browser/chunk-OFKV5GNB.mjs +1 -1
  91. package/dist/browser/chunk-OFKV5GNB.mjs.map +1 -1
  92. package/dist/browser/chunk-OVLM5A32.mjs +3 -0
  93. package/dist/browser/chunk-OVLM5A32.mjs.map +1 -0
  94. package/dist/browser/chunk-QATIN7CO.mjs +1 -1
  95. package/dist/browser/chunk-QATIN7CO.mjs.map +1 -1
  96. package/dist/browser/chunk-QOL7CAUZ.mjs +2 -0
  97. package/dist/browser/chunk-QOL7CAUZ.mjs.map +1 -0
  98. package/dist/browser/chunk-RCB3PX4V.mjs +2 -0
  99. package/dist/browser/chunk-RCB3PX4V.mjs.map +1 -0
  100. package/dist/browser/chunk-RWQSCROK.mjs +3 -0
  101. package/dist/browser/chunk-RWQSCROK.mjs.map +1 -0
  102. package/dist/browser/chunk-TIAUMK2X.mjs +2 -0
  103. package/dist/browser/chunk-TIAUMK2X.mjs.map +1 -0
  104. package/dist/browser/chunk-TQPC5MYM.mjs +3 -0
  105. package/dist/browser/chunk-TQPC5MYM.mjs.map +1 -0
  106. package/dist/browser/chunk-UNIKTCXL.mjs +3 -0
  107. package/dist/browser/chunk-UNIKTCXL.mjs.map +1 -0
  108. package/dist/browser/chunk-UULJJ5C5.mjs +3 -0
  109. package/dist/browser/chunk-UULJJ5C5.mjs.map +1 -0
  110. package/dist/browser/chunk-VSSANMPF.mjs +2 -0
  111. package/dist/browser/chunk-VSSANMPF.mjs.map +1 -0
  112. package/dist/browser/chunk-VW2BZYNY.mjs +2 -0
  113. package/dist/browser/chunk-VW2BZYNY.mjs.map +1 -0
  114. package/dist/browser/chunk-WAXBOWM6.mjs +3 -0
  115. package/dist/browser/chunk-WAXBOWM6.mjs.map +1 -0
  116. package/dist/browser/chunk-WXCQCHAX.mjs +2 -0
  117. package/dist/browser/chunk-WXCQCHAX.mjs.map +1 -0
  118. package/dist/browser/chunk-XKKBIIZG.mjs +3 -0
  119. package/dist/browser/chunk-XKKBIIZG.mjs.map +1 -0
  120. package/dist/browser/chunk-XR7FVA5M.mjs +3 -0
  121. package/dist/browser/chunk-XR7FVA5M.mjs.map +1 -0
  122. package/dist/browser/chunk-YQJFTBGV.mjs +3 -0
  123. package/dist/browser/chunk-YQJFTBGV.mjs.map +1 -0
  124. package/dist/browser/chunk-YTAMZDWC.mjs +3 -0
  125. package/dist/browser/chunk-YTAMZDWC.mjs.map +1 -0
  126. package/dist/browser/chunk-ZEONOTRL.mjs +2 -0
  127. package/dist/browser/chunk-ZEONOTRL.mjs.map +1 -0
  128. package/dist/browser/completion.d.mts +10 -0
  129. package/dist/browser/completion.mjs +2 -0
  130. package/dist/browser/completion.mjs.map +1 -0
  131. package/dist/browser/core.d.mts +8 -7
  132. package/dist/browser/core.mjs +1 -1
  133. package/dist/browser/core.mjs.map +1 -1
  134. package/dist/browser/credentials.d.mts +74 -0
  135. package/dist/browser/credentials.mjs +2 -0
  136. package/dist/browser/credentials.mjs.map +1 -0
  137. package/dist/browser/definition.d.mts +3 -2
  138. package/dist/browser/definition.mjs +1 -1
  139. package/dist/browser/dynamic-content.d.mts +13 -0
  140. package/dist/browser/dynamic-content.mjs +2 -0
  141. package/dist/browser/dynamic-content.mjs.map +1 -0
  142. package/dist/browser/dynamic-feature.d.mts +66 -6
  143. package/dist/browser/dynamic-feature.mjs +3 -1
  144. package/dist/browser/dynamic-feature.mjs.map +1 -1
  145. package/dist/browser/dynamic-structure.d.mts +77 -3
  146. package/dist/browser/dynamic-structure.mjs +1 -1
  147. package/dist/browser/dynamic-structure.mjs.map +1 -1
  148. package/dist/browser/env.d.mts +16 -2
  149. package/dist/browser/env.mjs +1 -1
  150. package/dist/browser/frame-index.d.mts +70 -9
  151. package/dist/browser/frame-index.mjs +1 -1
  152. package/dist/browser/models.d.mts +64 -0
  153. package/dist/browser/models.mjs +2 -0
  154. package/dist/browser/models.mjs.map +1 -0
  155. package/dist/browser/namespace.d.mts +1 -1
  156. package/dist/browser/namespace.mjs +1 -1
  157. package/dist/browser/schema.d.mts +10 -0
  158. package/dist/browser/schema.mjs +2 -0
  159. package/dist/browser/schema.mjs.map +1 -0
  160. package/dist/browser/segment.d.mts +13 -0
  161. package/dist/browser/segment.mjs +2 -0
  162. package/dist/browser/segment.mjs.map +1 -0
  163. package/dist/browser/storage.d.mts +13 -7
  164. package/dist/browser/storage.mjs +1 -1
  165. package/dist/browser/vector.d.mts +7 -0
  166. package/dist/browser/vector.mjs +1 -1
  167. package/dist/cli.cjs +5593 -0
  168. package/dist/cli.cjs.map +1 -0
  169. package/dist/node/A-FrameChannel.component--YErPxf4.d.mts +97 -0
  170. package/dist/node/A-FrameChannel.component-BjgqMh1B.d.ts +97 -0
  171. package/dist/node/A-FrameChannel.component-C0O3TaRD.d.ts +679 -0
  172. package/dist/node/A-FrameChannel.component-CgBZYBz0.d.mts +379 -0
  173. package/dist/node/A-FrameChannel.component-CkZserv3.d.ts +97 -0
  174. package/dist/node/A-FrameChannel.component-DMA-3sUB.d.mts +679 -0
  175. package/dist/node/A-FrameChannel.component-DYV8omYR.d.ts +379 -0
  176. package/dist/node/A-FrameChannel.component-DwgYNfFn.d.mts +97 -0
  177. package/dist/node/A-FrameChannel.types-B3_xWKEO.d.mts +151 -0
  178. package/dist/node/A-FrameChannel.types-BGcVXTqa.d.ts +205 -0
  179. package/dist/node/A-FrameChannel.types-Boi8QqDK.d.mts +205 -0
  180. package/dist/node/A-FrameChannel.types-BsE6bNky.d.mts +205 -0
  181. package/dist/node/A-FrameChannel.types-C-gxXl8m.d.ts +151 -0
  182. package/dist/node/A-FrameChannel.types-DD2B11rf.d.ts +205 -0
  183. package/dist/node/A-FrameChannel.types-DYMgRiCF.d.mts +205 -0
  184. package/dist/node/A-FrameChannel.types-DwyZRsOy.d.ts +205 -0
  185. package/dist/node/A-FrameCompletion.entity-Brx11JMp.d.ts +72 -0
  186. package/dist/node/A-FrameCompletion.entity-Dzy9sIa8.d.mts +72 -0
  187. package/dist/node/A-FrameDefinition.entity-BIF0sclD.d.ts +370 -0
  188. package/dist/node/A-FrameDefinition.entity-Bt9ua6cn.d.ts +358 -0
  189. package/dist/node/A-FrameDefinition.entity-C0kzaGJ0.d.ts +143 -0
  190. package/dist/node/A-FrameDefinition.entity-C1aK-gdl.d.mts +370 -0
  191. package/dist/node/A-FrameDefinition.entity-CKPXsarS.d.mts +358 -0
  192. package/dist/node/A-FrameDefinition.entity-yA0GsBoe.d.mts +143 -0
  193. package/dist/node/A-FrameDefinition.types-BA_pLGpo.d.ts +232 -0
  194. package/dist/node/A-FrameDefinition.types-BT02yAhQ.d.mts +232 -0
  195. package/dist/node/A-FrameDynamicContentOperation.context-C_aH1gEn.d.ts +297 -0
  196. package/dist/node/A-FrameDynamicContentOperation.context-CoViNb19.d.mts +297 -0
  197. package/dist/node/A-FrameDynamicContentOperation.context-DRqH2c3o.d.ts +266 -0
  198. package/dist/node/A-FrameDynamicContentOperation.context-Dd7Lb7X2.d.mts +266 -0
  199. package/dist/node/A-FrameDynamicPatch.entity-BRuF1tqs.d.mts +29 -0
  200. package/dist/node/A-FrameDynamicPatch.entity-BRuF1tqs.d.ts +29 -0
  201. package/dist/node/A-FrameDynamicStructure.entity-BVCbolMd.d.ts +210 -0
  202. package/dist/node/A-FrameDynamicStructure.entity-DMvI_EPT.d.mts +210 -0
  203. package/dist/node/A-FrameDynamicStructure.entity-DxkPP9mR.d.mts +235 -0
  204. package/dist/node/A-FrameDynamicStructure.entity-DxkPP9mR.d.ts +235 -0
  205. package/dist/node/A-FrameLogger.component.env-node-DIDBeuiz.d.mts +114 -0
  206. package/dist/node/A-FrameLogger.component.env-node-DIDBeuiz.d.ts +114 -0
  207. package/dist/node/A-FrameNamespace.entity-BDg1FUgo.d.mts +136 -0
  208. package/dist/node/A-FrameNamespace.entity-HDXcLGcS.d.ts +136 -0
  209. package/dist/node/A-FrameSchema.entity-DjYIhsoj.d.mts +141 -0
  210. package/dist/node/A-FrameSchema.entity-DjYIhsoj.d.ts +141 -0
  211. package/dist/node/A-FrameSegment.entity-C0izuOmC.d.ts +161 -0
  212. package/dist/node/A-FrameSegment.entity-CMCgFCWU.d.ts +146 -0
  213. package/dist/node/A-FrameSegment.entity-D1xjjWvG.d.mts +161 -0
  214. package/dist/node/A-FrameSegment.entity-D7Aj39Wh.d.mts +146 -0
  215. package/dist/node/A-FrameStorage.component-BnNKzvpY.d.mts +107 -0
  216. package/dist/node/A-FrameStorage.component-CDztogHV.d.mts +107 -0
  217. package/dist/node/A-FrameStorage.component-CW0YgKDI.d.mts +107 -0
  218. package/dist/node/A-FrameStorage.component-D4UEkIBx.d.mts +107 -0
  219. package/dist/node/A-FrameStorage.component-DV_jwK6r.d.ts +107 -0
  220. package/dist/node/A-FrameStorage.component-Di4EvbtC.d.ts +107 -0
  221. package/dist/node/A-FrameStorage.component-emIH1a1M.d.ts +107 -0
  222. package/dist/node/A-FrameStorage.component-y-JPiIQ4.d.ts +107 -0
  223. package/dist/node/bundle.cjs +66 -21
  224. package/dist/node/bundle.cjs.map +1 -1
  225. package/dist/node/bundle.d.mts +88 -24
  226. package/dist/node/bundle.d.ts +88 -24
  227. package/dist/node/bundle.mjs +65 -20
  228. package/dist/node/bundle.mjs.map +1 -1
  229. package/dist/node/channel.cjs +33 -26
  230. package/dist/node/channel.d.mts +10 -6
  231. package/dist/node/channel.d.ts +10 -6
  232. package/dist/node/channel.mjs +13 -6
  233. package/dist/node/chunk-2HUSP34L.mjs +55 -0
  234. package/dist/node/chunk-2HUSP34L.mjs.map +1 -0
  235. package/dist/node/chunk-2KXGI2E5.cjs +474 -0
  236. package/dist/node/chunk-2KXGI2E5.cjs.map +1 -0
  237. package/dist/node/chunk-2OQMOIR5.mjs +170 -0
  238. package/dist/node/chunk-2OQMOIR5.mjs.map +1 -0
  239. package/dist/node/chunk-2UI7RJ4Q.mjs +207 -0
  240. package/dist/node/chunk-2UI7RJ4Q.mjs.map +1 -0
  241. package/dist/node/chunk-3SLICJ3L.cjs +265 -0
  242. package/dist/node/chunk-3SLICJ3L.cjs.map +1 -0
  243. package/dist/node/chunk-3ZDHQOIU.cjs +92 -0
  244. package/dist/node/chunk-3ZDHQOIU.cjs.map +1 -0
  245. package/dist/node/chunk-5BKCX2RO.mjs +33 -0
  246. package/dist/node/chunk-5BKCX2RO.mjs.map +1 -0
  247. package/dist/node/chunk-5NCGXLP2.mjs +6 -0
  248. package/dist/node/chunk-5NCGXLP2.mjs.map +1 -0
  249. package/dist/node/chunk-5OTXZ7BB.mjs +53 -0
  250. package/dist/node/chunk-5OTXZ7BB.mjs.map +1 -0
  251. package/dist/node/chunk-5PYIATGT.mjs +469 -0
  252. package/dist/node/chunk-5PYIATGT.mjs.map +1 -0
  253. package/dist/node/chunk-64QCZG53.cjs +57 -0
  254. package/dist/node/chunk-64QCZG53.cjs.map +1 -0
  255. package/dist/node/chunk-652OEICJ.cjs +4 -0
  256. package/dist/node/chunk-652OEICJ.cjs.map +1 -0
  257. package/dist/node/chunk-674ZX6XJ.mjs +187 -0
  258. package/dist/node/chunk-674ZX6XJ.mjs.map +1 -0
  259. package/dist/node/chunk-6ID2IXYX.mjs +6 -0
  260. package/dist/node/chunk-6ID2IXYX.mjs.map +1 -0
  261. package/dist/node/chunk-6KAGWGTE.mjs +529 -0
  262. package/dist/node/chunk-6KAGWGTE.mjs.map +1 -0
  263. package/dist/node/chunk-7EM3Q7HA.mjs +655 -0
  264. package/dist/node/chunk-7EM3Q7HA.mjs.map +1 -0
  265. package/dist/node/chunk-7MVVMISA.cjs +293 -0
  266. package/dist/node/chunk-7MVVMISA.cjs.map +1 -0
  267. package/dist/node/chunk-7NSLGCAZ.mjs +1395 -0
  268. package/dist/node/chunk-7NSLGCAZ.mjs.map +1 -0
  269. package/dist/node/chunk-7OLLATCC.mjs +1289 -0
  270. package/dist/node/chunk-7OLLATCC.mjs.map +1 -0
  271. package/dist/node/chunk-7SEZMRLI.cjs +183 -0
  272. package/dist/node/chunk-7SEZMRLI.cjs.map +1 -0
  273. package/dist/node/chunk-A4CVDMSV.mjs +608 -0
  274. package/dist/node/chunk-A4CVDMSV.mjs.map +1 -0
  275. package/dist/node/chunk-A7CJIUYY.cjs +4 -0
  276. package/dist/node/chunk-A7CJIUYY.cjs.map +1 -0
  277. package/dist/node/chunk-ALFFUJ2J.mjs +163 -0
  278. package/dist/node/chunk-ALFFUJ2J.mjs.map +1 -0
  279. package/dist/node/chunk-AMMQ76RJ.mjs +179 -0
  280. package/dist/node/chunk-AMMQ76RJ.mjs.map +1 -0
  281. package/dist/node/chunk-AUKWKGVA.cjs +688 -0
  282. package/dist/node/chunk-AUKWKGVA.cjs.map +1 -0
  283. package/dist/node/chunk-AY6UMDWD.cjs +270 -0
  284. package/dist/node/chunk-AY6UMDWD.cjs.map +1 -0
  285. package/dist/node/chunk-B7ZDJXD3.cjs +1 -1
  286. package/dist/node/chunk-B7ZDJXD3.cjs.map +1 -1
  287. package/dist/node/chunk-BBYOL3LM.cjs +1308 -0
  288. package/dist/node/chunk-BBYOL3LM.cjs.map +1 -0
  289. package/dist/node/chunk-BINGAHFW.cjs +1308 -0
  290. package/dist/node/chunk-BINGAHFW.cjs.map +1 -0
  291. package/dist/node/chunk-BSBY37MG.cjs +55 -0
  292. package/dist/node/chunk-BSBY37MG.cjs.map +1 -0
  293. package/dist/node/chunk-BWX7HFTH.cjs +209 -0
  294. package/dist/node/chunk-BWX7HFTH.cjs.map +1 -0
  295. package/dist/node/chunk-C37B34MH.cjs +188 -0
  296. package/dist/node/chunk-C37B34MH.cjs.map +1 -0
  297. package/dist/node/chunk-C6BBKHQG.cjs +250 -0
  298. package/dist/node/chunk-C6BBKHQG.cjs.map +1 -0
  299. package/dist/node/chunk-CLCAS67N.cjs +8 -0
  300. package/dist/node/chunk-CLCAS67N.cjs.map +1 -0
  301. package/dist/node/chunk-CNU3CRTR.mjs +43 -0
  302. package/dist/node/chunk-CNU3CRTR.mjs.map +1 -0
  303. package/dist/node/chunk-CV5FPKU6.mjs +6 -0
  304. package/dist/node/chunk-CV5FPKU6.mjs.map +1 -0
  305. package/dist/node/chunk-CZYOAFIR.mjs +129 -0
  306. package/dist/node/chunk-CZYOAFIR.mjs.map +1 -0
  307. package/dist/node/chunk-D2HTYEJZ.cjs +209 -0
  308. package/dist/node/chunk-D2HTYEJZ.cjs.map +1 -0
  309. package/dist/node/chunk-EMLZZPOT.cjs +1446 -0
  310. package/dist/node/chunk-EMLZZPOT.cjs.map +1 -0
  311. package/dist/node/chunk-EOIXXXBV.cjs +55 -0
  312. package/dist/node/chunk-EOIXXXBV.cjs.map +1 -0
  313. package/dist/node/chunk-F46TSY2K.cjs +541 -0
  314. package/dist/node/chunk-F46TSY2K.cjs.map +1 -0
  315. package/dist/node/chunk-F4UCOZW5.mjs +1 -1
  316. package/dist/node/chunk-F4UCOZW5.mjs.map +1 -1
  317. package/dist/node/chunk-F64CK4NI.mjs +53 -0
  318. package/dist/node/chunk-F64CK4NI.mjs.map +1 -0
  319. package/dist/node/chunk-FAV62EUG.cjs +35 -0
  320. package/dist/node/chunk-FAV62EUG.cjs.map +1 -0
  321. package/dist/node/chunk-GHSPKZUN.mjs +529 -0
  322. package/dist/node/chunk-GHSPKZUN.mjs.map +1 -0
  323. package/dist/node/chunk-GRNVK7DW.mjs +97 -0
  324. package/dist/node/chunk-GRNVK7DW.mjs.map +1 -0
  325. package/dist/node/chunk-GRR6NNWY.cjs +688 -0
  326. package/dist/node/chunk-GRR6NNWY.cjs.map +1 -0
  327. package/dist/node/chunk-H5VGRPD5.cjs +8 -0
  328. package/dist/node/chunk-H5VGRPD5.cjs.map +1 -0
  329. package/dist/node/chunk-HAMDDCPS.cjs +8 -0
  330. package/dist/node/chunk-HAMDDCPS.cjs.map +1 -0
  331. package/dist/node/chunk-HAORARSB.cjs +75 -0
  332. package/dist/node/chunk-HAORARSB.cjs.map +1 -0
  333. package/dist/node/chunk-HELNAM5Y.cjs +8 -0
  334. package/dist/node/chunk-HELNAM5Y.cjs.map +1 -0
  335. package/dist/node/chunk-HET6L5PD.mjs +530 -0
  336. package/dist/node/chunk-HET6L5PD.mjs.map +1 -0
  337. package/dist/node/chunk-HI5SEX53.mjs +264 -0
  338. package/dist/node/chunk-HI5SEX53.mjs.map +1 -0
  339. package/dist/node/chunk-HZGFXE4Q.mjs +6 -0
  340. package/dist/node/chunk-HZGFXE4Q.mjs.map +1 -0
  341. package/dist/node/chunk-IAL2NK2V.mjs +73 -0
  342. package/dist/node/chunk-IAL2NK2V.mjs.map +1 -0
  343. package/dist/node/chunk-IHELFDCW.mjs +327 -0
  344. package/dist/node/chunk-IHELFDCW.mjs.map +1 -0
  345. package/dist/node/chunk-ILD6OSYW.mjs +966 -0
  346. package/dist/node/chunk-ILD6OSYW.mjs.map +1 -0
  347. package/dist/node/chunk-IP6DFAO7.mjs +264 -0
  348. package/dist/node/chunk-IP6DFAO7.mjs.map +1 -0
  349. package/dist/node/chunk-IYEDO7OQ.cjs +276 -0
  350. package/dist/node/chunk-IYEDO7OQ.cjs.map +1 -0
  351. package/dist/node/chunk-JFPGFPQD.mjs +1413 -0
  352. package/dist/node/chunk-JFPGFPQD.mjs.map +1 -0
  353. package/dist/node/chunk-JHZGTVYF.cjs +999 -0
  354. package/dist/node/chunk-JHZGTVYF.cjs.map +1 -0
  355. package/dist/node/chunk-JN3UJBUH.mjs +608 -0
  356. package/dist/node/chunk-JN3UJBUH.mjs.map +1 -0
  357. package/dist/node/chunk-JNPDXCCN.mjs +530 -0
  358. package/dist/node/chunk-JNPDXCCN.mjs.map +1 -0
  359. package/dist/node/chunk-JQBYDEMW.mjs +1 -1
  360. package/dist/node/chunk-JQBYDEMW.mjs.map +1 -1
  361. package/dist/node/chunk-JQJ7N4NL.cjs +267 -0
  362. package/dist/node/chunk-JQJ7N4NL.cjs.map +1 -0
  363. package/dist/node/chunk-K4AJBPPY.cjs +174 -0
  364. package/dist/node/chunk-K4AJBPPY.cjs.map +1 -0
  365. package/dist/node/chunk-K7SXPJPK.cjs +131 -0
  366. package/dist/node/chunk-K7SXPJPK.cjs.map +1 -0
  367. package/dist/node/chunk-KFW4GE7H.mjs +1289 -0
  368. package/dist/node/chunk-KFW4GE7H.mjs.map +1 -0
  369. package/dist/node/chunk-KKL2DF2D.cjs +518 -0
  370. package/dist/node/chunk-KKL2DF2D.cjs.map +1 -0
  371. package/dist/node/chunk-KKMKQGTR.cjs +620 -0
  372. package/dist/node/chunk-KKMKQGTR.cjs.map +1 -0
  373. package/dist/node/chunk-KNTO7FCZ.mjs +207 -0
  374. package/dist/node/chunk-KNTO7FCZ.mjs.map +1 -0
  375. package/dist/node/chunk-KTKVW3PH.mjs +286 -0
  376. package/dist/node/chunk-KTKVW3PH.mjs.map +1 -0
  377. package/dist/node/chunk-KZPSF32W.mjs +33 -0
  378. package/dist/node/chunk-KZPSF32W.mjs.map +1 -0
  379. package/dist/node/chunk-LWKFCMA7.mjs +129 -0
  380. package/dist/node/chunk-LWKFCMA7.mjs.map +1 -0
  381. package/dist/node/chunk-M2ZSE6YJ.mjs +512 -0
  382. package/dist/node/chunk-M2ZSE6YJ.mjs.map +1 -0
  383. package/dist/node/chunk-M6DJYGDO.cjs +167 -0
  384. package/dist/node/chunk-M6DJYGDO.cjs.map +1 -0
  385. package/dist/node/chunk-MAHKDTOQ.mjs +3 -0
  386. package/dist/node/chunk-MAHKDTOQ.mjs.map +1 -0
  387. package/dist/node/chunk-MM2R2OM6.cjs +541 -0
  388. package/dist/node/chunk-MM2R2OM6.cjs.map +1 -0
  389. package/dist/node/chunk-MSOD5UQH.cjs +45 -0
  390. package/dist/node/chunk-MSOD5UQH.cjs.map +1 -0
  391. package/dist/node/chunk-MVAWR76Q.cjs +276 -0
  392. package/dist/node/chunk-MVAWR76Q.cjs.map +1 -0
  393. package/dist/node/chunk-MXUO7OR5.cjs +97 -0
  394. package/dist/node/chunk-MXUO7OR5.cjs.map +1 -0
  395. package/dist/node/chunk-N4THTV6P.cjs +131 -0
  396. package/dist/node/chunk-N4THTV6P.cjs.map +1 -0
  397. package/dist/node/chunk-NIXKAQVP.cjs +1 -1
  398. package/dist/node/chunk-NIXKAQVP.cjs.map +1 -1
  399. package/dist/node/chunk-NUPXUUPM.cjs +1428 -0
  400. package/dist/node/chunk-NUPXUUPM.cjs.map +1 -0
  401. package/dist/node/chunk-NWOUVAIS.cjs +45 -0
  402. package/dist/node/chunk-NWOUVAIS.cjs.map +1 -0
  403. package/dist/node/chunk-OK7I5OQ3.mjs +89 -0
  404. package/dist/node/chunk-OK7I5OQ3.mjs.map +1 -0
  405. package/dist/node/chunk-OMGYXCFM.mjs +248 -0
  406. package/dist/node/chunk-OMGYXCFM.mjs.map +1 -0
  407. package/dist/node/chunk-OYC6L5NX.mjs +6 -0
  408. package/dist/node/chunk-OYC6L5NX.mjs.map +1 -0
  409. package/dist/node/chunk-OYZAQMKD.mjs +263 -0
  410. package/dist/node/chunk-OYZAQMKD.mjs.map +1 -0
  411. package/dist/node/chunk-P2LULMNL.cjs +189 -0
  412. package/dist/node/chunk-P2LULMNL.cjs.map +1 -0
  413. package/dist/node/chunk-PABEFHCO.mjs +63 -0
  414. package/dist/node/chunk-PABEFHCO.mjs.map +1 -0
  415. package/dist/node/chunk-Q5NYJQP2.cjs +8 -0
  416. package/dist/node/chunk-Q5NYJQP2.cjs.map +1 -0
  417. package/dist/node/chunk-QCEWWJ3N.cjs +65 -0
  418. package/dist/node/chunk-QCEWWJ3N.cjs.map +1 -0
  419. package/dist/node/chunk-QW4AZ3Z2.cjs +542 -0
  420. package/dist/node/chunk-QW4AZ3Z2.cjs.map +1 -0
  421. package/dist/node/chunk-R2H234YO.cjs +8 -0
  422. package/dist/node/chunk-R2H234YO.cjs.map +1 -0
  423. package/dist/node/chunk-RK5WSZ5J.mjs +43 -0
  424. package/dist/node/chunk-RK5WSZ5J.mjs.map +1 -0
  425. package/dist/node/chunk-RPHYBPXT.mjs +30 -0
  426. package/dist/node/chunk-RPHYBPXT.mjs.map +1 -0
  427. package/dist/node/chunk-RVXASBMQ.mjs +273 -0
  428. package/dist/node/chunk-RVXASBMQ.mjs.map +1 -0
  429. package/dist/node/chunk-RVZTZD32.mjs +187 -0
  430. package/dist/node/chunk-RVZTZD32.mjs.map +1 -0
  431. package/dist/node/chunk-RWLKISZQ.mjs +273 -0
  432. package/dist/node/chunk-RWLKISZQ.mjs.map +1 -0
  433. package/dist/node/chunk-SDKIJDMH.mjs +655 -0
  434. package/dist/node/chunk-SDKIJDMH.mjs.map +1 -0
  435. package/dist/node/chunk-SESXQJDD.cjs +999 -0
  436. package/dist/node/chunk-SESXQJDD.cjs.map +1 -0
  437. package/dist/node/chunk-SKIEPTFS.mjs +6 -0
  438. package/dist/node/chunk-SKIEPTFS.mjs.map +1 -0
  439. package/dist/node/chunk-SL7FT5R5.mjs +94 -0
  440. package/dist/node/chunk-SL7FT5R5.mjs.map +1 -0
  441. package/dist/node/chunk-SXHQW74T.mjs +43 -0
  442. package/dist/node/chunk-SXHQW74T.mjs.map +1 -0
  443. package/dist/node/chunk-TEJKDVNT.cjs +620 -0
  444. package/dist/node/chunk-TEJKDVNT.cjs.map +1 -0
  445. package/dist/node/chunk-TQS5WYND.cjs +352 -0
  446. package/dist/node/chunk-TQS5WYND.cjs.map +1 -0
  447. package/dist/node/chunk-UCAWV2IG.mjs +184 -0
  448. package/dist/node/chunk-UCAWV2IG.mjs.map +1 -0
  449. package/dist/node/chunk-UDUJDEAO.cjs +189 -0
  450. package/dist/node/chunk-UDUJDEAO.cjs.map +1 -0
  451. package/dist/node/chunk-VMJDL4SS.cjs +542 -0
  452. package/dist/node/chunk-VMJDL4SS.cjs.map +1 -0
  453. package/dist/node/chunk-VNOZTB3B.cjs +8 -0
  454. package/dist/node/chunk-VNOZTB3B.cjs.map +1 -0
  455. package/dist/node/chunk-VPMBZGYR.mjs +327 -0
  456. package/dist/node/chunk-VPMBZGYR.mjs.map +1 -0
  457. package/dist/node/chunk-WEPNBKOA.mjs +6 -0
  458. package/dist/node/chunk-WEPNBKOA.mjs.map +1 -0
  459. package/dist/node/chunk-WTBRJXFG.cjs +100 -0
  460. package/dist/node/chunk-WTBRJXFG.cjs.map +1 -0
  461. package/dist/node/chunk-WXCQCHAX.mjs +3 -0
  462. package/dist/node/chunk-WXCQCHAX.mjs.map +1 -0
  463. package/dist/node/chunk-X3TRPYGV.cjs +352 -0
  464. package/dist/node/chunk-X3TRPYGV.cjs.map +1 -0
  465. package/dist/node/chunk-XFUF7SDO.cjs +35 -0
  466. package/dist/node/chunk-XFUF7SDO.cjs.map +1 -0
  467. package/dist/node/chunk-XP2EPEBM.mjs +966 -0
  468. package/dist/node/chunk-XP2EPEBM.mjs.map +1 -0
  469. package/dist/node/chunk-XPIJ6BKP.cjs +45 -0
  470. package/dist/node/chunk-XPIJ6BKP.cjs.map +1 -0
  471. package/dist/node/chunk-YRVBMP7I.cjs +542 -0
  472. package/dist/node/chunk-YRVBMP7I.cjs.map +1 -0
  473. package/dist/node/chunk-ZIHSN5EE.mjs +530 -0
  474. package/dist/node/chunk-ZIHSN5EE.mjs.map +1 -0
  475. package/dist/node/chunk-ZNQMUU7I.cjs +32 -0
  476. package/dist/node/chunk-ZNQMUU7I.cjs.map +1 -0
  477. package/dist/node/completion.cjs +23 -0
  478. package/dist/node/completion.cjs.map +1 -0
  479. package/dist/node/completion.d.mts +10 -0
  480. package/dist/node/completion.d.ts +10 -0
  481. package/dist/node/completion.mjs +6 -0
  482. package/dist/node/completion.mjs.map +1 -0
  483. package/dist/node/core.cjs +69 -42
  484. package/dist/node/core.cjs.map +1 -1
  485. package/dist/node/core.d.mts +14 -9
  486. package/dist/node/core.d.ts +14 -9
  487. package/dist/node/core.mjs +60 -33
  488. package/dist/node/core.mjs.map +1 -1
  489. package/dist/node/credentials.cjs +17 -0
  490. package/dist/node/credentials.cjs.map +1 -0
  491. package/dist/node/credentials.d.mts +74 -0
  492. package/dist/node/credentials.d.ts +74 -0
  493. package/dist/node/credentials.mjs +4 -0
  494. package/dist/node/credentials.mjs.map +1 -0
  495. package/dist/node/definition.cjs +6 -4
  496. package/dist/node/definition.d.mts +3 -2
  497. package/dist/node/definition.d.ts +3 -2
  498. package/dist/node/definition.mjs +4 -2
  499. package/dist/node/dynamic-content.cjs +30 -0
  500. package/dist/node/dynamic-content.cjs.map +1 -0
  501. package/dist/node/dynamic-content.d.mts +13 -0
  502. package/dist/node/dynamic-content.d.ts +13 -0
  503. package/dist/node/dynamic-content.mjs +9 -0
  504. package/dist/node/dynamic-content.mjs.map +1 -0
  505. package/dist/node/dynamic-feature.cjs +41 -7
  506. package/dist/node/dynamic-feature.cjs.map +1 -1
  507. package/dist/node/dynamic-feature.d.mts +66 -6
  508. package/dist/node/dynamic-feature.d.ts +66 -6
  509. package/dist/node/dynamic-feature.mjs +16 -9
  510. package/dist/node/dynamic-feature.mjs.map +1 -1
  511. package/dist/node/dynamic-structure.cjs +45 -136
  512. package/dist/node/dynamic-structure.cjs.map +1 -1
  513. package/dist/node/dynamic-structure.d.mts +77 -3
  514. package/dist/node/dynamic-structure.d.ts +77 -3
  515. package/dist/node/dynamic-structure.mjs +16 -135
  516. package/dist/node/dynamic-structure.mjs.map +1 -1
  517. package/dist/node/env.cjs +3 -3
  518. package/dist/node/env.d.mts +26 -0
  519. package/dist/node/env.d.ts +26 -0
  520. package/dist/node/env.mjs +2 -2
  521. package/dist/node/frame-index.cjs +7 -4
  522. package/dist/node/frame-index.d.mts +70 -9
  523. package/dist/node/frame-index.d.ts +70 -9
  524. package/dist/node/frame-index.mjs +6 -3
  525. package/dist/node/logger.d.mts +4 -113
  526. package/dist/node/logger.d.ts +4 -113
  527. package/dist/node/models.cjs +14 -0
  528. package/dist/node/models.cjs.map +1 -0
  529. package/dist/node/models.d.mts +64 -0
  530. package/dist/node/models.d.ts +64 -0
  531. package/dist/node/models.mjs +5 -0
  532. package/dist/node/models.mjs.map +1 -0
  533. package/dist/node/namespace.cjs +7 -5
  534. package/dist/node/namespace.d.mts +1 -1
  535. package/dist/node/namespace.d.ts +1 -1
  536. package/dist/node/namespace.mjs +4 -2
  537. package/dist/node/schema.cjs +22 -0
  538. package/dist/node/schema.cjs.map +1 -0
  539. package/dist/node/schema.d.mts +10 -0
  540. package/dist/node/schema.d.ts +10 -0
  541. package/dist/node/schema.mjs +5 -0
  542. package/dist/node/schema.mjs.map +1 -0
  543. package/dist/node/segment.cjs +25 -0
  544. package/dist/node/segment.cjs.map +1 -0
  545. package/dist/node/segment.d.mts +13 -0
  546. package/dist/node/segment.d.ts +13 -0
  547. package/dist/node/segment.mjs +8 -0
  548. package/dist/node/segment.mjs.map +1 -0
  549. package/dist/node/storage.cjs +17 -14
  550. package/dist/node/storage.d.mts +18 -6
  551. package/dist/node/storage.d.ts +18 -6
  552. package/dist/node/storage.mjs +11 -8
  553. package/dist/node/vector.cjs +2 -2
  554. package/dist/node/vector.d.mts +7 -0
  555. package/dist/node/vector.d.ts +7 -0
  556. package/dist/node/vector.mjs +1 -1
  557. package/examples/article/main.ts +358 -0
  558. package/examples/components.ts +660 -0
  559. package/examples/feature/file-system.components.ts +211 -0
  560. package/examples/feature/main.ts +374 -0
  561. package/examples/interaction/main.ts +426 -0
  562. package/examples/logger.ts +126 -0
  563. package/examples/structure/main.ts +195 -0
  564. package/examples/structure/renderer.ts +296 -0
  565. package/examples/structure/server-app.components.ts +387 -0
  566. package/jest.config.browser.ts +9 -0
  567. package/jest.config.examples.ts +49 -0
  568. package/jest.config.integration.ts +38 -0
  569. package/jest.config.ts +56 -27
  570. package/jest.config.unit.ts +38 -0
  571. package/package.json +75 -7
  572. package/src/index.ts +13 -0
  573. package/src/lib/A-Frame/A-Frame.component.env-browser.ts +19 -6
  574. package/src/lib/A-Frame/A-Frame.component.env-node.ts +48 -19
  575. package/src/lib/A-Frame/A-Frame.context.ts +9 -8
  576. package/src/lib/A-Frame/decorators/A-FrameDefine.decorator.ts +4 -4
  577. package/src/lib/A-FrameBundle/A-FrameBundle.builder.env-node.ts +95 -25
  578. package/src/lib/A-FrameBundle/A-FrameBundle.constants.ts +1 -1
  579. package/src/lib/A-FrameBundle/A-FrameBundle.types.ts +54 -13
  580. package/src/lib/A-FrameBundle/index.browser.ts +1 -1
  581. package/src/lib/A-FrameBundle/index.ts +1 -1
  582. package/src/lib/A-FrameCLI/A-FrameCLI.container.ts +18 -7
  583. package/src/lib/A-FrameChannel/A-FrameChannel.component.env-browser.ts +0 -2
  584. package/src/lib/A-FrameChannel/A-FrameChannel.component.env-node.ts +14 -15
  585. package/src/lib/A-FrameChannel/A-FrameChannel.component.ts +542 -7
  586. package/src/lib/A-FrameChannel/A-FrameChannel.constants.ts +2 -0
  587. package/src/lib/A-FrameChannel/A-FrameChannel.types.ts +65 -1
  588. package/src/lib/A-FrameChannel/A-FrameChannelDsgStream.entity.ts +112 -0
  589. package/src/lib/A-FrameChannel/A-FrameChannelStream.entity.ts +1 -0
  590. package/src/lib/A-FrameChannel/index.browser.ts +5 -0
  591. package/src/lib/A-FrameCompletion/A-FrameCompletion.constants.ts +3 -0
  592. package/src/lib/A-FrameCompletion/A-FrameCompletion.entity.ts +128 -0
  593. package/src/lib/A-FrameCompletion/A-FrameCompletion.types.ts +40 -0
  594. package/src/lib/A-FrameCompletion/index.ts +3 -0
  595. package/src/lib/A-FrameCredentials/A-FrameCredentials.constants.ts +5 -0
  596. package/src/lib/A-FrameCredentials/A-FrameCredentials.entity.ts +120 -0
  597. package/src/lib/A-FrameCredentials/A-FrameCredentials.types.ts +39 -0
  598. package/src/lib/A-FrameCredentials/index.ts +3 -0
  599. package/src/lib/A-FrameDefinition/A-FrameDefinition.entity.ts +23 -1
  600. package/src/lib/A-FrameDefinition/A-FrameDefinition.types.ts +34 -1
  601. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.constants.ts +5 -0
  602. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.entity.ts +348 -0
  603. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.error.ts +10 -0
  604. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.types.ts +116 -0
  605. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContentIndex.context.ts +288 -0
  606. package/src/lib/A-FrameDynamicContent/A-FrameDynamicContentOperation.context.ts +26 -0
  607. package/src/lib/A-FrameDynamicContent/index.ts +5 -0
  608. package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.constants.ts +6 -0
  609. package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.entity.ts +253 -4
  610. package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.error.ts +11 -0
  611. package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.types.ts +188 -4
  612. package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeatureOperation.context.ts +33 -0
  613. package/src/lib/A-FrameDynamicFeature/A-FrameMethodMapIndex.context.ts +99 -0
  614. package/src/lib/A-FrameDynamicFeature/A-FrameMethodMapper.component.ts +182 -0
  615. package/src/lib/A-FrameDynamicFeature/index.ts +6 -1
  616. package/src/lib/A-FrameDynamicPatch/index.ts +2 -0
  617. package/src/lib/A-FrameDynamicStructure/A-FrameComponentMapIndex.context.ts +99 -0
  618. package/src/lib/A-FrameDynamicStructure/A-FrameComponentMapper.component.ts +320 -0
  619. package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.constants.ts +2 -1
  620. package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.entity.ts +240 -128
  621. package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.types.ts +183 -87
  622. package/src/lib/A-FrameDynamicStructure/index.ts +3 -0
  623. package/src/lib/A-FrameEnv/A-FrameEnv.fragment.env-browser.ts +5 -1
  624. package/src/lib/A-FrameEnv/A-FrameEnv.fragment.env-node.ts +23 -1
  625. package/src/lib/A-FrameEnv/A-FrameEnv.types.ts +12 -0
  626. package/src/lib/A-FrameIndex/A-FrameIndex.context.ts +63 -13
  627. package/src/lib/A-FrameIndex/A-FrameIndex.types.ts +53 -0
  628. package/src/lib/A-FrameModels/A-FrameModels.constants.ts +75 -0
  629. package/src/lib/A-FrameModels/index.ts +1 -0
  630. package/src/lib/A-FrameNamespace/A-FrameNamespace.entity.ts +10 -3
  631. package/src/lib/A-FrameNamespace/A-FrameNamespace.types.ts +5 -0
  632. package/src/lib/A-FrameSchema/A-FrameSchema.constants.ts +4 -0
  633. package/src/lib/A-FrameSchema/A-FrameSchema.entity.ts +154 -0
  634. package/src/lib/A-FrameSchema/A-FrameSchema.types.ts +88 -0
  635. package/src/lib/A-FrameSchema/index.ts +3 -0
  636. package/src/lib/A-FrameSegment/A-FrameSegment.constants.ts +12 -0
  637. package/src/lib/A-FrameSegment/A-FrameSegment.entity.ts +221 -0
  638. package/src/lib/A-FrameSegment/A-FrameSegment.types.ts +91 -0
  639. package/src/lib/A-FrameSegment/index.ts +3 -0
  640. package/src/lib/A-FrameStorage/A-FrameStorage.codec.ts +10 -4
  641. package/src/lib/A-FrameStorage/browser/A-FrameBrowserStorage.component.ts +21 -0
  642. package/src/lib/A-FrameStorage/browser/A-FrameBrowserStorageBlobs.context.ts +39 -21
  643. package/src/lib/A-FrameStorage/node/A-FrameNodeStorage.component.ts +124 -42
  644. package/src/lib/A-FrameVector/A-FrameVector.entity.ts +24 -0
  645. package/tests/A-Frame.browser.test.ts +167 -57
  646. package/tests/A-FrameDynamicContent.browser.test.ts +74 -0
  647. package/tests/integration/A-Frame.integration.test.ts +272 -0
  648. package/tests/integration/A-FrameCompletion.integration.test.ts +88 -0
  649. package/tests/integration/A-FrameContentMapping.integration.test.ts +261 -0
  650. package/tests/integration/A-FrameDefinition.integration.test.ts +154 -0
  651. package/tests/integration/A-FrameDynamicContent.integration.test.ts +126 -0
  652. package/tests/integration/A-FrameDynamicFeature.integration.test.ts +337 -0
  653. package/tests/integration/A-FrameDynamicStructure.integration.test.ts +264 -0
  654. package/tests/integration/A-FrameNamespace.integration.test.ts +109 -0
  655. package/tests/integration/A-FrameSchema.integration.test.ts +74 -0
  656. package/tests/integration/A-FrameSegment.integration.test.ts +102 -0
  657. package/tests/integration/A-FrameStorage.integration.test.ts +598 -0
  658. package/tests/jest.setup.browser.ts +1 -1
  659. package/tests/jest.setup.ts +4 -0
  660. package/tests/jest.setup.unit.ts +30 -0
  661. package/tests/unit/A-FrameChannel.unit.test.ts +124 -0
  662. package/tests/unit/A-FrameCompletion.unit.test.ts +25 -0
  663. package/tests/unit/A-FrameDefinition.unit.test.ts +36 -0
  664. package/tests/unit/A-FrameDynamicContent.unit.test.ts +28 -0
  665. package/tests/unit/A-FrameNamespace.unit.test.ts +35 -0
  666. package/tests/unit/A-FrameSchema.unit.test.ts +31 -0
  667. package/tests/unit/A-FrameSegment.unit.test.ts +20 -0
  668. package/tests/unit/mocks/MockA_FrameChannel.ts +112 -0
  669. package/tsconfig.browser.json +2 -0
  670. package/tsconfig.json +6 -0
  671. package/tsup.config.ts +52 -0
  672. package/tests/A-Frame.test.ts +0 -96
@@ -0,0 +1,598 @@
1
+ /**
2
+ * A-FrameStorage — storage correctness + stale-cache invalidation tests
3
+ *
4
+ * These tests verify that:
5
+ * 1. On the first run `concept.load()` embeds definitions by calling the
6
+ * server and saves them to the local .aframe storage.
7
+ * 2. On subsequent runs with identical definitions the framework reads from
8
+ * the local storage and makes NO server calls at all.
9
+ * 3. When a component's description (or source) changes, the framework
10
+ * detects the hash mismatch, discards the cached embedding, and
11
+ * re-embeds only the affected definition.
12
+ * 4. When nothing changes, the cached embedding is restored verbatim —
13
+ * no embedding API call is made.
14
+ *
15
+ * Simulation strategy
16
+ * -------------------
17
+ * TypeScript decorators run at module-load time, so we cannot change a
18
+ * decorator's description mid-test. Instead, after phase 1 we call
19
+ * `A_FrameIndex.addDefinition()` with the same `name` and `dependency`
20
+ * values but a different `description`. Because `definitions.set(def.id, …)`
21
+ * uses the ASEID id as a key, this atomically replaces the v1 entry with v2
22
+ * — identical to what happens in production when a developer edits the
23
+ * description string and restarts the application.
24
+ */
25
+
26
+ import { A_Component, A_Concept, A_Container, A_Context, A_Error } from '@adaas/a-concept';
27
+ import { A_Frame, A_FrameTargetType } from '@adaas/a-frame/core';
28
+ import { A_FrameIndex } from '@adaas/a-frame/index';
29
+ import { A_FrameDefinition } from '@adaas/a-frame/definition';
30
+ import { A_FrameNamespace } from '@adaas/a-frame/namespace';
31
+ import { A_FrameChannel } from '@adaas/a-frame/channel';
32
+ import { config } from 'dotenv';
33
+ import * as fs from 'fs';
34
+ import * as path from 'path';
35
+ import * as os from 'os';
36
+
37
+ config();
38
+
39
+ // Each phase involves a full network round-trip for embedding.
40
+ jest.setTimeout(120_000);
41
+
42
+
43
+ // ─── Test-only component classes ──────────────────────────────────────────────
44
+ //
45
+ // StaleTestComp is the component whose description will "change" between phases.
46
+ // StableTestComp never changes — it verifies the framework does NOT re-embed
47
+ // a definition whose hash is still correct.
48
+
49
+ @A_Frame.Define({
50
+ description: 'StaleTestComp v1 — original description before the developer made a change',
51
+ })
52
+ class StaleTestComp extends A_Component { }
53
+
54
+ @A_Frame.Define({
55
+ description: 'StableTestComp — this description is intentionally never modified',
56
+ })
57
+ class StableTestComp extends A_Component { }
58
+
59
+
60
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
61
+
62
+ async function buildMinimalConcept() {
63
+ const concept = new A_Concept({
64
+ name: 'StaleTestConcept',
65
+ components: [A_Frame],
66
+ containers: [
67
+ new A_Container({
68
+ name: 'StaleTestContainer',
69
+ components: [StaleTestComp, StableTestComp],
70
+ }),
71
+ ],
72
+ });
73
+ await concept.load();
74
+ return concept;
75
+ }
76
+
77
+
78
+ // ─── Suite ────────────────────────────────────────────────────────────────────
79
+
80
+ describe('A-Frame Storage Tests', () => {
81
+
82
+ // ── Integration: stale cache invalidation ─────────────────────────────
83
+ //
84
+ // Verifies that:
85
+ // 1. concept.load() embeds definitions on the first run and saves them.
86
+ // 2. A changed description causes only the affected definition to be
87
+ // re-embedded (hash mismatch detected by the storage layer).
88
+ // 3. Unchanged definitions are restored verbatim from the cache
89
+ // (bit-for-bit equal vectors, no embedding API call made).
90
+
91
+ describe('Integration — stale cache invalidation', () => {
92
+
93
+ let tempStorageDir: string;
94
+
95
+ beforeAll(() => {
96
+ // Enable sync so concept.load() runs the embed-and-save pipeline
97
+ process.env.A_FRAME_SYNC = 'true';
98
+
99
+ // Dedicated temp dir — keeps this suite completely isolated from the
100
+ // main .aframe cache used by other tests
101
+ tempStorageDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aframe-stale-'));
102
+ process.env.A_FRAME_STORAGE_DIR = tempStorageDir;
103
+ });
104
+
105
+ afterAll(() => {
106
+ process.env.A_FRAME_SYNC = 'false';
107
+ delete process.env.A_FRAME_STORAGE_DIR;
108
+
109
+ // Remove StaleTestComp and StableTestComp from the global singleton
110
+ // index so they don't interfere with other test suites in watch mode
111
+ const stale = A_FrameIndex.getDefinition('StaleTestComp');
112
+ if (stale) A_FrameIndex.removeDefinition(stale);
113
+ const stable = A_FrameIndex.getDefinition('StableTestComp');
114
+ if (stable) A_FrameIndex.removeDefinition(stable);
115
+
116
+ try { fs.rmSync(tempStorageDir, { recursive: true, force: true }); } catch { /* no-op */ }
117
+ });
118
+
119
+
120
+ // ── Test 1: stale-hash scenario ──────────────────────────────────────────
121
+
122
+ it('re-embeds when description changes; serves unchanged definitions from cache', async () => {
123
+ try {
124
+
125
+ // ── Phase 1 ─ first startup: both definitions are embedded and saved ─
126
+ // A_Context.reset() is called by jest.setup.ts beforeEach,
127
+ // so we start with a clean root scope here.
128
+ let concept = await buildMinimalConcept();
129
+ let idx = concept.scope.resolve(A_FrameIndex)!;
130
+
131
+ const def1Stale = idx.getDefinition('StaleTestComp')!;
132
+ const def1Stable = idx.getDefinition('StableTestComp')!;
133
+
134
+ expect(def1Stale).toBeDefined();
135
+ expect(def1Stable).toBeDefined();
136
+ expect(def1Stale.isEmbed).toBe(true);
137
+ expect(def1Stable.isEmbed).toBe(true);
138
+
139
+ const hashV1 = def1Stale.hash;
140
+ const staleVecV1 = Array.from(def1Stale.vector!.values);
141
+ const stableVecV1 = Array.from(def1Stable.vector!.values);
142
+
143
+ console.log(`\n [phase 1] StaleTestComp hash=${hashV1} dims=${def1Stale.vector!.dimensions}`);
144
+ console.log(` [phase 1] StableTestComp hash=${def1Stable.hash} dims=${def1Stable.vector!.dimensions}`);
145
+
146
+
147
+ // ── Phase 2 ─ description changes → cache miss → re-embed ──────────
148
+ //
149
+ // Replace the v1 definition in the global index with a v2 that has
150
+ // an updated description. Uses the SAME name + dependency so the
151
+ // computed ASEID id is identical; only the hash differs (because the
152
+ // hash includes the description string).
153
+ A_Context.reset();
154
+
155
+ // Must deregister v1 from the index scope before registering v2
156
+ // (same ASEID id → scope.register would throw "already registered")
157
+ const existingV1 = A_FrameIndex.getDefinition('StaleTestComp');
158
+ if (existingV1) A_FrameIndex.removeDefinition(existingV1);
159
+
160
+ A_FrameIndex.addDefinition(new A_FrameDefinition({
161
+ name: 'StaleTestComp',
162
+ dependency: 'StaleTestComp',
163
+ description: 'StaleTestComp v2 — description updated to reflect new behaviour',
164
+ source: 'class StaleTestComp extends A_Component {}',
165
+ type: A_FrameTargetType.COMPONENT,
166
+ namespace: A_FrameIndex.getDefaultNamespace(),
167
+ }));
168
+
169
+ concept = await buildMinimalConcept();
170
+ idx = concept.scope.resolve(A_FrameIndex)!;
171
+
172
+ const def2Stale = idx.getDefinition('StaleTestComp')!;
173
+ const def2Stable = idx.getDefinition('StableTestComp')!;
174
+
175
+ expect(def2Stale.isEmbed).toBe(true);
176
+ expect(def2Stable.isEmbed).toBe(true);
177
+
178
+ const hashV2 = def2Stale.hash;
179
+ expect(hashV2).not.toBe(hashV1); // description changed → hash changed
180
+ const staleVecV2 = Array.from(def2Stale.vector!.values);
181
+
182
+ // StableTestComp was NOT changed — its cached vector must be
183
+ // bit-for-bit identical to phase 1 (restored from disk, no API call)
184
+ expect(Array.from(def2Stable.vector!.values)).toEqual(stableVecV1);
185
+
186
+ console.log(`\n [phase 2] StaleTestComp STALE hash=${hashV1} → fresh hash=${hashV2} (re-embedded)`);
187
+ console.log(` [phase 2] StableTestComp vector unchanged: ${Array.from(def2Stable.vector!.values).slice(0, 4).map(v => v.toFixed(4)).join(', ')}…`);
188
+
189
+
190
+ // ── Phase 3 ─ same v2 description → cache hit → identical vector ───
191
+ //
192
+ // Nothing changed since phase 2. The framework should load the v2
193
+ // embedding from disk without making any embedding API call.
194
+ // Proof: the Float32Array is bit-for-bit identical (binary
195
+ // serialisation is lossless; two separate API calls would not produce
196
+ // the same exact float values).
197
+ A_Context.reset();
198
+
199
+ // Deregister v2 before re-adding it (same ASEID id survives the
200
+ // context reset in the persistent singleton scope)
201
+ const existingV2 = A_FrameIndex.getDefinition('StaleTestComp');
202
+ if (existingV2) A_FrameIndex.removeDefinition(existingV2);
203
+
204
+ // Re-add v2 to verify it is served from cache in this phase
205
+ A_FrameIndex.addDefinition(new A_FrameDefinition({
206
+ name: 'StaleTestComp',
207
+ dependency: 'StaleTestComp',
208
+ description: 'StaleTestComp v2 — description updated to reflect new behaviour',
209
+ source: 'class StaleTestComp extends A_Component {}',
210
+ type: A_FrameTargetType.COMPONENT,
211
+ namespace: A_FrameIndex.getDefaultNamespace(),
212
+ }));
213
+
214
+ concept = await buildMinimalConcept();
215
+ idx = concept.scope.resolve(A_FrameIndex)!;
216
+
217
+ const def3Stale = idx.getDefinition('StaleTestComp')!;
218
+ const def3Stable = idx.getDefinition('StableTestComp')!;
219
+
220
+ expect(def3Stale.isEmbed).toBe(true);
221
+ expect(def3Stable.isEmbed).toBe(true);
222
+
223
+ // Both vectors must be identical to phase 2 — loaded from cache
224
+ expect(Array.from(def3Stale.vector!.values)).toEqual(staleVecV2);
225
+ expect(Array.from(def3Stable.vector!.values)).toEqual(stableVecV1);
226
+
227
+ console.log(`\n [phase 3] StaleTestComp vector from cache: ${staleVecV2.slice(0, 4).map(v => v.toFixed(4)).join(', ')}…`);
228
+ console.log(` [phase 3] StableTestComp vector from cache: ${stableVecV1.slice(0, 4).map(v => v.toFixed(4)).join(', ')}…`);
229
+
230
+ } catch (error) {
231
+ if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
232
+ else console.error('Unexpected error:', error);
233
+ throw error;
234
+ }
235
+ }, 120_000);
236
+
237
+ }); // describe('Integration — stale cache invalidation')
238
+
239
+
240
+ // ── Integration: custom namespace + custom storage path ───────────────
241
+ //
242
+ // Verifies the complete first-run / second-run storage contract:
243
+ //
244
+ // Run 1 — storage is empty → the server is called for every definition →
245
+ // results are saved to the custom storage directory.
246
+ //
247
+ // Run 2 — storage is populated and hashes match → the server is NOT
248
+ // called at all → vectors are bit-for-bit identical to run 1.
249
+ //
250
+ // The spy on `A_FrameChannel.prototype.embedDefinition` is the explicit
251
+ // proof that no network round-trip occurred in run 2.
252
+
253
+ describe('Integration — custom namespace, custom storage path', () => {
254
+
255
+ const CUSTOM_NS_NAME = 'storage-test-ns';
256
+
257
+ // These two definitions live in the custom namespace created below.
258
+ // They are added to A_FrameIndex manually (same pattern as the stale-
259
+ // cache suite) so that the test is fully self-contained and does not
260
+ // depend on globally-registered @A_Frame.Define decorators.
261
+ const DEF_A_NAME = 'StorageTestCompA';
262
+ const DEF_B_NAME = 'StorageTestCompB';
263
+
264
+ let tempStorageDir: string;
265
+ let customNamespace: A_FrameNamespace;
266
+
267
+ // ── Helpers ─────────────────────────────────────────────────────────
268
+
269
+ function makeDefinition(name: string): A_FrameDefinition {
270
+ return new A_FrameDefinition({
271
+ name,
272
+ dependency: name,
273
+ description: `${name} — definition for storage integration test`,
274
+ source: `class ${name} extends A_Component {}`,
275
+ type: A_FrameTargetType.COMPONENT,
276
+ namespace: customNamespace,
277
+ });
278
+ }
279
+
280
+ async function buildConcept(): Promise<A_Concept> {
281
+ const concept = new A_Concept({
282
+ name: 'StorageTestConcept',
283
+ components: [A_Frame],
284
+ containers: [
285
+ new A_Container({
286
+ name: 'StorageTestContainer',
287
+ components: [],
288
+ }),
289
+ ],
290
+ });
291
+ await concept.load();
292
+ return concept;
293
+ }
294
+
295
+ // ── Setup / teardown ─────────────────────────────────────────────────
296
+
297
+ beforeAll(() => {
298
+ process.env.A_FRAME_SYNC = 'true';
299
+
300
+ // Custom isolated storage directory
301
+ tempStorageDir = fs.mkdtempSync(
302
+ path.join(os.tmpdir(), 'aframe-custom-ns-')
303
+ );
304
+ process.env.A_FRAME_STORAGE_DIR = tempStorageDir;
305
+
306
+ // Custom namespace — scoped to this test block
307
+ customNamespace = new A_FrameNamespace({
308
+ name: CUSTOM_NS_NAME,
309
+ description: 'Namespace used exclusively by the storage integration test',
310
+ });
311
+ });
312
+
313
+ afterAll(() => {
314
+ process.env.A_FRAME_SYNC = 'false';
315
+ delete process.env.A_FRAME_STORAGE_DIR;
316
+
317
+ // Clean up definitions from the global singleton index
318
+ for (const name of [DEF_A_NAME, DEF_B_NAME]) {
319
+ const def = A_FrameIndex.getDefinition(name);
320
+ if (def) A_FrameIndex.removeDefinition(def);
321
+ }
322
+
323
+ try { fs.rmSync(tempStorageDir, { recursive: true, force: true }); } catch { /* no-op */ }
324
+ });
325
+
326
+ // ── Test ─────────────────────────────────────────────────────────────
327
+
328
+ it('run 1 calls server and persists; run 2 reads from storage without calling server', async () => {
329
+ try {
330
+
331
+ // ── Setup: register definitions under the custom namespace ────
332
+ A_FrameIndex.addDefinition(makeDefinition(DEF_A_NAME));
333
+ A_FrameIndex.addDefinition(makeDefinition(DEF_B_NAME));
334
+
335
+ // ── Run 1: empty storage → server MUST be called ─────────────
336
+
337
+ const embedSpy = jest
338
+ .spyOn(A_FrameChannel.prototype, 'embedDefinition')
339
+ .mockResolvedValue(undefined as any); // handled by parent class
340
+
341
+ // We want real embedding here, so restore the original method
342
+ // immediately and track calls via a wrapping spy instead.
343
+ embedSpy.mockRestore();
344
+
345
+ // Real spy — does not change behaviour, only records calls
346
+ const serverCallSpy = jest.spyOn(
347
+ A_FrameChannel.prototype as any,
348
+ 'embedDefinition',
349
+ );
350
+
351
+ let concept = await buildConcept();
352
+ let idx = concept.scope.resolve(A_FrameIndex)!;
353
+
354
+ const defA_run1 = idx.getDefinition(DEF_A_NAME)!;
355
+ const defB_run1 = idx.getDefinition(DEF_B_NAME)!;
356
+
357
+ expect(defA_run1).toBeDefined();
358
+ expect(defB_run1).toBeDefined();
359
+ expect(defA_run1.isEmbed).toBe(true);
360
+ expect(defB_run1.isEmbed).toBe(true);
361
+
362
+ // Server must have been called for each definition in run 1
363
+ expect(serverCallSpy).toHaveBeenCalled();
364
+ const run1CallCount = serverCallSpy.mock.calls.length;
365
+ expect(run1CallCount).toBeGreaterThanOrEqual(2);
366
+
367
+ const vecA_run1 = Array.from(defA_run1.vector!.values);
368
+ const vecB_run1 = Array.from(defB_run1.vector!.values);
369
+
370
+ console.log(
371
+ `\n [run 1] ${DEF_A_NAME} dims=${defA_run1.vector!.dimensions} server calls=${run1CallCount}`
372
+ );
373
+
374
+ // Verify the storage directory was created and contains files
375
+ const storedFiles = fs.readdirSync(tempStorageDir);
376
+ expect(storedFiles.length).toBeGreaterThan(0);
377
+ console.log(` [run 1] storage files: ${storedFiles.join(', ')}`);
378
+
379
+ serverCallSpy.mockRestore();
380
+
381
+
382
+ // ── Run 2: populated storage, same definitions → NO server calls ─
383
+
384
+ A_Context.reset();
385
+
386
+ // Re-register the definitions (context reset clears scope, but
387
+ // A_FrameIndex singleton persists — definitions are still there)
388
+ const defAAfterReset = A_FrameIndex.getDefinition(DEF_A_NAME);
389
+ const defBAfterReset = A_FrameIndex.getDefinition(DEF_B_NAME);
390
+
391
+ // If context reset cleared them, re-add with identical content
392
+ if (!defAAfterReset) A_FrameIndex.addDefinition(makeDefinition(DEF_A_NAME));
393
+ if (!defBAfterReset) A_FrameIndex.addDefinition(makeDefinition(DEF_B_NAME));
394
+
395
+ // Spy BEFORE the second concept.load() — must not be called
396
+ const noServerSpy = jest.spyOn(
397
+ A_FrameChannel.prototype as any,
398
+ 'embedDefinition',
399
+ );
400
+
401
+ concept = await buildConcept();
402
+ idx = concept.scope.resolve(A_FrameIndex)!;
403
+
404
+ const defA_run2 = idx.getDefinition(DEF_A_NAME)!;
405
+ const defB_run2 = idx.getDefinition(DEF_B_NAME)!;
406
+
407
+ expect(defA_run2).toBeDefined();
408
+ expect(defB_run2).toBeDefined();
409
+ expect(defA_run2.isEmbed).toBe(true);
410
+ expect(defB_run2.isEmbed).toBe(true);
411
+
412
+ // ─ Key assertion: server was NOT called in run 2 ─
413
+ expect(noServerSpy).not.toHaveBeenCalled();
414
+
415
+ // ─ Vectors must be bit-for-bit identical (loaded from disk) ─
416
+ expect(Array.from(defA_run2.vector!.values)).toEqual(vecA_run1);
417
+ expect(Array.from(defB_run2.vector!.values)).toEqual(vecB_run1);
418
+
419
+ console.log(`\n [run 2] server spy call count: ${noServerSpy.mock.calls.length} (expected 0)`);
420
+ console.log(` [run 2] ${DEF_A_NAME} vector from storage: ${vecA_run1.slice(0, 4).map(v => v.toFixed(4)).join(', ')}…`);
421
+ console.log(` [run 2] ${DEF_B_NAME} vector from storage: ${vecB_run1.slice(0, 4).map(v => v.toFixed(4)).join(', ')}…`);
422
+
423
+ noServerSpy.mockRestore();
424
+
425
+ } catch (error) {
426
+ if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
427
+ else console.error('Unexpected error:', error);
428
+ throw error;
429
+ }
430
+ }, 120_000);
431
+
432
+ }); // describe('Integration — custom namespace, custom storage path')
433
+
434
+
435
+ // ── Integration: A_FRAME_STORAGE_PATTERN — extra-directory discovery ──────
436
+ //
437
+ // Verifies the pattern-based read-only merge from secondary storage directories:
438
+ //
439
+ // Step 1 — a "publisher" concept embeds definitions and saves them to a
440
+ // dedicated publisher storage directory.
441
+ //
442
+ // Step 2 — a "consumer" concept starts with a completely empty primary
443
+ // storage directory. `A_FRAME_STORAGE_PATTERN` is set so the
444
+ // framework discovers the publisher directory via glob.
445
+ // The consumer must load definitions from the pattern-matched
446
+ // directory WITHOUT making any embedding server calls, and the
447
+ // resulting vectors must be bit-for-bit identical to step 1.
448
+ //
449
+ // This simulates the real-world scenario where definitions are pre-embedded
450
+ // inside an npm package (shipped as `.aframe/`) and consumed by an
451
+ // application that does not call the embedding server at all.
452
+
453
+ describe('Integration — A_FRAME_STORAGE_PATTERN extra-directory discovery', () => {
454
+
455
+ const PATTERN_NS_NAME = 'pattern-test-ns';
456
+ const DEF_P_NAME = 'PatternTestCompA';
457
+ const DEF_Q_NAME = 'PatternTestCompB';
458
+
459
+ let publisherDir: string; // simulates the npm package's .aframe
460
+ let consumerDir: string; // consumer's own (initially empty) storage
461
+ let patternNs: A_FrameNamespace;
462
+
463
+ function makePatternDefinition(name: string): A_FrameDefinition {
464
+ return new A_FrameDefinition({
465
+ name,
466
+ dependency: name,
467
+ description: `${name} — definition for A_FRAME_STORAGE_PATTERN integration test`,
468
+ source: `class ${name} extends A_Component {}`,
469
+ type: A_FrameTargetType.COMPONENT,
470
+ namespace: patternNs,
471
+ });
472
+ }
473
+
474
+ async function buildPatternConcept(): Promise<A_Concept> {
475
+ const concept = new A_Concept({
476
+ name: 'PatternTestConcept',
477
+ components: [A_Frame],
478
+ containers: [
479
+ new A_Container({
480
+ name: 'PatternTestContainer',
481
+ components: [],
482
+ }),
483
+ ],
484
+ });
485
+ await concept.load();
486
+ return concept;
487
+ }
488
+
489
+ beforeAll(() => {
490
+ process.env.A_FRAME_SYNC = 'true';
491
+
492
+ publisherDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aframe-publisher-'));
493
+ consumerDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aframe-consumer-'));
494
+
495
+ patternNs = new A_FrameNamespace({
496
+ name: PATTERN_NS_NAME,
497
+ description: 'Namespace used exclusively by the A_FRAME_STORAGE_PATTERN integration test',
498
+ });
499
+ });
500
+
501
+ afterAll(() => {
502
+ process.env.A_FRAME_SYNC = 'false';
503
+ delete process.env.A_FRAME_STORAGE_DIR;
504
+ delete process.env.A_FRAME_STORAGE_PATTERN;
505
+
506
+ for (const name of [DEF_P_NAME, DEF_Q_NAME]) {
507
+ const def = A_FrameIndex.getDefinition(name);
508
+ if (def) A_FrameIndex.removeDefinition(def);
509
+ }
510
+
511
+ try { fs.rmSync(publisherDir, { recursive: true, force: true }); } catch { /* no-op */ }
512
+ try { fs.rmSync(consumerDir, { recursive: true, force: true }); } catch { /* no-op */ }
513
+ });
514
+
515
+ it('consumer reads definitions from pattern-matched publisher dir without calling the server', async () => {
516
+ try {
517
+
518
+ // ── Step 1: publisher embeds and saves to publisherDir ────────────
519
+
520
+ A_FrameIndex.addDefinition(makePatternDefinition(DEF_P_NAME));
521
+ A_FrameIndex.addDefinition(makePatternDefinition(DEF_Q_NAME));
522
+
523
+ process.env.A_FRAME_STORAGE_DIR = publisherDir;
524
+ delete process.env.A_FRAME_STORAGE_PATTERN;
525
+
526
+ let concept = await buildPatternConcept();
527
+ let idx = concept.scope.resolve(A_FrameIndex)!;
528
+
529
+ const defP_pub = idx.getDefinition(DEF_P_NAME)!;
530
+ const defQ_pub = idx.getDefinition(DEF_Q_NAME)!;
531
+
532
+ expect(defP_pub).toBeDefined();
533
+ expect(defQ_pub).toBeDefined();
534
+ expect(defP_pub.isEmbed).toBe(true);
535
+ expect(defQ_pub.isEmbed).toBe(true);
536
+
537
+ const vecP_pub = Array.from(defP_pub.vector!.values);
538
+ const vecQ_pub = Array.from(defQ_pub.vector!.values);
539
+
540
+ const publisherFiles = fs.readdirSync(publisherDir);
541
+ expect(publisherFiles.length).toBeGreaterThan(0);
542
+ console.log(`\n [publisher] storage files: ${publisherFiles.join(', ')}`);
543
+
544
+ // ── Step 2: consumer starts with empty dir, pattern points to publisher ─
545
+
546
+ A_Context.reset();
547
+
548
+ // Re-register definitions (context reset drops scoped registrations)
549
+ const pAfterReset = A_FrameIndex.getDefinition(DEF_P_NAME);
550
+ const qAfterReset = A_FrameIndex.getDefinition(DEF_Q_NAME);
551
+ if (!pAfterReset) A_FrameIndex.addDefinition(makePatternDefinition(DEF_P_NAME));
552
+ if (!qAfterReset) A_FrameIndex.addDefinition(makePatternDefinition(DEF_Q_NAME));
553
+
554
+ // Consumer uses a separate, initially-empty storage dir.
555
+ // The pattern is set to the exact publisher dir path so the glob matches it.
556
+ process.env.A_FRAME_STORAGE_DIR = consumerDir;
557
+ process.env.A_FRAME_STORAGE_PATTERN = publisherDir;
558
+
559
+ // Spy BEFORE load — must not be called if storage pattern works
560
+ const noServerSpy = jest.spyOn(
561
+ A_FrameChannel.prototype as any,
562
+ 'embedDefinition',
563
+ );
564
+
565
+ concept = await buildPatternConcept();
566
+ idx = concept.scope.resolve(A_FrameIndex)!;
567
+
568
+ const defP_con = idx.getDefinition(DEF_P_NAME)!;
569
+ const defQ_con = idx.getDefinition(DEF_Q_NAME)!;
570
+
571
+ expect(defP_con).toBeDefined();
572
+ expect(defQ_con).toBeDefined();
573
+ expect(defP_con.isEmbed).toBe(true);
574
+ expect(defQ_con.isEmbed).toBe(true);
575
+
576
+ // ─ Key assertion: no server call was made ─
577
+ expect(noServerSpy).not.toHaveBeenCalled();
578
+
579
+ // ─ Vectors must be bit-for-bit identical to the publisher run ─
580
+ expect(Array.from(defP_con.vector!.values)).toEqual(vecP_pub);
581
+ expect(Array.from(defQ_con.vector!.values)).toEqual(vecQ_pub);
582
+
583
+ console.log(` [consumer] server spy call count: ${noServerSpy.mock.calls.length} (expected 0)`);
584
+ console.log(` [consumer] ${DEF_P_NAME} vector matches publisher: ✓`);
585
+ console.log(` [consumer] ${DEF_Q_NAME} vector matches publisher: ✓`);
586
+
587
+ noServerSpy.mockRestore();
588
+
589
+ } catch (error) {
590
+ if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
591
+ else console.error('Unexpected error:', error);
592
+ throw error;
593
+ }
594
+ }, 120_000);
595
+
596
+ }); // describe('Integration — A_FRAME_STORAGE_PATTERN extra-directory discovery')
597
+
598
+ }); // describe('A-Frame Storage Tests')
@@ -9,7 +9,7 @@ config();
9
9
  (window as any).A_FRAME_SERVER_URL = process.env.A_FRAME_SERVER_URL ?? 'http://localhost:3000';
10
10
  (window as any).A_FRAME_SERVER_API_KEY = process.env.A_FRAME_SERVER_API_KEY ?? '';
11
11
  (window as any).A_FRAME_TOKEN = process.env.A_FRAME_TOKEN ?? '';
12
- (window as any).A_FRAME_STORAGE_DIR = process.env.A_FRAME_STORAGE_DIR ?? '.aframestr';
12
+ (window as any).A_FRAME_STORAGE_DIR = process.env.A_FRAME_STORAGE_DIR ?? '.aframe';
13
13
 
14
14
  /**
15
15
  * Browser environment test hooks
@@ -1,6 +1,10 @@
1
1
  import { A_Context } from '@adaas/a-concept';
2
2
  import fs from 'fs';
3
3
 
4
+ // Disable automatic sync/embedding during tests to prevent slow Ollama calls
5
+ // on every concept.load(). Tests that need embedding call .embed() explicitly.
6
+ process.env.A_FRAME_SYNC = 'false';
7
+
4
8
  /**
5
9
  * Base hooks for tests
6
10
  */
@@ -0,0 +1,30 @@
1
+ import { A_Context } from '@adaas/a-concept';
2
+ import fs from 'fs';
3
+
4
+ // Use a temp (empty) storage dir so that def.load() / ns.load() always
5
+ // find no cached files and return immediately — preventing hangs that would
6
+ // occur if integration-test .aframe files on disk were decrypted with the
7
+ // wrong (mock) encryption key.
8
+ process.env.A_FRAME_STORAGE_DIR = '/tmp/aframe-unit-tests-' + process.pid;
9
+ process.env.A_FRAME_SYNC = 'false';
10
+
11
+ beforeAll(async () => {
12
+ return Promise.resolve();
13
+ });
14
+
15
+ afterAll(async () => {
16
+ try {
17
+ fs.unlinkSync('a-concept.conf.json');
18
+ } catch (_) {}
19
+ return Promise.resolve();
20
+ });
21
+
22
+ beforeEach(async () => {
23
+ A_Context.reset();
24
+ return Promise.resolve();
25
+ });
26
+
27
+ afterEach(async () => {
28
+ A_Context.reset();
29
+ return Promise.resolve();
30
+ });