@nestjs/cli 11.0.16 → 12.0.0-alpha.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 (182) hide show
  1. package/actions/abstract.action.d.ts +1 -2
  2. package/actions/abstract.action.js +1 -5
  3. package/actions/add.action.d.ts +3 -4
  4. package/actions/add.action.js +38 -52
  5. package/actions/build.action.d.ts +11 -10
  6. package/actions/build.action.js +85 -72
  7. package/actions/generate.action.d.ts +3 -3
  8. package/actions/generate.action.js +56 -59
  9. package/actions/index.d.ts +7 -7
  10. package/actions/index.js +7 -23
  11. package/actions/info.action.d.ts +12 -28
  12. package/actions/info.action.js +47 -55
  13. package/actions/new.action.d.ts +3 -3
  14. package/actions/new.action.js +75 -105
  15. package/actions/start.action.d.ts +4 -7
  16. package/actions/start.action.js +36 -46
  17. package/bin/nest.js +14 -10
  18. package/commands/abstract.command.d.ts +3 -3
  19. package/commands/abstract.command.js +2 -5
  20. package/commands/add.command.d.ts +3 -3
  21. package/commands/add.command.js +13 -20
  22. package/commands/build.command.d.ts +3 -3
  23. package/commands/build.command.js +25 -54
  24. package/commands/command.input.js +1 -2
  25. package/commands/command.loader.d.ts +2 -2
  26. package/commands/command.loader.js +18 -22
  27. package/commands/context/add.context.d.ts +7 -0
  28. package/commands/context/add.context.js +1 -0
  29. package/commands/context/build.context.d.ts +13 -0
  30. package/commands/context/build.context.js +1 -0
  31. package/commands/context/generate.context.d.ts +15 -0
  32. package/commands/context/generate.context.js +1 -0
  33. package/commands/context/index.d.ts +5 -0
  34. package/commands/context/index.js +5 -0
  35. package/commands/context/new.context.d.ts +11 -0
  36. package/commands/context/new.context.js +1 -0
  37. package/commands/context/start.context.d.ts +19 -0
  38. package/commands/context/start.context.js +1 -0
  39. package/commands/generate.command.d.ts +3 -3
  40. package/commands/generate.command.js +26 -54
  41. package/commands/index.d.ts +3 -2
  42. package/commands/index.js +3 -18
  43. package/commands/info.command.d.ts +3 -3
  44. package/commands/info.command.js +2 -6
  45. package/commands/new.command.d.ts +3 -3
  46. package/commands/new.command.js +24 -33
  47. package/commands/start.command.d.ts +3 -3
  48. package/commands/start.command.js +34 -71
  49. package/lib/compiler/assets-manager.d.ts +1 -1
  50. package/lib/compiler/assets-manager.js +27 -33
  51. package/lib/compiler/base-compiler.d.ts +5 -5
  52. package/lib/compiler/base-compiler.js +10 -13
  53. package/lib/compiler/compiler.d.ts +6 -6
  54. package/lib/compiler/compiler.js +7 -9
  55. package/lib/compiler/defaults/rspack-defaults.d.ts +2 -0
  56. package/lib/compiler/defaults/rspack-defaults.js +117 -0
  57. package/lib/compiler/defaults/swc-defaults.d.ts +1 -1
  58. package/lib/compiler/defaults/swc-defaults.js +1 -5
  59. package/lib/compiler/defaults/webpack-defaults.d.ts +2 -2
  60. package/lib/compiler/defaults/webpack-defaults.js +13 -16
  61. package/lib/compiler/helpers/append-extension.js +3 -6
  62. package/lib/compiler/helpers/copy-path-resolve.js +2 -5
  63. package/lib/compiler/helpers/delete-out-dir.d.ts +1 -1
  64. package/lib/compiler/helpers/delete-out-dir.js +5 -8
  65. package/lib/compiler/helpers/get-builder.d.ts +9 -7
  66. package/lib/compiler/helpers/get-builder.js +3 -6
  67. package/lib/compiler/helpers/get-rspack-config-path.d.ts +9 -0
  68. package/lib/compiler/helpers/get-rspack-config-path.js +15 -0
  69. package/lib/compiler/helpers/get-tsc-config.path.d.ts +2 -3
  70. package/lib/compiler/helpers/get-tsc-config.path.js +6 -9
  71. package/lib/compiler/helpers/get-value-or-default.d.ts +2 -3
  72. package/lib/compiler/helpers/get-value-or-default.js +3 -8
  73. package/lib/compiler/helpers/get-webpack-config-path.d.ts +2 -3
  74. package/lib/compiler/helpers/get-webpack-config-path.js +4 -7
  75. package/lib/compiler/helpers/manual-restart.js +4 -8
  76. package/lib/compiler/helpers/tsconfig-provider.d.ts +1 -1
  77. package/lib/compiler/helpers/tsconfig-provider.js +8 -11
  78. package/lib/compiler/hooks/tsconfig-paths.hook.js +13 -13
  79. package/lib/compiler/interfaces/readonly-visitor.interface.js +1 -2
  80. package/lib/compiler/plugins/plugin-metadata-generator.d.ts +1 -1
  81. package/lib/compiler/plugins/plugin-metadata-generator.js +10 -13
  82. package/lib/compiler/plugins/plugin-metadata-printer.d.ts +1 -1
  83. package/lib/compiler/plugins/plugin-metadata-printer.js +5 -9
  84. package/lib/compiler/plugins/plugins-loader.d.ts +2 -2
  85. package/lib/compiler/plugins/plugins-loader.js +13 -13
  86. package/lib/compiler/rspack-compiler.d.ts +19 -0
  87. package/lib/compiler/rspack-compiler.js +97 -0
  88. package/lib/compiler/swc/constants.d.ts +0 -1
  89. package/lib/compiler/swc/constants.js +9 -13
  90. package/lib/compiler/swc/forked-type-checker.js +13 -18
  91. package/lib/compiler/swc/swc-compiler.d.ts +4 -4
  92. package/lib/compiler/swc/swc-compiler.js +41 -39
  93. package/lib/compiler/swc/type-checker-host.js +12 -18
  94. package/lib/compiler/typescript-loader.js +5 -7
  95. package/lib/compiler/watch-compiler.d.ts +5 -5
  96. package/lib/compiler/watch-compiler.js +14 -18
  97. package/lib/compiler/webpack-compiler.d.ts +6 -7
  98. package/lib/compiler/webpack-compiler.js +14 -18
  99. package/lib/configuration/configuration.d.ts +9 -4
  100. package/lib/configuration/configuration.js +1 -2
  101. package/lib/configuration/configuration.loader.d.ts +1 -1
  102. package/lib/configuration/configuration.loader.js +1 -2
  103. package/lib/configuration/defaults.d.ts +2 -1
  104. package/lib/configuration/defaults.js +8 -10
  105. package/lib/configuration/index.d.ts +3 -3
  106. package/lib/configuration/index.js +3 -19
  107. package/lib/configuration/nest-configuration.loader.d.ts +3 -3
  108. package/lib/configuration/nest-configuration.loader.js +11 -20
  109. package/lib/package-managers/abstract.package-manager.d.ts +4 -4
  110. package/lib/package-managers/abstract.package-manager.js +19 -30
  111. package/lib/package-managers/index.d.ts +8 -8
  112. package/lib/package-managers/index.js +8 -24
  113. package/lib/package-managers/npm.package-manager.d.ts +2 -2
  114. package/lib/package-managers/npm.package-manager.js +6 -10
  115. package/lib/package-managers/package-manager-commands.js +1 -2
  116. package/lib/package-managers/package-manager.factory.d.ts +2 -2
  117. package/lib/package-managers/package-manager.factory.js +16 -20
  118. package/lib/package-managers/package-manager.js +2 -5
  119. package/lib/package-managers/pnpm.package-manager.d.ts +2 -2
  120. package/lib/package-managers/pnpm.package-manager.js +6 -10
  121. package/lib/package-managers/project.dependency.js +1 -2
  122. package/lib/package-managers/yarn.package-manager.d.ts +2 -2
  123. package/lib/package-managers/yarn.package-manager.js +6 -10
  124. package/lib/questions/questions.d.ts +5 -1
  125. package/lib/questions/questions.js +2 -7
  126. package/lib/readers/file-system.reader.d.ts +1 -1
  127. package/lib/readers/file-system.reader.js +6 -9
  128. package/lib/readers/index.d.ts +2 -2
  129. package/lib/readers/index.js +2 -18
  130. package/lib/readers/reader.js +3 -5
  131. package/lib/runners/abstract.runner.js +10 -12
  132. package/lib/runners/git.runner.d.ts +1 -1
  133. package/lib/runners/git.runner.js +2 -6
  134. package/lib/runners/index.d.ts +3 -3
  135. package/lib/runners/index.js +3 -19
  136. package/lib/runners/npm.runner.d.ts +1 -1
  137. package/lib/runners/npm.runner.js +2 -6
  138. package/lib/runners/pnpm.runner.d.ts +1 -1
  139. package/lib/runners/pnpm.runner.js +2 -6
  140. package/lib/runners/runner.factory.d.ts +6 -6
  141. package/lib/runners/runner.factory.js +15 -20
  142. package/lib/runners/runner.js +2 -5
  143. package/lib/runners/schematic.runner.d.ts +1 -1
  144. package/lib/runners/schematic.runner.js +5 -7
  145. package/lib/runners/yarn.runner.d.ts +1 -1
  146. package/lib/runners/yarn.runner.js +2 -6
  147. package/lib/schematics/abstract.collection.d.ts +3 -3
  148. package/lib/schematics/abstract.collection.js +3 -5
  149. package/lib/schematics/collection.factory.d.ts +2 -2
  150. package/lib/schematics/collection.factory.js +9 -13
  151. package/lib/schematics/collection.js +2 -5
  152. package/lib/schematics/custom.collection.d.ts +2 -2
  153. package/lib/schematics/custom.collection.js +4 -8
  154. package/lib/schematics/index.d.ts +4 -4
  155. package/lib/schematics/index.js +4 -20
  156. package/lib/schematics/nest.collection.d.ts +3 -3
  157. package/lib/schematics/nest.collection.js +104 -108
  158. package/lib/schematics/schematic.option.js +7 -9
  159. package/lib/ui/banner.js +1 -4
  160. package/lib/ui/emojis.d.ts +17 -17
  161. package/lib/ui/emojis.js +19 -22
  162. package/lib/ui/errors.js +1 -5
  163. package/lib/ui/index.d.ts +5 -5
  164. package/lib/ui/index.js +5 -21
  165. package/lib/ui/messages.js +15 -19
  166. package/lib/ui/prefixes.js +3 -6
  167. package/lib/utils/formatting.js +1 -4
  168. package/lib/utils/get-default-tsconfig-path.js +4 -7
  169. package/lib/utils/gracefully-exit-on-prompt-error.js +1 -4
  170. package/lib/utils/is-module-available.js +3 -4
  171. package/lib/utils/load-configuration.d.ts +1 -1
  172. package/lib/utils/load-configuration.js +4 -7
  173. package/lib/utils/local-binaries.d.ts +1 -1
  174. package/lib/utils/local-binaries.js +8 -11
  175. package/lib/utils/os-info.utils.js +1 -4
  176. package/lib/utils/project-utils.d.ts +1 -3
  177. package/lib/utils/project-utils.js +16 -28
  178. package/lib/utils/remaining-flags.d.ts +2 -2
  179. package/lib/utils/remaining-flags.js +2 -5
  180. package/lib/utils/tree-kill.js +7 -10
  181. package/lib/utils/type-assertions.js +1 -4
  182. package/package.json +31 -33
