@ts-dev-tools/core 1.9.14 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/PackageManagerService.d.ts +3 -5
- package/dist/services/PackageManagerService.js +23 -208
- package/dist/services/package-manager/AbstractPackageManagerAdapter.d.ts +16 -0
- package/dist/services/package-manager/AbstractPackageManagerAdapter.js +155 -0
- package/dist/services/package-manager/NpmPackageManagerAdapter.d.ts +7 -0
- package/dist/services/package-manager/NpmPackageManagerAdapter.js +165 -0
- package/dist/services/package-manager/PackageManagerAdapter.d.ts +6 -0
- package/dist/services/package-manager/PackageManagerAdapter.js +2 -0
- package/dist/services/package-manager/PackageManagerType.d.ts +4 -0
- package/dist/services/package-manager/PackageManagerType.js +8 -0
- package/dist/services/package-manager/YarnPackageManagerAdapter.d.ts +13 -0
- package/dist/services/package-manager/YarnPackageManagerAdapter.js +269 -0
- package/package.json +2 -2
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
npm = "npm"
|
|
4
|
-
}
|
|
1
|
+
import { PackageManagerType } from "./package-manager/PackageManagerType";
|
|
2
|
+
export { PackageManagerType } from "./package-manager/PackageManagerType";
|
|
5
3
|
export declare class PackageManagerService {
|
|
6
4
|
static detectPackageManager(dirPath: string): PackageManagerType;
|
|
7
5
|
static addDevPackage(packageName: string, dirPath: string): Promise<void>;
|
|
8
6
|
static isMonorepo(dirPath: string): Promise<boolean>;
|
|
9
7
|
static isPackageInstalled(packageName: string, dirPath: string): Promise<boolean>;
|
|
10
8
|
static getNodeModulesPath(dirPath: string): Promise<string>;
|
|
11
|
-
private static
|
|
9
|
+
private static getAdapter;
|
|
12
10
|
}
|
|
@@ -37,246 +37,61 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.PackageManagerService = exports.PackageManagerType = void 0;
|
|
40
|
-
var child_process_1 = require("child_process");
|
|
41
40
|
var fs_1 = require("fs");
|
|
42
41
|
var path_1 = require("path");
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
var NpmPackageManagerAdapter_1 = require("./package-manager/NpmPackageManagerAdapter");
|
|
43
|
+
var PackageManagerType_1 = require("./package-manager/PackageManagerType");
|
|
44
|
+
var YarnPackageManagerAdapter_1 = require("./package-manager/YarnPackageManagerAdapter");
|
|
45
|
+
var PackageManagerType_2 = require("./package-manager/PackageManagerType");
|
|
46
|
+
Object.defineProperty(exports, "PackageManagerType", { enumerable: true, get: function () { return PackageManagerType_2.PackageManagerType; } });
|
|
48
47
|
var PackageManagerService = /** @class */ (function () {
|
|
49
48
|
function PackageManagerService() {
|
|
50
49
|
}
|
|
51
50
|
PackageManagerService.detectPackageManager = function (dirPath) {
|
|
52
51
|
if ((0, fs_1.existsSync)((0, path_1.join)(dirPath, "yarn.lock"))) {
|
|
53
|
-
return PackageManagerType.yarn;
|
|
52
|
+
return PackageManagerType_1.PackageManagerType.yarn;
|
|
54
53
|
}
|
|
55
|
-
return PackageManagerType.npm;
|
|
54
|
+
return PackageManagerType_1.PackageManagerType.npm;
|
|
56
55
|
};
|
|
57
56
|
PackageManagerService.addDevPackage = function (packageName, dirPath) {
|
|
58
57
|
return __awaiter(this, void 0, void 0, function () {
|
|
59
|
-
var packageManager, isMonorepo, args;
|
|
60
58
|
return __generator(this, function (_a) {
|
|
61
|
-
|
|
62
|
-
case 0:
|
|
63
|
-
packageManager = PackageManagerService.detectPackageManager(dirPath);
|
|
64
|
-
return [4 /*yield*/, PackageManagerService.isMonorepo(dirPath)];
|
|
65
|
-
case 1:
|
|
66
|
-
isMonorepo = _a.sent();
|
|
67
|
-
args = [packageManager];
|
|
68
|
-
switch (packageManager) {
|
|
69
|
-
case PackageManagerType.yarn:
|
|
70
|
-
args.push("add", "--dev");
|
|
71
|
-
if (isMonorepo) {
|
|
72
|
-
args.push("--ignore-workspace-root-check");
|
|
73
|
-
}
|
|
74
|
-
break;
|
|
75
|
-
case PackageManagerType.npm:
|
|
76
|
-
args.push("install", "--save-dev");
|
|
77
|
-
if (isMonorepo) {
|
|
78
|
-
args.push("--no-workspaces");
|
|
79
|
-
}
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
args.push(packageName);
|
|
83
|
-
return [4 /*yield*/, PackageManagerService.execCommand(args, dirPath, true)];
|
|
84
|
-
case 2:
|
|
85
|
-
_a.sent();
|
|
86
|
-
return [2 /*return*/];
|
|
87
|
-
}
|
|
59
|
+
return [2 /*return*/, PackageManagerService.getAdapter(dirPath).addDevPackage(packageName, dirPath)];
|
|
88
60
|
});
|
|
89
61
|
});
|
|
90
62
|
};
|
|
91
63
|
PackageManagerService.isMonorepo = function (dirPath) {
|
|
92
64
|
return __awaiter(this, void 0, void 0, function () {
|
|
93
|
-
var packageManager, args, output;
|
|
94
65
|
return __generator(this, function (_a) {
|
|
95
|
-
|
|
96
|
-
case 0:
|
|
97
|
-
packageManager = PackageManagerService.detectPackageManager(dirPath);
|
|
98
|
-
args = [packageManager];
|
|
99
|
-
switch (packageManager) {
|
|
100
|
-
case PackageManagerType.yarn:
|
|
101
|
-
args.push("workspaces", "info");
|
|
102
|
-
break;
|
|
103
|
-
case PackageManagerType.npm:
|
|
104
|
-
args.push("--workspaces", "list");
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
args.push("> /dev/null 2>&1 && echo true || echo false;");
|
|
108
|
-
return [4 /*yield*/, PackageManagerService.execCommand(args, dirPath, true)];
|
|
109
|
-
case 1:
|
|
110
|
-
output = _a.sent();
|
|
111
|
-
return [2 /*return*/, output.trim() === "true"];
|
|
112
|
-
}
|
|
66
|
+
return [2 /*return*/, PackageManagerService.getAdapter(dirPath).isMonorepo(dirPath)];
|
|
113
67
|
});
|
|
114
68
|
});
|
|
115
69
|
};
|
|
116
70
|
PackageManagerService.isPackageInstalled = function (packageName, dirPath) {
|
|
117
71
|
return __awaiter(this, void 0, void 0, function () {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return __generator(this, function (_c) {
|
|
121
|
-
switch (_c.label) {
|
|
122
|
-
case 0:
|
|
123
|
-
packageManager = PackageManagerService.detectPackageManager(dirPath);
|
|
124
|
-
args = [packageManager, "list", "--depth=1", "--json"];
|
|
125
|
-
switch (packageManager) {
|
|
126
|
-
case PackageManagerType.yarn:
|
|
127
|
-
args.push("--pattern=".concat(packageName));
|
|
128
|
-
break;
|
|
129
|
-
case PackageManagerType.npm:
|
|
130
|
-
args.push("--no-progress", "--non-interactive", packageName);
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
_c.label = 1;
|
|
134
|
-
case 1:
|
|
135
|
-
_c.trys.push([1, 3, , 4]);
|
|
136
|
-
return [4 /*yield*/, PackageManagerService.execCommand(args, dirPath, true)];
|
|
137
|
-
case 2:
|
|
138
|
-
output = _c.sent();
|
|
139
|
-
return [3 /*break*/, 4];
|
|
140
|
-
case 3:
|
|
141
|
-
error_1 = _c.sent();
|
|
142
|
-
// npm returns non-zero exit code when package is not found, but still outputs valid JSON
|
|
143
|
-
if (typeof error_1 === "string") {
|
|
144
|
-
try {
|
|
145
|
-
// Try to parse as JSON - if successful, use it as output
|
|
146
|
-
JSON.parse(error_1.trim());
|
|
147
|
-
output = error_1;
|
|
148
|
-
}
|
|
149
|
-
catch (_d) {
|
|
150
|
-
// If it's not valid JSON, the package is not installed
|
|
151
|
-
return [2 /*return*/, false];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
return [2 /*return*/, false];
|
|
156
|
-
}
|
|
157
|
-
return [3 /*break*/, 4];
|
|
158
|
-
case 4:
|
|
159
|
-
installedPackages = JSON.parse(output);
|
|
160
|
-
switch (packageManager) {
|
|
161
|
-
case PackageManagerType.yarn:
|
|
162
|
-
return [2 /*return*/, (_b = (_a = installedPackages === null || installedPackages === void 0 ? void 0 : installedPackages.data) === null || _a === void 0 ? void 0 : _a.trees) === null || _b === void 0 ? void 0 : _b.some(function (tree) {
|
|
163
|
-
return tree.name.startsWith(packageName + "@");
|
|
164
|
-
})];
|
|
165
|
-
case PackageManagerType.npm:
|
|
166
|
-
return [2 /*return*/, installedPackages.dependencies
|
|
167
|
-
? Object.prototype.hasOwnProperty.call(installedPackages.dependencies, packageName)
|
|
168
|
-
: false];
|
|
169
|
-
}
|
|
170
|
-
return [2 /*return*/];
|
|
171
|
-
}
|
|
72
|
+
return __generator(this, function (_a) {
|
|
73
|
+
return [2 /*return*/, PackageManagerService.getAdapter(dirPath).isPackageInstalled(packageName, dirPath)];
|
|
172
74
|
});
|
|
173
75
|
});
|
|
174
76
|
};
|
|
175
77
|
PackageManagerService.getNodeModulesPath = function (dirPath) {
|
|
176
78
|
return __awaiter(this, void 0, void 0, function () {
|
|
177
|
-
var packageManager, nodeModulesPath, _a;
|
|
178
|
-
return __generator(this, function (_b) {
|
|
179
|
-
switch (_b.label) {
|
|
180
|
-
case 0:
|
|
181
|
-
packageManager = PackageManagerService.detectPackageManager(dirPath);
|
|
182
|
-
_a = packageManager;
|
|
183
|
-
switch (_a) {
|
|
184
|
-
case PackageManagerType.yarn: return [3 /*break*/, 1];
|
|
185
|
-
case PackageManagerType.npm: return [3 /*break*/, 2];
|
|
186
|
-
}
|
|
187
|
-
return [3 /*break*/, 4];
|
|
188
|
-
case 1:
|
|
189
|
-
nodeModulesPath = (0, path_1.join)(dirPath, "node_modules");
|
|
190
|
-
return [3 /*break*/, 4];
|
|
191
|
-
case 2: return [4 /*yield*/, PackageManagerService.execCommand([packageManager, "root", "--no-progress", "--non-interactive"], dirPath, true)];
|
|
192
|
-
case 3:
|
|
193
|
-
nodeModulesPath = (_b.sent()).trim();
|
|
194
|
-
return [3 /*break*/, 4];
|
|
195
|
-
case 4:
|
|
196
|
-
if (nodeModulesPath) {
|
|
197
|
-
return [2 /*return*/, nodeModulesPath];
|
|
198
|
-
}
|
|
199
|
-
throw new Error("Node modules path not found for package manager ".concat(packageManager));
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
};
|
|
204
|
-
PackageManagerService.execCommand = function (args_1, cwd_1) {
|
|
205
|
-
return __awaiter(this, arguments, void 0, function (args, cwd, silent) {
|
|
206
|
-
var cmd, cmdArgs, useShell, SHELL_OPERATORS_1, hasShellSyntax;
|
|
207
|
-
if (silent === void 0) { silent = false; }
|
|
208
79
|
return __generator(this, function (_a) {
|
|
209
|
-
|
|
210
|
-
if (Array.isArray(args) && args.length === 0) {
|
|
211
|
-
throw new Error("Command args must not be empty");
|
|
212
|
-
}
|
|
213
|
-
if (typeof args === "string" && args.trim().length === 0) {
|
|
214
|
-
throw new Error("Command args must not be empty");
|
|
215
|
-
}
|
|
216
|
-
if (cwd && !(0, fs_1.existsSync)(cwd)) {
|
|
217
|
-
throw new Error("Directory \"".concat(cwd, "\" does not exist"));
|
|
218
|
-
}
|
|
219
|
-
useShell = false;
|
|
220
|
-
if (Array.isArray(args)) {
|
|
221
|
-
SHELL_OPERATORS_1 = [">", "|", "&&", "||", ";", "<", ">>", "2>", "&", "$("];
|
|
222
|
-
hasShellSyntax = args.some(function (arg) {
|
|
223
|
-
var trimmedArg = arg.trim();
|
|
224
|
-
return SHELL_OPERATORS_1.some(function (op) {
|
|
225
|
-
return trimmedArg.startsWith(op) ||
|
|
226
|
-
trimmedArg.endsWith(op) ||
|
|
227
|
-
trimmedArg.includes(" ".concat(op, " ")) ||
|
|
228
|
-
trimmedArg.includes(" ".concat(op)) ||
|
|
229
|
-
trimmedArg.includes("".concat(op, " "));
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
if (hasShellSyntax) {
|
|
233
|
-
// Use shell mode for commands with shell syntax
|
|
234
|
-
cmd = args.join(" ").trim();
|
|
235
|
-
cmdArgs = [];
|
|
236
|
-
useShell = true;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
// Use array mode for normal commands
|
|
240
|
-
cmd = args[0];
|
|
241
|
-
cmdArgs = args.slice(1);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
cmd = args;
|
|
246
|
-
cmdArgs = [];
|
|
247
|
-
useShell = true;
|
|
248
|
-
}
|
|
249
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
250
|
-
var child = (0, child_process_1.spawn)(cmd, cmdArgs, {
|
|
251
|
-
stdio: silent ? "pipe" : "inherit",
|
|
252
|
-
shell: useShell,
|
|
253
|
-
windowsVerbatimArguments: true,
|
|
254
|
-
cwd: cwd,
|
|
255
|
-
});
|
|
256
|
-
var output = "";
|
|
257
|
-
var error = "";
|
|
258
|
-
child.on("exit", function (code) {
|
|
259
|
-
if (code) {
|
|
260
|
-
// For commands that output to stdout even on error (like npm list),
|
|
261
|
-
// reject with the output so caller can handle it
|
|
262
|
-
return reject(output.length > 0 ? output : error);
|
|
263
|
-
}
|
|
264
|
-
resolve(output);
|
|
265
|
-
});
|
|
266
|
-
if (child.stdout) {
|
|
267
|
-
child.stdout.on("data", function (data) {
|
|
268
|
-
output += "\n".concat(data);
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
if (child.stderr) {
|
|
272
|
-
child.stderr.on("data", function (data) {
|
|
273
|
-
error += "\n".concat(data);
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
})];
|
|
80
|
+
return [2 /*return*/, PackageManagerService.getAdapter(dirPath).getNodeModulesPath(dirPath)];
|
|
277
81
|
});
|
|
278
82
|
});
|
|
279
83
|
};
|
|
84
|
+
PackageManagerService.getAdapter = function (dirPath) {
|
|
85
|
+
var packageManager = PackageManagerService.detectPackageManager(dirPath);
|
|
86
|
+
switch (packageManager) {
|
|
87
|
+
case PackageManagerType_1.PackageManagerType.yarn:
|
|
88
|
+
return new YarnPackageManagerAdapter_1.YarnPackageManagerAdapter();
|
|
89
|
+
case PackageManagerType_1.PackageManagerType.npm:
|
|
90
|
+
return new NpmPackageManagerAdapter_1.NpmPackageManagerAdapter();
|
|
91
|
+
default:
|
|
92
|
+
throw new Error("Unsupported package manager: ".concat(packageManager));
|
|
93
|
+
}
|
|
94
|
+
};
|
|
280
95
|
return PackageManagerService;
|
|
281
96
|
}());
|
|
282
97
|
exports.PackageManagerService = PackageManagerService;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PackageManagerType } from "./PackageManagerType";
|
|
2
|
+
import type { PackageManagerAdapter } from "./PackageManagerAdapter";
|
|
3
|
+
export declare abstract class AbstractPackageManagerAdapter implements PackageManagerAdapter {
|
|
4
|
+
abstract addDevPackage(packageName: string, dirPath: string): Promise<void>;
|
|
5
|
+
abstract isMonorepo(dirPath: string): Promise<boolean>;
|
|
6
|
+
abstract isPackageInstalled(packageName: string, dirPath: string): Promise<boolean>;
|
|
7
|
+
abstract getNodeModulesPath(dirPath: string): Promise<string>;
|
|
8
|
+
protected getVersion(packageManager: PackageManagerType, dirPath?: string): Promise<{
|
|
9
|
+
raw: string;
|
|
10
|
+
major: number;
|
|
11
|
+
minor: number;
|
|
12
|
+
patch: number;
|
|
13
|
+
}>;
|
|
14
|
+
protected execCommand(args: string | string[], cwd?: string, silent?: boolean): Promise<string>;
|
|
15
|
+
protected parseJsonLines(output: string): unknown[];
|
|
16
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AbstractPackageManagerAdapter = void 0;
|
|
40
|
+
var child_process_1 = require("child_process");
|
|
41
|
+
var fs_1 = require("fs");
|
|
42
|
+
var AbstractPackageManagerAdapter = /** @class */ (function () {
|
|
43
|
+
function AbstractPackageManagerAdapter() {
|
|
44
|
+
}
|
|
45
|
+
AbstractPackageManagerAdapter.prototype.getVersion = function (packageManager, dirPath) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var raw, match;
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0: return [4 /*yield*/, this.execCommand([packageManager, "--version"], dirPath, true)];
|
|
51
|
+
case 1:
|
|
52
|
+
raw = (_a.sent()).trim();
|
|
53
|
+
match = raw.match(/(\d+)\.(\d+)\.(\d+)/);
|
|
54
|
+
if (!match) {
|
|
55
|
+
return [2 /*return*/, { raw: raw, major: 0, minor: 0, patch: 0 }];
|
|
56
|
+
}
|
|
57
|
+
return [2 /*return*/, {
|
|
58
|
+
raw: raw,
|
|
59
|
+
major: Number(match[1]),
|
|
60
|
+
minor: Number(match[2]),
|
|
61
|
+
patch: Number(match[3]),
|
|
62
|
+
}];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
AbstractPackageManagerAdapter.prototype.execCommand = function (args_1, cwd_1) {
|
|
68
|
+
return __awaiter(this, arguments, void 0, function (args, cwd, silent) {
|
|
69
|
+
var cmd, cmdArgs, useShell, shellOperators_1, hasShellSyntax;
|
|
70
|
+
if (silent === void 0) { silent = false; }
|
|
71
|
+
return __generator(this, function (_a) {
|
|
72
|
+
if (Array.isArray(args) && args.length === 0) {
|
|
73
|
+
throw new Error("Command args must not be empty");
|
|
74
|
+
}
|
|
75
|
+
if (typeof args === "string" && args.trim().length === 0) {
|
|
76
|
+
throw new Error("Command args must not be empty");
|
|
77
|
+
}
|
|
78
|
+
if (cwd && !(0, fs_1.existsSync)(cwd)) {
|
|
79
|
+
throw new Error("Directory \"".concat(cwd, "\" does not exist"));
|
|
80
|
+
}
|
|
81
|
+
useShell = false;
|
|
82
|
+
if (Array.isArray(args)) {
|
|
83
|
+
shellOperators_1 = [">", "|", "&&", "||", ";", "<", ">>", "2>", "&", "$("];
|
|
84
|
+
hasShellSyntax = args.some(function (arg) {
|
|
85
|
+
var trimmedArg = arg.trim();
|
|
86
|
+
return shellOperators_1.some(function (op) {
|
|
87
|
+
return trimmedArg.startsWith(op) ||
|
|
88
|
+
trimmedArg.endsWith(op) ||
|
|
89
|
+
trimmedArg.includes(" ".concat(op, " ")) ||
|
|
90
|
+
trimmedArg.includes(" ".concat(op)) ||
|
|
91
|
+
trimmedArg.includes("".concat(op, " "));
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
if (hasShellSyntax) {
|
|
95
|
+
cmd = args.join(" ").trim();
|
|
96
|
+
cmdArgs = [];
|
|
97
|
+
useShell = true;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
cmd = args[0];
|
|
101
|
+
cmdArgs = args.slice(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
cmd = args;
|
|
106
|
+
cmdArgs = [];
|
|
107
|
+
useShell = true;
|
|
108
|
+
}
|
|
109
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
110
|
+
var child = (0, child_process_1.spawn)(cmd, cmdArgs, {
|
|
111
|
+
stdio: silent ? "pipe" : "inherit",
|
|
112
|
+
shell: useShell,
|
|
113
|
+
windowsVerbatimArguments: true,
|
|
114
|
+
cwd: cwd,
|
|
115
|
+
});
|
|
116
|
+
var output = "";
|
|
117
|
+
var error = "";
|
|
118
|
+
child.on("exit", function (code) {
|
|
119
|
+
if (code) {
|
|
120
|
+
return reject(output.length > 0 ? output : error);
|
|
121
|
+
}
|
|
122
|
+
resolve(output);
|
|
123
|
+
});
|
|
124
|
+
if (child.stdout) {
|
|
125
|
+
child.stdout.on("data", function (data) {
|
|
126
|
+
output += "\n".concat(data);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (child.stderr) {
|
|
130
|
+
child.stderr.on("data", function (data) {
|
|
131
|
+
error += "\n".concat(data);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
})];
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
AbstractPackageManagerAdapter.prototype.parseJsonLines = function (output) {
|
|
139
|
+
return output
|
|
140
|
+
.split(/\r?\n/)
|
|
141
|
+
.map(function (line) { return line.trim(); })
|
|
142
|
+
.filter(function (line) { return line.length > 0; })
|
|
143
|
+
.map(function (line) {
|
|
144
|
+
try {
|
|
145
|
+
return JSON.parse(line);
|
|
146
|
+
}
|
|
147
|
+
catch (_a) {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
.filter(function (entry) { return entry !== undefined; });
|
|
152
|
+
};
|
|
153
|
+
return AbstractPackageManagerAdapter;
|
|
154
|
+
}());
|
|
155
|
+
exports.AbstractPackageManagerAdapter = AbstractPackageManagerAdapter;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbstractPackageManagerAdapter } from "./AbstractPackageManagerAdapter";
|
|
2
|
+
export declare class NpmPackageManagerAdapter extends AbstractPackageManagerAdapter {
|
|
3
|
+
addDevPackage(packageName: string, dirPath: string): Promise<void>;
|
|
4
|
+
isMonorepo(dirPath: string): Promise<boolean>;
|
|
5
|
+
isPackageInstalled(packageName: string, dirPath: string): Promise<boolean>;
|
|
6
|
+
getNodeModulesPath(dirPath: string): Promise<string>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
28
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.NpmPackageManagerAdapter = void 0;
|
|
55
|
+
var AbstractPackageManagerAdapter_1 = require("./AbstractPackageManagerAdapter");
|
|
56
|
+
var NpmPackageManagerAdapter = /** @class */ (function (_super) {
|
|
57
|
+
__extends(NpmPackageManagerAdapter, _super);
|
|
58
|
+
function NpmPackageManagerAdapter() {
|
|
59
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
60
|
+
}
|
|
61
|
+
NpmPackageManagerAdapter.prototype.addDevPackage = function (packageName, dirPath) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
63
|
+
var isMonorepo, args;
|
|
64
|
+
return __generator(this, function (_a) {
|
|
65
|
+
switch (_a.label) {
|
|
66
|
+
case 0: return [4 /*yield*/, this.isMonorepo(dirPath)];
|
|
67
|
+
case 1:
|
|
68
|
+
isMonorepo = _a.sent();
|
|
69
|
+
args = ["npm", "install", "--save-dev"];
|
|
70
|
+
if (isMonorepo) {
|
|
71
|
+
args.push("--no-workspaces");
|
|
72
|
+
}
|
|
73
|
+
args.push(packageName);
|
|
74
|
+
return [4 /*yield*/, this.execCommand(args, dirPath, true)];
|
|
75
|
+
case 2:
|
|
76
|
+
_a.sent();
|
|
77
|
+
return [2 /*return*/];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
NpmPackageManagerAdapter.prototype.isMonorepo = function (dirPath) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
84
|
+
var _a;
|
|
85
|
+
return __generator(this, function (_b) {
|
|
86
|
+
switch (_b.label) {
|
|
87
|
+
case 0:
|
|
88
|
+
_b.trys.push([0, 2, , 3]);
|
|
89
|
+
return [4 /*yield*/, this.execCommand(["npm", "--workspaces", "list", "--json"], dirPath, true)];
|
|
90
|
+
case 1:
|
|
91
|
+
_b.sent();
|
|
92
|
+
return [2 /*return*/, true];
|
|
93
|
+
case 2:
|
|
94
|
+
_a = _b.sent();
|
|
95
|
+
return [2 /*return*/, false];
|
|
96
|
+
case 3: return [2 /*return*/];
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
NpmPackageManagerAdapter.prototype.isPackageInstalled = function (packageName, dirPath) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
103
|
+
var args, output, error_1, installedPackages;
|
|
104
|
+
return __generator(this, function (_a) {
|
|
105
|
+
switch (_a.label) {
|
|
106
|
+
case 0:
|
|
107
|
+
args = [
|
|
108
|
+
"npm",
|
|
109
|
+
"list",
|
|
110
|
+
"--depth=1",
|
|
111
|
+
"--json",
|
|
112
|
+
"--no-progress",
|
|
113
|
+
"--non-interactive",
|
|
114
|
+
packageName,
|
|
115
|
+
];
|
|
116
|
+
_a.label = 1;
|
|
117
|
+
case 1:
|
|
118
|
+
_a.trys.push([1, 3, , 4]);
|
|
119
|
+
return [4 /*yield*/, this.execCommand(args, dirPath, true)];
|
|
120
|
+
case 2:
|
|
121
|
+
output = _a.sent();
|
|
122
|
+
return [3 /*break*/, 4];
|
|
123
|
+
case 3:
|
|
124
|
+
error_1 = _a.sent();
|
|
125
|
+
if (typeof error_1 === "string") {
|
|
126
|
+
try {
|
|
127
|
+
JSON.parse(error_1.trim());
|
|
128
|
+
output = error_1;
|
|
129
|
+
}
|
|
130
|
+
catch (_b) {
|
|
131
|
+
return [2 /*return*/, false];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
return [2 /*return*/, false];
|
|
136
|
+
}
|
|
137
|
+
return [3 /*break*/, 4];
|
|
138
|
+
case 4:
|
|
139
|
+
installedPackages = JSON.parse(output);
|
|
140
|
+
return [2 /*return*/, installedPackages.dependencies
|
|
141
|
+
? Object.prototype.hasOwnProperty.call(installedPackages.dependencies, packageName)
|
|
142
|
+
: false];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
NpmPackageManagerAdapter.prototype.getNodeModulesPath = function (dirPath) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
149
|
+
var nodeModulesPath;
|
|
150
|
+
return __generator(this, function (_a) {
|
|
151
|
+
switch (_a.label) {
|
|
152
|
+
case 0: return [4 /*yield*/, this.execCommand(["npm", "root", "--no-progress", "--non-interactive"], dirPath, true)];
|
|
153
|
+
case 1:
|
|
154
|
+
nodeModulesPath = (_a.sent()).trim();
|
|
155
|
+
if (nodeModulesPath) {
|
|
156
|
+
return [2 /*return*/, nodeModulesPath];
|
|
157
|
+
}
|
|
158
|
+
throw new Error("Node modules path not found for package manager npm");
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
return NpmPackageManagerAdapter;
|
|
164
|
+
}(AbstractPackageManagerAdapter_1.AbstractPackageManagerAdapter));
|
|
165
|
+
exports.NpmPackageManagerAdapter = NpmPackageManagerAdapter;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface PackageManagerAdapter {
|
|
2
|
+
addDevPackage(packageName: string, dirPath: string): Promise<void>;
|
|
3
|
+
isMonorepo(dirPath: string): Promise<boolean>;
|
|
4
|
+
isPackageInstalled(packageName: string, dirPath: string): Promise<boolean>;
|
|
5
|
+
getNodeModulesPath(dirPath: string): Promise<string>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageManagerType = void 0;
|
|
4
|
+
var PackageManagerType;
|
|
5
|
+
(function (PackageManagerType) {
|
|
6
|
+
PackageManagerType["yarn"] = "yarn";
|
|
7
|
+
PackageManagerType["npm"] = "npm";
|
|
8
|
+
})(PackageManagerType || (exports.PackageManagerType = PackageManagerType = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AbstractPackageManagerAdapter } from "./AbstractPackageManagerAdapter";
|
|
2
|
+
export declare class YarnPackageManagerAdapter extends AbstractPackageManagerAdapter {
|
|
3
|
+
addDevPackage(packageName: string, dirPath: string): Promise<void>;
|
|
4
|
+
isMonorepo(dirPath: string): Promise<boolean>;
|
|
5
|
+
isPackageInstalled(packageName: string, dirPath: string): Promise<boolean>;
|
|
6
|
+
getNodeModulesPath(dirPath: string): Promise<string>;
|
|
7
|
+
private yarnWorkspacesOutputHasEntries;
|
|
8
|
+
private parseMaybeJsonString;
|
|
9
|
+
private hasWorkspaceMap;
|
|
10
|
+
private parseJsonObjectFromOutput;
|
|
11
|
+
private isWorkspaceListEntry;
|
|
12
|
+
private yarnListOutputHasPackage;
|
|
13
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
28
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.YarnPackageManagerAdapter = void 0;
|
|
55
|
+
var path_1 = require("path");
|
|
56
|
+
var AbstractPackageManagerAdapter_1 = require("./AbstractPackageManagerAdapter");
|
|
57
|
+
var PackageManagerType_1 = require("./PackageManagerType");
|
|
58
|
+
var YarnPackageManagerAdapter = /** @class */ (function (_super) {
|
|
59
|
+
__extends(YarnPackageManagerAdapter, _super);
|
|
60
|
+
function YarnPackageManagerAdapter() {
|
|
61
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
62
|
+
}
|
|
63
|
+
YarnPackageManagerAdapter.prototype.addDevPackage = function (packageName, dirPath) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var isMonorepo, major, args, error_1, retryArgs;
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
switch (_a.label) {
|
|
68
|
+
case 0: return [4 /*yield*/, this.isMonorepo(dirPath)];
|
|
69
|
+
case 1:
|
|
70
|
+
isMonorepo = _a.sent();
|
|
71
|
+
return [4 /*yield*/, this.getVersion(PackageManagerType_1.PackageManagerType.yarn, dirPath)];
|
|
72
|
+
case 2:
|
|
73
|
+
major = (_a.sent()).major;
|
|
74
|
+
args = ["yarn", "add", "--dev"];
|
|
75
|
+
if (isMonorepo) {
|
|
76
|
+
args.push(major >= 2 ? "-W" : "--ignore-workspace-root-check");
|
|
77
|
+
}
|
|
78
|
+
args.push(packageName);
|
|
79
|
+
_a.label = 3;
|
|
80
|
+
case 3:
|
|
81
|
+
_a.trys.push([3, 5, , 8]);
|
|
82
|
+
return [4 /*yield*/, this.execCommand(args, dirPath, true)];
|
|
83
|
+
case 4:
|
|
84
|
+
_a.sent();
|
|
85
|
+
return [3 /*break*/, 8];
|
|
86
|
+
case 5:
|
|
87
|
+
error_1 = _a.sent();
|
|
88
|
+
if (!(isMonorepo && typeof error_1 === "string" && error_1.includes("Unsupported option name"))) return [3 /*break*/, 7];
|
|
89
|
+
retryArgs = args
|
|
90
|
+
.filter(function (arg) { return arg !== "--ignore-workspace-root-check" && arg !== "-W"; })
|
|
91
|
+
.concat(major >= 2 ? "--ignore-workspace-root-check" : "-W");
|
|
92
|
+
return [4 /*yield*/, this.execCommand(retryArgs, dirPath, true)];
|
|
93
|
+
case 6:
|
|
94
|
+
_a.sent();
|
|
95
|
+
return [2 /*return*/];
|
|
96
|
+
case 7: throw error_1;
|
|
97
|
+
case 8: return [2 /*return*/];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
YarnPackageManagerAdapter.prototype.isMonorepo = function (dirPath) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
104
|
+
var major, primary, fallback, yarnCommands, _i, yarnCommands_1, args, output, _a;
|
|
105
|
+
return __generator(this, function (_b) {
|
|
106
|
+
switch (_b.label) {
|
|
107
|
+
case 0: return [4 /*yield*/, this.getVersion(PackageManagerType_1.PackageManagerType.yarn, dirPath)];
|
|
108
|
+
case 1:
|
|
109
|
+
major = (_b.sent()).major;
|
|
110
|
+
primary = major >= 2 ? "list" : "info";
|
|
111
|
+
fallback = primary === "list" ? "info" : "list";
|
|
112
|
+
yarnCommands = [
|
|
113
|
+
["yarn", "workspaces", primary, "--json"],
|
|
114
|
+
["yarn", "workspaces", fallback, "--json"],
|
|
115
|
+
];
|
|
116
|
+
_i = 0, yarnCommands_1 = yarnCommands;
|
|
117
|
+
_b.label = 2;
|
|
118
|
+
case 2:
|
|
119
|
+
if (!(_i < yarnCommands_1.length)) return [3 /*break*/, 7];
|
|
120
|
+
args = yarnCommands_1[_i];
|
|
121
|
+
_b.label = 3;
|
|
122
|
+
case 3:
|
|
123
|
+
_b.trys.push([3, 5, , 6]);
|
|
124
|
+
return [4 /*yield*/, this.execCommand(args, dirPath, true)];
|
|
125
|
+
case 4:
|
|
126
|
+
output = _b.sent();
|
|
127
|
+
if (this.yarnWorkspacesOutputHasEntries(output)) {
|
|
128
|
+
return [2 /*return*/, true];
|
|
129
|
+
}
|
|
130
|
+
return [3 /*break*/, 6];
|
|
131
|
+
case 5:
|
|
132
|
+
_a = _b.sent();
|
|
133
|
+
return [3 /*break*/, 6];
|
|
134
|
+
case 6:
|
|
135
|
+
_i++;
|
|
136
|
+
return [3 /*break*/, 2];
|
|
137
|
+
case 7: return [2 /*return*/, false];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
YarnPackageManagerAdapter.prototype.isPackageInstalled = function (packageName, dirPath) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
144
|
+
var output, _a, output, _b;
|
|
145
|
+
return __generator(this, function (_c) {
|
|
146
|
+
switch (_c.label) {
|
|
147
|
+
case 0:
|
|
148
|
+
_c.trys.push([0, 2, , 3]);
|
|
149
|
+
return [4 /*yield*/, this.execCommand(["yarn", "list", "--depth=1", "--json", "--pattern", packageName], dirPath, true)];
|
|
150
|
+
case 1:
|
|
151
|
+
output = _c.sent();
|
|
152
|
+
if (this.yarnListOutputHasPackage(output, packageName)) {
|
|
153
|
+
return [2 /*return*/, true];
|
|
154
|
+
}
|
|
155
|
+
return [3 /*break*/, 3];
|
|
156
|
+
case 2:
|
|
157
|
+
_a = _c.sent();
|
|
158
|
+
return [3 /*break*/, 3];
|
|
159
|
+
case 3:
|
|
160
|
+
_c.trys.push([3, 5, , 6]);
|
|
161
|
+
return [4 /*yield*/, this.execCommand(["yarn", "why", "--json", packageName], dirPath, true)];
|
|
162
|
+
case 4:
|
|
163
|
+
output = _c.sent();
|
|
164
|
+
return [2 /*return*/, this.yarnListOutputHasPackage(output, packageName)];
|
|
165
|
+
case 5:
|
|
166
|
+
_b = _c.sent();
|
|
167
|
+
return [2 /*return*/, false];
|
|
168
|
+
case 6: return [2 /*return*/];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
YarnPackageManagerAdapter.prototype.getNodeModulesPath = function (dirPath) {
|
|
174
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
175
|
+
return __generator(this, function (_a) {
|
|
176
|
+
return [2 /*return*/, (0, path_1.join)(dirPath, "node_modules")];
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
YarnPackageManagerAdapter.prototype.yarnWorkspacesOutputHasEntries = function (output) {
|
|
181
|
+
var _a;
|
|
182
|
+
var entries = this.parseJsonLines(output);
|
|
183
|
+
var workspaceListCount = 0;
|
|
184
|
+
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
185
|
+
var entry = entries_1[_i];
|
|
186
|
+
if (!entry || typeof entry !== "object") {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
var data = (_a = entry.data) !== null && _a !== void 0 ? _a : entry;
|
|
190
|
+
var parsedData = this.parseMaybeJsonString(data);
|
|
191
|
+
if (parsedData && typeof parsedData === "object") {
|
|
192
|
+
if (this.hasWorkspaceMap(parsedData)) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (this.isWorkspaceListEntry(parsedData)) {
|
|
196
|
+
workspaceListCount += 1;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (workspaceListCount > 0) {
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
var parsedOutput = this.parseJsonObjectFromOutput(output);
|
|
204
|
+
if (parsedOutput && typeof parsedOutput === "object") {
|
|
205
|
+
return Object.keys(parsedOutput).length > 0;
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
};
|
|
209
|
+
YarnPackageManagerAdapter.prototype.parseMaybeJsonString = function (value) {
|
|
210
|
+
if (typeof value !== "string") {
|
|
211
|
+
return value;
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
return JSON.parse(value);
|
|
215
|
+
}
|
|
216
|
+
catch (_a) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
YarnPackageManagerAdapter.prototype.hasWorkspaceMap = function (value) {
|
|
221
|
+
if (!value || typeof value !== "object") {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
var workspaces = value.workspaces;
|
|
225
|
+
return !!workspaces && Object.keys(workspaces).length > 0;
|
|
226
|
+
};
|
|
227
|
+
YarnPackageManagerAdapter.prototype.parseJsonObjectFromOutput = function (output) {
|
|
228
|
+
var start = output.indexOf("{");
|
|
229
|
+
var end = output.lastIndexOf("}");
|
|
230
|
+
if (start < 0 || end <= start) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
var slice = output.slice(start, end + 1).trim();
|
|
234
|
+
try {
|
|
235
|
+
return JSON.parse(slice);
|
|
236
|
+
}
|
|
237
|
+
catch (_a) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
YarnPackageManagerAdapter.prototype.isWorkspaceListEntry = function (value) {
|
|
242
|
+
if (!value || typeof value !== "object") {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
var entry = value;
|
|
246
|
+
return typeof entry.name === "string" && typeof entry.location === "string" && entry.location !== ".";
|
|
247
|
+
};
|
|
248
|
+
YarnPackageManagerAdapter.prototype.yarnListOutputHasPackage = function (output, packageName) {
|
|
249
|
+
var _a;
|
|
250
|
+
var entries = this.parseJsonLines(output);
|
|
251
|
+
for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
|
|
252
|
+
var entry = entries_2[_i];
|
|
253
|
+
if (!entry || typeof entry !== "object") {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
var data = entry.data;
|
|
257
|
+
var trees = (_a = data === null || data === void 0 ? void 0 : data.trees) !== null && _a !== void 0 ? _a : entry.trees;
|
|
258
|
+
if (!trees) {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (trees.some(function (tree) { return tree.name.startsWith(packageName + "@"); })) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return false;
|
|
266
|
+
};
|
|
267
|
+
return YarnPackageManagerAdapter;
|
|
268
|
+
}(AbstractPackageManagerAdapter_1.AbstractPackageManagerAdapter));
|
|
269
|
+
exports.YarnPackageManagerAdapter = YarnPackageManagerAdapter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ts-dev-tools/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "TS dev tools Core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"linter",
|
|
@@ -93,5 +93,5 @@
|
|
|
93
93
|
"github-actions"
|
|
94
94
|
]
|
|
95
95
|
},
|
|
96
|
-
"gitHead": "
|
|
96
|
+
"gitHead": "e45076a10f72cd59f296dc30abdbe692aa8684b1"
|
|
97
97
|
}
|