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.2.0 to 2.2.1

dist/locales/nl/parsers/NLCasualDateTimeParser.d.ts

2

dist/common/parsers/AbstractTimeExpressionParser.d.ts

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

extractFollowingTimeComponents(context: ParsingContext, match: RegExpMatchArray, result: ParsingResult): null | ParsingComponents;
private static checkAndReturnStartTime;
private static checkAndReturnWithoutFollowingPattern;
}

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

match[0].match(/^\s*([+-])\s*\d{3,4}$/)) {
return AbstractTimeExpressionParser.checkAndReturnStartTime(result);
return AbstractTimeExpressionParser.checkAndReturnWithoutFollowingPattern(result);
}

@@ -234,6 +234,17 @@ result.end = this.extractFollowingTimeComponents(context, match, result);

}
static checkAndReturnStartTime(result) {
static checkAndReturnWithoutFollowingPattern(result) {
if (result.text.match(/^\d$/)) {
return null;
}
const endingWithNumbers = result.text.match(/[^\d:.](\d[\d.]+)$/);
if (endingWithNumbers) {
const endingNumbers = endingWithNumbers[1];
if (endingNumbers.includes(".") && !endingNumbers.match(/\d(\.\d{2})+$/)) {
return null;
}
const endingNumberVal = parseInt(endingNumbers);
if (endingNumberVal > 24) {
return null;
}
}
return result;

@@ -240,0 +251,0 @@ }

@@ -5,4 +5,4 @@ import { ParsingContext } from "../../../chrono";

export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerPattern(context: ParsingContext): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
}

@@ -7,4 +7,6 @@ "use strict";

