UNPKG

@kermank/nldp

Version:

A modular date/time parser for converting natural language into dates and times

58 lines 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolvePreferences = resolvePreferences; const luxon_1 = require("luxon"); /** * Apply preferences to a parse result * - Applies timezone * - Handles reference date for relative dates * - Applies time of day preferences if needed */ function resolvePreferences(result, preferences) { const referenceDate = preferences.referenceDate || luxon_1.DateTime.now(); const timeZone = preferences.timeZone || 'UTC'; // Helper to apply timezone and reference date to a DateTime const applyToDateTime = (dt) => { // Ensure we have a valid DateTime object let result = luxon_1.DateTime.isDateTime(dt) ? dt : luxon_1.DateTime.fromJSDate(new Date(dt)); // If date is relative (no year/month/day), use reference date if (!result.isValid || result.year === 1970) { // Only set time components if they exist const timeComponents = {}; if (!isNaN(result.hour)) timeComponents.hour = result.hour; if (!isNaN(result.minute)) timeComponents.minute = result.minute; if (!isNaN(result.second)) timeComponents.second = result.second; result = referenceDate.set(timeComponents); } // For UTC, convert directly to UTC if (timeZone === 'UTC') { result = result.toUTC(); } // For other timezones, preserve wall time else if (!result.zone || result.zone.name !== timeZone) { result = result.setZone(timeZone, { keepLocalTime: true }); } return result; }; // Apply preferences based on result type if (result.type === 'range') { const range = result.value; return { ...result, value: { start: applyToDateTime(range.start), end: applyToDateTime(range.end) } }; } else { return { ...result, value: applyToDateTime(result.value) }; } } //# sourceMappingURL=preference-resolver.js.map