@fps-games/editor 0.2.1-beta.3 → 0.2.1-beta.4

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 (514) hide show
  1. package/dist/build-info.json +44 -44
  2. package/dist/editor-commands/capabilities/assets.d.ts +8 -0
  3. package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
  4. package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
  5. package/dist/editor-commands/capabilities/assets.js.map +1 -0
  6. package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
  7. package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
  8. package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
  9. package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
  10. package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
  11. package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
  12. package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
  13. package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
  14. package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
  15. package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
  16. package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
  17. package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
  18. package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
  19. package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
  20. package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
  21. package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
  22. package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
  23. package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
  24. package/dist/editor-commands/capabilities/scene-objects.js +480 -0
  25. package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
  26. package/dist/editor-commands/capabilities/selection.d.ts +5 -0
  27. package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
  28. package/dist/editor-commands/capabilities/selection.js +60 -0
  29. package/dist/editor-commands/capabilities/selection.js.map +1 -0
  30. package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
  31. package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
  32. package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
  33. package/dist/editor-commands/capabilities/shadows.js.map +1 -0
  34. package/dist/editor-commands/capabilities/transform.d.ts +5 -0
  35. package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
  36. package/dist/editor-commands/capabilities/transform.js +164 -0
  37. package/dist/editor-commands/capabilities/transform.js.map +1 -0
  38. package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
  39. package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
  40. package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
  41. package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
  42. package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
  43. package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
  44. package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
  45. package/dist/editor-commands/capabilities/viewport.js.map +1 -0
  46. package/dist/editor-commands/command-sources.d.ts +7 -0
  47. package/dist/editor-commands/command-sources.d.ts.map +1 -0
  48. package/dist/editor-commands/command-sources.js +34 -0
  49. package/dist/editor-commands/command-sources.js.map +1 -0
  50. package/dist/editor-commands/diagnostics.d.ts +12 -0
  51. package/dist/editor-commands/diagnostics.d.ts.map +1 -0
  52. package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
  53. package/dist/editor-commands/diagnostics.js.map +1 -0
  54. package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
  55. package/dist/editor-commands/index.d.ts.map +1 -0
  56. package/dist/{agent-bridge → editor-commands}/index.js +1 -1
  57. package/dist/editor-commands/index.js.map +1 -0
  58. package/dist/editor-commands/register.d.ts +4 -0
  59. package/dist/editor-commands/register.d.ts.map +1 -0
  60. package/dist/{agent-bridge → editor-commands}/register.js +323 -286
  61. package/dist/editor-commands/register.js.map +1 -0
  62. package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
  63. package/dist/editor-commands/shared.d.ts.map +1 -0
  64. package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
  65. package/dist/editor-commands/shared.js.map +1 -0
  66. package/dist/editor-commands/source-types.d.ts +110 -0
  67. package/dist/editor-commands/source-types.d.ts.map +1 -0
  68. package/dist/editor-commands/source-types.js.map +1 -0
  69. package/dist/editor-plugin-commands.d.ts +4 -0
  70. package/dist/editor-plugin-commands.d.ts.map +1 -0
  71. package/dist/editor-plugin-commands.js +18 -0
  72. package/dist/editor-plugin-commands.js.map +1 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/local-editor-commands.d.ts +2 -0
  78. package/dist/local-editor-commands.d.ts.map +1 -0
  79. package/dist/local-editor-commands.js +2 -0
  80. package/dist/local-editor-commands.js.map +1 -0
  81. package/dist/local-editor-harness.d.ts +35 -21
  82. package/dist/local-editor-harness.d.ts.map +1 -1
  83. package/dist/local-editor-harness.js +1721 -367
  84. package/dist/local-editor-harness.js.map +1 -1
  85. package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
  86. package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
  87. package/dist/local-editor-prefab-stage-transaction.js +6 -5
  88. package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
  89. package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
  90. package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
  91. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  92. package/dist/playable-local-editor-entry.d.ts +10 -0
  93. package/dist/playable-local-editor-entry.d.ts.map +1 -1
  94. package/dist/playable-local-editor-entry.js +10 -2
  95. package/dist/playable-local-editor-entry.js.map +1 -1
  96. package/dist/playable-local-editor-host.d.ts +3 -32
  97. package/dist/playable-local-editor-host.d.ts.map +1 -1
  98. package/dist/playable-local-editor-host.js +6 -70
  99. package/dist/playable-local-editor-host.js.map +1 -1
  100. package/dist/playable-product-local-editor.d.ts +1 -2
  101. package/dist/playable-product-local-editor.d.ts.map +1 -1
  102. package/dist/playable-product-local-editor.js +0 -1
  103. package/dist/playable-product-local-editor.js.map +1 -1
  104. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  105. package/dist/playable-product-projection-preview.js +1 -1
  106. package/dist/playable-product-projection-preview.js.map +1 -1
  107. package/dist/playable-product-scene-capabilities.d.ts +0 -2
  108. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  109. package/dist/playable-product-scene-capabilities.js +33 -6
  110. package/dist/playable-product-scene-capabilities.js.map +1 -1
  111. package/dist/playable-runtime-babylon.d.ts +4 -0
  112. package/dist/playable-runtime-babylon.d.ts.map +1 -1
  113. package/dist/playable-runtime-babylon.js +4 -0
  114. package/dist/playable-runtime-babylon.js.map +1 -1
  115. package/dist/playable-sdk.d.ts +1 -1
  116. package/dist/playable-sdk.d.ts.map +1 -1
  117. package/dist/playable-sdk.js.map +1 -1
  118. package/dist/playable-standard-project.d.ts +0 -2
  119. package/dist/playable-standard-project.d.ts.map +1 -1
  120. package/dist/playable-standard-project.js +1 -2
  121. package/dist/playable-standard-project.js.map +1 -1
  122. package/dist/project-service-projection.d.ts +16 -0
  123. package/dist/project-service-projection.d.ts.map +1 -0
  124. package/dist/project-service-projection.js +67 -0
  125. package/dist/project-service-projection.js.map +1 -0
  126. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
  127. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
  128. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
  129. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  130. package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
  131. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
  132. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
  137. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  142. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
  143. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
  144. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
  145. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
  146. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  147. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  149. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  177. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  178. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
  179. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
  180. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
  181. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
  182. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
  183. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
  184. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
  185. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
  186. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
  187. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
  188. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
  189. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
  190. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
  191. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
  192. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
  193. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
  194. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
  195. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
  196. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
  197. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
  198. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
  199. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
  200. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
  201. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  202. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
  203. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
  204. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
  205. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
  206. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
  207. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
  208. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
  209. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
  210. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
  211. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
  213. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  214. package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
  215. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
  217. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  218. package/node_modules/@fps-games/editor-core/package.json +6 -6
  219. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
  220. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
  222. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  223. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  341. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
  344. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
  349. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
  351. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
  352. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
  353. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
  354. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
  355. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
  356. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
  357. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
  358. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  359. package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
  360. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  361. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  362. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  363. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  364. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  365. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  366. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  367. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  368. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  369. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  370. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  371. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  372. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  373. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  374. package/node_modules/@fps-games/plugin-assets/package.json +6 -6
  375. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
  376. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
  377. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
  378. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
  379. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  380. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  381. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  382. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  383. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  384. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  385. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  386. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  387. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  388. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  389. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  390. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  391. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  392. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  393. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  394. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  395. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  396. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  397. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  398. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  399. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  400. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  401. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  402. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  403. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  404. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  405. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  406. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  407. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  408. package/package.json +23 -23
  409. package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
  410. package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
  411. package/dist/agent-bridge/capabilities/assets.js.map +0 -1
  412. package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
  413. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
  414. package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
  415. package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
  416. package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
  417. package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
  418. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
  419. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
  420. package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
  421. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
  422. package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
  423. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
  424. package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
  425. package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
  426. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
  427. package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
  428. package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
  429. package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
  430. package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
  431. package/dist/agent-bridge/capabilities/selection.js +0 -60
  432. package/dist/agent-bridge/capabilities/selection.js.map +0 -1
  433. package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
  434. package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
  435. package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
  436. package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
  437. package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
  438. package/dist/agent-bridge/capabilities/transform.js +0 -164
  439. package/dist/agent-bridge/capabilities/transform.js.map +0 -1
  440. package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
  441. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
  442. package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
  443. package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
  444. package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
  445. package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
  446. package/dist/agent-bridge/capability-sources.d.ts +0 -7
  447. package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
  448. package/dist/agent-bridge/capability-sources.js +0 -34
  449. package/dist/agent-bridge/capability-sources.js.map +0 -1
  450. package/dist/agent-bridge/diagnostics.d.ts +0 -12
  451. package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
  452. package/dist/agent-bridge/diagnostics.js.map +0 -1
  453. package/dist/agent-bridge/index.d.ts.map +0 -1
  454. package/dist/agent-bridge/index.js.map +0 -1
  455. package/dist/agent-bridge/register.d.ts +0 -4
  456. package/dist/agent-bridge/register.d.ts.map +0 -1
  457. package/dist/agent-bridge/register.js.map +0 -1
  458. package/dist/agent-bridge/shared.d.ts.map +0 -1
  459. package/dist/agent-bridge/shared.js.map +0 -1
  460. package/dist/agent-bridge/source-types.d.ts +0 -110
  461. package/dist/agent-bridge/source-types.d.ts.map +0 -1
  462. package/dist/agent-bridge/source-types.js.map +0 -1
  463. package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
  464. package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
  465. package/dist/editor-plugin-agent-capabilities.js +0 -64
  466. package/dist/editor-plugin-agent-capabilities.js.map +0 -1
  467. package/dist/local-editor-agent-actions.d.ts +0 -43
  468. package/dist/local-editor-agent-actions.d.ts.map +0 -1
  469. package/dist/local-editor-agent-actions.js +0 -321
  470. package/dist/local-editor-agent-actions.js.map +0 -1
  471. package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
  472. package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
  473. package/dist/local-editor-agent-bridge-transport.js +0 -403
  474. package/dist/local-editor-agent-bridge-transport.js.map +0 -1
  475. package/dist/local-editor-agent-bridge.d.ts +0 -2
  476. package/dist/local-editor-agent-bridge.d.ts.map +0 -1
  477. package/dist/local-editor-agent-bridge.js +0 -2
  478. package/dist/local-editor-agent-bridge.js.map +0 -1
  479. package/dist/local-editor-agent-context.d.ts +0 -68
  480. package/dist/local-editor-agent-context.d.ts.map +0 -1
  481. package/dist/local-editor-agent-context.js +0 -716
  482. package/dist/local-editor-agent-context.js.map +0 -1
  483. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
  484. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
  485. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
  486. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
  487. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
  488. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
  489. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
  490. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
  491. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
  492. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
  493. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
  494. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
  503. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
  504. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
  505. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
  506. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
  507. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
  508. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
  509. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
  510. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
  511. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
  512. package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
  513. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
  514. /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"forge-play.js","sourceRoot":"","sources":["../../src/local-harness/forge-play.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n waitForPlayableLocalEditorPaint,\n} from './timing';\nimport type {\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayHistoryOperation,\n PlayableForgePlayHistoryOperationOptions,\n PlayableForgePlayHistoryOperationResult,\n PlayableForgePlayMessageEvent,\n PlayableForgePlayMode,\n PlayableForgePlayModeBridge,\n PlayableForgePlaySaveState,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nimport type {\n PlayableLocalEditorDataSafetyOperation,\n PlayableLocalEditorSaveFailureInput,\n PlayableLocalEditorSaveFailureState,\n PlayableLocalEditorUnsavedChangesState,\n} from './types';\n\nexport const PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE = 'forge-play-game-bridge';\n\nexport const PLAYABLE_FORGE_PLAY_POST_MESSAGE = {\n EVENT: 'event',\n COMMAND: 'command',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_COMMAND = {\n MODE_CHANGE: 'mode.change',\n UNDO: 'history.undo',\n REDO: 'history.redo',\n DOCUMENT_EXPORT: 'document.export',\n DOCUMENT_COMMIT: 'document.commit',\n ASSET_IMPORT: 'asset.import',\n ASSET_UPDATE: 'asset.update',\n ASSET_LIBRARY_REFRESH: 'asset.library.refresh',\n EDITOR_ASSET_PLACE: 'editor.asset.place',\n ASSETS_DROP: 'assets.drop',\n ASSETS_LOADED: 'assets.loaded',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_EVENT = {\n SCENE_READY: 'scene.ready',\n FIRST_FRAME: 'scene.first_frame',\n MODE_CHANGE: 'mode.change',\n HISTORY_UNDO_RESULT: 'history.undo.result',\n HISTORY_REDO_RESULT: 'history.redo.result',\n DOCUMENT_EXPORTED: 'document.exported',\n ASSET_IMPORT_RESULT: 'asset.import.result',\n ASSET_UPDATE_RESULT: 'asset.update.result',\n ASSET_LIBRARY_REFRESHED: 'asset.library.refreshed',\n EDITOR_ASSET_PLACE_RESULT: 'editor.asset.place.result',\n SYSTEM_ERROR: 'system.error',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_EVENT_ALIASES: Record<string, readonly string[]> = {\n [PLAYABLE_FORGE_PLAY_EVENT.SCENE_READY]: ['scene:ready', 'lifecycle:ready'],\n [PLAYABLE_FORGE_PLAY_EVENT.FIRST_FRAME]: ['scene:first_frame', 'lifecycle:firstFrame'],\n [PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE]: ['mode:change', 'mode:changed'],\n [PLAYABLE_FORGE_PLAY_EVENT.HISTORY_UNDO_RESULT]: ['history:undo:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.HISTORY_REDO_RESULT]: ['history:redo:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED]: ['document:exported'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_IMPORT_RESULT]: ['asset:import:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_UPDATE_RESULT]: ['asset:update:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_LIBRARY_REFRESHED]: ['asset:library:refreshed'],\n [PLAYABLE_FORGE_PLAY_EVENT.EDITOR_ASSET_PLACE_RESULT]: ['editor:asset:place:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR]: ['system:error'],\n};\n\nexport const PLAYABLE_FORGE_PLAY_COMMAND_ALIASES: Record<string, string> = {\n 'mode:change': PLAYABLE_FORGE_PLAY_COMMAND.MODE_CHANGE,\n 'history:undo': PLAYABLE_FORGE_PLAY_COMMAND.UNDO,\n 'history:redo': PLAYABLE_FORGE_PLAY_COMMAND.REDO,\n 'document:export': PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_EXPORT,\n 'document:commit': PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_COMMIT,\n 'asset:import': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_IMPORT,\n 'asset:update': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_UPDATE,\n 'asset:library:refresh': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_LIBRARY_REFRESH,\n 'editor:asset:place': PLAYABLE_FORGE_PLAY_COMMAND.EDITOR_ASSET_PLACE,\n 'assets:drop': PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_DROP,\n 'assets:loaded': PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_LOADED,\n};\n\nexport const PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS = new Set<string>([\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_IMPORT,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_UPDATE,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_LIBRARY_REFRESH,\n PLAYABLE_FORGE_PLAY_COMMAND.EDITOR_ASSET_PLACE,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_LOADED,\n]);\n\nexport const PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS = new Set<string>([\n PLAYABLE_FORGE_PLAY_COMMAND.UNDO,\n PLAYABLE_FORGE_PLAY_COMMAND.REDO,\n]);\n\nexport function createPlayableForgePlaySaveState(): PlayableForgePlaySaveState {\n return {\n preparedRevision: 0,\n committedRevision: 0,\n };\n}\n\nexport function normalizePlayableForgePlayCommandName(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return PLAYABLE_FORGE_PLAY_COMMAND_ALIASES[value] ?? value;\n}\n\nexport function readPlayableForgePlayRequestId(payload: Record<string, unknown>): string | undefined {\n return typeof payload.requestId === 'string' && payload.requestId.trim()\n ? payload.requestId.trim()\n : undefined;\n}\n\nexport function readPlayableForgePlayHistoryOperationOptions(\n payload: Record<string, unknown>,\n): PlayableForgePlayHistoryOperationOptions {\n return {\n origin: readPlayableForgePlayHistoryOrigin(payload.origin),\n waitForProjection: payload.waitForProjection === 'settled' ? 'settled' : 'none',\n };\n}\n\nexport function getPlayableForgePlayHistoryResultEventName(\n operation: PlayableForgePlayHistoryOperation,\n): string {\n return operation === 'undo'\n ? PLAYABLE_FORGE_PLAY_EVENT.HISTORY_UNDO_RESULT\n : PLAYABLE_FORGE_PLAY_EVENT.HISTORY_REDO_RESULT;\n}\n\nexport function postPlayableForgePlayEvent(\n windowLike: Pick<PlayableForgePlayWindowLike, 'parent'>,\n name: string,\n payload: Record<string, unknown> = {},\n): void {\n if (!windowLike.parent || windowLike.parent === (windowLike as unknown)) return;\n const post = (eventName: string): void => {\n windowLike.parent?.postMessage({\n source: PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE,\n type: PLAYABLE_FORGE_PLAY_POST_MESSAGE.EVENT,\n payload: { ...payload, name: eventName },\n timestamp: Date.now(),\n }, '*');\n };\n post(name);\n for (const alias of PLAYABLE_FORGE_PLAY_EVENT_ALIASES[name] ?? []) {\n if (alias !== name) post(alias);\n }\n}\n\nfunction readPlayableForgePlayHistoryOrigin(value: unknown): PlayableForgePlayHistoryOperationOptions['origin'] {\n return value === 'user' || value === 'system' || value === 'agent'\n ? value\n : 'agent';\n}\n\nexport function installPlayableForgePlayModeBridge(\n options: PlayableForgePlayBridgeInstallOptions,\n): PlayableForgePlayModeBridge {\n let currentMode = options.initialMode ?? 'play';\n let inFlight: Promise<void> | null = null;\n const saveState = createPlayableForgePlaySaveState();\n let preparedDocumentFingerprint: string | null = null;\n let committedDocumentFingerprint: string | null = null;\n let preparedRequestId: string | null = null;\n let commitInFlight: { requestId: string; promise: Promise<void> } | null = null;\n let overlayHideTimer: unknown = null;\n const waitForPaint = options.waitForPaint ?? waitForPlayableLocalEditorPaint;\n const overlayHideDelayMs = options.overlayHideDelayMs ?? 3000;\n const readMode = (): PlayableForgePlayMode => options.readMode?.() ?? currentMode;\n const invalidatePreparedPlatformSave = (): void => {\n saveState.preparedRevision = saveState.committedRevision;\n preparedDocumentFingerprint = null;\n preparedRequestId = null;\n };\n const postEvent = (name: string, payload: Record<string, unknown> = {}): void => {\n postPlayableForgePlayEvent(options.window, name, payload);\n };\n\n const notifySaveFailed = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n error?: unknown,\n ): Promise<void> => {\n const notify = options.interactions?.notifySaveFailed;\n if (!notify) return;\n let state: PlayableLocalEditorSaveFailureState | null | undefined;\n try {\n state = options.harness.getSaveFailureState?.();\n } catch (stateError) {\n console.error('[PlayableForgePlayBridge] save failure state unavailable', stateError);\n }\n const input: PlayableLocalEditorSaveFailureInput = {\n operation,\n status: state?.status ?? (error instanceof Error ? error.message : undefined),\n details: state?.details,\n error: error ?? state?.error,\n };\n try {\n await notify(input);\n } catch (notifyError) {\n console.error('[PlayableForgePlayBridge] save failure notification failed', notifyError);\n }\n };\n\n const saveScene = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n ): Promise<boolean> => {\n if (options.saveDocument) return options.saveDocument(operation);\n try {\n const saved = await options.harness.saveScene();\n if (!saved) await notifySaveFailed(operation);\n return saved;\n } catch (error) {\n await notifySaveFailed(operation, error);\n throw error;\n }\n };\n\n const readUnsavedChangesState = (): PlayableLocalEditorUnsavedChangesState => {\n const fallbackHasWorkingDocument = options.harness.getWorkingDocument() !== null;\n try {\n return options.harness.getUnsavedChangesState?.() ?? {\n dirty: false,\n hasWorkingDocument: fallbackHasWorkingDocument,\n };\n } catch (error) {\n console.error('[PlayableForgePlayBridge] unsaved changes state unavailable', error);\n return {\n dirty: false,\n hasWorkingDocument: fallbackHasWorkingDocument,\n };\n }\n };\n\n const confirmDiscardIfNeeded = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n ): Promise<boolean> => {\n const unsavedChanges = readUnsavedChangesState();\n if (!unsavedChanges.dirty || !unsavedChanges.hasWorkingDocument) return true;\n try {\n return await options.interactions?.confirmDiscardUnsavedChanges?.({\n operation,\n unsavedChanges,\n }) !== false;\n } catch (error) {\n console.error('[PlayableForgePlayBridge] discard confirmation failed', error);\n return false;\n }\n };\n\n const clearOverlayHideTimer = (): void => {\n if (overlayHideTimer == null) return;\n options.window.clearTimeout(overlayHideTimer);\n overlayHideTimer = null;\n };\n\n const showSaveOverlay = (content: PlayableForgePlayBridgeInstallOptions['loadingContent']['saveScene']): void => {\n clearOverlayHideTimer();\n options.loadingOverlay.show(content);\n };\n\n const scheduleSaveOverlayHide = (): void => {\n clearOverlayHideTimer();\n overlayHideTimer = options.window.setTimeout(() => {\n overlayHideTimer = null;\n options.loadingOverlay.hide();\n }, overlayHideDelayMs);\n };\n\n const reportModeChangeError = (error: unknown, fallbackMode: PlayableForgePlayMode): void => {\n options.reportError?.(error);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n kind: 'rejection',\n message: error instanceof Error ? error.message : String(error),\n });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: fallbackMode });\n };\n\n const postHistoryOperationResult = (\n operation: PlayableForgePlayHistoryOperation,\n payload: Record<string, unknown>,\n result: PlayableForgePlayHistoryOperationResult,\n ): void => {\n const requestId = readPlayableForgePlayRequestId(payload);\n postEvent(getPlayableForgePlayHistoryResultEventName(operation), {\n ...result,\n ...(requestId ? { requestId } : {}),\n });\n };\n\n const switchMode = async (\n mode: PlayableForgePlayMode,\n switchOptions: { save?: boolean } = {},\n ): Promise<void> => {\n const exitLoadingContent = mode === 'play' && !options.exitEditor\n ? switchOptions.save === true\n ? options.loadingContent.saveAndRunGame\n : options.loadingContent.discardAndRunGame\n : null;\n const shouldRunExit = (): boolean => mode === 'play' && options.harness.getWorkingDocument() !== null;\n\n if (inFlight) await inFlight;\n if (readMode() === mode && !shouldRunExit()) {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode });\n return;\n }\n\n inFlight = (async () => {\n if (mode === 'play' && switchOptions.save !== true && shouldRunExit() && !options.exitEditor) {\n const confirmed = await confirmDiscardIfNeeded('forge-play-mode-change');\n if (!confirmed) {\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n if (exitLoadingContent) {\n showSaveOverlay(exitLoadingContent);\n await waitForPaint();\n }\n try {\n let editorExitHandled = false;\n if (mode === 'edit') {\n saveState.preparedRevision = 0;\n saveState.committedRevision = 0;\n preparedDocumentFingerprint = null;\n committedDocumentFingerprint = null;\n preparedRequestId = null;\n await options.harness.enterEditor();\n if (options.renderAfterEnter !== false) options.harness.render();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n\n if (switchOptions.save === true) {\n const hasPendingPlatformCommit = saveState.preparedRevision > saveState.committedRevision;\n if (hasPendingPlatformCommit) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n const hasPlatformCommit = saveState.preparedRevision > 0\n && saveState.preparedRevision === saveState.committedRevision;\n const currentDocumentFingerprint = createPlayableForgePlayDocumentFingerprint(\n options.harness.getWorkingDocument(),\n );\n const platformCommitAlreadySaved = hasPlatformCommit\n && committedDocumentFingerprint !== null\n && currentDocumentFingerprint === committedDocumentFingerprint\n && options.hasUnsavedPlatformChanges?.() !== true;\n if (hasPlatformCommit && !platformCommitAlreadySaved) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n if (!platformCommitAlreadySaved) {\n if (options.saveAndExitEditor) {\n const exited = await options.saveAndExitEditor('forge-play-mode-change');\n if (!exited) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n editorExitHandled = true;\n } else {\n if (options.preflightRun && !await options.preflightRun()) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n const saved = await saveScene('forge-play-mode-change');\n if (!saved) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n } else if (options.preflightRun && !options.exitEditor && !await options.preflightRun()) {\n // Compatibility hosts without an atomic exit callback retain the\n // legacy preflight, while first-party hosts validate inside exitEditor.\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n\n if (!editorExitHandled) {\n if (options.exitEditor) {\n const exited = await options.exitEditor(switchOptions.save === true ? 'save' : 'discard');\n if (!exited) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n } else {\n await options.harness.discardAndRunGame();\n }\n }\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'play';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'play' });\n } catch (error) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n throw error;\n }\n })();\n\n try {\n await inFlight;\n } finally {\n inFlight = null;\n }\n };\n\n const commitPlatformSave = async (payload: Record<string, unknown> = {}): Promise<void> => {\n if (inFlight) await inFlight;\n const requestId = readPlayableForgePlayRequestId(payload) ?? null;\n if (!requestId || !preparedRequestId || requestId !== preparedRequestId) return;\n if (commitInFlight) {\n if (commitInFlight.requestId === requestId) return commitInFlight.promise;\n await commitInFlight.promise;\n return commitPlatformSave(payload);\n }\n if (saveState.preparedRevision <= saveState.committedRevision) return;\n\n const commitOperation = (async () => {\n try {\n const currentDocumentFingerprint = createPlayableForgePlayDocumentFingerprint(\n options.harness.getWorkingDocument(),\n );\n if (currentDocumentFingerprint !== preparedDocumentFingerprint) {\n throw new Error('Editor document changed after export; prepare a new export before commit.');\n }\n await options.commitDocument?.({\n payload,\n saveState,\n documentFingerprint: preparedDocumentFingerprint,\n });\n saveState.committedRevision = saveState.preparedRevision;\n committedDocumentFingerprint = preparedDocumentFingerprint;\n } catch (error) {\n invalidatePreparedPlatformSave();\n throw error;\n }\n })();\n commitInFlight = { requestId, promise: commitOperation };\n try {\n await commitOperation;\n } finally {\n if (commitInFlight?.promise === commitOperation) commitInFlight = null;\n }\n };\n\n const runHistoryOperation = async (\n operation: PlayableForgePlayHistoryOperation,\n payload: Record<string, unknown>,\n ): Promise<void> => {\n const historyOptions = readPlayableForgePlayHistoryOperationOptions(payload);\n try {\n if (readMode() !== 'edit') await switchMode('edit');\n const handler = operation === 'undo' ? options.harness.undo : options.harness.redo;\n if (!handler) {\n postHistoryOperationResult(operation, payload, createPlayableForgePlayHistoryUnavailableResult(\n operation,\n historyOptions,\n options.harness.getWorkingDocument(),\n ));\n return;\n }\n const result = await handler.call(options.harness, historyOptions);\n postHistoryOperationResult(operation, payload, result);\n } catch (error) {\n options.reportError?.(error);\n postHistoryOperationResult(operation, payload, createPlayableForgePlayHistoryUnavailableResult(\n operation,\n historyOptions,\n options.harness.getWorkingDocument(),\n error,\n ));\n }\n };\n\n const onMessage = (event: PlayableForgePlayMessageEvent): void => {\n if (event.source !== options.window.parent) return;\n const message = readRecord(event.data);\n if (message.source !== PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE) return;\n if (message.type !== PLAYABLE_FORGE_PLAY_POST_MESSAGE.COMMAND) return;\n const payload = readRecord(message.payload);\n const commandName = normalizePlayableForgePlayCommandName(payload.name);\n\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_DROP) {\n options.handleAssetDrop?.(payload);\n return;\n }\n if (commandName && PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS.has(commandName)) {\n event.stopImmediatePropagation?.();\n const handled = options.handleProjectAssetCommand\n ? options.handleProjectAssetCommand(commandName, payload)\n : Promise.resolve();\n void handled.catch((error) => {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n kind: 'rejection',\n message: error instanceof Error ? error.message : String(error),\n });\n });\n return;\n }\n if (commandName && PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS.has(commandName)) {\n event.stopImmediatePropagation?.();\n void runHistoryOperation(\n commandName === PLAYABLE_FORGE_PLAY_COMMAND.UNDO ? 'undo' : 'redo',\n payload,\n );\n return;\n }\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_EXPORT) {\n showSaveOverlay(options.loadingContent.saveScene);\n const requestId = readPlayableForgePlayRequestId(payload);\n if (!requestId) {\n scheduleSaveOverlayHide();\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n error: 'document_export_request_id_required',\n });\n return;\n }\n if (inFlight || saveState.preparedRevision > saveState.committedRevision) {\n scheduleSaveOverlayHide();\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n requestId,\n error: inFlight ? 'document_export_in_progress' : 'document_export_not_committed',\n });\n return;\n }\n const exportDocument = options.exportDocument;\n const revisionBeforeExport = saveState.preparedRevision;\n const committedRevisionBeforeExport = saveState.committedRevision;\n const preparedFingerprintBeforeExport = preparedDocumentFingerprint;\n const committedFingerprintBeforeExport = committedDocumentFingerprint;\n const preparedRequestIdBeforeExport = preparedRequestId;\n const exported = exportDocument\n ? Promise.resolve().then(() => exportDocument({ payload, saveState, postEvent }))\n : Promise.resolve(null);\n const exportOperation = exported.then((result) => {\n if (saveState.preparedRevision > revisionBeforeExport) {\n if (!result) {\n throw new Error('Document export did not return the exported document fingerprint.');\n }\n preparedDocumentFingerprint = result.documentFingerprint;\n committedDocumentFingerprint = null;\n preparedRequestId = requestId;\n }\n }).catch(async (error) => {\n saveState.preparedRevision = revisionBeforeExport;\n saveState.committedRevision = committedRevisionBeforeExport;\n preparedDocumentFingerprint = preparedFingerprintBeforeExport;\n committedDocumentFingerprint = committedFingerprintBeforeExport;\n preparedRequestId = preparedRequestIdBeforeExport;\n options.loadingOverlay.hide();\n await notifySaveFailed('forge-play-document-export', error);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n ...(readPlayableForgePlayRequestId(payload) ? { requestId: readPlayableForgePlayRequestId(payload) } : {}),\n error: error instanceof Error ? error.message : String(error),\n });\n }).then(() => {\n scheduleSaveOverlayHide();\n }).finally(() => {\n if (inFlight === exportOperation) inFlight = null;\n });\n inFlight = exportOperation;\n return;\n }\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_COMMIT) {\n showSaveOverlay(options.loadingContent.saveScene);\n void commitPlatformSave(payload).catch((error) => {\n options.loadingOverlay.hide();\n reportModeChangeError(error, readMode());\n }).then(() => {\n scheduleSaveOverlayHide();\n });\n return;\n }\n if (commandName !== PLAYABLE_FORGE_PLAY_COMMAND.MODE_CHANGE) return;\n\n const mode = payload.mode === 'edit' ? 'edit' : payload.mode === 'play' ? 'play' : null;\n if (!mode) return;\n const save = mode === 'play' ? payload.save !== false : false;\n\n void switchMode(mode, { save }).catch((error) => {\n reportModeChangeError(error, readMode());\n });\n };\n\n options.window.addEventListener('message', onMessage, { capture: true });\n const postReadyEvents = (): void => {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SCENE_READY, { mode: readMode() });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.FIRST_FRAME);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: readMode() });\n };\n if (options.window.queueMicrotask) options.window.queueMicrotask(postReadyEvents);\n else postReadyEvents();\n\n return {\n switchMode,\n commitPlatformSave,\n getMode() {\n return readMode();\n },\n getSaveState() {\n return saveState;\n },\n dispose() {\n clearOverlayHideTimer();\n options.window.removeEventListener('message', onMessage, { capture: true });\n },\n };\n}\n\nexport function createPlayableForgePlayDocumentFingerprint(document: unknown): string | null {\n if (document == null) return null;\n try {\n return JSON.stringify(document);\n } catch {\n return null;\n }\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction readOptionalRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nfunction createPlayableForgePlayHistoryUnavailableResult(\n operation: PlayableForgePlayHistoryOperation,\n options: PlayableForgePlayHistoryOperationOptions,\n workingDocument: unknown | null,\n error?: unknown,\n): PlayableForgePlayHistoryOperationResult {\n const waitForProjection = options.waitForProjection ?? 'none';\n const failed = error != null;\n return {\n ok: false,\n operation,\n origin: options.origin ?? 'agent',\n waitForProjection,\n documentChanged: false,\n transactionLabel: null,\n workingDocument,\n dirty: false,\n history: { canUndo: false, canRedo: false },\n status: failed\n ? `${operation === 'undo' ? 'Undo' : 'Redo'} failed`\n : `${operation === 'undo' ? 'Undo' : 'Redo'} unavailable`,\n projection: {\n waitPolicy: waitForProjection,\n idle: true,\n activeBatchIds: [],\n lastBatch: null,\n },\n error: failed\n ? error instanceof Error ? error.message : String(error)\n : `Harness ${operation} is not available.`,\n };\n}\n"]}
