liferay-npm-bundler-preset-reactjs
Version:
liferay npm bundler preset react
62 lines (52 loc) • 1.46 kB
text/typescript
/**
* SPDX-FileCopyrightText: © 2020 Liferay, Inc. <https://liferay.com>
* SPDX-License-Identifier: LGPL-3.0-or-later
*/
import fs from 'fs-extra';
import {
AliasHash,
getAliasFields,
loadAliases,
} from 'liferay-npm-build-tools-common/lib/alias';
import {BundlerPluginParams} from 'liferay-npm-build-tools-common/lib/api/plugins';
import FilePath from 'liferay-npm-build-tools-common/lib/file-path';
/** Index is the absolute POSIX path to aliasing folders */
export interface AliasesMap {
[index: string]: AliasHash;
}
export function readAliases(
params: BundlerPluginParams,
absDir: FilePath
): AliasesMap {
const {config, globalConfig} = params;
const aliasFields = getAliasFields(globalConfig, config);
return readAliasesFromDir(absDir, aliasFields);
}
/**
* Recursively read all aliases in a folder and its descendants and store them
* in an AliasesMap.
*
* @param absDir root search dir
* @param aliasFields configured alias fields
*/
function readAliasesFromDir(
absDir: FilePath,
aliasFields: string[]
): AliasesMap {
const aliasesMap: AliasesMap = {};
aliasesMap[absDir.asPosix] = loadAliases(
absDir.join('package.json'),
aliasFields
);
fs.readdirSync(absDir.asNative)
.filter((child) =>
fs.statSync(absDir.join(child).asNative).isDirectory()
)
.forEach((childDir) => {
Object.assign(
aliasesMap,
readAliasesFromDir(absDir.join(childDir), aliasFields)
);
});
return aliasesMap;
}