Last active
August 22, 2018 02:34
-
-
Save sawyerbutton/883e0d027ba194bc7f1ec7937f97be5c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict'; | |
| const path = require('path'); | |
| const _ = require('lodash'); | |
| const titleize = require('titleize'); | |
| const humanizeString = require('humanize-string'); | |
| const readPkgUp = require('read-pkg-up'); | |
| const updateNotifier = require('update-notifier'); | |
| const Configstore = require('configstore'); | |
| const {namespaceToName} = require('yeoman-environment'); | |
| const getPkgVersion = require('./utils/packageHelper') | |
| const latestVersion = require('latest-version'); | |
| /** | |
| * The router is in charge of handling `yo` different screens. | |
| * @constructor | |
| * @param {Environment} env A yeoman environment instance | |
| * @param {Insight} insight An insight instance | |
| * @param {Configstore} [conf] An optional config store instance | |
| */ | |
| class Router { | |
| constructor(env, insight, conf) { | |
| const pkg = require('../package.json'); | |
| this.routes = {}; | |
| this.env = env; | |
| this.insight = insight; | |
| this.conf = conf || new Configstore(pkg.name, { | |
| generatorRunCount: {} | |
| }); | |
| } | |
| /** | |
| * Update the available generators in the app | |
| * TODO: Move this function elsewhere, try to make it stateless. | |
| */ | |
| updateAvailableGenerators() { | |
| this.generators = {}; | |
| function asyncFunction(generator) { | |
| return new Promise((resolve,reject) => { | |
| if (!/:(app|all)$/.test(generator.namespace)) { | |
| resolve(); | |
| } | |
| const {pkg} = readPkgUp.sync({cwd: path.dirname(generator.resolved)}); | |
| if (!pkg) { | |
| resolve(); | |
| } | |
| pkg.namespace = generator.namespace; | |
| pkg.appGenerator = true; | |
| pkg.prettyName = titleize(humanizeString(namespaceToName(generator.namespace))); | |
| getPkgVersion(pkg.name).then(version => { | |
| (async () => { | |
| const latest = await latestVersion(pkg.name); | |
| pkg.update = latest; | |
| console.log(pkg.update); | |
| if (pkg.update && pkg.version !== pkg.update) { | |
| pkg.updateAvailable = true; | |
| } | |
| this.generators[pkg.name] = pkg; | |
| resolve(); | |
| })(); | |
| }) | |
| }) | |
| }; | |
| return Promise.all( | |
| // _.forEach(this.env.getGeneratorsMeta(), asyncFunction) | |
| // this.env.getGeneratorsMeta().map(generator => asyncFunction(generator))// | |
| Object.keys(this.env.getGeneratorsMeta()).map((key) => { | |
| asyncFunction(this.env.getGeneratorsMeta()[key]); | |
| }) | |
| ) | |
| } | |
| } | |
| module.exports = Router; | |
| // this.env.getGeneratorsMeta() result | |
| /** | |
| { 'karma:app': | |
| { resolved: '/Users/admin/.nvm/versions/node/v8.9.4/lib/node_modules/generator-karma/app/index.js', | |
| namespace: 'karma:app' }, | |
| '@voice/generator:app': | |
| { resolved: '/Users/admin/.nvm/versions/node/v8.9.4/lib/node_modules/@voice/generator-generator/app/index.js', | |
| namespace: '@voice/generator:app' }, | |
| '@voice/generator:subgenerator': | |
| { resolved: '/Users/admin/.nvm/versions/node/v8.9.4/lib/node_modules/@voice/generator-generator/subgenerator/index.js', | |
| namespace: '@voice/generator:subgenerator' }, | |
| 'mocha:app': | |
| { resolved: '/Users/admin/.nvm/versions/node/v8.9.4/lib/node_modules/generator-mocha/generators/app/index.js', | |
| namespace: 'mocha:app' }, | |
| '@voice/angular:app': | |
| { resolved: '/Users/admin/IFLYTEK/Voice/generator-angular/generators/app/index.js', | |
| namespace: '@voice/angular:app' }, | |
| '@voice/angular:cli': | |
| { resolved: '/Users/admin/IFLYTEK/Voice/generator-angular/generators/cli/index.js', | |
| namespace: '@voice/angular:cli' }, | |
| '@voice/angular:voice': | |
| { resolved: '/Users/admin/IFLYTEK/Voice/generator-angular/generators/voice/index.js', | |
| namespace: '@voice/angular:voice' } } | |
| */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment