Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

chrono-node

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chrono-node - npm Package Compare versions

Comparing version 2.1.4 to 2.1.5

dist/calculation/weeks.d.ts

6

dist/common/parsers/AbstractTimeExpressionParser.d.ts
import { Parser, ParsingContext } from "../../chrono";
import { ParsingResult } from "../../results";
import { ParsingComponents, ParsingResult } from "../../results";
export declare abstract class AbstractTimeExpressionParser implements Parser {

@@ -10,4 +10,4 @@ abstract primaryPrefix(): string;

extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult;
private static extractStartTimeComponent;
private static extractEndTimeComponent;
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents;
extractFollowingTimeComponents(context: ParsingContext, match: RegExpMatchArray, result: ParsingResult): null | ParsingComponents;
}

@@ -52,10 +52,8 @@ "use strict";

let result = context.createParsingResult(match.index + match[1].length, match[0].substring(match[1].length));
if (result.text.match(/^\d$/)) {
return null;
}
result.start.imply("day", refDate.date());
result.start.imply("month", refDate.month() + 1);
result.start.imply("year", refDate.year());
result = AbstractTimeExpressionParser.extractStartTimeComponent(result.clone(), match);
if (!result) {
result.start = this.extractPrimaryTimeComponents(context, match);
if (!result.start) {
match.index += match[0].length;
return null;

@@ -72,6 +70,12 @@ }

}
const newResult = AbstractTimeExpressionParser.extractEndTimeComponent(result.clone(), match);
return newResult ? newResult : result;
result.end = this.extractFollowingTimeComponents(context, match, result);
if (result.end) {
if (result.end) {
result.text += match[0];
}
}
return result;
}
static extractStartTimeComponent(result, match) {
extractPrimaryTimeComponents(context, match) {
const components = context.createParsingComponents();
let hour = 0;

@@ -91,3 +95,3 @@ let minute = 0;

}
if (hour >= 12) {
if (hour > 12) {
meridiem = index_1.Meridiem.PM;

@@ -112,13 +116,13 @@ }

}
result.start.assign("hour", hour);
result.start.assign("minute", minute);
components.assign("hour", hour);
components.assign("minute", minute);
if (meridiem !== null) {
result.start.assign("meridiem", meridiem);
components.assign("meridiem", meridiem);
}
else {
if (hour < 12) {
result.start.imply("meridiem", index_1.Meridiem.AM);
components.imply("meridiem", index_1.Meridiem.AM);
}
else {
result.start.imply("meridiem", index_1.Meridiem.PM);
components.imply("meridiem", index_1.Meridiem.PM);
}

@@ -130,3 +134,3 @@ }

return null;
result.start.assign("millisecond", millisecond);
components.assign("millisecond", millisecond);
}

@@ -137,8 +141,8 @@ if (match[SECOND_GROUP] != null) {

return null;
result.start.assign("second", second);
components.assign("second", second);
}
return result;
return components;
}
static extractEndTimeComponent(result, match) {
result.end = result.start.clone();
extractFollowingTimeComponents(context, match, result) {
const components = context.createParsingComponents();
if (match[MILLI_SECOND_GROUP] != null) {

@@ -148,3 +152,3 @@ const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));

return null;
result.end.assign("millisecond", millisecond);
components.assign("millisecond", millisecond);
}

@@ -155,3 +159,3 @@ if (match[SECOND_GROUP] != null) {

return null;
result.end.assign("second", second);
components.assign("second", second);
}

@@ -183,4 +187,4 @@ let hour = parseInt(match[HOUR_GROUP]);

hour = 0;
if (!result.end.isCertain("day")) {
result.end.imply("day", result.end.get("day") + 1);
if (!components.isCertain("day")) {
components.imply("day", components.get("day") + 1);
}

@@ -209,23 +213,31 @@ }

}
result.text = result.text + match[0];
result.end.assign("hour", hour);
result.end.assign("minute", minute);
components.assign("hour", hour);
components.assign("minute", minute);
if (meridiem >= 0) {
result.end.assign("meridiem", meridiem);
components.assign("meridiem", meridiem);
}
else {
const startAtPM = result.start.isCertain("meridiem") && result.start.get("meridiem") == index_1.Meridiem.PM;
if (startAtPM && result.start.get("hour") > hour) {
result.end.imply("meridiem", index_1.Meridiem.AM);
const startAtPM = result.start.isCertain("meridiem") && result.start.get("hour") > 12;
if (startAtPM) {
if (result.start.get("hour") - 12 > hour) {
components.imply("meridiem", index_1.Meridiem.AM);
}
else if (hour <= 12) {
components.assign("hour", hour + 12);
components.assign("meridiem", index_1.Meridiem.PM);
}
}
else if (hour > 12) {
result.end.imply("meridiem", index_1.Meridiem.PM);
components.imply("meridiem", index_1.Meridiem.PM);
}
else if (hour <= 12) {
components.imply("meridiem", index_1.Meridiem.AM);
}
}
if (result.end.date().getTime() < result.start.date().getTime()) {
result.end.imply("day", result.end.get("day") + 1);
if (components.date().getTime() < result.start.date().getTime()) {
components.imply("day", components.get("day") + 1);
}
return result;
return components;
}
}
exports.AbstractTimeExpressionParser = AbstractTimeExpressionParser;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const yearCalculation_1 = require("../../calculation/yearCalculation");
const PATTERN = new RegExp("(\\W|^)" +
const years_1 = require("../../calculation/years");
const PATTERN = new RegExp("([^\\d]|^)" +
"([0-3]{0,1}[0-9]{1})[\\/\\.\\-]([0-3]{0,1}[0-9]{1})" +
"(?:" +
"[\\/\\.\\-]" +
"([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)" +
")?" +
"(?:[\\/\\.\\-]([0-9]{4}|[0-9]{2}))?" +
"(\\W|$)", "i");

@@ -30,3 +27,3 @@ const OPENING_GROUP = 1;

const index = match.index + match[OPENING_GROUP].length;
const text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[ENDING_GROUP].length);
const text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[OPENING_GROUP].length - match[ENDING_GROUP].length);
if (text.match(/^\d\.\d$/) || text.match(/^\d\.\d{1,2}\.\d{1,2}\s*$/)) {

@@ -58,7 +55,7 @@ return;

const rawYearNumber = parseInt(match[YEAR_GROUP]);
const year = yearCalculation_1.findMostLikelyADYear(rawYearNumber);
const year = years_1.findMostLikelyADYear(rawYearNumber);
result.start.assign("year", year);
}
else {
const year = yearCalculation_1.findYearClosestToRef(context.refDate, day, month);
const year = years_1.findYearClosestToRef(context.refDate, day, month);
result.start.imply("year", year);

@@ -65,0 +62,0 @@ }

