UNPKG

@darkobits/valida

Version:
75 lines (60 loc) 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createValidator = createValidator; var _deepmerge = _interopRequireDefault(require("deepmerge")); var _isPlainObject = require("is-plain-object"); var _ow = _interopRequireDefault(require("ow")); var _decorateOw = require("./decorate-ow"); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _decorateOw.decorateOw)(); function defaultArrayMerge(target, source) { return source ?? target; } function getConfiguration(specFn) { try { (0, _ow.default)(specFn, 'argument', _ow.default.function); const opts = specFn({ ow: _ow.default }); (0, _ow.default)(opts, 'valida options', _ow.default.object.partialShape({ spec: _ow.default.object.not.empty })); const arrayMerge = opts.arrayMerge ?? defaultArrayMerge; const spec = (0, _utils.isPredicate)(opts.spec) ? opts.spec : _ow.default.object.partialShape(opts.spec); (0, _ow.default)(spec, 'spec', _ow.default.object); (0, _ow.default)(arrayMerge, 'arrayMerge', _ow.default.function); return { name: opts.name, spec, arrayMerge, defaults: opts.defaults }; } catch (err) { throw new TypeError(`[valida] Error creating validator: ${(0, _utils.formatMessage)(err)}`); } } function createValidator(specFn) { const { name, spec, defaults, arrayMerge } = getConfiguration(specFn); const validator = input => { const resolvedInput = defaults ? (0, _deepmerge.default)(defaults, input, { arrayMerge, isMergeableObject: _isPlainObject.isPlainObject }) : input; try { (0, _ow.default)(resolvedInput, name ?? 'options', spec); } catch (err) { throw new TypeError((0, _utils.formatMessage)(err)); } return resolvedInput; }; return validator; } //# sourceMappingURL=valida.js.map