UNPKG

@yuanhua/cli

Version:
91 lines (84 loc) 2.13 kB
const path = require('path'); const metadata = require('read-metadata'); const exists = require('fs').existsSync; const getGitUser = require('./git-user'); const validateName = require('validate-npm-package-name'); /** * Read prompts metadata. * * @param {String} dir * @return {Object} */ module.exports = function options(name, dir) { // 读取初始化文件数据 const opts = getMetadata(dir); // 替换传入的值 setDefault(opts, 'name', name); setValidateName(opts); // 获取电脑全局git 信息 const author = getGitUser(); if (author) { setDefault(opts, 'author', author); } return opts; }; /** * Gets the metadata from either a meta.json or meta.js file. * * @param {String} dir * @return {Object} */ function getMetadata(dir) { const json = path.join(dir, 'meta.json'); const js = path.join(dir, 'meta.js'); let opts = {}; if (exists(json)) { opts = metadata.sync(json); } else if (exists(js)) { const req = require(path.resolve(js)); if (req !== Object(req)) { throw new Error('meta.js needs to expose an object'); } opts = req; } return opts; } /** * Set the default value for a prompt question * * @param {Object} opts * @param {String} key * @param {String} val */ function 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; } } /** * 检验是否是合法npm包名 * @param {Object} opts */ function 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; }; }