@nest-extended/cli 0.0.2-beta-3 → 0.0.2-beta-4
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/package.json +1 -1
- package/src/commands/generate-app.d.ts +1 -0
- package/src/commands/generate-app.js +166 -0
- package/src/commands/generate-app.js.map +1 -0
- package/src/commands/generate-service.d.ts +1 -0
- package/src/commands/generate-service.js +48 -0
- package/src/commands/generate-service.js.map +1 -0
- package/src/commands/generate.js +4 -194
- package/src/commands/generate.js.map +1 -1
- package/src/templates/auth.template.js +25 -19
- package/src/templates/auth.template.js.map +1 -1
- package/src/templates/users.template.js +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const generateAppAction: (appName: string) => Promise<void>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateAppAction = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const inquirer = require("inquirer");
|
|
6
|
+
const chalk = require("chalk");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const fs = require("fs-extra");
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const module_template_1 = require("../templates/module.template");
|
|
11
|
+
const controller_template_1 = require("../templates/controller.template");
|
|
12
|
+
const dto_template_1 = require("../templates/dto.template");
|
|
13
|
+
const auth_template_1 = require("../templates/auth.template");
|
|
14
|
+
const users_template_1 = require("../templates/users.template");
|
|
15
|
+
const generateAppAction = (appName) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const questions = [
|
|
17
|
+
{
|
|
18
|
+
type: 'list',
|
|
19
|
+
name: 'database',
|
|
20
|
+
message: 'Which database would you like to use?',
|
|
21
|
+
choices: ['mongo', 'sql'],
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
25
|
+
// @ts-expect-error
|
|
26
|
+
const answers = yield inquirer.prompt(questions);
|
|
27
|
+
const database = answers['database'];
|
|
28
|
+
if (database === 'sql') {
|
|
29
|
+
console.error(chalk.red('Error: We are not supporting sql now'));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.blue(`Generating NestJS app: ${appName}`));
|
|
33
|
+
const appDir = path.join(process.cwd(), appName);
|
|
34
|
+
const pkgManager = fs.existsSync(path.join(process.cwd(), 'yarn.lock')) ? 'yarn' : 'npm';
|
|
35
|
+
// 1. Run nest new
|
|
36
|
+
yield new Promise((resolve, reject) => {
|
|
37
|
+
const child = (0, child_process_1.spawn)('npx', ['@nestjs/cli', 'new', appName, '--package-manager', pkgManager], {
|
|
38
|
+
stdio: 'inherit',
|
|
39
|
+
shell: true,
|
|
40
|
+
});
|
|
41
|
+
child.on('close', (code) => {
|
|
42
|
+
if (code === 0)
|
|
43
|
+
resolve();
|
|
44
|
+
else
|
|
45
|
+
reject(new Error(`nest new failed with code ${code}`));
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
const pkg = require('../../package.json');
|
|
49
|
+
const nestExtendedVersion = pkg.version;
|
|
50
|
+
console.log(chalk.blue('Installing additional dependencies...'));
|
|
51
|
+
// 2. Install dependencies
|
|
52
|
+
yield new Promise((resolve, reject) => {
|
|
53
|
+
const installArgs = pkgManager === 'yarn' ? ['add'] : ['install'];
|
|
54
|
+
const child = (0, child_process_1.spawn)(pkgManager, [
|
|
55
|
+
...installArgs,
|
|
56
|
+
'@nestjs/mongoose',
|
|
57
|
+
'mongoose',
|
|
58
|
+
'@nestjs/config',
|
|
59
|
+
'nestjs-cls',
|
|
60
|
+
'@nestjs/jwt',
|
|
61
|
+
'bcrypt',
|
|
62
|
+
`@nest-extended/core@${nestExtendedVersion}`,
|
|
63
|
+
`@nest-extended/mongoose@${nestExtendedVersion}`,
|
|
64
|
+
`@nest-extended/decorators@${nestExtendedVersion}`,
|
|
65
|
+
'zod'
|
|
66
|
+
], {
|
|
67
|
+
stdio: 'inherit',
|
|
68
|
+
cwd: appDir,
|
|
69
|
+
shell: true,
|
|
70
|
+
});
|
|
71
|
+
child.on('close', (code) => {
|
|
72
|
+
if (code === 0)
|
|
73
|
+
resolve();
|
|
74
|
+
else
|
|
75
|
+
reject(new Error(`${pkgManager} install failed with code ${code}`));
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
// 3. Install Dev dependencies
|
|
79
|
+
yield new Promise((resolve, reject) => {
|
|
80
|
+
const devArgs = pkgManager === 'yarn' ? ['add', '-D'] : ['install', '-D'];
|
|
81
|
+
const child = (0, child_process_1.spawn)(pkgManager, [...devArgs, '@types/bcrypt'], {
|
|
82
|
+
stdio: 'inherit',
|
|
83
|
+
cwd: appDir,
|
|
84
|
+
shell: true,
|
|
85
|
+
});
|
|
86
|
+
child.on('close', (code) => {
|
|
87
|
+
if (code === 0)
|
|
88
|
+
resolve();
|
|
89
|
+
else
|
|
90
|
+
reject(new Error(`${pkgManager} dev install failed with code ${code}`));
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
console.log(chalk.blue('Configuring project...'));
|
|
94
|
+
// 4. Update app.module.ts
|
|
95
|
+
const appModulePath = path.join(appDir, 'src/app.module.ts');
|
|
96
|
+
let appModuleContent = fs.readFileSync(appModulePath, 'utf8');
|
|
97
|
+
const importsToAdd = `
|
|
98
|
+
import { ConfigModule } from '@nestjs/config';
|
|
99
|
+
import { ClsModule } from 'nestjs-cls';
|
|
100
|
+
import { NestExtendedModule } from '@nest-extended/core';
|
|
101
|
+
import { MongooseModule } from '@nestjs/mongoose';
|
|
102
|
+
import { AuthModule } from './services/auth/auth.module';
|
|
103
|
+
import { UsersModule } from './services/users/users.module';
|
|
104
|
+
`;
|
|
105
|
+
appModuleContent = importsToAdd + appModuleContent;
|
|
106
|
+
const nestImports = `
|
|
107
|
+
ConfigModule.forRoot({
|
|
108
|
+
envFilePath: ['.env'],
|
|
109
|
+
isGlobal: true,
|
|
110
|
+
}),
|
|
111
|
+
ClsModule.forRoot({
|
|
112
|
+
global: true,
|
|
113
|
+
middleware: { mount: true },
|
|
114
|
+
}),
|
|
115
|
+
NestExtendedModule.forRoot({
|
|
116
|
+
softDelete: {
|
|
117
|
+
getQuery: () => ({ deleted: { $ne: true } }),
|
|
118
|
+
getData: (user: { _id?: string } | null) => ({
|
|
119
|
+
deleted: true,
|
|
120
|
+
deletedBy: user?._id,
|
|
121
|
+
deletedAt: new Date(),
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
}),
|
|
125
|
+
MongooseModule.forRoot(process.env.MONGODB_URI || 'mongodb://localhost:27017/test'),
|
|
126
|
+
AuthModule,
|
|
127
|
+
UsersModule,`;
|
|
128
|
+
appModuleContent = appModuleContent.replace(/imports:\s*\[/, `imports: [\n${nestImports}`);
|
|
129
|
+
fs.writeFileSync(appModulePath, appModuleContent);
|
|
130
|
+
// Write .env file
|
|
131
|
+
fs.writeFileSync(path.join(appDir, '.env'), 'MONGODB_URI=mongodb://localhost:27017/test\nJWT_SECRET=super-secret-jwt-key\n');
|
|
132
|
+
// 5. Generate Users Service
|
|
133
|
+
const usersDir = path.join(appDir, 'src/services/users');
|
|
134
|
+
const schemasDir = path.join(appDir, 'src/schemas');
|
|
135
|
+
fs.ensureDirSync(usersDir);
|
|
136
|
+
fs.ensureDirSync(schemasDir);
|
|
137
|
+
fs.writeFileSync(path.join(schemasDir, 'users.schema.ts'), (0, users_template_1.getUsersSchema)());
|
|
138
|
+
fs.writeFileSync(path.join(usersDir, 'users.module.ts'), (0, module_template_1.getModule)('Users', 'users'));
|
|
139
|
+
fs.writeFileSync(path.join(usersDir, 'users.service.ts'), (0, users_template_1.getUsersService)());
|
|
140
|
+
fs.writeFileSync(path.join(usersDir, 'users.controller.ts'), (0, controller_template_1.getController)('Users', 'users', 'users'));
|
|
141
|
+
fs.ensureDirSync(path.join(usersDir, 'dto'));
|
|
142
|
+
fs.writeFileSync(path.join(usersDir, 'dto/users.dto.ts'), (0, dto_template_1.getDto)('Users'));
|
|
143
|
+
// 6. Generate Auth Service
|
|
144
|
+
const authDir = path.join(appDir, 'src/services/auth');
|
|
145
|
+
fs.ensureDirSync(authDir);
|
|
146
|
+
fs.ensureDirSync(path.join(authDir, 'constants'));
|
|
147
|
+
fs.ensureDirSync(path.join(authDir, 'decorators'));
|
|
148
|
+
fs.writeFileSync(path.join(authDir, 'auth.module.ts'), (0, auth_template_1.getAuthModule)());
|
|
149
|
+
fs.writeFileSync(path.join(authDir, 'auth.service.ts'), (0, auth_template_1.getAuthService)());
|
|
150
|
+
fs.writeFileSync(path.join(authDir, 'auth.controller.ts'), (0, auth_template_1.getAuthController)());
|
|
151
|
+
fs.writeFileSync(path.join(authDir, 'auth.guard.ts'), (0, auth_template_1.getAuthGuard)());
|
|
152
|
+
fs.writeFileSync(path.join(authDir, 'constants/jwt-constants.ts'), (0, auth_template_1.getJwtConstants)());
|
|
153
|
+
fs.writeFileSync(path.join(authDir, 'decorators/public.decorator.ts'), (0, auth_template_1.getPublicDecorator)());
|
|
154
|
+
console.log(chalk.blue('Running lint...'));
|
|
155
|
+
yield new Promise((resolve) => {
|
|
156
|
+
const lintChild = (0, child_process_1.spawn)(pkgManager, ['run', 'lint'], {
|
|
157
|
+
stdio: 'inherit',
|
|
158
|
+
cwd: appDir,
|
|
159
|
+
shell: true,
|
|
160
|
+
});
|
|
161
|
+
lintChild.on('close', () => resolve());
|
|
162
|
+
});
|
|
163
|
+
console.log(chalk.green('App generated successfully!'));
|
|
164
|
+
});
|
|
165
|
+
exports.generateAppAction = generateAppAction;
|
|
166
|
+
//# sourceMappingURL=generate-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-app.js","sourceRoot":"","sources":["../../../../../packages/cli/src/commands/generate-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const generateServiceAction: (rawName: string) => Promise<void>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateServiceAction = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk = require("chalk");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const fs = require("fs-extra");
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const create_file_1 = require("../lib/create-file");
|
|
10
|
+
const update_app_module_1 = require("../lib/update-app-module");
|
|
11
|
+
const module_template_1 = require("../templates/module.template");
|
|
12
|
+
const service_template_1 = require("../templates/service.template");
|
|
13
|
+
const controller_template_1 = require("../templates/controller.template");
|
|
14
|
+
const dto_template_1 = require("../templates/dto.template");
|
|
15
|
+
const schema_template_1 = require("../templates/schema.template");
|
|
16
|
+
const service_spec_template_1 = require("../templates/service.spec.template");
|
|
17
|
+
const controller_spec_template_1 = require("../templates/controller.spec.template");
|
|
18
|
+
const generateServiceAction = (rawName) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
// if arg have '-' change to camelCase (Logic from original index.js)
|
|
20
|
+
const argArray = rawName.split('-');
|
|
21
|
+
argArray.forEach((arg, index) => {
|
|
22
|
+
argArray[index] = arg[0].toUpperCase() + arg.slice(1).toLowerCase();
|
|
23
|
+
});
|
|
24
|
+
const Name = argArray.join(''); // PascalCase
|
|
25
|
+
const name = Name[0].toLowerCase() + Name.slice(1); // camelCase
|
|
26
|
+
console.log(`Generating service for: ${Name} (${name})`);
|
|
27
|
+
(0, create_file_1.createFileWithContent)(`src/schemas/${name}.schema.ts`, (0, schema_template_1.getSchema)(Name));
|
|
28
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.module.ts`, (0, module_template_1.getModule)(Name, name));
|
|
29
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.service.ts`, (0, service_template_1.getService)(Name, name));
|
|
30
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.controller.ts`, (0, controller_template_1.getController)(Name, name, rawName));
|
|
31
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/dto/${name}.dto.ts`, (0, dto_template_1.getDto)(Name));
|
|
32
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.service.spec.ts`, (0, service_spec_template_1.getServiceSpec)(Name, name));
|
|
33
|
+
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.controller.spec.ts`, (0, controller_spec_template_1.getControllerSpec)(Name, name));
|
|
34
|
+
yield (0, update_app_module_1.updateAppModule)(Name, name);
|
|
35
|
+
console.log(chalk.blue('Running lint...'));
|
|
36
|
+
const projectDir = process.cwd();
|
|
37
|
+
const pkgManager = fs.existsSync(path.join(projectDir, 'yarn.lock')) ? 'yarn' : 'npm';
|
|
38
|
+
yield new Promise((resolve) => {
|
|
39
|
+
const lintChild = (0, child_process_1.spawn)(pkgManager, ['run', 'lint'], {
|
|
40
|
+
stdio: 'inherit',
|
|
41
|
+
cwd: projectDir,
|
|
42
|
+
shell: true,
|
|
43
|
+
});
|
|
44
|
+
lintChild.on('close', () => resolve());
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
exports.generateServiceAction = generateServiceAction;
|
|
48
|
+
//# sourceMappingURL=generate-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-service.js","sourceRoot":"","sources":["../../../../../packages/cli/src/commands/generate-service.ts"],"names":[],"mappings":"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"}
|
package/src/commands/generate.js
CHANGED
|
@@ -1,208 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateCommand = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const commander_1 = require("commander");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const path = require("path");
|
|
9
|
-
const fs = require("fs-extra");
|
|
10
|
-
const child_process_1 = require("child_process");
|
|
11
|
-
const create_file_1 = require("../lib/create-file");
|
|
12
|
-
const update_app_module_1 = require("../lib/update-app-module");
|
|
13
|
-
const module_template_1 = require("../templates/module.template");
|
|
14
|
-
const service_template_1 = require("../templates/service.template");
|
|
15
|
-
const controller_template_1 = require("../templates/controller.template");
|
|
16
|
-
const dto_template_1 = require("../templates/dto.template");
|
|
17
|
-
const schema_template_1 = require("../templates/schema.template");
|
|
18
|
-
const service_spec_template_1 = require("../templates/service.spec.template");
|
|
19
|
-
const controller_spec_template_1 = require("../templates/controller.spec.template");
|
|
20
|
-
const auth_template_1 = require("../templates/auth.template");
|
|
21
|
-
const users_template_1 = require("../templates/users.template");
|
|
5
|
+
const generate_service_1 = require("./generate-service");
|
|
6
|
+
const generate_app_1 = require("./generate-app");
|
|
22
7
|
exports.generateCommand = new commander_1.Command('generate')
|
|
23
8
|
.alias('g')
|
|
24
9
|
.description('Generate a new element');
|
|
25
10
|
exports.generateCommand
|
|
26
11
|
.command('service <name>')
|
|
27
12
|
.description('Generate a new service')
|
|
28
|
-
.action(
|
|
29
|
-
// if arg have '-' change to camelCase (Logic from original index.js)
|
|
30
|
-
const argArray = rawName.split('-');
|
|
31
|
-
argArray.forEach((arg, index) => {
|
|
32
|
-
argArray[index] = arg[0].toUpperCase() + arg.slice(1).toLowerCase();
|
|
33
|
-
});
|
|
34
|
-
const Name = argArray.join(''); // PascalCase
|
|
35
|
-
const name = Name[0].toLowerCase() + Name.slice(1); // camelCase
|
|
36
|
-
console.log(`Generating service for: ${Name} (${name})`);
|
|
37
|
-
(0, create_file_1.createFileWithContent)(`src/schemas/${name}.schema.ts`, (0, schema_template_1.getSchema)(Name));
|
|
38
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.module.ts`, (0, module_template_1.getModule)(Name, name));
|
|
39
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.service.ts`, (0, service_template_1.getService)(Name, name));
|
|
40
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.controller.ts`, (0, controller_template_1.getController)(Name, name, rawName));
|
|
41
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/dto/${name}.dto.ts`, (0, dto_template_1.getDto)(Name));
|
|
42
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.service.spec.ts`, (0, service_spec_template_1.getServiceSpec)(Name, name));
|
|
43
|
-
(0, create_file_1.createFileWithContent)(`src/services/${name}/${name}.controller.spec.ts`, (0, controller_spec_template_1.getControllerSpec)(Name, name));
|
|
44
|
-
yield (0, update_app_module_1.updateAppModule)(Name, name);
|
|
45
|
-
console.log(chalk.blue('Running lint...'));
|
|
46
|
-
const projectDir = process.cwd();
|
|
47
|
-
const pkgManager = fs.existsSync(path.join(projectDir, 'yarn.lock')) ? 'yarn' : 'npm';
|
|
48
|
-
yield new Promise((resolve) => {
|
|
49
|
-
const lintChild = (0, child_process_1.spawn)(pkgManager, ['run', 'lint'], {
|
|
50
|
-
stdio: 'inherit',
|
|
51
|
-
cwd: projectDir,
|
|
52
|
-
shell: true,
|
|
53
|
-
});
|
|
54
|
-
lintChild.on('close', () => resolve());
|
|
55
|
-
});
|
|
56
|
-
}));
|
|
13
|
+
.action(generate_service_1.generateServiceAction);
|
|
57
14
|
exports.generateCommand
|
|
58
15
|
.command('app <name>')
|
|
59
16
|
.description('Generate a new application')
|
|
60
|
-
.action(
|
|
61
|
-
const questions = [
|
|
62
|
-
{
|
|
63
|
-
type: 'list',
|
|
64
|
-
name: 'database',
|
|
65
|
-
message: 'Which database would you like to use?',
|
|
66
|
-
choices: ['mongo', 'sql'],
|
|
67
|
-
},
|
|
68
|
-
];
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
70
|
-
// @ts-expect-error
|
|
71
|
-
const answers = yield inquirer.prompt(questions);
|
|
72
|
-
const database = answers['database'];
|
|
73
|
-
if (database === 'sql') {
|
|
74
|
-
console.error(chalk.red('Error: We are not supporting sql now'));
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
console.log(chalk.blue(`Generating NestJS app: ${appName}`));
|
|
78
|
-
const appDir = path.join(process.cwd(), appName);
|
|
79
|
-
const pkgManager = fs.existsSync(path.join(process.cwd(), 'yarn.lock')) ? 'yarn' : 'npm';
|
|
80
|
-
// 1. Run nest new
|
|
81
|
-
yield new Promise((resolve, reject) => {
|
|
82
|
-
const child = (0, child_process_1.spawn)('npx', ['@nestjs/cli', 'new', appName, '--package-manager', pkgManager], {
|
|
83
|
-
stdio: 'inherit',
|
|
84
|
-
shell: true,
|
|
85
|
-
});
|
|
86
|
-
child.on('close', (code) => {
|
|
87
|
-
if (code === 0)
|
|
88
|
-
resolve();
|
|
89
|
-
else
|
|
90
|
-
reject(new Error(`nest new failed with code ${code}`));
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
const pkg = require('../../package.json');
|
|
94
|
-
const nestExtendedVersion = pkg.version;
|
|
95
|
-
console.log(chalk.blue('Installing additional dependencies...'));
|
|
96
|
-
// 2. Install dependencies
|
|
97
|
-
yield new Promise((resolve, reject) => {
|
|
98
|
-
const installArgs = pkgManager === 'yarn' ? ['add'] : ['install'];
|
|
99
|
-
const child = (0, child_process_1.spawn)(pkgManager, [
|
|
100
|
-
...installArgs,
|
|
101
|
-
'@nestjs/mongoose',
|
|
102
|
-
'mongoose',
|
|
103
|
-
'@nestjs/config',
|
|
104
|
-
'nestjs-cls',
|
|
105
|
-
'@nestjs/jwt',
|
|
106
|
-
'bcrypt',
|
|
107
|
-
`@nest-extended/core@${nestExtendedVersion}`,
|
|
108
|
-
`@nest-extended/mongoose@${nestExtendedVersion}`,
|
|
109
|
-
`@nest-extended/decorators@${nestExtendedVersion}`,
|
|
110
|
-
'zod'
|
|
111
|
-
], {
|
|
112
|
-
stdio: 'inherit',
|
|
113
|
-
cwd: appDir,
|
|
114
|
-
shell: true,
|
|
115
|
-
});
|
|
116
|
-
child.on('close', (code) => {
|
|
117
|
-
if (code === 0)
|
|
118
|
-
resolve();
|
|
119
|
-
else
|
|
120
|
-
reject(new Error(`${pkgManager} install failed with code ${code}`));
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
// 3. Install Dev dependencies
|
|
124
|
-
yield new Promise((resolve, reject) => {
|
|
125
|
-
const devArgs = pkgManager === 'yarn' ? ['add', '-D'] : ['install', '-D'];
|
|
126
|
-
const child = (0, child_process_1.spawn)(pkgManager, [...devArgs, '@types/bcrypt'], {
|
|
127
|
-
stdio: 'inherit',
|
|
128
|
-
cwd: appDir,
|
|
129
|
-
shell: true,
|
|
130
|
-
});
|
|
131
|
-
child.on('close', (code) => {
|
|
132
|
-
if (code === 0)
|
|
133
|
-
resolve();
|
|
134
|
-
else
|
|
135
|
-
reject(new Error(`${pkgManager} dev install failed with code ${code}`));
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
console.log(chalk.blue('Configuring project...'));
|
|
139
|
-
// 4. Update app.module.ts
|
|
140
|
-
const appModulePath = path.join(appDir, 'src/app.module.ts');
|
|
141
|
-
let appModuleContent = fs.readFileSync(appModulePath, 'utf8');
|
|
142
|
-
const importsToAdd = `
|
|
143
|
-
import { ConfigModule } from '@nestjs/config';
|
|
144
|
-
import { ClsModule } from 'nestjs-cls';
|
|
145
|
-
import { NestExtendedModule } from '@nest-extended/core';
|
|
146
|
-
import { MongooseModule } from '@nestjs/mongoose';
|
|
147
|
-
import { AuthModule } from './services/auth/auth.module';
|
|
148
|
-
import { UsersModule } from './services/users/users.module';
|
|
149
|
-
`;
|
|
150
|
-
appModuleContent = importsToAdd + appModuleContent;
|
|
151
|
-
const nestImports = `
|
|
152
|
-
ConfigModule.forRoot({
|
|
153
|
-
envFilePath: ['.env'],
|
|
154
|
-
isGlobal: true,
|
|
155
|
-
}),
|
|
156
|
-
ClsModule.forRoot({
|
|
157
|
-
global: true,
|
|
158
|
-
middleware: { mount: true },
|
|
159
|
-
}),
|
|
160
|
-
NestExtendedModule.forRoot({
|
|
161
|
-
softDelete: {
|
|
162
|
-
getQuery: () => ({ deleted: { $ne: true } }),
|
|
163
|
-
getData: (user: { _id?: string } | null) => ({
|
|
164
|
-
deleted: true,
|
|
165
|
-
deletedBy: user?._id,
|
|
166
|
-
deletedAt: new Date(),
|
|
167
|
-
}),
|
|
168
|
-
},
|
|
169
|
-
}),
|
|
170
|
-
MongooseModule.forRoot(process.env.MONGODB_URI || 'mongodb://localhost:27017/test'),
|
|
171
|
-
AuthModule,
|
|
172
|
-
UsersModule,`;
|
|
173
|
-
appModuleContent = appModuleContent.replace(/imports:\s*\[/, `imports: [\n${nestImports}`);
|
|
174
|
-
fs.writeFileSync(appModulePath, appModuleContent);
|
|
175
|
-
// 5. Generate Users Service
|
|
176
|
-
const usersDir = path.join(appDir, 'src/services/users');
|
|
177
|
-
const schemasDir = path.join(appDir, 'src/schemas');
|
|
178
|
-
fs.ensureDirSync(usersDir);
|
|
179
|
-
fs.ensureDirSync(schemasDir);
|
|
180
|
-
fs.writeFileSync(path.join(schemasDir, 'users.schema.ts'), (0, users_template_1.getUsersSchema)());
|
|
181
|
-
fs.writeFileSync(path.join(usersDir, 'users.module.ts'), (0, module_template_1.getModule)('Users', 'users'));
|
|
182
|
-
fs.writeFileSync(path.join(usersDir, 'users.service.ts'), (0, users_template_1.getUsersService)());
|
|
183
|
-
fs.writeFileSync(path.join(usersDir, 'users.controller.ts'), (0, controller_template_1.getController)('Users', 'users', 'users'));
|
|
184
|
-
fs.ensureDirSync(path.join(usersDir, 'dto'));
|
|
185
|
-
fs.writeFileSync(path.join(usersDir, 'dto/users.dto.ts'), (0, dto_template_1.getDto)('Users'));
|
|
186
|
-
// 6. Generate Auth Service
|
|
187
|
-
const authDir = path.join(appDir, 'src/services/auth');
|
|
188
|
-
fs.ensureDirSync(authDir);
|
|
189
|
-
fs.ensureDirSync(path.join(authDir, 'constants'));
|
|
190
|
-
fs.ensureDirSync(path.join(authDir, 'decorators'));
|
|
191
|
-
fs.writeFileSync(path.join(authDir, 'auth.module.ts'), (0, auth_template_1.getAuthModule)());
|
|
192
|
-
fs.writeFileSync(path.join(authDir, 'auth.service.ts'), (0, auth_template_1.getAuthService)());
|
|
193
|
-
fs.writeFileSync(path.join(authDir, 'auth.controller.ts'), (0, auth_template_1.getAuthController)());
|
|
194
|
-
fs.writeFileSync(path.join(authDir, 'auth.guard.ts'), (0, auth_template_1.getAuthGuard)());
|
|
195
|
-
fs.writeFileSync(path.join(authDir, 'constants/jwt-constants.ts'), (0, auth_template_1.getJwtConstants)());
|
|
196
|
-
fs.writeFileSync(path.join(authDir, 'decorators/public.decorator.ts'), (0, auth_template_1.getPublicDecorator)());
|
|
197
|
-
console.log(chalk.blue('Running lint...'));
|
|
198
|
-
yield new Promise((resolve) => {
|
|
199
|
-
const lintChild = (0, child_process_1.spawn)(pkgManager, ['run', 'lint'], {
|
|
200
|
-
stdio: 'inherit',
|
|
201
|
-
cwd: appDir,
|
|
202
|
-
shell: true,
|
|
203
|
-
});
|
|
204
|
-
lintChild.on('close', () => resolve());
|
|
205
|
-
});
|
|
206
|
-
console.log(chalk.green('App generated successfully!'));
|
|
207
|
-
}));
|
|
17
|
+
.action(generate_app_1.generateAppAction);
|
|
208
18
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../packages/cli/src/commands/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../packages/cli/src/commands/generate.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,yDAA2D;AAC3D,iDAAmD;AAEtC,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACjD,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAE3C,uBAAe;KACV,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,wCAAqB,CAAC,CAAC;AAEnC,uBAAe;KACV,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,gCAAiB,CAAC,CAAC"}
|
|
@@ -55,32 +55,36 @@ export class AuthService {
|
|
|
55
55
|
private jwtService: JwtService,
|
|
56
56
|
) { }
|
|
57
57
|
|
|
58
|
-
async signInLocal(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
58
|
+
async signInLocal(
|
|
59
|
+
email: string,
|
|
60
|
+
pass: string,
|
|
61
|
+
): Promise<Record<string, unknown>> {
|
|
62
|
+
const [user] = await this.usersService._find(
|
|
63
|
+
{
|
|
64
|
+
email,
|
|
65
|
+
$limit: 1,
|
|
66
|
+
$select: [
|
|
67
|
+
'_id',
|
|
68
|
+
'firstName',
|
|
69
|
+
'lastName',
|
|
70
|
+
'email',
|
|
71
|
+
'password',
|
|
72
|
+
'createdAt',
|
|
73
|
+
'updatedAt',
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{ pagination: false },
|
|
77
|
+
);
|
|
73
78
|
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
75
79
|
if (!user) throw new UnauthorizedException();
|
|
76
80
|
|
|
77
|
-
const passwordValid = await bcrypt.compare(pass, user.password
|
|
81
|
+
const passwordValid = await bcrypt.compare(pass, user.password);
|
|
78
82
|
if (!passwordValid) {
|
|
79
83
|
throw new UnauthorizedException();
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
const sanitizedUser = this.usersService.sanitizeUser(user);
|
|
83
|
-
const payload = { sub: { id: user._id as string }, user };
|
|
87
|
+
const payload = { sub: { id: user._id as unknown as string }, user };
|
|
84
88
|
return {
|
|
85
89
|
accessToken: await this.jwtService.signAsync(payload),
|
|
86
90
|
user: sanitizedUser,
|
|
@@ -159,7 +163,9 @@ export class AuthGuard implements CanActivate {
|
|
|
159
163
|
const payload = await this.jwtService.verifyAsync<{ sub: { id: string } }>(token, {
|
|
160
164
|
secret: jwtConstants.secret,
|
|
161
165
|
});
|
|
162
|
-
|
|
166
|
+
const user = (await this.usersService._get(
|
|
167
|
+
payload.sub.id,
|
|
168
|
+
)) as unknown as Record<string, unknown>;
|
|
163
169
|
if (user) {
|
|
164
170
|
request.user = user;
|
|
165
171
|
this.cls.set('user', user);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.template.js","sourceRoot":"","sources":["../../../../../packages/cli/src/templates/auth.template.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC9C,CAAC;AAxCW,QAAA,iBAAiB,qBAwC5B;AAEK,MAAM,cAAc,GAAG,GAAW,EAAE,CAAC
|
|
1
|
+
{"version":3,"file":"auth.template.js","sourceRoot":"","sources":["../../../../../packages/cli/src/templates/auth.template.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC9C,CAAC;AAxCW,QAAA,iBAAiB,qBAwC5B;AAEK,MAAM,cAAc,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgD3C,CAAC;AAhDW,QAAA,cAAc,kBAgDzB;AAEK,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B1C,CAAC;AA7BW,QAAA,aAAa,iBA6BxB;AAEK,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DzC,CAAC;AA1DW,QAAA,YAAY,gBA0DvB;AAEK,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC;;;CAG/C,CAAC;AAHW,QAAA,kBAAkB,sBAG7B;AAEK,MAAM,eAAe,GAAG,GAAW,EAAE,CAAC;;;;;CAK5C,CAAC;AALW,QAAA,eAAe,mBAK1B"}
|
|
@@ -49,7 +49,7 @@ export class UsersService extends NestService<Users, UsersDocument> {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
sanitizeUser(user: UsersDocument) {
|
|
52
|
-
const sanitized = user.toObject() as Record<string, unknown
|
|
52
|
+
const sanitized = user.toObject() as unknown as Record<string, unknown>
|
|
53
53
|
delete sanitized['password'];
|
|
54
54
|
return sanitized;
|
|
55
55
|
}
|