UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

75 lines (74 loc) 2.98 kB
"use strict"; 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; }, []); }