@stackbit/utils
Version:
Stackbit utilities
86 lines • 3.11 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackageManager = void 0;
const lodash_1 = __importDefault(require("lodash"));
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const js_yaml_1 = __importDefault(require("js-yaml"));
async function detectPackageManager(dir) {
let packageManager = null;
if (await fs_extra_1.default.pathExists(path_1.default.join(dir, 'pnpm-lock.yaml'))) {
packageManager = 'pnpm';
}
else if (await fs_extra_1.default.pathExists(path_1.default.join(dir, 'yarn.lock'))) {
packageManager = 'yarn';
}
else if (await fs_extra_1.default.pathExists(path_1.default.join(dir, 'Gemfile'))) {
packageManager = 'bundle';
}
else if (await fs_extra_1.default.pathExists(path_1.default.join(dir, 'package.json'))) {
packageManager = 'npm';
}
return packageManager;
}
async function checkIsYarnV2or3(dir) {
try {
const yarnRcFile = path_1.default.join(dir, '.yarnrc.yml');
const yarnRcExists = await fs_extra_1.default.pathExists(yarnRcFile);
if (yarnRcExists) {
const fileContents = await fs_extra_1.default.readFile(yarnRcFile, 'utf8');
const data = js_yaml_1.default.load(fileContents);
return lodash_1.default.get(data, 'yarnPath') === '.yarn/releases/yarn-berry.cjs' || lodash_1.default.get(data, 'yarnPath').startsWith('.yarn/releases/yarn-3.');
}
}
catch (err) {
throw new Error('error checking for yarn2');
}
return false;
}
async function getPackageManager(dir) {
const packageManager = await detectPackageManager(dir);
if (!packageManager) {
return null;
}
let cmd = packageManager;
let args = [];
let useNvm = false;
const env = {};
if (packageManager === 'bundle') {
cmd = 'bundle';
args = ['install'];
}
else if (packageManager === 'pnpm') {
cmd = 'pnpm';
args = ['install', '--prefer-offline', '--color=always'];
useNvm = true;
}
else if (packageManager === 'npm') {
cmd = 'npm';
args = ['install', '--no-audit', '--prefer-offline', '--no-save', '--color=always'];
useNvm = true;
}
else if (packageManager === 'yarn') {
const isYarnV2orHigher = await checkIsYarnV2or3(dir);
cmd = 'yarn';
args = ['install'];
useNvm = true;
if (isYarnV2orHigher) {
env.YARN_NODE_LINKER = 'node-modules';
}
else {
args.push('--non-interactive', `--cache-folder ${path_1.default.join(path_1.default.dirname(dir), '.cache-' + path_1.default.basename(dir))}`, '--color=always');
}
}
return {
name: packageManager,
cmd,
args,
useNvm,
env
};
}
exports.getPackageManager = getPackageManager;
//# sourceMappingURL=package-manager.js.map
;