@ywfe/cli
Version:
遥望前端开发命令行工具
71 lines (70 loc) • 2.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOptions = exports.options = void 0;
const path_1 = __importDefault(require("path"));
const metadata = require('read-metadata');
const exists = require('fs').existsSync;
const validateName = require('validate-npm-package-name');
const options = (name, dir) => {
const opts = getMetadata(dir);
setDefault(opts, 'name', name);
setValidateName(opts);
return opts;
};
exports.options = options;
const getOptions = (name, dir) => {
const opts = getMetadata(dir);
setDefault(opts, 'name', name);
setValidateName(opts);
return opts;
};
exports.getOptions = getOptions;
const getMetadata = (dir) => {
const json = path_1.default.join(dir, 'meta.json');
const js = path_1.default.join(dir, 'meta.js');
let opts = {};
if (exists(json)) {
opts = metadata.sync(json);
}
else if (exists(js)) {
const req = require(path_1.default.resolve(js));
if (req !== Object(req)) {
throw new Error('meta.js needs to expose an object');
}
opts = req;
}
return opts;
};
const setDefault = (opts, key, val) => {
if (opts.schema) {
opts.prompts = opts.schema;
delete opts.schema;
}
const prompts = opts.prompts || (opts.prompts = {});
if (!prompts[key] || typeof prompts[key] !== 'object') {
prompts[key] = {
'type': 'string',
'default': val
};
}
else {
prompts[key]['default'] = val;
}
};
const setValidateName = (opts) => {
const name = opts.prompts.name;
const customValidate = name.validate;
name.validate = (name) => {
const its = validateName(name);
if (!its.validForNewPackages) {
const errors = (its.errors || []).concat(its.warnings || []);
return 'Sorry, ' + errors.join(' and ') + '.';
}
if (typeof customValidate === 'function')
return customValidate(name);
return true;
};
};