@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.
- package/.conf/tsconfig.browser.json +7 -1
- package/.conf/tsconfig.node.json +7 -1
- package/dist/browser/A-FrameBrowserStorageBlobs.context-CZTTvpn2.d.mts +53 -0
- package/dist/browser/A-FrameBrowserStorageBlobs.context-CaGTyatz.d.mts +40 -0
- package/dist/browser/A-FrameBrowserStorageBlobs.context-DjeEH8cn.d.mts +53 -0
- package/dist/browser/A-FrameBrowserStorageBlobs.context-vCsuTea9.d.mts +40 -0
- package/dist/browser/A-FrameBundle.types-LzfgdMiQ.d.mts +71 -0
- package/dist/browser/A-FrameChannel.component-4mTNctXL.d.mts +704 -0
- package/dist/browser/A-FrameChannel.types-BXEKJK9t.d.mts +205 -0
- package/dist/browser/A-FrameChannel.types-Ba3wgUZj.d.mts +199 -0
- package/dist/browser/A-FrameChannel.types-BfINhQZe.d.mts +145 -0
- package/dist/browser/A-FrameChannel.types-DfacgYL1.d.mts +199 -0
- package/dist/browser/A-FrameCompletion.entity-Dzy9sIa8.d.mts +72 -0
- package/dist/browser/A-FrameDefinition.entity-C1aK-gdl.d.mts +370 -0
- package/dist/browser/A-FrameDefinition.entity-CKPXsarS.d.mts +358 -0
- package/dist/browser/A-FrameDefinition.entity-yA0GsBoe.d.mts +143 -0
- package/dist/browser/A-FrameDefinition.types-BT02yAhQ.d.mts +232 -0
- package/dist/browser/A-FrameDynamicContentOperation.context-CoViNb19.d.mts +297 -0
- package/dist/browser/A-FrameDynamicContentOperation.context-Dd7Lb7X2.d.mts +266 -0
- package/dist/browser/A-FrameDynamicPatch.entity-BRuF1tqs.d.mts +29 -0
- package/dist/browser/A-FrameDynamicStructure.entity-DMvI_EPT.d.mts +210 -0
- package/dist/browser/A-FrameDynamicStructure.entity-DxkPP9mR.d.mts +235 -0
- package/dist/browser/A-FrameEnv.types-DnK-CYVk.d.mts +21 -0
- package/dist/browser/A-FrameNamespace.entity-BDg1FUgo.d.mts +136 -0
- package/dist/browser/A-FrameSchema.entity-DjYIhsoj.d.mts +141 -0
- package/dist/browser/A-FrameSegment.entity-D1xjjWvG.d.mts +161 -0
- package/dist/browser/A-FrameSegment.entity-D7Aj39Wh.d.mts +146 -0
- package/dist/browser/bundle.d.mts +6 -2
- package/dist/browser/bundle.mjs +1 -1
- package/dist/browser/bundle.mjs.map +1 -1
- package/dist/browser/channel.d.mts +51 -74
- package/dist/browser/channel.mjs +1 -2
- package/dist/browser/channel.mjs.map +1 -1
- package/dist/browser/chunk-2RNFZSBL.mjs +2 -0
- package/dist/browser/chunk-2RNFZSBL.mjs.map +1 -0
- package/dist/browser/chunk-46LRNZRG.mjs +2 -0
- package/dist/browser/chunk-46LRNZRG.mjs.map +1 -0
- package/dist/browser/chunk-52HFO3OY.mjs +2 -0
- package/dist/browser/chunk-52HFO3OY.mjs.map +1 -0
- package/dist/browser/chunk-643KGQKR.mjs +3 -0
- package/dist/browser/chunk-643KGQKR.mjs.map +1 -0
- package/dist/browser/chunk-66BBIZAM.mjs +3 -0
- package/dist/browser/chunk-66BBIZAM.mjs.map +1 -0
- package/dist/browser/chunk-6NPQURSO.mjs +2 -0
- package/dist/browser/chunk-6NPQURSO.mjs.map +1 -0
- package/dist/browser/chunk-6WAOMX7M.mjs +2 -0
- package/dist/browser/chunk-6WAOMX7M.mjs.map +1 -0
- package/dist/browser/chunk-77HU5SRQ.mjs +2 -0
- package/dist/browser/chunk-77HU5SRQ.mjs.map +1 -0
- package/dist/browser/chunk-AET6XULU.mjs +2 -0
- package/dist/browser/chunk-AET6XULU.mjs.map +1 -0
- package/dist/browser/chunk-BIBPE2GT.mjs +3 -0
- package/dist/browser/chunk-BIBPE2GT.mjs.map +1 -0
- package/dist/browser/chunk-CDJKU4DK.mjs +2 -0
- package/dist/browser/chunk-CDJKU4DK.mjs.map +1 -0
- package/dist/browser/chunk-CT67Y46H.mjs +3 -0
- package/dist/browser/chunk-CT67Y46H.mjs.map +1 -0
- package/dist/browser/chunk-EFC7OUNO.mjs +2 -0
- package/dist/browser/chunk-EFC7OUNO.mjs.map +1 -0
- package/dist/browser/chunk-EJIX7H7A.mjs +2 -0
- package/dist/browser/chunk-EJIX7H7A.mjs.map +1 -0
- package/dist/browser/chunk-FHJ5ATND.mjs +3 -0
- package/dist/browser/chunk-FHJ5ATND.mjs.map +1 -0
- package/dist/browser/chunk-FVH2EEVP.mjs +3 -0
- package/dist/browser/chunk-FVH2EEVP.mjs.map +1 -0
- package/dist/browser/chunk-G6ULYKSU.mjs +2 -0
- package/dist/browser/chunk-G6ULYKSU.mjs.map +1 -0
- package/dist/browser/chunk-G7MKGKG5.mjs +2 -0
- package/dist/browser/chunk-G7MKGKG5.mjs.map +1 -0
- package/dist/browser/chunk-GOADBDTE.mjs +2 -0
- package/dist/browser/chunk-GOADBDTE.mjs.map +1 -0
- package/dist/browser/chunk-GOMJPGVB.mjs +3 -0
- package/dist/browser/chunk-GOMJPGVB.mjs.map +1 -0
- package/dist/browser/chunk-INQV5UZA.mjs +2 -0
- package/dist/browser/chunk-INQV5UZA.mjs.map +1 -0
- package/dist/browser/chunk-INXPVBTZ.mjs +2 -0
- package/dist/browser/chunk-INXPVBTZ.mjs.map +1 -0
- package/dist/browser/chunk-KFMVTZ7T.mjs +2 -0
- package/dist/browser/chunk-KFMVTZ7T.mjs.map +1 -0
- package/dist/browser/chunk-LK6C7C3S.mjs +2 -0
- package/dist/browser/chunk-LK6C7C3S.mjs.map +1 -0
- package/dist/browser/chunk-LOGRQOWP.mjs +3 -0
- package/dist/browser/chunk-LOGRQOWP.mjs.map +1 -0
- package/dist/browser/chunk-LZACYSUC.mjs +3 -0
- package/dist/browser/chunk-LZACYSUC.mjs.map +1 -0
- package/dist/browser/chunk-NTOIVRX3.mjs +2 -0
- package/dist/browser/chunk-NTOIVRX3.mjs.map +1 -0
- package/dist/browser/chunk-OES2N3X7.mjs +3 -0
- package/dist/browser/chunk-OES2N3X7.mjs.map +1 -0
- package/dist/browser/chunk-OFKV5GNB.mjs +1 -1
- package/dist/browser/chunk-OFKV5GNB.mjs.map +1 -1
- package/dist/browser/chunk-OVLM5A32.mjs +3 -0
- package/dist/browser/chunk-OVLM5A32.mjs.map +1 -0
- package/dist/browser/chunk-QATIN7CO.mjs +1 -1
- package/dist/browser/chunk-QATIN7CO.mjs.map +1 -1
- package/dist/browser/chunk-QOL7CAUZ.mjs +2 -0
- package/dist/browser/chunk-QOL7CAUZ.mjs.map +1 -0
- package/dist/browser/chunk-RCB3PX4V.mjs +2 -0
- package/dist/browser/chunk-RCB3PX4V.mjs.map +1 -0
- package/dist/browser/chunk-RWQSCROK.mjs +3 -0
- package/dist/browser/chunk-RWQSCROK.mjs.map +1 -0
- package/dist/browser/chunk-TIAUMK2X.mjs +2 -0
- package/dist/browser/chunk-TIAUMK2X.mjs.map +1 -0
- package/dist/browser/chunk-TQPC5MYM.mjs +3 -0
- package/dist/browser/chunk-TQPC5MYM.mjs.map +1 -0
- package/dist/browser/chunk-UNIKTCXL.mjs +3 -0
- package/dist/browser/chunk-UNIKTCXL.mjs.map +1 -0
- package/dist/browser/chunk-UULJJ5C5.mjs +3 -0
- package/dist/browser/chunk-UULJJ5C5.mjs.map +1 -0
- package/dist/browser/chunk-VSSANMPF.mjs +2 -0
- package/dist/browser/chunk-VSSANMPF.mjs.map +1 -0
- package/dist/browser/chunk-VW2BZYNY.mjs +2 -0
- package/dist/browser/chunk-VW2BZYNY.mjs.map +1 -0
- package/dist/browser/chunk-WAXBOWM6.mjs +3 -0
- package/dist/browser/chunk-WAXBOWM6.mjs.map +1 -0
- package/dist/browser/chunk-WXCQCHAX.mjs +2 -0
- package/dist/browser/chunk-WXCQCHAX.mjs.map +1 -0
- package/dist/browser/chunk-XKKBIIZG.mjs +3 -0
- package/dist/browser/chunk-XKKBIIZG.mjs.map +1 -0
- package/dist/browser/chunk-XR7FVA5M.mjs +3 -0
- package/dist/browser/chunk-XR7FVA5M.mjs.map +1 -0
- package/dist/browser/chunk-YQJFTBGV.mjs +3 -0
- package/dist/browser/chunk-YQJFTBGV.mjs.map +1 -0
- package/dist/browser/chunk-YTAMZDWC.mjs +3 -0
- package/dist/browser/chunk-YTAMZDWC.mjs.map +1 -0
- package/dist/browser/chunk-ZEONOTRL.mjs +2 -0
- package/dist/browser/chunk-ZEONOTRL.mjs.map +1 -0
- package/dist/browser/completion.d.mts +10 -0
- package/dist/browser/completion.mjs +2 -0
- package/dist/browser/completion.mjs.map +1 -0
- package/dist/browser/core.d.mts +8 -7
- package/dist/browser/core.mjs +1 -1
- package/dist/browser/core.mjs.map +1 -1
- package/dist/browser/credentials.d.mts +74 -0
- package/dist/browser/credentials.mjs +2 -0
- package/dist/browser/credentials.mjs.map +1 -0
- package/dist/browser/definition.d.mts +3 -2
- package/dist/browser/definition.mjs +1 -1
- package/dist/browser/dynamic-content.d.mts +13 -0
- package/dist/browser/dynamic-content.mjs +2 -0
- package/dist/browser/dynamic-content.mjs.map +1 -0
- package/dist/browser/dynamic-feature.d.mts +66 -6
- package/dist/browser/dynamic-feature.mjs +3 -1
- package/dist/browser/dynamic-feature.mjs.map +1 -1
- package/dist/browser/dynamic-structure.d.mts +77 -3
- package/dist/browser/dynamic-structure.mjs +1 -1
- package/dist/browser/dynamic-structure.mjs.map +1 -1
- package/dist/browser/env.d.mts +16 -2
- package/dist/browser/env.mjs +1 -1
- package/dist/browser/frame-index.d.mts +70 -9
- package/dist/browser/frame-index.mjs +1 -1
- package/dist/browser/models.d.mts +64 -0
- package/dist/browser/models.mjs +2 -0
- package/dist/browser/models.mjs.map +1 -0
- package/dist/browser/namespace.d.mts +1 -1
- package/dist/browser/namespace.mjs +1 -1
- package/dist/browser/schema.d.mts +10 -0
- package/dist/browser/schema.mjs +2 -0
- package/dist/browser/schema.mjs.map +1 -0
- package/dist/browser/segment.d.mts +13 -0
- package/dist/browser/segment.mjs +2 -0
- package/dist/browser/segment.mjs.map +1 -0
- package/dist/browser/storage.d.mts +13 -7
- package/dist/browser/storage.mjs +1 -1
- package/dist/browser/vector.d.mts +7 -0
- package/dist/browser/vector.mjs +1 -1
- package/dist/cli.cjs +5593 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/node/A-FrameChannel.component--YErPxf4.d.mts +97 -0
- package/dist/node/A-FrameChannel.component-BjgqMh1B.d.ts +97 -0
- package/dist/node/A-FrameChannel.component-C0O3TaRD.d.ts +679 -0
- package/dist/node/A-FrameChannel.component-CgBZYBz0.d.mts +379 -0
- package/dist/node/A-FrameChannel.component-CkZserv3.d.ts +97 -0
- package/dist/node/A-FrameChannel.component-DMA-3sUB.d.mts +679 -0
- package/dist/node/A-FrameChannel.component-DYV8omYR.d.ts +379 -0
- package/dist/node/A-FrameChannel.component-DwgYNfFn.d.mts +97 -0
- package/dist/node/A-FrameChannel.types-B3_xWKEO.d.mts +151 -0
- package/dist/node/A-FrameChannel.types-BGcVXTqa.d.ts +205 -0
- package/dist/node/A-FrameChannel.types-Boi8QqDK.d.mts +205 -0
- package/dist/node/A-FrameChannel.types-BsE6bNky.d.mts +205 -0
- package/dist/node/A-FrameChannel.types-C-gxXl8m.d.ts +151 -0
- package/dist/node/A-FrameChannel.types-DD2B11rf.d.ts +205 -0
- package/dist/node/A-FrameChannel.types-DYMgRiCF.d.mts +205 -0
- package/dist/node/A-FrameChannel.types-DwyZRsOy.d.ts +205 -0
- package/dist/node/A-FrameCompletion.entity-Brx11JMp.d.ts +72 -0
- package/dist/node/A-FrameCompletion.entity-Dzy9sIa8.d.mts +72 -0
- package/dist/node/A-FrameDefinition.entity-BIF0sclD.d.ts +370 -0
- package/dist/node/A-FrameDefinition.entity-Bt9ua6cn.d.ts +358 -0
- package/dist/node/A-FrameDefinition.entity-C0kzaGJ0.d.ts +143 -0
- package/dist/node/A-FrameDefinition.entity-C1aK-gdl.d.mts +370 -0
- package/dist/node/A-FrameDefinition.entity-CKPXsarS.d.mts +358 -0
- package/dist/node/A-FrameDefinition.entity-yA0GsBoe.d.mts +143 -0
- package/dist/node/A-FrameDefinition.types-BA_pLGpo.d.ts +232 -0
- package/dist/node/A-FrameDefinition.types-BT02yAhQ.d.mts +232 -0
- package/dist/node/A-FrameDynamicContentOperation.context-C_aH1gEn.d.ts +297 -0
- package/dist/node/A-FrameDynamicContentOperation.context-CoViNb19.d.mts +297 -0
- package/dist/node/A-FrameDynamicContentOperation.context-DRqH2c3o.d.ts +266 -0
- package/dist/node/A-FrameDynamicContentOperation.context-Dd7Lb7X2.d.mts +266 -0
- package/dist/node/A-FrameDynamicPatch.entity-BRuF1tqs.d.mts +29 -0
- package/dist/node/A-FrameDynamicPatch.entity-BRuF1tqs.d.ts +29 -0
- package/dist/node/A-FrameDynamicStructure.entity-BVCbolMd.d.ts +210 -0
- package/dist/node/A-FrameDynamicStructure.entity-DMvI_EPT.d.mts +210 -0
- package/dist/node/A-FrameDynamicStructure.entity-DxkPP9mR.d.mts +235 -0
- package/dist/node/A-FrameDynamicStructure.entity-DxkPP9mR.d.ts +235 -0
- package/dist/node/A-FrameLogger.component.env-node-DIDBeuiz.d.mts +114 -0
- package/dist/node/A-FrameLogger.component.env-node-DIDBeuiz.d.ts +114 -0
- package/dist/node/A-FrameNamespace.entity-BDg1FUgo.d.mts +136 -0
- package/dist/node/A-FrameNamespace.entity-HDXcLGcS.d.ts +136 -0
- package/dist/node/A-FrameSchema.entity-DjYIhsoj.d.mts +141 -0
- package/dist/node/A-FrameSchema.entity-DjYIhsoj.d.ts +141 -0
- package/dist/node/A-FrameSegment.entity-C0izuOmC.d.ts +161 -0
- package/dist/node/A-FrameSegment.entity-CMCgFCWU.d.ts +146 -0
- package/dist/node/A-FrameSegment.entity-D1xjjWvG.d.mts +161 -0
- package/dist/node/A-FrameSegment.entity-D7Aj39Wh.d.mts +146 -0
- package/dist/node/A-FrameStorage.component-BnNKzvpY.d.mts +107 -0
- package/dist/node/A-FrameStorage.component-CDztogHV.d.mts +107 -0
- package/dist/node/A-FrameStorage.component-CW0YgKDI.d.mts +107 -0
- package/dist/node/A-FrameStorage.component-D4UEkIBx.d.mts +107 -0
- package/dist/node/A-FrameStorage.component-DV_jwK6r.d.ts +107 -0
- package/dist/node/A-FrameStorage.component-Di4EvbtC.d.ts +107 -0
- package/dist/node/A-FrameStorage.component-emIH1a1M.d.ts +107 -0
- package/dist/node/A-FrameStorage.component-y-JPiIQ4.d.ts +107 -0
- package/dist/node/bundle.cjs +66 -21
- package/dist/node/bundle.cjs.map +1 -1
- package/dist/node/bundle.d.mts +88 -24
- package/dist/node/bundle.d.ts +88 -24
- package/dist/node/bundle.mjs +65 -20
- package/dist/node/bundle.mjs.map +1 -1
- package/dist/node/channel.cjs +33 -26
- package/dist/node/channel.d.mts +10 -6
- package/dist/node/channel.d.ts +10 -6
- package/dist/node/channel.mjs +13 -6
- package/dist/node/chunk-2HUSP34L.mjs +55 -0
- package/dist/node/chunk-2HUSP34L.mjs.map +1 -0
- package/dist/node/chunk-2KXGI2E5.cjs +474 -0
- package/dist/node/chunk-2KXGI2E5.cjs.map +1 -0
- package/dist/node/chunk-2OQMOIR5.mjs +170 -0
- package/dist/node/chunk-2OQMOIR5.mjs.map +1 -0
- package/dist/node/chunk-2UI7RJ4Q.mjs +207 -0
- package/dist/node/chunk-2UI7RJ4Q.mjs.map +1 -0
- package/dist/node/chunk-3SLICJ3L.cjs +265 -0
- package/dist/node/chunk-3SLICJ3L.cjs.map +1 -0
- package/dist/node/chunk-3ZDHQOIU.cjs +92 -0
- package/dist/node/chunk-3ZDHQOIU.cjs.map +1 -0
- package/dist/node/chunk-5BKCX2RO.mjs +33 -0
- package/dist/node/chunk-5BKCX2RO.mjs.map +1 -0
- package/dist/node/chunk-5NCGXLP2.mjs +6 -0
- package/dist/node/chunk-5NCGXLP2.mjs.map +1 -0
- package/dist/node/chunk-5OTXZ7BB.mjs +53 -0
- package/dist/node/chunk-5OTXZ7BB.mjs.map +1 -0
- package/dist/node/chunk-5PYIATGT.mjs +469 -0
- package/dist/node/chunk-5PYIATGT.mjs.map +1 -0
- package/dist/node/chunk-64QCZG53.cjs +57 -0
- package/dist/node/chunk-64QCZG53.cjs.map +1 -0
- package/dist/node/chunk-652OEICJ.cjs +4 -0
- package/dist/node/chunk-652OEICJ.cjs.map +1 -0
- package/dist/node/chunk-674ZX6XJ.mjs +187 -0
- package/dist/node/chunk-674ZX6XJ.mjs.map +1 -0
- package/dist/node/chunk-6ID2IXYX.mjs +6 -0
- package/dist/node/chunk-6ID2IXYX.mjs.map +1 -0
- package/dist/node/chunk-6KAGWGTE.mjs +529 -0
- package/dist/node/chunk-6KAGWGTE.mjs.map +1 -0
- package/dist/node/chunk-7EM3Q7HA.mjs +655 -0
- package/dist/node/chunk-7EM3Q7HA.mjs.map +1 -0
- package/dist/node/chunk-7MVVMISA.cjs +293 -0
- package/dist/node/chunk-7MVVMISA.cjs.map +1 -0
- package/dist/node/chunk-7NSLGCAZ.mjs +1395 -0
- package/dist/node/chunk-7NSLGCAZ.mjs.map +1 -0
- package/dist/node/chunk-7OLLATCC.mjs +1289 -0
- package/dist/node/chunk-7OLLATCC.mjs.map +1 -0
- package/dist/node/chunk-7SEZMRLI.cjs +183 -0
- package/dist/node/chunk-7SEZMRLI.cjs.map +1 -0
- package/dist/node/chunk-A4CVDMSV.mjs +608 -0
- package/dist/node/chunk-A4CVDMSV.mjs.map +1 -0
- package/dist/node/chunk-A7CJIUYY.cjs +4 -0
- package/dist/node/chunk-A7CJIUYY.cjs.map +1 -0
- package/dist/node/chunk-ALFFUJ2J.mjs +163 -0
- package/dist/node/chunk-ALFFUJ2J.mjs.map +1 -0
- package/dist/node/chunk-AMMQ76RJ.mjs +179 -0
- package/dist/node/chunk-AMMQ76RJ.mjs.map +1 -0
- package/dist/node/chunk-AUKWKGVA.cjs +688 -0
- package/dist/node/chunk-AUKWKGVA.cjs.map +1 -0
- package/dist/node/chunk-AY6UMDWD.cjs +270 -0
- package/dist/node/chunk-AY6UMDWD.cjs.map +1 -0
- package/dist/node/chunk-B7ZDJXD3.cjs +1 -1
- package/dist/node/chunk-B7ZDJXD3.cjs.map +1 -1
- package/dist/node/chunk-BBYOL3LM.cjs +1308 -0
- package/dist/node/chunk-BBYOL3LM.cjs.map +1 -0
- package/dist/node/chunk-BINGAHFW.cjs +1308 -0
- package/dist/node/chunk-BINGAHFW.cjs.map +1 -0
- package/dist/node/chunk-BSBY37MG.cjs +55 -0
- package/dist/node/chunk-BSBY37MG.cjs.map +1 -0
- package/dist/node/chunk-BWX7HFTH.cjs +209 -0
- package/dist/node/chunk-BWX7HFTH.cjs.map +1 -0
- package/dist/node/chunk-C37B34MH.cjs +188 -0
- package/dist/node/chunk-C37B34MH.cjs.map +1 -0
- package/dist/node/chunk-C6BBKHQG.cjs +250 -0
- package/dist/node/chunk-C6BBKHQG.cjs.map +1 -0
- package/dist/node/chunk-CLCAS67N.cjs +8 -0
- package/dist/node/chunk-CLCAS67N.cjs.map +1 -0
- package/dist/node/chunk-CNU3CRTR.mjs +43 -0
- package/dist/node/chunk-CNU3CRTR.mjs.map +1 -0
- package/dist/node/chunk-CV5FPKU6.mjs +6 -0
- package/dist/node/chunk-CV5FPKU6.mjs.map +1 -0
- package/dist/node/chunk-CZYOAFIR.mjs +129 -0
- package/dist/node/chunk-CZYOAFIR.mjs.map +1 -0
- package/dist/node/chunk-D2HTYEJZ.cjs +209 -0
- package/dist/node/chunk-D2HTYEJZ.cjs.map +1 -0
- package/dist/node/chunk-EMLZZPOT.cjs +1446 -0
- package/dist/node/chunk-EMLZZPOT.cjs.map +1 -0
- package/dist/node/chunk-EOIXXXBV.cjs +55 -0
- package/dist/node/chunk-EOIXXXBV.cjs.map +1 -0
- package/dist/node/chunk-F46TSY2K.cjs +541 -0
- package/dist/node/chunk-F46TSY2K.cjs.map +1 -0
- package/dist/node/chunk-F4UCOZW5.mjs +1 -1
- package/dist/node/chunk-F4UCOZW5.mjs.map +1 -1
- package/dist/node/chunk-F64CK4NI.mjs +53 -0
- package/dist/node/chunk-F64CK4NI.mjs.map +1 -0
- package/dist/node/chunk-FAV62EUG.cjs +35 -0
- package/dist/node/chunk-FAV62EUG.cjs.map +1 -0
- package/dist/node/chunk-GHSPKZUN.mjs +529 -0
- package/dist/node/chunk-GHSPKZUN.mjs.map +1 -0
- package/dist/node/chunk-GRNVK7DW.mjs +97 -0
- package/dist/node/chunk-GRNVK7DW.mjs.map +1 -0
- package/dist/node/chunk-GRR6NNWY.cjs +688 -0
- package/dist/node/chunk-GRR6NNWY.cjs.map +1 -0
- package/dist/node/chunk-H5VGRPD5.cjs +8 -0
- package/dist/node/chunk-H5VGRPD5.cjs.map +1 -0
- package/dist/node/chunk-HAMDDCPS.cjs +8 -0
- package/dist/node/chunk-HAMDDCPS.cjs.map +1 -0
- package/dist/node/chunk-HAORARSB.cjs +75 -0
- package/dist/node/chunk-HAORARSB.cjs.map +1 -0
- package/dist/node/chunk-HELNAM5Y.cjs +8 -0
- package/dist/node/chunk-HELNAM5Y.cjs.map +1 -0
- package/dist/node/chunk-HET6L5PD.mjs +530 -0
- package/dist/node/chunk-HET6L5PD.mjs.map +1 -0
- package/dist/node/chunk-HI5SEX53.mjs +264 -0
- package/dist/node/chunk-HI5SEX53.mjs.map +1 -0
- package/dist/node/chunk-HZGFXE4Q.mjs +6 -0
- package/dist/node/chunk-HZGFXE4Q.mjs.map +1 -0
- package/dist/node/chunk-IAL2NK2V.mjs +73 -0
- package/dist/node/chunk-IAL2NK2V.mjs.map +1 -0
- package/dist/node/chunk-IHELFDCW.mjs +327 -0
- package/dist/node/chunk-IHELFDCW.mjs.map +1 -0
- package/dist/node/chunk-ILD6OSYW.mjs +966 -0
- package/dist/node/chunk-ILD6OSYW.mjs.map +1 -0
- package/dist/node/chunk-IP6DFAO7.mjs +264 -0
- package/dist/node/chunk-IP6DFAO7.mjs.map +1 -0
- package/dist/node/chunk-IYEDO7OQ.cjs +276 -0
- package/dist/node/chunk-IYEDO7OQ.cjs.map +1 -0
- package/dist/node/chunk-JFPGFPQD.mjs +1413 -0
- package/dist/node/chunk-JFPGFPQD.mjs.map +1 -0
- package/dist/node/chunk-JHZGTVYF.cjs +999 -0
- package/dist/node/chunk-JHZGTVYF.cjs.map +1 -0
- package/dist/node/chunk-JN3UJBUH.mjs +608 -0
- package/dist/node/chunk-JN3UJBUH.mjs.map +1 -0
- package/dist/node/chunk-JNPDXCCN.mjs +530 -0
- package/dist/node/chunk-JNPDXCCN.mjs.map +1 -0
- package/dist/node/chunk-JQBYDEMW.mjs +1 -1
- package/dist/node/chunk-JQBYDEMW.mjs.map +1 -1
- package/dist/node/chunk-JQJ7N4NL.cjs +267 -0
- package/dist/node/chunk-JQJ7N4NL.cjs.map +1 -0
- package/dist/node/chunk-K4AJBPPY.cjs +174 -0
- package/dist/node/chunk-K4AJBPPY.cjs.map +1 -0
- package/dist/node/chunk-K7SXPJPK.cjs +131 -0
- package/dist/node/chunk-K7SXPJPK.cjs.map +1 -0
- package/dist/node/chunk-KFW4GE7H.mjs +1289 -0
- package/dist/node/chunk-KFW4GE7H.mjs.map +1 -0
- package/dist/node/chunk-KKL2DF2D.cjs +518 -0
- package/dist/node/chunk-KKL2DF2D.cjs.map +1 -0
- package/dist/node/chunk-KKMKQGTR.cjs +620 -0
- package/dist/node/chunk-KKMKQGTR.cjs.map +1 -0
- package/dist/node/chunk-KNTO7FCZ.mjs +207 -0
- package/dist/node/chunk-KNTO7FCZ.mjs.map +1 -0
- package/dist/node/chunk-KTKVW3PH.mjs +286 -0
- package/dist/node/chunk-KTKVW3PH.mjs.map +1 -0
- package/dist/node/chunk-KZPSF32W.mjs +33 -0
- package/dist/node/chunk-KZPSF32W.mjs.map +1 -0
- package/dist/node/chunk-LWKFCMA7.mjs +129 -0
- package/dist/node/chunk-LWKFCMA7.mjs.map +1 -0
- package/dist/node/chunk-M2ZSE6YJ.mjs +512 -0
- package/dist/node/chunk-M2ZSE6YJ.mjs.map +1 -0
- package/dist/node/chunk-M6DJYGDO.cjs +167 -0
- package/dist/node/chunk-M6DJYGDO.cjs.map +1 -0
- package/dist/node/chunk-MAHKDTOQ.mjs +3 -0
- package/dist/node/chunk-MAHKDTOQ.mjs.map +1 -0
- package/dist/node/chunk-MM2R2OM6.cjs +541 -0
- package/dist/node/chunk-MM2R2OM6.cjs.map +1 -0
- package/dist/node/chunk-MSOD5UQH.cjs +45 -0
- package/dist/node/chunk-MSOD5UQH.cjs.map +1 -0
- package/dist/node/chunk-MVAWR76Q.cjs +276 -0
- package/dist/node/chunk-MVAWR76Q.cjs.map +1 -0
- package/dist/node/chunk-MXUO7OR5.cjs +97 -0
- package/dist/node/chunk-MXUO7OR5.cjs.map +1 -0
- package/dist/node/chunk-N4THTV6P.cjs +131 -0
- package/dist/node/chunk-N4THTV6P.cjs.map +1 -0
- package/dist/node/chunk-NIXKAQVP.cjs +1 -1
- package/dist/node/chunk-NIXKAQVP.cjs.map +1 -1
- package/dist/node/chunk-NUPXUUPM.cjs +1428 -0
- package/dist/node/chunk-NUPXUUPM.cjs.map +1 -0
- package/dist/node/chunk-NWOUVAIS.cjs +45 -0
- package/dist/node/chunk-NWOUVAIS.cjs.map +1 -0
- package/dist/node/chunk-OK7I5OQ3.mjs +89 -0
- package/dist/node/chunk-OK7I5OQ3.mjs.map +1 -0
- package/dist/node/chunk-OMGYXCFM.mjs +248 -0
- package/dist/node/chunk-OMGYXCFM.mjs.map +1 -0
- package/dist/node/chunk-OYC6L5NX.mjs +6 -0
- package/dist/node/chunk-OYC6L5NX.mjs.map +1 -0
- package/dist/node/chunk-OYZAQMKD.mjs +263 -0
- package/dist/node/chunk-OYZAQMKD.mjs.map +1 -0
- package/dist/node/chunk-P2LULMNL.cjs +189 -0
- package/dist/node/chunk-P2LULMNL.cjs.map +1 -0
- package/dist/node/chunk-PABEFHCO.mjs +63 -0
- package/dist/node/chunk-PABEFHCO.mjs.map +1 -0
- package/dist/node/chunk-Q5NYJQP2.cjs +8 -0
- package/dist/node/chunk-Q5NYJQP2.cjs.map +1 -0
- package/dist/node/chunk-QCEWWJ3N.cjs +65 -0
- package/dist/node/chunk-QCEWWJ3N.cjs.map +1 -0
- package/dist/node/chunk-QW4AZ3Z2.cjs +542 -0
- package/dist/node/chunk-QW4AZ3Z2.cjs.map +1 -0
- package/dist/node/chunk-R2H234YO.cjs +8 -0
- package/dist/node/chunk-R2H234YO.cjs.map +1 -0
- package/dist/node/chunk-RK5WSZ5J.mjs +43 -0
- package/dist/node/chunk-RK5WSZ5J.mjs.map +1 -0
- package/dist/node/chunk-RPHYBPXT.mjs +30 -0
- package/dist/node/chunk-RPHYBPXT.mjs.map +1 -0
- package/dist/node/chunk-RVXASBMQ.mjs +273 -0
- package/dist/node/chunk-RVXASBMQ.mjs.map +1 -0
- package/dist/node/chunk-RVZTZD32.mjs +187 -0
- package/dist/node/chunk-RVZTZD32.mjs.map +1 -0
- package/dist/node/chunk-RWLKISZQ.mjs +273 -0
- package/dist/node/chunk-RWLKISZQ.mjs.map +1 -0
- package/dist/node/chunk-SDKIJDMH.mjs +655 -0
- package/dist/node/chunk-SDKIJDMH.mjs.map +1 -0
- package/dist/node/chunk-SESXQJDD.cjs +999 -0
- package/dist/node/chunk-SESXQJDD.cjs.map +1 -0
- package/dist/node/chunk-SKIEPTFS.mjs +6 -0
- package/dist/node/chunk-SKIEPTFS.mjs.map +1 -0
- package/dist/node/chunk-SL7FT5R5.mjs +94 -0
- package/dist/node/chunk-SL7FT5R5.mjs.map +1 -0
- package/dist/node/chunk-SXHQW74T.mjs +43 -0
- package/dist/node/chunk-SXHQW74T.mjs.map +1 -0
- package/dist/node/chunk-TEJKDVNT.cjs +620 -0
- package/dist/node/chunk-TEJKDVNT.cjs.map +1 -0
- package/dist/node/chunk-TQS5WYND.cjs +352 -0
- package/dist/node/chunk-TQS5WYND.cjs.map +1 -0
- package/dist/node/chunk-UCAWV2IG.mjs +184 -0
- package/dist/node/chunk-UCAWV2IG.mjs.map +1 -0
- package/dist/node/chunk-UDUJDEAO.cjs +189 -0
- package/dist/node/chunk-UDUJDEAO.cjs.map +1 -0
- package/dist/node/chunk-VMJDL4SS.cjs +542 -0
- package/dist/node/chunk-VMJDL4SS.cjs.map +1 -0
- package/dist/node/chunk-VNOZTB3B.cjs +8 -0
- package/dist/node/chunk-VNOZTB3B.cjs.map +1 -0
- package/dist/node/chunk-VPMBZGYR.mjs +327 -0
- package/dist/node/chunk-VPMBZGYR.mjs.map +1 -0
- package/dist/node/chunk-WEPNBKOA.mjs +6 -0
- package/dist/node/chunk-WEPNBKOA.mjs.map +1 -0
- package/dist/node/chunk-WTBRJXFG.cjs +100 -0
- package/dist/node/chunk-WTBRJXFG.cjs.map +1 -0
- package/dist/node/chunk-WXCQCHAX.mjs +3 -0
- package/dist/node/chunk-WXCQCHAX.mjs.map +1 -0
- package/dist/node/chunk-X3TRPYGV.cjs +352 -0
- package/dist/node/chunk-X3TRPYGV.cjs.map +1 -0
- package/dist/node/chunk-XFUF7SDO.cjs +35 -0
- package/dist/node/chunk-XFUF7SDO.cjs.map +1 -0
- package/dist/node/chunk-XP2EPEBM.mjs +966 -0
- package/dist/node/chunk-XP2EPEBM.mjs.map +1 -0
- package/dist/node/chunk-XPIJ6BKP.cjs +45 -0
- package/dist/node/chunk-XPIJ6BKP.cjs.map +1 -0
- package/dist/node/chunk-YRVBMP7I.cjs +542 -0
- package/dist/node/chunk-YRVBMP7I.cjs.map +1 -0
- package/dist/node/chunk-ZIHSN5EE.mjs +530 -0
- package/dist/node/chunk-ZIHSN5EE.mjs.map +1 -0
- package/dist/node/chunk-ZNQMUU7I.cjs +32 -0
- package/dist/node/chunk-ZNQMUU7I.cjs.map +1 -0
- package/dist/node/completion.cjs +23 -0
- package/dist/node/completion.cjs.map +1 -0
- package/dist/node/completion.d.mts +10 -0
- package/dist/node/completion.d.ts +10 -0
- package/dist/node/completion.mjs +6 -0
- package/dist/node/completion.mjs.map +1 -0
- package/dist/node/core.cjs +69 -42
- package/dist/node/core.cjs.map +1 -1
- package/dist/node/core.d.mts +14 -9
- package/dist/node/core.d.ts +14 -9
- package/dist/node/core.mjs +60 -33
- package/dist/node/core.mjs.map +1 -1
- package/dist/node/credentials.cjs +17 -0
- package/dist/node/credentials.cjs.map +1 -0
- package/dist/node/credentials.d.mts +74 -0
- package/dist/node/credentials.d.ts +74 -0
- package/dist/node/credentials.mjs +4 -0
- package/dist/node/credentials.mjs.map +1 -0
- package/dist/node/definition.cjs +6 -4
- package/dist/node/definition.d.mts +3 -2
- package/dist/node/definition.d.ts +3 -2
- package/dist/node/definition.mjs +4 -2
- package/dist/node/dynamic-content.cjs +30 -0
- package/dist/node/dynamic-content.cjs.map +1 -0
- package/dist/node/dynamic-content.d.mts +13 -0
- package/dist/node/dynamic-content.d.ts +13 -0
- package/dist/node/dynamic-content.mjs +9 -0
- package/dist/node/dynamic-content.mjs.map +1 -0
- package/dist/node/dynamic-feature.cjs +41 -7
- package/dist/node/dynamic-feature.cjs.map +1 -1
- package/dist/node/dynamic-feature.d.mts +66 -6
- package/dist/node/dynamic-feature.d.ts +66 -6
- package/dist/node/dynamic-feature.mjs +16 -9
- package/dist/node/dynamic-feature.mjs.map +1 -1
- package/dist/node/dynamic-structure.cjs +45 -136
- package/dist/node/dynamic-structure.cjs.map +1 -1
- package/dist/node/dynamic-structure.d.mts +77 -3
- package/dist/node/dynamic-structure.d.ts +77 -3
- package/dist/node/dynamic-structure.mjs +16 -135
- package/dist/node/dynamic-structure.mjs.map +1 -1
- package/dist/node/env.cjs +3 -3
- package/dist/node/env.d.mts +26 -0
- package/dist/node/env.d.ts +26 -0
- package/dist/node/env.mjs +2 -2
- package/dist/node/frame-index.cjs +7 -4
- package/dist/node/frame-index.d.mts +70 -9
- package/dist/node/frame-index.d.ts +70 -9
- package/dist/node/frame-index.mjs +6 -3
- package/dist/node/logger.d.mts +4 -113
- package/dist/node/logger.d.ts +4 -113
- package/dist/node/models.cjs +14 -0
- package/dist/node/models.cjs.map +1 -0
- package/dist/node/models.d.mts +64 -0
- package/dist/node/models.d.ts +64 -0
- package/dist/node/models.mjs +5 -0
- package/dist/node/models.mjs.map +1 -0
- package/dist/node/namespace.cjs +7 -5
- package/dist/node/namespace.d.mts +1 -1
- package/dist/node/namespace.d.ts +1 -1
- package/dist/node/namespace.mjs +4 -2
- package/dist/node/schema.cjs +22 -0
- package/dist/node/schema.cjs.map +1 -0
- package/dist/node/schema.d.mts +10 -0
- package/dist/node/schema.d.ts +10 -0
- package/dist/node/schema.mjs +5 -0
- package/dist/node/schema.mjs.map +1 -0
- package/dist/node/segment.cjs +25 -0
- package/dist/node/segment.cjs.map +1 -0
- package/dist/node/segment.d.mts +13 -0
- package/dist/node/segment.d.ts +13 -0
- package/dist/node/segment.mjs +8 -0
- package/dist/node/segment.mjs.map +1 -0
- package/dist/node/storage.cjs +17 -14
- package/dist/node/storage.d.mts +18 -6
- package/dist/node/storage.d.ts +18 -6
- package/dist/node/storage.mjs +11 -8
- package/dist/node/vector.cjs +2 -2
- package/dist/node/vector.d.mts +7 -0
- package/dist/node/vector.d.ts +7 -0
- package/dist/node/vector.mjs +1 -1
- package/examples/article/main.ts +358 -0
- package/examples/components.ts +660 -0
- package/examples/feature/file-system.components.ts +211 -0
- package/examples/feature/main.ts +374 -0
- package/examples/interaction/main.ts +426 -0
- package/examples/logger.ts +126 -0
- package/examples/structure/main.ts +195 -0
- package/examples/structure/renderer.ts +296 -0
- package/examples/structure/server-app.components.ts +387 -0
- package/jest.config.browser.ts +9 -0
- package/jest.config.examples.ts +49 -0
- package/jest.config.integration.ts +38 -0
- package/jest.config.ts +56 -27
- package/jest.config.unit.ts +38 -0
- package/package.json +75 -7
- package/src/index.ts +13 -0
- package/src/lib/A-Frame/A-Frame.component.env-browser.ts +19 -6
- package/src/lib/A-Frame/A-Frame.component.env-node.ts +48 -19
- package/src/lib/A-Frame/A-Frame.context.ts +9 -8
- package/src/lib/A-Frame/decorators/A-FrameDefine.decorator.ts +4 -4
- package/src/lib/A-FrameBundle/A-FrameBundle.builder.env-node.ts +95 -25
- package/src/lib/A-FrameBundle/A-FrameBundle.constants.ts +1 -1
- package/src/lib/A-FrameBundle/A-FrameBundle.types.ts +54 -13
- package/src/lib/A-FrameBundle/index.browser.ts +1 -1
- package/src/lib/A-FrameBundle/index.ts +1 -1
- package/src/lib/A-FrameCLI/A-FrameCLI.container.ts +18 -7
- package/src/lib/A-FrameChannel/A-FrameChannel.component.env-browser.ts +0 -2
- package/src/lib/A-FrameChannel/A-FrameChannel.component.env-node.ts +14 -15
- package/src/lib/A-FrameChannel/A-FrameChannel.component.ts +542 -7
- package/src/lib/A-FrameChannel/A-FrameChannel.constants.ts +2 -0
- package/src/lib/A-FrameChannel/A-FrameChannel.types.ts +65 -1
- package/src/lib/A-FrameChannel/A-FrameChannelDsgStream.entity.ts +112 -0
- package/src/lib/A-FrameChannel/A-FrameChannelStream.entity.ts +1 -0
- package/src/lib/A-FrameChannel/index.browser.ts +5 -0
- package/src/lib/A-FrameCompletion/A-FrameCompletion.constants.ts +3 -0
- package/src/lib/A-FrameCompletion/A-FrameCompletion.entity.ts +128 -0
- package/src/lib/A-FrameCompletion/A-FrameCompletion.types.ts +40 -0
- package/src/lib/A-FrameCompletion/index.ts +3 -0
- package/src/lib/A-FrameCredentials/A-FrameCredentials.constants.ts +5 -0
- package/src/lib/A-FrameCredentials/A-FrameCredentials.entity.ts +120 -0
- package/src/lib/A-FrameCredentials/A-FrameCredentials.types.ts +39 -0
- package/src/lib/A-FrameCredentials/index.ts +3 -0
- package/src/lib/A-FrameDefinition/A-FrameDefinition.entity.ts +23 -1
- package/src/lib/A-FrameDefinition/A-FrameDefinition.types.ts +34 -1
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.constants.ts +5 -0
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.entity.ts +348 -0
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.error.ts +10 -0
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContent.types.ts +116 -0
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContentIndex.context.ts +288 -0
- package/src/lib/A-FrameDynamicContent/A-FrameDynamicContentOperation.context.ts +26 -0
- package/src/lib/A-FrameDynamicContent/index.ts +5 -0
- package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.constants.ts +6 -0
- package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.entity.ts +253 -4
- package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.error.ts +11 -0
- package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeature.types.ts +188 -4
- package/src/lib/A-FrameDynamicFeature/A-FrameDynamicFeatureOperation.context.ts +33 -0
- package/src/lib/A-FrameDynamicFeature/A-FrameMethodMapIndex.context.ts +99 -0
- package/src/lib/A-FrameDynamicFeature/A-FrameMethodMapper.component.ts +182 -0
- package/src/lib/A-FrameDynamicFeature/index.ts +6 -1
- package/src/lib/A-FrameDynamicPatch/index.ts +2 -0
- package/src/lib/A-FrameDynamicStructure/A-FrameComponentMapIndex.context.ts +99 -0
- package/src/lib/A-FrameDynamicStructure/A-FrameComponentMapper.component.ts +320 -0
- package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.constants.ts +2 -1
- package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.entity.ts +240 -128
- package/src/lib/A-FrameDynamicStructure/A-FrameDynamicStructure.types.ts +183 -87
- package/src/lib/A-FrameDynamicStructure/index.ts +3 -0
- package/src/lib/A-FrameEnv/A-FrameEnv.fragment.env-browser.ts +5 -1
- package/src/lib/A-FrameEnv/A-FrameEnv.fragment.env-node.ts +23 -1
- package/src/lib/A-FrameEnv/A-FrameEnv.types.ts +12 -0
- package/src/lib/A-FrameIndex/A-FrameIndex.context.ts +63 -13
- package/src/lib/A-FrameIndex/A-FrameIndex.types.ts +53 -0
- package/src/lib/A-FrameModels/A-FrameModels.constants.ts +75 -0
- package/src/lib/A-FrameModels/index.ts +1 -0
- package/src/lib/A-FrameNamespace/A-FrameNamespace.entity.ts +10 -3
- package/src/lib/A-FrameNamespace/A-FrameNamespace.types.ts +5 -0
- package/src/lib/A-FrameSchema/A-FrameSchema.constants.ts +4 -0
- package/src/lib/A-FrameSchema/A-FrameSchema.entity.ts +154 -0
- package/src/lib/A-FrameSchema/A-FrameSchema.types.ts +88 -0
- package/src/lib/A-FrameSchema/index.ts +3 -0
- package/src/lib/A-FrameSegment/A-FrameSegment.constants.ts +12 -0
- package/src/lib/A-FrameSegment/A-FrameSegment.entity.ts +221 -0
- package/src/lib/A-FrameSegment/A-FrameSegment.types.ts +91 -0
- package/src/lib/A-FrameSegment/index.ts +3 -0
- package/src/lib/A-FrameStorage/A-FrameStorage.codec.ts +10 -4
- package/src/lib/A-FrameStorage/browser/A-FrameBrowserStorage.component.ts +21 -0
- package/src/lib/A-FrameStorage/browser/A-FrameBrowserStorageBlobs.context.ts +39 -21
- package/src/lib/A-FrameStorage/node/A-FrameNodeStorage.component.ts +124 -42
- package/src/lib/A-FrameVector/A-FrameVector.entity.ts +24 -0
- package/tests/A-Frame.browser.test.ts +167 -57
- package/tests/A-FrameDynamicContent.browser.test.ts +74 -0
- package/tests/integration/A-Frame.integration.test.ts +272 -0
- package/tests/integration/A-FrameCompletion.integration.test.ts +88 -0
- package/tests/integration/A-FrameContentMapping.integration.test.ts +261 -0
- package/tests/integration/A-FrameDefinition.integration.test.ts +154 -0
- package/tests/integration/A-FrameDynamicContent.integration.test.ts +126 -0
- package/tests/integration/A-FrameDynamicFeature.integration.test.ts +337 -0
- package/tests/integration/A-FrameDynamicStructure.integration.test.ts +264 -0
- package/tests/integration/A-FrameNamespace.integration.test.ts +109 -0
- package/tests/integration/A-FrameSchema.integration.test.ts +74 -0
- package/tests/integration/A-FrameSegment.integration.test.ts +102 -0
- package/tests/integration/A-FrameStorage.integration.test.ts +598 -0
- package/tests/jest.setup.browser.ts +1 -1
- package/tests/jest.setup.ts +4 -0
- package/tests/jest.setup.unit.ts +30 -0
- package/tests/unit/A-FrameChannel.unit.test.ts +124 -0
- package/tests/unit/A-FrameCompletion.unit.test.ts +25 -0
- package/tests/unit/A-FrameDefinition.unit.test.ts +36 -0
- package/tests/unit/A-FrameDynamicContent.unit.test.ts +28 -0
- package/tests/unit/A-FrameNamespace.unit.test.ts +35 -0
- package/tests/unit/A-FrameSchema.unit.test.ts +31 -0
- package/tests/unit/A-FrameSegment.unit.test.ts +20 -0
- package/tests/unit/mocks/MockA_FrameChannel.ts +112 -0
- package/tsconfig.browser.json +2 -0
- package/tsconfig.json +6 -0
- package/tsup.config.ts +52 -0
- package/tests/A-Frame.test.ts +0 -96
|
@@ -1,94 +1,204 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A-Frame Browser Bundle Tests
|
|
3
|
+
*
|
|
4
|
+
* Validates the pre-built bundle flow:
|
|
5
|
+
* 1. Build an in-memory A_FrameBundle with synthetic (but valid) vectors.
|
|
6
|
+
* 2. Seed A_FrameBrowserStorageBlobs from the bundle (no server needed).
|
|
7
|
+
* 3. Load the concept — definitions are hydrated from the plain record store.
|
|
8
|
+
* 4. Run a cosine-similarity search against the hydrated index.
|
|
9
|
+
*
|
|
10
|
+
* No network calls, no encryption key, no server required.
|
|
11
|
+
*/
|
|
12
|
+
import { A_Component, A_Concept, A_Container, A_Context, A_Error } from "@adaas/a-concept";
|
|
2
13
|
import { A_Frame } from "@adaas/a-frame/core";
|
|
3
|
-
import { config } from 'dotenv';
|
|
4
14
|
import { A_FrameIndex } from "@adaas/a-frame/index";
|
|
5
|
-
import { A_FrameBrowserChannel } from "@adaas/a-frame/channel";
|
|
6
15
|
import { A_FrameVector } from "@adaas/a-frame/vector";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
import { A_FrameBrowserStorageBlobs } from '../src/lib/A-FrameStorage/browser/A-FrameBrowserStorageBlobs.context';
|
|
17
|
+
import type { A_FrameBundle } from "@adaas/a-frame/bundle";
|
|
18
|
+
import { A_FRAME_BUNDLE_VERSION } from "@adaas/a-frame/bundle";
|
|
19
|
+
import { A_FrameTargetType } from '../src/lib/A-Frame/A-Frame.types';
|
|
20
|
+
|
|
21
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
22
|
+
|
|
23
|
+
/** Generate a normalised random unit vector of a given dimension. */
|
|
24
|
+
function makeVector(dims: number, seed: number): number[] {
|
|
25
|
+
const v = Array.from({ length: dims }, (_, i) => Math.sin(seed * 13.7 + i * 0.37));
|
|
26
|
+
const norm = Math.sqrt(v.reduce((s, x) => s + x * x, 0));
|
|
27
|
+
return v.map(x => x / norm);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Build a synthetic A_FrameBundle with the supplied definition descriptors. */
|
|
31
|
+
function makeSyntheticBundle(
|
|
32
|
+
defs: Array<{ aseid: string; name: string; description: string; namespace: string; hash: string; seed: number }>,
|
|
33
|
+
dims = 64,
|
|
34
|
+
): A_FrameBundle {
|
|
35
|
+
const records: A_FrameBundle['records'] = {};
|
|
36
|
+
|
|
37
|
+
for (const d of defs) {
|
|
38
|
+
const rec = {
|
|
39
|
+
aseid: d.aseid,
|
|
40
|
+
name: d.name,
|
|
41
|
+
hash: d.hash,
|
|
42
|
+
type: A_FrameTargetType.COMPONENT,
|
|
43
|
+
description: d.description,
|
|
44
|
+
namespace: d.namespace,
|
|
45
|
+
embedding: makeVector(dims, d.seed),
|
|
46
|
+
date: new Date().toISOString(),
|
|
47
|
+
model: 'adaas-antares-v1',
|
|
48
|
+
credentialId: 'test-cred',
|
|
49
|
+
aFrameVersion: '0.1.1',
|
|
50
|
+
aFrameServerVersion: '1.0.0',
|
|
51
|
+
};
|
|
52
|
+
(records[d.namespace] ??= []).push(rec);
|
|
15
53
|
}
|
|
16
54
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
55
|
+
return {
|
|
56
|
+
bundleVersion: A_FRAME_BUNDLE_VERSION,
|
|
57
|
+
aFrameVersion: '0.1.1',
|
|
58
|
+
serverVersion: '1.0.0',
|
|
59
|
+
builtAt: new Date().toISOString(),
|
|
60
|
+
records,
|
|
61
|
+
namespaceRecords: [],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ─── Component definitions ────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
@A_Frame.Define({
|
|
68
|
+
description: 'Handles HTTP requests and response formatting for the REST API layer. Use this for routing, middleware, request validation, and sending responses.',
|
|
69
|
+
})
|
|
70
|
+
class ComponentA extends A_Component { }
|
|
71
|
+
|
|
72
|
+
@A_Frame.Define({
|
|
73
|
+
description: 'Manages database connections and performs CRUD operations on persistent storage. Use this for querying, inserting, updating, and deleting records.',
|
|
74
|
+
})
|
|
75
|
+
class ComponentB extends A_Component { }
|
|
76
|
+
|
|
77
|
+
@A_Frame.Define({
|
|
78
|
+
description: 'Orchestrates business logic and coordinates between the HTTP layer and the database layer. Use this for processing rules, validation, and transformations.',
|
|
79
|
+
})
|
|
80
|
+
class ComponentC extends A_Component { }
|
|
81
|
+
|
|
82
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
83
|
+
|
|
84
|
+
describe('A-Frame Browser Bundle Tests', () => {
|
|
85
|
+
|
|
86
|
+
let bundle: A_FrameBundle;
|
|
87
|
+
|
|
88
|
+
beforeAll(() => {
|
|
89
|
+
// Definitions are registered in A_FrameIndex.instance at class-decoration
|
|
90
|
+
// time (when @A_Frame.Define runs). Use the singleton directly — no DI
|
|
91
|
+
// resolution needed; no concept.load() required.
|
|
92
|
+
const defs = A_FrameIndex.instance.listDefinitions();
|
|
93
|
+
|
|
94
|
+
// Build bundle records using the real hash so the hash-check inside
|
|
95
|
+
// loadDefinitionFromBlobs() succeeds and fromJSON() is actually called.
|
|
96
|
+
const bundleDefs = defs.map((def, i) => ({
|
|
97
|
+
aseid: def.aseid.toString(),
|
|
98
|
+
name: def.name,
|
|
99
|
+
description: def.description ?? '',
|
|
100
|
+
namespace: def.namespace.id,
|
|
101
|
+
hash: def.hash,
|
|
102
|
+
seed: i + 1,
|
|
103
|
+
}));
|
|
104
|
+
|
|
105
|
+
bundle = makeSyntheticBundle(bundleDefs);
|
|
106
|
+
});
|
|
21
107
|
|
|
22
|
-
|
|
108
|
+
it('Bundle is seeded correctly into BrowserStorageBlobs', () => {
|
|
109
|
+
// Seed and verify plain store is populated
|
|
110
|
+
const blobs = A_FrameBrowserStorageBlobs.fromBundle(bundle);
|
|
23
111
|
|
|
24
|
-
|
|
25
|
-
description: 'Orchestrates business logic and coordinates between the HTTP layer and the database layer. Use this for processing rules, validation, and transformations.',
|
|
26
|
-
})
|
|
27
|
-
class ComponentC extends A_Component {
|
|
112
|
+
expect(blobs.hasBundleData).toBe(true);
|
|
28
113
|
|
|
29
|
-
|
|
114
|
+
const nsKeys = Array.from(blobs.plainStore.keys());
|
|
115
|
+
expect(nsKeys.length).toBeGreaterThan(0);
|
|
30
116
|
|
|
31
|
-
|
|
117
|
+
for (const [ns, recs] of blobs.plainStore) {
|
|
118
|
+
for (const r of recs) {
|
|
119
|
+
expect(r.embedding).toBeInstanceOf(Float32Array);
|
|
120
|
+
expect((r.embedding as Float32Array).length).toBe(64);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('Definitions are hydrated from bundle on concept.load()', async () => {
|
|
32
126
|
try {
|
|
127
|
+
// Seed blobs before creating the concept
|
|
128
|
+
A_FrameBrowserStorageBlobs.fromBundle(bundle);
|
|
129
|
+
|
|
33
130
|
const concept = new A_Concept({
|
|
34
|
-
name: '
|
|
35
|
-
components: [A_Frame
|
|
131
|
+
name: 'BundleTest',
|
|
132
|
+
components: [A_Frame],
|
|
36
133
|
containers: [
|
|
37
134
|
new A_Container({
|
|
38
|
-
name: 'Container
|
|
39
|
-
components: [ComponentA, ComponentB, ComponentC]
|
|
40
|
-
})
|
|
41
|
-
]
|
|
42
|
-
})
|
|
135
|
+
name: 'Container',
|
|
136
|
+
components: [ComponentA, ComponentB, ComponentC],
|
|
137
|
+
}),
|
|
138
|
+
],
|
|
139
|
+
});
|
|
43
140
|
|
|
44
141
|
await concept.load();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
142
|
+
|
|
143
|
+
const index = concept.scope.resolve(A_FrameIndex)!;
|
|
144
|
+
const definitions = index.listDefinitions();
|
|
145
|
+
|
|
146
|
+
console.log(`\n [bundle] ${definitions.length} definition(s) indexed`);
|
|
147
|
+
for (const def of definitions) {
|
|
148
|
+
console.log(` • ${def.name}: isEmbed=${def.isEmbed} dims=${def.vector?.dimensions ?? 'NONE'}`);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
expect(definitions.length).toBe(3);
|
|
152
|
+
for (const def of definitions) {
|
|
153
|
+
expect(def.isEmbed).toBe(true);
|
|
154
|
+
expect(def.vector).toBeDefined();
|
|
155
|
+
expect(def.vector!.dimensions).toBe(64);
|
|
50
156
|
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
51
159
|
throw error;
|
|
52
160
|
}
|
|
53
161
|
});
|
|
54
162
|
|
|
55
|
-
it('
|
|
163
|
+
it('Index search returns results after bundle hydration', async () => {
|
|
56
164
|
try {
|
|
165
|
+
A_FrameBrowserStorageBlobs.fromBundle(bundle);
|
|
166
|
+
|
|
57
167
|
const concept = new A_Concept({
|
|
58
|
-
name: '
|
|
59
|
-
components: [A_Frame
|
|
168
|
+
name: 'BundleSearchTest',
|
|
169
|
+
components: [A_Frame],
|
|
60
170
|
containers: [
|
|
61
171
|
new A_Container({
|
|
62
|
-
name: 'Container
|
|
63
|
-
components: [ComponentA, ComponentB, ComponentC]
|
|
64
|
-
})
|
|
65
|
-
]
|
|
66
|
-
})
|
|
172
|
+
name: 'Container',
|
|
173
|
+
components: [ComponentA, ComponentB, ComponentC],
|
|
174
|
+
}),
|
|
175
|
+
],
|
|
176
|
+
});
|
|
67
177
|
|
|
68
178
|
await concept.load();
|
|
69
179
|
|
|
70
180
|
const index = concept.scope.resolve(A_FrameIndex)!;
|
|
71
|
-
const channel = concept.scope.resolve(A_FrameBrowserChannel)!;
|
|
72
|
-
|
|
73
|
-
const query = "I need to apply some business rules and validate data before saving";
|
|
74
|
-
|
|
75
|
-
const result = await channel.embed(query);
|
|
76
181
|
|
|
77
|
-
|
|
182
|
+
// Use ComponentA's own vector as query — it should rank first
|
|
183
|
+
const compA = index.listDefinitions().find(d => d.name === ComponentA.name)!;
|
|
184
|
+
expect(compA).toBeDefined();
|
|
78
185
|
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
});
|
|
186
|
+
const queryVector = new A_FrameVector(compA.vector!.values.slice());
|
|
187
|
+
const results = index.search(queryVector, { topK: 3 });
|
|
82
188
|
|
|
83
|
-
console.log(
|
|
189
|
+
console.log('\n [search]');
|
|
190
|
+
results.forEach((r, i) =>
|
|
191
|
+
console.log(` [${i + 1}] ${r.record.name} score=${r.score.toFixed(4)}`),
|
|
192
|
+
);
|
|
84
193
|
|
|
194
|
+
expect(results.length).toBeGreaterThan(0);
|
|
195
|
+
// The top result must be ComponentA itself (cosine = 1.0)
|
|
196
|
+
expect(results[0].record.name).toBe(ComponentA.name);
|
|
197
|
+
expect(results[0].score).toBeCloseTo(1.0, 5);
|
|
85
198
|
} catch (error) {
|
|
86
|
-
if (error instanceof A_Error)
|
|
87
|
-
console.error("A_Error occurred:", error.toJSON());
|
|
88
|
-
} else {
|
|
89
|
-
console.error("Unexpected error occurred:", error);
|
|
90
|
-
}
|
|
199
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
91
200
|
throw error;
|
|
92
201
|
}
|
|
93
202
|
});
|
|
94
203
|
});
|
|
204
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { A_Concept, A_Container, A_Error } from "@adaas/a-concept";
|
|
2
|
+
import { A_Frame } from "@adaas/a-frame/core";
|
|
3
|
+
import { A_FrameDynamicContent } from "@adaas/a-frame/dynamic-content";
|
|
4
|
+
import { config } from 'dotenv';
|
|
5
|
+
|
|
6
|
+
config();
|
|
7
|
+
|
|
8
|
+
describe('A-Frame DynamicContent Browser Tests', () => {
|
|
9
|
+
|
|
10
|
+
it('Dynamic article generation and editing (browser channel)', async () => {
|
|
11
|
+
try {
|
|
12
|
+
const container = new A_Container({
|
|
13
|
+
name: 'Container A',
|
|
14
|
+
components: []
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const concept = new A_Concept({
|
|
18
|
+
name: 'Test Concept',
|
|
19
|
+
components: [A_Frame, ],
|
|
20
|
+
containers: [container]
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
await concept.load();
|
|
24
|
+
|
|
25
|
+
const article = new A_FrameDynamicContent({
|
|
26
|
+
prompt: "Write a concise article about software architecture. Cover: what it is, key principles (separation of concerns, modularity, scalability), and common patterns (layered, microservices, event-driven). Keep each section brief — 2-3 sentences.",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
container.scope.register(article);
|
|
30
|
+
|
|
31
|
+
// ── Step 1: Generate ───────────────────────────────────────────────
|
|
32
|
+
await article.generate();
|
|
33
|
+
|
|
34
|
+
console.log("=== Generated article ===");
|
|
35
|
+
console.log(article.text);
|
|
36
|
+
|
|
37
|
+
expect(article.segments.length).toBeGreaterThan(0);
|
|
38
|
+
expect(article.text.length).toBeGreaterThan(0);
|
|
39
|
+
|
|
40
|
+
const generatedText = article.text;
|
|
41
|
+
|
|
42
|
+
// ── Step 2: Add examples ───────────────────────────────────────────
|
|
43
|
+
await article.patch("Add a concrete real-world example for each architectural pattern mentioned (layered, microservices, event-driven). Insert each example directly after the section it illustrates.");
|
|
44
|
+
|
|
45
|
+
console.log("\n=== After adding examples ===");
|
|
46
|
+
console.log(article.text);
|
|
47
|
+
|
|
48
|
+
expect(article.text.length).toBeGreaterThan(generatedText.length);
|
|
49
|
+
expect(article.segments.length).toBeGreaterThanOrEqual(article.segments.length);
|
|
50
|
+
|
|
51
|
+
// ── Step 3: Modify a segment ───────────────────────────────────────
|
|
52
|
+
const textBeforeModify = article.text;
|
|
53
|
+
|
|
54
|
+
await article.patch("Rewrite the paragraph about key principles to also mention the DRY (Don't Repeat Yourself) principle. Keep the paragraph roughly the same length.");
|
|
55
|
+
|
|
56
|
+
console.log("\n=== After modifying key principles paragraph ===");
|
|
57
|
+
console.log(article.text);
|
|
58
|
+
|
|
59
|
+
const modified = article.text !== textBeforeModify;
|
|
60
|
+
console.log(`\n=== Modification verified: ${modified ? 'YES — content changed' : 'NO — unchanged (unexpected)'} ===`);
|
|
61
|
+
expect(modified).toBe(true);
|
|
62
|
+
expect(article.text.toLowerCase()).toContain('dry');
|
|
63
|
+
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (error instanceof A_Error) {
|
|
66
|
+
console.error("A_Error occurred:", error.toJSON());
|
|
67
|
+
} else {
|
|
68
|
+
console.error("Unexpected error occurred:", error);
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
}, 60 * 60 * 1000);
|
|
74
|
+
});
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { A_Component, A_Concept, A_Container, A_Context, A_Entity, A_Error, A_Fragment, A_Scope } from "@adaas/a-concept";
|
|
2
|
+
import { A_Frame } from "@adaas/a-frame/core";
|
|
3
|
+
import { config } from 'dotenv';
|
|
4
|
+
import { A_FrameIndex } from "@adaas/a-frame/index";
|
|
5
|
+
import { A_FrameChannel } from "@adaas/a-frame/channel";
|
|
6
|
+
import { A_FrameSegment } from "@adaas/a-frame/segment";
|
|
7
|
+
import { A_FrameVector } from "@adaas/a-frame/vector";
|
|
8
|
+
import { A_FRAME_MODELS } from "@adaas/a-frame/models";
|
|
9
|
+
|
|
10
|
+
config();
|
|
11
|
+
|
|
12
|
+
// Embedding 10 components via Ollama takes ~30 s on the very first run.
|
|
13
|
+
// Subsequent runs are fast: definitions are loaded from the local .aframe
|
|
14
|
+
// storage cache and re-embedding is skipped automatically.
|
|
15
|
+
// The storage layer compares hash + server version on load; if either changes
|
|
16
|
+
// (e.g. description edited or server upgraded) only the affected definitions
|
|
17
|
+
// are re-embedded — no manual cache purge needed.
|
|
18
|
+
jest.setTimeout(180_000);
|
|
19
|
+
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Component definitions — each covers a clearly distinct domain so that
|
|
22
|
+
// cosine-similarity search should unambiguously rank the correct one first.
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
@A_Frame.Define({
|
|
26
|
+
description: 'Handles HTTP requests and response formatting for the REST API layer. Use this for routing, middleware, request validation, and sending HTTP responses.',
|
|
27
|
+
})
|
|
28
|
+
class ComponentA extends A_Component { } // HTTP / REST routing
|
|
29
|
+
|
|
30
|
+
@A_Frame.Define({
|
|
31
|
+
description: 'Manages database connections and performs CRUD operations on persistent storage. Use this for querying, inserting, updating, and deleting records in a relational or NoSQL database.',
|
|
32
|
+
})
|
|
33
|
+
class ComponentB extends A_Component { } // Database / persistence
|
|
34
|
+
|
|
35
|
+
@A_Frame.Define({
|
|
36
|
+
description: 'Orchestrates business logic and coordinates between the HTTP layer and the database layer. Use this for applying processing rules, data validation, and domain-level transformations.',
|
|
37
|
+
})
|
|
38
|
+
class ComponentC extends A_Component { } // Business logic
|
|
39
|
+
|
|
40
|
+
@A_Frame.Define({
|
|
41
|
+
description: 'Handles user authentication, session management, and JWT token verification. Use this for login, logout, password hashing, token issuance, and access-control checks.',
|
|
42
|
+
})
|
|
43
|
+
class ComponentD extends A_Component { } // Auth / JWT
|
|
44
|
+
|
|
45
|
+
@A_Frame.Define({
|
|
46
|
+
description: 'Sends transactional and marketing emails, push notifications, and SMS messages to users. Use this whenever you need to notify a user via any messaging channel.',
|
|
47
|
+
})
|
|
48
|
+
class ComponentE extends A_Component { } // Notifications / Email
|
|
49
|
+
|
|
50
|
+
@A_Frame.Define({
|
|
51
|
+
description: 'Manages file uploads, downloads, and cloud blob storage operations. Use this for persisting binary assets, generating pre-signed URLs, and streaming files to/from object storage.',
|
|
52
|
+
})
|
|
53
|
+
class ComponentF extends A_Component { } // File / blob storage
|
|
54
|
+
|
|
55
|
+
@A_Frame.Define({
|
|
56
|
+
description: 'Provides in-memory and Redis-based caching to reduce latency for expensive computations. Use this to store, retrieve, and invalidate cached data with configurable TTL.',
|
|
57
|
+
})
|
|
58
|
+
class ComponentG extends A_Component { } // Cache / Redis
|
|
59
|
+
|
|
60
|
+
@A_Frame.Define({
|
|
61
|
+
description: 'Schedules and executes background jobs, recurring cron tasks, and deferred work. Use this to offload long-running processing from the request cycle.',
|
|
62
|
+
})
|
|
63
|
+
class ComponentH extends A_Component { } // Background jobs / scheduling
|
|
64
|
+
|
|
65
|
+
@A_Frame.Define({
|
|
66
|
+
description: 'Records structured audit logs, application traces, and observability events. Use this to persist user-action history, system events, and debug traces to a log store.',
|
|
67
|
+
})
|
|
68
|
+
class ComponentI extends A_Component { } // Logging / audit
|
|
69
|
+
|
|
70
|
+
@A_Frame.Define({
|
|
71
|
+
description: 'Processes payments, manages billing plans, and integrates with payment gateways such as Stripe or PayPal. Use this to charge customers, issue refunds, and handle subscription lifecycles.',
|
|
72
|
+
})
|
|
73
|
+
class ComponentJ extends A_Component { } // Payments / billing
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Helpers
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
|
|
80
|
+
async function buildConcept() {
|
|
81
|
+
const concept = new A_Concept({
|
|
82
|
+
name: 'Test Concept',
|
|
83
|
+
components: [A_Frame],
|
|
84
|
+
containers: [
|
|
85
|
+
new A_Container({
|
|
86
|
+
name: 'Container A',
|
|
87
|
+
components: [
|
|
88
|
+
ComponentA, ComponentB, ComponentC,
|
|
89
|
+
ComponentD, ComponentE, ComponentF,
|
|
90
|
+
ComponentG, ComponentH, ComponentI, ComponentJ,
|
|
91
|
+
],
|
|
92
|
+
}),
|
|
93
|
+
],
|
|
94
|
+
});
|
|
95
|
+
await concept.load();
|
|
96
|
+
return concept;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async function searchTop1(
|
|
100
|
+
scope: A_Scope,
|
|
101
|
+
index: A_FrameIndex,
|
|
102
|
+
query: string,
|
|
103
|
+
) {
|
|
104
|
+
// Wrap the query in an A_FrameSegment with task:'query' so nomic-embed-text
|
|
105
|
+
// uses its "search_query:" prefix — matching the "search_document:" prefix
|
|
106
|
+
// applied when the definitions were embedded.
|
|
107
|
+
const segment = new A_FrameSegment({ content: query, options: { task: 'query' } });
|
|
108
|
+
await segment.embed(scope);
|
|
109
|
+
|
|
110
|
+
if (!segment.vector || segment.vector.dimensions === 0) {
|
|
111
|
+
throw new Error(`Segment embedding is empty for query: "${query}".`);
|
|
112
|
+
}
|
|
113
|
+
// Query segments default to Antares model, task forced to 'query'
|
|
114
|
+
expect(segment.options?.model).toBe(A_FRAME_MODELS.ANTARES);
|
|
115
|
+
expect(segment.options?.task).toBe('query');
|
|
116
|
+
console.log(`\n [embed] model="${segment['_model'] ?? 'unknown'}" dims=${segment.vector.dimensions} task=query`);
|
|
117
|
+
|
|
118
|
+
const results = index.search(segment.vector, { topK: 3 });
|
|
119
|
+
|
|
120
|
+
console.log(` Query: "${query}"`);
|
|
121
|
+
results.forEach((r, i) =>
|
|
122
|
+
console.log(` [${i + 1}] ${r.record.name} (score: ${r.score.toFixed(4)}) — ${r.record.description?.slice(0, 60)}...`),
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
return results;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Tests
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
|
|
133
|
+
describe('A-Frame Tests', () => {
|
|
134
|
+
|
|
135
|
+
// The suite needs A_FRAME_SYNC enabled so that missing or stale
|
|
136
|
+
// definitions are embedded and saved on the first run.
|
|
137
|
+
// The storage layer's hash + server-version check handles all staleness
|
|
138
|
+
// automatically — no manual cache wipe is ever needed.
|
|
139
|
+
beforeAll(() => {
|
|
140
|
+
process.env.A_FRAME_SYNC = 'true';
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
afterAll(() => {
|
|
144
|
+
// Restore the default (jest.setup.ts value) so other test files
|
|
145
|
+
// are not affected when the suite runs in watch mode.
|
|
146
|
+
process.env.A_FRAME_SYNC = 'false';
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('Standard basic test — concept loads without errors', async () => {
|
|
150
|
+
try {
|
|
151
|
+
const concept = await buildConcept();
|
|
152
|
+
|
|
153
|
+
// Verify every definition was embedded (non-zero vector)
|
|
154
|
+
const index = concept.scope.resolve(A_FrameIndex)!;
|
|
155
|
+
const definitions = index.listDefinitions();
|
|
156
|
+
|
|
157
|
+
console.log(`\n [index] ${definitions.length} definition(s) loaded`);
|
|
158
|
+
for (const def of definitions) {
|
|
159
|
+
console.log(` • ${def.name}: vector dims=${def.vector?.dimensions ?? 'MISSING'} model="${def.model ?? 'N/A'}"`);
|
|
160
|
+
expect(def.vector).toBeDefined();
|
|
161
|
+
expect(def.vector!.dimensions).toBeGreaterThan(0);
|
|
162
|
+
// After embedding the server returns the physical model name
|
|
163
|
+
expect(typeof def.model).toBe('string');
|
|
164
|
+
expect(def.model.length).toBeGreaterThan(0);
|
|
165
|
+
// The logical model requested at definition-creation time should be Antares
|
|
166
|
+
expect(def.requestedModel).toBe(A_FRAME_MODELS.ANTARES);
|
|
167
|
+
}
|
|
168
|
+
} catch (error) {
|
|
169
|
+
if (error instanceof A_Error) console.error("A_Error:", error.toJSON());
|
|
170
|
+
else console.error("Unexpected error:", error);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('Should allow to do search in index', async () => {
|
|
176
|
+
try {
|
|
177
|
+
const concept = await buildConcept();
|
|
178
|
+
const index = concept.scope.resolve(A_FrameIndex)!;
|
|
179
|
+
|
|
180
|
+
const results = await searchTop1(
|
|
181
|
+
concept.scope, index,
|
|
182
|
+
"I need to apply some business rules and validate data before saving",
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
expect(results.length).toBeGreaterThan(0);
|
|
186
|
+
expect(results[0].record.name).toBe('ComponentC');
|
|
187
|
+
} catch (error) {
|
|
188
|
+
if (error instanceof A_Error) console.error("A_Error:", error.toJSON());
|
|
189
|
+
else console.error("Unexpected error:", error);
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// -----------------------------------------------------------------------
|
|
195
|
+
// Parametrised search-accuracy cases
|
|
196
|
+
// -----------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
const searchCases: Array<{ query: string; expectedComponent: string }> = [
|
|
199
|
+
{
|
|
200
|
+
query: "Route an incoming HTTP POST request and send a JSON response",
|
|
201
|
+
expectedComponent: 'ComponentA',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
query: "Insert a new record into the database and query existing ones",
|
|
205
|
+
expectedComponent: 'ComponentB',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
query: "Apply domain validation rules and orchestrate the processing pipeline",
|
|
209
|
+
expectedComponent: 'ComponentC',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
query: "Verify a JWT token and check whether the user is authorised to access this resource",
|
|
213
|
+
expectedComponent: 'ComponentD',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
query: "Send a welcome email and a push notification to a newly registered user",
|
|
217
|
+
expectedComponent: 'ComponentE',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
query: "Upload an image to cloud object storage and generate a pre-signed download URL",
|
|
221
|
+
expectedComponent: 'ComponentF',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
query: "Reduce latency by serving hot data from an in-memory Redis cache with TTL-based eviction",
|
|
225
|
+
expectedComponent: 'ComponentG',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
query: "Schedule a background task to process a report asynchronously after midnight",
|
|
229
|
+
expectedComponent: 'ComponentH',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
query: "Record an audit trail entry whenever a user modifies sensitive data",
|
|
233
|
+
expectedComponent: 'ComponentI',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
query: "Charge a customer's credit card and handle a payment failure with a refund",
|
|
237
|
+
expectedComponent: 'ComponentJ',
|
|
238
|
+
},
|
|
239
|
+
];
|
|
240
|
+
|
|
241
|
+
describe('Search accuracy — each query should return the correct component as the top result', () => {
|
|
242
|
+
|
|
243
|
+
// jest.setup.ts calls A_Context.reset() BEFORE EACH test, which wipes
|
|
244
|
+
// the root scope. We rebuild the concept in beforeEach so the index
|
|
245
|
+
// and channel are re-registered. Subsequent buildConcept() calls are
|
|
246
|
+
// fast because A_FrameNodeStorage loads definitions from the .aframe
|
|
247
|
+
// cache files on disk and skips the embedding API call entirely.
|
|
248
|
+
let index: A_FrameIndex;
|
|
249
|
+
let scope: A_Scope;
|
|
250
|
+
|
|
251
|
+
beforeEach(async () => {
|
|
252
|
+
const concept = await buildConcept();
|
|
253
|
+
index = concept.scope.resolve(A_FrameIndex)!;
|
|
254
|
+
scope = concept.scope;
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test.each(searchCases)(
|
|
258
|
+
'$query → $expectedComponent',
|
|
259
|
+
async ({ query, expectedComponent }) => {
|
|
260
|
+
const results = await searchTop1(scope, index, query);
|
|
261
|
+
|
|
262
|
+
expect(results.length).toBeGreaterThan(0);
|
|
263
|
+
|
|
264
|
+
const topResult = results[0];
|
|
265
|
+
expect(topResult.record.name).toBe(expectedComponent);
|
|
266
|
+
|
|
267
|
+
// Sanity-check: top score should be meaningfully higher than 0
|
|
268
|
+
expect(topResult.score).toBeGreaterThan(0.1);
|
|
269
|
+
},
|
|
270
|
+
);
|
|
271
|
+
});
|
|
272
|
+
});
|