class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {
return new RegExp(`(?:within|in|for)\\s*(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?` +
innerPattern(context) {
const prefix = context.option.forwardDate ? "" : "(?:within|in|for)\\s*";
return new RegExp(prefix +
`(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?` +
"(" +

@@ -11,0 +13,0 @@ constants_1.TIME_UNITS_PATTERN +

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

const SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE = SINGLE_TIME_UNIT_PATTERN.replace(/\((?!\?)/g, "(?:");
exports.TIME_UNITS_PATTERN = `(?:(?:about|around)\\s*)?` +
exports.TIME_UNITS_PATTERN = `(?:(?:binnen|in)\\s*)?` +
`${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE}\\s*(?:,?\\s*${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE})*`;

@@ -194,0 +194,0 @@ function parseTimeUnits(timeunitText) {

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

const NLSlashMonthFormatParser_1 = __importDefault(require("./parsers/NLSlashMonthFormatParser"));
const NLTimeExpressionParser_1 = __importDefault(require("./parsers/NLTimeExpressionParser"));
const NLCasualYearMonthDayParser_1 = __importDefault(require("./parsers/NLCasualYearMonthDayParser"));
const NLCasualDateTimeParser_1 = __importDefault(require("./parsers/NLCasualDateTimeParser"));
exports.casual = new chrono_1.Chrono(createCasualConfiguration());

@@ -34,2 +37,3 @@ exports.strict = new chrono_1.Chrono(createConfiguration(true));

option.parsers.unshift(new NLCasualTimeParser_1.default());
option.parsers.unshift(new NLCasualDateTimeParser_1.default());
return option;

@@ -42,7 +46,9 @@ }

new SlashDateFormatParser_1.default(littleEndian),
new NLTimeUnitWithinFormatParser_1.default(),
new NLWeekdayParser_1.default(),
new NLMonthNameMiddleEndianParser_1.default(),
new NLMonthNameParser_1.default(),
new NLTimeExpressionParser_1.default(),
new NLTimeUnitWithinFormatParser_1.default(),
new NLSlashMonthFormatParser_1.default(),
new NLWeekdayParser_1.default(),
new NLCasualYearMonthDayParser_1.default(),
],

@@ -49,0 +55,0 @@ refiners: [new NLMergeDateTimeRefiner_1.default(), new NLMergeDateRangeRefiner_1.default()],

import { ParsingContext } from "../../../chrono";
import { ParsingComponents, ParsingResult } from "../../../results";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENCasualDateParser extends AbstractParserWithWordBoundaryChecking {
export default class NLCasualDateParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(context: ParsingContext): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult;
}

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

const references = __importStar(require("../../../common/casualReferences"));
class ENCasualDateParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLCasualDateParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern(context) {
return /(nu|vandaag|vanacht|morgen|morgend|gisteren)(?=\W|$)/i;
return /(nu|vandaag|morgen|morgend|gisteren)(?=\W|$)/i;
}

@@ -42,4 +42,2 @@ innerExtract(context, match) {

return references.yesterday(context.refDate);
case "vanacht":
return references.tonight(context.refDate);
}

@@ -49,2 +47,2 @@ return component;

}
exports.default = ENCasualDateParser;
exports.default = NLCasualDateParser;
import { ParsingContext } from "../../../chrono";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
export default class NLCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../results").ParsingComponents;
}

@@ -10,5 +10,7 @@ "use strict";

const dayjs_2 = require("../../../utils/dayjs");
class ENCasualTimeParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
const DAY_GROUP = 1;
const MOMENT_GROUP = 2;
class NLCasualTimeParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {
return /(?:this)?\s*(namiddag|avond|middernacht|ochtend|middag|'s middags|'s avonds|'s ochtends)(?=\W|$)/i;
return /(deze)?\s*(namiddag|avond|middernacht|ochtend|middag|'s middags|'s avonds|'s ochtends)(?=\W|$)/i;
}

@@ -18,3 +20,8 @@ innerExtract(context, match) {

const component = context.createParsingComponents();
switch (match[1].toLowerCase()) {
if (match[DAY_GROUP] === "deze") {
component.assign("day", context.refDate.getDate());
component.assign("month", context.refDate.getMonth() + 1);
component.assign("year", context.refDate.getFullYear());
}
switch (match[MOMENT_GROUP].toLowerCase()) {
case "namiddag":

@@ -50,2 +57,2 @@ case "'s namiddags":

}
exports.default = ENCasualTimeParser;
exports.default = NLCasualTimeParser;
import { ParsingContext } from "../../../chrono";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking {
export default class NLMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../results").ParsingComponents | import("../../../results").ParsingResult;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const years_1 = require("../../../calculation/years");
const constants_1 = require("../../en/constants");
const constants_2 = require("../../en/constants");
const constants_3 = require("../../en/constants");
const constants_1 = require("../constants");
const constants_2 = require("../constants");
const constants_3 = require("../constants");
const pattern_1 = require("../../../utils/pattern");
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
const PATTERN = new RegExp(`(${pattern_1.matchAnyPattern(constants_1.MONTH_DICTIONARY)})` +
"(?:-|/|\\s*,?\\s*)" +
`(${constants_2.ORDINAL_NUMBER_PATTERN})(?!\\s*)\\s*` +
"(?:" +
"(?:to|\\-)\\s*" +
`(${constants_2.ORDINAL_NUMBER_PATTERN})\\s*` +
const PATTERN = new RegExp("(?:on\\s*?)?" +
`(${constants_2.ORDINAL_NUMBER_PATTERN})` +
"(?:\\s*" +
"(?:tot|\\-|\\–|until|through|till|\\s)\\s*" +
`(${constants_2.ORDINAL_NUMBER_PATTERN})` +
")?" +
"(?:-|/|\\s*(?:of)?\\s*)" +
"(" +
pattern_1.matchAnyPattern(constants_1.MONTH_DICTIONARY) +
")" +
"(?:" +
"(?:-|/|\\s*,?\\s*)" +
`(${constants_3.YEAR_PATTERN})` +
"(?:-|/|,?\\s*)" +
`(${constants_3.YEAR_PATTERN}(?![^\\s]\\d))` +
")?" +
"(?=\\W|$)(?!\\:\\d)", "i");
const MONTH_NAME_GROUP = 1;
const DATE_GROUP = 2;
const DATE_TO_GROUP = 3;
"(?=\\W|$)", "i");
const MONTH_NAME_GROUP = 3;
const DATE_GROUP = 1;
const DATE_TO_GROUP = 2;
const YEAR_GROUP = 4;
class ENMonthNameMiddleEndianParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLMonthNameMiddleEndianParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {

@@ -33,2 +36,3 @@ return PATTERN;

if (day > 31) {
match.index = match.index + match[DATE_GROUP].length;
return null;

@@ -59,2 +63,2 @@ }

}
exports.default = ENMonthNameMiddleEndianParser;
exports.default = NLMonthNameMiddleEndianParser;
import { ParsingContext } from "../../../chrono";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENMonthNameParser extends AbstractParserWithWordBoundaryChecking {
export default class NLMonthNameParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): import("../../../results").ParsingComponents;
}

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

const PATTERN = new RegExp(`(${pattern_1.matchAnyPattern(constants_1.MONTH_DICTIONARY)})` +
"\\s*" +
"(?:" +
`\\s*` +
`(?:` +
`[,-]?\\s*(${constants_2.YEAR_PATTERN})?` +

@@ -17,3 +17,3 @@ ")?" +

const YEAR_GROUP = 2;
class ENMonthNameParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLMonthNameParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {

@@ -23,5 +23,2 @@ return PATTERN;

innerExtract(context, match) {
if (match[0].length <= 3) {
return null;
}
const components = context.createParsingComponents();

@@ -43,2 +40,2 @@ components.imply("day", 1);

}
exports.default = ENMonthNameParser;
exports.default = NLMonthNameParser;
import { ParsingContext } from "../../../chrono";
import { ParsingComponents } from "../../../results";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
export default class NLSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
}

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

const YEAR_GROUP = 2;
class ENSlashMonthFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLSlashMonthFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {

@@ -18,2 +18,2 @@ return PATTERN;

}
exports.default = ENSlashMonthFormatParser;
exports.default = NLSlashMonthFormatParser;
import { ParsingContext } from "../../../chrono";
import { ParsingComponents } from "../../../results";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
export default class NLTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../en/constants");
const constants_1 = require("../constants");
const results_1 = require("../../../results");
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLTimeUnitWithinFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {
return new RegExp(`(?:binnen|in)\\s*` + "(" + constants_1.TIME_UNITS_PATTERN + ")" + `(?=\\W|$)`, "i");
return new RegExp(`(?:binnen|in|binnen de|voor)\\s*` + "(" + constants_1.TIME_UNITS_PATTERN + ")" + `(?=\\W|$)`, "i");
}

@@ -15,2 +15,2 @@ innerExtract(context, match) {

}
exports.default = ENTimeUnitWithinFormatParser;
exports.default = NLTimeUnitWithinFormatParser;
import { ParsingContext } from "../../../chrono";
import { ParsingComponents } from "../../../results";
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
export default class ENWeekdayParser extends AbstractParserWithWordBoundaryChecking {
export default class NLWeekdayParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp;
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../en/constants");
const constants_1 = require("../../nl/constants");
const pattern_1 = require("../../../utils/pattern");

@@ -8,7 +8,5 @@ const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");

const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" +
"(?:on\\s*?)?" +
"(?:(this|last|past|next)\\s*)?" +
"(?:op\\s*?)?" +
"(?:(deze|vorige|volgende)\\s*(?:week\\s*)?)?" +
`(${pattern_1.matchAnyPattern(constants_1.WEEKDAY_DICTIONARY)})` +
"(?:\\s*(?:\\,|\\)|\\)))?" +
"(?:\\s*(this|last|past|next)\\s*week)?" +
"(?=\\W|$)", "i");

@@ -18,3 +16,3 @@ const PREFIX_GROUP = 1;

const POSTFIX_GROUP = 3;
class ENWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
class NLWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern() {

@@ -32,9 +30,9 @@ return PATTERN;

let modifier = null;
if (modifierWord == "last" || modifierWord == "past") {
if (modifierWord == "vorige") {
modifier = "last";
}
else if (modifierWord == "next") {
else if (modifierWord == "volgende") {
modifier = "next";
}
else if (modifierWord == "this") {
else if (modifierWord == "deze") {
modifier = "this";

@@ -51,2 +49,2 @@ }

}
exports.default = ENWeekdayParser;
exports.default = NLWeekdayParser;

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

patternBetween() {
return new RegExp("^\\s*(om|na|voor|,|-)?\\s*$");
return new RegExp("^\\s*(om|na|voor|in de|,|-)?\\s*$");
}
}
exports.default = NLMergeDateTimeRefiner;

@@ -18,3 +18,3 @@ {

"license": "MIT",
"version": "2.2.0",
"version": "2.2.1",
"directories": {

@@ -21,0 +21,0 @@ "source": "./src",

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

) {
return AbstractTimeExpressionParser.checkAndReturnStartTime(result);
return AbstractTimeExpressionParser.checkAndReturnWithoutFollowingPattern(result);
}

@@ -289,3 +289,3 @@

private static checkAndReturnStartTime(result) {
private static checkAndReturnWithoutFollowingPattern(result) {
// Single digit (e.g "1") should not be counted as time expression

@@ -296,4 +296,21 @@ if (result.text.match(/^\d$/)) {

// If it ends only with numbers or dots
const endingWithNumbers = result.text.match(/[^\d:.](\d[\d.]+)$/);
if (endingWithNumbers) {
const endingNumbers: string = endingWithNumbers[1];
// If it ends only with dot single digit, e.g. "at 1.2"
if (endingNumbers.includes(".") && !endingNumbers.match(/\d(\.\d{2})+$/)) {
return null;
}
// If it ends only with numbers above 24, e.g. "at 25"
const endingNumberVal = parseInt(endingNumbers);
if (endingNumberVal > 24) {
return null;
}
}
return result;
}
}

@@ -7,5 +7,7 @@ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants";

export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {
innerPattern(context: ParsingContext): RegExp {
const prefix = context.option.forwardDate ? "" : "(?:within|in|for)\\s*";
return new RegExp(
`(?:within|in|for)\\s*(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?` +
prefix +
`(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?` +
"(" +

@@ -12,0 +14,0 @@ TIME_UNITS_PATTERN +

@@ -216,3 +216,3 @@ import { OpUnitType } from "dayjs";

export const TIME_UNITS_PATTERN =
`(?:(?:about|around)\\s*)?` +
`(?:(?:binnen|in)\\s*)?` +
`${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE}\\s*(?:,?\\s*${SINGLE_TIME_UNIT_PATTERN_NO_CAPTURE})*`;

@@ -219,0 +219,0 @@

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

import NLSlashMonthFormatParser from "./parsers/NLSlashMonthFormatParser";
import NLTimeExpressionParser from "./parsers/NLTimeExpressionParser";
import NLCasualYearMonthDayParser from "./parsers/NLCasualYearMonthDayParser";
import NLCasualDateTimeParser from "./parsers/NLCasualDateTimeParser";

@@ -32,2 +35,3 @@ // Shortcuts

option.parsers.unshift(new NLCasualTimeParser());
option.parsers.unshift(new NLCasualDateTimeParser());
return option;

@@ -41,7 +45,9 @@ }

new SlashDateFormatParser(littleEndian),
new NLTimeUnitWithinFormatParser(),
new NLWeekdayParser(),
new NLMonthNameMiddleEndianParser(),
new NLMonthNameParser(),
new NLTimeExpressionParser(),
new NLTimeUnitWithinFormatParser(),
new NLSlashMonthFormatParser(),
new NLWeekdayParser(),
new NLCasualYearMonthDayParser(),
],

@@ -48,0 +54,0 @@ refiners: [new NLMergeDateTimeRefiner(), new NLMergeDateRangeRefiner()],

@@ -6,5 +6,5 @@ import { ParsingContext } from "../../../chrono";

export default class ENCasualDateParser extends AbstractParserWithWordBoundaryChecking {
export default class NLCasualDateParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(context: ParsingContext): RegExp {
return /(nu|vandaag|vanacht|morgen|morgend|gisteren)(?=\W|$)/i;
return /(nu|vandaag|morgen|morgend|gisteren)(?=\W|$)/i;
}

@@ -29,5 +29,2 @@

return references.yesterday(context.refDate);
case "vanacht":
return references.tonight(context.refDate);
}

@@ -34,0 +31,0 @@

@@ -7,5 +7,8 @@ import { ParsingContext } from "../../../chrono";

export default class ENCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
const DAY_GROUP = 1;
const MOMENT_GROUP = 2;
export default class NLCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
innerPattern() {
return /(?:this)?\s*(namiddag|avond|middernacht|ochtend|middag|'s middags|'s avonds|'s ochtends)(?=\W|$)/i;
return /(deze)?\s*(namiddag|avond|middernacht|ochtend|middag|'s middags|'s avonds|'s ochtends)(?=\W|$)/i;
}

@@ -17,3 +20,9 @@

switch (match[1].toLowerCase()) {
if (match[DAY_GROUP] === "deze") {
component.assign("day", context.refDate.getDate());
component.assign("month", context.refDate.getMonth() + 1);
component.assign("year", context.refDate.getFullYear());
}
switch (match[MOMENT_GROUP].toLowerCase()) {
case "namiddag":

@@ -20,0 +29,0 @@ case "'s namiddags":

import { ParsingContext } from "../../../chrono";
import { findYearClosestToRef } from "../../../calculation/years";
import { MONTH_DICTIONARY } from "../../en/constants";
import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../../en/constants";
import { YEAR_PATTERN, parseYear } from "../../en/constants";
import { MONTH_DICTIONARY } from "../constants";
import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants";
import { YEAR_PATTERN, parseYear } from "../constants";
import { matchAnyPattern } from "../../../utils/pattern";

@@ -10,33 +10,41 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";

const PATTERN = new RegExp(
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
"(?:-|/|\\s*,?\\s*)" +
`(${ORDINAL_NUMBER_PATTERN})(?!\\s*)\\s*` +
"(?:" +
"(?:to|\\-)\\s*" +
`(${ORDINAL_NUMBER_PATTERN})\\s*` +
"(?:on\\s*?)?" +
`(${ORDINAL_NUMBER_PATTERN})` +
"(?:\\s*" +
"(?:tot|\\-|\\–|until|through|till|\\s)\\s*" +
`(${ORDINAL_NUMBER_PATTERN})` +
")?" +
"(?:-|/|\\s*(?:of)?\\s*)" +
"(" +
matchAnyPattern(MONTH_DICTIONARY) +
")" +
"(?:" +
"(?:-|/|\\s*,?\\s*)" +
`(${YEAR_PATTERN})` +
"(?:-|/|,?\\s*)" +
`(${YEAR_PATTERN}(?![^\\s]\\d))` +
")?" +
"(?=\\W|$)(?!\\:\\d)",
"(?=\\W|$)",
"i"
);
const MONTH_NAME_GROUP = 1;
const DATE_GROUP = 2;
const DATE_TO_GROUP = 3;
const MONTH_NAME_GROUP = 3;
const DATE_GROUP = 1;
const DATE_TO_GROUP = 2;
const YEAR_GROUP = 4;
/**
* The parser for parsing US's date format that begin with month's name.
* - January 13
* - January 13, 2012
* - January 13 - 15, 2012
* Note: Watch out for:
* - January 12:00
* - January 12.44
* - January 1222344
* The parser for parsing BE/NL date format with month's name in full writing
* - 1 januari 2019
* - 01 januari 2019
* - 10 januari 2019
* - 13 januari
* - 10 - 25 maart
* - 10 - 25 maart 2019
* - 1 aug 2019
* - 1 september 200 voor Christus
* - 1 september 2002 na Christus
* - 19 januari 87
* - 12de juli 2013
* - 1ste november 2013
*/
export default class ENMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking {
export default class NLMonthNameMiddleEndianParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {

@@ -50,2 +58,4 @@ return PATTERN;

if (day > 31) {
// e.g. "[96 Aug]" => "9[6 Aug]", we need to shift away from the next number
match.index = match.index + match[DATE_GROUP].length;
return null;

@@ -52,0 +62,0 @@ }

@@ -10,4 +10,4 @@ import { MONTH_DICTIONARY } from "../constants";

`(${matchAnyPattern(MONTH_DICTIONARY)})` +
"\\s*" +
"(?:" +
`\\s*` +
`(?:` +
`[,-]?\\s*(${YEAR_PATTERN})?` +

@@ -24,7 +24,7 @@ ")?" +

* The parser for parsing month name and year.
* - January, 2012
* - January 2012
* - January
* - januari, 2012
* - januari 2012
* - januari
*/
export default class ENMonthNameParser extends AbstractParserWithWordBoundaryChecking {
export default class NLMonthNameParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {

@@ -35,6 +35,2 @@ return PATTERN;

innerExtract(context: ParsingContext, match: RegExpMatchArray) {
if (match[0].length <= 3) {
return null;
}
const components = context.createParsingComponents();

@@ -41,0 +37,0 @@ components.imply("day", 1);

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

*/
export default class ENSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
export default class NLSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {

@@ -18,0 +18,0 @@ return PATTERN;

@@ -1,2 +0,2 @@

import { TIME_UNITS_PATTERN, parseTimeUnits } from "../../en/constants";
import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants";
import { ParsingContext } from "../../../chrono";

@@ -6,5 +6,5 @@ import { ParsingComponents } from "../../../results";

export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
export default class NLTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {
return new RegExp(`(?:binnen|in)\\s*` + "(" + TIME_UNITS_PATTERN + ")" + `(?=\\W|$)`, "i");
return new RegExp(`(?:binnen|in|binnen de|voor)\\s*` + "(" + TIME_UNITS_PATTERN + ")" + `(?=\\W|$)`, "i");
}

@@ -11,0 +11,0 @@

import { ParsingContext } from "../../../chrono";
import { ParsingComponents } from "../../../results";
import { WEEKDAY_DICTIONARY } from "../../en/constants";
import { WEEKDAY_DICTIONARY } from "../../nl/constants";
import { matchAnyPattern } from "../../../utils/pattern";

@@ -10,7 +10,5 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";

"(?:(?:\\,|\\(|\\()\\s*)?" +
"(?:on\\s*?)?" +
"(?:(this|last|past|next)\\s*)?" +
"(?:op\\s*?)?" +
"(?:(deze|vorige|volgende)\\s*(?:week\\s*)?)?" +
`(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
"(?:\\s*(?:\\,|\\)|\\)))?" +
"(?:\\s*(this|last|past|next)\\s*week)?" +
"(?=\\W|$)",

@@ -24,3 +22,3 @@ "i"

export default class ENWeekdayParser extends AbstractParserWithWordBoundaryChecking {
export default class NLWeekdayParser extends AbstractParserWithWordBoundaryChecking {
innerPattern(): RegExp {

@@ -40,7 +38,7 @@ return PATTERN;

let modifier = null;
if (modifierWord == "last" || modifierWord == "past") {
if (modifierWord == "vorige") {
modifier = "last";
} else if (modifierWord == "next") {
} else if (modifierWord == "volgende") {
modifier = "next";
} else if (modifierWord == "this") {
} else if (modifierWord == "deze") {
modifier = "this";

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

@@ -11,4 +11,4 @@ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMergeDateTimeRefiner";

patternBetween(): RegExp {
return new RegExp("^\\s*(om|na|voor|,|-)?\\s*$");
return new RegExp("^\\s*(om|na|voor|in de|,|-)?\\s*$");
}
}

@@ -231,3 +231,21 @@ import * as chrono from "../../src";

test("Test - Parsing negative cases", function () {
test("Test - Parsing causal positive cases", function () {
testSingleCase(chrono.casual, "at 1", (result) => {
expect(result.text).toBe("at 1");
expect(result.start.get("hour")).toBe(1);
});
testSingleCase(chrono.casual, "at 12", (result) => {
expect(result.text).toBe("at 12");
expect(result.start.get("hour")).toBe(12);
});
testSingleCase(chrono.casual, "at 12.30", (result) => {
expect(result.text).toBe("at 12.30");
expect(result.start.get("hour")).toBe(12);
expect(result.start.get("minute")).toBe(30);
});
});
test("Test - Parsing negative cases : [year-like] pattern", function () {
testUnexpectedResult(chrono, "2020");

@@ -237,1 +255,9 @@

});
test("Test - Parsing negative cases : 'at [some numbers]'", function () {
testUnexpectedResult(chrono, "I'm at 101,194 points!");
testUnexpectedResult(chrono, "I'm at 101 points!");
testUnexpectedResult(chrono, "I'm at 10.1");
});

@@ -314,2 +314,17 @@ import * as chrono from "../../src";

});
testSingleCase(chrono, "give it 2 months", new Date(2016, 10 - 1, 1, 14, 52), { forwardDate: true }, (result) => {
expect(result.text).toBe("2 months");
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(12);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("hour")).toBe(14);
expect(result.start.get("minute")).toBe(52);
expect(result.start.isCertain("year")).toBeTruthy();
expect(result.start.isCertain("month")).toBeTruthy();
expect(result.start.isCertain("day")).toBeFalsy();
expect(result.start.isCertain("hour")).toBeFalsy();
expect(result.start.isCertain("minute")).toBeFalsy();
});
});
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