@nestjs/cli 11.0.0-next.1 → 11.0.0-next.3

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.
@@ -49,8 +49,7 @@ class BuildAction extends abstract_action_1.AbstractAction {
49
49
  async runBuild(commandInputs, commandOptions, watchMode, watchAssetsMode, isDebugEnabled = false, onSuccess) {
50
50
  const configFileName = commandOptions.find((option) => option.name === 'config').value;
51
51
  const configuration = await this.loader.load(configFileName);
52
- const buildAll = commandOptions.find((opt) => opt.name === 'all')
53
- .value;
52
+ const buildAll = commandOptions.find((opt) => opt.name === 'all')?.value;
54
53
  let appNames;
55
54
  if (buildAll) {
56
55
  // If the "all" flag is set, we need to build all projects in a monorepo.
@@ -85,82 +84,53 @@ class BuildAction extends abstract_action_1.AbstractAction {
85
84
  }
86
85
  switch (builder.type) {
87
86
  case 'tsc':
88
- await this.runTsc(watchMode, commandOptions, configuration, pathToTsconfig, appName);
87
+ await this.runTsc(watchMode, commandOptions, configuration, pathToTsconfig, appName, onSuccess);
89
88
  break;
90
89
  case 'webpack':
91
- await this.runWebpack(configuration, appName, commandOptions, pathToTsconfig, isDebugEnabled, watchMode);
90
+ await this.runWebpack(configuration, appName, commandOptions, pathToTsconfig, isDebugEnabled, watchMode, onSuccess);
92
91
  break;
93
92
  case 'swc':
94
- await this.runSwc(configuration, appName, pathToTsconfig, watchMode, commandOptions, tsOptions);
93
+ await this.runSwc(configuration, appName, pathToTsconfig, watchMode, commandOptions, tsOptions, onSuccess);
95
94
  break;
96
95
  }
97
96
  }
98
- onSuccess?.();
99
97
  }
100
- async runSwc(configuration, appName, pathToTsconfig, watchMode, options, tsOptions) {
98
+ async runSwc(configuration, appName, pathToTsconfig, watchMode, options, tsOptions, onSuccess) {
101
99
  const { SwcCompiler } = await Promise.resolve().then(() => require('../lib/compiler/swc/swc-compiler'));
102
100
  const swc = new SwcCompiler(this.pluginsLoader);
103
- return new Promise((onSuccess, onError) => {
104
- try {
105
- swc.run(configuration, pathToTsconfig, appName, {
106
- watch: watchMode,
107
- typeCheck: (0, get_value_or_default_1.getValueOrDefault)(configuration, 'compilerOptions.typeCheck', appName, 'typeCheck', options),
108
- tsOptions,
109
- assetsManager: this.assetsManager,
110
- }, onSuccess);
111
- }
112
- catch (error) {
113
- onError(error);
114
- }
115
- });
101
+ await swc.run(configuration, pathToTsconfig, appName, {
102
+ watch: watchMode,
103
+ typeCheck: (0, get_value_or_default_1.getValueOrDefault)(configuration, 'compilerOptions.typeCheck', appName, 'typeCheck', options),
104
+ tsOptions,
105
+ assetsManager: this.assetsManager,
106
+ }, onSuccess);
116
107
  }
117
- async runWebpack(configuration, appName, commandOptions, pathToTsconfig, debug, watchMode) {
108
+ async runWebpack(configuration, appName, commandOptions, pathToTsconfig, debug, watchMode, onSuccess) {
118
109
  const { WebpackCompiler } = await Promise.resolve().then(() => require('../lib/compiler/webpack-compiler'));
119
110
  const webpackCompiler = new WebpackCompiler(this.pluginsLoader);
120
111
  const webpackPath = (0, get_webpack_config_path_1.getWebpackConfigPath)(configuration, commandOptions, appName) ??
121
112
  defaults_1.defaultWebpackConfigFilename;
122
113
  const webpackConfigFactoryOrConfig = this.getWebpackConfigFactoryByPath(webpackPath, defaults_1.defaultWebpackConfigFilename);
123
- return new Promise((onSuccess, onError) => {
124
- try {
125
- return webpackCompiler.run(configuration, pathToTsconfig, appName, {
126
- inputs: commandOptions,
127
- webpackConfigFactoryOrConfig,
128
- debug,
129
- watchMode,
130
- assetsManager: this.assetsManager,
131
- }, onSuccess);
132
- }
133
- catch (error) {
134
- onError(error);
135
- }
136
- });
114
+ return webpackCompiler.run(configuration, pathToTsconfig, appName, {
115
+ inputs: commandOptions,
116
+ webpackConfigFactoryOrConfig,
117
+ debug,
118
+ watchMode,
119
+ assetsManager: this.assetsManager,
120
+ }, onSuccess);
137
121
  }
138
- async runTsc(watchMode, options, configuration, pathToTsconfig, appName) {
122
+ async runTsc(watchMode, options, configuration, pathToTsconfig, appName, onSuccess) {
139
123
  if (watchMode) {
140
124
  const { WatchCompiler } = await Promise.resolve().then(() => require('../lib/compiler/watch-compiler'));
141
125
  const watchCompiler = new WatchCompiler(this.pluginsLoader, this.tsConfigProvider, this.tsLoader);
142
126
  const isPreserveWatchOutputEnabled = options.find((option) => option.name === 'preserveWatchOutput' && option.value === true)?.value;
143
- return new Promise((onSuccess, onError) => {
144
- try {
145
- watchCompiler.run(configuration, pathToTsconfig, appName, { preserveWatchOutput: isPreserveWatchOutputEnabled }, onSuccess);
146
- }
147
- catch (error) {
148
- onError(error);
149
- }
150
- });
127
+ watchCompiler.run(configuration, pathToTsconfig, appName, { preserveWatchOutput: isPreserveWatchOutputEnabled }, onSuccess);
151
128
  }
152
129
  else {
153
130
  const { Compiler } = await Promise.resolve().then(() => require('../lib/compiler/compiler'));
154
131
  const compiler = new Compiler(this.pluginsLoader, this.tsConfigProvider, this.tsLoader);
155
- return new Promise((onSuccess, onError) => {
156
- try {
157
- compiler.run(configuration, pathToTsconfig, appName, undefined, onSuccess);
158
- this.assetsManager.closeWatchers();
159
- }
160
- catch (error) {
161
- onError(error);
162
- }
163
- });
132
+ compiler.run(configuration, pathToTsconfig, appName, undefined, onSuccess);
133
+ this.assetsManager.closeWatchers();
164
134
  }
165
135
  }
166
136
  getWebpackConfigFactoryByPath(webpackPath, defaultPath) {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.exit = exports.retrieveCols = exports.NewAction = void 0;
4
+ const prompts_1 = require("@inquirer/prompts");
4
5
  const chalk = require("chalk");
5
6
  const child_process_1 = require("child_process");
6
7
  const fs = require("fs");
@@ -12,8 +13,8 @@ const git_runner_1 = require("../lib/runners/git.runner");
12
13
  const schematics_1 = require("../lib/schematics");
13
14
  const ui_1 = require("../lib/ui");
14
15
  const formatting_1 = require("../lib/utils/formatting");
16
+ const gracefully_exit_on_prompt_error_1 = require("../lib/utils/gracefully-exit-on-prompt-error");
15
17
  const abstract_action_1 = require("./abstract.action");
16
- const prompts_1 = require("@inquirer/prompts");
17
18
  class NewAction extends abstract_action_1.AbstractAction {
18
19
  async handle(inputs, options) {
19
20
  const directoryOption = options.find((option) => option.name === 'directory');
@@ -51,17 +52,20 @@ const askForMissingInformation = async (inputs, options) => {
51
52
  if (!nameInput.value) {
52
53
  const message = ui_1.MESSAGES.PROJECT_NAME_QUESTION;
53
54
  const question = (0, questions_1.generateInput)('name', message)('nest-app');
54
- const answer = await (0, prompts_1.input)(question);
55
+ const answer = await (0, prompts_1.input)(question).catch(gracefully_exit_on_prompt_error_1.gracefullyExitOnPromptError);
55
56
  replaceInputMissingInformation(inputs, { name: 'name', value: answer });
56
57
  }
57
58
  const packageManagerInput = getPackageManagerInput(options);
58
59
  if (!packageManagerInput.value) {
59
60
  const answer = await askForPackageManager();
60
- replaceInputMissingInformation(options, { name: 'packageManager', value: answer });
61
+ replaceInputMissingInformation(options, {
62
+ name: 'packageManager',
63
+ value: answer,
64
+ });
61
65
  }
62
66
  };
63
67
  const replaceInputMissingInformation = (inputs, answer) => {
64
- const input = inputs.find(input => input.name === answer.name);
68
+ const input = inputs.find((input) => input.name === answer.name);
65
69
  if (input) {
66
70
  input.value = input.value !== undefined ? input.value : answer.value;
67
71
  }
@@ -101,12 +105,8 @@ const installPackages = async (options, dryRunMode, installDirectory) => {
101
105
  }
102
106
  };
103
107
  const askForPackageManager = async () => {
104
- const question = (0, questions_1.generateSelect)('packageManager')(ui_1.MESSAGES.PACKAGE_MANAGER_QUESTION)([
105
- package_managers_1.PackageManager.NPM,
106
- package_managers_1.PackageManager.YARN,
107
- package_managers_1.PackageManager.PNPM,
108
- ]);
109
- return (0, prompts_1.select)(question);
108
+ 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]);
109
+ return (0, prompts_1.select)(question).catch(gracefully_exit_on_prompt_error_1.gracefullyExitOnPromptError);
110
110
  };
111
111
  const initializeGitRepository = async (dir) => {
112
112
  const runner = new git_runner_1.GitRunner();
@@ -24,6 +24,7 @@ class StartCommand extends abstract_command_1.AbstractCommand {
24
24
  .option('-e, --exec [binary]', 'Binary to run (default: "node").')
25
25
  .option('--preserveWatchOutput', 'Use "preserveWatchOutput" option when using tsc watch mode.')
26
26
  .option('--shell', "Spawn child processes within a shell (see node's child_process.spawn() method docs). Default: true.", true)
27
+ .option('--no-shell', 'Do not spawn child processes within a shell.')
27
28
  .description('Run Nest application.')
28
29
  .action(async (app, command) => {
29
30
  const options = [];
@@ -12,7 +12,7 @@ export declare const EMOJIS: {
12
12
  SMIRK: string;
13
13
  RAISED_HANDS: string;
14
14
  POINT_RIGHT: string;
15
- ZAP: string;
15
+ SPARKLES: string;
16
16
  BOOM: string;
17
17
  PRAY: string;
18
18
  WINE: string;
package/lib/ui/emojis.js CHANGED
@@ -16,7 +16,7 @@ exports.EMOJIS = {
16
16
  SMIRK: (0, node_emoji_1.get)('smirk_cat'),
17
17
  RAISED_HANDS: (0, node_emoji_1.get)('raised_hands'),
18
18
  POINT_RIGHT: (0, node_emoji_1.get)('point_right'),
19
- ZAP: (0, node_emoji_1.get)('zap'),
19
+ SPARKLES: (0, node_emoji_1.get)('sparkles'),
20
20
  BOOM: (0, node_emoji_1.get)('boom'),
21
21
  PRAY: (0, node_emoji_1.get)('pray'),
22
22
  WINE: (0, node_emoji_1.get)('wine_glass'),
@@ -8,7 +8,7 @@ exports.MESSAGES = {
8
8
  PROJECT_SELECTION_QUESTION: 'Which project would you like to generate to?',
9
9
  LIBRARY_PROJECT_SELECTION_QUESTION: 'Which project would you like to add the library to?',
10
10
  DRY_RUN_MODE: 'Command has been executed in dry run mode, nothing changed!',
11
- PROJECT_INFORMATION_START: `${emojis_1.EMOJIS.ZAP} We will scaffold your app in a few seconds..`,
11
+ PROJECT_INFORMATION_START: `${emojis_1.EMOJIS.SPARKLES} We will scaffold your app in a few seconds..`,
12
12
  RUNNER_EXECUTION_ERROR: (command) => `\nFailed to execute command: ${command}`,
13
13
  PACKAGE_MANAGER_QUESTION: `Which package manager would you ${emojis_1.EMOJIS.HEART} to use?`,
14
14
  PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS: `Installation in progress... ${emojis_1.EMOJIS.COFFEE}`,
@@ -0,0 +1 @@
1
+ export declare function gracefullyExitOnPromptError(err: Error): void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gracefullyExitOnPromptError = gracefullyExitOnPromptError;
4
+ function gracefullyExitOnPromptError(err) {
5
+ if (err.name === 'ExitPromptError') {
6
+ process.exit(1);
7
+ }
8
+ else {
9
+ throw err;
10
+ }
11
+ }
@@ -10,6 +10,7 @@ exports.hasValidOptionFlag = hasValidOptionFlag;
10
10
  const prompts_1 = require("@inquirer/prompts");
11
11
  const get_value_or_default_1 = require("../compiler/helpers/get-value-or-default");
12
12
  const questions_1 = require("../questions/questions");
13
+ const gracefully_exit_on_prompt_error_1 = require("./gracefully-exit-on-prompt-error");
13
14
  function shouldAskForProject(schematic, configurationProjects, appName) {
14
15
  return (['app', 'sub-app', 'library', 'lib'].includes(schematic) === false &&
15
16
  configurationProjects &&
@@ -66,10 +67,8 @@ function getSpecFileSuffix(configuration, appName, specFileSuffixValue) {
66
67
  return specFileSuffixValue;
67
68
  }
68
69
  async function askForProjectName(promptQuestion, projects) {
69
- const questions = [
70
- (0, questions_1.generateSelect)('appName')(promptQuestion)(projects),
71
- ];
72
- return (0, prompts_1.select)(questions);
70
+ const questions = [(0, questions_1.generateSelect)('appName')(promptQuestion)(projects)];
71
+ return (0, prompts_1.select)(questions).catch(gracefully_exit_on_prompt_error_1.gracefullyExitOnPromptError);
73
72
  }
74
73
  function moveDefaultProjectToStart(configuration, defaultProjectName, defaultLabel) {
75
74
  let projects = configuration.projects != null ? Object.keys(configuration.projects) : [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs/cli",
3
- "version": "11.0.0-next.1",
3
+ "version": "11.0.0-next.3",
4
4
  "description": "Nest - modern, fast, powerful node.js web framework (@cli)",
5
5
  "publishConfig": {
6
6
  "access": "public"