1
+ {"version":3,"file":"forge-play.js","sourceRoot":"","sources":["../../src/local-harness/forge-play.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n waitForPlayableLocalEditorPaint,\n} from './timing';\nimport type {\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayHistoryOperation,\n PlayableForgePlayHistoryOperationOptions,\n PlayableForgePlayHistoryOperationResult,\n PlayableForgePlayMessageEvent,\n PlayableForgePlayMode,\n PlayableForgePlayModeBridge,\n PlayableForgePlaySaveState,\n PlayableForgePlaySaveTransactionSnapshot,\n PlayableForgePlaySaveTransactionPhase,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nimport type {\n PlayableLocalEditorDataSafetyOperation,\n PlayableLocalEditorPreparedAuthoringSource,\n PlayableLocalEditorSaveFailureInput,\n PlayableLocalEditorSaveFailureState,\n PlayableLocalEditorUnsavedChangesState,\n} from './types';\n\nexport const PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE = 'forge-play-game-bridge';\n\nexport const PLAYABLE_FORGE_PLAY_POST_MESSAGE = {\n EVENT: 'event',\n COMMAND: 'command',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_COMMAND = {\n MODE_CHANGE: 'mode.change',\n UNDO: 'history.undo',\n REDO: 'history.redo',\n DOCUMENT_EXPORT: 'document.export',\n DOCUMENT_COMMIT: 'document.commit',\n ASSET_IMPORT: 'asset.import',\n ASSET_UPDATE: 'asset.update',\n ASSET_LIBRARY_REFRESH: 'asset.library.refresh',\n EDITOR_ASSET_PLACE: 'editor.asset.place',\n ASSETS_DROP: 'assets.drop',\n ASSETS_LOADED: 'assets.loaded',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_EVENT = {\n SCENE_READY: 'scene.ready',\n EDITOR_SESSION_READY: 'editor.session.ready',\n FIRST_FRAME: 'scene.first_frame',\n MODE_CHANGE: 'mode.change',\n HISTORY_UNDO_RESULT: 'history.undo.result',\n HISTORY_REDO_RESULT: 'history.redo.result',\n DOCUMENT_EXPORTED: 'document.exported',\n DOCUMENT_COMMITTED: 'document.committed',\n ASSET_IMPORT_RESULT: 'asset.import.result',\n ASSET_UPDATE_RESULT: 'asset.update.result',\n ASSET_LIBRARY_REFRESHED: 'asset.library.refreshed',\n EDITOR_ASSET_PLACE_RESULT: 'editor.asset.place.result',\n SYSTEM_ERROR: 'system.error',\n} as const;\n\nexport const PLAYABLE_FORGE_PLAY_EVENT_ALIASES: Record<string, readonly string[]> = {\n [PLAYABLE_FORGE_PLAY_EVENT.SCENE_READY]: ['scene:ready', 'lifecycle:ready'],\n [PLAYABLE_FORGE_PLAY_EVENT.EDITOR_SESSION_READY]: ['editor:session:ready'],\n [PLAYABLE_FORGE_PLAY_EVENT.FIRST_FRAME]: ['scene:first_frame', 'lifecycle:firstFrame'],\n [PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE]: ['mode:change', 'mode:changed'],\n [PLAYABLE_FORGE_PLAY_EVENT.HISTORY_UNDO_RESULT]: ['history:undo:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.HISTORY_REDO_RESULT]: ['history:redo:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED]: ['document:exported'],\n [PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_COMMITTED]: ['document:committed'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_IMPORT_RESULT]: ['asset:import:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_UPDATE_RESULT]: ['asset:update:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.ASSET_LIBRARY_REFRESHED]: ['asset:library:refreshed'],\n [PLAYABLE_FORGE_PLAY_EVENT.EDITOR_ASSET_PLACE_RESULT]: ['editor:asset:place:result'],\n [PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR]: ['system:error'],\n};\n\nexport const PLAYABLE_FORGE_PLAY_COMMAND_ALIASES: Record<string, string> = {\n 'mode:change': PLAYABLE_FORGE_PLAY_COMMAND.MODE_CHANGE,\n 'history:undo': PLAYABLE_FORGE_PLAY_COMMAND.UNDO,\n 'history:redo': PLAYABLE_FORGE_PLAY_COMMAND.REDO,\n 'document:export': PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_EXPORT,\n 'document:commit': PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_COMMIT,\n 'asset:import': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_IMPORT,\n 'asset:update': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_UPDATE,\n 'asset:library:refresh': PLAYABLE_FORGE_PLAY_COMMAND.ASSET_LIBRARY_REFRESH,\n 'editor:asset:place': PLAYABLE_FORGE_PLAY_COMMAND.EDITOR_ASSET_PLACE,\n 'assets:drop': PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_DROP,\n 'assets:loaded': PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_LOADED,\n};\n\nexport const PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS = new Set<string>([\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_IMPORT,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_UPDATE,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSET_LIBRARY_REFRESH,\n PLAYABLE_FORGE_PLAY_COMMAND.EDITOR_ASSET_PLACE,\n PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_LOADED,\n]);\n\nexport const PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS = new Set<string>([\n PLAYABLE_FORGE_PLAY_COMMAND.UNDO,\n PLAYABLE_FORGE_PLAY_COMMAND.REDO,\n]);\n\nexport function createPlayableForgePlaySaveState(): PlayableForgePlaySaveState {\n return {\n preparedRevision: 0,\n committedRevision: 0,\n };\n}\n\nfunction createPlayableForgePlaySaveTransaction(): PlayableForgePlaySaveTransactionSnapshot {\n return {\n requestId: null,\n phase: 'idle',\n stage: null,\n rejection: null,\n };\n}\n\nfunction readPlayableForgePlayPlatformVersion(payload: Record<string, unknown>): number | undefined {\n return typeof payload.version === 'number' && Number.isFinite(payload.version)\n ? payload.version\n : undefined;\n}\n\nexport function normalizePlayableForgePlayCommandName(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return PLAYABLE_FORGE_PLAY_COMMAND_ALIASES[value] ?? value;\n}\n\nexport function readPlayableForgePlayRequestId(payload: Record<string, unknown>): string | undefined {\n return typeof payload.requestId === 'string' && payload.requestId.trim()\n ? payload.requestId.trim()\n : undefined;\n}\n\nexport function readPlayableForgePlayHistoryOperationOptions(\n payload: Record<string, unknown>,\n): PlayableForgePlayHistoryOperationOptions {\n return {\n origin: readPlayableForgePlayHistoryOrigin(payload.origin),\n waitForProjection: payload.waitForProjection === 'settled' ? 'settled' : 'none',\n };\n}\n\nexport function getPlayableForgePlayHistoryResultEventName(\n operation: PlayableForgePlayHistoryOperation,\n): string {\n return operation === 'undo'\n ? PLAYABLE_FORGE_PLAY_EVENT.HISTORY_UNDO_RESULT\n : PLAYABLE_FORGE_PLAY_EVENT.HISTORY_REDO_RESULT;\n}\n\nexport function postPlayableForgePlayEvent(\n windowLike: Pick<PlayableForgePlayWindowLike, 'parent'>,\n name: string,\n payload: Record<string, unknown> = {},\n): void {\n if (!windowLike.parent || windowLike.parent === (windowLike as unknown)) return;\n const post = (eventName: string): void => {\n windowLike.parent?.postMessage({\n source: PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE,\n type: PLAYABLE_FORGE_PLAY_POST_MESSAGE.EVENT,\n payload: { ...payload, name: eventName },\n timestamp: Date.now(),\n }, '*');\n };\n post(name);\n for (const alias of PLAYABLE_FORGE_PLAY_EVENT_ALIASES[name] ?? []) {\n if (alias !== name) post(alias);\n }\n}\n\nfunction readPlayableForgePlayHistoryOrigin(value: unknown): PlayableForgePlayHistoryOperationOptions['origin'] {\n return value === 'user' || value === 'system' || value === 'agent'\n ? value\n : 'agent';\n}\n\nexport function installPlayableForgePlayModeBridge(\n options: PlayableForgePlayBridgeInstallOptions,\n): PlayableForgePlayModeBridge {\n let currentMode = options.initialMode ?? 'play';\n const sessionId = options.createSessionId?.()\n ?? `fps-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n let inFlight: Promise<void> | null = null;\n const saveState = createPlayableForgePlaySaveState();\n let saveTransaction = createPlayableForgePlaySaveTransaction();\n let preparedDocumentFingerprint: string | null = null;\n let preparedDocumentRevision: number | null = null;\n let preparedCommittedDocumentFingerprint: string | null = null;\n let preparedAuthoringSource: PlayableLocalEditorPreparedAuthoringSource | null = null;\n let committedDocumentFingerprint: string | null = null;\n let preparedRequestId: string | null = null;\n let commitInFlight: { requestId: string; promise: Promise<void> } | null = null;\n let overlayHideTimer: unknown = null;\n const waitForPaint = options.waitForPaint ?? waitForPlayableLocalEditorPaint;\n const overlayHideDelayMs = options.overlayHideDelayMs ?? 3000;\n const readMode = (): PlayableForgePlayMode => options.readMode?.() ?? currentMode;\n const invalidatePreparedPlatformSave = (): void => {\n saveState.preparedRevision = saveState.committedRevision;\n preparedDocumentFingerprint = null;\n preparedDocumentRevision = null;\n preparedCommittedDocumentFingerprint = null;\n preparedAuthoringSource = null;\n preparedRequestId = null;\n };\n const setSaveTransaction = (\n phase: PlayableForgePlaySaveTransactionPhase,\n input: Partial<Omit<PlayableForgePlaySaveTransactionSnapshot, 'phase'>> = {},\n ): void => {\n const value = <T>(key: keyof Omit<PlayableForgePlaySaveTransactionSnapshot, 'phase'>, fallback: T): T => (\n Object.prototype.hasOwnProperty.call(input, key) ? input[key] as T : fallback\n );\n const expectedVersion = value<number | undefined>('expectedVersion', saveTransaction.expectedVersion);\n const actualVersion = value<number | undefined>('actualVersion', saveTransaction.actualVersion);\n saveTransaction = {\n requestId: value('requestId', saveTransaction.requestId),\n phase,\n stage: value('stage', saveTransaction.stage),\n ...(expectedVersion === undefined ? {} : { expectedVersion }),\n ...(actualVersion === undefined ? {} : { actualVersion }),\n rejection: value('rejection', null),\n };\n };\n const postEvent = (name: string, payload: Record<string, unknown> = {}): void => {\n postPlayableForgePlayEvent(options.window, name, { ...payload, sessionId });\n };\n const acknowledgeEditorSessionReady = (): void => {\n if (readMode() !== 'edit' || options.harness.getWorkingDocument() === null) return;\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.EDITOR_SESSION_READY, {\n mode: 'edit',\n editorSessionReady: true,\n });\n };\n const reportSaveTransactionError = (input: {\n code: string;\n stage: 'document.export' | 'document.commit';\n actualRequestId: string | null;\n expectedRequestId?: string | null;\n expectedVersion?: number | null;\n actualVersion?: number | null;\n message?: string;\n }): void => {\n const has = (key: keyof typeof input): boolean => Object.prototype.hasOwnProperty.call(input, key);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n code: input.code,\n stage: input.stage,\n expectedRequestId: has('expectedRequestId') ? input.expectedRequestId : saveTransaction.requestId,\n actualRequestId: input.actualRequestId,\n expectedVersion: has('expectedVersion') ? input.expectedVersion : saveTransaction.expectedVersion,\n actualVersion: has('actualVersion') ? input.actualVersion : null,\n ...(input.message ? { message: input.message } : {}),\n });\n };\n\n const notifySaveFailed = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n error?: unknown,\n ): Promise<void> => {\n const notify = options.interactions?.notifySaveFailed;\n if (!notify) return;\n let state: PlayableLocalEditorSaveFailureState | null | undefined;\n try {\n state = options.harness.getSaveFailureState?.();\n } catch (stateError) {\n console.error('[PlayableForgePlayBridge] save failure state unavailable', stateError);\n }\n const input: PlayableLocalEditorSaveFailureInput = {\n operation,\n status: state?.status ?? (error instanceof Error ? error.message : undefined),\n details: state?.details,\n error: error ?? state?.error,\n };\n try {\n await notify(input);\n } catch (notifyError) {\n console.error('[PlayableForgePlayBridge] save failure notification failed', notifyError);\n }\n };\n\n const saveScene = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n ): Promise<boolean> => {\n if (options.saveDocument) return options.saveDocument(operation);\n try {\n const saved = await options.harness.saveScene();\n if (!saved) await notifySaveFailed(operation);\n return saved;\n } catch (error) {\n await notifySaveFailed(operation, error);\n throw error;\n }\n };\n\n const readUnsavedChangesState = (): PlayableLocalEditorUnsavedChangesState => {\n const fallbackHasWorkingDocument = options.harness.getWorkingDocument() !== null;\n try {\n return options.harness.getUnsavedChangesState?.() ?? {\n dirty: false,\n hasWorkingDocument: fallbackHasWorkingDocument,\n };\n } catch (error) {\n console.error('[PlayableForgePlayBridge] unsaved changes state unavailable', error);\n return {\n dirty: false,\n hasWorkingDocument: fallbackHasWorkingDocument,\n };\n }\n };\n\n const confirmDiscardIfNeeded = async (\n operation: PlayableLocalEditorDataSafetyOperation,\n ): Promise<boolean> => {\n const unsavedChanges = readUnsavedChangesState();\n if (!unsavedChanges.dirty || !unsavedChanges.hasWorkingDocument) return true;\n try {\n return await options.interactions?.confirmDiscardUnsavedChanges?.({\n operation,\n unsavedChanges,\n }) !== false;\n } catch (error) {\n console.error('[PlayableForgePlayBridge] discard confirmation failed', error);\n return false;\n }\n };\n\n const clearOverlayHideTimer = (): void => {\n if (overlayHideTimer == null) return;\n options.window.clearTimeout(overlayHideTimer);\n overlayHideTimer = null;\n };\n\n const showSaveOverlay = (content: PlayableForgePlayBridgeInstallOptions['loadingContent']['saveScene']): void => {\n clearOverlayHideTimer();\n options.loadingOverlay.show(content);\n };\n\n const scheduleSaveOverlayHide = (): void => {\n clearOverlayHideTimer();\n overlayHideTimer = options.window.setTimeout(() => {\n overlayHideTimer = null;\n options.loadingOverlay.hide();\n }, overlayHideDelayMs);\n };\n\n const reportModeChangeError = (error: unknown, fallbackMode: PlayableForgePlayMode): void => {\n options.reportError?.(error);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n kind: 'rejection',\n message: error instanceof Error ? error.message : String(error),\n });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: fallbackMode });\n };\n\n const postHistoryOperationResult = (\n operation: PlayableForgePlayHistoryOperation,\n payload: Record<string, unknown>,\n result: PlayableForgePlayHistoryOperationResult,\n ): void => {\n const requestId = readPlayableForgePlayRequestId(payload);\n postEvent(getPlayableForgePlayHistoryResultEventName(operation), {\n ...result,\n ...(requestId ? { requestId } : {}),\n });\n };\n\n const switchMode = async (\n mode: PlayableForgePlayMode,\n switchOptions: { save?: boolean } = {},\n ): Promise<void> => {\n const exitLoadingContent = mode === 'play' && !options.exitEditor\n ? switchOptions.save === true\n ? options.loadingContent.saveAndRunGame\n : options.loadingContent.discardAndRunGame\n : null;\n const shouldRunExit = (): boolean => mode === 'play' && options.harness.getWorkingDocument() !== null;\n\n if (inFlight) await inFlight;\n if (readMode() === mode && !shouldRunExit()) {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode });\n if (mode === 'edit') acknowledgeEditorSessionReady();\n return;\n }\n\n inFlight = (async () => {\n if (mode === 'play' && switchOptions.save !== true && shouldRunExit() && !options.exitEditor) {\n const confirmed = await confirmDiscardIfNeeded('forge-play-mode-change');\n if (!confirmed) {\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n if (exitLoadingContent) {\n showSaveOverlay(exitLoadingContent);\n await waitForPaint();\n }\n try {\n let editorExitHandled = false;\n if (mode === 'edit') {\n saveState.preparedRevision = 0;\n saveState.committedRevision = 0;\n preparedDocumentFingerprint = null;\n preparedDocumentRevision = null;\n preparedCommittedDocumentFingerprint = null;\n preparedAuthoringSource = null;\n committedDocumentFingerprint = null;\n preparedRequestId = null;\n saveTransaction = createPlayableForgePlaySaveTransaction();\n await options.harness.enterEditor();\n if (options.renderAfterEnter !== false) options.harness.render();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n\n if (switchOptions.save === true) {\n const hasPendingPlatformCommit = saveState.preparedRevision > saveState.committedRevision;\n if (hasPendingPlatformCommit) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n const hasPlatformCommit = saveState.preparedRevision > 0\n && saveState.preparedRevision === saveState.committedRevision;\n const currentDocumentFingerprint = createPlayableForgePlayDocumentFingerprint(\n options.harness.getWorkingDocument(),\n );\n const platformCommitAlreadySaved = hasPlatformCommit\n && committedDocumentFingerprint !== null\n && currentDocumentFingerprint === committedDocumentFingerprint\n && options.hasUnsavedPlatformChanges?.() !== true;\n if (hasPlatformCommit && !platformCommitAlreadySaved) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n if (!platformCommitAlreadySaved) {\n if (options.saveAndExitEditor) {\n const exited = await options.saveAndExitEditor('forge-play-mode-change');\n if (!exited) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n editorExitHandled = true;\n } else {\n if (options.preflightRun && !await options.preflightRun()) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n const saved = await saveScene('forge-play-mode-change');\n if (!saved) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n } else if (options.preflightRun && !options.exitEditor && !await options.preflightRun()) {\n // Compatibility hosts without an atomic exit callback retain the\n // legacy preflight, while first-party hosts validate inside exitEditor.\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n }\n\n if (!editorExitHandled) {\n if (options.exitEditor) {\n const exited = await options.exitEditor(switchOptions.save === true ? 'save' : 'discard');\n if (!exited) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'edit';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'edit' });\n return;\n }\n } else {\n await options.harness.discardAndRunGame();\n }\n }\n if (exitLoadingContent) options.loadingOverlay.hide();\n currentMode = 'play';\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: 'play' });\n } catch (error) {\n if (exitLoadingContent) options.loadingOverlay.hide();\n throw error;\n }\n })();\n\n try {\n await inFlight;\n if (mode === 'edit') acknowledgeEditorSessionReady();\n } finally {\n inFlight = null;\n }\n };\n\n const commitPlatformSave = async (payload: Record<string, unknown> = {}): Promise<void> => {\n const requestId = readPlayableForgePlayRequestId(payload) ?? null;\n const actualVersion = readPlayableForgePlayPlatformVersion(payload);\n if (!requestId) {\n reportSaveTransactionError({\n code: 'document_commit_request_id_required',\n stage: 'document.commit',\n actualRequestId: null,\n actualVersion,\n });\n return;\n }\n if (inFlight) await inFlight;\n if (saveTransaction.phase === 'committed' && requestId === saveTransaction.requestId) return;\n if (!preparedRequestId) {\n reportSaveTransactionError({\n code: 'document_commit_no_pending',\n stage: 'document.commit',\n actualRequestId: requestId,\n actualVersion,\n });\n return;\n }\n if (requestId !== preparedRequestId) {\n reportSaveTransactionError({\n code: 'document_commit_request_id_mismatch',\n stage: 'document.commit',\n actualRequestId: requestId,\n expectedRequestId: preparedRequestId,\n actualVersion,\n });\n return;\n }\n if (commitInFlight) {\n if (commitInFlight.requestId === requestId) return commitInFlight.promise;\n await commitInFlight.promise;\n return commitPlatformSave(payload);\n }\n if (saveState.preparedRevision <= saveState.committedRevision) {\n reportSaveTransactionError({\n code: 'document_commit_no_pending',\n stage: 'document.commit',\n actualRequestId: requestId,\n expectedRequestId: preparedRequestId,\n actualVersion,\n });\n return;\n }\n\n setSaveTransaction('committing', {\n requestId,\n stage: 'document.commit',\n actualVersion,\n });\n\n const commitOperation = (async () => {\n try {\n const currentDocumentFingerprint = createPlayableForgePlayDocumentFingerprint(\n options.harness.getWorkingDocument(),\n );\n const hasProjectServiceTransaction = typeof preparedAuthoringSource?.serviceTransactionId === 'string'\n && preparedAuthoringSource.serviceTransactionId.length > 0;\n if (!hasProjectServiceTransaction\n && currentDocumentFingerprint !== preparedDocumentFingerprint) {\n throw new Error('Editor document changed after export; prepare a new export before commit.');\n }\n await options.commitDocument?.({\n payload,\n saveState,\n documentFingerprint: preparedDocumentFingerprint,\n documentRevision: preparedDocumentRevision,\n ...(preparedAuthoringSource ? { preparedAuthoringSource } : {}),\n });\n saveState.committedRevision = saveState.preparedRevision;\n committedDocumentFingerprint = preparedCommittedDocumentFingerprint\n ?? preparedDocumentFingerprint;\n setSaveTransaction('committed', {\n requestId,\n stage: 'document.commit',\n actualVersion,\n });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_COMMITTED, {\n requestId,\n ...(saveTransaction.expectedVersion === undefined\n ? {}\n : { expectedVersion: saveTransaction.expectedVersion }),\n ...(actualVersion === undefined ? {} : { actualVersion }),\n });\n } catch (error) {\n invalidatePreparedPlatformSave();\n setSaveTransaction('rejected', {\n requestId,\n stage: 'document.commit',\n actualVersion,\n rejection: {\n code: 'document_commit_failed',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n throw error;\n }\n })();\n commitInFlight = { requestId, promise: commitOperation };\n try {\n await commitOperation;\n } finally {\n if (commitInFlight?.promise === commitOperation) commitInFlight = null;\n }\n };\n\n const runHistoryOperation = async (\n operation: PlayableForgePlayHistoryOperation,\n payload: Record<string, unknown>,\n ): Promise<void> => {\n const historyOptions = readPlayableForgePlayHistoryOperationOptions(payload);\n try {\n if (readMode() !== 'edit') await switchMode('edit');\n const handler = operation === 'undo' ? options.harness.undo : options.harness.redo;\n if (!handler) {\n postHistoryOperationResult(operation, payload, createPlayableForgePlayHistoryUnavailableResult(\n operation,\n historyOptions,\n options.harness.getWorkingDocument(),\n ));\n return;\n }\n const result = await handler.call(options.harness, historyOptions);\n postHistoryOperationResult(operation, payload, result);\n } catch (error) {\n options.reportError?.(error);\n postHistoryOperationResult(operation, payload, createPlayableForgePlayHistoryUnavailableResult(\n operation,\n historyOptions,\n options.harness.getWorkingDocument(),\n error,\n ));\n }\n };\n\n const onMessage = (event: PlayableForgePlayMessageEvent): void => {\n if (event.source !== options.window.parent) return;\n const message = readRecord(event.data);\n if (message.source !== PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE) return;\n if (message.type !== PLAYABLE_FORGE_PLAY_POST_MESSAGE.COMMAND) return;\n const payload = readRecord(message.payload);\n const hasSessionId = Object.prototype.hasOwnProperty.call(payload, 'sessionId');\n if (hasSessionId && payload.sessionId !== sessionId) {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n code: 'editor_session_mismatch',\n expectedSessionId: sessionId,\n actualSessionId: payload.sessionId,\n });\n return;\n }\n const commandName = normalizePlayableForgePlayCommandName(payload.name);\n\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.ASSETS_DROP) {\n options.handleAssetDrop?.(payload);\n return;\n }\n if (commandName && PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS.has(commandName)) {\n event.stopImmediatePropagation?.();\n const handled = options.handleProjectAssetCommand\n ? options.handleProjectAssetCommand(commandName, payload)\n : Promise.resolve();\n void handled.catch((error) => {\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SYSTEM_ERROR, {\n kind: 'rejection',\n message: error instanceof Error ? error.message : String(error),\n });\n });\n return;\n }\n if (commandName && PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS.has(commandName)) {\n event.stopImmediatePropagation?.();\n void runHistoryOperation(\n commandName === PLAYABLE_FORGE_PLAY_COMMAND.UNDO ? 'undo' : 'redo',\n payload,\n );\n return;\n }\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_EXPORT) {\n showSaveOverlay(options.loadingContent.saveScene);\n const requestId = readPlayableForgePlayRequestId(payload);\n if (!requestId) {\n scheduleSaveOverlayHide();\n setSaveTransaction('rejected', {\n requestId: null,\n stage: 'document.export',\n rejection: { code: 'document_export_request_id_required' },\n });\n reportSaveTransactionError({\n code: 'document_export_request_id_required',\n stage: 'document.export',\n actualRequestId: null,\n expectedRequestId: null,\n expectedVersion: null,\n });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n error: 'document_export_request_id_required',\n });\n return;\n }\n if (inFlight || saveState.preparedRevision > saveState.committedRevision) {\n scheduleSaveOverlayHide();\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n requestId,\n error: inFlight ? 'document_export_in_progress' : 'document_export_not_committed',\n });\n return;\n }\n setSaveTransaction('preparing-authoring', {\n requestId,\n stage: 'document.export',\n expectedVersion: undefined,\n actualVersion: undefined,\n rejection: null,\n });\n const exportDocument = options.exportDocument;\n const revisionBeforeExport = saveState.preparedRevision;\n const committedRevisionBeforeExport = saveState.committedRevision;\n const preparedFingerprintBeforeExport = preparedDocumentFingerprint;\n const preparedDocumentRevisionBeforeExport = preparedDocumentRevision;\n const preparedCommittedFingerprintBeforeExport = preparedCommittedDocumentFingerprint;\n const preparedAuthoringSourceBeforeExport = preparedAuthoringSource;\n const committedFingerprintBeforeExport = committedDocumentFingerprint;\n const preparedRequestIdBeforeExport = preparedRequestId;\n const exported = exportDocument\n ? Promise.resolve().then(() => exportDocument({ payload, saveState, postEvent }))\n : Promise.resolve(null);\n const exportOperation = exported.then((result) => {\n if (saveState.preparedRevision > revisionBeforeExport) {\n if (!result) {\n throw new Error('Document export did not return the exported document fingerprint.');\n }\n preparedDocumentFingerprint = result.documentFingerprint;\n preparedDocumentRevision = result.documentRevision;\n preparedAuthoringSource = result.preparedAuthoringSource ?? null;\n preparedCommittedDocumentFingerprint = result.preparedAuthoringSource\n ? createPlayableForgePlayDocumentFingerprint(result.preparedAuthoringSource.document)\n : result.documentFingerprint;\n committedDocumentFingerprint = null;\n preparedRequestId = requestId;\n setSaveTransaction('awaiting-platform-commit', {\n requestId,\n stage: 'document.export',\n expectedVersion: result.expectedVersion,\n actualVersion: undefined,\n rejection: null,\n });\n }\n }).catch(async (error) => {\n saveState.preparedRevision = revisionBeforeExport;\n saveState.committedRevision = committedRevisionBeforeExport;\n preparedDocumentFingerprint = preparedFingerprintBeforeExport;\n preparedDocumentRevision = preparedDocumentRevisionBeforeExport;\n preparedCommittedDocumentFingerprint = preparedCommittedFingerprintBeforeExport;\n preparedAuthoringSource = preparedAuthoringSourceBeforeExport;\n committedDocumentFingerprint = committedFingerprintBeforeExport;\n preparedRequestId = preparedRequestIdBeforeExport;\n setSaveTransaction('rejected', {\n requestId,\n stage: 'document.export',\n rejection: {\n code: 'document_export_failed',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n options.loadingOverlay.hide();\n await notifySaveFailed('forge-play-document-export', error);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.DOCUMENT_EXPORTED, {\n ...(readPlayableForgePlayRequestId(payload) ? { requestId: readPlayableForgePlayRequestId(payload) } : {}),\n error: error instanceof Error ? error.message : String(error),\n });\n }).then(() => {\n scheduleSaveOverlayHide();\n }).finally(() => {\n if (inFlight === exportOperation) inFlight = null;\n });\n inFlight = exportOperation;\n return;\n }\n if (commandName === PLAYABLE_FORGE_PLAY_COMMAND.DOCUMENT_COMMIT) {\n showSaveOverlay(options.loadingContent.saveScene);\n void commitPlatformSave(payload).catch((error) => {\n options.loadingOverlay.hide();\n reportModeChangeError(error, readMode());\n }).then(() => {\n scheduleSaveOverlayHide();\n });\n return;\n }\n if (commandName !== PLAYABLE_FORGE_PLAY_COMMAND.MODE_CHANGE) return;\n\n const mode = payload.mode === 'edit' ? 'edit' : payload.mode === 'play' ? 'play' : null;\n if (!mode) return;\n const save = mode === 'play' ? payload.save !== false : false;\n\n void switchMode(mode, { save }).catch((error) => {\n reportModeChangeError(error, readMode());\n });\n };\n\n options.window.addEventListener('message', onMessage, { capture: true });\n const postReadyEvents = (): void => {\n const editorSessionReady = readMode() === 'edit' && options.harness.getWorkingDocument() !== null;\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.SCENE_READY, {\n mode: readMode(),\n editorSessionReady,\n });\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.FIRST_FRAME);\n postEvent(PLAYABLE_FORGE_PLAY_EVENT.MODE_CHANGE, { mode: readMode() });\n if (editorSessionReady) acknowledgeEditorSessionReady();\n };\n if (options.window.queueMicrotask) options.window.queueMicrotask(postReadyEvents);\n else postReadyEvents();\n\n return {\n switchMode,\n commitPlatformSave,\n getMode() {\n return readMode();\n },\n getSessionId() {\n return sessionId;\n },\n getSaveState() {\n return saveState;\n },\n getSaveTransaction() {\n return Object.freeze({\n ...saveTransaction,\n rejection: saveTransaction.rejection ? Object.freeze({ ...saveTransaction.rejection }) : null,\n });\n },\n acknowledgeEditorSessionReady,\n postEvent,\n dispose() {\n clearOverlayHideTimer();\n options.window.removeEventListener('message', onMessage, { capture: true });\n },\n };\n}\n\nexport function createPlayableForgePlayDocumentFingerprint(document: unknown): string | null {\n if (document == null) return null;\n try {\n return JSON.stringify(document);\n } catch {\n return null;\n }\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction readOptionalRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nfunction createPlayableForgePlayHistoryUnavailableResult(\n operation: PlayableForgePlayHistoryOperation,\n options: PlayableForgePlayHistoryOperationOptions,\n workingDocument: unknown | null,\n error?: unknown,\n): PlayableForgePlayHistoryOperationResult {\n const waitForProjection = options.waitForProjection ?? 'none';\n const failed = error != null;\n return {\n ok: false,\n operation,\n origin: options.origin ?? 'agent',\n waitForProjection,\n documentChanged: false,\n transactionLabel: null,\n workingDocument,\n dirty: false,\n history: { canUndo: false, canRedo: false },\n status: failed\n ? `${operation === 'undo' ? 'Undo' : 'Redo'} failed`\n : `${operation === 'undo' ? 'Undo' : 'Redo'} unavailable`,\n projection: {\n waitPolicy: waitForProjection,\n idle: true,\n activeBatchIds: [],\n lastBatch: null,\n },\n error: failed\n ? error instanceof Error ? error.message : String(error)\n : `Harness ${operation} is not available.`,\n };\n}\n"]}
@@ -47,6 +47,7 @@ export interface PlayableLocalEditorHostControllerOptions<THarness extends Playa
47
47
  enabled?: boolean;
