es2049package
Version:
ECMAScript 2049 package: zero-configuration libraries and command-line utilies by Harald Rudell
90 lines (78 loc) • 3.42 kB
JavaScript
/*
© 2017-present Harald Rudell <harald.rudell@gmail.com> (http://www.haraldrudell.com)
This source code is licensed under the ISC-style license found in the LICENSE file in the root directory of this source tree.
*/
// rollup ECMAScript 2015: no class properties
import PackageJson from './PackageJson'
export default class RollupPackageJson extends PackageJson {
getRollupFromJson() {
const {json: {name, main, module, rollup: ro}} = this
const {input, output, dependencies: dependenciesFlag, main: mainFlag, module: moduleFlag, shebang, clean, external, print, node, targets, eslint} = ro || false
return {
name: this._getNonEmptyString(name, 'name'),
main: this._getStringOrUndefined(main, 'main'),
module: this._getStringOrUndefined(module, 'module'),
print: this._getBoolean(print, 'rollup.print', false),
clean: this._getArrayOfNonEmptyStringStringOrUndefined(clean, 'rollup.clean'),
shebang: this._getBoolean(shebang, 'rollup.shebang', false),
node: this._getBoolean(node, 'rollup.node', true),
targets: this._getObjectStringOrUndefined(targets, 'rollup.targets', {node: '6.10'}),
output: this._getArrayObjectOrUndefined(output),
mainFlag: this._getBoolean(mainFlag, 'rollup.main', false),
moduleFlag: this._getBoolean(moduleFlag, 'rollup.module', false),
input: this._getArrayStringOrUndefined(input),
external: this._getArrayOfNonEmptyStringStringOrUndefined(external, 'rollup.external'),
dependencyList: this._getDependencyList(),
eslint: this._getBoolean(eslint, 'rollup.eslint'),
dependenciesFlag: dependenciesFlag !== false,
}
}
_getDependencyList() {
const {json: {dependencies}} = this
const list = Object.keys(Object(dependencies))
return list.length ? this._getArrayOfNonEmptyString(list) : undefined
}
_getObjectStringOrUndefined(value, name, defaultValue) {
return typeof value === 'object' ? value : this._getStringOrUndefined(value, name, defaultValue)
}
_getArrayObjectOrUndefined(output) {
if (!Array.isArray(output) && typeof output !== 'object' && output !== undefined) {
this._throw(`bad output value type: ${typeof output}`)
}
return output
}
_getArrayStringOrUndefined(input) {
if (!Array.isArray(input)) this._getStringOrUndefined(input, 'rollup.input')
return input
}
_getArrayOfNonEmptyStringStringOrUndefined(value, name) {
return !Array.isArray(value)
? this._getStringOrUndefined(value, name)
: this._getArrayOfNonEmptyString(value, name)
}
_getArrayOfNonEmptyString(value, name) {
if (!Array.isArray(value)) this._throw(`${name}: not array`)
for (let [index, v] of value.entries()) this._getNonEmptyString(v, `${name} index ${index}`)
return value
}
_getStringOrUndefined(value, name, defaultValue) {
return value !== undefined
? this._getNonEmptyString(value, name)
: defaultValue
}
_getNonEmptyString(value, name) {
const vt = typeof value
if (vt !== 'string') this._throw(`${name} not non-empty string: ${vt}`)
return value
}
_getBoolean(value, name, defaultValue) {
if (value !== undefined) {
const vt = typeof value
if (vt !== 'boolean') this._throw(`${name} not boolean: ${vt}`)
return value
} else return defaultValue
}
_throw(message) {
super._throw(message, 'RollupPackageJson')
}
}