@tsed/cli-core 4.4.6 → 4.5.1

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.
Files changed (75) hide show
  1. package/lib/cjs/CliCore.js +2 -0
  2. package/lib/cjs/CliCore.js.map +1 -1
  3. package/lib/cjs/interfaces/CommandMetadata.js.map +1 -1
  4. package/lib/cjs/interfaces/CommandParameters.js.map +1 -1
  5. package/lib/cjs/services/CliFs.js +11 -0
  6. package/lib/cjs/services/CliFs.js.map +1 -1
  7. package/lib/cjs/services/CliPlugins.js +3 -1
  8. package/lib/cjs/services/CliPlugins.js.map +1 -1
  9. package/lib/cjs/services/CliService.js +44 -28
  10. package/lib/cjs/services/CliService.js.map +1 -1
  11. package/lib/cjs/services/ProjectPackageJson.js +155 -179
  12. package/lib/cjs/services/ProjectPackageJson.js.map +1 -1
  13. package/lib/cjs/services/packageManagers/BaseManager.js +36 -0
  14. package/lib/cjs/services/packageManagers/BaseManager.js.map +1 -0
  15. package/lib/cjs/services/packageManagers/NpmManager.js +26 -0
  16. package/lib/cjs/services/packageManagers/NpmManager.js.map +1 -0
  17. package/lib/cjs/services/packageManagers/PNpmManager.js +26 -0
  18. package/lib/cjs/services/packageManagers/PNpmManager.js.map +1 -0
  19. package/lib/cjs/services/packageManagers/YarnBerryManager.js +43 -0
  20. package/lib/cjs/services/packageManagers/YarnBerryManager.js.map +1 -0
  21. package/lib/cjs/services/packageManagers/YarnManager.js +26 -0
  22. package/lib/cjs/services/packageManagers/YarnManager.js.map +1 -0
  23. package/lib/cjs/utils/getCommandMetadata.js +5 -2
  24. package/lib/cjs/utils/getCommandMetadata.js.map +1 -1
  25. package/lib/cjs/utils/index.js +1 -1
  26. package/lib/cjs/utils/index.js.map +1 -1
  27. package/lib/cjs/utils/resolveConfiguration.js +23 -0
  28. package/lib/cjs/utils/resolveConfiguration.js.map +1 -0
  29. package/lib/esm/CliCore.js +2 -0
  30. package/lib/esm/CliCore.js.map +1 -1
  31. package/lib/esm/interfaces/CommandMetadata.js.map +1 -1
  32. package/lib/esm/interfaces/CommandParameters.js.map +1 -1
  33. package/lib/esm/services/CliFs.js +11 -0
  34. package/lib/esm/services/CliFs.js.map +1 -1
  35. package/lib/esm/services/CliPlugins.js +3 -1
  36. package/lib/esm/services/CliPlugins.js.map +1 -1
  37. package/lib/esm/services/CliService.js +45 -29
  38. package/lib/esm/services/CliService.js.map +1 -1
  39. package/lib/esm/services/ProjectPackageJson.js +156 -180
  40. package/lib/esm/services/ProjectPackageJson.js.map +1 -1
  41. package/lib/esm/services/packageManagers/BaseManager.js +32 -0
  42. package/lib/esm/services/packageManagers/BaseManager.js.map +1 -0
  43. package/lib/esm/services/packageManagers/NpmManager.js +23 -0
  44. package/lib/esm/services/packageManagers/NpmManager.js.map +1 -0
  45. package/lib/esm/services/packageManagers/PNpmManager.js +23 -0
  46. package/lib/esm/services/packageManagers/PNpmManager.js.map +1 -0
  47. package/lib/esm/services/packageManagers/YarnBerryManager.js +40 -0
  48. package/lib/esm/services/packageManagers/YarnBerryManager.js.map +1 -0
  49. package/lib/esm/services/packageManagers/YarnManager.js +23 -0
  50. package/lib/esm/services/packageManagers/YarnManager.js.map +1 -0
  51. package/lib/esm/utils/getCommandMetadata.js +5 -2
  52. package/lib/esm/utils/getCommandMetadata.js.map +1 -1
  53. package/lib/esm/utils/index.js +1 -1
  54. package/lib/esm/utils/index.js.map +1 -1
  55. package/lib/esm/utils/resolveConfiguration.js +19 -0
  56. package/lib/esm/utils/resolveConfiguration.js.map +1 -0
  57. package/lib/types/interfaces/CommandMetadata.d.ts +5 -12
  58. package/lib/types/interfaces/CommandParameters.d.ts +3 -0
  59. package/lib/types/services/CliFs.d.ts +3 -0
  60. package/lib/types/services/CliService.d.ts +10 -9
  61. package/lib/types/services/ProjectPackageJson.d.ts +27 -29
  62. package/lib/types/services/packageManagers/BaseManager.d.ts +25 -0
  63. package/lib/types/services/packageManagers/NpmManager.d.ts +9 -0
  64. package/lib/types/services/packageManagers/PNpmManager.d.ts +9 -0
  65. package/lib/types/services/packageManagers/YarnBerryManager.d.ts +15 -0
  66. package/lib/types/services/packageManagers/YarnManager.d.ts +12 -0
  67. package/lib/types/utils/getCommandMetadata.d.ts +2 -12
  68. package/lib/types/utils/index.d.ts +1 -1
  69. package/lib/types/utils/resolveConfiguration.d.ts +1 -0
  70. package/package.json +5 -3
  71. package/lib/cjs/utils/getPackageJson.js +0 -36
  72. package/lib/cjs/utils/getPackageJson.js.map +0 -1
  73. package/lib/esm/utils/getPackageJson.js +0 -31
  74. package/lib/esm/utils/getPackageJson.js.map +0 -1
  75. package/lib/types/utils/getPackageJson.d.ts +0 -2
@@ -1,21 +1,22 @@
1
1
  import { __decorate, __metadata, __param } from "tslib";
2
2
  import { getValue, setValue } from "@tsed/core";
3
3
  import { Configuration, Inject, Injectable } from "@tsed/di";
4
- import { join } from "path";
4
+ import { dirname, join } from "path";
5
5
  import { EMPTY, throwError } from "rxjs";
6
6
  import { catchError } from "rxjs/operators";
7
- import semver from "semver";
8
- import { PackageManager } from "../interfaces/ProjectPreferences.js";
9
- import { CliExeca } from "./CliExeca.js";
10
7
  import { CliFs } from "./CliFs.js";
11
8
  import { isValidVersion } from "../utils/isValidVersion.js";
