UNPKG

@trap_stevo/timetide

Version:

Master the flow of time with the ultimate solution for precision scheduling, real-time synchronization, and temporal control. Designed for developers who demand flexibility and power, this system blends intuitive time parsing, dynamic countdowns, and pers

156 lines (155 loc) 5.38 kB
"use strict"; function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } var _require = require("luxon"), DateTime = _require.DateTime; var TimeUtilitiesManager = { parseDate: function parseDate(input) { if (input instanceof Date) return input; var now = DateTime.now(); var shortcuts = { "now": now, "today": now.startOf("day"), "tonight": now.set({ hour: 21, minute: 0 }), "end of day": now.endOf("day"), "tomorrow": now.plus({ days: 1 }), "in 3 days": now.plus({ days: 3 }), "next week": now.plus({ weeks: 1 }), "next weekend": now.plus({ weeks: 1 }).set({ weekday: 6 }), "next monday": now.set({ weekday: 1 }).plus({ weeks: 1 }), "next month": now.plus({ months: 1 }).startOf("month"), "next year": now.plus({ years: 1 }).startOf("year") }; var lower = input.toLowerCase(); if (shortcuts[lower]) return shortcuts[lower].toJSDate(); var regex = /^in (\d+(?:\.\d+)?)\s*(ns|ms|s|m|h|d|w|mo|y)$/i; var match = input.match(regex); if (match) { var _match = _slicedToArray(match, 3), value = _match[1], unit = _match[2]; var ms = TimeUtilitiesManager.toMilliseconds("".concat(value).concat(unit)); return new Date(Date.now() + ms); } var parsed = DateTime.fromFormat(input, "MMMM d, yyyy HH:mm", { zone: "local" }); return parsed.isValid ? parsed.toJSDate() : null; }, parseDuration: function parseDuration(input) { var regex = /(\d+(?:\.\d+)?)\s*(ns|ms|s|m|h|d|w|mo|y|dec|cen|gen)/gi; var total = 0, match; var unitMap = { ns: 1 / 1e6, ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000, w: 604800000, mo: 2629800000, y: 31557600000, dec: 315576000000, cen: 3155760000000, gen: 788940000000 }; while ((match = regex.exec(input)) !== null) { var _match2 = match, _match3 = _slicedToArray(_match2, 3), _ = _match3[0], value = _match3[1], unit = _match3[2]; total += parseFloat(value) * (unitMap[unit] || 0); } return total; }, toMilliseconds: function toMilliseconds(input) { return TimeUtilitiesManager.parseDuration(input); }, toSeconds: function toSeconds(input) { return TimeUtilitiesManager.parseDuration(input) / 1000; }, toETA: function toETA(seconds) { return TimeUtilitiesManager.toReadable(seconds * 1000); }, toReadable: function toReadable(ms) { var units = [{ name: "y", ms: 31557600000 }, { name: "mo", ms: 2629800000 }, { name: "w", ms: 604800000 }, { name: "d", ms: 86400000 }, { name: "h", ms: 3600000 }, { name: "m", ms: 60000 }, { name: "s", ms: 1000 }, { name: "ms", ms: 1 }, { name: "ns", ms: 1e-6 }]; var result = "", remaining = ms; for (var _i = 0, _units = units; _i < _units.length; _i++) { var unit = _units[_i]; if (remaining >= unit.ms) { var count = Math.floor(remaining / unit.ms); result += "".concat(count).concat(unit.name, " "); remaining -= count * unit.ms; } } return result.trim() || "0s"; }, isExpired: function isExpired(date) { return new Date(date).getTime() < Date.now(); }, getTimeUntil: function getTimeUntil(date) { return Math.max(new Date(date).getTime() - Date.now(), 0); }, addTime: function addTime(date, dur) { return new Date(new Date(date).getTime() + TimeUtilitiesManager.toMilliseconds(dur)); }, subtractTime: function subtractTime(date, dur) { return new Date(new Date(date).getTime() - TimeUtilitiesManager.toMilliseconds(dur)); } }; module.exports = TimeUtilitiesManager;