@fps-games/editor-deployment 0.2.3-beta.6 → 0.2.3-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/bin/fps-editor-prepare.mjs +3 -3
  2. package/bin/fps-editor-project.mjs +9 -9
  3. package/licenses/THIRD_PARTY_NOTICES.txt +2 -2
  4. package/manifest.json +216 -216
  5. package/npm-shrinkwrap.json +2 -2
  6. package/package.json +5 -5
  7. package/public/assets/animation-BJ8XM1EP.js.gz +0 -0
  8. package/public/assets/animationGroup-nIU37qTl.js.gz +0 -0
  9. package/public/assets/arcRotateCamera-Bpb6_-jM.js.gz +0 -0
  10. package/public/assets/babylon-core-B6Ot-GOK.js.gz +0 -0
  11. package/public/assets/babylon-core-DBdQTkWG.js.gz +0 -0
  12. package/public/assets/basisTextureLoader-xaH1TU2T.js.gz +0 -0
  13. package/public/assets/bumpVertex-CydMViY3.js.gz +0 -0
  14. package/public/assets/bumpVertex-bM0VcD-v.js.gz +0 -0
  15. package/public/assets/chromaticAberration.fragment-2LQpSY6n.js.gz +0 -0
  16. package/public/assets/chromaticAberration.fragment-CPC2jGBk.js.gz +0 -0
  17. package/public/assets/circleOfConfusion.fragment-DWehhKOk.js.gz +0 -0
  18. package/public/assets/circleOfConfusion.fragment-WIeIzKLd.js.gz +0 -0
  19. package/public/assets/clipPlaneFragment-BQiHvjzo.js.gz +0 -0
  20. package/public/assets/clipPlaneVertex-D5EB-X5S.js.gz +0 -0
  21. package/public/assets/color.fragment-0xZe_dSa.js.gz +0 -0
  22. package/public/assets/color.fragment-BQNpLnxa.js.gz +0 -0
  23. package/public/assets/color.vertex-0geH1BI8.js.gz +0 -0
  24. package/public/assets/color.vertex-qtb2-mc5.js.gz +0 -0
  25. package/public/assets/dds-IzbrFkh8.js.gz +0 -0
  26. package/public/assets/ddsTextureLoader-D3ROWbwv.js.gz +0 -0
  27. package/public/assets/default.fragment-BAHNlmD5.js.gz +0 -0
  28. package/public/assets/default.fragment-D3MA9CRV.js.gz +0 -0
  29. package/public/assets/default.vertex-B1KwtIUb.js.gz +0 -0
  30. package/public/assets/default.vertex-Mne8Sq_G.js.gz +0 -0
  31. package/public/assets/defaultUboDeclaration-00t3po2f.js.gz +0 -0
  32. package/public/assets/defaultUboDeclaration-DAuovVEA.js.gz +0 -0
  33. package/public/assets/depth.fragment-Da86gbwP.js.gz +0 -0
  34. package/public/assets/depth.vertex-DPT_V_9f.js.gz +0 -0
  35. package/public/assets/depthBoxBlur.fragment-tYNfbhdh.js.gz +0 -0
  36. package/public/assets/depthBoxBlur.fragment-zrJ9DLe5.js.gz +0 -0
  37. package/public/assets/depthOfFieldMerge.fragment-Car-ami-.js.gz +0 -0
  38. package/public/assets/depthOfFieldMerge.fragment-eO7Ot6AR.js.gz +0 -0
  39. package/public/assets/easing-BdugUZqW.js.gz +0 -0
  40. package/public/assets/editor-core-plugin-host-c2002442.js.gz +0 -0
  41. package/public/assets/exrTextureLoader-DYq9r93V.js.gz +0 -0
  42. package/public/assets/flowGraphArrayIndexBlock-C3zDMjuo.js.gz +0 -0
  43. package/public/assets/flowGraphBezierCurveEasingBlock-DDoK8_8l.js.gz +0 -0
  44. package/public/assets/flowGraphBinaryOperationBlock-BKlR9DS-.js.gz +0 -0
  45. package/public/assets/flowGraphBranchBlock-Bup839Qd.js.gz +0 -0
  46. package/public/assets/flowGraphCachedOperationBlock-DnmbMTY7.js.gz +0 -0
  47. package/public/assets/flowGraphCancelDelayBlock-B9MfNdwj.js.gz +0 -0
  48. package/public/assets/flowGraphCodeExecutionBlock-auEOflkO.js.gz +0 -0
  49. package/public/assets/flowGraphConditionalDataBlock-BAia9WED.js.gz +0 -0
  50. package/public/assets/flowGraphConsoleLogBlock--6MvrOCG.js.gz +0 -0
  51. package/public/assets/flowGraphConstantBlock-FOfDeLIf.js.gz +0 -0
  52. package/public/assets/flowGraphContextBlock-BP5dmyKZ.js.gz +0 -0
  53. package/public/assets/flowGraphCounterBlock-DjKMvUGB.js.gz +0 -0
  54. package/public/assets/flowGraphDataSwitchBlock-gSJm410f.js.gz +0 -0
  55. package/public/assets/flowGraphDebounceBlock-CO5ptvWG.js.gz +0 -0
  56. package/public/assets/flowGraphDoNBlock-Bf26kum1.js.gz +0 -0
  57. package/public/assets/flowGraphEasingBlock-DtnL-aP_.js.gz +0 -0
  58. package/public/assets/flowGraphFlipFlopBlock-Bh_IN41P.js.gz +0 -0
  59. package/public/assets/flowGraphForLoopBlock-C3CLz9Iv.js.gz +0 -0
  60. package/public/assets/flowGraphFunctionReferenceBlock-Bz40tn10.js.gz +0 -0
  61. package/public/assets/flowGraphGetAssetBlock-DYP1H9Hj.js.gz +0 -0
  62. package/public/assets/flowGraphGetPropertyBlock-B6XVNxDR.js.gz +0 -0
  63. package/public/assets/flowGraphGetVariableBlock-BvaNDTu7.js.gz +0 -0
  64. package/public/assets/flowGraphIndexOfBlock-qm1Ab3oN.js.gz +0 -0
  65. package/public/assets/flowGraphInterpolationBlock-CmG25tSZ.js.gz +0 -0
  66. package/public/assets/flowGraphJsonPointerParserBlock-C8rfhc4j.js.gz +0 -0
  67. package/public/assets/flowGraphMathBlocks-BdiMH3MQ.js.gz +0 -0
  68. package/public/assets/flowGraphMathCombineExtractBlocks-CXvPWL3b.js.gz +0 -0
  69. package/public/assets/flowGraphMatrixMathBlocks-Cal7WQ7i.js.gz +0 -0
  70. package/public/assets/flowGraphMeshPickEventBlock-B8EU7KmL.js.gz +0 -0
  71. package/public/assets/flowGraphMultiGateBlock-GMcU5jv7.js.gz +0 -0
  72. package/public/assets/flowGraphPauseAnimationBlock-BKUeGFEQ.js.gz +0 -0
  73. package/public/assets/flowGraphPlayAnimationBlock-vvCkTY_Z.js.gz +0 -0
  74. package/public/assets/flowGraphPointerOutEventBlock-EEJ78HAF.js.gz +0 -0
  75. package/public/assets/flowGraphPointerOverEventBlock-QMzEzISN.js.gz +0 -0
  76. package/public/assets/flowGraphReceiveCustomEventBlock-B5jEx7xE.js.gz +0 -0
  77. package/public/assets/flowGraphSceneReadyEventBlock-MjViOZsL.js.gz +0 -0
  78. package/public/assets/flowGraphSceneTickEventBlock-lyjGPNYo.js.gz +0 -0
  79. package/public/assets/flowGraphSendCustomEventBlock-M0LLhV7D.js.gz +0 -0
  80. package/public/assets/flowGraphSequenceBlock-DocFLI4M.js.gz +0 -0
  81. package/public/assets/flowGraphSetDelayBlock-BDoJj0I_.js.gz +0 -0
  82. package/public/assets/flowGraphSetPropertyBlock-9jao3AHa.js.gz +0 -0
  83. package/public/assets/flowGraphSetVariableBlock-buwJMv9v.js.gz +0 -0
  84. package/public/assets/flowGraphStopAnimationBlock-CDWhmsC8.js.gz +0 -0
  85. package/public/assets/flowGraphSwitchBlock-DG5ReWET.js.gz +0 -0
  86. package/public/assets/flowGraphThrottleBlock-Bgyx9UOo.js.gz +0 -0
  87. package/public/assets/flowGraphTransformCoordinatesSystemBlock-CUUmRj2j.js.gz +0 -0
  88. package/public/assets/flowGraphTypeToTypeBlocks-D7N8ZT_V.js.gz +0 -0
  89. package/public/assets/flowGraphUnaryOperationBlock-Bu73VxMC.js.gz +0 -0
  90. package/public/assets/flowGraphVectorMathBlocks-CqVzbdAw.js.gz +0 -0
  91. package/public/assets/flowGraphWaitAllBlock-xmBmiluG.js.gz +0 -0
  92. package/public/assets/flowGraphWhileLoopBlock-Ct2rHXgO.js.gz +0 -0
  93. package/public/assets/fogFragmentDeclaration-C-9jZMBi.js.gz +0 -0
  94. package/public/assets/fogFragmentDeclaration-CpAbKvc3.js.gz +0 -0
  95. package/public/assets/glowBlurPostProcess.fragment-C77x1kl1.js.gz +0 -0
  96. package/public/assets/glowBlurPostProcess.fragment-C7miknry.js.gz +0 -0
  97. package/public/assets/glowMapGeneration.fragment-BAqrUGS4.js.gz +0 -0
  98. package/public/assets/glowMapGeneration.fragment-CMvy-ILZ.js.gz +0 -0
  99. package/public/assets/glowMapGeneration.vertex-BThT8Jce.js.gz +0 -0
  100. package/public/assets/glowMapGeneration.vertex-mq9WR5EZ.js.gz +0 -0
  101. package/public/assets/glowMapMerge.fragment-BtMIQDli.js.gz +0 -0
  102. package/public/assets/glowMapMerge.fragment-CYj1SIfc.js.gz +0 -0
  103. package/public/assets/glowMapMerge.vertex-BilMgMCX.js.gz +0 -0
  104. package/public/assets/glowMapMerge.vertex-ChJNqQPz.js.gz +0 -0
  105. package/public/assets/grain.fragment-D6WdAOpZ.js.gz +0 -0
  106. package/public/assets/grain.fragment-DCpxKIZw.js.gz +0 -0
  107. package/public/assets/harmonicsFunctions-B5nauyTb.js.gz +0 -0
  108. package/public/assets/harmonicsFunctions-DVIRrUZs.js.gz +0 -0
  109. package/public/assets/hdrTextureLoader-Dfs_Fv5B.js.gz +0 -0
  110. package/public/assets/hemisphericLight-BkYyeXbK.js.gz +0 -0
  111. package/public/assets/iesTextureLoader-I2E-BXCc.js.gz +0 -0
  112. package/public/assets/index-CzHwtW4R.js.gz +0 -0
  113. package/public/assets/index-Dk6-vu7X.js +1 -0
  114. package/public/assets/index-Dk6-vu7X.js.br +0 -0
  115. package/public/assets/index-Dk6-vu7X.js.gz +0 -0
  116. package/public/assets/instancesDeclaration-DcwHJpHY.js.gz +0 -0
  117. package/public/assets/ktxTextureLoader-zpgT--10.js.gz +0 -0
  118. package/public/assets/lazy-CI-V5lCV.js.gz +0 -0
  119. package/public/assets/lod.fragment-B28SQFUx.js.gz +0 -0
  120. package/public/assets/lod.fragment-DOjU_E37.js.gz +0 -0
  121. package/public/assets/lodCube.fragment-B_ALsGmh.js.gz +0 -0
  122. package/public/assets/lodCube.fragment-CzeVIOa3.js.gz +0 -0
  123. package/public/assets/logDepthFragment-BaJ2YjZ0.js.gz +0 -0
  124. package/public/assets/logDepthVertex-B8jNoEwN.js.gz +0 -0
  125. package/public/assets/logDepthVertex-xgQTn7wg.js.gz +0 -0
  126. package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.gz +0 -0
  127. package/public/assets/meshUboDeclaration-C5p-TivH.js.gz +0 -0
  128. package/public/assets/meshUboDeclaration-DKldQKni.js.gz +0 -0
  129. package/public/assets/morphTargetsVertex-BDbfSote.js.gz +0 -0
  130. package/public/assets/oitFinalSimpleBlend.fragment-DtE63qrD.js.gz +0 -0
  131. package/public/assets/oitFinalSimpleBlend.fragment-ZwpH3v_v.js.gz +0 -0
  132. package/public/assets/oitFragment-B8hFhX-8.js.gz +0 -0
  133. package/public/assets/oitFragment-B_HlWcYZ.js.gz +0 -0
  134. package/public/assets/openpbrMaterial-t_lYoXh4.js.gz +0 -0
  135. package/public/assets/outline.fragment-DEsg98mo.js.gz +0 -0
  136. package/public/assets/outline.fragment-WqsugjI-.js.gz +0 -0
  137. package/public/assets/outline.vertex-CVL3AfNh.js.gz +0 -0
  138. package/public/assets/outline.vertex-CtQ-HC3X.js.gz +0 -0
  139. package/public/assets/passCube.fragment-CHI4OPgd.js.gz +0 -0
  140. package/public/assets/passCube.fragment-DLbzh6pI.js.gz +0 -0
  141. package/public/assets/pbr.fragment-DHPEcGrm.js.gz +0 -0
  142. package/public/assets/pbr.fragment-KiX_RvyZ.js.gz +0 -0
  143. package/public/assets/pbr.vertex-CVSRg4tx.js.gz +0 -0
  144. package/public/assets/pbr.vertex-Dp30Rtkl.js.gz +0 -0
  145. package/public/assets/playable-sdk-Cz5ms1M8.js +8 -0
  146. package/public/assets/playable-sdk-Cz5ms1M8.js.br +0 -0
  147. package/public/assets/playable-sdk-Cz5ms1M8.js.gz +0 -0
  148. package/public/assets/playable-standard-project-CgBNJ6kY.js +5070 -0
  149. package/public/assets/playable-standard-project-CgBNJ6kY.js.br +0 -0
  150. package/public/assets/playable-standard-project-CgBNJ6kY.js.gz +0 -0
  151. package/public/assets/rgbdDecode.fragment-CU4ChTYE.js.gz +0 -0
  152. package/public/assets/rgbdDecode.fragment-DhrCd3U4.js.gz +0 -0
  153. package/public/assets/rgbdEncode.fragment-Bt1zaovT.js.gz +0 -0
  154. package/public/assets/rgbdEncode.fragment-CfKDkRU3.js.gz +0 -0
  155. package/public/assets/sceneLoader-DS5g2vTC.js.gz +0 -0
  156. package/public/assets/screenSpaceCurvature.fragment-Od67z-rQ.js.gz +0 -0
  157. package/public/assets/selection.fragment-CRMhdE35.js.gz +0 -0
  158. package/public/assets/selection.fragment-cSqXB6nx.js.gz +0 -0
  159. package/public/assets/selection.vertex-B5sPJWi2.js.gz +0 -0
  160. package/public/assets/selection.vertex-Dp4qd1GF.js.gz +0 -0
  161. package/public/assets/selectionOutline.fragment-CaYdhbIY.js.gz +0 -0
  162. package/public/assets/selectionOutline.fragment-RBpUe89m.js.gz +0 -0
  163. package/public/assets/shadowMap.fragment-BecpzSny.js.gz +0 -0
  164. package/public/assets/shadowMap.fragment-BhrOFpmK.js.gz +0 -0
  165. package/public/assets/shadowMap.vertex-DV4Ec23Y.js.gz +0 -0
  166. package/public/assets/shadowMap.vertex-Dpx2-6XS.js.gz +0 -0
  167. package/public/assets/shadowMapFragmentSoftTransparentShadow-BHumE7-J.js.gz +0 -0
  168. package/public/assets/shadowMapFragmentSoftTransparentShadow-CrPC6Hns.js.gz +0 -0
  169. package/public/assets/sharpen.fragment-CPdQPlDe.js.gz +0 -0
  170. package/public/assets/textureMerger.fragment-BNxx2w1v.js.gz +0 -0
  171. package/public/assets/textureMerger.fragment-CPq4n9w5.js.gz +0 -0
  172. package/public/assets/tgaTextureLoader-B7dlONGx.js.gz +0 -0
  173. package/public/assets/vertexColorMixing-BUQkJeP0.js.gz +0 -0
  174. package/public/assets/vertexColorMixing-Co5x3WYA.js.gz +0 -0
  175. package/public/assets/volumetricLightingBlendVolume.fragment-D01l1w1u.js.gz +0 -0
  176. package/public/assets/volumetricLightingBlendVolume.fragment-Dq5kceRW.js.gz +0 -0
  177. package/public/assets/volumetricLightingRenderVolume.fragment-BCxtzv0C.js.gz +0 -0
  178. package/public/assets/volumetricLightingRenderVolume.fragment-DwEKCs2S.js.gz +0 -0
  179. package/public/assets/volumetricLightingRenderVolume.vertex-CNPaSIo7.js.gz +0 -0
  180. package/public/assets/volumetricLightingRenderVolume.vertex-EiQlWi_X.js.gz +0 -0
  181. package/public/assets/webAudioBus-DYpSKoOA.js.gz +0 -0
  182. package/public/assets/webAudioMainBus-CP3f56US.js.gz +0 -0
  183. package/public/assets/workerPool-H9Ji3mCo.js.gz +0 -0
  184. package/public/index.html +3 -3
  185. package/public/index.html.br +0 -0
  186. package/public/index.html.gz +0 -0
  187. package/runtime/editor-control-plane.mjs +3 -3
  188. package/worker/editor-service-worker.mjs +23 -23
  189. package/public/assets/index-nxfO_jYU.js +0 -1
  190. package/public/assets/index-nxfO_jYU.js.br +0 -0
  191. package/public/assets/index-nxfO_jYU.js.gz +0 -0
  192. package/public/assets/playable-sdk-D6RL-8B7.js +0 -135
  193. package/public/assets/playable-sdk-D6RL-8B7.js.br +0 -0
  194. package/public/assets/playable-sdk-D6RL-8B7.js.gz +0 -0
  195. package/public/assets/playable-standard-project-CkKWpnr-.js +0 -4943
  196. package/public/assets/playable-standard-project-CkKWpnr-.js.br +0 -0
  197. package/public/assets/playable-standard-project-CkKWpnr-.js.gz +0 -0
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import{createHash as y,randomBytes as O}from"node:crypto";import{chmod as J,copyFile as k,mkdir as u,mkdtemp as V,readFile as m,readdir as T,rename as x,rm as l,stat as w,writeFile as F}from"node:fs/promises";import{fileURLToPath as C,pathToFileURL as B}from"node:url";import e from"node:path";import N from"node:path";function $(t){let r=[],o;for(let i=0;i<t.length;i+=1){let s=t[i];if(s!=="--project-root"&&!s.startsWith("--project-root=")){r.push(s);continue}if(o!==void 0)throw new Error("--project-root may only be provided once.");let a=s==="--project-root"?t[++i]:s.slice(15);if(a===void 0||!a.trim()||a.startsWith("--"))throw new Error("--project-root requires a non-empty path.");o=a}return{argv:r,projectRoot:N.resolve(process.cwd(),o??"."),explicit:o!==void 0}}var L=e.dirname(C(import.meta.url)),g=e.resolve(L,".."),j=$(process.argv.slice(2)),U=j.argv.includes("--reset-test-state"),D=j.argv.filter(t=>t!=="--reset-test-state");if(D.length>0)throw new Error(`Unexpected argument: ${D[0]}`);var p=j.projectRoot,v=e.join(p,".fps-editor"),f=e.join(v,"deployments"),b=e.join(v,"state"),R=e.join(v,"current.json"),h=e.join(b,"runtime-bridge-token"),q=e.join(b,"playwright-working-document-journal.json");nt();U&&await l(q,{force:!0});await u(f,{recursive:!0});await u(b,{recursive:!0,mode:448});await Z();var c=await Q(),d=JSON.parse(await m(e.join(g,"manifest.json"),"utf8"));z(d);var E=await _(),A=tt(E);await K(g,d.files);var H=rt(d.files);c&&c.editorDistHash===d.build.distHash&&c.projectSourceHash===A&&c.deployment?.packageHash===H&&await G(c)&&(console.log("[fps-editor-server] existing deployment and static Project definition are current."),process.exit(0));var n=await W(g,d,H),M=["a","b"].map(t=>({release:t,artifactId:`${n.id}-${t}`,rootPath:e.relative(p,e.join(n.rootPath,"public")),build:{...n.manifest.build,buildId:`${n.manifest.build.buildId}.release-${t}`}})),I={schemaVersion:3,preparedAt:new Date().toISOString(),editorDistHash:d.build.distHash,projectSourceHash:A,projectDefinition:E,deployment:{id:n.id,rootPath:e.relative(p,n.rootPath),packageHash:n.packageHash,manifest:n.manifest},workerEntry:e.relative(p,e.join(n.rootPath,n.manifest.entrypoints.worker)),serverEntry:e.relative(p,e.join(n.rootPath,n.manifest.entrypoints.server)),builds:M,staged:c?.deployment?.id&&c.deployment.id!==n.id?{deploymentId:c.deployment.id}:null};await et(R,I);await X(I);console.log([`[fps-editor-server] prepared deployment ${n.id}`,`for static Project ${E.projectId}.`].join(" "));async function W(t,r,o){let i=await V(e.join(f,".install-"));try{for(let P of r.files){let S=e.join(i,P.path);await u(e.dirname(S),{recursive:!0}),await k(e.join(t,P.path),S)}await k(e.join(t,"manifest.json"),e.join(i,"manifest.json"));let s=`${r.version}-${o.slice(0,16)}`,a=e.join(f,s);return(await w(a).catch(()=>null))?.isDirectory()?await l(i,{recursive:!0,force:!0}):await x(i,a),{id:s,rootPath:a,manifest:r,packageHash:o}}finally{await l(i,{recursive:!0,force:!0}).catch(()=>{})}}function z(t){if(t?.schemaVersion!==2||t.artifactKind!=="fps-editor-deployment-package"||t.packageName!=="@fps-games/editor-deployment")throw new Error("Editor deployment manifest is invalid.");if(t.node?.range!==">=24 <27"||t.node?.bundled!==!1)throw new Error("Editor deployment Node.js contract is invalid.");if(typeof t.build?.version!="string"||typeof t.build?.distHash!="string"||typeof t.commitSha!="string")throw new Error("Editor deployment build identity is incomplete.");for(let r of["server","worker","browser"])if(typeof t.entrypoints?.[r]!="string")throw new Error(`Editor deployment ${r} entrypoint is missing.`);for(let r of["prepare","server","project","agent"])if(typeof t.binaries?.[r]!="string")throw new Error(`Editor deployment ${r} binary is missing.`);if(t.projectContentBundled!==!1)throw new Error("Editor deployment must not contain project content.")}async function K(t,r){if(!Array.isArray(r)||r.length===0)throw new Error("Editor deployment file manifest is empty.");for(let o of r){if(!ot(o.path))throw new Error(`Unsafe deployment file path: ${String(o.path)}.`);let i=await m(e.join(t,o.path));if(i.byteLength!==o.size||it(i)!==o.sha256)throw new Error(`Editor deployment file integrity mismatch: ${o.path}.`)}}async function G(t){try{let r=[t.serverEntry,t.workerEntry,e.join(t.deployment.rootPath,t.deployment.manifest.entrypoints.browser)];return(await Promise.all(r.map(o=>w(e.join(p,o))))).every(o=>o.isFile())}catch{return!1}}async function Q(){try{let t=JSON.parse(await m(R,"utf8"));return t?.schemaVersion===3?t:null}catch{return null}}async function X(t){let r=new Set([t.deployment.id,t.staged?.deploymentId].filter(Boolean));await Y(f,r)}async function Y(t,r){for(let o of await T(t,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||r.has(o.name)||await l(e.join(t,o.name),{recursive:!0,force:!0})}async function Z(){(await m(h,"utf8").catch(()=>"")).trim()||(await F(h,`${O(32).toString("base64url")}
3
- `,{encoding:"utf8",mode:384}),await J(h,384))}async function _(){let t=e.join(p,"fps.config.ts");if(!(await w(t).catch(()=>null))?.isFile())throw new Error("fps.config.ts is required.");let o=await import(`${B(t).href}?fps-editor-prepare=${Date.now()}`),i=o.default??o.fpsConfig;if(!i||typeof i!="object"||Array.isArray(i)||i.schemaVersion!==1||typeof i.projectId!="string"||!i.authoring||!Array.isArray(i.plugins))throw new Error("fps.config.ts must default-export a valid defineFpsProject() definition.");return i}function tt(t){return y("sha256").update(JSON.stringify(t)).digest("hex")}async function et(t,r){await u(e.dirname(t),{recursive:!0});let o=`${t}.${process.pid}.tmp`;await F(o,`${JSON.stringify(r,null,2)}
4
- `),await x(o,t)}function ot(t){return typeof t=="string"&&t.length>0&&!t.includes("\\")&&!e.isAbsolute(t)&&!t.split("/").includes("..")}function rt(t){return y("sha256").update(JSON.stringify(t)).digest("hex")}function it(t){return y("sha256").update(t).digest("hex")}function nt(){let t=Number.parseInt(process.versions.node.split(".")[0]??"",10);if(!Number.isSafeInteger(t)||t<24||t>=27)throw new Error(`prepare:server requires Node.js >=24 <27; current version is ${process.versions.node}.`)}
2
+ import{createHash as w,randomBytes as z}from"node:crypto";import{chmod as K,copyFile as x,mkdir as u,mkdtemp as G,readFile as m,readdir as Q,rename as N,rm as l,stat as g,writeFile as A}from"node:fs/promises";import{fileURLToPath as X,pathToFileURL as Y}from"node:url";import r from"node:path";import T from"node:path";function R(t){let e=[],o;for(let i=0;i<t.length;i+=1){let s=t[i];if(s!=="--project-root"&&!s.startsWith("--project-root=")){e.push(s);continue}if(o!==void 0)throw new Error("--project-root may only be provided once.");let a=s==="--project-root"?t[++i]:s.slice(15);if(a===void 0||!a.trim()||a.startsWith("--"))throw new Error("--project-root requires a non-empty path.");o=a}return{argv:e,projectRoot:T.resolve(process.cwd(),o??"."),explicit:o!==void 0}}import{existsSync as J,statSync as M}from"node:fs";import{registerHooks as V}from"node:module";import D from"node:path";import{fileURLToPath as W,pathToFileURL as C}from"node:url";var k=[".ts",".mts",".js",".mjs",".cjs"];async function F(t){let e=V({resolve:B});try{return await import(t)}finally{e.deregister()}}function B(t,e,o){try{return o(t,e)}catch(i){if(i?.code!=="ERR_MODULE_NOT_FOUND"||!e.parentURL?.startsWith("file:")||!t.startsWith("./")&&!t.startsWith("../"))throw i;let s=new URL(t,e.parentURL);if(s.protocol!=="file:"||D.extname(s.pathname))throw i;let a=W(s);for(let h of q(a))if(_(h))return o(C(h).href,e);throw i}}function q(t){return[...k.map(e=>`${t}${e}`),...k.map(e=>D.join(t,`index${e}`))]}function _(t){try{return J(t)&&M(t).isFile()}catch{return!1}}var Z=r.dirname(X(import.meta.url)),j=r.resolve(Z,".."),v=R(process.argv.slice(2)),tt=v.argv.includes("--reset-test-state"),H=v.argv.filter(t=>t!=="--reset-test-state");if(H.length>0)throw new Error(`Unexpected argument: ${H[0]}`);var p=v.projectRoot,b=r.join(p,".fps-editor"),f=r.join(b,"deployments"),E=r.join(b,"state"),U=r.join(b,"current.json"),y=r.join(E,"runtime-bridge-token"),et=r.join(E,"playwright-working-document-journal.json");wt();tt&&await l(et,{force:!0});await u(f,{recursive:!0});await u(E,{recursive:!0,mode:448});await dt();var c=await at(),d=JSON.parse(await m(r.join(j,"manifest.json"),"utf8"));it(d);var P=await lt(),I=ft(P);await nt(j,d.files);var O=ht(d.files);c&&c.editorDistHash===d.build.distHash&&c.projectSourceHash===I&&c.deployment?.packageHash===O&&await st(c)&&(console.log("[fps-editor-server] existing deployment and static Project definition are current."),process.exit(0));var n=await rt(j,d,O),ot=["a","b"].map(t=>({release:t,artifactId:`${n.id}-${t}`,rootPath:r.relative(p,r.join(n.rootPath,"public")),build:{...n.manifest.build,buildId:`${n.manifest.build.buildId}.release-${t}`}})),L={schemaVersion:3,preparedAt:new Date().toISOString(),editorDistHash:d.build.distHash,projectSourceHash:I,projectDefinition:P,deployment:{id:n.id,rootPath:r.relative(p,n.rootPath),packageHash:n.packageHash,manifest:n.manifest},workerEntry:r.relative(p,r.join(n.rootPath,n.manifest.entrypoints.worker)),serverEntry:r.relative(p,r.join(n.rootPath,n.manifest.entrypoints.server)),builds:ot,staged:c?.deployment?.id&&c.deployment.id!==n.id?{deploymentId:c.deployment.id}:null};await ut(U,L);await ct(L);console.log([`[fps-editor-server] prepared deployment ${n.id}`,`for static Project ${P.projectId}.`].join(" "));async function rt(t,e,o){let i=await G(r.join(f,".install-"));try{for(let S of e.files){let $=r.join(i,S.path);await u(r.dirname($),{recursive:!0}),await x(r.join(t,S.path),$)}await x(r.join(t,"manifest.json"),r.join(i,"manifest.json"));let s=`${e.version}-${o.slice(0,16)}`,a=r.join(f,s);return(await g(a).catch(()=>null))?.isDirectory()?await l(i,{recursive:!0,force:!0}):await N(i,a),{id:s,rootPath:a,manifest:e,packageHash:o}}finally{await l(i,{recursive:!0,force:!0}).catch(()=>{})}}function it(t){if(t?.schemaVersion!==2||t.artifactKind!=="fps-editor-deployment-package"||t.packageName!=="@fps-games/editor-deployment")throw new Error("Editor deployment manifest is invalid.");if(t.node?.range!==">=24 <27"||t.node?.bundled!==!1)throw new Error("Editor deployment Node.js contract is invalid.");if(typeof t.build?.version!="string"||typeof t.build?.distHash!="string"||typeof t.commitSha!="string")throw new Error("Editor deployment build identity is incomplete.");for(let e of["server","worker","browser"])if(typeof t.entrypoints?.[e]!="string")throw new Error(`Editor deployment ${e} entrypoint is missing.`);for(let e of["prepare","server","project","agent"])if(typeof t.binaries?.[e]!="string")throw new Error(`Editor deployment ${e} binary is missing.`);if(t.projectContentBundled!==!1)throw new Error("Editor deployment must not contain project content.")}async function nt(t,e){if(!Array.isArray(e)||e.length===0)throw new Error("Editor deployment file manifest is empty.");for(let o of e){if(!mt(o.path))throw new Error(`Unsafe deployment file path: ${String(o.path)}.`);let i=await m(r.join(t,o.path));if(i.byteLength!==o.size||yt(i)!==o.sha256)throw new Error(`Editor deployment file integrity mismatch: ${o.path}.`)}}async function st(t){try{let e=[t.serverEntry,t.workerEntry,r.join(t.deployment.rootPath,t.deployment.manifest.entrypoints.browser)];return(await Promise.all(e.map(o=>g(r.join(p,o))))).every(o=>o.isFile())}catch{return!1}}async function at(){try{let t=JSON.parse(await m(U,"utf8"));return t?.schemaVersion===3?t:null}catch{return null}}async function ct(t){let e=new Set([t.deployment.id,t.staged?.deploymentId].filter(Boolean));await pt(f,e)}async function pt(t,e){for(let o of await Q(t,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||e.has(o.name)||await l(r.join(t,o.name),{recursive:!0,force:!0})}async function dt(){(await m(y,"utf8").catch(()=>"")).trim()||(await A(y,`${z(32).toString("base64url")}
3
+ `,{encoding:"utf8",mode:384}),await K(y,384))}async function lt(){let t=r.join(p,"fps.config.ts");if(!(await g(t).catch(()=>null))?.isFile())throw new Error("fps.config.ts is required.");let o=await F(`${Y(t).href}?fps-editor-prepare=${Date.now()}`),i=o.default??o.fpsConfig;if(!i||typeof i!="object"||Array.isArray(i)||i.schemaVersion!==1||typeof i.projectId!="string"||!i.authoring||!Array.isArray(i.plugins))throw new Error("fps.config.ts must default-export a valid defineFpsProject() definition.");return i}function ft(t){return w("sha256").update(JSON.stringify(t)).digest("hex")}async function ut(t,e){await u(r.dirname(t),{recursive:!0});let o=`${t}.${process.pid}.tmp`;await A(o,`${JSON.stringify(e,null,2)}
4
+ `),await N(o,t)}function mt(t){return typeof t=="string"&&t.length>0&&!t.includes("\\")&&!r.isAbsolute(t)&&!t.split("/").includes("..")}function ht(t){return w("sha256").update(JSON.stringify(t)).digest("hex")}function yt(t){return w("sha256").update(t).digest("hex")}function wt(){let t=Number.parseInt(process.versions.node.split(".")[0]??"",10);if(!Number.isSafeInteger(t)||t<24||t>=27)throw new Error(`prepare:server requires Node.js >=24 <27; current version is ${process.versions.node}.`)}