@kermank/nldp
Version:
A modular date/time parser for converting natural language into dates and times
145 lines • 3.42 kB
TypeScript
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