UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

52 lines (51 loc) 1.81 kB
/** * Merges multiple externals objects into a single object, combining imports from the same module. * Deduplicates imports by name and type within each module. * * @param externalsArray Array of externals objects to merge * @returns Merged externals object * * @example * ```typescript * const externals1 = { * 'react': [{ name: 'React', type: 'default' }], * 'lodash': [{ name: 'map', type: 'named' }] * }; * * const externals2 = { * 'react': [{ name: 'useState', type: 'named' }], * 'lodash': [{ name: 'map', type: 'named' }] // duplicate - will be removed * }; * * const merged = mergeExternals([externals1, externals2]); * // Result: * // { * // 'react': [ * // { name: 'React', type: 'default' }, * // { name: 'useState', type: 'named' } * // ], * // 'lodash': [{ name: 'map', type: 'named' }] * // } * ``` */ export function mergeExternals(externalsArray) { const merged = {}; for (const externals of externalsArray) { for (const [modulePath, imports] of Object.entries(externals)) { if (!merged[modulePath]) { // First time seeing this module, copy all imports merged[modulePath] = [...imports]; } else { // Module already exists, merge imports and deduplicate const existingImports = merged[modulePath]; const newImports = imports.filter(newImport => { // Check if this import already exists (same name, type, and isType) return !existingImports.some(existingImport => existingImport.name === newImport.name && existingImport.type === newImport.type && existingImport.isType === newImport.isType); }); // Add only the new imports that don't already exist merged[modulePath] = [...existingImports, ...newImports]; } } } return merged; }