12
- import { getPackageJson } from "../utils/getPackageJson.js";
9
+ import { YarnManager } from "./packageManagers/YarnManager.js";
10
+ import { YarnBerryManager } from "./packageManagers/YarnBerryManager.js";
11
+ import { NpmManager } from "./packageManagers/NpmManager.js";
12
+ import { PNpmManager } from "./packageManagers/PNpmManager.js";
13
+ import readPkgUp from "read-pkg-up";
13
14
  function mapPackagesWithInvalidVersion(deps) {
14
15
  const toString = (info) => {
15
16
  return info[1] === "latest" ? info[0] : info.join("@");
16
17
  };
17
18
  return Object.entries(deps)
18
- .filter(([, version]) => !semver.valid(version))
19
+ .filter(([, version]) => !isValidVersion(version))
19
20
  .map(toString);
20
21
  }
21
22
  function sortKeys(obj) {
@@ -30,39 +31,29 @@ function sortKeys(obj) {
30
31
  };
31
32
  }, {});
32
33
  }
33
- function mapPackagesWithValidVersion(deps) {
34
+ function mapPackages(deps) {
34
35
  return Object.entries(deps).reduce((deps, [key, version]) => {
35
36
  if (isValidVersion(version)) {
36
- return {
37
- ...deps,
38
- [key]: version
39
- };
37
+ deps.valid[key] = version;
38
+ }
39
+ else {
40
+ deps.invalid[key] = version;
40
41
  }
41
42
  return deps;
42
- }, {});
43
- }
44
- function defaultPreferences(pkg) {
45
- let packageManager = PackageManager.YARN;
46
- if (getValue(pkg, "scripts.build", "").includes("pnpm ")) {
47
- packageManager = PackageManager.PNPM;
48
- }
49
- else if (getValue(pkg, "scripts.build", "").includes("npm ")) {
50
- packageManager = PackageManager.NPM;
51
- }
52
- return {
53
- packageManager
54
- };
43
+ }, { valid: {}, invalid: {} });
55
44
  }
