@darkobits/valida
Version:
Type-aware object validator.
75 lines (60 loc) • 1.96 kB
JavaScript
"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