@depup/nestjs__cli 11.0.24-depup.7 → 12.0.0-depup.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 (220) hide show
  1. package/README.md +7 -15
  2. package/actions/abstract.action.d.ts +1 -2
  3. package/actions/abstract.action.js +1 -5
  4. package/actions/add.action.d.ts +3 -4
  5. package/actions/add.action.js +44 -53
  6. package/actions/build.action.d.ts +18 -11
  7. package/actions/build.action.js +172 -79
  8. package/actions/deploy.action.d.ts +6 -0
  9. package/actions/deploy.action.js +51 -0
  10. package/actions/generate.action.d.ts +3 -3
  11. package/actions/generate.action.js +61 -59
  12. package/actions/index.d.ts +9 -7
  13. package/actions/index.js +9 -23
  14. package/actions/info.action.d.ts +18 -28
  15. package/actions/info.action.js +80 -60
  16. package/actions/new.action.d.ts +3 -3
  17. package/actions/new.action.js +108 -104
  18. package/actions/start.action.d.ts +4 -7
  19. package/actions/start.action.js +40 -47
  20. package/actions/upgrade.action.d.ts +6 -0
  21. package/actions/upgrade.action.js +53 -0
  22. package/bin/nest.js +11 -10
  23. package/changes.json +9 -41
  24. package/commands/abstract.command.d.ts +3 -3
  25. package/commands/abstract.command.js +2 -5
  26. package/commands/add.command.d.ts +3 -3
  27. package/commands/add.command.js +17 -20
  28. package/commands/build.command.d.ts +3 -3
  29. package/commands/build.command.js +52 -56
  30. package/commands/command.input.js +1 -2
  31. package/commands/command.loader.d.ts +2 -2
  32. package/commands/command.loader.js +29 -22
  33. package/commands/context/add.context.d.ts +7 -0
  34. package/commands/context/add.context.js +1 -0
  35. package/commands/context/build.context.d.ts +17 -0
  36. package/commands/context/build.context.js +1 -0
  37. package/commands/context/deploy.context.d.ts +7 -0
  38. package/commands/context/deploy.context.js +1 -0
  39. package/commands/context/generate.context.d.ts +18 -0
  40. package/commands/context/generate.context.js +1 -0
  41. package/commands/context/index.d.ts +7 -0
  42. package/commands/context/index.js +7 -0
  43. package/commands/context/new.context.d.ts +19 -0
  44. package/commands/context/new.context.js +1 -0
  45. package/commands/context/start.context.d.ts +22 -0
  46. package/commands/context/start.context.js +1 -0
  47. package/commands/context/upgrade.context.d.ts +11 -0
  48. package/commands/context/upgrade.context.js +1 -0
  49. package/commands/deploy.command.d.ts +5 -0
  50. package/commands/deploy.command.js +22 -0
  51. package/commands/generate.command.d.ts +3 -3
  52. package/commands/generate.command.js +35 -66
  53. package/commands/index.d.ts +3 -2
  54. package/commands/index.js +3 -18
  55. package/commands/info.command.d.ts +3 -3
  56. package/commands/info.command.js +4 -8
  57. package/commands/new.command.d.ts +3 -3
  58. package/commands/new.command.js +34 -36
  59. package/commands/start.command.d.ts +3 -3
  60. package/commands/start.command.js +48 -73
  61. package/commands/upgrade.command.d.ts +5 -0
  62. package/commands/upgrade.command.js +32 -0
  63. package/lib/compiler/assets-manager.d.ts +20 -8
  64. package/lib/compiler/assets-manager.js +199 -63
  65. package/lib/compiler/base-compiler.d.ts +5 -5
  66. package/lib/compiler/base-compiler.js +10 -13
  67. package/lib/compiler/compiler.d.ts +6 -6
  68. package/lib/compiler/compiler.js +7 -9
  69. package/lib/compiler/defaults/rspack-defaults.d.ts +3 -0
  70. package/lib/compiler/defaults/rspack-defaults.js +179 -0
  71. package/lib/compiler/defaults/swc-defaults.d.ts +5 -2
  72. package/lib/compiler/defaults/swc-defaults.js +22 -6
  73. package/lib/compiler/defaults/webpack-defaults.d.ts +2 -2
  74. package/lib/compiler/defaults/webpack-defaults.js +59 -19
  75. package/lib/compiler/helpers/append-extension.js +3 -6
  76. package/lib/compiler/helpers/copy-path-resolve.js +2 -5
  77. package/lib/compiler/helpers/delete-out-dir.d.ts +1 -1
  78. package/lib/compiler/helpers/delete-out-dir.js +45 -10
  79. package/lib/compiler/helpers/get-builder.d.ts +9 -7
  80. package/lib/compiler/helpers/get-builder.js +3 -6
  81. package/lib/compiler/helpers/get-effective-root-dir.d.ts +16 -0
  82. package/lib/compiler/helpers/get-effective-root-dir.js +56 -0
  83. package/lib/compiler/helpers/get-rspack-config-path.d.ts +10 -0
  84. package/lib/compiler/helpers/get-rspack-config-path.js +19 -0
  85. package/lib/compiler/helpers/get-tsc-config.path.d.ts +2 -3
  86. package/lib/compiler/helpers/get-tsc-config.path.js +6 -9
  87. package/lib/compiler/helpers/get-value-or-default.d.ts +2 -3
  88. package/lib/compiler/helpers/get-value-or-default.js +3 -8
  89. package/lib/compiler/helpers/get-webpack-config-path.d.ts +2 -3
  90. package/lib/compiler/helpers/get-webpack-config-path.js +4 -7
  91. package/lib/compiler/helpers/glob.d.ts +19 -0
  92. package/lib/compiler/helpers/glob.js +185 -0
  93. package/lib/compiler/helpers/manual-restart.js +4 -8
  94. package/lib/compiler/helpers/path-confinement.d.ts +33 -0
  95. package/lib/compiler/helpers/path-confinement.js +63 -0
  96. package/lib/compiler/helpers/tsconfig-provider.d.ts +7 -6
  97. package/lib/compiler/helpers/tsconfig-provider.js +32 -13
  98. package/lib/compiler/hooks/tsconfig-paths.hook.js +13 -13
  99. package/lib/compiler/interfaces/readonly-visitor.interface.js +1 -2
  100. package/lib/compiler/plugins/plugin-metadata-generator.d.ts +37 -1
  101. package/lib/compiler/plugins/plugin-metadata-generator.js +113 -13
  102. package/lib/compiler/plugins/plugin-metadata-printer.d.ts +1 -1
  103. package/lib/compiler/plugins/plugin-metadata-printer.js +5 -9
  104. package/lib/compiler/plugins/plugins-loader.d.ts +2 -2
  105. package/lib/compiler/plugins/plugins-loader.js +12 -12
  106. package/lib/compiler/rspack-compiler.d.ts +21 -0
  107. package/lib/compiler/rspack-compiler.js +111 -0
  108. package/lib/compiler/swc/constants.d.ts +0 -1
  109. package/lib/compiler/swc/constants.js +9 -13
  110. package/lib/compiler/swc/forked-type-checker.js +13 -18
  111. package/lib/compiler/swc/swc-compiler.d.ts +13 -6
  112. package/lib/compiler/swc/swc-compiler.js +116 -70
  113. package/lib/compiler/swc/type-checker-host.js +31 -24
  114. package/lib/compiler/typescript-loader.js +7 -9
  115. package/lib/compiler/watch-compiler.d.ts +5 -5
  116. package/lib/compiler/watch-compiler.js +13 -15
  117. package/lib/compiler/watchers/recursive-directory-watcher.d.ts +37 -0
  118. package/lib/compiler/watchers/recursive-directory-watcher.js +334 -0
  119. package/lib/compiler/webpack-compiler.d.ts +6 -7
  120. package/lib/compiler/webpack-compiler.js +46 -23
  121. package/lib/configuration/configuration.d.ts +16 -3
  122. package/lib/configuration/configuration.js +1 -2
  123. package/lib/configuration/configuration.loader.d.ts +1 -1
  124. package/lib/configuration/configuration.loader.js +1 -2
  125. package/lib/configuration/defaults.d.ts +2 -1
  126. package/lib/configuration/defaults.js +8 -10
  127. package/lib/configuration/index.d.ts +3 -3
  128. package/lib/configuration/index.js +3 -19
  129. package/lib/configuration/nest-configuration.loader.d.ts +3 -3
  130. package/lib/configuration/nest-configuration.loader.js +28 -29
  131. package/lib/package-managers/abstract.package-manager.d.ts +4 -4
  132. package/lib/package-managers/abstract.package-manager.js +21 -32
  133. package/lib/package-managers/bun.package-manager.d.ts +7 -0
  134. package/lib/package-managers/bun.package-manager.js +22 -0
  135. package/lib/package-managers/index.d.ts +9 -8
  136. package/lib/package-managers/index.js +9 -24
  137. package/lib/package-managers/npm.package-manager.d.ts +2 -2
  138. package/lib/package-managers/npm.package-manager.js +6 -10
  139. package/lib/package-managers/package-manager-commands.js +1 -2
  140. package/lib/package-managers/package-manager.d.ts +2 -1
  141. package/lib/package-managers/package-manager.factory.d.ts +2 -2
  142. package/lib/package-managers/package-manager.factory.js +23 -20
  143. package/lib/package-managers/package-manager.js +3 -5
  144. package/lib/package-managers/pnpm.package-manager.d.ts +2 -2
  145. package/lib/package-managers/pnpm.package-manager.js +6 -10
  146. package/lib/package-managers/project.dependency.js +1 -2
  147. package/lib/package-managers/yarn.package-manager.d.ts +2 -2
  148. package/lib/package-managers/yarn.package-manager.js +6 -10
  149. package/lib/questions/questions.d.ts +5 -1
  150. package/lib/questions/questions.js +2 -7
  151. package/lib/readers/file-system.reader.d.ts +1 -1
  152. package/lib/readers/file-system.reader.js +6 -9
  153. package/lib/readers/index.d.ts +2 -2
  154. package/lib/readers/index.js +2 -18
  155. package/lib/readers/reader.js +3 -5
  156. package/lib/runners/abstract.runner.js +40 -21
  157. package/lib/runners/bun.runner.d.ts +4 -0
  158. package/lib/runners/bun.runner.js +6 -0
  159. package/lib/runners/git.runner.d.ts +1 -1
  160. package/lib/runners/git.runner.js +2 -6
  161. package/lib/runners/index.d.ts +3 -3
  162. package/lib/runners/index.js +3 -19
  163. package/lib/runners/mau.runner.d.ts +8 -0
  164. package/lib/runners/mau.runner.js +10 -0
  165. package/lib/runners/npm.runner.d.ts +1 -1
  166. package/lib/runners/npm.runner.js +2 -6
  167. package/lib/runners/pnpm.runner.d.ts +1 -1
  168. package/lib/runners/pnpm.runner.js +2 -6
  169. package/lib/runners/runner.d.ts +2 -1
  170. package/lib/runners/runner.factory.d.ts +7 -6
  171. package/lib/runners/runner.factory.js +18 -20
  172. package/lib/runners/runner.js +3 -5
  173. package/lib/runners/schematic.runner.d.ts +1 -1
  174. package/lib/runners/schematic.runner.js +5 -7
  175. package/lib/runners/yarn.runner.d.ts +1 -1
  176. package/lib/runners/yarn.runner.js +2 -6
  177. package/lib/schematics/abstract.collection.d.ts +3 -3
  178. package/lib/schematics/abstract.collection.js +3 -5
  179. package/lib/schematics/collection.factory.d.ts +2 -2
  180. package/lib/schematics/collection.factory.js +9 -13
  181. package/lib/schematics/collection.js +2 -5
  182. package/lib/schematics/custom.collection.d.ts +2 -2
  183. package/lib/schematics/custom.collection.js +4 -8
  184. package/lib/schematics/index.d.ts +4 -4
  185. package/lib/schematics/index.js +4 -20
  186. package/lib/schematics/nest.collection.d.ts +3 -3
  187. package/lib/schematics/nest.collection.js +113 -109
  188. package/lib/schematics/schematic.option.js +10 -9
  189. package/lib/ui/banner.js +1 -4
  190. package/lib/ui/emojis.d.ts +17 -17
  191. package/lib/ui/emojis.js +19 -22
  192. package/lib/ui/errors.js +1 -4
  193. package/lib/ui/index.d.ts +5 -5
  194. package/lib/ui/index.js +5 -21
  195. package/lib/ui/messages.d.ts +8 -0
  196. package/lib/ui/messages.js +23 -18
  197. package/lib/ui/prefixes.js +3 -6
  198. package/lib/utils/extra-args-warning.js +3 -6
  199. package/lib/utils/formatting.js +1 -4
  200. package/lib/utils/get-default-tsconfig-path.js +4 -7
  201. package/lib/utils/gracefully-exit-on-prompt-error.js +1 -4
  202. package/lib/utils/is-esm-project.d.ts +5 -0
  203. package/lib/utils/is-esm-project.js +16 -0
  204. package/lib/utils/is-interactive.d.ts +8 -0
  205. package/lib/utils/is-interactive.js +10 -0
  206. package/lib/utils/is-module-available.js +3 -4
  207. package/lib/utils/load-configuration.d.ts +1 -1
  208. package/lib/utils/load-configuration.js +4 -7
  209. package/lib/utils/local-binaries.d.ts +2 -2
  210. package/lib/utils/local-binaries.js +8 -11
  211. package/lib/utils/mau.d.ts +14 -0
  212. package/lib/utils/mau.js +46 -0
  213. package/lib/utils/os-info.utils.js +1 -4
  214. package/lib/utils/project-utils.d.ts +1 -3
  215. package/lib/utils/project-utils.js +16 -28
  216. package/lib/utils/remaining-flags.d.ts +2 -2
  217. package/lib/utils/remaining-flags.js +13 -8
  218. package/lib/utils/tree-kill.js +7 -10
  219. package/lib/utils/type-assertions.js +1 -4
  220. package/package.json +70 -83
