@anansi/generator-js
Version:
Generate Fast React Web Apps
111 lines • 16.9 kB
JavaScript
import { ConfigureGenerator } from '../app/index.js';
import { resolvePath } from '../utils.js';
export default class AnansiGenerator extends ConfigureGenerator {
initializing() {
super.initializing();
// default until testing is set
this.config.set('testing', false);
}
async prompting() {
const prompts = [{
type: 'checkbox',
name: 'features',
message: 'What features would you like to include? (can be added after generation)\n',
choices: [{
name: 'storybook',
value: 'storybook'
}, {
name: 'testing (Jest)',
value: 'testing'
}, {
name: 'Continuous Integration',
value: 'CI'
}],
default: ['SSR', 'testing', 'CI'],
store: true
}];
if (this.options.projectType === 'SPA') {
prompts[0].choices.unshift({
name: 'Server Side Rendering',
value: 'SSR'
});
prompts[0].default.unshift('SSR');
}
const props = await this.prompt(prompts);
this.config.set('features', props.features);
if (props.features.includes('CI')) {
this.composeWith(await resolvePath('../circle', import.meta.url), this.options);
if (this.options.projectType === 'SPA') {
this.composeWith(await resolvePath('../github-actions', import.meta.url), this.options);
}
}
if (props.features.includes('testing')) {
this.composeWith(await resolvePath('../testing', import.meta.url), this.options);
}
if (this.options.projectType === 'SPA') {
this.composeWith(await resolvePath('../spa', import.meta.url), this.options);
} else {
this.composeWith(await resolvePath('../library', import.meta.url), this.options);
}
if (props.features.includes('storybook')) {
this.composeWith(await resolvePath('../storybook', import.meta.url), this.options);
}
return props;
}
async configuring() {
this.composeWith(await resolvePath('../license', import.meta.url), {
...this.options,
defaultLicense: 'BSD'
});
const repository = `${this.config.get('githubDomain')}/${this.config.get('githubOrg')}/${this.config.get('appName')}`;
const namespace = this.config.get('npmNamespace') ? `${this.config.get('npmNamespace')}/` : '';
const packageSettings = {
name: `${namespace}${this.config.get('appName')}`,
version: '0.0.1',
description: `${this.config.get('appName')} - An Anansi project`,
scripts: {
lint: `eslint ${this.config.get('rootPath')} --quiet`,
format: 'npm run lint --fix',
'test:type': 'tsc'
},
repository: {
type: 'git',
url: `git+ssh://git@${repository}.git`
},
bugs: {
url: `https://${repository}/issues`
},
homepage: `https://${repository}#readme`,
keywords: ['anansi'],
author: this.config.get('author'),
browserslist: ['extends @anansi/browserslist-config'],
prettier: {
printWidth: 80,
semi: true,
singleQuote: true,
arrowParens: 'avoid'
},
stackblitz: {
startCommand: 'yarn start'
}
};
this.packageJson.merge(packageSettings);
this.fs.copyTpl(this.templatePath('**'), this.destinationRoot(), this.config.getAll(), {
globOptions: {
dot: true
}
});
// set .gitignore to proper location
this.fs.move(this.destinationPath('.gitignore.tpl'), this.destinationPath('.gitignore'));
// set .yarnrc.yml to proper location
this.fs.move(this.destinationPath('.yarnrc.yml.tpl'), this.destinationPath('.yarnrc.yml'));
}
async configuringLinterPackages() {
await this.addPeers('@anansi/eslint-plugin', ['typescript', 'babel-plugin-root-import', 'webpack'], 'devDependencies');
await this.addDevDependencies(['@babel/core', '@anansi/babel-preset', '@anansi/eslint-plugin', '@anansi/browserslist-config', 'typescript',
// for eslint
'globals']);
await this.addDependencies(['@babel/runtime-corejs3']);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25maWd1cmVHZW5lcmF0b3IiLCJyZXNvbHZlUGF0aCIsIkFuYW5zaUdlbmVyYXRvciIsImluaXRpYWxpemluZyIsImNvbmZpZyIsInNldCIsInByb21wdGluZyIsInByb21wdHMiLCJ0eXBlIiwibmFtZSIsIm1lc3NhZ2UiLCJjaG9pY2VzIiwidmFsdWUiLCJkZWZhdWx0Iiwic3RvcmUiLCJvcHRpb25zIiwicHJvamVjdFR5cGUiLCJ1bnNoaWZ0IiwicHJvcHMiLCJwcm9tcHQiLCJmZWF0dXJlcyIsImluY2x1ZGVzIiwiY29tcG9zZVdpdGgiLCJpbXBvcnQiLCJtZXRhIiwidXJsIiwiY29uZmlndXJpbmciLCJkZWZhdWx0TGljZW5zZSIsInJlcG9zaXRvcnkiLCJnZXQiLCJuYW1lc3BhY2UiLCJwYWNrYWdlU2V0dGluZ3MiLCJ2ZXJzaW9uIiwiZGVzY3JpcHRpb24iLCJzY3JpcHRzIiwibGludCIsImZvcm1hdCIsImJ1Z3MiLCJob21lcGFnZSIsImtleXdvcmRzIiwiYXV0aG9yIiwiYnJvd3NlcnNsaXN0IiwicHJldHRpZXIiLCJwcmludFdpZHRoIiwic2VtaSIsInNpbmdsZVF1b3RlIiwiYXJyb3dQYXJlbnMiLCJzdGFja2JsaXR6Iiwic3RhcnRDb21tYW5kIiwicGFja2FnZUpzb24iLCJtZXJnZSIsImZzIiwiY29weVRwbCIsInRlbXBsYXRlUGF0aCIsImRlc3RpbmF0aW9uUm9vdCIsImdldEFsbCIsImdsb2JPcHRpb25zIiwiZG90IiwibW92ZSIsImRlc3RpbmF0aW9uUGF0aCIsImNvbmZpZ3VyaW5nTGludGVyUGFja2FnZXMiLCJhZGRQZWVycyIsImFkZERldkRlcGVuZGVuY2llcyIsImFkZERlcGVuZGVuY2llcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyZUdlbmVyYXRvciwgdHlwZSBDb25maWd1cmVPcHRpb25zIH0gZnJvbSAnLi4vYXBwL2luZGV4LmpzJztcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmFuc2lHZW5lcmF0b3IgZXh0ZW5kcyBDb25maWd1cmVHZW5lcmF0b3I8QW5hbnNpT3B0aW9ucz4ge1xuICBpbml0aWFsaXppbmcoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6aW5nKCk7XG4gICAgLy8gZGVmYXVsdCB1bnRpbCB0ZXN0aW5nIGlzIHNldFxuICAgIHRoaXMuY29uZmlnLnNldCgndGVzdGluZycsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHByb21wdGluZygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21wdHM6IGFueVtdID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICBuYW1lOiAnZmVhdHVyZXMnLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdXaGF0IGZlYXR1cmVzIHdvdWxkIHlvdSBsaWtlIHRvIGluY2x1ZGU/IChjYW4gYmUgYWRkZWQgYWZ0ZXIgZ2VuZXJhdGlvbilcXG4nLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnc3Rvcnlib29rJywgdmFsdWU6ICdzdG9yeWJvb2snIH0sXG4gICAgICAgICAgeyBuYW1lOiAndGVzdGluZyAoSmVzdCknLCB2YWx1ZTogJ3Rlc3RpbmcnIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ29udGludW91cyBJbnRlZ3JhdGlvbicsIHZhbHVlOiAnQ0knIH0sXG4gICAgICAgIF0gYXMgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdLFxuICAgICAgICBkZWZhdWx0OiBbJ1NTUicsICd0ZXN0aW5nJywgJ0NJJ10gYXMgc3RyaW5nW10sXG4gICAgICAgIHN0b3JlOiB0cnVlLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJvamVjdFR5cGUgPT09ICdTUEEnKSB7XG4gICAgICBwcm9tcHRzWzBdLmNob2ljZXMudW5zaGlmdCh7XG4gICAgICAgIG5hbWU6ICdTZXJ2ZXIgU2lkZSBSZW5kZXJpbmcnLFxuICAgICAgICB2YWx1ZTogJ1NTUicsXG4gICAgICB9KTtcbiAgICAgIHByb21wdHNbMF0uZGVmYXVsdC51bnNoaWZ0KCdTU1InKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IGF3YWl0IHRoaXMucHJvbXB0KHByb21wdHMpO1xuICAgIHRoaXMuY29uZmlnLnNldCgnZmVhdHVyZXMnLCBwcm9wcy5mZWF0dXJlcyk7XG5cbiAgICBpZiAocHJvcHMuZmVhdHVyZXMuaW5jbHVkZXMoJ0NJJykpIHtcbiAgICAgIHRoaXMuY29tcG9zZVdpdGgoXG4gICAgICAgIGF3YWl0IHJlc29sdmVQYXRoKCcuLi9jaXJjbGUnLCBpbXBvcnQubWV0YS51cmwpLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcm9qZWN0VHlwZSA9PT0gJ1NQQScpIHtcbiAgICAgICAgdGhpcy5jb21wb3NlV2l0aChcbiAgICAgICAgICBhd2FpdCByZXNvbHZlUGF0aCgnLi4vZ2l0aHViLWFjdGlvbnMnLCBpbXBvcnQubWV0YS51cmwpLFxuICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzLmluY2x1ZGVzKCd0ZXN0aW5nJykpIHtcbiAgICAgIHRoaXMuY29tcG9zZVdpdGgoXG4gICAgICAgIGF3YWl0IHJlc29sdmVQYXRoKCcuLi90ZXN0aW5nJywgaW1wb3J0Lm1ldGEudXJsKSxcbiAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm9qZWN0VHlwZSA9PT0gJ1NQQScpIHtcbiAgICAgIHRoaXMuY29tcG9zZVdpdGgoXG4gICAgICAgIGF3YWl0IHJlc29sdmVQYXRoKCcuLi9zcGEnLCBpbXBvcnQubWV0YS51cmwpLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbXBvc2VXaXRoKFxuICAgICAgICBhd2FpdCByZXNvbHZlUGF0aCgnLi4vbGlicmFyeScsIGltcG9ydC5tZXRhLnVybCksXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcy5pbmNsdWRlcygnc3Rvcnlib29rJykpIHtcbiAgICAgIHRoaXMuY29tcG9zZVdpdGgoXG4gICAgICAgIGF3YWl0IHJlc29sdmVQYXRoKCcuLi9zdG9yeWJvb2snLCBpbXBvcnQubWV0YS51cmwpLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmluZygpIHtcbiAgICB0aGlzLmNvbXBvc2VXaXRoKGF3YWl0IHJlc29sdmVQYXRoKCcuLi9saWNlbnNlJywgaW1wb3J0Lm1ldGEudXJsKSwge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgZGVmYXVsdExpY2Vuc2U6ICdCU0QnLFxuICAgIH0gYXMgYW55KTtcblxuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBgJHt0aGlzLmNvbmZpZy5nZXQoJ2dpdGh1YkRvbWFpbicpfS8ke3RoaXMuY29uZmlnLmdldChcbiAgICAgICdnaXRodWJPcmcnLFxuICAgICl9LyR7dGhpcy5jb25maWcuZ2V0KCdhcHBOYW1lJyl9YDtcbiAgICBjb25zdCBuYW1lc3BhY2UgPVxuICAgICAgdGhpcy5jb25maWcuZ2V0KCducG1OYW1lc3BhY2UnKSA/XG4gICAgICAgIGAke3RoaXMuY29uZmlnLmdldCgnbnBtTmFtZXNwYWNlJyl9L2BcbiAgICAgIDogJyc7XG4gICAgY29uc3QgcGFja2FnZVNldHRpbmdzID0ge1xuICAgICAgbmFtZTogYCR7bmFtZXNwYWNlfSR7dGhpcy5jb25maWcuZ2V0KCdhcHBOYW1lJyl9YCxcbiAgICAgIHZlcnNpb246ICcwLjAuMScsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7dGhpcy5jb25maWcuZ2V0KCdhcHBOYW1lJyl9IC0gQW4gQW5hbnNpIHByb2plY3RgLFxuICAgICAgc2NyaXB0czoge1xuICAgICAgICBsaW50OiBgZXNsaW50ICR7dGhpcy5jb25maWcuZ2V0KCdyb290UGF0aCcpfSAtLXF1aWV0YCxcbiAgICAgICAgZm9ybWF0OiAnbnBtIHJ1biBsaW50IC0tZml4JyxcbiAgICAgICAgJ3Rlc3Q6dHlwZSc6ICd0c2MnLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnk6IHtcbiAgICAgICAgdHlwZTogJ2dpdCcsXG4gICAgICAgIHVybDogYGdpdCtzc2g6Ly9naXRAJHtyZXBvc2l0b3J5fS5naXRgLFxuICAgICAgfSxcbiAgICAgIGJ1Z3M6IHtcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly8ke3JlcG9zaXRvcnl9L2lzc3Vlc2AsXG4gICAgICB9LFxuICAgICAgaG9tZXBhZ2U6IGBodHRwczovLyR7cmVwb3NpdG9yeX0jcmVhZG1lYCxcbiAgICAgIGtleXdvcmRzOiBbJ2FuYW5zaSddLFxuICAgICAgYXV0aG9yOiB0aGlzLmNvbmZpZy5nZXQoJ2F1dGhvcicpIGFzIHN0cmluZyxcbiAgICAgIGJyb3dzZXJzbGlzdDogWydleHRlbmRzIEBhbmFuc2kvYnJvd3NlcnNsaXN0LWNvbmZpZyddLFxuICAgICAgcHJldHRpZXI6IHtcbiAgICAgICAgcHJpbnRXaWR0aDogODAsXG4gICAgICAgIHNlbWk6IHRydWUsXG4gICAgICAgIHNpbmdsZVF1b3RlOiB0cnVlLFxuICAgICAgICBhcnJvd1BhcmVuczogJ2F2b2lkJyxcbiAgICAgIH0sXG4gICAgICBzdGFja2JsaXR6OiB7IHN0YXJ0Q29tbWFuZDogJ3lhcm4gc3RhcnQnIH0sXG4gICAgfTtcbiAgICB0aGlzLnBhY2thZ2VKc29uLm1lcmdlKHBhY2thZ2VTZXR0aW5ncyk7XG5cbiAgICB0aGlzLmZzLmNvcHlUcGwoXG4gICAgICB0aGlzLnRlbXBsYXRlUGF0aCgnKionKSxcbiAgICAgIHRoaXMuZGVzdGluYXRpb25Sb290KCksXG4gICAgICB0aGlzLmNvbmZpZy5nZXRBbGwoKSxcbiAgICAgIHsgZ2xvYk9wdGlvbnM6IHsgZG90OiB0cnVlIH0gfSxcbiAgICApO1xuICAgIC8vIHNldCAuZ2l0aWdub3JlIHRvIHByb3BlciBsb2NhdGlvblxuICAgIHRoaXMuZnMubW92ZShcbiAgICAgIHRoaXMuZGVzdGluYXRpb25QYXRoKCcuZ2l0aWdub3JlLnRwbCcpLFxuICAgICAgdGhpcy5kZXN0aW5hdGlvblBhdGgoJy5naXRpZ25vcmUnKSxcbiAgICApO1xuICAgIC8vIHNldCAueWFybnJjLnltbCB0byBwcm9wZXIgbG9jYXRpb25cbiAgICB0aGlzLmZzLm1vdmUoXG4gICAgICB0aGlzLmRlc3RpbmF0aW9uUGF0aCgnLnlhcm5yYy55bWwudHBsJyksXG4gICAgICB0aGlzLmRlc3RpbmF0aW9uUGF0aCgnLnlhcm5yYy55bWwnKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJpbmdMaW50ZXJQYWNrYWdlcygpIHtcbiAgICBhd2FpdCB0aGlzLmFkZFBlZXJzKFxuICAgICAgJ0BhbmFuc2kvZXNsaW50LXBsdWdpbicsXG4gICAgICBbJ3R5cGVzY3JpcHQnLCAnYmFiZWwtcGx1Z2luLXJvb3QtaW1wb3J0JywgJ3dlYnBhY2snXSxcbiAgICAgICdkZXZEZXBlbmRlbmNpZXMnIGFzIGNvbnN0LFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldkRlcGVuZGVuY2llcyhbXG4gICAgICAnQGJhYmVsL2NvcmUnLFxuICAgICAgJ0BhbmFuc2kvYmFiZWwtcHJlc2V0JyxcbiAgICAgICdAYW5hbnNpL2VzbGludC1wbHVnaW4nLFxuICAgICAgJ0BhbmFuc2kvYnJvd3NlcnNsaXN0LWNvbmZpZycsXG4gICAgICAndHlwZXNjcmlwdCcsXG4gICAgICAvLyBmb3IgZXNsaW50XG4gICAgICAnZ2xvYmFscycsXG4gICAgXSk7XG4gICAgYXdhaXQgdGhpcy5hZGREZXBlbmRlbmNpZXMoWydAYmFiZWwvcnVudGltZS1jb3JlanMzJ10pO1xuICB9XG59XG50eXBlIEFuYW5zaU9wdGlvbnMgPSBDb25maWd1cmVPcHRpb25zICYgeyBwcm9qZWN0VHlwZTogc3RyaW5nIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGtCQUFrQixRQUErQixpQkFBaUI7QUFDM0UsU0FBU0MsV0FBVyxRQUFRLGFBQWE7QUFFekMsZUFBZSxNQUFNQyxlQUFlLFNBQVNGLGtCQUFrQixDQUFnQjtFQUM3RUcsWUFBWUEsQ0FBQSxFQUFHO0lBQ2IsS0FBSyxDQUFDQSxZQUFZLENBQUMsQ0FBQztJQUNwQjtJQUNBLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztFQUNuQztFQUVBLE1BQU1DLFNBQVNBLENBQUEsRUFBaUI7SUFDOUIsTUFBTUMsT0FBYyxHQUFHLENBQ3JCO01BQ0VDLElBQUksRUFBRSxVQUFVO01BQ2hCQyxJQUFJLEVBQUUsVUFBVTtNQUNoQkMsT0FBTyxFQUNMLDRFQUE0RTtNQUM5RUMsT0FBTyxFQUFFLENBQ1A7UUFBRUYsSUFBSSxFQUFFLFdBQVc7UUFBRUcsS0FBSyxFQUFFO01BQVksQ0FBQyxFQUN6QztRQUFFSCxJQUFJLEVBQUUsZ0JBQWdCO1FBQUVHLEtBQUssRUFBRTtNQUFVLENBQUMsRUFDNUM7UUFBRUgsSUFBSSxFQUFFLHdCQUF3QjtRQUFFRyxLQUFLLEVBQUU7TUFBSyxDQUFDLENBQ1g7TUFDdENDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFhO01BQzdDQyxLQUFLLEVBQUU7SUFDVCxDQUFDLENBQ0Y7SUFDRCxJQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxXQUFXLEtBQUssS0FBSyxFQUFFO01BQ3RDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNJLE9BQU8sQ0FBQ00sT0FBTyxDQUFDO1FBQ3pCUixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCRyxLQUFLLEVBQUU7TUFDVCxDQUFDLENB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