From 648bb2e63e8b3cde534f78f30bca743552a8cfd9 Mon Sep 17 00:00:00 2001 From: shi <1611699255@qq.com> Date: Fri, 28 Aug 2026 16:00:34 +0800 Subject: [PATCH 1/2] fix(asset): restore plugin script global aliases --- .../assets/asset-handler/assets/javascript.ts | 5 ++-- .../assets/utils/plugin-script-globals.ts | 13 ++++++++++ .../assets/test/plugin-script-globals.test.ts | 25 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts create mode 100644 src/core/assets/test/plugin-script-globals.test.ts diff --git a/src/core/assets/asset-handler/assets/javascript.ts b/src/core/assets/asset-handler/assets/javascript.ts index 85bcd8585..34aa48bd8 100644 --- a/src/core/assets/asset-handler/assets/javascript.ts +++ b/src/core/assets/asset-handler/assets/javascript.ts @@ -1,6 +1,7 @@ import { Asset, VirtualAsset } from '@cocos/asset-db'; import { readFile } from 'fs-extra'; import { transformPluginScript } from './utils/script-compiler'; +import { resolveSimulatedGlobals } from './utils/plugin-script-globals'; import { openCode } from '../utils'; import { AssetHandlerBase } from '../../@types/protected'; import { JavaScriptAssetUserData, PluginScriptUserData } from '../../@types/userDatas'; @@ -18,7 +19,7 @@ export const JavascriptHandler: AssetHandlerBase = { importer: { // 版本号如果变更,则会强制重新导入 - version: '4.0.24', + version: '4.0.25', /** * 实际导入流程 @@ -102,7 +103,7 @@ async function _importPluginScript(asset: Asset) { return true; } - const simulateGlobalNames: string[] = simulateGlobals === undefined ? ['self', 'window', 'global', 'globalThis'] : simulateGlobals; + const simulateGlobalNames = resolveSimulatedGlobals(simulateGlobals); const transformed = await transformPluginScript(code, { simulateGlobals: simulateGlobalNames, diff --git a/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts b/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts new file mode 100644 index 000000000..fe2e881dd --- /dev/null +++ b/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts @@ -0,0 +1,13 @@ +/** Default aliases made available to enclosed plugin scripts. */ +export const DEFAULT_SIMULATED_GLOBALS = ['self', 'window', 'global', 'globalThis'] as const; + +/** + * Resolves persisted plugin aliases while tolerating metadata written by older PinK versions. + */ +export function resolveSimulatedGlobals(value: unknown): string[] { + const customGlobals = Array.isArray(value) ? value : []; + return Array.from(new Set([ + ...DEFAULT_SIMULATED_GLOBALS, + ...customGlobals, + ])); +} diff --git a/src/core/assets/test/plugin-script-globals.test.ts b/src/core/assets/test/plugin-script-globals.test.ts new file mode 100644 index 000000000..5e0948ad4 --- /dev/null +++ b/src/core/assets/test/plugin-script-globals.test.ts @@ -0,0 +1,25 @@ +import { DEFAULT_SIMULATED_GLOBALS, resolveSimulatedGlobals } from '../asset-handler/assets/utils/plugin-script-globals'; + +describe('plugin script globals', () => { + test('uses the default aliases when no custom aliases are stored', () => { + expect(resolveSimulatedGlobals(undefined)).toEqual(DEFAULT_SIMULATED_GLOBALS); + }); + + test('appends custom aliases after the defaults', () => { + expect(resolveSimulatedGlobals(['PINK_PLUGIN_ALIAS'])).toEqual([ + ...DEFAULT_SIMULATED_GLOBALS, + 'PINK_PLUGIN_ALIAS', + ]); + }); + + test('treats legacy boolean metadata as no custom aliases', () => { + expect(resolveSimulatedGlobals(true)).toEqual(DEFAULT_SIMULATED_GLOBALS); + }); + + test('deduplicates default and custom aliases', () => { + expect(resolveSimulatedGlobals(['window', 'PINK_PLUGIN_ALIAS', 'PINK_PLUGIN_ALIAS'])).toEqual([ + ...DEFAULT_SIMULATED_GLOBALS, + 'PINK_PLUGIN_ALIAS', + ]); + }); +}); From 2d0e9ce260aa9f0acfacf14bfcbfc036bda96bb9 Mon Sep 17 00:00:00 2001 From: shi <1611699255@qq.com> Date: Fri, 28 Aug 2026 20:08:42 +0800 Subject: [PATCH 2/2] fix(asset): preserve disabled plugin aliases --- src/core/assets/asset-handler/assets/javascript.ts | 2 +- .../asset-handler/assets/utils/plugin-script-globals.ts | 4 ++++ src/core/assets/test/plugin-script-globals.test.ts | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/assets/asset-handler/assets/javascript.ts b/src/core/assets/asset-handler/assets/javascript.ts index 34aa48bd8..280ce8ba0 100644 --- a/src/core/assets/asset-handler/assets/javascript.ts +++ b/src/core/assets/asset-handler/assets/javascript.ts @@ -19,7 +19,7 @@ export const JavascriptHandler: AssetHandlerBase = { importer: { // 版本号如果变更,则会强制重新导入 - version: '4.0.25', + version: '4.0.24', /** * 实际导入流程 diff --git a/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts b/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts index fe2e881dd..540e3abae 100644 --- a/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts +++ b/src/core/assets/asset-handler/assets/utils/plugin-script-globals.ts @@ -5,6 +5,10 @@ export const DEFAULT_SIMULATED_GLOBALS = ['self', 'window', 'global', 'globalThi * Resolves persisted plugin aliases while tolerating metadata written by older PinK versions. */ export function resolveSimulatedGlobals(value: unknown): string[] { + if (value === false || (Array.isArray(value) && value.length === 0)) { + return []; + } + const customGlobals = Array.isArray(value) ? value : []; return Array.from(new Set([ ...DEFAULT_SIMULATED_GLOBALS, diff --git a/src/core/assets/test/plugin-script-globals.test.ts b/src/core/assets/test/plugin-script-globals.test.ts index 5e0948ad4..f4d4f3345 100644 --- a/src/core/assets/test/plugin-script-globals.test.ts +++ b/src/core/assets/test/plugin-script-globals.test.ts @@ -16,6 +16,14 @@ describe('plugin script globals', () => { expect(resolveSimulatedGlobals(true)).toEqual(DEFAULT_SIMULATED_GLOBALS); }); + test('preserves an empty alias array as disabled aliases', () => { + expect(resolveSimulatedGlobals([])).toEqual([]); + }); + + test('preserves legacy false metadata as disabled aliases', () => { + expect(resolveSimulatedGlobals(false)).toEqual([]); + }); + test('deduplicates default and custom aliases', () => { expect(resolveSimulatedGlobals(['window', 'PINK_PLUGIN_ALIAS', 'PINK_PLUGIN_ALIAS'])).toEqual([ ...DEFAULT_SIMULATED_GLOBALS,