import type { STDExtensionOption } from '../registry/extension/types';
import type { Graph } from '../runtime/graph';
import type { TransformOptions } from '../spec/transform';
/**
* 将模块配置项转换为标准模块格式
*
* Convert extension options to standard format
* @param graph - 图实例 graph instance
* @param category - 模块类型 extension type
* @param extensions - 模块配置项 extension options
* @returns 标准模块配置项 Standard extension options
*/
export function parseExtensions(graph: Graph, category: string, extensions: TransformOptions): STDExtensionOption[] {
const counter: Record = {};
const getKey = (type: string) => {
if (!(type in counter)) counter[type] = 0;
return `${category}-${type}-${counter[type]++}`;
};
return extensions.map((extension) => {
if (typeof extension === 'string') {
return { type: extension, key: getKey(extension) };
}
if (typeof extension === 'function') {
return extension.call(graph);
}
if (extension.key) return extension;
return { ...extension, key: getKey(extension.type!) };
}) as STDExtensionOption[];
}