@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,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{createHash as Se,randomUUID as k}from"node:crypto";import{constants as Re,createReadStream as K}from"node:fs";import{access as Te,readFile as J,realpath as H,stat as M}from"node:fs/promises";import T from"node:path";import{Readable as Ee}from"node:stream";var F="/__fps_editor_agent/v1/asset-source-grants";var Ye=32*1024;var Xe=8*1024*1024,ee=128,te=256*1024;var d=Object.freeze({ok:0,usage:2,discovery:3,unavailable:4,conflict:5,execution:6,running:7,interrupted:130}),W=1024*1024,Q=3e4,ne=T.join(".fps-editor","state","agent-runtime.json"),C=Object.freeze({kind:"fps-editor-agent-deadline"}),q=!1,U=Number.POSITIVE_INFINITY,ce=Q,E=new AbortController;process.once("SIGINT",()=>{q=!0,E.abort(),process.exitCode=d.interrupted,setTimeout(()=>process.exit(d.interrupted),25).unref?.()});Oe().catch(e=>{let t=q?L():we(e);S(t.result??{ok:!1,error:{code:t.code,message:t.message}}),t.log!==!1&&process.stderr.write(`[fps-editor-agent] ${t.message}
|
|
3
|
+
`),process.exitCode=t.exitCode});async function Oe(){let e=He(process.argv.slice(2)),t=e.argv,n=e.projectRoot??process.cwd(),i=e.projectRoot!==void 0;if(ce=e.deadlineMs,U=Date.now()+e.deadlineMs,t.length===0||t.includes("--help")||t[0]==="help"){S({ok:!0,usage:ze()});return}if(t.includes("--version")){let s=JSON.parse(await J(new URL("../package.json",import.meta.url),"utf8"));S({ok:!0,package:s.name,version:s.version,protocolVersion:2});return}let o=t.shift();if(o==="doctor"){let s=await le(n,{validateService:!1,exactProjectRoot:i}),l=await fe(s),r=await(await se(n,{exactProjectRoot:i})).request({kind:"status"});S({ok:!0,descriptorPath:s.descriptorPath,projectRoot:s.projectRoot,checks:l,status:r.status});return}let a=await se(n,{exactProjectRoot:i});if(o==="status"){S(await a.request({kind:"status"}));return}if(o==="commands"){await be(a,t);return}if(o==="command"){await _e(a,t);return}if(o==="transaction"){await Ae(a,t);return}if(o==="apply"){await Ne(a,t);return}if(o==="operation"){await Ce(a,t);return}if(o==="trace"){await De(a,t);return}throw c(`Unknown command: ${String(o)}`)}async function be(e,t){let n=t.shift();if(n==="describe"){let s=j(t,"command id");Ie(t),S(await e.request({kind:"commands.describe",commandId:s}));return}let i=A(t,new Set(["--cursor","--limit"])),o=g(i.options,"--cursor"),a=O(i.options,"--limit",{minimum:1});if(n==="list"){if(i.positionals.length)throw c("commands list does not accept positional arguments.");S(await e.request({kind:"commands.list",...o?{cursor:o}:{},...a?{limit:a}:{}}));return}if(n==="search"){let s=j(i.positionals,"search query");if(i.positionals.length)throw c("commands search accepts one query.");S(await e.request({kind:"commands.search",query:s,...o?{cursor:o}:{},...a?{limit:a}:{}}));return}throw c("commands requires list, search, or describe.")}async function _e(e,t){let n=A(t,new Set(["--stdin","--input-file","--input-json","--expected-revision","--idempotency-key","--request-id","--timeout","--trace-id","--client-id","--source-file"]),new Set(["--stdin"])),i=j(n.positionals,"command id");if(n.positionals.length)throw c("command accepts one command id.");let o=await Ue(n.options),a=await e.request({kind:"commands.describe",commandId:i}),s=a.ok&&a.kind==="command"?a.command:null;if(!s)throw I(d.unavailable,"command.unknown",`Editor command is not registered: ${i}`);if(!s.availability.available)throw I(d.unavailable,"command.unavailable",s.availability.reasons.map(p=>p.message).join("; ")||`Editor command is unavailable: ${i}`);let l=g(n.options,"--source-file"),u=null;if(l){if(i!=="asset.import")throw c("--source-file is only valid for asset.import.");if(!o||typeof o!="object"||Array.isArray(o))throw c("asset.import input must be a JSON object.");if(Object.prototype.hasOwnProperty.call(o,"sourceGrantId"))throw c("Do not combine --source-file with input.sourceGrantId.");let p=await e.uploadAssetSource(T.resolve(l));u=p.sourceGrantId,o={...o,sourceGrantId:p.sourceGrantId}}let r=!1,m=!1,w=null;try{let p=O(n.options,"--expected-revision",{minimum:0}),h=e.serviceInstanceId;if(s.manifest.access==="write"&&p===void 0){let R=await e.request({kind:"status"});p=R.status.documentRevision,h=R.status.serviceInstanceId}let f=g(n.options,"--request-id")??k(),v=g(n.options,"--idempotency-key")??(s.manifest.access==="write"?k():void 0),y=O(n.options,"--timeout",{minimum:0});r=!0;let N=await e.request({kind:"command.invoke",invocation:{commandId:i,input:o,requestId:f,...v?{idempotencyKey:v}:{},...p!==void 0?{expectedRevision:{serviceInstanceId:h,document:p}}:{},principal:{type:"agent",id:"fps-editor-agent"},source:"agent-cli",...g(n.options,"--trace-id")?{traceId:g(n.options,"--trace-id")}:{},...g(n.options,"--client-id")?{clientId:g(n.options,"--client-id")}:{}},...y!==void 0?{timeoutMs:y}:{}});m=!0,S(N),B(N.operation)}catch(p){throw w=p,p}finally{let p=r&&!m&&["cli.deadlineExceeded","cli.interrupted","service.unreachable"].includes(w?.code);u&&!p&&await e.revokeAssetSource(u).catch(()=>{})}}async function Ae(e,t){let n=t.shift();if(n==="begin"){let s=A(t,new Set(["--expected-revision","--label","--transaction-id","--trace-id","--service-instance-id"]));if(s.positionals.length)throw c("transaction begin does not accept positional arguments.");let l=await de(e),u=g(s.options,"--transaction-id")??k(),r=await e.request({kind:"transaction.begin",serviceInstanceId:g(s.options,"--service-instance-id")??l.serviceInstanceId,expectedDocumentRevision:O(s.options,"--expected-revision",{minimum:0})??l.documentRevision,...g(s.options,"--label")?{label:g(s.options,"--label")}:{},transactionId:u,...g(s.options,"--trace-id")?{traceId:g(s.options,"--trace-id")}:{}});S(r),P(r.transaction);return}let i=A(t,new Set(["--service-instance-id","--sequence","--stdin","--input-file","--cursor","--limit"]),new Set(["--stdin"])),o=j(i.positionals,"transaction id");if(i.positionals.length)throw c(`transaction ${String(n)} accepts one transaction id.`);let a=g(i.options,"--service-instance-id")??e.serviceInstanceId;if(n==="append"){z(i.options,new Set(["--service-instance-id","--sequence","--stdin","--input-file"]));let s=O(i.options,"--sequence",{minimum:0});s===void 0&&(s=(await e.request({kind:"transaction.get",transactionId:o,serviceInstanceId:a,limit:1})).transaction.acceptedOperations);let l,u=ue(i.options);await pe({client:e,source:u,transactionId:o,serviceInstanceId:a,sequence:s,maxOperations:e.status.transactions.maxOperationsPerAppend,maxBytes:e.status.transactions.maxBytesPerAppend,onAppend(r){l=r,S(r)}}),P(l?.transaction);return}if(n==="preflight"||n==="commit"||n==="abort"){z(i.options,new Set(["--service-instance-id"]));let s=await e.request({kind:`transaction.${n}`,transactionId:o,serviceInstanceId:a});S(s),P(s.transaction,{abortedIsSuccess:n==="abort"});return}if(n==="get"){z(i.options,new Set(["--service-instance-id","--cursor","--limit"]));let s=await e.request({kind:"transaction.get",transactionId:o,serviceInstanceId:a,...g(i.options,"--cursor")?{cursor:g(i.options,"--cursor")}:{},...O(i.options,"--limit",{minimum:1})?{limit:O(i.options,"--limit",{minimum:1})}:{}});S(s),P(s.transaction);return}throw c("transaction requires begin, append, preflight, commit, get, or abort.")}async function Ne(e,t){let n=A(t,new Set(["--stdin","--input-file","--save","--expected-revision","--label","--transaction-id","--trace-id","--service-instance-id","--timeout"]),new Set(["--stdin","--save"]));if(n.positionals.length)throw c("apply does not accept positional arguments.");let i=await de(e),o=g(n.options,"--service-instance-id")??i.serviceInstanceId,a=O(n.options,"--expected-revision",{minimum:0})??i.documentRevision,s=O(n.options,"--timeout",{minimum:0}),l=g(n.options,"--transaction-id")??k(),u=g(n.options,"--trace-id"),r,m="begin";try{r=(await e.request({kind:"transaction.begin",serviceInstanceId:o,expectedDocumentRevision:a,transactionId:l,...g(n.options,"--label")?{label:g(n.options,"--label")}:{},...u?{traceId:u}:{}})).transaction,$("begin",r),m="append";let p=ue(n.options);if(await pe({client:e,source:p,transactionId:r.transactionId,serviceInstanceId:r.serviceInstanceId,sequence:r.acceptedOperations,maxOperations:i.transactions.maxOperationsPerAppend,maxBytes:i.transactions.maxBytesPerAppend,onAppend(ve){r=ve.transaction,$("append",r)}}),m="commit",r=(await e.request({kind:"transaction.commit",transactionId:r.transactionId,serviceInstanceId:r.serviceInstanceId})).transaction,$("commit",r),r.state!=="working_committed"){b(!1,"commit_failed",r),P(r);return}if(!n.options.has("--save")){b(!0,"working_committed",r);return}m="document.export";let f=await ie(e,{commandId:"document.export",input:{},expectedDocumentRevision:r.workingDocumentRevision,serviceInstanceId:r.serviceInstanceId,transactionId:r.transactionId,traceId:u,timeoutMs:s});if(oe("document.export",r,f.operation),f.operation?.status==="accepted"||f.operation?.status==="running"){b(!1,"awaiting_export_operation",r,{operation:_(f.operation),allowedActions:["operation.get","transaction.get"],retry:{retryable:!0,requiresRebase:!1}}),process.exitCode=d.running;return}if(f.operation?.status!=="completed"){b(!1,"save_failed",r,{operation:_(f.operation),allowedActions:["command document.export","transaction.get"],retry:{retryable:!0,requiresRebase:!1}}),B(f.operation);return}let v=f.operation.output;if(!v||typeof v!="object"||Array.isArray(v))throw I(d.execution,"document.exportReceiptInvalid","document.export returned an invalid receipt.");if(v.persistedByEditor===!1){b(!1,"awaiting_persistence_confirmation",r,{operation:_(f.operation),allowedActions:["operation.get","transaction.get"],retry:{retryable:!0,requiresRebase:!1}}),process.exitCode=d.running;return}let y=typeof v.transactionId=="string"&&v.transactionId.trim()?v.transactionId:null;if(!y)throw I(d.execution,"document.exportReceiptInvalid","document.export receipt is missing transactionId.");m="document.commit";let N=Number.isSafeInteger(v.documentRevision)?v.documentRevision:r.workingDocumentRevision,R=await ie(e,{commandId:"document.commit",input:{transactionId:y},expectedDocumentRevision:N,serviceInstanceId:r.serviceInstanceId,transactionId:r.transactionId,traceId:u,timeoutMs:s});if(oe("document.commit",r,R.operation),R.operation?.status==="accepted"||R.operation?.status==="running"){b(!1,"awaiting_commit_operation",r,{saveTransactionId:y,operation:_(R.operation),allowedActions:["operation.get","transaction.get"],retry:{retryable:!0,requiresRebase:!1}}),process.exitCode=d.running;return}if(R.operation?.status!=="completed"){b(!1,"save_commit_failed",r,{saveTransactionId:y,operation:_(R.operation),allowedActions:["command document.commit","transaction.get"],retry:{retryable:!0,requiresRebase:!1}}),B(R.operation);return}b(!0,"saved",r,{saveTransactionId:y,operation:_(R.operation),receipt:ke(R.operation.output)})}catch(w){let p=we(w);if(p.result?.kind==="cli.deadline"){S({...p.result,kind:"apply.result",phase:m,...r?{transaction:x(r)}:{}}),process.exitCode=p.exitCode;return}let h;if(r&&(r.state==="open"||r.state==="preflighted"))try{r=(await e.request({kind:"transaction.abort",transactionId:r.transactionId,serviceInstanceId:r.serviceInstanceId})).transaction,h=x(r),$("abort",r)}catch{}S({ok:!1,kind:"apply.result",state:r?.state==="working_committed"?"save_failed":"failed",phase:m,...r?{transaction:x(r)}:{},...h?{aborted:h}:{},error:{code:p.code,message:p.message},allowedActions:r?.state==="working_committed"?["command document.export","transaction.get"]:["status"],retry:{retryable:r?.state==="working_committed",requiresRebase:/revision|serviceInstance/i.test(p.code)}}),process.exitCode=p.exitCode}}async function de(e){let t=await e.request({kind:"status"});if(t.kind!=="status"||!t.status)throw I(d.discovery,"protocol.statusInvalid","Editor Service returned an invalid status response.");return t.status}function ue(e){if(["--stdin","--input-file"].filter(i=>e.has(i)).length>1)throw c("Use only one of --stdin or --input-file.");let n=g(e,"--input-file");return!n||n==="-"?process.stdin:K(T.resolve(n),{encoding:"utf8"})}async function pe(e){let t=re(e.maxOperations,ee),n=re(e.maxBytes,te),i=[],o=2,a=e.sequence,s=0,l=0,u=async()=>{if(i.length===0)return;let r=i.length,m=await e.client.request({kind:"transaction.append",transactionId:e.transactionId,serviceInstanceId:e.serviceInstanceId,sequence:a,operations:i});if(m.kind!=="transaction"||m.transaction.acceptedOperations<a+r)throw I(d.execution,"transaction.appendReceiptInvalid","Editor Service returned an invalid append receipt.");a=m.transaction.acceptedOperations,s+=r,e.onAppend(m),i=[],o=2};for await(let r of Fe(e.source,E.signal,n)){l+=1;let m=r.endsWith("\r")?r.slice(0,-1):r;if(!m.trim())continue;let w;try{w=JSON.parse(m)}catch(v){throw c(`NDJSON line ${l} is not valid JSON: ${v instanceof Error?v.message:String(v)}`)}xe(w,l);let p=JSON.stringify(w),h=Buffer.byteLength(p);if(h+2>n)throw c(`NDJSON line ${l} exceeds the ${n}-byte transaction append limit.`);let f=o+h+(i.length?1:0);i.length&&(i.length>=t||f>n)&&await u(),i.push(w),o+=h+(i.length>1?1:0),(i.length>=t||o>=n)&&await u()}if(await u(),s===0)throw c("Transaction input must contain at least one NDJSON operation.");return{acceptedOperations:s,nextSequence:a}}function xe(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw c(`NDJSON line ${t} must be a transaction operation object.`);if(typeof e.opId!="string"||!e.opId.trim())throw c(`NDJSON line ${t} requires a non-empty opId.`);if(typeof e.commandId!="string"||!e.commandId.trim())throw c(`NDJSON line ${t} requires a non-empty commandId.`);if(e.as!==void 0&&(typeof e.as!="string"||!e.as.trim()))throw c(`NDJSON line ${t} as must be a non-empty string.`)}async function ie(e,t){let n=await e.request({kind:"commands.describe",commandId:t.commandId}),i=n.kind==="command"?n.command:null;if(!i)throw I(d.unavailable,"command.unknown",`Editor command is not registered: ${t.commandId}`);if(!i.availability.available)throw I(d.unavailable,"command.unavailable",i.availability.reasons.map(s=>s.message).join("; ")||`Editor command is unavailable: ${t.commandId}`);let o=await e.request({kind:"command.invoke",invocation:{commandId:t.commandId,input:t.input,requestId:k(),idempotencyKey:k(),expectedRevision:{serviceInstanceId:t.serviceInstanceId,...t.expectedDocumentRevision===void 0?{}:{document:t.expectedDocumentRevision}},principal:{type:"agent",id:"fps-editor-agent"},source:"agent-cli",transactionId:t.transactionId,...t.traceId?{traceId:t.traceId}:{}},...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}),a=o.operation;return a&&!ge(a.status)&&(a=(await e.request({kind:"operation.get",operationId:a.operationId})).operation??a),{response:o,operation:a}}function $(e,t){S({ok:t.state!=="failed",kind:"apply.event",phase:e,state:t.state,transaction:x(t)})}function oe(e,t,n){S({ok:n?.status!=="failed"&&n?.status!=="cancelled",kind:"apply.event",phase:e,state:n?.status??"unavailable",transaction:x(t),operation:_(n)})}function b(e,t,n,i={}){S({ok:e,kind:"apply.result",state:t,phase:t==="saved"?"complete":n.phase,transaction:x(n),...i.allowedActions?{}:{allowedActions:n.allowedActions},...i.retry?{}:{retry:n.retry},...i})}function x(e){return{transactionId:e.transactionId,serviceInstanceId:e.serviceInstanceId,state:e.state,phase:e.phase,baseDocumentRevision:e.baseDocumentRevision,...e.workingDocumentRevision===void 0?{}:{workingDocumentRevision:e.workingDocumentRevision},dirty:e.dirty,acceptedOperations:e.acceptedOperations,acceptedBytes:e.acceptedBytes,processedOperations:e.processedOperations,allowedActions:e.allowedActions,retry:e.retry,diagnostics:e.diagnostics,results:{offset:e.results.offset,returned:e.results.returned,total:e.results.total,...e.results.nextCursor?{nextCursor:e.results.nextCursor}:{}}}}function _(e){return e?{operationId:e.operationId,requestId:e.requestId,commandId:e.commandId,status:e.status,...e.transactionId?{transactionId:e.transactionId}:{},...e.traceId?{traceId:e.traceId}:{},...e.output===void 0?{}:{output:e.output},...e.diagnostics?{diagnostics:e.diagnostics}:{}}:null}function ke(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function re(e,t){return Number.isSafeInteger(e)&&e>0?e:t}async function Ce(e,t){let n=t.shift();if(n==="get"){let i=A(t,new Set(["--request-id","--service-instance-id"])),o=i.positionals.shift();if(i.positionals.length)throw c("operation get accepts at most one operation id.");let a=g(i.options,"--request-id");if(!o&&!a||o&&a)throw c("operation get requires exactly one operation id or --request-id.");let s=g(i.options,"--service-instance-id");if(s&&s!==e.serviceInstanceId)throw I(d.conflict,"operation.serviceInstanceChanged",`Expected Editor Service ${s}, received ${e.serviceInstanceId}.`);let l=await e.request(o?{kind:"operation.get",operationId:o}:{kind:"operation.get",requestId:a});S(l),l.operation?B(l.operation):process.exitCode=d.unavailable;return}if(n==="cancel"){let i=j(t,"operation id");Ie(t);let o=await e.request({kind:"operation.cancel",operationId:i});S(o),o.operation?!o.cancelled&&!ge(o.operation.status)&&(process.exitCode=d.running):process.exitCode=d.unavailable;return}throw c("operation requires get or cancel.")}async function De(e,t){if(t.shift()!=="get")throw c("trace requires get.");let i=A(t,new Set(["--cursor","--limit"])),o=i.positionals.shift();if(i.positionals.length)throw c("trace get accepts at most one trace id.");S(await e.request({kind:"trace.get",...o?{traceId:o}:{},...g(i.options,"--cursor")?{cursor:g(i.options,"--cursor")}:{},...O(i.options,"--limit",{minimum:1})?{limit:O(i.options,"--limit",{minimum:1})}:{}}))}async function se(e,t={}){let n=await le(e,{validateService:!0,...t}),i=me(process.env.FPS_EDITOR_AGENT_ENDPOINT?.trim()||n.descriptor.endpoint),o=process.env.FPS_EDITOR_AGENT_TOKEN?.trim()||n.descriptor.token,a=async r=>{if(q)throw I(d.interrupted,"cli.interrupted","Interrupted.");let m=U-Date.now();if(m<=0)throw D(n,r);let w=new AbortController,p=()=>w.abort(E.signal.reason);E.signal.addEventListener("abort",p,{once:!0});let h=setTimeout(()=>w.abort(C),m);h.unref?.();try{let f=await fetch(i,{method:"POST",headers:{authorization:`Bearer ${o}`,"content-type":"application/json"},body:JSON.stringify(r),signal:w.signal}),v=await X(f),y;try{y=JSON.parse(v)}catch{throw I(d.discovery,"protocol.invalidJson","Editor Service returned invalid JSON.")}if(f.status===401||f.status===403)throw I(d.discovery,"auth.invalidToken",he(y)||"Editor Service authentication failed.");if(!y?.ok)throw Y(y);return y}catch(f){throw q||E.signal.aborted?L():w.signal.reason===C?D(n,r):f&&Number.isInteger(f.exitCode)?f:I(d.discovery,"service.unreachable",`Editor Service is unreachable: ${f instanceof Error?f.message:String(f)}`)}finally{clearTimeout(h),E.signal.removeEventListener("abort",p)}},s=await a({kind:"status"});Me(n,s);let l=async r=>{let m=await Pe(r),w=new URL(F,i),p=new AbortController,h=U-Date.now();if(h<=0)throw D(n,{kind:"asset.sourceGrant"});let f=()=>p.abort(E.signal.reason);E.signal.addEventListener("abort",f,{once:!0});let v=setTimeout(()=>p.abort(C),h);v.unref?.();try{let y=await fetch(w,{method:"POST",headers:{authorization:`Bearer ${o}`,"content-type":"application/vnd.fps-editor.asset-source-bundle-v1"},body:Ee.from(je(m)),duplex:"half",signal:p.signal}),N=await X(y),R;try{R=JSON.parse(N)}catch{throw I(d.discovery,"protocol.invalidJson","Editor Service returned invalid JSON for asset source upload.")}if(!y.ok||!R?.ok||R.kind!=="asset.sourceGrant"||!R.grant?.sourceGrantId)throw Y(R);return R.grant}catch(y){throw q||E.signal.aborted?L():p.signal.reason===C?D(n,{kind:"asset.sourceGrant"}):y&&Number.isInteger(y.exitCode)?y:I(d.discovery,"asset.sourceUploadFailed",`Asset source upload failed: ${y instanceof Error?y.message:String(y)}`)}finally{clearTimeout(v),E.signal.removeEventListener("abort",f)}},u=async r=>{let m=U-Date.now();if(m<=0)throw D(n,{kind:"asset.sourceGrant.revoke"});let w=new AbortController,p=setTimeout(()=>w.abort(C),m);p.unref?.();try{let h=new URL(F,i);h.searchParams.set("sourceGrantId",r);let f=await fetch(h,{method:"DELETE",headers:{authorization:`Bearer ${o}`},signal:w.signal}),v=await X(f),y;try{y=JSON.parse(v)}catch{throw I(d.discovery,"protocol.invalidJson","Editor Service returned invalid JSON for asset source revocation.")}if(!f.ok||!y?.ok)throw Y(y);return y}finally{clearTimeout(p)}};return Object.freeze({discovery:n,serviceInstanceId:n.descriptor.serviceInstanceId,status:s.status,request:a,uploadAssetSource:l,revokeAssetSource:u})}async function Pe(e){let t;try{t=await H(e)}catch(u){throw I(d.usage,"asset.sourceNotFound",`Asset source is unavailable: ${u instanceof Error?u.message:String(u)}`)}let n=await M(t);if(!n.isFile())throw c("Asset source must be a regular file.");let i=T.extname(t).toLowerCase();if(![".glb",".gltf",".png",".jpg",".jpeg",".env"].includes(i))throw c("Asset source must be GLB, glTF, PNG, JPG, JPEG, or Babylon ENV.");let o=T.dirname(t),a=new Map([[T.basename(t),t]]);if(i===".gltf"){if(n.size>16*1024*1024)throw c("glTF JSON source exceeds the 16 MiB manifest limit.");let u;try{u=JSON.parse(await J(t,"utf8"))}catch(m){throw c(`glTF source is not valid JSON: ${m instanceof Error?m.message:String(m)}`)}let r=[...Array.isArray(u?.buffers)?u.buffers:[],...Array.isArray(u?.images)?u.images:[]];for(let m of r){let w=typeof m?.uri=="string"?m.uri:null;if(!w||w.startsWith("data:"))continue;if(/^[a-z][a-z0-9+.-]*:/i.test(w)||w.startsWith("//"))throw c("glTF dependencies must use local relative URIs.");let p;try{p=decodeURIComponent(w.split(/[?#]/,1)[0])}catch{throw c(`glTF dependency URI is malformed: ${w}`)}let h=T.posix.normalize(p.replaceAll("\\","/"));if(!h||h==="."||h===".."||h.startsWith("../")||T.posix.isAbsolute(h))throw c(`glTF dependency escapes the source directory: ${w}`);let f;try{f=await H(T.resolve(o,...h.split("/")))}catch{throw c(`glTF dependency is missing: ${h}`)}if(Le(o,f,h),!(await M(f)).isFile())throw c(`glTF dependency is not a regular file: ${h}`);a.set(h,f)}}let s=[];for(let[u,r]of a){let m=await M(r);if(m.size<1||m.size>256*1024*1024)throw c(`Asset source file size is outside the supported range: ${u}`);s.push({path:u,filePath:r,byteSize:m.size,contentHash:await qe(r)})}let l=s.reduce((u,r)=>u+r.byteSize,0);if(s.length>128||l>512*1024*1024)throw c("Asset source bundle exceeds the supported file-count or total-size limit.");return{primaryPath:T.basename(t),files:s}}async function qe(e){let t=Se("sha256");for await(let n of K(e))t.update(n);return`sha256:${t.digest("hex")}`}async function*je(e){let t=Buffer.from(JSON.stringify({schemaVersion:1,primaryPath:e.primaryPath,files:e.files.map(({path:i,byteSize:o,contentHash:a})=>({path:i,byteSize:o,contentHash:a}))}),"utf8"),n=Buffer.allocUnsafe(4);n.writeUInt32BE(t.length,0),yield n,yield t;for(let i of e.files)for await(let o of K(i.filePath))yield o}function Le(e,t,n){let i=T.relative(e,t);if(!i||i===".."||i.startsWith(`..${T.sep}`)||T.isAbsolute(i))throw c(`glTF dependency escapes the source directory: ${n}`)}async function le(e,t={}){let n;try{n=await H(T.resolve(e))}catch(i){throw I(d.discovery,"projectRoot.invalid",`Project root is unavailable: ${i instanceof Error?i.message:String(i)}`)}for(;;){let i=T.join(n,ne);if(await Ge(i)){let a=await $e(i),s=await H(n);if(a.canonicalProjectRoot!==s)throw I(d.discovery,"descriptor.projectMismatch",`Runtime descriptor does not own ${s}.`);let l={descriptorPath:i,projectRoot:s,descriptor:a};return t.validateService!==!1&&await fe(l),l}if(t.exactProjectRoot===!0)break;let o=T.dirname(n);if(o===n)break;n=o}throw I(d.discovery,"descriptor.notFound",`No ${ne} was found from ${e}.`)}async function $e(e){let t;try{t=JSON.parse(await J(e,"utf8"))}catch(n){throw I(d.discovery,"descriptor.invalid",`Runtime descriptor is unreadable: ${n instanceof Error?n.message:String(n)}`)}if(t?.schemaVersion!==1||t?.protocolVersion!==2||t?.packageName!=="@fps-games/editor"||typeof t?.serviceInstanceId!="string"||typeof t?.canonicalProjectRoot!="string"||typeof t?.endpoint!="string"||typeof t?.token!="string"||!Number.isSafeInteger(t?.pid))throw I(d.discovery,"descriptor.incompatible","Runtime descriptor schema or protocol is incompatible.");if(me(t.endpoint),process.platform!=="win32"){let n=(await M(e)).mode&511;if(n&63)throw I(d.discovery,"descriptor.permissions",`Runtime descriptor permissions must be 0600; received ${n.toString(8)}.`)}return t}function me(e){let t;try{t=new URL(e)}catch{throw I(d.discovery,"descriptor.endpoint","Runtime descriptor endpoint is invalid.")}if(t.protocol!=="http:"||!["127.0.0.1","localhost","[::1]"].includes(t.hostname))throw I(d.discovery,"descriptor.endpoint","Runtime descriptor endpoint must be project-local loopback HTTP.");return t.toString()}async function fe(e){let t=[];t.push({id:"descriptor.schema",ok:e.descriptor.schemaVersion===1}),t.push({id:"descriptor.protocol",ok:e.descriptor.protocolVersion===2}),t.push({id:"descriptor.project",ok:e.descriptor.canonicalProjectRoot===e.projectRoot});let n=Be(e.descriptor.pid);if(t.push({id:"descriptor.process",ok:n,pid:e.descriptor.pid}),!n)throw I(d.discovery,"descriptor.stale",`Editor Service process is not alive: ${e.descriptor.pid}.`);return t}function Me(e,t){let n=t?.kind==="status"?t.status:null;if(!n||n.protocolVersion!==2)throw I(d.discovery,"protocol.incompatible","Editor Service status protocol is incompatible.");if(n.serviceInstanceId!==e.descriptor.serviceInstanceId||n.canonicalProjectRoot!==e.projectRoot||n.packageVersion!==e.descriptor.packageVersion||n.buildKey!==e.descriptor.buildKey)throw I(d.discovery,"service.identityMismatch","Editor Service identity does not match the project runtime descriptor.")}async function Ue(e){if(["--stdin","--input-file","--input-json"].filter(o=>e.has(o)).length>1)throw c("Use only one of --stdin, --input-file, or --input-json.");if(e.has("--stdin"))return V(await Je(process.stdin,E.signal),"--stdin");let n=g(e,"--input-file");if(n)return V(await J(T.resolve(n),"utf8"),"--input-file");let i=g(e,"--input-json");return i===void 0?{}:V(i,"--input-json")}function V(e,t){try{return JSON.parse(e)}catch(n){throw c(`${t} is not valid JSON: ${n instanceof Error?n.message:String(n)}`)}}function A(e,t,n=new Set){let i=new Map,o=[];for(;e.length;){let a=e.shift();if(!a.startsWith("--")){o.push(a);continue}let[s,l]=a.split("=",2);if(!t.has(s))throw c(`Unknown option: ${s}`);if(i.has(s))throw c(`Option may only be provided once: ${s}`);if(n.has(s)){if(l!==void 0)throw c(`${s} does not accept a value.`);i.set(s,!0);continue}let u=l??e.shift();if(u===void 0||u.startsWith("--"))throw c(`${s} requires a value.`);i.set(s,u)}return{options:i,positionals:o}}function g(e,t){let n=e.get(t);if(n!==void 0){if(typeof n!="string"||!n.trim())throw c(`${t} requires a non-empty value.`);return n.trim()}}function He(e){let t=[],n=Q,i=!1,o;for(let a=0;a<e.length;a+=1){let s=e[a];if(s==="--project-root"||s.startsWith("--project-root=")){if(o!==void 0)throw c("--project-root may only be provided once.");let r=s==="--project-root"?e[++a]:s.slice(15);if(r===void 0||!r.trim()||r.startsWith("--"))throw c("--project-root requires a non-empty path.");o=T.resolve(process.cwd(),r);continue}if(s!=="--deadline"&&!s.startsWith("--deadline=")){t.push(s);continue}if(i)throw c("--deadline may only be provided once.");i=!0;let l=s==="--deadline"?e[++a]:s.slice(11);if(l===void 0||l.startsWith("--"))throw c("--deadline requires a value.");let u=Number(l);if(!Number.isSafeInteger(u)||u<1)throw c("--deadline must be an integer >= 1.");n=u}return{argv:t,deadlineMs:n,projectRoot:o}}function O(e,t,{minimum:n}){let i=g(e,t);if(i===void 0)return;let o=Number(i);if(!Number.isSafeInteger(o)||o<n)throw c(`${t} must be an integer >= ${n}.`);return o}function j(e,t){let n=e.shift();if(!n)throw c(`Missing ${t}.`);return n}function Ie(e){if(e.length)throw c(`Unexpected argument: ${e[0]}`)}function z(e,t){for(let n of e.keys())if(!t.has(n))throw c(`Option is not valid for this action: ${n}`)}function B(e){if(!e){process.exitCode=d.unavailable;return}if(e.status==="accepted"||e.status==="running"){process.exitCode=d.running;return}(e.status==="failed"||e.status==="cancelled")&&(process.exitCode=Z(e.diagnostics))}function P(e,t={}){if(!e){process.exitCode=d.unavailable;return}if(e.state==="preflighting"||e.state==="committing"){process.exitCode=d.running;return}if(e.state==="failed"){process.exitCode=Z(e.diagnostics);return}e.state==="aborted"&&t.abortedIsSuccess!==!0&&(process.exitCode=d.execution)}function Z(e=[]){let t=e.map(n=>n?.code??"");return t.some(n=>/revision|idempotency|conflict|serviceInstance/i.test(n))?d.conflict:t.some(n=>/unknown|unavailable|notFound|sessionUnavailable/i.test(n))?d.unavailable:d.execution}function Y(e){let t=Array.isArray(e?.diagnostics)?e.diagnostics:[];return I(Z(t),t[0]?.code??"service.requestFailed",he(e)||"Editor Service request failed.")}function he(e){return Array.isArray(e?.diagnostics)?e.diagnostics.map(t=>t?.message).filter(Boolean).join("; "):""}function Be(e){try{return process.kill(e,0),!0}catch(t){return t?.code==="EPERM"}}function ge(e){return e==="completed"||e==="failed"||e==="cancelled"}async function X(e){let t=Number(e.headers.get("content-length"));if(Number.isFinite(t)&&t>W)throw I(d.execution,"response.tooLarge","Editor Service response exceeds 1 MiB.");let n=await e.text();if(Buffer.byteLength(n)>W)throw I(d.execution,"response.tooLarge","Editor Service response exceeds 1 MiB.");return n}async function Ge(e){try{return await Te(e,Re.R_OK),!0}catch{return!1}}async function Je(e,t){let n=[];for await(let i of ye(e,t))n.push(Buffer.isBuffer(i)?i:Buffer.from(i));return Buffer.concat(n).toString("utf8")}async function*Fe(e,t,n=Number.POSITIVE_INFINITY){let i="";for await(let o of ye(e,t)){i+=o.toString();let a;for(;(a=i.indexOf(`
|
|
4
|
+
`))>=0;){let s=i.slice(0,a);if(Buffer.byteLength(s)>n)throw c(`NDJSON line exceeds the ${n}-byte transaction append limit.`);yield s,i=i.slice(a+1)}if(Buffer.byteLength(i)>n)throw c(`NDJSON line exceeds the ${n}-byte transaction append limit.`)}i&&(yield i)}async function*ye(e,t){let n=e[Symbol.asyncIterator]();for(;;){let i=await Ve(n,t);if(i.done)return;yield i.value}}function Ve(e,t){return t.aborted?Promise.reject(L()):new Promise((n,i)=>{let o=()=>i(L());t.addEventListener("abort",o,{once:!0}),e.next().then(n,i).finally(()=>t.removeEventListener("abort",o))})}function S(e){let t=JSON.stringify(e);if(Buffer.byteLength(t)>W)throw I(d.execution,"output.tooLarge","CLI output exceeds 1 MiB.");process.stdout.write(`${t}
|
|
5
|
+
`)}function ze(){return{globalOptions:{deadline:`End-to-end CLI deadline in milliseconds (default ${Q}).`,projectRoot:"Exact target project root. Required for deployment-owned usage from outside the project."},commands:["status","commands list [--cursor CURSOR] [--limit N]","commands search QUERY [--cursor CURSOR] [--limit N]","commands describe COMMAND_ID","command COMMAND_ID [--stdin|--input-file FILE|--input-json JSON] [--source-file FILE for asset.import] [--expected-revision N] [--idempotency-key KEY] [--request-id ID] [--trace-id ID] [--client-id ID] [--timeout MS]","apply [--stdin|--input-file FILE] [--save] [--expected-revision N] [--transaction-id ID] [--label TEXT] [--trace-id ID] [--timeout MS]","transaction begin [--expected-revision N] [--transaction-id ID] [--label TEXT] [--trace-id ID]","transaction append TRANSACTION_ID [--stdin|--input-file FILE] [--sequence N] [--service-instance-id ID]","transaction preflight TRANSACTION_ID [--service-instance-id ID]","transaction commit TRANSACTION_ID [--service-instance-id ID]","transaction get TRANSACTION_ID [--service-instance-id ID] [--cursor CURSOR] [--limit N]","transaction abort TRANSACTION_ID [--service-instance-id ID]","operation get OPERATION_ID [--service-instance-id ID]","operation get --request-id REQUEST_ID [--service-instance-id ID]","operation cancel OPERATION_ID","trace get [TRACE_ID] [--cursor CURSOR] [--limit N]","doctor"],exitCodes:d}}function c(e){return I(d.usage,"cli.usage",e)}function I(e,t,n,i=!0,o){return Object.assign(new Error(n),{exitCode:e,code:t,log:i,...o?{result:o}:{}})}function D(e,t){let n=t?.kind==="command.invoke"?t.invocation:null,i=t?.kind?.startsWith("transaction.")?t.transactionId:n?.transactionId,o=!!n||typeof t?.kind=="string"&&/^transaction\.(begin|append|preflight|commit|abort)$/.test(t.kind),a=n?.requestId,s=a?`operation get --request-id ${a} --service-instance-id ${e.descriptor.serviceInstanceId}`:null,l=i?`transaction get ${i} --service-instance-id ${e.descriptor.serviceInstanceId}`:null,u=[s,l].filter(Boolean);u.length||u.push("status");let r=`Agent CLI exceeded its ${ce}ms end-to-end deadline.`;return I(d.running,"cli.deadlineExceeded",r,!0,{ok:!1,kind:"cli.deadline",state:o?"outcome_unknown":"timed_out",serviceInstanceId:e.descriptor.serviceInstanceId,...n?.commandId?{commandId:n.commandId}:{},...a?{requestId:a}:{},...i?{transactionId:i}:{},error:{code:"cli.deadlineExceeded",message:r},allowedActions:u,retry:{retryable:!o,requiresOperationQuery:o}})}function L(){return I(d.interrupted,"cli.interrupted","Interrupted.")}function we(e){return e&&Number.isInteger(e.exitCode)&&typeof e.code=="string"?e:I(d.execution,"cli.failure",e instanceof Error?e.message:String(e))}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{createHash as me,randomBytes as We}from"node:crypto";import{chmod as St,copyFile as Be,lstat as q,mkdir as de,mkdtemp as It,readFile as ne,readdir as Mt,realpath as te,rename as X,rm as Q,stat as kt,writeFile as Ke}from"node:fs/promises";import{fileURLToPath as jt,pathToFileURL as Et}from"node:url";import s from"node:path";import et from"node:path";function xe(e){let t=[],r;for(let n=0;n<e.length;n+=1){let i=e[n];if(i!=="--project-root"&&!i.startsWith("--project-root=")){t.push(i);continue}if(r!==void 0)throw new Error("--project-root may only be provided once.");let o=i==="--project-root"?e[++n]:i.slice(15);if(o===void 0||!o.trim()||o.startsWith("--"))throw new Error("--project-root requires a non-empty path.");r=o}return{argv:t,projectRoot:et.resolve(process.cwd(),r??"."),explicit:r!==void 0}}import{readFile as $t,realpath as ze,stat as wt}from"node:fs/promises";import ue from"node:path";function Se(e){return e==="fps.builtin.pbr"||e==="fps.builtin.standard"?e:void 0}var y={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"]},Yt=new Set(y.nodeKinds),Xt=new Set(y.primitiveShapes),Qt=new Set(y.assetTypes),vt=new Set(y.materialModes),er=new Set(y.materialScopes),tr=new Set(y.materialAssetSystemPresets),rr=new Set(y.transformTypes),nr=new Set(y.hierarchy.parentTargets),ir=y.runtimeOnlyTokens,or=new Set(y.runtimeV3.assetFields),sr=new Set(y.runtimeV3.materialSlotFields),ar=new Set(y.runtimeV3.materialSlotSourceSurfaceFields);var tt=/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/;function Ie(e){return typeof e=="string"&&!e.startsWith("fps.builtin.")&&tt.test(e)}var x=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),R={kind:"texture"},Me={kind:"color"},rt={kind:"enum",values:["lit","unlit"]},nt={kind:"enum",values:["opaque","mask","blend"]},Ee={lightingModel:rt,baseColor:{kind:"object",properties:{color:Me,texture:R,brightness:x(0),saturation:x(0),contrast:x(0),hue:x(-180,180)}},normal:{kind:"object",properties:{texture:R,strength:x(0)}},emission:{kind:"object",properties:{color:Me,intensity:x(0),texture:R,maskTexture:R}},alpha:{kind:"object",properties:{mode:nt,opacity:x(0,1),cutoff:x(0,1),texture:R}}},it={kind:"object",properties:{...Ee,metallic:x(0,1),roughness:x(0,1),metallicRoughness:{kind:"object",properties:{texture:R}},occlusion:{kind:"object",properties:{texture:R,strength:x(0)}}}},ot={kind:"object",properties:Ee},st={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}},at={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}},ke=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],T={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},Ae=[V("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),V("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),z("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),S("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[L("properties.baseColor.texture.textureAssetId","baseTexture")]}),S("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[L("properties.baseColor.texture.textureAssetId","baseTexture")]}),S("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[L("properties.baseColor.texture.textureAssetId","baseTexture")]}),S("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[L("properties.baseColor.texture.textureAssetId","baseTexture")]}),z("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[T]),S("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[T,L("properties.normal.texture.textureAssetId","normalTexture")]}),V("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),S("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),z("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),V("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"}),S("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),S("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),z("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],ct=[...Ae,S("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[T]}),S("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[T]}),z("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[T]),z("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[T]),S("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[T,L("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],se=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:it,defaultProperties:st,inspector:{sections:ke,fields:ct}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:ot,defaultProperties:at,inspector:{sections:ke,fields:Ae}}],ur=ae(se);function ae(e){let t=new Map;for(let n of e){lt(n,t);let i=ut(n);t.set(n.shaderId,Re(i))}let r=Object.freeze([...t.values()]);return Object.freeze({get(n){return typeof n=="string"?t.get(n)??null:null},list(){return r}})}function V(e,t,r,n,i,o,a,l){return{path:e,sectionId:t,order:r,control:n,labelKey:i,tooltipKey:o,defaultValue:a,updateClass:"uniform",...l}}function S(e,t,r,n,i,o,a={}){return V(e,t,r,"number",n,i,o,{binding:e.replace(/^properties\./,""),step:a.step??.05,displayPrecision:2,precision:2,...a})}function z(e,t,r,n,i,o,a,l){return V(e,r,n,"texture",i,o,"",{schemaPath:t,binding:a,updateClass:"texture",conditions:l})}function L(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function lt(e,t){if(!Se(e.shaderId)&&!Ie(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&&!mt(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);Pe(e.shaderId,e.propertiesSchema,"properties");let r=[];if(Ne(e.propertiesSchema,e.defaultProperties,"properties",r),r.length>0){let o=r[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${o.path} ${o.message}.`)}let n=new Set;for(let o of e.inspector.sections){if(!o.id.trim()||n.has(o.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${o.id}`);n.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(!n.has(o.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${o.path} references an unknown section.`);ft(e,o),i.add(o.path)}}function ut(e){let t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(r=>{if(r.control!=="number")return r;let n=Fe(t.propertiesSchema,r.schemaPath??r.path);return n?.kind!=="number"?r:{...r,...n.min!=null?{min:n.min}:{},...n.max!=null?{max:n.max}:{}}})}}}function ft(e,t){let r=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(let[i,o]of r)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(r.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 n=Fe(e.propertiesSchema,t.schemaPath??t.path);if(n?.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,n.min],["max",t.max,n.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(n.min!=null&&t.softMin!=null&&t.softMin<n.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(n.max!=null&&t.softMax!=null&&t.softMax>n.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function Pe(e,t,r){if(t.kind==="object"){for(let[n,i]of Object.entries(t.properties))Pe(e,i,`${r}.${n}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${r} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${r} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${r} 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 ${r} channels must be 3 or 4.`)}function mt(e){let t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function dt(e){let t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function Fe(e,t){let r=dt(t).replace(/^properties\./,"").split(".").filter(Boolean);if(r.length===0)return null;let n=e;for(let i of r){if(n.kind!=="object")return null;let o=n.properties[i];if(!o)return null;n=o}return n}function Ne(e,t,r,n){if(e.kind==="object"){if(!oe(t)){n.push({path:r,message:"must be an object"});return}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,o)||n.push({path:`${r}.${o}`,message:"is not supported by the selected shader"});for(let[o,a]of Object.entries(e.properties))t[o]!==void 0&&Ne(a,t[o],`${r}.${o}`,n);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){n.push({path:r,message:"must be a finite number"});return}e.min!=null&&t<e.min&&n.push({path:r,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&n.push({path:r,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&n.push({path:r,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?n.push({path:r,message:"must be a string"}):t===null&&!e.nullable&&n.push({path:r,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&n.push({path:r,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"];je(t,r,o,n,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){je(t,r,e.kind==="vec2"?["x","y"]:["x","y","z"],n,`a ${e.kind} object`);return}if(t===null)return;if(!oe(t)){n.push({path:r,message:"must be a texture reference object or null"});return}Object.keys(t).some(o=>o!=="url"&&o!=="textureAssetId")&&n.push({path:r,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())&&n.push({path:`${r}.${o}`,message:"must be a non-empty string"})}}function je(e,t,r,n,i){if(!oe(e)){n.push({path:t,message:`must be ${i}`});return}Object.keys(e).some(o=>!r.includes(o))&&n.push({path:t,message:`must contain only ${r.join(", ")}`});for(let o of r)(typeof e[o]!="number"||!Number.isFinite(e[o]))&&n.push({path:`${t}.${o}`,message:"must be a finite number"})}function Re(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))Re(t)}return e}function oe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}var pt=Object.freeze([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),bt=Object.freeze([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function O(e){return gt(new TextEncoder().encode(e))}function ee(e){return`sha256:${O(JSON.stringify(e))}`}function gt(e){let t=Math.ceil((e.length+9)/64)*64,r=new Uint8Array(t);r.set(e),r[e.length]=128;let n=new DataView(r.buffer);n.setUint32(t-8,Math.floor(e.length/536870912),!1),n.setUint32(t-4,e.length*8>>>0,!1);let i=[...pt],o=new Uint32Array(64);for(let a=0;a<r.length;a+=64){for(let u=0;u<16;u+=1)o[u]=n.getUint32(a+u*4,!1);for(let u=16;u<64;u+=1){let j=o[u-15],E=o[u-2],F=M(j,7)^M(j,18)^j>>>3,J=M(E,17)^M(E,19)^E>>>10;o[u]=o[u-16]+F+o[u-7]+J>>>0}let[l,d,I,D,f,p,c,P]=i;for(let u=0;u<64;u+=1){let j=M(f,6)^M(f,11)^M(f,25),E=f&p^~f&c,F=P+j+E+bt[u]+o[u]>>>0,J=M(l,2)^M(l,13)^M(l,22),_=l&d^l&I^d&I,Z=J+_>>>0;P=c,c=p,p=f,f=D+F>>>0,D=I,I=d,d=l,l=F+Z>>>0}i[0]=i[0]+l>>>0,i[1]=i[1]+d>>>0,i[2]=i[2]+I>>>0,i[3]=i[3]+D>>>0,i[4]=i[4]+f>>>0,i[5]=i[5]+p>>>0,i[6]=i[6]+c>>>0,i[7]=i[7]+P>>>0}return i.map(a=>a.toString(16).padStart(8,"0")).join("")}function M(e,t){return e>>>t|e<<32-t}var B="fps.plugin.materials",ce="@fps-games/plugin-materials";function Oe(e){let t=e?.[B];if(t==null)return null;if(!U(t)||t.schemaVersion!==1||typeof t.snapshotId!="string"||!Array.isArray(t.shaders))throw new Error("Materials Plugin snapshot is invalid. Run fps-editor-prepare again.");let r=structuredClone(t);return yt(r),Ce(r)}function ht(e){return ae([...se,...e?.shaders.map(t=>t.definition)??[]])}function yt(e){if(!/^sha256:[a-f0-9]{64}$/.test(e.snapshotId)||e.shaders.length===0)throw new Error("Materials Plugin snapshot identity is invalid. Run fps-editor-prepare again.");for(let r of e.shaders)if(!U(r)||!U(r.definition)||!U(r.program))throw new Error("Materials Plugin Shader snapshot is invalid. Run fps-editor-prepare again.");ht(e);for(let r of e.shaders){let{definition:n,program:i}=r;if(i.shaderId!==n.shaderId||i.definitionVersion!==n.version)throw new Error(`Material snapshot Definition identity does not match its program: ${n.shaderId}`);if(i.language!=="glsl"||!Te(i.vertexSourcePath)||!Te(i.fragmentSourcePath)||!/^[a-f0-9]{64}$/.test(i.vertexSourceHash)||!/^[a-f0-9]{64}$/.test(i.fragmentSourceHash)||typeof i.vertexSource!="string"||!i.vertexSource.trim()||typeof i.fragmentSource!="string"||!i.fragmentSource.trim())throw new Error(`Material snapshot program is invalid: ${n.shaderId}`);if(O(i.vertexSource)!==i.vertexSourceHash||O(i.fragmentSource)!==i.fragmentSourceHash)throw new Error(`Material snapshot source hash does not match its GLSL content: ${n.shaderId}`);if(!Array.isArray(i.attributes)||i.attributes.length===0||i.attributes.some(o=>!/^[A-Za-z_][A-Za-z0-9_]*$/.test(o))||new Set(i.attributes).size!==i.attributes.length)throw new Error(`Material snapshot attributes are invalid: ${n.shaderId}`);if(!["opaque","combine","add"].includes(i.alphaMode)||!U(i.enumUniformValues)||!U(i.frame)||!["on-demand","continuous"].includes(i.frame.mode))throw new Error(`Material snapshot rendering policy is invalid: ${n.shaderId}`)}let t={schemaVersion:e.schemaVersion,shaders:e.shaders};if(ee(t)!==e.snapshotId)throw new Error("Materials Plugin snapshot payload does not match its identity. Run fps-editor-prepare again.")}function Te(e){return typeof e=="string"&&!!e&&!e.startsWith("/")&&!e.includes("\\")&&!e.includes(":")&&e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function Ce(e){if(!e||typeof e!="object"||Object.isFrozen(e))return e;for(let t of Object.values(e))Ce(t);return Object.freeze(e)}function U(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}async function Ue(e,t){let r=t.plugins.find(I=>I.pluginId===B&&I.targets.includes("editor"));if(!r)return null;if(r.packageName!==ce)throw new Error(`Materials Plugin package must be ${ce}.`);if(r.config==null)return null;let n=A(r.config,"Materials Plugin config");if(n.schemaVersion!==1||!Array.isArray(n.shaders)||n.shaders.length===0)throw new Error("Materials Plugin config must use schemaVersion 1 and declare shaders.");let i=await ze(e),o=new Set,a=[];for(let I of n.shaders){let D=A(I,"Materials Plugin shader entry"),f=A(D.definition,"Materials Plugin Shader Definition"),p=A(D.program,"Materials Plugin shader program"),c=G(f.shaderId,"Material shaderId");if(o.has(c))throw new Error(`Duplicate Material shaderId: ${c}`);o.add(c);let P=f.version;if(!Number.isSafeInteger(P)||Number(P)<1)throw new Error(`Material Definition version must be a positive integer: ${c}`);if(f.runtimeKind!=="shader-material")throw new Error(`Material runtimeKind must be shader-material: ${c}`);if(p.language!=="glsl")throw new Error(`Material program language must be glsl: ${c}`);let u=_e(p.vertexSource,`Material vertexSource: ${c}`),j=_e(p.fragmentSource,`Material fragmentSource: ${c}`),E=await De(i,u),F=await De(i,j),J=Ve(A(f.inspector,"Material Inspector").fields,"Material Inspector fields"),_=new Map;for(let w of J){let b=A(w,"Material Inspector field"),g=G(b.path,"Material Inspector field path");if(_.has(g))throw new Error(`Duplicate Material Inspector field: ${c}:${g}`);if(_.set(g,b),b.updateClass!=="uniform")throw new Error(`Deployment ShaderMaterial only supports uniform fields: ${c}:${g}`);if(!["number","boolean","enum","color","vec2","vec3"].includes(String(b.control)))throw new Error(`Deployment ShaderMaterial does not support control: ${c}:${String(b.control)}`);le(b.binding,`Material Inspector binding: ${c}:${g}`);let N=Le(f.propertiesSchema,typeof b.schemaPath=="string"?b.schemaPath:g);if(!N||N.kind!==b.control)throw new Error(`Material Inspector field control does not match its schema: ${c}:${g}`);let Y=xt(f.defaultProperties,g);if(Y===void 0||JSON.stringify(Y)!==JSON.stringify(b.defaultValue))throw new Error(`Material Inspector field default must match defaultProperties: ${c}:${g}`)}let Z=H(p.enumUniformValues)?p.enumUniformValues:{};for(let[w,b]of Object.entries(Z)){let g=_.get(w),N=g?Le(f.propertiesSchema,g.schemaPath??w):null,Y=A(b,`Material enum uniform mapping: ${c}:${w}`);if(!g||g.control!=="enum"||N?.kind!=="enum"||!Array.isArray(N.values)||N.values.some(v=>typeof v!="string"||!Number.isFinite(Y[v]))||Object.keys(Y).some(v=>!N.values.includes(v)))throw new Error(`Material enum uniform mapping is invalid: ${c}:${w}`)}for(let[w,b]of _)if(b.control==="enum"&&!Object.prototype.hasOwnProperty.call(Z,w))throw new Error(`Material enum uniform mapping is required: ${c}:${w}`);let $=p.frame===void 0?{mode:"on-demand"}:A(p.frame,"Material frame");if($.mode!=="on-demand"&&$.mode!=="continuous")throw new Error(`Material frame mode is invalid: ${c}`);$.timeUniform!==void 0&&le($.timeUniform,`Material timeUniform: ${c}`),$.cameraPositionUniform!==void 0&&le($.cameraPositionUniform,`Material cameraPositionUniform: ${c}`);let we=p.alphaMode??"opaque";if(!["opaque","combine","add"].includes(String(we)))throw new Error(`Material alphaMode is invalid: ${c}`);a.push(Object.freeze({definition:f,program:Object.freeze({shaderId:c,definitionVersion:P,language:"glsl",vertexSourcePath:u,fragmentSourcePath:j,vertexSourceHash:O(E),fragmentSourceHash:O(F),vertexSource:E,fragmentSource:F,attributes:Object.freeze(p.attributes===void 0?["position","normal"]:Ve(p.attributes,"Material attributes").map(w=>G(w,"Material attribute"))),alphaMode:we,enumUniformValues:Object.freeze(structuredClone(Z)),frame:Object.freeze({mode:$.mode,...$.timeUniform?{timeUniform:G($.timeUniform,"Material timeUniform")}:{},...$.cameraPositionUniform?{cameraPositionUniform:G($.cameraPositionUniform,"Material cameraPositionUniform")}:{}})})}))}let l={schemaVersion:1,shaders:Object.freeze(a)},d=Object.freeze({...l,snapshotId:ee(l)});return Oe({[B]:d})}async function De(e,t){let r=ue.resolve(e,t),n=await ze(r).catch(()=>"");if(!n||n!==e&&!n.startsWith(`${e}${ue.sep}`))throw new Error(`Material shader source escapes the project root: ${t}`);if(!(await wt(n)).isFile())throw new Error(`Material shader source is not a file: ${t}`);return $t(n,"utf8")}function _e(e,t){let r=G(e,t);if(ue.isAbsolute(r)||r.includes("\\")||r.split("/").some(n=>!n||n==="."||n===".."))throw new Error(`${t} must be a normalized project-relative path.`);return r}function G(e,t){if(typeof e!="string"||!e.trim())throw new Error(`${t} must be a non-empty string.`);return e.trim()}function le(e,t){if(typeof e!="string"||!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw new Error(`${t} must be a GLSL identifier.`)}function Le(e,t){let r=H(e)?e:null;if(!r||typeof t!="string")return null;for(let n of t.replace(/^properties\./,"").split(".").filter(Boolean)){if(r.kind!=="object"||!H(r.properties)||!H(r.properties[n]))return null;r=r.properties[n]}return r}function xt(e,t){let r=e;for(let n of t.replace(/^properties\./,"").split(".").filter(Boolean)){if(!H(r))return;r=r[n]}return r}function Ve(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array.`);return e}function A(e,t){if(!H(e))throw new Error(`${t} must be an object.`);return e}function H(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}var At=s.dirname(jt(import.meta.url)),pe=s.resolve(At,".."),be=xe(process.argv.slice(2)),Pt=be.argv.includes("--reset-test-state"),Ge=be.argv.filter(e=>e!=="--reset-test-state");if(Ge.length>0)throw new Error(`Unexpected argument: ${Ge[0]}`);var h=await te(be.projectRoot),K=s.join(h,".fps-editor"),W=s.join(K,"deployments"),ge=s.join(K,"state"),Je=s.join(K,"current.json"),fe=s.join(ge,"runtime-bridge-token"),Ft=s.join(ge,"playwright-working-document-journal.json");Wt();await ye(h,K);await ye(K,W);await ye(K,ge,448);Pt&&await Q(Ft,{force:!0});await zt();var k=await _t(),C=JSON.parse(await ne(s.join(pe,"manifest.json"),"utf8"));Tt(C);var ie=await Ut(),He=await Ue(h,ie),Ze=Object.freeze({...He?{[B]:He}:{}}),Ye=Bt({projectDefinition:ie,pluginSnapshots:Ze});await he(pe,C.files);var Xe=Ht(C.files);k&&k.editorDistHash===C.build.distHash&&k.projectSourceHash===Ye&&k.deployment?.packageHash===Xe&&JSON.stringify(k.deployment?.manifest)===JSON.stringify(C)&&await Ot(k)&&(console.log("[fps-editor-server] existing deployment and static Project definition are current."),process.exit(0));var m=await Rt(pe,C,Xe),Nt=["a","b"].map(e=>({release:e,artifactId:`${m.id}-${e}`,rootPath:s.relative(h,s.join(m.rootPath,"public")),build:{...m.manifest.build,buildId:`${m.manifest.build.buildId}.release-${e}`}})),Qe={schemaVersion:3,preparedAt:new Date().toISOString(),editorDistHash:C.build.distHash,projectSourceHash:Ye,projectDefinition:ie,pluginSnapshots:Ze,deployment:{id:m.id,rootPath:s.relative(h,m.rootPath),packageHash:m.packageHash,manifest:m.manifest},workerEntry:s.relative(h,s.join(m.rootPath,m.manifest.entrypoints.worker)),serverEntry:s.relative(h,s.join(m.rootPath,m.manifest.entrypoints.server)),runtimeViteBridgeEntry:s.relative(h,s.join(m.rootPath,m.manifest.entrypoints.runtimeViteBridge)),builds:Nt,staged:k?.deployment?.id&&k.deployment.id!==m.id?{deploymentId:k.deployment.id}:null};await Gt(Je,Qe);await Lt(Qe);console.log([`[fps-editor-server] prepared deployment ${m.id}`,`for static Project ${ie.projectId}.`].join(" "));async function Rt(e,t,r){let n=await It(s.join(W,".install-"));try{for(let l of t.files){let d=s.join(n,l.path);await de(s.dirname(d),{recursive:!0}),await Be(s.join(e,l.path),d)}await Be(s.join(e,"manifest.json"),s.join(n,"manifest.json"));let i=`${t.version}-${r.slice(0,16)}`,o=s.join(W,i),a=await q(o).catch(()=>null);return a&&await Ct(e,o,t)?await Q(n,{recursive:!0,force:!0}):a?await Dt(n,o):await X(n,o),{id:i,rootPath:o,manifest:t,packageHash:r}}finally{await Q(n,{recursive:!0,force:!0}).catch(()=>{})}}function Tt(e){if(e?.schemaVersion!==2||e.artifactKind!=="fps-editor-deployment-package"||e.packageName!=="@fps-games/editor-deployment")throw new Error("Editor deployment manifest is invalid.");if(e.node?.range!==">=24 <27"||e.node?.bundled!==!1)throw new Error("Editor deployment Node.js contract is invalid.");if(typeof e.build?.version!="string"||typeof e.build?.distHash!="string"||typeof e.commitSha!="string")throw new Error("Editor deployment build identity is incomplete.");for(let t of["server","worker","browser","runtimeViteBridge"])if(typeof e.entrypoints?.[t]!="string")throw new Error(`Editor deployment ${t} entrypoint is missing.`);for(let t of["prepare","server","project","agent"])if(typeof e.binaries?.[t]!="string")throw new Error(`Editor deployment ${t} binary is missing.`);if(e.projectContentBundled!==!1)throw new Error("Editor deployment must not contain project content.")}async function he(e,t){if(!Array.isArray(t)||t.length===0)throw new Error("Editor deployment file manifest is empty.");for(let r of t){if(!ve(r.path))throw new Error(`Unsafe deployment file path: ${String(r.path)}.`);let n=await re(e,r.path);if(n.byteLength!==r.size||qt(n)!==r.sha256)throw new Error(`Editor deployment file integrity mismatch: ${r.path}.`)}}async function Ot(e){try{if(!e.deployment||typeof e.deployment.rootPath!="string"||!e.deployment.manifest||!Array.isArray(e.deployment.manifest.files))return!1;let t=s.resolve(h,e.deployment.rootPath);if(!$e(t,W))return!1;let r=s.relative(h,s.join(t,e.deployment.manifest.entrypoints.server)),n=s.relative(h,s.join(t,e.deployment.manifest.entrypoints.worker)),i=s.relative(h,s.join(t,e.deployment.manifest.entrypoints.runtimeViteBridge));if(e.serverEntry!==r||e.workerEntry!==n||e.runtimeViteBridgeEntry!==i)return!1;let o=[e.serverEntry,e.workerEntry,e.runtimeViteBridgeEntry,s.join(e.deployment.rootPath,e.deployment.manifest.entrypoints.browser)];return(await Promise.all(o.map(d=>q(s.join(h,d))))).every(d=>d.isFile()&&!d.isSymbolicLink())?(await he(t,e.deployment.manifest.files),(await re(t,"manifest.json")).equals(Buffer.from(`${JSON.stringify(e.deployment.manifest,null,2)}
|
|
3
|
+
`))):!1}catch{return!1}}async function Ct(e,t,r){try{await he(t,r.files);let[n,i]=await Promise.all([re(e,"manifest.json"),re(t,"manifest.json")]);return n.equals(i)}catch{return!1}}async function re(e,t){if(!ve(t))throw new Error(`Unsafe deployment file path: ${String(t)}.`);let r=await q(e);if(!r.isDirectory()||r.isSymbolicLink())throw new Error(`Editor deployment root is not a regular directory: ${e}.`);let n=await te(e),i=s.join(e,t),o=await q(i);if(!o.isFile()||o.isSymbolicLink())throw new Error(`Editor deployment file is not a regular file: ${t}.`);let a=await te(i),l=s.resolve(n,t);if(a!==l||!$e(a,n))throw new Error(`Editor deployment file escaped its deployment root: ${t}.`);return ne(i)}async function ye(e,t,r){await q(t).catch(a=>{if(qe(a)&&a.code==="ENOENT")return null;throw a})||await de(t,r===void 0?void 0:{mode:r}).catch(a=>{if(!qe(a)||a.code!=="EEXIST")throw a});let i=await q(t),o=await te(t);if(!i.isDirectory()||i.isSymbolicLink()||o!==t||!$e(o,e))throw new Error(`Editor deployment directory must be a regular project directory: ${t}.`)}async function Dt(e,t){let r=s.join(W,`.replace-${s.basename(t)}-${process.pid}-${We(6).toString("hex")}`);await X(t,r);try{await X(e,t)}catch(n){try{await X(r,t)}catch(i){throw new AggregateError([n,i],`Editor deployment replacement and rollback both failed for ${s.basename(t)}.`)}throw n}await Q(r,{recursive:!0,force:!0})}async function _t(){try{let e=JSON.parse(await ne(Je,"utf8"));return e?.schemaVersion===3?e:null}catch{return null}}async function Lt(e){let t=new Set([e.deployment.id,e.staged?.deploymentId].filter(Boolean));await Vt(W,t)}async function Vt(e,t){for(let r of await Mt(e,{withFileTypes:!0}))!r.isDirectory()||r.name.startsWith(".")||t.has(r.name)||await Q(s.join(e,r.name),{recursive:!0,force:!0})}async function zt(){(await ne(fe,"utf8").catch(()=>"")).trim()||(await Ke(fe,`${We(32).toString("base64url")}
|
|
4
|
+
`,{encoding:"utf8",mode:384}),await St(fe,384))}async function Ut(){let e=s.join(h,"fps.config.ts");if(!(await kt(e).catch(()=>null))?.isFile())throw new Error("fps.config.ts is required.");let r=await import(`${Et(e).href}?fps-editor-prepare=${Date.now()}`),n=r.default??r.fpsConfig;if(!n||typeof n!="object"||Array.isArray(n)||n.schemaVersion!==1||typeof n.projectId!="string"||!n.authoring||!Array.isArray(n.plugins))throw new Error("fps.config.ts must default-export a valid defineFpsProject() definition.");return n}function Bt(e){return me("sha256").update(JSON.stringify(e)).digest("hex")}async function Gt(e,t){await de(s.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.tmp`;await Ke(r,`${JSON.stringify(t,null,2)}
|
|
5
|
+
`),await X(r,e)}function ve(e){return typeof e=="string"&&e.length>0&&!e.includes("\\")&&!s.isAbsolute(e)&&!e.split("/").includes("..")}function $e(e,t){if(e===t)return!0;let r=s.relative(t,e);return r.length>0&&r!==".."&&!r.startsWith(`..${s.sep}`)&&!s.isAbsolute(r)}function Ht(e){return me("sha256").update(JSON.stringify(e)).digest("hex")}function qt(e){return me("sha256").update(e).digest("hex")}function qe(e){return e instanceof Error&&"code"in e}function Wt(){let e=Number.parseInt(process.versions.node.split(".")[0]??"",10);if(!Number.isSafeInteger(e)||e<24||e>=27)throw new Error(`prepare:server requires Node.js >=24 <27; current version is ${process.versions.node}.`)}
|