@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.
- package/dist/build-info.json +44 -44
- package/dist/editor-commands/capabilities/assets.d.ts +8 -0
- package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
- package/dist/editor-commands/capabilities/assets.js.map +1 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
- package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
- package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
- package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.js +480 -0
- package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
- package/dist/editor-commands/capabilities/selection.d.ts +5 -0
- package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/selection.js +60 -0
- package/dist/editor-commands/capabilities/selection.js.map +1 -0
- package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
- package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
- package/dist/editor-commands/capabilities/shadows.js.map +1 -0
- package/dist/editor-commands/capabilities/transform.d.ts +5 -0
- package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/transform.js +164 -0
- package/dist/editor-commands/capabilities/transform.js.map +1 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
- package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
- package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
- package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
- package/dist/editor-commands/capabilities/viewport.js.map +1 -0
- package/dist/editor-commands/command-sources.d.ts +7 -0
- package/dist/editor-commands/command-sources.d.ts.map +1 -0
- package/dist/editor-commands/command-sources.js +34 -0
- package/dist/editor-commands/command-sources.js.map +1 -0
- package/dist/editor-commands/diagnostics.d.ts +12 -0
- package/dist/editor-commands/diagnostics.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
- package/dist/editor-commands/diagnostics.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
- package/dist/editor-commands/index.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.js +1 -1
- package/dist/editor-commands/index.js.map +1 -0
- package/dist/editor-commands/register.d.ts +4 -0
- package/dist/editor-commands/register.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/register.js +323 -286
- package/dist/editor-commands/register.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
- package/dist/editor-commands/shared.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
- package/dist/editor-commands/shared.js.map +1 -0
- package/dist/editor-commands/source-types.d.ts +110 -0
- package/dist/editor-commands/source-types.d.ts.map +1 -0
- package/dist/editor-commands/source-types.js.map +1 -0
- package/dist/editor-plugin-commands.d.ts +4 -0
- package/dist/editor-plugin-commands.d.ts.map +1 -0
- package/dist/editor-plugin-commands.js +18 -0
- package/dist/editor-plugin-commands.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local-editor-commands.d.ts +2 -0
- package/dist/local-editor-commands.d.ts.map +1 -0
- package/dist/local-editor-commands.js +2 -0
- package/dist/local-editor-commands.js.map +1 -0
- package/dist/local-editor-harness.d.ts +35 -21
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +1721 -367
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.js +6 -5
- package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
- package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
- package/dist/playable-local-editor-entry.d.ts +10 -0
- package/dist/playable-local-editor-entry.d.ts.map +1 -1
- package/dist/playable-local-editor-entry.js +10 -2
- package/dist/playable-local-editor-entry.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +3 -32
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +6 -70
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-local-editor.d.ts +1 -2
- package/dist/playable-product-local-editor.d.ts.map +1 -1
- package/dist/playable-product-local-editor.js +0 -1
- package/dist/playable-product-local-editor.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +1 -1
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts +0 -2
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +33 -6
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-runtime-babylon.d.ts +4 -0
- package/dist/playable-runtime-babylon.d.ts.map +1 -1
- package/dist/playable-runtime-babylon.js +4 -0
- package/dist/playable-runtime-babylon.js.map +1 -1
- package/dist/playable-sdk.d.ts +1 -1
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +0 -2
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +1 -2
- package/dist/playable-standard-project.js.map +1 -1
- package/dist/project-service-projection.d.ts +16 -0
- package/dist/project-service-projection.d.ts.map +1 -0
- package/dist/project-service-projection.js +67 -0
- package/dist/project-service-projection.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
- package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
- package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +6 -6
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +23 -23
- package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
- package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/assets.js.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
- package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
- package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
- package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
- package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
- package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
- package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
- package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
- package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/selection.js +0 -60
- package/dist/agent-bridge/capabilities/selection.js.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
- package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
- package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
- package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/transform.js +0 -164
- package/dist/agent-bridge/capabilities/transform.js.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
- package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
- package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
- package/dist/agent-bridge/capability-sources.d.ts +0 -7
- package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
- package/dist/agent-bridge/capability-sources.js +0 -34
- package/dist/agent-bridge/capability-sources.js.map +0 -1
- package/dist/agent-bridge/diagnostics.d.ts +0 -12
- package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
- package/dist/agent-bridge/diagnostics.js.map +0 -1
- package/dist/agent-bridge/index.d.ts.map +0 -1
- package/dist/agent-bridge/index.js.map +0 -1
- package/dist/agent-bridge/register.d.ts +0 -4
- package/dist/agent-bridge/register.d.ts.map +0 -1
- package/dist/agent-bridge/register.js.map +0 -1
- package/dist/agent-bridge/shared.d.ts.map +0 -1
- package/dist/agent-bridge/shared.js.map +0 -1
- package/dist/agent-bridge/source-types.d.ts +0 -110
- package/dist/agent-bridge/source-types.d.ts.map +0 -1
- package/dist/agent-bridge/source-types.js.map +0 -1
- package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
- package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
- package/dist/editor-plugin-agent-capabilities.js +0 -64
- package/dist/editor-plugin-agent-capabilities.js.map +0 -1
- package/dist/local-editor-agent-actions.d.ts +0 -43
- package/dist/local-editor-agent-actions.d.ts.map +0 -1
- package/dist/local-editor-agent-actions.js +0 -321
- package/dist/local-editor-agent-actions.js.map +0 -1
- package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
- package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge-transport.js +0 -403
- package/dist/local-editor-agent-bridge-transport.js.map +0 -1
- package/dist/local-editor-agent-bridge.d.ts +0 -2
- package/dist/local-editor-agent-bridge.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge.js +0 -2
- package/dist/local-editor-agent-bridge.js.map +0 -1
- package/dist/local-editor-agent-context.d.ts +0 -68
- package/dist/local-editor-agent-context.d.ts.map +0 -1
- package/dist/local-editor-agent-context.js +0 -716
- package/dist/local-editor-agent-context.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
- /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
|
@@ -163,6 +163,38 @@ function inspectMigrationReadinessFile(file, options) {
|
|
|
163
163
|
const diagnostics = [];
|
|
164
164
|
const content = file.content;
|
|
165
165
|
const environmentResourceHardCutSeverity = options.environmentResourceHardCutSeverity ?? 'error';
|
|
166
|
+
if (/@fps-games\/editor-agent-(?:mcp|bridge)\b/.test(content)) {
|
|
167
|
+
diagnostics.push({
|
|
168
|
+
severity: 'error',
|
|
169
|
+
code: 'hard-cut.agent.retired-package',
|
|
170
|
+
path: file.filePath,
|
|
171
|
+
message: 'Removed Editor Agent transport package detected; uninstall it, install @fps-games/editor-agent at the exact @fps-games/editor version, and use fps-editor-agent from the project cwd.',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (/\bfps-editor-agent-mcp\b|\bmcp_servers\.fps_game_editor_agent\b/.test(content)) {
|
|
175
|
+
diagnostics.push({
|
|
176
|
+
severity: 'error',
|
|
177
|
+
code: 'hard-cut.agent.retired-user-config',
|
|
178
|
+
path: file.filePath,
|
|
179
|
+
message: 'Removed user-level Agent service configuration detected; delete it because fps-editor-agent discovers the authenticated project Editor Service from cwd.',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (/\bagent:mcp(?:\b|:)|\bagent-mcp-[a-z0-9-]+\.mjs\b/.test(content)) {
|
|
183
|
+
diagnostics.push({
|
|
184
|
+
severity: 'error',
|
|
185
|
+
code: 'hard-cut.agent.retired-script',
|
|
186
|
+
path: file.filePath,
|
|
187
|
+
message: 'Removed Agent daemon/script entry detected; delete the script and call fps-editor-agent commands against the project Editor Service.',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (/\b(?:3777|3778)\b|\bEDITOR_AGENT_BRIDGE_[A-Z0-9_]+\b/.test(content)) {
|
|
191
|
+
diagnostics.push({
|
|
192
|
+
severity: 'error',
|
|
193
|
+
code: 'hard-cut.agent.retired-fixed-endpoint',
|
|
194
|
+
path: file.filePath,
|
|
195
|
+
message: 'Removed fixed Agent endpoint configuration detected; remove it and let the Vite Editor Service publish node_modules/.fps-editor/agent-runtime.json.',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
166
198
|
if (/\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\b/.test(content)) {
|
|
167
199
|
diagnostics.push({
|
|
168
200
|
severity: 'warning',
|
|
@@ -187,6 +219,14 @@ function inspectMigrationReadinessFile(file, options) {
|
|
|
187
219
|
message: 'Removed hierarchy.contextActions API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',
|
|
188
220
|
});
|
|
189
221
|
}
|
|
222
|
+
if (hasMountOwnedEditorTransition(content, file.filePath)) {
|
|
223
|
+
diagnostics.push({
|
|
224
|
+
severity: 'error',
|
|
225
|
+
code: 'hard-cut.editor-entry.mount-owned-transition',
|
|
226
|
+
path: file.filePath,
|
|
227
|
+
message: 'Project Editor Entry mount code calls switcher.enterEditor(); remove it and pass initialMode: \'edit\' to mountFpsGameEditorLocalEditorEntry so SDK backend.commit owns the transition.',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
190
230
|
if (/\bhierarchyActions\b/.test(content) && /\bcontextActions\b/.test(content)) {
|
|
191
231
|
diagnostics.push({
|
|
192
232
|
severity: options.hierarchyContextActionSeverity ?? 'warning',
|
|
@@ -245,6 +285,85 @@ function inspectMigrationReadinessFile(file, options) {
|
|
|
245
285
|
diagnostics.push(...collectEnvironmentResourceHardCutDiagnostics(file.filePath, content, environmentResourceHardCutSeverity));
|
|
246
286
|
return diagnostics;
|
|
247
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* This hard cut intentionally scopes the check to the `editorModule.mount`
|
|
290
|
+
* callback passed to the public Editor Entry integration. A project can still
|
|
291
|
+
* use a public host elsewhere; it must not make the SDK-owned switcher
|
|
292
|
+
* transition from the mount callback under any local identifier name.
|
|
293
|
+
*/
|
|
294
|
+
function hasMountOwnedEditorTransition(content, filePath) {
|
|
295
|
+
try {
|
|
296
|
+
const root = parse(content, babelParserOptions(filePath));
|
|
297
|
+
let matched = false;
|
|
298
|
+
visitBabelNode(root, node => {
|
|
299
|
+
if (matched || node.type !== 'CallExpression' || readBabelIdentifierName(node.callee) !== 'mountFpsGameEditorLocalEditorEntry')
|
|
300
|
+
return;
|
|
301
|
+
const options = Array.isArray(node.arguments) && node.arguments.length === 1 ? node.arguments[0] : null;
|
|
302
|
+
const editorModule = exactObjectProperty(options, 'editorModule');
|
|
303
|
+
const mount = exactObjectProperty(editorModule, 'mount');
|
|
304
|
+
if (!mount || mount.type !== 'ArrowFunctionExpression' || mount.async !== true || !Array.isArray(mount.params) || mount.params.length !== 2 || !mount.params.every(readBabelIdentifierName) || !isRecord(mount.body) || mount.body.type !== 'BlockStatement' || !Array.isArray(mount.body.body))
|
|
305
|
+
return;
|
|
306
|
+
const [firstParam] = mount.params.map(readBabelIdentifierName);
|
|
307
|
+
const body = mount.body.body;
|
|
308
|
+
if (body.length !== 3 || !isCanonicalHandleDeclaration(body[0], firstParam) || !isCanonicalEditIf(body[1], readDeclaredName(body[0])) || !isCanonicalReturn(body[2], readDeclaredName(body[0])))
|
|
309
|
+
return;
|
|
310
|
+
matched = true;
|
|
311
|
+
});
|
|
312
|
+
return matched;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function exactObjectProperty(value, name) {
|
|
319
|
+
if (!isRecord(value) || value.type !== 'ObjectExpression' || !Array.isArray(value.properties))
|
|
320
|
+
return null;
|
|
321
|
+
let target = null;
|
|
322
|
+
for (const property of value.properties) {
|
|
323
|
+
// A spread or computed key could supply/override the target key, so this
|
|
324
|
+
// intentionally narrow fingerprint treats the whole container as manual review.
|
|
325
|
+
if (!isRecord(property) || property.type === 'SpreadElement' || property.computed)
|
|
326
|
+
return null;
|
|
327
|
+
const key = readBabelIdentifierName(property.key) ?? readBabelStaticString(property.key);
|
|
328
|
+
if (key !== name)
|
|
329
|
+
continue;
|
|
330
|
+
if (property.type !== 'ObjectProperty' || target || !isRecord(property.value))
|
|
331
|
+
return null;
|
|
332
|
+
target = property.value;
|
|
333
|
+
}
|
|
334
|
+
return target;
|
|
335
|
+
}
|
|
336
|
+
function readDeclaredName(statement) {
|
|
337
|
+
return isRecord(statement) && statement.type === 'VariableDeclaration' && Array.isArray(statement.declarations) && statement.declarations.length === 1 && isRecord(statement.declarations[0])
|
|
338
|
+
? readBabelIdentifierName(statement.declarations[0].id) : null;
|
|
339
|
+
}
|
|
340
|
+
function isCanonicalHandleDeclaration(statement, moduleName) {
|
|
341
|
+
if (!isRecord(statement) || statement.type !== 'VariableDeclaration' || statement.kind !== 'const' || !Array.isArray(statement.declarations) || statement.declarations.length !== 1)
|
|
342
|
+
return false;
|
|
343
|
+
const declaration = statement.declarations[0];
|
|
344
|
+
if (!isRecord(declaration) || !readBabelIdentifierName(declaration.id) || !isRecord(declaration.init) || declaration.init.type !== 'AwaitExpression')
|
|
345
|
+
return false;
|
|
346
|
+
const call = declaration.init.argument;
|
|
347
|
+
return isRecord(call) && call.type === 'CallExpression' && Array.isArray(call.arguments) && call.arguments.length === 1 && isRecord(call.callee) && call.callee.type === 'MemberExpression' && !call.callee.computed && readBabelIdentifierName(call.callee.object) === moduleName && readBabelIdentifierName(call.callee.property) === 'mountLocalEditorModeSwitcher' && isRecord(call.arguments[0]) && call.arguments[0].type === 'ObjectExpression';
|
|
348
|
+
}
|
|
349
|
+
function isCanonicalEditIf(statement, handle) {
|
|
350
|
+
if (!handle || !isRecord(statement) || statement.type !== 'IfStatement' || statement.alternate || !isRecord(statement.test) || statement.test.type !== 'BinaryExpression' || statement.test.operator !== '===' || !isRecord(statement.test.left) || statement.test.left.type !== 'MemberExpression' || statement.test.left.computed || readBabelIdentifierName(statement.test.left.object) === null || readBabelIdentifierName(statement.test.left.property) !== 'bootMode' || !isRecord(statement.test.right) || statement.test.right.type !== 'StringLiteral' || statement.test.right.value !== 'edit' || !isRecord(statement.consequent) || statement.consequent.type !== 'BlockStatement' || !Array.isArray(statement.consequent.body) || statement.consequent.body.length !== 1)
|
|
351
|
+
return false;
|
|
352
|
+
const expression = isRecord(statement.consequent.body[0]) && statement.consequent.body[0].type === 'ExpressionStatement' ? statement.consequent.body[0].expression : null;
|
|
353
|
+
return isAllowedEnterWrapper(expression, handle);
|
|
354
|
+
}
|
|
355
|
+
function isAllowedEnterWrapper(value, handle) {
|
|
356
|
+
if (!isRecord(value))
|
|
357
|
+
return false;
|
|
358
|
+
if (value.type === 'AwaitExpression' || value.type === 'UnaryExpression' && value.operator === 'void')
|
|
359
|
+
return isAllowedEnterWrapper(value.argument, handle);
|
|
360
|
+
if (value.type === 'CallExpression' && isRecord(value.callee) && value.callee.type === 'MemberExpression' && !value.callee.computed && readBabelIdentifierName(value.callee.property) === 'catch')
|
|
361
|
+
return isAllowedEnterWrapper(value.callee.object, handle);
|
|
362
|
+
return value.type === 'CallExpression' && Array.isArray(value.arguments) && value.arguments.length === 0 && isRecord(value.callee) && value.callee.type === 'MemberExpression' && !value.callee.computed && !value.callee.optional && readBabelIdentifierName(value.callee.object) === handle && readBabelIdentifierName(value.callee.property) === 'enterEditor';
|
|
363
|
+
}
|
|
364
|
+
function isCanonicalReturn(statement, handle) {
|
|
365
|
+
return !!handle && isRecord(statement) && statement.type === 'ReturnStatement' && readBabelIdentifierName(statement.argument) === handle;
|
|
366
|
+
}
|
|
248
367
|
/**
|
|
249
368
|
* These checks intentionally inspect only project-side migration snapshots. They
|
|
250
369
|
* flag retired public integration shapes, not generic material texture fields or
|
|
@@ -443,18 +562,7 @@ function findMatchingForbiddenPackage(specifier, forbiddenPackages) {
|
|
|
443
562
|
return forbiddenPackages.find(packageName => specifier === packageName || specifier.startsWith(`${packageName}/`));
|
|
444
563
|
}
|
|
445
564
|
function readImportSpecifiers(content, filePath) {
|
|
446
|
-
const
|
|
447
|
-
const root = parse(content, {
|
|
448
|
-
sourceType: 'unambiguous',
|
|
449
|
-
allowAwaitOutsideFunction: true,
|
|
450
|
-
allowReturnOutsideFunction: true,
|
|
451
|
-
plugins: [
|
|
452
|
-
'typescript',
|
|
453
|
-
...(supportsJsx ? ['jsx'] : []),
|
|
454
|
-
'decorators',
|
|
455
|
-
'importAttributes',
|
|
456
|
-
],
|
|
457
|
-
});
|
|
565
|
+
const root = parse(content, babelParserOptions(filePath));
|
|
458
566
|
const specifiers = [];
|
|
459
567
|
visitBabelNode(root, (node) => {
|
|
460
568
|
const type = readBabelNodeType(node);
|
|
@@ -492,6 +600,20 @@ function readImportSpecifiers(content, filePath) {
|
|
|
492
600
|
});
|
|
493
601
|
return specifiers;
|
|
494
602
|
}
|
|
603
|
+
function babelParserOptions(filePath) {
|
|
604
|
+
const supportsJsx = /\.[cm]?[jt]sx$/i.test(filePath);
|
|
605
|
+
return {
|
|
606
|
+
sourceType: 'unambiguous',
|
|
607
|
+
allowAwaitOutsideFunction: true,
|
|
608
|
+
allowReturnOutsideFunction: true,
|
|
609
|
+
plugins: [
|
|
610
|
+
'typescript',
|
|
611
|
+
...(supportsJsx ? ['jsx'] : []),
|
|
612
|
+
'decorators',
|
|
613
|
+
'importAttributes',
|
|
614
|
+
],
|
|
615
|
+
};
|
|
616
|
+
}
|
|
495
617
|
function visitBabelNode(value, visit) {
|
|
496
618
|
if (Array.isArray(value)) {
|
|
497
619
|
for (const entry of value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspectors.js","sourceRoot":"","sources":["../../src/upgrade-doctor/inspectors.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n collectMissingPlayableEditorPackageAliasFiles,\n type PlayableEditorFileExists,\n type PlayableEditorPackageAliasPlan,\n} from '../package-resolution/index';\nimport { parse } from '@babel/parser';\nimport { createPlayableEditorDoctorReport } from './report';\nimport { inspectPlayableEditorHostCompatibilityReport } from './host';\nimport type {\n PlayableEditorDoctorDiagnostic,\n PlayableEditorDoctorReport,\n PlayableEditorImportBoundaryInspectionOptions,\n PlayableEditorImportSnapshot,\n PlayableEditorImportSnapshotFile,\n PlayableEditorInstalledVersionInspectionOptions,\n PlayableEditorInstalledVersionLike,\n PlayableEditorMigrationReadinessInspectionOptions,\n PlayableEditorPackageExportsInspectionOptions,\n PlayableEditorPackageExportsLike,\n PlayableEditorUpgradeReadinessInspectionInput,\n} from './types';\nimport { mergePlayableEditorDoctorReports } from './report';\n\nconst PLAYABLE_SDK_EXPORT_PATH = './playable-sdk';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH = './playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_EXPORT_PATH = './playable-sdk/vite';\nconst PLAYABLE_SDK_SUBPATH_PREFIX = '@fps-games/editor/playable-sdk/';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH = '@fps-games/editor/playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_SUBPATH = '@fps-games/editor/playable-sdk/vite';\nconst PLAYABLE_RUNTIME_SUBPATH = '@fps-games/editor/playable-runtime';\nconst PLAYABLE_RUNTIME_BABYLON_SUBPATH = '@fps-games/editor/playable-runtime/babylon';\nconst DIRECT_EDITOR_IMPORTS = [\n '@fps-games/editor',\n '@fps-games/editor-core',\n] as const;\n\n/**\n * Default forbidden packages for new playable editor integration code.\n * These packages are internal to the editor framework and should not be\n * imported directly from project-side code. Use @fps-games/editor/playable-sdk\n * facade exports instead.\n */\nexport const PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES: readonly string[] = [\n '@fps-games/editor-agent-bridge',\n '@fps-games/editor-babylon',\n '@fps-games/editor-browser',\n '@fps-games/editor-forge-play',\n '@fps-games/editor-playable-sdk',\n '@fps-games/editor-protocol',\n '@fps-games/babylon-renderer',\n];\n\nexport function inspectPlayableEditorPackageAliasPlan(\n plan: PlayableEditorPackageAliasPlan,\n fileExists: PlayableEditorFileExists,\n options: { title?: string } = {},\n): PlayableEditorDoctorReport {\n const missing = collectMissingPlayableEditorPackageAliasFiles(plan, fileExists);\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package aliases',\n diagnostics: missing.map(entry => ({\n severity: 'error',\n code: 'package.alias.missing-file',\n source: entry.packageId,\n path: entry.file,\n message: `Package alias for ${entry.packageId} points to a missing file.`,\n })),\n });\n}\n\nexport function inspectPlayableEditorPackageExports(\n packageJson: PlayableEditorPackageExportsLike,\n options: PlayableEditorPackageExportsInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName ?? readString(packageJson.name) ?? '@fps-games/editor';\n const exportPath = options.playableSdkExportPath ?? PLAYABLE_SDK_EXPORT_PATH;\n const upgradeDoctorExportPath = options.playableSdkUpgradeDoctorExportPath ?? PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH;\n const viteExportPath = options.playableSdkViteExportPath ?? PLAYABLE_SDK_VITE_EXPORT_PATH;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (!isRecord(packageJson.exports)) {\n diagnostics.push({\n severity: 'error',\n code: 'package.export.invalid',\n source: packageName,\n path: 'exports',\n message: `Package ${packageName} must expose an object exports map.`,\n });\n } else {\n for (const requiredExportPath of [exportPath, upgradeDoctorExportPath, viteExportPath]) {\n const hasExport = requiredExportPath in packageJson.exports;\n const usableTarget = hasExport && (\n requiredExportPath === upgradeDoctorExportPath\n ? isUsableNodePackageExportTarget(packageJson.exports[requiredExportPath])\n : isUsablePackageExportTarget(packageJson.exports[requiredExportPath])\n );\n if (usableTarget) continue;\n diagnostics.push({\n severity: 'error',\n code: hasExport ? 'package.export.invalid-target' : 'package.export.missing',\n source: packageName,\n path: `exports[\"${requiredExportPath}\"]`,\n message: hasExport\n ? `Package ${packageName} has no usable runtime target for the ${requiredExportPath} export.`\n : `Package ${packageName} is missing the ${requiredExportPath} export.`,\n });\n }\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package exports',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorInstalledVersion(\n packageJson: PlayableEditorInstalledVersionLike,\n options: PlayableEditorInstalledVersionInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName\n ?? readString(packageJson.packageName)\n ?? '@fps-games/editor';\n const declaredVersion = readString(packageJson.declaredVersion);\n const installedVersion = readString(packageJson.installedVersion);\n const source = readString(packageJson.source) ?? packageName;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (declaredVersion && installedVersion && isExactDependencyVersion(declaredVersion) && declaredVersion !== installedVersion) {\n diagnostics.push({\n severity: options.exactMismatchSeverity ?? 'error',\n code: 'package.version.installed-mismatch',\n source,\n path: 'dependencies',\n details: { packageName, declaredVersion, installedVersion },\n message: `Project declares ${packageName}@${declaredVersion}, but node_modules contains ${installedVersion}. Reinstall dependencies and restart the dev server.`,\n });\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor installed version',\n diagnostics,\n });\n}\n\nexport function createPlayableEditorImportSnapshot(\n files: readonly PlayableEditorImportSnapshotFile[],\n): PlayableEditorImportSnapshot {\n return {\n files: files.map(file => ({\n filePath: file.filePath,\n content: file.content,\n })),\n };\n}\n\nexport function inspectPlayableEditorImportBoundaries(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorImportBoundaryInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const forbiddenPackages = normalizeForbiddenPackages(\n options.forbiddenPackages ?? PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES,\n );\n const forbiddenPackageSeverity = options.forbiddenPackageSeverity ?? 'warning';\n const diagnostics = files.flatMap(file =>\n inspectFileImports(file, forbiddenPackages, forbiddenPackageSeverity),\n );\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor import boundaries',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorMigrationReadiness(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorMigrationReadinessInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const diagnostics = files.flatMap(file => inspectMigrationReadinessFile(file, options));\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor hard-cut readiness',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorUpgradeReadiness(\n input: PlayableEditorUpgradeReadinessInspectionInput = {},\n): PlayableEditorDoctorReport {\n const reports: PlayableEditorDoctorReport[] = [];\n if (input.hostCompatibility) {\n reports.push(inspectPlayableEditorHostCompatibilityReport(\n input.hostCompatibility.report,\n input.hostCompatibility.options,\n ));\n }\n if (input.packageAliasPlan) {\n reports.push(inspectPlayableEditorPackageAliasPlan(\n input.packageAliasPlan.plan,\n input.packageAliasPlan.fileExists,\n { title: input.packageAliasPlan.title },\n ));\n }\n if (input.packageExports) {\n reports.push(inspectPlayableEditorPackageExports(\n input.packageExports.packageJson,\n input.packageExports.options,\n ));\n }\n if (input.installedVersion) {\n reports.push(inspectPlayableEditorInstalledVersion(\n input.installedVersion.packageJson,\n input.installedVersion.options,\n ));\n }\n if (input.importBoundaries) {\n reports.push(inspectPlayableEditorImportBoundaries(\n input.importBoundaries.snapshot,\n input.importBoundaries.options,\n ));\n }\n if (input.migrationReadiness) {\n reports.push(inspectPlayableEditorMigrationReadiness(\n input.migrationReadiness.snapshot,\n input.migrationReadiness.options,\n ));\n }\n return mergePlayableEditorDoctorReports(reports, {\n title: input.title ?? 'Playable editor upgrade readiness',\n });\n}\n\nfunction inspectMigrationReadinessFile(\n file: PlayableEditorImportSnapshotFile,\n options: PlayableEditorMigrationReadinessInspectionOptions,\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const content = file.content;\n const environmentResourceHardCutSeverity = options.environmentResourceHardCutSeverity ?? 'error';\n if (/\\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\\b/.test(content)) {\n diagnostics.push({\n severity: 'warning',\n code: 'hard-cut.scene-artifact.project-validator-hook-removed',\n path: file.filePath,\n message: 'Removed project SceneArtifact validator hook detected; delete assertRuntimeSceneConfigModulePath/assertRuntimeSceneConfigExportName because @fps-games/editor/playable-sdk now validates the canonical runtime artifact.',\n });\n }\n if (/\\bhierarchyContextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.browser-callbacks-removed',\n path: file.filePath,\n message: 'Removed hierarchyContextActions Browser callback API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bcreateLocalEditorHarness\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.direct-harness',\n path: file.filePath,\n message: 'Removed hierarchy.contextActions API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bhierarchyActions\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.context-actions-removed',\n path: file.filePath,\n message: 'Removed capabilities.hierarchyActions.contextActions API detected; use capabilities.hierarchyActions.operations.',\n });\n }\n const retiredBypassPattern = new RegExp(`\\\\binstall${'Leg' + 'acy'}AssetCommandBypass\\\\b|__project${'Leg' + 'acy'}AssetBypass`);\n if (retiredBypassPattern.test(content)) {\n diagnostics.push({\n severity: options.retiredAssetBypassSeverity ?? 'error',\n code: 'hard-cut.asset-bypass.retired-helper',\n path: file.filePath,\n message: 'A retired asset command bypass helper was detected; delete it and use product asset capabilities.',\n });\n }\n const retiredRuntimePattern = new RegExp(\n `__bridge${'Leg' + 'acy'}EditorRuntime|register${'Leg' + 'acy'}RuntimeProxy|install${'Leg' + 'acy'}CommandBypass`,\n );\n if (retiredRuntimePattern.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.runtime.retired-bridge',\n path: file.filePath,\n message: 'A retired runtime bridge/global was detected; remove it and mount the product editor adapter directly.',\n });\n }\n const deprecatedAuthoredFields = collectDeprecatedAuthoredFields(file.filePath, content);\n for (const field of deprecatedAuthoredFields) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.schema.deprecated-field',\n path: file.filePath,\n details: { field },\n message: `Deprecated authored field ${field} is unsupported; migrate the authored source to the current contract.`,\n });\n }\n if (\n /\\bhandleProjectAssetCommand\\b/.test(content)\n && /\\b(asset\\.import|asset\\.library\\.refresh|editor\\.asset\\.place|ASSET_IMPORT|ASSET_LIBRARY_REFRESH|EDITOR_ASSET_PLACE)\\b/.test(content)\n && !/\\bcreatePlayableProjectAssetCommandHandler\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.projectAssetCommandGlueSeverity ?? 'warning',\n code: 'migration.project-asset-command.local-glue',\n path: file.filePath,\n message: 'Project asset command glue detected; consider createPlayableProjectAssetCommandHandler and keep only project registration/placement policies local.',\n });\n }\n if (\n /\\bimportProjectionModel\\b/.test(content)\n && !/\\bcreateEditorSceneRuntimePreviewImportPlan\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.runtimePreviewProjectionSeverity ?? 'info',\n code: 'migration.runtime-preview.projection-plan-missing',\n path: file.filePath,\n message: 'Projection import logic is present without the SDK runtime preview import plan helper; verify asset URL and projection diagnostics during migration.',\n });\n }\n diagnostics.push(...collectEnvironmentResourceHardCutDiagnostics(\n file.filePath,\n content,\n environmentResourceHardCutSeverity,\n ));\n return diagnostics;\n}\n\n/**\n * These checks intentionally inspect only project-side migration snapshots. They\n * flag retired public integration shapes, not generic material texture fields or\n * plugin registration order; those are validated by the product contract tests.\n */\nfunction collectEnvironmentResourceHardCutDiagnostics(\n filePath: string,\n content: string,\n severity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const add = (code: string, message: string) => diagnostics.push({\n severity,\n code,\n path: filePath,\n message,\n });\n\n const hasBabylonRendererSurface = /\\b(?:FpsBabylonRendererContext|FpsBabylonRendererPluginConfig|BabylonEnvironmentTexture(?:Profile|Factory)|createFpsBabylon(?:GameWorldPluginLifecycle|RendererHost))\\b/.test(content);\n if (/\\bresolveAssetUrl\\b/.test(content) && hasBabylonRendererSurface) {\n add(\n 'hard-cut.environment-resource.resolve-asset-url-removed',\n 'Removed Babylon resolveAssetUrl integration detected; pass the generated asset catalog to the Host and resolve a PlayableResolvedAssetResource through the Assets Plugin service.',\n );\n }\n if (/\\bFpsBabylonRendererPluginConfig\\b/.test(content) && /\\benvironmentTexture\\s*:/.test(content)) {\n add(\n 'hard-cut.environment-resource.renderer-environment-texture-removed',\n 'Removed FpsBabylonRendererPluginConfig.environmentTexture fallback detected; authored rendering must resolve through the catalog-backed resource service.',\n );\n }\n if (/\\bBabylonEnvironmentTextureProfile\\s*\\{[^}]*\\btextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.profile-texture-url-removed',\n 'Removed BabylonEnvironmentTextureProfile.textureUrl shape detected; use profile.texture: PlayableResolvedAssetResource | null.',\n );\n }\n if (/\\bBabylonEnvironmentTextureFactory\\b/.test(content) && /\\b(?:textureUrl|url)\\s*:\\s*(?:string|String)\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.url-factory-removed',\n 'Removed URL-only BabylonEnvironmentTextureFactory contract detected; the factory must receive a PlayableResolvedAssetResource so it can preserve the asset format.',\n );\n }\n if (/\\bresolvePlayableBabylonRenderingEnvironmentTextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.resolve-url-helper-removed',\n 'Removed resolvePlayableBabylonRenderingEnvironmentTextureUrl helper detected; use resolvePlayableBabylonRenderingEnvironmentTextureResource.',\n );\n }\n if (isGeneratedAssetCatalogFile(filePath, content) && !hasGeneratedAssetCatalogFormat(content)) {\n add(\n 'hard-cut.environment-resource.generated-catalog-format-missing',\n 'Generated asset catalog is missing the required format field; regenerate it with the current playable SDK instead of editing catalog output by hand.',\n );\n }\n if (hasBabylonHostFactoryCall(content) && !hasCatalogSourceReference(content)) {\n add(\n 'hard-cut.environment-resource.host-catalog-source-missing',\n 'Babylon Runtime/Renderer Host construction has no generated asset catalog input; pass the catalog source so plugin-assets can provide the shared resource resolver.',\n );\n }\n return diagnostics;\n}\n\nfunction isGeneratedAssetCatalogFile(filePath: string, content: string): boolean {\n return /(?:^|\\/)asset-catalog(?:\\.generated)?\\.[cm]?[jt]s$/i.test(normalizeFilePath(filePath))\n || (\n /\\binterface\\s+GeneratedAssetCatalogEntry\\b/.test(content)\n && /\\b(?:export\\s+)?const\\s+GENERATED_ASSET_CATALOG\\b/.test(content)\n );\n}\n\nfunction hasGeneratedAssetCatalogFormat(content: string): boolean {\n return /\\bformat\\s*:\\s*(?:string|[\"'`][^\"'`]+[\"'`])/.test(content);\n}\n\nfunction hasBabylonHostFactoryCall(content: string): boolean {\n return /\\b(?:createFpsRuntime|createFpsBabylonGameWorldPluginLifecycle|createFpsBabylonRendererHost)\\s*\\(/.test(content);\n}\n\nfunction hasCatalogSourceReference(content: string): boolean {\n return /\\b(?:assetCatalog(?:Source)?|generatedAssetCatalog|GENERATED_ASSET_CATALOG)\\b/.test(content);\n}\n\nfunction collectDeprecatedAuthoredFields(filePath: string, content: string): string[] {\n if (/\\.json$/i.test(filePath)) {\n try {\n const value = JSON.parse(content) as unknown;\n const fields = new Set<string>();\n collectDeprecatedJsonFields(value, [], fields);\n return [...fields];\n } catch {\n return [];\n }\n }\n // Authored scene schemas are structured JSON. TypeScript project code is\n // covered by import/runtime checks and must not be guessed through regexes.\n return [];\n}\n\nfunction collectDeprecatedJsonFields(value: unknown, path: string[], fields: Set<string>): void {\n if (Array.isArray(value)) {\n value.forEach(entry => collectDeprecatedJsonFields(entry, path, fields));\n return;\n }\n if (!isRecord(value)) return;\n for (const field of ['shadowMode', 'sceneInstances', 'modelRegistry', 'childMaterialBindings', 'childMaterials', 'useBlobShadow', 'blobSettings']) {\n if (field in value) fields.add(field);\n }\n if (path[path.length - 1] === 'globalVolume') {\n for (const field of ['samples', 'camera', 'lights']) {\n if (field in value) fields.add(`globalVolume.${field}`);\n }\n }\n if (value.kind === 'box' && path.slice(-2).join('.') === 'marker.geometry') {\n for (const field of ['coordinateSpace', 'center', 'size', 'rotation']) if (field in value) fields.add(`marker.geometry.${field}`);\n }\n if (path.slice(-3).join('.') === 'shadows.staticProjected.bake') {\n for (const field of ['resolution', 'maxSize']) if (field in value) fields.add(`shadows.staticProjected.bake.${field}`);\n }\n if (path.slice(-2).join('.') === 'globalVolume.environment') {\n for (const field of ['textureAssetId', 'textureUrl', 'intensity']) if (field in value) fields.add(`globalVolume.environment.${field}`);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key !== 'metadata') collectDeprecatedJsonFields(child, [...path, key], fields);\n }\n}\n\nfunction inspectFileImports(\n file: PlayableEditorImportSnapshotFile,\n forbiddenPackages: readonly string[],\n forbiddenPackageSeverity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n let imports: string[];\n try {\n imports = readImportSpecifiers(file.content, file.filePath);\n } catch (error) {\n return [{\n severity: 'error',\n code: 'import.boundary.parse-error',\n path: file.filePath,\n message: `Unable to parse project module for import-boundary validation: ${error instanceof Error ? error.message : String(error)}`,\n }];\n }\n for (const specifier of imports) {\n if (specifier === PLAYABLE_RUNTIME_SUBPATH || specifier === PLAYABLE_RUNTIME_BABYLON_SUBPATH) continue;\n if (specifier === '@fps-games/editor' && isPublicEditorProductEntryFile(file.filePath)) continue;\n if (specifier === '@fps-games/editor/vite' && (isViteConfigFile(file.filePath) || isProjectScriptFile(file.filePath))) continue;\n if (specifier.startsWith(PLAYABLE_SDK_SUBPATH_PREFIX)) {\n const isAllowedUpgradeDoctorSubpath =\n specifier === PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH\n && isProjectScriptFile(file.filePath);\n const isAllowedViteSubpath =\n specifier === PLAYABLE_SDK_VITE_SUBPATH\n && (\n isViteConfigFile(file.filePath)\n || isProjectScriptFile(file.filePath)\n );\n if (isAllowedUpgradeDoctorSubpath || isAllowedViteSubpath) {\n continue;\n }\n diagnostics.push({\n severity: 'error',\n code: 'import.boundary.playable-sdk-subpath',\n source: specifier,\n path: file.filePath,\n message: 'Import @fps-games/editor/playable-sdk only through the public aggregate subpath.',\n });\n continue;\n }\n const directEditorPackage = findMatchingForbiddenPackage(specifier, DIRECT_EDITOR_IMPORTS);\n if (directEditorPackage && specifier !== '@fps-games/editor/playable-sdk') {\n diagnostics.push({\n severity: 'error',\n code: directEditorPackage === '@fps-games/editor'\n ? 'import.boundary.direct-editor'\n : 'import.boundary.direct-editor-core',\n source: specifier,\n path: file.filePath,\n message: `New playable editor integration code should import stable contracts from @fps-games/editor/playable-sdk instead of ${specifier}.`,\n });\n continue;\n }\n const forbiddenPackage = findMatchingForbiddenPackage(specifier, forbiddenPackages);\n if (forbiddenPackage) {\n diagnostics.push({\n severity: forbiddenPackageSeverity,\n code: 'import.boundary.forbidden-package',\n source: specifier,\n path: file.filePath,\n details: { packageName: forbiddenPackage },\n message: `Import ${forbiddenPackage} directly couples to editor internals. Consider using @fps-games/editor/playable-sdk facade exports instead.`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction isViteConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return !normalized.includes('/') && /^vite\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isPublicEditorProductEntryFile(filePath: string): boolean {\n if (isFpsConfigFile(filePath) || isProjectScriptFile(filePath)) return true;\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)src\\/(?:editor-features|services\\/fps-game-editor)\\/plugin-host\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isFpsConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)fps\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction normalizeForbiddenPackages(packages: readonly string[]): string[] {\n const normalized: string[] = [];\n for (const packageName of packages) {\n const trimmed = packageName.trim();\n if (trimmed.length > 0 && !normalized.includes(trimmed)) {\n normalized.push(trimmed);\n }\n }\n return normalized;\n}\n\nfunction findMatchingForbiddenPackage(specifier: string, forbiddenPackages: readonly string[]): string | undefined {\n return forbiddenPackages.find(packageName => specifier === packageName || specifier.startsWith(`${packageName}/`));\n}\n\nfunction readImportSpecifiers(content: string, filePath: string): string[] {\n const supportsJsx = /\\.[cm]?[jt]sx$/i.test(filePath);\n const root = parse(content, {\n sourceType: 'unambiguous',\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n plugins: [\n 'typescript',\n ...(supportsJsx ? ['jsx' as const] : []),\n 'decorators',\n 'importAttributes',\n ],\n });\n const specifiers: string[] = [];\n visitBabelNode(root, (node) => {\n const type = readBabelNodeType(node);\n if (type === 'ImportDeclaration' || type === 'ExportNamedDeclaration' || type === 'ExportAllDeclaration') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'ImportExpression') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSExternalModuleReference') {\n const source = readBabelStaticString(node.expression);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSImportType') {\n const source = readBabelStaticString(node.argument);\n if (source) specifiers.push(source);\n return;\n }\n if (type !== 'CallExpression' && type !== 'OptionalCallExpression') return;\n if (!isBabelStaticModuleLoader(node.callee)) return;\n const source = readBabelStaticString(Array.isArray(node.arguments) ? node.arguments[0] : null);\n if (source) specifiers.push(source);\n });\n return specifiers;\n}\n\nfunction visitBabelNode(value: unknown, visit: (node: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const entry of value) visitBabelNode(entry, visit);\n return;\n }\n if (!isRecord(value) || typeof value.type !== 'string') return;\n visit(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'loc' || key === 'start' || key === 'end' || key === 'extra' || key === 'comments' || key === 'tokens') continue;\n visitBabelNode(child, visit);\n }\n}\n\nfunction readBabelNodeType(value: unknown): string | null {\n return isRecord(value) && typeof value.type === 'string' ? value.type : null;\n}\n\nfunction readBabelStaticString(value: unknown): string | null {\n if (!isRecord(value)) return null;\n if (value.type === 'StringLiteral' && typeof value.value === 'string') return value.value;\n if (value.type === 'TemplateLiteral' && Array.isArray(value.expressions) && value.expressions.length === 0) {\n const quasi = Array.isArray(value.quasis) ? value.quasis[0] : null;\n const cooked = isRecord(quasi) && isRecord(quasi.value) ? quasi.value.cooked : null;\n return typeof cooked === 'string' ? cooked : null;\n }\n return null;\n}\n\nfunction isBabelStaticModuleLoader(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === 'Import') return true;\n if (value.type === 'Identifier') return value.name === 'require';\n if (value.type !== 'MemberExpression' && value.type !== 'OptionalMemberExpression') return false;\n const objectName = readBabelIdentifierName(value.object);\n const propertyName = value.computed\n ? readBabelStaticString(value.property)\n : readBabelIdentifierName(value.property);\n return (objectName === 'module' && propertyName === 'require')\n || (objectName === 'require' && propertyName === 'resolve');\n}\n\nfunction readBabelIdentifierName(value: unknown): string | null {\n return isRecord(value) && value.type === 'Identifier' && typeof value.name === 'string' ? value.name : null;\n}\n\nfunction isUsablePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') {\n if (!/^\\.\\/.+\\.(?:[cm]?js|json|node)$/.test(value)) return false;\n return value.slice(2).split('/').every(isUsablePackageTargetSegment);\n }\n if (Array.isArray(value)) return value.some(isUsablePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n return entries.some(([condition, target]) => condition !== 'types' && isUsablePackageExportTarget(target));\n}\n\nfunction isUsableNodePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') return isUsablePackageExportTarget(value);\n if (Array.isArray(value)) return value.some(isUsableNodePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n for (const [condition, target] of entries) {\n if (condition !== 'node' && condition !== 'import' && condition !== 'default') continue;\n return isUsableNodePackageExportTarget(target);\n }\n return false;\n}\n\nfunction isUsablePackageTargetSegment(segment: string): boolean {\n if (!segment) return false;\n try {\n const decoded = decodeURIComponent(segment);\n return decoded !== '.'\n && decoded !== '..'\n && decoded.toLowerCase() !== 'node_modules'\n && !decoded.includes('/')\n && !decoded.includes('\\\\');\n } catch {\n return false;\n }\n}\n\nfunction isProjectScriptFile(filePath: string): boolean {\n return normalizeFilePath(filePath).startsWith('scripts/');\n}\n\nfunction normalizeFilePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/').replace(/\\/+/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction isExactDependencyVersion(value: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)*)?$/.test(value.trim());\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readSeverity(value: unknown): PlayableEditorDoctorDiagnostic['severity'] | undefined {\n return value === 'error' || value === 'warning' || value === 'info' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isImportSnapshot(value: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[]): value is PlayableEditorImportSnapshot {\n return isRecord(value) && Array.isArray(value.files);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inspectors.js","sourceRoot":"","sources":["../../src/upgrade-doctor/inspectors.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n collectMissingPlayableEditorPackageAliasFiles,\n type PlayableEditorFileExists,\n type PlayableEditorPackageAliasPlan,\n} from '../package-resolution/index';\nimport { parse } from '@babel/parser';\nimport { createPlayableEditorDoctorReport } from './report';\nimport { inspectPlayableEditorHostCompatibilityReport } from './host';\nimport type {\n PlayableEditorDoctorDiagnostic,\n PlayableEditorDoctorReport,\n PlayableEditorImportBoundaryInspectionOptions,\n PlayableEditorImportSnapshot,\n PlayableEditorImportSnapshotFile,\n PlayableEditorInstalledVersionInspectionOptions,\n PlayableEditorInstalledVersionLike,\n PlayableEditorMigrationReadinessInspectionOptions,\n PlayableEditorPackageExportsInspectionOptions,\n PlayableEditorPackageExportsLike,\n PlayableEditorUpgradeReadinessInspectionInput,\n} from './types';\nimport { mergePlayableEditorDoctorReports } from './report';\n\nconst PLAYABLE_SDK_EXPORT_PATH = './playable-sdk';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH = './playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_EXPORT_PATH = './playable-sdk/vite';\nconst PLAYABLE_SDK_SUBPATH_PREFIX = '@fps-games/editor/playable-sdk/';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH = '@fps-games/editor/playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_SUBPATH = '@fps-games/editor/playable-sdk/vite';\nconst PLAYABLE_RUNTIME_SUBPATH = '@fps-games/editor/playable-runtime';\nconst PLAYABLE_RUNTIME_BABYLON_SUBPATH = '@fps-games/editor/playable-runtime/babylon';\nconst DIRECT_EDITOR_IMPORTS = [\n '@fps-games/editor',\n '@fps-games/editor-core',\n] as const;\n\n/**\n * Default forbidden packages for new playable editor integration code.\n * These packages are internal to the editor framework and should not be\n * imported directly from project-side code. Use @fps-games/editor/playable-sdk\n * facade exports instead.\n */\nexport const PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES: readonly string[] = [\n '@fps-games/editor-agent-bridge',\n '@fps-games/editor-babylon',\n '@fps-games/editor-browser',\n '@fps-games/editor-forge-play',\n '@fps-games/editor-playable-sdk',\n '@fps-games/editor-protocol',\n '@fps-games/babylon-renderer',\n];\n\nexport function inspectPlayableEditorPackageAliasPlan(\n plan: PlayableEditorPackageAliasPlan,\n fileExists: PlayableEditorFileExists,\n options: { title?: string } = {},\n): PlayableEditorDoctorReport {\n const missing = collectMissingPlayableEditorPackageAliasFiles(plan, fileExists);\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package aliases',\n diagnostics: missing.map(entry => ({\n severity: 'error',\n code: 'package.alias.missing-file',\n source: entry.packageId,\n path: entry.file,\n message: `Package alias for ${entry.packageId} points to a missing file.`,\n })),\n });\n}\n\nexport function inspectPlayableEditorPackageExports(\n packageJson: PlayableEditorPackageExportsLike,\n options: PlayableEditorPackageExportsInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName ?? readString(packageJson.name) ?? '@fps-games/editor';\n const exportPath = options.playableSdkExportPath ?? PLAYABLE_SDK_EXPORT_PATH;\n const upgradeDoctorExportPath = options.playableSdkUpgradeDoctorExportPath ?? PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH;\n const viteExportPath = options.playableSdkViteExportPath ?? PLAYABLE_SDK_VITE_EXPORT_PATH;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (!isRecord(packageJson.exports)) {\n diagnostics.push({\n severity: 'error',\n code: 'package.export.invalid',\n source: packageName,\n path: 'exports',\n message: `Package ${packageName} must expose an object exports map.`,\n });\n } else {\n for (const requiredExportPath of [exportPath, upgradeDoctorExportPath, viteExportPath]) {\n const hasExport = requiredExportPath in packageJson.exports;\n const usableTarget = hasExport && (\n requiredExportPath === upgradeDoctorExportPath\n ? isUsableNodePackageExportTarget(packageJson.exports[requiredExportPath])\n : isUsablePackageExportTarget(packageJson.exports[requiredExportPath])\n );\n if (usableTarget) continue;\n diagnostics.push({\n severity: 'error',\n code: hasExport ? 'package.export.invalid-target' : 'package.export.missing',\n source: packageName,\n path: `exports[\"${requiredExportPath}\"]`,\n message: hasExport\n ? `Package ${packageName} has no usable runtime target for the ${requiredExportPath} export.`\n : `Package ${packageName} is missing the ${requiredExportPath} export.`,\n });\n }\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package exports',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorInstalledVersion(\n packageJson: PlayableEditorInstalledVersionLike,\n options: PlayableEditorInstalledVersionInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName\n ?? readString(packageJson.packageName)\n ?? '@fps-games/editor';\n const declaredVersion = readString(packageJson.declaredVersion);\n const installedVersion = readString(packageJson.installedVersion);\n const source = readString(packageJson.source) ?? packageName;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (declaredVersion && installedVersion && isExactDependencyVersion(declaredVersion) && declaredVersion !== installedVersion) {\n diagnostics.push({\n severity: options.exactMismatchSeverity ?? 'error',\n code: 'package.version.installed-mismatch',\n source,\n path: 'dependencies',\n details: { packageName, declaredVersion, installedVersion },\n message: `Project declares ${packageName}@${declaredVersion}, but node_modules contains ${installedVersion}. Reinstall dependencies and restart the dev server.`,\n });\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor installed version',\n diagnostics,\n });\n}\n\nexport function createPlayableEditorImportSnapshot(\n files: readonly PlayableEditorImportSnapshotFile[],\n): PlayableEditorImportSnapshot {\n return {\n files: files.map(file => ({\n filePath: file.filePath,\n content: file.content,\n })),\n };\n}\n\nexport function inspectPlayableEditorImportBoundaries(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorImportBoundaryInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const forbiddenPackages = normalizeForbiddenPackages(\n options.forbiddenPackages ?? PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES,\n );\n const forbiddenPackageSeverity = options.forbiddenPackageSeverity ?? 'warning';\n const diagnostics = files.flatMap(file =>\n inspectFileImports(file, forbiddenPackages, forbiddenPackageSeverity),\n );\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor import boundaries',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorMigrationReadiness(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorMigrationReadinessInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const diagnostics = files.flatMap(file => inspectMigrationReadinessFile(file, options));\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor hard-cut readiness',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorUpgradeReadiness(\n input: PlayableEditorUpgradeReadinessInspectionInput = {},\n): PlayableEditorDoctorReport {\n const reports: PlayableEditorDoctorReport[] = [];\n if (input.hostCompatibility) {\n reports.push(inspectPlayableEditorHostCompatibilityReport(\n input.hostCompatibility.report,\n input.hostCompatibility.options,\n ));\n }\n if (input.packageAliasPlan) {\n reports.push(inspectPlayableEditorPackageAliasPlan(\n input.packageAliasPlan.plan,\n input.packageAliasPlan.fileExists,\n { title: input.packageAliasPlan.title },\n ));\n }\n if (input.packageExports) {\n reports.push(inspectPlayableEditorPackageExports(\n input.packageExports.packageJson,\n input.packageExports.options,\n ));\n }\n if (input.installedVersion) {\n reports.push(inspectPlayableEditorInstalledVersion(\n input.installedVersion.packageJson,\n input.installedVersion.options,\n ));\n }\n if (input.importBoundaries) {\n reports.push(inspectPlayableEditorImportBoundaries(\n input.importBoundaries.snapshot,\n input.importBoundaries.options,\n ));\n }\n if (input.migrationReadiness) {\n reports.push(inspectPlayableEditorMigrationReadiness(\n input.migrationReadiness.snapshot,\n input.migrationReadiness.options,\n ));\n }\n return mergePlayableEditorDoctorReports(reports, {\n title: input.title ?? 'Playable editor upgrade readiness',\n });\n}\n\nfunction inspectMigrationReadinessFile(\n file: PlayableEditorImportSnapshotFile,\n options: PlayableEditorMigrationReadinessInspectionOptions,\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const content = file.content;\n const environmentResourceHardCutSeverity = options.environmentResourceHardCutSeverity ?? 'error';\n if (/@fps-games\\/editor-agent-(?:mcp|bridge)\\b/.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.agent.retired-package',\n path: file.filePath,\n message: 'Removed Editor Agent transport package detected; uninstall it, install @fps-games/editor-agent at the exact @fps-games/editor version, and use fps-editor-agent from the project cwd.',\n });\n }\n if (/\\bfps-editor-agent-mcp\\b|\\bmcp_servers\\.fps_game_editor_agent\\b/.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.agent.retired-user-config',\n path: file.filePath,\n message: 'Removed user-level Agent service configuration detected; delete it because fps-editor-agent discovers the authenticated project Editor Service from cwd.',\n });\n }\n if (/\\bagent:mcp(?:\\b|:)|\\bagent-mcp-[a-z0-9-]+\\.mjs\\b/.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.agent.retired-script',\n path: file.filePath,\n message: 'Removed Agent daemon/script entry detected; delete the script and call fps-editor-agent commands against the project Editor Service.',\n });\n }\n if (/\\b(?:3777|3778)\\b|\\bEDITOR_AGENT_BRIDGE_[A-Z0-9_]+\\b/.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.agent.retired-fixed-endpoint',\n path: file.filePath,\n message: 'Removed fixed Agent endpoint configuration detected; remove it and let the Vite Editor Service publish node_modules/.fps-editor/agent-runtime.json.',\n });\n }\n if (/\\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\\b/.test(content)) {\n diagnostics.push({\n severity: 'warning',\n code: 'hard-cut.scene-artifact.project-validator-hook-removed',\n path: file.filePath,\n message: 'Removed project SceneArtifact validator hook detected; delete assertRuntimeSceneConfigModulePath/assertRuntimeSceneConfigExportName because @fps-games/editor/playable-sdk now validates the canonical runtime artifact.',\n });\n }\n if (/\\bhierarchyContextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.browser-callbacks-removed',\n path: file.filePath,\n message: 'Removed hierarchyContextActions Browser callback API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bcreateLocalEditorHarness\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.direct-harness',\n path: file.filePath,\n message: 'Removed hierarchy.contextActions API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (hasMountOwnedEditorTransition(content, file.filePath)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.editor-entry.mount-owned-transition',\n path: file.filePath,\n message: 'Project Editor Entry mount code calls switcher.enterEditor(); remove it and pass initialMode: \\'edit\\' to mountFpsGameEditorLocalEditorEntry so SDK backend.commit owns the transition.',\n });\n }\n if (/\\bhierarchyActions\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.context-actions-removed',\n path: file.filePath,\n message: 'Removed capabilities.hierarchyActions.contextActions API detected; use capabilities.hierarchyActions.operations.',\n });\n }\n const retiredBypassPattern = new RegExp(`\\\\binstall${'Leg' + 'acy'}AssetCommandBypass\\\\b|__project${'Leg' + 'acy'}AssetBypass`);\n if (retiredBypassPattern.test(content)) {\n diagnostics.push({\n severity: options.retiredAssetBypassSeverity ?? 'error',\n code: 'hard-cut.asset-bypass.retired-helper',\n path: file.filePath,\n message: 'A retired asset command bypass helper was detected; delete it and use product asset capabilities.',\n });\n }\n const retiredRuntimePattern = new RegExp(\n `__bridge${'Leg' + 'acy'}EditorRuntime|register${'Leg' + 'acy'}RuntimeProxy|install${'Leg' + 'acy'}CommandBypass`,\n );\n if (retiredRuntimePattern.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.runtime.retired-bridge',\n path: file.filePath,\n message: 'A retired runtime bridge/global was detected; remove it and mount the product editor adapter directly.',\n });\n }\n const deprecatedAuthoredFields = collectDeprecatedAuthoredFields(file.filePath, content);\n for (const field of deprecatedAuthoredFields) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.schema.deprecated-field',\n path: file.filePath,\n details: { field },\n message: `Deprecated authored field ${field} is unsupported; migrate the authored source to the current contract.`,\n });\n }\n if (\n /\\bhandleProjectAssetCommand\\b/.test(content)\n && /\\b(asset\\.import|asset\\.library\\.refresh|editor\\.asset\\.place|ASSET_IMPORT|ASSET_LIBRARY_REFRESH|EDITOR_ASSET_PLACE)\\b/.test(content)\n && !/\\bcreatePlayableProjectAssetCommandHandler\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.projectAssetCommandGlueSeverity ?? 'warning',\n code: 'migration.project-asset-command.local-glue',\n path: file.filePath,\n message: 'Project asset command glue detected; consider createPlayableProjectAssetCommandHandler and keep only project registration/placement policies local.',\n });\n }\n if (\n /\\bimportProjectionModel\\b/.test(content)\n && !/\\bcreateEditorSceneRuntimePreviewImportPlan\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.runtimePreviewProjectionSeverity ?? 'info',\n code: 'migration.runtime-preview.projection-plan-missing',\n path: file.filePath,\n message: 'Projection import logic is present without the SDK runtime preview import plan helper; verify asset URL and projection diagnostics during migration.',\n });\n }\n diagnostics.push(...collectEnvironmentResourceHardCutDiagnostics(\n file.filePath,\n content,\n environmentResourceHardCutSeverity,\n ));\n return diagnostics;\n}\n\n/**\n * This hard cut intentionally scopes the check to the `editorModule.mount`\n * callback passed to the public Editor Entry integration. A project can still\n * use a public host elsewhere; it must not make the SDK-owned switcher\n * transition from the mount callback under any local identifier name.\n */\nfunction hasMountOwnedEditorTransition(content: string, filePath: string): boolean {\n try {\n const root = parse(content, babelParserOptions(filePath));\n let matched = false;\n visitBabelNode(root, node => {\n if (matched || node.type !== 'CallExpression' || readBabelIdentifierName(node.callee) !== 'mountFpsGameEditorLocalEditorEntry') return;\n const options = Array.isArray(node.arguments) && node.arguments.length === 1 ? node.arguments[0] : null;\n const editorModule = exactObjectProperty(options, 'editorModule');\n const mount = exactObjectProperty(editorModule, 'mount');\n if (!mount || mount.type !== 'ArrowFunctionExpression' || mount.async !== true || !Array.isArray(mount.params) || mount.params.length !== 2 || !mount.params.every(readBabelIdentifierName) || !isRecord(mount.body) || mount.body.type !== 'BlockStatement' || !Array.isArray(mount.body.body)) return;\n const [firstParam] = mount.params.map(readBabelIdentifierName) as [string, string];\n const body = mount.body.body;\n if (body.length !== 3 || !isCanonicalHandleDeclaration(body[0], firstParam) || !isCanonicalEditIf(body[1], readDeclaredName(body[0])) || !isCanonicalReturn(body[2], readDeclaredName(body[0]))) return;\n matched = true;\n });\n return matched;\n } catch { return false; }\n}\n\nfunction exactObjectProperty(value: unknown, name: string): Record<string, unknown> | null {\n if (!isRecord(value) || value.type !== 'ObjectExpression' || !Array.isArray(value.properties)) return null;\n let target: Record<string, unknown> | null = null;\n for (const property of value.properties) {\n // A spread or computed key could supply/override the target key, so this\n // intentionally narrow fingerprint treats the whole container as manual review.\n if (!isRecord(property) || property.type === 'SpreadElement' || property.computed) return null;\n const key = readBabelIdentifierName(property.key) ?? readBabelStaticString(property.key);\n if (key !== name) continue;\n if (property.type !== 'ObjectProperty' || target || !isRecord(property.value)) return null;\n target = property.value;\n }\n return target;\n}\n\nfunction readDeclaredName(statement: unknown): string | null {\n return isRecord(statement) && statement.type === 'VariableDeclaration' && Array.isArray(statement.declarations) && statement.declarations.length === 1 && isRecord(statement.declarations[0])\n ? readBabelIdentifierName(statement.declarations[0].id) : null;\n}\n\nfunction isCanonicalHandleDeclaration(statement: unknown, moduleName: string): boolean {\n if (!isRecord(statement) || statement.type !== 'VariableDeclaration' || statement.kind !== 'const' || !Array.isArray(statement.declarations) || statement.declarations.length !== 1) return false;\n const declaration = statement.declarations[0];\n if (!isRecord(declaration) || !readBabelIdentifierName(declaration.id) || !isRecord(declaration.init) || declaration.init.type !== 'AwaitExpression') return false;\n const call = declaration.init.argument;\n return isRecord(call) && call.type === 'CallExpression' && Array.isArray(call.arguments) && call.arguments.length === 1 && isRecord(call.callee) && call.callee.type === 'MemberExpression' && !call.callee.computed && readBabelIdentifierName(call.callee.object) === moduleName && readBabelIdentifierName(call.callee.property) === 'mountLocalEditorModeSwitcher' && isRecord(call.arguments[0]) && call.arguments[0].type === 'ObjectExpression';\n}\n\nfunction isCanonicalEditIf(statement: unknown, handle: string | null): boolean {\n if (!handle || !isRecord(statement) || statement.type !== 'IfStatement' || statement.alternate || !isRecord(statement.test) || statement.test.type !== 'BinaryExpression' || statement.test.operator !== '===' || !isRecord(statement.test.left) || statement.test.left.type !== 'MemberExpression' || statement.test.left.computed || readBabelIdentifierName(statement.test.left.object) === null || readBabelIdentifierName(statement.test.left.property) !== 'bootMode' || !isRecord(statement.test.right) || statement.test.right.type !== 'StringLiteral' || statement.test.right.value !== 'edit' || !isRecord(statement.consequent) || statement.consequent.type !== 'BlockStatement' || !Array.isArray(statement.consequent.body) || statement.consequent.body.length !== 1) return false;\n const expression = isRecord(statement.consequent.body[0]) && statement.consequent.body[0].type === 'ExpressionStatement' ? statement.consequent.body[0].expression : null;\n return isAllowedEnterWrapper(expression, handle);\n}\n\nfunction isAllowedEnterWrapper(value: unknown, handle: string): boolean {\n if (!isRecord(value)) return false;\n if (value.type === 'AwaitExpression' || value.type === 'UnaryExpression' && value.operator === 'void') return isAllowedEnterWrapper(value.argument, handle);\n if (value.type === 'CallExpression' && isRecord(value.callee) && value.callee.type === 'MemberExpression' && !value.callee.computed && readBabelIdentifierName(value.callee.property) === 'catch') return isAllowedEnterWrapper(value.callee.object, handle);\n return value.type === 'CallExpression' && Array.isArray(value.arguments) && value.arguments.length === 0 && isRecord(value.callee) && value.callee.type === 'MemberExpression' && !value.callee.computed && !value.callee.optional && readBabelIdentifierName(value.callee.object) === handle && readBabelIdentifierName(value.callee.property) === 'enterEditor';\n}\n\nfunction isCanonicalReturn(statement: unknown, handle: string | null): boolean {\n return !!handle && isRecord(statement) && statement.type === 'ReturnStatement' && readBabelIdentifierName(statement.argument) === handle;\n}\n\n/**\n * These checks intentionally inspect only project-side migration snapshots. They\n * flag retired public integration shapes, not generic material texture fields or\n * plugin registration order; those are validated by the product contract tests.\n */\nfunction collectEnvironmentResourceHardCutDiagnostics(\n filePath: string,\n content: string,\n severity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const add = (code: string, message: string) => diagnostics.push({\n severity,\n code,\n path: filePath,\n message,\n });\n\n const hasBabylonRendererSurface = /\\b(?:FpsBabylonRendererContext|FpsBabylonRendererPluginConfig|BabylonEnvironmentTexture(?:Profile|Factory)|createFpsBabylon(?:GameWorldPluginLifecycle|RendererHost))\\b/.test(content);\n if (/\\bresolveAssetUrl\\b/.test(content) && hasBabylonRendererSurface) {\n add(\n 'hard-cut.environment-resource.resolve-asset-url-removed',\n 'Removed Babylon resolveAssetUrl integration detected; pass the generated asset catalog to the Host and resolve a PlayableResolvedAssetResource through the Assets Plugin service.',\n );\n }\n if (/\\bFpsBabylonRendererPluginConfig\\b/.test(content) && /\\benvironmentTexture\\s*:/.test(content)) {\n add(\n 'hard-cut.environment-resource.renderer-environment-texture-removed',\n 'Removed FpsBabylonRendererPluginConfig.environmentTexture fallback detected; authored rendering must resolve through the catalog-backed resource service.',\n );\n }\n if (/\\bBabylonEnvironmentTextureProfile\\s*\\{[^}]*\\btextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.profile-texture-url-removed',\n 'Removed BabylonEnvironmentTextureProfile.textureUrl shape detected; use profile.texture: PlayableResolvedAssetResource | null.',\n );\n }\n if (/\\bBabylonEnvironmentTextureFactory\\b/.test(content) && /\\b(?:textureUrl|url)\\s*:\\s*(?:string|String)\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.url-factory-removed',\n 'Removed URL-only BabylonEnvironmentTextureFactory contract detected; the factory must receive a PlayableResolvedAssetResource so it can preserve the asset format.',\n );\n }\n if (/\\bresolvePlayableBabylonRenderingEnvironmentTextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.resolve-url-helper-removed',\n 'Removed resolvePlayableBabylonRenderingEnvironmentTextureUrl helper detected; use resolvePlayableBabylonRenderingEnvironmentTextureResource.',\n );\n }\n if (isGeneratedAssetCatalogFile(filePath, content) && !hasGeneratedAssetCatalogFormat(content)) {\n add(\n 'hard-cut.environment-resource.generated-catalog-format-missing',\n 'Generated asset catalog is missing the required format field; regenerate it with the current playable SDK instead of editing catalog output by hand.',\n );\n }\n if (hasBabylonHostFactoryCall(content) && !hasCatalogSourceReference(content)) {\n add(\n 'hard-cut.environment-resource.host-catalog-source-missing',\n 'Babylon Runtime/Renderer Host construction has no generated asset catalog input; pass the catalog source so plugin-assets can provide the shared resource resolver.',\n );\n }\n return diagnostics;\n}\n\nfunction isGeneratedAssetCatalogFile(filePath: string, content: string): boolean {\n return /(?:^|\\/)asset-catalog(?:\\.generated)?\\.[cm]?[jt]s$/i.test(normalizeFilePath(filePath))\n || (\n /\\binterface\\s+GeneratedAssetCatalogEntry\\b/.test(content)\n && /\\b(?:export\\s+)?const\\s+GENERATED_ASSET_CATALOG\\b/.test(content)\n );\n}\n\nfunction hasGeneratedAssetCatalogFormat(content: string): boolean {\n return /\\bformat\\s*:\\s*(?:string|[\"'`][^\"'`]+[\"'`])/.test(content);\n}\n\nfunction hasBabylonHostFactoryCall(content: string): boolean {\n return /\\b(?:createFpsRuntime|createFpsBabylonGameWorldPluginLifecycle|createFpsBabylonRendererHost)\\s*\\(/.test(content);\n}\n\nfunction hasCatalogSourceReference(content: string): boolean {\n return /\\b(?:assetCatalog(?:Source)?|generatedAssetCatalog|GENERATED_ASSET_CATALOG)\\b/.test(content);\n}\n\nfunction collectDeprecatedAuthoredFields(filePath: string, content: string): string[] {\n if (/\\.json$/i.test(filePath)) {\n try {\n const value = JSON.parse(content) as unknown;\n const fields = new Set<string>();\n collectDeprecatedJsonFields(value, [], fields);\n return [...fields];\n } catch {\n return [];\n }\n }\n // Authored scene schemas are structured JSON. TypeScript project code is\n // covered by import/runtime checks and must not be guessed through regexes.\n return [];\n}\n\nfunction collectDeprecatedJsonFields(value: unknown, path: string[], fields: Set<string>): void {\n if (Array.isArray(value)) {\n value.forEach(entry => collectDeprecatedJsonFields(entry, path, fields));\n return;\n }\n if (!isRecord(value)) return;\n for (const field of ['shadowMode', 'sceneInstances', 'modelRegistry', 'childMaterialBindings', 'childMaterials', 'useBlobShadow', 'blobSettings']) {\n if (field in value) fields.add(field);\n }\n if (path[path.length - 1] === 'globalVolume') {\n for (const field of ['samples', 'camera', 'lights']) {\n if (field in value) fields.add(`globalVolume.${field}`);\n }\n }\n if (value.kind === 'box' && path.slice(-2).join('.') === 'marker.geometry') {\n for (const field of ['coordinateSpace', 'center', 'size', 'rotation']) if (field in value) fields.add(`marker.geometry.${field}`);\n }\n if (path.slice(-3).join('.') === 'shadows.staticProjected.bake') {\n for (const field of ['resolution', 'maxSize']) if (field in value) fields.add(`shadows.staticProjected.bake.${field}`);\n }\n if (path.slice(-2).join('.') === 'globalVolume.environment') {\n for (const field of ['textureAssetId', 'textureUrl', 'intensity']) if (field in value) fields.add(`globalVolume.environment.${field}`);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key !== 'metadata') collectDeprecatedJsonFields(child, [...path, key], fields);\n }\n}\n\nfunction inspectFileImports(\n file: PlayableEditorImportSnapshotFile,\n forbiddenPackages: readonly string[],\n forbiddenPackageSeverity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n let imports: string[];\n try {\n imports = readImportSpecifiers(file.content, file.filePath);\n } catch (error) {\n return [{\n severity: 'error',\n code: 'import.boundary.parse-error',\n path: file.filePath,\n message: `Unable to parse project module for import-boundary validation: ${error instanceof Error ? error.message : String(error)}`,\n }];\n }\n for (const specifier of imports) {\n if (specifier === PLAYABLE_RUNTIME_SUBPATH || specifier === PLAYABLE_RUNTIME_BABYLON_SUBPATH) continue;\n if (specifier === '@fps-games/editor' && isPublicEditorProductEntryFile(file.filePath)) continue;\n if (specifier === '@fps-games/editor/vite' && (isViteConfigFile(file.filePath) || isProjectScriptFile(file.filePath))) continue;\n if (specifier.startsWith(PLAYABLE_SDK_SUBPATH_PREFIX)) {\n const isAllowedUpgradeDoctorSubpath =\n specifier === PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH\n && isProjectScriptFile(file.filePath);\n const isAllowedViteSubpath =\n specifier === PLAYABLE_SDK_VITE_SUBPATH\n && (\n isViteConfigFile(file.filePath)\n || isProjectScriptFile(file.filePath)\n );\n if (isAllowedUpgradeDoctorSubpath || isAllowedViteSubpath) {\n continue;\n }\n diagnostics.push({\n severity: 'error',\n code: 'import.boundary.playable-sdk-subpath',\n source: specifier,\n path: file.filePath,\n message: 'Import @fps-games/editor/playable-sdk only through the public aggregate subpath.',\n });\n continue;\n }\n const directEditorPackage = findMatchingForbiddenPackage(specifier, DIRECT_EDITOR_IMPORTS);\n if (directEditorPackage && specifier !== '@fps-games/editor/playable-sdk') {\n diagnostics.push({\n severity: 'error',\n code: directEditorPackage === '@fps-games/editor'\n ? 'import.boundary.direct-editor'\n : 'import.boundary.direct-editor-core',\n source: specifier,\n path: file.filePath,\n message: `New playable editor integration code should import stable contracts from @fps-games/editor/playable-sdk instead of ${specifier}.`,\n });\n continue;\n }\n const forbiddenPackage = findMatchingForbiddenPackage(specifier, forbiddenPackages);\n if (forbiddenPackage) {\n diagnostics.push({\n severity: forbiddenPackageSeverity,\n code: 'import.boundary.forbidden-package',\n source: specifier,\n path: file.filePath,\n details: { packageName: forbiddenPackage },\n message: `Import ${forbiddenPackage} directly couples to editor internals. Consider using @fps-games/editor/playable-sdk facade exports instead.`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction isViteConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return !normalized.includes('/') && /^vite\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isPublicEditorProductEntryFile(filePath: string): boolean {\n if (isFpsConfigFile(filePath) || isProjectScriptFile(filePath)) return true;\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)src\\/(?:editor-features|services\\/fps-game-editor)\\/plugin-host\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isFpsConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)fps\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction normalizeForbiddenPackages(packages: readonly string[]): string[] {\n const normalized: string[] = [];\n for (const packageName of packages) {\n const trimmed = packageName.trim();\n if (trimmed.length > 0 && !normalized.includes(trimmed)) {\n normalized.push(trimmed);\n }\n }\n return normalized;\n}\n\nfunction findMatchingForbiddenPackage(specifier: string, forbiddenPackages: readonly string[]): string | undefined {\n return forbiddenPackages.find(packageName => specifier === packageName || specifier.startsWith(`${packageName}/`));\n}\n\nfunction readImportSpecifiers(content: string, filePath: string): string[] {\n const root = parse(content, babelParserOptions(filePath));\n const specifiers: string[] = [];\n visitBabelNode(root, (node) => {\n const type = readBabelNodeType(node);\n if (type === 'ImportDeclaration' || type === 'ExportNamedDeclaration' || type === 'ExportAllDeclaration') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'ImportExpression') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSExternalModuleReference') {\n const source = readBabelStaticString(node.expression);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSImportType') {\n const source = readBabelStaticString(node.argument);\n if (source) specifiers.push(source);\n return;\n }\n if (type !== 'CallExpression' && type !== 'OptionalCallExpression') return;\n if (!isBabelStaticModuleLoader(node.callee)) return;\n const source = readBabelStaticString(Array.isArray(node.arguments) ? node.arguments[0] : null);\n if (source) specifiers.push(source);\n });\n return specifiers;\n}\n\nfunction babelParserOptions(filePath: string) {\n const supportsJsx = /\\.[cm]?[jt]sx$/i.test(filePath);\n return {\n sourceType: 'unambiguous' as const,\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n plugins: [\n 'typescript' as const,\n ...(supportsJsx ? ['jsx' as const] : []),\n 'decorators' as const,\n 'importAttributes' as const,\n ],\n };\n}\n\nfunction visitBabelNode(value: unknown, visit: (node: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const entry of value) visitBabelNode(entry, visit);\n return;\n }\n if (!isRecord(value) || typeof value.type !== 'string') return;\n visit(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'loc' || key === 'start' || key === 'end' || key === 'extra' || key === 'comments' || key === 'tokens') continue;\n visitBabelNode(child, visit);\n }\n}\n\nfunction readBabelNodeType(value: unknown): string | null {\n return isRecord(value) && typeof value.type === 'string' ? value.type : null;\n}\n\nfunction readBabelStaticString(value: unknown): string | null {\n if (!isRecord(value)) return null;\n if (value.type === 'StringLiteral' && typeof value.value === 'string') return value.value;\n if (value.type === 'TemplateLiteral' && Array.isArray(value.expressions) && value.expressions.length === 0) {\n const quasi = Array.isArray(value.quasis) ? value.quasis[0] : null;\n const cooked = isRecord(quasi) && isRecord(quasi.value) ? quasi.value.cooked : null;\n return typeof cooked === 'string' ? cooked : null;\n }\n return null;\n}\n\nfunction isBabelStaticModuleLoader(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === 'Import') return true;\n if (value.type === 'Identifier') return value.name === 'require';\n if (value.type !== 'MemberExpression' && value.type !== 'OptionalMemberExpression') return false;\n const objectName = readBabelIdentifierName(value.object);\n const propertyName = value.computed\n ? readBabelStaticString(value.property)\n : readBabelIdentifierName(value.property);\n return (objectName === 'module' && propertyName === 'require')\n || (objectName === 'require' && propertyName === 'resolve');\n}\n\nfunction readBabelIdentifierName(value: unknown): string | null {\n return isRecord(value) && value.type === 'Identifier' && typeof value.name === 'string' ? value.name : null;\n}\n\nfunction isUsablePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') {\n if (!/^\\.\\/.+\\.(?:[cm]?js|json|node)$/.test(value)) return false;\n return value.slice(2).split('/').every(isUsablePackageTargetSegment);\n }\n if (Array.isArray(value)) return value.some(isUsablePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n return entries.some(([condition, target]) => condition !== 'types' && isUsablePackageExportTarget(target));\n}\n\nfunction isUsableNodePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') return isUsablePackageExportTarget(value);\n if (Array.isArray(value)) return value.some(isUsableNodePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n for (const [condition, target] of entries) {\n if (condition !== 'node' && condition !== 'import' && condition !== 'default') continue;\n return isUsableNodePackageExportTarget(target);\n }\n return false;\n}\n\nfunction isUsablePackageTargetSegment(segment: string): boolean {\n if (!segment) return false;\n try {\n const decoded = decodeURIComponent(segment);\n return decoded !== '.'\n && decoded !== '..'\n && decoded.toLowerCase() !== 'node_modules'\n && !decoded.includes('/')\n && !decoded.includes('\\\\');\n } catch {\n return false;\n }\n}\n\nfunction isProjectScriptFile(filePath: string): boolean {\n return normalizeFilePath(filePath).startsWith('scripts/');\n}\n\nfunction normalizeFilePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/').replace(/\\/+/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction isExactDependencyVersion(value: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)*)?$/.test(value.trim());\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readSeverity(value: unknown): PlayableEditorDoctorDiagnostic['severity'] | undefined {\n return value === 'error' || value === 'warning' || value === 'info' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isImportSnapshot(value: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[]): value is PlayableEditorImportSnapshot {\n return isRecord(value) && Array.isArray(value.files);\n}\n"]}
|
package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-scene-workflow.d.ts","sourceRoot":"","sources":["../../src/vite/editor-scene-workflow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor-scene-workflow.d.ts","sourceRoot":"","sources":["../../src/vite/editor-scene-workflow.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAuB1C,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,mCAAmC;IAClD,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrF,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9F,+BAA+B,CAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC3C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,oCAAoC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrG;AAED,MAAM,WAAW,mCAAoC,SAAQ,mCAAmC;IAC9F,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAChD,uCAAuC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACpF,sCAAsC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtG,uCAAuC,CACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,OAAO,CAAC,EAAE;QAAE,yBAAyB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;KAAE,GACzE;QACD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sCAAsC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,4BAA4B,CAAC;IACpC,sBAAsB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,gCAAiC,SAAQ,sCAAsC;IAC9F,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mCAAmC,CAAC,CAAC;CAC5G;AAED,MAAM,WAAW,0CAA2C,SAAQ,sCAAsC;IACxG,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAC3G,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxF,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtG,gCAAgC,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAClG,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,gCAAiC,SAAQ,0CAA0C;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmClC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAalC;AAkOD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEtE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAcpF;AAED,wBAAgB,uCAAuC,CACrD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB"}
|
|
@@ -54,6 +54,7 @@ export async function savePlayableViteEditorScene(input) {
|
|
|
54
54
|
return withPlayableVitePathWriteLock(writePaths, () => savePlayableViteEditorSceneNow(input));
|
|
55
55
|
}
|
|
56
56
|
async function savePlayableViteEditorSceneNow(input) {
|
|
57
|
+
assertPlayableViteEditorSceneAuthoringRevision(input);
|
|
57
58
|
const services = await input.saveServices(input.server, input.projectRoot);
|
|
58
59
|
const paths = input.paths;
|
|
59
60
|
const companionConfigPayload = readSceneMainSourceSaveCompanionConfigs(input.body);
|
|
@@ -179,6 +180,52 @@ async function savePlayableViteEditorSceneNow(input) {
|
|
|
179
180
|
},
|
|
180
181
|
};
|
|
181
182
|
}
|
|
183
|
+
function assertPlayableViteEditorSceneAuthoringRevision(input) {
|
|
184
|
+
const persistedEditorScene = readPlayableViteJsonFile(input.paths.editorScenePath);
|
|
185
|
+
if (!persistedEditorScene)
|
|
186
|
+
return;
|
|
187
|
+
const persistedSource = readPlayableViteEditorSceneAuthoringSource(persistedEditorScene);
|
|
188
|
+
if (!persistedSource)
|
|
189
|
+
return;
|
|
190
|
+
const submittedSource = readPlayableViteEditorSceneAuthoringSource(input.rawEditorScene);
|
|
191
|
+
const expectedRevision = typeof input.body.expectedAuthoringSourceRevision === 'number'
|
|
192
|
+
&& Number.isFinite(input.body.expectedAuthoringSourceRevision)
|
|
193
|
+
? input.body.expectedAuthoringSourceRevision
|
|
194
|
+
: null;
|
|
195
|
+
const identityMatches = submittedSource?.sourceId === persistedSource.sourceId
|
|
196
|
+
&& submittedSource.sourceType === persistedSource.sourceType;
|
|
197
|
+
const submittedRevisionMatches = submittedSource?.revision === persistedSource.revision;
|
|
198
|
+
if (identityMatches
|
|
199
|
+
&& submittedRevisionMatches
|
|
200
|
+
&& expectedRevision === persistedSource.revision)
|
|
201
|
+
return;
|
|
202
|
+
const stage = input.saveMode === 'prepare-platform-save'
|
|
203
|
+
? 'document.export'
|
|
204
|
+
: 'document.save';
|
|
205
|
+
const error = new Error('authoring_source_revision_mismatch');
|
|
206
|
+
Object.assign(error, {
|
|
207
|
+
code: 'authoring_source_revision_mismatch',
|
|
208
|
+
stage,
|
|
209
|
+
sourceId: submittedSource?.sourceId ?? persistedSource.sourceId,
|
|
210
|
+
expectedRevision,
|
|
211
|
+
actualRevision: persistedSource.revision,
|
|
212
|
+
});
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
function readPlayableViteEditorSceneAuthoringSource(editorScene) {
|
|
216
|
+
const source = readRecord(readRecord(editorScene.meta)?.authoringSource);
|
|
217
|
+
if (typeof source?.sourceId !== 'string' || !source.sourceId.trim())
|
|
218
|
+
return null;
|
|
219
|
+
if (typeof source.sourceType !== 'string' || !source.sourceType.trim())
|
|
220
|
+
return null;
|
|
221
|
+
if (typeof source.revision !== 'number' || !Number.isFinite(source.revision))
|
|
222
|
+
return null;
|
|
223
|
+
return {
|
|
224
|
+
sourceId: source.sourceId,
|
|
225
|
+
sourceType: source.sourceType,
|
|
226
|
+
revision: source.revision,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
182
229
|
function assertCurrentStaticShadowArtifactPayload(payload, artifact, input) {
|
|
183
230
|
if (!input.present || payload == null || artifact)
|
|
184
231
|
return;
|