@@ -0,0 +1,51 @@
1
+ import { confirm } from '@inquirer/prompts';
2
+ import { red } from 'ansis';
3
+ import { PackageManagerFactory } from '../lib/package-managers/index.js';
4
+ import { MauRunner } from '../lib/runners/mau.runner.js';
5
+ import { ERROR_PREFIX, INFO_PREFIX, MESSAGES } from '../lib/ui/index.js';
6
+ import { gracefullyExitOnPromptError } from '../lib/utils/gracefully-exit-on-prompt-error.js';
7
+ import { isInteractive } from '../lib/utils/is-interactive.js';
8
+ import { MAU_PACKAGE_NAME, findMauBinary } from '../lib/utils/mau.js';
9
+ import { AbstractAction } from './abstract.action.js';
10
+ const INSTALL_COMMAND = `npm install --save-dev ${MAU_PACKAGE_NAME}`;
11
+ export class DeployAction extends AbstractAction {
12
+ async handle(context) {
13
+ const binaryPath = findMauBinary() ?? (await this.installMau());
14
+ const runner = new MauRunner(binaryPath);
15
+ // Not collected: mau owns the terminal from here on, so its output and
16
+ // any prompts it shows must reach the user directly.
17
+ await runner.run(['deploy', ...context.args].join(' '));
18
+ }
19
+ async installMau() {
20
+ if (!isInteractive()) {
21
+ console.error(`\n${ERROR_PREFIX} ${MESSAGES.MAU_NOT_INSTALLED_NON_INTERACTIVE(MAU_PACKAGE_NAME, INSTALL_COMMAND)}`);
22
+ throw new Error(MESSAGES.MAU_INSTALLATION_FAILED(MAU_PACKAGE_NAME));
23
+ }
24
+ const shouldInstall = await confirm({
25
+ message: MESSAGES.MAU_INSTALLATION_QUESTION(MAU_PACKAGE_NAME),
26
+ default: true,
27
+ }).catch(gracefullyExitOnPromptError);
28
+ if (!shouldInstall) {
29
+ console.error(`\n${ERROR_PREFIX} ${MESSAGES.MAU_INSTALLATION_DECLINED(MAU_PACKAGE_NAME, INSTALL_COMMAND)}`);
30
+ throw new Error(MESSAGES.MAU_INSTALLATION_FAILED(MAU_PACKAGE_NAME));
31
+ }
32
+ console.info(`${INFO_PREFIX} ${MESSAGES.MAU_INSTALLATION_IN_PROGRESS(MAU_PACKAGE_NAME)}`);
33
+ try {
34
+ const manager = await PackageManagerFactory.find();
35
+ await manager.addDevelopment([MAU_PACKAGE_NAME], 'latest');
36
+ }
37
+ catch (error) {
38
+ if (error instanceof Error && error.message) {
39
+ console.error(red(error.message));
40
+ }
41
+ throw new Error(MESSAGES.MAU_INSTALLATION_FAILED(MAU_PACKAGE_NAME));
42
+ }
43
+ // Resolve again rather than assuming a path: the package manager decides
44
+ // where the package physically lands.
45
+ const binaryPath = findMauBinary();
46
+ if (!binaryPath) {
47
+ throw new Error(MESSAGES.MAU_INSTALLATION_FAILED(MAU_PACKAGE_NAME));
48
+ }
49
+ return binaryPath;
50
+ }
51
+ }
@@ -1,5 +1,5 @@
1
- import { Input } from '../commands';
2
- import { AbstractAction } from './abstract.action';
1
+ import { GenerateCommandContext } from '../commands/index.js';
2
+ import { AbstractAction } from './abstract.action.js';
3
3
  export declare class GenerateAction extends AbstractAction {
4
- handle(inputs: Input[], options: Input[]): Promise<void>;
4
+ handle(context: GenerateCommandContext): Promise<void>;
5
5
  }
