@eluvio/elv-utils-js
Version:
Utilities for the Eluvio Content Fabric
84 lines (73 loc) • 2.13 kB
JavaScript
// Validators used when defining and processing options
const R = require('@eluvio/ramda-fork')
const {
ArrayModel,
BasicModel,
FunctionModel,
KVMapModelFactory,
NonBlankString,
NonBlankStringOrArrayOfSame,
NonNull,
CheckedResult,
SealedModel
} = require('./Models')
// used by both YargsOptModel and OptDefModel
const commonOptFields = {
alias: [NonBlankStringOrArrayOfSame],
choices: [ArrayModel(NonNull)],
conflicts: [NonBlankStringOrArrayOfSame],
coerce: [FunctionModel(NonNull).return(NonNull)],
default: [NonNull],
demand: [Boolean],
group: [NonBlankString],
hidden: [Boolean],
implies: [NonBlankStringOrArrayOfSame],
normalize: [Boolean],
number: [Boolean],
requiresArg: [Boolean],
string: [Boolean],
type: [BasicModel(['array', 'boolean', 'number', 'string'])]
}
const optDescFields = {
descTemplate: NonBlankString,
forX: [NonBlankString],
ofX: [NonBlankString],
X: [NonBlankString]
}
const optDefFields = R.mergeAll([
commonOptFields,
optDescFields
])
const OptDefModel = SealedModel(optDefFields).as('OptDef')
const CheckedOptDef = CheckedResult(OptDefModel)
// for overrides, descTemplate is optional
const optDefOverrideFields = R.mergeAll([
commonOptFields,
optDescFields,
{descTemplate: [NonBlankString]}
])
const OptDefOverrideModel = SealedModel(optDefOverrideFields).as('OptDefOverride')
const CheckedOptDefOverride = CheckedResult(OptDefOverrideModel)
const OptDefMapModel = KVMapModelFactory(OptDefModel).as('OptDefMap')
const CheckedOptDefMap = CheckedResult(OptDefMapModel)
const yargsOptFields = R.mergeRight(
commonOptFields,
{desc: String}
)
const YargsOptModel = SealedModel(yargsOptFields).as('YargsOpt')
const CheckedYargsOpt = CheckedResult(YargsOptModel)
const YargsOptMapModel = KVMapModelFactory(YargsOptModel).as('YargsOptMap')
const CheckedYargsOptMap = CheckedResult(YargsOptMapModel)
module.exports = {
OptDefMapModel,
OptDefModel,
OptDefOverrideModel,
yargsOptFields,
YargsOptModel,
YargsOptMapModel,
CheckedOptDef,
CheckedOptDefMap,
CheckedOptDefOverride,
CheckedYargsOpt,
CheckedYargsOptMap
}