48
48
  window?: PlayableForgePlayWindowLike;
49
49
  initialMode?: PlayableForgePlayBridgeInstallOptions['initialMode'];
50
+ createSessionId?: PlayableForgePlayBridgeInstallOptions['createSessionId'];
50
51
  overlayHideDelayMs?: number;
51
52
  hasUnsavedPlatformChanges?: () => boolean;
52
53
  reportError?: (error: unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"host-controller.d.ts","sourceRoot":"","sources":["../../src/local-harness/host-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host-controller.d.ts","sourceRoot":"","sources":["../../src/local-harness/host-controller.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,10 @@ export function createPlayableLocalEditorHostController(options) {
35
35
  await bridge.switchMode('edit');
36
36
  };
37
37
  const postEvent = (name, payload = {}) => {
38
+ if (bridge) {
39
+ bridge.postEvent(name, payload);
40
+ return;
41
+ }
38
42
  const windowLike = options.forgePlay?.window;
39
43
  if (!windowLike)
40
44
  return;
@@ -60,6 +64,7 @@ export function createPlayableLocalEditorHostController(options) {
60
64
  discardAndRunGame: options.loadingContent.discardAndRunGame,
61
65
  },
62
66
  initialMode: options.forgePlay.initialMode,
67
+ createSessionId: options.forgePlay.createSessionId,
63
68
  overlayHideDelayMs: options.forgePlay.overlayHideDelayMs,
64
69
  waitForPaint: options.waitForPaint,
65
70
  renderAfterEnter: false,
@@ -103,8 +108,8 @@ export function createPlayableLocalEditorHostController(options) {
103
108
  saveDocument: operation => lifecycle.saveScene(operation),
104
109
  saveAndExitEditor: () => lifecycle.saveAndRunGame(),
105
110
  commitDocument: options.forgePlay.exportDocument
106
- ? async ({ documentFingerprint }) => lifecycle.commitDocumentSave(async () => {
107
- await lifecycleOperations.markDocumentCommitted?.(documentFingerprint);
111
+ ? async ({ documentFingerprint, documentRevision, preparedAuthoringSource, }) => lifecycle.commitDocumentSave(async () => {
112
+ await lifecycleOperations.markDocumentCommitted?.(documentFingerprint, documentRevision, preparedAuthoringSource);
108
113
  })
109
114
  : undefined,
110
115
  exitEditor: async (reason) => {
@@ -120,7 +125,10 @@ export function createPlayableLocalEditorHostController(options) {
120
125
  getBridge() {
121
126
  return bridge;
122
127
  },
123
- enterEditor: lifecycle.enterEditor,
128
+ async enterEditor() {
129
+ await lifecycle.enterEditor();
130
+ bridge?.acknowledgeEditorSessionReady();
131
+ },
124
132
  saveScene: executor => lifecycle.saveScene('save-scene', undefined, executor),
125
133
  prepareSaveAndRunGame: lifecycle.prepareSaveAndRunGame,
126
134
  prepareDiscardAndRunGame: lifecycle.prepareDiscardAndRunGame,
@@ -1 +1 @@
1
- {"version":3,"file":"host-controller.js","sourceRoot":"","sources":["../../src/local-harness/host-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n installPlayableForgePlayModeBridge,\n postPlayableForgePlayEvent,\n} from './forge-play';\nimport type {\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayDocumentExportResult,\n PlayableForgePlayModeBridge,\n PlayableForgePlaySaveState,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nimport {\n createPlayableLocalEditorLifecycleController,\n} from './lifecycle';\nimport type {\n PlayableLocalEditorLifecycleContent,\n PlayableLocalEditorLifecycleController,\n PlayableLocalEditorDocumentOperationExecutor,\n PlayableLocalEditorLifecycleOperations,\n PlayableLocalEditorLifecycleHarness,\n PlayableLocalEditorLifecycleScopeHost,\n PlayableLocalEditorInteractionPolicy,\n PlayableLocalEditorLoadingOverlayContent,\n PlayableLocalEditorLoadingOverlayController,\n PlayableLocalEditorPreparedRun,\n} from './types';\nimport type { FpsEditorEventPublisher } from '@fps-games/editor-core/events';\nimport type { FpsDiagnostic } from '@fps-games/plugin-api';\n\nexport interface PlayableLocalEditorHostHarness\n extends PlayableLocalEditorLifecycleHarness {\n getWorkingDocument(): unknown | null;\n projectAssetDropPoint?(point: { x: number; y: number } | null): { x: number; y: number; z: number } | null;\n}\n\nexport interface PlayableLocalEditorHostLoadingContent\n extends PlayableLocalEditorLifecycleContent {\n saveScene: PlayableLocalEditorLoadingOverlayContent;\n}\n\nexport interface PlayableLocalEditorHostBridgeContext<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n name: string;\n payload: Record<string, unknown>;\n harness: THarness;\n ensureEditorMode: () => Promise<void>;\n runWithAssetLoadingOverlay: <T>(operation: () => Promise<T>) => Promise<T>;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n getBridge: () => PlayableForgePlayModeBridge | null;\n}\n\nexport interface PlayableLocalEditorHostControllerOptions<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n harness: THarness;\n lifecycleOperations: PlayableLocalEditorLifecycleOperations;\n lifecycleScopeHost?: PlayableLocalEditorLifecycleScopeHost;\n eventPublisher?: FpsEditorEventPublisher;\n reportDiagnostic?: (diagnostic: FpsDiagnostic) => void;\n loadingOverlay: Pick<PlayableLocalEditorLoadingOverlayController, 'show' | 'hide' | 'isVisible'> & {\n dispose?: () => void;\n };\n loadingContent: PlayableLocalEditorHostLoadingContent;\n beforeDiscardAndRunGame?: () => void | Promise<void>;\n waitForPaint?: () => Promise<void>;\n waitForMilliseconds?: (milliseconds: number) => Promise<void>;\n now?: () => number;\n minAssetLoadingOverlayMs?: number;\n viewportRevealReason?: string;\n renderAfterEnter?: boolean;\n interactions?: PlayableLocalEditorInteractionPolicy;\n forgePlay?: {\n enabled?: boolean;\n window?: PlayableForgePlayWindowLike;\n initialMode?: PlayableForgePlayBridgeInstallOptions['initialMode'];\n overlayHideDelayMs?: number;\n hasUnsavedPlatformChanges?: () => boolean;\n reportError?: (error: unknown) => void;\n handleAssetDrop?: (\n payload: Record<string, unknown>,\n context: Omit<PlayableLocalEditorHostBridgeContext<THarness>, 'name'>,\n ) => void;\n handleProjectAssetCommand?: (\n context: PlayableLocalEditorHostBridgeContext<THarness>,\n ) => Promise<void> | void;\n exportDocument?: (input: {\n payload: Record<string, unknown>;\n saveState: PlayableForgePlaySaveState;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n context: Omit<PlayableLocalEditorHostBridgeContext<THarness>, 'name' | 'payload'>;\n }) => Promise<PlayableForgePlayDocumentExportResult> | PlayableForgePlayDocumentExportResult;\n };\n}\n\nexport interface PlayableLocalEditorHostController<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n harness: THarness;\n lifecycle: PlayableLocalEditorLifecycleController;\n getBridge(): PlayableForgePlayModeBridge | null;\n enterEditor(): Promise<void>;\n saveScene(executor?: PlayableLocalEditorDocumentOperationExecutor): Promise<boolean>;\n prepareSaveAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['prepareSaveAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<PlayableLocalEditorPreparedRun>;\n prepareDiscardAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['prepareDiscardAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<PlayableLocalEditorPreparedRun>;\n saveAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['saveAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<boolean>;\n discardAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['discardAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<boolean>;\n runWithAssetLoadingOverlay<T>(operation: () => Promise<T>): Promise<T>;\n dispose(): Promise<void>;\n}\n\nexport function createPlayableLocalEditorHostController<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n>(\n options: PlayableLocalEditorHostControllerOptions<THarness>,\n): PlayableLocalEditorHostController<THarness> {\n let bridge: PlayableForgePlayModeBridge | null = null;\n let disposal: Promise<void> | null = null;\n let lifecycleDisposed = false;\n let loadingOverlayDisposed = false;\n const loadingOverlay = createScopedLoadingOverlay(options.loadingOverlay);\n const lifecycleLoadingOverlay = loadingOverlay.createScope();\n const forgePlayLoadingOverlay = loadingOverlay.createScope();\n const harness = options.harness;\n const lifecycleOperations = createLifecycleOperations(\n options.lifecycleOperations,\n options.beforeDiscardAndRunGame,\n );\n\n const lifecycle = createPlayableLocalEditorLifecycleController({\n harness,\n operations: lifecycleOperations,\n scopeHost: options.lifecycleScopeHost,\n eventPublisher: options.eventPublisher,\n reportDiagnostic: options.reportDiagnostic,\n loadingOverlay: lifecycleLoadingOverlay,\n content: options.loadingContent,\n interactions: options.interactions,\n waitForPaint: options.waitForPaint,\n waitForMilliseconds: options.waitForMilliseconds,\n now: options.now,\n minAssetLoadingOverlayMs: options.minAssetLoadingOverlayMs,\n viewportRevealReason: options.viewportRevealReason,\n renderAfterEnter: options.renderAfterEnter,\n initialMode: options.forgePlay?.initialMode,\n });\n\n const runWithAssetLoadingOverlay = <T>(operation: () => Promise<T>): Promise<T> => (\n lifecycle.runWithAssetLoadingOverlay(operation)\n );\n const lifecycleHarness = createLifecycleHarness(harness, lifecycle);\n\n const ensureEditorMode = async (): Promise<void> => {\n if (!bridge || bridge.getMode() === 'edit') return;\n await bridge.switchMode('edit');\n };\n\n const postEvent = (name: string, payload: Record<string, unknown> = {}): void => {\n const windowLike = options.forgePlay?.window;\n if (!windowLike) return;\n postPlayableForgePlayEvent(windowLike, name, payload);\n };\n\n const createBridgeContext = (\n name: string,\n payload: Record<string, unknown>,\n ): PlayableLocalEditorHostBridgeContext<THarness> => ({\n name,\n payload,\n harness: lifecycleHarness,\n ensureEditorMode,\n runWithAssetLoadingOverlay,\n postEvent,\n getBridge: () => bridge,\n });\n\n if (options.forgePlay?.enabled !== false && options.forgePlay?.window) {\n bridge = installPlayableForgePlayModeBridge({\n window: options.forgePlay.window,\n harness: lifecycleHarness,\n loadingOverlay: forgePlayLoadingOverlay,\n loadingContent: {\n saveScene: options.loadingContent.saveScene,\n saveAndRunGame: options.loadingContent.saveAndRunGame,\n discardAndRunGame: options.loadingContent.discardAndRunGame,\n },\n initialMode: options.forgePlay.initialMode,\n overlayHideDelayMs: options.forgePlay.overlayHideDelayMs,\n waitForPaint: options.waitForPaint,\n renderAfterEnter: false,\n readMode: () => {\n const mode = lifecycle.lifecycle.getSnapshot().mode;\n if (mode === 'edit' || mode === 'exiting-edit') return 'edit';\n if (mode === 'play' || mode === 'entering-edit') return 'play';\n return options.forgePlay?.initialMode ?? 'play';\n },\n hasUnsavedPlatformChanges: options.forgePlay.hasUnsavedPlatformChanges,\n reportError: options.forgePlay.reportError,\n interactions: options.interactions,\n handleAssetDrop: options.forgePlay.handleAssetDrop\n ? payload => {\n options.forgePlay?.handleAssetDrop?.(payload, createBridgeContext('', payload));\n }\n : undefined,\n handleProjectAssetCommand: options.forgePlay.handleProjectAssetCommand\n ? async (name, payload) => {\n await options.forgePlay?.handleProjectAssetCommand?.(createBridgeContext(name, payload));\n }\n : undefined,\n exportDocument: options.forgePlay.exportDocument\n ? async ({ payload, saveState, postEvent: bridgePostEvent }) => {\n let result: PlayableForgePlayDocumentExportResult | null = null;\n await lifecycle.prepareDocumentSave(async () => {\n result = await options.forgePlay?.exportDocument?.({\n payload,\n saveState,\n postEvent: bridgePostEvent,\n context: createBridgeContext('', payload),\n }) ?? null;\n });\n if (!result) throw new Error('Document export did not return a document fingerprint.');\n return result;\n }\n : undefined,\n saveDocument: operation => lifecycle.saveScene(operation),\n saveAndExitEditor: () => lifecycle.saveAndRunGame(),\n commitDocument: options.forgePlay.exportDocument\n ? async ({ documentFingerprint }) => lifecycle.commitDocumentSave(async () => {\n await lifecycleOperations.markDocumentCommitted?.(documentFingerprint);\n })\n : undefined,\n exitEditor: async reason => {\n if (reason === 'discard') return lifecycle.discardAndRunGame();\n return lifecycle.runCommittedDocument();\n },\n });\n }\n\n return {\n harness: lifecycleHarness,\n lifecycle,\n getBridge() {\n return bridge;\n },\n enterEditor: lifecycle.enterEditor,\n saveScene: executor => lifecycle.saveScene('save-scene', undefined, executor),\n prepareSaveAndRunGame: lifecycle.prepareSaveAndRunGame,\n prepareDiscardAndRunGame: lifecycle.prepareDiscardAndRunGame,\n saveAndRunGame: lifecycle.saveAndRunGame,\n discardAndRunGame: lifecycle.discardAndRunGame,\n runWithAssetLoadingOverlay,\n async dispose() {\n if (disposal) return disposal;\n const pending = (async () => {\n if (!lifecycleDisposed) {\n await lifecycle.dispose();\n lifecycleDisposed = true;\n }\n const errors: unknown[] = [];\n if (bridge) {\n try {\n bridge.dispose();\n bridge = null;\n } catch (error) { errors.push(error); }\n }\n if (!loadingOverlayDisposed) {\n try {\n loadingOverlay.dispose();\n loadingOverlayDisposed = true;\n } catch (error) { errors.push(error); }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) {\n const error = new Error('Playable Local Editor Host cleanup failed.') as Error & { errors: unknown[] };\n error.errors = errors;\n throw error;\n }\n })();\n disposal = pending;\n void pending.catch(() => {\n if (disposal === pending) disposal = null;\n });\n return pending;\n },\n };\n}\n\nfunction createLifecycleHarness<\n THarness extends PlayableLocalEditorHostHarness,\n>(\n harness: THarness,\n lifecycle: Pick<\n PlayableLocalEditorLifecycleController,\n 'enterEditor' | 'saveScene' | 'saveAndRunGame' | 'discardAndRunGame'\n >,\n): THarness {\n const enterEditor = lifecycle.enterEditor;\n const saveScene = (executor?: PlayableLocalEditorDocumentOperationExecutor) => (\n lifecycle.saveScene('save-scene', undefined, executor)\n );\n const saveAndRunGame = lifecycle.saveAndRunGame;\n const discardAndRunGame = lifecycle.discardAndRunGame;\n const hiddenOperations = new Set<PropertyKey>([\n 'runGame',\n 'setAgentLifecycleController',\n 'setLifecycleController',\n 'getLocalEditorHarnessLifecycleOperations',\n 'dispose',\n ]);\n return new Proxy(harness, {\n get(target, property) {\n if (hiddenOperations.has(property)) return undefined;\n if (property === 'enterEditor') return enterEditor;\n if (property === 'saveScene') return saveScene;\n if (property === 'saveAndRunGame') return saveAndRunGame;\n if (property === 'discardAndRunGame') return discardAndRunGame;\n const value = Reflect.get(target, property, target);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n has(target, property) {\n return !hiddenOperations.has(property) && Reflect.has(target, property);\n },\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(property => !hiddenOperations.has(property));\n },\n getOwnPropertyDescriptor(target, property) {\n if (hiddenOperations.has(property)) return undefined;\n return Reflect.getOwnPropertyDescriptor(target, property);\n },\n }) as THarness;\n}\n\nfunction createScopedLoadingOverlay(\n loadingOverlay: Pick<PlayableLocalEditorLoadingOverlayController, 'show' | 'hide' | 'isVisible'> & {\n dispose?: () => void;\n },\n) {\n let owner: symbol | null = null;\n return {\n createScope() {\n const scopeOwner = Symbol('playable-local-editor-loading-overlay-scope');\n return {\n show(content: PlayableLocalEditorLoadingOverlayContent): void {\n owner = scopeOwner;\n loadingOverlay.show(content);\n },\n hide(): void {\n if (owner !== scopeOwner) return;\n owner = null;\n loadingOverlay.hide();\n },\n isVisible(): boolean {\n return loadingOverlay.isVisible();\n },\n isOwned(): boolean {\n return owner === scopeOwner;\n },\n };\n },\n dispose(): void {\n owner = null;\n loadingOverlay.dispose?.();\n },\n };\n}\n\nfunction createLifecycleOperations(\n operations: PlayableLocalEditorLifecycleOperations,\n beforeDiscardAndRunGame: (() => void | Promise<void>) | undefined,\n): PlayableLocalEditorLifecycleOperations {\n return {\n ...operations,\n async runGame(reason) {\n await beforeDiscardAndRunGame?.();\n await operations.runGame(reason);\n },\n };\n}\n"]}
1
+ {"version":3,"file":"host-controller.js","sourceRoot":"","sources":["../../src/local-harness/host-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n installPlayableForgePlayModeBridge,\n postPlayableForgePlayEvent,\n} from './forge-play';\nimport type {\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayDocumentExportResult,\n PlayableForgePlayModeBridge,\n PlayableForgePlaySaveState,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nimport {\n createPlayableLocalEditorLifecycleController,\n} from './lifecycle';\nimport type {\n PlayableLocalEditorLifecycleContent,\n PlayableLocalEditorLifecycleController,\n PlayableLocalEditorDocumentOperationExecutor,\n PlayableLocalEditorLifecycleOperations,\n PlayableLocalEditorLifecycleHarness,\n PlayableLocalEditorLifecycleScopeHost,\n PlayableLocalEditorInteractionPolicy,\n PlayableLocalEditorLoadingOverlayContent,\n PlayableLocalEditorLoadingOverlayController,\n PlayableLocalEditorPreparedRun,\n} from './types';\nimport type { FpsEditorEventPublisher } from '@fps-games/editor-core/events';\nimport type { FpsDiagnostic } from '@fps-games/plugin-api';\n\nexport interface PlayableLocalEditorHostHarness\n extends PlayableLocalEditorLifecycleHarness {\n getWorkingDocument(): unknown | null;\n projectAssetDropPoint?(point: { x: number; y: number } | null): { x: number; y: number; z: number } | null;\n}\n\nexport interface PlayableLocalEditorHostLoadingContent\n extends PlayableLocalEditorLifecycleContent {\n saveScene: PlayableLocalEditorLoadingOverlayContent;\n}\n\nexport interface PlayableLocalEditorHostBridgeContext<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n name: string;\n payload: Record<string, unknown>;\n harness: THarness;\n ensureEditorMode: () => Promise<void>;\n runWithAssetLoadingOverlay: <T>(operation: () => Promise<T>) => Promise<T>;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n getBridge: () => PlayableForgePlayModeBridge | null;\n}\n\nexport interface PlayableLocalEditorHostControllerOptions<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n harness: THarness;\n lifecycleOperations: PlayableLocalEditorLifecycleOperations;\n lifecycleScopeHost?: PlayableLocalEditorLifecycleScopeHost;\n eventPublisher?: FpsEditorEventPublisher;\n reportDiagnostic?: (diagnostic: FpsDiagnostic) => void;\n loadingOverlay: Pick<PlayableLocalEditorLoadingOverlayController, 'show' | 'hide' | 'isVisible'> & {\n dispose?: () => void;\n };\n loadingContent: PlayableLocalEditorHostLoadingContent;\n beforeDiscardAndRunGame?: () => void | Promise<void>;\n waitForPaint?: () => Promise<void>;\n waitForMilliseconds?: (milliseconds: number) => Promise<void>;\n now?: () => number;\n minAssetLoadingOverlayMs?: number;\n viewportRevealReason?: string;\n renderAfterEnter?: boolean;\n interactions?: PlayableLocalEditorInteractionPolicy;\n forgePlay?: {\n enabled?: boolean;\n window?: PlayableForgePlayWindowLike;\n initialMode?: PlayableForgePlayBridgeInstallOptions['initialMode'];\n createSessionId?: PlayableForgePlayBridgeInstallOptions['createSessionId'];\n overlayHideDelayMs?: number;\n hasUnsavedPlatformChanges?: () => boolean;\n reportError?: (error: unknown) => void;\n handleAssetDrop?: (\n payload: Record<string, unknown>,\n context: Omit<PlayableLocalEditorHostBridgeContext<THarness>, 'name'>,\n ) => void;\n handleProjectAssetCommand?: (\n context: PlayableLocalEditorHostBridgeContext<THarness>,\n ) => Promise<void> | void;\n exportDocument?: (input: {\n payload: Record<string, unknown>;\n saveState: PlayableForgePlaySaveState;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n context: Omit<PlayableLocalEditorHostBridgeContext<THarness>, 'name' | 'payload'>;\n }) => Promise<PlayableForgePlayDocumentExportResult> | PlayableForgePlayDocumentExportResult;\n };\n}\n\nexport interface PlayableLocalEditorHostController<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n> {\n harness: THarness;\n lifecycle: PlayableLocalEditorLifecycleController;\n getBridge(): PlayableForgePlayModeBridge | null;\n enterEditor(): Promise<void>;\n saveScene(executor?: PlayableLocalEditorDocumentOperationExecutor): Promise<boolean>;\n prepareSaveAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['prepareSaveAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<PlayableLocalEditorPreparedRun>;\n prepareDiscardAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['prepareDiscardAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<PlayableLocalEditorPreparedRun>;\n saveAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['saveAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<boolean>;\n discardAndRunGame(\n context?: Parameters<PlayableLocalEditorLifecycleController['discardAndRunGame']>[0],\n executor?: PlayableLocalEditorDocumentOperationExecutor,\n ): Promise<boolean>;\n runWithAssetLoadingOverlay<T>(operation: () => Promise<T>): Promise<T>;\n dispose(): Promise<void>;\n}\n\nexport function createPlayableLocalEditorHostController<\n THarness extends PlayableLocalEditorHostHarness = PlayableLocalEditorHostHarness,\n>(\n options: PlayableLocalEditorHostControllerOptions<THarness>,\n): PlayableLocalEditorHostController<THarness> {\n let bridge: PlayableForgePlayModeBridge | null = null;\n let disposal: Promise<void> | null = null;\n let lifecycleDisposed = false;\n let loadingOverlayDisposed = false;\n const loadingOverlay = createScopedLoadingOverlay(options.loadingOverlay);\n const lifecycleLoadingOverlay = loadingOverlay.createScope();\n const forgePlayLoadingOverlay = loadingOverlay.createScope();\n const harness = options.harness;\n const lifecycleOperations = createLifecycleOperations(\n options.lifecycleOperations,\n options.beforeDiscardAndRunGame,\n );\n\n const lifecycle = createPlayableLocalEditorLifecycleController({\n harness,\n operations: lifecycleOperations,\n scopeHost: options.lifecycleScopeHost,\n eventPublisher: options.eventPublisher,\n reportDiagnostic: options.reportDiagnostic,\n loadingOverlay: lifecycleLoadingOverlay,\n content: options.loadingContent,\n interactions: options.interactions,\n waitForPaint: options.waitForPaint,\n waitForMilliseconds: options.waitForMilliseconds,\n now: options.now,\n minAssetLoadingOverlayMs: options.minAssetLoadingOverlayMs,\n viewportRevealReason: options.viewportRevealReason,\n renderAfterEnter: options.renderAfterEnter,\n initialMode: options.forgePlay?.initialMode,\n });\n\n const runWithAssetLoadingOverlay = <T>(operation: () => Promise<T>): Promise<T> => (\n lifecycle.runWithAssetLoadingOverlay(operation)\n );\n const lifecycleHarness = createLifecycleHarness(harness, lifecycle);\n\n const ensureEditorMode = async (): Promise<void> => {\n if (!bridge || bridge.getMode() === 'edit') return;\n await bridge.switchMode('edit');\n };\n\n const postEvent = (name: string, payload: Record<string, unknown> = {}): void => {\n if (bridge) {\n bridge.postEvent(name, payload);\n return;\n }\n const windowLike = options.forgePlay?.window;\n if (!windowLike) return;\n postPlayableForgePlayEvent(windowLike, name, payload);\n };\n\n const createBridgeContext = (\n name: string,\n payload: Record<string, unknown>,\n ): PlayableLocalEditorHostBridgeContext<THarness> => ({\n name,\n payload,\n harness: lifecycleHarness,\n ensureEditorMode,\n runWithAssetLoadingOverlay,\n postEvent,\n getBridge: () => bridge,\n });\n\n if (options.forgePlay?.enabled !== false && options.forgePlay?.window) {\n bridge = installPlayableForgePlayModeBridge({\n window: options.forgePlay.window,\n harness: lifecycleHarness,\n loadingOverlay: forgePlayLoadingOverlay,\n loadingContent: {\n saveScene: options.loadingContent.saveScene,\n saveAndRunGame: options.loadingContent.saveAndRunGame,\n discardAndRunGame: options.loadingContent.discardAndRunGame,\n },\n initialMode: options.forgePlay.initialMode,\n createSessionId: options.forgePlay.createSessionId,\n overlayHideDelayMs: options.forgePlay.overlayHideDelayMs,\n waitForPaint: options.waitForPaint,\n renderAfterEnter: false,\n readMode: () => {\n const mode = lifecycle.lifecycle.getSnapshot().mode;\n if (mode === 'edit' || mode === 'exiting-edit') return 'edit';\n if (mode === 'play' || mode === 'entering-edit') return 'play';\n return options.forgePlay?.initialMode ?? 'play';\n },\n hasUnsavedPlatformChanges: options.forgePlay.hasUnsavedPlatformChanges,\n reportError: options.forgePlay.reportError,\n interactions: options.interactions,\n handleAssetDrop: options.forgePlay.handleAssetDrop\n ? payload => {\n options.forgePlay?.handleAssetDrop?.(payload, createBridgeContext('', payload));\n }\n : undefined,\n handleProjectAssetCommand: options.forgePlay.handleProjectAssetCommand\n ? async (name, payload) => {\n await options.forgePlay?.handleProjectAssetCommand?.(createBridgeContext(name, payload));\n }\n : undefined,\n exportDocument: options.forgePlay.exportDocument\n ? async ({ payload, saveState, postEvent: bridgePostEvent }) => {\n let result: PlayableForgePlayDocumentExportResult | null = null;\n await lifecycle.prepareDocumentSave(async () => {\n result = await options.forgePlay?.exportDocument?.({\n payload,\n saveState,\n postEvent: bridgePostEvent,\n context: createBridgeContext('', payload),\n }) ?? null;\n });\n if (!result) throw new Error('Document export did not return a document fingerprint.');\n return result;\n }\n : undefined,\n saveDocument: operation => lifecycle.saveScene(operation),\n saveAndExitEditor: () => lifecycle.saveAndRunGame(),\n commitDocument: options.forgePlay.exportDocument\n ? async ({\n documentFingerprint,\n documentRevision,\n preparedAuthoringSource,\n }) => lifecycle.commitDocumentSave(async () => {\n await lifecycleOperations.markDocumentCommitted?.(\n documentFingerprint,\n documentRevision,\n preparedAuthoringSource,\n );\n })\n : undefined,\n exitEditor: async reason => {\n if (reason === 'discard') return lifecycle.discardAndRunGame();\n return lifecycle.runCommittedDocument();\n },\n });\n }\n\n return {\n harness: lifecycleHarness,\n lifecycle,\n getBridge() {\n return bridge;\n },\n async enterEditor() {\n await lifecycle.enterEditor();\n bridge?.acknowledgeEditorSessionReady();\n },\n saveScene: executor => lifecycle.saveScene('save-scene', undefined, executor),\n prepareSaveAndRunGame: lifecycle.prepareSaveAndRunGame,\n prepareDiscardAndRunGame: lifecycle.prepareDiscardAndRunGame,\n saveAndRunGame: lifecycle.saveAndRunGame,\n discardAndRunGame: lifecycle.discardAndRunGame,\n runWithAssetLoadingOverlay,\n async dispose() {\n if (disposal) return disposal;\n const pending = (async () => {\n if (!lifecycleDisposed) {\n await lifecycle.dispose();\n lifecycleDisposed = true;\n }\n const errors: unknown[] = [];\n if (bridge) {\n try {\n bridge.dispose();\n bridge = null;\n } catch (error) { errors.push(error); }\n }\n if (!loadingOverlayDisposed) {\n try {\n loadingOverlay.dispose();\n loadingOverlayDisposed = true;\n } catch (error) { errors.push(error); }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) {\n const error = new Error('Playable Local Editor Host cleanup failed.') as Error & { errors: unknown[] };\n error.errors = errors;\n throw error;\n }\n })();\n disposal = pending;\n void pending.catch(() => {\n if (disposal === pending) disposal = null;\n });\n return pending;\n },\n };\n}\n\nfunction createLifecycleHarness<\n THarness extends PlayableLocalEditorHostHarness,\n>(\n harness: THarness,\n lifecycle: Pick<\n PlayableLocalEditorLifecycleController,\n 'enterEditor' | 'saveScene' | 'saveAndRunGame' | 'discardAndRunGame'\n >,\n): THarness {\n const enterEditor = lifecycle.enterEditor;\n const saveScene = (executor?: PlayableLocalEditorDocumentOperationExecutor) => (\n lifecycle.saveScene('save-scene', undefined, executor)\n );\n const saveAndRunGame = lifecycle.saveAndRunGame;\n const discardAndRunGame = lifecycle.discardAndRunGame;\n const hiddenOperations = new Set<PropertyKey>([\n 'runGame',\n 'setAgentLifecycleController',\n 'setLifecycleController',\n 'getLocalEditorHarnessLifecycleOperations',\n 'dispose',\n ]);\n return new Proxy(harness, {\n get(target, property) {\n if (hiddenOperations.has(property)) return undefined;\n if (property === 'enterEditor') return enterEditor;\n if (property === 'saveScene') return saveScene;\n if (property === 'saveAndRunGame') return saveAndRunGame;\n if (property === 'discardAndRunGame') return discardAndRunGame;\n const value = Reflect.get(target, property, target);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n has(target, property) {\n return !hiddenOperations.has(property) && Reflect.has(target, property);\n },\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(property => !hiddenOperations.has(property));\n },\n getOwnPropertyDescriptor(target, property) {\n if (hiddenOperations.has(property)) return undefined;\n return Reflect.getOwnPropertyDescriptor(target, property);\n },\n }) as THarness;\n}\n\nfunction createScopedLoadingOverlay(\n loadingOverlay: Pick<PlayableLocalEditorLoadingOverlayController, 'show' | 'hide' | 'isVisible'> & {\n dispose?: () => void;\n },\n) {\n let owner: symbol | null = null;\n return {\n createScope() {\n const scopeOwner = Symbol('playable-local-editor-loading-overlay-scope');\n return {\n show(content: PlayableLocalEditorLoadingOverlayContent): void {\n owner = scopeOwner;\n loadingOverlay.show(content);\n },\n hide(): void {\n if (owner !== scopeOwner) return;\n owner = null;\n loadingOverlay.hide();\n },\n isVisible(): boolean {\n return loadingOverlay.isVisible();\n },\n isOwned(): boolean {\n return owner === scopeOwner;\n },\n };\n },\n dispose(): void {\n owner = null;\n loadingOverlay.dispose?.();\n },\n };\n}\n\nfunction createLifecycleOperations(\n operations: PlayableLocalEditorLifecycleOperations,\n beforeDiscardAndRunGame: (() => void | Promise<void>) | undefined,\n): PlayableLocalEditorLifecycleOperations {\n return {\n ...operations,\n async runGame(reason) {\n await beforeDiscardAndRunGame?.();\n await operations.runGame(reason);\n },\n };\n}\n"]}
@@ -1,9 +1,7 @@
1
- export type { PlayableEditorAgentAssetLike, PlayableEditorAgentGameObjectLike, PlayableEditorAgentJsonObject, PlayableEditorAgentJsonValue, PlayableEditorAgentObjectDescriptionServices, PlayableEditorAgentPrefabMaterialTargetLike, PlayableEditorAgentPrefabSummaryLike, } from './agent-descriptions';
2
1
  export type { PlayableLocalEditorHostBridgeContext, PlayableLocalEditorHostLoadingContent, } from './host-controller';
3
- export type { PlayableForgePlayBridgeHarness, PlayableForgePlayBridgeInstallOptions, PlayableForgePlayBridgeLoadingOverlay, PlayableForgePlayDocumentExportResult, PlayableForgePlayHistoryOperation, PlayableForgePlayHistoryOperationOptions, PlayableForgePlayHistoryOperationResult, PlayableForgePlayHistoryProjectionResult, PlayableForgePlayHistoryStateResult, PlayableForgePlayMessageEvent, PlayableForgePlayMode, PlayableForgePlayModeBridge, PlayableForgePlayOperationOrigin, PlayableForgePlayProjectionWaitPolicy, PlayableForgePlaySaveState, PlayableForgePlayWindowLike, } from './forge-play-types';
4
- export type { PlayableLocalEditorLifecycleContent, PlayableLocalEditorDataSafetyOperation, PlayableLocalEditorDocumentOperationExecutor, PlayableLocalEditorDiscardConfirmationInput, PlayableLocalEditorInteractionPolicy, PlayableLocalEditorLoadingOverlayContent, PlayableLocalEditorLoadingOverlayController, PlayableLocalEditorLoadingOverlayPresentation, PlayableLocalEditorSaveFailureInput, PlayableLocalEditorSaveFailureState, PlayableLocalEditorSaveOptions, PlayableLocalEditorUnsavedChangesState, } from './types';
2
+ export type { PlayableForgePlayBridgeHarness, PlayableForgePlayBridgeInstallOptions, PlayableForgePlayBridgeLoadingOverlay, PlayableForgePlayDocumentExportResult, PlayableForgePlayHistoryOperation, PlayableForgePlayHistoryOperationOptions, PlayableForgePlayHistoryOperationResult, PlayableForgePlayHistoryProjectionResult, PlayableForgePlayHistoryStateResult, PlayableForgePlayMessageEvent, PlayableForgePlayMode, PlayableForgePlayModeBridge, PlayableForgePlayOperationOrigin, PlayableForgePlayProjectionWaitPolicy, PlayableForgePlaySaveState, PlayableForgePlaySaveTransaction, PlayableForgePlaySaveTransactionPhase, PlayableForgePlaySaveTransactionRejection, PlayableForgePlaySaveTransactionSnapshot, PlayableForgePlayWindowLike, } from './forge-play-types';
3
+ export type { PlayableLocalEditorLifecycleContent, PlayableLocalEditorDataSafetyOperation, PlayableLocalEditorDocumentOperationExecutor, PlayableLocalEditorDiscardConfirmationInput, PlayableLocalEditorInteractionPolicy, PlayableLocalEditorLoadingOverlayContent, PlayableLocalEditorLoadingOverlayController, PlayableLocalEditorLoadingOverlayPresentation, PlayableLocalEditorPreparedAuthoringSource, PlayableLocalEditorSaveFailureInput, PlayableLocalEditorSaveFailureState, PlayableLocalEditorSaveOptions, PlayableLocalEditorUnsavedChangesState, } from './types';
5
4
  export type { PlayableProjectAssetCommandAsset, PlayableProjectAssetCommandCreateResult, PlayableProjectAssetCommandHandler, PlayableProjectAssetCommandHandlerOptions, PlayableProjectAssetCommandHarness, PlayableProjectAssetCommandReloadResult, PlayableProjectAssetCommandUpdateRefreshResult, } from './project-asset-commands';
6
- export { describePlayableEditorAgentObject, describePlayableEditorAgentObjectSet, describePlayableEditorAgentRegionBinding, } from './agent-descriptions';
7
5
  export { createPlayableProjectAssetCommandHandler, } from './project-asset-commands';
8
6
  export { createPlayableLocalEditorLoadingOverlay, } from './loading-overlay';
9
7
  export { createPlayableEditorEntryController, } from './editor-entry';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/local-harness/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,4CAA4C,EAC5C,2CAA2C,EAC3C,oCAAoC,GACrC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oCAAoC,EACpC,qCAAqC,GACtC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,8BAA8B,EAC9B,qCAAqC,EACrC,qCAAqC,EACrC,qCAAqC,EACrC,iCAAiC,EACjC,wCAAwC,EACxC,uCAAuC,EACvC,wCAAwC,EACxC,mCAAmC,EACnC,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,EAChC,qCAAqC,EACrC,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,mCAAmC,EACnC,sCAAsC,EACtC,4CAA4C,EAC5C,2CAA2C,EAC3C,oCAAoC,EACpC,wCAAwC,EACxC,2CAA2C,EAC3C,6CAA6C,EAC7C,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gCAAgC,EAChC,uCAAuC,EACvC,kCAAkC,EAClC,yCAAyC,EACzC,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iCAAiC,EACjC,oCAAoC,EACpC,wCAAwC,GACzC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wCAAwC,GACzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uCAAuC,GACxC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,oCAAoC,EACpC,0BAA0B,EAC1B,8BAA8B,EAC9B,oCAAoC,EACpC,gCAAgC,EAChC,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0CAA0C,EAC1C,gCAAgC,EAChC,0CAA0C,EAC1C,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,oCAAoC,EACpC,gCAAgC,EAChC,0CAA0C,EAC1C,0BAA0B,EAC1B,4CAA4C,EAC5C,8BAA8B,GAC/B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/local-harness/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oCAAoC,EACpC,qCAAqC,GACtC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,8BAA8B,EAC9B,qCAAqC,EACrC,qCAAqC,EACrC,qCAAqC,EACrC,iCAAiC,EACjC,wCAAwC,EACxC,uCAAuC,EACvC,wCAAwC,EACxC,mCAAmC,EACnC,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,EAChC,qCAAqC,EACrC,0BAA0B,EAC1B,gCAAgC,EAChC,qCAAqC,EACrC,yCAAyC,EACzC,wCAAwC,EACxC,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,mCAAmC,EACnC,sCAAsC,EACtC,4CAA4C,EAC5C,2CAA2C,EAC3C,oCAAoC,EACpC,wCAAwC,EACxC,2CAA2C,EAC3C,6CAA6C,EAC7C,0CAA0C,EAC1C,mCAAmC,EACnC,mCAAmC,EACnC,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gCAAgC,EAChC,uCAAuC,EACvC,kCAAkC,EAClC,yCAAyC,EACzC,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wCAAwC,GACzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uCAAuC,GACxC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,oCAAoC,EACpC,0BAA0B,EAC1B,8BAA8B,EAC9B,oCAAoC,EACpC,gCAAgC,EAChC,mCAAmC,EACnC,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0CAA0C,EAC1C,gCAAgC,EAChC,0CAA0C,EAC1C,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,oCAAoC,EACpC,gCAAgC,EAChC,0CAA0C,EAC1C,0BAA0B,EAC1B,4CAA4C,EAC5C,8BAA8B,GAC/B,MAAM,cAAc,CAAC"}
@@ -1,4 +1,3 @@
1
- export { describePlayableEditorAgentObject, describePlayableEditorAgentObjectSet, describePlayableEditorAgentRegionBinding, } from './agent-descriptions.js';
2
1
  export { createPlayableProjectAssetCommandHandler, } from './project-asset-commands.js';
3
2
  export { createPlayableLocalEditorLoadingOverlay, } from './loading-overlay.js';
4
3
  export { createPlayableEditorEntryController, } from './editor-entry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-harness/index.ts"],"names":[],"mappings":"AAsDA,OAAO,EACL,iCAAiC,EACjC,oCAAoC,EACpC,wCAAwC,GACzC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wCAAwC,GACzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uCAAuC,GACxC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AAexB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0CAA0C,EAC1C,gCAAgC,EAChC,0CAA0C,EAC1C,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,oCAAoC,EACpC,gCAAgC,EAChC,0CAA0C,EAC1C,0BAA0B,EAC1B,4CAA4C,EAC5C,8BAA8B,GAC/B,MAAM,cAAc,CAAC","sourcesContent":["export type {\n PlayableEditorAgentAssetLike,\n PlayableEditorAgentGameObjectLike,\n PlayableEditorAgentJsonObject,\n PlayableEditorAgentJsonValue,\n PlayableEditorAgentObjectDescriptionServices,\n PlayableEditorAgentPrefabMaterialTargetLike,\n PlayableEditorAgentPrefabSummaryLike,\n} from './agent-descriptions';\nexport type {\n PlayableLocalEditorHostBridgeContext,\n PlayableLocalEditorHostLoadingContent,\n} from './host-controller';\nexport type {\n PlayableForgePlayBridgeHarness,\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayBridgeLoadingOverlay,\n PlayableForgePlayDocumentExportResult,\n PlayableForgePlayHistoryOperation,\n PlayableForgePlayHistoryOperationOptions,\n PlayableForgePlayHistoryOperationResult,\n PlayableForgePlayHistoryProjectionResult,\n PlayableForgePlayHistoryStateResult,\n PlayableForgePlayMessageEvent,\n PlayableForgePlayMode,\n PlayableForgePlayModeBridge,\n PlayableForgePlayOperationOrigin,\n PlayableForgePlayProjectionWaitPolicy,\n PlayableForgePlaySaveState,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nexport type {\n PlayableLocalEditorLifecycleContent,\n PlayableLocalEditorDataSafetyOperation,\n PlayableLocalEditorDocumentOperationExecutor,\n PlayableLocalEditorDiscardConfirmationInput,\n PlayableLocalEditorInteractionPolicy,\n PlayableLocalEditorLoadingOverlayContent,\n PlayableLocalEditorLoadingOverlayController,\n PlayableLocalEditorLoadingOverlayPresentation,\n PlayableLocalEditorSaveFailureInput,\n PlayableLocalEditorSaveFailureState,\n PlayableLocalEditorSaveOptions,\n PlayableLocalEditorUnsavedChangesState,\n} from './types';\nexport type {\n PlayableProjectAssetCommandAsset,\n PlayableProjectAssetCommandCreateResult,\n PlayableProjectAssetCommandHandler,\n PlayableProjectAssetCommandHandlerOptions,\n PlayableProjectAssetCommandHarness,\n PlayableProjectAssetCommandReloadResult,\n PlayableProjectAssetCommandUpdateRefreshResult,\n} from './project-asset-commands';\nexport {\n describePlayableEditorAgentObject,\n describePlayableEditorAgentObjectSet,\n describePlayableEditorAgentRegionBinding,\n} from './agent-descriptions';\nexport {\n createPlayableProjectAssetCommandHandler,\n} from './project-asset-commands';\nexport {\n createPlayableLocalEditorLoadingOverlay,\n} from './loading-overlay';\nexport {\n createPlayableEditorEntryController,\n} from './editor-entry';\nexport type {\n PlayableEditorEntryBackend,\n PlayableEditorEntryController,\n PlayableEditorEntryControllerOptions,\n PlayableEditorEntryFailure,\n PlayableEditorEntryFailureCode,\n PlayableEditorEntryFailureDiagnostic,\n PlayableEditorEntryFailureReport,\n PlayableEditorEntryOperationContext,\n PlayableEditorEntryOperationPhase,\n PlayableEditorEntryPhase,\n PlayableEditorEntryResult,\n PlayableEditorEntryState,\n} from './editor-entry';\nexport {\n waitForPlayableLocalEditorPaint,\n waitForPlayableMilliseconds,\n} from './timing';\nexport {\n createPlayableForgePlayDocumentFingerprint,\n createPlayableForgePlaySaveState,\n getPlayableForgePlayHistoryResultEventName,\n installPlayableForgePlayModeBridge,\n normalizePlayableForgePlayCommandName,\n PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE,\n PLAYABLE_FORGE_PLAY_COMMAND,\n PLAYABLE_FORGE_PLAY_COMMAND_ALIASES,\n PLAYABLE_FORGE_PLAY_EVENT,\n PLAYABLE_FORGE_PLAY_EVENT_ALIASES,\n PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS,\n PLAYABLE_FORGE_PLAY_POST_MESSAGE,\n PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS,\n postPlayableForgePlayEvent,\n readPlayableForgePlayHistoryOperationOptions,\n readPlayableForgePlayRequestId,\n} from './forge-play';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-harness/index.ts"],"names":[],"mappings":"AAkDA,OAAO,EACL,wCAAwC,GACzC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uCAAuC,GACxC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,GACpC,MAAM,gBAAgB,CAAC;AAexB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0CAA0C,EAC1C,gCAAgC,EAChC,0CAA0C,EAC1C,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,oCAAoC,EACpC,gCAAgC,EAChC,0CAA0C,EAC1C,0BAA0B,EAC1B,4CAA4C,EAC5C,8BAA8B,GAC/B,MAAM,cAAc,CAAC","sourcesContent":["export type {\n PlayableLocalEditorHostBridgeContext,\n PlayableLocalEditorHostLoadingContent,\n} from './host-controller';\nexport type {\n PlayableForgePlayBridgeHarness,\n PlayableForgePlayBridgeInstallOptions,\n PlayableForgePlayBridgeLoadingOverlay,\n PlayableForgePlayDocumentExportResult,\n PlayableForgePlayHistoryOperation,\n PlayableForgePlayHistoryOperationOptions,\n PlayableForgePlayHistoryOperationResult,\n PlayableForgePlayHistoryProjectionResult,\n PlayableForgePlayHistoryStateResult,\n PlayableForgePlayMessageEvent,\n PlayableForgePlayMode,\n PlayableForgePlayModeBridge,\n PlayableForgePlayOperationOrigin,\n PlayableForgePlayProjectionWaitPolicy,\n PlayableForgePlaySaveState,\n PlayableForgePlaySaveTransaction,\n PlayableForgePlaySaveTransactionPhase,\n PlayableForgePlaySaveTransactionRejection,\n PlayableForgePlaySaveTransactionSnapshot,\n PlayableForgePlayWindowLike,\n} from './forge-play-types';\nexport type {\n PlayableLocalEditorLifecycleContent,\n PlayableLocalEditorDataSafetyOperation,\n PlayableLocalEditorDocumentOperationExecutor,\n PlayableLocalEditorDiscardConfirmationInput,\n PlayableLocalEditorInteractionPolicy,\n PlayableLocalEditorLoadingOverlayContent,\n PlayableLocalEditorLoadingOverlayController,\n PlayableLocalEditorLoadingOverlayPresentation,\n PlayableLocalEditorPreparedAuthoringSource,\n PlayableLocalEditorSaveFailureInput,\n PlayableLocalEditorSaveFailureState,\n PlayableLocalEditorSaveOptions,\n PlayableLocalEditorUnsavedChangesState,\n} from './types';\nexport type {\n PlayableProjectAssetCommandAsset,\n PlayableProjectAssetCommandCreateResult,\n PlayableProjectAssetCommandHandler,\n PlayableProjectAssetCommandHandlerOptions,\n PlayableProjectAssetCommandHarness,\n PlayableProjectAssetCommandReloadResult,\n PlayableProjectAssetCommandUpdateRefreshResult,\n} from './project-asset-commands';\nexport {\n createPlayableProjectAssetCommandHandler,\n} from './project-asset-commands';\nexport {\n createPlayableLocalEditorLoadingOverlay,\n} from './loading-overlay';\nexport {\n createPlayableEditorEntryController,\n} from './editor-entry';\nexport type {\n PlayableEditorEntryBackend,\n PlayableEditorEntryController,\n PlayableEditorEntryControllerOptions,\n PlayableEditorEntryFailure,\n PlayableEditorEntryFailureCode,\n PlayableEditorEntryFailureDiagnostic,\n PlayableEditorEntryFailureReport,\n PlayableEditorEntryOperationContext,\n PlayableEditorEntryOperationPhase,\n PlayableEditorEntryPhase,\n PlayableEditorEntryResult,\n PlayableEditorEntryState,\n} from './editor-entry';\nexport {\n waitForPlayableLocalEditorPaint,\n waitForPlayableMilliseconds,\n} from './timing';\nexport {\n createPlayableForgePlayDocumentFingerprint,\n createPlayableForgePlaySaveState,\n getPlayableForgePlayHistoryResultEventName,\n installPlayableForgePlayModeBridge,\n normalizePlayableForgePlayCommandName,\n PLAYABLE_FORGE_PLAY_BRIDGE_SOURCE,\n PLAYABLE_FORGE_PLAY_COMMAND,\n PLAYABLE_FORGE_PLAY_COMMAND_ALIASES,\n PLAYABLE_FORGE_PLAY_EVENT,\n PLAYABLE_FORGE_PLAY_EVENT_ALIASES,\n PLAYABLE_FORGE_PLAY_HISTORY_COMMANDS,\n PLAYABLE_FORGE_PLAY_POST_MESSAGE,\n PLAYABLE_FORGE_PLAY_PROJECT_ASSET_COMMANDS,\n postPlayableForgePlayEvent,\n readPlayableForgePlayHistoryOperationOptions,\n readPlayableForgePlayRequestId,\n} from './forge-play';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/local-harness/lifecycle.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,sCAAsC,EACtC,6CAA6C,EAU9C,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,0CAA0C,uBAAuB,CAAC;AAC/E,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AACvE,eAAO,MAAM,4CAA4C,yBAAyB,CAAC;AACnF,eAAO,MAAM,2CAA2C,wBAAwB,CAAC;AACjF,eAAO,MAAM,2CAA2C,wBAAwB,CAAC;AA4BjF,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,6CAA6C,GACrD,sCAAsC,CAkzBxC"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/local-harness/lifecycle.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,sCAAsC,EACtC,6CAA6C,EAU9C,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,0CAA0C,uBAAuB,CAAC;AAC/E,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AACvE,eAAO,MAAM,4CAA4C,yBAAyB,CAAC;AACnF,eAAO,MAAM,2CAA2C,wBAAwB,CAAC;AACjF,eAAO,MAAM,2CAA2C,wBAAwB,CAAC;AAkCjF,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,6CAA6C,GACrD,sCAAsC,CAm1BxC"}