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

Commit ffa90ee

Browse files
committed
feat(generators): Add generator "New" for create new application on rucken template
1 parent f33527c commit ffa90ee

2 files changed

Lines changed: 109 additions & 0 deletions

File tree

src/commands/new.ts

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

test/commands/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', () => {
7+
beforeEach(done =>
8+
rimraf(resolve('test/fixtures/new'), {}, () =>
9+
setTimeout(
10+
() =>
11+
done(), 1000
12+
)
13+
)
14+
);
15+
afterEach(done =>
16+
rimraf(resolve('test/fixtures/new'), {}, () =>
17+
setTimeout(
18+
() =>
19+
done(), 1000
20+
)
21+
)
22+
);
23+
test
24+
.command(['new', 'test/fixtures/new', '-n', 'demo', '-u', 'demo', '-e', 'demo@demo.demo'])
25+
.it('run new generator', _ctx => {
26+
let angularConfig;
27+
try {
28+
angularConfig = JSON.parse(readFileSync(
29+
'test/fixtures/new/angular.json'
30+
).toString());
31+
} catch (error) {
32+
angularConfig = {};
33+
console.error(error);
34+
}
35+
expect(angularConfig.projects.demo.architect.build.builder).to.equals('@angular-devkit/build-angular:browser');
36+
});
37+
});

0 commit comments

Comments
 (0)