package/actions/index.js CHANGED
@@ -1,23 +1,7 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./abstract.action"), exports);
18
- __exportStar(require("./build.action"), exports);
19
- __exportStar(require("./generate.action"), exports);
20
- __exportStar(require("./info.action"), exports);
21
- __exportStar(require("./new.action"), exports);
22
- __exportStar(require("./start.action"), exports);
23
- __exportStar(require("./add.action"), exports);
1
+ export * from './abstract.action.js';
2
+ export * from './build.action.js';
3
+ export * from './generate.action.js';
4
+ export * from './info.action.js';
5
+ export * from './new.action.js';
6
+ export * from './start.action.js';
7
+ export * from './add.action.js';
@@ -1,35 +1,19 @@
1
- import { AbstractAction } from './abstract.action';
2
- interface LockfileDependency {
3
- version: string;
4
- }
5
- interface PackageJsonDependencies {
6
- [key: string]: LockfileDependency;
7
- }
8
- interface NestDependency {
9
- name: string;
10
- value: string;
11
- packageName: string;
12
- }
13
- interface NestDependencyWarnings {
14
- [key: string]: Array<NestDependency>;
15
- }
1
+ import { AbstractAction } from './abstract.action.js';
16
2
  export declare class InfoAction extends AbstractAction {
17
3
  private manager;
18
4
  private warningMessageDependenciesWhiteList;
19
5
  handle(): Promise<void>;
20
6
  private displayBanner;
21
7
  private displaySystemInformation;
22
- displayPackageManagerVersion(): Promise<void>;
23
- displayNestInformation(): Promise<void>;
24
- displayNestInformationFromPackage(): Promise<void>;
25
- displayCliVersion(): void;
26
- readProjectPackageDependencies(): PackageJsonDependencies;
27
- displayNestVersions(dependencies: PackageJsonDependencies): void;
28
- displayWarningMessage(nestDependencies: NestDependency[]): void;
29
- buildNestVersionsWarningMessage(nestDependencies: NestDependency[]): NestDependencyWarnings;
30
- buildNestVersionsMessage(dependencies: PackageJsonDependencies): NestDependency[];
31
- collectNestDependencies(dependencies: PackageJsonDependencies): NestDependency[];
32
- format(dependencies: NestDependency[]): NestDependency[];
33
- rightPad(name: string, length: number): string;
8
+ private displayPackageManagerVersion;
9
+ private displayNestInformation;
10
+ private displayNestInformationFromPackage;
11
+ private displayCliVersion;
12
+ private readProjectPackageDependencies;
13
+ private displayNestVersions;
14
+ private displayWarningMessage;
15
+ private buildNestVersionsWarningMessage;
16
+ private buildNestVersionsMessage;
17
+ private collectNestDependencies;
18
+ private format;
34
19
  }
