UNPKG

1.47 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.JsPackageManagerFactory = void 0;
7
8var _crossSpawn = require("cross-spawn");
9
10var _findUp = require("find-up");
11
12var _NPMProxy = require("./NPMProxy");
13
14var _Yarn2Proxy = require("./Yarn2Proxy");
15
16var _Yarn1Proxy = require("./Yarn1Proxy");
17
18class JsPackageManagerFactory {
19 static getPackageManager(forceNpmUsage = false) {
20 if (forceNpmUsage) {
21 return new _NPMProxy.NPMProxy();
22 }
23
24 const yarnVersion = getYarnVersion();
25 const hasYarnLockFile = (0, _findUp.sync)('yarn.lock');
26 const hasNPMCommand = hasNPM();
27
28 if (yarnVersion && (hasYarnLockFile || !hasNPMCommand)) {
29 return yarnVersion === 1 ? new _Yarn1Proxy.Yarn1Proxy() : new _Yarn2Proxy.Yarn2Proxy();
30 }
31
32 if (hasNPMCommand) {
33 return new _NPMProxy.NPMProxy();
34 }
35
36 throw new Error('Unable to find a usable package manager within NPM, Yarn and Yarn 2');
37 }
38
39}
40
41exports.JsPackageManagerFactory = JsPackageManagerFactory;
42
43function hasNPM() {
44 const npmVersionCommand = (0, _crossSpawn.sync)('npm', ['--version']);
45 return npmVersionCommand.status === 0;
46}
47
48function getYarnVersion() {
49 const yarnVersionCommand = (0, _crossSpawn.sync)('yarn', ['--version']);
50
51 if (yarnVersionCommand.status !== 0) {
52 return undefined;
53 }
54
55 const yarnVersion = yarnVersionCommand.output.toString().replace(/,/g, '').replace(/"/g, '');
56 return /^1\.+/.test(yarnVersion) ? 1 : 2;
57}
\No newline at end of file