You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.5 KiB
51 lines
1.5 KiB
3 years ago
|
'use strict';
|
||
|
const semver = require('semver');
|
||
|
|
||
|
/**
|
||
|
* @mixin
|
||
|
* @alias env/composability
|
||
|
*/
|
||
|
const composability = module.exports;
|
||
|
|
||
|
composability.requireGenerator = function (namespace) {
|
||
|
if (namespace === undefined) {
|
||
|
return require('yeoman-generator');
|
||
|
}
|
||
|
if (semver.valid(namespace)) {
|
||
|
return this.repository.requireModule('yeoman-generator', namespace);
|
||
|
}
|
||
|
return this.get(namespace);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Install generators at the custom local repository and register.
|
||
|
*
|
||
|
* @param {Object} packages - packages to install key(packageName): value(versionRange).
|
||
|
* @return {Boolean} - true if the install succeeded.
|
||
|
*/
|
||
|
composability.installLocalGenerators = function (packages) {
|
||
|
const entries = Object.entries(packages).filter(([packageName, version]) => !this.repository.verifyInstalledVersion(packageName, version));
|
||
|
if (entries.length === 0) {
|
||
|
return true;
|
||
|
}
|
||
|
const toInstall = {};
|
||
|
entries.forEach(([packageName, version]) => {
|
||
|
toInstall[packageName] = version;
|
||
|
});
|
||
|
if (this.repository.installPackages(toInstall)) {
|
||
|
const packagesToLookup = entries.map(([packageName, _]) => packageName);
|
||
|
this.lookupLocalPackages(packagesToLookup);
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Lookup and register generators from the custom local repository.
|
||
|
*
|
||
|
* @param {String[]} [packagesToLookup='generator-*'] - packages to lookup.
|
||
|
*/
|
||
|
composability.lookupLocalPackages = function (packagesToLookup = 'generator-*') {
|
||
|
this.lookup({packagePatterns: packagesToLookup, npmPaths: this.repository.nodeModulesPath});
|
||
|
};
|