nlu
Version:
Use this package to link your projects together for local development.
89 lines (88 loc) • 3.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const assert = require("assert");
const Ajv = require("ajv");
const schema = require('../assets/nlu.schema.json');
const logging_1 = require("./logging");
const chalk_1 = require("chalk");
const fs = require("fs");
const path = require("path");
const async = require("async");
exports.globalConfigFilePath = path.resolve(process.env.HOME + '/.nlu/global/settings.json');
exports.validateConfigFile = function (data) {
try {
const ajv = new Ajv({ allErrors: false });
const validate = ajv.compile(schema);
const valid = validate(data);
if (!valid)
console.error(validate.errors);
return valid;
}
catch (err) {
logging_1.default.error(err.message);
return false;
}
};
exports.getProdKeys = function (pkg) {
return Object.keys(pkg.dependencies || {});
};
exports.getDevKeys = function (pkg) {
return Object.keys(pkg.dependencies || {})
.concat(Object.keys(pkg.devDependencies || {}))
.concat(Object.keys(pkg.optionalDependencies || {}));
};
exports.validateOptions = function (opts) {
try {
assert(opts.verbosity >= 1, chalk_1.default.magenta('Verbosity must be an integer between 1 and 4, inclusive'));
assert(opts.verbosity <= 4, chalk_1.default.magenta('Verbosity must be an integer between 1 and 4, inclusive'));
}
catch (err) {
logging_1.default.error(err.message);
return false;
}
return true;
};
exports.mapConfigObject = function (obj) {
return Object.keys(obj).reduce((a, b) => {
const key = String(b).replace(/[^a-zA-z]+/g, '_').toLowerCase();
return (a[key] = obj[b], a);
}, {});
};
exports.determineIfReinstallIsNeeded = (nodeModulesPath, depsKeys, opts, cb) => {
fs.readdir(nodeModulesPath, (err, originalItemsInNodeModules) => {
if (err || !Array.isArray(originalItemsInNodeModules)) {
opts.verbosity > 1 && logging_1.default.warn('Reinstalling because node_modules dir does not seem to exist in dir: ', nodeModulesPath);
return cb(null, true);
}
const orgItems = originalItemsInNodeModules.filter(v => {
return String(v).startsWith('@');
});
async.eachLimit(orgItems, 3, (item, cb) => {
fs.readdir(path.resolve(nodeModulesPath + '/' + item), (err, orgtems) => {
if (err) {
return cb(err);
}
orgtems.forEach(v => {
originalItemsInNodeModules.push(item + '/' + v);
});
cb(null);
});
}, (err) => {
if (err) {
return cb(err);
}
const allThere = depsKeys.every(d => {
if (originalItemsInNodeModules.indexOf(d) < 0) {
opts.verbosity > 1 && logging_1.default.info('The following dep in package.json', d, 'did not appear to be in node_modules located here:', nodeModulesPath);
return false;
}
return true;
});
if (!allThere) {
opts.verbosity > 1 && logging_1.default.warn('Reinstalling because not all package.json dependencies exist in node_modules:', nodeModulesPath);
return cb(null, true);
}
cb(null, false);
});
});
};