@fps-games/editor-deployment 0.2.3-beta.10
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/bin/fps-editor-agent.mjs +5 -0
- package/bin/fps-editor-prepare.mjs +5 -0
- package/bin/fps-editor-project.mjs +18 -0
- package/bin/fps-editor-server.mjs +2 -0
- package/licenses/THIRD_PARTY_NOTICES.txt +7 -0
- package/manifest.json +2688 -0
- package/npm-shrinkwrap.json +21 -0
- package/package.json +44 -0
- package/public/assets/abstractAudioBus-BRAC2GY2.js +1 -0
- package/public/assets/animation-C6iNAO1g.js +1 -0
- package/public/assets/animation-C6iNAO1g.js.br +0 -0
- package/public/assets/animation-C6iNAO1g.js.gz +0 -0
- package/public/assets/animationGroup-C74XVFRE.js +1 -0
- package/public/assets/animationGroup-C74XVFRE.js.br +0 -0
- package/public/assets/animationGroup-C74XVFRE.js.gz +0 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js +1 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js.br +0 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js.gz +0 -0
- package/public/assets/babylon-core-PuGyjHMj.js +13882 -0
- package/public/assets/babylon-core-PuGyjHMj.js.br +0 -0
- package/public/assets/babylon-core-PuGyjHMj.js.gz +0 -0
- package/public/assets/babylon-core-S0gBQJVe.js +1 -0
- package/public/assets/babylon-core-S0gBQJVe.js.br +0 -0
- package/public/assets/babylon-core-S0gBQJVe.js.gz +0 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js +1 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js.br +0 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js.gz +0 -0
- package/public/assets/bumpVertex-DMhnr4dz.js +173 -0
- package/public/assets/bumpVertex-DMhnr4dz.js.br +0 -0
- package/public/assets/bumpVertex-DMhnr4dz.js.gz +0 -0
- package/public/assets/bumpVertex-DpGOKCkn.js +177 -0
- package/public/assets/bumpVertex-DpGOKCkn.js.br +0 -0
- package/public/assets/bumpVertex-DpGOKCkn.js.gz +0 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js +7 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.br +0 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.gz +0 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js +6 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.br +0 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.gz +0 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js +17 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.br +0 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.gz +0 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js +17 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js.br +0 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js.gz +0 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js +46 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js.br +0 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js.gz +0 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js +177 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js.br +0 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js.gz +0 -0
- package/public/assets/color.fragment-BUdIBar6.js +20 -0
- package/public/assets/color.fragment-BUdIBar6.js.br +0 -0
- package/public/assets/color.fragment-BUdIBar6.js.gz +0 -0
- package/public/assets/color.fragment-CDn4ZgkT.js +21 -0
- package/public/assets/color.fragment-CDn4ZgkT.js.br +0 -0
- package/public/assets/color.fragment-CDn4ZgkT.js.gz +0 -0
- package/public/assets/color.vertex-CaMOSKlC.js +39 -0
- package/public/assets/color.vertex-CaMOSKlC.js.br +5 -0
- package/public/assets/color.vertex-CaMOSKlC.js.gz +0 -0
- package/public/assets/color.vertex-dgbB6mhK.js +32 -0
- package/public/assets/color.vertex-dgbB6mhK.js.br +0 -0
- package/public/assets/color.vertex-dgbB6mhK.js.gz +0 -0
- package/public/assets/dds-3J0FZYX1.js +1 -0
- package/public/assets/dds-3J0FZYX1.js.br +0 -0
- package/public/assets/dds-3J0FZYX1.js.gz +0 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js +1 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js.br +0 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js.gz +0 -0
- package/public/assets/default.fragment-C4xg7O-P.js +526 -0
- package/public/assets/default.fragment-C4xg7O-P.js.br +0 -0
- package/public/assets/default.fragment-C4xg7O-P.js.gz +0 -0
- package/public/assets/default.fragment-C4zjkcFb.js +468 -0
- package/public/assets/default.fragment-C4zjkcFb.js.br +0 -0
- package/public/assets/default.fragment-C4zjkcFb.js.gz +0 -0
- package/public/assets/default.vertex-A8wQopNr.js +193 -0
- package/public/assets/default.vertex-A8wQopNr.js.br +0 -0
- package/public/assets/default.vertex-A8wQopNr.js.gz +0 -0
- package/public/assets/default.vertex-YrvIUn4x.js +181 -0
- package/public/assets/default.vertex-YrvIUn4x.js.br +0 -0
- package/public/assets/default.vertex-YrvIUn4x.js.gz +0 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js +5 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js.br +0 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js.gz +0 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js +7 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js.br +0 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js.gz +0 -0
- package/public/assets/depth.fragment-Bn8G24s-.js +40 -0
- package/public/assets/depth.fragment-Bn8G24s-.js.br +4 -0
- package/public/assets/depth.fragment-Bn8G24s-.js.gz +0 -0
- package/public/assets/depth.vertex-B2lrdlJh.js +57 -0
- package/public/assets/depth.vertex-B2lrdlJh.js.br +0 -0
- package/public/assets/depth.vertex-B2lrdlJh.js.gz +0 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js +5 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.br +0 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.gz +0 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js +6 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.br +0 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.gz +0 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js +26 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.br +0 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.gz +0 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js +21 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.br +0 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.gz +0 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js +1329 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js.br +0 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js.gz +0 -0
- package/public/assets/easing-DbzzrXOl.js +1 -0
- package/public/assets/easing-DbzzrXOl.js.br +0 -0
- package/public/assets/easing-DbzzrXOl.js.gz +0 -0
- package/public/assets/editor-core-plugin-host-c2002442.js +1 -0
- package/public/assets/editor-core-plugin-host-c2002442.js.br +0 -0
- package/public/assets/editor-core-plugin-host-c2002442.js.gz +0 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js +1 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js.br +0 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js.gz +0 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js +1 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.br +0 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.gz +0 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js +1 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.br +0 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.gz +0 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js +1 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.br +0 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.gz +0 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js +1 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js.br +0 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js.gz +0 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js +1 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.br +2 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.gz +0 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js +1 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.br +0 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.gz +0 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js +1 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.br +0 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.gz +0 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js +1 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.br +0 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.gz +0 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js +1 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.br +0 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.gz +0 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js +1 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.br +0 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.gz +0 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js +1 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js.br +0 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js.gz +0 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js +1 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.br +0 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.gz +0 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js +1 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.br +0 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.gz +0 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js +1 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.br +0 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.gz +0 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js +1 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js.br +0 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js.gz +0 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js +1 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.br +0 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.gz +0 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js +1 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.br +0 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.gz +0 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js +1 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.br +0 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.gz +0 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js +1 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.br +0 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.gz +0 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js +1 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.br +0 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.gz +0 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js +1 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.br +0 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.gz +0 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js +1 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.br +0 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.gz +0 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js +1 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.br +0 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.gz +0 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js +1 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.br +0 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.gz +0 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js +1 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.br +0 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.gz +0 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js +1 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.br +0 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.gz +0 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js +1 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.br +0 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.gz +0 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js +1 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.br +0 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.gz +0 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js +1 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.br +0 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.gz +0 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js +1 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.br +0 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.gz +0 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js +1 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.br +0 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.gz +0 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js +1 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.br +0 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.gz +0 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js +1 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.br +0 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.gz +0 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js +1 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.br +0 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.gz +0 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js +1 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.br +0 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.gz +0 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js +1 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.br +0 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.gz +0 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js +1 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.br +0 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.gz +0 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js +1 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.br +0 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.gz +0 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js +1 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.br +0 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.gz +0 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js +1 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.br +0 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.gz +0 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js +1 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.br +0 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.gz +0 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js +1 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.br +0 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.gz +0 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js +1 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.br +0 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.gz +0 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js +1 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js.br +0 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js.gz +0 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js +1 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.br +0 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.gz +0 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js +1 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.br +0 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.gz +0 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js +1 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.br +0 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.gz +0 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js +1 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.br +0 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.gz +0 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js +1 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.br +0 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.gz +0 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js +1 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.br +0 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.gz +0 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js +1 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.br +0 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.gz +0 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js +22 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js.br +0 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js.gz +0 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js +23 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.br +0 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.gz +0 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js +7 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.br +0 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.gz +0 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js +7 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.br +0 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.gz +0 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js +63 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.br +0 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.gz +0 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js +63 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.br +0 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.gz +0 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js +75 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.br +0 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.gz +0 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js +75 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.br +3 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.gz +0 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js +23 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js.br +0 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js.gz +0 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js +25 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.br +0 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.gz +0 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js +7 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.br +0 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.gz +0 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js +8 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.br +0 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.gz +0 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js +6 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js.br +0 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js.gz +0 -0
- package/public/assets/grain.fragment-CH9zg05c.js +5 -0
- package/public/assets/grain.fragment-CH9zg05c.js.br +0 -0
- package/public/assets/grain.fragment-CH9zg05c.js.gz +0 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js +192 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js.br +0 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js.gz +0 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js +189 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js.br +0 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js.gz +0 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js +2 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js.br +0 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js.gz +0 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js +2 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js.br +0 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js.gz +0 -0
- package/public/assets/index-CiIoJ8v1.js +4 -0
- package/public/assets/index-CiIoJ8v1.js.br +0 -0
- package/public/assets/index-CiIoJ8v1.js.gz +0 -0
- package/public/assets/index-Dhf9rSmv.js +1 -0
- package/public/assets/index-Dhf9rSmv.js.br +0 -0
- package/public/assets/index-Dhf9rSmv.js.gz +0 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js +23 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js.br +0 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js.gz +0 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js +1 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js.br +0 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js.gz +0 -0
- package/public/assets/lazy-Cj-01uhW.js +2 -0
- package/public/assets/lazy-Cj-01uhW.js.br +0 -0
- package/public/assets/lazy-Cj-01uhW.js.gz +0 -0
- package/public/assets/lod.fragment-BuvQbBhE.js +3 -0
- package/public/assets/lod.fragment-BuvQbBhE.js.br +0 -0
- package/public/assets/lod.fragment-BuvQbBhE.js.gz +0 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js +3 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js.br +3 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js.gz +0 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js +22 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js.br +2 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js.gz +0 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js +22 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js.br +0 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js.gz +0 -0
- package/public/assets/logDepthDeclaration-CeLLOhuK.js +4 -0
- package/public/assets/logDepthDeclaration-XDsVKoT0.js +4 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js +4 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js.br +0 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js.gz +0 -0
- package/public/assets/logDepthFragment-CDaMyvfH.js +4 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js +4 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js.br +0 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js.gz +0 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js +4 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js.br +1 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js.gz +0 -0
- package/public/assets/mainUVVaryingDeclaration-DdwP8xi_.js +4 -0
- package/public/assets/mainUVVaryingDeclaration-OBB3LR8s.js +4 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js +1 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.br +0 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.gz +0 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js +13 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js.br +0 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js.gz +0 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js +13 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js.br +0 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js.gz +0 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js +100 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js.br +0 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js.gz +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js +3 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.br +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.gz +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js +2 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.br +3 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.gz +0 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js +1202 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js.br +0 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js.gz +0 -0
- package/public/assets/oitFragment-ZUHesxAg.js +1077 -0
- package/public/assets/oitFragment-ZUHesxAg.js.br +0 -0
- package/public/assets/oitFragment-ZUHesxAg.js.gz +0 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js +2 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js.br +0 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js.gz +0 -0
- package/public/assets/outline.fragment-BK0vgcx7.js +21 -0
- package/public/assets/outline.fragment-BK0vgcx7.js.br +0 -0
- package/public/assets/outline.fragment-BK0vgcx7.js.gz +0 -0
- package/public/assets/outline.fragment-DQK2JikO.js +18 -0
- package/public/assets/outline.fragment-DQK2JikO.js.br +0 -0
- package/public/assets/outline.fragment-DQK2JikO.js.gz +0 -0
- package/public/assets/outline.vertex-CHR7GZYH.js +47 -0
- package/public/assets/outline.vertex-CHR7GZYH.js.br +0 -0
- package/public/assets/outline.vertex-CHR7GZYH.js.gz +0 -0
- package/public/assets/outline.vertex-CKcILDiL.js +47 -0
- package/public/assets/outline.vertex-CKcILDiL.js.br +0 -0
- package/public/assets/outline.vertex-CKcILDiL.js.gz +0 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js +23 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js.br +0 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js.gz +0 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js +23 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js.br +0 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js.gz +0 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js +3277 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js.br +0 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js.gz +0 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js +3327 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js.br +0 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js.gz +0 -0
- package/public/assets/pbr.vertex-BezAbBHx.js +357 -0
- package/public/assets/pbr.vertex-BezAbBHx.js.br +0 -0
- package/public/assets/pbr.vertex-BezAbBHx.js.gz +0 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js +227 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js.br +0 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js.gz +0 -0
- package/public/assets/playable-sdk-zAYuBOLj.js +8 -0
- package/public/assets/playable-sdk-zAYuBOLj.js.br +0 -0
- package/public/assets/playable-sdk-zAYuBOLj.js.gz +0 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js +5140 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js.br +0 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js.gz +0 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js +5 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.br +4 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.gz +0 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js +5 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.br +0 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.gz +0 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js +5 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.br +3 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.gz +0 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js +5 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.br +1 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.gz +0 -0
- package/public/assets/sceneLoader-CDreObGG.js +1 -0
- package/public/assets/sceneLoader-CDreObGG.js.br +0 -0
- package/public/assets/sceneLoader-CDreObGG.js.gz +0 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js +15 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.br +0 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.gz +0 -0
- package/public/assets/selection.fragment-CVXAuXcC.js +35 -0
- package/public/assets/selection.fragment-CVXAuXcC.js.br +0 -0
- package/public/assets/selection.fragment-CVXAuXcC.js.gz +0 -0
- package/public/assets/selection.fragment-DobH4NRw.js +35 -0
- package/public/assets/selection.fragment-DobH4NRw.js.br +0 -0
- package/public/assets/selection.fragment-DobH4NRw.js.gz +0 -0
- package/public/assets/selection.vertex-BUBv8X1j.js +74 -0
- package/public/assets/selection.vertex-BUBv8X1j.js.br +0 -0
- package/public/assets/selection.vertex-BUBv8X1j.js.gz +0 -0
- package/public/assets/selection.vertex-DlADXBtf.js +73 -0
- package/public/assets/selection.vertex-DlADXBtf.js.br +0 -0
- package/public/assets/selection.vertex-DlADXBtf.js.gz +0 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js +47 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js.br +0 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js.gz +0 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js +48 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js.br +0 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js.gz +0 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js +78 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js.br +0 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js.gz +0 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js +79 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js.br +0 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js.gz +0 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js +109 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js.br +0 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js.gz +0 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js +119 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js.br +0 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js.gz +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js +4 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.br +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.gz +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js +4 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.br +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.gz +0 -0
- package/public/assets/sharpen.fragment-CI40r28S.js +8 -0
- package/public/assets/sharpen.fragment-CI40r28S.js.br +0 -0
- package/public/assets/sharpen.fragment-CI40r28S.js.gz +0 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js +84 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js.br +0 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js.gz +0 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js +76 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js.br +0 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js.gz +0 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js +1 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js.br +0 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js.gz +0 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js +20 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js.br +0 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js.gz +0 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js +24 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js.br +2 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js.gz +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js +12 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.br +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.gz +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js +11 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.br +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js +15 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js +13 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js +4 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js +5 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.gz +0 -0
- package/public/assets/webAudioBus-BkMWEG1L.js +1 -0
- package/public/assets/webAudioBus-BkMWEG1L.js.br +0 -0
- package/public/assets/webAudioBus-BkMWEG1L.js.gz +0 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js +1 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js.br +0 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js.gz +0 -0
- package/public/assets/workerPool-H9Ji3mCo.js +1 -0
- package/public/assets/workerPool-H9Ji3mCo.js.br +2 -0
- package/public/assets/workerPool-H9Ji3mCo.js.gz +0 -0
- package/public/index.html +21 -0
- package/public/index.html.br +0 -0
- package/public/index.html.gz +0 -0
- package/runtime/editor-control-plane.mjs +5 -0
- package/runtime/runtime-debug-authoring-bridge.mjs +1 -0
- package/worker/editor-service-worker.mjs +27 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import Or from"node:fs/promises";import ie from"node:path";import{pathToFileURL as of}from"node:url";var Gt=class extends Error{path;reason;code="runtime.lighting.invalid";constructor(t,n){super(`Invalid Runtime Lighting data at ${t}: ${n}`),this.path=t,this.reason=n,this.name="FpsRuntimeLightingDataError"}},jr=1e-6,wa=1e-4,Ta=new Set(["schemaVersion","type","intensity","direction","diffuseColor"]),Da=new Set(["schemaVersion","type","intensity","diffuseColor","groundColor"]),ka=new Set(["x","y","z"]),Ma=new Set(["r","g","b"]);function ut(e,t="$.direction"){let n=Fr(e,t),r=Math.hypot(n.x,n.y,n.z);return r<=jr&&le(t,"expected a non-zero direction vector"),Object.freeze({x:n.x/r,y:n.y/r,z:n.z/r})}function qe(e,t="$.light"){let n=Tn(e,t);n.schemaVersion!==1&&le(`${t}.schemaVersion`,"expected 1");let r=Ca(n.intensity,`${t}.intensity`);if(n.type==="directional"){jt(n,Ta,t);let i=Fr(n.direction,`${t}.direction`),o=Math.hypot(i.x,i.y,i.z);return o<=jr&&le(`${t}.direction`,"expected a non-zero direction vector"),Math.abs(o-1)>wa&&le(`${t}.direction`,"expected a normalized direction vector"),Object.freeze({schemaVersion:1,type:"directional",intensity:r,direction:i,diffuseColor:An(n.diffuseColor,`${t}.diffuseColor`)})}if(n.type==="hemispheric")return jt(n,Da,t),Object.freeze({schemaVersion:1,type:"hemispheric",intensity:r,diffuseColor:An(n.diffuseColor,`${t}.diffuseColor`),groundColor:An(n.groundColor,`${t}.groundColor`)});le(`${t}.type`,"expected directional or hemispheric")}function Fr(e,t){let n=Tn(e,t);return jt(n,ka,t),Object.freeze({x:ct(n.x,`${t}.x`),y:ct(n.y,`${t}.y`),z:ct(n.z,`${t}.z`)})}function An(e,t){let n=Tn(e,t);return jt(n,Ma,t),Object.freeze({r:wn(n.r,`${t}.r`),g:wn(n.g,`${t}.g`),b:wn(n.b,`${t}.b`)})}function Tn(e,t){(!e||typeof e!="object"||Array.isArray(e))&&le(t,"expected a plain object");let n=Object.getPrototypeOf(e);return n!==Object.prototype&&n!==null&&le(t,"expected a plain object"),e}function jt(e,t,n){for(let r of Object.keys(e))t.has(r)||le(`${n}.${r}`,"unknown field")}function ct(e,t){return(typeof e!="number"||!Number.isFinite(e))&&le(t,"expected a finite number"),e}function Ca(e,t){let n=ct(e,t);return n<0&&le(t,"expected a non-negative number"),n}function wn(e,t){let n=ct(e,t);return(n<0||n>1)&&le(t,"expected a number between 0 and 1"),n}function le(e,t){throw new Gt(e,t)}var mt="medium",Dn={low:{opacity:.32,softness:.25,bias:.0015,normalBias:.02,maxDistance:24,resolution:512,cascadeCount:1,bakeSamples:8,blurKernel:2},medium:{opacity:.42,softness:.4,bias:.001,normalBias:.01,maxDistance:48,resolution:1024,cascadeCount:2,bakeSamples:24,blurKernel:4},high:{opacity:.5,softness:.58,bias:8e-4,normalBias:.006,maxDistance:80,resolution:2048,cascadeCount:4,bakeSamples:64,blurKernel:8},ultra:{opacity:.56,softness:.72,bias:6e-4,normalBias:.004,maxDistance:120,resolution:4096,cascadeCount:4,bakeSamples:128,blurKernel:12}};function Ft(e=mt,t={}){let n=Dn[e]??Dn[mt];return{opacity:ft(t.opacity,n.opacity),softness:ft(t.softness,n.softness),bias:ft(t.bias,n.bias),normalBias:ft(t.normalBias,n.normalBias),maxDistance:ft(t.maxDistance,n.maxDistance),resolution:Na(t.resolution,n.resolution),cascadeCount:Oa(t.cascadeCount,n.cascadeCount),bakeSamples:Ra(t.bakeSamples,n.bakeSamples),blurKernel:$a(t.blurKernel,n.blurKernel)}}function ft(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Ra(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.round(e):t}function $a(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.round(e):t}function Na(e,t){return e===512||e===1024||e===2048||e===4096?e:t}function Oa(e,t){return e===1||e===2||e===4?e:t}function _t(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Lt(e){return e==="inherit"||e==="none"||e==="enabled"||e==="auto"}function zt(e){return e==="inherit"||e==="none"||e==="enabled"||e==="auto"}function Ut(e){return e==="inherit"||e==="none"||e==="dynamic"||e==="static"||e==="blob"||e==="projected"||e==="auto"}function Bt(e){return e==="inherit"||e==="low"||e==="medium"||e==="high"||e==="ultra"}function Vt(e){return e==="inherit"||e==="scene-main"||e==="nearest"||e==="explicit"}function _r(e){let t=_t(e);if(!t)return;let n={};Lt(t.cast)&&(n.cast=t.cast),zt(t.receive)&&(n.receive=t.receive),Ut(t.mode)&&(n.mode=t.mode),Bt(t.quality)&&(n.quality=t.quality);let r=_t(t.light);if(r){let o={};Vt(r.mode)&&(o.mode=r.mode),typeof r.lightId=="string"&&r.lightId.trim()&&(o.lightId=r.lightId.trim()),Object.keys(o).length>0&&(n.light=o)}let i=va(t.params);return i&&(n.params=i),Object.keys(n).length>0?n:void 0}function De(e){let t=_r(e);return t?{shadow:t,diagnostics:[]}:{diagnostics:[]}}function kn(e,t="none"){let n=e?.mode;return!n||n==="inherit"||n==="auto"?t:n}function Mn(e,t=mt){let n=e?.quality;return n&&n!=="inherit"?n:t}function va(e){let t=_t(e);if(!t)return;let n={};return typeof t.opacity=="number"&&Number.isFinite(t.opacity)&&(n.opacity=t.opacity),typeof t.softness=="number"&&Number.isFinite(t.softness)&&(n.softness=t.softness),typeof t.bias=="number"&&Number.isFinite(t.bias)&&(n.bias=t.bias),typeof t.normalBias=="number"&&Number.isFinite(t.normalBias)&&(n.normalBias=t.normalBias),typeof t.maxDistance=="number"&&Number.isFinite(t.maxDistance)&&(n.maxDistance=t.maxDistance),(t.resolution===512||t.resolution===1024||t.resolution===2048||t.resolution===4096)&&(n.resolution=t.resolution),(t.cascadeCount===1||t.cascadeCount===2||t.cascadeCount===4)&&(n.cascadeCount=t.cascadeCount),typeof t.bakeSamples=="number"&&Number.isFinite(t.bakeSamples)&&(n.bakeSamples=t.bakeSamples),typeof t.blurKernel=="number"&&Number.isFinite(t.blurKernel)&&(n.blurKernel=t.blurKernel),Object.keys(n).length>0?n:void 0}var Ga=new Set(["cast","receive","mode","quality","light","params"]),ja=new Set(["mode","lightId"]),Fa=new Set(["opacity","softness","bias","normalBias","maxDistance","resolution","cascadeCount","bakeSamples","blurKernel"]);function gt(e,t="$.shadow"){let n=Rn(e);if(!n)throw Q("schema.invalidType",t);if(Cn(n,Ga,t),"cast"in n&&!Lt(n.cast))throw Q("schema.invalidValue",`${t}.cast`);if("receive"in n&&!zt(n.receive))throw Q("schema.invalidValue",`${t}.receive`);if("mode"in n&&!Ut(n.mode))throw Q("schema.invalidValue",`${t}.mode`);if("quality"in n&&!Bt(n.quality))throw Q("schema.invalidValue",`${t}.quality`);"light"in n&&_a(n.light,`${t}.light`),"params"in n&&La(n.params,`${t}.params`)}function _a(e,t){let n=Rn(e);if(!n)throw Q("schema.invalidType",t);if(Cn(n,ja,t),"mode"in n&&!Vt(n.mode))throw Q("schema.invalidValue",`${t}.mode`);if("lightId"in n&&(typeof n.lightId!="string"||!n.lightId.trim()))throw Q("schema.invalidValue",`${t}.lightId`);if(n.mode==="explicit"&&(typeof n.lightId!="string"||!n.lightId.trim()))throw Q("schema.invalidValue",`${t}.lightId`)}function La(e,t){let n=Rn(e);if(!n)throw Q("schema.invalidType",t);if(Cn(n,Fa,t),Ge(n,"opacity",t,r=>r>=0&&r<=1),Ge(n,"softness",t,r=>r>=0),Ge(n,"bias",t,()=>!0),Ge(n,"normalBias",t,()=>!0),Ge(n,"maxDistance",t,r=>r>0),Ge(n,"bakeSamples",t,r=>r>0),Ge(n,"blurKernel",t,r=>r>=0),"resolution"in n&&![512,1024,2048,4096].includes(n.resolution))throw Q("schema.invalidValue",`${t}.resolution`);if("cascadeCount"in n&&![1,2,4].includes(n.cascadeCount))throw Q("schema.invalidValue",`${t}.cascadeCount`)}function Ge(e,t,n,r){if(!(t in e))return;let i=e[t];if(typeof i!="number"||!Number.isFinite(i)||!r(i))throw Q("schema.invalidValue",`${n}.${t}`)}function Cn(e,t,n){for(let r of Object.keys(e))if(!t.has(r))throw Q("schema.deprecatedField",`${n}.${r}`)}function Q(e,t){let n=new Error(`${e}: ${t}`);return Object.assign(n,{code:e,path:t}),n}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var vn="fps.shadow-map-experiment";function za(e,t="$.scene.shadowMapExperiment"){let n=ce(e,t);ye(n,["qualityProfile","behaviorProfile"],t),n.qualityProfile!==void 0&&be(n.qualityProfile,`${t}.qualityProfile`),n.behaviorProfile!==void 0&&be(n.behaviorProfile,`${t}.behaviorProfile`)}function Ua(e,t="$.shadowMapExperiment"){let n=ce(e,t);ye(n,["behaviorProfile"],t),be(n.behaviorProfile,`${t}.behaviorProfile`)}function Ba(e,t="$"){let n=ce(e,t);ye(n,["schemaVersion","enabled","lightRef","defaultQualityProfile","defaultBehaviorProfile","qualityProfiles","behaviorProfiles"],t),n.schemaVersion!==1&&N(`${t}.schemaVersion`,"expected 1"),typeof n.enabled!="boolean"&&N(`${t}.enabled`,"expected boolean"),be(n.lightRef,`${t}.lightRef`);let r=be(n.defaultQualityProfile,`${t}.defaultQualityProfile`),i=be(n.defaultBehaviorProfile,`${t}.defaultBehaviorProfile`),o=zr(n.qualityProfiles,`${t}.qualityProfiles`),a=zr(n.behaviorProfiles,`${t}.behaviorProfiles`);for(let[s,l]of Object.entries(o))Ka(l,`${t}.qualityProfiles.${s}`);for(let[s,l]of Object.entries(a))Ha(l,`${t}.behaviorProfiles.${s}`);Object.prototype.hasOwnProperty.call(o,r)||N(`${t}.defaultQualityProfile`,`unknown quality profile: ${r}`),Object.prototype.hasOwnProperty.call(a,i)||N(`${t}.defaultBehaviorProfile`,`unknown behavior profile: ${i}`)}function Ur(e){Ba(e.config),e.settings!==void 0&&za(e.settings),(!Number.isInteger(e.revision)||e.revision<0)&&N("$.revision","expected a non-negative integer");let t=e.settings?.qualityProfile??e.config.defaultQualityProfile,n=e.settings?.behaviorProfile??e.config.defaultBehaviorProfile,r=Nn(e.config.qualityProfiles,t,"$.settings.qualityProfile","quality");Nn(e.config.behaviorProfiles,n,"$.settings.behaviorProfile","behavior");let i=e.objects.map((s,l)=>{let d=`$.objects[${l}]`;s.override!==void 0&&Ua(s.override,`${d}.override`);let u=s.override?.behaviorProfile??n,c=Nn(e.config.behaviorProfiles,u,`${d}.override.behaviorProfile`,"behavior");return Object.freeze({entityId:be(s.entityId,`${d}.entityId`),renderableIds:Object.freeze(es(s.renderableIds,`${d}.renderableIds`)),cast:Lr(s.cast,`${d}.cast`)??c.cast==="enabled",receive:Lr(s.receive,`${d}.receive`)??c.receive==="enabled",updateClass:c.updateClass!=="auto"?c.updateClass:s.inferredUpdateClass??"static",behaviorProfileId:u})}).sort((s,l)=>s.entityId.localeCompare(l.entityId)),o=e.config.enabled?i:[];Ya(o);let a=Object.fromEntries(Object.entries(e.config.behaviorProfiles).sort(([s],[l])=>s.localeCompare(l)).map(([s,l])=>[s,Object.freeze({cast:l.cast==="enabled",receive:l.receive==="enabled",updateClass:l.updateClass})]));return Br({schemaVersion:3,revision:e.revision,enabled:e.config.enabled,scopeId:be(e.scopeId,"$.scopeId"),light:{entityId:e.config.lightRef,direction:bt(e.lightDirection,"$.lightDirection")},qualityProfileId:t,generator:{maps:{...r.maps},...r.cascadeCount===void 0?{}:{cascadeCount:r.cascadeCount},filter:r.receiverFilter,bias:r.bias,normalBias:r.normalBias,darkness:r.darkness,...r.softness===void 0?{}:{softness:r.softness},bounds:Qa(r.bounds),backend:{...r.backend}},culling:{...r.culling},diagnosticThresholds:{...r.diagnostics},behaviorProfiles:a,objects:o,diagnostics:[]})}function Lr(e,t){if(e!==void 0)return typeof e!="boolean"&&N(t,"expected a boolean"),e}function Va(e,t){let n=ce(e,t);ye(n,["mode","center","extent","near","far"],t),n.mode!=="fixed"&&N(`${t}.mode`,"expected fixed"),bt(n.center,`${t}.center`),bt(n.extent,`${t}.extent`).some(a=>a<=0)&&N(`${t}.extent`,"expected positive values");let i=Kt(n.near,`${t}.near`),o=Kt(n.far,`${t}.far`);(i<0||o<=i)&&N(t,"expected 0 <= near < far")}function Ka(e,t){let n=ce(e,t);ye(n,["maps","cascadeCount","receiverFilter","bias","normalBias","darkness","softness","bounds","backend","culling","diagnostics"],t),Wa(n.maps,`${t}.maps`),n.cascadeCount!==void 0&&qa(n.cascadeCount,`${t}.cascadeCount`),n.receiverFilter!=="hard"&&n.receiverFilter!=="low-pcf"&&N(`${t}.receiverFilter`,"expected hard or low-pcf"),pt(n.bias,`${t}.bias`,0,.1),pt(n.normalBias,`${t}.normalBias`,0,1),pt(n.darkness,`${t}.darkness`,0,1),n.softness!==void 0&&pt(n.softness,`${t}.softness`,0,1),Va(n.bounds,`${t}.bounds`),Ja(n.backend,`${t}.backend`),Xa(n.culling,`${t}.culling`),Za(n.diagnostics,`${t}.diagnostics`)}function Ha(e,t){let n=ce(e,t);ye(n,["cast","receive","updateClass"],t),n.cast!=="enabled"&&n.cast!=="disabled"&&N(`${t}.cast`,"expected enabled or disabled"),n.receive!=="enabled"&&n.receive!=="disabled"&&N(`${t}.receive`,"expected enabled or disabled"),["auto","static","dynamic","skinned"].includes(String(n.updateClass))||N(`${t}.updateClass`,"expected auto, static, dynamic, or skinned")}function Wa(e,t){let n=ce(e,t);ye(n,["staticResolution","dynamicResolution","compositeResolution"],t),$n(n.staticResolution,`${t}.staticResolution`),$n(n.dynamicResolution,`${t}.dynamicResolution`),$n(n.compositeResolution,`${t}.compositeResolution`)}function $n(e,t){e!==512&&e!==1024&&e!==2048&&e!==4096&&N(t,"expected 512, 1024, 2048, or 4096")}function qa(e,t){e!==1&&e!==2&&e!==4&&N(t,"expected 1, 2, or 4")}function Ja(e,t){let n=ce(e,t);ye(n,["mode","fallback"],t),["auto","split","single"].includes(String(n.mode))||N(`${t}.mode`,"expected auto, split, or single"),n.fallback!=="single-map"&&n.fallback!=="disable"&&N(`${t}.fallback`,"expected single-map or disable")}function Xa(e,t){let n=ce(e,t);ye(n,["enabled","guardBandRatio"],t),typeof n.enabled!="boolean"&&N(`${t}.enabled`,"expected boolean"),pt(n.guardBandRatio,`${t}.guardBandRatio`,0,4)}function Za(e,t){let n=ce(e,t);ye(n,["staticCasterCountWarning","dynamicCasterCountWarning","renderableCountWarning"],t),On(n.staticCasterCountWarning,`${t}.staticCasterCountWarning`),On(n.dynamicCasterCountWarning,`${t}.dynamicCasterCountWarning`),On(n.renderableCountWarning,`${t}.renderableCountWarning`)}function Ya(e){let t=new Set,n=new Set;for(let r of e){t.has(r.entityId)&&N("$.objects",`duplicate entity id: ${r.entityId}`),t.add(r.entityId);for(let i of r.renderableIds)n.has(i)&&N("$.objects",`duplicate renderable id: ${i}`),n.add(i)}}function zr(e,t){let n=ce(e,t);Object.keys(n).length===0&&N(t,"expected at least one profile");for(let r of Object.keys(n))be(r,`${t} key`);return n}function Nn(e,t,n,r){return Object.prototype.hasOwnProperty.call(e,t)||N(n,`unknown ${r} profile: ${t}`),e[t]}function Qa(e){return Object.freeze({mode:"fixed",center:bt(e.center,"$.bounds.center"),extent:bt(e.extent,"$.bounds.extent"),near:e.near,far:e.far})}function bt(e,t){let n=ts(e,t);return n.length!==3&&N(t,"expected exactly three numbers"),Object.freeze(n.map((r,i)=>Kt(r,`${t}[${i}]`)))}function es(e,t){let n=e.map((r,i)=>be(r,`${t}[${i}]`));return new Set(n).size!==n.length&&N(t,"expected unique strings"),n}function Kt(e,t){return(typeof e!="number"||!Number.isFinite(e))&&N(t,"expected a finite number"),e}function pt(e,t,n,r){let i=Kt(e,t);return(i<n||i>r)&&N(t,`expected ${n}..${r}`),i}function On(e,t){return(!Number.isInteger(e)||e<0)&&N(t,"expected a non-negative integer"),e}function be(e,t){return(typeof e!="string"||!e.trim()||e!==e.trim())&&N(t,"expected a trimmed non-empty string"),e}function ce(e,t){(!e||typeof e!="object"||Array.isArray(e))&&N(t,"expected an object");let n=Object.getPrototypeOf(e);return n!==Object.prototype&&n!==null&&N(t,"expected a plain object"),e}function ts(e,t){return Array.isArray(e)||N(t,"expected an array"),e}function ye(e,t,n){let r=new Set(t);for(let i of Object.keys(e))r.has(i)||N(`${n}.${i}`,"unknown field")}function Br(e){if(!e||typeof e!="object"||Object.isFrozen(e))return e;for(let t of Object.values(e))Br(t);return Object.freeze(e)}function N(e,t){throw new Error(`shadow_map_experiment_invalid:${e}:${t}`)}var Vr=["useBlobShadow","blobSettings"],ns=["resolution","maxSize"],rs=new Set(["none","blob","static","planar","dynamic"]);function Kr(e){let t=je(e);if(!t)throw v("schema.invalidType","$");for(let i of Vr)if(Object.prototype.hasOwnProperty.call(t,i))throw v("schema.deprecatedField",`$.${i}`);if(O(t,["globalVolume","materials","renderingGroups","shadowMeshes","shadows"],"$"),as(t.globalVolume,"$.globalVolume"),ss(t.materials,"$.materials"),is(t.renderingGroups,"$.renderingGroups"),os(t.globalVolume,"$.globalVolume"),ms(t.shadowMeshes,"$.shadowMeshes"),!Object.prototype.hasOwnProperty.call(t,"shadows"))return;let n=je(t.shadows);if(!n)throw v("schema.invalidType","$.shadows");for(let i of Vr)if(Object.prototype.hasOwnProperty.call(n,i))throw v("schema.deprecatedField",`$.shadows.${i}`);if(O(n,["defaultMode","enabled","useCsm","settings","blob","staticProjected","planar","shadowRange","shadowOrtho","csm"],"$.shadows"),"defaultMode"in n&&!rs.has(String(n.defaultMode)))throw v("schema.invalidValue","$.shadows.defaultMode");ee(n,"enabled","$.shadows"),ee(n,"useCsm","$.shadows");let r=je(n.settings);if(Object.prototype.hasOwnProperty.call(n,"settings")&&!r)throw v("schema.invalidType","$.shadows.settings");if(r){O(r,["mapSize","darkness","blurKernel","bias","normalBias","shadowMinZ","shadowMaxZ","useBlurExponentialShadowMap","shadowColor"],"$.shadows.settings");for(let i of["mapSize","darkness","blurKernel","bias","normalBias","shadowMinZ","shadowMaxZ"])X(r,i,"$.shadows.settings");ee(r,"useBlurExponentialShadowMap","$.shadows.settings"),Ht(r.shadowColor,"$.shadows.settings.shadowColor",!1)}ls(n.blob,"$.shadows.blob"),cs(n.staticProjected,"$.shadows.staticProjected"),us(n.planar,"$.shadows.planar"),Fe(n.shadowRange,"$.shadows.shadowRange",["minZ","maxZ"]),Fe(n.shadowOrtho,"$.shadows.shadowOrtho",["left","right","top","bottom"]),fs(n.csm,"$.shadows.csm")}function is(e,t){if(e===void 0)return;let n=je(e);if(!n||!Array.isArray(n.slots))throw v("schema.invalidType",t);O(n,["slots"],t),n.slots.forEach((r,i)=>{let o=`${t}.slots[${i}]`,a=je(r);if(!a)throw v("schema.invalidType",o);if(O(a,["renderingGroupId","name","alphaIndexPresets"],o),![0,1,2,3].includes(a.renderingGroupId))throw v("schema.invalidValue",`${o}.renderingGroupId`);if(typeof a.name!="string"||!a.name.trim())throw v("schema.invalidValue",`${o}.name`);if(!Array.isArray(a.alphaIndexPresets))throw v("schema.invalidType",`${o}.alphaIndexPresets`);a.alphaIndexPresets.forEach((s,l)=>{let d=`${o}.alphaIndexPresets[${l}]`,u=je(s);if(!u)throw v("schema.invalidType",d);if(O(u,["name","alphaIndex"],d),typeof u.name!="string"||!u.name.trim())throw v("schema.invalidValue",`${d}.name`);jn(u,"alphaIndex",d)})})}function os(e,t){if(e===void 0)return;let n=K(e,t);for(let o of["samples","camera","lights"])if(o in n)throw v("schema.deprecatedField",`${t}.${o}`);if(O(n,["enabled","hdr","environment","imageProcessing","toneMapping","antialiasing","postProcessing","rendering","textures"],t),ee(n,"enabled",t),ee(n,"hdr",t),n.environment!==void 0){let o=K(n.environment,`${t}.environment`);for(let a of["textureAssetId","textureUrl","intensity"])if(a in o)throw v("schema.deprecatedField",`${t}.environment.${a}`);if(O(o,["texture","iblIntensity","rotationY","useCocosIBL"],`${t}.environment`),o.texture!==void 0&&o.texture!==null){let a=K(o.texture,`${t}.environment.texture`);for(let s of Object.keys(a))if(s!=="textureAssetId"&&s!=="url")throw v("schema.deprecatedField",`${t}.environment.texture.${s}`);for(let s of["textureAssetId","url"])if(s in a&&a[s]!=null&&(typeof a[s]!="string"||!a[s].trim()))throw v("schema.invalidValue",`${t}.environment.texture.${s}`)}X(o,"iblIntensity",`${t}.environment`),X(o,"rotationY",`${t}.environment`),ee(o,"useCocosIBL",`${t}.environment`)}if(Fe(n.imageProcessing,`${t}.imageProcessing`,["exposure","contrast"]),n.toneMapping!==void 0){let o=K(n.toneMapping,`${t}.toneMapping`);if(O(o,["enabled","type"],`${t}.toneMapping`),ee(o,"enabled",`${t}.toneMapping`),"type"in o&&!["standard","aces","khr-pbr-neutral"].includes(String(o.type)))throw v("schema.invalidValue",`${t}.toneMapping.type`)}if(n.antialiasing!==void 0){let o=K(n.antialiasing,`${t}.antialiasing`);if(O(o,["samples"],`${t}.antialiasing`),"samples"in o&&![1,2,4,8].includes(o.samples))throw v("schema.invalidValue",`${t}.antialiasing.samples`)}let r=ue(n.postProcessing,`${t}.postProcessing`);r&&O(r,["bloom"],`${t}.postProcessing`);let i=r?ue(r.bloom,`${t}.postProcessing.bloom`):null;if(i){O(i,["enabled","threshold","weight","kernel","scale"],`${t}.postProcessing.bloom`),ee(i,"enabled",`${t}.postProcessing.bloom`);for(let o of["threshold","weight","kernel","scale"])X(i,o,`${t}.postProcessing.bloom`)}}function as(e,t){if(e===void 0)return;let n=K(e,t),r=ue(n.rendering,`${t}.rendering`);r&&(O(r,["maxDpr","hardwareScalingLevel"],`${t}.rendering`),X(r,"maxDpr",`${t}.rendering`),ds(r,"hardwareScalingLevel",`${t}.rendering`));let i=ue(n.textures,`${t}.textures`);if(i&&(O(i,["anisotropicFilteringLevel","samplingMode"],`${t}.textures`),X(i,"anisotropicFilteringLevel",`${t}.textures`),"samplingMode"in i&&(typeof i.samplingMode!="string"||!i.samplingMode.trim())))throw v("schema.invalidValue",`${t}.textures.samplingMode`)}function ss(e,t){if(e===void 0)return;let n=K(e,t);O(n,["sceneMaterials","plantMaterials"],t);for(let r of["sceneMaterials","plantMaterials"])r in n&&K(n[r],`${t}.${r}`)}function ds(e,t,n){!(t in e)||e[t]==null||X(e,t,n)}function ls(e,t){if(e===void 0)return;let n=K(e,t);O(n,["enabled","plane","appearance","size"],t),ee(n,"enabled",t),Fe(n.plane,`${t}.plane`,["height","yOffset"]);let r=ue(n.appearance,`${t}.appearance`);r&&(O(r,["color","edgeSoftness"],`${t}.appearance`),Ht(r.color,`${t}.appearance.color`,!0),X(r,"edgeSoftness",`${t}.appearance`)),Fe(n.size,`${t}.size`,["sizeMultiplier","minSize","maxSize"])}function cs(e,t){if(e===void 0)return;let n=K(e,t);O(n,["enabled","plane","appearance","bake"],t),ee(n,"enabled",t),Fe(n.plane,`${t}.plane`,["height","yOffset"]);let r=ue(n.appearance,`${t}.appearance`);if(r&&(O(r,["color"],`${t}.appearance`),Ht(r.color,`${t}.appearance.color`,!0)),n.bake===void 0)return;let i=K(n.bake,`${t}.bake`);for(let o of ns)if(o in i)throw v("schema.deprecatedField",`${t}.bake.${o}`);O(i,["padding","blur","texelsPerMeter","atlasSize","maxAtlasPages","sdfRadiusPx","spatialChunkSize","targetChunkCount"],`${t}.bake`);for(let o of["padding","blur","texelsPerMeter","atlasSize","maxAtlasPages","sdfRadiusPx","spatialChunkSize","targetChunkCount"])X(i,o,`${t}.bake`)}function us(e,t){if(e===void 0)return;let n=K(e,t);O(n,["enabled","plane","appearance","projection","stencil","casters","receivers"],t),ee(n,"enabled",t);let r=ue(n.plane,`${t}.plane`);if(r){O(r,["normal","height","bias","heightMode"],`${t}.plane`),gs(r.normal,`${t}.plane.normal`);for(let l of["height","bias"])X(r,l,`${t}.plane`);if("heightMode"in r&&!["fixed","receiver"].includes(String(r.heightMode)))throw v("schema.invalidValue",`${t}.plane.heightMode`)}let i=ue(n.appearance,`${t}.appearance`);i&&(O(i,["color"],`${t}.appearance`),Ht(i.color,`${t}.appearance.color`,!0)),Fe(n.projection,`${t}.projection`,["footprintScale"]);let o=ue(n.stencil,`${t}.stencil`);if(o){O(o,["enabled","receiverRenderingGroup","shadowRenderingGroup"],`${t}.stencil`),ee(o,"enabled",`${t}.stencil`);for(let l of["receiverRenderingGroup","shadowRenderingGroup"])X(o,l,`${t}.stencil`)}let a=ue(n.casters,`${t}.casters`);if(a){O(a,["autoDetectAll","includePatterns","excludePatterns","rootBoundaryPatterns","minVolume"],`${t}.casters`),ee(a,"autoDetectAll",`${t}.casters`);for(let l of["includePatterns","excludePatterns","rootBoundaryPatterns"])Gn(a[l],`${t}.casters.${l}`);X(a,"minVolume",`${t}.casters`)}let s=ue(n.receivers,`${t}.receivers`);s&&(O(s,["patterns"],`${t}.receivers`),Gn(s.patterns,`${t}.receivers.patterns`))}function fs(e,t){if(e===void 0)return;let n=K(e,t);O(n,["numCascades","lambda","cascadeBlendPercentage","stabilizeCascades"],t);for(let r of["numCascades","lambda","cascadeBlendPercentage"])X(n,r,t);ee(n,"stabilizeCascades",t)}function ms(e,t){if(e===void 0)return;let n=K(e,t);O(n,["shadowReceivers","shadowCasters","excludeFromShadow"],t);for(let r of["shadowReceivers","shadowCasters","excludeFromShadow"])Gn(n[r],`${t}.${r}`)}function Fe(e,t,n){if(e===void 0)return;let r=K(e,t);O(r,n,t);for(let i of n)X(r,i,t)}function Ht(e,t,n){if(e===void 0)return;let r=K(e,t),i=n?["r","g","b","a"]:["r","g","b"];O(r,i,t);for(let o of i)jn(r,o,t)}function gs(e,t){if(e===void 0)return;let n=K(e,t);O(n,["x","y","z"],t);for(let r of["x","y","z"])jn(n,r,t)}function Gn(e,t){if(e!==void 0&&(!Array.isArray(e)||e.some(n=>typeof n!="string")))throw v("schema.invalidType",t)}function jn(e,t,n){if(!(t in e))throw v("schema.invalidValue",`${n}.${t}`);X(e,t,n)}function ue(e,t){return e===void 0?null:K(e,t)}function K(e,t){let n=je(e);if(!n)throw v("schema.invalidType",t);return n}function ee(e,t,n){if(t in e&&typeof e[t]!="boolean")throw v("schema.invalidValue",`${n}.${t}`)}function X(e,t,n){if(!(t in e))return;let r=e[t];if(typeof r!="number"||!Number.isFinite(r))throw v("schema.invalidValue",`${n}.${t}`)}function O(e,t,n){let r=new Set(t);for(let i of Object.keys(e))if(!r.has(i))throw v("schema.unknownField",`${n}.${i}`)}function v(e,t){let n=new Error(`${e}: ${t}`);return Object.assign(n,{code:e,path:t}),n}function je(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function M(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Hr(e,t){let n=M(e);return{x:H(n.x,t.x),y:H(n.y,t.y),z:H(n.z,t.z)}}function Fn(e,t){let n=M(e);return{r:Pe(n.r,t.r,0,1),g:Pe(n.g,t.g,0,1),b:Pe(n.b,t.b,0,1)}}function yt(e,t){let n=M(e);return{...Fn(n,t),a:Pe(n.a,t.a,0,1)}}function ke(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter((t,n,r)=>t.length>0&&r.indexOf(t)===n):[]}function _n(e){return(typeof e=="string"?e.trim():"")||null}function Ln(e,t){return(typeof e=="string"?e.trim():"")||t}function te(e,t){return typeof e=="boolean"?e:t}function Wr(e){return e===0||e===1||e===2||e===3?e:null}function qr(e,t){return e==="standard"||e==="aces"||e==="khr-pbr-neutral"?e:t}function Jr(e,t){return e===1||e===2||e===4||e===8?e:t}function Xr(e,t){return e==="fixed"||e==="receiver"?e:t}function Zr(e,t){return e==="none"||e==="blob"||e==="static"||e==="planar"||e==="dynamic"?e:t}function H(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function G(e,t){let n=H(e,t);return Math.max(0,n)}function Me(e,t){let n=H(e,t);return n>0?n:t}function Pe(e,t,n,r){let i=H(e,t);return Math.min(r,Math.max(n,i))}var Yr=["editor","grid","gizmo","helper","camera","light","decal","texture","trigger","collision","ui","_shadow","_planarShadow"],Qr=[...Yr,"_blobShadow"],ps=[...Qr,"_staticProjectedShadow"];var ei=[{renderingGroupId:0,name:"\u666E\u901A\u573A\u666F",alphaIndexPresets:[{name:"\u9ED8\u8BA4\u900F\u660E\u987A\u5E8F",alphaIndex:0},{name:"\u5730\u8868\u8D34\u82B1",alphaIndex:100},{name:"\u8FD1\u666F\u8986\u76D6",alphaIndex:200}]},{renderingGroupId:1,name:"\u6C34\u9762 / \u900F\u660E\u5730\u8868",alphaIndexPresets:[{name:"\u6C34\u9762",alphaIndex:0},{name:"\u900F\u660E\u5730\u8868",alphaIndex:100},{name:"\u6C34\u9762\u9AD8\u5149",alphaIndex:200}]},{renderingGroupId:2,name:"\u7279\u6548",alphaIndexPresets:[{name:"\u666E\u901A\u7279\u6548",alphaIndex:0},{name:"\u524D\u666F\u7279\u6548",alphaIndex:100},{name:"\u6700\u524D\u7279\u6548",alphaIndex:200}]},{renderingGroupId:3,name:"\u4E16\u754C\u7A7A\u95F4 UI / \u5F15\u5BFC\u7BAD\u5934",alphaIndexPresets:[{name:"\u4E16\u754C\u7A7A\u95F4 UI",alphaIndex:0},{name:"\u5F15\u5BFC\u7BAD\u5934",alphaIndex:100},{name:"\u9876\u5C42\u63D0\u793A",alphaIndex:200}]}];function Wt(e){e!=null&&Kr(e);let t=M(e),n=M(t.shadows),r=M(n.settings),i=M(n.blob),o=bs(i),a=hs(n.staticProjected),s=M(n.shadowRange),l=M(n.shadowOrtho),d=M(n.csm),u=M(t.shadowMeshes);return{renderingGroups:ti(t.renderingGroups),environment:Ss(t.globalVolume),postProcess:xs(t.globalVolume),shadows:{defaultMode:Zr(n.defaultMode,"none"),enabled:te(n.enabled,!1),useCsm:te(n.useCsm,!1),settings:{mapSize:G(r.mapSize,1024),darkness:G(r.darkness,.3),blurKernel:G(r.blurKernel,16),bias:G(r.bias,5e-5),normalBias:G(r.normalBias,.02),useBlurExponentialShadowMap:te(r.useBlurExponentialShadowMap,!0),shadowMinZ:G(r.shadowMinZ,1),shadowMaxZ:G(r.shadowMaxZ,60),shadowColor:Fn(r.shadowColor,{r:0,g:0,b:0})},blob:o,staticProjected:a,shadowRange:{minZ:G(s.minZ,1),maxZ:G(s.maxZ,60)},shadowOrtho:{left:H(l.left,-20),right:H(l.right,20),top:H(l.top,20),bottom:H(l.bottom,-20)},csm:{numCascades:G(d.numCascades,2),lambda:Pe(d.lambda,.5,0,1),cascadeBlendPercentage:Pe(d.cascadeBlendPercentage,.1,0,1),stabilizeCascades:te(d.stabilizeCascades,!0)},planar:ys(n.planar)},shadowMeshes:{shadowReceivers:ke(u.shadowReceivers),shadowCasters:ke(u.shadowCasters),excludeFromShadow:ke(u.excludeFromShadow)}}}function bs(e){let t=M(e),n=M(t.plane),r=M(t.appearance),i=M(t.size),o=yt(r.color,{r:0,g:0,b:0,a:.35});return{enabled:te(t.enabled,!0),plane:{height:H(n.height,0),yOffset:G(n.yOffset,.08)},appearance:{color:yt(r.color,o),edgeSoftness:Pe(r.edgeSoftness,.55,0,.98)},size:{sizeMultiplier:G(i.sizeMultiplier,1.25),minSize:G(i.minSize,.25),maxSize:Me(i.maxSize,20)}}}function ti(e){let t=M(e),n=Array.isArray(t.slots)?t.slots:[];return{slots:ei.map(r=>{let i=n.find(a=>Wr(M(a).renderingGroupId)===r.renderingGroupId),o=M(i);return{renderingGroupId:r.renderingGroupId,name:Ln(o.name,r.name),alphaIndexPresets:ni(o.alphaIndexPresets,r.alphaIndexPresets)}})}}function ni(e,t){let n=Array.isArray(e)?e:t,r=new Set,i=[];return n.forEach((o,a)=>{let s=M(o),l=H(s.alphaIndex,Number.NaN);!Number.isFinite(l)||r.has(l)||(r.add(l),i.push({name:Ln(s.name,`Order ${a+1}`),alphaIndex:l}))}),i}function ys(e){let t=M(e),n=M(t.plane),r=M(t.appearance),i=M(t.projection),o=M(t.stencil),a=M(t.casters),s=M(t.receivers);return{enabled:te(t.enabled,!0),plane:{normal:Hr(n.normal,{x:0,y:1,z:0}),height:H(n.height,0),heightMode:Xr(n.heightMode,"receiver"),bias:G(n.bias,.4)},appearance:{color:yt(r.color,{r:0,g:0,b:0,a:.35})},projection:{footprintScale:Pe(i.footprintScale,1,0,2)},stencil:{enabled:te(o.enabled,!0),receiverRenderingGroup:G(o.receiverRenderingGroup,0),shadowRenderingGroup:G(o.shadowRenderingGroup,1)},casters:{autoDetectAll:te(a.autoDetectAll,!0),includePatterns:ke(a.includePatterns),excludePatterns:ke(a.excludePatterns),rootBoundaryPatterns:ke(a.rootBoundaryPatterns),minVolume:G(a.minVolume,.001)},receivers:{patterns:ke(s.patterns)}}}function hs(e){let t=M(e),n=M(t.plane),r=M(t.appearance),i=M(t.bake),o=Me(i.spatialChunkSize,16);return{enabled:te(t.enabled,!1),plane:{height:H(n.height,0),yOffset:G(n.yOffset,.08)},appearance:{color:yt(r.color,{r:0,g:0,b:0,a:.35})},bake:{padding:G(i.padding,.15),blur:G(i.blur,0),texelsPerMeter:Me(i.texelsPerMeter,256),atlasSize:Me(i.atlasSize,4096),maxAtlasPages:Me(i.maxAtlasPages,8),sdfRadiusPx:G(i.sdfRadiusPx,8),spatialChunkSize:o,targetChunkCount:Me(i.targetChunkCount,64)}}}function Ss(e){let t=M(e),n=M(t.environment),r=M(n.texture),i=_n(r.textureAssetId),o=_n(r.url);return{texture:i||o?{...i?{textureAssetId:i}:{},...o?{url:o}:{}}:null,iblIntensity:G(n.iblIntensity,1),rotationY:H(n.rotationY,0)}}function xs(e){let t=M(e),n=M(t.imageProcessing),r=M(t.toneMapping),i=M(t.antialiasing),o=M(t.postProcessing),a=M(o.bloom);return{enabled:te(t.enabled,!0),hdr:te(t.hdr,!0),imageProcessing:{exposure:H(n.exposure,1),contrast:H(n.contrast,1)},toneMapping:{enabled:te(r.enabled,!0),type:qr(r.type,"aces")},antialiasing:{samples:Jr(i.samples,4)},bloom:{enabled:te(a.enabled,!1),threshold:G(a.threshold,.9),weight:G(a.weight,.2),kernel:G(a.kernel,64),scale:Me(a.scale,.5)}}}var Ps=new Set([".glb",".gltf",".png",".jpg",".jpeg",".webp",".env",".hdr",".dds",".ktx",".ktx2",".mp3",".wav",".ogg",".flac",".aac",".m4a"]);function ri(e){let t=String(e??"").trim().toLowerCase();if(/^\.[a-z0-9]+$/.test(t))return t;let n=t.split(/[?#]/,1)[0]??"",r=n.slice(n.lastIndexOf("/")+1),i=r.lastIndexOf(".");return i<=0||i===r.length-1?null:r.slice(i)}function ii(e){return Ps.has(e)}function qt(e){return e==="fps.builtin.pbr"||e==="fps.builtin.standard"?e:void 0}function oi(e){if(!e||typeof e!="object")return;let t={};(e.lightingModel==="lit"||e.lightingModel==="unlit")&&(t.lightingModel=e.lightingModel);let n={},r=ai(e.baseColor?.color);r&&(n.color=r);let i=_e(e.baseColor?.texture);i!==void 0&&(n.texture=i),Ie(e.baseColor,n,"brightness"),Ie(e.baseColor,n,"saturation"),Ie(e.baseColor,n,"contrast"),Ie(e.baseColor,n,"hue"),Object.keys(n).length>0&&(t.baseColor=n);let o={},a=_e(e.normal?.texture);a!==void 0&&(o.texture=a),Ie(e.normal,o,"strength"),Object.keys(o).length>0&&(t.normal=o),Xe(e.metallic)&&(t.metallic=e.metallic),Xe(e.roughness)&&(t.roughness=e.roughness);let s={},l=_e(e.metallicRoughness?.texture);l!==void 0&&(s.texture=l),Object.keys(s).length>0&&(t.metallicRoughness=s);let d={},u=_e(e.occlusion?.texture);u!==void 0&&(d.texture=u),Ie(e.occlusion,d,"strength"),Object.keys(d).length>0&&(t.occlusion=d);let c={},f=ai(e.emission?.color);f&&(c.color=f),Ie(e.emission,c,"intensity");let g=_e(e.emission?.texture);g!==void 0&&(c.texture=g);let p=_e(e.emission?.maskTexture);p!==void 0&&(c.maskTexture=p),Object.keys(c).length>0&&(t.emission=c);let y={};(e.alpha?.mode==="opaque"||e.alpha?.mode==="mask"||e.alpha?.mode==="blend")&&(y.mode=e.alpha.mode),Ie(e.alpha,y,"opacity"),Ie(e.alpha,y,"cutoff");let S=_e(e.alpha?.texture);return S!==void 0&&(y.texture=S),Object.keys(y).length>0&&(t.alpha=y),Object.keys(t).length>0?t:void 0}function zn(...e){let t={};for(let n of e){let r=oi(n);r&&(r.lightingModel&&(t.lightingModel=r.lightingModel),Je(t,r,"baseColor"),Je(t,r,"normal"),r.metallic!==void 0&&(t.metallic=r.metallic),r.roughness!==void 0&&(t.roughness=r.roughness),Je(t,r,"metallicRoughness"),Je(t,r,"occlusion"),Je(t,r,"emission"),Je(t,r,"alpha"))}return oi(t)??{}}function Je(e,t,n){let r=t[n];r&&Object.assign(e,{[n]:{...e[n]??{},...r}})}function ai(e){return e&&Xe(e.r)&&Xe(e.g)&&Xe(e.b)?{r:e.r,g:e.g,b:e.b}:void 0}function _e(e){if(e===null)return null;if(!e||typeof e!="object")return;let t=typeof e.url=="string"?e.url.trim():"",n=typeof e.textureAssetId=="string"?e.textureAssetId.trim():"";if(!(!t&&!n))return{...t?{url:t}:{},...n?{textureAssetId:n}:{}}}function Ie(e,t,n){Xe(e?.[n])&&(t[n]=e[n])}function Xe(e){return typeof e=="number"&&Number.isFinite(e)}function Is(e){let t=Ae(e);if(!t)return null;let n=B(t.sourceHash),r=B(t.lightHash),i=B(t.profileHash);if(!n||!r||!i)return null;let o={sourceHash:n,lightHash:r,profileHash:i,...typeof t.generatedAt=="string"&&t.generatedAt.trim()?{generatedAt:t.generatedAt.trim()}:{},...(()=>{let u=Cs(t.stats);return u?{stats:u}:{}})()};if(t.version!==2||t.format!=="sdf-atlas"||!Array.isArray(t.pages)||!Array.isArray(t.chunks))return null;let a=[],s=new Map;for(let u of t.pages){let c=Es(u);if(!c||s.has(c.id))return null;a.push(c),s.set(c.id,c)}let l=[],d=new Set;for(let u of t.chunks){let c=As(u,s);if(!c||d.has(c.id))return null;l.push(c),d.add(c.id)}return{version:2,format:"sdf-atlas",pages:a,chunks:l,...o}}function Qt(e,t="$.staticShadows"){let n=Is(e);if(n)return n;let r=new Error(`schema.unsupportedVersion: ${t}`);throw Object.assign(r,{code:"schema.unsupportedVersion",path:t}),r}function Es(e){let t=Ae(e);if(!t)return null;let n=B(t.id),r=Yt(t.width),i=Yt(t.height),o=Rs(t.sdfTextureDataUrl);return!n||r==null||i==null||!o?null:{id:n,width:r,height:i,sdfTextureDataUrl:o}}function As(e,t){let n=Ae(e);if(!n)return null;let r=B(n.id),i=ks(n.bounds),o=Ms(n.plane),a=B(n.pageId),s=Ts(n.atlasRect),l=Ds(n.atlasUv),d=$s(n.sourceNodeIds),u=B(n.sourceHash),c=B(n.lightHash),f=B(n.profileHash);if(!r||!i||!o||!a||!s||!l||!d||!u||!c||!f)return null;let g=t.get(a);return!g||s.x+s.width>g.width||s.y+s.height>g.height?null:{id:r,bounds:i,plane:o,pageId:a,atlasRect:s,atlasUv:l,sourceNodeIds:d,sourceHash:u,lightHash:c,profileHash:f,...(()=>{let p=ws(n.binding);return p?{binding:p}:{}})()}}function ws(e){let t=Ae(e);if(!t)return null;let n=B(t.id),r=B(t.ownerCasterId),i=B(t.receiverId),o=B(t.generatedAt),a=B(t.sourceHash);if(!n||!r||!i||!o||!a||t.visibleWhenOwnerVisible!==!0||t.staleWhenOwnerTransformChanges!==!0||t.staleWhenLightChanges!==!0)return null;let s=B(t.lightId),l=B(t.textureAssetId),d=B(t.projectionNodeId);return{id:n,ownerCasterId:r,receiverId:i,...s?{lightId:s}:{},...l?{textureAssetId:l}:{},...d?{projectionNodeId:d}:{},visibleWhenOwnerVisible:!0,staleWhenOwnerTransformChanges:!0,staleWhenLightChanges:!0,generatedAt:o,sourceHash:a}}function Ts(e){let t=Ae(e);if(!t)return null;let n=Ce(t.x),r=Ce(t.y),i=Yt(t.width),o=Yt(t.height);return n==null||r==null||i==null||o==null?null:{x:n,y:r,width:i,height:o}}function Ds(e){let t=Ae(e);if(!t)return null;let n=Jt(t.u0),r=Jt(t.v0),i=Jt(t.u1),o=Jt(t.v1);return n==null||r==null||i==null||o==null||i<=n||o<=r?null:{u0:n,v0:r,u1:i,v1:o}}function ks(e){let t=Ae(e);if(!t)return null;let n=he(t.minX),r=he(t.maxX),i=he(t.minZ),o=he(t.maxZ),a=he(t.y);return n==null||r==null||i==null||o==null||a==null||r<=n||o<=i?null:{minX:n,maxX:r,minZ:i,maxZ:o,y:a}}function Ms(e){let t=Ae(e);if(!t)return null;let n=he(t.height),r=he(t.yOffset);return n==null||r==null||r<0?null:{height:n,yOffset:r}}function Cs(e){let t=Ae(e);if(!t)return null;let n=Ce(t.sourceRootCount),r=Ce(t.sourceMeshCount),i=Ce(t.attemptedChunkCount),o=Ce(t.chunkCount),a=Ce(t.textureCount);return n==null||r==null||i==null||o==null||a==null?null:{sourceRootCount:n,sourceMeshCount:r,attemptedChunkCount:i,chunkCount:o,textureCount:a,...Xt(t.skippedChunkCount,"skippedChunkCount"),...Xt(t.pageCount,"pageCount"),...Ee(t.resolution,"resolution"),...Ee(t.chunkSize,"chunkSize"),...Ee(t.atlasSize,"atlasSize"),...Zt(t.atlasUsedPixels,"atlasUsedPixels"),...Zt(t.atlasAllocatedPixels,"atlasAllocatedPixels"),...Ns(t.atlasOccupancy,"atlasOccupancy"),...Ee(t.texelsPerMeter,"texelsPerMeter"),...Ee(t.effectiveTexelsPerMeter,"effectiveTexelsPerMeter"),...Ee(t.maxAtlasPages,"maxAtlasPages"),...Zt(t.sdfRadiusPx,"sdfRadiusPx"),...Ee(t.spatialChunkSize,"spatialChunkSize"),...Ee(t.effectiveSpatialChunkSize,"effectiveSpatialChunkSize"),...Ee(t.targetChunkCount,"targetChunkCount"),...Xt(t.bakedChunkCount,"bakedChunkCount"),...Xt(t.reusedChunkCount,"reusedChunkCount"),...Zt(t.durationMs,"durationMs")}}function Rs(e){let t=B(e);return t&&/^data:image\/png[;,]/i.test(t)?t:null}function $s(e){if(!Array.isArray(e)||e.length===0)return null;let t=[],n=new Set;for(let r of e){let i=B(r);if(!i)return null;n.has(i)||t.push(i),n.add(i)}return t}function B(e){return typeof e=="string"&&e.trim()?e.trim():null}function he(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Ce(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}function Yt(e){return typeof e=="number"&&Number.isInteger(e)&&e>0?e:null}function Jt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1?e:null}function Xt(e,t){let n=Ce(e);return n==null?{}:{[t]:n}}function Ee(e,t){let n=he(e);return n==null||n<=0?{}:{[t]:n}}function Zt(e,t){let n=he(e);return n==null||n<0?{}:{[t]:n}}function Ns(e,t){let n=he(e);return n==null||n<0||n>1?{}:{[t]:n}}function Ae(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var Os="@fps-games/editor.playable-sdk.scene-compiler",vs="2",Gs=1e-4,ae={nodeKinds:["group","instance","transform","primitive","image"],primitiveShapes:["cube","sphere","plane","capsule"],transformTypes:["plain","light","camera","groundDecal"],assetTypes:["glb","texture"],materialScopes:["sharedAsset","nodeMaterial"],materialModes:["shared","instance"],materialShaderIds:["fps.builtin.pbr","fps.builtin.standard"],materialAssetSystemPresets:["default-pbr","default-standard"],runtimeV3:{assetFields:["id","guid","type","url","external","warmupCount","singleton","materialMode","defaults","materialSlots"],materialSlotFields:["slotId","label","sourceSurfaces"],materialSlotSourceSurfaceFields:["ownerNodePath","nodeIndex","nodeIndexPath","meshIndex","primitiveIndex","sourceMaterialIndex","sourceMeshName"]},hierarchy:{parentTargets:["root","sceneNode"]},runtimeOnlyTokens:["/@fs","assetUrl","sourceAssetUrl","sourceAssetPath"]},js=new Set(ae.nodeKinds),Fs=new Set(ae.primitiveShapes),_s=new Set(ae.assetTypes),Ls=new Set(ae.materialModes),zs=new Set(ae.materialScopes),Us=new Set(ae.materialAssetSystemPresets),Bs=new Set(ae.transformTypes),ht=new Set(ae.hierarchy.parentTargets),Vs=ae.runtimeOnlyTokens,Ks=new Set(ae.runtimeV3.assetFields),Hs=new Set(ae.runtimeV3.materialSlotFields),Ws=new Set(ae.runtimeV3.materialSlotSourceSurfaceFields);function qs(e,t={}){let{allowOrphanSharedMaterials:n=!0,allowOrphanNodeMaterials:r=!0,strictAssetIds:i=[],strictNodeIds:o=[],maxErrors:a=50}=t,s=Number.isInteger(a)&&a>0?a:50,l=[],d=new Set(i),u=new Set(o),c=(m,L)=>{l.length<s&&l.push({path:m,message:L})};if(!x(e))return c("$","scene json must be an object"),l;let f=e.schemaVersion;f!==2&&f!==3&&c("$.schemaVersion","schemaVersion must be 2 or 3"),ld(e.meta?.generatedFrom,"$.meta.generatedFrom",c);let g=hd(e),p=e.scene;if(!x(p))return c("$.scene","scene must be an object"),l;if(E(p.rootId)||c("$.scene.rootId","rootId must be a non-empty string"),Array.isArray(p.assets)||c("$.scene.assets","assets must be an array"),Array.isArray(p.nodes)||c("$.scene.nodes","nodes must be an array"),Array.isArray(p.materialAssets)||c("$.scene.materialAssets","materialAssets must be an array"),Array.isArray(p.materials)||c("$.scene.materials","materials must be an array"),Array.isArray(p.textures)||c("$.scene.textures","textures must be an array"),l.length>0)return l;e.staticShadows!=null&&si(()=>Qt(e.staticShadows,"$.staticShadows"),"$.staticShadows",c);let y=new Set,S=new Map,P=new Map,D=new Set,T=new Set([p.rootId]),$=new Map,_=new Map,q=new Set;return p.assets.forEach((m,L)=>{let b=`$.scene.assets[${L}]`;if(!x(m)){c(b,"asset must be an object");return}if(E(m.id)?y.has(m.id)?c(`${b}.id`,`duplicate asset id: ${m.id}`):(y.add(m.id),S.set(m.id,m.type)):c(`${b}.id`,"asset.id must be a non-empty string"),_s.has(m.type)||c(`${b}.type`,"asset.type must be glb or texture"),m.guid!=null&&!E(m.guid)&&c(`${b}.guid`,"asset.guid must be a non-empty string when present"),m.url!=null&&!E(m.url)&&c(`${b}.url`,"url must be a non-empty string when present"),m.external!=null&&!x(m.external)&&c(`${b}.external`,"external must be an object when present"),m.warmupCount!=null&&(!Number.isInteger(m.warmupCount)||m.warmupCount<0)&&c(`${b}.warmupCount`,"warmupCount must be a non-negative integer when present"),m.singleton!=null&&typeof m.singleton!="boolean"&&c(`${b}.singleton`,"singleton must be a boolean when present"),m.materialMode!=null&&!Ls.has(m.materialMode)&&c(`${b}.materialMode`,"materialMode must be shared or instance"),dd(m.defaults,`${b}.defaults`,c),f===3)for(let z of Object.keys(m))Ks.has(z)||c(`${b}.${z}`,`runtime schema v3 asset field is not allowed: ${z}`);else m.displayName!=null&&!E(m.displayName)&&c(`${b}.displayName`,"displayName must be a non-empty string when present"),m.category!=null&&!E(m.category)&&c(`${b}.category`,"category must be a non-empty string when present"),m.metadata!=null&&!x(m.metadata)&&c(`${b}.metadata`,"metadata must be an object when present");let j=f===3?m.materialSlots:x(m.metadata)?m.metadata.materialSlots:void 0,W=f===3?`${b}.materialSlots`:`${b}.metadata.materialSlots`,J=new Set;j!=null&&(Array.isArray(j)?j.forEach((z,Ot)=>{let We=`${W}[${Ot}]`;if(!x(z)||!E(z.slotId)){c(We,f===3?"material slot must contain a stable slotId":"material slot must contain stable slotId and ownerNodePath");return}if(f!==3&&!E(z.ownerNodePath)){c(We,"material slot must contain stable slotId and ownerNodePath");return}J.has(z.slotId)?c(`${We}.slotId`,`duplicate material slot id: ${z.slotId}`):J.add(z.slotId),f===3&&sd(z,We,c)}):c(W,"materialSlots must be an array when present")),E(m.id)&&P.set(m.id,J),d.has(m.id)&&ci(m,b,c)}),p.nodes.forEach((m,L)=>{let b=`$.scene.nodes[${L}]`;if(!x(m)){c(b,"node must be an object");return}E(m.id)&&$.set(m.id,m),E(m.id)?T.has(m.id)?c(`${b}.id`,`duplicate node id: ${m.id}`):(T.add(m.id),typeof m.kind=="string"&&_.set(m.id,m.kind),m.kind==="transform"&&Object.prototype.hasOwnProperty.call(m,"marker")&&q.add(m.id)):c(`${b}.id`,"node.id must be a non-empty string"),js.has(m.kind)||c(`${b}.kind`,"node.kind must be group, instance, transform, primitive, or image")}),p.materialAssets.forEach((m,L)=>{let b=`$.scene.materialAssets[${L}]`;if(!x(m)){c(b,"material asset must be an object");return}E(m.id)?D.has(m.id)?c(`${b}.id`,`duplicate material asset id: ${m.id}`):D.add(m.id):c(`${b}.id`,"material asset id must be a non-empty string"),m.name!=null&&!E(m.name)&&c(`${b}.name`,"material asset name must be a non-empty string when present"),m.guid!=null&&!E(m.guid)&&c(`${b}.guid`,"material asset guid must be a non-empty string when present"),Object.prototype.hasOwnProperty.call(m,"materialKind")&&c(`${b}.materialKind`,"materialKind is not supported; use shaderId"),Object.prototype.hasOwnProperty.call(m,"profile")&&c(`${b}.profile`,"profile is not supported; use properties");let j=qt(m.shaderId),W=Qs(m.shaderId);!j&&!W&&c(`${b}.shaderId`,"shaderId must be a built-in id or a namespaced lowercase project id"),m.definitionVersion!=null&&!ed(m.definitionVersion)?c(`${b}.definitionVersion`,"definitionVersion must be a positive integer when present"):W&&m.definitionVersion==null&&c(`${b}.definitionVersion`,"definitionVersion is required for project shader material assets"),j?fi(m.properties,`${b}.properties`,c):td(m.properties,`${b}.properties`,c);for(let J of Object.keys(m))["id","guid","name","shaderId","definitionVersion","properties","system","origin"].includes(J)||c(`${b}.${J}`,`material asset field is not allowed: ${J}`);nd(m.system,`${b}.system`,c),rd(m.origin,`${b}.origin`,c),id(m,b,c)}),p.nodes.forEach((m,L)=>{if(!x(m))return;let b=`$.scene.nodes[${L}]`,j=Object.prototype.hasOwnProperty.call(m,"parentId");j&&!E(m.parentId)&&c(`${b}.parentId`,"parentId must be a non-empty string when present");let W=j?m.parentId:p.rootId;E(W)&&od(W,p.rootId,T,`${b}.parentId`,c),E(m.id)&&ad(m.id,p.rootId,$,`${b}.parentId`,c),cd(m.source,`${b}.source`,c),pi(m.transform,`${b}.transform`,c),Md(m.rendering,`${b}.rendering`,c),m.shadow!=null&&si(()=>gt(m.shadow,`${b}.shadow`),`${b}.shadow`,c),Object.prototype.hasOwnProperty.call(m,"shadowMode")&&c(`${b}.shadowMode`,"deprecated field; use shadow.mode");let J=null;m.kind==="instance"&&(x(m.instance)?y.has(m.instance.assetId)?S.get(m.instance.assetId)!=="glb"?c(`${b}.instance.assetId`,"instance.assetId must reference a glb asset"):J=E(m.instance.assetId)?m.instance.assetId:null:c(`${b}.instance.assetId`,`assetId must reference scene.assets: ${m.instance.assetId}`):c(`${b}.instance`,"instance node must contain instance object")),m.kind==="primitive"&&(x(m.primitive)?Fs.has(m.primitive.shape)||c(`${b}.primitive.shape`,"primitive.shape must be cube, sphere, plane, or capsule"):c(`${b}.primitive`,"primitive node must contain primitive object")),m.kind==="image"&&(x(m.image)?(y.has(m.image.assetId)?S.get(m.image.assetId)!=="texture"&&c(`${b}.image.assetId`,"image.assetId must reference a texture asset"):c(`${b}.image.assetId`,`assetId must reference scene.assets: ${m.image.assetId}`),x(m.image.size)?(li(m.image.size.width)||c(`${b}.image.size.width`,"image.size.width must be positive"),li(m.image.size.height)||c(`${b}.image.size.height`,"image.size.height must be positive")):c(`${b}.image.size`,"image.size must be an object")):c(`${b}.image`,"image node must contain image object")),m.kind==="transform"&&m.transformType!=null&&!Bs.has(m.transformType)&&c(`${b}.transformType`,"transformType must be plain, light, camera, or groundDecal"),m.kind==="transform"&&m.transformType==="groundDecal"?Pd(m.groundDecal,`${b}.groundDecal`,c):Object.prototype.hasOwnProperty.call(m,"groundDecal")&&c(`${b}.groundDecal`,"groundDecal is only allowed on transform nodes with transformType groundDecal"),m.kind==="transform"&&(yd(m.camera,`${b}.camera`,c),Sd(m.light,`${b}.light`,c,g)),Object.prototype.hasOwnProperty.call(m,"marker")&&(m.kind!=="transform"?c(`${b}.marker`,"marker is only allowed on transform nodes"):(ud(m.marker,`${b}.marker`,c),fd(m.marker,m.id,T,q,`${b}.marker`,c))),(m.kind==="instance"||m.kind==="transform"||m.kind==="primitive"||m.kind==="image")&&Xs(m.overrides,`${b}.overrides`,D,J?P.get(J):void 0,f===3?"materialSlots":"metadata.materialSlots",c),u.has(m.id)&&ci(m,b,c)}),p.materials.forEach((m,L)=>{let b=`$.scene.materials[${L}]`;if(!x(m)){c(b,"material must be an object");return}if(E(m.id)||c(`${b}.id`,"material.id must be a non-empty string"),m.scope!=null&&!zs.has(m.scope)&&c(`${b}.scope`,"material scope must be sharedAsset or nodeMaterial"),m.scope==="sharedAsset"&&(!E(m.assetId)||!y.has(m.assetId))&&!n&&c(`${b}.assetId`,`shared material assetId must reference scene.assets: ${m.assetId}`),m.scope==="nodeMaterial"){if((!E(m.nodeId)||!T.has(m.nodeId))&&!r)c(`${b}.nodeId`,`node material nodeId must reference scene.nodes: ${m.nodeId}`);else if(E(m.nodeId)&&T.has(m.nodeId)){let j=_.get(m.nodeId);j!=="instance"&&j!=="transform"&&j!=="primitive"&&c(`${b}.nodeId`,`node material nodeId must reference an instance, transform, or primitive node: ${m.nodeId}`)}}E(m.materialName)||c(`${b}.materialName`,"materialName must be a non-empty string"),x(m.properties)?yi(m.properties,`${b}.properties`,c):c(`${b}.properties`,"properties must be an object")}),l}function Js(e,t={}){let n=qs(e,t);return{ok:n.length===0,errors:n}}function si(e,t,n){try{e()}catch(r){let i=typeof r?.path=="string"?r.path:t,o=typeof r?.code=="string"?r.code:"schema.invalidValue";n(i,o)}}function Xs(e,t,n,r,i,o){if(e!=null){if(!x(e)){o(t,"overrides must be an object when present");return}ui(e.materialBinding,`${t}.materialBinding`,n,o),Zs(e.materialSlotBindings,`${t}.materialSlotBindings`,"slotId",n,r,i,o),Object.prototype.hasOwnProperty.call(e,"childMaterialBindings")&&o(`${t}.childMaterialBindings`,"deprecated field; use materialSlotBindings keyed by slotId"),Object.prototype.hasOwnProperty.call(e,"childMaterials")&&o(`${t}.childMaterials`,"deprecated field; use materialSlotBindings keyed by slotId")}}function Zs(e,t,n,r,i,o,a){if(e!=null){if(!x(e)){a(t,"material binding map must be an object when present");return}for(let[s,l]of Object.entries(e)){let d=`${t}.${s}`;E(s)||a(d,`${n} must be a non-empty string`),i?i.has(s)||a(d,`${n} must reference asset ${o}`):a(d,`${n} requires an instance asset with ${o}`),l==null?a(d,"material binding must be an object"):ui(l,d,r,a)}}}function ui(e,t,n,r){if(e!=null){if(!x(e)){r(t,"material binding must be an object when present");return}e.materialAssetId!=null&&(E(e.materialAssetId)?n.has(e.materialAssetId)||r(`${t}.materialAssetId`,`materialAssetId must reference scene.materialAssets: ${e.materialAssetId}`):r(`${t}.materialAssetId`,"materialAssetId must be non-empty when present")),e.override!=null&&fi(e.override,`${t}.override`,r)}}function fi(e,t,n){if(!x(e)){n(t,"material asset profile must be an object");return}if(e.lightingModel!=null&&e.lightingModel!=="lit"&&e.lightingModel!=="unlit"&&n(`${t}.lightingModel`,"lightingModel must be lit or unlit"),e.baseColor!=null)if(!x(e.baseColor))n(`${t}.baseColor`,"baseColor must be an object");else{en(e.baseColor.color,`${t}.baseColor.color`,n),Le(e.baseColor.texture,`${t}.baseColor.texture`,n);for(let r of["brightness","saturation","contrast","hue"])e.baseColor[r]!=null&&!oe(e.baseColor[r])&&n(`${t}.baseColor.${r}`,`${r} must be a finite number`)}for(let r of["metallic","roughness"])e[r]!=null&&!oe(e[r])&&n(`${t}.${r}`,`${r} must be a finite number`);e.normal!=null&&(x(e.normal)?(Le(e.normal.texture,`${t}.normal.texture`,n),e.normal.strength!=null&&!oe(e.normal.strength)&&n(`${t}.normal.strength`,"normal strength must be a finite number")):n(`${t}.normal`,"normal must be an object")),e.metallicRoughness!=null&&(x(e.metallicRoughness)?Le(e.metallicRoughness.texture,`${t}.metallicRoughness.texture`,n):n(`${t}.metallicRoughness`,"metallicRoughness must be an object")),e.occlusion!=null&&(x(e.occlusion)?(Le(e.occlusion.texture,`${t}.occlusion.texture`,n),e.occlusion.strength!=null&&!oe(e.occlusion.strength)&&n(`${t}.occlusion.strength`,"occlusion strength must be a finite number")):n(`${t}.occlusion`,"occlusion must be an object")),e.emission!=null&&(x(e.emission)?(en(e.emission.color,`${t}.emission.color`,n),e.emission.intensity!=null&&!oe(e.emission.intensity)&&n(`${t}.emission.intensity`,"emission intensity must be a finite number"),Le(e.emission.texture,`${t}.emission.texture`,n),Le(e.emission.maskTexture,`${t}.emission.maskTexture`,n)):n(`${t}.emission`,"emission must be an object")),e.alpha!=null&&(x(e.alpha)?(e.alpha.mode!=null&&e.alpha.mode!=="opaque"&&e.alpha.mode!=="mask"&&e.alpha.mode!=="blend"&&n(`${t}.alpha.mode`,"alpha mode must be opaque, mask, or blend"),e.alpha.opacity!=null&&!oe(e.alpha.opacity)&&n(`${t}.alpha.opacity`,"alpha opacity must be a finite number"),e.alpha.cutoff!=null&&!oe(e.alpha.cutoff)&&n(`${t}.alpha.cutoff`,"alpha cutoff must be a finite number"),Le(e.alpha.texture,`${t}.alpha.texture`,n)):n(`${t}.alpha`,"alpha must be an object"))}var Ys=/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/;function Vn(e){return typeof e=="string"&&!e.startsWith("fps.builtin.")&&Ys.test(e)}function Qs(e){return Vn(e)?e:null}function ed(e){return Number.isSafeInteger(e)&&e>0}function td(e,t,n){if(!x(e)){n(t,"project shader material properties must be an object");return}Un(e,t,n)}function Un(e,t,n){if(!(e===null||typeof e=="string"||typeof e=="boolean")){if(typeof e=="number"){Number.isFinite(e)||n(t,"project shader material numbers must be finite");return}if(Array.isArray(e)){e.forEach((r,i)=>Un(r,`${t}[${i}]`,n));return}if(x(e)){for(let[r,i]of Object.entries(e))Un(i,`${t}.${r}`,n);return}n(t,"project shader material properties must be JSON-safe")}}function Le(e,t,n){if(e!=null){if(!x(e)){n(t,"texture ref must be an object");return}e.url!=null&&!E(e.url)&&n(`${t}.url`,"texture url must be non-empty when present"),e.textureAssetId!=null&&!E(e.textureAssetId)&&n(`${t}.textureAssetId`,"textureAssetId must be non-empty when present")}}function nd(e,t,n){if(e!=null){if(!x(e)){n(t,"material asset system must be an object");return}e.readonly!=null&&typeof e.readonly!="boolean"&&n(`${t}.readonly`,"readonly must be boolean"),e.preset!=null&&!Us.has(e.preset)&&n(`${t}.preset`,"preset must be default-pbr or default-standard")}}function rd(e,t,n){if(e!=null){if(!x(e)){n(t,"material asset origin must be an object");return}e.type!=="imported"&&e.type!=="created"&&e.type!=="duplicated"&&e.type!=="preset"&&n(`${t}.type`,"origin type must be imported, created, duplicated, or preset"),e.sourceAssetGuid!=null&&!E(e.sourceAssetGuid)&&n(`${t}.sourceAssetGuid`,"sourceAssetGuid must be non-empty when present"),e.sourceAssetId!=null&&!E(e.sourceAssetId)&&n(`${t}.sourceAssetId`,"sourceAssetId must be non-empty when present"),e.sourceSlotId!=null&&!E(e.sourceSlotId)&&n(`${t}.sourceSlotId`,"sourceSlotId must be non-empty when present"),e.sourceMaterialIndex!=null&&!Number.isInteger(e.sourceMaterialIndex)&&n(`${t}.sourceMaterialIndex`,"sourceMaterialIndex must be an integer when present"),e.sourceMaterialName!=null&&!E(e.sourceMaterialName)&&n(`${t}.sourceMaterialName`,"sourceMaterialName must be non-empty when present"),e.sourceMaterialAssetId!=null&&!E(e.sourceMaterialAssetId)&&n(`${t}.sourceMaterialAssetId`,"sourceMaterialAssetId must be non-empty when present")}}function id(e,t,n){let r=x(e.system)?e.system.preset:void 0;r==="default-pbr"&&e.shaderId!=="fps.builtin.pbr"&&n(`${t}.shaderId`,"default-pbr material assets must use shaderId fps.builtin.pbr"),r==="default-standard"&&e.shaderId!=="fps.builtin.standard"&&n(`${t}.shaderId`,"default-standard material assets must use shaderId fps.builtin.standard")}function od(e,t,n,r,i){if(e===t){ht.has("root")||i(r,`parentId must point to scene node: ${e}`);return}if(ht.has("sceneNode")&&n.has(e))return;let o=ht.has("root")&&ht.has("sceneNode")?"root or scene node":ht.has("sceneNode")?"scene node":"root";i(r,`parentId must point to ${o}: ${e}`)}function ad(e,t,n,r,i){if(!E(t))return;let o=new Set([e]),a=E(n.get(e)?.parentId)?n.get(e)?.parentId:t;for(;E(a)&&a!==t;){if(o.has(a)){i(r,`parentId creates a node cycle involving ${e}`);return}o.add(a);let s=n.get(a);if(!s)return;a=E(s.parentId)?s.parentId:t}}function sd(e,t,n){for(let r of Object.keys(e))Hs.has(r)||n(`${t}.${r}`,`runtime schema v3 material slot field is not allowed: ${r}`);if(e.label!=null&&!E(e.label)&&n(`${t}.label`,"label must be a non-empty string when present"),!Array.isArray(e.sourceSurfaces)||e.sourceSurfaces.length===0){n(`${t}.sourceSurfaces`,"sourceSurfaces must be a non-empty array");return}for(let r=0;r<e.sourceSurfaces.length;r+=1){let i=`${t}.sourceSurfaces[${r}]`,o=e.sourceSurfaces[r];if(!x(o)){n(i,"source surface must be an object");continue}for(let a of Object.keys(o))Ws.has(a)||n(`${i}.${a}`,`runtime schema v3 material slot source surface field is not allowed: ${a}`);E(o.ownerNodePath)||n(`${i}.ownerNodePath`,"ownerNodePath must be a non-empty string");for(let a of["meshIndex","primitiveIndex"])(!Number.isInteger(o[a])||o[a]<0)&&n(`${i}.${a}`,`${a} must be a non-negative integer`);for(let a of["nodeIndex","sourceMaterialIndex"])o[a]!=null&&(!Number.isInteger(o[a])||o[a]<0)&&n(`${i}.${a}`,`${a} must be a non-negative integer when present`);o.nodeIndexPath!=null&&(!Array.isArray(o.nodeIndexPath)||o.nodeIndexPath.some(a=>!Number.isInteger(a)||a<0))&&n(`${i}.nodeIndexPath`,"nodeIndexPath must contain non-negative integers"),E(o.sourceMeshName)||n(`${i}.sourceMeshName`,"sourceMeshName is required")}}function dd(e,t,n){if(e!=null){if(!x(e)){n(t,"defaults must be an object");return}if(pi(e.transform,`${t}.transform`,n),di(e.outline,`${t}.outline`,n),e.childOutlines!=null)if(!x(e.childOutlines))n(`${t}.childOutlines`,"childOutlines must be an object");else for(let[r,i]of Object.entries(e.childOutlines))di(i,`${t}.childOutlines.${r}`,n)}}function ld(e,t,n){if(e!=null){if(!x(e)){n(t,"generatedFrom must be an object when present");return}mi(e,t,n),E(e.compilerId)||n(`${t}.compilerId`,"compilerId must be a non-empty string"),E(e.compilerVersion)||n(`${t}.compilerVersion`,"compilerVersion must be a non-empty string"),E(e.compiledAt)||n(`${t}.compiledAt`,"compiledAt must be a non-empty string")}}function cd(e,t,n){if(e!=null){if(!x(e)){n(t,"source must be an object when present");return}mi(e,t,n),e.objectGuid!=null&&!E(e.objectGuid)&&n(`${t}.objectGuid`,"objectGuid must be a non-empty string when present"),e.objectId!=null&&!E(e.objectId)&&n(`${t}.objectId`,"objectId must be a non-empty string when present"),e.component!=null&&!E(e.component)&&n(`${t}.component`,"component must be a non-empty string when present"),e.propertyPath!=null&&!E(e.propertyPath)&&n(`${t}.propertyPath`,"propertyPath must be a non-empty string when present")}}function mi(e,t,n){E(e.sourceId)||n(`${t}.sourceId`,"sourceId must be a non-empty string"),E(e.sourceType)||n(`${t}.sourceType`,"sourceType must be a non-empty string"),e.revision!=null&&(typeof e.revision!="number"||!Number.isFinite(e.revision))&&n(`${t}.revision`,"revision must be a finite number when present")}function gi(e,t){let n=Js(e,t);if(n.ok)return;let r=new Error(`scene_json_schema_failed:
|
|
3
|
+
${JSON.stringify(n.errors,null,2)}`);throw Object.assign(r,{code:"scene_json_schema_failed",diagnostics:n.errors}),r}function x(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function E(e){return typeof e=="string"&&e.trim().length>0}function pi(e,t,n){if(e!=null){if(!x(e)){n(t,"transform must be an object");return}Se(e.position,`${t}.position`,n),Se(e.rotation,`${t}.rotation`,n),Se(e.rotationDeg,`${t}.rotationDeg`,n),typeof e.scale=="number"?Number.isFinite(e.scale)||n(`${t}.scale`,"scale number must be finite"):Se(e.scale,`${t}.scale`,n)}}function ud(e,t,n){if(!x(e)){n(t,"marker must be an object");return}Re(e,["schemaVersion","label","type","kind","tags","note","color","target","semanticFrame","geometry","metadata"],t,n),e.schemaVersion!==1&&n(`${t}.schemaVersion`,"marker.schemaVersion must be 1"),E(e.label)||n(`${t}.label`,"marker.label must be a non-empty string"),E(e.type)||n(`${t}.type`,"marker.type must be a non-empty string"),e.kind!=null&&!E(e.kind)&&n(`${t}.kind`,"marker.kind must be a non-empty string when present"),e.tags!=null&&(Array.isArray(e.tags)?e.tags.forEach((r,i)=>{typeof r!="string"&&n(`${t}.tags[${i}]`,"marker tag must be a string")}):n(`${t}.tags`,"marker.tags must be an array when present")),e.note!=null&&typeof e.note!="string"&&n(`${t}.note`,"marker.note must be a string when present"),e.color!=null&&pd(e.color,`${t}.color`,n),e.target!=null&&Bn(e.target,`${t}.target`,n),e.semanticFrame!=null&&md(e.semanticFrame,`${t}.semanticFrame`,n),gd(e.geometry,`${t}.geometry`,n),e.metadata!=null&&!x(e.metadata)&&n(`${t}.metadata`,"marker.metadata must be an object when present")}function fd(e,t,n,r,i,o){if(!x(e))return;let a=[];e.target!=null&&a.push({value:e.target,path:`${i}.target`}),x(e.geometry)&&e.geometry.target!=null&&a.push({value:e.geometry.target,path:`${i}.geometry.target`});for(let s of a)x(s.value)&&(s.value.kind!=="scene-object"&&s.value.kind!=="marker"&&o(`${s.path}.kind`,"runtime marker target kind must be scene-object or marker"),E(s.value.id)&&(s.value.id===t?o(`${s.path}.id`,"runtime marker target must not reference its marker node"):n.has(s.value.id)?s.value.kind==="marker"&&!r.has(s.value.id)?o(`${s.path}.id`,`runtime marker target must reference a marker node: ${s.value.id}`):s.value.kind==="scene-object"&&r.has(s.value.id)&&o(`${s.path}.id`,`runtime scene-object target must not reference a marker node: ${s.value.id}`):o(`${s.path}.id`,`runtime marker target must reference scene.nodes: ${s.value.id}`)))}function Bn(e,t,n){if(!x(e)){n(t,"marker target must be an object");return}Re(e,["kind","id","label","path","metadata"],t,n),E(e.kind)||n(`${t}.kind`,"marker target kind must be a non-empty string"),E(e.id)||n(`${t}.id`,"marker target id must be a non-empty string");for(let r of["label","path"])e[r]!=null&&typeof e[r]!="string"&&n(`${t}.${r}`,`marker target ${r} must be a string when present`);e.metadata!=null&&!x(e.metadata)&&n(`${t}.metadata`,"marker target metadata must be an object when present")}function md(e,t,n){if(!x(e)){n(t,"marker semanticFrame must be an object");return}Re(e,["origin","forward","right","up","label","description"],t,n),x(e.origin)?Se(e.origin,`${t}.origin`,n):n(`${t}.origin`,"marker semanticFrame.origin must be a vector object");for(let r of["forward","right","up"])e[r]!=null&&Se(e[r],`${t}.${r}`,n);for(let r of["label","description"])e[r]!=null&&typeof e[r]!="string"&&n(`${t}.${r}`,`marker semanticFrame ${r} must be a string when present`)}function gd(e,t,n){if(!x(e)){n(t,"marker.geometry must be an object");return}if(e.kind==="box"){Re(e,["kind"],t,n);return}if(e.kind==="point"){Re(e,["kind","coordinateSpace","position","offset","target"],t,n),e.coordinateSpace!=null&&e.coordinateSpace!=="world"&&e.coordinateSpace!=="local"&&n(`${t}.coordinateSpace`,"point marker coordinateSpace must be world or local"),e.position!=null&&Se(e.position,`${t}.position`,n),e.offset!=null&&Se(e.offset,`${t}.offset`,n),e.target!=null&&Bn(e.target,`${t}.target`,n);return}if(e.kind==="object-bounds"){Re(e,["kind","target"],t,n),Bn(e.target,`${t}.target`,n);return}if(e.kind==="polyhedron"){Re(e,["kind","coordinateSpace","vertices","faces"],t,n),e.coordinateSpace!=null&&e.coordinateSpace!=="world"&&n(`${t}.coordinateSpace`,"polyhedron marker coordinateSpace must be world"),Array.isArray(e.vertices)?e.vertices.forEach((r,i)=>{let o=`${t}.vertices[${i}]`;x(r)?Se(r,o,n):n(o,"polyhedron marker vertex must be a vector object")}):n(`${t}.vertices`,"polyhedron marker vertices must be an array"),e.faces!=null&&(Array.isArray(e.faces)?e.faces.forEach((r,i)=>{Array.isArray(r)?r.forEach((o,a)=>{(!Number.isInteger(o)||o<0)&&n(`${t}.faces[${i}][${a}]`,"polyhedron marker index must be a non-negative integer")}):n(`${t}.faces[${i}]`,"polyhedron marker face must be an array")}):n(`${t}.faces`,"polyhedron marker faces must be an array when present"));return}n(`${t}.kind`,"marker.geometry.kind must be box, point, object-bounds, or polyhedron")}function pd(e,t,n){if(!x(e)){n(t,"marker color must be an object");return}Re(e,["r","g","b"],t,n);for(let r of["r","g","b"])bi(e[r])||n(`${t}.${r}`,"marker color component must be between 0 and 1")}function Re(e,t,n,r){let i=new Set(t);for(let o of Object.keys(e))i.has(o)||r(`${n}.${o}`,`field is not allowed: ${o}`)}function Se(e,t,n){if(e!=null){if(!x(e)){n(t,"value must be a vector object");return}for(let r of["x","y","z"])(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,"vector component must be a finite number")}}function bd(e,t,n){if(e!=null){if(!x(e)){n(t,"value must be a vector object");return}for(let r of["x","y"])(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,"vector component must be a finite number")}}function oe(e){return typeof e=="number"&&Number.isFinite(e)}function ze(e){return oe(e)&&e>0}function bi(e){return oe(e)&&e>=0&&e<=1}function en(e,t,n){if(e!=null){if(!x(e)){n(t,"color must be an object");return}for(let r of["r","g","b"])(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,"color component must be a finite number")}}function yd(e,t,n){if(e!=null){if(!x(e)){n(t,"camera must be an object");return}e.projection!=null&&e.projection!=="orthographic"&&e.projection!=="perspective"&&n(`${t}.projection`,"camera projection must be orthographic or perspective");for(let r of["alpha","beta"])e[r]!=null&&!oe(e[r])&&n(`${t}.${r}`,"camera property must be a finite number when present");for(let r of["radius","orthoSize"])e[r]!=null&&!ze(e[r])&&n(`${t}.${r}`,"camera property must be a positive finite number when present");e.fov!=null&&!ze(e.fov)&&n(`${t}.fov`,"camera fov must be a positive finite number"),Se(e.targetOffset,`${t}.targetOffset`,n),bd(e.targetScreenOffset,`${t}.targetScreenOffset`,n);for(let r of["minZ","maxZ","lowerRadiusLimit","upperRadiusLimit"])e[r]!=null&&!ze(e[r])&&n(`${t}.${r}`,"camera property must be a positive finite number");for(let r of["lowerBetaLimit","upperBetaLimit"])e[r]!=null&&!oe(e[r])&&n(`${t}.${r}`,"camera property must be a finite number");e.inertia!=null&&!bi(e.inertia)&&n(`${t}.inertia`,"camera inertia must be between 0 and 1"),ze(e.minZ)&&ze(e.maxZ)&&e.maxZ<=e.minZ&&n(`${t}.maxZ`,"camera maxZ must be greater than minZ"),oe(e.lowerBetaLimit)&&oe(e.upperBetaLimit)&&e.upperBetaLimit<e.lowerBetaLimit&&n(`${t}.upperBetaLimit`,"camera upperBetaLimit must be greater than or equal to lowerBetaLimit"),ze(e.lowerRadiusLimit)&&ze(e.upperRadiusLimit)&&e.upperRadiusLimit<e.lowerRadiusLimit&&n(`${t}.upperRadiusLimit`,"camera upperRadiusLimit must be greater than or equal to lowerRadiusLimit")}}function hd(e){let t=e.meta?.generatedFrom;return x(t)&&t.compilerId===Os&&t.compilerVersion===vs}function Sd(e,t,n,r=!1){if(e==null)return;let i=r&&x(e)&&!Object.prototype.hasOwnProperty.call(e,"schemaVersion")?xd(e,t):e;try{qe(i,t)}catch(o){let a=o;n(typeof a.path=="string"?a.path:t,typeof a.reason=="string"?a.reason:typeof a.message=="string"?a.message:"light does not satisfy the Engine Runtime Light contract")}}function xd(e,t){let n={...e,schemaVersion:1};if(e.type!=="directional"||!x(e.direction))return n;let{x:r,y:i,z:o}=e.direction;if(![r,i,o].every(s=>typeof s=="number"&&Number.isFinite(s)))return n;let a=Math.hypot(r,i,o);return a<=0||Math.abs(a-1)>Gs?n:{...n,direction:ut(e.direction,`${t}.direction`)}}function di(e,t,n){if(e!=null){if(!x(e)){n(t,"outline must be an object");return}e.renderOutline!=null&&typeof e.renderOutline!="boolean"&&n(`${t}.renderOutline`,"renderOutline must be boolean"),e.outlineWidth!=null&&(typeof e.outlineWidth!="number"||!Number.isFinite(e.outlineWidth))&&n(`${t}.outlineWidth`,"outlineWidth must be a finite number"),en(e.outlineColor,`${t}.outlineColor`,n)}}function Pd(e,t,n){if(e==null){n(t,"groundDecal is required when transformType is groundDecal");return}if(!x(e)){n(t,"groundDecal must be an object");return}Id(e,t,n)}function Id(e,t,n){if(E(e.uiKind)||n(`${t}.uiKind`,"groundDecal UI kind must be non-empty"),!x(e.size))n(`${t}.size`,"groundDecal.size must be an object");else for(let r of["width","depth"])(typeof e.size[r]!="number"||!Number.isFinite(e.size[r])||e.size[r]<=0)&&n(`${t}.size.${r}`,"groundDecal size must be a positive finite number");if(e.aspectSourceLayerId!=null&&!E(e.aspectSourceLayerId)&&n(`${t}.aspectSourceLayerId`,"aspectSourceLayerId must be non-empty when present"),e.lockAspectToBorder!=null&&typeof e.lockAspectToBorder!="boolean"&&n(`${t}.lockAspectToBorder`,"lockAspectToBorder must be boolean when present"),e.editorPreviewActive!=null&&n(`${t}.editorPreviewActive`,"editorPreviewActive is editor-only and must not appear in runtime scene data"),Ed(e.mask,`${t}.mask`,n),Ad(e.rendering,`${t}.rendering`,n),!Array.isArray(e.layers)){n(`${t}.layers`,"groundDecal UI layers must be an array");return}e.layers.forEach((r,i)=>wd(r,`${t}.layers[${i}]`,n)),Td(e.layers,`${t}.layers`,n)}function Ed(e,t,n){if(e!=null){if(!x(e)){n(t,"groundDecal UI mask must be an object");return}e.enabled!=null&&typeof e.enabled!="boolean"&&n(`${t}.enabled`,"mask.enabled must be boolean"),e.source!=null&&e.source!=="roundedRect"&&e.source!=="borderAlpha"&&e.source!=="texture"&&n(`${t}.source`,"mask.source must be roundedRect, borderAlpha, or texture"),e.textureId!=null&&!E(e.textureId)&&n(`${t}.textureId`,"mask.textureId must be non-empty when present");for(let r of["cornerRadius","padding"])e[r]!=null&&(typeof e[r]!="number"||!Number.isFinite(e[r])||e[r]<0)&&n(`${t}.${r}`,`${r} must be a non-negative finite number`)}}function Ad(e,t,n){if(e!=null){if(!x(e)){n(t,"groundDecal UI rendering must be an object");return}for(let r of["textureWidth","textureHeight"])e[r]!=null&&(!Number.isInteger(e[r])||e[r]<=0)&&n(`${t}.${r}`,`${r} must be a positive integer`);for(let r of["alphaIndex","diffuseTextureLevel","emissiveTextureLevel"])e[r]!=null&&(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,`${r} must be a finite number`)}}function wd(e,t,n){if(!x(e)){n(t,"groundDecal UI layer must be an object");return}E(e.id)||n(`${t}.id`,"layer.id must be non-empty"),E(e.role)||n(`${t}.role`,"layer.role must be non-empty"),e.editorPreviewPercent!=null&&n(`${t}.editorPreviewPercent`,"editorPreviewPercent is editor-only and must not appear in runtime scene data"),e.enabled!=null&&typeof e.enabled!="boolean"&&n(`${t}.enabled`,"layer.enabled must be boolean"),(typeof e.zOrder!="number"||!Number.isFinite(e.zOrder))&&n(`${t}.zOrder`,"layer.zOrder must be a finite number"),e.opacity!=null&&(typeof e.opacity!="number"||!Number.isFinite(e.opacity))&&n(`${t}.opacity`,"layer.opacity must be finite"),e.rotationDeg!=null&&(typeof e.rotationDeg!="number"||!Number.isFinite(e.rotationDeg)||e.rotationDeg<=-180||e.rotationDeg>180)&&n(`${t}.rotationDeg`,"layer.rotationDeg must be in the range (-180, 180]"),Dd(e.rect,`${t}.rect`,n),e.kind==="texture"?(e.textureId!=null&&!E(e.textureId)&&n(`${t}.textureId`,"texture layer textureId must be non-empty when present"),e.imageFit!=null&&e.imageFit!=="contain"&&e.imageFit!=="stretch"&&n(`${t}.imageFit`,"texture layer imageFit must be contain or stretch"),Ze(e.tint,`${t}.tint`,n)):e.kind==="textureProgress"?(e.textureId!=null&&!E(e.textureId)&&n(`${t}.textureId`,"texture progress layer textureId must be non-empty when present"),e.imageFit!=null&&e.imageFit!=="contain"&&e.imageFit!=="stretch"&&n(`${t}.imageFit`,"texture progress layer imageFit must be contain or stretch"),(typeof e.value!="number"||!Number.isFinite(e.value)||e.value<0||e.value>1)&&n(`${t}.value`,"texture progress value must be between 0 and 1"),e.direction!=null&&!["leftToRight","rightToLeft","bottomToTop","topToBottom"].includes(String(e.direction))&&n(`${t}.direction`,"texture progress direction is invalid"),Ze(e.tint,`${t}.tint`,n)):e.kind==="color"?Ze(e.color,`${t}.color`,n):e.kind==="progress"?((typeof e.value!="number"||!Number.isFinite(e.value)||e.value<0||e.value>1)&&n(`${t}.value`,"progress value must be between 0 and 1"),e.direction!=null&&!["leftToRight","rightToLeft","bottomToTop","topToBottom"].includes(String(e.direction))&&n(`${t}.direction`,"progress direction is invalid"),Ze(e.color,`${t}.color`,n)):e.kind==="text"?kd(e.text,`${t}.text`,n):n(`${t}.kind`,"layer.kind must be texture, textureProgress, color, progress, or text")}function Td(e,t,n){let r=new Map;e.forEach((i,o)=>{if(!x(i)||!E(i.id))return;let a=r.get(i.id);if(a!=null){n(`${t}[${o}].id`,`layer.id must be unique; duplicate of layers[${a}]`);return}r.set(i.id,o)})}function Dd(e,t,n){if(!x(e)){n(t,"layer.rect must be an object");return}for(let r of["x","z","width","depth"])(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,`rect.${r} must be a finite number`);for(let r of["width","depth"])typeof e[r]=="number"&&e[r]<=0&&n(`${t}.${r}`,`rect.${r} must be positive`)}function kd(e,t,n){if(!x(e)){n(t,"text layer text must be an object");return}typeof e.value!="string"&&n(`${t}.value`,"text.value must be a string"),e.fontFamily!=null&&typeof e.fontFamily!="string"&&n(`${t}.fontFamily`,"fontFamily must be a string"),e.fontSize!=null&&(typeof e.fontSize!="number"||!Number.isFinite(e.fontSize)||e.fontSize<=0)&&n(`${t}.fontSize`,"fontSize must be a positive finite number"),e.fontWeight!=null&&typeof e.fontWeight!="string"&&n(`${t}.fontWeight`,"fontWeight must be a string"),Ze(e.color,`${t}.color`,n),Ze(e.strokeColor,`${t}.strokeColor`,n),e.strokeWidth!=null&&(typeof e.strokeWidth!="number"||!Number.isFinite(e.strokeWidth)||e.strokeWidth<0)&&n(`${t}.strokeWidth`,"strokeWidth must be a non-negative finite number")}function Ze(e,t,n){if(e!=null){if(!x(e)){n(t,"color must be an object");return}for(let r of["r","g","b"])(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n(`${t}.${r}`,`color.${r} must be finite`);e.a!=null&&(typeof e.a!="number"||!Number.isFinite(e.a))&&n(`${t}.a`,"color.a must be finite")}}function Md(e,t,n){if(e!=null){if(!x(e)){n(t,"rendering must be an object");return}e.renderingGroupId!=null&&e.renderingGroupId!==0&&e.renderingGroupId!==1&&e.renderingGroupId!==2&&e.renderingGroupId!==3&&n(`${t}.renderingGroupId`,"renderingGroupId must be 0, 1, 2, or 3"),e.alphaIndex!=null&&(typeof e.alphaIndex!="number"||!Number.isFinite(e.alphaIndex))&&n(`${t}.alphaIndex`,"alphaIndex must be a finite number")}}function li(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function yi(e,t,n){for(let[r,i]of Object.entries(e)){let o=`${t}.${r}`;["albedoColor","diffuseColor","emissiveColor","outlineColor"].includes(r)&&en(i,o,n),["metallic","roughness","contrast","brightness","saturation","hue","colorDensity","alpha","alphaCutOff","transparencyMode"].includes(r)&&(typeof i!="number"||!Number.isFinite(i))&&n(o,`${r} must be a finite number`),r==="backFaceCulling"&&typeof i!="boolean"&&n(o,"backFaceCulling must be boolean"),["albedoTexture","normalTexture","metallicTexture"].includes(r)&&(x(i)?i.url!=null&&!E(i.url)&&n(`${o}.url`,"texture url must be non-empty when present"):n(o,`${r} must be an object`)),["pbr","standard"].includes(r)&&(x(i)?yi(i,o,n):n(o,`${r} must be an object`))}}function ci(e,t,n){let r=JSON.stringify(e),i=Vs.filter(o=>r.includes(o));i.length>0&&n(t,`contains runtime-only asset fields: ${i.join(", ")}`)}function Cd(e,t,n){let r=hi(e)??512,i=hi(t)??512;if(!Number.isFinite(n)||n<=0)return{width:r,height:i};let o=r,a=Math.max(1,Math.round(o/n));return a>i&&(a=i,o=Math.max(1,Math.round(a*n))),{width:o,height:a}}function Si(e){let t=e.rendering?.textureWidth??512,n=e.rendering?.textureHeight??512,r=e.size.width>0&&e.size.depth>0?e.size.width/e.size.depth:t/n;return Cd(t,n,r)}function hi(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(64,Math.min(2048,Math.round(e)))}var fe=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),Ue={kind:"texture"},xi={kind:"color"},Rd={kind:"enum",values:["lit","unlit"]},$d={kind:"enum",values:["opaque","mask","blend"]},Ei={lightingModel:Rd,baseColor:{kind:"object",properties:{color:xi,texture:Ue,brightness:fe(0),saturation:fe(0),contrast:fe(0),hue:fe(-180,180)}},normal:{kind:"object",properties:{texture:Ue,strength:fe(0)}},emission:{kind:"object",properties:{color:xi,intensity:fe(0),texture:Ue,maskTexture:Ue}},alpha:{kind:"object",properties:{mode:$d,opacity:fe(0,1),cutoff:fe(0,1),texture:Ue}}},Nd={kind:"object",properties:{...Ei,metallic:fe(0,1),roughness:fe(0,1),metallicRoughness:{kind:"object",properties:{texture:Ue}},occlusion:{kind:"object",properties:{texture:Ue,strength:fe(0)}}}},Od={kind:"object",properties:Ei},vd={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},metallic:0,roughness:1,emission:{color:{r:0,g:0,b:0},intensity:0}},Gd={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},emission:{color:{r:0,g:0,b:0},intensity:0}},Pi=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],Be={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},Ai=[Qe("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),Qe("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),et("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),me("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[Ye("properties.baseColor.texture.textureAssetId","baseTexture")]}),me("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[Ye("properties.baseColor.texture.textureAssetId","baseTexture")]}),me("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[Ye("properties.baseColor.texture.textureAssetId","baseTexture")]}),me("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[Ye("properties.baseColor.texture.textureAssetId","baseTexture")]}),et("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[Be]),me("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Be,Ye("properties.normal.texture.textureAssetId","normalTexture")]}),Qe("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),me("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),et("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),Qe("properties.alpha.mode","alpha",60,"enum","assetAlphaMode","alphaMode","opaque",{options:[{value:"opaque",labelKey:"assetAlphaModeOpaque"},{value:"mask",labelKey:"assetAlphaModeMask"},{value:"blend",labelKey:"assetAlphaModeBlend"}],binding:"alpha.mode",updateClass:"pipeline"}),me("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),me("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),et("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],jd=[...Ai,me("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[Be]}),me("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[Be]}),et("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[Be]),et("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[Be]),me("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Be,Ye("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],Fd=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:Nd,defaultProperties:vd,inspector:{sections:Pi,fields:jd}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:Od,defaultProperties:Gd,inspector:{sections:Pi,fields:Ai}}],wi=_d(Fd);function _d(e){let t=new Map;for(let r of e){Ld(r,t);let i=zd(r);t.set(r.shaderId,Mi(i))}let n=Object.freeze([...t.values()]);return Object.freeze({get(r){return typeof r=="string"?t.get(r)??null:null},list(){return n}})}function Ti(e,t=wi){return t.get(e)}function tn(e){return Ti(e)}function nn(e,t,n="properties",r=wi){let i=Ti(e,r);if(!i)return[{path:"shaderId",message:`Unknown material shader: ${String(e)}`}];let o=[];return Hn(i.propertiesSchema,t,n,o),o}function Qe(e,t,n,r,i,o,a,s){return{path:e,sectionId:t,order:n,control:r,labelKey:i,tooltipKey:o,defaultValue:a,updateClass:"uniform",...s}}function me(e,t,n,r,i,o,a={}){return Qe(e,t,n,"number",r,i,o,{binding:e.replace(/^properties\./,""),step:a.step??.05,displayPrecision:2,precision:2,...a})}function et(e,t,n,r,i,o,a,s){return Qe(e,n,r,"texture",i,o,"",{schemaPath:t,binding:a,updateClass:"texture",conditions:s})}function Ye(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function Ld(e,t){if(!qt(e.shaderId)&&!Vn(e.shaderId))throw new Error("Material Shader Definition shaderId must be a supported built-in id or a lowercase namespaced project id.");if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Material Shader Definition ${e.shaderId} must use a positive integer version.`);if(t.has(e.shaderId))throw new Error(`Duplicate Material Shader Definition: ${e.shaderId}`);if(e.sourceFile!=null&&!Bd(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);Di(e.shaderId,e.propertiesSchema,"properties");let n=[];if(Hn(e.propertiesSchema,e.defaultProperties,"properties",n),n.length>0){let o=n[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${o.path} ${o.message}.`)}let r=new Set;for(let o of e.inspector.sections){if(!o.id.trim()||r.has(o.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${o.id}`);r.add(o.id)}let i=new Set;for(let o of e.inspector.fields){if(!o.path.startsWith("properties.")||i.has(o.path))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate field: ${o.path}`);if(!r.has(o.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${o.path} references an unknown section.`);Ud(e,o),i.add(o.path)}}function zd(e){let t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(n=>{if(n.control!=="number")return n;let r=ki(t.propertiesSchema,n.schemaPath??n.path);return r?.kind!=="number"?n:{...n,...r.min!=null?{min:r.min}:{},...r.max!=null?{max:r.max}:{}}})}}}function Ud(e,t){let n=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(let[i,o]of n)if(o!=null&&!Number.isFinite(o))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${i} must be finite.`);if(t.control!=="number"){if(n.some(([,i])=>i!=null))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} uses numeric ranges with a non-number control.`);return}let r=ki(e.propertiesSchema,t.schemaPath??t.path);if(r?.kind!=="number")throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} must reference a number schema.`);for(let[i,o,a]of[["min",t.min,r.min],["max",t.max,r.max]])if(o!=null&&o!==a)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${i} must match propertiesSchema.`);if(t.softMin!=null&&t.softMax!=null&&t.softMin>t.softMax)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not exceed softMax.`);if(r.min!=null&&t.softMin!=null&&t.softMin<r.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(r.max!=null&&t.softMax!=null&&t.softMax>r.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function Di(e,t,n){if(t.kind==="object"){for(let[r,i]of Object.entries(t.properties))Di(e,i,`${n}.${r}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${n} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${n} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${n} min must not exceed max.`);return}if(t.kind==="color"&&t.channels!=null&&t.channels!==3&&t.channels!==4)throw new Error(`Material Shader Definition ${e} color field ${n} channels must be 3 or 4.`)}function Bd(e){let t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function Vd(e){let t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function ki(e,t){let n=Vd(t).replace(/^properties\./,"").split(".").filter(Boolean);if(n.length===0)return null;let r=e;for(let i of n){if(r.kind!=="object")return null;let o=r.properties[i];if(!o)return null;r=o}return r}function Hn(e,t,n,r){if(e.kind==="object"){if(!Kn(t)){r.push({path:n,message:"must be an object"});return}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,o)||r.push({path:`${n}.${o}`,message:"is not supported by the selected shader"});for(let[o,a]of Object.entries(e.properties))t[o]!==void 0&&Hn(a,t[o],`${n}.${o}`,r);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){r.push({path:n,message:"must be a finite number"});return}e.min!=null&&t<e.min&&r.push({path:n,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&r.push({path:n,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&r.push({path:n,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?r.push({path:n,message:"must be a string"}):t===null&&!e.nullable&&r.push({path:n,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&r.push({path:n,message:`must be one of: ${e.values.join(", ")}`});return}if(e.kind==="color"){let o=e.channels===4?["r","g","b","a"]:["r","g","b"];Ii(t,n,o,r,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){Ii(t,n,e.kind==="vec2"?["x","y"]:["x","y","z"],r,`a ${e.kind} object`);return}if(t===null)return;if(!Kn(t)){r.push({path:n,message:"must be a texture reference object or null"});return}Object.keys(t).some(o=>o!=="url"&&o!=="textureAssetId")&&r.push({path:n,message:"must contain only url or textureAssetId"});for(let o of["url","textureAssetId"]){let a=t[o];a!==void 0&&(typeof a!="string"||!a.trim())&&r.push({path:`${n}.${o}`,message:"must be a non-empty string"})}}function Ii(e,t,n,r,i){if(!Kn(e)){r.push({path:t,message:`must be ${i}`});return}Object.keys(e).some(o=>!n.includes(o))&&r.push({path:t,message:`must contain only ${n.join(", ")}`});for(let o of n)(typeof e[o]!="number"||!Number.isFinite(e[o]))&&r.push({path:`${t}.${o}`,message:"must be a finite number"})}function Mi(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))Mi(t)}return e}function Kn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ci(e){return e.trim().replace(/^\/+|\/+$/g,"")}function Kd(e){let t=[],n=new Map(e.assets.map(r=>[r.id,r]));for(let r of e.scene.gameObjects){let i=nl(r),o=rn(r.overrides?.materialBinding);o&&t.push({kind:"root",scope:"scene",gameObjectId:r.id,gameObjectName:r.name,materialAssetId:o,bindingPath:"overrides.materialBinding.materialAssetId",label:i});let a=Hd(e,r,n),s=new Map(a.filter(d=>!!d.slotId).map(d=>[d.slotId,d])),l=r.overrides?.materialSlotBindings??{};for(let[d,u]of Object.entries(l)){let c=rn(u);if(!c)continue;let f=s.get(d),g=rl(f,d);t.push({kind:"slot",scope:"scene",gameObjectId:r.id,gameObjectName:r.name,materialAssetId:c,bindingPath:`overrides.materialSlotBindings.${d}.materialAssetId`,label:`${i} / ${g}`,slotId:d,ownerNodePath:Ni(f)??d})}}for(let r of e.assets)if(!(r.type!=="prefab"||!r.prefab)){Ri(t,{ownerId:r.id,ownerName:r.displayName??r.id,prefabAssetId:r.id,path:`assets.${r.id}.prefab.overrides`,overrides:r.prefab.overrides});for(let i of r.prefab.nodes??[])Ri(t,{ownerId:`${r.id}:${i.id}`,ownerName:`${r.displayName??r.id} / ${i.name??i.id}`,prefabAssetId:r.id,prefabNodeId:i.id,path:`assets.${r.id}.prefab.nodes.${i.id}.overrides`,overrides:i.overrides})}return t}function Ri(e,t){let n=rn(t.overrides?.materialBinding);n&&e.push({kind:"root",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:n,bindingPath:`${t.path}.materialBinding.materialAssetId`,label:t.ownerName,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}});for(let[r,i]of Object.entries(t.overrides?.materialSlotBindings??{})){let o=rn(i);o&&e.push({kind:"slot",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:o,bindingPath:`${t.path}.materialSlotBindings.${r}.materialAssetId`,label:`${t.ownerName} / ${r}`,slotId:r,ownerNodePath:r,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}})}}function on(e){let t=[...new Set((e.scene.materialAssets??[]).map(s=>s.id?.trim()).filter(s=>!!s))],n=new Set(t),r=Kd(e),i=r.filter(s=>!n.has(s.materialAssetId)),o=new Map;for(let s of i){let l=o.get(s.materialAssetId)??[];l.push(s),o.set(s.materialAssetId,l)}let a=[...o.entries()].map(([s,l])=>({kind:"missing-material-asset",materialAssetId:s,usages:l}));return{ok:a.length===0,materialAssetIds:t,references:r,missingMaterialAssetIds:a.map(s=>s.materialAssetId),missingReferences:i,issues:a}}function Hd(e,t,n){let r=new Map;for(let i of Wd(e,t,n))r.set(i.slotId,i);return[...r.values()].sort((i,o)=>(i.label??i.slotId).localeCompare(o.label??o.slotId)||i.slotId.localeCompare(o.slotId))}function Ni(e){return e?.sourceSurfaces[0]?.ownerNodePath??null}function Wd(e,t,n){let r=tt(t);if(!r)return[];let o=(n?.get(r.assetId)??e.assets.find(s=>s.id===r.assetId))?.metadata?.materialSlots;if(!Array.isArray(o))return[];let a=[];for(let s of o){let l=qd(s);l&&a.push(l)}return a}function qd(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=typeof t.slotId=="string"&&t.slotId.trim()?t.slotId.trim():"",r=Array.isArray(t.sourceSurfaces)?t.sourceSurfaces:null,i=Jd(r);if(!n||!r||i.length===0||i.length!==r.length)return null;let o=typeof t.label=="string"&&t.label.trim()?t.label.trim():i[0].ownerNodePath,a=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",s=Array.isArray(t.materialNames)?t.materialNames.filter(d=>typeof d=="string"&&!!d.trim()).map(d=>d.trim()):void 0,l=Zd(t.sourceMaterialProfiles);return{slotId:n,label:o,sourceSurfaces:i,...a?{materialName:a}:{},...s&&s.length>0?{materialNames:s}:{},...l&&l.length>0?{sourceMaterialProfiles:l}:{}}}function Jd(e){return Array.isArray(e)?e.flatMap(t=>{let n=tl(t);if(!n)return[];let r=Ci(typeof n.ownerNodePath=="string"?n.ownerNodePath:""),i=Number.isInteger(n.meshIndex)&&n.meshIndex>=0?n.meshIndex:void 0,o=Number.isInteger(n.primitiveIndex)&&n.primitiveIndex>=0?n.primitiveIndex:void 0;if(!r||i==null||o==null)return[];let a=Number.isInteger(n.nodeIndex)&&n.nodeIndex>=0?n.nodeIndex:void 0,s=Array.isArray(n.nodeIndexPath)?n.nodeIndexPath.filter(f=>Number.isInteger(f)&&f>=0):void 0,l=Number.isInteger(n.sourceMaterialIndex)&&n.sourceMaterialIndex>=0?n.sourceMaterialIndex:void 0,d=typeof n.sourceMeshName=="string"&&n.sourceMeshName.trim()?n.sourceMeshName.trim():void 0,u=typeof n.triangleCount=="number"&&Number.isFinite(n.triangleCount)&&n.triangleCount>=0?n.triangleCount:void 0,c=Xd(n.boundingBox);return[{ownerNodePath:r,...a!=null?{nodeIndex:a}:{},...s&&s.length>0?{nodeIndexPath:s}:{},meshIndex:i,primitiveIndex:o,...l!=null?{sourceMaterialIndex:l}:{},...d?{sourceMeshName:d}:{},...u!=null?{triangleCount:u}:{},...c?{boundingBox:c}:{}}]}):[]}function Xd(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n=$i(t.min),r=$i(t.max);if(!(!n&&!r))return{...n?{min:n}:{},...r?{max:r}:{}}}function $i(e){if(!Array.isArray(e)||e.length<3)return null;let[t,n,r]=e;return typeof t=="number"&&Number.isFinite(t)&&typeof n=="number"&&Number.isFinite(n)&&typeof r=="number"&&Number.isFinite(r)?[t,n,r]:null}function Zd(e){if(!Array.isArray(e))return;let t=e.map(Yd).filter(n=>!!n);return t.length>0?t:void 0}function Yd(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Number.isInteger(t.sourceMaterialIndex))return null;let n=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",r=t.profile&&typeof t.profile=="object"&&!Array.isArray(t.profile)?t.profile:void 0,i=Qd(t.textureHints);return{sourceMaterialIndex:t.sourceMaterialIndex,...n?{materialName:n}:{},...r?{profile:r}:{},...i&&i.length>0?{textureHints:i}:{}}}function Qd(e){if(!Array.isArray(e))return;let t=e.map(el).filter(n=>!!n);return t.length>0?t:void 0}function el(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=typeof t.profilePath=="string"&&t.profilePath.trim()?t.profilePath.trim():"",r=typeof t.reason=="string"&&t.reason.trim()?t.reason.trim():"";return!n||!r?null:{profilePath:n,reason:r,...Number.isInteger(t.textureIndex)?{textureIndex:t.textureIndex}:{},...Number.isInteger(t.imageIndex)?{imageIndex:t.imageIndex}:{},...Number.isInteger(t.bufferView)?{bufferView:t.bufferView}:{},...typeof t.mimeType=="string"&&t.mimeType.trim()?{mimeType:t.mimeType.trim()}:{},...typeof t.uri=="string"&&t.uri.trim()?{uri:t.uri.trim()}:{}}}function tl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function nl(e){return e.name?.trim()||e.id}function rn(e){return typeof e?.materialAssetId=="string"?e.materialAssetId.trim():""}function rl(e,t){return e?.label?.trim()||Ni(e)?.trim()||e?.slotId?.trim()||t}var sn=1;function vi(e){let t=structuredClone(e),n={ordinaryObjects:0,prefabRoots:0,discardedFields:0},r=ne(t.scene);return r&&(Z(r,"shadowMapExperiment",n),Array.isArray(r.gameObjects)&&r.gameObjects.forEach(i=>il(i,n))),Array.isArray(t.assets)&&t.assets.forEach(i=>ol(i,n)),{document:t,summary:n}}function Wn(e){let t=ne(e);return!t||t.prefab!=null||t.transformType==="camera"||t.transformType==="light"||t.camera!=null||t.light!=null?!1:t.kind==="primitive"||ne(t.primitive)?!0:Array.isArray(t.components)&&t.components.some(n=>{let r=ne(n)?.type;return r==="ModelRenderer"||r==="ImageRenderer"})}function il(e,t){let n=ne(e);if(!n)return;let r=ne(n.shadow);Z(n,"shadowMode",t),Z(n,"shadowMapExperiment",t),Wn(n)?(n.shadow=Gi(r),t.ordinaryObjects+=1):Z(n,"shadow",t)}function ol(e,t){let n=ne(e);if(!n)return;let r=ne(n.defaults);r&&(Z(r,"shadowMode",t),Z(r,"shadow",t),Z(r,"shadowMapExperiment",t));let i=ne(n.prefab);if(!i)return;let o=ne(i.defaults);o&&Z(o,"shadowMode",t),i.defaults={...o??{},shadow:Gi(o?.shadow)},t.prefabRoots+=1;let a=ne(i.defaults);if(Z(a,"shadowMapExperiment",t),Array.isArray(i.nodes))for(let s of i.nodes){let l=ne(s);if(!l)continue;Z(l,"shadowMode",t),Z(l,"shadow",t),Z(l,"shadowMapExperiment",t);let d=ne(l.defaults);d&&(Z(d,"shadowMode",t),Z(d,"shadow",t),Z(d,"shadowMapExperiment",t))}}function Gi(e){let t=ne(e);return{cast:t?.cast==="enabled"?"enabled":"none",receive:t?.receive==="enabled"?"enabled":"none"}}function Z(e,t,n){Object.prototype.hasOwnProperty.call(e,t)&&(delete e[t],n.discardedFields+=1)}function ne(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var Em=Symbol("unsupported-editor-scene-authored-clone-value");function qn(e){return e.components.find(ll)??null}function tt(e){return e.components.find(cl)??null}function Jn(e){return e.components.find(ul)??null}function an(e){return e?.type==="prefab"&&U(e.prefab?.sourceAssetId)!=null}function ji(e){return U(e?.prefab?.prefabId)!=null}function Oi(e){return U(e?.prefab?.sourceAssetId)}function Pt(e){if(!e?.prefab)return null;let t=Fi(e.prefab),n=U(e.prefab.rootNodeId);if(n&&t.some(i=>i.id===n))return n;let r=t.find(i=>i.kind==="root"&&!i.parentId);return r?r.id:null}function Xn(e){return e?.prefab?Fi(e.prefab):[]}function Fi(e){if(!Array.isArray(e.nodes))return[];let t=[];for(let n of e.nodes){let r=al(n);r&&!t.some(i=>i.id===r.id)&&t.push(r)}return structuredClone(t)}function al(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=U(t.id);return!n||!sl(t.kind)?null:{id:n,...U(t.guid)?{guid:U(t.guid)}:{},...U(t.name)?{name:U(t.name)}:{},...U(t.parentId)?{parentId:U(t.parentId)}:{},kind:t.kind,...t.transform?{transform:structuredClone(t.transform)}:{},...U(t.sourceAssetId)?{sourceAssetId:U(t.sourceAssetId)}:{},...U(t.sourceNodePath)?{sourceNodePath:U(t.sourceNodePath)}:{},...U(t.childPrefabId)?{childPrefabId:U(t.childPrefabId)}:{},...t.primitive?{primitive:structuredClone(t.primitive)}:{},...t.light?{light:structuredClone(t.light)}:{},...t.marker?{marker:structuredClone(t.marker)}:{},...t.defaults?{defaults:structuredClone(t.defaults)}:{},...t.overrides?{overrides:structuredClone(t.overrides)}:{},...t.metadata?{metadata:structuredClone(t.metadata)}:{}}}function sl(e){return e==="root"||e==="group"||e==="model"||e==="primitive"||e==="light"||e==="prefabInstance"||e==="marker"||e==="collision"}function _i(e,t){let n=U(e?.materialAssetId),r=U(t?.materialAssetId),i=zn(e?.override,t?.override);return gl({...r??n?{materialAssetId:r??n}:{},...xt(i)?{override:i}:{}})}function Li(e,t){let n={},r=_i(e?.materialBinding,t?.materialBinding);r&&(n.materialBinding=r);let i=pl(e?.materialSlotBindings,t?.materialSlotBindings);return i&&(n.materialSlotBindings=i),xt(n)?n:void 0}function dn(e,t){let n=typeof t=="string"?ml(e,t):t,r=typeof t=="string"?t:t.id,i=[],o=ji(n)?n.prefab:null;if(!n||!o)return i.push({code:"not-prefab-instance",severity:"info",message:n?`GameObject "${n.id}" is not a prefab instance.`:`GameObject "${r}" was not found.`}),{gameObject:n,prefab:null,definition:null,sourceAsset:null,diagnostics:i};let a=e.assets.find(d=>d.id===o.prefabId&&an(d));a||i.push({code:"missing-prefab-definition",severity:"error",message:`Prefab definition "${o.prefabId}" was not found.`,prefabId:o.prefabId});let s=Oi(a)??U(o.sourceAssetId);a&&o.sourceAssetId&&s&&o.sourceAssetId!==s&&i.push({code:"source-asset-mismatch",severity:"warning",message:`Prefab instance source "${o.sourceAssetId}" does not match definition source "${s}".`,prefabId:o.prefabId,expectedSourceAssetId:s,actualSourceAssetId:o.sourceAssetId});let l=s?e.assets.find(d=>d.id===s):void 0;if(s&&!l&&i.push({code:"missing-source-asset",severity:"error",message:`Prefab source asset "${s}" was not found.`,prefabId:o.prefabId,sourceAssetId:s}),s){let d=e.assets.filter(u=>an(u)&&Oi(u)===s).map(u=>u.id);d.length>1&&i.push({code:"duplicate-source-prefab",severity:"info",message:`Source asset "${s}" is referenced by ${d.length} prefab definitions.`,prefabId:o.prefabId,sourceAssetId:s})}return{gameObject:n,prefab:o,definition:a??null,sourceAsset:l??null,diagnostics:i}}function nt(e){return e.kind==="group"||e.kind==="instance"||e.kind==="transform"||e.kind==="primitive"?e.kind:ji(e)?"instance":e.primitive?"primitive":tt(e)?"instance":Jn(e)||e.transformType?"transform":"group"}function zi(e){let t=e.rendering&&typeof e.rendering=="object"&&!Array.isArray(e.rendering)?e.rendering:void 0,n=dl(t?.renderingGroupId),r=fl(t?.alphaIndex),i={};return n!=null&&(i.renderingGroupId=n),r!=null&&(i.alphaIndex=r),Object.keys(i).length>0?i:void 0}function dl(e){return e===0||e===1||e===2||e===3?e:null}function ll(e){return e.type==="Transform"}function cl(e){return e.type==="ModelRenderer"}function ul(e){return e.type==="ImageRenderer"}function fl(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function U(e){return typeof e=="string"&&e.trim().length>0?e.trim():null}function ml(e,t){return e.scene.gameObjects.find(n=>n.id===t)??null}function gl(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n=U(t.materialAssetId),r=zn(t.override),i={...n?{materialAssetId:n}:{},...xt(r)?{override:r}:{}};return xt(i)?i:void 0}function pl(e,t){let n=new Set([...Object.keys(e??{}),...Object.keys(t??{})]),r={};for(let i of n){let o=_i(e?.[i],t?.[i]);o&&(r[i]=o)}return xt(r)?r:void 0}function xt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length>0}var bl=new Set(["id","guid","name","parentId","kind","transform","marker","metadata"]);function Ui(e,t,n){if(e.kind!=="marker"){Object.prototype.hasOwnProperty.call(e,"marker")&&k("schema.invalidValue",`${n}.marker`);return}for(let s of Object.keys(e))bl.has(s)||k("schema.invalidValue",`${n}.${s}`);It(e.parentId)||k("schema.invalidReference",`${n}.parentId`),xl(e.transform,`${n}.transform`),yl(e.marker,`${n}.marker`);let r=It(e.id),i=e.marker,o=hl(i,`${n}.marker`),a=o[0]??null;for(let s of o){s.target.id===r&&k("schema.invalidReference",`${s.path}.id`),a&&(s.target.kind!==a.target.kind||s.target.id!==a.target.id)&&k("schema.invalidReference",s.path);let l=t.get(s.target.id);l&&(s.target.kind==="marker"&&l.kind!=="marker"&&k("schema.invalidReference",`${s.path}.kind`),s.target.kind==="scene-object"&&l.kind==="marker"&&k("schema.invalidReference",`${s.path}.kind`))}}function yl(e,t){let n=Ne(e);n||k("schema.invalidType",t),ge(n,["schemaVersion","type","kind","tags","note","color","target","semanticFrame","geometry","metadata"],t),n.schemaVersion!==1&&k("schema.unsupportedVersion",`${t}.schemaVersion`),It(n.type)||k("schema.invalidValue",`${t}.type`),n.kind!==void 0&&!It(n.kind)&&k("schema.invalidValue",`${t}.kind`),n.tags!==void 0&&El(n.tags,`${t}.tags`),n.note!==void 0&&typeof n.note!="string"&&k("schema.invalidType",`${t}.note`),n.color!==void 0&&Il(n.color,`${t}.color`),n.target!==void 0&&Zn(n.target,`${t}.target`),n.semanticFrame!==void 0&&Pl(n.semanticFrame,`${t}.semanticFrame`),Sl(n.geometry,`${t}.geometry`),n.metadata!==void 0&&Al(n.metadata,`${t}.metadata`)}function hl(e,t){let n=[];return e.target&&n.push({target:e.target,path:`${t}.target`}),e.geometry.kind==="point"&&e.geometry.target&&n.push({target:e.geometry.target,path:`${t}.geometry.target`}),e.geometry.kind==="object-bounds"&&n.push({target:e.geometry.target,path:`${t}.geometry.target`}),n}function Sl(e,t){let n=Ne(e);if(n||k("schema.invalidType",t),n.kind==="box"){ge(n,["kind"],t);return}if(n.kind==="point"){ge(n,["kind","coordinateSpace","position","offset","target"],t),n.coordinateSpace!==void 0&&n.coordinateSpace!=="world"&&n.coordinateSpace!=="local"&&k("schema.invalidValue",`${t}.coordinateSpace`),n.position!==void 0&&$e(n.position,`${t}.position`),n.offset!==void 0&&$e(n.offset,`${t}.offset`),n.target!==void 0&&Zn(n.target,`${t}.target`);return}if(n.kind==="object-bounds"){ge(n,["kind","target"],t),Zn(n.target,`${t}.target`);return}if(n.kind==="polyhedron"){ge(n,["kind","coordinateSpace","vertices","faces"],t),n.coordinateSpace!==void 0&&n.coordinateSpace!=="world"&&k("schema.invalidValue",`${t}.coordinateSpace`),Array.isArray(n.vertices)||k("schema.invalidType",`${t}.vertices`),n.vertices.forEach((r,i)=>$e(r,`${t}.vertices[${i}]`)),n.faces!==void 0&&(Array.isArray(n.faces)||k("schema.invalidType",`${t}.faces`),n.faces.forEach((r,i)=>{Array.isArray(r)||k("schema.invalidType",`${t}.faces[${i}]`),r.forEach((o,a)=>{(!Number.isInteger(o)||o<0)&&k("schema.invalidValue",`${t}.faces[${i}][${a}]`)})}));return}k("schema.invalidValue",`${t}.kind`)}function Zn(e,t){let n=Ne(e);n||k("schema.invalidType",t),ge(n,["kind","id","label"],t),n.kind!=="marker"&&n.kind!=="scene-object"&&k("schema.invalidValue",`${t}.kind`),It(n.id)||k("schema.invalidValue",`${t}.id`),n.label!==void 0&&typeof n.label!="string"&&k("schema.invalidType",`${t}.label`)}function xl(e,t){let n=Ne(e);if(n||k("schema.invalidType",t),n.type!=="Transform"&&k("schema.invalidValue",`${t}.type`),n.mode==="matrix"){ge(n,["type","mode","matrix"],t),(!Array.isArray(n.matrix)||n.matrix.length!==16)&&k("schema.invalidType",`${t}.matrix`),n.matrix.forEach((r,i)=>ln(r,`${t}.matrix[${i}]`));return}ge(n,["type","mode","position","rotation","scale"],t),n.mode!==void 0&&n.mode!=="trs"&&k("schema.invalidValue",`${t}.mode`),$e(n.position,`${t}.position`),$e(n.rotation,`${t}.rotation`),n.scale!==void 0&&$e(n.scale,`${t}.scale`)}function Pl(e,t){let n=Ne(e);n||k("schema.invalidType",t),ge(n,["origin","forward","right","up","label","description"],t),$e(n.origin,`${t}.origin`);for(let r of["forward","right","up"])n[r]!==void 0&&$e(n[r],`${t}.${r}`);for(let r of["label","description"])n[r]!==void 0&&typeof n[r]!="string"&&k("schema.invalidType",`${t}.${r}`)}function Il(e,t){let n=Ne(e);n||k("schema.invalidType",t),ge(n,["r","g","b"],t);for(let r of["r","g","b"])ln(n[r],`${t}.${r}`),(n[r]<0||n[r]>1)&&k("schema.invalidValue",`${t}.${r}`)}function $e(e,t){let n=Ne(e);n||k("schema.invalidType",t),ge(n,["x","y","z"],t);for(let r of["x","y","z"])ln(n[r],`${t}.${r}`)}function El(e,t){Array.isArray(e)||k("schema.invalidType",t),e.forEach((n,r)=>{typeof n!="string"&&k("schema.invalidType",`${t}[${r}]`)})}function Al(e,t){let n=Ne(e);n||k("schema.invalidType",t),Yn(n,t,new Set)}function Yn(e,t,n){if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){ln(e,t);return}(!e||typeof e!="object")&&k("schema.invalidType",t),n.has(e)&&k("schema.invalidValue",t);let r=Object.getPrototypeOf(e);Array.isArray(e)?r!==Array.prototype&&k("schema.invalidType",t):r!==Object.prototype&&r!==null&&k("schema.invalidType",t),n.add(e);try{if(Array.isArray(e))e.forEach((i,o)=>Yn(i,`${t}[${o}]`,n));else for(let[i,o]of Object.entries(e))Yn(o,`${t}.${i}`,n)}finally{n.delete(e)}}function ge(e,t,n){let r=new Set(t);for(let i of Object.keys(e))r.has(i)||k("schema.invalidValue",`${n}.${i}`)}function ln(e,t){(typeof e!="number"||!Number.isFinite(e))&&k("schema.invalidValue",t)}function Ne(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function It(e){return typeof e=="string"&&e.trim()?e.trim():null}function k(e,t){throw new Error(`${e}: ${t}`)}function er(e,t){return t===e.rootNodeId?e.instanceId:`${e.instanceId}:${wl(t)}`}function wl(e){return encodeURIComponent(e)}function Qn(e,t){return{...structuredClone(e),id:er(t,e.id)}}function Bi(e,t){let n=structuredClone(e);return n.target&&(n.target=Qn(n.target,t)),n.geometry.kind==="point"&&n.geometry.target&&(n.geometry.target=Qn(n.geometry.target,t)),n.geometry.kind==="object-bounds"&&(n.geometry.target=Qn(n.geometry.target,t)),n}var Vi={x:-.3,y:-1,z:-.2};var Ki="scene.main",Hi="scene";function Wi(e){let t=e.meta?.authoringSource;return{sourceId:t?.sourceId||Ki,sourceType:t?.sourceType||Hi,revision:typeof t?.revision=="number"?t.revision:1}}var Tl="sun_light";function Dl(e,t){let n=typeof t.prefab?.prefabId=="string"?t.prefab.prefabId:null,r=n?e.assets.find(o=>o.id===n)?.prefab?.defaults?.shadow:void 0,i=De(r??t.shadow);return{settings:i.shadow,diagnostics:i.diagnostics}}function kl(e){let t=new Map,n=e.casterId;for(let r of e.explicitReceiverIds??[]){let i=un(e.document,r);!i||i.id===n||i.active===!1||t.set(i.id,{receiverId:i.id,source:"explicit",score:120,...tr(i,"explicit",120,["explicit receiver id"])})}for(let r of e.document.scene.gameObjects){if(r.id===n||r.active===!1)continue;De(r.shadow).shadow?.receive==="enabled"&&Rl(t,{receiverId:r.id,source:"explicit",score:100,...tr(r,"explicit",100,["shadow.receive enabled"])})}return[...t.values()].sort((r,i)=>i.score-r.score||r.receiverId.localeCompare(i.receiverId))}function cn(e){let t=e.caster?.id===e.casterId?e.caster:un(e.document,e.casterId),n=[];if(!t)return{casterId:e.casterId,receiverIds:[],backend:"none",mode:"none",quality:e.fallbackQuality??"medium",params:Ft(e.fallbackQuality??"medium"),diagnostics:[{code:"shadow.invalidTarget",severity:"error",message:`Shadow caster "${e.casterId}" was not found.`,casterId:e.casterId}]};let r=e.resolvedSettings!==void 0?(()=>{let g=De(e.resolvedSettings);return{settings:g.shadow,diagnostics:g.diagnostics}})():Dl(e.document,t);n.push(...r.diagnostics);let o=r.settings?.cast==="enabled"?kn(r.settings,e.fallbackMode??"none"):"none",a=Mn(r.settings,e.fallbackQuality??"medium"),s=Ft(a,r.settings?.params),l=Ml(o),d=$l(e.explicitReceiverIds),u=l==="none"?{candidates:[],diagnostics:[]}:d.length>0&&e.strictExplicitReceivers===!0?Nl(e.document,t.id,d):{candidates:kl({document:e.document,casterId:t.id,explicitReceiverIds:d.length>0?d:void 0}),diagnostics:[]};n.push(...u.diagnostics);let c=u.candidates;l!=="none"&&c.length===0&&n.push({code:"shadow.receiverNotFound",severity:"warning",message:`No shadow receiver was found for caster "${t.id}".`,casterId:t.id});let f=l==="none"?null:Cl(e.document,r.settings??void 0,e.defaultLightId);return f?.diagnostic&&n.push(f.diagnostic),{casterId:t.id,receiverIds:c.map(g=>g.receiverId),...f?.lightId?{lightId:f.lightId}:{},backend:l,mode:o,quality:a,params:s,diagnostics:n}}function Ml(e){return e==="dynamic"?"dynamic-map":e==="static"?"static-baked":e==="blob"?"blob":e==="projected"?"projected":"none"}function Cl(e,t,n){if(t?.light?.mode==="explicit"){let o=t?.light?.lightId;return o&&qi(e,o)?{lightId:o}:{diagnostic:{code:"shadow.lightNotFound",severity:"warning",message:o?`Explicit shadow light "${o}" was not found.`:"Shadow light mode is explicit, but no lightId was configured.",...o?{lightId:o}:{}}}}let r=n??Tl;if(qi(e,r))return{lightId:r};let i=e.scene.gameObjects.find(o=>Ji(o)&&o.active!==!1);return i?{lightId:i.id}:{diagnostic:{code:"shadow.lightNotFound",severity:"warning",message:"No directional shadow light was found."}}}function qi(e,t){let n=un(e,t);return!!n&&n.active!==!1&&Ji(n)}function Ji(e){return nt(e)==="transform"&&e.light?.type==="directional"}function Rl(e,t){let n=e.get(t.receiverId);(!n||t.score>n.score)&&e.set(t.receiverId,t)}function $l(e){let t=new Set,n=[];for(let r of e??[]){let i=typeof r=="string"?r.trim():"";!i||t.has(i)||(t.add(i),n.push(i))}return n}function Nl(e,t,n){let r=[],i=[];for(let o of n){let a=un(e,o);if(!a){i.push({code:"shadow.receiverNotFound",severity:"warning",message:`Explicit shadow receiver "${o}" was not found.`,casterId:t,receiverId:o,details:{source:"explicit"}});continue}if(a.id===t){i.push({code:"shadow.receiverNotFound",severity:"warning",message:`Shadow caster "${t}" cannot be used as its own receiver.`,casterId:t,receiverId:o,details:{source:"explicit",reason:"self"}});continue}if(a.active===!1){i.push({code:"shadow.receiverNotFound",severity:"warning",message:`Explicit shadow receiver "${o}" is inactive.`,casterId:t,receiverId:o,details:{source:"explicit",reason:"inactive"}});continue}r.push({receiverId:a.id,source:"explicit",score:120,...tr(a,"explicit",120,["explicit receiver id"])})}return{candidates:r,diagnostics:i}}function tr(e,t,n,r){let i=De(e.shadow).shadow;return{active:e.active!==!1,visible:e.active!==!1,...i?.receive?{receive:i.receive}:{},suitability:{score:n,material:nt(e)==="primitive"?"primitive":t,reasons:r}}}function un(e,t){return e.scene.gameObjects.find(n=>n.id===t)??null}var Xi={type:"directional",intensity:2,direction:{...Vi},diffuseColor:{r:1,g:1,b:1},inspectorLanguage:"zh"},nr={type:"hemispheric",intensity:.8,diffuseColor:{r:1,g:1,b:1},groundColor:{r:.48,g:.52,b:.62},inspectorLanguage:"zh"};function Yi(e){return e.filter(t=>t.kind==="model"||t.kind==="texture").map(Ol).sort(jl)}function Ol(e){let t=e.kind==="texture"?"texture":e.kind==="prefab"?"prefab":"glb",n=Ve(e.guid),r=_l(e);return{id:e.assetId,...n?{guid:n}:{},assetId:e.assetId,type:t,kind:e.kind==="texture"?"texture":e.kind==="prefab"?"prefab":"model",displayName:e.displayName,category:e.category??Fl(e),warmupCount:e.warmupCount,singleton:e.singleton,materialMode:e.materialMode,defaults:mn(e.defaults),prefab:mn(e.prefab),external:mn(e.external),metadata:r,origin:e.origin??"project",dedupeKey:e.dedupeKey??n??Ul(e.external)??e.assetId,placeable:Gl(e)}}function vl(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.kind==="texture"||t.type==="texture"}function Gl(e){return vl(e)?!0:!e||typeof e!="object"||Array.isArray(e)||e.placeable!==!1}function jl(e,t){return(e.category??"").localeCompare(t.category??"")||e.displayName.localeCompare(t.displayName)||e.assetId.localeCompare(t.assetId)||e.type.localeCompare(t.type)}function Fl(e){return e.kind==="prefab"?"Prefab":e.kind==="texture"?"Texture":e.kind==="image"?"Image":e.kind==="sound"?"Sound":"Model"}function _l(e){return Ll({originalFileName:e.originalFileName,relativePath:e.relativePath,codeKey:e.codeKey,contentHash:e.contentHash,byteSize:e.byteSize,...mn(e.metadata)})}function Ll(e){if(!Array.isArray(e.materialSlots))return e;let t=fn(e.assetAnalysis),n=Array.isArray(t?.meshes)?t.meshes:[],r=Array.isArray(t?.nodes)?t.nodes:[],i=new Map(n.flatMap(l=>{let d=fn(l),u=Et(d?.meshIndex),c=Ve(d?.name);return u==null||!c?[]:[[u,c]]})),o=new Map(r.flatMap(l=>{let d=fn(l),u=Et(d?.nodeIndex),c=Ve(d?.meshName);return u==null||!c?[]:[[u,c]]})),a=Zi(t,"meshCount",n.length)||Zi(t,"nodeCount",r.length),s=e.materialSlots.map(l=>{let d=fn(l);if(!d||Ve(d.sourceMeshName))return l;let u=Et(d.meshIndex);if(u==null)return l;let c=Et(d.nodeIndex),f=i.get(u)??(c==null?void 0:o.get(c))??(a?zl(d):void 0);return f?{...d,sourceMeshName:f}:l});return{...e,materialSlots:s}}function zl(e){let t=Ve(e.label);if(t){let n=t.replace(/\s+\/\s+Primitive\s+\d+$/,"").trim();if(n)return n}return Ve(e.ownerNodePath)?.split("/").filter(Boolean).pop()}function Zi(e,t,n){let r=Et(e?.[t]);return r!=null&&r>n}function Ul(e){return!e||typeof e!="object"||Array.isArray(e)?null:Ve(e.platformAssetId)}function Ve(e){return typeof e=="string"&&e.trim()?e.trim():null}function Et(e){return Number.isInteger(e)&&e>=0?e:null}function fn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function mn(e){return e==null?void 0:structuredClone(e)}function to(e,t){let n=new Map(t.filter(o=>o.type==="glb").map(o=>[o.assetId,o])),r=e.assets.map(o=>{if(o.type!=="glb")return o;let a=n.get(o.id);return a?Qi(o,a):o}),i=new Set(e.assets.map(o=>o.id));for(let o of Bl(e)){if(i.has(o))continue;let a=n.get(o);a&&(r.push(Qi({id:o,type:"glb"},a)),i.add(o))}return{...e,assets:r}}function Bl(e){let t=[],n=new Set,r=i=>{let o=Vl(i);!o||n.has(o)||(n.add(o),t.push(o))};for(let i of e.assets)if(i.type==="prefab"){r(i.prefab?.sourceAssetId);for(let o of i.prefab?.nodes??[])r(o.sourceAssetId)}for(let i of e.scene.gameObjects){for(let a of i.components)a.type==="ModelRenderer"&&r(a.assetId);r(i.prefab?.sourceAssetId);let o=eo(eo(i)?.instance);r(o?.assetId)}return t}function Qi(e,t){return{...e,guid:t.guid??e.guid,displayName:t.displayName||e.displayName,category:t.category??e.category,warmupCount:t.warmupCount??e.warmupCount,singleton:t.singleton??e.singleton,materialMode:t.materialMode??e.materialMode,defaults:gn(t.defaults??e.defaults),prefab:gn(t.prefab??e.prefab),external:gn(t.external??e.external),metadata:gn(t.metadata??e.metadata)}}function gn(e){return e==null?void 0:structuredClone(e)}function eo(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Vl(e){return(typeof e=="string"?e.trim():"")||void 0}function no(e){let t=on(e);if(t.ok)return;let n=new Error(`editor_scene_material_assets_missing: ${t.missingMaterialAssetIds.join(", ")}`);throw n.details={missingMaterialAssetIds:t.missingMaterialAssetIds,missingReferences:t.missingReferences.map(r=>({materialAssetId:r.materialAssetId,gameObjectId:r.gameObjectId,bindingPath:r.bindingPath,label:r.label,kind:r.kind,...r.slotId?{slotId:r.slotId}:{},...r.ownerNodePath?{ownerNodePath:r.ownerNodePath}:{}}))},n}var lo="@fps-games/editor.playable-sdk.scene-compiler",co="3",Kl=new Set(["shadowMode","childMaterialBindings","childMaterials"]),Hl=new Set(["coordinateSpace","center","size","rotation"]),ro=new Set(["root","group","model","primitive","light","prefabInstance","marker","collision"]);function Wl(e){ql(e,!0)}function uo(e){let t=vi(e);return Wl(t.document),t}function ql(e,t){let n=I(e);if(!n)throw new Error("editor_scene_must_be_object");if(n.schemaVersion!==1)throw h("schema.unsupportedVersion","$.schemaVersion");if(!Array.isArray(n.assets))throw new Error("editor_scene_assets_must_be_array");let r=I(n.scene);if(!Array.isArray(r?.gameObjects))throw new Error("editor_scene_game_objects_must_be_array");if(r.materialAssets!=null&&!Array.isArray(r.materialAssets))throw new Error("editor_scene_material_assets_must_be_array");if(Object.prototype.hasOwnProperty.call(r,"shadowMapExperiment"))throw h("schema.forbiddenField","$.scene.shadowMapExperiment");Yl(n.assets,r.gameObjects),or(n,"$"),Ql(n.assets),Zl(n.assets,r.gameObjects),ec(r.gameObjects,n.assets),tc(r.gameObjects),Xl(r.materialAssets??[]),t&&nc(n.assets,r.gameObjects),no(n),Jl(n.assets,r.gameObjects)}function Jl(e,t){for(let n=0;n<t.length;n+=1){let r=I(t[n]),i=`$.scene.gameObjects[${n}]`,o=Object.prototype.hasOwnProperty.call(r,"shadow");if(I(r.prefab)){if(o)throw h("schema.forbiddenField",`${i}.shadow`)}else if(Wn(r))io(r.shadow,`${i}.shadow`);else if(o)throw h("schema.forbiddenField",`${i}.shadow`);if(Object.prototype.hasOwnProperty.call(r,"shadowMapExperiment"))throw h("schema.forbiddenField",`${i}.shadowMapExperiment`)}for(let n=0;n<e.length;n+=1){let r=I(e[n]),i=`$.assets[${n}]`,o=I(r.defaults);if(o?.shadow!==void 0)throw h("schema.forbiddenField",`${i}.defaults.shadow`);if(o?.shadowMapExperiment!==void 0)throw h("schema.forbiddenField",`${i}.defaults.shadowMapExperiment`);let a=I(r.prefab);if(!a)continue;let s=I(a.defaults);if(io(s?.shadow,`${i}.prefab.defaults.shadow`),s?.shadowMapExperiment!==void 0)throw h("schema.forbiddenField",`${i}.prefab.defaults.shadowMapExperiment`);Array.isArray(a.nodes)&&a.nodes.forEach((l,d)=>{let u=I(l),c=`${i}.prefab.nodes[${d}]`,f=I(u?.defaults);if(u?.shadow!==void 0)throw h("schema.forbiddenField",`${c}.shadow`);if(f?.shadow!==void 0)throw h("schema.forbiddenField",`${c}.defaults.shadow`);if(u?.shadowMapExperiment!==void 0)throw h("schema.forbiddenField",`${c}.shadowMapExperiment`);if(f?.shadowMapExperiment!==void 0)throw h("schema.forbiddenField",`${c}.defaults.shadowMapExperiment`)})}}function io(e,t){let n=I(e);if(!n||n.cast===void 0||n.receive===void 0)throw h("schema.invalidType",t);if(n.cast!=="enabled"&&n.cast!=="none"||n.receive!=="enabled"&&n.receive!=="none")throw h("schema.invalidValue",t);for(let r of Object.keys(n))if(r!=="cast"&&r!=="receive")throw h("schema.forbiddenField",`${t}.${r}`)}function Xl(e){for(let t=0;t<e.length;t+=1){let n=I(e[t]),r=`$.scene.materialAssets[${t}]`;if(!n)throw h("schema.invalidType",r);if(Object.prototype.hasOwnProperty.call(n,"materialKind"))throw h("schema.deprecatedField",`${r}.materialKind`);if(Object.prototype.hasOwnProperty.call(n,"profile"))throw h("schema.deprecatedField",`${r}.profile`);if(!A(n.id))throw h("schema.invalidType",`${r}.id`);if(!A(n.name))throw h("schema.invalidType",`${r}.name`);let i=A(n.shaderId);if(!i)throw h("schema.invalidValue",`${r}.shaderId`);let o=tn(i),a=n.definitionVersion;if(a!=null&&(typeof a!="number"||!Number.isSafeInteger(a)||a<1))throw h("schema.invalidValue",`${r}.definitionVersion`);if(!o&&a==null)throw h("schema.invalidValue",`${r}.definitionVersion`);if(o){let s=nn(i,n.properties,`${r}.properties`);if(s[0])throw h("schema.invalidValue",s[0].path)}else if(!I(n.properties))throw h("schema.invalidType",`${r}.properties`);for(let s of Object.keys(n))if(!["id","guid","name","shaderId","definitionVersion","properties","system","origin"].includes(s))throw h("schema.unknownField",`${r}.${s}`)}}function Zl(e,t){let n=new Set(e.map(I).filter(o=>o?.type==="glb").map(o=>A(o?.id)).filter(o=>!!o)),r=new Set(e.map(I).filter(o=>o?.type==="texture").map(o=>A(o?.id)).filter(o=>!!o)),i=new Map;for(let o of e.map(I)){if(o?.type!=="prefab")continue;let a=A(o.id),s=A(I(o.prefab)?.sourceAssetId);a&&s&&i.set(a,s)}for(let o=0;o<e.length;o+=1){let a=I(e[o]);if(a?.type!=="prefab")continue;let s=I(a.prefab),l=A(s?.sourceAssetId),d=A(s?.rootNodeId);if(!l||!n.has(l))throw h("schema.invalidReference",`$.assets[${o}].prefab.sourceAssetId`);let u=Array.isArray(s?.nodes)?s.nodes:[];for(let c=0;c<u.length;c+=1){let f=I(u[c]),g=A(f?.sourceAssetId);if(f?.kind==="model"&&(!g||!n.has(g)))throw h("schema.invalidReference",`$.assets[${o}].prefab.nodes[${c}].sourceAssetId`);if(f?.kind==="prefabInstance"){let p=A(f.childPrefabId),y=p?i.get(p):null;if(A(f.id)===d&&l!==y)throw h("schema.invalidReference",`$.assets[${o}].prefab.sourceAssetId`);if(g&&g!==y)throw h("schema.invalidReference",`$.assets[${o}].prefab.nodes[${c}].sourceAssetId`)}}}for(let o=0;o<t.length;o+=1){let a=I(t[o]),s=A(I(a?.instance)?.assetId);if(s&&!n.has(s))throw h("schema.invalidReference",`$.scene.gameObjects[${o}].instance.assetId`);let l=Array.isArray(a?.components)?a.components:[];for(let d=0;d<l.length;d+=1){let u=I(l[d]);if(u?.type!=="ModelRenderer")continue;let c=A(u.assetId);if(!c||!n.has(c))throw h("schema.invalidReference",`$.scene.gameObjects[${o}].components[${d}].assetId`)}for(let d=0;d<l.length;d+=1){let u=I(l[d]);if(u?.type!=="ImageRenderer")continue;let c=A(u.assetId);if(!c||!r.has(c))throw h("schema.invalidReference",`$.scene.gameObjects[${o}].components[${d}].assetId`);let f=I(u.size);if(!f||!so(f.width)||!so(f.height))throw h("schema.invalidValue",`$.scene.gameObjects[${o}].components[${d}].size`)}}}function Yl(e,t){let n=new Set;e.forEach((o,a)=>{let s=I(o);if(!s)throw h("schema.invalidType",`$.assets[${a}]`);let l=A(s.id);if(!l||!A(s.type))throw h("schema.invalidValue",`$.assets[${a}]`);if(n.has(l))throw h("schema.invalidValue",`$.assets[${a}].id`);n.add(l)});let r=new Set,i=new Map;t.forEach((o,a)=>{let s=I(o);if(!s)throw h("schema.invalidType",`$.scene.gameObjects[${a}]`);let l=A(s.id);if(!l)throw h("schema.invalidValue",`$.scene.gameObjects[${a}].id`);if(r.has(l))throw h("schema.invalidValue",`$.scene.gameObjects[${a}].id`);if(r.add(l),i.set(l,{value:s,index:a}),!Array.isArray(s.components))throw h("schema.invalidType",`$.scene.gameObjects[${a}].components`);s.components.forEach((d,u)=>{let c=I(d);if(!c)throw h("schema.invalidType",`$.scene.gameObjects[${a}].components[${u}]`);if(!A(c.type))throw h("schema.invalidValue",`$.scene.gameObjects[${a}].components[${u}].type`)})});for(let[o,a]of i){if(!("parentId"in a.value))continue;let s=A(a.value.parentId);if(!s||!i.has(s))throw h("schema.invalidReference",`$.scene.gameObjects[${a.index}].parentId`);let l=new Set([o]),d=s;for(;d;){if(l.has(d))throw h("schema.invalidReference",`$.scene.gameObjects[${a.index}].parentId`);l.add(d);let u=i.get(d)?.value;d=u&&u.parentId!=null?A(u.parentId):null}}}function or(e,t){if(Array.isArray(e)){e.forEach((r,i)=>or(r,`${t}[${i}]`));return}let n=I(e);if(n)for(let[r,i]of Object.entries(n)){let o=`${t}.${r}`;if(Kl.has(r))throw h("schema.deprecatedField",o);r==="shadow"&>(i,o),!(r==="metadata"||r==="shadowMapExperiment")&&or(i,o)}}function Ql(e){let t=new Set(e.map(I).filter(a=>a?.type==="prefab").map(a=>A(a?.id)).filter(a=>!!a)),n=new Map;for(let a=0;a<e.length;a+=1){let s=I(e[a]);if(s?.type!=="prefab")continue;let l=I(s.prefab);if(!Array.isArray(l?.nodes))throw h("schema.unsupportedVersion",`$.assets[${a}].prefab.nodes`);oo(l.defaults,`$.assets[${a}].prefab.defaults`);let d=[],u=new Set;for(let p=0;p<l.nodes.length;p+=1){let y=`$.assets[${a}].prefab.nodes[${p}]`,S=I(l.nodes[p]);if(!S)throw h("schema.invalidType",y);oo(S.defaults,`${y}.defaults`);let P=A(S.id);if(!P||!ro.has(String(S.kind)))throw h("schema.invalidValue",y);if(u.has(P))throw h("schema.invalidValue",`${y}.id`);u.add(P),d.push(S)}let c=A(l?.rootNodeId),f=c?d.find(p=>A(p?.id)===c):null,g=!!f&&ro.has(String(f.kind))&&!Object.prototype.hasOwnProperty.call(f,"parentId");if(l?.compositionVersion!==sn||d.length===0||!g)throw h("schema.unsupportedVersion",`$.assets[${a}].prefab`);n.set(A(s.id),d.flatMap((p,y)=>{let S=A(p.childPrefabId);return S?[{prefabId:S,path:`$.assets[${a}].prefab.nodes[${y}].childPrefabId`}]:[]}));for(let p=0;p<d.length;p+=1){let y=d[p];Ui(y,new Map(d.map($=>[A($.id),$])),`$.assets[${a}].prefab.nodes[${p}]`);let S=A(y.id),P=A(y.parentId);if(S!==c&&(!P||!u.has(P)))throw h("schema.invalidReference",`$.assets[${a}].prefab.nodes[${p}].parentId`);if(y.kind==="prefabInstance"){let $=A(y.childPrefabId);if(!$||!t.has($))throw h("schema.invalidReference",`$.assets[${a}].prefab.nodes[${p}].childPrefabId`)}let D=new Set([S]),T=P;for(;T;){if(D.has(T))throw h("schema.invalidReference",`$.assets[${a}].prefab.nodes[${p}].parentId`);D.add(T);let $=d.find(_=>A(_.id)===T);T=$?A($.parentId):null}}}let r=new Set,i=new Set,o=a=>{if(!i.has(a)){r.add(a);for(let s of n.get(a)??[]){if(r.has(s.prefabId))throw h("schema.invalidReference",s.path);o(s.prefabId)}r.delete(a),i.add(a)}};for(let a of n.keys())o(a)}function oo(e,t){if(e==null)return;let n=I(e);if(!n)throw h("schema.invalidType",t);if(Object.prototype.hasOwnProperty.call(n,"active")&&typeof n.active!="boolean")throw h("schema.invalidType",`${t}.active`)}function ec(e,t){let n=new Map;for(let r of t.map(I)){if(r?.type!=="prefab")continue;let i=A(r.id),o=A(I(r.prefab)?.sourceAssetId);i&&o&&n.set(i,o)}for(let r=0;r<e.length;r+=1){let i=I(e[r]);if(!i||i.prefab==null)continue;let o=I(i.prefab),a=A(o?.prefabId),s=a?n.get(a):null;if(!a||!s)throw h("schema.unsupportedVersion",`$.scene.gameObjects[${r}].prefab`);if(A(o?.sourceAssetId)!==s)throw h("schema.invalidReference",`$.scene.gameObjects[${r}].prefab.sourceAssetId`);let l=A(I(i.instance)?.assetId);if(l&&l!==s)throw h("schema.invalidReference",`$.scene.gameObjects[${r}].instance.assetId`);let d=Array.isArray(i.components)?i.components:[];for(let u=0;u<d.length;u+=1){let c=I(d[u]);if(c?.type==="ModelRenderer"&&A(c.assetId)!==s)throw h("schema.invalidReference",`$.scene.gameObjects[${r}].components[${u}].assetId`)}}}function tc(e){for(let t=0;t<e.length;t+=1){let n=I(I(I(e[t])?.marker)?.geometry);if(n?.kind!=="box")continue;for(let i of Hl)if(Object.prototype.hasOwnProperty.call(n,i))throw h("schema.deprecatedField",`$.scene.gameObjects[${t}].marker.geometry.${i}`);if(!(Array.isArray(I(e[t])?.components)?I(e[t]).components:[]).some(i=>I(i)?.type==="Transform"))throw h("schema.invalidValue",`$.scene.gameObjects[${t}].components`)}}function nc(e,t){let n=new Map,r=new Map;for(let i=0;i<e.length;i+=1){let o=I(e[i]),a=A(o?.id);if(!o||!a)continue;if(o.type==="prefab"){let c=A(I(o.prefab)?.sourceAssetId);c&&r.set(a,c)}let s=I(o.metadata),l=s?.materialSlots;if(l==null){n.set(a,new Set);continue}if(!Array.isArray(l))throw h("schema.invalidType",`$.assets[${i}].metadata.materialSlots`);let d=rc(s?.assetAnalysis),u=new Set;for(let c=0;c<l.length;c+=1){let f=I(l[c]),g=A(f?.slotId);if(!f||!g)throw h("schema.invalidValue",`$.assets[${i}].metadata.materialSlots[${c}]`);let p=`$.assets[${i}].metadata.materialSlots[${c}]`;for(let y of["ownerNodePath","nodeIndex","nodeIndexPath","meshIndex","primitiveIndex","sourceMaterialIndex","sourceMaterialIndices","sourceMeshName","triangleCount","boundingBox"])if(Object.prototype.hasOwnProperty.call(f,y))throw h("schema.deprecatedField",`${p}.${y}`);if(!Array.isArray(f.sourceSurfaces))throw h("schema.invalidType",`${p}.sourceSurfaces`);if(f.sourceSurfaces.length===0)throw h("schema.invalidValue",`${p}.sourceSurfaces`);for(let y=0;y<f.sourceSurfaces.length;y+=1){let S=`${p}.sourceSurfaces[${y}]`,P=I(f.sourceSurfaces[y]);if(!P||!A(P.ownerNodePath))throw h("schema.invalidValue",S);ao(P,"nodeIndex",S),ao(P,"sourceMaterialIndex",S);for(let T of["meshIndex","primitiveIndex"])if(!Number.isInteger(P[T])||P[T]<0)throw h("schema.invalidValue",`${S}.${T}`);if(P.nodeIndexPath!=null&&(!Array.isArray(P.nodeIndexPath)||P.nodeIndexPath.some(T=>!Number.isInteger(T)||T<0)))throw h("schema.invalidValue",`${S}.nodeIndexPath`);let D=P.meshIndex;if(!A(P.sourceMeshName)&&!d.has(D))throw h("schema.invalidValue",`${S}.sourceMeshName`)}if(u.has(g))throw h("schema.invalidValue",`$.assets[${i}].metadata.materialSlots[${c}].slotId`);u.add(g)}n.set(a,u)}for(let i=0;i<e.length;i+=1){let o=I(e[i]);if(o?.type!=="prefab")continue;let a=I(o.prefab),s=A(a?.sourceAssetId);rr(a?.overrides,s?n.get(s):void 0,`$.assets[${i}].prefab.overrides`);let l=Array.isArray(a?.nodes)?a.nodes:[];for(let d=0;d<l.length;d+=1){let u=I(l[d]),c=A(u?.childPrefabId),f=A(u?.sourceAssetId)??(c?r.get(c)??null:null);rr(u?.overrides,f?n.get(f):void 0,`$.assets[${i}].prefab.nodes[${d}].overrides`)}}for(let i=0;i<t.length;i+=1){let o=I(t[i]),s=(Array.isArray(o?.components)?o.components:[]).map(I).find(d=>d?.type==="ModelRenderer"),l=A(s?.assetId);rr(o?.overrides,l?n.get(l):void 0,`$.scene.gameObjects[${i}].overrides`)}}function rr(e,t,n){let r=I(e);if(!r||r.materialSlotBindings==null)return;let i=I(r.materialSlotBindings);if(!i)throw h("schema.invalidType",`${n}.materialSlotBindings`);for(let[o,a]of Object.entries(i)){if(!t?.has(o))throw h("schema.invalidReference",`${n}.materialSlotBindings.${o}`);let s=`${n}.materialSlotBindings.${o}`,l=I(a);if(!l)throw h("schema.invalidType",s);for(let d of Object.keys(l))if(d!=="materialAssetId"&&d!=="override")throw h("schema.deprecatedField",`${s}.${d}`);if("materialAssetId"in l&&l.materialAssetId!=null&&!A(l.materialAssetId))throw h("schema.invalidValue",`${s}.materialAssetId`);if("override"in l&&!I(l.override))throw h("schema.invalidType",`${s}.override`);"override"in l&&ic(l.override,`${s}.override`)}}function ao(e,t,n){let r=e[t];if(r!=null&&(!Number.isInteger(r)||r<0))throw h("schema.invalidValue",`${n}.${t}`)}function rc(e){let t=I(e),n=Array.isArray(t?.meshes)?t.meshes:[];return new Set(n.flatMap(r=>{let i=I(r),o=i?.meshIndex,a=Number.isInteger(o)?o:null;return a!=null&&A(i?.name)?[a]:[]}))}function ic(e,t){let n=I(e);if(!n)throw h("schema.invalidType",t);if(rt(n,["lightingModel","baseColor","normal","metallic","roughness","metallicRoughness","occlusion","emission","alpha"],t),"lightingModel"in n&&!["lit","unlit"].includes(String(n.lightingModel)))throw h("schema.invalidValue",`${t}.lightingModel`);for(let r of["metallic","roughness"])wt(n,r,t);oc(n.baseColor,`${t}.baseColor`),ir(n.normal,`${t}.normal`,["texture","strength"]),ir(n.metallicRoughness,`${t}.metallicRoughness`,["texture"]),ir(n.occlusion,`${t}.occlusion`,["texture","strength"]),ac(n.emission,`${t}.emission`),sc(n.alpha,`${t}.alpha`)}function oc(e,t){if(e==null)return;let n=it(e,t);rt(n,["color","texture","brightness","saturation","contrast","hue"],t),fo(n.color,`${t}.color`),At(n.texture,`${t}.texture`);for(let r of["brightness","saturation","contrast","hue"])wt(n,r,t)}function ir(e,t,n){if(e==null)return;let r=it(e,t);rt(r,n,t),At(r.texture,`${t}.texture`),n.includes("strength")&&wt(r,"strength",t)}function ac(e,t){if(e==null)return;let n=it(e,t);rt(n,["color","intensity","texture","maskTexture"],t),fo(n.color,`${t}.color`),wt(n,"intensity",t),At(n.texture,`${t}.texture`),At(n.maskTexture,`${t}.maskTexture`)}function sc(e,t){if(e==null)return;let n=it(e,t);if(rt(n,["mode","opacity","cutoff","texture"],t),"mode"in n&&!["opaque","mask","blend"].includes(String(n.mode)))throw h("schema.invalidValue",`${t}.mode`);for(let r of["opacity","cutoff"])wt(n,r,t);At(n.texture,`${t}.texture`)}function At(e,t){if(e==null)return;let n=it(e,t);rt(n,["url","textureAssetId"],t);for(let r of["url","textureAssetId"])if(r in n&&n[r]!=null&&!A(n[r]))throw h("schema.invalidValue",`${t}.${r}`)}function fo(e,t){if(e==null)return;let n=it(e,t);for(let r of["r","g","b"])dc(n,r,t)}function rt(e,t,n){let r=new Set(t);for(let i of Object.keys(e))if(!r.has(i))throw h("schema.deprecatedField",`${n}.${i}`)}function wt(e,t,n){if(t in e&&e[t]!=null&&(typeof e[t]!="number"||!Number.isFinite(e[t])))throw h("schema.invalidType",`${n}.${t}`)}function dc(e,t,n){if(!(t in e)||typeof e[t]!="number"||!Number.isFinite(e[t]))throw h("schema.invalidValue",`${n}.${t}`)}function it(e,t){let n=I(e);if(!n)throw h("schema.invalidType",t);return n}function h(e,t){let n=new Error(`${e}: ${t}`);return Object.assign(n,{code:e,path:t}),n}function I(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function A(e){return typeof e=="string"&&e.length>0&&e===e.trim()?e:null}function so(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function go(e,t,n={}){let r=uo(e).document,i=t;Object.prototype.hasOwnProperty.call(i,"staticShadows")&&i.staticShadows!=null&&Qt(i.staticShadows,"$.staticShadows");let{scene:o,...a}=t,s=structuredClone(a),l=re(o)?o:void 0,d=Wi(r),u={...d,compilerId:lo,compilerVersion:co,compiledAt:new Date().toISOString()};s.schemaVersion=3,s.meta={...s.meta??{},generatedFrom:u};let c=l?.rootId||"root",f=r.scene.gameObjects.filter(D=>D.id!==c),g=mc(r,n.materialShaderDefinitions,!0),p={...r,scene:{...r.scene,materialAssets:g}},y=f.flatMap(D=>Ac(D,d,p,n)),S=y.map(po);cc(c,S),uc(c,S);let P={rootId:c,assets:p.assets.filter(bc).map(yc),nodes:S,materialAssets:g,materials:structuredClone(l?.materials??[]),textures:structuredClone(l?.textures??[])};return s.scene=P,s.plugins=Tc(s.plugins,n.shadowMapExperimentConfig,y,c,d.revision),gi(s),{sceneConfig:s,summary:{assetCount:P.assets.length,gameObjectCount:r.scene.gameObjects.length,nodeCount:P.nodes.length}}}function po(e){if(!Object.prototype.hasOwnProperty.call(e,"shadowMapExperimentInferredUpdateClass"))return e;let{shadowMapExperimentInferredUpdateClass:t,...n}=e;return n}function cc(e,t){let n=new Set([e]);for(let r=0;r<t.length;r+=1){let i=t[r].id;if(n.has(i)){let o=new Error(`schema.invalidReference: $.scene.nodes[${r}].id`);throw Object.assign(o,{code:"schema.invalidReference",path:`$.scene.nodes[${r}].id`,nodeId:i}),o}n.add(i)}}function uc(e,t){let n=new Map(t.map(r=>[r.id,r]));for(let r=0;r<t.length;r+=1){let i=t[r];if(!(i.source?.component!=="PrefabMarker"||!("marker"in i)||!i.marker))for(let o of fc(i.marker)){let a=n.get(o.target.id);if(o.target.id!==e&&(!a||a.source?.objectId===i.source.objectId))continue;let s=`$.scene.nodes[${r}].marker.${o.path}.id`,l=new Error(`schema.invalidReference: ${s}`);throw Object.assign(l,{code:"schema.invalidReference",path:s,nodeId:i.id,targetId:o.target.id}),l}}}function fc(e){let t=[];return e.target&&t.push({path:"target",target:e.target}),e.geometry.kind==="point"&&e.geometry.target&&t.push({path:"geometry.target",target:e.geometry.target}),e.geometry.kind==="object-bounds"&&t.push({path:"geometry.target",target:e.geometry.target}),t}function mc(e,t,n=!1){let r=structuredClone(e.scene.materialAssets??[]);for(let o=0;o<r.length;o+=1){let a=r[o];if(tn(a.shaderId))continue;let s=t?.get(a.shaderId);if(!s){if(!n)continue;throw ar("material.shaderDefinitionNotFound",`$.scene.materialAssets[${o}].shaderId`,`Shader Definition was not found: ${a.shaderId}`)}if(a.definitionVersion!==s.version)throw ar("material.shaderDefinitionVersionMismatch",`$.scene.materialAssets[${o}].definitionVersion`,`Material ${a.id} uses Definition v${String(a.definitionVersion)} but ${a.shaderId} is v${s.version}.`);let l=nn(a.shaderId,a.properties,`$.scene.materialAssets[${o}].properties`,t);if(l[0])throw ar("material.propertiesInvalid",l[0].path,l[0].message)}let i=on(gc(e,r));if(!i.ok)throw new Error(`editor_scene_material_assets_missing: ${i.missingMaterialAssetIds.join(", ")}`);return r}function ar(e,t,n){return Object.assign(new Error(`${e}: ${n}`),{code:e,path:t})}function gc(e,t){let n={...e,scene:{...e.scene,materialAssets:t}};return{...n,scene:{...n.scene,gameObjects:[...n.scene.gameObjects.map(r=>{let i=Eo(r,n);if(i)return{...r,overrides:i};if(!("overrides"in r))return r;let o={...r};return delete o.overrides,o}),...pc(n)]}}}function pc(e){let t=[];for(let n of e.scene.gameObjects){let r=dn(e,n);!r.definition||!pn(r.definition)||t.push(...bo({editorDocument:e,prefabAsset:r.definition,hostGameObject:n,instanceOverrides:n.overrides,visitedPrefabIds:new Set}))}return t}function bo(e){if(e.visitedPrefabIds.has(e.prefabAsset.id))return[];e.visitedPrefabIds.add(e.prefabAsset.id);let t=Po(Xn(e.prefabAsset),Pt(e.prefabAsset)??""),n=t.find(o=>o.id===Pt(e.prefabAsset));if(!n)return e.visitedPrefabIds.delete(e.prefabAsset.id),[];let r=Io(t,e.prefabAsset),i=[];for(let o of t){if(o.kind==="prefabInstance"&&o.childPrefabId){let d=e.editorDocument.assets.find(u=>u.id===o.childPrefabId);if(d&&pn(d)){i.push(...bo({editorDocument:e.editorDocument,prefabAsset:d,hostGameObject:e.hostGameObject,instanceOverrides:o.overrides,visitedPrefabIds:new Set(e.visitedPrefabIds)}));continue}continue}let a=Gc(e.hostGameObject,o);if(!a)continue;let s=o.kind==="model"&&o.sourceAssetId?e.editorDocument.assets.find(d=>d.id===o.sourceAssetId):void 0,l=ur({hostGameObject:a,prefabAsset:e.prefabAsset,rootNode:n,node:o,asset:s,editorDocument:e.editorDocument,instanceOverrides:o.id===r?e.instanceOverrides:void 0});l&&i.push({...a,overrides:l})}return e.visitedPrefabIds.delete(e.prefabAsset.id),i}function bc(e){return e.type==="glb"||e.type==="texture"}function yc(e){let t=xc(e),n=e.type==="glb"?Pc(e):[],r=Sc(e.external),i=hc(e.defaults);return{id:e.id,type:e.type,...e.guid?{guid:e.guid}:{},...t?{url:t}:{},...typeof e.warmupCount=="number"&&Number.isInteger(e.warmupCount)&&e.warmupCount>=0?{warmupCount:e.warmupCount}:{},...typeof e.singleton=="boolean"?{singleton:e.singleton}:{},...typeof e.materialMode=="string"?{materialMode:e.materialMode}:{},...i!==void 0?{defaults:i}:{},...r?{external:r}:{},...n.length>0?{materialSlots:n}:{}}}function hc(e){if(!e)return;let t=structuredClone(e);return re(t)?(delete t.shadowMapExperiment,Object.keys(t).length>0?t:void 0):t}function Sc(e){let t=re(e)?e:void 0,n=we(t?.platformAssetId),r=we(t?.assetUrl);if(!(!n&&!r))return{...n?{platformAssetId:n}:{},...r?{assetUrl:r}:{}}}function xc(e){let t=re(e.metadata)?e.metadata:void 0,n=re(e.external)?e.external:void 0;return we(t?.url)??we(n?.assetUrl)??void 0}function Pc(e){let t=re(e.metadata)?e.metadata:void 0,n=Array.isArray(t?.materialSlots)?t.materialSlots:[],r=Ic(t?.assetAnalysis);return n.flatMap(i=>{if(!re(i))return[];let o=we(i.slotId);if(!o)return[];let a=we(i.label),s=(Array.isArray(i.sourceSurfaces)?i.sourceSurfaces:[]).flatMap(l=>{if(!re(l))return[];let d=we(l.ownerNodePath),u=Tt(l.meshIndex),c=Tt(l.primitiveIndex);if(!d||u==null||c==null)return[];let f=Tt(l.nodeIndex),g=Ec(Array.isArray(l.nodeIndexPath)?l.nodeIndexPath:[]),p=Tt(l.sourceMaterialIndex),y=we(l.sourceMeshName)??r.get(u);return[{ownerNodePath:d,...f==null?{}:{nodeIndex:f},...g.length>0?{nodeIndexPath:g}:{},meshIndex:u,primitiveIndex:c,...p==null?{}:{sourceMaterialIndex:p},...y?{sourceMeshName:y}:{}}]});return s.length===0?[]:[{slotId:o,...a?{label:a}:{},sourceSurfaces:s}]})}function Ic(e){let t=re(e)?e:void 0,n=Array.isArray(t?.meshes)?t.meshes:[];return new Map(n.flatMap(r=>{if(!re(r))return[];let i=Tt(r.meshIndex),o=we(r.name);return i==null||!o?[]:[[i,o]]}))}function Ec(e){return[...new Set(e.filter(t=>typeof t=="number"&&Number.isInteger(t)&&t>=0))]}function Tt(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:void 0}function Ac(e,t,n,r){let i=dn(n,e);return(i.definition&&pn(i.definition)?kc(e,i.definition,t,n,new Set,r):[wc(e,t,n,r)]).map(a=>{let s=a.kind==="instance"?n.assets.find(d=>d.id===a.instance.assetId):void 0,l=r.inferShadowMapExperimentUpdateClass?.({gameObject:e,runtimeNode:po(a),...s?{asset:s}:{}})??Dc(s);return{...a,shadowMapExperimentInferredUpdateClass:l}})}function wc(e,t,n,r={}){let i=qn(e),o=tt(e),a=Jn(e),s=Fc(e),l=nt(e),d=Eo(e,n),u=zi(e),c={sourceId:t.sourceId,sourceType:t.sourceType,revision:t.revision,...e.guid?{objectGuid:e.guid}:{},objectId:e.id,component:o?"ModelRenderer":a?"ImageRenderer":s||l==="primitive"?"PrimitiveRenderer":l==="transform"?"Transform":"GameObject"},f={id:e.id,...e.name?{name:e.name}:{},...e.parentId?{parentId:e.parentId}:{},...e.active===!1?{enabled:!1}:{},...e.shadow?{shadow:structuredClone(e.shadow)}:{},...Rc(n,e,r),...u?{rendering:u}:{},source:c,...i&&"position"in i?{transform:{position:i.position,rotation:i.rotation,...i.scale?{scale:i.scale}:{}}}:{}};if(l==="primitive")return{...f,kind:"primitive",primitive:{shape:s?.shape??"cube"},...d?{overrides:d}:{}};if(a)return{...f,kind:"image",image:{assetId:a.assetId,size:{width:a.size.width,height:a.size.height}},...d?{overrides:d}:{}};if(!o){if(l==="transform"){let g=Cc(e,r),p=g.transformType;delete g.transformType;let y=mo(p)??mo(e.transformType);return{...f,kind:"transform",...y?{transformType:y}:{},...e.camera?{camera:zc(e.camera)}:{},...e.light?{light:Ao(e.light)}:{},...e.marker?{marker:{label:e.name||e.id,...structuredClone(e.marker)}}:{},...g,...d?{overrides:d}:{}}}return{...f,kind:"group"}}return{...f,kind:"instance",instance:{assetId:o.assetId},...d?{overrides:d}:{}}}function Tc(e,t,n,r,i){let o=(e??[]).filter(u=>u.pluginId!==vn);if(!t)return o;let a=n.find(u=>u.id===t.lightRef),s=a?.kind==="transform"&&a.light?.type==="directional"?a:void 0;if(!a&&t.enabled)throw new Error(`shadowMapExperiment.lightMissing:${t.lightRef}`);if(a&&!s&&t.enabled)throw new Error(`shadowMapExperiment.lightUnsupported:${t.lightRef}`);let l=s?.kind==="transform"&&s.light?.type==="directional"?[s.light.direction.x,s.light.direction.y,s.light.direction.z]:[0,-1,0],d=Ur({revision:typeof i=="number"&&Number.isInteger(i)&&i>=0?i:0,scopeId:r,config:t,lightDirection:l,objects:n.filter(u=>u.kind==="instance"||u.kind==="primitive").map(u=>({entityId:u.id,renderableIds:[u.id],cast:u.shadow?.cast==="enabled",receive:u.shadow?.receive==="enabled",inferredUpdateClass:u.shadowMapExperimentInferredUpdateClass??"static"}))});return[...o,{pluginId:vn,schemaVersion:3,data:d}]}function Dc(e){let t=re(e?.metadata?.assetAnalysis)?e.metadata.assetAnalysis:void 0;if(!t)return"static";let n=sr(t.skinCount),r=sr(t.morphTargetCount);return n>0||r>0?"skinned":sr(t.animationCount)>0?"dynamic":"static"}function sr(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}function kc(e,t,n,r,i,o){return yo({prefabAsset:t,sourceRef:n,editorDocument:r,hostGameObject:e,rootRuntimeId:e.id,rootParentId:e.parentId,rootName:e.name??t.displayName??t.id,rootTransform:qn(e)??void 0,rootActive:e.active,instanceOverrides:e.overrides,propertyPathPrefix:`assets.${t.id}.prefab.nodes`,visitedPrefabIds:i,compilerOptions:o})}function yo(e){if(e.visitedPrefabIds.has(e.prefabAsset.id))return[dr({id:e.rootRuntimeId,name:e.rootName??e.prefabAsset.displayName??e.prefabAsset.id,parentId:e.rootParentId,transform:e.rootTransform,editorDocument:e.editorDocument,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:"PrefabCycle",propertyPath:e.propertyPathPrefix})];e.visitedPrefabIds.add(e.prefabAsset.id);let t=Xn(e.prefabAsset),n=Pt(e.prefabAsset),r=n?t.find(d=>d.id===n):null;if(!r||t.length===0)return e.visitedPrefabIds.delete(e.prefabAsset.id),[dr({id:e.rootRuntimeId,name:e.rootName??e.prefabAsset.displayName??e.prefabAsset.id,parentId:e.rootParentId,transform:e.rootTransform,editorDocument:e.editorDocument,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:"Prefab",propertyPath:e.propertyPathPrefix})];let i={instanceId:e.rootRuntimeId,rootNodeId:r.id},o=d=>er(i,d.id),a=Po(t,r.id),s=Io(a,e.prefabAsset),l=[];for(let d of a){let u=o(d),c=d.id===r.id?e.rootParentId:o(t.find(f=>f.id===d.parentId)??r);if(d.kind==="prefabInstance"&&d.childPrefabId){let f=e.editorDocument.assets.find(g=>g.id===d.childPrefabId);if(f&&pn(f)){let g=d.id===r.id;l.push(...yo({prefabAsset:f,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,rootRuntimeId:u,rootParentId:c,rootName:g?e.rootName??d.name??f.displayName??f.id:d.name??f.displayName??f.id,rootTransform:g?e.rootTransform??d.transform:d.transform,rootActive:g?e.rootActive??d.defaults?.active??e.prefabAsset.prefab?.defaults?.active:d.defaults?.active,instanceOverrides:g?Dt(Dt(xe(e.prefabAsset.prefab?.overrides),xe(d.overrides)),xe(e.instanceOverrides)):d.overrides,propertyPathPrefix:`${e.propertyPathPrefix}.${d.id}.childPrefab.nodes`,visitedPrefabIds:new Set(e.visitedPrefabIds),compilerOptions:e.compilerOptions}));continue}l.push(dr({id:u,name:d.name??d.childPrefabId??"Prefab Instance",parentId:c,transform:d.transform,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,component:"UnsupportedPrefabInstance",propertyPath:`${e.propertyPathPrefix}.${d.id}`}));continue}l.push(Mc({node:d,rootNode:r,identityScope:i,prefabAsset:e.prefabAsset,runtimeId:u,parentId:c,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,rootRuntimeName:e.rootName,rootRuntimeTransform:e.rootTransform,rootRuntimeActive:e.rootActive,instanceOverrides:d.id===s?e.instanceOverrides:void 0,propertyPath:`${e.propertyPathPrefix}.${d.id}`,shadowFallbackMode:cr(e.compilerOptions)}))}return e.visitedPrefabIds.delete(e.prefabAsset.id),Nc({compiledNodes:l,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,shadowFallbackMode:cr(e.compilerOptions)})}function Mc(e){let t=e.node.id===e.rootNode.id,n=t?e.rootRuntimeTransform??e.node.transform:e.node.transform,r=e.node.kind==="model"&&e.node.sourceAssetId?e.editorDocument.assets.find(a=>a.id===e.node.sourceAssetId):void 0,i=e.node.kind==="model"||e.node.kind==="primitive",o=ho({id:e.runtimeId,name:t?e.rootRuntimeName??e.node.name??e.prefabAsset.displayName??e.prefabAsset.id:e.node.name,parentId:e.parentId,transform:n,active:t?e.rootRuntimeActive??e.node.defaults?.active??e.prefabAsset.prefab?.defaults?.active:e.node.defaults?.active,...i?{shadow:e.prefabAsset.prefab?.defaults?.shadow}:{},editorDocument:e.editorDocument,shadowFallbackMode:e.shadowFallbackMode,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:e.node.kind==="model"?"PrefabModel":e.node.kind==="primitive"?"PrefabPrimitive":e.node.kind==="light"?"PrefabLight":e.node.kind==="marker"?"PrefabMarker":"PrefabNode",propertyPath:e.propertyPath});if(e.node.kind==="model"&&e.node.sourceAssetId){let a=ur({hostGameObject:e.hostGameObject,prefabAsset:e.prefabAsset,rootNode:e.rootNode,node:e.node,asset:r,editorDocument:e.editorDocument,instanceOverrides:e.instanceOverrides});return{...o,kind:"instance",instance:{assetId:e.node.sourceAssetId},...a?{overrides:a}:{}}}if(e.node.kind==="primitive"){let a=ur({hostGameObject:e.hostGameObject,prefabAsset:e.prefabAsset,rootNode:e.rootNode,node:e.node,asset:void 0,editorDocument:e.editorDocument,instanceOverrides:e.instanceOverrides});return{...o,kind:"primitive",primitive:{shape:e.node.primitive?.shape??"cube"},...a?{overrides:a}:{}}}return e.node.kind==="light"?{...o,kind:"transform",transformType:"light",...e.node.light?{light:Ao(e.node.light)}:{}}:e.node.kind==="marker"&&e.node.marker?{...o,kind:"transform",marker:{label:e.node.name??e.node.id,...Bi(e.node.marker,e.identityScope)}}:{...o,kind:"group"}}function dr(e){return{...ho({id:e.id,name:e.name,parentId:e.parentId,transform:e.transform,editorDocument:e.editorDocument,shadowFallbackMode:e.shadowFallbackMode,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:e.component,propertyPath:e.propertyPath}),kind:"group"}}function Cc(e,t){let n=t.readCustomTransformRuntimeData?.(e);return n&&typeof n=="object"&&!Array.isArray(n)?structuredClone(n):{}}function ho(e){return{id:e.id,...e.name?{name:e.name}:{},...e.parentId?{parentId:e.parentId}:{},...e.active===!1?{enabled:!1}:{},...e.shadow?{shadow:structuredClone(e.shadow)}:{},...$c(e),source:{sourceId:e.sourceRef.sourceId,sourceType:e.sourceRef.sourceType,revision:e.sourceRef.revision,...e.hostGameObject.guid?{objectGuid:e.hostGameObject.guid}:{},objectId:e.hostGameObject.id,component:e.component,propertyPath:e.propertyPath},...e.transform&&"position"in e.transform?{transform:{position:e.transform.position,rotation:e.transform.rotation,...e.transform.scale?{scale:e.transform.scale}:{}}}:{}}}function Rc(e,t,n){let r=cn({document:e,casterId:t.id,caster:t,fallbackMode:cr(n)});return fr(r,!!t.shadow)?{shadowPlan:r}:{}}function $c(e){if(!e.editorDocument)return{};let t=De(e.shadow),n=!!e.shadow||!!t.shadow;if(!n&&t.diagnostics.length===0)return{};let r=cn({document:e.editorDocument,casterId:e.hostGameObject.id,caster:e.hostGameObject,resolvedSettings:t.shadow,fallbackMode:e.shadowFallbackMode}),i={...r,casterId:e.id,diagnostics:[...t.diagnostics,...r.diagnostics].map(o=>({...o,casterId:o.casterId===e.hostGameObject.id||!o.casterId?e.id:o.casterId}))};return fr(i,n)?{shadowPlan:i}:{}}function fr(e,t){return t||e.backend!=="none"||e.diagnostics.length>0}function Nc(e){if(e.compiledNodes.length===0)return e.compiledNodes;let t=new Set(e.compiledNodes.map(a=>a.id)),n=e.compiledNodes.map(a=>Oc(a)),r={...e.editorDocument,scene:{...e.editorDocument.scene,gameObjects:[...e.editorDocument.scene.gameObjects.filter(a=>!t.has(a.id)),...n]}},i=e.compiledNodes.filter(a=>a.shadow?.receive==="enabled").map(a=>a.id),o=n.find(a=>a.light?.type==="directional"&&a.active!==!1)?.id;return e.compiledNodes.map((a,s)=>{let l=n[s],d=cn({document:r,casterId:a.id,caster:l,explicitReceiverIds:i,...o?{defaultLightId:o}:{},fallbackMode:e.shadowFallbackMode}),u=!!a.shadow;if(!fr(d,u)){if(!a.shadowPlan)return a;let c={...a};return delete c.shadowPlan,c}return{...a,shadowPlan:d}})}function cr(e){let t=Wt(e.renderingProfile).shadows,n=t.planar.enabled?"planar":t.blob.enabled?"blob":t.staticProjected.enabled?"static":t.enabled?"dynamic":"none";return n==="planar"?"projected":n}function Oc(e){let t=[];return e.transform&&t.push({type:"Transform",position:e.transform.position,rotation:e.transform.rotation,...e.transform.scale?{scale:e.transform.scale}:{}}),e.kind==="instance"&&t.push({type:"ModelRenderer",assetId:e.instance.assetId}),e.kind==="image"&&t.push({type:"ImageRenderer",assetId:e.image.assetId,size:structuredClone(e.image.size)}),{id:e.id,...e.name?{name:e.name}:{},kind:e.kind==="image"?"transform":e.kind,...e.parentId?{parentId:e.parentId}:{},...e.enabled===!1?{active:!1}:{},...e.shadow?{shadow:{cast:e.shadow.cast==="enabled"?"enabled":"none",receive:e.shadow.receive==="enabled"?"enabled":"none"}}:{},...e.kind==="primitive"?{primitive:{shape:e.primitive.shape}}:{},...e.kind==="transform"&&e.transformType?{transformType:e.transformType}:{},...e.kind==="transform"&&e.light?{light:e.light}:{},...e.kind==="transform"&&e.camera?{camera:e.camera}:{},...e.kind==="transform"&&e.marker?{marker:structuredClone(e.marker)}:{},components:t}}function ur(e){let t=e.node.kind==="model"&&e.node.sourceAssetId?xo(e.hostGameObject,e.node,e.node.sourceAssetId):e.hostGameObject,n=e.asset?.id,r=jc([lr(xe(e.prefabAsset.prefab?.overrides),e.prefabAsset.prefab?.sourceAssetId,e.asset),lr(xe(e.rootNode.overrides),e.rootNode.kind==="model"?e.rootNode.sourceAssetId:e.prefabAsset.prefab?.sourceAssetId,e.asset),e.node.id===e.rootNode.id?void 0:lr(xe(e.node.overrides),e.node.kind==="model"?e.node.sourceAssetId:n,e.asset)]),i=xe(e.instanceOverrides);return So(Dt(r,i),e.asset)}function lr(e,t,n){return So(e,t&&t===n?.id?n:void 0)}function So(e,t){if(!e?.materialSlotBindings)return e;let n=re(t?.metadata)&&Array.isArray(t.metadata.materialSlots)?t.metadata.materialSlots:[],r=new Set(n.flatMap(a=>{let s=re(a)&&typeof a.slotId=="string"?a.slotId.trim():"";return s?[s]:[]})),i=Object.fromEntries(Object.entries(e.materialSlotBindings).filter(([a])=>r.has(a))),o=structuredClone(e);return Object.keys(i).length>0?o.materialSlotBindings=i:delete o.materialSlotBindings,Object.keys(o).length>0?o:void 0}function xo(e,t,n){return{id:`${e.id}:${t.id}`,...t.name?{name:t.name}:{},kind:"instance",components:[...t.transform?[t.transform]:[],{type:"ModelRenderer",assetId:n}]}}function vc(e,t){return{id:`${e.id}:${t.id}`,...t.name?{name:t.name}:{},kind:"primitive",primitive:{shape:t.primitive?.shape??"cube"},components:[...t.transform?[t.transform]:[]]}}function Gc(e,t){return t.kind==="model"&&t.sourceAssetId?xo(e,t,t.sourceAssetId):t.kind==="primitive"?vc(e,t):null}function jc(e){let t;for(let n of e){let r=xe(n);r&&(t=Dt(t,r))}return t}function Po(e,t){let n=new Map;for(let s of e){if(!s.parentId)continue;let l=n.get(s.parentId)??[];l.push(s),n.set(s.parentId,l)}let r=[],i=new Set,o=s=>{if(!i.has(s.id)){i.add(s.id),r.push(s);for(let l of n.get(s.id)??[])o(l)}},a=e.find(s=>s.id===t);a&&o(a);for(let s of e)o(s);return r}function Io(e,t){let n=t.prefab?.sourceAssetId;return e.find(r=>r.kind==="model"&&r.sourceAssetId===n)?.id??e.find(r=>r.kind==="model")?.id}function pn(e){return an(e)&&e.prefab.compositionVersion===sn&&Array.isArray(e.prefab.nodes)&&e.prefab.nodes.length>0&&!!Pt(e)}function Fc(e){return e.primitive??null}function Eo(e,t){let n=nt(e);if(n!=="instance"&&n!=="transform"&&n!=="primitive")return;let r=tt(e),i=r?t.assets.find(o=>o.id===r.assetId):void 0;return _c(e,t,i)}function _c(e,t,n){let r=xe(e.overrides),i=dn(t,e),o=xe(i.definition?.prefab?.overrides);return Dt(o,r)}function Dt(e,t){let n=Li(e,t);for(let r of[e,t])if(r)for(let[i,o]of Object.entries(r))Lc(i)||o===void 0||(n??={},n[i]=structuredClone(o));return n&&Object.keys(n).length>0?n:void 0}function xe(e){if(!re(e))return;let t=structuredClone(e);return Object.keys(t).length>0?t:void 0}function Lc(e){return e==="materialBinding"||e==="materialSlotBindings"}function re(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function we(e){return(typeof e=="string"?e.trim():"")||void 0}function mo(e){return typeof e=="string"?e:void 0}function zc(e){let t=structuredClone(e);return delete t.inspectorLanguage,t}function Ao(e){return e.type==="directional"?qe({schemaVersion:1,type:"directional",intensity:e.intensity,direction:ut(e.direction),diffuseColor:e.diffuseColor??Xi.diffuseColor}):qe({schemaVersion:1,type:"hemispheric",intensity:e.intensity,diffuseColor:e.diffuseColor??nr.diffuseColor,groundColor:e.groundColor??nr.groundColor})}function Uc(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function wo(e){let t=Uc(e);if(t==null)return null;let n=t%360;n>180&&(n-=360),n<=-180&&(n+=360);let r=Bc(n);return Object.is(r,-0)?0:r}function Bc(e){return Math.round(e*1e3)/1e3}var Vc=new Set(["leftToRight","rightToLeft","bottomToTop","topToBottom"]);function ko(e){let t=Si(e),n={uiKind:e.uiKind,size:{width:e.size.width,depth:e.size.depth},layers:e.layers.map((r,i)=>Kc(r,i)),rendering:{textureWidth:t.width,textureHeight:t.height}};return e.aspectSourceLayerId&&(n.aspectSourceLayerId=e.aspectSourceLayerId),typeof e.lockAspectToBorder=="boolean"&&(n.lockAspectToBorder=e.lockAspectToBorder),e.mask&&(n.mask={...typeof e.mask.enabled=="boolean"?{enabled:e.mask.enabled}:{},...e.mask.source==="roundedRect"||e.mask.source==="borderAlpha"||e.mask.source==="texture"?{source:e.mask.source}:{},...e.mask.textureId?{textureId:e.mask.textureId}:{},...typeof e.mask.cornerRadius=="number"&&Number.isFinite(e.mask.cornerRadius)?{cornerRadius:e.mask.cornerRadius}:{},...typeof e.mask.padding=="number"&&Number.isFinite(e.mask.padding)?{padding:e.mask.padding}:{}}),e.rendering&&(n.rendering={...n.rendering,...typeof e.rendering.alphaIndex=="number"&&Number.isFinite(e.rendering.alphaIndex)?{alphaIndex:e.rendering.alphaIndex}:{},...typeof e.rendering.diffuseTextureLevel=="number"&&Number.isFinite(e.rendering.diffuseTextureLevel)?{diffuseTextureLevel:e.rendering.diffuseTextureLevel}:{},...typeof e.rendering.emissiveTextureLevel=="number"&&Number.isFinite(e.rendering.emissiveTextureLevel)?{emissiveTextureLevel:e.rendering.emissiveTextureLevel}:{}}),n}function Kc(e,t){let n=wo(e.rotationDeg??0)??0,r={id:e.id,role:e.role,zOrder:typeof e.zOrder=="number"&&Number.isFinite(e.zOrder)?e.zOrder:t,rect:Hc(e.rect),...n!==0?{rotationDeg:n}:{},...typeof e.enabled=="boolean"?{enabled:e.enabled}:{},...typeof e.opacity=="number"&&Number.isFinite(e.opacity)?{opacity:e.opacity}:{}};return e.kind==="texture"?{...r,kind:"texture",...e.textureId?{textureId:e.textureId}:{},...e.tint?{tint:ot(e.tint)}:{},...e.imageFit?{imageFit:e.imageFit}:{}}:e.kind==="textureProgress"?{...r,kind:"textureProgress",...e.textureId?{textureId:e.textureId}:{},value:Do(e.value),...e.tint?{tint:ot(e.tint)}:{},...e.imageFit?{imageFit:e.imageFit}:{},...To(e.direction)?{direction:e.direction}:{}}:e.kind==="color"?{...r,kind:"color",color:ot(e.color)}:e.kind==="progress"?{...r,kind:"progress",value:Do(e.value??0),color:ot(e.color),...To(e.direction)?{direction:e.direction}:{}}:{...r,kind:"text",text:{value:e.text.value,color:ot(e.text.color),...e.text.fontFamily?{fontFamily:e.text.fontFamily}:{},...typeof e.text.fontSize=="number"&&Number.isFinite(e.text.fontSize)?{fontSize:e.text.fontSize}:{},...e.text.fontWeight!=null?{fontWeight:String(e.text.fontWeight)}:{},...e.text.strokeColor?{strokeColor:ot(e.text.strokeColor)}:{},...typeof e.text.strokeWidth=="number"&&Number.isFinite(e.text.strokeWidth)?{strokeWidth:e.text.strokeWidth}:{},...e.text.align==="left"||e.text.align==="center"||e.text.align==="right"?{align:e.text.align}:{},...e.text.baseline==="top"||e.text.baseline==="middle"||e.text.baseline==="bottom"?{baseline:e.text.baseline}:{}}}}function Hc(e){return{x:e.x,z:e.z,width:e.width,depth:e.depth}}function ot(e){return{r:e.r,g:e.g,b:e.b,...typeof e.a=="number"?{a:e.a}:{}}}function To(e){return typeof e=="string"&&Vc.has(e)}function Do(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}var Mo=["model","texture","image","sound"],mr=[".glb",".gltf"],Co=[".png",".jpg",".jpeg",".webp"],Wc=[".env",".hdr",".dds",".ktx",".ktx2"],gr=[...Co,...Wc],pr=[".mp3",".wav",".ogg",".flac",".aac",".m4a"],kt=[...mr,...gr,...pr];function qc(e){return String(e??"").trim().toLowerCase().replace(/-/g,"")}function br(e,t){let n=qc(t);return`${e==="model"?"asset":e==="texture"?"texture":e==="sound"?"sound":"image"}_${n}`}function yr(e){let i=String(e??"").trim().split(/[^a-zA-Z0-9_$]+/).filter(Boolean).map((o,a)=>a===0?o:`${o.charAt(0).toUpperCase()}${o.slice(1)}`).join("").replace(/[^a-zA-Z0-9_$]/g,"")||"assetUrl";return/^[a-zA-Z_$]/.test(i)?i:`asset${i}`}function hr(e,t=""){let n=String(e??"").trim().toLowerCase();if(n==="glb"||n==="gltf"||n==="model")return"model";if(n==="groundtexture"||n==="ground-texture"||n==="texture")return"texture";if(n==="ui"||n==="image"||n==="img")return"image";if(n==="audio"||n==="sound")return"sound";let r=Jc(t);return mr.includes(r)?"model":pr.includes(r)?"sound":gr.includes(r)?"texture":null}function Jc(e){let t=e.split(/[?#]/,1)[0]??"",n=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\")),r=t.slice(n+1),i=r.lastIndexOf(".");return i>=0?r.slice(i).toLowerCase():""}function Ro(e){let t=String(e??"").trim(),n=t.toLowerCase();for(let r of[...kt].sort((i,o)=>o.length-i.length))if(n.endsWith(r)){t=t.slice(0,-r.length);break}return t}function $o(e,t){return String(e??"").trim()||Ro(t)||"Asset"}function No(e,t){return Ro(e||t).trim().toLowerCase().normalize("NFKD").replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_{2,}/g,"_")||null}function Oo(e){return e==="model"?mr:e==="sound"?pr:e==="texture"?gr:e==="image"?Co:[]}function bn(e,t={}){let n=t.generatedBy??"scripts/register-asset.mjs",r=t.codeKeyPolicy??"legacy",i=e.filter(d=>d.codeKey);if(r==="disabled"&&i.length>0){let d=i[0];throw Object.assign(new Error("manifest_code_key_disabled"),{name:"PlayableEditorAssetCatalogGenerationError",details:{codeKeyPolicy:r,assetId:d.assetId,codeKey:d.codeKey}})}let o=e.map(d=>`import ${yr(d.assetId)} from ${JSON.stringify(`${d.relativePath}?url`)};`).join(`
|
|
4
|
+
`),a=e.map(d=>{let u=ri(d.relativePath);if(!u)throw new Error(`Generated asset catalog entry has no file extension: ${d.assetId}`);if(!ii(u))throw new Error(`Generated asset catalog entry has unsupported format: ${d.assetId} (${u})`);let c=[`guid: ${JSON.stringify(d.guid)}`,`assetId: ${JSON.stringify(d.assetId)}`,`kind: ${JSON.stringify(d.kind)}`,`displayName: ${JSON.stringify(d.displayName)}`,`url: ${yr(d.assetId)}`,`format: ${JSON.stringify(u)}`,`relativePath: ${JSON.stringify(d.relativePath)}`,d.originalFileName?`originalFileName: ${JSON.stringify(d.originalFileName)}`:"",d.codeKey?`codeKey: ${JSON.stringify(d.codeKey)}`:"",d.category?`category: ${JSON.stringify(d.category)}`:"",typeof d.placeable=="boolean"?`placeable: ${JSON.stringify(d.placeable)}`:"",typeof d.warmupCount=="number"?`warmupCount: ${JSON.stringify(d.warmupCount)}`:"",typeof d.singleton=="boolean"?`singleton: ${JSON.stringify(d.singleton)}`:"",d.materialMode?`materialMode: ${JSON.stringify(d.materialMode)}`:"",d.defaults?`defaults: ${JSON.stringify(d.defaults)}`:"",d.contentHash?`contentHash: ${JSON.stringify(d.contentHash)}`:"",typeof d.byteSize=="number"?`byteSize: ${JSON.stringify(d.byteSize)}`:"",d.external?`external: ${JSON.stringify(d.external)}`:"",d.metadata?`metadata: ${JSON.stringify(d.metadata)}`:"",d.createdAt?`createdAt: ${JSON.stringify(d.createdAt)}`:"",d.updatedAt?`updatedAt: ${JSON.stringify(d.updatedAt)}`:""].filter(Boolean).join(", ");return` ${JSON.stringify(d.assetId)}: { ${c} },`}).join(`
|
|
5
|
+
`),s=new Map;for(let d of i)s.set(d.codeKey,d.assetId);let l=[...s].map(([d,u])=>` ${JSON.stringify(d)}: ${JSON.stringify(u)},`).join(`
|
|
6
|
+
`);return[`// This file is generated by ${n}.`,"// Do not edit by hand.","",o,"",'export type GeneratedAssetCatalogKind = "model" | "texture" | "image" | "sound";',"","export interface GeneratedAssetCatalogEntry {"," guid: string;"," assetId: string;"," kind: GeneratedAssetCatalogKind;"," displayName: string;"," url: string;"," format: `.${string}`;"," relativePath: string;"," originalFileName?: string;",...r==="legacy"?[" /** @deprecated Use the canonical assetId for persisted and runtime identity. */"," codeKey?: string;"]:[]," category?: string;"," placeable?: boolean;"," warmupCount?: number;"," singleton?: boolean;"," materialMode?: string;"," defaults?: Record<string, unknown>;"," contentHash?: string;"," byteSize?: number;"," external?: { platformAssetId?: string; assetPath?: string; assetUrl?: string };"," metadata?: Record<string, unknown>;"," createdAt?: string;"," updatedAt?: string;","}","","export const GENERATED_ASSET_CATALOG: Record<string, GeneratedAssetCatalogEntry> = {",a,"};","","export const GENERATED_ASSET_URL_MAP = Object.fromEntries("," Object.entries(GENERATED_ASSET_CATALOG).map(([assetId, entry]) => [assetId, entry.url]),",") as Record<string, string>;","","export const GENERATED_MODEL_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "model").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_TEXTURE_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "texture").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_IMAGE_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "image").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_SOUND_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "sound").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","/** @deprecated Resolve assets by canonical assetId through GENERATED_ASSET_CATALOG. */","export const ASSET_IDS = {",l,"} as const satisfies Record<string, string>;"].join(`
|
|
7
|
+
`)+`
|
|
8
|
+
`}import Sn from"node:crypto";import{constants as Mu}from"node:fs";import R from"node:fs/promises";import w from"node:path";import Sr from"node:fs/promises";import se from"node:path";var xr=5;async function yn(e){let t={...e.existingMetadata??{},...e.payloadMetadata??{}},n=await Xc(e);if(n?(t.assetAnalysis=n,t.assetAnalysisStatus="complete"):(delete t.assetAnalysis,t.assetAnalysisStatus="unavailable"),e.kind==="texture"||e.kind==="image"){let i=xu(e.sourcePath,t);return i&&(t.textureUsage=i.usage,t.capabilities={...V(t.capabilities)?t.capabilities:{},materialTexture:i.materialTexture,environmentTexture:i.environmentTexture}),Object.keys(t).length>0?t:null}if(e.kind!=="model")return Object.keys(t).length>0?t:null;t.assetMetadataVersion=xr;let r=await Zc(e.sourcePath,{assetGuid:e.guid,assetId:e.assetId,cwd:e.cwd,assetsDir:e.assetsDir,existingMaterialSlots:t.materialSlots});return r.length===0?delete t.materialSlots:t.materialSlots=r,Object.keys(t).length>0?t:null}async function Xc(e){return e.kind==="model"?Yc(e.sourcePath):e.kind==="texture"||e.kind==="image"?Qc(e.sourcePath):null}async function Zc(e,t={}){try{let n=await Fo(e);return cu(n,{...t,sourcePath:e})}catch{return[]}}async function Fo(e){let t=se.extname(e).toLowerCase();if(t===".gltf")return JSON.parse(await Sr.readFile(e,"utf8"));if(t!==".glb")return null;let n=await Sr.readFile(e);if(n.length<20||n.toString("utf8",0,4)!=="glTF"||n.readUInt32LE(4)!==2||n.readUInt32LE(8)>n.length)return null;let o=12;for(;o+8<=n.length;){let a=n.readUInt32LE(o),s=n.readUInt32LE(o+4);if(o+=8,o+a>n.length)return null;if(s===1313821514){let l=n.toString("utf8",o,o+a).replace(/\0+$/g,"");return JSON.parse(l)}o+=a}return null}async function Yc(e){try{let t=await Fo(e);if(!t||typeof t!="object")return null;let n=Array.isArray(t.scenes)?t.scenes:[],r=Array.isArray(t.nodes)?t.nodes:[],i=Array.isArray(t.meshes)?t.meshes:[],o=Array.isArray(t.materials)?t.materials:[],a=Array.isArray(t.textures)?t.textures:[],s=Array.isArray(t.images)?t.images:[],l=Array.isArray(t.animations)?t.animations:[],d=Array.isArray(t.skins)?t.skins:[],u=Array.isArray(t.accessors)?t.accessors:[],c=Bo(t),f=Vo(r),g=new Set(c),p=i.reduce((T,$)=>T+(Array.isArray($?.primitives)?$.primitives.length:0),0),y=i.reduce((T,$)=>T+(Array.isArray($?.primitives)?$.primitives.reduce((_,q)=>_+(Array.isArray(q?.targets)?q.targets.length:0),0):0),0),S=iu({nodeCount:r.length,meshCount:i.length,primitiveCount:p,materialCount:o.length,textureCount:a.length,imageCount:s.length}),P=ou({nodeCount:r.length,meshCount:i.length,primitiveCount:p,materialCount:o.length,textureCount:a.length,imageCount:s.length,animationCount:l.length,skinCount:d.length,morphTargetCount:y,complexity:S});return{kind:"gltf",format:se.extname(e).toLowerCase()===".gltf"?"gltf":"glb",summary:`${r.length} nodes, ${i.length} meshes, ${p} primitives, ${o.length} materials`,complexity:S,sceneCount:n.length,nodeCount:r.length,meshCount:i.length,primitiveCount:p,materialCount:o.length,textureCount:a.length,imageCount:s.length,animationCount:l.length,skinCount:d.length,morphTargetCount:y,nodes:eu(r,i,o,u,f,g),meshes:tu(i,o,u),materials:nu(t),diagnostics:P}}catch{return null}}async function Qc(e){try{let t=await Sr.readFile(e),n=se.extname(e).toLowerCase(),r=n===".png"?au(t):n===".jpg"||n===".jpeg"?su(t):n===".webp"?du(t):null;if(!r)return null;let i=lu(r);return{kind:"image",format:r.format,summary:`${r.width}x${r.height} ${r.mime}`,complexity:r.estimatedPixels>=4096*4096?"high":r.estimatedPixels>=2048*2048?"medium":"low",width:r.width,height:r.height,mime:r.mime,bitDepth:r.bitDepth,hasAlpha:r.hasAlpha,estimatedPixels:r.estimatedPixels,diagnostics:i}}catch{return null}}function eu(e,t,n,r,i,o){return e.slice(0,100).map((a,s)=>{let l=Number.isInteger(a?.mesh)?a.mesh:-1,d=l>=0&&l<t.length?t[l]:null,u=Array.isArray(a?.children)?a.children.filter(g=>Number.isInteger(g)):[],c=Ko(e,i,o,s),f={nodeIndex:s,nodeIndexPath:Wo(i,s),...typeof a?.name=="string"&&a.name.trim()?{name:a.name.trim()}:{},...c?{ownerNodePath:c}:{},...u.length>0?{children:u}:{}};if(d){let g=_o(d,n,r);Object.assign(f,{meshIndex:l,...typeof d?.name=="string"&&d.name.trim()?{meshName:d.name.trim()}:{},primitiveCount:g.length,...g.length>0?{primitives:g}:{}})}return f})}function tu(e,t,n){return e.slice(0,50).map((r,i)=>{let o=Array.isArray(r?.primitives)?r.primitives:[],a=[...new Set(o.map(l=>Number.isInteger(l?.material)?l.material:-1).filter(l=>l>=0))],s=_o(r,t,n);return{meshIndex:i,...typeof r?.name=="string"&&r.name.trim()?{name:r.name.trim()}:{},primitiveCount:o.length,...s.length>0?{primitives:s}:{},...a.length>0?{materialIndices:a}:{},...a.length>0?{materialNames:a.map(l=>{let d=t[l];return typeof d?.name=="string"?d.name.trim():""}).filter(Boolean)}:{}}})}function _o(e,t,n){let r=V(e)?e:{};return(Array.isArray(r.primitives)?r.primitives:[]).map((o,a)=>{let s=Number.isInteger(o?.material)?o.material:-1,l=s>=0?t[s]:null,d=typeof l?.name=="string"&&l.name.trim()?l.name.trim():"",u=qo(o,n),c=Jo(o,n);return{primitiveIndex:a,...Number.isInteger(o?.mode)?{mode:o.mode}:{},...s>=0?{sourceMaterialIndex:s}:{},...d?{materialName:d}:{},...Number.isFinite(u)?{triangleCount:u}:{},...c?{boundingBox:c}:{}}})}function nu(e){return(Array.isArray(e?.materials)?e.materials:[]).slice(0,50).map((n,r)=>{let i=n?.pbrMetallicRoughness&&typeof n.pbrMetallicRoughness=="object"?n.pbrMetallicRoughness:{},o=ru(n,i);return{sourceMaterialIndex:r,...typeof n?.name=="string"&&n.name.trim()?{materialName:n.name.trim()}:{},...Array.isArray(i.baseColorFactor)?{baseColorFactor:i.baseColorFactor.slice(0,4)}:{},metallicFactor:Number.isFinite(i.metallicFactor)?i.metallicFactor:1,roughnessFactor:Number.isFinite(i.roughnessFactor)?i.roughnessFactor:1,alphaMode:zo(n?.alphaMode)??"opaque",...Number.isFinite(n?.alphaCutoff)?{alphaCutoff:n.alphaCutoff}:{},...o.length>0?{textureSlots:o}:{}}})}function ru(e,t){let n=[];return Mt(n,"baseColor",t?.baseColorTexture),Mt(n,"metallicRoughness",t?.metallicRoughnessTexture),Mt(n,"normal",e?.normalTexture),Mt(n,"occlusion",e?.occlusionTexture),Mt(n,"emissive",e?.emissiveTexture),n}function Mt(e,t,n){!V(n)||!Number.isInteger(n.index)||e.push({slot:t,textureIndex:n.index,...Number.isFinite(n.texCoord)?{texCoord:n.texCoord}:{}})}function iu(e){return e.nodeCount>=300||e.meshCount>=250||e.primitiveCount>=300||e.materialCount>=200||e.textureCount>=80||e.imageCount>=80?"high":e.nodeCount>=100||e.meshCount>=80||e.primitiveCount>=100||e.materialCount>=50||e.textureCount>=24||e.imageCount>=24?"medium":"low"}function ou(e){let t=[];return e.complexity==="high"&&t.push({severity:"warning",source:"asset",code:"asset.analysis.highComplexity",message:"GLTF asset is structurally complex; agent should place and inspect it before duplicating or using dense shadows.",details:{nodeCount:e.nodeCount,meshCount:e.meshCount,primitiveCount:e.primitiveCount,materialCount:e.materialCount,textureCount:e.textureCount,imageCount:e.imageCount}}),(e.animationCount>0||e.skinCount>0||e.morphTargetCount>0)&&t.push({severity:"info",source:"asset",code:"asset.analysis.riggedOrAnimated",message:"GLTF asset contains animation, skin, or morph target data.",details:{animationCount:e.animationCount,skinCount:e.skinCount,morphTargetCount:e.morphTargetCount}}),t}function au(e){if(e.length<33||e[0]!==137||e.toString("ascii",1,4)!=="PNG"||e[4]!==13||e[5]!==10||e[6]!==26||e[7]!==10||e.toString("ascii",12,16)!=="IHDR")return null;let n=e.readUInt32BE(16),r=e.readUInt32BE(20),i=e[24],o=e[25],a=!1,s=33;for(;s+12<=e.length;){let l=e.readUInt32BE(s),d=s+12+l;if(d>e.length)break;let u=e.toString("ascii",s+4,s+8);if(u==="tRNS"){a=!0;break}if(u==="IDAT"||u==="IEND")break;s=d}return{format:"png",mime:"image/png",width:n,height:r,bitDepth:i,hasAlpha:o===4||o===6||a,estimatedPixels:n*r}}function su(e){if(e.length<4||e[0]!==255||e[1]!==216)return null;let t=2;for(;t+9<e.length;){if(e[t]!==255){t+=1;continue}let n=e[t+1],r=e.readUInt16BE(t+2);if(r<2)return null;if(n>=192&&n<=207&&![196,200,204].includes(n)&&t+8<e.length){let o=e[t+4],a=e.readUInt16BE(t+5),s=e.readUInt16BE(t+7);return{format:"jpeg",mime:"image/jpeg",width:s,height:a,bitDepth:o,hasAlpha:!1,estimatedPixels:s*a}}t+=2+r}return null}function du(e){if(e.length<30||e.toString("ascii",0,4)!=="RIFF"||e.toString("ascii",8,12)!=="WEBP")return null;let t=e.toString("ascii",12,16);if(t==="VP8X"&&e.length>=30){let n=e[20],r=vo(e,24)+1,i=vo(e,27)+1;return{format:"webp",mime:"image/webp",width:r,height:i,hasAlpha:(n&16)!==0,estimatedPixels:r*i}}if(t==="VP8 "&&e.length>=30){let n=e.readUInt16LE(26)&16383,r=e.readUInt16LE(28)&16383;return{format:"webp",mime:"image/webp",width:n,height:r,hasAlpha:!1,estimatedPixels:n*r}}if(t==="VP8L"&&e.length>=25&&e[20]===47){let n=e.readUInt32LE(21),r=(n&16383)+1,i=(n>>14&16383)+1;return{format:"webp",mime:"image/webp",width:r,height:i,hasAlpha:!0,estimatedPixels:r*i}}return null}function vo(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16}function lu(e){let t=[];return e.estimatedPixels>=4096*4096&&t.push({severity:"warning",source:"asset",code:"asset.analysis.largeImage",message:"Image asset is large; agent should inspect texture usage before assigning it broadly.",details:{width:e.width,height:e.height,estimatedPixels:e.estimatedPixels}}),t}function cu(e,t={}){if(!e||typeof e!="object")return[];let n=Array.isArray(e.nodes)?e.nodes:[],r=Array.isArray(e.meshes)?e.meshes:[],i=Array.isArray(e.materials)?e.materials:[],o=fu(e,t),a=Bo(e),s=Vo(n),l=new Set(a),d=Array.isArray(e.accessors)?e.accessors:[],u=yu(t.existingMaterialSlots),c=[],f=new Map;for(let g=0;g<n.length;g+=1){let p=n[g],y=Number.isInteger(p?.mesh)?p.mesh:-1;if(y<0||y>=r.length)continue;let S=Ko(n,s,l,g);if(!S)continue;let P=r[y],D=Array.isArray(P?.primitives)?P.primitives:[],T=Iu(p,P,S),$=Ho(P),_=Wo(s,g);for(let q=0;q<D.length;q+=1){let ve=D[q],m=Eu(ve,i),L=Uo({ownerNodePath:S,nodeIndex:g,meshIndex:y,primitiveIndex:q}),b=qo(ve,d),j=Jo(ve,d),W=D.length>1?`${T} / Primitive ${q}`:T,J={ownerNodePath:S,nodeIndex:g,nodeIndexPath:_,meshIndex:y,primitiveIndex:q,...$?{sourceMeshName:$}:{},...m.index>=0?{sourceMaterialIndex:m.index}:{},...Number.isFinite(b)?{triangleCount:b}:{},...j?{boundingBox:j}:{}};if(m.index>=0){let z=f.get(m.index)??{label:W,materialName:m.name,sourceSurfaces:[]};z.sourceSurfaces.push(J),f.set(m.index,z);continue}c.push({slotId:u.byExactSource.get(L)??hu({assetGuid:t.assetGuid,assetId:t.assetId,nodeIndex:g,meshIndex:y,primitiveIndex:D.length>1?q:void 0}),label:W,sourceSurfaces:[J]})}}for(let[g,p]of f){let y=p.sourceSurfaces.sort(Lo);c.push({slotId:u.bySourceMaterialIndex.get(g)??Su({assetGuid:t.assetGuid,assetId:t.assetId,sourceMaterialIndex:g}),label:p.label,sourceSurfaces:y,...p.materialName?{materialName:p.materialName,materialNames:[p.materialName]}:{},...mu(o,[g])})}return c.sort(uu)}function uu(e,t){let n=Array.isArray(e.sourceSurfaces)?e.sourceSurfaces[0]:void 0,r=Array.isArray(t.sourceSurfaces)?t.sourceSurfaces[0]:void 0;return Lo(n,r)}function Lo(e,t){let n=String(e?.ownerNodePath??"").localeCompare(String(t?.ownerNodePath??""));if(n!==0)return n;let r=Number.isInteger(e?.nodeIndex)?e.nodeIndex:-1,i=Number.isInteger(t?.nodeIndex)?t.nodeIndex:-1;if(r!==i)return r-i;let o=Number.isInteger(e?.meshIndex)?e.meshIndex:-1,a=Number.isInteger(t?.meshIndex)?t.meshIndex:-1;if(o!==a)return o-a;let s=Number.isInteger(e?.primitiveIndex)?e.primitiveIndex:-1,l=Number.isInteger(t?.primitiveIndex)?t.primitiveIndex:-1;return s-l}function fu(e,t={}){let n=Array.isArray(e?.materials)?e.materials:[],r=[];for(let i=0;i<n.length;i+=1){let o=gu(e,i,t);o&&r.push(o)}return r}function mu(e,t){if(!t.length||!e.length)return{};let n=new Map(e.map(i=>[i.sourceMaterialIndex,i])),r=t.map(i=>n.get(i)).filter(Boolean);return r.length>0?{sourceMaterialProfiles:r}:{}}function gu(e,t,n={}){let r=Array.isArray(e?.materials)?e.materials[t]:null;if(!r||typeof r!="object")return null;let i={},o=[],a=r.pbrMetallicRoughness&&typeof r.pbrMetallicRoughness=="object"?r.pbrMetallicRoughness:{},s={},l=Array.isArray(a.baseColorFactor)?a.baseColorFactor:null,d=Go(l);d&&(s.color=d);let u=Ct(e,a.baseColorTexture,n,"baseColor.texture",s,"texture",o);Object.keys(s).length>0&&(i.baseColor={...s,brightness:1,saturation:1,contrast:1,hue:0});let c={};Ct(e,r.normalTexture,n,"normal.texture",c,"texture",o),Number.isFinite(r.normalTexture?.scale)?c.strength=r.normalTexture.scale:c.texture&&(c.strength=1),Object.keys(c).length>0&&(i.normal=c),i.metallic=Number.isFinite(a.metallicFactor)?a.metallicFactor:1,i.roughness=Number.isFinite(a.roughnessFactor)?a.roughnessFactor:1;let f={};Ct(e,a.metallicRoughnessTexture,n,"metallicRoughness.texture",f,"texture",o),Object.keys(f).length>0&&(i.metallicRoughness=f);let g={};Ct(e,r.occlusionTexture,n,"occlusion.texture",g,"texture",o),Number.isFinite(r.occlusionTexture?.strength)?g.strength=r.occlusionTexture.strength:g.texture&&(g.strength=1),Object.keys(g).length>0&&(i.occlusion=g);let p={},y=Go(Array.isArray(r.emissiveFactor)?r.emissiveFactor:null),S=y&&(y.r!==0||y.g!==0||y.b!==0);S&&(p.color=y),Ct(e,r.emissiveTexture,n,"emission.texture",p,"texture",o),S&&(p.intensity=1),Object.keys(p).length>0&&(i.emission=p);let P={},D=zo(r.alphaMode);if(D&&(P.mode=D),(D==="mask"||D==="blend")&&(l&&Number.isFinite(l[3])&&l[3]!==1&&(P.opacity=l[3]),Number.isFinite(r.alphaCutoff)?P.cutoff=r.alphaCutoff:D==="mask"&&(P.cutoff=.5),u.texture&&(P.texture=structuredClone(u.texture)),u.hint&&o.push({...u.hint,profilePath:"alpha.texture"})),Object.keys(P).length>0&&(i.alpha=P),Object.keys(i).length===0&&o.length===0)return null;let T=typeof r.name=="string"&&r.name.trim()?r.name.trim():"";return{sourceMaterialIndex:t,...T?{materialName:T}:{},...Object.keys(i).length>0?{profile:i}:{},...o.length>0?{textureHints:o}:{}}}function Go(e){if(!Array.isArray(e)||e.length<3)return null;let[t,n,r]=e;return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)?{r:t,g:n,b:r}:null}function zo(e){return e==="MASK"?"mask":e==="BLEND"?"blend":e==="OPAQUE"?"opaque":null}function Ct(e,t,n,r,i,o,a){let s=pu(e,t,n,r);return s.texture&&(i[o]=s.texture),s.hint&&a.push(s.hint),s}function pu(e,t,n,r){let i=V(t)?t:{},o=Number.isInteger(i.index)?i.index:-1;if(o<0)return{};let a=Array.isArray(e?.textures)?e.textures:[],s=Array.isArray(e?.images)?e.images:[],l=a[o],d=bu(l),u=d.imageIndex,c=u>=0?s[u]:null,f=typeof c?.uri=="string"?c.uri.trim():"",g=/^data:/i.test(f),p={profilePath:r,textureIndex:o,...u>=0?{imageIndex:u}:{},...d.previewImageIndex>=0?{previewImageIndex:d.previewImageIndex}:{},...f&&!g?{uri:f}:{},...Number.isInteger(c?.bufferView)?{bufferView:c.bufferView}:{},...typeof c?.mimeType=="string"&&c.mimeType.trim()?{mimeType:c.mimeType.trim()}:{}};if(c?.bufferView!=null)return{hint:{...p,reason:"embedded-texture"}};if(!f)return{hint:{...p,reason:"missing-image-uri"}};if(g)return{hint:{...p,reason:"embedded-texture"}};if(/^https?:\/\//i.test(f)||f.startsWith("/"))return{texture:{url:f}};let y=f;try{y=decodeURIComponent(f)}catch{return{hint:{...p,reason:"unresolved-external-texture"}}}let S=se.dirname(String(n.sourcePath??"")),P=se.resolve(S,y),D=n.assetsDir?se.resolve(n.assetsDir):"",T=n.cwd?se.resolve(n.cwd):"",$=D?se.relative(D,P):"../";return D&&T&&$&&!$.startsWith("..")&&!se.isAbsolute($)?{texture:{url:`/${se.relative(T,P).split(se.sep).join("/")}`},hint:{...p,reason:"external-texture"}}:{hint:{...p,reason:"external-texture"}}}function bu(e){let t=V(e)?e:{},n=V(t.extensions)?t.extensions:{},r=Number.isInteger(t.source)?t.source:-1,i=V(n.KHR_texture_basisu)?n.KHR_texture_basisu:{};if(Number.isInteger(i.source))return{imageIndex:i.source,previewImageIndex:r>=0&&r!==i.source?r:-1};let o=V(n.EXT_texture_webp)?n.EXT_texture_webp:{};return Number.isInteger(o.source)?{imageIndex:o.source,previewImageIndex:-1}:{imageIndex:r,previewImageIndex:-1}}function yu(e){let t=new Map,n=new Map;if(!Array.isArray(e))return{byExactSource:t,bySourceMaterialIndex:new Map};for(let i of e){if(!V(i))continue;let o=Array.isArray(i.sourceSurfaces)?i.sourceSurfaces:[],a=typeof i.slotId=="string"?i.slotId.trim():"";if(!a)continue;let s=new Set;for(let l of o){if(!V(l))continue;let d=typeof l.ownerNodePath=="string"?l.ownerNodePath.trim().replace(/^\/+|\/+$/g,""):"",u=Number.isInteger(l.nodeIndex)?l.nodeIndex:-1,c=Number.isInteger(l.meshIndex)?l.meshIndex:-1,f=Number.isInteger(l.primitiveIndex)?l.primitiveIndex:-1;o.length===1&&d&&u>=0&&c>=0&&f>=0&&t.set(Uo({ownerNodePath:d,nodeIndex:u,meshIndex:c,primitiveIndex:f}),a),Number.isInteger(l.sourceMaterialIndex)&&l.sourceMaterialIndex>=0&&s.add(l.sourceMaterialIndex)}if(s.size===1){let[l]=s,d=n.get(l)??[];d.push(a),n.set(l,d)}}let r=new Map;for(let[i,o]of n)o.length===1&&r.set(i,o[0]);return{byExactSource:t,bySourceMaterialIndex:r}}function Uo(e){return[e.ownerNodePath,e.nodeIndex,e.meshIndex,e.primitiveIndex].join("\0")}function hu(e){let t=Number.isInteger(e.primitiveIndex)?`:${e.primitiveIndex}`:"",n=`${e.assetGuid||e.assetId||"asset"}:${e.nodeIndex}:${e.meshIndex}${t}`;return`slot_${Zo(n)}`}function Su(e){let t=`${e.assetGuid||e.assetId||"asset"}:material:${e.sourceMaterialIndex}`;return`slot_${Zo(t)}`}function xu(e,t){if(t.textureUsage==="material"||t.usage==="material")return{usage:"material",materialTexture:!0,environmentTexture:!1};if(V(t.capabilities)&&t.capabilities.materialTexture===!0)return{usage:"material",materialTexture:!0,environmentTexture:!1};if(t.textureUsage==="environment"||t.usage==="environment")return{usage:"environment",materialTexture:!1,environmentTexture:!0};if(V(t.capabilities)&&t.capabilities.environmentTexture===!0)return{usage:"environment",materialTexture:!1,environmentTexture:!0};let n=se.extname(e).toLowerCase();return[".env",".hdr",".dds",".ktx",".ktx2"].includes(n)?{usage:"environment",materialTexture:!1,environmentTexture:!0}:[".png",".jpg",".jpeg",".webp"].includes(n)?{usage:"material",materialTexture:!0,environmentTexture:!1}:null}function Bo(e){let t=Array.isArray(e.scenes)?e.scenes:[],n=Number.isInteger(e.scene)?e.scene:0,r=t[n]??t[0];return Array.isArray(r?.nodes)?r.nodes.filter(Number.isInteger):[]}function Vo(e){let t=new Map;for(let n=0;n<e.length;n+=1){let r=Array.isArray(e[n]?.children)?e[n].children:[];for(let i of r)Number.isInteger(i)&&!t.has(i)&&t.set(i,n)}return t}function Ko(e,t,n,r){let i=[],o=r,a=new Set;for(;Number.isInteger(o)&&o>=0&&o<e.length;){if(a.has(o))return"";a.add(o),i.push(Pu(e[o],o));let s=t.get(o);if(typeof s!="number"||!Number.isInteger(s))break;o=s}return i.reverse(),i.length>1&&n.has(o)&&i.shift(),i.filter(Boolean).join("/")}function Pu(e,t){return(V(e)&&typeof e.name=="string"?e.name.trim():"")||`node_${t}`}function Iu(e,t,n){let r=V(e)&&typeof e.name=="string"?e.name.trim():"",i=Ho(t);return r||i||n.split("/").filter(Boolean).pop()||n}function Ho(e){return V(e)&&typeof e.name=="string"?e.name.trim():""}function Wo(e,t){let n=[],r=t,i=new Set;for(;Number.isInteger(r)&&r>=0;){if(i.has(r))return[];i.add(r),n.push(r);let o=e.get(r);if(!Number.isInteger(o))break;r=o}return n.reverse(),n}function Eu(e,t){let n=V(e)?e:{},r=Number.isInteger(n.material)?n.material:-1,i=r>=0?t[r]:null,o=typeof i?.name=="string"&&i.name.trim()?i.name.trim():"";return{index:r,name:o}}function qo(e,t){let n=V(e)?e:{},r=Number.isInteger(n.indices)?n.indices:-1,i=Xo(n),o=r>=0?t[r]:null,a=i>=0?t[i]:null,s=Number.isFinite(o?.count)?Number(o.count):Number.isFinite(a?.count)?Number(a.count):null;if(s==null)return null;let l=Number.isInteger(n.mode)?n.mode:4;return l===4?Math.floor(s/3):l===5||l===6?Math.max(0,s-2):0}function Jo(e,t){let n=V(e)?e:{},r=Xo(n),i=r>=0?t[r]:null,o=jo(i?.min),a=jo(i?.max);return o&&a?{min:o,max:a}:null}function Xo(e){let t=V(e.attributes)?e.attributes:{};return Number.isInteger(t.POSITION)?t.POSITION:-1}function jo(e){if(!Array.isArray(e)||e.length<3)return null;let t=Number(e[0]),n=Number(e[1]),r=Number(e[2]);return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)?[t,n,r]:null}function V(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Zo(e){let t=String(e??""),n=2166136261;for(let r=0;r<t.length;r+=1)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}import Rt from"node:fs/promises";import pe from"node:path";async function Qo(e,t={}){try{let n=await Au(e);if(!n)return[];let r=Array.isArray(n.gltf.images)?n.gltf.images:[],i=t.imageIndexes?new Set(t.imageIndexes.filter(a=>Number.isInteger(a)&&a>=0)):null,o=[];for(let a=0;a<r.length;a+=1){if(i&&!i.has(a))continue;let s=de(r[a]);if(!s)continue;let l=await wu(e,n,s);if(!l)continue;let d=$t(s.name)??(l.originalFileName?pe.parse(l.originalFileName).name:null)??void 0;o.push({imageIndex:a,bytes:l.bytes,extension:l.extension,mimeType:l.mimeType,...d?{displayName:d}:{},...l.originalFileName?{originalFileName:l.originalFileName}:{}})}return o}catch{return[]}}function ea(e){let t=new Set;for(let n of na(e)){let r=Te(n.imageIndex),i=Te(n.previewImageIndex);r!=null&&t.add(r),i!=null&&t.add(i)}return[...t].sort((n,r)=>n-r)}function ta(e){let t=new Map;for(let n of na(e)){let r=Te(n.imageIndex),i=Te(n.previewImageIndex);r==null||i==null||r===i||t.set(`${r}:${i}`,{imageIndex:r,previewImageIndex:i})}return[...t.values()].sort((n,r)=>n.imageIndex-r.imageIndex||n.previewImageIndex-r.previewImageIndex)}function na(e){if(!e)return[];let t=[],n=Array.isArray(e.materialSlots)?e.materialSlots:[];for(let r of n){let i=de(r),o=Array.isArray(i?.sourceMaterialProfiles)?i.sourceMaterialProfiles:[];for(let a of o){let s=de(a),l=Array.isArray(s?.textureHints)?s.textureHints:[];for(let d of l){let u=de(d);u&&t.push(u)}}}return t}function ra(e,t){if(!e||t.length===0)return e;let n=new Map(t.map(a=>[a.imageIndex,a.textureAssetId])),r=structuredClone(e),i=Array.isArray(r.materialSlots)?r.materialSlots:[],o=!1;for(let a of i){let s=de(a),l=Array.isArray(s?.sourceMaterialProfiles)?s.sourceMaterialProfiles:[];for(let d of l){let u=de(d);if(!u)continue;let c=Array.isArray(u.textureHints)?u.textureHints:[];if(c.length===0)continue;let f=[];for(let g of c){let p=de(g),y=Te(p?.imageIndex),S=$t(p?.profilePath),P=y==null?null:n.get(y)??null;if(!P||!S||!Du(S)){f.push(g);continue}let D=de(u.profile)??{};ku(D,S,{textureAssetId:P}),u.profile=D,o=!0}f.length>0?u.textureHints=f:delete u.textureHints}}return o?r:e}async function Au(e){let t=pe.extname(e).toLowerCase();if(t===".gltf"){let l=JSON.parse(await Rt.readFile(e,"utf8")),d=await Promise.all((Array.isArray(l.buffers)?l.buffers:[]).map(u=>Yo(e,de(u))));return{gltf:l,buffers:d}}if(t!==".glb")return null;let n=await Rt.readFile(e);if(n.length<20||n.toString("utf8",0,4)!=="glTF"||n.readUInt32LE(4)!==2||n.readUInt32LE(8)>n.length)return null;let r=null,i=[],o=12;for(;o+8<=n.length;){let l=n.readUInt32LE(o),d=n.readUInt32LE(o+4);if(o+=8,o+l>n.length)return null;let u=n.subarray(o,o+l);d===1313821514?r=JSON.parse(u.toString("utf8").replace(/\0+$/g,"")):d===5130562&&i.push(Buffer.from(u)),o+=l}if(!r)return null;let a=Array.isArray(r.buffers)?r.buffers:[],s=await Promise.all(a.map(async(l,d)=>{let u=de(l);return $t(u?.uri)?Yo(e,u):i[d]??(d===0?i[0]??null:null)}));return s.length===0&&i.length>0&&s.push(i[0]),{gltf:r,buffers:s}}async function Yo(e,t){let n=$t(t?.uri);if(!n)return null;let r=aa(n);if(r)return r.bytes;if(Ir(n))return null;let i=oa(n);return i?ia(e,i):null}async function wu(e,t,n){let r=$t(n.uri);if(r){let g=aa(r);if(g){let D=Pr(g.bytes);return D?{bytes:g.bytes,...D}:null}if(Ir(r))return null;let p=oa(r);if(!p)return null;let y=await ia(e,p);if(!y)return null;let S=pe.basename(p),P=Pr(y);return P?{bytes:y,...P,originalFileName:S}:null}let i=Te(n.bufferView);if(i==null)return null;let o=Array.isArray(t.gltf.bufferViews)?t.gltf.bufferViews:[],a=de(o[i]),s=Te(a?.buffer)??0,l=t.buffers[s],d=Te(a?.byteOffset)??0,u=Te(a?.byteLength);if(!l||u==null||d+u>l.length)return null;let c=Buffer.from(l.subarray(d,d+u)),f=Pr(c);return f?{bytes:c,...f}:null}async function ia(e,t){if(pe.isAbsolute(t)||pe.win32.isAbsolute(t)||t.includes("\0"))return null;try{let n=await Rt.realpath(pe.dirname(e)),r=pe.resolve(n,t),i=await Rt.realpath(r);return Tu(n,i)?await Rt.readFile(i):null}catch{return null}}function oa(e){if(Ir(e))return null;try{return decodeURIComponent(e)}catch{return null}}function Tu(e,t){let n=pe.relative(e,t);return n===""||!n.startsWith(`..${pe.sep}`)&&n!==".."&&!pe.isAbsolute(n)}function aa(e){let t=/^data:([^;,]+)?(?:;[^,]*)?,(.*)$/is.exec(e);if(!t)return null;let n=e.slice(0,e.indexOf(","));try{return{bytes:n.toLowerCase().includes(";base64")?Buffer.from(t[2]??"","base64"):Buffer.from(decodeURIComponent(t[2]??""),"utf8")}}catch{return null}}function Pr(e){return e.length>=8&&e.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10]))?{extension:".png",mimeType:"image/png"}:e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255?{extension:".jpg",mimeType:"image/jpeg"}:e.length>=12&&e.toString("ascii",0,4)==="RIFF"&&e.toString("ascii",8,12)==="WEBP"?{extension:".webp",mimeType:"image/webp"}:e.length>=12&&e.subarray(0,12).equals(Buffer.from([171,75,84,88,32,50,48,187,13,10,26,10]))?{extension:".ktx2",mimeType:"image/ktx2"}:null}function Du(e){return["baseColor.texture","normal.texture","metallicRoughness.texture","occlusion.texture","emission.texture","emission.maskTexture","alpha.texture"].includes(e)}function ku(e,t,n){let r=t.split("."),i=e;for(let o=0;o<r.length-1;o+=1){let a=r[o],s=de(i[a])??{};i[a]=s,i=s}i[r[r.length-1]]=n}function Ir(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)||e.startsWith("/")||pe.win32.isAbsolute(e)}function de(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function $t(e){return typeof e=="string"&&e.trim()?e.trim():null}function Te(e){return Number.isInteger(e)&&e>=0?e:null}function sa(e){let t=typeof e=="string"&&e.trim()?e.trim():void 0;if(!t)return;if(t.includes("\0"))throw new Error("external_asset_path_must_be_portable");let n=t.replace(/\\/g,"/");if(n.startsWith("/")||/^[a-z]:\//i.test(n)||/^[a-z][a-z0-9+.-]*:/i.test(n))throw new Error("external_asset_path_must_be_portable");let r=[];for(let i of n.split("/"))if(!(!i||i===".")){if(i==="..")throw new Error("external_asset_path_must_be_portable");r.push(i)}if(r.length===0)throw new Error("external_asset_path_must_be_portable");return r.join("/")}function Ar(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;if(!e||typeof e!="object")return;let t=e,n=Er(t.x),r=Er(t.y),i=Er(t.z);if(!(n==null||r==null||i==null||n<=0||r<=0||i<=0))return{x:n,y:r,z:i}}function Er(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function wr(e){return e==="shared"||e==="instance"?e:void 0}function Tr(e){return Number.isInteger(e)&&e>=0?e:void 0}var C=class extends Error{constructor(t,n={}){super(t),this.name="PlayableEditorAssetRegistryError",this.details=n}};function Cu(e){let t={};for(let n=0;n<e.length;n+=1){let r=e[n];if(r==="--unregister"){t.unregister=!0;continue}if(r==="--payload"){t.payload=e[n+1],n+=1;continue}if(r==="--asset-id"){t.assetId=e[n+1],n+=1;continue}if(r==="--guid"){t.guid=e[n+1],n+=1;continue}if(r==="--delete-file"){t.deleteFile=!0;continue}if(r==="--keep-file"){t.deleteFile=!1;continue}if(r==="--force"){t.force=!0;continue}(r==="--help"||r==="-h")&&(t.help=!0)}return t}async function ma(e,t=process.argv.slice(2)){let n=Cu(t),r=await Gu(e),i=Y(r.errorCodes),o=(a,s={})=>{let l={ok:!1,error:a,...s};process.stderr.write(`${JSON.stringify(l,null,2)}
|
|
9
|
+
`),process.exit(1)};try{if(n.help){process.stdout.write(["Usage:",` ${e.commands?.register??"npm run asset:register"} -- --payload /path/to/payload.json`,` ${e.commands?.unregister??"npm run asset:unregister"} -- --payload /path/to/payload.json`,` ${e.commands?.unregister??"npm run asset:unregister"} -- --asset-id asset_xxx [--keep-file] [--force]`,` ${e.commands?.unregister??"npm run asset:unregister"} -- --guid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx [--keep-file] [--force]`,""].join(`
|
|
10
|
+
`));return}if(n.unregister){let s=await vu(e,n,i);process.stdout.write(`${JSON.stringify(s)}
|
|
11
|
+
`);return}let a=await xn(e,n,i);process.stdout.write(`${JSON.stringify(a)}
|
|
12
|
+
`)}catch(a){a instanceof C&&o(a.message,a.details),o("asset_register_failed",{message:a instanceof Error?a.message:String(a)})}}async function xn(e,t,n={}){if(!t.payload&&!t.payloadData)throw new C("missing_payload_arg");let r=await ya(e,t),i=e.codeKeyPolicy??"legacy";if(i==="disabled"&&Object.prototype.hasOwnProperty.call(r,"codeKey"))throw new C("payload_code_key_disabled",{codeKeyPolicy:i,codeKey:r.codeKey});let o=w.resolve(e.cwd,String(r.sourcePath??r.assetPath??"")),a=ju(e,o);if(!a)throw new C(e.unsupportedSourceErrorCode??n.sourceMustBeSupportedAsset??"source_must_be_supported_asset",{sourcePath:o,supportedExtensions:pa(e)});try{await R.access(o,Mu.R_OK)}catch(b){let j=at(b)?b.code:void 0,W=j==="EACCES"||j==="EPERM"?"source_file_unreadable":n.sourceFileNotFound??"source_file_not_found";throw new C(W,{sourcePath:o,...j?{nodeCode:j}:{}})}let s=Hu(r);await R.mkdir(e.generatedDir,{recursive:!0});let l=await He(e),d=await $r(o),u=hr(r.kind??r.assetKind??r.assetType,o);if(!u)throw new C("unsupported_asset_kind",{sourcePath:o,assetType:r.assetType});Mr(u,o,"source_path");let c=Ku(l,r,s,o,d,u,e),f=F(r.assetName)??c?.originalFileName??w.basename(o),g=F(r.guid);if(c&&g&&c.guid!==g)throw new C("payload_guid_must_match_existing_asset",{guid:g,existingGuid:c.guid,existingAssetId:c.assetId});let p=c?.guid??g??Sn.randomUUID(),y=F(r.projectAssetId),S=br(u,p);if(c?.assetId&&c.assetId!==S)throw new C("manifest_asset_id_must_match_guid",{guid:p,assetId:c.assetId,expectedAssetId:S});if(y&&y!==S)throw new C("project_asset_id_must_match_guid",{guid:p,projectAssetId:y,expectedAssetId:S});let P=a===".gltf"?w.posix.join(S,w.basename(o)):`${S}${a}`,D=Fu(e,{existing:c,sourcePath:o,kind:u,targetFileName:P}),T=st(e,D,u,"target_path"),$=new Date().toISOString(),_=$o(F(r.displayName)??c?.displayName,f),q=hn({...hn(c?.external)??{},...s??{}}),ve=!1,m=[],L=null;try{await R.mkdir(w.dirname(T),{recursive:!0});let b=Lu(o,T),j=b||await Sa(T),W=!c||c.contentHash!==d.contentHash||!j;!b&&W&&(await R.copyFile(o,T),ve=!c,a===".gltf"&&await Ru(o,T));let z=await ha(e,{existing:c,payload:r,sourcePath:o,targetPath:T,kind:u,guid:p,assetId:S}),Ot=Y(c?.metadata),We=Y(z);if(u==="model"&&(Ot.assetAnalysisStatus==="complete"||Object.keys(Y(Ot.assetAnalysis)).length>0)&&We.assetAnalysisStatus==="unavailable")throw new C("source_asset_analysis_failed",{sourcePath:o,assetId:S,guid:p});if(u==="model"){let lt=await $u({config:e,manifest:l,metadata:z,sourcePath:o,sourceAssetId:S,sourceAssetGuid:p,sourceDisplayName:_,now:$});m=lt.createdPaths,z=ra(z,lt.references)}let vt=Cr({...c??{},guid:p,assetId:S,kind:u,displayName:_,relativePath:D,originalFileName:f,...i==="legacy"?{codeKey:No(F(r.codeKey)??F(r.assetName)??c?.codeKey,f)}:{},...F(r.category)?{category:F(r.category)}:{},placeable:u==="texture"?!0:typeof r.placeable=="boolean"?r.placeable:c?.placeable??u==="model",...Tr(r.warmupCount)!=null?{warmupCount:Tr(r.warmupCount)}:{},...typeof r.singleton=="boolean"?{singleton:r.singleton}:{},...wr(r.materialMode)?{materialMode:wr(r.materialMode)}:{},...Ar(r.scale)?{defaults:{transform:{scale:Ar(r.scale)}}}:{},contentHash:d.contentHash,byteSize:d.byteSize,external:q,metadata:z,createdAt:c?.createdAt??$,updatedAt:W?$:c?.updatedAt??$});if(!vt)throw new C("invalid_manifest_entry",{assetId:S,guid:p});L=vt;let Gr=l.findIndex(lt=>lt.guid===p||lt.assetId===S);Gr>=0?l[Gr]=vt:l.push(vt),l.sort(Ju),await xa(e,l)}catch(b){ve&&await R.rm(a===".gltf"?w.dirname(T):T,{recursive:a===".gltf",force:!0}).catch(()=>{});for(let j of m)await R.rm(j,{force:!0}).catch(()=>{});throw b}return{ok:!0,guid:p,assetId:S,kind:u,...L?.contentHash?{contentHash:L.contentHash}:{},...L?.external?{external:L.external}:{},displayName:L?.displayName,originalFileName:L?.originalFileName,assetUrl:Bu(e,D,u),targetPath:T,manifestPath:e.manifestPath,registryPath:e.registryPath}}async function Ru(e,t){let n;try{n=JSON.parse(await R.readFile(e,"utf8"))}catch{throw new C("gltf_source_invalid_json")}let r=w.dirname(await R.realpath(e)),i=w.dirname(t),o=[...Array.isArray(n.buffers)?n.buffers:[],...Array.isArray(n.images)?n.images:[]],a=new Set;for(let s of o){let l=F(Y(s)?.uri);if(!l||l.startsWith("data:")||/^[a-z][a-z0-9+.-]*:/i.test(l)||l.startsWith("//"))continue;let d;try{d=decodeURIComponent(l.split(/[?#]/,1)[0])}catch{continue}let u=d.replace(/\\/g,"/"),c=w.posix.normalize(u);if(!c||c==="."||c===".."||c.startsWith("../")||w.posix.isAbsolute(c)||a.has(c))continue;a.add(c);let f;try{f=await R.realpath(w.resolve(r,...c.split("/")))}catch{continue}try{Dr(r,f,"gltf_dependency_path_escape")}catch{continue}let g=w.resolve(i,...c.split("/"));Dr(i,g,"gltf_dependency_target_escape"),await R.mkdir(w.dirname(g),{recursive:!0}),await R.copyFile(f,g)}}function Dr(e,t,n){let r=w.relative(e,t);if(!r||r===".."||r.startsWith(`..${w.sep}`)||w.isAbsolute(r))throw new C(n)}async function $u(e){let t=ea(e.metadata),n=ta(e.metadata),r=await Qo(e.sourcePath,{imageIndexes:t}),i=[],o=new Map,a=[];try{for(let d of r){let u=Nt(d.bytes),c=e.manifest.find(_=>_.kind==="texture"&&_.contentHash===u.contentHash&&Y(Y(_.metadata).capabilities).materialTexture!==!1&&Y(_.metadata).textureUsage!=="environment");if(c){o.set(d.imageIndex,c),i.push({imageIndex:d.imageIndex,textureAssetId:c.assetId});continue}let f=Zu(u.contentHash),g=br("texture",f),p=e.manifest.find(_=>_.guid===f||_.assetId===g);if(p)throw new C("derived_texture_identity_conflict",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:g,contentHash:u.contentHash,conflictingAssetId:p.assetId,conflictingContentHash:p.contentHash});let y=`${g}${d.extension}`,S=ba(e.config,"texture",y),P=st(e.config,S,"texture","derived_texture_target_path");if(await R.mkdir(w.dirname(P),{recursive:!0}),await Sa(P)){let _=await $r(P);if(_.contentHash!==u.contentHash)throw new C("derived_texture_target_conflict",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:g,targetPath:P,contentHash:u.contentHash,existingContentHash:_.contentHash})}else await Xu(P,d.bytes),a.push(P);let D=d.displayName?`${e.sourceDisplayName} / ${d.displayName}`:`${e.sourceDisplayName} Texture ${d.imageIndex+1}`,T=await ha(e.config,{existing:null,payload:{metadata:{textureUsage:"material",capabilities:{materialTexture:!0,environmentTexture:!1},derivedFrom:{kind:"gltf-image",sourceAssetId:e.sourceAssetId,sourceAssetGuid:e.sourceAssetGuid,imageIndex:d.imageIndex,mimeType:d.mimeType}}},sourcePath:P,targetPath:P,kind:"texture",guid:f,assetId:g}),$=Cr({guid:f,assetId:g,kind:"texture",displayName:D,relativePath:S,originalFileName:d.originalFileName??`${Yu(D)}${d.extension}`,category:"Texture",placeable:!0,contentHash:u.contentHash,byteSize:u.byteSize,metadata:T,createdAt:e.now,updatedAt:e.now});if(!$)throw new C("invalid_derived_texture_manifest_entry",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:g});e.manifest.push($),o.set(d.imageIndex,$),i.push({imageIndex:d.imageIndex,textureAssetId:g})}let s=new Map,l=new Map;for(let d of o.values())w.extname(d.relativePath).toLowerCase()===".ktx2"&&s.set(d.assetId,d);for(let d of n){let u=o.get(d.imageIndex),c=o.get(d.previewImageIndex);!u||!c||w.extname(u.relativePath).toLowerCase()!==".ktx2"||l.set(u.assetId,c.assetId)}for(let d of s.values()){let u=Y(d.metadata),c=Nu(u);delete c[e.sourceAssetId];let f=l.get(d.assetId);f&&(c[e.sourceAssetId]=f);let g=Object.fromEntries(Object.entries(c).sort(([S],[P])=>S.localeCompare(P))),p=Object.values(g)[0],y={...u};p?(y.previewTextureAssetId=p,y.previewTextureAssetIdsBySourceAssetId=g):(delete y.previewTextureAssetId,delete y.previewTextureAssetIdsBySourceAssetId),d.metadata=y}return{references:i,createdPaths:a}}catch(s){for(let l of a)await R.rm(l,{force:!0}).catch(()=>{});throw s}}function Nu(e){let t={},n=Y(e.previewTextureAssetIdsBySourceAssetId);for(let[o,a]of Object.entries(n)){let s=F(o),l=F(a);s&&l&&(t[s]=l)}if(Object.keys(t).length>0)return t;let r=F(e.previewTextureAssetId),i=F(Y(e.derivedFrom).sourceAssetId);return r&&i&&(t[i]=r),t}async function ga(e,t={}){let n=await Ou(e,t,!1),{availabilityIssues:r,...i}=n;return i}async function Ou(e,t,n){let r=await He(e),i=[],o=[];for(let a of r){let s=st(e,a.relativePath,a.kind,"refresh_source_path"),l;try{l=await $r(s)}catch(f){let g=da(a,f,t,"source-audit",s);if(!n||!g)throw la(g,f,s);o.push(g);continue}let d=a.kind==="model"&&Y(a.metadata).assetMetadataVersion!==xr,u=a.kind==="texture"&&a.placeable===!1;if(a.contentHash===l.contentHash&&a.byteSize===l.byteSize&&!d&&!u)continue;let c;try{c=await xn(e,{payloadData:{sourcePath:s,guid:a.guid,projectAssetId:a.assetId,kind:a.kind}},t)}catch(f){let g=da(a,f,t,"source-analysis",s);if(!n||!g)throw la(g,f,s);o.push(g);continue}if(!c.contentHash)throw new C("asset_refresh_missing_content_hash",{assetId:a.assetId,guid:a.guid,sourcePath:s});i.push({guid:a.guid,assetId:a.assetId,kind:a.kind,...a.contentHash?{previousContentHash:a.contentHash}:{},contentHash:c.contentHash})}return{ok:!0,scannedAssetCount:r.length,refreshedAssets:i,availabilityIssues:o}}function da(e,t,n,r,i){let o=n.sourceFileNotFound??"source_file_not_found",a=t instanceof C?t.message:void 0,s=at(t)?t.code:t instanceof C?F(t.details.nodeCode):void 0,l=a===o||a==="source_file_not_found"||a==="source_file_unreadable"||a==="source_asset_analysis_failed"||a==="gltf_source_invalid_json",d=at(t)&&typeof t.path=="string"?w.resolve(t.path):null;if(!l&&(!s||r!=="source-audit"&&d!==w.resolve(i)))return null;let u=a==="source_asset_analysis_failed"?"analysis-failed":a==="gltf_source_invalid_json"?"invalid":s==="ENOENT"||a===o||a==="source_file_not_found"?"missing":s==="EACCES"||s==="EPERM"||a==="source_file_unreadable"?"unreadable":s==="EISDIR"||s==="EINVAL"?"invalid":"audit-failed",c=a??(u==="missing"?o:u==="unreadable"?"source_file_unreadable":u==="invalid"?"source_file_invalid":"source_file_audit_failed");return{assetId:e.assetId,guid:e.guid,kind:e.kind,relativePath:e.relativePath,stage:r,reason:u,code:c,...s?{nodeCode:s}:{},retryable:!0}}function la(e,t,n){return!e||t instanceof C?t:new C(e.code,{assetId:e.assetId,guid:e.guid,sourcePath:n,...e.nodeCode?{nodeCode:e.nodeCode}:{}})}async function vu(e,t,n={}){let r=await ya(e,t),i=F(t.assetId??r?.assetId),o=F(t.guid??r?.guid);if(!i&&!o)throw new C(n.missingAssetId??"missing_asset_id");let a=ef(t,r),s=tf(t,r);await R.mkdir(e.generatedDir,{recursive:!0});let l=await He(e),d=l.findIndex(g=>i&&g.assetId===i||o&&g.guid===o);if(d<0)throw new C(n.manifestEntryNotFound??"manifest_entry_not_found",{assetId:i,guid:o,manifestPath:e.manifestPath});let u=l[d];if(!u)throw new C("manifest_entry_not_found",{assetId:i,guid:o});await nf(e,u.assetId,s,n),l.splice(d,1);let c=!1,f=null;return a&&(f=st(e,u.relativePath,u.kind,"unregister_target_path"),await R.rm(f,{force:!0}),c=!0),await xa(e,l),{ok:!0,guid:u.guid,assetId:u.assetId,kind:u.kind,removed:!0,deleteFile:a,force:s,deletedFile:c,targetPath:f,manifestPath:e.manifestPath,registryPath:e.registryPath}}async function He(e){let t=await Pn(e.manifestPath,[]);if(!Array.isArray(t))throw new C("manifest_invalid_root",{manifestPath:e.manifestPath});let n=t.map((a,s)=>{let l=Cr(a,!0);if(!l)throw new C("manifest_invalid_entry",{index:s,manifestPath:e.manifestPath});return l}),r=new Set,i=new Set,o=e.codeKeyPolicy??"legacy";for(let a of n){if(o==="disabled"&&a.codeKey)throw new C("manifest_code_key_disabled",{manifestPath:e.manifestPath,codeKeyPolicy:o,assetId:a.assetId,codeKey:a.codeKey});if(r.has(a.assetId))throw new C("manifest_duplicate_asset_id",{assetId:a.assetId});if(i.has(a.guid))throw new C("manifest_duplicate_guid",{guid:a.guid});r.add(a.assetId),i.add(a.guid)}return n}async function Gu(e){return e.loadRules?e.loadRules():e.rulesPath?Pn(e.rulesPath,{}):{}}function ca(e){return(Array.isArray(e)?e:[e]).filter(n=>typeof n=="string"&&!!n.trim()).map(n=>{let r=n.trim().toLowerCase();return r.startsWith(".")?r:`.${r}`})}function pa(e){let t=ca(e.supportedExtensions??e.supportedExtension);return t.length>0?t:ca(kt)}function ju(e,t){let n=t.toLowerCase();return pa(e).find(r=>n.endsWith(r))??null}function Fu(e,t){return t.existing?.relativePath?t.existing.relativePath:_u(e,t.sourcePath,t.kind)??ba(e,t.kind,t.targetFileName)}function ba(e,t,n){let r=e.relativeImportedPath;return r.length>=2?r(t,n):r({kind:t,fileName:n})}function _u(e,t,n){let r=e.assetRootDir??e.assetsDir;if(!r)return null;let i=w.resolve(t);return!ua(w.resolve(r),i)||ua(w.resolve(e.generatedDir),i)?null:(Mr(n,i,"source_path"),w.relative(e.generatedDir,i).split(w.sep).join("/"))}function ua(e,t){let n=w.relative(e,t);return n===""||!n.startsWith("..")&&!w.isAbsolute(n)}function Lu(e,t){return w.relative(w.resolve(e),w.resolve(t))===""}function zu(e,t,n){let r=w.relative(e,t);if(r.startsWith("..")||w.isAbsolute(r))throw new C(`${n}_outside_allowed_directory`,{parent:e,child:t})}function Uu(e,t,n){let r=w.relative(e,t);if(!r.startsWith("..")&&!w.isAbsolute(r))throw new C(`${n}_inside_forbidden_directory`,{parent:e,child:t})}function st(e,t,n,r){let i=w.resolve(e.generatedDir,t),o=w.resolve(e.assetRootDir??e.assetsDir??e.importedDir??e.generatedDir);return zu(o,i,r),Uu(w.resolve(e.generatedDir),i,r),Mr(n,i,r),i}function Bu(e,t,n){let r=st(e,t,n,"asset_url_path");return typeof e.publicUrlForCatalogRelativePath=="function"?e.publicUrlForCatalogRelativePath(t):typeof e.publicUrlForRelativePath=="function"?e.publicUrlForRelativePath(t):`/${w.relative(e.cwd,r).split(w.sep).join("/")}`}function Mr(e,t,n){let r=w.extname(t).toLowerCase(),i=Oo(e);if(!i.includes(r))throw new C(`${n}_unsupported_extension`,{kind:e,filePath:t,extension:r,supportedExtensions:i})}async function Pn(e,t){try{return JSON.parse(await R.readFile(e,"utf8"))}catch(n){if(at(n)&&n.code==="ENOENT")return t;throw n}}async function ya(e,t){if(t.payloadData)return structuredClone(t.payloadData);if(!t.payload)return{};let n=w.resolve(e.cwd,t.payload),r=await Pn(n,null);if(!r||typeof r!="object"||Array.isArray(r))throw new C("invalid_payload_json",{payloadPath:n});return r}function Cr(e,t=!1){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e,r=t?Rr:F,i=r(n.guid),o=r(n.assetId),a=r(n.kind);if(t&&(!a||"assetKind"in n||"assetType"in n))return null;let s=t?Mo.includes(a)?a:null:hr(n.kind??n.assetKind??n.assetType,n.relativePath),l=r(n.displayName),d=r(n.relativePath);if(!i||!o||!s||!l||!d||t&&(!Ke(n,"originalFileName")||!Ke(n,"codeKey")||!Ke(n,"category")||!Ke(n,"materialMode")||!Ke(n,"contentHash")||!Ke(n,"createdAt")||!Ke(n,"updatedAt")||"placeable"in n&&typeof n.placeable!="boolean"||"warmupCount"in n&&(!Number.isInteger(n.warmupCount)||n.warmupCount<0)||"singleton"in n&&typeof n.singleton!="boolean"||"defaults"in n&&Oe(n.defaults)==null||"byteSize"in n&&(!Number.isFinite(n.byteSize)||n.byteSize<0)||"metadata"in n&&Oe(n.metadata)==null||"external"in n&&!Vu(n.external)))return null;let u=Oe(n.metadata),c=r(n.originalFileName),f=r(n.codeKey),g=r(n.category),p=r(n.materialMode),y=Oe(n.defaults),S=r(n.contentHash),P=hn(n.external),D=r(n.createdAt),T=r(n.updatedAt);return{guid:i,assetId:o,kind:s,displayName:l,relativePath:d,...c?{originalFileName:c}:{},...f?{codeKey:f}:{},...g?{category:g}:{},...typeof n.placeable=="boolean"?{placeable:n.placeable}:{},...typeof n.warmupCount=="number"?{warmupCount:n.warmupCount}:{},...typeof n.singleton=="boolean"?{singleton:n.singleton}:{},...p?{materialMode:p}:{},...y?{defaults:y}:{},...S?{contentHash:S}:{},...typeof n.byteSize=="number"?{byteSize:n.byteSize}:{},...P?{external:P}:{},...u?{metadata:u}:{},...D?{createdAt:D}:{},...T?{updatedAt:T}:{}}}function Rr(e){return typeof e=="string"&&e.length>0&&e===e.trim()?e:null}function Ke(e,t){return!(t in e)||Rr(e[t])!=null}function Vu(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=["platformAssetId","assetPath","assetUrl"],r=Object.keys(t);return r.length>0&&r.every(i=>n.includes(i)&&Rr(t[i])!=null)}function hn(e,t=!1){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e,r=F(n.platformAssetId),i;try{if(i=sa(n.assetPath),t&&Object.prototype.hasOwnProperty.call(n,"assetPath")&&!i)throw new Error("external_asset_path_must_be_portable")}catch{if(t)throw new C("external_asset_path_must_be_portable",{assetPath:F(n.assetPath)})}let o=F(n.assetUrl);return!r&&!i&&!o?null:{...r?{platformAssetId:r}:{},...i?{assetPath:i}:{},...o?{assetUrl:o}:{}}}function Oe(e){return!e||typeof e!="object"||Array.isArray(e)?null:structuredClone(e)}async function ha(e,t){let n=Oe(t.payload?.metadata);if(typeof e.resolveAssetMetadata=="function"){let r=await e.resolveAssetMetadata({...t,existingMetadata:Oe(t.existing?.metadata),payloadMetadata:n}),i=Oe(r);return i||null}return yn({kind:t.kind,sourcePath:t.sourcePath,existingMetadata:Oe(t.existing?.metadata),payloadMetadata:n,guid:t.guid,assetId:t.assetId,cwd:e.cwd,assetsDir:e.assetsDir})}function Ku(e,t,n,r,i,o,a){let s=F(t.guid),l=F(t.projectAssetId);if(s){let c=e.find(f=>f.guid===s);if(c)return c}if(l){let c=e.find(f=>f.assetId===l);if(c)return c}if(n?.platformAssetId){let c=e.find(f=>f.kind===o&&Wu(f.external)===n.platformAssetId);if(c)return c}if(n?.assetPath){let c=e.find(f=>f.kind===o&&qu(f.external)===n.assetPath);if(c)return c}let d=w.resolve(r),u=e.find(c=>{if(c.kind!==o)return!1;try{return w.resolve(st(a,c.relativePath,c.kind,"manifest_asset_path"))===d}catch{return!1}});if(u)return u;if(i.contentHash){let c=e.find(f=>f.kind===o&&f.contentHash===i.contentHash);if(c)return c}return null}function Hu(e){return hn({...e.external&&typeof e.external=="object"&&!Array.isArray(e.external)?e.external:{},platformAssetId:e.external?.platformAssetId??e.platformAssetId??e.assetId,assetUrl:e.external?.assetUrl??e.assetUrl},!0)}function Wu(e){return F(Y(e).platformAssetId)}function qu(e){return F(Y(e).assetPath)}function Ju(e,t){return e.kind.localeCompare(t.kind)||e.displayName.localeCompare(t.displayName)||e.assetId.localeCompare(t.assetId)}async function kr(e,t){try{if(await R.readFile(e,"utf8")===t)return!1}catch(r){if(!at(r)||r.code!=="ENOENT")throw r}let n=`${e}.tmp-${process.pid}-${Date.now()}`;try{return await R.writeFile(n,t),await R.rename(n,e),!0}catch(r){throw await R.rm(n,{force:!0}).catch(()=>{}),r}}async function Xu(e,t){let n=`${e}.tmp-${process.pid}-${Date.now()}`;try{await R.writeFile(n,t),await R.rename(n,e)}catch(r){throw await R.rm(n,{force:!0}).catch(()=>{}),r}}async function $r(e){let t=await R.readFile(e),n=await R.stat(e);if(w.extname(e).toLowerCase()!==".gltf")return{...Nt(t),byteSize:n.size};let r;try{r=JSON.parse(t.toString("utf8"))}catch{return{...Nt(t),byteSize:n.size}}let i=w.dirname(await R.realpath(e)),o=new Map;for(let d of[...Array.isArray(r.buffers)?r.buffers:[],...Array.isArray(r.images)?r.images:[]]){let u=F(Y(d)?.uri);if(!u||u.startsWith("data:")||/^[a-z][a-z0-9+.-]*:/i.test(u)||u.startsWith("//"))continue;let c;try{c=decodeURIComponent(u.split(/[?#]/,1)[0])}catch{continue}let f=w.posix.normalize(c.replace(/\\/g,"/"));if(!f||f==="."||f===".."||f.startsWith("../")||w.posix.isAbsolute(f))continue;let g;try{g=await R.realpath(w.resolve(i,...f.split("/")))}catch{continue}try{Dr(i,g,"gltf_dependency_path_escape")}catch{continue}o.set(f,g)}let a=Sn.createHash("sha256").update("playable-editor-gltf-bundle-v1\0"),s=[{path:"",...Nt(t)}],l=n.size;for(let[d,u]of[...o].sort(([c],[f])=>c.localeCompare(f))){let c=await R.readFile(u);s.push({path:d,...Nt(c)}),l+=c.byteLength}return a.update(JSON.stringify(s)),{contentHash:`sha256:${a.digest("hex")}`,byteSize:l}}function Nt(e){return{contentHash:`sha256:${Sn.createHash("sha256").update(e).digest("hex")}`,byteSize:e.byteLength}}function Zu(e){let t=Sn.createHash("sha256").update(`material-texture\0${e}`).digest("hex");return`${t.slice(0,8)}-${t.slice(8,12)}-5${t.slice(13,16)}-8${t.slice(17,20)}-${t.slice(20,32)}`}function Yu(e){return e.trim().replace(/[^\p{L}\p{N}._-]+/gu,"_").replace(/^_+|_+$/g,"")||"Imported_Texture"}async function Sa(e){try{return await R.access(e),!0}catch{return!1}}async function xa(e,t){let n=bn(t,{codeKeyPolicy:e.codeKeyPolicy??"legacy"});await R.mkdir(w.dirname(e.manifestPath),{recursive:!0}),await R.mkdir(w.dirname(e.registryPath),{recursive:!0});let r=await fa(e.manifestPath),i=await fa(e.registryPath);try{await kr(e.manifestPath,`${JSON.stringify(t,null,2)}
|
|
13
|
+
`),await kr(e.registryPath,n)}catch(o){let a=[];for(let[s,l]of[[e.manifestPath,r],[e.registryPath,i]])try{await Qu(s,l)}catch(d){a.push(d)}if(a.length>0){let s=new Error("generated_registry_transaction_rollback_failed");throw s.cause=o,s.rollbackErrors=a,s}throw o}}async function fa(e){try{return(await R.lstat(e)).isFile()?{kind:"file",content:await R.readFile(e,"utf8")}:{kind:"other"}}catch(t){if(at(t)&&t.code==="ENOENT")return{kind:"missing"};throw t}}async function Qu(e,t){if(t.kind!=="other"){if(t.kind==="missing"){await R.rm(e,{force:!0});return}await kr(e,t.content)}}function ef(e,t){return typeof e.deleteFile=="boolean"?e.deleteFile:t&&typeof t.deleteFile=="boolean"?t.deleteFile:!0}function tf(e,t){return!!(e.force||t?.force===!0)}async function nf(e,t,n,r){if(n||!e.scenePath)return;let i=await Pn(e.scenePath,null),a=(Array.isArray(i?.scene?.nodes)?i.scene.nodes:[]).filter(s=>s?.kind==="instance"&&s?.instance?.assetId===t||s?.kind==="image"&&s?.image?.assetId===t).map(s=>s.id).filter(Boolean);if(a.length!==0)throw new C(r.assetStillReferenced??"asset_still_referenced",{assetId:t,scenePath:e.scenePath,nodeIds:a})}function F(e){return typeof e=="string"&&e.trim()?e.trim():null}function Y(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function at(e){return e instanceof Error&&"code"in e}import rf from"node:path";function Pa(e){let t=[],n;for(let r=0;r<e.length;r+=1){let i=e[r];if(i!=="--project-root"&&!i.startsWith("--project-root=")){t.push(i);continue}if(n!==void 0)throw new Error("--project-root may only be provided once.");let o=i==="--project-root"?e[++r]:i.slice(15);if(o===void 0||!o.trim()||o.startsWith("--"))throw new Error("--project-root requires a non-empty path.");n=o}return{argv:t,projectRoot:rf.resolve(process.cwd(),n??"."),explicit:n!==void 0}}var Ea=Pa(process.argv.slice(2)),vr=Ea.projectRoot,af=await sf(vr),Aa=df(af),In=lf(vr,Aa),[En,dt,...Ia]=Ea.argv;En==="asset"&&(dt==="register"||dt==="unregister")?await ma(In,dt==="unregister"?["--unregister",...Ia]:Ia):En==="asset"&&dt==="refresh-metadata"?await cf(In):En==="asset"&&dt==="regenerate-catalog"?await uf(In):En==="scene"&&dt==="recompile"?await ff(vr,Aa,In):(process.stderr.write(["Usage:"," fps-editor-project --project-root /path/to/project asset register --payload /path/to/payload.json"," fps-editor-project --project-root /path/to/project asset unregister --asset-id asset_xxx [--keep-file] [--force]"," fps-editor-project --project-root /path/to/project asset refresh-metadata"," fps-editor-project --project-root /path/to/project asset regenerate-catalog"," fps-editor-project --project-root /path/to/project scene recompile",""].join(`
|
|
14
|
+
`)),process.exitCode=1);async function sf(e){let t=ie.join(e,"fps.config.ts"),n=await import(`${of(t).href}?fps-editor-project=${Date.now()}`),r=n.default??n.fpsConfig;if(!r||typeof r!="object"||r.schemaVersion!==1)throw new Error("fps.config.ts must default-export a valid defineFpsProject() definition.");return r}function df(e){let t=e.authoring?.source,n=e.authoring?.assets;if(!t||!n)throw new Error("fps.config.ts is missing authoring source/assets.");return{source:{editorScene:t.document,runtimeScene:t.runtimeArtifact,rendering:t.rendering,shadows:t.shadows},assets:n}}function lf(e,t){let n=ie.resolve(e,t.assets.importedDir),r=ie.resolve(e,t.assets.generatedDir),i=ie.dirname(n);return{cwd:e,codeKeyPolicy:"disabled",assetsDir:i,importedDir:n,generatedDir:r,manifestPath:ie.join(r,"asset-catalog.manifest.json"),registryPath:ie.join(r,"asset-catalog.generated.ts"),scenePath:ie.resolve(e,t.source.runtimeScene),supportedExtensions:kt,commands:{register:"asset:register",unregister:"asset:unregister"},relativeImportedPath(o,a){let s=o==="sound"?"sounds":o==="model"?"":"textures";return ie.relative(r,ie.join(n,s,a)).split(ie.sep).join("/")},resolveAssetMetadata(o){return yn({kind:o.kind,sourcePath:o.sourcePath,existingMetadata:o.existingMetadata,payloadMetadata:o.payloadMetadata,guid:o.guid,assetId:o.assetId,cwd:e,assetsDir:i})}}}async function cf(e){let t=await He(e),n=0;for(let r of t){if(!r.relativePath)continue;let i=ie.resolve(e.generatedDir,r.relativePath);await xn(e,{payloadData:{sourcePath:i,kind:r.kind,guid:r.guid,projectAssetId:r.assetId,assetName:r.originalFileName,displayName:r.displayName,category:r.category,placeable:r.placeable,warmupCount:r.warmupCount,singleton:r.singleton,materialMode:r.materialMode,metadata:r.metadata}}),n+=1}process.stdout.write(`Refreshed metadata for ${n} canonical asset entries.
|
|
15
|
+
`)}async function uf(e){let t=await ga(e),n=await He(e),r=bn(n,{codeKeyPolicy:e.codeKeyPolicy,generatedBy:"fps-editor-project asset regenerate-catalog"});await Or.writeFile(e.registryPath,r),process.stdout.write(`Regenerated ${e.registryPath} from ${n.length} canonical asset entries after refreshing ${t.refreshedAssets.length} asset(s).
|
|
16
|
+
`)}async function ff(e,t,n){let r=ie.resolve(e,t.source.editorScene),i=ie.resolve(e,t.source.runtimeScene),o=t.source.shadows?ie.resolve(e,t.source.shadows):null,[a,s,l,d]=await Promise.all([Nr(r),Nr(i),o?Nr(o):null,He(n)]),u=to(a,Yi(d)),c=go(u,s,{...l?{shadowMapExperimentConfig:l}:{},readCustomTransformRuntimeData:f=>f?.transformType==="groundDecal"&&f.groundDecal?{groundDecal:ko(f.groundDecal)}:null});await Or.writeFile(i,`${JSON.stringify(c.sceneConfig,null,2)}
|
|
17
|
+
`),process.stdout.write(`Runtime scene recompiled from the authoritative Editor document.
|
|
18
|
+
`)}async function Nr(e){return JSON.parse(await Or.readFile(e,"utf8"))}
|