From 640bdc558f498275681bc57666e1f995b8e5bc2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20K=C3=BChnel?= Date: Fri, 9 Dec 2016 20:07:16 +0100 Subject: [PATCH] Adapt changes of yeoman generator 1.0.0 (#170) --- .eslintrc => .eslintrc.json | 3 +- .travis.yml | 4 +- app/index.js | 84 ++++++++++++++++----------------- gulpfile.js | 36 +++++++------- package.json | 37 +++++++-------- subgenerator/index.js | 36 +++++++------- subgenerator/templates/index.js | 4 +- subgenerator/templates/test.js | 4 +- test/app.js | 43 +++++++++-------- test/subgenerator.js | 30 ++++++------ 10 files changed, 139 insertions(+), 142 deletions(-) rename .eslintrc => .eslintrc.json (98%) diff --git a/.eslintrc b/.eslintrc.json similarity index 98% rename from .eslintrc rename to .eslintrc.json index 70bb81c3..6cf3d14b 100644 --- a/.eslintrc +++ b/.eslintrc.json @@ -2,7 +2,8 @@ "extends": "eslint:recommended", "env": { "node": true, - "mocha": true + "mocha": true, + "es6": true }, "rules": { "array-bracket-spacing": [ diff --git a/.travis.yml b/.travis.yml index abcad3de..33c6d1e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ sudo: false language: node_js node_js: - - stable - - 5 + - node + - 6 - 4 diff --git a/app/index.js b/app/index.js index 8b885ade..a3dd6ebb 100644 --- a/app/index.js +++ b/app/index.js @@ -1,10 +1,10 @@ 'use strict'; -var path = require('path'); -var generators = require('yeoman-generator'); -var askName = require('inquirer-npm-name'); -var _ = require('lodash'); -var extend = require('deep-extend'); -var mkdirp = require('mkdirp'); +const path = require('path'); +const Generator = require('yeoman-generator'); +const askName = require('inquirer-npm-name'); +const _ = require('lodash'); +const extend = require('deep-extend'); +const mkdirp = require('mkdirp'); function makeGeneratorName(name) { name = _.kebabCase(name); @@ -12,26 +12,26 @@ function makeGeneratorName(name) { return name; } -module.exports = generators.Base.extend({ - initializing: function () { +module.exports = class extends Generator { + initializing() { this.props = {}; - }, + } - prompting: function () { + prompting() { return askName({ name: 'name', message: 'Your generator name', default: makeGeneratorName(path.basename(process.cwd())), filter: makeGeneratorName, - validate: function (str) { + validate: str => { return str.length > 'generator-'.length; } - }, this).then(function (props) { + }, this).then(props => { this.props.name = props.name; - }.bind(this)); - }, + }); + } - default: function () { + default() { if (path.basename(this.destinationPath()) !== this.props.name) { this.log( 'Your generator must be inside a folder named ' + this.props.name + '\n' + @@ -41,51 +41,47 @@ module.exports = generators.Base.extend({ this.destinationRoot(this.destinationPath(this.props.name)); } - var readmeTpl = _.template(this.fs.read(this.templatePath('README.md'))); + const readmeTpl = _.template(this.fs.read(this.templatePath('README.md'))); - this.composeWith('node:app', { - options: { - babel: false, - boilerplate: false, - name: this.props.name, - projectRoot: 'generators', - skipInstall: this.options.skipInstall, - readme: readmeTpl({ - generatorName: this.props.name, - yoName: this.props.name.replace('generator-', '') - }) - } - }, { - local: require('generator-node').app + this.composeWith(require.resolve('generator-node/generators/app'), { + babel: false, + boilerplate: false, + name: this.props.name, + projectRoot: 'generators', + skipInstall: this.options.skipInstall, + readme: readmeTpl({ + generatorName: this.props.name, + yoName: this.props.name.replace('generator-', '') + }) }); - this.composeWith('generator:subgenerator', { + this.composeWith(require.resolve('../subgenerator'), { arguments: ['app'] - }, { - local: require.resolve('../subgenerator') }); - }, + } + + writing() { + const pkg = this.fs.readJSON(this.destinationPath('package.json'), {}); + const generatorGeneratorPkg = require('../package.json'); - writing: function () { - var pkg = this.fs.readJSON(this.destinationPath('package.json'), {}); extend(pkg, { dependencies: { - 'yeoman-generator': '^0.23.0', - chalk: '^1.0.0', - yosay: '^1.0.0' + 'yeoman-generator': generatorGeneratorPkg.dependencies['yeoman-generator'], + chalk: generatorGeneratorPkg.dependencies.chalk, + yosay: generatorGeneratorPkg.dependencies.yosay }, devDependencies: { - 'yeoman-test': '^1.0.0', - 'yeoman-assert': '^2.0.0' + 'yeoman-test': generatorGeneratorPkg.devDependencies['yeoman-test'], + 'yeoman-assert': generatorGeneratorPkg.devDependencies['yeoman-assert'] } }); pkg.keywords = pkg.keywords || []; pkg.keywords.push('yeoman-generator'); this.fs.writeJSON(this.destinationPath('package.json'), pkg); - }, + } - install: function () { + install() { this.installDependencies({bower: false}); } -}); +}; diff --git a/gulpfile.js b/gulpfile.js index 2187a409..7bc3e7f6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,15 +1,15 @@ 'use strict'; -var path = require('path'); -var gulp = require('gulp'); -var eslint = require('gulp-eslint'); -var excludeGitignore = require('gulp-exclude-gitignore'); -var mocha = require('gulp-mocha'); -var istanbul = require('gulp-istanbul'); -var nsp = require('gulp-nsp'); -var plumber = require('gulp-plumber'); -var coveralls = require('gulp-coveralls'); - -gulp.task('static', function () { +const path = require('path'); +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const excludeGitignore = require('gulp-exclude-gitignore'); +const mocha = require('gulp-mocha'); +const istanbul = require('gulp-istanbul'); +const nsp = require('gulp-nsp'); +const plumber = require('gulp-plumber'); +const coveralls = require('gulp-coveralls'); + +gulp.task('static', () => { return gulp.src('**/*.js') .pipe(excludeGitignore()) .pipe(eslint()) @@ -17,11 +17,11 @@ gulp.task('static', function () { .pipe(eslint.failAfterError()); }); -gulp.task('nsp', function (cb) { +gulp.task('nsp', cb => { nsp({package: path.resolve('package.json')}, cb); }); -gulp.task('pre-test', function () { +gulp.task('pre-test', () => { return gulp.src([ 'app/index.js', 'subgenerator/index.js' @@ -32,22 +32,22 @@ gulp.task('pre-test', function () { .pipe(istanbul.hookRequire()); }); -gulp.task('test', ['pre-test'], function (cb) { - var mochaErr; +gulp.task('test', ['pre-test'], cb => { + let mochaErr; gulp.src('test/**/*.js') .pipe(plumber()) .pipe(mocha({reporter: 'spec', timeout: 10000})) - .on('error', function (err) { + .on('error', err => { mochaErr = err; }) .pipe(istanbul.writeReports()) - .on('end', function () { + .on('end', () => { cb(mochaErr); }); }); -gulp.task('coveralls', ['test'], function () { +gulp.task('coveralls', ['test'], () => { if (!process.env.CI) { return; } diff --git a/package.json b/package.json index f50d3397..45b90fea 100644 --- a/package.json +++ b/package.json @@ -25,30 +25,29 @@ "node": ">=4.0.0" }, "dependencies": { - "chalk": "^1.0.0", - "deep-extend": "^0.4.0", - "generator-node": "^1.7.0", + "chalk": "^1.1.3", + "deep-extend": "^0.4.1", + "generator-node": "^1.12.1", "inquirer-npm-name": "^2.0.0", - "lodash": "^4.6.1", + "lodash": "^4.17.2", "mkdirp": "^0.5.1", - "superb": "^1.0.0", - "yeoman-generator": "^0.23.3", - "yosay": "^1.0.2" + "superb": "^1.3.0", + "yeoman-generator": "^1.0.0-rc1", + "yosay": "^1.2.1" }, "devDependencies": { - "gulp": "^3.6.0", - "gulp-coveralls": "^0.1.0", + "gulp": "^3.9.1", + "gulp-coveralls": "^0.1.4", "gulp-eslint": "^2.0.0", - "gulp-exclude-gitignore": "^1.0.0", - "gulp-istanbul": "^0.10.3", - "gulp-mocha": "^2.0.0", - "gulp-nsp": "^2.1.0", - "gulp-plumber": "^1.0.0", - "mocha": "^2.2.5", - "mockery": "^1.4.0", - "yeoman-assert": "^2.0.0", - "yeoman-test": "^1.0.0", - "pinkie-promise": "^2.0.1" + "gulp-exclude-gitignore": "^1.1.1", + "gulp-istanbul": "^1.1.1", + "gulp-mocha": "^3.0.1", + "gulp-nsp": "^2.4.2", + "gulp-plumber": "^1.1.0", + "mocha": "^3.2.0", + "mockery": "^2.0.0", + "yeoman-assert": "^2.2.1", + "yeoman-test": "^1.6.0" }, "license": "MIT" } diff --git a/subgenerator/index.js b/subgenerator/index.js index 5d279f06..f1ee5d63 100644 --- a/subgenerator/index.js +++ b/subgenerator/index.js @@ -1,44 +1,44 @@ 'use strict'; -var path = require('path'); -var generators = require('yeoman-generator'); -var superb = require('superb'); +const path = require('path'); +const Generator = require('yeoman-generator'); +const superb = require('superb'); -module.exports = generators.Base.extend({ - constructor: function () { - generators.Base.apply(this, arguments); +module.exports = class extends Generator { + constructor(args, opts) { + super(args, opts); - this.argument('namespace', { + this.argument('name', { type: String, required: true, - description: 'Generator namespace' + description: 'Generator name' }); - }, + } - writing: function () { - var generatorName = this.fs.readJSON(this.destinationPath('package.json')).name; + writing() { + const generatorName = this.fs.readJSON(this.destinationPath('package.json')).name; this.fs.copyTpl( this.templatePath('index.js'), - this.destinationPath(path.join('generators', this.namespace, 'index.js')), + this.destinationPath(path.join('generators', this.options.name, 'index.js')), { // Escape apostrophes from superb to not conflict with JS strings superb: superb().replace('\'', '\\\''), - generatorName: generatorName + generatorName } ); this.fs.copy( this.templatePath('templates/**'), - this.destinationPath(path.join('generators', this.namespace, 'templates')) + this.destinationPath(path.join('generators', this.options.name, 'templates')) ); this.fs.copyTpl( this.templatePath('test.js'), - this.destinationPath('test/' + this.namespace + '.js'), + this.destinationPath('test/' + this.options.name + '.js'), { - namespace: this.namespace, - generatorName: generatorName + name: this.options.name, + generatorName } ); } -}); +}; diff --git a/subgenerator/templates/index.js b/subgenerator/templates/index.js index 6b26f237..8571d192 100644 --- a/subgenerator/templates/index.js +++ b/subgenerator/templates/index.js @@ -1,9 +1,9 @@ 'use strict'; -var yeoman = require('yeoman-generator'); +var Generator = require('yeoman-generator'); var chalk = require('chalk'); var yosay = require('yosay'); -module.exports = yeoman.Base.extend({ +module.exports = Generator.extend({ prompting: function () { // Have Yeoman greet the user. this.log(yosay( diff --git a/subgenerator/templates/test.js b/subgenerator/templates/test.js index 1a2bda0c..2eacee89 100644 --- a/subgenerator/templates/test.js +++ b/subgenerator/templates/test.js @@ -3,9 +3,9 @@ var path = require('path'); var assert = require('yeoman-assert'); var helpers = require('yeoman-test'); -describe('<%- generatorName %>:<%- namespace %>', function () { +describe('<%- generatorName %>:<%- name %>', function () { before(function () { - return helpers.run(path.join(__dirname, '../generators/<%- namespace %>')) + return helpers.run(path.join(__dirname, '../generators/<%- name %>')) .withPrompts({someAnswer: true}) .toPromise(); }); diff --git a/test/app.js b/test/app.js index 29779577..1affcba9 100644 --- a/test/app.js +++ b/test/app.js @@ -1,32 +1,31 @@ 'use strict'; -var path = require('path'); -var assert = require('yeoman-assert'); -var helpers = require('yeoman-test'); -var mockery = require('mockery'); -var Promise = require('pinkie-promise'); +const path = require('path'); +const assert = require('yeoman-assert'); +const helpers = require('yeoman-test'); +const mockery = require('mockery'); -describe('generator:app', function () { - before(function () { +describe('generator:app', () => { + before(() => { mockery.enable({ warnOnReplace: false, warnOnUnregistered: false }); - mockery.registerMock('superb', function () { + mockery.registerMock('superb', () => { return 'cat\'s meow'; }); - mockery.registerMock('npm-name', function () { + mockery.registerMock('npm-name', () => { return Promise.resolve(true); }); }); - after(function () { + after(() => { mockery.disable(); }); - describe('defaults', function () { - before(function () { + describe('defaults', () => { + before(() => { return helpers.run(path.join(__dirname, '../app')) .withPrompts({ name: 'generator-temp', @@ -42,12 +41,12 @@ describe('generator:app', function () { .toPromise(); }); - it('created and CD into a folder named like the generator', function () { + it('created and CD into a folder named like the generator', () => { assert.equal(path.basename(process.cwd()), 'generator-temp'); }); - it('creates files', function () { - var expected = [ + it('creates files', () => { + const expected = [ 'README.md', 'package.json', 'generators/app/index.js', @@ -58,23 +57,23 @@ describe('generator:app', function () { assert.file(expected); }); - it('fills package.json with correct information', function () { + it('fills package.json with correct information', () => { assert.JSONFileContent('package.json', { name: 'generator-temp', dependencies: { - 'yeoman-generator': '^0.23.0', - chalk: '^1.0.0', - yosay: '^1.0.0' + 'yeoman-generator': '^1.0.0-rc1', + chalk: '^1.1.3', + yosay: '^1.2.1' }, devDependencies: { - 'yeoman-assert': '^2.0.0', - 'yeoman-test': '^1.0.0' + 'yeoman-test': '^1.6.0', + 'yeoman-assert': '^2.2.1' }, keywords: ['yeoman-generator'] }); }); - it('fills the README with project data', function () { + it('fills the README with project data', () => { assert.fileContent('README.md', '# generator-temp'); assert.fileContent('README.md', 'npm install -g yo'); assert.fileContent('README.md', 'npm install -g generator-temp'); diff --git a/test/subgenerator.js b/test/subgenerator.js index 7c75335f..6374300e 100644 --- a/test/subgenerator.js +++ b/test/subgenerator.js @@ -1,25 +1,27 @@ 'use strict'; -var path = require('path'); -var assert = require('yeoman-assert'); -var helpers = require('yeoman-test'); -var fs = require('fs'); -var mockery = require('mockery'); +const path = require('path'); +const assert = require('yeoman-assert'); +const helpers = require('yeoman-test'); +const fs = require('fs'); +const mockery = require('mockery'); -describe('generator:subgenerator', function () { - before(function () { +describe('generator:subgenerator', () => { + before(() => { mockery.enable({ warnOnReplace: false, warnOnUnregistered: false }); - mockery.registerMock('superb', function () { + mockery.registerMock('superb', () => { return 'cat\'s meow'; }); return helpers.run(path.join(__dirname, '../subgenerator')) .withArguments(['foo']) - .withOptions({force: true}) - .inTmpDir(function (tmpDir) { + .withOptions({ + force: true + }) + .inTmpDir(tmpDir => { fs.writeFileSync( path.join(tmpDir, 'package.json'), '{"name": "generator-foo", "files":[]}' @@ -28,11 +30,11 @@ describe('generator:subgenerator', function () { .toPromise(); }); - after(function () { + after(() => { mockery.disable(); }); - it('creates files', function () { + it('creates files', () => { assert.file([ 'generators/foo/index.js', 'generators/foo/templates/dummyfile.txt', @@ -40,12 +42,12 @@ describe('generator:subgenerator', function () { ]); }); - it('configures the test file', function () { + it('configures the test file', () => { assert.fileContent('test/foo.js', 'describe(\'generator-foo:foo'); assert.fileContent('test/foo.js', '../generators/foo'); }); - it('escapes possible apostrophes from superb', function () { + it('escapes possible apostrophes from superb', () => { assert.fileContent('generators/foo/index.js', 'Welcome to the cat\\\'s meow'); }); });