56
45
  let ProjectPackageJson = class ProjectPackageJson {
57
46
  configuration;
47
+ fs;
48
+ packageManagers;
58
49
  rewrite = false;
59
50
  reinstall = false;
60
- cliExeca;
61
- fs;
62
51
  GH_TOKEN;
63
52
  raw;
64
- constructor(configuration) {
53
+ constructor(configuration, fs, packageManagers) {
65
54
  this.configuration = configuration;
55
+ this.fs = fs;
56
+ this.packageManagers = packageManagers;
66
57
  this.setRaw({
67
58
  name: "",
68
59
  version: "1.0.0",
@@ -72,6 +63,7 @@ let ProjectPackageJson = class ProjectPackageJson {
72
63
  devDependencies: {}
73
64
  });
74
65
  this.read();
66
+ this.packageManagers = packageManagers.filter((manager) => manager.has());
75
67
  }
76
68
  get path() {
77
69
  return join(this.dir, "package.json");
@@ -114,6 +106,9 @@ let ProjectPackageJson = class ProjectPackageJson {
114
106
  get preferences() {
115
107
  return this.raw[this.configuration.name];
116
108
  }
109
+ get availablePackageManagers() {
110
+ return this.packageManagers.map((manager) => manager.name);
111
+ }
117
112
  toJSON() {
118
113
  return this.raw;
119
114
  }
@@ -128,21 +123,25 @@ let ProjectPackageJson = class ProjectPackageJson {
128
123
  this.raw = {
129
124
  ...pkg,
130
125
  [this.configuration.name]: {
131
- ...defaultPreferences(pkg),
132
126
  ...(projectPreferences && projectPreferences(pkg)),
133
127
  ...preferences
134
128
  }
135
129
  };
136
130
  }
137
- getRunCmd() {
138
- switch (this.preferences.packageManager) {
139
- case "npm":
140
- return "npm run";
141
- case "pnpm":
142
- return "pnpm run";
143
- default:
144
- return "yarn run";
131
+ packageManager(name) {
132
+ if (this.preferences.packageManager) {
133
+ name = this.preferences.packageManager;
145
134
  }
135
+ name = name || "yarn";
136
+ let selectedPackageManager = this.packageManagers.find((manager) => manager.name === name);
137
+ if (!selectedPackageManager) {
138
+ selectedPackageManager = this.packageManagers.find((manager) => manager.name === "npm");
139
+ }
140
+ this.setPreference("packageManager", selectedPackageManager.name);
141
+ return selectedPackageManager;
142
+ }
143
+ getRunCmd() {
144
+ return this.packageManager().runCmd;
146
145
  }
147
146
  addDevDependency(pkg, version) {
148
147
  this.devDependencies[pkg] = version;
@@ -203,6 +202,8 @@ let ProjectPackageJson = class ProjectPackageJson {
203
202
  }
204
203
  write() {
205
204
  const originalPkg = this.getPackageJson();
205
+ const { valid: dependencies, invalid: pendingDependencies } = mapPackages(this.raw.dependencies);
206
+ const { valid: devDependencies, invalid: pendingDevDependencies } = mapPackages(this.raw.devDependencies);
206
207
  this.rewrite = false;
207
208
  this.raw = {
208
209
  ...originalPkg,
@@ -213,40 +214,60 @@ let ProjectPackageJson = class ProjectPackageJson {
213
214
  },
214
215
  dependencies: sortKeys({
215
216
  ...originalPkg.dependencies,
216
- ...mapPackagesWithValidVersion(this.raw.dependencies)
217
+ ...dependencies
217
218
  }),
218
219
  devDependencies: sortKeys({
219
220
  ...originalPkg.devDependencies,
220
- ...mapPackagesWithValidVersion(this.raw.devDependencies)
221
+ ...devDependencies
221
222
  }),
222
223
  readme: undefined,
223
224
  _id: undefined
224
225
  };
225
226
  this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), { encoding: "utf8" });
227
+ this.raw.dependencies = {
228
+ ...this.raw.dependencies,
229
+ ...pendingDependencies
230
+ };
231
+ this.raw.devDependencies = {
232
+ ...this.raw.devDependencies,
233
+ ...pendingDevDependencies
234
+ };
226
235
  return this;
227
236
  }
228
- hasYarn() {
229
- try {
230
- this.cliExeca.runSync(PackageManager.YARN, ["--version"]);
231
- return true;
232
- }
233
- catch (er) {
234
- return false;
235
- }
237
+ init(options = {}) {
238
+ const packageManager = this.packageManager(options.packageManager);
239
+ options.packageManager = packageManager.name;
240
+ options = {
241
+ ...options,
242
+ cwd: this.dir,
243
+ env: {
244
+ ...process.env,
245
+ GH_TOKEN: this.GH_TOKEN
246
+ }
247
+ };
248
+ this.write();
249
+ this.rewrite = true;
250
+ return packageManager.init(options);
236
251
  }
237
252
  install(options = {}) {
238
- const packageManager = this.getPackageManager(options.packageManager);
239
- let tasks;
240
- switch (packageManager) {
241
- case "pnpm":
242
- tasks = this.installWithPnpm(options);
243
- break;
244
- case "npm":
245
- tasks = this.installWithNpm(options);
246
- break;
247
- default:
248
- tasks = this.installWithYarn(options);
249
- }
253
+ const packageManager = this.packageManager(options.packageManager);
254
+ options.packageManager = packageManager.name;
255
+ const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
256
+ const deps = mapPackagesWithInvalidVersion(this.dependencies);
257
+ options = {
258
+ ...options,
259
+ cwd: this.dir,
260
+ env: {
261
+ ...process.env,
262
+ GH_TOKEN: this.GH_TOKEN
263
+ }
264
+ };
265
+ const errorPipe = () => catchError((error) => {
266
+ if (error.stderr.startsWith("error Your lockfile needs to be updated")) {
267
+ return throwError(new Error(`yarn.lock file is outdated. Run ${packageManager.name}, commit the updated lockfile and try again.`));
268
+ }
269
+ return throwError(error);
270
+ });
250
271
  return [
251
272
  {
252
273
  title: "Write package.json",
@@ -255,13 +276,25 @@ let ProjectPackageJson = class ProjectPackageJson {
255
276
  this.write();
256
277
  }
257
278
  },
258
- ...tasks,
259
279
  {
260
- title: "Clean",
280
+ title: `Installing dependencies using ${packageManager.name}`,
281
+ skip: () => !this.reinstall,
282
+ task: () => packageManager.install(options).pipe(errorPipe())
283
+ },
284
+ {
285
+ title: `Add dependencies using ${packageManager.name}`,
286
+ skip: () => !deps.length,
287
+ task: () => packageManager.add(deps, options).pipe(errorPipe())
288
+ },
289
+ {
290
+ title: `Add devDependencies using ${packageManager.name}`,
291
+ skip: () => !devDeps.length,
292
+ task: () => packageManager.addDev(devDeps, options).pipe(errorPipe())
293
+ },
294
+ {
295
+ title: "Refresh",
261
296
  task: () => {
262
- this.reinstall = false;
263
- this.rewrite = false;
264
- this.read();
297
+ this.refresh();
265
298
  }
266
299
  }
267
300
  ];
@@ -273,7 +306,7 @@ let ProjectPackageJson = class ProjectPackageJson {
273
306
  async importModule(mod) {
274
307
  return this.fs.importModule(mod, this.dir);
275
308
  }
276
- runScript(npmTask, { ignoreError, ...opts } = {}) {
309
+ runScript(scriptName, { ignoreError, ...opts } = {}) {
277
310
  const options = {
278
311
  cwd: this.dir,
279
312
  ...opts
@@ -284,135 +317,78 @@ let ProjectPackageJson = class ProjectPackageJson {
284
317
  }
285
318
  return throwError(error);
286
319
  });
287
- return this.cliExeca.run(this.getPackageManager(), ["run", npmTask], options).pipe(errorPipe());
288
- }
289
- getPackageManager(packageManager) {
290
- if (this.preferences.packageManager) {
291
- packageManager = this.preferences.packageManager;
292
- }
293
- packageManager = packageManager || PackageManager.YARN;
294
- if (packageManager === PackageManager.YARN && !this.hasYarn()) {
295
- packageManager = PackageManager.NPM;
296
- }
297
- return packageManager;
320
+ return this.packageManager().runScript(scriptName, options).pipe(errorPipe());
298
321
  }
299
322
  setGhToken(GH_TOKEN) {
300
323
  this.GH_TOKEN = GH_TOKEN;
301
324
  }
302
- installWithYarn({ verbose }) {
303
- const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
304
- const deps = mapPackagesWithInvalidVersion(this.dependencies);
305
- const options = {
306
- cwd: this.dir,
307
- env: {
308
- ...process.env,
309
- GH_TOKEN: this.GH_TOKEN
310
- }
325
+ refresh() {
326
+ this.reinstall = false;
327
+ this.rewrite = false;
328
+ const cwd = this.configuration.get("project.rootDir");
329
+ const pkgPath = join(String(cwd), "package.json");
330
+ const pkg = this.fs.readJsonSync(pkgPath, { encoding: "utf8" });
331
+ pkg.scripts = {
332
+ ...this.raw.scripts,
333
+ ...pkg.scripts
311
334
  };
312
- const errorPipe = () => catchError((error) => {
313
- if (error.stderr.startsWith("error Your lockfile needs to be updated")) {
314
- return throwError(new Error("yarn.lock file is outdated. Run yarn, commit the updated lockfile and try again."));
315
- }
316
- return throwError(error);
317
- });
318
- return [
319
- {
320
- title: "Installing dependencies using Yarn",
321
- skip: () => !this.reinstall,
322
- task: () => this.cliExeca.run(PackageManager.YARN, ["install", verbose && "--verbose"].filter(Boolean), options).pipe(errorPipe())
323
- },
324
- {
325
- title: "Add dependencies using Yarn",
326
- skip: () => !deps.length,
327
- task: () => this.cliExeca.run(PackageManager.YARN, ["add", verbose && "--verbose", ...deps].filter(Boolean), options).pipe(errorPipe())
328
- },
329
- {
330
- title: "Add devDependencies using Yarn",
331
- skip: () => !devDeps.length,
332
- task: () => this.cliExeca
333
- .run(PackageManager.YARN, ["add", "-D", verbose && "--verbose", ...devDeps].filter(Boolean), options)
334
- .pipe(errorPipe())
335
- }
336
- ];
337
- }
338
- installWithNpm({ verbose }) {
339
- const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
340
- const deps = mapPackagesWithInvalidVersion(this.dependencies);
341
- const options = {
342
- cwd: this.dir,
343
- env: {
344
- ...process.env,
345
- GH_TOKEN: this.GH_TOKEN
346
- }
335
+ pkg.depencencies = {
336
+ ...this.raw.dependencies,
337
+ ...pkg.dependencies
347
338
  };
348
- return [
349
- {
350
- title: "Installing dependencies using npm",
351
- skip: () => {
352
- return !this.reinstall;
353
- },
354
- task: () => {
355
- return this.cliExeca.run(PackageManager.NPM, ["install", "--no-production", "--legacy-peer-deps", verbose && "--verbose"].filter(Boolean), options);
356
- }
357
- },
358
- {
359
- title: "Add dependencies using npm",
360
- skip: () => !deps.length,
361
- task: () => this.cliExeca.run(PackageManager.NPM, ["install", "--save", "--legacy-peer-deps", verbose && "--verbose", ...deps].filter(Boolean), options)
362
- },
363
- {
364
- title: "Add devDependencies using npm",
365
- skip: () => !devDeps.length,
366
- task: () => this.cliExeca.run(PackageManager.NPM, ["install", "--save-dev", "--legacy-peer-deps", verbose && "--verbose", ...devDeps].filter(Boolean), options)
367
- }
368
- ];
369
- }
370
- installWithPnpm({ verbose }) {
371
- const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
372
- const deps = mapPackagesWithInvalidVersion(this.dependencies);
373
- const options = {
374
- cwd: this.dir,
375
- env: {
376
- ...process.env,
377
- GH_TOKEN: this.GH_TOKEN
378
- }
339
+ pkg.devDepencencies = {
340
+ ...this.raw.devDependencies,
341
+ ...pkg.devDependencies
379
342
  };
380
- return [
381
- {
382
- title: "Installing dependencies using pnpm",
383
- skip: () => {
384
- return !this.reinstall;
385
- },
386
- task: () => this.cliExeca.run(PackageManager.PNPM, ["install", "--dev", verbose && "--verbose"].filter(Boolean), options)
387
- },
388
- {
389
- title: "Add dependencies using pnpm",
390
- skip: () => !deps.length,
391
- task: () => this.cliExeca.run(PackageManager.PNPM, ["add", "--save-prod", verbose && "--verbose", ...deps].filter(Boolean), options)
392
- },
393
- {
394
- title: "Add devDependencies using pnpm",
395
- skip: () => !devDeps.length,
396
- task: () => this.cliExeca.run(PackageManager.PNPM, ["add", "--save-dev", verbose && "--verbose", ...devDeps].filter(Boolean), options)
397
- }
398
- ];
343
+ pkg[this.configuration.name] = {
344
+ ...this.raw[this.configuration.name],
345
+ ...pkg[this.configuration.name]
346
+ };
347
+ this.raw = pkg;
348
+ return this;
399
349
  }
400
350
  getPackageJson() {
401
- return getPackageJson(this.configuration);
351
+ const cwd = this.configuration.get("project.rootDir");
352
+ const disableReadUpPkg = this.configuration.get("disableReadUpPkg");
353
+ const name = this.configuration.get("name");
354
+ const pkgPath = join(String(cwd), "package.json");
355
+ const fileExists = this.fs.exists(pkgPath);
356
+ if (!disableReadUpPkg && !fileExists) {
357
+ const result = readPkgUp.sync({
358
+ cwd
359
+ });
360
+ if (result && result.path) {
361
+ const pkgPath = dirname(result.path);
362
+ this.configuration.set("project.root", pkgPath);
363
+ const pkg = this.fs.readJsonSync(result.path, { encoding: "utf8" });
364
+ return { ...this.getEmptyPackageJson(name), ...pkg };
365
+ }
366
+ }
367
+ if (disableReadUpPkg && fileExists) {
368
+ const pkg = this.fs.readJsonSync(pkgPath, { encoding: "utf8" });
369
+ this.configuration.set("project.root", pkgPath);
370
+ return { ...this.getEmptyPackageJson(name), ...pkg };
371
+ }
372
+ return this.getEmptyPackageJson(name);
373
+ }
374
+ getEmptyPackageJson(name) {
375
+ return {
376
+ name,
377
+ version: "1.0.0",
378
+ description: "",
379
+ scripts: {},
380
+ dependencies: {},
381
+ devDependencies: {}
382
+ };
402
383
  }
403
384
  };
404
- __decorate([
405
- Inject(CliExeca),
406
- __metadata("design:type", CliExeca)
407
- ], ProjectPackageJson.prototype, "cliExeca", void 0);
408
- __decorate([
409
- Inject(CliFs),
410
- __metadata("design:type", CliFs)
411
- ], ProjectPackageJson.prototype, "fs", void 0);
412
385
  ProjectPackageJson = __decorate([
413
- Injectable(),
386
+ Injectable({
387
+ imports: [YarnManager, YarnBerryManager, NpmManager, PNpmManager]
388
+ }),
414
389
  __param(0, Configuration()),
415
- __metadata("design:paramtypes", [Object])
390
+ __param(2, Inject("package:manager")),
391
+ __metadata("design:paramtypes", [Object, CliFs, Array])
416
392
  ], ProjectPackageJson);
417
393
  export { ProjectPackageJson };
418
394
  //# sourceMappingURL=ProjectPackageJson.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectPackageJson.js","sourceRoot":"","sources":["../../../src/services/ProjectPackageJson.ts"],"names":[],"mappings":"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","sourcesContent":["import {getValue, setValue} from \"@tsed/core\";\nimport {Configuration, Inject, Injectable} from \"@tsed/di\";\nimport {join} from \"path\";\nimport {EMPTY, throwError} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport semver from \"semver\";\nimport {PackageJson} from \"../interfaces/PackageJson\";\nimport {PackageManager, ProjectPreferences} from \"../interfaces/ProjectPreferences\";\nimport {CliExeca} from \"./CliExeca\";\nimport {CliFs} from \"./CliFs\";\nimport {isValidVersion} from \"../utils/isValidVersion\";\nimport {getPackageJson} from \"../utils/getPackageJson\";\nimport {Options} from \"execa\";\n\nexport interface InstallOptions {\n packageManager?: PackageManager;\n\n [key: string]: any;\n}\n\nfunction mapPackagesWithInvalidVersion(deps: any) {\n const toString = (info: [string, string]) => {\n return info[1] === \"latest\" ? info[0] : info.join(\"@\");\n };\n\n return Object.entries(deps)\n .filter(([, version]) => !semver.valid(version as string))\n .map(toString);\n}\n\nfunction sortKeys(obj: any) {\n return Object.entries(obj)\n .sort((k1, k2) => {\n return k1[0] < k2[0] ? -1 : 1;\n })\n .reduce((obj, [key, value]) => {\n return {\n ...obj,\n [key]: value\n };\n }, {});\n}\n\nfunction mapPackagesWithValidVersion(deps: any) {\n return Object.entries(deps).reduce((deps, [key, version]: [string, string]) => {\n if (isValidVersion(version)) {\n return {\n ...deps,\n [key]: version\n };\n }\n\n return deps;\n }, {});\n}\n\nfunction defaultPreferences(pkg?: any): Record<string, any> {\n let packageManager = PackageManager.YARN;\n\n if (getValue(pkg, \"scripts.build\", \"\").includes(\"pnpm \")) {\n packageManager = PackageManager.PNPM;\n } else if (getValue(pkg, \"scripts.build\", \"\").includes(\"npm \")) {\n packageManager = PackageManager.NPM;\n }\n\n return {\n packageManager\n };\n}\n\n@Injectable()\nexport class ProjectPackageJson {\n public rewrite = false;\n public reinstall = false;\n\n @Inject(CliExeca)\n protected cliExeca: CliExeca;\n\n @Inject(CliFs)\n protected fs: CliFs;\n\n private GH_TOKEN: string;\n private raw: PackageJson;\n\n constructor(@Configuration() private configuration: Configuration) {\n this.setRaw({\n name: \"\",\n version: \"1.0.0\",\n description: \"\",\n scripts: {},\n dependencies: {},\n devDependencies: {}\n });\n this.read();\n }\n\n get path() {\n return join(this.dir, \"package.json\");\n }\n\n get dir() {\n return String(this.configuration.project?.rootDir);\n }\n\n set dir(dir: string) {\n this.configuration.project.rootDir = dir;\n\n this.read();\n }\n\n get name() {\n return this.raw.name;\n }\n\n set name(name: string) {\n this.raw.name = name;\n this.rewrite = true;\n }\n\n get version() {\n return this.raw.version;\n }\n\n get description() {\n return this.raw.description;\n }\n\n get scripts() {\n return this.raw.scripts;\n }\n\n get dependencies() {\n return this.raw.dependencies;\n }\n\n get devDependencies() {\n return this.raw.devDependencies;\n }\n\n get allDependencies(): {[key: string]: string} {\n return {\n ...(this.dependencies || {}),\n ...(this.devDependencies || {})\n };\n }\n\n get preferences(): ProjectPreferences {\n return this.raw[this.configuration.name];\n }\n\n toJSON() {\n return this.raw;\n }\n\n read() {\n const pkg = this.getPackageJson();\n\n this.setRaw(pkg);\n return this;\n }\n\n setRaw(pkg: any) {\n const projectPreferences = this.configuration.defaultProjectPreferences;\n const preferences = getValue(pkg, this.configuration.name);\n\n this.raw = {\n ...pkg,\n [this.configuration.name]: {\n ...defaultPreferences(pkg),\n ...(projectPreferences && projectPreferences(pkg)),\n ...preferences\n }\n };\n }\n\n getRunCmd() {\n switch (this.preferences.packageManager) {\n case \"npm\":\n return \"npm run\";\n case \"pnpm\":\n return \"pnpm run\";\n default:\n return \"yarn run\";\n }\n }\n\n addDevDependency(pkg: string, version?: string) {\n this.devDependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDevDependencies(modules: {[key: string]: string | undefined}, scope: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, scope);\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDevDependency(pkg, (version || \"\").replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addDependency(pkg: string, version?: string) {\n this.dependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDependencies(modules: {[key: string]: string | undefined}, ctx: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, ctx);\n\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDependency(pkg, (version || \"\").replace(\"{{tsedVersion}}\", ctx.tsedVersion).replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addScript(task: string, cmd: string) {\n this.scripts[task] = cmd;\n this.rewrite = true;\n\n return this;\n }\n\n addScripts(scripts: {[key: string]: string}) {\n Object.entries(scripts).forEach(([task, cmd]) => {\n this.addScript(task, cmd);\n });\n\n return this;\n }\n\n add(key: string, data: any) {\n this.raw[key] = data;\n this.rewrite = true;\n\n return this;\n }\n\n setPreference(key: keyof ProjectPreferences, value: any) {\n setValue(this.raw, `${this.configuration.name}.${key}`, value);\n this.rewrite = true;\n return;\n }\n\n set(key: string, value: any) {\n this.raw[key] = value;\n\n this.rewrite = true;\n\n if ([\"dependencies\", \"devDependencies\", \"peerDependencies\"].includes(key)) {\n this.reinstall = true;\n }\n }\n\n get(key: string) {\n return this.raw[key];\n }\n\n write() {\n const originalPkg = this.getPackageJson();\n\n this.rewrite = false;\n\n this.raw = {\n ...originalPkg,\n ...this.raw,\n scripts: {\n ...(originalPkg.scripts || {}),\n ...(this.raw.scripts || {})\n },\n dependencies: sortKeys({\n ...originalPkg.dependencies,\n ...mapPackagesWithValidVersion(this.raw.dependencies)\n }),\n devDependencies: sortKeys({\n ...originalPkg.devDependencies,\n ...mapPackagesWithValidVersion(this.raw.devDependencies)\n }),\n readme: undefined,\n _id: undefined\n };\n\n this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), {encoding: \"utf8\"});\n\n return this;\n }\n\n hasYarn() {\n try {\n this.cliExeca.runSync(PackageManager.YARN, [\"--version\"]);\n\n return true;\n } catch (er) {\n return false;\n }\n }\n\n install(options: InstallOptions = {}) {\n const packageManager = this.getPackageManager(options.packageManager);\n let tasks: {title: string; skip: () => boolean; task: () => any}[];\n switch (packageManager) {\n case \"pnpm\":\n tasks = this.installWithPnpm(options);\n break;\n case \"npm\":\n tasks = this.installWithNpm(options);\n break;\n default:\n tasks = this.installWithYarn(options);\n }\n\n return [\n {\n title: \"Write package.json\",\n enabled: () => this.rewrite,\n task: () => {\n this.write();\n }\n },\n ...tasks,\n {\n title: \"Clean\",\n task: () => {\n this.reinstall = false;\n this.rewrite = false;\n this.read();\n }\n }\n ];\n }\n\n /**\n * Import a module from the project workspace\n * @param mod\n */\n async importModule(mod: string) {\n return this.fs.importModule(mod, this.dir);\n }\n\n public runScript(npmTask: string, {ignoreError, ...opts}: {ignoreError?: boolean} & Options & Record<string, any> = {}) {\n const options = {\n cwd: this.dir,\n ...opts\n };\n const errorPipe = () =>\n catchError((error: any) => {\n if (ignoreError) {\n return EMPTY;\n }\n\n return throwError(error);\n });\n\n return this.cliExeca.run(this.getPackageManager(), [\"run\", npmTask], options).pipe(errorPipe());\n }\n\n getPackageManager(packageManager?: PackageManager): PackageManager {\n if (this.preferences.packageManager) {\n packageManager = this.preferences.packageManager;\n }\n\n packageManager = packageManager || PackageManager.YARN;\n\n if (packageManager === PackageManager.YARN && !this.hasYarn()) {\n packageManager = PackageManager.NPM;\n }\n\n return packageManager;\n }\n\n setGhToken(GH_TOKEN: string) {\n this.GH_TOKEN = GH_TOKEN;\n }\n\n protected installWithYarn({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n const errorPipe = () =>\n catchError((error: any) => {\n if (error.stderr.startsWith(\"error Your lockfile needs to be updated\")) {\n return throwError(new Error(\"yarn.lock file is outdated. Run yarn, commit the updated lockfile and try again.\"));\n }\n\n return throwError(error);\n });\n\n return [\n {\n title: \"Installing dependencies using Yarn\",\n skip: () => !this.reinstall,\n task: () => this.cliExeca.run(PackageManager.YARN, [\"install\", verbose && \"--verbose\"].filter(Boolean), options).pipe(errorPipe())\n },\n {\n title: \"Add dependencies using Yarn\",\n skip: () => !deps.length,\n task: () =>\n this.cliExeca.run(PackageManager.YARN, [\"add\", verbose && \"--verbose\", ...deps].filter(Boolean), options).pipe(errorPipe())\n },\n {\n title: \"Add devDependencies using Yarn\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca\n .run(PackageManager.YARN, [\"add\", \"-D\", verbose && \"--verbose\", ...devDeps].filter(Boolean), options)\n .pipe(errorPipe())\n }\n ];\n }\n\n protected installWithNpm({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n return [\n {\n title: \"Installing dependencies using npm\",\n skip: () => {\n return !this.reinstall;\n },\n task: () => {\n return this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--no-production\", \"--legacy-peer-deps\", verbose && \"--verbose\"].filter(Boolean),\n options\n );\n }\n },\n {\n title: \"Add dependencies using npm\",\n skip: () => !deps.length,\n task: () =>\n this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--save\", \"--legacy-peer-deps\", verbose && \"--verbose\", ...deps].filter(Boolean),\n options\n )\n },\n {\n title: \"Add devDependencies using npm\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--save-dev\", \"--legacy-peer-deps\", verbose && \"--verbose\", ...devDeps].filter(Boolean),\n options\n )\n }\n ];\n }\n\n protected installWithPnpm({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n return [\n {\n title: \"Installing dependencies using pnpm\",\n skip: () => {\n return !this.reinstall;\n },\n task: () => this.cliExeca.run(PackageManager.PNPM, [\"install\", \"--dev\", verbose && \"--verbose\"].filter(Boolean), options)\n },\n {\n title: \"Add dependencies using pnpm\",\n skip: () => !deps.length,\n task: () => this.cliExeca.run(PackageManager.PNPM, [\"add\", \"--save-prod\", verbose && \"--verbose\", ...deps].filter(Boolean), options)\n },\n {\n title: \"Add devDependencies using pnpm\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca.run(PackageManager.PNPM, [\"add\", \"--save-dev\", verbose && \"--verbose\", ...devDeps].filter(Boolean), options)\n }\n ];\n }\n\n protected getPackageJson() {\n return getPackageJson(this.configuration);\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectPackageJson.js","sourceRoot":"","sources":["../../../src/services/ProjectPackageJson.ts"],"names":[],"mappings":"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","sourcesContent":["import {getValue, setValue} from \"@tsed/core\";\nimport {Configuration, Inject, Injectable} from \"@tsed/di\";\nimport {dirname, join} from \"path\";\nimport {EMPTY, throwError} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport {PackageJson} from \"../interfaces/PackageJson\";\nimport {ProjectPreferences} from \"../interfaces/ProjectPreferences\";\nimport {CliFs} from \"./CliFs\";\nimport {isValidVersion} from \"../utils/isValidVersion\";\nimport {Options} from \"execa\";\nimport {BaseManager} from \"./packageManagers/BaseManager\";\nimport {YarnManager} from \"./packageManagers/YarnManager\";\nimport {YarnBerryManager} from \"./packageManagers/YarnBerryManager\";\nimport {NpmManager} from \"./packageManagers/NpmManager\";\nimport {PNpmManager} from \"./packageManagers/PNpmManager\";\nimport readPkgUp from \"read-pkg-up\";\n\nexport interface InstallOptions {\n packageManager?: string;\n\n [key: string]: any;\n}\n\nfunction mapPackagesWithInvalidVersion(deps: any) {\n const toString = (info: [string, string]) => {\n return info[1] === \"latest\" ? info[0] : info.join(\"@\");\n };\n\n return Object.entries(deps)\n .filter(([, version]) => !isValidVersion(version as string))\n .map(toString);\n}\n\nfunction sortKeys(obj: any) {\n return Object.entries(obj)\n .sort((k1, k2) => {\n return k1[0] < k2[0] ? -1 : 1;\n })\n .reduce((obj, [key, value]) => {\n return {\n ...obj,\n [key]: value\n };\n }, {});\n}\n\nfunction mapPackages(deps: any) {\n return Object.entries(deps).reduce(\n (deps, [key, version]: [string, string]) => {\n if (isValidVersion(version)) {\n deps.valid[key] = version;\n } else {\n deps.invalid[key] = version;\n }\n\n return deps;\n },\n {valid: {}, invalid: {}} as {valid: Record<string, string>; invalid: Record<string, string>}\n );\n}\n\n@Injectable({\n imports: [YarnManager, YarnBerryManager, NpmManager, PNpmManager]\n})\nexport class ProjectPackageJson {\n public rewrite = false;\n public reinstall = false;\n\n private GH_TOKEN: string;\n private raw: PackageJson;\n\n constructor(\n @Configuration() private configuration: Configuration,\n protected fs: CliFs,\n @Inject(\"package:manager\") protected packageManagers: BaseManager[]\n ) {\n this.setRaw({\n name: \"\",\n version: \"1.0.0\",\n description: \"\",\n scripts: {},\n dependencies: {},\n devDependencies: {}\n });\n this.read();\n this.packageManagers = packageManagers.filter((manager) => manager.has());\n }\n\n get path() {\n return join(this.dir, \"package.json\");\n }\n\n get dir() {\n return String(this.configuration.project?.rootDir);\n }\n\n set dir(dir: string) {\n this.configuration.project.rootDir = dir;\n\n this.read();\n }\n\n get name() {\n return this.raw.name;\n }\n\n set name(name: string) {\n this.raw.name = name;\n this.rewrite = true;\n }\n\n get version() {\n return this.raw.version;\n }\n\n get description() {\n return this.raw.description;\n }\n\n get scripts() {\n return this.raw.scripts;\n }\n\n get dependencies() {\n return this.raw.dependencies;\n }\n\n get devDependencies() {\n return this.raw.devDependencies;\n }\n\n get allDependencies(): {[key: string]: string} {\n return {\n ...(this.dependencies || {}),\n ...(this.devDependencies || {})\n };\n }\n\n get preferences(): ProjectPreferences {\n return this.raw[this.configuration.name];\n }\n\n get availablePackageManagers() {\n return this.packageManagers.map((manager) => manager.name);\n }\n\n toJSON() {\n return this.raw;\n }\n\n read() {\n const pkg = this.getPackageJson();\n this.setRaw(pkg);\n return this;\n }\n\n setRaw(pkg: any) {\n const projectPreferences = this.configuration.defaultProjectPreferences;\n const preferences = getValue(pkg, this.configuration.name);\n\n this.raw = {\n ...pkg,\n [this.configuration.name]: {\n ...(projectPreferences && projectPreferences(pkg)),\n ...preferences\n }\n };\n }\n\n packageManager(name?: string): BaseManager {\n if (this.preferences.packageManager) {\n name = this.preferences.packageManager;\n }\n\n name = name || \"yarn\";\n\n let selectedPackageManager = this.packageManagers.find((manager) => manager.name === name);\n\n if (!selectedPackageManager) {\n selectedPackageManager = this.packageManagers.find((manager) => manager.name === \"npm\")!;\n }\n\n this.setPreference(\"packageManager\", selectedPackageManager.name);\n\n return selectedPackageManager;\n }\n\n getRunCmd() {\n return this.packageManager()!.runCmd;\n }\n\n addDevDependency(pkg: string, version?: string) {\n this.devDependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDevDependencies(modules: {[key: string]: string | undefined}, scope: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, scope);\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDevDependency(pkg, (version || \"\").replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addDependency(pkg: string, version?: string) {\n this.dependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDependencies(modules: {[key: string]: string | undefined}, ctx: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, ctx);\n\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDependency(pkg, (version || \"\").replace(\"{{tsedVersion}}\", ctx.tsedVersion).replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addScript(task: string, cmd: string) {\n this.scripts[task] = cmd;\n this.rewrite = true;\n\n return this;\n }\n\n addScripts(scripts: {[key: string]: string}) {\n Object.entries(scripts).forEach(([task, cmd]) => {\n this.addScript(task, cmd);\n });\n\n return this;\n }\n\n add(key: string, data: any) {\n this.raw[key] = data;\n this.rewrite = true;\n\n return this;\n }\n\n setPreference(key: keyof ProjectPreferences, value: any) {\n setValue(this.raw, `${this.configuration.name}.${key}`, value);\n this.rewrite = true;\n\n return;\n }\n\n set(key: string, value: any) {\n this.raw[key] = value;\n\n this.rewrite = true;\n\n if ([\"dependencies\", \"devDependencies\", \"peerDependencies\"].includes(key)) {\n this.reinstall = true;\n }\n }\n\n get(key: string) {\n return this.raw[key];\n }\n\n write() {\n const originalPkg = this.getPackageJson();\n const {valid: dependencies, invalid: pendingDependencies} = mapPackages(this.raw.dependencies);\n const {valid: devDependencies, invalid: pendingDevDependencies} = mapPackages(this.raw.devDependencies);\n\n this.rewrite = false;\n\n this.raw = {\n ...originalPkg,\n ...this.raw,\n scripts: {\n ...(originalPkg.scripts || {}),\n ...(this.raw.scripts || {})\n },\n dependencies: sortKeys({\n ...originalPkg.dependencies,\n ...dependencies\n }),\n devDependencies: sortKeys({\n ...originalPkg.devDependencies,\n ...devDependencies\n }),\n readme: undefined,\n _id: undefined\n };\n\n this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), {encoding: \"utf8\"});\n\n this.raw.dependencies = {\n ...this.raw.dependencies,\n ...pendingDependencies\n };\n\n this.raw.devDependencies = {\n ...this.raw.devDependencies,\n ...pendingDevDependencies\n };\n\n return this;\n }\n\n init(options: InstallOptions = {}) {\n const packageManager = this.packageManager(options.packageManager);\n options.packageManager = packageManager.name;\n\n options = {\n ...options,\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n this.write();\n this.rewrite = true;\n\n return packageManager.init(options as any);\n }\n\n install(options: InstallOptions = {}) {\n const packageManager = this.packageManager(options.packageManager);\n options.packageManager = packageManager.name;\n\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n\n options = {\n ...options,\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n const errorPipe = () =>\n catchError((error: any) => {\n if (error.stderr.startsWith(\"error Your lockfile needs to be updated\")) {\n return throwError(\n new Error(`yarn.lock file is outdated. Run ${packageManager.name}, commit the updated lockfile and try again.`)\n );\n }\n\n return throwError(error);\n });\n\n return [\n {\n title: \"Write package.json\",\n enabled: () => this.rewrite,\n task: () => {\n this.write();\n }\n },\n {\n title: `Installing dependencies using ${packageManager.name}`,\n skip: () => !this.reinstall,\n task: () => packageManager.install(options as any).pipe(errorPipe())\n },\n {\n title: `Add dependencies using ${packageManager.name}`,\n skip: () => !deps.length,\n task: () => packageManager.add(deps, options as any).pipe(errorPipe())\n },\n {\n title: `Add devDependencies using ${packageManager.name}`,\n skip: () => !devDeps.length,\n task: () => packageManager.addDev(devDeps, options as any).pipe(errorPipe())\n },\n {\n title: \"Refresh\",\n task: () => {\n this.refresh();\n }\n }\n ];\n }\n\n /**\n * Import a module from the project workspace\n * @param mod\n */\n async importModule(mod: string) {\n return this.fs.importModule(mod, this.dir);\n }\n\n public runScript(scriptName: string, {ignoreError, ...opts}: {ignoreError?: boolean} & Options & Record<string, any> = {}) {\n const options = {\n cwd: this.dir,\n ...opts\n };\n\n const errorPipe = () =>\n catchError((error: any) => {\n if (ignoreError) {\n return EMPTY;\n }\n\n return throwError(error);\n });\n\n return this.packageManager().runScript(scriptName, options).pipe(errorPipe());\n }\n\n setGhToken(GH_TOKEN: string) {\n this.GH_TOKEN = GH_TOKEN;\n }\n\n refresh() {\n this.reinstall = false;\n this.rewrite = false;\n\n const cwd = this.configuration.get(\"project.rootDir\");\n const pkgPath = join(String(cwd), \"package.json\");\n\n const pkg = this.fs.readJsonSync(pkgPath, {encoding: \"utf8\"});\n\n pkg.scripts = {\n ...this.raw.scripts,\n ...pkg.scripts\n };\n\n pkg.depencencies = {\n ...this.raw.dependencies,\n ...pkg.dependencies\n };\n\n pkg.devDepencencies = {\n ...this.raw.devDependencies,\n ...pkg.devDependencies\n };\n\n pkg[this.configuration.name] = {\n ...this.raw[this.configuration.name],\n ...pkg[this.configuration.name]\n };\n\n this.raw = pkg;\n\n return this;\n }\n\n protected getPackageJson() {\n const cwd = this.configuration.get(\"project.rootDir\");\n const disableReadUpPkg = this.configuration.get(\"disableReadUpPkg\");\n const name = this.configuration.get(\"name\");\n\n const pkgPath = join(String(cwd), \"package.json\");\n const fileExists = this.fs.exists(pkgPath);\n\n if (!disableReadUpPkg && !fileExists) {\n const result = readPkgUp.sync({\n cwd\n });\n\n if (result && result.path) {\n const pkgPath = dirname(result.path);\n this.configuration.set(\"project.root\", pkgPath);\n\n const pkg = this.fs.readJsonSync(result.path, {encoding: \"utf8\"});\n\n return {...this.getEmptyPackageJson(name), ...pkg} as any;\n }\n }\n\n if (disableReadUpPkg && fileExists) {\n const pkg = this.fs.readJsonSync(pkgPath, {encoding: \"utf8\"});\n this.configuration.set(\"project.root\", pkgPath);\n\n return {...this.getEmptyPackageJson(name), ...pkg} as any;\n }\n\n return this.getEmptyPackageJson(name);\n }\n\n protected getEmptyPackageJson(name: string) {\n return {\n name,\n version: \"1.0.0\",\n description: \"\",\n scripts: {},\n dependencies: {},\n devDependencies: {}\n };\n }\n}\n"]}
@@ -0,0 +1,32 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Inject } from "@tsed/di";
3
+ import { CliExeca } from "../CliExeca.js";
4
+ export class BaseManager {
5
+ verboseOpt = "--verbose";
6
+ cliExeca;
7
+ get runCmd() {
8
+ return `${this.cmd} run`;
9
+ }
10
+ has() {
11
+ try {
12
+ this.cliExeca.runSync(this.cmd, ["--version"]);
13
+ return true;
14
+ }
15
+ catch (er) {
16
+ return false;
17
+ }
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
+ async init(opts) { }
21
+ runScript(script, options) {
22
+ return this.run("run", [script], options);
23
+ }
24
+ run(cmd, args, options) {
25
+ return this.cliExeca.run(this.cmd, [cmd, options.verbose && this.verboseOpt, ...args].filter(Boolean), options);
26
+ }
27
+ }
28
+ __decorate([
29
+ Inject(CliExeca),
30
+ __metadata("design:type", CliExeca)
31
+ ], BaseManager.prototype, "cliExeca", void 0);
32
+ //# sourceMappingURL=BaseManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/BaseManager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAKrC,MAAM,OAAgB,WAAW;IAGrB,UAAU,GAAG,WAAW,CAAC;IAGzB,QAAQ,CAAW;IAE7B,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IAC3B,CAAC;IAED,GAAG;QACD,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAE/C,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,EAAE,EAAE;YACX,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,IAAI,CAAC,IAAwB,IAAkB,CAAC;IAQtD,SAAS,CAAC,MAAc,EAAE,OAAuB;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAES,GAAG,CAAC,GAAW,EAAE,IAAW,EAAE,OAAoD;QAC1F,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,EAAE,OAAO,CAAC,CAAC;IAC9H,CAAC;CACF;AAjCC;IAAC,MAAM,CAAC,QAAQ,CAAC;8BACG,QAAQ;6CAAC","sourcesContent":["import {Inject} from \"@tsed/di\";\nimport {Observable} from \"rxjs\";\nimport execa from \"execa\";\nimport {CliExeca} from \"../CliExeca\";\n\nexport type ManagerCmdOpts = {verbose?: boolean} & execa.Options;\nexport type ManagerCmdSyncOpts = {verbose?: boolean} & execa.SyncOptions;\n\nexport abstract class BaseManager {\n abstract readonly name: string;\n abstract readonly cmd: string;\n protected verboseOpt = \"--verbose\";\n\n @Inject(CliExeca)\n protected cliExeca: CliExeca;\n\n get runCmd() {\n return `${this.cmd} run`;\n }\n\n has() {\n try {\n this.cliExeca.runSync(this.cmd, [\"--version\"]);\n\n return true;\n } catch (er) {\n return false;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async init(opts: ManagerCmdSyncOpts): Promise<void> {}\n\n abstract install(options: ManagerCmdOpts): Observable<any>;\n\n abstract add(deps: string[], options: ManagerCmdOpts): Observable<any>;\n\n abstract addDev(deps: string[], options: ManagerCmdOpts): Observable<any>;\n\n runScript(script: string, options: ManagerCmdOpts) {\n return this.run(\"run\", [script], options);\n }\n\n protected run(cmd: string, args: any[], options: {verbose?: boolean} & execa.Options<string>) {\n return this.cliExeca.run(this.cmd, [cmd, options.verbose && this.verboseOpt, ...args].filter(Boolean) as string[], options);\n }\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { __decorate } from "tslib";
2
+ import { BaseManager } from "./BaseManager.js";
3
+ import { Injectable } from "@tsed/di";
4
+ let NpmManager = class NpmManager extends BaseManager {
5
+ name = "npm";
6
+ cmd = "npm";
7
+ add(deps, options) {
8
+ return this.run("install", ["--no-production", "--legacy-peer-deps", "--save", ...deps], options);
9
+ }
10
+ addDev(deps, options) {
11
+ return this.run("install", ["--no-production", "--legacy-peer-deps", "--save-dev", ...deps], options);
12
+ }
13
+ install(options) {
14
+ return this.run("install", ["--no-production", "--legacy-peer-deps"], options);
15
+ }
16
+ };
17
+ NpmManager = __decorate([
18
+ Injectable({
19
+ type: "package:manager"
20
+ })
21
+ ], NpmManager);
22
+ export { NpmManager };
23
+ //# sourceMappingURL=NpmManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/NpmManager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAiB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAM7B,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,WAAW;IAChC,IAAI,GAAW,KAAK,CAAC;IACrB,GAAG,GAAW,KAAK,CAAC;IAE7B,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACxG,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;CACF,CAAA;AAfY,UAAU;IAHtB,UAAU,CAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,UAAU,CAetB;SAfY,UAAU","sourcesContent":["import {BaseManager, ManagerCmdOpts} from \"./BaseManager\";\nimport {Injectable} from \"@tsed/di\";\nimport {Observable} from \"rxjs\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class NpmManager extends BaseManager {\n readonly name: string = \"npm\";\n readonly cmd: string = \"npm\";\n\n add(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"install\", [\"--no-production\", \"--legacy-peer-deps\", \"--save\", ...deps], options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"install\", [\"--no-production\", \"--legacy-peer-deps\", \"--save-dev\", ...deps], options);\n }\n\n install(options: ManagerCmdOpts): Observable<any> {\n return this.run(\"install\", [\"--no-production\", \"--legacy-peer-deps\"], options);\n }\n}\n"]}