UNPKG

@rareelements/lydia

Version:
94 lines 4.04 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DateUtils = void 0; const moment_timezone_1 = __importDefault(require("moment-timezone")); const rrule = __importStar(require("rrule")); const ParameterType_1 = require("../model/ParameterType"); const PropertyType_1 = require("../model/PropertyType"); const CustomErrors_1 = require("../CustomErrors"); const UTC_SUFFIX = 'Z'; class DateUtils { static enrichDTProperty(rawProperty, defaultTZ) { const { value, params, name } = rawProperty; let timezone; if (!value) throw new CustomErrors_1.ValidationError('Missing value for DT property: ' + JSON.stringify(rawProperty)); if (params && !value.toUpperCase().endsWith(UTC_SUFFIX)) { const tzid = params.filter((p) => p.name === ParameterType_1.ParameterType.TZID); timezone = tzid && tzid.length > 0 ? tzid[0].value : defaultTZ; } const property = { type: name, timezone, value: DateUtils.parseDate(value, timezone) }; return property; } static entrichTSProperty(rawProperty, defaultTZ) { const { value, params, name } = rawProperty; let timezone; if (!value) throw new CustomErrors_1.ValidationError('Missing value for DT property: ' + JSON.stringify(rawProperty)); if (params && !value.toUpperCase().endsWith(UTC_SUFFIX)) { const tzid = params.filter((p) => p.name === ParameterType_1.ParameterType.TZID); timezone = tzid && tzid.length > 0 ? tzid[0].value : defaultTZ; } return { value: DateUtils.parseDate(value, timezone), type: name }; } static createRuleSet({ properties }) { // rrulestr('DTSTART:20120201T023000Z\nRRULE:FREQ=MONTHLY;COUNT=5\nRDATE:20120701T023000Z, // 20120702T023000Z\nEXRULE:FREQ=MONTHLY;COUNT=2\nEXDATE:20120601T023000Z') const rruleConfig = []; let containsRule = false; for (const p of properties) { // console.log(p.name); if (PropertyType_1.RRuleMetaProps.has(p.name)) { rruleConfig.push(p); } if (p.name === PropertyType_1.PropertyType.RRULE) containsRule = true; } if (containsRule) { const serialized = rruleConfig.map((p) => p.name + ':' + p.value).join('\n'); const rruleSet = rrule.rrulestr(serialized); return rruleSet; } return undefined; } // DTEND;TZID=America/New_York:19980119T030000 static parseDate(value, tz) { return tz ? moment_timezone_1.default.tz(value, 'YYYYMMDDTHHmmZZ', tz).toDate() : moment_timezone_1.default(value).toDate(); } static getOccurences(rruleProp, start, end) { const ruleSet = rruleProp.rruleSet; const dates = ruleSet.between(start, end); return dates; } } exports.DateUtils = DateUtils; //# sourceMappingURL=DateUtils.js.map