UNPKG

jgb-cli

Version:

```shell npm i -g jgb-cli #全局安装 ```

88 lines (77 loc) 2.06 kB
import fs = require('fs'); import path = require('path'); import metadata = require('read-metadata'); import validateName = require('validate-npm-package-name'); import getGitUser from './git-user'; export default function(name: string, dir: string) { const opts = getMetadata(dir); setDefault(opts, 'name', name); setValidateName(opts) 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: string) { const json = path.join(dir, 'meta.json'); const js = path.join(dir, 'meta.js'); let opts: any = {}; opts.status = true; if (fs.existsSync(json)) { opts = metadata.sync(json); } else if (fs.existsSync(js)) { const req = require(path.resolve(js)); if (req !== Object(req)) { throw new Error('meta.js needs to expose an object'); } opts = req; } else { opts.status = false; } return opts; } /** * Set the default value for a prompt question * * @param {Object} opts * @param {String} key * @param {String} val */ function setDefault(opts: any, key: string, val: any) { 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; } } function setValidateName(opts: any) { const name = opts.prompts.name; const customValidate = name.validate; // tslint:disable-next-line:no-shadowed-variable name.validate = (name: string) => { 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; }; }