chrono-node
Advanced tools
Comparing version 2.2.7 to 2.3.0
@@ -1,3 +0,3 @@ | ||
import { ParsingComponents, ParsingResult } from "./results"; | ||
import { Component, ParsedResult, ParsingOption } from "./index"; | ||
import { ReferenceWithTimezone, ParsingComponents, ParsingResult } from "./results"; | ||
import { Component, ParsedResult, ParsingOption, ParsingReference } from "./index"; | ||
import { AsyncDebugBlock, DebugHandler } from "./debugging"; | ||
@@ -22,4 +22,4 @@ export interface Configuration { | ||
clone(): Chrono; | ||
parseDate(text: string, referenceDate?: Date, option?: ParsingOption): Date | null; | ||
parse(text: string, referenceDate?: Date, option?: ParsingOption): ParsedResult[]; | ||
parseDate(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): Date | null; | ||
parse(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): ParsedResult[]; | ||
private static executeParser; | ||
@@ -29,5 +29,6 @@ } | ||
readonly text: string; | ||
readonly option: ParsingOption; | ||
readonly reference: ReferenceWithTimezone; | ||
readonly refDate: Date; | ||
readonly option: ParsingOption; | ||
constructor(text: string, refDate: Date, option: ParsingOption); | ||
constructor(text: string, refDate?: ParsingReference | Date, option?: ParsingOption); | ||
createParsingComponents(components?: { | ||
@@ -34,0 +35,0 @@ [c in Component]?: number; |
@@ -23,3 +23,3 @@ "use strict"; | ||
parse(text, referenceDate, option) { | ||
const context = new ParsingContext(text, referenceDate || new Date(), option || {}); | ||
const context = new ParsingContext(text, referenceDate, option); | ||
let results = []; | ||
@@ -76,4 +76,5 @@ this.parsers.forEach((parser) => { | ||
this.text = text; | ||
this.refDate = refDate; | ||
this.option = option; | ||
this.reference = new results_1.ReferenceWithTimezone(refDate); | ||
this.option = option !== null && option !== void 0 ? option : {}; | ||
this.refDate = this.reference.instant; | ||
} | ||
@@ -84,3 +85,3 @@ createParsingComponents(components) { | ||
} | ||
return new results_1.ParsingComponents(this.refDate, components); | ||
return new results_1.ParsingComponents(this.reference, components); | ||
} | ||
@@ -91,3 +92,3 @@ createParsingResult(index, textOrEndIndex, startComponents, endComponents) { | ||
const end = endComponents ? this.createParsingComponents(endComponents) : null; | ||
return new results_1.ParsingResult(this.refDate, index, text, start, end); | ||
return new results_1.ParsingResult(this.reference, index, text, start, end); | ||
} | ||
@@ -94,0 +95,0 @@ debug(block) { |
@@ -1,6 +0,6 @@ | ||
import { ParsingComponents } from "../results"; | ||
export declare function now(refDate: Date): ParsingComponents; | ||
export declare function today(refDate: Date): ParsingComponents; | ||
export declare function yesterday(refDate: Date): ParsingComponents; | ||
export declare function tomorrow(refDate: Date): ParsingComponents; | ||
export declare function tonight(refDate: Date, implyHour?: number): ParsingComponents; | ||
import { ParsingComponents, ReferenceWithTimezone } from "../results"; | ||
export declare function now(reference: ReferenceWithTimezone): ParsingComponents; | ||
export declare function today(reference: ReferenceWithTimezone): ParsingComponents; | ||
export declare function yesterday(reference: ReferenceWithTimezone): ParsingComponents; | ||
export declare function tomorrow(reference: ReferenceWithTimezone): ParsingComponents; | ||
export declare function tonight(reference: ReferenceWithTimezone, implyHour?: number): ParsingComponents; |
@@ -11,13 +11,14 @@ "use strict"; | ||
const index_1 = require("../index"); | ||
function now(refDate) { | ||
const targetDate = dayjs_1.default(refDate); | ||
const component = new results_1.ParsingComponents(refDate, {}); | ||
function now(reference) { | ||
const targetDate = dayjs_1.default(reference.instant); | ||
const component = new results_1.ParsingComponents(reference, {}); | ||
dayjs_2.assignSimilarDate(component, targetDate); | ||
dayjs_2.assignSimilarTime(component, targetDate); | ||
component.assign("timezoneOffset", targetDate.utcOffset()); | ||
return component; | ||
} | ||
exports.now = now; | ||
function today(refDate) { | ||
const targetDate = dayjs_1.default(refDate); | ||
const component = new results_1.ParsingComponents(refDate, {}); | ||
function today(reference) { | ||
const targetDate = dayjs_1.default(reference.instant); | ||
const component = new results_1.ParsingComponents(reference, {}); | ||
dayjs_2.assignSimilarDate(component, targetDate); | ||
@@ -28,5 +29,5 @@ dayjs_2.implySimilarTime(component, targetDate); | ||
exports.today = today; | ||
function yesterday(refDate) { | ||
let targetDate = dayjs_1.default(refDate); | ||
const component = new results_1.ParsingComponents(refDate, {}); | ||
function yesterday(reference) { | ||
let targetDate = dayjs_1.default(reference.instant); | ||
const component = new results_1.ParsingComponents(reference, {}); | ||
targetDate = targetDate.add(-1, "day"); | ||
@@ -38,5 +39,5 @@ dayjs_2.assignSimilarDate(component, targetDate); | ||
exports.yesterday = yesterday; | ||
function tomorrow(refDate) { | ||
const targetDate = dayjs_1.default(refDate); | ||
const component = new results_1.ParsingComponents(refDate, {}); | ||
function tomorrow(reference) { | ||
const targetDate = dayjs_1.default(reference.instant); | ||
const component = new results_1.ParsingComponents(reference, {}); | ||
dayjs_2.assignTheNextDay(component, targetDate); | ||
@@ -46,5 +47,5 @@ return component; | ||
exports.tomorrow = tomorrow; | ||
function tonight(refDate, implyHour = 22) { | ||
const targetDate = dayjs_1.default(refDate); | ||
const component = new results_1.ParsingComponents(refDate, {}); | ||
function tonight(reference, implyHour = 22) { | ||
const targetDate = dayjs_1.default(reference.instant); | ||
const component = new results_1.ParsingComponents(reference, {}); | ||
component.imply("hour", implyHour); | ||
@@ -51,0 +52,0 @@ component.imply("meridiem", index_1.Meridiem.PM); |
@@ -7,5 +7,9 @@ import * as en from "./locales/en"; | ||
timezones?: { | ||
string: number; | ||
[tzKeyword: string]: number; | ||
}; | ||
} | ||
export interface ParsingReference { | ||
instant?: Date; | ||
timezone?: string | number; | ||
} | ||
export interface ParsedResult { | ||
@@ -37,3 +41,3 @@ readonly refDate: Date; | ||
export declare const casual: Chrono; | ||
export declare function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[]; | ||
export declare function parseDate(text: string, ref?: Date, option?: ParsingOption): Date; | ||
export declare function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[]; | ||
export declare function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date; |
@@ -46,6 +46,6 @@ "use strict"; | ||
case "jetzt": | ||
component = references.now(context.refDate); | ||
component = references.now(context.reference); | ||
break; | ||
case "heute": | ||
component = references.today(context.refDate); | ||
component = references.today(context.reference); | ||
break; | ||
@@ -52,0 +52,0 @@ case "morgen": |
@@ -40,13 +40,13 @@ "use strict"; | ||
case "now": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "today": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "yesterday": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
case "tomorrow": | ||
case "tmr": | ||
case "tmrw": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "tonight": | ||
return references.tonight(context.refDate); | ||
return references.tonight(context.reference); | ||
default: | ||
@@ -53,0 +53,0 @@ if (lowerText.match(/last\s*night/)) { |
@@ -25,3 +25,3 @@ "use strict"; | ||
timeUnits[timeunit] = 1; | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
@@ -31,3 +31,3 @@ if (modifier == "last" || modifier == "past") { | ||
timeUnits[timeunit] = -1; | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
@@ -34,0 +34,0 @@ const components = context.createParsingComponents(); |
@@ -20,5 +20,5 @@ "use strict"; | ||
const outputTimeUnits = timeunits_1.reverseTimeUnits(timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, outputTimeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, outputTimeUnits); | ||
} | ||
} | ||
exports.default = ENTimeUnitAgoFormatParser; |
@@ -22,5 +22,5 @@ "use strict"; | ||
} | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} | ||
exports.default = ENTimeUnitCasualRelativeFormatParser; |
@@ -19,5 +19,5 @@ "use strict"; | ||
const fragments = constants_1.parseTimeUnits(match[GROUP_NUM_TIMEUNITS]); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, fragments); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, fragments); | ||
} | ||
} | ||
exports.default = ENTimeUnitLaterFormatParser; |
@@ -15,5 +15,5 @@ "use strict"; | ||
const timeUnits = constants_1.parseTimeUnits(match[1]); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} | ||
exports.default = ENTimeUnitWithinFormatParser; |
@@ -40,9 +40,9 @@ "use strict"; | ||
case "maintenant": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "aujourd'hui": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "hier": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
case "demain": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
default: | ||
@@ -49,0 +49,0 @@ if (lowerText.match(/cette\s*nuit/)) { |
@@ -17,5 +17,5 @@ "use strict"; | ||
const outputTimeUnits = timeunits_1.reverseTimeUnits(timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, outputTimeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, outputTimeUnits); | ||
} | ||
} | ||
exports.default = FRTimeUnitAgoFormatParser; |
@@ -32,5 +32,5 @@ "use strict"; | ||
} | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} | ||
exports.default = FRTimeUnitAgoFormatParser; |
@@ -12,5 +12,5 @@ "use strict"; | ||
const timeUnits = constants_1.parseTimeUnits(match[1]); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} | ||
exports.default = FRTimeUnitWithinFormatParser; |
@@ -39,8 +39,8 @@ "use strict"; | ||
case "昨日": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
case "明日": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "今日": | ||
case "当日": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
} | ||
@@ -47,0 +47,0 @@ if (text == "今夜" || text == "今夕" || text == "今晩") { |
@@ -33,10 +33,10 @@ "use strict"; | ||
case "nu": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "vandaag": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "morgen": | ||
case "morgend": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "gisteren": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
} | ||
@@ -43,0 +43,0 @@ return component; |
@@ -12,5 +12,5 @@ "use strict"; | ||
const timeUnits = constants_1.parseTimeUnits(match[1]); | ||
return results_1.ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return results_1.ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} | ||
exports.default = NLTimeUnitWithinFormatParser; |
@@ -33,10 +33,10 @@ "use strict"; | ||
case "agora": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "hoje": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "amanha": | ||
case "amanhã": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "ontem": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
} | ||
@@ -43,0 +43,0 @@ return component; |
@@ -1,7 +0,13 @@ | ||
import { Component, ParsedComponents, ParsedResult } from "./index"; | ||
import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index"; | ||
import dayjs, { OpUnitType, QUnitType } from "dayjs"; | ||
export declare class ReferenceWithTimezone { | ||
readonly instant: Date; | ||
readonly timezoneOffset: number; | ||
constructor(input?: ParsingReference | Date); | ||
} | ||
export declare class ParsingComponents implements ParsedComponents { | ||
private knownValues; | ||
private impliedValues; | ||
constructor(refDate: Date, knownComponents?: { | ||
private reference; | ||
constructor(reference: ReferenceWithTimezone, knownComponents?: { | ||
[c in Component]?: number; | ||
@@ -25,4 +31,4 @@ }); | ||
private dateWithoutTimezoneAdjustment; | ||
private getTimezoneAdjustmentMinute; | ||
static createRelativeFromRefDate(refDate: Date, fragments: { | ||
private getSystemTimezoneAdjustmentMinute; | ||
static createRelativeFromRefInstant(refInstant: Date, fragments: { | ||
[c in OpUnitType | QUnitType]?: number; | ||
@@ -35,5 +41,6 @@ }): ParsingComponents; | ||
text: string; | ||
reference: ReferenceWithTimezone; | ||
start: ParsingComponents; | ||
end?: ParsingComponents; | ||
constructor(refDate: Date, index: number, text: string, start?: ParsingComponents, end?: ParsingComponents); | ||
constructor(reference: ReferenceWithTimezone, index: number, text: string, start?: ParsingComponents, end?: ParsingComponents); | ||
clone(): ParsingResult; | ||
@@ -40,0 +47,0 @@ date(): Date; |
@@ -6,9 +6,26 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ParsingResult = exports.ParsingComponents = void 0; | ||
exports.ParsingResult = exports.ParsingComponents = exports.ReferenceWithTimezone = void 0; | ||
const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear")); | ||
const dayjs_1 = __importDefault(require("dayjs")); | ||
const dayjs_2 = require("./utils/dayjs"); | ||
const timezone_1 = require("./timezone"); | ||
dayjs_1.default.extend(quarterOfYear_1.default); | ||
class ReferenceWithTimezone { | ||
constructor(input) { | ||
var _a, _b; | ||
input = input !== null && input !== void 0 ? input : new Date(); | ||
if (input instanceof Date) { | ||
this.instant = input; | ||
this.timezoneOffset = -input.getTimezoneOffset(); | ||
} | ||
else { | ||
this.instant = (_a = input.instant) !== null && _a !== void 0 ? _a : new Date(); | ||
this.timezoneOffset = timezone_1.toTimezoneOffset((_b = input.timezone) !== null && _b !== void 0 ? _b : -this.instant.getTimezoneOffset()); | ||
} | ||
} | ||
} | ||
exports.ReferenceWithTimezone = ReferenceWithTimezone; | ||
class ParsingComponents { | ||
constructor(refDate, knownComponents) { | ||
constructor(reference, knownComponents) { | ||
this.reference = reference; | ||
this.knownValues = {}; | ||
@@ -21,3 +38,3 @@ this.impliedValues = {}; | ||
} | ||
const refDayJs = dayjs_1.default(refDate); | ||
const refDayJs = dayjs_1.default(reference.instant); | ||
this.imply("day", refDayJs.date()); | ||
@@ -63,3 +80,3 @@ this.imply("month", refDayJs.month() + 1); | ||
clone() { | ||
const component = new ParsingComponents(new Date()); | ||
const component = new ParsingComponents(this.reference); | ||
component.knownValues = {}; | ||
@@ -88,3 +105,3 @@ component.impliedValues = {}; | ||
isValidDate() { | ||
const date = this.isCertain("timezoneOffset") ? this.dateWithoutTimezoneAdjustment() : this.date(); | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
if (date.getFullYear() !== this.get("year")) | ||
@@ -110,3 +127,3 @@ return false; | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
return new Date(date.getTime() + this.getTimezoneAdjustmentMinute(date) * 60000); | ||
return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute() * 60000); | ||
} | ||
@@ -118,21 +135,23 @@ dateWithoutTimezoneAdjustment() { | ||
} | ||
getTimezoneAdjustmentMinute(date) { | ||
getSystemTimezoneAdjustmentMinute() { | ||
var _a; | ||
date = date !== null && date !== void 0 ? date : new Date(); | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = (_a = this.get("timezoneOffset")) !== null && _a !== void 0 ? _a : currentTimezoneOffset; | ||
const currentTimezoneOffset = -new Date().getTimezoneOffset(); | ||
const targetTimezoneOffset = (_a = this.get("timezoneOffset")) !== null && _a !== void 0 ? _a : this.reference.timezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
static createRelativeFromRefDate(refDate, fragments) { | ||
let date = dayjs_1.default(refDate); | ||
static createRelativeFromRefInstant(refInstant, fragments) { | ||
let date = dayjs_1.default(refInstant); | ||
for (const key in fragments) { | ||
date = date.add(fragments[key], key); | ||
} | ||
const components = new ParsingComponents(refDate); | ||
const reference = new ReferenceWithTimezone(refInstant); | ||
const components = new ParsingComponents(reference); | ||
if (fragments["hour"] || fragments["minute"] || fragments["second"]) { | ||
dayjs_2.assignSimilarTime(components, date); | ||
dayjs_2.assignSimilarDate(components, date); | ||
components.assign("timezoneOffset", -refInstant.getTimezoneOffset()); | ||
} | ||
else { | ||
dayjs_2.implySimilarTime(components, date); | ||
components.imply("timezoneOffset", -refInstant.getTimezoneOffset()); | ||
if (fragments["d"]) { | ||
@@ -168,11 +187,12 @@ components.assign("day", date.date()); | ||
class ParsingResult { | ||
constructor(refDate, index, text, start, end) { | ||
this.refDate = refDate; | ||
constructor(reference, index, text, start, end) { | ||
this.reference = reference; | ||
this.refDate = reference.instant; | ||
this.index = index; | ||
this.text = text; | ||
this.start = start || new ParsingComponents(this.refDate); | ||
this.start = start || new ParsingComponents(reference); | ||
this.end = end; | ||
} | ||
clone() { | ||
const result = new ParsingResult(this.refDate, this.index, this.text); | ||
const result = new ParsingResult(this.reference, this.index, this.text); | ||
result.start = this.start ? this.start.clone() : null; | ||
@@ -179,0 +199,0 @@ result.end = this.end ? this.end.clone() : null; |
@@ -21,3 +21,2 @@ "use strict"; | ||
component.assign("millisecond", targetDayJs.millisecond()); | ||
component.assign("timezoneOffset", targetDayJs.utcOffset()); | ||
} | ||
@@ -30,4 +29,3 @@ exports.assignSimilarTime = assignSimilarTime; | ||
component.imply("millisecond", targetDayJs.millisecond()); | ||
component.imply("timezoneOffset", targetDayJs.utcOffset()); | ||
} | ||
exports.implySimilarTime = implySimilarTime; |
@@ -18,3 +18,3 @@ { | ||
"license": "MIT", | ||
"version": "2.2.7", | ||
"version": "2.3.0", | ||
"directories": { | ||
@@ -37,4 +37,4 @@ "source": "./src", | ||
"ts-jest": "^26.1.1", | ||
"typedoc": "^0.20.25", | ||
"typescript": "^4.1.3" | ||
"typedoc": "^0.20.36", | ||
"typescript": "~4.2.4" | ||
}, | ||
@@ -41,0 +41,0 @@ "husky": { |
@@ -69,19 +69,35 @@ # Chrono (v2) | ||
```typescript | ||
parse(text: string, refDate?: Date, option?: ParsingOption): ParsedResult[] {...} | ||
parse(text: string, ref?: ParsingReference, option?: ParsingOption): ParsedResult[] {...} | ||
``` | ||
#### Reference Date | ||
#### Parsing Reference (Date / Timezone) | ||
Today's "Friday" is different from last month's "Friday". | ||
The meaning of the referenced dates depends on when they are mentioned. | ||
Chrono lets you define a reference date using `chrono.parse(text, ref)` and `chrono.parseDate(text, ref)`. | ||
The meaning of the referenced dates depends on when and where they are mentioned. | ||
Chrono lets you define the reference as `Date` or `ParsingReference` object: | ||
```javascript | ||
chrono.parseDate('Friday', new Date(2012, 7, 23)); | ||
// Fri Aug 24 2012 12:00:00 GMT+0700 (ICT) | ||
// (Note: the exmaples run on JST timezone) | ||
chrono.parseDate('Friday', new Date(2012, 7, 1)); | ||
// Fri Aug 03 2012 12:00:00 GMT+0700 (ICT) | ||
chrono.parseDate('Friday', new Date(2012, 8 - 1, 23)); | ||
// Fri Aug 24 2012 12:00:00 GMT+0900 (JST) | ||
chrono.parseDate('Friday', new Date(2012, 8 - 1, 1)); | ||
// Fri Aug 03 2012 12:00:00 GMT+0900 (JST) | ||
chrono.parseDate("Friday at 4pm", { | ||
// Wed Jun 09 2021 21:00:00 GMT+0900 (JST) | ||
// = Wed Jun 09 2021 07:00:00 GMT-0500 (CDT) | ||
instant: new Date(1623240000000), | ||
timezone: "CDT", | ||
}) | ||
// Sat Jun 12 2021 06:00:00 GMT+0900 (JST) | ||
// = Fri Jun 11 2021 16:00:00 GMT-0500 (CDT) | ||
``` | ||
#### ParsingReference | ||
* `instance?: Date` The instant when the input is written or mentioned | ||
* `timezone?: string | number` The timezone where the input is written or mentioned. | ||
Support minute-offset (number) and timezone name (e.g. "GMT", "CDT") | ||
### Parsing Options | ||
@@ -88,0 +104,0 @@ |
@@ -1,3 +0,3 @@ | ||
import { ParsingComponents, ParsingResult } from "./results"; | ||
import { Component, ParsedResult, ParsingOption } from "./index"; | ||
import { ReferenceWithTimezone, ParsingComponents, ParsingResult } from "./results"; | ||
import { Component, ParsedResult, ParsingOption, ParsingReference } from "./index"; | ||
import { AsyncDebugBlock, DebugHandler } from "./debugging"; | ||
@@ -71,3 +71,3 @@ import { createCasualConfiguration } from "./locales/en"; | ||
*/ | ||
parseDate(text: string, referenceDate?: Date, option?: ParsingOption): Date | null { | ||
parseDate(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): Date | null { | ||
const results = this.parse(text, referenceDate, option); | ||
@@ -77,4 +77,4 @@ return results.length > 0 ? results[0].start.date() : null; | ||
parse(text: string, referenceDate?: Date, option?: ParsingOption): ParsedResult[] { | ||
const context = new ParsingContext(text, referenceDate || new Date(), option || {}); | ||
parse(text: string, referenceDate?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] { | ||
const context = new ParsingContext(text, referenceDate, option); | ||
@@ -141,4 +141,17 @@ let results = []; | ||
export class ParsingContext implements DebugHandler { | ||
constructor(readonly text: string, readonly refDate: Date, readonly option: ParsingOption) {} | ||
readonly text: string; | ||
readonly option: ParsingOption; | ||
readonly reference: ReferenceWithTimezone; | ||
// Deprecated. Use reference.instant instead. | ||
readonly refDate: Date; | ||
constructor(text: string, refDate?: ParsingReference | Date, option?: ParsingOption) { | ||
this.text = text; | ||
this.reference = new ReferenceWithTimezone(refDate); | ||
this.option = option ?? {}; | ||
this.refDate = this.reference.instant; | ||
} | ||
createParsingComponents(components?: { [c in Component]?: number } | ParsingComponents): ParsingComponents { | ||
@@ -149,3 +162,3 @@ if (components instanceof ParsingComponents) { | ||
return new ParsingComponents(this.refDate, components); | ||
return new ParsingComponents(this.reference, components); | ||
} | ||
@@ -164,3 +177,3 @@ | ||
return new ParsingResult(this.refDate, index, text, start, end); | ||
return new ParsingResult(this.reference, index, text, start, end); | ||
} | ||
@@ -167,0 +180,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { ParsingComponents } from "../results"; | ||
import { ParsingComponents, ReferenceWithTimezone } from "../results"; | ||
import dayjs from "dayjs"; | ||
@@ -6,13 +6,14 @@ import { assignSimilarDate, assignSimilarTime, assignTheNextDay, implySimilarTime } from "../utils/dayjs"; | ||
export function now(refDate: Date): ParsingComponents { | ||
const targetDate = dayjs(refDate); | ||
const component = new ParsingComponents(refDate, {}); | ||
export function now(reference: ReferenceWithTimezone): ParsingComponents { | ||
const targetDate = dayjs(reference.instant); | ||
const component = new ParsingComponents(reference, {}); | ||
assignSimilarDate(component, targetDate); | ||
assignSimilarTime(component, targetDate); | ||
component.assign("timezoneOffset", targetDate.utcOffset()); | ||
return component; | ||
} | ||
export function today(refDate: Date): ParsingComponents { | ||
const targetDate = dayjs(refDate); | ||
const component = new ParsingComponents(refDate, {}); | ||
export function today(reference: ReferenceWithTimezone): ParsingComponents { | ||
const targetDate = dayjs(reference.instant); | ||
const component = new ParsingComponents(reference, {}); | ||
assignSimilarDate(component, targetDate); | ||
@@ -25,7 +26,6 @@ implySimilarTime(component, targetDate); | ||
* The previous day. Imply the same time. | ||
* @param refDate | ||
*/ | ||
export function yesterday(refDate: Date): ParsingComponents { | ||
let targetDate = dayjs(refDate); | ||
const component = new ParsingComponents(refDate, {}); | ||
export function yesterday(reference: ReferenceWithTimezone): ParsingComponents { | ||
let targetDate = dayjs(reference.instant); | ||
const component = new ParsingComponents(reference, {}); | ||
targetDate = targetDate.add(-1, "day"); | ||
@@ -39,7 +39,6 @@ assignSimilarDate(component, targetDate); | ||
* The following day with dayjs.assignTheNextDay() | ||
* @param refDate | ||
*/ | ||
export function tomorrow(refDate: Date): ParsingComponents { | ||
const targetDate = dayjs(refDate); | ||
const component = new ParsingComponents(refDate, {}); | ||
export function tomorrow(reference: ReferenceWithTimezone): ParsingComponents { | ||
const targetDate = dayjs(reference.instant); | ||
const component = new ParsingComponents(reference, {}); | ||
assignTheNextDay(component, targetDate); | ||
@@ -49,5 +48,5 @@ return component; | ||
export function tonight(refDate: Date, implyHour = 22): ParsingComponents { | ||
const targetDate = dayjs(refDate); | ||
const component = new ParsingComponents(refDate, {}); | ||
export function tonight(reference: ReferenceWithTimezone, implyHour = 22): ParsingComponents { | ||
const targetDate = dayjs(reference.instant); | ||
const component = new ParsingComponents(reference, {}); | ||
component.imply("hour", implyHour); | ||
@@ -54,0 +53,0 @@ component.imply("meridiem", Meridiem.PM); |
@@ -17,3 +17,3 @@ import { DebugHandler, DebugConsume } from "./debugging"; | ||
*/ | ||
timezones?: { string: number }; | ||
timezones?: { [tzKeyword: string]: number }; | ||
@@ -27,2 +27,18 @@ /** | ||
export interface ParsingReference { | ||
/** | ||
* Reference date. The instant (JavaScript Date object) when the input is written or mention. | ||
* This effect date/time implication (e.g. weekday or time mentioning). | ||
* (default = now) | ||
*/ | ||
instant?: Date; | ||
/** | ||
* Reference timezone. The timezone where the input is written or mention. | ||
* Date/time implication will account the difference between input timezone and the current system timezone. | ||
* (default = current timezone) | ||
*/ | ||
timezone?: string | number; | ||
} | ||
/** | ||
@@ -109,3 +125,3 @@ * Parsed result or final output. | ||
*/ | ||
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] { | ||
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] { | ||
return casual.parse(text, ref, option); | ||
@@ -117,4 +133,4 @@ } | ||
*/ | ||
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date { | ||
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date { | ||
return casual.parseDate(text, ref, option); | ||
} |
@@ -32,7 +32,7 @@ import { ParsingContext } from "../../../chrono"; | ||
case "jetzt": | ||
component = references.now(context.refDate); | ||
component = references.now(context.reference); | ||
break; | ||
case "heute": | ||
component = references.today(context.refDate); | ||
component = references.today(context.reference); | ||
break; | ||
@@ -39,0 +39,0 @@ |
@@ -22,9 +22,9 @@ import { ParsingContext } from "../../../chrono"; | ||
case "now": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "today": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "yesterday": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
@@ -34,6 +34,6 @@ case "tomorrow": | ||
case "tmrw": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "tonight": | ||
return references.tonight(context.refDate); | ||
return references.tonight(context.reference); | ||
@@ -40,0 +40,0 @@ default: |
@@ -29,3 +29,3 @@ import { TIME_UNIT_DICTIONARY } from "../constants"; | ||
timeUnits[timeunit] = 1; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
@@ -36,3 +36,3 @@ | ||
timeUnits[timeunit] = -1; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
@@ -39,0 +39,0 @@ |
@@ -24,4 +24,4 @@ import { ParsingContext } from "../../../chrono"; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, outputTimeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, outputTimeUnits); | ||
} | ||
} |
@@ -25,4 +25,4 @@ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants"; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} |
@@ -25,4 +25,4 @@ import { ParsingContext } from "../../../chrono"; | ||
const fragments = parseTimeUnits(match[GROUP_NUM_TIMEUNITS]); | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, fragments); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, fragments); | ||
} | ||
} |
@@ -24,4 +24,4 @@ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants"; | ||
const timeUnits = parseTimeUnits(match[1]); | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} |
@@ -21,12 +21,12 @@ import { ParsingContext } from "../../../chrono"; | ||
case "maintenant": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "aujourd'hui": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "hier": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
case "demain": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
@@ -33,0 +33,0 @@ default: |
@@ -20,4 +20,4 @@ import { ParsingContext } from "../../../chrono"; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, outputTimeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, outputTimeUnits); | ||
} | ||
} |
@@ -41,4 +41,4 @@ import { ParsingContext } from "../../../chrono"; | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} |
@@ -13,4 +13,4 @@ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants"; | ||
const timeUnits = parseTimeUnits(match[1]); | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} |
@@ -21,10 +21,10 @@ import { Parser, ParsingContext } from "../../../chrono"; | ||
case "昨日": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
case "明日": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "今日": | ||
case "当日": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
} | ||
@@ -31,0 +31,0 @@ |
@@ -17,13 +17,13 @@ import { ParsingContext } from "../../../chrono"; | ||
case "nu": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "vandaag": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "morgen": | ||
case "morgend": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "gisteren": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
} | ||
@@ -30,0 +30,0 @@ |
@@ -13,4 +13,4 @@ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants"; | ||
const timeUnits = parseTimeUnits(match[1]); | ||
return ParsingComponents.createRelativeFromRefDate(context.refDate, timeUnits); | ||
return ParsingComponents.createRelativeFromRefInstant(context.refDate, timeUnits); | ||
} | ||
} |
@@ -17,13 +17,13 @@ import { ParsingContext } from "../../../chrono"; | ||
case "agora": | ||
return references.now(context.refDate); | ||
return references.now(context.reference); | ||
case "hoje": | ||
return references.today(context.refDate); | ||
return references.today(context.reference); | ||
case "amanha": | ||
case "amanhã": | ||
return references.tomorrow(context.refDate); | ||
return references.tomorrow(context.reference); | ||
case "ontem": | ||
return references.yesterday(context.refDate); | ||
return references.yesterday(context.reference); | ||
} | ||
@@ -30,0 +30,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { Component, ParsedComponents, ParsedResult } from "./index"; | ||
import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index"; | ||
@@ -6,9 +6,28 @@ import quarterOfYear from "dayjs/plugin/quarterOfYear"; | ||
import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "./utils/dayjs"; | ||
import { toTimezoneOffset } from "./timezone"; | ||
dayjs.extend(quarterOfYear); | ||
export class ReferenceWithTimezone { | ||
readonly instant: Date; | ||
readonly timezoneOffset: number; | ||
constructor(input?: ParsingReference | Date) { | ||
input = input ?? new Date(); | ||
if (input instanceof Date) { | ||
this.instant = input; | ||
this.timezoneOffset = -input.getTimezoneOffset(); | ||
} else { | ||
this.instant = input.instant ?? new Date(); | ||
this.timezoneOffset = toTimezoneOffset(input.timezone ?? -this.instant.getTimezoneOffset()); | ||
} | ||
} | ||
} | ||
export class ParsingComponents implements ParsedComponents { | ||
private knownValues: { [c in Component]?: number }; | ||
private impliedValues: { [c in Component]?: number }; | ||
private reference: ReferenceWithTimezone; | ||
constructor(refDate: Date, knownComponents?: { [c in Component]?: number }) { | ||
constructor(reference: ReferenceWithTimezone, knownComponents?: { [c in Component]?: number }) { | ||
this.reference = reference; | ||
this.knownValues = {}; | ||
@@ -22,3 +41,3 @@ this.impliedValues = {}; | ||
const refDayJs = dayjs(refDate); | ||
const refDayJs = dayjs(reference.instant); | ||
this.imply("day", refDayJs.date()); | ||
@@ -73,3 +92,3 @@ this.imply("month", refDayJs.month() + 1); | ||
clone(): ParsingComponents { | ||
const component = new ParsingComponents(new Date()); | ||
const component = new ParsingComponents(this.reference); | ||
component.knownValues = {}; | ||
@@ -106,3 +125,3 @@ component.impliedValues = {}; | ||
isValidDate(): boolean { | ||
const date = this.isCertain("timezoneOffset") ? this.dateWithoutTimezoneAdjustment() : this.date(); | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
@@ -130,3 +149,3 @@ if (date.getFullYear() !== this.get("year")) return false; | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
return new Date(date.getTime() + this.getTimezoneAdjustmentMinute(date) * 60000); | ||
return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute() * 60000); | ||
} | ||
@@ -149,14 +168,14 @@ | ||
private getTimezoneAdjustmentMinute(date?: Date) { | ||
date = date ?? new Date(); | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = this.get("timezoneOffset") ?? currentTimezoneOffset; | ||
private getSystemTimezoneAdjustmentMinute() { | ||
const currentTimezoneOffset = -new Date().getTimezoneOffset(); | ||
const targetTimezoneOffset = this.get("timezoneOffset") ?? this.reference.timezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
static createRelativeFromRefDate( | ||
refDate: Date, | ||
static createRelativeFromRefInstant( | ||
refInstant: Date, | ||
fragments: { [c in OpUnitType | QUnitType]?: number } | ||
): ParsingComponents { | ||
let date = dayjs(refDate); | ||
let date = dayjs(refInstant); | ||
for (const key in fragments) { | ||
@@ -166,8 +185,11 @@ date = date.add(fragments[key as OpUnitType], key as OpUnitType); | ||
const components = new ParsingComponents(refDate); | ||
const reference = new ReferenceWithTimezone(refInstant); | ||
const components = new ParsingComponents(reference); | ||
if (fragments["hour"] || fragments["minute"] || fragments["second"]) { | ||
assignSimilarTime(components, date); | ||
assignSimilarDate(components, date); | ||
components.assign("timezoneOffset", -refInstant.getTimezoneOffset()); | ||
} else { | ||
implySimilarTime(components, date); | ||
components.imply("timezoneOffset", -refInstant.getTimezoneOffset()); | ||
@@ -207,10 +229,19 @@ if (fragments["d"]) { | ||
reference: ReferenceWithTimezone; | ||
start: ParsingComponents; | ||
end?: ParsingComponents; | ||
constructor(refDate: Date, index: number, text: string, start?: ParsingComponents, end?: ParsingComponents) { | ||
this.refDate = refDate; | ||
constructor( | ||
reference: ReferenceWithTimezone, | ||
index: number, | ||
text: string, | ||
start?: ParsingComponents, | ||
end?: ParsingComponents | ||
) { | ||
this.reference = reference; | ||
this.refDate = reference.instant; | ||
this.index = index; | ||
this.text = text; | ||
this.start = start || new ParsingComponents(this.refDate); | ||
this.start = start || new ParsingComponents(reference); | ||
this.end = end; | ||
@@ -220,3 +251,3 @@ } | ||
clone() { | ||
const result = new ParsingResult(this.refDate, this.index, this.text); | ||
const result = new ParsingResult(this.reference, this.index, this.text); | ||
result.start = this.start ? this.start.clone() : null; | ||
@@ -223,0 +254,0 @@ result.end = this.end ? this.end.clone() : null; |
@@ -21,3 +21,2 @@ import { ParsingComponents } from "../results"; | ||
component.assign("millisecond", targetDayJs.millisecond()); | ||
component.assign("timezoneOffset", targetDayJs.utcOffset()); | ||
} | ||
@@ -30,3 +29,2 @@ | ||
component.imply("millisecond", targetDayJs.millisecond()); | ||
component.imply("timezoneOffset", targetDayJs.utcOffset()); | ||
} |
@@ -211,2 +211,24 @@ import * as chrono from "../../src"; | ||
} | ||
{ | ||
const text = "in 10 minutes"; | ||
const result = chrono.parse(text, { instant: refDate, timezone: "BST" })[0] as ParsingResult; | ||
expect(result.text).toBe(text); | ||
result.start.imply("timezoneOffset", 60); | ||
expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)")); | ||
expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100")); | ||
} | ||
{ | ||
const text = "in 10 minutes"; | ||
const result = chrono.parse(text, { instant: refDate, timezone: "JST" })[0] as ParsingResult; | ||
expect(result.text).toBe(text); | ||
result.start.imply("timezoneOffset", 60); | ||
expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)")); | ||
expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100")); | ||
} | ||
}); |
@@ -91,6 +91,9 @@ import * as chrono from "../../src"; | ||
testSingleCase(chrono, "in 3 hours GMT", refDate, (result, text) => { | ||
expect(result.text).toBe("in 3 hours"); | ||
expect(result.start.get("timezoneOffset")).toBe(-refDate.getTimezoneOffset()); | ||
}); | ||
// This test fail when the system/assume timezone is exactly similar to the mentioned timezone | ||
// Temporary disable this test | ||
// testSingleCase(chrono, "in 3 hours GMT", refDate, (result, text) => { | ||
// expect(result.text).toBe("in 3 hours"); | ||
// expect(result.start.get("timezoneOffset")).toBe(-refDate.getTimezoneOffset()); | ||
// }); | ||
}); | ||
@@ -97,0 +100,0 @@ |
@@ -1,6 +0,6 @@ | ||
import { ParsingComponents } from "../src/results"; | ||
import { ParsingComponents, ReferenceWithTimezone } from "../src/results"; | ||
test("Test - Create & manipulate date results", () => { | ||
const refDate = new Date(); | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24 }); | ||
const reference = new ReferenceWithTimezone(new Date()); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24 }); | ||
@@ -35,7 +35,26 @@ expect(components.get("year")).toBe(2014); | ||
test("Test - Calendar checking with implied components", () => { | ||
const reference = new ReferenceWithTimezone(new Date()); | ||
{ | ||
const components = new ParsingComponents(reference, { | ||
"day": 13, | ||
"month": 3, | ||
"year": 2021, | ||
"hour": 14, | ||
"minute": 22, | ||
"second": 14, | ||
"millisecond": 0, | ||
}); | ||
components.imply("timezoneOffset", -300); | ||
expect(components.isValidDate()).toBe(true); | ||
} | ||
}); | ||
test("Test - Calendar Checking", () => { | ||
const refDate = new Date(); | ||
const reference = new ReferenceWithTimezone(new Date()); | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24 }); | ||
expect(components.isValidDate()).toBe(true); | ||
@@ -45,3 +64,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24, hour: 12 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12 }); | ||
expect(components.isValidDate()).toBe(true); | ||
@@ -51,3 +70,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24, hour: 12, minute: 30 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12, minute: 30 }); | ||
expect(components.isValidDate()).toBe(true); | ||
@@ -57,3 +76,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { | ||
const components = new ParsingComponents(reference, { | ||
year: 2014, | ||
@@ -70,3 +89,3 @@ month: 11, | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 13, day: 24 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 13, day: 24 }); | ||
expect(components.isValidDate()).toBe(false); | ||
@@ -76,3 +95,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 32 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 32 }); | ||
expect(components.isValidDate()).toBe(false); | ||
@@ -82,3 +101,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24, hour: 24 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 24 }); | ||
expect(components.isValidDate()).toBe(false); | ||
@@ -88,3 +107,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { year: 2014, month: 11, day: 24, hour: 12, minute: 60 }); | ||
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12, minute: 60 }); | ||
expect(components.isValidDate()).toBe(false); | ||
@@ -94,3 +113,3 @@ } | ||
{ | ||
const components = new ParsingComponents(refDate, { | ||
const components = new ParsingComponents(reference, { | ||
year: 2014, | ||
@@ -97,0 +116,0 @@ month: 11, |
import { BufferedDebugHandler } from "../src/debugging"; | ||
import { en, ParsedResult, ParsingOption } from "../src"; | ||
import { en, ParsedResult, ParsingOption, ParsingReference } from "../src"; | ||
interface ChronoLike { | ||
parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[]; | ||
parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[]; | ||
} | ||
@@ -14,3 +14,3 @@ | ||
text: string, | ||
refDateOrCheckResult?: Date | CheckResult, | ||
refDateOrCheckResult?: ParsingReference | Date | CheckResult, | ||
checkResult?: CheckResult | ||
@@ -21,3 +21,3 @@ ); | ||
text: string, | ||
refDateOrCheckResult?: Date | CheckResult, | ||
refDateOrCheckResult?: ParsingReference | Date | CheckResult, | ||
optionOrCheckResult?: ParsingOption | CheckResult, | ||
@@ -29,3 +29,3 @@ checkResult?: CheckResult | ||
text: string, | ||
refDateOrCheckResult?: Date | CheckResult, | ||
refDateOrCheckResult?: ParsingReference | Date | CheckResult, | ||
optionOrCheckResult?: ParsingOption | CheckResult, | ||
@@ -32,0 +32,0 @@ checkResult?: CheckResult |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1295309
342
25435
302
2