UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

78 lines (77 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidTime = isValidTime; exports.isValidUTCOffset = isValidUTCOffset; exports.isValidTimeZoneId = isValidTimeZoneId; exports.isNativeTimeZoneId = isNativeTimeZoneId; exports.isLeapYear = isLeapYear; exports.isDateLike = isDateLike; exports.isTimeWithUnit = isTimeWithUnit; const non_primitives_1 = require("../guards/non-primitives"); const primitives_1 = require("../guards/primitives"); const specials_1 = require("../guards/specials"); const utilities_1 = require("../number/utilities"); const timezone_1 = require("./timezone"); function isValidTime(value) { if (!(0, primitives_1.isNonEmptyString)(value)) return false; const [hourStr, minuteStr] = value.split(':'); if (!(0, specials_1.isNumericString)(hourStr) || !(0, specials_1.isNumericString)(minuteStr)) return false; const hour = Number(hourStr); const minute = Number(minuteStr); return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59; } function isValidUTCOffset(value) { return (0, primitives_1.isString)(value) ? /^UTC[+-]?(?:0[0-9]|1[0-4]):(?:00|15|30|45)$/.test(value) : false; } function isValidTimeZoneId(value) { return (0, primitives_1.isNonEmptyString)(value) ? new Set([...timezone_1.IANA_TZ_IDS]).has(value) : false; } function isNativeTimeZoneId(value) { return (0, primitives_1.isNonEmptyString)(value) ? new Set(timezone_1.NATIVE_TZ_IDS).has(value) : false; } function isLeapYear(year) { const $year = (0, utilities_1.normalizeNumber)(year); return $year ? ($year % 4 === 0 && $year % 100 !== 0) || $year % 400 === 0 : false; } function isDateLike(value) { if (value instanceof Date) return true; if ((0, non_primitives_1.isObject)(value)) { if ((0, non_primitives_1.isFunction)(value.format) && (0, non_primitives_1.isFunction)(value.toJSON) && (0, non_primitives_1.isFunction)(value.toISOString)) { return true; } if ((0, non_primitives_1.isFunction)(value.toISO) && (0, non_primitives_1.isFunction)(value.toFormat) && (0, primitives_1.isBoolean)(value.isValid)) { return true; } if ((0, non_primitives_1.isFunction)(value.plus) && (0, non_primitives_1.isFunction)(value.minus) && (0, non_primitives_1.isFunction)(value.equals) && (0, non_primitives_1.isFunction)(value.getClass)) { return true; } const temporals = [ 'Instant', 'Duration', 'PlainDate', 'PlainTime', 'PlainDateTime', 'PlainMonthDay', 'PlainYearMonth', 'ZonedDateTime', ]; if ((0, non_primitives_1.isFunction)(value.toJSON) && (0, non_primitives_1.isFunction)(value.toString) && temporals.includes(value.constructor?.name ?? '')) { return true; } } return false; } function isTimeWithUnit(value) { return ((0, primitives_1.isNonEmptyString)(value) && /^-?\d*\.?\d+ *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.test(value)); }