UNPKG

@freeword/meta

Version:

Meta package for Freeword: exports all core types, constants, and utilities from the src/ directory.

79 lines (72 loc) 4.87 kB
import { DateTime, Duration } from 'luxon' import { obj, num, jsdate, custom, bareint } from '../checks/BootChecks.ts' import * as CO from './internal.ts' export { timestamp, timecode } from './PrimshapeChecks.ts' // *********************************************************************** // // Time Types // // // Note that there are 1000 milliseconds and 1024 bits ; it is a nanosecond timestamp // // *********************************************************************** // // Time Types // export function isDuration(val: any): val is Duration { return val instanceof Duration } export const isodur_str = CO.trimmed.max(CO.ISODUR.max).regex(CO.ISODUR.re, CO.ISODUR.msg) export const duration = custom<Duration>(isDuration, 'ISO Duration') export const duration2obj = duration.transform((dur) => dur.toObject()) export const duration2str = duration.transform((dur) => dur.toISO()!) export const isodur = isodur_str.or(duration) export const isotime = CO.trimmed.max(CO.ISO.max).regex(CO.ISO.re, CO.ISO.msg) export const isodate = CO.trimmed.max(CO.ISO.max).regex(CO.ISO_YMD.re, CO.ISO_YMD.msg) export const iso = isotime export const isonearfut = CO.trimmed.max(CO.ISO_NEARFUT.max).regex(CO.ISO_NEARFUT.re, CO.ISO_NEARFUT.msg) export const isonowish = CO.trimmed.max(CO.ISO_NOWISH.max).regex(CO.ISO_NOWISH.re, CO.ISO_NOWISH.msg) export const isoymdhms = CO.trimmed.max(CO.ISO_YMDHMS.max).regex(CO.ISO_YMDHMS.re, CO.ISO_YMDHMS.msg) export const isoymd = CO.trimmed.max(CO.ISO_YMD.max).regex(CO.ISO_YMD.re, CO.ISO_YMD.msg) export const neartc = CO.lower.length(CO.NEARTC.len).regex(CO.NEARTC.re, { message: CO.NEARTC.msg }).describe('Near Timecode') export const nearfuttc = CO.lower.length(CO.NEARFUTTC.len).regex(CO.NEARFUTTC.re, { message: CO.NEARFUTTC.msg }).describe('Near Future Timecode') export const nearts = num.int().gte(CO.NEARTS.min, CO.NEARTS.min_msg).lte(CO.NEARTS.max, CO.NEARTS.max_msg).describe('Near Timestamp') export const nearfutts = num.int().gte(CO.NEARFUTTS.min, CO.NEARFUTTS.min_msg).lte(CO.NEARFUTTS.max, CO.NEARFUTTS.max_msg).describe('Near Future Timestamp') export const nearpastts = num.int().gte(CO.NEARPASTTS.gt).lte(CO.NEARPASTTS.lt) export const monthnum = bareint.min(1).max(12) export const monthday = bareint.min(1).max(31) export const hrutc = bareint.min(0).max(23) export const minutc = bareint.min(0).max(59) export const secutc = bareint.min(0).max(59) // disallowing 60 (leap seconds) as most other systems will barf export const nearyear = bareint.min(2025).max(2050) export type HrUTC = number export type MinUTC = number export type SecUTC = number // export function isLuxontime(val: any): val is DateTime { return (!! (val as DateTime)?.isValid) } export const luxontime = custom<DateTime>(isLuxontime, 'Luxon Time') export const loosetime = isotime.or(isodate).or(jsdate).or(luxontime).describe('dateish') export type LooseTime = DateTime | Date | string | number // export const timevals = obj({ ts: CO.timestamp, tc: CO.timecode, iso: isotime }) // export const crTC = CO.timecode; export const rqTC = CO.timecode export const upTC = CO.timecode; export const expiresTC = CO.timecode export const tkvTC = CO.timecode; export const refreshedTC = CO.timecode export const crTS = CO.timestamp; export const rqTS = CO.timestamp export const upTS = CO.timestamp; export const expiresTS = CO.timestamp export const tkvTS = CO.timestamp; export const refreshedTS = CO.timestamp export const crDT = loosetime; export const rqDT = loosetime export const upDT = loosetime; export const expiresDT = loosetime export const tkvDT = loosetime; export const refreshedDT = loosetime export const crISO = iso; export const rqISO = iso export const upISO = iso; export const expiresISO = iso export const tkvISO = iso; export const refreshedISO = iso // export const years = num.min(CO.YEARS.min).max(CO.YEARS.max) export const quarters = num.min(CO.QUARTERS.min).max(CO.QUARTERS.max) export const months = num.min(CO.MONTHS.min).max(CO.MONTHS.max) export const weeks = num.min(CO.WEEKS.min).max(CO.WEEKS.max) export const days = num.min(CO.DAYS.min).max(CO.DAYS.max) export const hours = num.min(CO.HOURS.min).max(CO.HOURS.max) export const minutes = num.min(CO.MINUTES.min).max(CO.MINUTES.max) export const seconds = num.min(CO.SECONDS.min).max(CO.SECONDS.max) export const millis = num.min(CO.MILLIS.min).max(CO.MILLIS.max)