-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.ts
74 lines (73 loc) · 3.29 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// tslint:disable-next-line:no-var-requires
require('module-alias/register');
import { Command } from 'commander';
import chalk from 'chalk';
import { version } from './package.json';
import {
generateFolder,
generatePackageJson,
generateDockerCompose,
generateTsConfigJson,
generateServerPackageJson,
generateServerIndex,
generateEslintConfig,
generatePrettierConfig,
generateGlobalSetupJest,
generateGlobalTeardownJest,
generateDockerIgnore,
generateGitIgnore,
installServerPackages,
executeCreateReactApp,
generateNginxConfigFile,
generateDockerfile,
} from '@app/functions';
import inquirer from 'inquirer';
import { spinnies } from '@app/utis';
const program = new Command();
program.version(version);
console.log(`\nWelcome to ${chalk.magenta('create-nrd-app')}\n`);
program
.arguments('<projectName>')
.option('-n, --useNpm', 'Use npm to install dependencies')
.action(async (projectName: string, { useNpm }: { useNpm: boolean }) => {
console.log(`Starting ${chalk.cyan('create-nrd-app')}...`);
console.log(`Resolving ${chalk.cyan('server')}...`);
await generateFolder(projectName);
await generateFolder(`${projectName}/server`);
await generateFolder(`${projectName}/server/src`);
await generatePackageJson(projectName);
const { dockerComposeFilesInJson }: { dockerComposeFilesInJson: boolean } = await inquirer.prompt({
type: 'list',
message: 'Choose file type for docker-compose:',
name: 'dockerComposeFilesInJson',
choices: [
{ name: 'JSON', value: true },
{ name: 'YML', value: false },
],
});
await generateDockerCompose(projectName, 'production', dockerComposeFilesInJson);
await generateDockerCompose(projectName, 'development', dockerComposeFilesInJson);
await generateTsConfigJson(projectName);
await generateServerPackageJson(projectName);
spinnies.add('create-server-package-json', { text: 'Creating server/package.json' });
spinnies.succeed('create-server-package-json', { text: 'server/package.json created!' });
await generateServerIndex(projectName);
await generateEslintConfig(projectName);
await generatePrettierConfig(projectName);
await generateGlobalSetupJest(projectName);
await generateGlobalTeardownJest(projectName);
await generateDockerIgnore(`${projectName}/server/.dockerignore`);
await generateGitIgnore(`${projectName}/server/.gitignore`);
await generateDockerfile(projectName, 'production', 'server');
await generateDockerfile(projectName, 'development', 'server');
await installServerPackages(projectName, useNpm);
console.log(`Resolving ${chalk.cyan('client')}...`);
await executeCreateReactApp(projectName, useNpm);
await generateFolder(`${projectName}/client/conf`);
await generateFolder(`${projectName}/client/conf/conf.d`);
await generateNginxConfigFile(projectName);
await generateDockerIgnore(`${projectName}/client/.dockerignore`);
await generateDockerfile(projectName, 'production', 'client');
await generateDockerfile(projectName, 'development', 'client');
});
program.parse(process.argv);