UNPKG

@ywfe/cli

Version:

遥望前端开发命令行工具

71 lines (70 loc) 2.19 kB
"use strict"; 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; }; };