Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/core/assets/asset-handler/assets/javascript.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -18,7 +19,7 @@ export const JavascriptHandler: AssetHandlerBase = {

importer: {
// 版本号如果变更,则会强制重新导入
version: '4.0.24',
version: '4.0.25',

/**
* 实际导入流程
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
]));
}
25 changes: 25 additions & 0 deletions src/core/assets/test/plugin-script-globals.test.ts
Original file line number Diff line number Diff line change
@@ -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',
]);
});
});
Loading