@sprucelabs/calendar-utils 31.2.1 → 31.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/esm/parsing/AbstractParser.d.ts +3 -1
- package/build/esm/parsing/AbstractParser.js +2 -1
- package/build/esm/parsing/DateParser.d.ts +2 -1
- package/build/esm/parsing/DateParser.js +8 -5
- package/build/esm/parsing/ParserFactory.d.ts +3 -1
- package/build/esm/parsing/ParserFactory.js +9 -8
- package/build/esm/parsing/strategies/TimeParser.js +8 -6
- package/build/parsing/AbstractParser.d.ts +3 -1
- package/build/parsing/AbstractParser.js +2 -1
- package/build/parsing/DateParser.d.ts +2 -1
- package/build/parsing/DateParser.js +8 -5
- package/build/parsing/ParserFactory.d.ts +3 -1
- package/build/parsing/ParserFactory.js +9 -8
- package/build/parsing/strategies/TimeParser.js +8 -6
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
import { IDate } from '../utilities/date.utility';
|
|
2
3
|
export declare abstract class AbstractParser implements Parser {
|
|
3
4
|
protected now: () => number;
|
|
4
|
-
|
|
5
|
+
protected locale: Locale;
|
|
6
|
+
constructor(now: () => number, locale: Locale);
|
|
5
7
|
abstract parse(str: string, date: Required<IDate>, context: ParserContext): string;
|
|
6
8
|
}
|
|
7
9
|
export interface Parser {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
export default class DateParser {
|
|
2
3
|
private now;
|
|
3
4
|
private parsers;
|
|
4
5
|
private constructor();
|
|
5
|
-
static Parser(now: () => number): DateParser;
|
|
6
|
+
static Parser(now: () => number, locale: Locale): DateParser;
|
|
6
7
|
parse(str: string): number | null;
|
|
7
8
|
}
|
|
@@ -2,15 +2,15 @@ import { assertOptions } from '@sprucelabs/schema';
|
|
|
2
2
|
import dateUtil from '../utilities/date.utility.js';
|
|
3
3
|
import ParserFactory from './ParserFactory.js';
|
|
4
4
|
export default class DateParser {
|
|
5
|
-
constructor(now) {
|
|
5
|
+
constructor(now, locale) {
|
|
6
6
|
this.parsers = [];
|
|
7
7
|
this.now = now;
|
|
8
|
-
const parsers = ParserFactory.Factory(now);
|
|
8
|
+
const parsers = ParserFactory.Factory(now, locale);
|
|
9
9
|
this.parsers = [...parsers.all()];
|
|
10
10
|
}
|
|
11
|
-
static Parser(now) {
|
|
12
|
-
assertOptions({ now }, ['now']);
|
|
13
|
-
return new this(now);
|
|
11
|
+
static Parser(now, locale) {
|
|
12
|
+
assertOptions({ now, locale }, ['now', 'locale']);
|
|
13
|
+
return new this(now, locale);
|
|
14
14
|
}
|
|
15
15
|
parse(str) {
|
|
16
16
|
const now = this.now();
|
|
@@ -25,6 +25,9 @@ export default class DateParser {
|
|
|
25
25
|
parsed = parser.parse(parsed, date, context);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
else {
|
|
29
|
+
parsed = '';
|
|
30
|
+
}
|
|
28
31
|
if (parsed === original) {
|
|
29
32
|
return null;
|
|
30
33
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
import { Parser } from './AbstractParser';
|
|
2
3
|
export default class ParserFactory {
|
|
4
|
+
private locale;
|
|
3
5
|
all(): Parser[];
|
|
4
6
|
private now;
|
|
5
7
|
private strategies;
|
|
6
8
|
private constructor();
|
|
7
|
-
static Factory(now: () => number): ParserFactory;
|
|
9
|
+
static Factory(now: () => number, locale: Locale): ParserFactory;
|
|
8
10
|
Parser(parserType: ParserStrategy): Parser;
|
|
9
11
|
}
|
|
10
12
|
export type ParserStrategy = 'Year' | 'Month' | 'Dow' | 'Time' | 'Week';
|
|
@@ -13,18 +13,19 @@ export default class ParserFactory {
|
|
|
13
13
|
this.Parser('Time'),
|
|
14
14
|
];
|
|
15
15
|
}
|
|
16
|
-
constructor(now) {
|
|
16
|
+
constructor(now, locale) {
|
|
17
17
|
this.strategies = {
|
|
18
|
-
Year: () => new YearParser(this.now),
|
|
19
|
-
Month: () => new MonthParser(this.now),
|
|
20
|
-
Dow: () => new DowParser(this.now),
|
|
21
|
-
Time: () => new TimeParser(this.now),
|
|
22
|
-
Week: () => new WeekParser(this.now),
|
|
18
|
+
Year: () => new YearParser(this.now, this.locale),
|
|
19
|
+
Month: () => new MonthParser(this.now, this.locale),
|
|
20
|
+
Dow: () => new DowParser(this.now, this.locale),
|
|
21
|
+
Time: () => new TimeParser(this.now, this.locale),
|
|
22
|
+
Week: () => new WeekParser(this.now, this.locale),
|
|
23
23
|
};
|
|
24
24
|
this.now = now;
|
|
25
|
+
this.locale = locale;
|
|
25
26
|
}
|
|
26
|
-
static Factory(now) {
|
|
27
|
-
return new this(now);
|
|
27
|
+
static Factory(now, locale) {
|
|
28
|
+
return new this(now, locale);
|
|
28
29
|
}
|
|
29
30
|
Parser(parserType) {
|
|
30
31
|
return this.strategies[parserType]();
|
|
@@ -8,19 +8,21 @@ export default class TimeParser extends AbstractParser {
|
|
|
8
8
|
return str;
|
|
9
9
|
}
|
|
10
10
|
if (match) {
|
|
11
|
-
date.hour =
|
|
11
|
+
date.hour =
|
|
12
|
+
parseInt(match, 10) + this.locale.getTimezoneOffsetMinutes() / 60;
|
|
12
13
|
date.minute = 0;
|
|
14
|
+
str = str.replace(match, '');
|
|
13
15
|
}
|
|
14
|
-
if (
|
|
15
|
-
date.minute = parseInt(
|
|
16
|
+
if (match.includes(':')) {
|
|
17
|
+
date.minute = parseInt(match.split(':')[1], 10);
|
|
16
18
|
}
|
|
17
|
-
if (
|
|
19
|
+
if (match.includes('pm')) {
|
|
18
20
|
date.hour += 12;
|
|
19
21
|
}
|
|
20
|
-
else if (date.hour === 12 &&
|
|
22
|
+
else if (date.hour === 12 && match.includes('am')) {
|
|
21
23
|
date.hour = 0;
|
|
22
24
|
}
|
|
23
|
-
if (!context.hasYear && dateUtil.date(date) < this.now()
|
|
25
|
+
if (!context.hasYear && dateUtil.date(date) < this.now()) {
|
|
24
26
|
date.hour += 12;
|
|
25
27
|
}
|
|
26
28
|
return str;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
import { IDate } from '../utilities/date.utility';
|
|
2
3
|
export declare abstract class AbstractParser implements Parser {
|
|
3
4
|
protected now: () => number;
|
|
4
|
-
|
|
5
|
+
protected locale: Locale;
|
|
6
|
+
constructor(now: () => number, locale: Locale);
|
|
5
7
|
abstract parse(str: string, date: Required<IDate>, context: ParserContext): string;
|
|
6
8
|
}
|
|
7
9
|
export interface Parser {
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractParser = void 0;
|
|
4
4
|
class AbstractParser {
|
|
5
|
-
constructor(now) {
|
|
5
|
+
constructor(now, locale) {
|
|
6
6
|
this.now = now;
|
|
7
|
+
this.locale = locale;
|
|
7
8
|
}
|
|
8
9
|
}
|
|
9
10
|
exports.AbstractParser = AbstractParser;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
export default class DateParser {
|
|
2
3
|
private now;
|
|
3
4
|
private parsers;
|
|
4
5
|
private constructor();
|
|
5
|
-
static Parser(now: () => number): DateParser;
|
|
6
|
+
static Parser(now: () => number, locale: Locale): DateParser;
|
|
6
7
|
parse(str: string): number | null;
|
|
7
8
|
}
|
|
@@ -7,15 +7,15 @@ const schema_1 = require("@sprucelabs/schema");
|
|
|
7
7
|
const date_utility_1 = __importDefault(require("../utilities/date.utility"));
|
|
8
8
|
const ParserFactory_1 = __importDefault(require("./ParserFactory"));
|
|
9
9
|
class DateParser {
|
|
10
|
-
constructor(now) {
|
|
10
|
+
constructor(now, locale) {
|
|
11
11
|
this.parsers = [];
|
|
12
12
|
this.now = now;
|
|
13
|
-
const parsers = ParserFactory_1.default.Factory(now);
|
|
13
|
+
const parsers = ParserFactory_1.default.Factory(now, locale);
|
|
14
14
|
this.parsers = [...parsers.all()];
|
|
15
15
|
}
|
|
16
|
-
static Parser(now) {
|
|
17
|
-
(0, schema_1.assertOptions)({ now }, ['now']);
|
|
18
|
-
return new this(now);
|
|
16
|
+
static Parser(now, locale) {
|
|
17
|
+
(0, schema_1.assertOptions)({ now, locale }, ['now', 'locale']);
|
|
18
|
+
return new this(now, locale);
|
|
19
19
|
}
|
|
20
20
|
parse(str) {
|
|
21
21
|
const now = this.now();
|
|
@@ -30,6 +30,9 @@ class DateParser {
|
|
|
30
30
|
parsed = parser.parse(parsed, date, context);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
+
else {
|
|
34
|
+
parsed = '';
|
|
35
|
+
}
|
|
33
36
|
if (parsed === original) {
|
|
34
37
|
return null;
|
|
35
38
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { Locale } from '../types/calendar.types';
|
|
1
2
|
import { Parser } from './AbstractParser';
|
|
2
3
|
export default class ParserFactory {
|
|
4
|
+
private locale;
|
|
3
5
|
all(): Parser[];
|
|
4
6
|
private now;
|
|
5
7
|
private strategies;
|
|
6
8
|
private constructor();
|
|
7
|
-
static Factory(now: () => number): ParserFactory;
|
|
9
|
+
static Factory(now: () => number, locale: Locale): ParserFactory;
|
|
8
10
|
Parser(parserType: ParserStrategy): Parser;
|
|
9
11
|
}
|
|
10
12
|
export type ParserStrategy = 'Year' | 'Month' | 'Dow' | 'Time' | 'Week';
|
|
@@ -18,18 +18,19 @@ class ParserFactory {
|
|
|
18
18
|
this.Parser('Time'),
|
|
19
19
|
];
|
|
20
20
|
}
|
|
21
|
-
constructor(now) {
|
|
21
|
+
constructor(now, locale) {
|
|
22
22
|
this.strategies = {
|
|
23
|
-
Year: () => new YearParser_1.default(this.now),
|
|
24
|
-
Month: () => new MonthParser_1.default(this.now),
|
|
25
|
-
Dow: () => new DowParser_1.default(this.now),
|
|
26
|
-
Time: () => new TimeParser_1.default(this.now),
|
|
27
|
-
Week: () => new WeekParser_1.default(this.now),
|
|
23
|
+
Year: () => new YearParser_1.default(this.now, this.locale),
|
|
24
|
+
Month: () => new MonthParser_1.default(this.now, this.locale),
|
|
25
|
+
Dow: () => new DowParser_1.default(this.now, this.locale),
|
|
26
|
+
Time: () => new TimeParser_1.default(this.now, this.locale),
|
|
27
|
+
Week: () => new WeekParser_1.default(this.now, this.locale),
|
|
28
28
|
};
|
|
29
29
|
this.now = now;
|
|
30
|
+
this.locale = locale;
|
|
30
31
|
}
|
|
31
|
-
static Factory(now) {
|
|
32
|
-
return new this(now);
|
|
32
|
+
static Factory(now, locale) {
|
|
33
|
+
return new this(now, locale);
|
|
33
34
|
}
|
|
34
35
|
Parser(parserType) {
|
|
35
36
|
return this.strategies[parserType]();
|
|
@@ -13,19 +13,21 @@ class TimeParser extends AbstractParser_1.AbstractParser {
|
|
|
13
13
|
return str;
|
|
14
14
|
}
|
|
15
15
|
if (match) {
|
|
16
|
-
date.hour =
|
|
16
|
+
date.hour =
|
|
17
|
+
parseInt(match, 10) + this.locale.getTimezoneOffsetMinutes() / 60;
|
|
17
18
|
date.minute = 0;
|
|
19
|
+
str = str.replace(match, '');
|
|
18
20
|
}
|
|
19
|
-
if (
|
|
20
|
-
date.minute = parseInt(
|
|
21
|
+
if (match.includes(':')) {
|
|
22
|
+
date.minute = parseInt(match.split(':')[1], 10);
|
|
21
23
|
}
|
|
22
|
-
if (
|
|
24
|
+
if (match.includes('pm')) {
|
|
23
25
|
date.hour += 12;
|
|
24
26
|
}
|
|
25
|
-
else if (date.hour === 12 &&
|
|
27
|
+
else if (date.hour === 12 && match.includes('am')) {
|
|
26
28
|
date.hour = 0;
|
|
27
29
|
}
|
|
28
|
-
if (!context.hasYear && date_utility_1.default.date(date) < this.now()
|
|
30
|
+
if (!context.hasYear && date_utility_1.default.date(date) < this.now()) {
|
|
29
31
|
date.hour += 12;
|
|
30
32
|
}
|
|
31
33
|
return str;
|