Skip to content
This repository was archived by the owner on Nov 21, 2024. It is now read-only.

Commit f783954

Browse files
committed
feat(generators): Add generator for create empty NestJS backend application
1 parent fda37ba commit f783954

4 files changed

Lines changed: 135 additions & 12 deletions

File tree

README.md

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@rucken/cli
22
===========
33

4-
Console tools for create and build Angular6+ application based on [rucken](https://github.com/rucken) template
4+
Console tools for create and build [Angular6+](https://angular.io/) and [NestJS](https://nestjs.com/) application based on [Rucken](https://github.com/rucken) template
55

66
[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)
77
[![Greenkeeper badge](https://badges.greenkeeper.io/rucken/cli.svg)](https://greenkeeper.io/)
@@ -14,17 +14,10 @@ Console tools for create and build Angular6+ application based on [rucken](https
1414
[![Gitter][gitter-image]][gitter-url]
1515
[![Join the chat at telegram][telegram-image]][telegram-url]
1616

17-
* [What is Rucken?](#what-is-rucken)
1817
* [Install](#install)
1918
* [Generators](#generators)
2019
* [Commands](#commands)
2120

22-
# What is Rucken?
23-
<!-- what-is-rucken -->
24-
- **Core** - Base entities and services for create applications on `Angular6+`, include work with users, groups and permissions.
25-
- **Web** - Base ui grids and inputs and etc. for manage users, groups and permissions.
26-
<!-- what-is-ruckenstop -->
27-
2821
# Install
2922
<!-- install -->
3023
```sh-session
@@ -34,6 +27,7 @@ $ npm install -g @rucken/cli
3427
# Generators
3528
<!-- generators -->
3629
* [`rucken new:angular [FOLDER]`](#rucken-new-angular-folder)
30+
* [`rucken new:nestjs [FOLDER]`](#rucken-new-nestjs-folder)
3731
* [`rucken entity:angular [FOLDER]`](#rucken-entity-angular-folder)
3832
* [`rucken entity:nestjs [FOLDER]`](#rucken-entity-nestjs-folder)
3933

@@ -52,7 +46,24 @@ OPTIONS
5246
-u, --username=username username
5347
```
5448

55-
_See code: [src\commands\new.ts](https://github.com/rucken/cli/blob/develop/src/commands/angular-new.ts)_
49+
_See code: [src\commands\angular-new.ts](https://github.com/rucken/cli/blob/develop/src/commands/angular-new.ts)_
50+
51+
## `rucken new:nestjs [FOLDER]`
52+
53+
generate dto, entity, service and controller for NestJS backend
54+
55+
```
56+
USAGE
57+
$ rucken new:nestjs [FOLDER]
58+
59+
OPTIONS
60+
-e, --email=email email
61+
-h, --help show CLI help
62+
-n, --name=name (required) application name on ke-bab case
63+
-u, --username=username username
64+
```
65+
66+
_See code: [src\commands\nestjs-new.ts](https://github.com/rucken/cli/blob/develop/src/commands/nestjs-new.ts)_
5667

5768
## `rucken entity:angular [FOLDER]`
5869

@@ -73,7 +84,7 @@ OPTIONS
7384
-w, --web=web web library name in angular.json
7485
```
7586

76-
_See code: [src\commands\entity.ts](https://github.com/rucken/cli/blob/develop/src/commands/angular-entity.ts)_
87+
_See code: [src\commands\angular-entity.ts](https://github.com/rucken/cli/blob/develop/src/commands/angular-entity.ts)_
7788

7889
## `rucken entity:nestjs [FOLDER]`
7990

@@ -93,7 +104,7 @@ OPTIONS
93104
-u, --username=username username
94105
```
95106

96-
_See code: [src\commands\entity.ts](https://github.com/rucken/cli/blob/develop/src/commands/angular-entity.ts)_
107+
_See code: [src\commands\nestjs-entity.ts](https://github.com/rucken/cli/blob/develop/src/commands/nestjs-entity.ts)_
97108

98109
<!-- generatorsstop -->
99110

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@
9898
"run-config": "node ./bin/run config test/fixtures/config/dev -m dev",
9999
"run-prepare": "node ./bin/run prepare test/fixtures/prepare -m dev",
100100
"run-new:angular": "node ./bin/run new test/fixtures/angular-new -n demo -u demo -e demo@demo.demo",
101-
"run-entity:angular": "node ./bin/run entity test/fixtures/angular-entity -n demo -u demo -e demo@demo.demo -f [name,title]"
101+
"run-entity:angular": "node ./bin/run entity test/fixtures/angular-entity -n demo -u demo -e demo@demo.demo -f [name,title]",
102+
"run-new:nestjs": "node ./bin/run new test/fixtures/nestjs-new -n demo -u demo -e demo@demo.demo",
103+
"run-entity:nestjs": "node ./bin/run entity test/fixtures/nestjs-entity -n demo -u demo -e demo@demo.demo -f [name,title]"
102104
},
103105
"greenkeeper": {
104106
"ignore": [

src/commands/nestjs-new.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { flags, Command } from '@oclif/command';
2+
import { sep } from 'path';
3+
const npmRun = require('npm-run');
4+
5+
export class NestJSNew extends Command {
6+
static aliases = ['new:nestjs', 'nestjs-new'];
7+
static description = 'generate empty NestJS backend application';
8+
static flags = {
9+
help: flags.help({ char: 'h' }),
10+
name: flags.string({ char: 'n', description: 'application name on ke-bab case', required: true }),
11+
username: flags.string({ char: 'u', description: 'username' }),
12+
email: flags.string({ char: 'e', description: 'email' })
13+
};
14+
static args = [{ name: 'folder' }];
15+
async run() {
16+
const { args, flags } = this.parse(NestJSNew);
17+
const folder = args.folder;
18+
const name = flags.name;
19+
const username = flags.username;
20+
const email = flags.email;
21+
22+
try {
23+
await this.runNew(
24+
folder,
25+
name,
26+
username,
27+
email
28+
);
29+
} catch (error) {
30+
console.error(error);
31+
}
32+
}
33+
private runNew(
34+
folder: string,
35+
name: string,
36+
username?: string,
37+
email?: string
38+
) {
39+
this.debug('Start', {
40+
folder: folder,
41+
name: name,
42+
username: username,
43+
email: email
44+
});
45+
return new Promise((resolve, reject) => {
46+
const inputFolder = folder ? folder.replace(new RegExp('\\' + sep, 'g'), '/').split(sep).join('/') : undefined;
47+
const command =
48+
'schematics @rucken/schematics:nestjs-new ' +
49+
(inputFolder ? ('--root=' + inputFolder + ' ') : ' ') +
50+
(name ? ('--name=' + name + ' ') : ' ') +
51+
(username ? ('--username=' + username + ' ') : ' ') +
52+
(email ? ('--email=' + email + ' ') : ' ') +
53+
'--dry-run=false --force';
54+
this.debug('command', command);
55+
npmRun.exec(
56+
command,
57+
{},
58+
(err: any, stdout: any, stderr: any) => {
59+
this.debug('err', err);
60+
this.debug('stdout', stdout);
61+
this.debug('stderr', stderr);
62+
if (err) {
63+
this.debug('End', err);
64+
reject(err);
65+
} else {
66+
this.debug('End', true);
67+
resolve();
68+
}
69+
}
70+
);
71+
});
72+
}
73+
}

test/commands/nestjs-new.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { expect, test } from '@oclif/test';
2+
import { readFileSync } from 'fs';
3+
import { resolve } from 'path';
4+
const rimraf = require('rimraf');
5+
6+
describe('new:nestjs', () => {
7+
beforeEach(done =>
8+
rimraf(resolve('test/fixtures/nestjs-new'), {}, () =>
9+
setTimeout(
10+
() =>
11+
done(), 1000
12+
)
13+
)
14+
);
15+
afterEach(done =>
16+
rimraf(resolve('test/fixtures/nestjs-new'), {}, () =>
17+
setTimeout(
18+
() =>
19+
done(), 1000
20+
)
21+
)
22+
);
23+
test
24+
.command(['new:nestjs', 'test/fixtures/nestjs-new', '-n', 'demo', '-u', 'demo', '-e', 'demo@demo.demo'])
25+
.it('run new generator', _ctx => {
26+
let nestjsConfig;
27+
try {
28+
nestjsConfig = JSON.parse(readFileSync(
29+
'test/fixtures/nestjs-new/.nestcli.json'
30+
).toString());
31+
} catch (error) {
32+
nestjsConfig = {};
33+
console.error(error);
34+
}
35+
expect(nestjsConfig.projects.demo.root).to.equals('src/apps/demo/');
36+
});
37+
});

0 commit comments

Comments
 (0)