@@ -1,48 +1,39 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GenerateAction = void 0;
4
- const ansis_1 = require("ansis");
5
- const path = require("path");
6
- const get_value_or_default_1 = require("../lib/compiler/helpers/get-value-or-default");
7
- const schematics_1 = require("../lib/schematics");
8
- const ui_1 = require("../lib/ui");
9
- const load_configuration_1 = require("../lib/utils/load-configuration");
10
- const project_utils_1 = require("../lib/utils/project-utils");
11
- const abstract_action_1 = require("./abstract.action");
12
- const type_assertions_1 = require("../lib/utils/type-assertions");
13
- class GenerateAction extends abstract_action_1.AbstractAction {
14
- async handle(inputs, options) {
15
- await generateFiles(inputs.concat(options));
1
+ import { red } from 'ansis';
2
+ import * as path from 'path';
3
+ import { getValueOrDefault } from '../lib/compiler/helpers/get-value-or-default.js';
4
+ import { Collection, CollectionFactory, SchematicOption, } from '../lib/schematics/index.js';
5
+ import { MESSAGES } from '../lib/ui/index.js';
6
+ import { loadConfiguration } from '../lib/utils/load-configuration.js';
7
+ import { askForProjectName, getSpecFileSuffix, moveDefaultProjectToStart, shouldAskForProject, shouldGenerateFlat, shouldGenerateSpec, } from '../lib/utils/project-utils.js';
8
+ import { AbstractAction } from './abstract.action.js';
9
+ export class GenerateAction extends AbstractAction {
10
+ async handle(context) {
11
+ await generateFiles(context);
16
12
  }
17
13
  }
18
- exports.GenerateAction = GenerateAction;
19
- const generateFiles = async (inputs) => {
20
- const configuration = await (0, load_configuration_1.loadConfiguration)();
21
- const collectionOption = inputs.find((option) => option.name === 'collection').value;
22
- const schematic = inputs.find((option) => option.name === 'schematic')
23
- .value;
24
- const appName = inputs.find((option) => option.name === 'project')
25
- .value;
26
- const spec = inputs.find((option) => option.name === 'spec');
27
- const flat = inputs.find((option) => option.name === 'flat');
28
- const specFileSuffix = inputs.find((option) => option.name === 'specFileSuffix');
29
- const collection = schematics_1.CollectionFactory.create(collectionOption || configuration.collection || schematics_1.Collection.NESTJS);
30
- const schematicOptions = mapSchematicOptions(inputs);
31
- schematicOptions.push(new schematics_1.SchematicOption('language', configuration.language));
14
+ const generateFiles = async (context) => {
15
+ const configuration = await loadConfiguration();
16
+ const collectionOption = context.collection;
17
+ const schematic = context.schematic;
18
+ const appName = context.project ?? '';
19
+ const specFileSuffix = context.specFileSuffix;
20
+ const collection = CollectionFactory.create(collectionOption || configuration.collection || Collection.NESTJS);
21
+ const schematicOptions = mapContextToSchematicOptions(context);
22
+ schematicOptions.push(new SchematicOption('language', configuration.language));
32
23
  const configurationProjects = configuration.projects;
33
24
  let sourceRoot = appName
34
- ? (0, get_value_or_default_1.getValueOrDefault)(configuration, 'sourceRoot', appName)
25
+ ? getValueOrDefault(configuration, 'sourceRoot', appName)
35
26
  : configuration.sourceRoot;
36
- const specValue = spec.value;
37
- const flatValue = !!flat?.value;
38
- const specFileSuffixValue = specFileSuffix.value;
39
- const specOptions = spec.options;
40
- let generateSpec = (0, project_utils_1.shouldGenerateSpec)(configuration, schematic, appName, specValue, specOptions.passedAsInput);
41
- let generateFlat = (0, project_utils_1.shouldGenerateFlat)(configuration, appName, flatValue);
42
- let generateSpecFileSuffix = (0, project_utils_1.getSpecFileSuffix)(configuration, appName, specFileSuffixValue);
27
+ const specValue = typeof context.spec === 'boolean' ? context.spec : context.spec.value;
28
+ const specPassedAsInput = typeof context.spec === 'boolean' ? false : context.spec.passedAsInput;
29
+ const flatValue = context.flat !== undefined ? !!context.flat : false;
30
+ const specFileSuffixValue = specFileSuffix;
31
+ let generateSpec = shouldGenerateSpec(configuration, schematic, appName, specValue, specPassedAsInput);
32
+ let generateFlat = shouldGenerateFlat(configuration, appName, flatValue);
33
+ let generateSpecFileSuffix = getSpecFileSuffix(configuration, appName, specFileSuffixValue);
43
34
  // If you only add a `lib` we actually don't have monorepo: true BUT we do have "projects"
44
35
  // Ensure we don't run for new app/libs schematics
45
- if ((0, project_utils_1.shouldAskForProject)(schematic, configurationProjects, appName)) {
36
+ if (shouldAskForProject(schematic, configurationProjects, appName)) {
46
37
  const defaultLabel = ' [ Default ]';
47
38
  let defaultProjectName = configuration.sourceRoot + defaultLabel;
48
39
  for (const property in configurationProjects) {
@@ -51,47 +42,58 @@ const generateFiles = async (inputs) => {
51
42
  break;
52
43
  }
53
44
  }
54
- const projects = (0, project_utils_1.moveDefaultProjectToStart)(configuration, defaultProjectName, defaultLabel);
55
- const selectedProjectName = (await (0, project_utils_1.askForProjectName)(ui_1.MESSAGES.PROJECT_SELECTION_QUESTION, projects));
45
+ const projects = moveDefaultProjectToStart(configuration, defaultProjectName, defaultLabel);
46
+ const selectedProjectName = (await askForProjectName(MESSAGES.PROJECT_SELECTION_QUESTION, projects));
56
47
  const project = selectedProjectName.replace(defaultLabel, '');
57
48
  if (project !== configuration.sourceRoot) {
58
49
  sourceRoot = configurationProjects[project].sourceRoot;
59
50
  }
60
51
  if (selectedProjectName !== defaultProjectName) {
61
52
  // Only overwrite if the appName is not the default- as it has already been loaded above
62
- generateSpec = (0, project_utils_1.shouldGenerateSpec)(configuration, schematic, selectedProjectName, specValue, specOptions.passedAsInput);
63
- generateFlat = (0, project_utils_1.shouldGenerateFlat)(configuration, selectedProjectName, flatValue);
64
- generateSpecFileSuffix = (0, project_utils_1.getSpecFileSuffix)(configuration, selectedProjectName, specFileSuffixValue);
53
+ generateSpec = shouldGenerateSpec(configuration, schematic, selectedProjectName, specValue, specPassedAsInput);
54
+ generateFlat = shouldGenerateFlat(configuration, selectedProjectName, flatValue);
55
+ generateSpecFileSuffix = getSpecFileSuffix(configuration, selectedProjectName, specFileSuffixValue);
65
56
  }
66
57
  }
67
58
  if (configuration.generateOptions?.baseDir) {
68
59
  sourceRoot = path.join(sourceRoot, configuration.generateOptions.baseDir);
69
60
  }
70
- schematicOptions.push(new schematics_1.SchematicOption('sourceRoot', sourceRoot));
71
- schematicOptions.push(new schematics_1.SchematicOption('spec', generateSpec));
72
- schematicOptions.push(new schematics_1.SchematicOption('flat', generateFlat));
73
- schematicOptions.push(new schematics_1.SchematicOption('specFileSuffix', generateSpecFileSuffix));
61
+ schematicOptions.push(new SchematicOption('sourceRoot', sourceRoot));
62
+ schematicOptions.push(new SchematicOption('spec', generateSpec));
63
+ schematicOptions.push(new SchematicOption('flat', generateFlat));
64
+ schematicOptions.push(new SchematicOption('specFileSuffix', generateSpecFileSuffix));
65
+ schematicOptions.push(new SchematicOption('format', context.format));
74
66
  try {
75
- const schematicInput = inputs.find((input) => input.name === 'schematic');
76
- if (!schematicInput) {
67
+ if (!schematic) {
77
68
  throw new Error('Unable to find a schematic for this configuration');
78
69
  }
79
- await collection.execute(schematicInput.value, schematicOptions);
70
+ await collection.execute(schematic, schematicOptions);
80
71
  }
81
72
  catch (error) {
82
73
  if (error && error.message) {
83
- console.error((0, ansis_1.red)(error.message));
74
+ console.error(red(error.message));
84
75
  }
85
76
  }
86
77
  };
87
- const mapSchematicOptions = (inputs) => {
88
- const excludedInputNames = ['schematic', 'spec', 'flat', 'specFileSuffix'];
78
+ const mapContextToSchematicOptions = (context) => {
89
79
  const options = [];
90
- inputs.forEach((input) => {
91
- if (!excludedInputNames.includes(input.name) && input.value !== undefined) {
92
- (0, type_assertions_1.assertNonArray)(input.value);
93
- options.push(new schematics_1.SchematicOption(input.name, input.value));
94
- }
95
- });
80
+ // Only include fields that schematics expect; exclude those handled separately
81
+ if (context.name !== undefined)
82
+ options.push(new SchematicOption('name', context.name));
83
+ if (context.path !== undefined)
84
+ options.push(new SchematicOption('path', context.path));
85
+ if (context.dryRun)
86
+ options.push(new SchematicOption('dry-run', true));
87
+ if (context.collection !== undefined)
88
+ options.push(new SchematicOption('collection', context.collection));
89
+ if (context.project !== undefined)
90
+ options.push(new SchematicOption('project', context.project));
91
+ if (context.skipImport !== undefined)
92
+ options.push(new SchematicOption('skipImport', context.skipImport));
93
+ if (context.type !== undefined)
94
+ options.push(new SchematicOption('type', context.type));
95
+ if (context.crud !== undefined)
96
+ options.push(new SchematicOption('crud', context.crud));
97
+ // 'schematic', 'spec', 'flat', 'specFileSuffix' are handled separately
96
98
  return options;
97
99
  };
@@ -1,7 +1,9 @@
1
- export * from './abstract.action';
2
- export * from './build.action';
3
- export * from './generate.action';
4
- export * from './info.action';
5
- export * from './new.action';
6
- export * from './start.action';
7
- export * from './add.action';
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';
8
+ export * from './deploy.action.js';
9
+ export * from './upgrade.action.js';
package/actions/index.js CHANGED
@@ -1,23 +1,9 @@
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';
8
+ export * from './deploy.action.js';
9
+ export * from './upgrade.action.js';
@@ -1,35 +1,25 @@
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
+ /**
19
+ * Reads the installed version of a package, or returns undefined when it
20
+ * cannot be determined (package not installed, or its "exports" map does
21
+ * not expose "./package.json" — as with @nestjs/* v12+).
22
+ */
23
+ private readInstalledVersion;
24
+ private format;
34
25
  }
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,15 @@ 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
+ if (nestDependencies.length === 0) {
85
+ // No @nestjs/* packages declared in this package.json. Surfacing this
86
+ // explicitly is much more useful than letting `format([])` throw and
87
+ // showing the generic "cannot read your project package.json" error,
88
+ // which is misleading when the file was actually read successfully.
89
+ console.info('No @nestjs/* dependencies were found in package.json.');
90
+ return;
91
+ }
92
+ nestDependencies.forEach((dependency) => console.info(dependency.name, blue(dependency.value)));
84
93
  this.displayWarningMessage(nestDependencies);
85
94
  }
86
95
  displayWarningMessage(nestDependencies) {
@@ -89,11 +98,11 @@ class InfoAction extends abstract_action_1.AbstractAction {
89
98
  const majorVersions = Object.keys(warnings);
90
99
  if (majorVersions.length > 0) {
91
100
  console.info('\r');
92
- console.info((0, ansis_1.yellow) `[Warnings]`);
101
+ console.info(yellow `[Warnings]`);
93
102
  console.info('The following packages are not in the same major version');
94
103
  console.info('This could lead to runtime errors');
95
104
  majorVersions.forEach((version) => {
96
- console.info((0, ansis_1.bold) `* Under version ${version}`);
105
+ console.info(bold `* Under version ${version}`);
97
106
  warnings[version].forEach(({ packageName, value }) => {
98
107
  console.info(`- ${packageName} ${value}`);
99
108
  });
@@ -102,7 +111,7 @@ class InfoAction extends abstract_action_1.AbstractAction {
102
111
  }
103
112
  catch {
104
113
  console.info('\t');
105
- console.error((0, ansis_1.red)(ui_1.MESSAGES.NEST_INFORMATION_PACKAGE_WARNING_FAILED(this.warningMessageDependenciesWhiteList)));
114
+ console.error(red(MESSAGES.NEST_INFORMATION_PACKAGE_WARNING_FAILED(this.warningMessageDependenciesWhiteList)));
106
115
  }
107
116
  }
108
117
  buildNestVersionsWarningMessage(nestDependencies) {
@@ -145,37 +154,48 @@ class InfoAction extends abstract_action_1.AbstractAction {
145
154
  const nestDependencies = [];
146
155
  Object.keys(dependencies).forEach((key) => {
147
156
  if (key.indexOf('@nestjs') > -1) {
148
- const depPackagePath = require.resolve(key + '/package.json', {
149
- paths: [process.cwd()],
150
- });
151
- const depPackage = (0, fs_1.readFileSync)(depPackagePath).toString();
152
- const value = JSON.parse(depPackage).version;
153
157
  nestDependencies.push({
154
158
  name: `${key.replace(/@nestjs\//, '').replace(/@.*/, '')} version`,
155
- value: value || dependencies[key].version,
159
+ value: this.readInstalledVersion(key) ?? dependencies[key].version,
156
160
  packageName: key,
157
161
  });
158
162
  }
159
163
  });
160
164
  return nestDependencies;
161
165
  }
166
+ /**
167
+ * Reads the installed version of a package, or returns undefined when it
168
+ * cannot be determined (package not installed, or its "exports" map does
169
+ * not expose "./package.json" — as with @nestjs/* v12+).
170
+ */
171
+ readInstalledVersion(packageName) {
172
+ let depPackagePath;
173
+ try {
174
+ depPackagePath = require.resolve(packageName + '/package.json', {
175
+ paths: [process.cwd()],
176
+ });
177
+ }
178
+ catch {
179
+ depPackagePath = join(process.cwd(), 'node_modules', packageName, 'package.json');
180
+ }
181
+ try {
182
+ return JSON.parse(readFileSync(depPackagePath).toString()).version;
183
+ }
184
+ catch {
185
+ return undefined;
186
+ }
187
+ }
162
188
  format(dependencies) {
189
+ if (dependencies.length === 0) {
190
+ return dependencies;
191
+ }
163
192
  const sorted = dependencies.sort((dependencyA, dependencyB) => dependencyB.name.length - dependencyA.name.length);
164
193
  const length = sorted[0].name.length;
165
194
  sorted.forEach((dependency) => {
166
- if (dependency.name.length < length) {
167
- dependency.name = this.rightPad(dependency.name, length);
168
- }
195
+ dependency.name = dependency.name.padEnd(length);
169
196
  dependency.name = dependency.name.concat(' :');
170
- dependency.value = dependency.value.replace(/(\^|\~)/, '');
197
+ dependency.value = dependency.value.replace(/([\^~])/, '');
171
198
  });
172
199
  return sorted;
173
200
  }
174
- rightPad(name, length) {
175
- while (name.length < length) {
176
- name = name.concat(' ');
177
- }
178
- return name;
179
- }
180
201
  }
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;