nope-validator
Version:
Fast and simple JS validator
115 lines (110 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var NopeReference = require('./NopeReference.js');
function resolvePathFromContext(path, context) {
var optionWithPath = path.split('../');
var depth = optionWithPath.length - 1;
var key = optionWithPath[optionWithPath.length - 1];
var ctx = context;
for (var i = 0; i < depth; i++) {
ctx = ctx === null || ctx === void 0 ? void 0 : ctx.___parent;
}
if (ctx && key !== undefined && key !== null) {
return ctx[key];
}
return key;
}
function resolveNopeRefsFromKeys(options, context) {
var resolvedOptions = options.map(function (option) {
return resolvePathFromContext(option, context);
});
return resolvedOptions;
}
function resolveNopeRef(option, context) {
if (option instanceof NopeReference.NopeReference) {
return resolvePathFromContext(option.key, context);
}
return option;
}
function deepEquals(a, b) {
if (typeof a == 'object' && a != null && typeof b == 'object' && b != null) {
if (a === b) {
return true;
}
var aCount = 0;
var bCount = 0;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
for (var _ in a) {
aCount++;
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
for (var _ in b) {
bCount++;
}
if (aCount - bCount !== 0) {
return false;
}
for (var key in a) {
if (!(key in b) || !deepEquals(a[key], b[key])) {
return false;
}
}
for (var key in b) {
if (!(key in a) || !deepEquals(b[key], a[key])) {
return false;
}
}
return true;
}
return a === b;
}
function pathToArray(path) {
return path.split(/[,[\].]/g).filter(Boolean);
}
function getFromPath(path, entry, dropLast) {
if (dropLast === void 0) { dropLast = false; }
if (!path) {
return undefined;
}
var pathArray = pathToArray(path);
pathArray = dropLast ? pathArray.slice(0, -1) : pathArray;
var value = entry;
for (var _i = 0, pathArray_1 = pathArray; _i < pathArray_1.length; _i++) {
var key = pathArray_1[_i];
value = value[key];
}
return value;
}
function runValidators(tasks, entry, context) {
var done = false;
return tasks.reduce(function (previous, next) {
if (done) {
return previous;
}
return previous
.then(function (error) {
if (error) {
done = true;
return error;
}
return next(entry, context);
})["catch"](function (error) {
if (error) {
done = true;
return error;
}
return next(entry, context);
});
}, Promise.resolve());
}
function isNil(entry) {
return !!(entry === undefined || entry === null);
}
exports.deepEquals = deepEquals;
exports.getFromPath = getFromPath;
exports.isNil = isNil;
exports.pathToArray = pathToArray;
exports.resolveNopeRef = resolveNopeRef;
exports.resolveNopeRefsFromKeys = resolveNopeRefsFromKeys;
exports.runValidators = runValidators;
//# sourceMappingURL=utils.js.map