@gdjiami/cli
Version:
CLI for build front end project.
75 lines (74 loc) • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/**
* getOptions from package.json
*/
var ajv_1 = tslib_1.__importDefault(require("ajv"));
var better_ajv_errors_1 = tslib_1.__importDefault(require("better-ajv-errors"));
var fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
var path_1 = tslib_1.__importDefault(require("path"));
var groupBy_1 = tslib_1.__importDefault(require("lodash/groupBy"));
var chalk_1 = tslib_1.__importDefault(require("chalk"));
var defaultOptions = {
offline: false,
enableESlint: true,
enableOfflineInDev: false,
enableDuplicatePackageCheck: false,
enableTypescriptAsyncCheck: false,
enableTypescriptCheck: true,
enableTypescriptCheckInProduction: true,
enableESlintInProduction: false,
enableCircularDependencyCheck: false,
ignoreBrowserlistInDevelopment: true,
inject: {},
useBuiltIns: 'usage',
};
var key = 'jm';
var options;
function getOptions(pkg) {
if (options) {
return options;
}
var schemaPath = path_1.default.join(__dirname, '../lib/option.schema.json');
var schema = fs_extra_1.default.readJsonSync(schemaPath);
if (key in pkg) {
var ajv = new ajv_1.default({ jsonPointers: true });
var validate = ajv.compile(schema);
if (validate(pkg[key])) {
return (options = tslib_1.__assign(tslib_1.__assign({}, defaultOptions), pkg[key]));
}
var errors = prepareErrors(validate.errors);
var output = better_ajv_errors_1.default(schema, pkg[key], errors, { indent: 2 });
console.log(chalk_1.default.red("\u274C Configuration error. Check property " + chalk_1.default.cyan(key) + " of the " + chalk_1.default.cyan('package.json')));
console.log(output);
process.exit(1);
}
return (options = defaultOptions);
}
exports.default = getOptions;
function prepareErrors(errors) {
var removeKeywords = ['anyOf', 'oneOf'];
var newErrors = errors.filter(function (i) { return removeKeywords.indexOf(i.keyword) === -1; });
// merge same path error
var groups = groupBy_1.default(newErrors, 'dataPath');
return Object.keys(groups)
.map(function (k) {
return tslib_1.__assign(tslib_1.__assign({}, groups[k][0]), { message: groups[k].map(function (i) { return i.message; }).join(' or ') });
})
.reduce(function (all, cur) {
var index = all.findIndex(function (i) { return i.dataPath.startsWith(cur.dataPath) || cur.dataPath.startsWith(i.dataPath); });
if (index !== -1) {
var existed = all[index];
// has more specific error
if (existed.dataPath.length > cur.dataPath.length) {
return all;
}
all.splice(index, 1, cur);
}
else {
all.push(cur);
}
return all;
}, []);
}