@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
72 lines (71 loc) • 2.66 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
/**
* 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) {
var merged = {};
var _iterator = _createForOfIteratorHelper(externalsArray),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var externals = _step.value;
var _loop = function _loop() {
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
modulePath = _Object$entries$_i[0],
imports = _Object$entries$_i[1];
if (!merged[modulePath]) {
// First time seeing this module, copy all imports
merged[modulePath] = _toConsumableArray(imports);
} else {
// Module already exists, merge imports and deduplicate
var existingImports = merged[modulePath];
var newImports = imports.filter(function (newImport) {
// Check if this import already exists (same name, type, and isType)
return !existingImports.some(function (existingImport) {
return existingImport.name === newImport.name && existingImport.type === newImport.type && existingImport.isType === newImport.isType;
});
});
// Add only the new imports that don't already exist
merged[modulePath] = [].concat(_toConsumableArray(existingImports), _toConsumableArray(newImports));
}
};
for (var _i = 0, _Object$entries = Object.entries(externals); _i < _Object$entries.length; _i++) {
_loop();
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return merged;
}