create-banner
Version:
Create a banner from a package.json file.
67 lines (61 loc) • 2.14 kB
JavaScript
;
var changeCase = require('change-case');
var dotProp = require('dot-prop');
var deepMerge = require('deepmerge');
var readPkgUp = require('read-pkg-up');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var changeCase__default = /*#__PURE__*/_interopDefaultLegacy(changeCase);
var dotProp__default = /*#__PURE__*/_interopDefaultLegacy(dotProp);
var deepMerge__default = /*#__PURE__*/_interopDefaultLegacy(deepMerge);
var readPkgUp__default = /*#__PURE__*/_interopDefaultLegacy(readPkgUp);
const now = new Date();
const TEMPLATES = {
normal: `/*!
* @name v@version
* @homepage
*
* Copyright @year @author.name
* Released under the @license license
*
* Date: @date
*/
`,
simple: `/*!
* @name v@version
* Copyright @year @author.name
* Released under the @license license
*/
`,
inline: '/*! @name v@version | (c) @year @author.name | @license */',
};
const DEFAULTS = {
case: '',
data: {
date: now.toISOString(),
year: now.getFullYear(),
},
template: 'normal',
};
const REGEXP_SCOPE = /^.+\//;
const REGEXP_PLACEHOLDER = /@(\w+(?:\.\w+)*)/gi;
function createBanner(options) {
const opts = deepMerge__default['default'](DEFAULTS, options || {});
let { pkg } = opts;
if (!pkg) {
const result = readPkgUp__default['default'].sync();
if (result) {
pkg = result.packageJson;
}
}
const data = deepMerge__default['default'](pkg || {}, opts.data || {});
data.name = (data.name || '').replace(REGEXP_SCOPE, '');
if (typeof changeCase__default['default'].camelCase === 'function') {
const convertCase = changeCase__default['default'][changeCase__default['default'].camelCase(opts.case || '')];
if (typeof convertCase === 'function') {
data.name = convertCase(data.name);
}
}
const template = TEMPLATES[opts.template || ''] || String(opts.template);
return template.replace(REGEXP_PLACEHOLDER, (placeholder, property) => dotProp__default['default'].get(data, property));
}
module.exports = createBanner;