UNPKG

@kermank/nldp

Version:

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

145 lines 3.42 kB
import { DateTime } from 'luxon'; import { ParseTrace } from '../utils/debug-trace'; import { ParseComponent } from '../resolver/resolution-engine'; /** * Configuration options for date parsing */ export interface TimeOfDayPreferences { morning: { start: number; end: number; early: { start: number; end: number; }; mid: { start: number; end: number; }; late: { start: number; end: number; }; }; afternoon: { start: number; end: number; early: { start: number; end: number; }; mid: { start: number; end: number; }; late: { start: number; end: number; }; }; evening: { start: number; end: number; early: { start: number; end: number; }; mid: { start: number; end: number; }; late: { start: number; end: number; }; }; night: { start: number; end: number; early: { start: number; end: number; }; mid: { start: number; end: number; }; late: { start: number; end: number; }; }; } export interface DateParsePreferences { referenceDate?: DateTime; timeZone?: string; useLocalTimezone?: boolean; weekStartsOn?: number; timeOfDay?: TimeOfDayPreferences; parser?: { parse: (input: string, prefs: DateParsePreferences) => ParseResult | null; }; debug?: boolean; } /** * Result of a successful date/time parse */ export interface ParseResult { type: 'single' | 'range'; start: DateTime; end?: DateTime; confidence: number; text: string; debugTrace?: ParseTrace; } export interface ParserState { preferences: DateParsePreferences; rules: RuleModule[]; } export interface RuleModule { name: string; patterns: Pattern[]; interpret?: (intermediate: IntermediateParse, prefs: DateParsePreferences) => ParseResult | null; } export interface Pattern { regex: RegExp; parse: (matches: RegExpExecArray, preferences: DateParsePreferences) => ParseComponent | null; } export interface SingleDateResult { type: 'single'; start: DateTime; end?: DateTime; text: string; confidence: number; } export interface DateRangeResult { type: 'range'; start: DateTime; end: DateTime; text: string; confidence: number; } /** * Intermediate parse result before final interpretation */ export interface IntermediateParse { type: 'single' | 'range' | 'absolute' | 'relative' | 'time' | 'ordinal' | 'datetime'; start?: DateTime; end?: DateTime; text?: string; confidence?: number; pattern?: string; captures?: { [key: string]: string; }; tokens?: string[]; } export type DateType = 'absolute' | 'relative' | 'ordinal'; export type RangeType = 'time' | 'timeOfDay' | 'partialMonth' | 'ordinalWeek' | 'fuzzy' | 'relativeWeek'; export interface ParseMetadata { originalText: string; dateType?: DateType; rangeType?: RangeType; modifiers?: string[]; } //# sourceMappingURL=types.d.ts.map