Skip to content

Instantly share code, notes, and snippets.

@sawyerbutton
Last active August 22, 2018 02:34
Show Gist options
  • Select an option

  • Save sawyerbutton/883e0d027ba194bc7f1ec7937f97be5c to your computer and use it in GitHub Desktop.

Select an option

Save sawyerbutton/883e0d027ba194bc7f1ec7937f97be5c to your computer and use it in GitHub Desktop.
'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