@@ -40,2 +40,8 @@ "use strict";

}
if (result.start.isOnlyTime() && (!result.start.isCertain("hour") || !result.start.isCertain("minute"))) {
context.debug(() => {
console.log(`(Strict) Removing uncertain time component: ${result} (${result.end})`);
});
return false;
}
return true;

@@ -42,0 +48,0 @@ }

@@ -5,3 +5,3 @@ "use strict";

const pattern_1 = require("../../utils/pattern");
const yearCalculation_1 = require("../../calculation/yearCalculation");
const years_1 = require("../../calculation/years");
exports.WEEKDAY_DICTIONARY = {

@@ -195,3 +195,3 @@ sunday: 0,

const rawYearNumber = parseInt(match);
return yearCalculation_1.findMostLikelyADYear(rawYearNumber);
return years_1.findMostLikelyADYear(rawYearNumber);
}

@@ -198,0 +198,0 @@ exports.parseYear = parseYear;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const yearCalculation_1 = require("../../../calculation/yearCalculation");
const years_1 = require("../../../calculation/years");
const constants_1 = require("../constants");

@@ -47,3 +47,3 @@ const constants_2 = require("../constants");

else {
const year = yearCalculation_1.findYearClosestToRef(context.refDate, day, month);
const year = years_1.findYearClosestToRef(context.refDate, day, month);
result.start.imply("year", year);

@@ -50,0 +50,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const yearCalculation_1 = require("../../../calculation/yearCalculation");
const years_1 = require("../../../calculation/years");
const constants_1 = require("../constants");

@@ -44,3 +44,3 @@ const constants_2 = require("../constants");

else {
const year = yearCalculation_1.findYearClosestToRef(context.refDate, day, month);
const year = years_1.findYearClosestToRef(context.refDate, day, month);
components.imply("year", year);

@@ -47,0 +47,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const yearCalculation_1 = require("../../../calculation/yearCalculation");
const years_1 = require("../../../calculation/years");
const pattern_1 = require("../../../utils/pattern");

@@ -34,3 +34,3 @@ const constants_2 = require("../constants");

else {
const year = yearCalculation_1.findYearClosestToRef(context.refDate, 1, month);
const year = years_1.findYearClosestToRef(context.refDate, 1, month);
components.imply("year", year);

@@ -37,0 +37,0 @@ }

@@ -0,1 +1,3 @@

import { ParsingContext } from "../../../chrono";
import { ParsingComponents } from "../../../results";
import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";

@@ -6,2 +8,3 @@ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser {

primarySuffix(): string;
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../../../index");
const AbstractTimeExpressionParser_1 = require("../../../common/parsers/AbstractTimeExpressionParser");

@@ -12,5 +13,32 @@ class ENTimeExpressionParser extends AbstractTimeExpressionParser_1.AbstractTimeExpressionParser {

primarySuffix() {
return "\\s*(?:o\\W*clock)?(?=\\W|$)";
return "(?:\\s*(?:o\\W*clock|at\\s*night|in\\s*the\\s*(?:morning|afternoon)))?(?=\\W|$)";
}
extractPrimaryTimeComponents(context, match) {
const components = super.extractPrimaryTimeComponents(context, match);
if (components) {
if (match[0].endsWith("night")) {
const hour = components.get("hour");
if (hour > 6 && hour < 12) {
components.assign("hour", components.get("hour") + 12);
components.assign("meridiem", index_1.Meridiem.PM);
}
}
if (match[0].endsWith("afternoon")) {
const hour = components.get("hour");
if (hour >= 0 && hour <= 6) {
components.assign("hour", components.get("hour") + 12);
components.assign("meridiem", index_1.Meridiem.PM);
}
}
if (match[0].endsWith("morning")) {
const hour = components.get("hour");
if (hour < 12) {
components.assign("hour", components.get("hour"));
components.assign("meridiem", index_1.Meridiem.AM);
}
}
}
return components;
}
}
exports.default = ENTimeExpressionParser;

@@ -7,3 +7,2 @@ import { ParsingContext } from "../../../chrono";

innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
private extractWeekday;
}
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const dayjs_1 = __importDefault(require("dayjs"));
const pattern_1 = require("../../../utils/pattern");
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
const weeks_1 = require("../../../calculation/weeks");
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" +

@@ -32,6 +29,16 @@ "(?:on\\s*?)?" +

const postfix = match[POSTFIX_GROUP];
let modifier = prefix || postfix;
modifier = modifier || "";
modifier = modifier.toLowerCase();
const date = this.extractWeekday(context.refDate, offset, modifier);
let modifierWord = prefix || postfix;
modifierWord = modifierWord || "";
modifierWord = modifierWord.toLowerCase();
let modifier = null;
if (modifierWord == "last" || modifierWord == "past") {
modifier = "last";
}
else if (modifierWord == "next") {
modifier = "next";
}
else if (modifierWord == "this") {
modifier = "this";
}
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier);
return context

@@ -44,28 +51,3 @@ .createParsingComponents()

}
extractWeekday(refDate, offset, modifier) {
let date = dayjs_1.default(refDate);
const refOffset = date.day();
if (modifier == "last" || modifier == "past") {
date = date.day(offset - 7);
}
else if (modifier == "next") {
date = date.day(offset + 7);
}
else if (modifier == "this") {
date = date.day(offset);
}
else {
if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
date = date.day(offset - 7);
}
else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
date = date.day(offset + 7);
}
else {
date = date.day(offset);
}
}
return date;
}
}
exports.default = ENWeekdayParser;

