@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,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitive mount-id propagation — the isolation half of multi-instance
|
|
3
|
+
* authoring (ARCHITECTURE-CORE §Observability, "N INSTANCES of one project").
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS, and the shortcut it replaces
|
|
6
|
+
* ---------------------------------------------
|
|
7
|
+
* `project-module-url.ts` stamps every ROOT ENTRY url with a mount epoch, and
|
|
8
|
+
* it is tempting to read that as isolation already solved: browser module
|
|
9
|
+
* identity is per-url, so two mounts at different epochs "obviously" have
|
|
10
|
+
* separate module graphs. That is FALSE, and
|
|
11
|
+
* `cross-root-module-identity.test.ts` is the measurement. The epoch rides the
|
|
12
|
+
* ENTRY only; Vite's import-analysis rewrites an entry's own imports to the
|
|
13
|
+
* bare resolved path (`/src/state.ts`, plus `?t=` when invalidated), which
|
|
14
|
+
* carries no epoch. Two entries mounted at different epochs therefore name ONE
|
|
15
|
+
* url for their shared dependency and the browser hands both the SAME
|
|
16
|
+
* instance — one `let snapshot` across both mounts.
|
|
17
|
+
*
|
|
18
|
+
* So the mount id has to PROPAGATE: a project module served under a mount id
|
|
19
|
+
* rewrites its own project-relative imports to carry that same id, and the
|
|
20
|
+
* whole subtree keys per instance.
|
|
21
|
+
*
|
|
22
|
+
* THE CONSTRAINT THAT DEFINES THE RULE: only PROJECT-OWNED modules duplicate
|
|
23
|
+
* -------------------------------------------------------------------------
|
|
24
|
+
* Duplicating everything would be catastrophic, not merely wasteful. The
|
|
25
|
+
* editor and an ingested game deliberately SHARE one `three` instance — that
|
|
26
|
+
* sharing IS the ingestion mechanism — and a second React instance breaks
|
|
27
|
+
* hooks outright (the packaged-runtime dual-React class this repo has already
|
|
28
|
+
* paid for twice). The shared heap is exactly why iframes were rejected for
|
|
29
|
+
* this feature; duplicating packages would reintroduce the same split without
|
|
30
|
+
* the second realm.
|
|
31
|
+
*
|
|
32
|
+
* Hence: rewrite RELATIVE (`./x`, `../x`) and ROOT-ABSOLUTE (`/src/x`)
|
|
33
|
+
* specifiers, which are project source. Never touch a BARE specifier
|
|
34
|
+
* (`three`, `react`, `@react-three/fiber`) — those stay one instance per page,
|
|
35
|
+
* shared by every mount, which is what makes N instances cheap rather than N
|
|
36
|
+
* copies of the engine.
|
|
37
|
+
*
|
|
38
|
+
* `import.meta.hot.accept('./dep', …)` NAMES A DEPENDENCY TOO
|
|
39
|
+
* ----------------------------------------------------------
|
|
40
|
+
* Measured live 2026-08-06 in a scaffolded project, editor running, play live:
|
|
41
|
+
* every write to `src/data/tuning.data.json` produced
|
|
42
|
+
* `[vite] (client) page reload …/tuning.data.json` and a real navigation,
|
|
43
|
+
* destroying the play session — even though the scaffold's `tuning.ts` carries
|
|
44
|
+
* `import.meta.hot?.accept('./tuning.data.json', (m) => tuning.hotSwap(…))`
|
|
45
|
+
* precisely so that edit hot-swaps into the running game instead.
|
|
46
|
+
*
|
|
47
|
+
* The module graph said why. `tuning.ts?vgai-mount=1` imported
|
|
48
|
+
* `tuning.data.json?vgai-mount=1` (its import specifier WAS stamped) while its
|
|
49
|
+
* `acceptedHmrDeps` held the BARE `tuning.data.json` — because the accept
|
|
50
|
+
* call's specifier is a string ARGUMENT, not an import statement, so the
|
|
51
|
+
* rewrite below never saw it. Two consequences, both bad:
|
|
52
|
+
*
|
|
53
|
+
* 1. resolving that bare specifier MINTS a third, importer-less module node
|
|
54
|
+
* for the file. Vite's `propagateUpdate` reaches it, finds
|
|
55
|
+
* `importers.size === 0`, and returns its "dead end" — which IS
|
|
56
|
+
* `full-reload`.
|
|
57
|
+
* 2. even with no reload the accept could never fire, because the node the
|
|
58
|
+
* importer accepts is not the node it imports.
|
|
59
|
+
*
|
|
60
|
+
* An accepted dep is a project-owned specifier in exactly the sense this
|
|
61
|
+
* module already defines, so it is stamped the same way. The scan mirrors
|
|
62
|
+
* Vite's own `lexAcceptedHmrDeps` (`.hot`, an optional `?.`, then `.accept`; a
|
|
63
|
+
* single string literal or an array of them; `.acceptExports` excluded because
|
|
64
|
+
* its arguments are EXPORT NAMES, not specifiers) so the specifier stamped
|
|
65
|
+
* here is exactly the one Vite will go on to resolve.
|
|
66
|
+
*
|
|
67
|
+
* This module is deliberately pure and side-effect free so it is unit-testable
|
|
68
|
+
* without booting Vite (the same split, and for the same reason, as
|
|
69
|
+
* `game-globals-shadow.ts`).
|
|
70
|
+
*/
|
|
71
|
+
import { init, parse } from 'es-module-lexer';
|
|
72
|
+
|
|
73
|
+
/** The query key a project entry url carries. Kept in sync with
|
|
74
|
+
* `src/project-module-url.ts`'s `PROJECT_MOUNT_QUERY` by
|
|
75
|
+
* `project-module-instance.test.ts`, which imports both and compares them —
|
|
76
|
+
* the server half cannot import the browser half's module without dragging
|
|
77
|
+
* DOM-typed code into `tsconfig.server.json`. */
|
|
78
|
+
export const MOUNT_QUERY_KEY = 'vgai-mount';
|
|
79
|
+
|
|
80
|
+
/** Kept in sync with `src/project-module-url.ts` by the same tripwire as
|
|
81
|
+
* {@link MOUNT_QUERY_KEY}. */
|
|
82
|
+
export const SELECTION_QUERY_KEY = 'vgai-selection';
|
|
83
|
+
export const SCENE_QUERY_KEY = 'vgai-scene';
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Isolation loads a SCREEN CLASS, not the running game. Vendor entries
|
|
87
|
+
* (`main.ts`) call `init()` at module scope — append the live canvas, go to
|
|
88
|
+
* Title. Importing TitleScreen pulls navigation → main → that boot, so Edit
|
|
89
|
+
* grew a live game on `document.body`. The isolate query keys a separate
|
|
90
|
+
* module graph whose `init();` is silenced; Play keeps the unstamped graph.
|
|
91
|
+
*/
|
|
92
|
+
export const ISOLATE_QUERY_KEY = 'vgai-isolate';
|
|
93
|
+
export const ISOLATE_QUERY_VALUE = '1';
|
|
94
|
+
|
|
95
|
+
/** Read a swap-slot remount off a module id, or `undefined` when it carries none. */
|
|
96
|
+
export function selectionOverrideOf(
|
|
97
|
+
moduleId: string,
|
|
98
|
+
): { readonly selection: string; readonly key: string } | undefined {
|
|
99
|
+
const query = moduleId.split('?')[1];
|
|
100
|
+
if (query === undefined) return undefined;
|
|
101
|
+
const params = new URLSearchParams(query);
|
|
102
|
+
const selection = params.get(SELECTION_QUERY_KEY);
|
|
103
|
+
const key = params.get(SCENE_QUERY_KEY);
|
|
104
|
+
if (!selection || !key) return undefined;
|
|
105
|
+
return { selection, key };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* A specifier that names PROJECT SOURCE rather than a package.
|
|
110
|
+
*
|
|
111
|
+
* Relative and root-absolute only. A bare specifier is a package and must stay
|
|
112
|
+
* shared (see this module's header) — as must Vite's own internal `/@id/`,
|
|
113
|
+
* `/@fs/` and `/@vite/` routes, which are not the project's modules even
|
|
114
|
+
* though they start with `/`.
|
|
115
|
+
*/
|
|
116
|
+
export function isProjectOwnedSpecifier(specifier: string): boolean {
|
|
117
|
+
if (specifier.startsWith('./') || specifier.startsWith('../')) return true;
|
|
118
|
+
if (!specifier.startsWith('/')) return false;
|
|
119
|
+
return !specifier.startsWith('/@');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Read the mount id off a module id/url, or `undefined` when it carries none. */
|
|
123
|
+
export function mountIdOf(moduleId: string): string | undefined {
|
|
124
|
+
const query = moduleId.split('?')[1];
|
|
125
|
+
if (query === undefined) return undefined;
|
|
126
|
+
return new URLSearchParams(query).get(MOUNT_QUERY_KEY) ?? undefined;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Append the mount id to one specifier, preserving any query it already has. */
|
|
130
|
+
export function withMountId(specifier: string, mountId: string): string {
|
|
131
|
+
return withQuery(specifier, MOUNT_QUERY_KEY, mountId);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** True when this module was imported as an isolation piece. */
|
|
135
|
+
export function isolateFlagOf(moduleId: string): boolean {
|
|
136
|
+
const query = moduleId.split('?')[1];
|
|
137
|
+
if (query === undefined) return false;
|
|
138
|
+
return new URLSearchParams(query).get(ISOLATE_QUERY_KEY) === ISOLATE_QUERY_VALUE;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Stamp one specifier so its isolated graph stays isolated. */
|
|
142
|
+
export function withIsolateFlag(specifier: string): string {
|
|
143
|
+
return withQuery(specifier, ISOLATE_QUERY_KEY, ISOLATE_QUERY_VALUE);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** A root-absolute import of vendored game source (`/vendor/games/<id>/…`). */
|
|
147
|
+
export function isVendorGameSpecifier(specifier: string): boolean {
|
|
148
|
+
return specifier.split('?')[0]!.startsWith('/vendor/games/');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* True when `file` is under a project root's own `src/` — prefabs, lib,
|
|
153
|
+
* stories. `entry.ts` / the shim live next to `src/` and must keep the
|
|
154
|
+
* unstamped vendor graph so Play still boots.
|
|
155
|
+
*/
|
|
156
|
+
export function isProjectSrcModule(file: string, roots: Iterable<string>): boolean {
|
|
157
|
+
const normalized = file.replace(/\\/g, '/').split('?')[0]!;
|
|
158
|
+
for (const root of roots) {
|
|
159
|
+
const src = `${root.replace(/\\/g, '/').replace(/\/$/, '')}/src/`;
|
|
160
|
+
if (normalized.startsWith(src)) return true;
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function withQuery(specifier: string, key: string, value: string): string {
|
|
166
|
+
const query = specifier.split('?')[1];
|
|
167
|
+
if (query !== undefined && new URLSearchParams(query).get(key) !== null) return specifier;
|
|
168
|
+
const separator = specifier.includes('?') ? '&' : '?';
|
|
169
|
+
return `${specifier}${separator}${key}=${value}`;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* A vendor game's boot is a module-scope `init();` (bubbo `main.ts`: append
|
|
174
|
+
* the canvas, `goToScreen(TitleScreen)`). Isolation imported the class
|
|
175
|
+
* through that graph and the live game appeared in Edit. Play still runs
|
|
176
|
+
* the unstamped module; this only rewrites the isolated copy.
|
|
177
|
+
*/
|
|
178
|
+
export function silenceIsolatedEntrypointBoot(code: string): string | null {
|
|
179
|
+
const pattern = /^[ \t]*init\(\);[ \t]*$/gm;
|
|
180
|
+
if (!pattern.test(code)) return null;
|
|
181
|
+
return code.replace(/^[ \t]*init\(\);[ \t]*$/gm, 'void 0;');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** A string-literal specifier found inside an `import.meta.hot.accept(` call,
|
|
185
|
+
* bounded by the quotes (so the quote characters themselves survive a splice). */
|
|
186
|
+
interface AcceptedDepSpecifier {
|
|
187
|
+
readonly start: number;
|
|
188
|
+
readonly end: number;
|
|
189
|
+
readonly specifier: string;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* The string-literal dependencies of the `import.meta.hot.accept(` call whose
|
|
194
|
+
* `(` sits at `openParen` — a faithful subset of Vite's `lexAcceptedHmrDeps`:
|
|
195
|
+
* one bare string literal, or an array of them, and nothing else.
|
|
196
|
+
*
|
|
197
|
+
* Deliberately NEVER throws. Vite lexes the same call moments later and owns
|
|
198
|
+
* reporting a malformed one; a transform that threw here would turn a bad
|
|
199
|
+
* `accept()` into a dead dev server. Anything unrecognized (a callback, an
|
|
200
|
+
* interpolated template, an identifier) simply ends the scan, leaving whatever
|
|
201
|
+
* was already read — the same "unprovable specifiers fall back to the shared
|
|
202
|
+
* instance" degrade the header describes for computed imports.
|
|
203
|
+
*/
|
|
204
|
+
function acceptedDepSpecifiers(code: string, openParen: number): AcceptedDepSpecifier[] {
|
|
205
|
+
const deps: AcceptedDepSpecifier[] = [];
|
|
206
|
+
let inArray = false;
|
|
207
|
+
let i = openParen + 1;
|
|
208
|
+
while (i < code.length) {
|
|
209
|
+
const char = code[i]!;
|
|
210
|
+
// Whitespace, the array's `[`, and its separators are the only things that
|
|
211
|
+
// may sit BETWEEN literals. Anything else (a callback, an identifier, `]`)
|
|
212
|
+
// ends the dep list.
|
|
213
|
+
if (
|
|
214
|
+
/\s/.test(char) ||
|
|
215
|
+
(char === '[' && !inArray && deps.length === 0) ||
|
|
216
|
+
(inArray && char === ',')
|
|
217
|
+
) {
|
|
218
|
+
inArray ||= char === '[';
|
|
219
|
+
i++;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (char !== "'" && char !== '"' && char !== '`') return deps;
|
|
223
|
+
const end = closingQuote(code, i);
|
|
224
|
+
if (end === undefined) return deps; // unterminated or interpolated — Vite's to report
|
|
225
|
+
deps.push({ start: i + 1, end, specifier: code.slice(i + 1, end) });
|
|
226
|
+
// The single-literal form takes exactly one dep; the rest is the callback.
|
|
227
|
+
if (!inArray) return deps;
|
|
228
|
+
i = end + 1;
|
|
229
|
+
}
|
|
230
|
+
return deps;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** Index of the quote closing the literal opened at `open`, or `undefined` when
|
|
234
|
+
* the literal is unterminated or interpolates (`${…}`) and so names no static
|
|
235
|
+
* specifier. Escapes are not handled, matching Vite's own lexer. */
|
|
236
|
+
function closingQuote(code: string, open: number): number | undefined {
|
|
237
|
+
const quote = code[open];
|
|
238
|
+
for (let i = open + 1; i < code.length; i++) {
|
|
239
|
+
if (code[i] === quote) return i;
|
|
240
|
+
if (quote === '`' && code[i] === '$' && code[i + 1] === '{') return undefined;
|
|
241
|
+
}
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Where the string-literal deps of an `import.meta.hot.accept(` call start, for
|
|
247
|
+
* the `import.meta` occurrence the lexer reported at `[start, end)` — or
|
|
248
|
+
* `undefined` when this occurrence is not such a call.
|
|
249
|
+
*
|
|
250
|
+
* Character-for-character Vite's own test in `vite:import-analysis`, including
|
|
251
|
+
* the optional `?.` after `.hot` (the scaffold's own `import.meta.hot?.accept`
|
|
252
|
+
* spelling) and the `.acceptExports` exclusion.
|
|
253
|
+
*/
|
|
254
|
+
function acceptCallOpenParen(code: string, end: number): number | undefined {
|
|
255
|
+
if (code.slice(end, end + 4) !== '.hot') return undefined;
|
|
256
|
+
const afterHot = end + 4 + (code[end + 4] === '?' ? 1 : 0);
|
|
257
|
+
if (code.slice(afterHot, afterHot + 7) !== '.accept') return undefined;
|
|
258
|
+
if (code.slice(afterHot, afterHot + 14) === '.acceptExports') return undefined;
|
|
259
|
+
const open = code.indexOf('(', afterHot + 7);
|
|
260
|
+
return open === -1 ? undefined : open;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/** One splice into the source: `[start, end)` replaced by `text`. */
|
|
264
|
+
interface SpecifierEdit {
|
|
265
|
+
readonly start: number;
|
|
266
|
+
readonly end: number;
|
|
267
|
+
readonly text: string;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* The edits that stamp `mountId` onto the project-owned deps of the
|
|
272
|
+
* `import.meta` occurrence the lexer reported at `[start, end)`. Empty for
|
|
273
|
+
* every other `import.meta` use (`.env`, `.url`, a self-accept, `.dispose`).
|
|
274
|
+
*/
|
|
275
|
+
function acceptedDepEdits(
|
|
276
|
+
code: string,
|
|
277
|
+
start: number,
|
|
278
|
+
end: number,
|
|
279
|
+
stamp: (specifier: string) => string,
|
|
280
|
+
): SpecifierEdit[] {
|
|
281
|
+
if (code.slice(start, end) !== 'import.meta') return [];
|
|
282
|
+
const open = acceptCallOpenParen(code, end);
|
|
283
|
+
if (open === undefined) return [];
|
|
284
|
+
const edits: SpecifierEdit[] = [];
|
|
285
|
+
for (const dep of acceptedDepSpecifiers(code, open)) {
|
|
286
|
+
if (!isProjectOwnedSpecifier(dep.specifier)) continue;
|
|
287
|
+
const rewritten = stamp(dep.specifier);
|
|
288
|
+
if (rewritten === dep.specifier) continue;
|
|
289
|
+
// Bounds exclude the quotes, so the source's own quoting survives.
|
|
290
|
+
edits.push({ start: dep.start, end: dep.end, text: rewritten });
|
|
291
|
+
}
|
|
292
|
+
return edits;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Rewrite every project-owned import specifier in `code` to carry `mountId`.
|
|
297
|
+
* Returns `null` when nothing changed, which is the Vite `transform` contract
|
|
298
|
+
* for "not mine" and keeps the module's identity untouched.
|
|
299
|
+
*
|
|
300
|
+
* Uses `es-module-lexer` — Vite's own import scanner — rather than a regex, so
|
|
301
|
+
* a specifier inside a string literal or a comment is not mistaken for an
|
|
302
|
+
* import. Dynamic `import()` is included when its argument is a static string
|
|
303
|
+
* (the lexer reports the others without usable bounds, and a computed
|
|
304
|
+
* specifier cannot be rewritten at build time anyway; those fall back to the
|
|
305
|
+
* shared instance, which is the honest degrade rather than a silent guess).
|
|
306
|
+
*
|
|
307
|
+
* Call `await init` before this — `initLexer()` below is the one-liner.
|
|
308
|
+
*/
|
|
309
|
+
export function rewriteProjectImportsForMount(code: string, mountId: string): string | null {
|
|
310
|
+
return rewriteProjectImports(code, (specifier) => withMountId(specifier, mountId));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** Same rewrite as the mount id, carrying the isolate flag through the vendor graph. */
|
|
314
|
+
export function rewriteProjectImportsForIsolate(code: string): string | null {
|
|
315
|
+
return rewriteProjectImports(code, withIsolateFlag);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Project `src/` reaching into `/vendor/games/` is a design-time piece, not
|
|
320
|
+
* the live mount. Stamp isolate here so prefabs do not write the query.
|
|
321
|
+
*/
|
|
322
|
+
export function rewriteVendorImportsForIsolate(code: string): string | null {
|
|
323
|
+
return rewriteProjectImports(code, (specifier) =>
|
|
324
|
+
isVendorGameSpecifier(specifier) ? withIsolateFlag(specifier) : specifier,
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function rewriteProjectImports(code: string, stamp: (specifier: string) => string): string | null {
|
|
329
|
+
const [imports] = parse(code);
|
|
330
|
+
// Right-to-left so each splice leaves earlier offsets valid.
|
|
331
|
+
const edits: SpecifierEdit[] = [];
|
|
332
|
+
for (const record of imports) {
|
|
333
|
+
if (record.n === undefined) {
|
|
334
|
+
// The lexer reports `import.meta` here too, and an
|
|
335
|
+
// `import.meta.hot.accept('./dep', …)` names a dependency exactly like an
|
|
336
|
+
// import statement does — see this module's header for the page reload
|
|
337
|
+
// that not stamping it caused.
|
|
338
|
+
edits.push(...acceptedDepEdits(code, record.s, record.e, stamp));
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
if (!isProjectOwnedSpecifier(record.n)) continue;
|
|
342
|
+
const rewritten = stamp(record.n);
|
|
343
|
+
if (rewritten === record.n) continue;
|
|
344
|
+
// The two import forms bound their specifier DIFFERENTLY, and getting this
|
|
345
|
+
// wrong is silent syntax corruption rather than a missed rewrite: for a
|
|
346
|
+
// STATIC import `s..e` excludes the quotes, while for a DYNAMIC one
|
|
347
|
+
// (`d > -1`) it spans the whole argument expression INCLUDING them. Writing
|
|
348
|
+
// the bare specifier over a dynamic import's bounds yields
|
|
349
|
+
// `import(./state?vgai-mount=3)`. Re-quote with the source's own quote
|
|
350
|
+
// character so the module's style survives too.
|
|
351
|
+
if (record.d > -1) {
|
|
352
|
+
const quote = code[record.s];
|
|
353
|
+
if (quote !== "'" && quote !== '"') continue; // not a plain string literal
|
|
354
|
+
edits.push({ start: record.s, end: record.e, text: `${quote}${rewritten}${quote}` });
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
edits.push({ start: record.s, end: record.e, text: rewritten });
|
|
358
|
+
}
|
|
359
|
+
if (edits.length === 0) return null;
|
|
360
|
+
let out = code;
|
|
361
|
+
// Sorted, then applied right-to-left, so every splice leaves the offsets of
|
|
362
|
+
// the edits still to come valid. Sorting is not decoration: accepted-dep
|
|
363
|
+
// offsets come from a scan AHEAD of their `import.meta` record, so record
|
|
364
|
+
// order alone no longer implies source order.
|
|
365
|
+
edits.sort((a, b) => a.start - b.start);
|
|
366
|
+
for (const edit of edits.reverse()) {
|
|
367
|
+
out = out.slice(0, edit.start) + edit.text + out.slice(edit.end);
|
|
368
|
+
}
|
|
369
|
+
return out;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/** `es-module-lexer` needs its wasm initialized once per process. */
|
|
373
|
+
export async function initLexer(): Promise<void> {
|
|
374
|
+
await init;
|
|
375
|
+
}
|