decode-it
Version:
a simple zero-dependency type safe json decoder for typescript
45 lines • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.optional = void 0;
const decode_1 = require("../decode");
require("../toNativeType");
const typeCheckers_1 = require("../typeCheckers");
const ValidationResult_1 = require("./ValidationResult");
require("./Validator");
const createNoOptionalValidatorFailure = arg => ({
value: arg,
state: 'failed',
type: 'validator',
wrapper: 'optional',
});
const createNonObjectOptionalFailure = arg => ({
value: arg,
type: 'object',
state: 'failed',
wrapper: 'optional',
});
const createNestedOptionalFailure = (failedInnerDecode) => ({
value: failedInnerDecode.actual,
path: failedInnerDecode.path,
type: 'object',
state: 'failed',
wrapper: 'optional',
});
const optional = validator => arg => {
if (typeCheckers_1.isUndefined(validator))
return createNoOptionalValidatorFailure(validator);
if (typeCheckers_1.isUndefined(arg))
return ValidationResult_1.passedValidation;
if (typeCheckers_1.isObject(validator)) {
if (!typeCheckers_1.isObject(arg))
return createNonObjectOptionalFailure(arg);
const [failedDecode] = decode_1.getFailedDecodes(validator, arg);
return failedDecode
? createNestedOptionalFailure(failedDecode)
: ValidationResult_1.passedValidation;
}
const result = validator(arg);
return { ...result, wrapper: 'optional' };
};
exports.optional = optional;
//# sourceMappingURL=optional.js.map