35
- export {};
@@ -1,56 +1,57 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InfoAction = void 0;
4
- const ansis_1 = require("ansis");
5
- const fs_1 = require("fs");
6
- const os_1 = require("os");
7
- const path_1 = require("path");
8
- const package_managers_1 = require("../lib/package-managers");
9
- const ui_1 = require("../lib/ui");
10
- const abstract_action_1 = require("./abstract.action");
11
- const os_info_utils_1 = require("../lib/utils/os-info.utils");
12
- class InfoAction extends abstract_action_1.AbstractAction {
13
- constructor() {
14
- super(...arguments);
15
- // Nest dependencies whitelist used to compare the major version
16
- this.warningMessageDependenciesWhiteList = [
17
- '@nestjs/core',
18
- '@nestjs/common',
19
- '@nestjs/schematics',
20
- '@nestjs/platform-express',
21
- '@nestjs/platform-fastify',
22
- '@nestjs/platform-socket.io',
23
- '@nestjs/platform-ws',
24
- '@nestjs/websockets',
25
- ];
26
- }
1
+ import { blue, bold, green, red, yellow } from 'ansis';
2
+ import { readFileSync } from 'fs';
3
+ import { createRequire } from 'module';
4
+ import { platform, release } from 'os';
5
+ import { join } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ import { dirname } from 'path';
8
+ import { PackageManagerFactory, } from '../lib/package-managers/index.js';
9
+ import { BANNER, MESSAGES } from '../lib/ui/index.js';
10
+ import osName from '../lib/utils/os-info.utils.js';
11
+ import { AbstractAction } from './abstract.action.js';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = dirname(__filename);
14
+ const require = createRequire(import.meta.url);
15
+ export class InfoAction extends AbstractAction {
16
+ manager;
17
+ // Nest dependencies whitelist used to compare the major version
18
+ warningMessageDependenciesWhiteList = [
19
+ '@nestjs/core',
20
+ '@nestjs/common',
21
+ '@nestjs/schematics',
22
+ '@nestjs/platform-express',
23
+ '@nestjs/platform-fastify',
24
+ '@nestjs/platform-socket.io',
25
+ '@nestjs/platform-ws',
26
+ '@nestjs/websockets',
27
+ ];
27
28
  async handle() {
28
- this.manager = await package_managers_1.PackageManagerFactory.find();
29
+ this.manager = await PackageManagerFactory.find();
29
30
  this.displayBanner();
30
31
  await this.displaySystemInformation();
31
32
  await this.displayNestInformation();
32
33
  }
33
34
  displayBanner() {
34
- console.info((0, ansis_1.red)(ui_1.BANNER));
35
+ console.info(red(BANNER));
35
36
  }
36
37
  async displaySystemInformation() {
37
- console.info((0, ansis_1.green) `[System Information]`);
38
- console.info('OS Version :', (0, ansis_1.blue)((0, os_info_utils_1.default)((0, os_1.platform)(), (0, os_1.release)()) + (0, os_1.release)()));
39
- console.info('NodeJS Version :', (0, ansis_1.blue)(process.version));
38
+ console.info(green `[System Information]`);
39
+ console.info('OS Version :', blue(osName(platform(), release()) + release()));
40
+ console.info('NodeJS Version :', blue(process.version));
40
41
  await this.displayPackageManagerVersion();
41
42
  }
42
43
  async displayPackageManagerVersion() {
43
44
  try {
44
45
  const version = await this.manager.version();
45
- console.info(`${this.manager.name} Version :`, (0, ansis_1.blue)(version), '\n');
46
+ console.info(`${this.manager.name} Version :`, blue(version), '\n');
46
47
  }
47
48
  catch {
48
- console.error(`${this.manager.name} Version :`, (0, ansis_1.red) `Unknown`, '\n');
49
+ console.error(`${this.manager.name} Version :`, red `Unknown`, '\n');
49
50
  }
50
51
  }
51
52
  async displayNestInformation() {
52
53
  this.displayCliVersion();
53
- console.info((0, ansis_1.green) `[Nest Platform Information]`);
54
+ console.info(green `[Nest Platform Information]`);
54
55
  await this.displayNestInformationFromPackage();
55
56
  }
56
57
  async displayNestInformationFromPackage() {
@@ -58,17 +59,17 @@ class InfoAction extends abstract_action_1.AbstractAction {
58
59
  const dependencies = this.readProjectPackageDependencies();
59
60
  this.displayNestVersions(dependencies);
60
61
  }
61
- catch (err) {
62
- console.error((0, ansis_1.red)(ui_1.MESSAGES.NEST_INFORMATION_PACKAGE_MANAGER_FAILED));
62
+ catch {
63
+ console.error(red(MESSAGES.NEST_INFORMATION_PACKAGE_MANAGER_FAILED));
63
64
  }
64
65
  }
65
66
  displayCliVersion() {
66
- console.info((0, ansis_1.green) `[Nest CLI]`);
67
- console.info('Nest CLI Version :', (0, ansis_1.blue)(JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../package.json')).toString())
67
+ console.info(green `[Nest CLI]`);
68
+ console.info('Nest CLI Version :', blue(JSON.parse(readFileSync(join(__dirname, '../package.json')).toString())
68
69
  .version), '\n');
69
70
  }
70
71
  readProjectPackageDependencies() {
71
- const buffer = (0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'));
72
+ const buffer = readFileSync(join(process.cwd(), 'package.json'));
72
73
  const pack = JSON.parse(buffer.toString());
73
74
  const dependencies = { ...pack.dependencies, ...pack.devDependencies };
74
75
  Object.keys(dependencies).forEach((key) => {
@@ -80,7 +81,7 @@ class InfoAction extends abstract_action_1.AbstractAction {
80
81
  }
81
82
  displayNestVersions(dependencies) {
82
83
  const nestDependencies = this.buildNestVersionsMessage(dependencies);
83
- nestDependencies.forEach((dependency) => console.info(dependency.name, (0, ansis_1.blue)(dependency.value)));
84
+ nestDependencies.forEach((dependency) => console.info(dependency.name, blue(dependency.value)));
84
85
  this.displayWarningMessage(nestDependencies);
85
86
  }
86
87
  displayWarningMessage(nestDependencies) {
@@ -89,11 +90,11 @@ class InfoAction extends abstract_action_1.AbstractAction {
89
90
  const majorVersions = Object.keys(warnings);
90
91
  if (majorVersions.length > 0) {
91
92
  console.info('\r');
92
- console.info((0, ansis_1.yellow) `[Warnings]`);
93
+ console.info(yellow `[Warnings]`);
93
94
  console.info('The following packages are not in the same major version');
94
95
  console.info('This could lead to runtime errors');
95
96
  majorVersions.forEach((version) => {
96
- console.info((0, ansis_1.bold) `* Under version ${version}`);
97
+ console.info(bold `* Under version ${version}`);
97
98
  warnings[version].forEach(({ packageName, value }) => {
98
99
  console.info(`- ${packageName} ${value}`);
99
100
  });
@@ -102,7 +103,7 @@ class InfoAction extends abstract_action_1.AbstractAction {
102
103
  }
103
104
  catch {
104
105
  console.info('\t');
105
- console.error((0, ansis_1.red)(ui_1.MESSAGES.NEST_INFORMATION_PACKAGE_WARNING_FAILED(this.warningMessageDependenciesWhiteList)));
106
+ console.error(red(MESSAGES.NEST_INFORMATION_PACKAGE_WARNING_FAILED(this.warningMessageDependenciesWhiteList)));
106
107
  }
107
108
  }
108
109
  buildNestVersionsWarningMessage(nestDependencies) {
@@ -148,7 +149,7 @@ class InfoAction extends abstract_action_1.AbstractAction {
148
149
  const depPackagePath = require.resolve(key + '/package.json', {
149
150
  paths: [process.cwd()],
150
151
  });
151
- const depPackage = (0, fs_1.readFileSync)(depPackagePath).toString();
152
+ const depPackage = readFileSync(depPackagePath).toString();
152
153
  const value = JSON.parse(depPackage).version;
153
154
  nestDependencies.push({
154
155
  name: `${key.replace(/@nestjs\//, '').replace(/@.*/, '')} version`,
@@ -163,19 +164,10 @@ class InfoAction extends abstract_action_1.AbstractAction {
163
164
  const sorted = dependencies.sort((dependencyA, dependencyB) => dependencyB.name.length - dependencyA.name.length);
164
165
  const length = sorted[0].name.length;
165
166
  sorted.forEach((dependency) => {
166
- if (dependency.name.length < length) {
167
- dependency.name = this.rightPad(dependency.name, length);
168
- }
167
+ dependency.name = dependency.name.padEnd(length);
169
168
  dependency.name = dependency.name.concat(' :');
170
- dependency.value = dependency.value.replace(/(\^|\~)/, '');
169
+ dependency.value = dependency.value.replace(/([\^~])/, '');
171
170
  });
172
171
  return sorted;
173
172
  }
174
- rightPad(name, length) {
175
- while (name.length < length) {
176
- name = name.concat(' ');
177
- }
178
- return name;
179
- }
180
173
  }
181
- exports.InfoAction = InfoAction;
@@ -1,7 +1,7 @@
1
- import { Input } from '../commands';
2
- import { AbstractAction } from './abstract.action';
1
+ import { NewCommandContext } from '../commands/index.js';
2
+ import { AbstractAction } from './abstract.action.js';
3
3
  export declare class NewAction extends AbstractAction {
4
- handle(inputs: Input[], options: Input[]): Promise<void>;
4
+ handle(context: NewCommandContext): Promise<void>;
5
5
  }
6
6
  export declare const retrieveCols: () => number;
7
7
  export declare const exit: () => never;
@@ -1,36 +1,27 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exit = exports.retrieveCols = exports.NewAction = void 0;
4
- const prompts_1 = require("@inquirer/prompts");
5
- const ansis = require("ansis");
6
- const child_process_1 = require("child_process");
7
- const fs = require("fs");
8
- const path_1 = require("path");
9
- const defaults_1 = require("../lib/configuration/defaults");
10
- const package_managers_1 = require("../lib/package-managers");
11
- const questions_1 = require("../lib/questions/questions");
12
- const git_runner_1 = require("../lib/runners/git.runner");
13
- const schematics_1 = require("../lib/schematics");
14
- const ui_1 = require("../lib/ui");
15
- const formatting_1 = require("../lib/utils/formatting");
16
- const gracefully_exit_on_prompt_error_1 = require("../lib/utils/gracefully-exit-on-prompt-error");
17
- const abstract_action_1 = require("./abstract.action");
18
- const type_assertions_1 = require("../lib/utils/type-assertions");
19
- class NewAction extends abstract_action_1.AbstractAction {
20
- async handle(inputs, options) {
21
- const directoryOption = options.find((option) => option.name === 'directory');
22
- const dryRunOption = options.find((option) => option.name === 'dry-run');
23
- const isDryRunEnabled = dryRunOption && dryRunOption.value;
24
- await askForMissingInformation(inputs, options);
25
- await generateApplicationFiles(inputs, options).catch(exports.exit);
26
- const shouldSkipInstall = options.some((option) => option.name === 'skip-install' && option.value === true);
27
- const shouldSkipGit = options.some((option) => option.name === 'skip-git' && option.value === true);
28
- const projectDirectory = getProjectDirectory(getApplicationNameInput(inputs), directoryOption);
29
- if (!shouldSkipInstall) {
30
- await installPackages(options, isDryRunEnabled, projectDirectory);
1
+ import { input, select } from '@inquirer/prompts';
2
+ import ansis from 'ansis';
3
+ import { execSync } from 'child_process';
4
+ import * as fs from 'fs';
5
+ import { join } from 'path';
6
+ import { defaultGitIgnore } from '../lib/configuration/defaults.js';
7
+ import { PackageManager, PackageManagerFactory, } from '../lib/package-managers/index.js';
8
+ import { generateInput, generateSelect } from '../lib/questions/questions.js';
9
+ import { GitRunner } from '../lib/runners/git.runner.js';
10
+ import { Collection, CollectionFactory, SchematicOption, } from '../lib/schematics/index.js';
11
+ import { EMOJIS, MESSAGES } from '../lib/ui/index.js';
12
+ import { normalizeToKebabOrSnakeCase } from '../lib/utils/formatting.js';
13
+ import { gracefullyExitOnPromptError } from '../lib/utils/gracefully-exit-on-prompt-error.js';
14
+ import { AbstractAction } from './abstract.action.js';
15
+ export class NewAction extends AbstractAction {
16
+ async handle(context) {
17
+ await askForMissingInformation(context);
18
+ await generateApplicationFiles(context).catch(exit);
19
+ const projectDirectory = getProjectDirectory(context);
20
+ if (!context.skipInstall) {
21
+ await installPackages(context, projectDirectory);
31
22
  }
32
- if (!isDryRunEnabled) {
33
- if (!shouldSkipGit) {
23
+ if (!context.dryRun) {
24
+ if (!context.skipGit) {
34
25
  await initializeGitRepository(projectDirectory);
35
26
  await createGitIgnoreFile(projectDirectory);
36
27
  }
@@ -39,81 +30,72 @@ class NewAction extends abstract_action_1.AbstractAction {
39
30
  process.exit(0);
40
31
  }
41
32
  }
42
- exports.NewAction = NewAction;
43
- const getApplicationNameInput = (inputs) => inputs.find((input) => input.name === 'name');
44
- const getPackageManagerInput = (inputs) => inputs.find((options) => options.name === 'packageManager');
45
- const getProjectDirectory = (applicationName, directoryOption) => {
46
- return ((directoryOption && directoryOption.value) ||
47
- (0, formatting_1.normalizeToKebabOrSnakeCase)(applicationName.value));
33
+ const getProjectDirectory = (context) => {
34
+ return (context.directory || normalizeToKebabOrSnakeCase(context.name));
48
35
  };
49
- const askForMissingInformation = async (inputs, options) => {
50
- console.info(ui_1.MESSAGES.PROJECT_INFORMATION_START);
36
+ const askForMissingInformation = async (context) => {
37
+ console.info(MESSAGES.PROJECT_INFORMATION_START);
51
38
  console.info();
52
- const nameInput = getApplicationNameInput(inputs);
53
- if (!nameInput.value) {
54
- const message = ui_1.MESSAGES.PROJECT_NAME_QUESTION;
55
- const question = (0, questions_1.generateInput)('name', message)('nest-app');
56
- const answer = await (0, prompts_1.input)(question).catch(gracefully_exit_on_prompt_error_1.gracefullyExitOnPromptError);
57
- replaceInputMissingInformation(inputs, { name: 'name', value: answer });
39
+ if (!context.name) {
40
+ const message = MESSAGES.PROJECT_NAME_QUESTION;
41
+ const question = generateInput('name', message)('nest-app');
42
+ context.name = (await input(question).catch(gracefullyExitOnPromptError));
58
43
  }
59
- const packageManagerInput = getPackageManagerInput(options);
60
- if (!packageManagerInput.value) {
61
- const answer = await askForPackageManager();
62
- replaceInputMissingInformation(options, {
63
- name: 'packageManager',
64
- value: answer,
65
- });
66
- }
67
- };
68
- const replaceInputMissingInformation = (inputs, answer) => {
69
- const input = inputs.find((input) => input.name === answer.name);
70
- if (input) {
71
- input.value = input.value !== undefined ? input.value : answer.value;
44
+ if (!context.packageManager) {
45
+ context.packageManager = (await askForPackageManager());
72
46
  }
73
47
  };
74
- const generateApplicationFiles = async (args, options) => {
75
- const collectionName = options.find((option) => option.name === 'collection' && option.value != null).value;
76
- const collection = schematics_1.CollectionFactory.create(collectionName || schematics_1.Collection.NESTJS);
77
- const schematicOptions = mapSchematicOptions(args.concat(options));
48
+ const generateApplicationFiles = async (context) => {
49
+ const collection = CollectionFactory.create(context.collection || Collection.NESTJS);
50
+ const schematicOptions = mapContextToSchematicOptions(context);
78
51
  await collection.execute('application', schematicOptions);
79
52
  console.info();
80
53
  };
81
- const mapSchematicOptions = (options) => {
82
- return options.reduce((schematicOptions, option) => {
83
- if (option.name !== 'skip-install') {
84
- (0, type_assertions_1.assertNonArray)(option.value);
85
- schematicOptions.push(new schematics_1.SchematicOption(option.name, option.value));
86
- }
87
- return schematicOptions;
88
- }, []);
54
+ const mapContextToSchematicOptions = (context) => {
55
+ const options = [];
56
+ if (context.name !== undefined)
57
+ options.push(new SchematicOption('name', context.name));
58
+ if (context.directory !== undefined)
59
+ options.push(new SchematicOption('directory', context.directory));
60
+ if (context.dryRun)
61
+ options.push(new SchematicOption('dry-run', true));
62
+ options.push(new SchematicOption('skip-git', context.skipGit));
63
+ options.push(new SchematicOption('strict', context.strict));
64
+ if (context.packageManager !== undefined)
65
+ options.push(new SchematicOption('packageManager', context.packageManager));
66
+ if (context.collection !== undefined)
67
+ options.push(new SchematicOption('collection', context.collection));
68
+ options.push(new SchematicOption('language', context.language));
69
+ // note: skip-install is intentionally excluded — not sent to schematics
70
+ return options;
89
71
  };
90
- const installPackages = async (options, dryRunMode, installDirectory) => {
91
- const inputPackageManager = getPackageManagerInput(options).value;
72
+ const installPackages = async (context, installDirectory) => {
73
+ const inputPackageManager = context.packageManager;
92
74
  let packageManager;
93
- if (dryRunMode) {
75
+ if (context.dryRun) {
94
76
  console.info();
95
- console.info(ansis.green(ui_1.MESSAGES.DRY_RUN_MODE));
77
+ console.info(ansis.green(MESSAGES.DRY_RUN_MODE));
96
78
  console.info();
97
79
  return;
98
80
  }
99
81
  try {
100
- packageManager = package_managers_1.PackageManagerFactory.create(inputPackageManager);
82
+ packageManager = PackageManagerFactory.create(inputPackageManager);
101
83
  await packageManager.install(installDirectory, inputPackageManager);
102
84
  }
103
85
  catch (error) {
104
- if (error && error.message) {
86
+ if (error instanceof Error) {
105
87
  console.error(ansis.red(error.message));
106
88
  }
107
89
  }
108
90
  };
109
91
  const askForPackageManager = async () => {
110
- const question = (0, questions_1.generateSelect)('packageManager')(ui_1.MESSAGES.PACKAGE_MANAGER_QUESTION)([package_managers_1.PackageManager.NPM, package_managers_1.PackageManager.YARN, package_managers_1.PackageManager.PNPM]);
111
- return (0, prompts_1.select)(question).catch(gracefully_exit_on_prompt_error_1.gracefullyExitOnPromptError);
92
+ const question = generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)([PackageManager.NPM, PackageManager.YARN, PackageManager.PNPM]);
93
+ return select(question).catch(gracefullyExitOnPromptError);
112
94
  };
113
95
  const initializeGitRepository = async (dir) => {
114
- const runner = new git_runner_1.GitRunner();
115
- await runner.run('init', true, (0, path_1.join)(process.cwd(), dir)).catch(() => {
116
- console.error(ansis.red(ui_1.MESSAGES.GIT_INITIALIZATION_ERROR));
96
+ const runner = new GitRunner();
97
+ await runner.run('init', true, join(process.cwd(), dir)).catch(() => {
98
+ console.error(ansis.red(MESSAGES.GIT_INITIALIZATION_ERROR));
117
99
  });
118
100
  };
119
101
  /**
@@ -127,8 +109,8 @@ const initializeGitRepository = async (dir) => {
127
109
  * @return Resolves when succeeds, or rejects with any error from `fn.writeFile`.
128
110
  */
129
111
  const createGitIgnoreFile = (dir, content) => {
130
- const fileContent = content || defaults_1.defaultGitIgnore;
131
- const filePath = (0, path_1.join)(process.cwd(), dir, '.gitignore');
112
+ const fileContent = content || defaultGitIgnore;
113
+ const filePath = join(process.cwd(), dir, '.gitignore');
132
114
  if (fileExists(filePath)) {
133
115
  return;
134
116
  }
@@ -139,17 +121,18 @@ const printCollective = () => {
139
121
  const yellow = print('yellow');
140
122
  const emptyLine = print();
141
123
  emptyLine();
142
- yellow(`Thanks for installing Nest ${ui_1.EMOJIS.PRAY}`);
124
+ yellow(`Thanks for installing Nest ${EMOJIS.PRAY}`);
143
125
  dim('Please consider donating to our open collective');
144
126
  dim('to help us maintain this package.');
145
127
  emptyLine();
146
128
  emptyLine();
147
- print()(`${ansis.bold `${ui_1.EMOJIS.WINE} Donate:`} ${ansis.underline('https://opencollective.com/nest')}`);
129
+ print()(`${ansis.bold `${EMOJIS.WINE} Donate:`} ${ansis.underline('https://opencollective.com/nest')}`);
148
130
  emptyLine();
149
131
  };
150
132
  const print = (color = null) => (str = '') => {
151
- const terminalCols = (0, exports.retrieveCols)();
152
- const strLength = str.replace(/\u001b\[[0-9]{2}m/g, '').length;
133
+ const terminalCols = retrieveCols();
134
+ // eslint-disable-next-line no-control-regex
135
+ const strLength = str.replace(/\x1b\[[0-9]+m/g, '').length;
153
136
  const leftPaddingLength = Math.floor((terminalCols - strLength) / 2);
154
137
  const leftPadding = ' '.repeat(Math.max(leftPaddingLength, 0));
155
138
  if (color) {
@@ -157,10 +140,10 @@ const print = (color = null) => (str = '') => {
157
140
  }
158
141
  console.log(leftPadding, str);
159
142
  };
160
- const retrieveCols = () => {
143
+ export const retrieveCols = () => {
161
144
  const defaultCols = 80;
162
145
  try {
163
- const terminalCols = (0, child_process_1.execSync)('tput cols', {
146
+ const terminalCols = execSync('tput cols', {
164
147
  stdio: ['pipe', 'pipe', 'ignore'],
165
148
  });
166
149
  return parseInt(terminalCols.toString(), 10) || defaultCols;
@@ -169,18 +152,5 @@ const retrieveCols = () => {
169
152
  return defaultCols;
170
153
  }
171
154
  };
172
- exports.retrieveCols = retrieveCols;
173
- const fileExists = (path) => {
174
- try {
175
- fs.accessSync(path);
176
- return true;
177
- }
178
- catch (err) {
179
- if (err.code === 'ENOENT') {
180
- return false;
181
- }
182
- throw err;
183
- }
184
- };
185
- const exit = () => process.exit(1);
186
- exports.exit = exit;
155
+ const fileExists = (path) => fs.existsSync(path);
156
+ export const exit = () => process.exit(1);
@@ -1,10 +1,7 @@
1
- import { Input } from '../commands';
2
- import { BuildAction } from './build.action';
1
+ import { StartCommandContext } from '../commands/index.js';
2
+ import { BuildAction } from './build.action.js';
3
3
  export declare class StartAction extends BuildAction {
4
- handle(commandInputs: Input[], commandOptions: Input[]): Promise<void>;
5
- createOnSuccessHook(entryFile: string, sourceRoot: string, debugFlag: boolean | string | undefined, outDirName: string, binaryToRun: string, options: {
6
- shell: boolean;
7
- envFile?: string[];
8
- }): () => void;
4
+ handle(context: StartCommandContext): Promise<void>;
5
+ private createOnSuccessHook;
9
6
  private spawnChildProcess;
10
7
  }