@nestjs/cli 8.0.1 → 8.1.2
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.
- package/CONTRIBUTING.md +1 -3
- package/actions/info.action.d.ts +24 -0
- package/actions/info.action.js +92 -79
- package/actions/new.action.js +1 -0
- package/actions/start.action.js +2 -1
- package/commands/new.command.js +2 -0
- package/lib/compiler/defaults/webpack-defaults.js +1 -1
- package/lib/compiler/webpack-compiler.js +1 -1
- package/lib/configuration/configuration.d.ts +5 -1
- package/lib/configuration/defaults.d.ts +1 -1
- package/lib/configuration/defaults.js +1 -0
- package/lib/package-managers/index.d.ts +1 -0
- package/lib/package-managers/index.js +1 -0
- package/lib/package-managers/package-manager.d.ts +2 -1
- package/lib/package-managers/package-manager.factory.js +6 -0
- package/lib/package-managers/package-manager.js +1 -0
- package/lib/package-managers/pnpm.package-manager.d.ts +7 -0
- package/lib/package-managers/pnpm.package-manager.js +26 -0
- package/lib/runners/pnpm.runner.d.ts +4 -0
- package/lib/runners/pnpm.runner.js +10 -0
- package/lib/runners/runner.d.ts +2 -1
- package/lib/runners/runner.factory.d.ts +2 -1
- package/lib/runners/runner.factory.js +3 -0
- package/lib/runners/runner.js +1 -0
- package/lib/utils/tree-kill.d.ts +1 -0
- package/lib/utils/tree-kill.js +66 -0
- package/package.json +28 -28
package/CONTRIBUTING.md
CHANGED
|
@@ -127,8 +127,7 @@ To ensure consistency throughout the source code, keep these rules in mind as yo
|
|
|
127
127
|
// We're working on auto-documentation.
|
|
128
128
|
* All public API methods **must be documented**. (Details TBC). -->
|
|
129
129
|
* We follow [Google's JavaScript Style Guide][js-style-guide], but wrap all code at
|
|
130
|
-
**100 characters**. An automated formatter is available
|
|
131
|
-
[DEVELOPER.md](docs/DEVELOPER.md#clang-format).
|
|
130
|
+
**100 characters**. An automated formatter is available ( `npm run format` ).
|
|
132
131
|
|
|
133
132
|
## <a name="commit"></a> Commit Message Guidelines
|
|
134
133
|
|
|
@@ -217,7 +216,6 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise
|
|
|
217
216
|
<!-- [coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md -->
|
|
218
217
|
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
|
219
218
|
[corporate-cla]: http://code.google.com/legal/corporate-cla-v1.0.html
|
|
220
|
-
[dev-doc]: https://github.com/nestjs/nest/blob/master/docs/DEVELOPER.md
|
|
221
219
|
[github]: https://github.com/nestjs/nest
|
|
222
220
|
[gitter]: https://gitter.im/nestjs/nest
|
|
223
221
|
[individual-cla]: http://code.google.com/legal/individual-cla-v1.0.html
|
package/actions/info.action.d.ts
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
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
|
+
}
|
|
2
12
|
export declare class InfoAction extends AbstractAction {
|
|
13
|
+
private manager;
|
|
3
14
|
handle(): Promise<void>;
|
|
15
|
+
private displayBanner;
|
|
16
|
+
private displaySystemInformation;
|
|
17
|
+
displayPackageManagerVersion(): Promise<void>;
|
|
18
|
+
displayNestInformation(): Promise<void>;
|
|
19
|
+
displayNestInformationFromPackage(): Promise<void>;
|
|
20
|
+
displayCliVersion(): void;
|
|
21
|
+
readProjectPackageDependencies(): PackageJsonDependencies;
|
|
22
|
+
displayNestVersions(dependencies: PackageJsonDependencies): void;
|
|
23
|
+
buildNestVersionsMessage(dependencies: PackageJsonDependencies): NestDependency[];
|
|
24
|
+
collectNestDependencies(dependencies: PackageJsonDependencies): NestDependency[];
|
|
25
|
+
format(dependencies: NestDependency[]): NestDependency[];
|
|
26
|
+
rightPad(name: string, length: number): string;
|
|
4
27
|
}
|
|
28
|
+
export {};
|
package/actions/info.action.js
CHANGED
|
@@ -21,93 +21,106 @@ const abstract_action_1 = require("./abstract.action");
|
|
|
21
21
|
class InfoAction extends abstract_action_1.AbstractAction {
|
|
22
22
|
handle() {
|
|
23
23
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
yield
|
|
24
|
+
this.manager = yield package_managers_1.PackageManagerFactory.find();
|
|
25
|
+
this.displayBanner();
|
|
26
|
+
yield this.displaySystemInformation();
|
|
27
|
+
yield this.displayNestInformation();
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const displayBanner = () => {
|
|
32
|
-
console.info(chalk.red(ui_1.BANNER));
|
|
33
|
-
};
|
|
34
|
-
const displaySystemInformation = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
-
console.info(chalk.green('[System Information]'));
|
|
36
|
-
console.info('OS Version :', chalk.blue(osName(os_1.platform(), os_1.release())));
|
|
37
|
-
console.info('NodeJS Version :', chalk.blue(process.version));
|
|
38
|
-
yield displayPackageManagerVersion();
|
|
39
|
-
});
|
|
40
|
-
const displayPackageManagerVersion = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
-
const manager = yield package_managers_1.PackageManagerFactory.find();
|
|
42
|
-
try {
|
|
43
|
-
const version = yield manager.version();
|
|
44
|
-
console.info(`${manager.name} Version :`, chalk.blue(version), '\n');
|
|
30
|
+
displayBanner() {
|
|
31
|
+
console.info(chalk.red(ui_1.BANNER));
|
|
45
32
|
}
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
displaySystemInformation() {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
console.info(chalk.green('[System Information]'));
|
|
36
|
+
console.info('OS Version :', chalk.blue(osName(os_1.platform(), os_1.release())));
|
|
37
|
+
console.info('NodeJS Version :', chalk.blue(process.version));
|
|
38
|
+
yield this.displayPackageManagerVersion();
|
|
39
|
+
});
|
|
48
40
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
41
|
+
displayPackageManagerVersion() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
try {
|
|
44
|
+
const version = yield this.manager.version();
|
|
45
|
+
console.info(`${this.manager.name} Version :`, chalk.blue(version), '\n');
|
|
46
|
+
}
|
|
47
|
+
catch (_a) {
|
|
48
|
+
console.error(`${this.manager.name} Version :`, chalk.red('Unknown'), '\n');
|
|
49
|
+
}
|
|
50
|
+
});
|
|
56
51
|
}
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
displayNestInformation() {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
this.displayCliVersion();
|
|
55
|
+
console.info(chalk.green('[Nest Platform Information]'));
|
|
56
|
+
yield this.displayNestInformationFromPackage();
|
|
57
|
+
});
|
|
59
58
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const readProjectPackageJsonDependencies = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
|
-
return new Promise((resolve, reject) => {
|
|
67
|
-
fs_1.readFile(path_1.join(process.cwd(), 'package.json'), (error, buffer) => {
|
|
68
|
-
if (error !== undefined && error !== null) {
|
|
69
|
-
reject(error);
|
|
59
|
+
displayNestInformationFromPackage() {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
try {
|
|
62
|
+
const dependencies = this.readProjectPackageDependencies();
|
|
63
|
+
this.displayNestVersions(dependencies);
|
|
70
64
|
}
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error(chalk.red(ui_1.MESSAGES.NEST_INFORMATION_PACKAGE_MANAGER_FAILED));
|
|
73
67
|
}
|
|
74
68
|
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
69
|
+
}
|
|
70
|
+
displayCliVersion() {
|
|
71
|
+
console.info(chalk.green('[Nest CLI]'));
|
|
72
|
+
console.info('Nest CLI Version :', chalk.blue(JSON.parse(fs_1.readFileSync(path_1.join(__dirname, '../package.json')).toString()).version), '\n');
|
|
73
|
+
}
|
|
74
|
+
readProjectPackageDependencies() {
|
|
75
|
+
const buffer = fs_1.readFileSync(path_1.join(process.cwd(), 'package.json'));
|
|
76
|
+
const pack = JSON.parse(buffer.toString());
|
|
77
|
+
const dependencies = Object.assign(Object.assign({}, pack.dependencies), pack.devDependencies);
|
|
78
|
+
Object.keys(dependencies).forEach((key) => {
|
|
79
|
+
dependencies[key] = {
|
|
80
|
+
version: dependencies[key]
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
return dependencies;
|
|
84
|
+
}
|
|
85
|
+
displayNestVersions(dependencies) {
|
|
86
|
+
this.buildNestVersionsMessage(dependencies).forEach((dependency) => console.info(dependency.name, chalk.blue(dependency.value)));
|
|
87
|
+
}
|
|
88
|
+
buildNestVersionsMessage(dependencies) {
|
|
89
|
+
const nestDependencies = this.collectNestDependencies(dependencies);
|
|
90
|
+
return this.format(nestDependencies);
|
|
91
|
+
}
|
|
92
|
+
collectNestDependencies(dependencies) {
|
|
93
|
+
const nestDependencies = [];
|
|
94
|
+
Object.keys(dependencies).forEach((key) => {
|
|
95
|
+
if (key.indexOf('@nestjs') > -1) {
|
|
96
|
+
const depPackagePath = require.resolve(key + '/package.json', { paths: [process.cwd()] });
|
|
97
|
+
const depPackage = fs_1.readFileSync(depPackagePath).toString();
|
|
98
|
+
const value = JSON.parse(depPackage).version;
|
|
99
|
+
nestDependencies.push({
|
|
100
|
+
name: `${key.replace(/@nestjs\//, '').replace(/@.*/, '')} version`,
|
|
101
|
+
value: value || dependencies[key].version,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return nestDependencies;
|
|
106
|
+
}
|
|
107
|
+
format(dependencies) {
|
|
108
|
+
const sorted = dependencies.sort((dependencyA, dependencyB) => dependencyB.name.length - dependencyA.name.length);
|
|
109
|
+
const length = sorted[0].name.length;
|
|
110
|
+
sorted.forEach((dependency) => {
|
|
111
|
+
if (dependency.name.length < length) {
|
|
112
|
+
dependency.name = this.rightPad(dependency.name, length);
|
|
113
|
+
}
|
|
114
|
+
dependency.name = dependency.name.concat(' :');
|
|
115
|
+
dependency.value = dependency.value.replace(/(\^|\~)/, '');
|
|
116
|
+
});
|
|
117
|
+
return sorted;
|
|
118
|
+
}
|
|
119
|
+
rightPad(name, length) {
|
|
120
|
+
while (name.length < length) {
|
|
121
|
+
name = name.concat(' ');
|
|
102
122
|
}
|
|
103
|
-
|
|
104
|
-
dependency.value = dependency.value.replace(/(\^|\~)/, '');
|
|
105
|
-
});
|
|
106
|
-
return sorted;
|
|
107
|
-
};
|
|
108
|
-
const rightPad = (name, length) => {
|
|
109
|
-
while (name.length < length) {
|
|
110
|
-
name = name.concat(' ');
|
|
123
|
+
return name;
|
|
111
124
|
}
|
|
112
|
-
|
|
113
|
-
|
|
125
|
+
}
|
|
126
|
+
exports.InfoAction = InfoAction;
|
package/actions/new.action.js
CHANGED
|
@@ -121,6 +121,7 @@ const askForPackageManager = () => __awaiter(void 0, void 0, void 0, function* (
|
|
|
121
121
|
questions_1.generateSelect('package-manager')(ui_1.MESSAGES.PACKAGE_MANAGER_QUESTION)([
|
|
122
122
|
package_managers_1.PackageManager.NPM,
|
|
123
123
|
package_managers_1.PackageManager.YARN,
|
|
124
|
+
package_managers_1.PackageManager.PNPM
|
|
124
125
|
]),
|
|
125
126
|
];
|
|
126
127
|
const prompt = inquirer.createPromptModule();
|
package/actions/start.action.js
CHANGED
|
@@ -15,6 +15,7 @@ const child_process_1 = require("child_process");
|
|
|
15
15
|
const fs = require("fs");
|
|
16
16
|
const path_1 = require("path");
|
|
17
17
|
const killProcess = require("tree-kill");
|
|
18
|
+
const tree_kill_1 = require("../lib/utils/tree-kill");
|
|
18
19
|
const get_value_or_default_1 = require("../lib/compiler/helpers/get-value-or-default");
|
|
19
20
|
const defaults_1 = require("../lib/configuration/defaults");
|
|
20
21
|
const ui_1 = require("../lib/ui");
|
|
@@ -56,7 +57,7 @@ class StartAction extends build_action_1.BuildAction {
|
|
|
56
57
|
const sourceRoot = get_value_or_default_1.getValueOrDefault(configuration, 'sourceRoot', appName);
|
|
57
58
|
const entryFile = get_value_or_default_1.getValueOrDefault(configuration, 'entryFile', appName);
|
|
58
59
|
let childProcessRef;
|
|
59
|
-
process.on('exit', () => childProcessRef &&
|
|
60
|
+
process.on('exit', () => childProcessRef && tree_kill_1.treeKillSync(childProcessRef.pid));
|
|
60
61
|
return () => {
|
|
61
62
|
if (childProcessRef) {
|
|
62
63
|
childProcessRef.removeAllListeners('exit');
|
package/commands/new.command.js
CHANGED
|
@@ -25,6 +25,7 @@ class NewCommand extends abstract_command_1.AbstractCommand {
|
|
|
25
25
|
.option('-p, --package-manager [package-manager]', 'Specify package manager.')
|
|
26
26
|
.option('-l, --language [language]', 'Programming language to be used (TypeScript or JavaScript).')
|
|
27
27
|
.option('-c, --collection [collectionName]', 'Schematics collection to use.')
|
|
28
|
+
.option('--strict', 'Enables strict mode in TypeScript.')
|
|
28
29
|
.action((name, command) => __awaiter(this, void 0, void 0, function* () {
|
|
29
30
|
const options = [];
|
|
30
31
|
const availableLanguages = ['js', 'ts', 'javascript', 'typescript'];
|
|
@@ -32,6 +33,7 @@ class NewCommand extends abstract_command_1.AbstractCommand {
|
|
|
32
33
|
options.push({ name: 'dry-run', value: !!command.dryRun });
|
|
33
34
|
options.push({ name: 'skip-git', value: !!command.skipGit });
|
|
34
35
|
options.push({ name: 'skip-install', value: !!command.skipInstall });
|
|
36
|
+
options.push({ name: 'strict', value: !!command.strict });
|
|
35
37
|
options.push({
|
|
36
38
|
name: 'package-manager',
|
|
37
39
|
value: command.packageManager,
|
|
@@ -29,7 +29,7 @@ const webpackDefaultsFactory = (sourceRoot, relativeSourceRoot, entryFilename, i
|
|
|
29
29
|
getCustomTransformers: (program) => ({
|
|
30
30
|
before: plugins.beforeHooks.map((hook) => hook(program)),
|
|
31
31
|
after: plugins.afterHooks.map((hook) => hook(program)),
|
|
32
|
-
|
|
32
|
+
afterDeclarations: plugins.afterDeclarationsHooks.map((hook) => hook(program)),
|
|
33
33
|
}),
|
|
34
34
|
},
|
|
35
35
|
},
|
|
@@ -30,7 +30,7 @@ class WebpackCompiler {
|
|
|
30
30
|
const projectWebpackOptions = typeof webpackConfigFactoryOrConfig !== 'function'
|
|
31
31
|
? webpackConfigFactoryOrConfig
|
|
32
32
|
: webpackConfigFactoryOrConfig(defaultOptions, webpack);
|
|
33
|
-
const webpackConfiguration = Object.assign(Object.assign({}, defaultOptions), projectWebpackOptions);
|
|
33
|
+
const webpackConfiguration = Object.assign(Object.assign(Object.assign({}, defaultOptions), { mode: watchMode ? 'development' : defaultOptions.mode }), projectWebpackOptions);
|
|
34
34
|
const compiler = webpack(webpackConfiguration);
|
|
35
35
|
const afterCallback = (err, stats) => {
|
|
36
36
|
if (err && stats === undefined) {
|
|
@@ -18,10 +18,14 @@ interface CompilerOptions {
|
|
|
18
18
|
tsConfigPath?: string;
|
|
19
19
|
webpack?: boolean;
|
|
20
20
|
webpackConfigPath?: string;
|
|
21
|
-
plugins?: string[];
|
|
21
|
+
plugins?: string[] | PluginOptions[];
|
|
22
22
|
assets?: string[];
|
|
23
23
|
deleteOutDir?: boolean;
|
|
24
24
|
}
|
|
25
|
+
interface PluginOptions {
|
|
26
|
+
name: string;
|
|
27
|
+
options: Record<string, any>[];
|
|
28
|
+
}
|
|
25
29
|
interface GenerateOptions {
|
|
26
30
|
spec?: boolean | Record<string, boolean>;
|
|
27
31
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Configuration } from './configuration';
|
|
2
2
|
export declare const defaultConfiguration: Required<Configuration>;
|
|
3
3
|
export declare const defaultOutDir = "dist";
|
|
4
|
-
export declare const defaultGitIgnore = "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# OS\n.DS_Store\n\n# Tests\n/coverage\n/.nyc_output\n\n# IDEs and editors\n/.idea\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# IDE - VSCode\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json";
|
|
4
|
+
export declare const defaultGitIgnore = "# compiled output\n/dist\n/node_modules\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# OS\n.DS_Store\n\n# Tests\n/coverage\n/.nyc_output\n\n# IDEs and editors\n/.idea\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# IDE - VSCode\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json";
|
|
@@ -3,5 +3,6 @@ export * from './package-manager.factory';
|
|
|
3
3
|
export * from './abstract.package-manager';
|
|
4
4
|
export * from './npm.package-manager';
|
|
5
5
|
export * from './yarn.package-manager';
|
|
6
|
+
export * from './pnpm.package-manager';
|
|
6
7
|
export * from './project.dependency';
|
|
7
8
|
export * from './package-manager-commands';
|
|
@@ -15,5 +15,6 @@ __exportStar(require("./package-manager.factory"), exports);
|
|
|
15
15
|
__exportStar(require("./abstract.package-manager"), exports);
|
|
16
16
|
__exportStar(require("./npm.package-manager"), exports);
|
|
17
17
|
__exportStar(require("./yarn.package-manager"), exports);
|
|
18
|
+
__exportStar(require("./pnpm.package-manager"), exports);
|
|
18
19
|
__exportStar(require("./project.dependency"), exports);
|
|
19
20
|
__exportStar(require("./package-manager-commands"), exports);
|
|
@@ -14,6 +14,7 @@ const fs_1 = require("fs");
|
|
|
14
14
|
const npm_package_manager_1 = require("./npm.package-manager");
|
|
15
15
|
const package_manager_1 = require("./package-manager");
|
|
16
16
|
const yarn_package_manager_1 = require("./yarn.package-manager");
|
|
17
|
+
const pnpm_package_manager_1 = require("./pnpm.package-manager");
|
|
17
18
|
class PackageManagerFactory {
|
|
18
19
|
static create(name) {
|
|
19
20
|
switch (name) {
|
|
@@ -21,6 +22,8 @@ class PackageManagerFactory {
|
|
|
21
22
|
return new npm_package_manager_1.NpmPackageManager();
|
|
22
23
|
case package_manager_1.PackageManager.YARN:
|
|
23
24
|
return new yarn_package_manager_1.YarnPackageManager();
|
|
25
|
+
case package_manager_1.PackageManager.PNPM:
|
|
26
|
+
return new pnpm_package_manager_1.PnpmPackageManager();
|
|
24
27
|
default:
|
|
25
28
|
throw new Error(`Package manager ${name} is not managed.`);
|
|
26
29
|
}
|
|
@@ -36,6 +39,9 @@ class PackageManagerFactory {
|
|
|
36
39
|
if (files.findIndex((filename) => filename === 'yarn.lock') > -1) {
|
|
37
40
|
resolve(this.create(package_manager_1.PackageManager.YARN));
|
|
38
41
|
}
|
|
42
|
+
else if (files.findIndex((filename) => filename === 'pnpm-lock.yaml') > -1) {
|
|
43
|
+
resolve(this.create(package_manager_1.PackageManager.PNPM));
|
|
44
|
+
}
|
|
39
45
|
else {
|
|
40
46
|
resolve(this.create(package_manager_1.PackageManager.NPM));
|
|
41
47
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbstractPackageManager } from './abstract.package-manager';
|
|
2
|
+
import { PackageManagerCommands } from './package-manager-commands';
|
|
3
|
+
export declare class PnpmPackageManager extends AbstractPackageManager {
|
|
4
|
+
constructor();
|
|
5
|
+
get name(): string;
|
|
6
|
+
get cli(): PackageManagerCommands;
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PnpmPackageManager = void 0;
|
|
4
|
+
const runners_1 = require("../runners");
|
|
5
|
+
const abstract_package_manager_1 = require("./abstract.package-manager");
|
|
6
|
+
const package_manager_1 = require("./package-manager");
|
|
7
|
+
class PnpmPackageManager extends abstract_package_manager_1.AbstractPackageManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(runners_1.RunnerFactory.create(runners_1.Runner.PNPM));
|
|
10
|
+
}
|
|
11
|
+
get name() {
|
|
12
|
+
return package_manager_1.PackageManager.PNPM.toUpperCase();
|
|
13
|
+
}
|
|
14
|
+
// As of PNPM v5.3, all commands are shared with NPM v6.14.5. See: https://pnpm.js.org/en/pnpm-vs-npm
|
|
15
|
+
get cli() {
|
|
16
|
+
return {
|
|
17
|
+
install: 'install',
|
|
18
|
+
add: 'install',
|
|
19
|
+
update: 'update',
|
|
20
|
+
remove: 'uninstall',
|
|
21
|
+
saveFlag: '--save',
|
|
22
|
+
saveDevFlag: '--save-dev',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.PnpmPackageManager = PnpmPackageManager;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PnpmRunner = void 0;
|
|
4
|
+
const abstract_runner_1 = require("./abstract.runner");
|
|
5
|
+
class PnpmRunner extends abstract_runner_1.AbstractRunner {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('pnpm');
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.PnpmRunner = PnpmRunner;
|
package/lib/runners/runner.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { NpmRunner } from './npm.runner';
|
|
|
2
2
|
import { Runner } from './runner';
|
|
3
3
|
import { SchematicRunner } from './schematic.runner';
|
|
4
4
|
import { YarnRunner } from './yarn.runner';
|
|
5
|
+
import { PnpmRunner } from './pnpm.runner';
|
|
5
6
|
export declare class RunnerFactory {
|
|
6
|
-
static create(runner: Runner): NpmRunner | SchematicRunner | YarnRunner | undefined;
|
|
7
|
+
static create(runner: Runner): NpmRunner | SchematicRunner | YarnRunner | PnpmRunner | undefined;
|
|
7
8
|
}
|
|
@@ -6,6 +6,7 @@ const npm_runner_1 = require("./npm.runner");
|
|
|
6
6
|
const runner_1 = require("./runner");
|
|
7
7
|
const schematic_runner_1 = require("./schematic.runner");
|
|
8
8
|
const yarn_runner_1 = require("./yarn.runner");
|
|
9
|
+
const pnpm_runner_1 = require("./pnpm.runner");
|
|
9
10
|
class RunnerFactory {
|
|
10
11
|
static create(runner) {
|
|
11
12
|
switch (runner) {
|
|
@@ -15,6 +16,8 @@ class RunnerFactory {
|
|
|
15
16
|
return new npm_runner_1.NpmRunner();
|
|
16
17
|
case runner_1.Runner.YARN:
|
|
17
18
|
return new yarn_runner_1.YarnRunner();
|
|
19
|
+
case runner_1.Runner.PNPM:
|
|
20
|
+
return new pnpm_runner_1.PnpmRunner();
|
|
18
21
|
default:
|
|
19
22
|
console.info(chalk.yellow(`[WARN] Unsupported runner: ${runner}`));
|
|
20
23
|
}
|
package/lib/runners/runner.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function treeKillSync(pid: number, signal?: string | number): void;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.treeKillSync = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
function treeKillSync(pid, signal) {
|
|
6
|
+
if (process.platform === 'win32') {
|
|
7
|
+
child_process_1.execSync('taskkill /pid ' + pid + ' /T /F');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const childs = getAllChilds(pid);
|
|
11
|
+
childs.forEach(function (pid) {
|
|
12
|
+
killPid(pid, signal);
|
|
13
|
+
});
|
|
14
|
+
killPid(pid, signal);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
exports.treeKillSync = treeKillSync;
|
|
18
|
+
function getAllPid() {
|
|
19
|
+
const rows = child_process_1.execSync('ps -A -o pid,ppid')
|
|
20
|
+
.toString()
|
|
21
|
+
.trim()
|
|
22
|
+
.split('\n')
|
|
23
|
+
.slice(1);
|
|
24
|
+
return rows
|
|
25
|
+
.map(function (row) {
|
|
26
|
+
var parts = row.match(/\s*(\d+)\s*(\d+)/);
|
|
27
|
+
if (parts === null) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
pid: Number(parts[1]),
|
|
32
|
+
ppid: Number(parts[2]),
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
.filter((input) => {
|
|
36
|
+
return input != null;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function getAllChilds(pid) {
|
|
40
|
+
const allpid = getAllPid();
|
|
41
|
+
let ppidHash = {};
|
|
42
|
+
let result = [];
|
|
43
|
+
allpid.forEach(function (item) {
|
|
44
|
+
ppidHash[item.ppid] = ppidHash[item.ppid] || [];
|
|
45
|
+
ppidHash[item.ppid].push(item.pid);
|
|
46
|
+
});
|
|
47
|
+
const find = function (pid) {
|
|
48
|
+
ppidHash[pid] = ppidHash[pid] || [];
|
|
49
|
+
ppidHash[pid].forEach(function (childPid) {
|
|
50
|
+
result.push(childPid);
|
|
51
|
+
find(childPid);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
find(pid);
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
function killPid(pid, signal) {
|
|
58
|
+
try {
|
|
59
|
+
process.kill(pid, signal);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (err.code !== 'ESRCH') {
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/cli",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.1.2",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@cli)",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -43,57 +43,57 @@
|
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://github.com/nestjs/nest-cli#readme",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@angular-devkit/core": "12.
|
|
47
|
-
"@angular-devkit/schematics": "12.
|
|
48
|
-
"@angular-devkit/schematics-cli": "12.
|
|
49
|
-
"@nestjs/schematics": "^8.0.
|
|
46
|
+
"@angular-devkit/core": "12.2.7",
|
|
47
|
+
"@angular-devkit/schematics": "12.2.7",
|
|
48
|
+
"@angular-devkit/schematics-cli": "12.2.7",
|
|
49
|
+
"@nestjs/schematics": "^8.0.3",
|
|
50
50
|
"chalk": "3.0.0",
|
|
51
51
|
"chokidar": "3.5.2",
|
|
52
52
|
"cli-table3": "0.5.1",
|
|
53
53
|
"commander": "4.1.1",
|
|
54
|
-
"fork-ts-checker-webpack-plugin": "6.
|
|
54
|
+
"fork-ts-checker-webpack-plugin": "6.3.3",
|
|
55
55
|
"inquirer": "7.3.3",
|
|
56
|
-
"node-emoji": "1.
|
|
56
|
+
"node-emoji": "1.11.0",
|
|
57
57
|
"ora": "5.4.1",
|
|
58
|
-
"os-name": "4.0.
|
|
58
|
+
"os-name": "4.0.1",
|
|
59
59
|
"rimraf": "3.0.2",
|
|
60
60
|
"shelljs": "0.8.4",
|
|
61
|
-
"source-map-support": "
|
|
61
|
+
"source-map-support": "0.5.20",
|
|
62
62
|
"tree-kill": "1.2.2",
|
|
63
|
-
"tsconfig-paths": "3.
|
|
63
|
+
"tsconfig-paths": "3.11.0",
|
|
64
64
|
"tsconfig-paths-webpack-plugin": "3.5.1",
|
|
65
65
|
"typescript": "4.3.5",
|
|
66
|
-
"webpack": "5.
|
|
66
|
+
"webpack": "5.45.1",
|
|
67
67
|
"webpack-node-externals": "3.0.0"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@commitlint/cli": "
|
|
71
|
-
"@commitlint/config-angular": "
|
|
72
|
-
"@types/copyfiles": "2.4.
|
|
70
|
+
"@commitlint/cli": "13.2.0",
|
|
71
|
+
"@commitlint/config-angular": "13.2.0",
|
|
72
|
+
"@types/copyfiles": "2.4.1",
|
|
73
73
|
"@types/inquirer": "7.3.3",
|
|
74
|
-
"@types/jest": "
|
|
75
|
-
"@types/node": "14.17.
|
|
74
|
+
"@types/jest": "27.0.2",
|
|
75
|
+
"@types/node": "14.17.19",
|
|
76
76
|
"@types/node-emoji": "1.8.1",
|
|
77
77
|
"@types/ora": "3.2.0",
|
|
78
78
|
"@types/os-name": "3.1.0",
|
|
79
|
-
"@types/rimraf": "3.0.
|
|
79
|
+
"@types/rimraf": "3.0.2",
|
|
80
80
|
"@types/shelljs": "0.8.9",
|
|
81
81
|
"@types/webpack-node-externals": "2.5.2",
|
|
82
|
-
"@typescript-eslint/eslint-plugin": "4.
|
|
83
|
-
"@typescript-eslint/parser": "4.
|
|
82
|
+
"@typescript-eslint/eslint-plugin": "4.32.0",
|
|
83
|
+
"@typescript-eslint/parser": "4.32.0",
|
|
84
84
|
"delete-empty": "3.0.0",
|
|
85
|
-
"eslint": "7.
|
|
85
|
+
"eslint": "7.32.0",
|
|
86
86
|
"eslint-config-prettier": "8.3.0",
|
|
87
|
-
"eslint-plugin-import": "2.
|
|
87
|
+
"eslint-plugin-import": "2.24.2",
|
|
88
88
|
"gulp": "4.0.2",
|
|
89
89
|
"gulp-clean": "0.4.0",
|
|
90
|
-
"husky": "7.0.
|
|
91
|
-
"jest": "27.
|
|
92
|
-
"prettier": "2.
|
|
93
|
-
"release-it": "14.
|
|
94
|
-
"ts-jest": "27.0.
|
|
95
|
-
"ts-loader": "9.2.
|
|
96
|
-
"ts-node": "10.
|
|
90
|
+
"husky": "7.0.2",
|
|
91
|
+
"jest": "27.2.3",
|
|
92
|
+
"prettier": "2.4.1",
|
|
93
|
+
"release-it": "14.11.6",
|
|
94
|
+
"ts-jest": "27.0.5",
|
|
95
|
+
"ts-loader": "9.2.6",
|
|
96
|
+
"ts-node": "10.2.1"
|
|
97
97
|
},
|
|
98
98
|
"husky": {
|
|
99
99
|
"hooks": {
|