@fps-games/editor 0.2.1-beta.2 → 0.2.1-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +41 -41
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +16 -7
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/playable-babylon-rendering.d.ts +8 -7
- package/dist/playable-babylon-rendering.d.ts.map +1 -1
- package/dist/playable-babylon-rendering.js +77 -32
- package/dist/playable-babylon-rendering.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts +2 -0
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +7 -4
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-sdk.d.ts +1 -1
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js +1 -1
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +0 -1
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +13 -4
- package/dist/playable-standard-project.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
- package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
- package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
- package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
- package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
- package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
- package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
- package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
- package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
- package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +32 -8
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +24 -22
|
@@ -153,7 +153,7 @@ export interface EditorSceneRenderingPanelOptions {
|
|
|
153
153
|
export interface EditorSceneRenderingTextureAsset {
|
|
154
154
|
id: string;
|
|
155
155
|
label: string;
|
|
156
|
-
|
|
156
|
+
resource: PlayableResolvedAssetResource;
|
|
157
157
|
meta?: string;
|
|
158
158
|
usage?: 'material' | 'environment' | (string & {});
|
|
159
159
|
capabilities?: {
|
|
@@ -185,4 +185,5 @@ export interface EditorSceneRenderingProfileAuthoringHandlers {
|
|
|
185
185
|
summary: EditorSceneRenderingProfileSummary;
|
|
186
186
|
}) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
187
187
|
}
|
|
188
|
+
import type { PlayableResolvedAssetResource } from '@fps-games/playable-assets';
|
|
188
189
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rendering-profile/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rendering-profile/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rendering-profile/types.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAC","sourcesContent":["import type { EditorSceneRenderingProfile, EditorSceneRenderingProfileSummary } from '@fps-games/playable-rendering';\nexport * from '@fps-games/playable-rendering';\n\nexport type EditorSceneRenderingPropertyValueType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'enum'\n | 'asset'\n | 'color'\n | 'string-list'\n | 'unknown';\n\nexport type EditorSceneRenderingPropertyControlKind =\n | 'readonly'\n | 'string'\n | 'number'\n | 'boolean'\n | 'enum'\n | 'asset-picker-card'\n | 'color'\n | 'string-list';\n\nexport type EditorSceneRenderingPropertyCommitMode = 'live' | 'blur' | 'change' | 'immediate';\n\nexport type EditorSceneRenderingSystemKind =\n | 'environment'\n | 'rendering-group'\n | 'blob-shadow'\n | 'static-projected-shadow'\n | 'planar-shadow'\n | 'csm-shadow'\n | 'custom';\n\nexport type EditorSceneRenderingStatusTone = 'default' | 'success' | 'warning' | 'error';\n\nexport type EditorSceneRenderingPanelLanguage = 'zh' | 'en';\n\nexport type EditorSceneRenderingSectionLayout = 'cards' | 'list';\n\nexport interface EditorSceneRenderingProperty {\n path: string;\n label: string;\n valueType: EditorSceneRenderingPropertyValueType;\n control: EditorSceneRenderingPropertyControlKind;\n value: unknown;\n readOnly?: boolean;\n disabled?: boolean;\n disabledReason?: string;\n tooltip?: string;\n unit?: string;\n min?: number;\n max?: number;\n step?: number;\n options?: readonly EditorSceneRenderingPropertyEnumOption[];\n controlOptions?: Record<string, unknown>;\n placeholder?: string;\n commitMode?: EditorSceneRenderingPropertyCommitMode;\n tags?: readonly string[];\n actions?: readonly EditorSceneRenderingPanelAction[];\n}\n\nexport interface EditorSceneRenderingPropertyEnumOption {\n label: string;\n value: string | number | boolean;\n disabled?: boolean;\n}\n\nexport interface EditorSceneRenderingSystem {\n id: string;\n label: string;\n kind: EditorSceneRenderingSystemKind;\n group?: EditorSceneRenderingSystemGroup;\n active?: boolean;\n readOnly?: boolean;\n summary?: string;\n status?: string;\n details?: readonly EditorSceneRenderingSystemDetail[];\n progress?: EditorSceneRenderingProgress;\n collapsedByDefault?: boolean;\n properties: readonly EditorSceneRenderingProperty[];\n actions?: readonly EditorSceneRenderingPanelAction[];\n}\n\nexport interface EditorSceneRenderingSystemGroup {\n id: string;\n label: string;\n summary?: string;\n}\n\nexport interface EditorSceneRenderingSystemDetail {\n label: string;\n value: string;\n tone?: EditorSceneRenderingStatusTone;\n}\n\nexport interface EditorSceneRenderingProgress {\n label: string;\n value?: number;\n indeterminate?: boolean;\n}\n\nexport interface EditorSceneRenderingSection {\n id: string;\n title: string;\n summary?: string;\n collapsedByDefault?: boolean;\n systemsCollapsible?: boolean;\n layout?: EditorSceneRenderingSectionLayout;\n systems: EditorSceneRenderingSystem[];\n}\n\nexport interface EditorSceneRenderingPanelAction {\n id: string;\n label: string;\n icon?: 'undo' | 'save' | 'world' | 'status' | 'plus' | 'trash';\n disabled?: boolean;\n tooltip?: string;\n params?: Record<string, unknown>;\n}\n\nexport interface EditorSceneRenderingPanelState {\n title?: string;\n summary?: string;\n dirty?: boolean;\n status?: string;\n statusTone?: EditorSceneRenderingStatusTone;\n actions?: EditorSceneRenderingPanelAction[];\n sections: EditorSceneRenderingSection[];\n}\n\nexport type EditorSceneStaticShadowBakeLifecycleStatus =\n | 'disabled'\n | 'baking'\n | 'missing'\n | 'preview-unsaved'\n | 'up-to-date'\n | 'out-of-date'\n | 'invalid';\n\nexport interface EditorSceneStaticShadowBakeStats {\n phase?: 'collect' | 'reuse' | 'chunk' | 'sdf' | 'pack' | 'encode' | 'complete' | (string & {});\n sourceRootCount?: number;\n sourceMeshCount?: number;\n attemptedChunkCount?: number;\n chunkCount?: number;\n textureCount?: number;\n skippedChunkCount?: number;\n pageCount?: number;\n resolution?: number;\n chunkSize?: number;\n atlasSize?: number;\n atlasUsedPixels?: number;\n atlasAllocatedPixels?: number;\n atlasOccupancy?: number;\n texelsPerMeter?: number;\n effectiveTexelsPerMeter?: number;\n maxAtlasPages?: number;\n sdfRadiusPx?: number;\n spatialChunkSize?: number;\n effectiveSpatialChunkSize?: number;\n targetChunkCount?: number;\n bakedChunkCount?: number;\n reusedChunkCount?: number;\n durationMs?: number;\n currentChunkId?: string;\n}\n\nexport interface EditorSceneStaticShadowBakeLifecycleState {\n status: EditorSceneStaticShadowBakeLifecycleStatus;\n chunkCount?: number;\n reason?: string | null;\n generatedAt?: string | null;\n stats?: EditorSceneStaticShadowBakeStats | null;\n progress?: EditorSceneRenderingProgress | null;\n}\n\nexport interface EditorSceneRenderingPanelStateInput {\n dirty?: boolean;\n lastError?: string | null;\n staticShadowBake?: EditorSceneStaticShadowBakeLifecycleState | null;\n shadowMapExperiment?: EditorSceneShadowMapExperimentPanelState | null;\n}\n\nexport interface EditorSceneShadowMapExperimentPanelState {\n configured: boolean;\n enabled: boolean;\n qualityProfileId: string | null;\n qualityProfileIds: readonly string[];\n maps?: {\n staticResolution: number;\n dynamicResolution: number;\n compositeResolution: number;\n } | null;\n filter?: string | null;\n bias?: number | null;\n normalBias?: number | null;\n darkness?: number | null;\n}\n\nexport interface EditorSceneRenderingPanelOptions {\n language?: EditorSceneRenderingPanelLanguage;\n textureAssets?: readonly EditorSceneRenderingTextureAsset[];\n}\n\nexport interface EditorSceneRenderingTextureAsset {\n id: string;\n label: string;\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rendering-profile/types.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAC","sourcesContent":["import type { EditorSceneRenderingProfile, EditorSceneRenderingProfileSummary } from '@fps-games/playable-rendering';\nexport * from '@fps-games/playable-rendering';\n\nexport type EditorSceneRenderingPropertyValueType =\n | 'string'\n | 'number'\n | 'boolean'\n | 'enum'\n | 'asset'\n | 'color'\n | 'string-list'\n | 'unknown';\n\nexport type EditorSceneRenderingPropertyControlKind =\n | 'readonly'\n | 'string'\n | 'number'\n | 'boolean'\n | 'enum'\n | 'asset-picker-card'\n | 'color'\n | 'string-list';\n\nexport type EditorSceneRenderingPropertyCommitMode = 'live' | 'blur' | 'change' | 'immediate';\n\nexport type EditorSceneRenderingSystemKind =\n | 'environment'\n | 'rendering-group'\n | 'blob-shadow'\n | 'static-projected-shadow'\n | 'planar-shadow'\n | 'csm-shadow'\n | 'custom';\n\nexport type EditorSceneRenderingStatusTone = 'default' | 'success' | 'warning' | 'error';\n\nexport type EditorSceneRenderingPanelLanguage = 'zh' | 'en';\n\nexport type EditorSceneRenderingSectionLayout = 'cards' | 'list';\n\nexport interface EditorSceneRenderingProperty {\n path: string;\n label: string;\n valueType: EditorSceneRenderingPropertyValueType;\n control: EditorSceneRenderingPropertyControlKind;\n value: unknown;\n readOnly?: boolean;\n disabled?: boolean;\n disabledReason?: string;\n tooltip?: string;\n unit?: string;\n min?: number;\n max?: number;\n step?: number;\n options?: readonly EditorSceneRenderingPropertyEnumOption[];\n controlOptions?: Record<string, unknown>;\n placeholder?: string;\n commitMode?: EditorSceneRenderingPropertyCommitMode;\n tags?: readonly string[];\n actions?: readonly EditorSceneRenderingPanelAction[];\n}\n\nexport interface EditorSceneRenderingPropertyEnumOption {\n label: string;\n value: string | number | boolean;\n disabled?: boolean;\n}\n\nexport interface EditorSceneRenderingSystem {\n id: string;\n label: string;\n kind: EditorSceneRenderingSystemKind;\n group?: EditorSceneRenderingSystemGroup;\n active?: boolean;\n readOnly?: boolean;\n summary?: string;\n status?: string;\n details?: readonly EditorSceneRenderingSystemDetail[];\n progress?: EditorSceneRenderingProgress;\n collapsedByDefault?: boolean;\n properties: readonly EditorSceneRenderingProperty[];\n actions?: readonly EditorSceneRenderingPanelAction[];\n}\n\nexport interface EditorSceneRenderingSystemGroup {\n id: string;\n label: string;\n summary?: string;\n}\n\nexport interface EditorSceneRenderingSystemDetail {\n label: string;\n value: string;\n tone?: EditorSceneRenderingStatusTone;\n}\n\nexport interface EditorSceneRenderingProgress {\n label: string;\n value?: number;\n indeterminate?: boolean;\n}\n\nexport interface EditorSceneRenderingSection {\n id: string;\n title: string;\n summary?: string;\n collapsedByDefault?: boolean;\n systemsCollapsible?: boolean;\n layout?: EditorSceneRenderingSectionLayout;\n systems: EditorSceneRenderingSystem[];\n}\n\nexport interface EditorSceneRenderingPanelAction {\n id: string;\n label: string;\n icon?: 'undo' | 'save' | 'world' | 'status' | 'plus' | 'trash';\n disabled?: boolean;\n tooltip?: string;\n params?: Record<string, unknown>;\n}\n\nexport interface EditorSceneRenderingPanelState {\n title?: string;\n summary?: string;\n dirty?: boolean;\n status?: string;\n statusTone?: EditorSceneRenderingStatusTone;\n actions?: EditorSceneRenderingPanelAction[];\n sections: EditorSceneRenderingSection[];\n}\n\nexport type EditorSceneStaticShadowBakeLifecycleStatus =\n | 'disabled'\n | 'baking'\n | 'missing'\n | 'preview-unsaved'\n | 'up-to-date'\n | 'out-of-date'\n | 'invalid';\n\nexport interface EditorSceneStaticShadowBakeStats {\n phase?: 'collect' | 'reuse' | 'chunk' | 'sdf' | 'pack' | 'encode' | 'complete' | (string & {});\n sourceRootCount?: number;\n sourceMeshCount?: number;\n attemptedChunkCount?: number;\n chunkCount?: number;\n textureCount?: number;\n skippedChunkCount?: number;\n pageCount?: number;\n resolution?: number;\n chunkSize?: number;\n atlasSize?: number;\n atlasUsedPixels?: number;\n atlasAllocatedPixels?: number;\n atlasOccupancy?: number;\n texelsPerMeter?: number;\n effectiveTexelsPerMeter?: number;\n maxAtlasPages?: number;\n sdfRadiusPx?: number;\n spatialChunkSize?: number;\n effectiveSpatialChunkSize?: number;\n targetChunkCount?: number;\n bakedChunkCount?: number;\n reusedChunkCount?: number;\n durationMs?: number;\n currentChunkId?: string;\n}\n\nexport interface EditorSceneStaticShadowBakeLifecycleState {\n status: EditorSceneStaticShadowBakeLifecycleStatus;\n chunkCount?: number;\n reason?: string | null;\n generatedAt?: string | null;\n stats?: EditorSceneStaticShadowBakeStats | null;\n progress?: EditorSceneRenderingProgress | null;\n}\n\nexport interface EditorSceneRenderingPanelStateInput {\n dirty?: boolean;\n lastError?: string | null;\n staticShadowBake?: EditorSceneStaticShadowBakeLifecycleState | null;\n shadowMapExperiment?: EditorSceneShadowMapExperimentPanelState | null;\n}\n\nexport interface EditorSceneShadowMapExperimentPanelState {\n configured: boolean;\n enabled: boolean;\n qualityProfileId: string | null;\n qualityProfileIds: readonly string[];\n maps?: {\n staticResolution: number;\n dynamicResolution: number;\n compositeResolution: number;\n } | null;\n filter?: string | null;\n bias?: number | null;\n normalBias?: number | null;\n darkness?: number | null;\n}\n\nexport interface EditorSceneRenderingPanelOptions {\n language?: EditorSceneRenderingPanelLanguage;\n textureAssets?: readonly EditorSceneRenderingTextureAsset[];\n}\n\nexport interface EditorSceneRenderingTextureAsset {\n id: string;\n label: string;\n resource: PlayableResolvedAssetResource;\n meta?: string;\n usage?: 'material' | 'environment' | (string & {});\n capabilities?: {\n materialTexture?: boolean;\n environmentTexture?: boolean;\n };\n}\n\nexport interface EditorSceneRenderingProfileDraftState {\n savedConfig: Record<string, unknown>;\n draftConfig: Record<string, unknown>;\n dirty: boolean;\n lastError: string | null;\n}\n\nexport interface EditorSceneRenderingProfileAuthoringRequest {\n method?: string;\n body?: Record<string, unknown>;\n}\n\nexport interface EditorSceneRenderingProfileAuthoringLoadResult {\n renderingConfig: unknown;\n response?: Record<string, unknown>;\n}\n\nexport interface EditorSceneRenderingProfileAuthoringHandlers {\n readBody?: (\n request: EditorSceneRenderingProfileAuthoringRequest,\n ) => Record<string, unknown> | Promise<Record<string, unknown>>;\n loadConfig?: () => unknown | EditorSceneRenderingProfileAuthoringLoadResult | Promise<unknown | EditorSceneRenderingProfileAuthoringLoadResult>;\n saveConfig?: (input: {\n body: Record<string, unknown>;\n renderingConfig: Record<string, unknown>;\n normalized: EditorSceneRenderingProfile;\n summary: EditorSceneRenderingProfileSummary;\n }) => Record<string, unknown> | Promise<Record<string, unknown>>;\n}\nimport type { PlayableResolvedAssetResource } from '@fps-games/playable-assets';\n"]}
|
|
@@ -76,11 +76,7 @@ function resolveStaticEditorSceneRuntimePreviewAssetUrl(assetsModule, assetId, k
|
|
|
76
76
|
? assetsModule.resolveTextureAssetUrl
|
|
77
77
|
: assetsModule.resolveModelAssetUrl;
|
|
78
78
|
const typedUrl = typeof typedResolver === 'function' ? typedResolver(assetId) : null;
|
|
79
|
-
|
|
80
|
-
? assetsModule.resolveAssetUrl(assetId)
|
|
81
|
-
: null;
|
|
82
|
-
return resolveEditorSceneRuntimePreviewAssetUrlCandidate(typedUrl)
|
|
83
|
-
?? resolveEditorSceneRuntimePreviewAssetUrlCandidate(fallbackUrl);
|
|
79
|
+
return resolveEditorSceneRuntimePreviewAssetUrlCandidate(typedUrl);
|
|
84
80
|
}
|
|
85
81
|
function resolveGeneratedEditorSceneRuntimePreviewAssetRelativeUrl(relativePath) {
|
|
86
82
|
const directProjectUrl = normalizeEditorSceneRuntimePreviewProjectUrlPath(relativePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/runtime-preview/assets.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorSceneRuntimePreviewAssetsModule,\n EditorSceneRuntimePreviewKind,\n} from './types';\n\nexport function readEditorSceneRuntimePreviewAssetId(asset: unknown): string {\n const value = readRecord(asset);\n return readOptionalString(value.assetId)\n ?? readOptionalString(value.id)\n ?? '';\n}\n\nexport function readEditorSceneRuntimePreviewAssetKind(asset: unknown): EditorSceneRuntimePreviewKind | null {\n const metadata = readEditorSceneRuntimePreviewAssetMetadata(asset);\n const raw = readOptionalString(metadata.type)\n ?? readOptionalString(metadata.assetType)\n ?? readOptionalString(readRecord(asset).kind);\n if (raw === 'texture') return 'texture';\n if (raw === 'model') return 'model';\n return null;\n}\n\nexport function readEditorSceneRuntimePreviewAssetMetadata(asset: unknown): Record<string, unknown> {\n return readRecord(readRecord(asset).metadata);\n}\n\nexport function resolveEditorSceneRuntimePreviewAssetUrl(\n assetsModule: EditorSceneRuntimePreviewAssetsModule,\n asset: unknown,\n kind: EditorSceneRuntimePreviewKind,\n): string | null {\n const assetId = readEditorSceneRuntimePreviewAssetId(asset);\n const metadata = readEditorSceneRuntimePreviewAssetMetadata(asset);\n const candidates: unknown[] = [];\n\n if (assetId) {\n candidates.push(resolveStaticEditorSceneRuntimePreviewAssetUrl(assetsModule, assetId, kind));\n\n const catalogEntry = readRecord(readRecord(assetsModule.ASSET_CATALOG)[assetId]);\n const catalogExternal = readRecord(catalogEntry.external);\n candidates.push(\n catalogEntry.url,\n catalogEntry.relativePath,\n catalogExternal.assetUrl,\n catalogExternal.assetPath,\n );\n }\n\n const metadataExternal = readRecord(metadata.external);\n candidates.push(\n metadata.assetUrl,\n metadata.relativePath,\n metadata.assetPath,\n metadataExternal.assetUrl,\n metadataExternal.assetPath,\n );\n\n for (const candidate of candidates) {\n const url = resolveEditorSceneRuntimePreviewAssetUrlCandidate(candidate);\n if (url) return url;\n }\n\n return null;\n}\n\nexport function resolveEditorSceneRuntimePreviewAssetUrlCandidate(value: unknown): string | null {\n const raw = readOptionalString(value);\n if (!raw) return null;\n const candidate = raw.replace(/\\\\/g, '/');\n if (/^(https?:|data:|blob:)/i.test(candidate)) return candidate;\n if (candidate.startsWith('/@fs/')) return candidate;\n if (candidate.startsWith('/src/')) return candidate;\n if (candidate.startsWith('/')) return candidate;\n\n const projectUrl = normalizeEditorSceneRuntimePreviewProjectUrlPath(candidate);\n if (projectUrl) return projectUrl;\n\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(candidate);\n if (pathname.startsWith('/') && pathname.includes('/src/assets/')) return `/@fs${pathname}${suffix}`;\n\n return resolveGeneratedEditorSceneRuntimePreviewAssetRelativeUrl(candidate);\n}\n\nexport function normalizeEditorSceneRuntimePreviewProjectUrlPath(path: string): string | null {\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(path.replace(/\\\\/g, '/'));\n const withoutDot = pathname.startsWith('./') ? pathname.slice(2) : pathname;\n if (withoutDot.startsWith('/src/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(withoutDot.slice(1), suffix);\n if (withoutDot.startsWith('src/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(withoutDot, suffix);\n if (withoutDot.startsWith('assets/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(`src/${withoutDot}`, suffix);\n if (withoutDot.startsWith('imported/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(`src/assets/${withoutDot}`, suffix);\n return null;\n}\n\nfunction resolveStaticEditorSceneRuntimePreviewAssetUrl(\n assetsModule: EditorSceneRuntimePreviewAssetsModule,\n assetId: string,\n kind: EditorSceneRuntimePreviewKind,\n): string | null {\n const typedResolver = kind === 'texture'\n ? assetsModule.resolveTextureAssetUrl\n : assetsModule.resolveModelAssetUrl;\n const typedUrl = typeof typedResolver === 'function' ? typedResolver(assetId) : null;\n const fallbackUrl = typeof assetsModule.resolveAssetUrl === 'function'\n ? assetsModule.resolveAssetUrl(assetId)\n : null;\n return resolveEditorSceneRuntimePreviewAssetUrlCandidate(typedUrl)\n ?? resolveEditorSceneRuntimePreviewAssetUrlCandidate(fallbackUrl);\n}\n\nfunction resolveGeneratedEditorSceneRuntimePreviewAssetRelativeUrl(relativePath: string): string | null {\n const directProjectUrl = normalizeEditorSceneRuntimePreviewProjectUrlPath(relativePath);\n if (directProjectUrl) return directProjectUrl;\n\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(relativePath.replace(/\\\\/g, '/'));\n if (!pathname || pathname.startsWith('/') || /^[a-z][a-z0-9+.-]*:/i.test(pathname)) return null;\n\n const normalized = normalizeEditorSceneRuntimePreviewUrlPathParts(`src/assets/generated/${pathname}`);\n return normalized ? `/${normalized}${suffix}` : null;\n}\n\nfunction formatEditorSceneRuntimePreviewProjectAssetUrl(path: string, suffix: string): string | null {\n const normalized = normalizeEditorSceneRuntimePreviewUrlPathParts(path);\n return normalized ? `/${normalized}${suffix}` : null;\n}\n\nfunction splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(value: string): [string, string] {\n const suffixIndex = value.search(/[?#]/);\n return suffixIndex === -1 ? [value, ''] : [value.slice(0, suffixIndex), value.slice(suffixIndex)];\n}\n\nfunction normalizeEditorSceneRuntimePreviewUrlPathParts(path: string): string | null {\n const stack: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') {\n if (!stack.length) return null;\n stack.pop();\n continue;\n }\n stack.push(part);\n }\n return stack.length ? stack.join('/') : null;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/runtime-preview/assets.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorSceneRuntimePreviewAssetsModule,\n EditorSceneRuntimePreviewKind,\n} from './types';\n\nexport function readEditorSceneRuntimePreviewAssetId(asset: unknown): string {\n const value = readRecord(asset);\n return readOptionalString(value.assetId)\n ?? readOptionalString(value.id)\n ?? '';\n}\n\nexport function readEditorSceneRuntimePreviewAssetKind(asset: unknown): EditorSceneRuntimePreviewKind | null {\n const metadata = readEditorSceneRuntimePreviewAssetMetadata(asset);\n const raw = readOptionalString(metadata.type)\n ?? readOptionalString(metadata.assetType)\n ?? readOptionalString(readRecord(asset).kind);\n if (raw === 'texture') return 'texture';\n if (raw === 'model') return 'model';\n return null;\n}\n\nexport function readEditorSceneRuntimePreviewAssetMetadata(asset: unknown): Record<string, unknown> {\n return readRecord(readRecord(asset).metadata);\n}\n\nexport function resolveEditorSceneRuntimePreviewAssetUrl(\n assetsModule: EditorSceneRuntimePreviewAssetsModule,\n asset: unknown,\n kind: EditorSceneRuntimePreviewKind,\n): string | null {\n const assetId = readEditorSceneRuntimePreviewAssetId(asset);\n const metadata = readEditorSceneRuntimePreviewAssetMetadata(asset);\n const candidates: unknown[] = [];\n\n if (assetId) {\n candidates.push(resolveStaticEditorSceneRuntimePreviewAssetUrl(assetsModule, assetId, kind));\n\n const catalogEntry = readRecord(readRecord(assetsModule.ASSET_CATALOG)[assetId]);\n const catalogExternal = readRecord(catalogEntry.external);\n candidates.push(\n catalogEntry.url,\n catalogEntry.relativePath,\n catalogExternal.assetUrl,\n catalogExternal.assetPath,\n );\n }\n\n const metadataExternal = readRecord(metadata.external);\n candidates.push(\n metadata.assetUrl,\n metadata.relativePath,\n metadata.assetPath,\n metadataExternal.assetUrl,\n metadataExternal.assetPath,\n );\n\n for (const candidate of candidates) {\n const url = resolveEditorSceneRuntimePreviewAssetUrlCandidate(candidate);\n if (url) return url;\n }\n\n return null;\n}\n\nexport function resolveEditorSceneRuntimePreviewAssetUrlCandidate(value: unknown): string | null {\n const raw = readOptionalString(value);\n if (!raw) return null;\n const candidate = raw.replace(/\\\\/g, '/');\n if (/^(https?:|data:|blob:)/i.test(candidate)) return candidate;\n if (candidate.startsWith('/@fs/')) return candidate;\n if (candidate.startsWith('/src/')) return candidate;\n if (candidate.startsWith('/')) return candidate;\n\n const projectUrl = normalizeEditorSceneRuntimePreviewProjectUrlPath(candidate);\n if (projectUrl) return projectUrl;\n\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(candidate);\n if (pathname.startsWith('/') && pathname.includes('/src/assets/')) return `/@fs${pathname}${suffix}`;\n\n return resolveGeneratedEditorSceneRuntimePreviewAssetRelativeUrl(candidate);\n}\n\nexport function normalizeEditorSceneRuntimePreviewProjectUrlPath(path: string): string | null {\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(path.replace(/\\\\/g, '/'));\n const withoutDot = pathname.startsWith('./') ? pathname.slice(2) : pathname;\n if (withoutDot.startsWith('/src/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(withoutDot.slice(1), suffix);\n if (withoutDot.startsWith('src/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(withoutDot, suffix);\n if (withoutDot.startsWith('assets/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(`src/${withoutDot}`, suffix);\n if (withoutDot.startsWith('imported/')) return formatEditorSceneRuntimePreviewProjectAssetUrl(`src/assets/${withoutDot}`, suffix);\n return null;\n}\n\nfunction resolveStaticEditorSceneRuntimePreviewAssetUrl(\n assetsModule: EditorSceneRuntimePreviewAssetsModule,\n assetId: string,\n kind: EditorSceneRuntimePreviewKind,\n): string | null {\n const typedResolver = kind === 'texture'\n ? assetsModule.resolveTextureAssetUrl\n : assetsModule.resolveModelAssetUrl;\n const typedUrl = typeof typedResolver === 'function' ? typedResolver(assetId) : null;\n return resolveEditorSceneRuntimePreviewAssetUrlCandidate(typedUrl);\n}\n\nfunction resolveGeneratedEditorSceneRuntimePreviewAssetRelativeUrl(relativePath: string): string | null {\n const directProjectUrl = normalizeEditorSceneRuntimePreviewProjectUrlPath(relativePath);\n if (directProjectUrl) return directProjectUrl;\n\n const [pathname, suffix] = splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(relativePath.replace(/\\\\/g, '/'));\n if (!pathname || pathname.startsWith('/') || /^[a-z][a-z0-9+.-]*:/i.test(pathname)) return null;\n\n const normalized = normalizeEditorSceneRuntimePreviewUrlPathParts(`src/assets/generated/${pathname}`);\n return normalized ? `/${normalized}${suffix}` : null;\n}\n\nfunction formatEditorSceneRuntimePreviewProjectAssetUrl(path: string, suffix: string): string | null {\n const normalized = normalizeEditorSceneRuntimePreviewUrlPathParts(path);\n return normalized ? `/${normalized}${suffix}` : null;\n}\n\nfunction splitEditorSceneRuntimePreviewAssetUrlPathAndSuffix(value: string): [string, string] {\n const suffixIndex = value.search(/[?#]/);\n return suffixIndex === -1 ? [value, ''] : [value.slice(0, suffixIndex), value.slice(suffixIndex)];\n}\n\nfunction normalizeEditorSceneRuntimePreviewUrlPathParts(path: string): string | null {\n const stack: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') {\n if (!stack.length) return null;\n stack.pop();\n continue;\n }\n stack.push(part);\n }\n return stack.length ? stack.join('/') : null;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n}\n"]}
|
|
@@ -162,6 +162,7 @@ export function inspectPlayableEditorUpgradeReadiness(input = {}) {
|
|
|
162
162
|
function inspectMigrationReadinessFile(file, options) {
|
|
163
163
|
const diagnostics = [];
|
|
164
164
|
const content = file.content;
|
|
165
|
+
const environmentResourceHardCutSeverity = options.environmentResourceHardCutSeverity ?? 'error';
|
|
165
166
|
if (/\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\b/.test(content)) {
|
|
166
167
|
diagnostics.push({
|
|
167
168
|
severity: 'warning',
|
|
@@ -241,8 +242,60 @@ function inspectMigrationReadinessFile(file, options) {
|
|
|
241
242
|
message: 'Projection import logic is present without the SDK runtime preview import plan helper; verify asset URL and projection diagnostics during migration.',
|
|
242
243
|
});
|
|
243
244
|
}
|
|
245
|
+
diagnostics.push(...collectEnvironmentResourceHardCutDiagnostics(file.filePath, content, environmentResourceHardCutSeverity));
|
|
244
246
|
return diagnostics;
|
|
245
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* These checks intentionally inspect only project-side migration snapshots. They
|
|
250
|
+
* flag retired public integration shapes, not generic material texture fields or
|
|
251
|
+
* plugin registration order; those are validated by the product contract tests.
|
|
252
|
+
*/
|
|
253
|
+
function collectEnvironmentResourceHardCutDiagnostics(filePath, content, severity) {
|
|
254
|
+
const diagnostics = [];
|
|
255
|
+
const add = (code, message) => diagnostics.push({
|
|
256
|
+
severity,
|
|
257
|
+
code,
|
|
258
|
+
path: filePath,
|
|
259
|
+
message,
|
|
260
|
+
});
|
|
261
|
+
const hasBabylonRendererSurface = /\b(?:FpsBabylonRendererContext|FpsBabylonRendererPluginConfig|BabylonEnvironmentTexture(?:Profile|Factory)|createFpsBabylon(?:GameWorldPluginLifecycle|RendererHost))\b/.test(content);
|
|
262
|
+
if (/\bresolveAssetUrl\b/.test(content) && hasBabylonRendererSurface) {
|
|
263
|
+
add('hard-cut.environment-resource.resolve-asset-url-removed', 'Removed Babylon resolveAssetUrl integration detected; pass the generated asset catalog to the Host and resolve a PlayableResolvedAssetResource through the Assets Plugin service.');
|
|
264
|
+
}
|
|
265
|
+
if (/\bFpsBabylonRendererPluginConfig\b/.test(content) && /\benvironmentTexture\s*:/.test(content)) {
|
|
266
|
+
add('hard-cut.environment-resource.renderer-environment-texture-removed', 'Removed FpsBabylonRendererPluginConfig.environmentTexture fallback detected; authored rendering must resolve through the catalog-backed resource service.');
|
|
267
|
+
}
|
|
268
|
+
if (/\bBabylonEnvironmentTextureProfile\s*\{[^}]*\btextureUrl\b/.test(content)) {
|
|
269
|
+
add('hard-cut.environment-resource.profile-texture-url-removed', 'Removed BabylonEnvironmentTextureProfile.textureUrl shape detected; use profile.texture: PlayableResolvedAssetResource | null.');
|
|
270
|
+
}
|
|
271
|
+
if (/\bBabylonEnvironmentTextureFactory\b/.test(content) && /\b(?:textureUrl|url)\s*:\s*(?:string|String)\b/.test(content)) {
|
|
272
|
+
add('hard-cut.environment-resource.url-factory-removed', 'Removed URL-only BabylonEnvironmentTextureFactory contract detected; the factory must receive a PlayableResolvedAssetResource so it can preserve the asset format.');
|
|
273
|
+
}
|
|
274
|
+
if (/\bresolvePlayableBabylonRenderingEnvironmentTextureUrl\b/.test(content)) {
|
|
275
|
+
add('hard-cut.environment-resource.resolve-url-helper-removed', 'Removed resolvePlayableBabylonRenderingEnvironmentTextureUrl helper detected; use resolvePlayableBabylonRenderingEnvironmentTextureResource.');
|
|
276
|
+
}
|
|
277
|
+
if (isGeneratedAssetCatalogFile(filePath, content) && !hasGeneratedAssetCatalogFormat(content)) {
|
|
278
|
+
add('hard-cut.environment-resource.generated-catalog-format-missing', 'Generated asset catalog is missing the required format field; regenerate it with the current playable SDK instead of editing catalog output by hand.');
|
|
279
|
+
}
|
|
280
|
+
if (hasBabylonHostFactoryCall(content) && !hasCatalogSourceReference(content)) {
|
|
281
|
+
add('hard-cut.environment-resource.host-catalog-source-missing', 'Babylon Runtime/Renderer Host construction has no generated asset catalog input; pass the catalog source so plugin-assets can provide the shared resource resolver.');
|
|
282
|
+
}
|
|
283
|
+
return diagnostics;
|
|
284
|
+
}
|
|
285
|
+
function isGeneratedAssetCatalogFile(filePath, content) {
|
|
286
|
+
return /(?:^|\/)asset-catalog(?:\.generated)?\.[cm]?[jt]s$/i.test(normalizeFilePath(filePath))
|
|
287
|
+
|| (/\binterface\s+GeneratedAssetCatalogEntry\b/.test(content)
|
|
288
|
+
&& /\b(?:export\s+)?const\s+GENERATED_ASSET_CATALOG\b/.test(content));
|
|
289
|
+
}
|
|
290
|
+
function hasGeneratedAssetCatalogFormat(content) {
|
|
291
|
+
return /\bformat\s*:\s*(?:string|["'`][^"'`]+["'`])/.test(content);
|
|
292
|
+
}
|
|
293
|
+
function hasBabylonHostFactoryCall(content) {
|
|
294
|
+
return /\b(?:createFpsRuntime|createFpsBabylonGameWorldPluginLifecycle|createFpsBabylonRendererHost)\s*\(/.test(content);
|
|
295
|
+
}
|
|
296
|
+
function hasCatalogSourceReference(content) {
|
|
297
|
+
return /\b(?:assetCatalog(?:Source)?|generatedAssetCatalog|GENERATED_ASSET_CATALOG)\b/.test(content);
|
|
298
|
+
}
|
|
246
299
|
function collectDeprecatedAuthoredFields(filePath, content) {
|
|
247
300
|
if (/\.json$/i.test(filePath)) {
|
|
248
301
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspectors.js","sourceRoot":"","sources":["../../src/upgrade-doctor/inspectors.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n collectMissingPlayableEditorPackageAliasFiles,\n type PlayableEditorFileExists,\n type PlayableEditorPackageAliasPlan,\n} from '../package-resolution/index';\nimport { parse } from '@babel/parser';\nimport { createPlayableEditorDoctorReport } from './report';\nimport { inspectPlayableEditorHostCompatibilityReport } from './host';\nimport type {\n PlayableEditorDoctorDiagnostic,\n PlayableEditorDoctorReport,\n PlayableEditorImportBoundaryInspectionOptions,\n PlayableEditorImportSnapshot,\n PlayableEditorImportSnapshotFile,\n PlayableEditorInstalledVersionInspectionOptions,\n PlayableEditorInstalledVersionLike,\n PlayableEditorMigrationReadinessInspectionOptions,\n PlayableEditorPackageExportsInspectionOptions,\n PlayableEditorPackageExportsLike,\n PlayableEditorUpgradeReadinessInspectionInput,\n} from './types';\nimport { mergePlayableEditorDoctorReports } from './report';\n\nconst PLAYABLE_SDK_EXPORT_PATH = './playable-sdk';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH = './playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_EXPORT_PATH = './playable-sdk/vite';\nconst PLAYABLE_SDK_SUBPATH_PREFIX = '@fps-games/editor/playable-sdk/';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH = '@fps-games/editor/playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_SUBPATH = '@fps-games/editor/playable-sdk/vite';\nconst PLAYABLE_RUNTIME_SUBPATH = '@fps-games/editor/playable-runtime';\nconst PLAYABLE_RUNTIME_BABYLON_SUBPATH = '@fps-games/editor/playable-runtime/babylon';\nconst DIRECT_EDITOR_IMPORTS = [\n '@fps-games/editor',\n '@fps-games/editor-core',\n] as const;\n\n/**\n * Default forbidden packages for new playable editor integration code.\n * These packages are internal to the editor framework and should not be\n * imported directly from project-side code. Use @fps-games/editor/playable-sdk\n * facade exports instead.\n */\nexport const PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES: readonly string[] = [\n '@fps-games/editor-agent-bridge',\n '@fps-games/editor-babylon',\n '@fps-games/editor-browser',\n '@fps-games/editor-forge-play',\n '@fps-games/editor-playable-sdk',\n '@fps-games/editor-protocol',\n '@fps-games/babylon-renderer',\n];\n\nexport function inspectPlayableEditorPackageAliasPlan(\n plan: PlayableEditorPackageAliasPlan,\n fileExists: PlayableEditorFileExists,\n options: { title?: string } = {},\n): PlayableEditorDoctorReport {\n const missing = collectMissingPlayableEditorPackageAliasFiles(plan, fileExists);\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package aliases',\n diagnostics: missing.map(entry => ({\n severity: 'error',\n code: 'package.alias.missing-file',\n source: entry.packageId,\n path: entry.file,\n message: `Package alias for ${entry.packageId} points to a missing file.`,\n })),\n });\n}\n\nexport function inspectPlayableEditorPackageExports(\n packageJson: PlayableEditorPackageExportsLike,\n options: PlayableEditorPackageExportsInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName ?? readString(packageJson.name) ?? '@fps-games/editor';\n const exportPath = options.playableSdkExportPath ?? PLAYABLE_SDK_EXPORT_PATH;\n const upgradeDoctorExportPath = options.playableSdkUpgradeDoctorExportPath ?? PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH;\n const viteExportPath = options.playableSdkViteExportPath ?? PLAYABLE_SDK_VITE_EXPORT_PATH;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (!isRecord(packageJson.exports)) {\n diagnostics.push({\n severity: 'error',\n code: 'package.export.invalid',\n source: packageName,\n path: 'exports',\n message: `Package ${packageName} must expose an object exports map.`,\n });\n } else {\n for (const requiredExportPath of [exportPath, upgradeDoctorExportPath, viteExportPath]) {\n const hasExport = requiredExportPath in packageJson.exports;\n const usableTarget = hasExport && (\n requiredExportPath === upgradeDoctorExportPath\n ? isUsableNodePackageExportTarget(packageJson.exports[requiredExportPath])\n : isUsablePackageExportTarget(packageJson.exports[requiredExportPath])\n );\n if (usableTarget) continue;\n diagnostics.push({\n severity: 'error',\n code: hasExport ? 'package.export.invalid-target' : 'package.export.missing',\n source: packageName,\n path: `exports[\"${requiredExportPath}\"]`,\n message: hasExport\n ? `Package ${packageName} has no usable runtime target for the ${requiredExportPath} export.`\n : `Package ${packageName} is missing the ${requiredExportPath} export.`,\n });\n }\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package exports',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorInstalledVersion(\n packageJson: PlayableEditorInstalledVersionLike,\n options: PlayableEditorInstalledVersionInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName\n ?? readString(packageJson.packageName)\n ?? '@fps-games/editor';\n const declaredVersion = readString(packageJson.declaredVersion);\n const installedVersion = readString(packageJson.installedVersion);\n const source = readString(packageJson.source) ?? packageName;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (declaredVersion && installedVersion && isExactDependencyVersion(declaredVersion) && declaredVersion !== installedVersion) {\n diagnostics.push({\n severity: options.exactMismatchSeverity ?? 'error',\n code: 'package.version.installed-mismatch',\n source,\n path: 'dependencies',\n details: { packageName, declaredVersion, installedVersion },\n message: `Project declares ${packageName}@${declaredVersion}, but node_modules contains ${installedVersion}. Reinstall dependencies and restart the dev server.`,\n });\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor installed version',\n diagnostics,\n });\n}\n\nexport function createPlayableEditorImportSnapshot(\n files: readonly PlayableEditorImportSnapshotFile[],\n): PlayableEditorImportSnapshot {\n return {\n files: files.map(file => ({\n filePath: file.filePath,\n content: file.content,\n })),\n };\n}\n\nexport function inspectPlayableEditorImportBoundaries(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorImportBoundaryInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const forbiddenPackages = normalizeForbiddenPackages(\n options.forbiddenPackages ?? PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES,\n );\n const forbiddenPackageSeverity = options.forbiddenPackageSeverity ?? 'warning';\n const diagnostics = files.flatMap(file =>\n inspectFileImports(file, forbiddenPackages, forbiddenPackageSeverity),\n );\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor import boundaries',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorMigrationReadiness(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorMigrationReadinessInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const diagnostics = files.flatMap(file => inspectMigrationReadinessFile(file, options));\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor hard-cut readiness',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorUpgradeReadiness(\n input: PlayableEditorUpgradeReadinessInspectionInput = {},\n): PlayableEditorDoctorReport {\n const reports: PlayableEditorDoctorReport[] = [];\n if (input.hostCompatibility) {\n reports.push(inspectPlayableEditorHostCompatibilityReport(\n input.hostCompatibility.report,\n input.hostCompatibility.options,\n ));\n }\n if (input.packageAliasPlan) {\n reports.push(inspectPlayableEditorPackageAliasPlan(\n input.packageAliasPlan.plan,\n input.packageAliasPlan.fileExists,\n { title: input.packageAliasPlan.title },\n ));\n }\n if (input.packageExports) {\n reports.push(inspectPlayableEditorPackageExports(\n input.packageExports.packageJson,\n input.packageExports.options,\n ));\n }\n if (input.installedVersion) {\n reports.push(inspectPlayableEditorInstalledVersion(\n input.installedVersion.packageJson,\n input.installedVersion.options,\n ));\n }\n if (input.importBoundaries) {\n reports.push(inspectPlayableEditorImportBoundaries(\n input.importBoundaries.snapshot,\n input.importBoundaries.options,\n ));\n }\n if (input.migrationReadiness) {\n reports.push(inspectPlayableEditorMigrationReadiness(\n input.migrationReadiness.snapshot,\n input.migrationReadiness.options,\n ));\n }\n return mergePlayableEditorDoctorReports(reports, {\n title: input.title ?? 'Playable editor upgrade readiness',\n });\n}\n\nfunction inspectMigrationReadinessFile(\n file: PlayableEditorImportSnapshotFile,\n options: PlayableEditorMigrationReadinessInspectionOptions,\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const content = file.content;\n if (/\\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\\b/.test(content)) {\n diagnostics.push({\n severity: 'warning',\n code: 'hard-cut.scene-artifact.project-validator-hook-removed',\n path: file.filePath,\n message: 'Removed project SceneArtifact validator hook detected; delete assertRuntimeSceneConfigModulePath/assertRuntimeSceneConfigExportName because @fps-games/editor/playable-sdk now validates the canonical runtime artifact.',\n });\n }\n if (/\\bhierarchyContextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.browser-callbacks-removed',\n path: file.filePath,\n message: 'Removed hierarchyContextActions Browser callback API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bcreateLocalEditorHarness\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.direct-harness',\n path: file.filePath,\n message: 'Removed hierarchy.contextActions API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bhierarchyActions\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.context-actions-removed',\n path: file.filePath,\n message: 'Removed capabilities.hierarchyActions.contextActions API detected; use capabilities.hierarchyActions.operations.',\n });\n }\n const retiredBypassPattern = new RegExp(`\\\\binstall${'Leg' + 'acy'}AssetCommandBypass\\\\b|__project${'Leg' + 'acy'}AssetBypass`);\n if (retiredBypassPattern.test(content)) {\n diagnostics.push({\n severity: options.retiredAssetBypassSeverity ?? 'error',\n code: 'hard-cut.asset-bypass.retired-helper',\n path: file.filePath,\n message: 'A retired asset command bypass helper was detected; delete it and use product asset capabilities.',\n });\n }\n const retiredRuntimePattern = new RegExp(\n `__bridge${'Leg' + 'acy'}EditorRuntime|register${'Leg' + 'acy'}RuntimeProxy|install${'Leg' + 'acy'}CommandBypass`,\n );\n if (retiredRuntimePattern.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.runtime.retired-bridge',\n path: file.filePath,\n message: 'A retired runtime bridge/global was detected; remove it and mount the product editor adapter directly.',\n });\n }\n const deprecatedAuthoredFields = collectDeprecatedAuthoredFields(file.filePath, content);\n for (const field of deprecatedAuthoredFields) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.schema.deprecated-field',\n path: file.filePath,\n details: { field },\n message: `Deprecated authored field ${field} is unsupported; migrate the authored source to the current contract.`,\n });\n }\n if (\n /\\bhandleProjectAssetCommand\\b/.test(content)\n && /\\b(asset\\.import|asset\\.library\\.refresh|editor\\.asset\\.place|ASSET_IMPORT|ASSET_LIBRARY_REFRESH|EDITOR_ASSET_PLACE)\\b/.test(content)\n && !/\\bcreatePlayableProjectAssetCommandHandler\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.projectAssetCommandGlueSeverity ?? 'warning',\n code: 'migration.project-asset-command.local-glue',\n path: file.filePath,\n message: 'Project asset command glue detected; consider createPlayableProjectAssetCommandHandler and keep only project registration/placement policies local.',\n });\n }\n if (\n /\\bimportProjectionModel\\b/.test(content)\n && !/\\bcreateEditorSceneRuntimePreviewImportPlan\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.runtimePreviewProjectionSeverity ?? 'info',\n code: 'migration.runtime-preview.projection-plan-missing',\n path: file.filePath,\n message: 'Projection import logic is present without the SDK runtime preview import plan helper; verify asset URL and projection diagnostics during migration.',\n });\n }\n return diagnostics;\n}\n\nfunction collectDeprecatedAuthoredFields(filePath: string, content: string): string[] {\n if (/\\.json$/i.test(filePath)) {\n try {\n const value = JSON.parse(content) as unknown;\n const fields = new Set<string>();\n collectDeprecatedJsonFields(value, [], fields);\n return [...fields];\n } catch {\n return [];\n }\n }\n // Authored scene schemas are structured JSON. TypeScript project code is\n // covered by import/runtime checks and must not be guessed through regexes.\n return [];\n}\n\nfunction collectDeprecatedJsonFields(value: unknown, path: string[], fields: Set<string>): void {\n if (Array.isArray(value)) {\n value.forEach(entry => collectDeprecatedJsonFields(entry, path, fields));\n return;\n }\n if (!isRecord(value)) return;\n for (const field of ['shadowMode', 'sceneInstances', 'modelRegistry', 'childMaterialBindings', 'childMaterials', 'useBlobShadow', 'blobSettings']) {\n if (field in value) fields.add(field);\n }\n if (path[path.length - 1] === 'globalVolume') {\n for (const field of ['samples', 'camera', 'lights']) {\n if (field in value) fields.add(`globalVolume.${field}`);\n }\n }\n if (value.kind === 'box' && path.slice(-2).join('.') === 'marker.geometry') {\n for (const field of ['coordinateSpace', 'center', 'size', 'rotation']) if (field in value) fields.add(`marker.geometry.${field}`);\n }\n if (path.slice(-3).join('.') === 'shadows.staticProjected.bake') {\n for (const field of ['resolution', 'maxSize']) if (field in value) fields.add(`shadows.staticProjected.bake.${field}`);\n }\n if (path.slice(-2).join('.') === 'globalVolume.environment') {\n for (const field of ['textureAssetId', 'textureUrl', 'intensity']) if (field in value) fields.add(`globalVolume.environment.${field}`);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key !== 'metadata') collectDeprecatedJsonFields(child, [...path, key], fields);\n }\n}\n\nfunction inspectFileImports(\n file: PlayableEditorImportSnapshotFile,\n forbiddenPackages: readonly string[],\n forbiddenPackageSeverity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n let imports: string[];\n try {\n imports = readImportSpecifiers(file.content, file.filePath);\n } catch (error) {\n return [{\n severity: 'error',\n code: 'import.boundary.parse-error',\n path: file.filePath,\n message: `Unable to parse project module for import-boundary validation: ${error instanceof Error ? error.message : String(error)}`,\n }];\n }\n for (const specifier of imports) {\n if (specifier === PLAYABLE_RUNTIME_SUBPATH || specifier === PLAYABLE_RUNTIME_BABYLON_SUBPATH) continue;\n if (specifier === '@fps-games/editor' && isPublicEditorProductEntryFile(file.filePath)) continue;\n if (specifier === '@fps-games/editor/vite' && (isViteConfigFile(file.filePath) || isProjectScriptFile(file.filePath))) continue;\n if (specifier.startsWith(PLAYABLE_SDK_SUBPATH_PREFIX)) {\n const isAllowedUpgradeDoctorSubpath =\n specifier === PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH\n && isProjectScriptFile(file.filePath);\n const isAllowedViteSubpath =\n specifier === PLAYABLE_SDK_VITE_SUBPATH\n && (\n isViteConfigFile(file.filePath)\n || isProjectScriptFile(file.filePath)\n );\n if (isAllowedUpgradeDoctorSubpath || isAllowedViteSubpath) {\n continue;\n }\n diagnostics.push({\n severity: 'error',\n code: 'import.boundary.playable-sdk-subpath',\n source: specifier,\n path: file.filePath,\n message: 'Import @fps-games/editor/playable-sdk only through the public aggregate subpath.',\n });\n continue;\n }\n const directEditorPackage = findMatchingForbiddenPackage(specifier, DIRECT_EDITOR_IMPORTS);\n if (directEditorPackage && specifier !== '@fps-games/editor/playable-sdk') {\n diagnostics.push({\n severity: 'error',\n code: directEditorPackage === '@fps-games/editor'\n ? 'import.boundary.direct-editor'\n : 'import.boundary.direct-editor-core',\n source: specifier,\n path: file.filePath,\n message: `New playable editor integration code should import stable contracts from @fps-games/editor/playable-sdk instead of ${specifier}.`,\n });\n continue;\n }\n const forbiddenPackage = findMatchingForbiddenPackage(specifier, forbiddenPackages);\n if (forbiddenPackage) {\n diagnostics.push({\n severity: forbiddenPackageSeverity,\n code: 'import.boundary.forbidden-package',\n source: specifier,\n path: file.filePath,\n details: { packageName: forbiddenPackage },\n message: `Import ${forbiddenPackage} directly couples to editor internals. Consider using @fps-games/editor/playable-sdk facade exports instead.`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction isViteConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return !normalized.includes('/') && /^vite\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isPublicEditorProductEntryFile(filePath: string): boolean {\n if (isFpsConfigFile(filePath) || isProjectScriptFile(filePath)) return true;\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)src\\/(?:editor-features|services\\/fps-game-editor)\\/plugin-host\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isFpsConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)fps\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction normalizeForbiddenPackages(packages: readonly string[]): string[] {\n const normalized: string[] = [];\n for (const packageName of packages) {\n const trimmed = packageName.trim();\n if (trimmed.length > 0 && !normalized.includes(trimmed)) {\n normalized.push(trimmed);\n }\n }\n return normalized;\n}\n\nfunction findMatchingForbiddenPackage(specifier: string, forbiddenPackages: readonly string[]): string | undefined {\n return forbiddenPackages.find(packageName => specifier === packageName || specifier.startsWith(`${packageName}/`));\n}\n\nfunction readImportSpecifiers(content: string, filePath: string): string[] {\n const supportsJsx = /\\.[cm]?[jt]sx$/i.test(filePath);\n const root = parse(content, {\n sourceType: 'unambiguous',\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n plugins: [\n 'typescript',\n ...(supportsJsx ? ['jsx' as const] : []),\n 'decorators',\n 'importAttributes',\n ],\n });\n const specifiers: string[] = [];\n visitBabelNode(root, (node) => {\n const type = readBabelNodeType(node);\n if (type === 'ImportDeclaration' || type === 'ExportNamedDeclaration' || type === 'ExportAllDeclaration') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'ImportExpression') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSExternalModuleReference') {\n const source = readBabelStaticString(node.expression);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSImportType') {\n const source = readBabelStaticString(node.argument);\n if (source) specifiers.push(source);\n return;\n }\n if (type !== 'CallExpression' && type !== 'OptionalCallExpression') return;\n if (!isBabelStaticModuleLoader(node.callee)) return;\n const source = readBabelStaticString(Array.isArray(node.arguments) ? node.arguments[0] : null);\n if (source) specifiers.push(source);\n });\n return specifiers;\n}\n\nfunction visitBabelNode(value: unknown, visit: (node: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const entry of value) visitBabelNode(entry, visit);\n return;\n }\n if (!isRecord(value) || typeof value.type !== 'string') return;\n visit(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'loc' || key === 'start' || key === 'end' || key === 'extra' || key === 'comments' || key === 'tokens') continue;\n visitBabelNode(child, visit);\n }\n}\n\nfunction readBabelNodeType(value: unknown): string | null {\n return isRecord(value) && typeof value.type === 'string' ? value.type : null;\n}\n\nfunction readBabelStaticString(value: unknown): string | null {\n if (!isRecord(value)) return null;\n if (value.type === 'StringLiteral' && typeof value.value === 'string') return value.value;\n if (value.type === 'TemplateLiteral' && Array.isArray(value.expressions) && value.expressions.length === 0) {\n const quasi = Array.isArray(value.quasis) ? value.quasis[0] : null;\n const cooked = isRecord(quasi) && isRecord(quasi.value) ? quasi.value.cooked : null;\n return typeof cooked === 'string' ? cooked : null;\n }\n return null;\n}\n\nfunction isBabelStaticModuleLoader(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === 'Import') return true;\n if (value.type === 'Identifier') return value.name === 'require';\n if (value.type !== 'MemberExpression' && value.type !== 'OptionalMemberExpression') return false;\n const objectName = readBabelIdentifierName(value.object);\n const propertyName = value.computed\n ? readBabelStaticString(value.property)\n : readBabelIdentifierName(value.property);\n return (objectName === 'module' && propertyName === 'require')\n || (objectName === 'require' && propertyName === 'resolve');\n}\n\nfunction readBabelIdentifierName(value: unknown): string | null {\n return isRecord(value) && value.type === 'Identifier' && typeof value.name === 'string' ? value.name : null;\n}\n\nfunction isUsablePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') {\n if (!/^\\.\\/.+\\.(?:[cm]?js|json|node)$/.test(value)) return false;\n return value.slice(2).split('/').every(isUsablePackageTargetSegment);\n }\n if (Array.isArray(value)) return value.some(isUsablePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n return entries.some(([condition, target]) => condition !== 'types' && isUsablePackageExportTarget(target));\n}\n\nfunction isUsableNodePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') return isUsablePackageExportTarget(value);\n if (Array.isArray(value)) return value.some(isUsableNodePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n for (const [condition, target] of entries) {\n if (condition !== 'node' && condition !== 'import' && condition !== 'default') continue;\n return isUsableNodePackageExportTarget(target);\n }\n return false;\n}\n\nfunction isUsablePackageTargetSegment(segment: string): boolean {\n if (!segment) return false;\n try {\n const decoded = decodeURIComponent(segment);\n return decoded !== '.'\n && decoded !== '..'\n && decoded.toLowerCase() !== 'node_modules'\n && !decoded.includes('/')\n && !decoded.includes('\\\\');\n } catch {\n return false;\n }\n}\n\nfunction isProjectScriptFile(filePath: string): boolean {\n return normalizeFilePath(filePath).startsWith('scripts/');\n}\n\nfunction normalizeFilePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/').replace(/\\/+/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction isExactDependencyVersion(value: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)*)?$/.test(value.trim());\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readSeverity(value: unknown): PlayableEditorDoctorDiagnostic['severity'] | undefined {\n return value === 'error' || value === 'warning' || value === 'info' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isImportSnapshot(value: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[]): value is PlayableEditorImportSnapshot {\n return isRecord(value) && Array.isArray(value.files);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inspectors.js","sourceRoot":"","sources":["../../src/upgrade-doctor/inspectors.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n collectMissingPlayableEditorPackageAliasFiles,\n type PlayableEditorFileExists,\n type PlayableEditorPackageAliasPlan,\n} from '../package-resolution/index';\nimport { parse } from '@babel/parser';\nimport { createPlayableEditorDoctorReport } from './report';\nimport { inspectPlayableEditorHostCompatibilityReport } from './host';\nimport type {\n PlayableEditorDoctorDiagnostic,\n PlayableEditorDoctorReport,\n PlayableEditorImportBoundaryInspectionOptions,\n PlayableEditorImportSnapshot,\n PlayableEditorImportSnapshotFile,\n PlayableEditorInstalledVersionInspectionOptions,\n PlayableEditorInstalledVersionLike,\n PlayableEditorMigrationReadinessInspectionOptions,\n PlayableEditorPackageExportsInspectionOptions,\n PlayableEditorPackageExportsLike,\n PlayableEditorUpgradeReadinessInspectionInput,\n} from './types';\nimport { mergePlayableEditorDoctorReports } from './report';\n\nconst PLAYABLE_SDK_EXPORT_PATH = './playable-sdk';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH = './playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_EXPORT_PATH = './playable-sdk/vite';\nconst PLAYABLE_SDK_SUBPATH_PREFIX = '@fps-games/editor/playable-sdk/';\nconst PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH = '@fps-games/editor/playable-sdk/upgrade-doctor';\nconst PLAYABLE_SDK_VITE_SUBPATH = '@fps-games/editor/playable-sdk/vite';\nconst PLAYABLE_RUNTIME_SUBPATH = '@fps-games/editor/playable-runtime';\nconst PLAYABLE_RUNTIME_BABYLON_SUBPATH = '@fps-games/editor/playable-runtime/babylon';\nconst DIRECT_EDITOR_IMPORTS = [\n '@fps-games/editor',\n '@fps-games/editor-core',\n] as const;\n\n/**\n * Default forbidden packages for new playable editor integration code.\n * These packages are internal to the editor framework and should not be\n * imported directly from project-side code. Use @fps-games/editor/playable-sdk\n * facade exports instead.\n */\nexport const PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES: readonly string[] = [\n '@fps-games/editor-agent-bridge',\n '@fps-games/editor-babylon',\n '@fps-games/editor-browser',\n '@fps-games/editor-forge-play',\n '@fps-games/editor-playable-sdk',\n '@fps-games/editor-protocol',\n '@fps-games/babylon-renderer',\n];\n\nexport function inspectPlayableEditorPackageAliasPlan(\n plan: PlayableEditorPackageAliasPlan,\n fileExists: PlayableEditorFileExists,\n options: { title?: string } = {},\n): PlayableEditorDoctorReport {\n const missing = collectMissingPlayableEditorPackageAliasFiles(plan, fileExists);\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package aliases',\n diagnostics: missing.map(entry => ({\n severity: 'error',\n code: 'package.alias.missing-file',\n source: entry.packageId,\n path: entry.file,\n message: `Package alias for ${entry.packageId} points to a missing file.`,\n })),\n });\n}\n\nexport function inspectPlayableEditorPackageExports(\n packageJson: PlayableEditorPackageExportsLike,\n options: PlayableEditorPackageExportsInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName ?? readString(packageJson.name) ?? '@fps-games/editor';\n const exportPath = options.playableSdkExportPath ?? PLAYABLE_SDK_EXPORT_PATH;\n const upgradeDoctorExportPath = options.playableSdkUpgradeDoctorExportPath ?? PLAYABLE_SDK_UPGRADE_DOCTOR_EXPORT_PATH;\n const viteExportPath = options.playableSdkViteExportPath ?? PLAYABLE_SDK_VITE_EXPORT_PATH;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (!isRecord(packageJson.exports)) {\n diagnostics.push({\n severity: 'error',\n code: 'package.export.invalid',\n source: packageName,\n path: 'exports',\n message: `Package ${packageName} must expose an object exports map.`,\n });\n } else {\n for (const requiredExportPath of [exportPath, upgradeDoctorExportPath, viteExportPath]) {\n const hasExport = requiredExportPath in packageJson.exports;\n const usableTarget = hasExport && (\n requiredExportPath === upgradeDoctorExportPath\n ? isUsableNodePackageExportTarget(packageJson.exports[requiredExportPath])\n : isUsablePackageExportTarget(packageJson.exports[requiredExportPath])\n );\n if (usableTarget) continue;\n diagnostics.push({\n severity: 'error',\n code: hasExport ? 'package.export.invalid-target' : 'package.export.missing',\n source: packageName,\n path: `exports[\"${requiredExportPath}\"]`,\n message: hasExport\n ? `Package ${packageName} has no usable runtime target for the ${requiredExportPath} export.`\n : `Package ${packageName} is missing the ${requiredExportPath} export.`,\n });\n }\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor package exports',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorInstalledVersion(\n packageJson: PlayableEditorInstalledVersionLike,\n options: PlayableEditorInstalledVersionInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const packageName = options.packageName\n ?? readString(packageJson.packageName)\n ?? '@fps-games/editor';\n const declaredVersion = readString(packageJson.declaredVersion);\n const installedVersion = readString(packageJson.installedVersion);\n const source = readString(packageJson.source) ?? packageName;\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n\n if (declaredVersion && installedVersion && isExactDependencyVersion(declaredVersion) && declaredVersion !== installedVersion) {\n diagnostics.push({\n severity: options.exactMismatchSeverity ?? 'error',\n code: 'package.version.installed-mismatch',\n source,\n path: 'dependencies',\n details: { packageName, declaredVersion, installedVersion },\n message: `Project declares ${packageName}@${declaredVersion}, but node_modules contains ${installedVersion}. Reinstall dependencies and restart the dev server.`,\n });\n }\n\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor installed version',\n diagnostics,\n });\n}\n\nexport function createPlayableEditorImportSnapshot(\n files: readonly PlayableEditorImportSnapshotFile[],\n): PlayableEditorImportSnapshot {\n return {\n files: files.map(file => ({\n filePath: file.filePath,\n content: file.content,\n })),\n };\n}\n\nexport function inspectPlayableEditorImportBoundaries(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorImportBoundaryInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const forbiddenPackages = normalizeForbiddenPackages(\n options.forbiddenPackages ?? PLAYABLE_EDITOR_DEFAULT_FORBIDDEN_PACKAGES,\n );\n const forbiddenPackageSeverity = options.forbiddenPackageSeverity ?? 'warning';\n const diagnostics = files.flatMap(file =>\n inspectFileImports(file, forbiddenPackages, forbiddenPackageSeverity),\n );\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor import boundaries',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorMigrationReadiness(\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[],\n options: PlayableEditorMigrationReadinessInspectionOptions = {},\n): PlayableEditorDoctorReport {\n const files: readonly PlayableEditorImportSnapshotFile[] = isImportSnapshot(snapshot)\n ? snapshot.files\n : snapshot;\n const diagnostics = files.flatMap(file => inspectMigrationReadinessFile(file, options));\n return createPlayableEditorDoctorReport({\n title: options.title ?? 'Playable editor hard-cut readiness',\n diagnostics,\n });\n}\n\nexport function inspectPlayableEditorUpgradeReadiness(\n input: PlayableEditorUpgradeReadinessInspectionInput = {},\n): PlayableEditorDoctorReport {\n const reports: PlayableEditorDoctorReport[] = [];\n if (input.hostCompatibility) {\n reports.push(inspectPlayableEditorHostCompatibilityReport(\n input.hostCompatibility.report,\n input.hostCompatibility.options,\n ));\n }\n if (input.packageAliasPlan) {\n reports.push(inspectPlayableEditorPackageAliasPlan(\n input.packageAliasPlan.plan,\n input.packageAliasPlan.fileExists,\n { title: input.packageAliasPlan.title },\n ));\n }\n if (input.packageExports) {\n reports.push(inspectPlayableEditorPackageExports(\n input.packageExports.packageJson,\n input.packageExports.options,\n ));\n }\n if (input.installedVersion) {\n reports.push(inspectPlayableEditorInstalledVersion(\n input.installedVersion.packageJson,\n input.installedVersion.options,\n ));\n }\n if (input.importBoundaries) {\n reports.push(inspectPlayableEditorImportBoundaries(\n input.importBoundaries.snapshot,\n input.importBoundaries.options,\n ));\n }\n if (input.migrationReadiness) {\n reports.push(inspectPlayableEditorMigrationReadiness(\n input.migrationReadiness.snapshot,\n input.migrationReadiness.options,\n ));\n }\n return mergePlayableEditorDoctorReports(reports, {\n title: input.title ?? 'Playable editor upgrade readiness',\n });\n}\n\nfunction inspectMigrationReadinessFile(\n file: PlayableEditorImportSnapshotFile,\n options: PlayableEditorMigrationReadinessInspectionOptions,\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const content = file.content;\n const environmentResourceHardCutSeverity = options.environmentResourceHardCutSeverity ?? 'error';\n if (/\\bassertRuntimeSceneConfig(?:ModulePath|ExportName)\\b/.test(content)) {\n diagnostics.push({\n severity: 'warning',\n code: 'hard-cut.scene-artifact.project-validator-hook-removed',\n path: file.filePath,\n message: 'Removed project SceneArtifact validator hook detected; delete assertRuntimeSceneConfigModulePath/assertRuntimeSceneConfigExportName because @fps-games/editor/playable-sdk now validates the canonical runtime artifact.',\n });\n }\n if (/\\bhierarchyContextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.browser-callbacks-removed',\n path: file.filePath,\n message: 'Removed hierarchyContextActions Browser callback API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bcreateLocalEditorHarness\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.direct-harness',\n path: file.filePath,\n message: 'Removed hierarchy.contextActions API detected; migrate each action to a typed capabilities.hierarchyActions.operations contribution.',\n });\n }\n if (/\\bhierarchyActions\\b/.test(content) && /\\bcontextActions\\b/.test(content)) {\n diagnostics.push({\n severity: options.hierarchyContextActionSeverity ?? 'warning',\n code: 'hard-cut.hierarchy-actions.context-actions-removed',\n path: file.filePath,\n message: 'Removed capabilities.hierarchyActions.contextActions API detected; use capabilities.hierarchyActions.operations.',\n });\n }\n const retiredBypassPattern = new RegExp(`\\\\binstall${'Leg' + 'acy'}AssetCommandBypass\\\\b|__project${'Leg' + 'acy'}AssetBypass`);\n if (retiredBypassPattern.test(content)) {\n diagnostics.push({\n severity: options.retiredAssetBypassSeverity ?? 'error',\n code: 'hard-cut.asset-bypass.retired-helper',\n path: file.filePath,\n message: 'A retired asset command bypass helper was detected; delete it and use product asset capabilities.',\n });\n }\n const retiredRuntimePattern = new RegExp(\n `__bridge${'Leg' + 'acy'}EditorRuntime|register${'Leg' + 'acy'}RuntimeProxy|install${'Leg' + 'acy'}CommandBypass`,\n );\n if (retiredRuntimePattern.test(content)) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.runtime.retired-bridge',\n path: file.filePath,\n message: 'A retired runtime bridge/global was detected; remove it and mount the product editor adapter directly.',\n });\n }\n const deprecatedAuthoredFields = collectDeprecatedAuthoredFields(file.filePath, content);\n for (const field of deprecatedAuthoredFields) {\n diagnostics.push({\n severity: 'error',\n code: 'hard-cut.schema.deprecated-field',\n path: file.filePath,\n details: { field },\n message: `Deprecated authored field ${field} is unsupported; migrate the authored source to the current contract.`,\n });\n }\n if (\n /\\bhandleProjectAssetCommand\\b/.test(content)\n && /\\b(asset\\.import|asset\\.library\\.refresh|editor\\.asset\\.place|ASSET_IMPORT|ASSET_LIBRARY_REFRESH|EDITOR_ASSET_PLACE)\\b/.test(content)\n && !/\\bcreatePlayableProjectAssetCommandHandler\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.projectAssetCommandGlueSeverity ?? 'warning',\n code: 'migration.project-asset-command.local-glue',\n path: file.filePath,\n message: 'Project asset command glue detected; consider createPlayableProjectAssetCommandHandler and keep only project registration/placement policies local.',\n });\n }\n if (\n /\\bimportProjectionModel\\b/.test(content)\n && !/\\bcreateEditorSceneRuntimePreviewImportPlan\\b/.test(content)\n ) {\n diagnostics.push({\n severity: options.runtimePreviewProjectionSeverity ?? 'info',\n code: 'migration.runtime-preview.projection-plan-missing',\n path: file.filePath,\n message: 'Projection import logic is present without the SDK runtime preview import plan helper; verify asset URL and projection diagnostics during migration.',\n });\n }\n diagnostics.push(...collectEnvironmentResourceHardCutDiagnostics(\n file.filePath,\n content,\n environmentResourceHardCutSeverity,\n ));\n return diagnostics;\n}\n\n/**\n * These checks intentionally inspect only project-side migration snapshots. They\n * flag retired public integration shapes, not generic material texture fields or\n * plugin registration order; those are validated by the product contract tests.\n */\nfunction collectEnvironmentResourceHardCutDiagnostics(\n filePath: string,\n content: string,\n severity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n const add = (code: string, message: string) => diagnostics.push({\n severity,\n code,\n path: filePath,\n message,\n });\n\n const hasBabylonRendererSurface = /\\b(?:FpsBabylonRendererContext|FpsBabylonRendererPluginConfig|BabylonEnvironmentTexture(?:Profile|Factory)|createFpsBabylon(?:GameWorldPluginLifecycle|RendererHost))\\b/.test(content);\n if (/\\bresolveAssetUrl\\b/.test(content) && hasBabylonRendererSurface) {\n add(\n 'hard-cut.environment-resource.resolve-asset-url-removed',\n 'Removed Babylon resolveAssetUrl integration detected; pass the generated asset catalog to the Host and resolve a PlayableResolvedAssetResource through the Assets Plugin service.',\n );\n }\n if (/\\bFpsBabylonRendererPluginConfig\\b/.test(content) && /\\benvironmentTexture\\s*:/.test(content)) {\n add(\n 'hard-cut.environment-resource.renderer-environment-texture-removed',\n 'Removed FpsBabylonRendererPluginConfig.environmentTexture fallback detected; authored rendering must resolve through the catalog-backed resource service.',\n );\n }\n if (/\\bBabylonEnvironmentTextureProfile\\s*\\{[^}]*\\btextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.profile-texture-url-removed',\n 'Removed BabylonEnvironmentTextureProfile.textureUrl shape detected; use profile.texture: PlayableResolvedAssetResource | null.',\n );\n }\n if (/\\bBabylonEnvironmentTextureFactory\\b/.test(content) && /\\b(?:textureUrl|url)\\s*:\\s*(?:string|String)\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.url-factory-removed',\n 'Removed URL-only BabylonEnvironmentTextureFactory contract detected; the factory must receive a PlayableResolvedAssetResource so it can preserve the asset format.',\n );\n }\n if (/\\bresolvePlayableBabylonRenderingEnvironmentTextureUrl\\b/.test(content)) {\n add(\n 'hard-cut.environment-resource.resolve-url-helper-removed',\n 'Removed resolvePlayableBabylonRenderingEnvironmentTextureUrl helper detected; use resolvePlayableBabylonRenderingEnvironmentTextureResource.',\n );\n }\n if (isGeneratedAssetCatalogFile(filePath, content) && !hasGeneratedAssetCatalogFormat(content)) {\n add(\n 'hard-cut.environment-resource.generated-catalog-format-missing',\n 'Generated asset catalog is missing the required format field; regenerate it with the current playable SDK instead of editing catalog output by hand.',\n );\n }\n if (hasBabylonHostFactoryCall(content) && !hasCatalogSourceReference(content)) {\n add(\n 'hard-cut.environment-resource.host-catalog-source-missing',\n 'Babylon Runtime/Renderer Host construction has no generated asset catalog input; pass the catalog source so plugin-assets can provide the shared resource resolver.',\n );\n }\n return diagnostics;\n}\n\nfunction isGeneratedAssetCatalogFile(filePath: string, content: string): boolean {\n return /(?:^|\\/)asset-catalog(?:\\.generated)?\\.[cm]?[jt]s$/i.test(normalizeFilePath(filePath))\n || (\n /\\binterface\\s+GeneratedAssetCatalogEntry\\b/.test(content)\n && /\\b(?:export\\s+)?const\\s+GENERATED_ASSET_CATALOG\\b/.test(content)\n );\n}\n\nfunction hasGeneratedAssetCatalogFormat(content: string): boolean {\n return /\\bformat\\s*:\\s*(?:string|[\"'`][^\"'`]+[\"'`])/.test(content);\n}\n\nfunction hasBabylonHostFactoryCall(content: string): boolean {\n return /\\b(?:createFpsRuntime|createFpsBabylonGameWorldPluginLifecycle|createFpsBabylonRendererHost)\\s*\\(/.test(content);\n}\n\nfunction hasCatalogSourceReference(content: string): boolean {\n return /\\b(?:assetCatalog(?:Source)?|generatedAssetCatalog|GENERATED_ASSET_CATALOG)\\b/.test(content);\n}\n\nfunction collectDeprecatedAuthoredFields(filePath: string, content: string): string[] {\n if (/\\.json$/i.test(filePath)) {\n try {\n const value = JSON.parse(content) as unknown;\n const fields = new Set<string>();\n collectDeprecatedJsonFields(value, [], fields);\n return [...fields];\n } catch {\n return [];\n }\n }\n // Authored scene schemas are structured JSON. TypeScript project code is\n // covered by import/runtime checks and must not be guessed through regexes.\n return [];\n}\n\nfunction collectDeprecatedJsonFields(value: unknown, path: string[], fields: Set<string>): void {\n if (Array.isArray(value)) {\n value.forEach(entry => collectDeprecatedJsonFields(entry, path, fields));\n return;\n }\n if (!isRecord(value)) return;\n for (const field of ['shadowMode', 'sceneInstances', 'modelRegistry', 'childMaterialBindings', 'childMaterials', 'useBlobShadow', 'blobSettings']) {\n if (field in value) fields.add(field);\n }\n if (path[path.length - 1] === 'globalVolume') {\n for (const field of ['samples', 'camera', 'lights']) {\n if (field in value) fields.add(`globalVolume.${field}`);\n }\n }\n if (value.kind === 'box' && path.slice(-2).join('.') === 'marker.geometry') {\n for (const field of ['coordinateSpace', 'center', 'size', 'rotation']) if (field in value) fields.add(`marker.geometry.${field}`);\n }\n if (path.slice(-3).join('.') === 'shadows.staticProjected.bake') {\n for (const field of ['resolution', 'maxSize']) if (field in value) fields.add(`shadows.staticProjected.bake.${field}`);\n }\n if (path.slice(-2).join('.') === 'globalVolume.environment') {\n for (const field of ['textureAssetId', 'textureUrl', 'intensity']) if (field in value) fields.add(`globalVolume.environment.${field}`);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key !== 'metadata') collectDeprecatedJsonFields(child, [...path, key], fields);\n }\n}\n\nfunction inspectFileImports(\n file: PlayableEditorImportSnapshotFile,\n forbiddenPackages: readonly string[],\n forbiddenPackageSeverity: PlayableEditorDoctorDiagnostic['severity'],\n): PlayableEditorDoctorDiagnostic[] {\n const diagnostics: PlayableEditorDoctorDiagnostic[] = [];\n let imports: string[];\n try {\n imports = readImportSpecifiers(file.content, file.filePath);\n } catch (error) {\n return [{\n severity: 'error',\n code: 'import.boundary.parse-error',\n path: file.filePath,\n message: `Unable to parse project module for import-boundary validation: ${error instanceof Error ? error.message : String(error)}`,\n }];\n }\n for (const specifier of imports) {\n if (specifier === PLAYABLE_RUNTIME_SUBPATH || specifier === PLAYABLE_RUNTIME_BABYLON_SUBPATH) continue;\n if (specifier === '@fps-games/editor' && isPublicEditorProductEntryFile(file.filePath)) continue;\n if (specifier === '@fps-games/editor/vite' && (isViteConfigFile(file.filePath) || isProjectScriptFile(file.filePath))) continue;\n if (specifier.startsWith(PLAYABLE_SDK_SUBPATH_PREFIX)) {\n const isAllowedUpgradeDoctorSubpath =\n specifier === PLAYABLE_SDK_UPGRADE_DOCTOR_SUBPATH\n && isProjectScriptFile(file.filePath);\n const isAllowedViteSubpath =\n specifier === PLAYABLE_SDK_VITE_SUBPATH\n && (\n isViteConfigFile(file.filePath)\n || isProjectScriptFile(file.filePath)\n );\n if (isAllowedUpgradeDoctorSubpath || isAllowedViteSubpath) {\n continue;\n }\n diagnostics.push({\n severity: 'error',\n code: 'import.boundary.playable-sdk-subpath',\n source: specifier,\n path: file.filePath,\n message: 'Import @fps-games/editor/playable-sdk only through the public aggregate subpath.',\n });\n continue;\n }\n const directEditorPackage = findMatchingForbiddenPackage(specifier, DIRECT_EDITOR_IMPORTS);\n if (directEditorPackage && specifier !== '@fps-games/editor/playable-sdk') {\n diagnostics.push({\n severity: 'error',\n code: directEditorPackage === '@fps-games/editor'\n ? 'import.boundary.direct-editor'\n : 'import.boundary.direct-editor-core',\n source: specifier,\n path: file.filePath,\n message: `New playable editor integration code should import stable contracts from @fps-games/editor/playable-sdk instead of ${specifier}.`,\n });\n continue;\n }\n const forbiddenPackage = findMatchingForbiddenPackage(specifier, forbiddenPackages);\n if (forbiddenPackage) {\n diagnostics.push({\n severity: forbiddenPackageSeverity,\n code: 'import.boundary.forbidden-package',\n source: specifier,\n path: file.filePath,\n details: { packageName: forbiddenPackage },\n message: `Import ${forbiddenPackage} directly couples to editor internals. Consider using @fps-games/editor/playable-sdk facade exports instead.`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction isViteConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return !normalized.includes('/') && /^vite\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isPublicEditorProductEntryFile(filePath: string): boolean {\n if (isFpsConfigFile(filePath) || isProjectScriptFile(filePath)) return true;\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)src\\/(?:editor-features|services\\/fps-game-editor)\\/plugin-host\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction isFpsConfigFile(filePath: string): boolean {\n const normalized = normalizeFilePath(filePath);\n return /(?:^|\\/)fps\\.config\\.(?:[cm]?[jt]s)$/.test(normalized);\n}\n\nfunction normalizeForbiddenPackages(packages: readonly string[]): string[] {\n const normalized: string[] = [];\n for (const packageName of packages) {\n const trimmed = packageName.trim();\n if (trimmed.length > 0 && !normalized.includes(trimmed)) {\n normalized.push(trimmed);\n }\n }\n return normalized;\n}\n\nfunction findMatchingForbiddenPackage(specifier: string, forbiddenPackages: readonly string[]): string | undefined {\n return forbiddenPackages.find(packageName => specifier === packageName || specifier.startsWith(`${packageName}/`));\n}\n\nfunction readImportSpecifiers(content: string, filePath: string): string[] {\n const supportsJsx = /\\.[cm]?[jt]sx$/i.test(filePath);\n const root = parse(content, {\n sourceType: 'unambiguous',\n allowAwaitOutsideFunction: true,\n allowReturnOutsideFunction: true,\n plugins: [\n 'typescript',\n ...(supportsJsx ? ['jsx' as const] : []),\n 'decorators',\n 'importAttributes',\n ],\n });\n const specifiers: string[] = [];\n visitBabelNode(root, (node) => {\n const type = readBabelNodeType(node);\n if (type === 'ImportDeclaration' || type === 'ExportNamedDeclaration' || type === 'ExportAllDeclaration') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'ImportExpression') {\n const source = readBabelStaticString(node.source);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSExternalModuleReference') {\n const source = readBabelStaticString(node.expression);\n if (source) specifiers.push(source);\n return;\n }\n if (type === 'TSImportType') {\n const source = readBabelStaticString(node.argument);\n if (source) specifiers.push(source);\n return;\n }\n if (type !== 'CallExpression' && type !== 'OptionalCallExpression') return;\n if (!isBabelStaticModuleLoader(node.callee)) return;\n const source = readBabelStaticString(Array.isArray(node.arguments) ? node.arguments[0] : null);\n if (source) specifiers.push(source);\n });\n return specifiers;\n}\n\nfunction visitBabelNode(value: unknown, visit: (node: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const entry of value) visitBabelNode(entry, visit);\n return;\n }\n if (!isRecord(value) || typeof value.type !== 'string') return;\n visit(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'loc' || key === 'start' || key === 'end' || key === 'extra' || key === 'comments' || key === 'tokens') continue;\n visitBabelNode(child, visit);\n }\n}\n\nfunction readBabelNodeType(value: unknown): string | null {\n return isRecord(value) && typeof value.type === 'string' ? value.type : null;\n}\n\nfunction readBabelStaticString(value: unknown): string | null {\n if (!isRecord(value)) return null;\n if (value.type === 'StringLiteral' && typeof value.value === 'string') return value.value;\n if (value.type === 'TemplateLiteral' && Array.isArray(value.expressions) && value.expressions.length === 0) {\n const quasi = Array.isArray(value.quasis) ? value.quasis[0] : null;\n const cooked = isRecord(quasi) && isRecord(quasi.value) ? quasi.value.cooked : null;\n return typeof cooked === 'string' ? cooked : null;\n }\n return null;\n}\n\nfunction isBabelStaticModuleLoader(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === 'Import') return true;\n if (value.type === 'Identifier') return value.name === 'require';\n if (value.type !== 'MemberExpression' && value.type !== 'OptionalMemberExpression') return false;\n const objectName = readBabelIdentifierName(value.object);\n const propertyName = value.computed\n ? readBabelStaticString(value.property)\n : readBabelIdentifierName(value.property);\n return (objectName === 'module' && propertyName === 'require')\n || (objectName === 'require' && propertyName === 'resolve');\n}\n\nfunction readBabelIdentifierName(value: unknown): string | null {\n return isRecord(value) && value.type === 'Identifier' && typeof value.name === 'string' ? value.name : null;\n}\n\nfunction isUsablePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') {\n if (!/^\\.\\/.+\\.(?:[cm]?js|json|node)$/.test(value)) return false;\n return value.slice(2).split('/').every(isUsablePackageTargetSegment);\n }\n if (Array.isArray(value)) return value.some(isUsablePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n return entries.some(([condition, target]) => condition !== 'types' && isUsablePackageExportTarget(target));\n}\n\nfunction isUsableNodePackageExportTarget(value: unknown): boolean {\n if (typeof value === 'string') return isUsablePackageExportTarget(value);\n if (Array.isArray(value)) return value.some(isUsableNodePackageExportTarget);\n if (!isRecord(value)) return false;\n const entries = Object.entries(value);\n if (entries.some(([condition]) => !/^[A-Za-z][A-Za-z0-9_-]*$/.test(condition))) return false;\n for (const [condition, target] of entries) {\n if (condition !== 'node' && condition !== 'import' && condition !== 'default') continue;\n return isUsableNodePackageExportTarget(target);\n }\n return false;\n}\n\nfunction isUsablePackageTargetSegment(segment: string): boolean {\n if (!segment) return false;\n try {\n const decoded = decodeURIComponent(segment);\n return decoded !== '.'\n && decoded !== '..'\n && decoded.toLowerCase() !== 'node_modules'\n && !decoded.includes('/')\n && !decoded.includes('\\\\');\n } catch {\n return false;\n }\n}\n\nfunction isProjectScriptFile(filePath: string): boolean {\n return normalizeFilePath(filePath).startsWith('scripts/');\n}\n\nfunction normalizeFilePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/').replace(/\\/+/g, '/').replace(/^\\.\\//, '');\n}\n\nfunction isExactDependencyVersion(value: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)*)?$/.test(value.trim());\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction readSeverity(value: unknown): PlayableEditorDoctorDiagnostic['severity'] | undefined {\n return value === 'error' || value === 'warning' || value === 'info' ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isImportSnapshot(value: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[]): value is PlayableEditorImportSnapshot {\n return isRecord(value) && Array.isArray(value.files);\n}\n"]}
|
|
@@ -57,6 +57,8 @@ export interface PlayableEditorMigrationReadinessInspectionOptions {
|
|
|
57
57
|
retiredAssetBypassSeverity?: PlayableEditorDoctorSeverity;
|
|
58
58
|
projectAssetCommandGlueSeverity?: PlayableEditorDoctorSeverity;
|
|
59
59
|
runtimePreviewProjectionSeverity?: PlayableEditorDoctorSeverity;
|
|
60
|
+
/** Severity for the Issue #565 catalog-backed environment resource hard cut. Defaults to 'error'. */
|
|
61
|
+
environmentResourceHardCutSeverity?: PlayableEditorDoctorSeverity;
|
|
60
62
|
}
|
|
61
63
|
export interface PlayableEditorHostCompatibilityDiagnosticLike {
|
|
62
64
|
severity?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upgrade-doctor/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,6CAA6C;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,+CAA+C;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;CACtD;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,gCAAgC,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,6CAA6C;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,qEAAqE;IACrE,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;CACzD;AAED,MAAM,WAAW,iDAAiD;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B,CAAC,EAAE,4BAA4B,CAAC;IAC9D,0BAA0B,CAAC,EAAE,4BAA4B,CAAC;IAC1D,+BAA+B,CAAC,EAAE,4BAA4B,CAAC;IAC/D,gCAAgC,CAAC,EAAE,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/upgrade-doctor/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/upgrade-doctor/types.ts"],"names":[],"mappings":"","sourcesContent":["export type PlayableEditorDoctorSeverity = 'error' | 'warning' | 'info';\n\nexport interface PlayableEditorDoctorDiagnostic {\n severity: PlayableEditorDoctorSeverity;\n code: string;\n message: string;\n path?: string;\n source?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface PlayableEditorDoctorReport {\n title: string;\n ok: boolean;\n diagnostics: PlayableEditorDoctorDiagnostic[];\n}\n\nexport interface PlayableEditorDoctorReportInput {\n title?: string;\n diagnostics?: readonly PlayableEditorDoctorDiagnostic[];\n}\n\nexport interface PlayableEditorPackageExportsInspectionOptions {\n title?: string;\n packageName?: string;\n playableSdkExportPath?: string;\n playableSdkUpgradeDoctorExportPath?: string;\n playableSdkViteExportPath?: string;\n}\n\nexport interface PlayableEditorPackageExportsLike {\n name?: unknown;\n exports?: unknown;\n}\n\nexport interface PlayableEditorInstalledVersionLike {\n packageName?: unknown;\n declaredVersion?: unknown;\n installedVersion?: unknown;\n source?: unknown;\n}\n\nexport interface PlayableEditorInstalledVersionInspectionOptions {\n title?: string;\n packageName?: string;\n exactMismatchSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorImportSnapshotFile {\n filePath: string;\n content: string;\n}\n\nexport interface PlayableEditorImportSnapshot {\n files: PlayableEditorImportSnapshotFile[];\n}\n\nexport interface PlayableEditorImportBoundaryInspectionOptions {\n title?: string;\n forbiddenPackages?: readonly string[];\n /** Severity for forbidden package imports. Defaults to 'warning'. */\n forbiddenPackageSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorMigrationReadinessInspectionOptions {\n title?: string;\n hierarchyContextActionSeverity?: PlayableEditorDoctorSeverity;\n retiredAssetBypassSeverity?: PlayableEditorDoctorSeverity;\n projectAssetCommandGlueSeverity?: PlayableEditorDoctorSeverity;\n runtimePreviewProjectionSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorHostCompatibilityDiagnosticLike {\n severity?: unknown;\n code?: unknown;\n message?: unknown;\n path?: unknown;\n}\n\nexport interface PlayableEditorHostCompatibilityReportLike {\n diagnostics?: unknown;\n}\n\nexport interface PlayableEditorHostCompatibilityInspectionOptions {\n title?: string;\n source?: string;\n}\n\nexport interface PlayableEditorPackageAliasPlanInspectionInput {\n plan: import('../package-resolution/index').PlayableEditorPackageAliasPlan;\n fileExists: import('../package-resolution/index').PlayableEditorFileExists;\n title?: string;\n}\n\nexport interface PlayableEditorUpgradeReadinessInspectionInput {\n title?: string;\n hostCompatibility?: {\n report: PlayableEditorHostCompatibilityReportLike;\n options?: PlayableEditorHostCompatibilityInspectionOptions;\n };\n packageAliasPlan?: PlayableEditorPackageAliasPlanInspectionInput;\n packageExports?: {\n packageJson: PlayableEditorPackageExportsLike;\n options?: PlayableEditorPackageExportsInspectionOptions;\n };\n installedVersion?: {\n packageJson: PlayableEditorInstalledVersionLike;\n options?: PlayableEditorInstalledVersionInspectionOptions;\n };\n importBoundaries?: {\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[];\n options?: PlayableEditorImportBoundaryInspectionOptions;\n };\n migrationReadiness?: {\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[];\n options?: PlayableEditorMigrationReadinessInspectionOptions;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/upgrade-doctor/types.ts"],"names":[],"mappings":"","sourcesContent":["export type PlayableEditorDoctorSeverity = 'error' | 'warning' | 'info';\n\nexport interface PlayableEditorDoctorDiagnostic {\n severity: PlayableEditorDoctorSeverity;\n code: string;\n message: string;\n path?: string;\n source?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface PlayableEditorDoctorReport {\n title: string;\n ok: boolean;\n diagnostics: PlayableEditorDoctorDiagnostic[];\n}\n\nexport interface PlayableEditorDoctorReportInput {\n title?: string;\n diagnostics?: readonly PlayableEditorDoctorDiagnostic[];\n}\n\nexport interface PlayableEditorPackageExportsInspectionOptions {\n title?: string;\n packageName?: string;\n playableSdkExportPath?: string;\n playableSdkUpgradeDoctorExportPath?: string;\n playableSdkViteExportPath?: string;\n}\n\nexport interface PlayableEditorPackageExportsLike {\n name?: unknown;\n exports?: unknown;\n}\n\nexport interface PlayableEditorInstalledVersionLike {\n packageName?: unknown;\n declaredVersion?: unknown;\n installedVersion?: unknown;\n source?: unknown;\n}\n\nexport interface PlayableEditorInstalledVersionInspectionOptions {\n title?: string;\n packageName?: string;\n exactMismatchSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorImportSnapshotFile {\n filePath: string;\n content: string;\n}\n\nexport interface PlayableEditorImportSnapshot {\n files: PlayableEditorImportSnapshotFile[];\n}\n\nexport interface PlayableEditorImportBoundaryInspectionOptions {\n title?: string;\n forbiddenPackages?: readonly string[];\n /** Severity for forbidden package imports. Defaults to 'warning'. */\n forbiddenPackageSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorMigrationReadinessInspectionOptions {\n title?: string;\n hierarchyContextActionSeverity?: PlayableEditorDoctorSeverity;\n retiredAssetBypassSeverity?: PlayableEditorDoctorSeverity;\n projectAssetCommandGlueSeverity?: PlayableEditorDoctorSeverity;\n runtimePreviewProjectionSeverity?: PlayableEditorDoctorSeverity;\n /** Severity for the Issue #565 catalog-backed environment resource hard cut. Defaults to 'error'. */\n environmentResourceHardCutSeverity?: PlayableEditorDoctorSeverity;\n}\n\nexport interface PlayableEditorHostCompatibilityDiagnosticLike {\n severity?: unknown;\n code?: unknown;\n message?: unknown;\n path?: unknown;\n}\n\nexport interface PlayableEditorHostCompatibilityReportLike {\n diagnostics?: unknown;\n}\n\nexport interface PlayableEditorHostCompatibilityInspectionOptions {\n title?: string;\n source?: string;\n}\n\nexport interface PlayableEditorPackageAliasPlanInspectionInput {\n plan: import('../package-resolution/index').PlayableEditorPackageAliasPlan;\n fileExists: import('../package-resolution/index').PlayableEditorFileExists;\n title?: string;\n}\n\nexport interface PlayableEditorUpgradeReadinessInspectionInput {\n title?: string;\n hostCompatibility?: {\n report: PlayableEditorHostCompatibilityReportLike;\n options?: PlayableEditorHostCompatibilityInspectionOptions;\n };\n packageAliasPlan?: PlayableEditorPackageAliasPlanInspectionInput;\n packageExports?: {\n packageJson: PlayableEditorPackageExportsLike;\n options?: PlayableEditorPackageExportsInspectionOptions;\n };\n installedVersion?: {\n packageJson: PlayableEditorInstalledVersionLike;\n options?: PlayableEditorInstalledVersionInspectionOptions;\n };\n importBoundaries?: {\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[];\n options?: PlayableEditorImportBoundaryInspectionOptions;\n };\n migrationReadiness?: {\n snapshot: PlayableEditorImportSnapshot | readonly PlayableEditorImportSnapshotFile[];\n options?: PlayableEditorMigrationReadinessInspectionOptions;\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fps-games/editor-playable-sdk",
|
|
3
|
-
"version": "0.2.1-beta.
|
|
3
|
+
"version": "0.2.1-beta.3",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Playable project integration SDK for fps-game-editor.",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@babel/parser": "^7.28.5",
|
|
30
|
-
"@fps-games/editor-core": "0.2.1-beta.
|
|
31
|
-
"@fps-games/editor-protocol": "0.2.1-beta.
|
|
32
|
-
"@fps-games/playable-assets": "0.2.1-beta.
|
|
33
|
-
"@fps-games/playable-rendering": "0.2.1-beta.
|
|
34
|
-
"@fps-games/plugin-api": "0.2.1-beta.
|
|
30
|
+
"@fps-games/editor-core": "0.2.1-beta.3",
|
|
31
|
+
"@fps-games/editor-protocol": "0.2.1-beta.3",
|
|
32
|
+
"@fps-games/playable-assets": "0.2.1-beta.3",
|
|
33
|
+
"@fps-games/playable-rendering": "0.2.1-beta.3",
|
|
34
|
+
"@fps-games/plugin-api": "0.2.1-beta.3"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"vite": "^5.4.21"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fps-games/editor-protocol",
|
|
3
|
-
"version": "0.2.1-beta.
|
|
3
|
+
"version": "0.2.1-beta.3",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Shared protocol types for fps-game-editor runtimes, adapters, and Forge Play bridges.",
|
|
@@ -14,6 +14,6 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@fps-games/playable-contracts": "0.2.1-beta.
|
|
17
|
+
"@fps-games/playable-contracts": "0.2.1-beta.3"
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fps-games/editor-tooling",
|
|
3
|
-
"version": "0.2.1-beta.
|
|
3
|
+
"version": "0.2.1-beta.3",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Static Plugin manifest planning and tooling host for fps-game-editor.",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@fps-games/plugin-api": "0.2.1-beta.
|
|
26
|
-
"@fps-games/plugin-host": "0.2.1-beta.
|
|
25
|
+
"@fps-games/plugin-api": "0.2.1-beta.3",
|
|
26
|
+
"@fps-games/plugin-host": "0.2.1-beta.3"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"vite": "^5.4.21"
|