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
JavaScript
;
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));
}