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(); } } |