UNPKG

castage

Version:

A type-safe library for dynamic object casting and ensuring type consistency in JavaScript/TypeScript.

34 lines (33 loc) 1.84 kB
"use strict"; 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, };