@o3r/schematics
Version:
Schematics module of the Otter framework
116 lines • 4.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isSupportedPackageManager = isSupportedPackageManager;
exports.getPackageManager = getPackageManager;
exports.getPackageManagerRunner = getPackageManagerRunner;
exports.getPackageManagerExecutor = getPackageManagerExecutor;
exports.isPackageInstalled = isPackageInstalled;
exports.getPackageManagerVersion = getPackageManagerVersion;
exports.getPackageManagerInfo = getPackageManagerInfo;
const node_child_process_1 = require("node:child_process");
const node_path_1 = require("node:path");
const PACKAGE_MANAGER_WORKSPACE_MAPPING = {
npm: '--workspace',
yarn: 'workspace'
};
/**
* Determine if the given packager manager is supported
* @param name Name of the package manager
*/
function isSupportedPackageManager(name) {
return name === 'yarn' || name === 'npm';
}
/**
* Get the Package Manager
* @param enforcedNpmManager package manager to enforce
*/
function getPackageManagerName(enforcedNpmManager) {
const envCustomPackageManager = isSupportedPackageManager(process.env?.ENFORCED_PACKAGE_MANAGER) && process.env.ENFORCED_PACKAGE_MANAGER;
const envNodePackageManager = process.env?.npm_execpath?.includes('yarn') && 'yarn';
return enforcedNpmManager || envCustomPackageManager || envNodePackageManager || 'npm';
}
/**
* Get package manager used in runs
* Defaults to the package manager setup in process.env if no package manager set in angular.json
* @param options Option to determine the final package manager
*/
function getPackageManager(options) {
let packageManagerFromWorkspace;
if (options?.workspaceConfig) {
const angularJsonObj = (typeof options?.workspaceConfig === 'string' ? JSON.parse(options?.workspaceConfig) : options?.workspaceConfig);
if (angularJsonObj?.cli?.packageManager) {
packageManagerFromWorkspace = angularJsonObj.cli.packageManager;
}
}
const enforcedNpmManager = options?.enforcedNpmManager && isSupportedPackageManager(options.enforcedNpmManager) ? options.enforcedNpmManager : undefined;
const workspaceNpmManager = isSupportedPackageManager(packageManagerFromWorkspace) ? packageManagerFromWorkspace : undefined;
return getPackageManagerName(enforcedNpmManager || workspaceNpmManager);
}
/**
* Get command to run scripts with your package manager
* @param workspaceConfig Workspace configuration
* @param packageName Name of the package of the workspace to run the script (name from package.json)
*/
function getPackageManagerRunner(workspaceConfig, packageName) {
const pckManager = getPackageManager({ workspaceConfig });
if (!packageName) {
return `${pckManager} run`;
}
return `${pckManager} ${PACKAGE_MANAGER_WORKSPACE_MAPPING[pckManager]} ${packageName} run`;
}
/**
* Get command to execute bin command with your package manager
* @param workspaceConfig Workspace configuration
* @param packageName Name of the package of the workspace to execute the command
*/
function getPackageManagerExecutor(workspaceConfig, packageName) {
const pckManager = getPackageManager({ workspaceConfig });
if (!packageName) {
return `${pckManager} exec`;
}
return `${pckManager} ${PACKAGE_MANAGER_WORKSPACE_MAPPING[pckManager]} ${packageName} exec`;
}
/**
* Determine if the given package is installed
* @param packageName name of the package to check
*/
function isPackageInstalled(packageName) {
try {
return !!require.resolve(node_path_1.posix.join(packageName, 'package.json'));
}
catch {
return false;
}
}
/**
* Get package manager version
* @param options Option to determine the final package manager
*/
function getPackageManagerVersion(options) {
try {
return (0, node_child_process_1.execSync)(`${getPackageManager(options)} --version`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore'],
env: {
...process.env,
// NPM updater notifier will prevents the child process from closing until it timeout after 3 minutes.
NO_UPDATE_NOTIFIER: '1',
NPM_CONFIG_UPDATE_NOTIFIER: 'false'
}
}).trim();
}
catch {
return undefined;
}
}
/**
* Get package manager information
* @param options Option to determine the final package manager
*/
function getPackageManagerInfo(options) {
return {
name: getPackageManager(options),
version: getPackageManagerVersion(options)
};
}
//# sourceMappingURL=package-manager-runner.js.map