castage
Version:
A type-safe library for dynamic object casting and ensuring type consistency in JavaScript/TypeScript.
34 lines (33 loc) • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dateTimeStamp = exports.isoDate = exports.jsDateTimeStamp = exports.unixDateTimeStamp = exports.date = void 0;
const resultage_1 = require("resultage");
const engine_js_1 = require("./engine.js");
const casting_error_js_1 = require("./casting-error.js");
const predicates_js_1 = require("./predicates.js");
const parseDate = (value, path, typeName) => {
const date = value instanceof Date ? value : new Date(value);
return isNaN(date.getTime())
? (0, casting_error_js_1.castErr)('ERR_INVALID_VALUE', path, {
expected: typeName,
received: value,
})
: (0, resultage_1.ok)(date);
};
exports.date = (0, engine_js_1.fromGuardAndTransform)((value) => value instanceof Date ||
typeof value === 'string' ||
typeof value === 'number', (value, path) => parseDate(value, path, 'JsDate'), 'JsDate');
exports.unixDateTimeStamp = (0, engine_js_1.fromGuardAndTransform)(predicates_js_1.isNumber, (value, path) => parseDate(value * 1000, path, 'UnixDateTimeStamp'), 'UnixDateTimeStamp');
exports.jsDateTimeStamp = (0, engine_js_1.fromGuardAndTransform)(predicates_js_1.isNumber, (value, path) => parseDate(value, path, 'JsDateTimeStamp'), 'JsDateTimeStamp');
const isoRegex = /^\d{4}(-\d{2}(-\d{2})?)?([T\s]\d{2}(:\d{2}(:\d{2}(\.\d+)?)?)?)?(Z|[-+]\d+(:\d+)?)?$/;
exports.isoDate = (0, engine_js_1.fromGuardAndTransform)((value) => typeof value === 'string', (value, path) => isoRegex.test(value)
? parseDate(value, path, 'IsoDate')
: (0, casting_error_js_1.castErr)('ERR_INVALID_VALUE', path, {
expected: 'IsoDate',
received: value,
}), 'IsoDate');
exports.date.iso = exports.isoDate;
exports.dateTimeStamp = {
unix: exports.unixDateTimeStamp,
js: exports.jsDateTimeStamp,
};