@tsed/cli-core 4.4.6 → 4.5.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.
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 +111 -167
  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 +112 -168
  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 +26 -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,15 +1,17 @@
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
7
  import semver from "semver";
8
- import { PackageManager } from "../interfaces/ProjectPreferences.js";
9
- import { CliExeca } from "./CliExeca.js";
10
8
  import { CliFs } from "./CliFs.js";
11
9
  import { isValidVersion } from "../utils/isValidVersion.js";
12
- import { getPackageJson } from "../utils/getPackageJson.js";
10
+ import { YarnManager } from "./packageManagers/YarnManager.js";
11
+ import { YarnBerryManager } from "./packageManagers/YarnBerryManager.js";
12
+ import { NpmManager } from "./packageManagers/NpmManager.js";
13
+ import { PNpmManager } from "./packageManagers/PNpmManager.js";
14
+ import readPkgUp from "read-pkg-up";
13
15
  function mapPackagesWithInvalidVersion(deps) {
14
16
  const toString = (info) => {
15
17
  return info[1] === "latest" ? info[0] : info.join("@");
@@ -41,28 +43,18 @@ function mapPackagesWithValidVersion(deps) {
41
43
  return deps;
42
44
  }, {});
43
45
  }
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
- };
55
- }
56
46
  let ProjectPackageJson = class ProjectPackageJson {
57
47
  configuration;
48
+ fs;
49
+ packageManagers;
58
50
  rewrite = false;
59
51
  reinstall = false;
60
- cliExeca;
61
- fs;
62
52
  GH_TOKEN;
63
53
  raw;
64
- constructor(configuration) {
54
+ constructor(configuration, fs, packageManagers) {
65
55
  this.configuration = configuration;
56
+ this.fs = fs;
57
+ this.packageManagers = packageManagers;
66
58
  this.setRaw({
67
59
  name: "",
68
60
  version: "1.0.0",
@@ -72,6 +64,7 @@ let ProjectPackageJson = class ProjectPackageJson {
72
64
  devDependencies: {}
73
65
  });
74
66
  this.read();
67
+ this.packageManagers = packageManagers.filter((manager) => manager.has());
75
68
  }
76
69
  get path() {
77
70
  return join(this.dir, "package.json");
@@ -114,6 +107,9 @@ let ProjectPackageJson = class ProjectPackageJson {
114
107
  get preferences() {
115
108
  return this.raw[this.configuration.name];
116
109
  }
110
+ get availablePackageManagers() {
111
+ return this.packageManagers.map((manager) => manager.name);
112
+ }
117
113
  toJSON() {
118
114
  return this.raw;
119
115
  }
@@ -128,21 +124,25 @@ let ProjectPackageJson = class ProjectPackageJson {
128
124
  this.raw = {
129
125
  ...pkg,
130
126
  [this.configuration.name]: {
131
- ...defaultPreferences(pkg),
132
127
  ...(projectPreferences && projectPreferences(pkg)),
133
128
  ...preferences
134
129
  }
135
130
  };
136
131
  }
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";
132
+ packageManager(name) {
133
+ if (this.preferences.packageManager) {
134
+ name = this.preferences.packageManager;
135
+ }
136
+ name = name || "yarn";
137
+ let selectedPackageManager = this.packageManagers.find((manager) => manager.name === name);
138
+ if (!selectedPackageManager) {
139
+ selectedPackageManager = this.packageManagers.find((manager) => manager.name === "npm");
145
140
  }
141
+ this.setPreference("packageManager", selectedPackageManager.name);
142
+ return selectedPackageManager;
143
+ }
144
+ getRunCmd() {
145
+ return this.packageManager().runCmd;
146
146
  }
147
147
  addDevDependency(pkg, version) {
148
148
  this.devDependencies[pkg] = version;
@@ -225,28 +225,40 @@ let ProjectPackageJson = class ProjectPackageJson {
225
225
  this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), { encoding: "utf8" });
226
226
  return this;
227
227
  }
228
- hasYarn() {
229
- try {
230
- this.cliExeca.runSync(PackageManager.YARN, ["--version"]);
231
- return true;
232
- }
233
- catch (er) {
234
- return false;
235
- }
228
+ init(options = {}) {
229
+ const packageManager = this.packageManager(options.packageManager);
230
+ options.packageManager = packageManager.name;
231
+ options = {
232
+ ...options,
233
+ cwd: this.dir,
234
+ env: {
235
+ ...process.env,
236
+ GH_TOKEN: this.GH_TOKEN
237
+ }
238
+ };
239
+ this.write();
240
+ this.rewrite = true;
241
+ return packageManager.init(options);
236
242
  }
237
243
  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
- }
244
+ const packageManager = this.packageManager(options.packageManager);
245
+ options.packageManager = packageManager.name;
246
+ const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
247
+ const deps = mapPackagesWithInvalidVersion(this.dependencies);
248
+ options = {
249
+ ...options,
250
+ cwd: this.dir,
251
+ env: {
252
+ ...process.env,
253
+ GH_TOKEN: this.GH_TOKEN
254
+ }
255
+ };
256
+ const errorPipe = () => catchError((error) => {
257
+ if (error.stderr.startsWith("error Your lockfile needs to be updated")) {
258
+ return throwError(new Error(`yarn.lock file is outdated. Run ${packageManager.name}, commit the updated lockfile and try again.`));
259
+ }
260
+ return throwError(error);
261
+ });
250
262
  return [
251
263
  {
252
264
  title: "Write package.json",
@@ -255,7 +267,21 @@ let ProjectPackageJson = class ProjectPackageJson {
255
267
  this.write();
256
268
  }
257
269
  },
258
- ...tasks,
270
+ {
271
+ title: `Installing dependencies using ${packageManager.name}`,
272
+ skip: () => !this.reinstall,
273
+ task: () => packageManager.install(options).pipe(errorPipe())
274
+ },
275
+ {
276
+ title: `Add dependencies using ${packageManager.name}`,
277
+ skip: () => !deps.length,
278
+ task: () => packageManager.add(deps, options).pipe(errorPipe())
279
+ },
280
+ {
281
+ title: `Add devDependencies using ${packageManager.name}`,
282
+ skip: () => !devDeps.length,
283
+ task: () => packageManager.addDev(devDeps, options).pipe(errorPipe())
284
+ },
259
285
  {
260
286
  title: "Clean",
261
287
  task: () => {
@@ -273,7 +299,7 @@ let ProjectPackageJson = class ProjectPackageJson {
273
299
  async importModule(mod) {
274
300
  return this.fs.importModule(mod, this.dir);
275
301
  }
276
- runScript(npmTask, { ignoreError, ...opts } = {}) {
302
+ runScript(scriptName, { ignoreError, ...opts } = {}) {
277
303
  const options = {
278
304
  cwd: this.dir,
279
305
  ...opts
@@ -284,135 +310,53 @@ let ProjectPackageJson = class ProjectPackageJson {
284
310
  }
285
311
  return throwError(error);
286
312
  });
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;
313
+ return this.packageManager().runScript(scriptName, options).pipe(errorPipe());
298
314
  }
299
315
  setGhToken(GH_TOKEN) {
300
316
  this.GH_TOKEN = GH_TOKEN;
301
317
  }
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
- }
311
- };
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
- }
347
- };
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)
318
+ getPackageJson() {
319
+ const cwd = this.configuration.get("project.rootDir");
320
+ const disableReadUpPkg = this.configuration.get("disableReadUpPkg");
321
+ const name = this.configuration.get("name");
322
+ const pkgPath = join(String(cwd), "package.json");
323
+ const fileExists = this.fs.exists(pkgPath);
324
+ if (!disableReadUpPkg && !fileExists) {
325
+ const result = readPkgUp.sync({
326
+ cwd
327
+ });
328
+ if (result && result.path) {
329
+ const pkgPath = dirname(result.path);
330
+ this.configuration.set("project.root", pkgPath);
331
+ const pkg = this.fs.readJsonSync(result.path, { encoding: "utf8" });
332
+ return { ...this.getEmptyPackageJson(name), ...pkg };
367
333
  }
368
- ];
334
+ }
335
+ if (disableReadUpPkg && fileExists) {
336
+ const pkg = this.fs.readJsonSync(pkgPath, { encoding: "utf8" });
337
+ this.configuration.set("project.root", pkgPath);
338
+ return { ...this.getEmptyPackageJson(name), ...pkg };
339
+ }
340
+ return this.getEmptyPackageJson(name);
369
341
  }
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
- }
342
+ getEmptyPackageJson(name) {
343
+ return {
344
+ name,
345
+ version: "1.0.0",
346
+ description: "",
347
+ scripts: {},
348
+ dependencies: {},
349
+ devDependencies: {}
379
350
  };
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
- ];
399
- }
400
- getPackageJson() {
401
- return getPackageJson(this.configuration);
402
351
  }
