Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 7x 7x 7x 7x 7x 7x 7x 7x 7x 16x 16x 16x 80x 16x 16x 3x 3x 16x 1x 16x 4x 4x 16x 16x 16x 16x | import path from 'path';
import Generator, { Answers } from 'yeoman-generator';
import { Features } from '../lib/enums/features';
import { Filenames } from '../lib/enums/filenames';
import { Messages } from '../lib/enums/messages';
import { Names } from '../lib/enums/names';
import { withFeature, validatePackageJsonName } from '../lib/helpers';
import rootPkg from '../lib/helpers/package';
export default class extends Generator {
answers!: Answers;
async prompting(): Promise<void> {
this.answers = await this.prompt([
{
type: 'input',
name: Names.PROJECT_NAME,
message: Messages.PROJECT_NAME,
validate: validatePackageJsonName,
default: Names.PROJECT_NAME,
},
{
type: 'input',
name: Names.AUTHOR,
message: Messages.AUTHOR,
default: Names.AUTHOR,
},
{
type: 'checkbox',
name: Names.FEATURES,
message: Messages.FEATURES,
default: [],
choices: [
{
name: Features.ESLINT,
value: Features.ESLINT,
},
{
name: Features.PRETTIER,
value: Features.PRETTIER,
},
{
name: Features.JEST,
value: Features.JEST,
},
],
},
]);
}
writing(): void {
this.destinationRoot(path.join(this.destinationRoot(), '/', this.answers[Names.PROJECT_NAME]));
[
Filenames.TS_CONFIG,
Filenames.NODEMON_CONFIG,
Filenames.GIT_IGNORE,
Filenames.SRC_FOLDER,
Filenames.README,
].forEach((fileName: Filenames) => {
this.fs.copy(
this.templatePath(fileName),
fileName === Filenames.GIT_IGNORE ? this.destinationPath(`.${fileName}`) : this.destinationPath(fileName),
);
});
this.fs.writeJSON(this.destinationPath(Filenames.PACKAGE_JSON), {
name: this.answers.projectname,
version: '0.1.0',
description: 'A node starter',
main: 'index.js',
scripts: {
build: 'rimraf ./build && tsc',
start: 'npm run build && node build/index.js',
'start:dev': 'nodemon',
},
author: this.answers.author,
devDependencies: {
'@types/node': rootPkg.devDependencies['@types/node'],
nodemon: rootPkg.devDependencies.nodemon,
rimraf: rootPkg.devDependencies.rimraf,
'ts-node': rootPkg.devDependencies['ts-node'],
typescript: rootPkg.devDependencies.typescript,
},
});
if (withFeature(this.answers, Features.JEST)) {
this.composeWith(require.resolve('../jest'));
this.composeWith(require.resolve('../sonarqube'));
}
if (withFeature(this.answers, Features.PRETTIER)) {
this.composeWith(require.resolve('../prettier'));
}
if (withFeature(this.answers, Features.ESLINT)) {
this.composeWith(require.resolve('../eslint'));
this.composeWith(require.resolve('../lintstaged'), {
withPrettier: withFeature(this.answers, Features.PRETTIER),
});
}
this.composeWith(require.resolve('../changelog'));
this.composeWith(require.resolve('../license'), {
license: this.answers.license,
});
}
install(): void {
this.spawnCommandSync('git', ['init', '--quiet']);
this.npmInstall();
}
}
|