castage
Version:
A type-safe library for dynamic object casting and ensuring type consistency in JavaScript/TypeScript.
45 lines (44 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.possibleText = exports.possibleTextBool = exports.possibleTextNumber = exports.possibleTextInt = exports.text = exports.textBool = exports.textNumber = exports.textInt = void 0;
const resultage_1 = require("resultage");
const engine_js_1 = require("./engine.js");
const casting_error_js_1 = require("./casting-error.js");
const types_js_1 = require("./types.js");
const predicates_js_1 = require("./predicates.js");
const primitives_js_1 = require("./primitives.js");
const oneOf_js_1 = require("./oneOf.js");
const values_js_1 = require("./values.js");
exports.textInt = (0, engine_js_1.fromGuardAndTransform)((value) => (0, predicates_js_1.isString)(value) && /^-?\d+$/.test(value), (value, path) => {
const result = +value;
return Number.isInteger(result)
? (0, resultage_1.ok)(result)
: (0, casting_error_js_1.castErr)(types_js_1.ERR_INVALID_VALUE, path, {
expected: 'text::int',
received: value,
});
}, 'text::int');
exports.textNumber = (0, engine_js_1.fromGuardAndTransform)((value) => (0, predicates_js_1.isString)(value) && value.trim() !== '' && !Number.isNaN(+value), (value, path) => {
const result = +value;
return Number.isNaN(result)
? (0, casting_error_js_1.castErr)(types_js_1.ERR_INVALID_VALUE, path, {
expected: 'text::number',
received: value,
})
: (0, resultage_1.ok)(result);
}, 'text::number');
const boolValues = (0, values_js_1.values)('true', 'false');
exports.textBool = (0, engine_js_1.fromGuardAndTransform)((0, engine_js_1.is)(boolValues), (value) => (0, resultage_1.ok)(value === 'true'), 'text::boolean');
exports.text = {
int: exports.textInt,
number: exports.textNumber,
bool: exports.textBool,
};
exports.possibleTextInt = (0, oneOf_js_1.oneOf)(primitives_js_1.int, exports.textInt);
exports.possibleTextNumber = (0, oneOf_js_1.oneOf)(primitives_js_1.number, exports.textNumber);
exports.possibleTextBool = (0, oneOf_js_1.oneOf)(primitives_js_1.boolean, exports.textBool);
exports.possibleText = {
int: exports.possibleTextInt,
number: exports.possibleTextNumber,
bool: exports.possibleTextBool,
};