@@ -16,5 +16,5 @@ import { OpUnitType } from "dayjs";

export declare function parseNumberPattern(match: string): number;
export declare const ORDINAL_NUMBER_PATTERN = "(?:[0-9]{1,2}(?:st|nd|rd|th)?)";
export declare const ORDINAL_NUMBER_PATTERN = "(?:[0-9]{1,2}(?:er)?)";
export declare function parseOrdinalNumberPattern(match: string): number;
export declare const YEAR_PATTERN = "(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])";
export declare const YEAR_PATTERN = "(?:[1-9][0-9]{0,3}\\s*(?:AC|AD|p\\.\\s*C(?:hr?)?\\.\\s*n\\.)|[1-2][0-9]{3}|[5-9][0-9])";
export declare function parseYear(match: string): number;

@@ -21,0 +21,0 @@ export declare const TIME_UNITS_PATTERN: string;

@@ -6,100 +6,93 @@ "use strict";

exports.WEEKDAY_DICTIONARY = {
sunday: 0,
sun: 0,
"sun.": 0,
monday: 1,
mon: 1,
"mon.": 1,
tuesday: 2,
tue: 2,
"tue.": 2,
wednesday: 3,
wed: 3,
"wed.": 3,
thursday: 4,
thurs: 4,
"thurs.": 4,
thur: 4,
"thur.": 4,
thu: 4,
"thu.": 4,
friday: 5,
fri: 5,
"fri.": 5,
saturday: 6,
sat: 6,
"sat.": 6,
"dimanche": 0,
"dim": 0,
"lundi": 1,
"lun": 1,
"mardi": 2,
"mar": 2,
"mercredi": 3,
"mer": 3,
"jeudi": 4,
"jeu": 4,
"vendredi": 5,
"ven": 5,
"samedi": 6,
"sam": 6,
};
exports.MONTH_DICTIONARY = {
january: 1,
jan: 1,
"janvier": 1,
"jan": 1,
"jan.": 1,
february: 2,
feb: 2,
"feb.": 2,
march: 3,
mar: 3,
"février": 2,
"fév": 2,
"fév.": 2,
"fevrier": 2,
"fev": 2,
"fev.": 2,
"mars": 3,
"mar": 3,
"mar.": 3,
april: 4,
apr: 4,
"apr.": 4,
may: 5,
june: 6,
jun: 6,
"jun.": 6,
july: 7,
jul: 7,
"avril": 4,
"avr": 4,
"avr.": 4,
"mai": 5,
"juin": 6,
"jun": 6,
"juillet": 7,
"juil": 7,
"jul": 7,
"jul.": 7,
august: 8,
aug: 8,
"aug.": 8,
september: 9,
sep: 9,
"août": 8,
"aout": 8,
"septembre": 9,
"sep": 9,
"sep.": 9,
sept: 9,
"sept": 9,
"sept.": 9,
october: 10,
oct: 10,
"octobre": 10,
"oct": 10,
"oct.": 10,
november: 11,
nov: 11,
"novembre": 11,
"nov": 11,
"nov.": 11,
december: 12,
dec: 12,
"décembre": 12,
"decembre": 12,
"dec": 12,
"dec.": 12,
};
exports.INTEGER_WORD_DICTIONARY = {
one: 1,
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
ten: 10,
eleven: 11,
twelve: 12,
"un": 1,
"deux": 2,
"trois": 3,
"quatre": 4,
"cinq": 5,
"six": 6,
"sept": 7,
"huit": 8,
"neuf": 9,
"dix": 10,
"onze": 11,
"douze": 12,
"treize": 13,
};
exports.TIME_UNIT_DICTIONARY = {
sec: "second",
seconde: "second",
secondes: "second",
min: "minute",
mins: "minute",
minute: "minute",
minutes: "minute",
h: "hour",
hr: "hour",
hrs: "hour",
heure: "hour",
heures: "hour",
jour: "d",
jours: "d",
semaine: "week",
semaines: "week",
mois: "month",
année: "year",
années: "year",
"sec": "second",
"seconde": "second",
"secondes": "second",
"min": "minute",
"mins": "minute",
"minute": "minute",
"minutes": "minute",
"h": "hour",
"hr": "hour",
"hrs": "hour",
"heure": "hour",
"heures": "hour",
"jour": "d",
"jours": "d",
"semaine": "week",
"semaines": "week",
"mois": "month",
"année": "year",
"années": "year",
};

@@ -124,21 +117,17 @@ exports.NUMBER_PATTERN = `(?:${pattern_1.matchAnyPattern(exports.INTEGER_WORD_DICTIONARY)}|[0-9]+|[0-9]+\\.[0-9]+|half(?:\\s*an?)?|an?(?:\\s*few)?|few)`;