403
352
  };
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
353
  ProjectPackageJson = __decorate([
413
- Injectable(),
354
+ Injectable({
355
+ imports: [YarnManager, YarnBerryManager, NpmManager, PNpmManager]
356
+ }),
414
357
  __param(0, Configuration()),
415
- __metadata("design:paramtypes", [Object])
358
+ __param(2, Inject("package:manager")),
359
+ __metadata("design:paramtypes", [Object, CliFs, Array])
416
360
  ], ProjectPackageJson);
417
361
  export { ProjectPackageJson };
418
362
  //# 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 semver from \"semver\";\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]) => !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\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\n this.rewrite = false;\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 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: \"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(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 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"]}
@@ -0,0 +1,23 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable } from "@tsed/di";
3
+ import { BaseManager } from "./BaseManager.js";
4
+ let PNpmManager = class PNpmManager extends BaseManager {
5
+ name = "pnpm";
6
+ cmd = "pnpm";
7
+ add(deps, options) {
8
+ return this.run("add", ["--save-prod", ...deps], options);
9
+ }
10
+ addDev(deps, options) {
11
+ return this.run("add", ["--save-dev", ...deps], options);
12
+ }
13
+ install(options) {
14
+ return this.run("install", ["--dev"].filter(Boolean), options);
15
+ }
16
+ };
17
+ PNpmManager = __decorate([
18
+ Injectable({
19
+ type: "package:manager"
20
+ })
21
+ ], PNpmManager);
22
+ export { PNpmManager };
23
+ //# sourceMappingURL=PNpmManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PNpmManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/PNpmManager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,WAAW,EAAiB,MAAM,eAAe,CAAC;AAKnD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,WAAW;IACjC,IAAI,GAAG,MAAM,CAAC;IACd,GAAG,GAAG,MAAM,CAAC;IAEtB,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AAfY,WAAW;IAHvB,UAAU,CAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,WAAW,CAevB;SAfY,WAAW","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport {Observable} from \"rxjs\";\nimport {BaseManager, ManagerCmdOpts} from \"./BaseManager\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class PNpmManager extends BaseManager {\n readonly name = \"pnpm\";\n readonly cmd = \"pnpm\";\n\n add(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"add\", [\"--save-prod\", ...deps], options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"add\", [\"--save-dev\", ...deps], options);\n }\n\n install(options: ManagerCmdOpts): Observable<any> {\n return this.run(\"install\", [\"--dev\"].filter(Boolean), options);\n }\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Inject, Injectable } from "@tsed/di";
3
+ import { BaseManager } from "./BaseManager.js";
4
+ import { join } from "path";
5
+ import { CliYaml } from "../CliYaml.js";
6
+ let YarnBerryManager = class YarnBerryManager extends BaseManager {
7
+ name = "yarn_berry";
8
+ cmd = "yarn";
9
+ cliYaml;
10
+ async init(options) {
11
+ // init yarn v1
12
+ this.install(options);
13
+ // then switch write file
14
+ await this.cliYaml.write(join(options.cwd, ".yarnrc.yml"), {
15
+ nodeLinker: "node-modules"
16
+ });
17
+ // then switch to berry
18
+ this.cliExeca.runSync(this.cmd, ["set", "version", "berry"]);
19
+ }
20
+ add(deps, options) {
21
+ return this.run("add", deps, options);
22
+ }
23
+ addDev(deps, options) {
24
+ return this.run("add", ["-D", ...deps], options);
25
+ }
26
+ install(options) {
27
+ return this.run("install", [options.verbose && "--verbose"], options);
28
+ }
29
+ };
30
+ __decorate([
31
+ Inject(),
32
+ __metadata("design:type", CliYaml)
33
+ ], YarnBerryManager.prototype, "cliYaml", void 0);
34
+ YarnBerryManager = __decorate([
35
+ Injectable({
36
+ type: "package:manager"
37
+ })
38
+ ], YarnBerryManager);
39
+ export { YarnBerryManager };
40
+ //# sourceMappingURL=YarnBerryManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YarnBerryManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/YarnBerryManager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAC,WAAW,EAAqC,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AAK5B,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,WAAW;IACtC,IAAI,GAAG,YAAY,CAAC;IACpB,GAAG,GAAG,MAAM,CAAC;IAGZ,OAAO,CAAU;IAE3B,KAAK,CAAC,IAAI,CAAC,OAA2B;QACpC,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtB,yBAAyB;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAI,EAAE,aAAa,CAAC,EAAE;YAC1D,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,OAA4C;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AA3BC;IAAC,MAAM,EAAE;8BACU,OAAO;iDAAC;AALhB,gBAAgB;IAH5B,UAAU,CAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,gBAAgB,CA+B5B;SA/BY,gBAAgB","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport execa from \"execa\";\nimport {Observable} from \"rxjs\";\nimport {BaseManager, ManagerCmdOpts, ManagerCmdSyncOpts} from \"./BaseManager\";\nimport {join} from \"path\";\nimport {CliYaml} from \"../CliYaml\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class YarnBerryManager extends BaseManager {\n readonly name = \"yarn_berry\";\n readonly cmd = \"yarn\";\n\n @Inject()\n protected cliYaml: CliYaml;\n\n async init(options: ManagerCmdSyncOpts) {\n // init yarn v1\n this.install(options);\n\n // then switch write file\n await this.cliYaml.write(join(options.cwd!, \".yarnrc.yml\"), {\n nodeLinker: \"node-modules\"\n });\n\n // then switch to berry\n this.cliExeca.runSync(this.cmd, [\"set\", \"version\", \"berry\"]);\n }\n\n add(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", deps, options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", [\"-D\", ...deps], options);\n }\n\n install(options: {verbose?: boolean} & execa.Options): Observable<any> {\n return this.run(\"install\", [options.verbose && \"--verbose\"], options);\n }\n}\n"]}