UNPKG

@kermank/nldp

Version:

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

88 lines 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNLDP = void 0; const parser_engine_1 = require("./parser/parser-engine"); const absolute_dates_1 = require("./rules/absolute-dates"); const date_only_1 = require("./rules/date-only"); const time_only_1 = require("./rules/time-only"); const relative_days_1 = require("./rules/relative-days"); const ordinal_days_1 = require("./rules/ordinal-days"); const partial_month_1 = require("./rules/partial-month"); const ordinal_weeks_1 = require("./rules/ordinal-weeks"); const relative_weeks_1 = require("./rules/relative-weeks"); const fuzzy_ranges_1 = require("./rules/fuzzy-ranges"); const time_ranges_1 = require("./rules/time-ranges"); const time_of_day_1 = require("./rules/time-of-day"); const defaultRules = [ absolute_dates_1.absoluteDatesRule, // ISO dates, YYYY-MM-DD etc date_only_1.dateOnlyRule, // Date parsing time_only_1.timeOnlyRule, // Time expressions time_ranges_1.timeRangesRule, // Time ranges (3 PM to 5 PM) time_of_day_1.timeOfDayRule, // Time of day expressions (morning, afternoon, etc.) relative_days_1.relativeDaysRule, // today, tomorrow, etc ordinal_days_1.ordinalDaysRule, // 1st of March, etc partial_month_1.partialMonthRule, // early/mid/late month ordinal_weeks_1.ordinalWeeksRule, // first week of March relative_weeks_1.relativeWeeksRule, // next week, last week fuzzy_ranges_1.fuzzyRangesRule // beginning of year, etc ]; function componentToResult(component) { var _a, _b; if (!component) return null; // Map component type to ParseResult type const resultType = component.type === 'range' ? 'range' : 'single'; if (component.type === 'range') { const range = component.value; // Preserve original timezone const startZone = range.start.zoneName || 'UTC'; const endZone = range.end.zoneName || 'UTC'; return { type: resultType, confidence: component.confidence, start: range.start.setZone(startZone), end: range.end.setZone(endZone), text: ((_a = component.metadata) === null || _a === void 0 ? void 0 : _a.originalText) || '', debugTrace: component.debugTrace }; } const date = component.value; // Preserve original timezone const zone = date.zoneName || 'UTC'; return { type: resultType, confidence: component.confidence, start: date.setZone(zone), end: undefined, text: ((_b = component.metadata) === null || _b === void 0 ? void 0 : _b.originalText) || '', debugTrace: component.debugTrace }; } const createNLDP = (preferences = {}) => { // If useLocalTimezone is true, set the timeZone to the system's local timezone if (preferences.useLocalTimezone) { preferences.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; } else { preferences.timeZone = preferences.timeZone || 'UTC'; } let state = (0, parser_engine_1.createParserState)(preferences); // Register default rules defaultRules.forEach(rule => { state = (0, parser_engine_1.registerRule)(state, rule); }); return { parse: (input, parsePreferences = {}) => { // Also handle useLocalTimezone in parse calls if (parsePreferences.useLocalTimezone) { parsePreferences.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; } return componentToResult((0, parser_engine_1.parse)(state, input, parsePreferences)); }, registerRule: (rule) => { state = (0, parser_engine_1.registerRule)(state, rule); } }; }; exports.createNLDP = createNLDP; //# sourceMappingURL=nldp.js.map