@volter/editor-core 0.5.57
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/BUNDLED_NOTICES +1527 -0
- package/LICENSE +686 -0
- package/LICENSE-APACHE +202 -0
- package/NOTICE +18 -0
- package/README.md +24 -0
- package/dist/build/chunk-JS4D4XZ3.js +175 -0
- package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
- package/dist/build/vite-plugin-product-contributions.js +100 -0
- package/dist/build/vite-plugin-product-contributions.js.map +7 -0
- package/dist/build/vite-plugin-shared-react.js +25 -0
- package/dist/build/vite-plugin-shared-react.js.map +7 -0
- package/dist/build/vite-plugin-shared-three.js +86 -0
- package/dist/build/vite-plugin-shared-three.js.map +7 -0
- package/dist/server/chunk-KMJC7AGO.js +98 -0
- package/dist/server/chunk-KMJC7AGO.js.map +7 -0
- package/dist/server/chunk-PSILUMGS.js +46 -0
- package/dist/server/chunk-PSILUMGS.js.map +7 -0
- package/dist/server/frame-proxy.js +255 -0
- package/dist/server/frame-proxy.js.map +7 -0
- package/dist/server/open-browser.js +53 -0
- package/dist/server/open-browser.js.map +7 -0
- package/dist/server/process-shutdown.js +127 -0
- package/dist/server/process-shutdown.js.map +7 -0
- package/dist/server/session-registry.js +141 -0
- package/dist/server/session-registry.js.map +7 -0
- package/dist/server/spawn-opener.js +11 -0
- package/dist/server/spawn-opener.js.map +7 -0
- package/dist/server/worktree-identity.js +11 -0
- package/dist/server/worktree-identity.js.map +7 -0
- package/dist-server/packaged.mjs +88816 -0
- package/package.json +118 -0
- package/scripts/build-plugins.mjs +14 -0
- package/scripts/build-server.mjs +26 -0
- package/scripts/build-session.mjs +9 -0
- package/server/account-credentials.ts +60 -0
- package/server/account-service.ts +1434 -0
- package/server/adapter-region-includes.ts +47 -0
- package/server/asset-catalog-v2.ts +175 -0
- package/server/asset-history-snapshots.ts +196 -0
- package/server/asset-ledger-store.ts +195 -0
- package/server/asset-library-routes.ts +1595 -0
- package/server/blender-wasm-artifact.ts +430 -0
- package/server/boot-timings.ts +106 -0
- package/server/canonical-path.ts +50 -0
- package/server/checkout-workspace-preflight.ts +349 -0
- package/server/cloud-asset-catalog.ts +158 -0
- package/server/coding-inference-launch.ts +237 -0
- package/server/collaboration-account-client.ts +202 -0
- package/server/collaboration-attribution.ts +122 -0
- package/server/collaboration-session.ts +934 -0
- package/server/comfyui-bridge.ts +248 -0
- package/server/console-ledger.ts +499 -0
- package/server/creation-site-transform.ts +304 -0
- package/server/creation-site-write.ts +648 -0
- package/server/data-file-serialize.ts +158 -0
- package/server/editor-brand-html.ts +72 -0
- package/server/editor-control-socket.ts +366 -0
- package/server/editor-server-options.ts +190 -0
- package/server/editor-server.ts +1483 -0
- package/server/editor-sse.ts +352 -0
- package/server/engine-provenance.ts +169 -0
- package/server/engine-source-restart.ts +117 -0
- package/server/frame-bridge.ts +115 -0
- package/server/frame-proxy.ts +490 -0
- package/server/frame-workbench.ts +259 -0
- package/server/frontend-handoff.ts +229 -0
- package/server/game-globals-shadow.ts +113 -0
- package/server/gameplay-session-retention.ts +149 -0
- package/server/gameplay-sessions.ts +123 -0
- package/server/generation-jobs.ts +201 -0
- package/server/generation-reconciler.ts +137 -0
- package/server/generative-execution-context.ts +59 -0
- package/server/git-workflow.ts +612 -0
- package/server/harness-chat-caller.ts +36 -0
- package/server/harness-chat-service.ts +1681 -0
- package/server/idle-shutdown.ts +170 -0
- package/server/js-profiling-policy.ts +52 -0
- package/server/launcher-settings.ts +84 -0
- package/server/local-asset-catalog.ts +410 -0
- package/server/managed-account-defaults.ts +22 -0
- package/server/mock-control-plane.ts +540 -0
- package/server/model-import-conversion.ts +345 -0
- package/server/native-credential-store.ts +162 -0
- package/server/open-browser.ts +118 -0
- package/server/packaged.ts +1192 -0
- package/server/play-stall.ts +126 -0
- package/server/process-shutdown.ts +218 -0
- package/server/product-presets.ts +55 -0
- package/server/project-build-artifact.ts +95 -0
- package/server/project-components.ts +100 -0
- package/server/project-dependency-invalidation.ts +114 -0
- package/server/project-file-scan.ts +235 -0
- package/server/project-hmr-files.ts +215 -0
- package/server/project-install-roots.ts +210 -0
- package/server/project-kinds.ts +71 -0
- package/server/project-mcp-servers.ts +82 -0
- package/server/project-module-freshness.ts +109 -0
- package/server/project-module-instance.ts +375 -0
- package/server/project-optimize-deps-entries.ts +827 -0
- package/server/project-output-writer.ts +679 -0
- package/server/project-package-origin.ts +63 -0
- package/server/project-root-surface.ts +831 -0
- package/server/project-scratch-path.ts +47 -0
- package/server/project-script-hmr.ts +619 -0
- package/server/project-serving-plugins.ts +236 -0
- package/server/project-tools.ts +653 -0
- package/server/project-validation.ts +250 -0
- package/server/project-verbs.ts +127 -0
- package/server/project-view.ts +52 -0
- package/server/project-watch.ts +1134 -0
- package/server/project-work-coordinator.ts +288 -0
- package/server/provider-credentials.ts +331 -0
- package/server/recent-projects-store.ts +98 -0
- package/server/redact-secrets.ts +71 -0
- package/server/repository-presence.ts +267 -0
- package/server/routes/account.ts +357 -0
- package/server/routes/agents.ts +60 -0
- package/server/routes/assets.ts +154 -0
- package/server/routes/build.ts +13 -0
- package/server/routes/collaboration.ts +595 -0
- package/server/routes/configurations.ts +419 -0
- package/server/routes/context.ts +264 -0
- package/server/routes/control-plane.ts +1811 -0
- package/server/routes/logs.ts +272 -0
- package/server/routes/project-identity.ts +302 -0
- package/server/routes/project-open.ts +429 -0
- package/server/routes/project-source.ts +686 -0
- package/server/routes/project-state.ts +383 -0
- package/server/routes/relay.ts +1029 -0
- package/server/routes/route-helpers.ts +29 -0
- package/server/routes/served-modules.ts +138 -0
- package/server/routes/session-tabs.ts +196 -0
- package/server/routes/settings.ts +121 -0
- package/server/routes/share-control.ts +486 -0
- package/server/routes/themes.ts +116 -0
- package/server/routes/tools.ts +230 -0
- package/server/routes/worktrees.ts +595 -0
- package/server/scoped-game-css.ts +461 -0
- package/server/server-utils.ts +1194 -0
- package/server/session-product.ts +112 -0
- package/server/session-registry.ts +230 -0
- package/server/share-claims.ts +138 -0
- package/server/share-host.ts +526 -0
- package/server/share-session-gateway.ts +1362 -0
- package/server/share-tunnel.ts +123 -0
- package/server/spawn-opener.ts +74 -0
- package/server/support/play/log-format.ts +76 -0
- package/server/support/play/session-record.ts +199 -0
- package/server/support/project/build-discipline.ts +718 -0
- package/server/support/project/inspection-node.ts +119 -0
- package/server/support/project/log-naming.ts +54 -0
- package/server/support/project/provenance.ts +290 -0
- package/server/support/project/run-name.ts +18 -0
- package/server/support/project/session-journal.ts +830 -0
- package/server/support/project/shared.ts +327 -0
- package/server/tab-bootstrap.ts +62 -0
- package/server/tab-heartbeat.ts +477 -0
- package/server/tab-lifecycle.ts +550 -0
- package/server/tab-presence.ts +1508 -0
- package/server/team-agent-mirror.ts +95 -0
- package/server/twin-auth.ts +138 -0
- package/server/vendored-lock-recorder.ts +968 -0
- package/server/worktree-identity.ts +121 -0
- package/server/worktree-management.ts +398 -0
- package/server/worktree-retention.d.mts +13 -0
- package/server/worktree-retention.mjs +205 -0
- package/src/EditorContext.tsx +169 -0
- package/src/account.ts +333 -0
- package/src/action-registry.ts +532 -0
- package/src/active-product.ts +74 -0
- package/src/active-project.ts +155 -0
- package/src/adapter-editor-config.ts +25 -0
- package/src/adapter-observation.ts +49 -0
- package/src/animation/stage-transport.ts +379 -0
- package/src/animation/three-clips-subject.ts +172 -0
- package/src/api/asset-library-wire.ts +45 -0
- package/src/api/assets.ts +365 -0
- package/src/api/base.ts +10 -0
- package/src/api/build.ts +99 -0
- package/src/api/git-wire.ts +56 -0
- package/src/api/logs.ts +92 -0
- package/src/api/project-identity.ts +74 -0
- package/src/api/project-open.ts +355 -0
- package/src/api/project-source.ts +162 -0
- package/src/api/project-state.ts +107 -0
- package/src/api/relay.ts +268 -0
- package/src/api/settings.ts +36 -0
- package/src/api/themes.ts +45 -0
- package/src/api/worktrees.ts +257 -0
- package/src/asset-compare-core.ts +171 -0
- package/src/asset-compare.ts +294 -0
- package/src/asset-editor-context.tsx +100 -0
- package/src/asset-events.ts +97 -0
- package/src/asset-inspector-actions.ts +87 -0
- package/src/asset-preview-framing.ts +357 -0
- package/src/asset-preview.ts +2802 -0
- package/src/asset-selection-viewer-registry.ts +113 -0
- package/src/asset-selection.ts +133 -0
- package/src/asset-workflow/asset-capabilities.ts +344 -0
- package/src/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/asset-workflow/asset-ledger.ts +156 -0
- package/src/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/asset-workflow/asset-types.ts +142 -0
- package/src/asset-workflow/asset-workflow-quality.ts +61 -0
- package/src/asset-workflow/audio-preview-player.ts +193 -0
- package/src/asset-workflow/audio-waveform.ts +22 -0
- package/src/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/asset-workflow/folder-preview.ts +345 -0
- package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/asset-workflow/image-view-scale.ts +32 -0
- package/src/asset-workflow/import-contract.ts +124 -0
- package/src/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/asset-workflow/model-inspection.ts +818 -0
- package/src/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +139 -0
- package/src/asset-workflow/project-asset-operations.ts +154 -0
- package/src/asset-workflow/project-asset-roots.ts +68 -0
- package/src/asset-workflow/project-content.ts +288 -0
- package/src/asset-workflow/project-source-index.ts +550 -0
- package/src/asset-workflow/thumbnail-system.ts +256 -0
- package/src/authoring/active-adapter.ts +199 -0
- package/src/authoring/active-systems.ts +422 -0
- package/src/authoring/adapter-key.ts +18 -0
- package/src/authoring/authoring-asset-url.ts +27 -0
- package/src/authoring/bootstrap-state.ts +49 -0
- package/src/authoring/boundary-authoring-adapter.ts +184 -0
- package/src/authoring/breakpoint-state.ts +43 -0
- package/src/authoring/canvas-scene-guides.ts +76 -0
- package/src/authoring/component-instance-root.ts +171 -0
- package/src/authoring/composite-authoring-adapter.ts +2110 -0
- package/src/authoring/consumer-actions.ts +520 -0
- package/src/authoring/css-numeric-style.ts +97 -0
- package/src/authoring/design-time-layers.ts +849 -0
- package/src/authoring/design-time-mount-registry.ts +235 -0
- package/src/authoring/design-time-settle.ts +343 -0
- package/src/authoring/edit-mode-authoring.ts +619 -0
- package/src/authoring/eyedropper-session.ts +60 -0
- package/src/authoring/instance-source-menu-register.ts +13 -0
- package/src/authoring/instance-source-menu.ts +135 -0
- package/src/authoring/layered-pick.ts +183 -0
- package/src/authoring/live-gesture-lock.ts +50 -0
- package/src/authoring/live-object-transform.ts +62 -0
- package/src/authoring/mount-failure-report.ts +154 -0
- package/src/authoring/mounted-root-subjects.ts +144 -0
- package/src/authoring/no-authoring-adapter.ts +55 -0
- package/src/authoring/null-inspection-subjects.tsx +75 -0
- package/src/authoring/object3d-document-persistence.ts +106 -0
- package/src/authoring/object3d-document-session-registry.ts +120 -0
- package/src/authoring/object3d-document-session.ts +1326 -0
- package/src/authoring/object3d-gesture-controller.ts +113 -0
- package/src/authoring/panel-authoring.ts +121 -0
- package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
- package/src/authoring/prefab-instance-section-model.ts +55 -0
- package/src/authoring/project-authoring-session.ts +105 -0
- package/src/authoring/provenance.ts +99 -0
- package/src/authoring/quarks-particle-systems.ts +19 -0
- package/src/authoring/react-canvas-navigation.ts +255 -0
- package/src/authoring/react-design-canvas-style.ts +20 -0
- package/src/authoring/react-story-board.ts +937 -0
- package/src/authoring/selection-scope.ts +195 -0
- package/src/authoring/shell-document-ops.ts +169 -0
- package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
- package/src/authoring/shell-viewport-policy.ts +48 -0
- package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
- package/src/authoring/stories-scope.ts +35 -0
- package/src/authoring/story-board-chrome-fit.ts +107 -0
- package/src/authoring/story-board-presentation.ts +111 -0
- package/src/authoring/three-projection-core.ts +226 -0
- package/src/authoring/viewport-pick-context.ts +40 -0
- package/src/authoring/viewport-raycast.ts +240 -0
- package/src/authoring/viewport-tool-context.ts +73 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +152 -0
- package/src/authoring/world-pan-state.ts +198 -0
- package/src/authoring/world-session-state.ts +101 -0
- package/src/authoring/write-pipe.ts +173 -0
- package/src/availability-tick.ts +66 -0
- package/src/bitmap-label.ts +120 -0
- package/src/blender-tab-metrics.ts +161 -0
- package/src/board-open-actions.ts +20 -0
- package/src/boot-routing.ts +391 -0
- package/src/build-identity.ts +15 -0
- package/src/bytes-codec.ts +62 -0
- package/src/camera-authoring.ts +175 -0
- package/src/cancellation-reason.ts +58 -0
- package/src/canvas-preview-frames.ts +482 -0
- package/src/capture-camera-pose.ts +77 -0
- package/src/chrome-registry.ts +159 -0
- package/src/chrome-slot-registry.ts +91 -0
- package/src/collaboration-client.ts +264 -0
- package/src/collaboration-presence.ts +41 -0
- package/src/command-dispatch.ts +19 -0
- package/src/command-listener.ts +2743 -0
- package/src/command-registry.ts +70 -0
- package/src/component-board-registry.ts +205 -0
- package/src/component-states-registry.ts +200 -0
- package/src/components/AgentPresentationNotice.tsx +75 -0
- package/src/components/AlignToolbar.tsx +204 -0
- package/src/components/AppRoot.tsx +394 -0
- package/src/components/ApplicationMenus.tsx +415 -0
- package/src/components/AssetBrowser.tsx +2843 -0
- package/src/components/AssetEditorShell.tsx +216 -0
- package/src/components/AssetInspectorToolSection.tsx +124 -0
- package/src/components/BoardRulers.tsx +354 -0
- package/src/components/CameraInfo.tsx +81 -0
- package/src/components/CanvasSceneViewport.tsx +556 -0
- package/src/components/CapabilityCoverageSection.tsx +185 -0
- package/src/components/CenterDocuments.tsx +22 -0
- package/src/components/ChromeSlot.tsx +20 -0
- package/src/components/CodeView.tsx +470 -0
- package/src/components/CollaborationHeaderControl.css +74 -0
- package/src/components/CompactInspectorCard.tsx +190 -0
- package/src/components/CompactInspectorShell.tsx +39 -0
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +270 -0
- package/src/components/DefaultEditorLayout.tsx +106 -0
- package/src/components/DocumentHeaderStrip.tsx +96 -0
- package/src/components/DocumentShelfRail.tsx +45 -0
- package/src/components/DocumentThumbnail.tsx +345 -0
- package/src/components/EditorLeaseGuard.tsx +372 -0
- package/src/components/ErrorBanner.tsx +123 -0
- package/src/components/FolderPreviewTile.tsx +159 -0
- package/src/components/GameHierarchy.tsx +3842 -0
- package/src/components/GameplaySessionTimeline.tsx +295 -0
- package/src/components/InspectionProjection.tsx +968 -0
- package/src/components/Inspector.tsx +233 -0
- package/src/components/InspectorCanvasPreview.tsx +35 -0
- package/src/components/InspectorFieldsSection.tsx +290 -0
- package/src/components/InspectorObjectPreview.tsx +57 -0
- package/src/components/InspectorStoriesSection.tsx +92 -0
- package/src/components/InspectorToolSection.tsx +96 -0
- package/src/components/InspectorTransformSection.tsx +245 -0
- package/src/components/LightExplorerPanel.tsx +433 -0
- package/src/components/MediaProperties.tsx +145 -0
- package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
- package/src/components/Object3DDocumentToolbar.css +100 -0
- package/src/components/Object3DDocumentToolbar.tsx +454 -0
- package/src/components/Object3DDocumentViewport.tsx +58 -0
- package/src/components/ProjectHeader.css +617 -0
- package/src/components/ProjectHeader.tsx +328 -0
- package/src/components/ProjectLayout.tsx +249 -0
- package/src/components/ReactCanvasControls.tsx +284 -0
- package/src/components/RootSelectionOverlay.tsx +3162 -0
- package/src/components/RootTextEditor.tsx +79 -0
- package/src/components/SaveStatus.tsx +70 -0
- package/src/components/StageHost.tsx +1954 -0
- package/src/components/StageOverlays.tsx +21 -0
- package/src/components/StartupErrorScreen.tsx +76 -0
- package/src/components/StartupLoadingScreen.tsx +65 -0
- package/src/components/StatsOverlay.tsx +78 -0
- package/src/components/SurfaceStateOverlay.tsx +24 -0
- package/src/components/ToolContributionSurfaces.tsx +65 -0
- package/src/components/ToolHost.tsx +370 -0
- package/src/components/ToolObject3DPreview.tsx +39 -0
- package/src/components/Toolbar.tsx +595 -0
- package/src/components/TransientHint.tsx +44 -0
- package/src/components/TransportStrip.tsx +174 -0
- package/src/components/VersionControlSection.tsx +470 -0
- package/src/components/VgaiLogo.css +83 -0
- package/src/components/VgaiLogo.tsx +35 -0
- package/src/components/ViewportControlsHint.tsx +60 -0
- package/src/components/ViewportFurniture.tsx +401 -0
- package/src/components/ViewportOverlay.tsx +145 -0
- package/src/components/ViewportOverlaysMenu.tsx +153 -0
- package/src/components/ViewportShadingMenu.tsx +300 -0
- package/src/components/ViewportViewMenu.tsx +101 -0
- package/src/components/WorkspaceDocumentSurface.tsx +204 -0
- package/src/components/WorkspaceUtilitySurface.tsx +22 -0
- package/src/components/WorktreeSwitcher.css +239 -0
- package/src/components/WorktreeSwitcher.tsx +890 -0
- package/src/components/account-documents.tsx +1162 -0
- package/src/components/asset-documents.tsx +812 -0
- package/src/components/asset-editor-persistence.ts +216 -0
- package/src/components/asset-selection-section.tsx +535 -0
- package/src/components/asset-thumbnails.tsx +312 -0
- package/src/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
- package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
- package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
- package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
- package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
- package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
- package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
- package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
- package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
- package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
- package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
- package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/components/asset-viewers/shader-source.ts +144 -0
- package/src/components/asset-workflow.css +731 -0
- package/src/components/board-guides.ts +150 -0
- package/src/components/compact-inspector.css +539 -0
- package/src/components/core-utilities.tsx +90 -0
- package/src/components/editor-notifications.css +40 -0
- package/src/components/engine-workspace.css +274 -0
- package/src/components/inspector-preview-section.tsx +238 -0
- package/src/components/inspector-property-grouping.ts +64 -0
- package/src/components/inspector-revert-label.ts +20 -0
- package/src/components/inspector-selection.ts +42 -0
- package/src/components/inspector-stories-gating.ts +171 -0
- package/src/components/inspector-transform-subject.ts +11 -0
- package/src/components/inspector-transform.ts +75 -0
- package/src/components/kind-documents.tsx +500 -0
- package/src/components/palette-action-publisher.tsx +140 -0
- package/src/components/primitives/DraftColorInput.tsx +74 -0
- package/src/components/product-shell.css +1829 -0
- package/src/components/project-tool-documents.tsx +410 -0
- package/src/components/scene-documents.tsx +223 -0
- package/src/components/stage-keyboard.tsx +37 -0
- package/src/components/stage-overlay-set.tsx +107 -0
- package/src/components/stage-presence-markers.ts +478 -0
- package/src/components/standard-viewport-dressing.ts +417 -0
- package/src/components/status-contributions.tsx +403 -0
- package/src/components/tool-documents.tsx +309 -0
- package/src/components/tool-schema-form.tsx +262 -0
- package/src/components/use-after-paint.ts +41 -0
- package/src/components/use-project-image-assets.ts +86 -0
- package/src/components/viewport-header-controls.css +90 -0
- package/src/components/viewport-surface-status.tsx +55 -0
- package/src/components/workspace-history.ts +32 -0
- package/src/components/workspace-static-panel-registry.tsx +152 -0
- package/src/components/workspace-surfaces.css +621 -0
- package/src/components/world-documents.tsx +586 -0
- package/src/components/world-overlay-gestures.ts +1694 -0
- package/src/composite-screenshot.ts +1641 -0
- package/src/console-sync.ts +131 -0
- package/src/constraint-helper.ts +338 -0
- package/src/content-entry-source-registry.ts +184 -0
- package/src/coverage/authoring-seam-evidence.ts +300 -0
- package/src/coverage/canvas-reveal.ts +192 -0
- package/src/coverage/design-time-surfaces.ts +101 -0
- package/src/coverage/live-seam-evidence.ts +11 -0
- package/src/coverage/ontology-invariants.ts +466 -0
- package/src/coverage/session-vitals.ts +501 -0
- package/src/coverage/system-seam-evidence.ts +72 -0
- package/src/crash-null-boundary.ts +36 -0
- package/src/creation-site-edit.ts +1479 -0
- package/src/creation-site-registry.ts +160 -0
- package/src/delegate-harness-registry.ts +143 -0
- package/src/document-context-registry.ts +177 -0
- package/src/document-open-registry.ts +200 -0
- package/src/document-preview-source.ts +20 -0
- package/src/document-renderer-session.ts +138 -0
- package/src/editor-api.ts +46 -0
- package/src/editor-chrome-capture.ts +139 -0
- package/src/editor-commands.ts +164 -0
- package/src/editor-console.ts +563 -0
- package/src/editor-current-view.ts +82 -0
- package/src/editor-document-probe.ts +881 -0
- package/src/editor-git-client.ts +115 -0
- package/src/editor-host-door.ts +462 -0
- package/src/editor-hotkeys.ts +842 -0
- package/src/editor-lease-view.ts +39 -0
- package/src/editor-lease.ts +415 -0
- package/src/editor-mode.ts +19 -0
- package/src/editor-notifications.ts +140 -0
- package/src/editor-presence.ts +563 -0
- package/src/editor-presentation-activity.ts +50 -0
- package/src/editor-presentation-notice.ts +42 -0
- package/src/editor-runtime.tsx +145 -0
- package/src/editor-server-response.ts +86 -0
- package/src/editor-session-attribution.ts +75 -0
- package/src/editor-session-mode.ts +54 -0
- package/src/editor-shell-store.ts +1304 -0
- package/src/editor-state-facets.ts +74 -0
- package/src/editor-styles.css +33 -0
- package/src/editor-view-presentation.ts +810 -0
- package/src/editor-viewport.ts +5302 -0
- package/src/entity-lod.ts +31 -0
- package/src/entity-object.ts +91 -0
- package/src/files/file-provider.ts +62 -0
- package/src/files/project-files.ts +264 -0
- package/src/finders/index.ts +136 -0
- package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/frame/bridge.tsx +1408 -0
- package/src/frame/product.ts +77 -0
- package/src/gameplay-dom-recording.ts +319 -0
- package/src/gameplay-export-state.ts +14 -0
- package/src/gameplay-replay.ts +417 -0
- package/src/gameplay-session-time.ts +9 -0
- package/src/gameplay-sessions.ts +204 -0
- package/src/harness-chat-types.ts +253 -0
- package/src/hierarchy-component-marks.ts +298 -0
- package/src/hierarchy-drop.ts +91 -0
- package/src/hierarchy-expansion-state.ts +80 -0
- package/src/hierarchy-header-slot.ts +52 -0
- package/src/hierarchy-internals.ts +197 -0
- package/src/hierarchy-kind-icon.ts +217 -0
- package/src/hierarchy-mark-reader.ts +73 -0
- package/src/hierarchy-menu-registry.ts +67 -0
- package/src/hierarchy-node-rows.ts +307 -0
- package/src/hierarchy-panel-view.ts +280 -0
- package/src/hierarchy-projection.ts +76 -0
- package/src/hierarchy-row-cache.ts +243 -0
- package/src/hierarchy-row-model.ts +308 -0
- package/src/hierarchy-rows.ts +11 -0
- package/src/hierarchy-walk.ts +86 -0
- package/src/history/editor-session.ts +25 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-delegate.ts +163 -0
- package/src/history/history-limit-notices.ts +43 -0
- package/src/history/history-service.ts +1173 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +386 -0
- package/src/history/project-root-history-backends.ts +139 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +103 -0
- package/src/history/source-history-backend.ts +546 -0
- package/src/history/types.ts +124 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hotkeys.ts +188 -0
- package/src/inference-diagnostics.ts +69 -0
- package/src/initial-project.ts +80 -0
- package/src/inspection/active-subject.ts +578 -0
- package/src/inspection/active-surface.ts +142 -0
- package/src/inspection/compose.ts +1064 -0
- package/src/inspection/display.ts +170 -0
- package/src/inspection/document-subject.ts +109 -0
- package/src/inspection/game-subject.ts +85 -0
- package/src/inspection/model.ts +542 -0
- package/src/inspection/null-subject.ts +115 -0
- package/src/inspection/serialize.ts +357 -0
- package/src/inspection/use-active-inspection.ts +180 -0
- package/src/inspector-presentation.ts +201 -0
- package/src/inspector-section-registry.ts +221 -0
- package/src/instance-source-actions.ts +163 -0
- package/src/instanced-presentation.ts +164 -0
- package/src/js-heap.ts +71 -0
- package/src/key-actions.ts +91 -0
- package/src/keymap-presets.ts +401 -0
- package/src/layout-policy.ts +31 -0
- package/src/learn-links.ts +73 -0
- package/src/light-explorer-model.ts +134 -0
- package/src/live-canvas-frame.ts +55 -0
- package/src/live-document.ts +279 -0
- package/src/live-module-source.ts +230 -0
- package/src/live-session-registry.ts +220 -0
- package/src/live-transition.ts +633 -0
- package/src/manifest-project.ts +107 -0
- package/src/model-thumbnail.ts +523 -0
- package/src/native-selection-style.ts +202 -0
- package/src/object3d-document-write-policy.ts +137 -0
- package/src/packaged-runtime.ts +108 -0
- package/src/palettes/maya.palette.json +57 -0
- package/src/palettes/substance.palette.json +57 -0
- package/src/pasteboard-module.ts +81 -0
- package/src/performance-profiler.ts +367 -0
- package/src/performance-sources.ts +69 -0
- package/src/play-boot-phase.ts +145 -0
- package/src/presentation-surface.ts +248 -0
- package/src/project-adapter.ts +1143 -0
- package/src/project-asset-refresh.ts +26 -0
- package/src/project-declaration-refresh.ts +31 -0
- package/src/project-local-state.ts +118 -0
- package/src/project-manager.ts +243 -0
- package/src/project-module-changes.ts +163 -0
- package/src/project-module-split.ts +266 -0
- package/src/project-provenance.ts +115 -0
- package/src/project-ready.ts +42 -0
- package/src/project-session-reset.ts +67 -0
- package/src/project-shape.ts +68 -0
- package/src/project-tool-discovery.ts +66 -0
- package/src/project-tools.ts +107 -0
- package/src/project-work-types.ts +149 -0
- package/src/projection/three.ts +898 -0
- package/src/projection/types.ts +44 -0
- package/src/readiness.ts +113 -0
- package/src/reflection-probe-helper.ts +142 -0
- package/src/reported-play-state.ts +90 -0
- package/src/resolve-relative-specifier.ts +33 -0
- package/src/scene-document-plan.ts +315 -0
- package/src/scene-framing.ts +315 -0
- package/src/scene-live-open.ts +210 -0
- package/src/scene-view-fog.ts +89 -0
- package/src/scoped-game-css.ts +152 -0
- package/src/session-orphan-record.ts +193 -0
- package/src/session-tombstone.ts +126 -0
- package/src/settings/settings-provider.ts +82 -0
- package/src/settings-store.ts +345 -0
- package/src/shared-view-restore.ts +42 -0
- package/src/shell-store-door.ts +45 -0
- package/src/source-conflict.ts +122 -0
- package/src/spatial-handle-visuals.ts +332 -0
- package/src/stage-context.ts +341 -0
- package/src/stage-store-registry.ts +63 -0
- package/src/stale-chunk-recovery.ts +34 -0
- package/src/state-report-deferral.ts +73 -0
- package/src/storage/host-files-storage.ts +97 -0
- package/src/storage/http-storage.ts +174 -0
- package/src/storage/index.ts +75 -0
- package/src/storage/mem-storage.ts +149 -0
- package/src/storage/path-lock.ts +44 -0
- package/src/storage/paths.ts +26 -0
- package/src/storage/types.ts +116 -0
- package/src/stories/StoryComponentThumbnail.tsx +184 -0
- package/src/stories/StoryPreviewMount.tsx +306 -0
- package/src/stories/component-content-source.tsx +106 -0
- package/src/stories/component-states-source.ts +78 -0
- package/src/stories/compose-project-stories.ts +255 -0
- package/src/stories/pixi-story-model.ts +30 -0
- package/src/stories/prefabs-finder.ts +54 -0
- package/src/stories/prefabs-from-stories.ts +182 -0
- package/src/stories/project-story-discovery.ts +78 -0
- package/src/stories/project-story-regions.ts +24 -0
- package/src/stories/story-actions.ts +54 -0
- package/src/stories/story-capture-command.ts +124 -0
- package/src/stories/story-capture.ts +584 -0
- package/src/stories/story-declared-medium.ts +126 -0
- package/src/stories/story-discovery.ts +176 -0
- package/src/stories/story-document-openers.ts +36 -0
- package/src/stories/story-dom-runtime.ts +78 -0
- package/src/stories/story-grouping.ts +111 -0
- package/src/stories/story-lane.ts +88 -0
- package/src/stories/story-mount-turn.ts +27 -0
- package/src/stories/story-opener.ts +260 -0
- package/src/stories/story-pixi-preview.ts +408 -0
- package/src/stories/story-presentation.ts +215 -0
- package/src/stories/story-registry.ts +517 -0
- package/src/stories/story-three-preview.ts +807 -0
- package/src/stories/three-story-model.ts +96 -0
- package/src/story-three-preview-runtime.ts +56 -0
- package/src/surface-keyboard.ts +112 -0
- package/src/surface-state.ts +124 -0
- package/src/tab-bootstrap.js +628 -0
- package/src/tab-census.ts +198 -0
- package/src/tab-lifecycle-client.ts +196 -0
- package/src/theme-library.ts +844 -0
- package/src/theme-preference.ts +378 -0
- package/src/theme.css +3437 -0
- package/src/three-viewport/bone-selection-highlight.ts +119 -0
- package/src/three-viewport/camera-fit.ts +41 -0
- package/src/three-viewport/interactive-renderer.ts +132 -0
- package/src/three-viewport/selection-brackets.ts +310 -0
- package/src/three-viewport/selection-outline.ts +183 -0
- package/src/three-viewport/skeleton-helper.ts +61 -0
- package/src/three-viewport/source-color.ts +167 -0
- package/src/three-viewport/studio-environment.ts +96 -0
- package/src/three-viewport-presentation.ts +23 -0
- package/src/tool-contribution-play.ts +74 -0
- package/src/tool-loader.ts +1798 -0
- package/src/transform-mode-request.ts +57 -0
- package/src/transient-hint.ts +78 -0
- package/src/trigger-volume-helper.ts +116 -0
- package/src/ui-source/adapter-region-includes.ts +241 -0
- package/src/ui-source/ensure-import.ts +132 -0
- package/src/ui-source/file-region-resolver.ts +302 -0
- package/src/ui-source/inspect.ts +775 -0
- package/src/ui-source/oid-transform.ts +1845 -0
- package/src/ui-source/plan-csf-story.ts +196 -0
- package/src/ui-source/plan-extract-component.ts +421 -0
- package/src/ui-source/plan-fork-component.ts +621 -0
- package/src/ui-source/plan-named-style.ts +95 -0
- package/src/ui-source/plan-source-edit.ts +353 -0
- package/src/ui-source/r3f-contract-resolver.ts +327 -0
- package/src/ui-source/r3f-diagnostic-index.ts +165 -0
- package/src/ui-source/r3f-environment-binding.ts +133 -0
- package/src/ui-source/r3f-joint-binding.ts +251 -0
- package/src/ui-source/r3f-lod-binding.ts +91 -0
- package/src/ui-source/r3f-particle-binding.ts +235 -0
- package/src/ui-source/r3f-physics-binding.ts +483 -0
- package/src/ui-source/r3f-project-contracts.ts +444 -0
- package/src/ui-source/relative-import-specifier.ts +34 -0
- package/src/ui-source/reparent-guard.ts +544 -0
- package/src/ui-source/source-edit-request.ts +97 -0
- package/src/ui-source/source-write-backend.ts +618 -0
- package/src/ui-source/syntactic-prop-specs.ts +296 -0
- package/src/ui-source/tier-source-write-backend.ts +279 -0
- package/src/ui-source/ts-ast.ts +171 -0
- package/src/ui-source/utility-class-support.ts +169 -0
- package/src/ui-source/write-component-default.ts +133 -0
- package/src/ui-source/writer.ts +1989 -0
- package/src/viewport-activation-timings.ts +840 -0
- package/src/viewport-authoring-policy.ts +186 -0
- package/src/viewport-controls-hint.ts +57 -0
- package/src/viewport-door.ts +237 -0
- package/src/viewport-shading-boundary.ts +12 -0
- package/src/vite-error-surface.ts +141 -0
- package/src/wait-until.ts +37 -0
- package/src/workspace-areas.ts +156 -0
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-available-documents.ts +127 -0
- package/src/workspace-core-utilities.ts +31 -0
- package/src/workspace-document-ids.ts +59 -0
- package/src/workspace-document-registry.ts +612 -0
- package/src/workspace-document-restore.ts +145 -0
- package/src/workspace-host-commands.ts +141 -0
- package/src/workspace-persistence-gate.ts +40 -0
- package/src/workspace-play-utilities.ts +44 -0
- package/src/workspace-presets.ts +425 -0
- package/src/workspace-regions.ts +294 -0
- package/src/workspace-state-persistence.ts +536 -0
- package/src/workspace-static-panels.ts +73 -0
- package/src/workspace-status-registry.ts +121 -0
- package/src/workspace-style.ts +239 -0
- package/src/workspace-utility-commands.ts +74 -0
- package/src/workspace-utility-registry.ts +263 -0
- package/src/workspace-viewport-rect.ts +97 -0
- package/src/world-adoption.ts +115 -0
- package/src/world-document-routing.ts +104 -0
- package/vite-plugin-creation-site-write.ts +184 -0
- package/vite-plugin-creation-site.ts +80 -0
- package/vite-plugin-game-static.ts +303 -0
- package/vite-plugin-module-doorways.ts +336 -0
- package/vite-plugin-product-contributions.ts +197 -0
- package/vite-plugin-project-game-static.ts +125 -0
- package/vite-plugin-project-jsx-js.ts +65 -0
- package/vite-plugin-project-root-absolute-assets.ts +359 -0
- package/vite-plugin-shared-react.ts +420 -0
- package/vite-plugin-shared-three.ts +203 -0
- package/vite-plugin-ui-oid.ts +2106 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `vgai-creation-site` serve-time transform — the source half of
|
|
3
|
+
* the creation-site index.
|
|
4
|
+
*
|
|
5
|
+
* WHAT IT DOES. Every direct `new <Ctor>(…)` expression, plus every call used
|
|
6
|
+
* directly as a variable/property initializer, in a served PROJECT module is
|
|
7
|
+
* wrapped in a recorder call that hands the constructed object, plus
|
|
8
|
+
* this file's path and the expression's `line:col`, to a host-side registry and
|
|
9
|
+
* returns the object UNCHANGED:
|
|
10
|
+
*
|
|
11
|
+
* const t = new Tile(x, y);
|
|
12
|
+
* // becomes
|
|
13
|
+
* const t = (__vgaiCS$(new Tile(x, y), 59, 17));
|
|
14
|
+
*
|
|
15
|
+
* Initializer calls are the factory-construction lane (`const box =
|
|
16
|
+
* MeshBuilder.CreateBox(...)`). The syntactic declaration is the evidence: no
|
|
17
|
+
* library name or factory signature is guessed, and primitive returns are
|
|
18
|
+
* ignored by the recorder. That is what lets the editor answer "which line of the game's own source
|
|
19
|
+
* created this object?" for a selected `Object3D` — the thing that makes
|
|
20
|
+
* editing SimCity mean editing SimCity's files.
|
|
21
|
+
*
|
|
22
|
+
* WHY WRAPPING, NOT REWRITING. The whole `NewExpression` is left byte-identical
|
|
23
|
+
* inside the wrapper call, so the transform is semantics-preserving by
|
|
24
|
+
* construction rather than by argument:
|
|
25
|
+
* - EVALUATION ORDER — the wrapper's single argument IS the original
|
|
26
|
+
* expression, so callee and arguments evaluate exactly when they did.
|
|
27
|
+
* Nesting composes: `new A(new B())` becomes
|
|
28
|
+
* `(__vgaiCS$(new A((__vgaiCS$(new B(),…))),…))`, and B is still
|
|
29
|
+
* constructed before A.
|
|
30
|
+
* - `new.target` — untouched: the real `new` is still a real `new`, with the
|
|
31
|
+
* same callee expression.
|
|
32
|
+
* - CONSTRUCTOR RETURN VALUES — a constructor that returns an object returns
|
|
33
|
+
* it; the recorder is an identity function on its first argument.
|
|
34
|
+
* - EXOTIC CALLEES — `new (getCtor())()`, `new a.b.C()`, `new Foo` (no
|
|
35
|
+
* parens), `new Foo<T>()`, `new Foo()!` all wrap safely, because we never
|
|
36
|
+
* look at or rewrite the callee.
|
|
37
|
+
* WHAT WRAPPING DOES NOT GIVE YOU FOR FREE — two re-association hazards, both
|
|
38
|
+
* about the OPENING paren, both closed explicitly:
|
|
39
|
+
* 1. a `new` used as another `new`'s callee (`new new Foo()()`), where a bare
|
|
40
|
+
* call would re-associate the outer `new`. The wrapper is always
|
|
41
|
+
* parenthesized, so `new (__vgaiCS$(new Foo(),…))()` parses as it did.
|
|
42
|
+
* 2. a STATEMENT-INITIAL `new` after an ASI-terminated line, where a leading
|
|
43
|
+
* `(` is the call operator and swallows the previous statement's value.
|
|
44
|
+
* {@link startsAStatementInAList} decides where a `;` must precede the
|
|
45
|
+
* paren; its doc comment carries the repro and why the guard is scoped the
|
|
46
|
+
* way it is. This case is a real MISCOMPILE, not a theoretical one — it
|
|
47
|
+
* is why the second bullet exists rather than a claim that wrapping is
|
|
48
|
+
* unconditionally safe.
|
|
49
|
+
*
|
|
50
|
+
* PARSE-TIME POSITIONS, NOT RUNTIME ONES. The plugin registers with
|
|
51
|
+
* `enforce: 'pre'`, so this runs on the file as it sits on disk — before the
|
|
52
|
+
* game-globals prelude prepends its line and before esbuild transpiles TS. The
|
|
53
|
+
* recorded `line:col` therefore points at the author's own source, and nothing
|
|
54
|
+
* downstream can shift it: the numbers are baked into the emitted call as
|
|
55
|
+
* literals.
|
|
56
|
+
*
|
|
57
|
+
* IDEMPOTENT, and it takes TWO checks rather than one. {@link
|
|
58
|
+
* CREATION_SITE_MARKER} is emitted in the prologue and checked on entry, which
|
|
59
|
+
* covers a double registration inside one pipeline (the repo-root config and
|
|
60
|
+
* `server/dev.ts` both register this plugin in dev, exactly as they both
|
|
61
|
+
* register the game-globals shadow). It does NOT cover the case where the two
|
|
62
|
+
* passes are separated by esbuild, because esbuild DROPS the comment: the
|
|
63
|
+
* second pass then sees a module with no marker and prepends a second
|
|
64
|
+
* `function __vgaiCS$`, which is a `SyntaxError: Identifier '__vgaiCS$' has
|
|
65
|
+
* already been declared` — the module never evaluates and the mount dies with
|
|
66
|
+
* an error that names nothing about creation sites.
|
|
67
|
+
*
|
|
68
|
+
* That is not hypothetical and not rare: it fires for any module holding a
|
|
69
|
+
* `new` expression whose file is inside BOTH root sets, which is exactly what
|
|
70
|
+
* an in-tree ingest fixture folder becomes the moment someone OPENS it as a
|
|
71
|
+
* project (`ingestGameShadowRoots` already covers it; `dev.ts` adds the opened
|
|
72
|
+
* project root on top). Measured on the racing-game ingest's contract shim.
|
|
73
|
+
* So {@link CREATION_SITE_RECORDER} — an identifier, which no minifier or
|
|
74
|
+
* transpiler may remove — is checked too.
|
|
75
|
+
*/
|
|
76
|
+
import ts from 'typescript';
|
|
77
|
+
|
|
78
|
+
/** Emitted in the prologue; its presence means "already transformed". */
|
|
79
|
+
export const CREATION_SITE_MARKER = '/*@vgai-creation-site*/';
|
|
80
|
+
|
|
81
|
+
/** The per-module recorder identifier. Deliberately unlovely — it is a lexical
|
|
82
|
+
* declaration in the game's own module scope, and must not collide. */
|
|
83
|
+
export const CREATION_SITE_RECORDER = '__vgaiCS$';
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The global the recorder calls through, installed by the editor page
|
|
87
|
+
* (`creation-site-registry.ts`). Read LAZILY inside the recorder — a module may
|
|
88
|
+
* evaluate before the editor has installed it, and a missing global must
|
|
89
|
+
* degrade to a plain identity function, never throw.
|
|
90
|
+
*/
|
|
91
|
+
export const CREATION_SITE_GLOBAL = '__vgaiRecordCreationSite';
|
|
92
|
+
|
|
93
|
+
export interface CreationSiteTransformResult {
|
|
94
|
+
code: string;
|
|
95
|
+
/** How many `new` expressions were stamped — the unit tests' shape assertion
|
|
96
|
+
* and the plugin's "did anything change" check. */
|
|
97
|
+
sites: number;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** One stamped `new` expression, in the ORIGINAL file's coordinates. */
|
|
101
|
+
interface SiteRange {
|
|
102
|
+
start: number;
|
|
103
|
+
end: number;
|
|
104
|
+
/** 1-based, matching every editor-facing `file:line` we already print. */
|
|
105
|
+
line: number;
|
|
106
|
+
/** 0-based character offset, matching `OidEntry.col`. */
|
|
107
|
+
col: number;
|
|
108
|
+
/** See {@link startsAStatementInAList} — emit `;(` rather than `(`. */
|
|
109
|
+
needsAsiGuard: boolean;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* True when this `new` is the LEFTMOST TOKEN of an `ExpressionStatement` that
|
|
114
|
+
* sits in a statement LIST — and therefore when the wrapper's opening paren
|
|
115
|
+
* must be preceded by a `;`.
|
|
116
|
+
*
|
|
117
|
+
* THE HAZARD (found in review of the first cut of this file, which emitted a
|
|
118
|
+
* bare `(` everywhere). A bare paren at the start of a statement is not inert:
|
|
119
|
+
* it is the call-expression operator, and JS decides statement boundaries by
|
|
120
|
+
* ASI, which does NOT insert a semicolon before a token that can continue the
|
|
121
|
+
* previous expression. So semicolon-less code
|
|
122
|
+
*
|
|
123
|
+
* let a = foo()
|
|
124
|
+
* new Bar()
|
|
125
|
+
*
|
|
126
|
+
* became `let a = foo()(…new Bar()…)` — the previous line's VALUE gets called
|
|
127
|
+
* with the construction as its argument. Silently wrong when `foo()` returns a
|
|
128
|
+
* function; a `TypeError` at module evaluation (a bricked mount) when it
|
|
129
|
+
* doesn't. Statement-initial `new` in semicolon-less style is ordinary JS
|
|
130
|
+
* (`new Audio(src).play()`, side-effect constructors), and this transform runs
|
|
131
|
+
* over every opened project's roots — SimCity missed it only because
|
|
132
|
+
* micropolisJS is semicolon-terminated throughout.
|
|
133
|
+
*
|
|
134
|
+
* WHY THE `;` IS BOTH SUFFICIENT AND SAFE HERE. In a statement-list position an
|
|
135
|
+
* extra `;` is an empty statement: legal everywhere a statement is, and a no-op.
|
|
136
|
+
* It is emitted unconditionally rather than only after an ASI boundary, because
|
|
137
|
+
* "was a semicolon already there?" is a lexical question this AST walk should
|
|
138
|
+
* not be answering — `;;(…)` is exactly as correct as `;(…)`.
|
|
139
|
+
*
|
|
140
|
+
* WHY IT MUST NOT BE EMITTED ELSEWHERE. For a DEPENDENT single-statement body
|
|
141
|
+
* the `;` would BECOME that body: `if (x) new Foo()` → `if (x) ;(…)` runs the
|
|
142
|
+
* construction unconditionally, and `for (…) new Foo()` → `for (…) ;(…)` runs
|
|
143
|
+
* it once instead of per iteration. Those positions need no guard anyway — the
|
|
144
|
+
* token before the body is the `)` of the head (or `else`/`do`/a label), none
|
|
145
|
+
* of which a `(` can continue into a call. Hence the parent test rather than a
|
|
146
|
+
* blanket `;`.
|
|
147
|
+
*
|
|
148
|
+
* Only the LEFTMOST token matters: `foo(new Bar())` puts our paren after the
|
|
149
|
+
* call's own `(`, and `!new Bar()` / `+new Bar()` keep their unary operator
|
|
150
|
+
* first, so in every one of those the ASI verdict is whatever it already was.
|
|
151
|
+
*/
|
|
152
|
+
function startsAStatementInAList(node: ts.Expression, sourceFile: ts.SourceFile): boolean {
|
|
153
|
+
const start = node.getStart(sourceFile);
|
|
154
|
+
let current: ts.Node = node;
|
|
155
|
+
// Climb while the ancestor still BEGINS at this `new` — the moment one
|
|
156
|
+
// starts earlier, this expression is not the statement's first token.
|
|
157
|
+
while (current.parent && current.parent.getStart(sourceFile) === start) {
|
|
158
|
+
current = current.parent;
|
|
159
|
+
if (ts.isExpressionStatement(current)) {
|
|
160
|
+
const parent = current.parent;
|
|
161
|
+
return (
|
|
162
|
+
!!parent &&
|
|
163
|
+
(ts.isSourceFile(parent) ||
|
|
164
|
+
ts.isBlock(parent) ||
|
|
165
|
+
ts.isModuleBlock(parent) ||
|
|
166
|
+
ts.isCaseClause(parent) ||
|
|
167
|
+
ts.isDefaultClause(parent))
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function scriptKindFor(file: string): ts.ScriptKind {
|
|
175
|
+
if (file.endsWith('.tsx')) return ts.ScriptKind.TSX;
|
|
176
|
+
if (file.endsWith('.jsx')) return ts.ScriptKind.JSX;
|
|
177
|
+
if (file.endsWith('.ts')) return ts.ScriptKind.TS;
|
|
178
|
+
// A `.js` file in a project may still contain JSX (SimCity's does not, but
|
|
179
|
+
// vendored react games' `.js` sources do), and TS's JS parser accepts it.
|
|
180
|
+
return ts.ScriptKind.JS;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Stamp every direct `new` expression in `code`.
|
|
185
|
+
*
|
|
186
|
+
* `displayFile` is the path recorded for this module — project-root-RELATIVE,
|
|
187
|
+
* because that string is what the inspector shows and what `vgai eval` reads
|
|
188
|
+
* back; an absolute path would leak the host's directory layout into the
|
|
189
|
+
* product surface.
|
|
190
|
+
*
|
|
191
|
+
* Returns `null` when nothing was stamped (no `new` expressions, an already
|
|
192
|
+
* transformed module, or a declaration file) so the caller can hand Vite an
|
|
193
|
+
* untouched module rather than an identical copy.
|
|
194
|
+
*/
|
|
195
|
+
export function transformCreationSites(
|
|
196
|
+
code: string,
|
|
197
|
+
displayFile: string,
|
|
198
|
+
): CreationSiteTransformResult | null {
|
|
199
|
+
// Two idempotence checks, not one — see this module's header: the comment
|
|
200
|
+
// marker does not survive an esbuild pass between two transforms, the
|
|
201
|
+
// identifier does.
|
|
202
|
+
if (code.includes(CREATION_SITE_MARKER) || code.includes(CREATION_SITE_RECORDER)) return null;
|
|
203
|
+
if (displayFile.endsWith('.d.ts')) return null;
|
|
204
|
+
// Cheap bail before paying for a parse: neither construction syntax can be
|
|
205
|
+
// present without `new` or `(`. False positives only cost a parse; a false
|
|
206
|
+
// negative would lose a real site.
|
|
207
|
+
if (!code.includes('new') && !code.includes('(')) return null;
|
|
208
|
+
|
|
209
|
+
const sourceFile = ts.createSourceFile(
|
|
210
|
+
displayFile,
|
|
211
|
+
code,
|
|
212
|
+
ts.ScriptTarget.Latest,
|
|
213
|
+
/* setParentNodes */ true,
|
|
214
|
+
scriptKindFor(displayFile),
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
const sites: SiteRange[] = [];
|
|
218
|
+
const isFactoryInitializer = (node: ts.CallExpression): boolean => {
|
|
219
|
+
let current: ts.Expression = node;
|
|
220
|
+
while (
|
|
221
|
+
current.parent &&
|
|
222
|
+
(ts.isParenthesizedExpression(current.parent) ||
|
|
223
|
+
ts.isAsExpression(current.parent) ||
|
|
224
|
+
ts.isNonNullExpression(current.parent))
|
|
225
|
+
) {
|
|
226
|
+
current = current.parent;
|
|
227
|
+
}
|
|
228
|
+
const parent = current.parent;
|
|
229
|
+
return Boolean(
|
|
230
|
+
parent &&
|
|
231
|
+
((ts.isVariableDeclaration(parent) && parent.initializer === current) ||
|
|
232
|
+
(ts.isPropertyDeclaration(parent) && parent.initializer === current)),
|
|
233
|
+
);
|
|
234
|
+
};
|
|
235
|
+
const visit = (node: ts.Node): void => {
|
|
236
|
+
if (ts.isNewExpression(node) || (ts.isCallExpression(node) && isFactoryInitializer(node))) {
|
|
237
|
+
const start = node.getStart(sourceFile);
|
|
238
|
+
const { line, character } = ts.getLineAndCharacterOfPosition(sourceFile, start);
|
|
239
|
+
sites.push({
|
|
240
|
+
start,
|
|
241
|
+
end: node.getEnd(),
|
|
242
|
+
line: line + 1,
|
|
243
|
+
col: character,
|
|
244
|
+
needsAsiGuard: startsAStatementInAList(node, sourceFile),
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
ts.forEachChild(node, visit);
|
|
248
|
+
};
|
|
249
|
+
ts.forEachChild(sourceFile, visit);
|
|
250
|
+
if (sites.length === 0) return null;
|
|
251
|
+
|
|
252
|
+
// Pure INSERTIONS at expression boundaries — never a replacement — so nested
|
|
253
|
+
// `new` expressions (whose ranges properly contain one another) need no
|
|
254
|
+
// offset arithmetic at all. The only collision possible is two CLOSING marks
|
|
255
|
+
// at one offset (`new new A` ends both expressions at the same character);
|
|
256
|
+
// the inner one, which is the one with the LATER start, must close first.
|
|
257
|
+
const marks: Array<{ pos: number; rank: number; start: number; text: string }> = [];
|
|
258
|
+
for (const site of sites) {
|
|
259
|
+
marks.push({
|
|
260
|
+
pos: site.start,
|
|
261
|
+
rank: 1,
|
|
262
|
+
start: site.start,
|
|
263
|
+
text: `${site.needsAsiGuard ? ';' : ''}(${CREATION_SITE_RECORDER}(`,
|
|
264
|
+
});
|
|
265
|
+
marks.push({ pos: site.end, rank: 0, start: site.start, text: `,${site.line},${site.col}))` });
|
|
266
|
+
}
|
|
267
|
+
marks.sort((a, b) => a.pos - b.pos || a.rank - b.rank || b.start - a.start);
|
|
268
|
+
|
|
269
|
+
let out = '';
|
|
270
|
+
let cursor = 0;
|
|
271
|
+
for (const mark of marks) {
|
|
272
|
+
out += code.slice(cursor, mark.pos) + mark.text;
|
|
273
|
+
cursor = mark.pos;
|
|
274
|
+
}
|
|
275
|
+
out += code.slice(cursor);
|
|
276
|
+
|
|
277
|
+
return { code: creationSitePrologue(displayFile) + out, sites: sites.length };
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* The recorder declaration prepended to a stamped module.
|
|
282
|
+
*
|
|
283
|
+
* A hoisted FUNCTION DECLARATION, not a `const`: ESM `import` statements are
|
|
284
|
+
* hoisted above everything, and a stamped `new` can appear in an imported
|
|
285
|
+
* module's evaluation order before this line is reached textually — a function
|
|
286
|
+
* declaration is in scope for the whole module body regardless. (The
|
|
287
|
+
* game-globals prelude gets away with `const` because it only shadows names
|
|
288
|
+
* READ at call time.)
|
|
289
|
+
*
|
|
290
|
+
* The global lookup happens per call, so the recorder works whether the editor
|
|
291
|
+
* installed the registry before or after this module evaluated, and an
|
|
292
|
+
* uninstalled registry costs one property read and no behavior change.
|
|
293
|
+
*/
|
|
294
|
+
function creationSitePrologue(displayFile: string): string {
|
|
295
|
+
return (
|
|
296
|
+
`${CREATION_SITE_MARKER}function ${CREATION_SITE_RECORDER}(o,l,c){` +
|
|
297
|
+
`var r=globalThis.${CREATION_SITE_GLOBAL};` +
|
|
298
|
+
// `new` always yields an object, but a recorder that can throw would be a
|
|
299
|
+
// recorder that can break a pristine mount — so the guard is explicit.
|
|
300
|
+
`if(r&&o!==null&&(typeof o==='object'||typeof o==='function'))` +
|
|
301
|
+
`r(o,${JSON.stringify(displayFile)},l,c);` +
|
|
302
|
+
'return o;}\n'
|
|
303
|
+
);
|
|
304
|
+
}
|