@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
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { A_Component, A_Concept, A_Container, A_Error, A_Fragment } from '@adaas/a-concept';
|
|
2
|
+
import { A_Frame } from '@adaas/a-frame/core';
|
|
3
|
+
import { A_FrameIndex } from '@adaas/a-frame/index';
|
|
4
|
+
import { config } from 'dotenv';
|
|
5
|
+
import { A_FrameDynamicFeature, A_FrameDynamicFeatureMapResult } from '@adaas/a-frame/dynamic-feature';
|
|
6
|
+
import { A_FRAME_MODELS } from '@adaas/a-frame/models';
|
|
7
|
+
|
|
8
|
+
config();
|
|
9
|
+
|
|
10
|
+
jest.setTimeout(60 * 60 * 1000);
|
|
11
|
+
|
|
12
|
+
// ─── Test domain: User management + task workflow ─────────────────────────────
|
|
13
|
+
//
|
|
14
|
+
// Service components with methods decorated via @A_Frame.Define so they are
|
|
15
|
+
// embedded and indexed. The DynamicFeature mapper resolves each workflow step
|
|
16
|
+
// to a concrete class + method using cosine-similarity lookup.
|
|
17
|
+
|
|
18
|
+
// ── Components ────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
@A_Frame.Define({
|
|
21
|
+
description: 'A service component that manages user accounts: registers new users, fetches user profiles, updates contact information, and handles account deactivation.',
|
|
22
|
+
})
|
|
23
|
+
class UserService extends A_Component {
|
|
24
|
+
|
|
25
|
+
@A_Frame.Define({
|
|
26
|
+
description: 'Creates a new user account from the provided registration details: validates uniqueness of email, hashes the password, persists the UserEntity, and returns the created user.',
|
|
27
|
+
})
|
|
28
|
+
createUser(): void {}
|
|
29
|
+
|
|
30
|
+
@A_Frame.Define({
|
|
31
|
+
description: 'Retrieves an existing user account by its unique identifier. Returns the full UserEntity including profile data, or throws if the user is not found.',
|
|
32
|
+
})
|
|
33
|
+
getUser(): void {}
|
|
34
|
+
|
|
35
|
+
@A_Frame.Define({
|
|
36
|
+
description: 'Updates mutable profile fields (displayName, email) for the given user account. Validates uniqueness of the new email before persisting changes.',
|
|
37
|
+
})
|
|
38
|
+
updateUser(): void {}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@A_Frame.Define({
|
|
42
|
+
description: 'A service component responsible for authenticating users: validates credentials, issues JWT tokens, refreshes expired tokens, and invalidates sessions on logout.',
|
|
43
|
+
})
|
|
44
|
+
class AuthService extends A_Component {
|
|
45
|
+
|
|
46
|
+
@A_Frame.Define({
|
|
47
|
+
description: 'Authenticates a user with email and password. Verifies the password hash, issues a signed JWT access token and a refresh token, and records the login timestamp.',
|
|
48
|
+
})
|
|
49
|
+
login(): void {}
|
|
50
|
+
|
|
51
|
+
@A_Frame.Define({
|
|
52
|
+
description: 'Validates a JWT access token and returns the decoded user identity. Throws an authentication error if the token is expired or tampered.',
|
|
53
|
+
})
|
|
54
|
+
verifyToken(): void {}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@A_Frame.Define({
|
|
58
|
+
description: 'A service component that manages tasks inside projects: creates tasks, assigns them to team members, updates their status, and lists tasks filtered by project or assignee.',
|
|
59
|
+
})
|
|
60
|
+
class TaskService extends A_Component {
|
|
61
|
+
|
|
62
|
+
@A_Frame.Define({
|
|
63
|
+
description: 'Creates a new task inside the specified project. Sets the title, description, deadline, and initial status. Associates the task with the requesting user as creator.',
|
|
64
|
+
})
|
|
65
|
+
createTask(): void {}
|
|
66
|
+
|
|
67
|
+
@A_Frame.Define({
|
|
68
|
+
description: 'Assigns an existing task to a team member. Updates the assignee reference on the TaskEntity and dispatches an assignment notification event.',
|
|
69
|
+
})
|
|
70
|
+
assignTask(): void {}
|
|
71
|
+
|
|
72
|
+
@A_Frame.Define({
|
|
73
|
+
description: 'Updates the current status of a task (e.g. from "open" to "in-progress" or "done"). Records the state transition timestamp and triggers downstream side-effects.',
|
|
74
|
+
})
|
|
75
|
+
updateTaskStatus(): void {}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@A_Frame.Define({
|
|
79
|
+
description: 'A service component that sends email notifications: task assignment alerts, deadline reminders, and status-change summaries to the relevant team members.',
|
|
80
|
+
})
|
|
81
|
+
class NotificationService extends A_Component {
|
|
82
|
+
|
|
83
|
+
@A_Frame.Define({
|
|
84
|
+
description: 'Sends an email notification to a user about a newly assigned task, including the task title, deadline, and a link to the task details page.',
|
|
85
|
+
})
|
|
86
|
+
sendAssignmentEmail(): void {}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ── Fragments ─────────────────────────────────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
@A_Frame.Define({
|
|
92
|
+
description: 'A fragment that carries the authenticated user identity, current session token, and request-scoped metadata across all service calls within a single HTTP request lifecycle.',
|
|
93
|
+
})
|
|
94
|
+
class RequestContext extends A_Fragment {}
|
|
95
|
+
|
|
96
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
97
|
+
|
|
98
|
+
const TEST_COMPONENTS = [
|
|
99
|
+
UserService, AuthService, TaskService, NotificationService,
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
async function buildConcept() {
|
|
103
|
+
const container = new A_Container({ name: 'DynamicFeature Test Container', components: TEST_COMPONENTS });
|
|
104
|
+
const concept = new A_Concept({
|
|
105
|
+
name: 'DynamicFeature Test Concept',
|
|
106
|
+
components: [A_Frame],
|
|
107
|
+
containers: [container],
|
|
108
|
+
});
|
|
109
|
+
await concept.load();
|
|
110
|
+
|
|
111
|
+
// Embed all definitions that don't have a vector yet.
|
|
112
|
+
// (A_FRAME_SYNC=false in jest.setup.ts suppresses automatic sync.)
|
|
113
|
+
const allDefs = A_FrameIndex.listDefinitions({});
|
|
114
|
+
const unembedded = allDefs.filter(d => !d.isEmbed);
|
|
115
|
+
console.log(`\n[Index] definitions: ${allDefs.length}, need embedding: ${unembedded.length}`);
|
|
116
|
+
|
|
117
|
+
if (unembedded.length > 0) {
|
|
118
|
+
await Promise.all(unembedded.map(d => d.embed()));
|
|
119
|
+
const embeddedNow = allDefs.filter(d => d.isEmbed).length;
|
|
120
|
+
console.log(`[Index] embedded after explicit embed: ${embeddedNow}`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return { concept, container };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function logMapResult(label: string, feature: A_FrameDynamicFeature) {
|
|
127
|
+
const mapResult = feature.mapResult;
|
|
128
|
+
if (!mapResult) {
|
|
129
|
+
console.log(`\n=== ${label} === (no map result yet)\n`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const matchedSteps = mapResult.steps.filter(s => s.matchedMethod !== null);
|
|
134
|
+
const unmatchedSteps = mapResult.steps.filter(s => s.matchedMethod === null);
|
|
135
|
+
const allElements = [...mapResult.components, ...mapResult.fragments, ...mapResult.entities];
|
|
136
|
+
const matchedEls = allElements.filter(e => e.matchedClass !== null);
|
|
137
|
+
|
|
138
|
+
console.log(`\n=== ${label} ===`);
|
|
139
|
+
console.log(` Steps : ${matchedSteps.length} matched / ${mapResult.steps.length} total`);
|
|
140
|
+
if (matchedSteps.length) {
|
|
141
|
+
console.log(' Methods :',
|
|
142
|
+
matchedSteps.map(s => `${s.matchedClass}.${s.matchedMethod} (${s.matchScore.toFixed(3)})`).join(', '));
|
|
143
|
+
}
|
|
144
|
+
if (unmatchedSteps.length) {
|
|
145
|
+
console.log(' Unmatched:',
|
|
146
|
+
unmatchedSteps.map(s => `"${s.prompt.slice(0, 60)}…"`).join('\n '));
|
|
147
|
+
}
|
|
148
|
+
console.log(` Elements : ${matchedEls.length} matched / ${allElements.length} total`);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
152
|
+
|
|
153
|
+
describe('A-Frame DynamicFeature Tests', () => {
|
|
154
|
+
|
|
155
|
+
// ── 1. Generate + verify step matching ────────────────────────────────────
|
|
156
|
+
|
|
157
|
+
describe('Integration — generate and match steps to methods', () => {
|
|
158
|
+
|
|
159
|
+
let container: A_Container;
|
|
160
|
+
|
|
161
|
+
beforeEach(async () => {
|
|
162
|
+
({ container } = await buildConcept());
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('generates a feature workflow and matches steps to registered methods', async () => {
|
|
166
|
+
try {
|
|
167
|
+
const feature = new A_FrameDynamicFeature({
|
|
168
|
+
prompt: 'Implement a "create task and notify assignee" workflow: a user logs in, a task is created in the project, the task is assigned to a team member, and an email notification is sent to the assignee.',
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
expect(feature.modelName).toBe(A_FRAME_MODELS.PULSAR);
|
|
172
|
+
expect(feature.definition).toBeNull();
|
|
173
|
+
expect(feature.mapResult).toBeNull();
|
|
174
|
+
expect(feature.version).toBe(0);
|
|
175
|
+
expect(feature.history.length).toBe(0);
|
|
176
|
+
|
|
177
|
+
container.scope.register(feature);
|
|
178
|
+
await feature.generate();
|
|
179
|
+
|
|
180
|
+
expect(feature.definition).not.toBeNull();
|
|
181
|
+
expect(feature.definition!.steps.length).toBeGreaterThan(0);
|
|
182
|
+
expect(feature.mapResult).toBeNull(); // not mapped yet
|
|
183
|
+
expect(feature.version).toBe(0);
|
|
184
|
+
expect(feature.history.length).toBe(1); // generate recorded
|
|
185
|
+
|
|
186
|
+
const def = feature.definition!;
|
|
187
|
+
console.log(`\n[Definition] title: "${def.title}"`);
|
|
188
|
+
console.log(`[Definition] steps: ${def.steps.length}`);
|
|
189
|
+
console.log(`[Definition] components: ${def.components.length}, fragments: ${def.fragments.length}, entities: ${def.entities.length}`);
|
|
190
|
+
|
|
191
|
+
// Map steps to real methods
|
|
192
|
+
await feature.map();
|
|
193
|
+
logMapResult('After generate + map', feature);
|
|
194
|
+
|
|
195
|
+
expect(feature.mapResult).not.toBeNull();
|
|
196
|
+
const mapResult = feature.mapResult!;
|
|
197
|
+
|
|
198
|
+
// Every step entry must be typed correctly
|
|
199
|
+
for (const step of mapResult.steps) {
|
|
200
|
+
expect(typeof step.matchedClass === 'string' || step.matchedClass === null).toBe(true);
|
|
201
|
+
expect(typeof step.matchedMethod === 'string' || step.matchedMethod === null).toBe(true);
|
|
202
|
+
expect(typeof step.matchScore).toBe('number');
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// At least one step must be matched to a known method
|
|
206
|
+
const matchedSteps = mapResult.steps.filter(s => s.matchedMethod !== null);
|
|
207
|
+
console.log(` → Matched ${matchedSteps.length} of ${mapResult.steps.length} steps to methods`);
|
|
208
|
+
expect(matchedSteps.length).toBeGreaterThan(0);
|
|
209
|
+
|
|
210
|
+
// Matched classes must come from our registered service set
|
|
211
|
+
const knownClasses = new Set([
|
|
212
|
+
'UserService', 'AuthService', 'TaskService', 'NotificationService', 'RequestContext',
|
|
213
|
+
]);
|
|
214
|
+
for (const step of mapResult.steps) {
|
|
215
|
+
if (step.matchedClass !== null) {
|
|
216
|
+
expect(knownClasses.has(step.matchedClass)).toBe(true);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// No containers — workflows are cross-cutting
|
|
221
|
+
expect((mapResult as any).containers).toBeUndefined();
|
|
222
|
+
|
|
223
|
+
} catch (error) {
|
|
224
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
225
|
+
else console.error('Unexpected error:', error);
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// ── 2. Generate + sequential patches ──────────────────────────────────────
|
|
233
|
+
|
|
234
|
+
describe('Integration — generate and sequential patches', () => {
|
|
235
|
+
|
|
236
|
+
let container: A_Container;
|
|
237
|
+
|
|
238
|
+
beforeEach(async () => {
|
|
239
|
+
({ container } = await buildConcept());
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it('patches update the workflow definition and track version/history', async () => {
|
|
243
|
+
try {
|
|
244
|
+
const feature = new A_FrameDynamicFeature({
|
|
245
|
+
prompt: 'Implement a user registration workflow: validate the registration payload, create the user account, and return the created user profile.',
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
container.scope.register(feature);
|
|
249
|
+
|
|
250
|
+
// ── generate ──────────────────────────────────────────────────
|
|
251
|
+
await feature.generate();
|
|
252
|
+
await feature.map();
|
|
253
|
+
logMapResult('After generate + map', feature);
|
|
254
|
+
|
|
255
|
+
expect(feature.definition).not.toBeNull();
|
|
256
|
+
expect(feature.mapResult).not.toBeNull();
|
|
257
|
+
expect(feature.version).toBe(0);
|
|
258
|
+
expect(feature.history.length).toBe(1);
|
|
259
|
+
|
|
260
|
+
const workflowAfterGenerate = feature.workflow;
|
|
261
|
+
|
|
262
|
+
// ── patch: add a step ──────────────────────────────────────────
|
|
263
|
+
await feature.patch('Add a step to send a welcome email to the newly registered user after their account is created.');
|
|
264
|
+
await feature.map();
|
|
265
|
+
logMapResult('After patch — add welcome email step', feature);
|
|
266
|
+
|
|
267
|
+
expect(feature.version).toBe(1);
|
|
268
|
+
expect(feature.history.length).toBe(2);
|
|
269
|
+
expect(feature.workflow).not.toBe(workflowAfterGenerate);
|
|
270
|
+
|
|
271
|
+
// ── patch: remove a step ───────────────────────────────────────
|
|
272
|
+
const workflowAfterPatch1 = feature.workflow;
|
|
273
|
+
await feature.patch('Remove the welcome email step that was just added.');
|
|
274
|
+
await feature.map();
|
|
275
|
+
logMapResult('After patch — remove welcome email step', feature);
|
|
276
|
+
|
|
277
|
+
expect(feature.version).toBe(2);
|
|
278
|
+
expect(feature.history.length).toBe(3);
|
|
279
|
+
expect(feature.workflow).not.toBe(workflowAfterPatch1);
|
|
280
|
+
|
|
281
|
+
} catch (error) {
|
|
282
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
283
|
+
else console.error('Unexpected error:', error);
|
|
284
|
+
throw error;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
// ── 3. `workflow` getter serialises without embeddings ────────────────────
|
|
291
|
+
|
|
292
|
+
describe('Unit-style — workflow serialisation', () => {
|
|
293
|
+
|
|
294
|
+
let container: A_Container;
|
|
295
|
+
|
|
296
|
+
beforeEach(async () => {
|
|
297
|
+
({ container } = await buildConcept());
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('workflow getter returns valid JSON and strips embedding arrays', async () => {
|
|
301
|
+
try {
|
|
302
|
+
const feature = new A_FrameDynamicFeature({
|
|
303
|
+
prompt: 'Implement a simple user login and token verification workflow.',
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
// Before generate: returns an empty-shell JSON
|
|
307
|
+
expect(() => JSON.parse(feature.workflow)).not.toThrow();
|
|
308
|
+
const empty = JSON.parse(feature.workflow);
|
|
309
|
+
expect(empty.steps).toEqual([]);
|
|
310
|
+
|
|
311
|
+
container.scope.register(feature);
|
|
312
|
+
await feature.generate();
|
|
313
|
+
|
|
314
|
+
// After generate: valid JSON with no embedding arrays
|
|
315
|
+
expect(() => JSON.parse(feature.workflow)).not.toThrow();
|
|
316
|
+
const parsed = JSON.parse(feature.workflow);
|
|
317
|
+
expect(parsed.title).toBeTruthy();
|
|
318
|
+
expect(Array.isArray(parsed.steps)).toBe(true);
|
|
319
|
+
|
|
320
|
+
// Assert no step carries an embedding
|
|
321
|
+
for (const step of parsed.steps) {
|
|
322
|
+
expect(step.embedding).toBeUndefined();
|
|
323
|
+
}
|
|
324
|
+
for (const el of [...(parsed.components ?? []), ...(parsed.fragments ?? []), ...(parsed.entities ?? [])]) {
|
|
325
|
+
expect(el.embedding).toBeUndefined();
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
} catch (error) {
|
|
329
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
330
|
+
else console.error('Unexpected error:', error);
|
|
331
|
+
throw error;
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
});
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { A_Component, A_Concept, A_Container, A_Entity, A_Error, A_Fragment } from '@adaas/a-concept';
|
|
2
|
+
import { A_Frame } from '@adaas/a-frame/core';
|
|
3
|
+
import { A_FrameIndex } from '@adaas/a-frame/index';
|
|
4
|
+
import { config } from 'dotenv';
|
|
5
|
+
import { A_FrameDynamicStructure, A_FrameComponentMapResult } from '@adaas/a-frame/dynamic-structure';
|
|
6
|
+
import { A_FRAME_MODELS } from '@adaas/a-frame/models';
|
|
7
|
+
|
|
8
|
+
config();
|
|
9
|
+
|
|
10
|
+
jest.setTimeout(60 * 60 * 1000);
|
|
11
|
+
|
|
12
|
+
// ─── Test domain: Task-management backend ─────────────────────────────────────
|
|
13
|
+
//
|
|
14
|
+
// These classes are decorated with @A_Frame.Define so they get added to the
|
|
15
|
+
// A-Frame index and embedded during concept.load(). The DynamicStructure
|
|
16
|
+
// matching loop then uses cosine-similarity to resolve generated element prompts
|
|
17
|
+
// back to these registered class names.
|
|
18
|
+
|
|
19
|
+
// ── Components ────────────────────────────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
@A_Frame.Define({
|
|
22
|
+
description: 'A service component that creates, updates, and deletes tasks, tracks deadline and status changes, and links each task to a project and an assigned team member.',
|
|
23
|
+
})
|
|
24
|
+
class TaskService extends A_Component {}
|
|
25
|
+
|
|
26
|
+
@A_Frame.Define({
|
|
27
|
+
description: 'A service component that manages project creation and ownership, adds and removes team members from projects, and retrieves projects scoped by owner or member.',
|
|
28
|
+
})
|
|
29
|
+
class ProjectService extends A_Component {}
|
|
30
|
+
|
|
31
|
+
@A_Frame.Define({
|
|
32
|
+
description: 'A service component that authenticates users with email and password, issues JWT access tokens, validates tokens on incoming requests, and handles session expiry and refresh.',
|
|
33
|
+
})
|
|
34
|
+
class AuthService extends A_Component {}
|
|
35
|
+
|
|
36
|
+
@A_Frame.Define({
|
|
37
|
+
description: 'A service component that sends email notifications to assigned team members when a task deadline approaches, a task is newly assigned, or a task status changes.',
|
|
38
|
+
})
|
|
39
|
+
class EmailNotificationService extends A_Component {}
|
|
40
|
+
|
|
41
|
+
// ── Containers ────────────────────────────────────────────────────────────────
|
|
42
|
+
|
|
43
|
+
@A_Frame.Define({
|
|
44
|
+
description: 'A container module that bootstraps the HTTP REST API server, registers route handlers for project and task endpoints, and applies JWT authentication middleware to incoming requests.',
|
|
45
|
+
})
|
|
46
|
+
class ApiServerContainer extends A_Component {}
|
|
47
|
+
|
|
48
|
+
@A_Frame.Define({
|
|
49
|
+
description: 'A container module that runs background worker processes, polls the database for upcoming task deadlines, and triggers email notifications without blocking the main API server.',
|
|
50
|
+
})
|
|
51
|
+
class BackgroundWorkerContainer extends A_Component {}
|
|
52
|
+
|
|
53
|
+
// ── Fragments ─────────────────────────────────────────────────────────────────
|
|
54
|
+
|
|
55
|
+
@A_Frame.Define({
|
|
56
|
+
description: 'A fragment that carries the authenticated user identity, active project scope reference, and per-request metadata across all service calls within a single HTTP request lifecycle.',
|
|
57
|
+
})
|
|
58
|
+
class RequestContext extends A_Fragment {}
|
|
59
|
+
|
|
60
|
+
// ── Entities ──────────────────────────────────────────────────────────────────
|
|
61
|
+
|
|
62
|
+
@A_Frame.Define({
|
|
63
|
+
description: 'An entity representing a task with a unique ID, title, description, deadline date, current status, a reference to the assigned team member, and a reference to the parent project.',
|
|
64
|
+
})
|
|
65
|
+
class TaskEntity extends A_Entity {}
|
|
66
|
+
|
|
67
|
+
@A_Frame.Define({
|
|
68
|
+
description: 'An entity representing a project with a unique ID, owner reference, name, description, and a list of team member references.',
|
|
69
|
+
})
|
|
70
|
+
class ProjectEntity extends A_Entity {}
|
|
71
|
+
|
|
72
|
+
@A_Frame.Define({
|
|
73
|
+
description: 'An entity representing a registered user account with a unique ID, email address, display name, and a hashed password.',
|
|
74
|
+
})
|
|
75
|
+
class UserEntity extends A_Entity {}
|
|
76
|
+
|
|
77
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
const TEST_COMPONENTS = [
|
|
80
|
+
// Components
|
|
81
|
+
TaskService, ProjectService, AuthService, EmailNotificationService,
|
|
82
|
+
// Containers (registered as components so the concept embeds their definitions)
|
|
83
|
+
ApiServerContainer, BackgroundWorkerContainer,
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
async function buildConcept() {
|
|
87
|
+
const container = new A_Container({ name: 'DynamicStructure Test Container', components: TEST_COMPONENTS });
|
|
88
|
+
const concept = new A_Concept({
|
|
89
|
+
name: 'Test Concept',
|
|
90
|
+
components: [A_Frame],
|
|
91
|
+
containers: [container],
|
|
92
|
+
});
|
|
93
|
+
await concept.load();
|
|
94
|
+
|
|
95
|
+
// Sync is disabled globally in jest.setup.ts (A_FRAME_SYNC=false) to keep
|
|
96
|
+
// unit and other integration tests fast. For this test we need the component
|
|
97
|
+
// definitions to be embedded so the matching loop can do cosine similarity.
|
|
98
|
+
// Embed only the definitions that don't have a vector yet.
|
|
99
|
+
const allDefs = A_FrameIndex.listDefinitions({});
|
|
100
|
+
const unembedded = allDefs.filter(d => !d.isEmbed);
|
|
101
|
+
console.log(`\n[Index] definitions: ${allDefs.length}, need embedding: ${unembedded.length}`);
|
|
102
|
+
|
|
103
|
+
if (unembedded.length > 0) {
|
|
104
|
+
await Promise.all(unembedded.map(d => d.embed()));
|
|
105
|
+
const embeddedNow = allDefs.filter(d => d.isEmbed).length;
|
|
106
|
+
console.log(`[Index] embedded after explicit embed: ${embeddedNow}`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return { concept, container };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function logDefinition(label: string, structure: A_FrameDynamicStructure) {
|
|
113
|
+
const mapResult = structure.mapResult;
|
|
114
|
+
if (!mapResult) {
|
|
115
|
+
console.log(`\n=== ${label} === (no map result yet)\n`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const allElements = [
|
|
119
|
+
...mapResult.containers,
|
|
120
|
+
...mapResult.components,
|
|
121
|
+
...mapResult.fragments,
|
|
122
|
+
...mapResult.entities,
|
|
123
|
+
];
|
|
124
|
+
const matched = allElements.filter((e: any) => e.matchedClass !== null);
|
|
125
|
+
const unmatched = allElements.filter((e: any) => e.matchedClass === null);
|
|
126
|
+
|
|
127
|
+
console.log(`\n=== ${label} ===`);
|
|
128
|
+
console.log(` Matched : ${matched.length} / ${allElements.length}`);
|
|
129
|
+
if (matched.length) console.log(' Classes :', matched.map((e: any) => e.matchedClass).join(', '));
|
|
130
|
+
if (unmatched.length) console.log(' Unmatched:', unmatched.map((e: any) => `"${e.prompt.slice(0, 60)}…"`).join('\n '));
|
|
131
|
+
console.log();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ─── Tests ────────────────────────────────────────────────────────────────────
|
|
135
|
+
|
|
136
|
+
describe('A-Frame DynamicStructure Tests', () => {
|
|
137
|
+
|
|
138
|
+
// ── 1. Generate + verify component matching ───────────────────────────────
|
|
139
|
+
|
|
140
|
+
describe('Integration — generate and match components', () => {
|
|
141
|
+
|
|
142
|
+
let container: A_Container;
|
|
143
|
+
|
|
144
|
+
beforeEach(async () => {
|
|
145
|
+
({ container } = await buildConcept());
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('generates a structure and matches known components', async () => {
|
|
149
|
+
try {
|
|
150
|
+
const structure = new A_FrameDynamicStructure({
|
|
151
|
+
prompt: 'Design a backend for a task-management app. Users create projects, add tasks with deadlines, assign tasks to team members, and receive email notifications when deadlines approach.',
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
expect(structure.modelName).toBe(A_FRAME_MODELS.PULSAR);
|
|
155
|
+
|
|
156
|
+
container.scope.register(structure);
|
|
157
|
+
await structure.generate();
|
|
158
|
+
await structure.map();
|
|
159
|
+
|
|
160
|
+
logDefinition('Generated + mapped structure', structure);
|
|
161
|
+
|
|
162
|
+
expect(structure.definition).not.toBeNull();
|
|
163
|
+
expect(structure.mapResult).not.toBeNull();
|
|
164
|
+
expect(structure.version).toBe(0);
|
|
165
|
+
expect(structure.history.length).toBe(1);
|
|
166
|
+
|
|
167
|
+
const mapResult = structure.mapResult!;
|
|
168
|
+
const allElements = [
|
|
169
|
+
...mapResult.containers,
|
|
170
|
+
...mapResult.components,
|
|
171
|
+
...mapResult.fragments,
|
|
172
|
+
...mapResult.entities,
|
|
173
|
+
];
|
|
174
|
+
|
|
175
|
+
// Every element must have matchedClass typed correctly (string or null)
|
|
176
|
+
for (const el of allElements) {
|
|
177
|
+
expect(typeof el.matchedClass === 'string' || el.matchedClass === null).toBe(true);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// At least one element should have been matched to a registered component
|
|
181
|
+
const matchedCount = allElements.filter((e: any) => e.matchedClass !== null).length;
|
|
182
|
+
console.log(` → Matched ${matchedCount} of ${allElements.length} elements`);
|
|
183
|
+
expect(matchedCount).toBeGreaterThan(0);
|
|
184
|
+
|
|
185
|
+
// The matched class names should come from our registered set
|
|
186
|
+
const knownNames = new Set([
|
|
187
|
+
'TaskService', 'ProjectService', 'AuthService', 'EmailNotificationService',
|
|
188
|
+
'ApiServerContainer', 'BackgroundWorkerContainer',
|
|
189
|
+
'RequestContext',
|
|
190
|
+
'TaskEntity', 'ProjectEntity', 'UserEntity',
|
|
191
|
+
]);
|
|
192
|
+
for (const el of allElements) {
|
|
193
|
+
if (el.matchedClass !== null) {
|
|
194
|
+
expect(knownNames.has(el.matchedClass)).toBe(true);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
} catch (error) {
|
|
198
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
199
|
+
else console.error('Unexpected error:', error);
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
// ── 2. Generate + sequential patches ─────────────────────────────────────
|
|
207
|
+
|
|
208
|
+
describe('Integration — generate and sequential patches', () => {
|
|
209
|
+
|
|
210
|
+
let container: A_Container;
|
|
211
|
+
|
|
212
|
+
beforeEach(async () => {
|
|
213
|
+
({ container } = await buildConcept());
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('patches update the structure and track history/version', async () => {
|
|
217
|
+
try {
|
|
218
|
+
const structure = new A_FrameDynamicStructure({
|
|
219
|
+
prompt: 'Design a backend for a task-management app. Users create projects, add tasks with deadlines, assign tasks to team members, and receive email notifications when deadlines approach.',
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
container.scope.register(structure);
|
|
223
|
+
|
|
224
|
+
// ── generate ──────────────────────────────────────────────
|
|
225
|
+
await structure.generate();
|
|
226
|
+
await structure.map();
|
|
227
|
+
logDefinition('After generate + map', structure);
|
|
228
|
+
|
|
229
|
+
expect(structure.definition).not.toBeNull();
|
|
230
|
+
expect(structure.mapResult).not.toBeNull();
|
|
231
|
+
expect(structure.version).toBe(0);
|
|
232
|
+
expect(structure.history.length).toBe(1);
|
|
233
|
+
|
|
234
|
+
const structureAfterGenerate = structure.structure;
|
|
235
|
+
|
|
236
|
+
// ── patch: add ────────────────────────────────────────────
|
|
237
|
+
await structure.patch('Add a dedicated component for handling file attachment uploads linked to tasks.');
|
|
238
|
+
await structure.map();
|
|
239
|
+
logDefinition('After patch — add file upload component', structure);
|
|
240
|
+
|
|
241
|
+
expect(structure.version).toBe(1);
|
|
242
|
+
expect(structure.history.length).toBe(2);
|
|
243
|
+
expect(structure.structure).not.toBe(structureAfterGenerate);
|
|
244
|
+
|
|
245
|
+
// ── patch: remove ─────────────────────────────────────────
|
|
246
|
+
const structureAfterPatch1 = structure.structure;
|
|
247
|
+
await structure.patch('Remove the file attachment upload component that was just added.');
|
|
248
|
+
await structure.map();
|
|
249
|
+
logDefinition('After patch — remove file upload component', structure);
|
|
250
|
+
|
|
251
|
+
expect(structure.version).toBe(2);
|
|
252
|
+
expect(structure.history.length).toBe(3);
|
|
253
|
+
expect(structure.structure).not.toBe(structureAfterPatch1);
|
|
254
|
+
|
|
255
|
+
} catch (error) {
|
|
256
|
+
if (error instanceof A_Error) console.error('A_Error:', error.toJSON());
|
|
257
|
+
else console.error('Unexpected error:', error);
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
});
|