UNPKG

generator-esnext-generator

Version:

A Yeoman generator generating a Yeoman generator using what's next in JavaScript.

201 lines (152 loc) 7.33 kB
'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _yeomanGenerator = require('yeoman-generator'); var _inquirerNpmName = require('inquirer-npm-name'); var _inquirerNpmName2 = _interopRequireDefault(_inquirerNpmName); var _yosay = require('yosay'); var _yosay2 = _interopRequireDefault(_yosay); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _process = require('process'); var _process2 = _interopRequireDefault(_process); var _package = require('../../package.json'); var _package2 = _interopRequireDefault(_package); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function makeGeneratorName(name) { name = _lodash2.default.kebabCase(name); return name.indexOf('generator-') === 0 ? name : 'generator-' + name; } var requiredScripts = ['clean', 'check', 'copy', 'build:lib', 'build', 'preversion', 'version', 'postversion', 'prepublish']; module.exports = function (_BaseGenerator) { _inherits(ESNextGeneratorGenerator, _BaseGenerator); function ESNextGeneratorGenerator() { _classCallCheck(this, ESNextGeneratorGenerator); return _possibleConstructorReturn(this, Object.getPrototypeOf(ESNextGeneratorGenerator).apply(this, arguments)); } _createClass(ESNextGeneratorGenerator, [{ key: 'initializing', value: function initializing() { this.props = {}; } }, { key: 'prompting', value: function prompting() { var _this2 = this; var done = this.async(); if (!this.options.skipWelcomeMessage) { this.log((0, _yosay2.default)('Welcome to the ' + _chalk2.default.red('esnext-generator') + ' generator!')); } (0, _inquirerNpmName2.default)({ name: 'name', message: 'Your generator name', filter: makeGeneratorName, default: makeGeneratorName(_path2.default.basename(_process2.default.cwd())), validate: function validate(str) { return str.length > 0; } }, this, function (name) { _this2.props.name = name; done(); }); } }, { key: 'default', value: function _default() { var name = this.props.name; var readmeTemplate = _lodash2.default.template(this.fs.read(this.templatePath('README.md'))); var skipInstall = this.options.skipInstall; var skipWelcomeMessage = true; var projectOptions = { name: name, eslint: false, editorconfig: true, travis: true, coveralls: false, skipInstall: skipInstall, skipWelcomeMessage: skipWelcomeMessage, readme: readmeTemplate({ generatorName: name, yoName: name.replace('generator-', '') }) }; var babelOptions = { skipInstall: skipInstall, config: { presets: ['es2015', 'stage-0'], sourceMaps: true } }; var eslintOptions = { skipInstall: skipInstall, skipWelcomeMessage: skipWelcomeMessage, extends: 'eslint:recommended', plugins: [], envs: ['es6', 'node'], babel: true, testDir: 'test', testFramework: 'mocha', ignore: ['generators'], disableRules: [] }; var testOptions = { skipInstall: skipInstall, skipWelcomeMessage: skipWelcomeMessage, testDir: 'test', coverage: false, helper: true }; this.composeWith('esnext-project:app', { options: projectOptions }, { local: require.resolve('generator-esnext-project/generators/app') }); this.composeWith('babel:app', { options: babelOptions }, { local: require.resolve('generator-babel/generators/app') }); this.composeWith('eslint-config:app', { options: eslintOptions }, { local: require.resolve('generator-eslint-config/generators/app') }); this.composeWith('esnext-test:app', { options: testOptions }, { local: require.resolve('generator-esnext-test/generators/app') }); this.composeWith('generator:subgenerator', { arguments: ['app'], options: { generatorName: name } }, { local: require.resolve('../subgenerator') }); } }, { key: 'writing', value: function writing() { var pkg = this.fs.readJSON(this.destinationPath('package.json'), {}); pkg.scripts = pkg.scripts || {}; requiredScripts.forEach(function (script) { pkg.scripts[script] = pkg.scripts[script] || _package2.default.scripts[script]; }); pkg.main = 'generators/app/index.js'; pkg['jsnext:main'] = 'src/app/index.js'; pkg.files = pkg.files || []; ['src', 'generators'].forEach(function (dir) { if (pkg.files.indexOf(dir) < 0) { pkg.files.push(dir); } }); pkg.keywords = pkg.keywords || []; ['yeoman', 'yeoman-generator'].forEach(function (keyword) { if (pkg.keywords.indexOf(keyword) < 0) { pkg.keywords.push(keyword); } }); this.fs.writeJSON(this.destinationPath('package.json'), pkg); var gitignoreContent = this.fs.read('.gitignore', { defaults: '' }); this.fs.write(this.destinationPath('.gitignore'), gitignoreContent.replace(/(\s*)$/, function (match) { return '\ngenerators' + match; })); } }, { key: 'install', value: function install() { if (this.options.skipInstall) { return; } var dependencies = ['yeoman-generator', 'chalk', 'yosay']; var devDependencies = ['yeoman-assert', 'yeoman-test', 'copyfiles', 'rimraf']; this.npmInstall(devDependencies, { saveDev: true }); this.npmInstall(dependencies, { save: true }); } }]); return ESNextGeneratorGenerator; }(_yeomanGenerator.Base);