exports.parseNumberPattern = parseNumberPattern;
exports.ORDINAL_NUMBER_PATTERN = `(?:[0-9]{1,2}(?:st|nd|rd|th)?)`;
exports.ORDINAL_NUMBER_PATTERN = `(?:[0-9]{1,2}(?:er)?)`;
function parseOrdinalNumberPattern(match) {
let num = match.toLowerCase();
num = num.replace(/(?:st|nd|rd|th)$/i, "");
num = num.replace(/(?:er)$/i, "");
return parseInt(num);
}
exports.parseOrdinalNumberPattern = parseOrdinalNumberPattern;
exports.YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])`;
exports.YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:AC|AD|p\\.\\s*C(?:hr?)?\\.\\s*n\\.)|[1-2][0-9]{3}|[5-9][0-9])`;
function parseYear(match) {
if (/BE/i.test(match)) {
match = match.replace(/BE/i, "");
return parseInt(match) - 543;
}
if (/BC/i.test(match)) {
if (/AC/i.test(match)) {
match = match.replace(/BC/i, "");
return -parseInt(match);
}
if (/AD/i.test(match)) {
match = match.replace(/AD/i, "");
if (/AD/i.test(match) || /C/i.test(match)) {
match = match.replace(/[^\d]+/i, "");
return parseInt(match);

@@ -145,0 +134,0 @@ }

@@ -15,2 +15,5 @@ "use strict";

const FRMergeDateRangeRefiner_1 = __importDefault(require("./refiners/FRMergeDateRangeRefiner"));
const FRWeekdayParser_1 = __importDefault(require("./parsers/FRWeekdayParser"));
const FRSpecificTimeExpressionParser_1 = __importDefault(require("./parsers/FRSpecificTimeExpressionParser"));
const FRMonthNameLittleEndianParser_1 = __importDefault(require("./parsers/FRMonthNameLittleEndianParser"));
exports.casual = new chrono_1.Chrono(createCasualConfiguration());

@@ -35,3 +38,9 @@ exports.strict = new chrono_1.Chrono(createConfiguration(true));

return configurations_1.includeCommonConfiguration({
parsers: [new SlashDateFormatParser_1.default(littleEndian), new FRTimeExpressionParser_1.default()],
parsers: [
new SlashDateFormatParser_1.default(littleEndian),
new FRMonthNameLittleEndianParser_1.default(),
new FRTimeExpressionParser_1.default(),
new FRSpecificTimeExpressionParser_1.default(),
new FRWeekdayParser_1.default(),
],
refiners: [new FRMergeDateTimeRefiner_1.default(), new FRMergeDateRangeRefiner_1.default()],

@@ -38,0 +47,0 @@ }, strictMode);

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../../../index");
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
class FRCasualTimeParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern(context) {
return /(cet?)?\s*(matin|soir|après-midi|aprem)(?=\W|$)/i;
return /(cet?)?\s*(matin|soir|après-midi|aprem|a midi|à minuit)(?=\W|$)/i;
}

@@ -16,2 +17,3 @@ innerExtract(context, match) {

component.imply("minute", 0);
component.imply("meridiem", index_1.Meridiem.PM);
break;

@@ -21,2 +23,3 @@ case "soir":

component.imply("minute", 0);
component.imply("meridiem", index_1.Meridiem.PM);
break;

@@ -26,3 +29,13 @@ case "matin":

component.imply("minute", 0);
component.imply("meridiem", index_1.Meridiem.AM);
break;
case "a midi":
component.imply("hour", 12);
component.imply("minute", 0);
component.imply("meridiem", index_1.Meridiem.AM);
break;
case "à minuit":
component.imply("hour", 0);
component.imply("meridiem", index_1.Meridiem.AM);
break;
}

@@ -29,0 +42,0 @@ return component;

import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
import { ParsingComponents } from "../../../results";
import { ParsingContext } from "../../../chrono";
export default class FRTimeExpressionParser extends AbstractTimeExpressionParser {
primaryPrefix(): string;
followingPhase(): string;
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | null;
}

@@ -11,3 +11,9 @@ "use strict";

}
extractPrimaryTimeComponents(context, match) {
if (match[0].match(/^\s*\d{4}\s*$/)) {
return null;
}
return super.extractPrimaryTimeComponents(context, match);
}
}
exports.default = FRTimeExpressionParser;

@@ -9,5 +9,5 @@ "use strict";

patternBetween() {
return /^\s*(à|a|\\-)\s*$/i;
return /^\s*(à|a|-)\s*$/i;
}
}
exports.default = FRMergeDateRangeRefiner;

@@ -7,3 +7,3 @@ "use strict";

const constants_1 = require("../constants");
const yearCalculation_1 = require("../../../calculation/yearCalculation");
const years_1 = require("../../../calculation/years");
const dayjs_1 = __importDefault(require("dayjs"));

