UNPKG

liferay-npm-bundler-preset-reactjs

Version:

liferay npm bundler preset react

70 lines (69 loc) 2.84 kB
"use strict"; /** * SPDX-FileCopyrightText: © 2020 Liferay, Inc. <https://liferay.com> * SPDX-License-Identifier: LGPL-3.0-or-later */ Object.defineProperty(exports, "__esModule", { value: true }); exports.unrollImportsConfig = exports.normalizeImportsConfig = void 0; /** * Normalize an imports configuration to canonicalize all syntactic sugar. * @param importsConfig the configuration in its original format * @param useSlashFormat whether to use slash or empty string format for * provider packages version constraints * @return the normalized configuration after resolving all syntactic sugar */ function normalizeImportsConfig(importsConfig, useSlashFormat = false) { const normalized = {}; // Normalize to empty-string format Object.keys(importsConfig).forEach((namespace) => { Object.keys(importsConfig[namespace]).forEach((pkgName) => { const version = importsConfig[namespace][pkgName]; let normalizedSpace = namespace; if (pkgName === '/') { pkgName = namespace; normalizedSpace = ''; } normalized[normalizedSpace] = normalized[normalizedSpace] || {}; normalized[normalizedSpace][pkgName] = version; }); }); // If necessary convert back to slash format if (useSlashFormat) { Object.keys(normalized).forEach((namespace) => { Object.keys(normalized[namespace]).forEach((pkgName) => { if (namespace === '') { normalized[pkgName] = normalized[pkgName] || {}; normalized[pkgName]['/'] = normalized[namespace][pkgName]; delete normalized[namespace][pkgName]; if (!Object.keys(normalized[namespace]).length) { delete normalized[namespace]; } } }); }); } return normalized; } exports.normalizeImportsConfig = normalizeImportsConfig; /** * Unrolls the imports configuration section of .npmbundlerrc file. * @param importsConfig the configuration in its original format * @return the unrolled configuration with one entry per module name */ function unrollImportsConfig(importsConfig) { importsConfig = normalizeImportsConfig(importsConfig || {}); const imports = {}; Object.keys(importsConfig).forEach((namespace) => { Object.keys(importsConfig[namespace]).forEach((pkgName) => { if (imports[pkgName]) { throw new Error(`Package ${pkgName} is mapped to more than one import`); } imports[pkgName] = { name: namespace, version: importsConfig[namespace][pkgName], }; }); }); return imports; } exports.unrollImportsConfig = unrollImportsConfig;