@@ -47,3 +47,3 @@ const PATTERN = /(?:(?:([同今本])|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\s*)?([0-90-9]{1,2})月\s*([0-90-9]{1,2})日/i;

else {
const year = yearCalculation_1.findYearClosestToRef(context.refDate, day, month);
const year = years_1.findYearClosestToRef(context.refDate, day, month);
components.imply("year", year);

@@ -50,0 +50,0 @@ }

@@ -15,2 +15,3 @@ import { Component, ParsedComponents, ParsedResult } from "./index";

assign(component: Component, value: number): ParsingComponents;
delete(component: Component): void;
clone(): ParsingComponents;

@@ -17,0 +18,0 @@ isOnlyDate(): boolean;

@@ -56,2 +56,6 @@ "use strict";

}
delete(component) {
delete this.knownValues[component];
delete this.impliedValues[component];
}
clone() {

@@ -58,0 +62,0 @@ const component = new ParsingComponents(new Date());

@@ -9,6 +9,4 @@ {

},
"eslintConfig": {
"rules": {
"padding-line-between-statements": "off"
}
"prettier": {
"quoteProps": "preserve"
},

@@ -21,3 +19,3 @@ "jest": {

"license": "MIT",
"version": "2.1.4",
"version": "2.1.5",
"directories": {

@@ -24,0 +22,0 @@ "source": "./src",

import { Parser, ParsingContext } from "../../chrono";
import { ParsingResult } from "../../results";
import { ParsingComponents, ParsingResult } from "../../results";
import { Meridiem } from "../../index";

@@ -65,6 +65,2 @@ import dayjs from "dayjs";

if (result.text.match(/^\d$/)) {
return null;
}
result.start.imply("day", refDate.date());

@@ -74,4 +70,5 @@ result.start.imply("month", refDate.month() + 1);

result = AbstractTimeExpressionParser.extractStartTimeComponent(result.clone(), match);
if (!result) {
result.start = this.extractPrimaryTimeComponents(context, match);
if (!result.start) {
match.index += match[0].length;
return null;

@@ -92,7 +89,14 @@ }

const newResult = AbstractTimeExpressionParser.extractEndTimeComponent(result.clone(), match);
return newResult ? newResult : result;
result.end = this.extractFollowingTimeComponents(context, match, result);
if (result.end) {
if (result.end) {
result.text += match[0];
}
}
return result;
}
private static extractStartTimeComponent(result: ParsingResult, match: RegExpMatchArray): ParsingResult | null {
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents {
const components = context.createParsingComponents();
let hour = 0;

@@ -117,3 +121,3 @@ let minute = 0;

if (hour >= 12) {
if (hour > 12) {
meridiem = Meridiem.PM;

@@ -141,12 +145,12 @@ }

result.start.assign("hour", hour);
result.start.assign("minute", minute);
components.assign("hour", hour);
components.assign("minute", minute);
if (meridiem !== null) {
result.start.assign("meridiem", meridiem);
components.assign("meridiem", meridiem);
} else {
if (hour < 12) {
result.start.imply("meridiem", Meridiem.AM);
components.imply("meridiem", Meridiem.AM);
} else {
result.start.imply("meridiem", Meridiem.PM);
components.imply("meridiem", Meridiem.PM);
}

@@ -160,3 +164,3 @@ }

result.start.assign("millisecond", millisecond);
components.assign("millisecond", millisecond);
}

@@ -169,10 +173,14 @@

result.start.assign("second", second);
components.assign("second", second);
}
return result;
return components;
}
private static extractEndTimeComponent(result: ParsingResult, match: RegExpMatchArray): ParsingResult | null {
result.end = result.start.clone();
extractFollowingTimeComponents(
context: ParsingContext,
match: RegExpMatchArray,
result: ParsingResult
): null | ParsingComponents {
const components = context.createParsingComponents();

@@ -184,3 +192,3 @@ // ----- Millisecond

result.end.assign("millisecond", millisecond);
components.assign("millisecond", millisecond);
}

@@ -193,3 +201,3 @@

result.end.assign("second", second);
components.assign("second", second);
}

@@ -228,4 +236,4 @@

hour = 0;
if (!result.end.isCertain("day")) {
result.end.imply("day", result.end.get("day") + 1);
if (!components.isCertain("day")) {
components.imply("day", components.get("day") + 1);
}

@@ -257,24 +265,30 @@ }

result.text = result.text + match[0];
result.end.assign("hour", hour);
result.end.assign("minute", minute);
components.assign("hour", hour);
components.assign("minute", minute);
if (meridiem >= 0) {
result.end.assign("meridiem", meridiem);
components.assign("meridiem", meridiem);
} else {
const startAtPM = result.start.isCertain("meridiem") && result.start.get("meridiem") == Meridiem.PM;
if (startAtPM && result.start.get("hour") > hour) {
// 10pm - 1 (am)
result.end.imply("meridiem", Meridiem.AM);
const startAtPM = result.start.isCertain("meridiem") && result.start.get("hour") > 12;
if (startAtPM) {
if (result.start.get("hour") - 12 > hour) {
// 10pm - 1 (am)
components.imply("meridiem", Meridiem.AM);
} else if (hour <= 12) {
components.assign("hour", hour + 12);
components.assign("meridiem", Meridiem.PM);
}
} else if (hour > 12) {
result.end.imply("meridiem", Meridiem.PM);
components.imply("meridiem", Meridiem.PM);
} else if (hour <= 12) {
components.imply("meridiem", Meridiem.AM);
}
}
if (result.end.date().getTime() < result.start.date().getTime()) {
result.end.imply("day", result.end.get("day") + 1);
if (components.date().getTime() < result.start.date().getTime()) {
components.imply("day", components.get("day") + 1);
}
return result;
return components;
}
}
import { Parser, ParsingContext } from "../../chrono";
import { ParsingResult } from "../../results";
import dayjs from "dayjs";
import { findMostLikelyADYear, findYearClosestToRef } from "../../calculation/yearCalculation";
import { findMostLikelyADYear, findYearClosestToRef } from "../../calculation/years";

@@ -14,8 +14,5 @@ /**

const PATTERN = new RegExp(
"(\\W|^)" +
"([^\\d]|^)" +
"([0-3]{0,1}[0-9]{1})[\\/\\.\\-]([0-3]{0,1}[0-9]{1})" +
"(?:" +
"[\\/\\.\\-]" +
"([0-9]{4}\\s*\\,?\\s*|[0-9]{2}\\s*\\,?\\s*)" +
")?" +
"(?:[\\/\\.\\-]([0-9]{4}|[0-9]{2}))?" +
"(\\W|$)",

@@ -56,3 +53,6 @@ "i"

const index = match.index + match[OPENING_GROUP].length;
const text = match[0].substr(match[OPENING_GROUP].length, match[0].length - match[ENDING_GROUP].length);
const text = match[0].substr(
match[OPENING_GROUP].length,
match[0].length - match[OPENING_GROUP].length - match[ENDING_GROUP].length
);

@@ -59,0 +59,0 @@ // '1.12', '1.12.12' is more like a version numbers

@@ -50,4 +50,12 @@ import { Filter } from "../abstractRefiners";

if (result.start.isOnlyTime() && (!result.start.isCertain("hour") || !result.start.isCertain("minute"))) {
context.debug(() => {
console.log(`(Strict) Removing uncertain time component: ${result} (${result.end})`);
});
return false;
}
return true;
}
}
import { OpUnitType } from "dayjs";
import { matchAnyPattern } from "../../utils/pattern";
import { findMostLikelyADYear } from "../../calculation/yearCalculation";
import { findMostLikelyADYear } from "../../calculation/years";

@@ -5,0 +5,0 @@ export const WEEKDAY_DICTIONARY: { [word: string]: number } = {

@@ -21,3 +21,2 @@ import ENTimeUnitDeadlineFormatParser from "./parsers/ENTimeUnitDeadlineFormatParser";

import { Chrono, Configuration } from "../../chrono";
import MergeWeekdayComponentRefiner from "../../common/refiners/MergeWeekdayComponentRefiner";
import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";

@@ -24,0 +23,0 @@

@@ -1,5 +0,5 @@

import { Parser, ParsingContext } from "../../../chrono";
import { ParsingContext } from "../../../chrono";
import { ParsingResult } from "../../../results";
import { findYearClosestToRef } from "../../../calculation/yearCalculation";
import { MONTH_DICTIONARY, WEEKDAY_DICTIONARY } from "../constants";
import { findYearClosestToRef } from "../../../calculation/years";
import { MONTH_DICTIONARY } from "../constants";
import { YEAR_PATTERN, parseYear } from "../constants";

@@ -6,0 +6,0 @@ import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants";

@@ -1,3 +0,3 @@

import { Parser, ParsingContext } from "../../../chrono";
import { findYearClosestToRef } from "../../../calculation/yearCalculation";
import { ParsingContext } from "../../../chrono";
import { findYearClosestToRef } from "../../../calculation/years";
import { MONTH_DICTIONARY, WEEKDAY_DICTIONARY } from "../constants";

@@ -4,0 +4,0 @@ import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants";

import { MONTH_DICTIONARY } from "../constants";
import { Parser, ParsingContext } from "../../../chrono";
import { findYearClosestToRef } from "../../../calculation/yearCalculation";
import { ParsingContext } from "../../../chrono";
import { findYearClosestToRef } from "../../../calculation/years";
import { matchAnyPattern } from "../../../utils/pattern";

@@ -5,0 +5,0 @@ import { YEAR_PATTERN, parseYear } from "../constants";

import { Parser, ParsingContext } from "../../../chrono";
import { ParsingResult } from "../../../results";
import { ParsingComponents, ParsingResult } from "../../../results";
import dayjs from "dayjs";

@@ -17,4 +17,35 @@ import { Meridiem } from "../../../index";

primarySuffix(): string {
return "\\s*(?:o\\W*clock)?(?=\\W|$)";
return "(?:\\s*(?:o\\W*clock|at\\s*night|in\\s*the\\s*(?:morning|afternoon)))?(?=\\W|$)";
}
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents {
const components = super.extractPrimaryTimeComponents(context, match);
if (components) {
if (match[0].endsWith("night")) {
const hour = components.get("hour");
if (hour > 6 && hour < 12) {
components.assign("hour", components.get("hour") + 12);
components.assign("meridiem", Meridiem.PM);
}
}
if (match[0].endsWith("afternoon")) {
const hour = components.get("hour");
if (hour >= 0 && hour <= 6) {
components.assign("hour", components.get("hour") + 12);
components.assign("meridiem", Meridiem.PM);
}
}
if (match[0].endsWith("morning")) {
const hour = components.get("hour");
if (hour < 12) {
components.assign("hour", components.get("hour"));
components.assign("meridiem", Meridiem.AM);
}
}
}
return components;
}
}

@@ -7,2 +7,3 @@ import { Parser, ParsingContext } from "../../../chrono";

import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
import { toDayJSWeekday } from "../../../calculation/weeks";

@@ -38,7 +39,16 @@ const PATTERN = new RegExp(

const postfix = match[POSTFIX_GROUP];
let modifier = prefix || postfix;
modifier = modifier || "";
modifier = modifier.toLowerCase();
let modifierWord = prefix || postfix;
modifierWord = modifierWord || "";
modifierWord = modifierWord.toLowerCase();
const date = this.extractWeekday(context.refDate, offset, modifier);
let modifier = null;
if (modifierWord == "last" || modifierWord == "past") {
modifier = "last";
} else if (modifierWord == "next") {
modifier = "next";
} else if (modifierWord == "this") {
modifier = "this";
}
const date = toDayJSWeekday(context.refDate, offset, modifier);
return context

@@ -51,25 +61,2 @@ .createParsingComponents()

}
private extractWeekday(refDate: Date, offset, modifier?: string): Dayjs {
let date = dayjs(refDate);
const refOffset = date.day();
if (modifier == "last" || modifier == "past") {
date = date.day(offset - 7);
} else if (modifier == "next") {
date = date.day(offset + 7);
} else if (modifier == "this") {
date = date.day(offset);
} else {
if (Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
date = date.day(offset - 7);
} else if (Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
date = date.day(offset + 7);
} else {
date = date.day(offset);
}
}
return date;
}
}

@@ -5,65 +5,57 @@ import { OpUnitType } from "dayjs";

export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
sunday: 0,
sun: 0,
"sun.": 0,
monday: 1,
mon: 1,
"mon.": 1,
tuesday: 2,
tue: 2,
"tue.": 2,
wednesday: 3,
wed: 3,
"wed.": 3,
thursday: 4,
thurs: 4,
"thurs.": 4,
thur: 4,
"thur.": 4,
thu: 4,
"thu.": 4,
friday: 5,
fri: 5,
"fri.": 5,
saturday: 6,
sat: 6,
"sat.": 6,
"dimanche": 0,
"dim": 0,
"lundi": 1,
"lun": 1,
"mardi": 2,
"mar": 2,
"mercredi": 3,
"mer": 3,
"jeudi": 4,
"jeu": 4,
"vendredi": 5,
"ven": 5,
"samedi": 6,
"sam": 6,
};
export const MONTH_DICTIONARY: { [word: string]: number } = {
january: 1,
jan: 1,
"janvier": 1,
"jan": 1,
"jan.": 1,
february: 2,
feb: 2,
"feb.": 2,
march: 3,
mar: 3,
"février": 2,
"fév": 2,
"fév.": 2,
"fevrier": 2,
"fev": 2,
"fev.": 2,
"mars": 3,
"mar": 3,
"mar.": 3,
april: 4,
apr: 4,
"apr.": 4,
may: 5,
june: 6,
jun: 6,
"jun.": 6,
july: 7,
jul: 7,
"avril": 4,
"avr": 4,
"avr.": 4,
"mai": 5,
"juin": 6,
"jun": 6,
"juillet": 7,
"juil": 7,
"jul": 7,
"jul.": 7,
august: 8,
aug: 8,
"aug.": 8,
september: 9,
sep: 9,
"août": 8,
"aout": 8,
"septembre": 9,
"sep": 9,
"sep.": 9,
sept: 9,
"sept": 9,
"sept.": 9,
october: 10,
oct: 10,
"octobre": 10,
"oct": 10,
"oct.": 10,
november: 11,
nov: 11,
"novembre": 11,
"nov": 11,
"nov.": 11,
december: 12,
dec: 12,
"décembre": 12,
"decembre": 12,
"dec": 12,
"dec.": 12,

@@ -73,36 +65,37 @@ };

export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
one: 1,
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
ten: 10,
eleven: 11,
twelve: 12,
"un": 1,
"deux": 2,
"trois": 3,
"quatre": 4,
"cinq": 5,
"six": 6,
"sept": 7,
"huit": 8,
"neuf": 9,
"dix": 10,
"onze": 11,
"douze": 12,
"treize": 13,
};
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType } = {
sec: "second",
seconde: "second",
secondes: "second",
min: "minute",
mins: "minute",
minute: "minute",
minutes: "minute",
h: "hour",
hr: "hour",
hrs: "hour",
heure: "hour",
heures: "hour",
jour: "d",
jours: "d",
semaine: "week",
semaines: "week",
mois: "month",
année: "year",
années: "year",
"sec": "second",
"seconde": "second",
"secondes": "second",
"min": "minute",
"mins": "minute",
"minute": "minute",
"minutes": "minute",
"h": "hour",
"hr": "hour",
"hrs": "hour",
"heure": "hour",
"heures": "hour",
"jour": "d",
"jours": "d",
"semaine": "week",
"semaines": "week",
"mois": "month",
"année": "year",
"années": "year",
};

@@ -133,6 +126,6 @@

export const ORDINAL_NUMBER_PATTERN = `(?:[0-9]{1,2}(?:st|nd|rd|th)?)`;
export const ORDINAL_NUMBER_PATTERN = `(?:[0-9]{1,2}(?:er)?)`;
export function parseOrdinalNumberPattern(match: string): number {
let num = match.toLowerCase();
num = num.replace(/(?:st|nd|rd|th)$/i, "");
num = num.replace(/(?:er)$/i, "");
return parseInt(num);

@@ -142,13 +135,7 @@ }

//-----------------------------
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])`;
// 88 p. Chr. n.
// 234 AC
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:AC|AD|p\\.\\s*C(?:hr?)?\\.\\s*n\\.)|[1-2][0-9]{3}|[5-9][0-9])`;
export function parseYear(match: string): number {
if (/BE/i.test(match)) {
// Buddhist Era
match = match.replace(/BE/i, "");
return parseInt(match) - 543;
}
if (/BC/i.test(match)) {
// Before Christ
if (/AC/i.test(match)) {
match = match.replace(/BC/i, "");

@@ -158,4 +145,4 @@ return -parseInt(match);

if (/AD/i.test(match)) {
match = match.replace(/AD/i, "");
if (/AD/i.test(match) || /C/i.test(match)) {
match = match.replace(/[^\d]+/i, "");
return parseInt(match);

@@ -162,0 +149,0 @@ }

@@ -10,2 +10,5 @@ import { includeCommonConfiguration } from "../../configurations";

import FRMergeDateRangeRefiner from "./refiners/FRMergeDateRangeRefiner";
import FRWeekdayParser from "./parsers/FRWeekdayParser";
import FRSpecificTimeExpressionParser from "./parsers/FRSpecificTimeExpressionParser";
import FRMonthNameLittleEndianParser from "./parsers/FRMonthNameLittleEndianParser";

@@ -34,3 +37,9 @@ // Shortcuts

{
parsers: [new SlashDateFormatParser(littleEndian), new FRTimeExpressionParser()],
parsers: [
new SlashDateFormatParser(littleEndian),
new FRMonthNameLittleEndianParser(),
new FRTimeExpressionParser(),
new FRSpecificTimeExpressionParser(),
new FRWeekdayParser(),
],
refiners: [new FRMergeDateTimeRefiner(), new FRMergeDateRangeRefiner()],

@@ -37,0 +46,0 @@ },

@@ -10,3 +10,3 @@ import { Parser, ParsingContext } from "../../../chrono";

innerPattern(context: ParsingContext): RegExp {
return /(cet?)?\s*(matin|soir|après-midi|aprem)(?=\W|$)/i;
return /(cet?)?\s*(matin|soir|après-midi|aprem|a midi|à minuit)(?=\W|$)/i;
}

@@ -23,2 +23,3 @@

component.imply("minute", 0);
component.imply("meridiem", Meridiem.PM);
break;

@@ -29,2 +30,3 @@

component.imply("minute", 0);
component.imply("meridiem", Meridiem.PM);
break;

@@ -35,3 +37,15 @@

component.imply("minute", 0);
component.imply("meridiem", Meridiem.AM);
break;
case "a midi":
component.imply("hour", 12);
component.imply("minute", 0);
component.imply("meridiem", Meridiem.AM);
break;
case "à minuit":
component.imply("hour", 0);
component.imply("meridiem", Meridiem.AM);
break;
}

@@ -38,0 +52,0 @@

import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
import { ParsingComponents, ParsingResult } from "../../../results";
import { ParsingContext } from "../../../chrono";

@@ -11,2 +13,11 @@ export default class FRTimeExpressionParser extends AbstractTimeExpressionParser {

}
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | null {
// This looks more like a year e.g. 2020
if (match[0].match(/^\s*\d{4}\s*$/)) {
return null;
}
return super.extractPrimaryTimeComponents(context, match);
}
}

@@ -13,4 +13,4 @@ /*

patternBetween(): RegExp {
return /^\s*(à|a|\\-)\s*$/i;
return /^\s*(à|a|-)\s*$/i;
}
}
import { Parser, ParsingContext } from "../../../chrono";
import { toHankaku } from "../constants";
import { findYearClosestToRef } from "../../../calculation/yearCalculation";
import { findYearClosestToRef } from "../../../calculation/years";

@@ -5,0 +5,0 @@ import dayjs from "dayjs";

@@ -66,2 +66,7 @@ import { Component, ParsedComponents, ParsedResult } from "./index";

delete(component: Component) {
delete this.knownValues[component];
delete this.impliedValues[component];
}
clone(): ParsingComponents {

@@ -68,0 +73,0 @@ const component = new ParsingComponents(new Date());

@@ -302,18 +302,2 @@ import * as chrono from "../../src/";

});
testSingleCase(chrono, "11 at night", new Date(2016, 10 - 1, 1, 8), (result, text) => {
expect(result.text).toBe(text);
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(10);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("hour")).toBe(23);
});
testSingleCase(chrono, "11 tonight", new Date(2016, 10 - 1, 1, 8), (result, text) => {
expect(result.text).toBe(text);
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(10);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("hour")).toBe(23);
});
});

@@ -320,0 +304,0 @@

@@ -95,6 +95,5 @@ import * as chrono from "../../src";

var resultDate = result.start.date();
var expectDate = new Date(8, 8 - 1, 10, 12);
const expectDate = new Date(8, 8 - 1, 10, 12);
expectDate.setFullYear(8);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
expect(result.start).toBeDate(expectDate);
});

@@ -105,3 +104,2 @@

expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2013);

@@ -116,3 +114,2 @@ expect(result.start.get("month")).toBe(1);

testSingleCase(chrono, "Sun, Mar. 6, 2016", new Date(2012, 7, 10), (result) => {
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -124,3 +121,2 @@ expect(result.start.get("month")).toBe(3);

testSingleCase(chrono, "Sun, March 6, 2016", new Date(2012, 7, 10), (result) => {
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -132,3 +128,2 @@ expect(result.start.get("month")).toBe(3);

testSingleCase(chrono, "Sun., March 6, 2016", new Date(2012, 7, 10), (result) => {
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -140,3 +135,2 @@ expect(result.start.get("month")).toBe(3);

testSingleCase(chrono, "Sunday, March 6, 2016", new Date(2012, 7, 10), (result) => {
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -148,3 +142,2 @@ expect(result.start.get("month")).toBe(3);

testSingleCase(chrono, "Sunday, March 6, 2016", new Date(2012, 7, 10), (result) => {
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -157,3 +150,3 @@ expect(result.start.get("month")).toBe(3);

expect(result.text).toBe("Sunday, March, 6th 2016");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);

@@ -163,2 +156,10 @@ expect(result.start.get("month")).toBe(3);

});
testSingleCase(chrono, "Wed, Jan 20th, 2016 ", new Date(2012, 7, 10), (result) => {
expect(result.text).toBe("Wed, Jan 20th, 2016");
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(1);
expect(result.start.get("day")).toBe(20);
});
});

@@ -165,0 +166,0 @@

import * as chrono from "../../src";
import { testSingleCase, testUnexpectedResult, testWithExpectedDate } from "../test_util";
test("Test - Parsing Offset Expression", function () {
testSingleCase(chrono, " 04/2016 ", new Date(2012, 7, 10), (result) => {
expect(result.index).toBe(4);
expect(result.text).toBe("04/2016");
});
});
test("Test - Single Expression", function () {

@@ -5,0 +12,0 @@ testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {

@@ -126,2 +126,12 @@ import * as chrono from "../../src";

});
testSingleCase(chrono.fr, "a midi", (result, text) => {
expect(result.text).toBe(text);
expect(result.start.get("hour")).toBe(12);
});
testSingleCase(chrono.fr, "à minuit", (result, text) => {
expect(result.text).toBe(text);
expect(result.start.get("hour")).toBe(0);
});
});

@@ -156,14 +166,14 @@

// testSingleCase(chrono.fr, "La deadline est demain matin 11h", new Date(2012, 7, 10, 12), (result) => {
// expect(result.index).toBe(16);
// expect(result.text).toBe("demain matin 11h");
//
// expect(result.start).not.toBeNull();
// expect(result.start.get("year")).toBe(2012);
// expect(result.start.get("month")).toBe(8);
// expect(result.start.get("day")).toBe(11);
// expect(result.start.get("hour")).toBe(11);
//
// expect(result.start).toBeDate(new Date(2012, 7, 11, 11));
// });
testSingleCase(chrono.fr, "La deadline est demain matin 11h", new Date(2012, 7, 10, 12), (result) => {
expect(result.index).toBe(16);
expect(result.text).toBe("demain matin 11h");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2012);
expect(result.start.get("month")).toBe(8);
expect(result.start.get("day")).toBe(11);
expect(result.start.get("hour")).toBe(11);
expect(result.start).toBeDate(new Date(2012, 7, 11, 11));
});
});

@@ -170,0 +180,0 @@

@@ -32,19 +32,19 @@ import * as chrono from "../../src";

});
//
// test("Test - Single Expression with weekday", function () {
// testSingleCase(chrono.fr, "lundi 8/2/2016", new Date(2012, 7, 10), (result) => {
// expect(result.text).toBe("lundi 8/2/2016");
// expect(result.start).toBeDate(new Date(2016, 2 - 1, 8, 12));
// });
//
// testSingleCase(chrono.fr, "samedi 9/2/20 ", new Date(2012, 7, 10), (result) => {
// expect(result.index).toBe(0);
// expect(result.text).toBe("samedi 9/2/20");
//
// expect(result.start.get("year")).toBe(2020);
// expect(result.start.get("month")).toBe(2);
// expect(result.start.get("day")).toBe(9);
//
// expect(result.start).toBeDate(new Date(2020, 2 - 1, 9, 12));
// });
// });
test("Test - Single Expression with weekday", function () {
testSingleCase(chrono.fr, "lundi 8/2/2016", new Date(2012, 7, 10), (result) => {
expect(result.text).toBe("lundi 8/2/2016");
expect(result.start).toBeDate(new Date(2016, 2 - 1, 8, 12));
});
testSingleCase(chrono.fr, "samedi 9/2/20 ", new Date(2012, 7, 10), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("samedi 9/2/20");
expect(result.start.get("year")).toBe(2020);
expect(result.start.get("month")).toBe(2);
expect(result.start.get("day")).toBe(9);
expect(result.start).toBeDate(new Date(2020, 2 - 1, 9, 12));
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc