@spoot/day 1.0.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/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @spoot/day
2
+
3
+ Type-safe date abstractions: `Day`, `Week`, `Month`, `CalendarWeek`, and `DaySelector`. All values are plain-object serializable and free of timezone surprises.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install @spoot/day
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { Day, Week, Month, DaySelector } from "@spoot/day";
15
+
16
+ const today = Day.today();
17
+ const week = Week.containing(today);
18
+ const month = Month.containing(today);
19
+ ```
20
+
21
+ - **`Day`** – calendar date (YYYY-MM-DD), no time component
22
+ - **`Week`** – ISO week with start/end days
23
+ - **`Month`** – calendar month with helpers for iterating days
24
+ - **`CalendarWeek`** – a week as displayed in a calendar grid (may span two months)
25
+ - **`DaySelector`** – predicate for matching days (e.g. every Monday, last day of month)
26
+
27
+ ## Development
28
+
29
+ ```sh
30
+ pnpm typecheck # type-check
31
+ pnpm test # run Jest tests
32
+ pnpm build:lib # compile to dist/
33
+ ```
@@ -0,0 +1,7 @@
1
+ /**
2
+ * For a detailed explanation regarding each configuration property, visit:
3
+ * https://jestjs.io/docs/configuration
4
+ */
5
+ import type { Config } from "jest";
6
+ declare const config: Config;
7
+ export default config;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ /**
3
+ * For a detailed explanation regarding each configuration property, visit:
4
+ * https://jestjs.io/docs/configuration
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const config = {
8
+ // All imported modules in your tests should be mocked automatically
9
+ // automock: false,
10
+ // Stop running tests after `n` failures
11
+ // bail: 0,
12
+ // The directory where Jest should store its cached dependency information
13
+ // cacheDirectory: "/private/var/folders/13/m7rrsxgj30l1wbqky4lk4y500000gn/T/jest_dx",
14
+ // Automatically clear mock calls, instances, contexts and results before every test
15
+ clearMocks: true,
16
+ // Indicates whether the coverage information should be collected while executing the test
17
+ // collectCoverage: false,
18
+ // An array of glob patterns indicating a set of files for which coverage information should be collected
19
+ // collectCoverageFrom: undefined,
20
+ // The directory where Jest should output its coverage files
21
+ // coverageDirectory: undefined,
22
+ // An array of regexp pattern strings used to skip coverage collection
23
+ // coveragePathIgnorePatterns: [
24
+ // "/node_modules/"
25
+ // ],
26
+ // Indicates which provider should be used to instrument code for coverage
27
+ // coverageProvider: "v8",
28
+ // A list of reporter names that Jest uses when writing coverage reports
29
+ // coverageReporters: [
30
+ // "json",
31
+ // "text",
32
+ // "lcov",
33
+ // "clover"
34
+ // ],
35
+ // An object that configures minimum threshold enforcement for coverage results
36
+ // coverageThreshold: undefined,
37
+ // A path to a custom dependency extractor
38
+ // dependencyExtractor: undefined,
39
+ // Make calling deprecated APIs throw helpful error messages
40
+ // errorOnDeprecated: false,
41
+ // The default configuration for fake timers
42
+ // fakeTimers: {
43
+ // "enableGlobally": false
44
+ // },
45
+ // Force coverage collection from ignored files using an array of glob patterns
46
+ // forceCoverageMatch: [],
47
+ // A path to a module which exports an async function that is triggered once before all test suites
48
+ // globalSetup: undefined,
49
+ // A path to a module which exports an async function that is triggered once after all test suites
50
+ // globalTeardown: undefined,
51
+ // A set of global variables that need to be available in all test environments
52
+ // globals: {},
53
+ // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
54
+ // maxWorkers: "50%",
55
+ // An array of directory names to be searched recursively up from the requiring module's location
56
+ // moduleDirectories: [
57
+ // "node_modules"
58
+ // ],
59
+ // An array of file extensions your modules use
60
+ // moduleFileExtensions: [
61
+ // "js",
62
+ // "mjs",
63
+ // "cjs",
64
+ // "jsx",
65
+ // "ts",
66
+ // "tsx",
67
+ // "json",
68
+ // "node"
69
+ // ],
70
+ // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
71
+ // moduleNameMapper: {},
72
+ // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
73
+ // modulePathIgnorePatterns: [],
74
+ // Activates notifications for test results
75
+ // notify: false,
76
+ // An enum that specifies notification mode. Requires { notify: true }
77
+ // notifyMode: "failure-change",
78
+ // A preset that is used as a base for Jest's configuration
79
+ // preset: undefined,
80
+ // Run tests from one or more projects
81
+ // projects: undefined,
82
+ // Use this configuration option to add custom reporters to Jest
83
+ // reporters: undefined,
84
+ // Automatically reset mock state before every test
85
+ // resetMocks: false,
86
+ // Reset the module registry before running each individual test
87
+ // resetModules: false,
88
+ // A path to a custom resolver
89
+ // resolver: undefined,
90
+ // Automatically restore mock state and implementation before every test
91
+ // restoreMocks: false,
92
+ // The root directory that Jest should scan for tests and modules within
93
+ // rootDir: undefined,
94
+ // A list of paths to directories that Jest should use to search for files in
95
+ // roots: [
96
+ // "<rootDir>"
97
+ // ],
98
+ // Allows you to use a custom runner instead of Jest's default test runner
99
+ // runner: "jest-runner",
100
+ // The paths to modules that run some code to configure or set up the testing environment before each test
101
+ // setupFiles: [],
102
+ // A list of paths to modules that run some code to configure or set up the testing framework before each test
103
+ // setupFilesAfterEnv: [],
104
+ // The number of seconds after which a test is considered as slow and reported as such in the results.
105
+ // slowTestThreshold: 5,
106
+ // A list of paths to snapshot serializer modules Jest should use for snapshot testing
107
+ // snapshotSerializers: [],
108
+ // The test environment that will be used for testing
109
+ // testEnvironment: "jest-environment-node",
110
+ // Options that will be passed to the testEnvironment
111
+ // testEnvironmentOptions: {},
112
+ // Adds a location field to test results
113
+ // testLocationInResults: false,
114
+ // The glob patterns Jest uses to detect test files
115
+ // testMatch: [
116
+ // "**/__tests__/**/*.[jt]s?(x)",
117
+ // "**/?(*.)+(spec|test).[tj]s?(x)"
118
+ // ],
119
+ // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
120
+ testPathIgnorePatterns: ["/node_modules/", "/dist/"],
121
+ // The regexp pattern or array of patterns that Jest uses to detect test files
122
+ // testRegex: [],
123
+ // This option allows the use of a custom results processor
124
+ // testResultsProcessor: undefined,
125
+ // This option allows use of a custom test runner
126
+ // testRunner: "jest-circus/runner",
127
+ // A map from regular expressions to paths to transformers
128
+ transform: {
129
+ "^.+\\.tsx?$": "ts-jest",
130
+ },
131
+ // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
132
+ // transformIgnorePatterns: [
133
+ // "/node_modules/",
134
+ // "\\.pnp\\.[^\\/]+$"
135
+ // ],
136
+ // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
137
+ // unmockedModulePathPatterns: undefined,
138
+ // Indicates whether each individual test should be reported during the run
139
+ // verbose: undefined,
140
+ // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
141
+ // watchPathIgnorePatterns: [],
142
+ // Whether to use watchman for file crawling
143
+ // watchman: true,
144
+ };
145
+ exports.default = config;
@@ -0,0 +1,12 @@
1
+ import { Day } from "./Day";
2
+ export declare class CalendarWeek {
3
+ private readonly start;
4
+ static allSpanning(start: Day, end: Day): CalendarWeek[];
5
+ constructor(start: Day);
6
+ get next(): CalendarWeek;
7
+ get previous(): CalendarWeek;
8
+ get firstDay(): Day;
9
+ get lastDay(): Day;
10
+ toString(): string;
11
+ get days(): Day[];
12
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalendarWeek = void 0;
4
+ class CalendarWeek {
5
+ start;
6
+ static allSpanning(start, end) {
7
+ if (!start.lte(end)) {
8
+ throw new Error("start must be less than or equal to end");
9
+ }
10
+ const weeks = [start.calendarWeek];
11
+ for (let cursor = start.nextWeek; cursor.lte(end); cursor = cursor.nextWeek) {
12
+ weeks.push(cursor.calendarWeek);
13
+ }
14
+ return weeks;
15
+ }
16
+ constructor(start) {
17
+ this.start = start;
18
+ if (this.start.dayOfWeek !== 0) {
19
+ throw new Error("CalendarWeek must start on a Sunday");
20
+ }
21
+ }
22
+ get next() {
23
+ return new CalendarWeek(this.start.add(0, 0, 7));
24
+ }
25
+ get previous() {
26
+ return new CalendarWeek(this.start.add(0, 0, -7));
27
+ }
28
+ get firstDay() {
29
+ return this.start;
30
+ }
31
+ get lastDay() {
32
+ return this.start.add(0, 0, 6);
33
+ }
34
+ toString() {
35
+ return `${this.start.print()} - ${this.start.add(0, 0, 6).print()}`;
36
+ }
37
+ get days() {
38
+ return [
39
+ this.start,
40
+ this.start.add(0, 0, 1),
41
+ this.start.add(0, 0, 2),
42
+ this.start.add(0, 0, 3),
43
+ this.start.add(0, 0, 4),
44
+ this.start.add(0, 0, 5),
45
+ this.start.add(0, 0, 6),
46
+ ];
47
+ }
48
+ }
49
+ exports.CalendarWeek = CalendarWeek;
@@ -0,0 +1,65 @@
1
+ import { CalendarWeek } from "./CalendarWeek";
2
+ export declare class Day {
3
+ static from(input: string | Day | Date): Day;
4
+ static get today(): Day;
5
+ static min(a: Day, b: Day): Day;
6
+ static max(a: Day, b: Day): Day;
7
+ private readonly date;
8
+ constructor(year?: number, month?: number, day?: number);
9
+ get jsDate(): Date;
10
+ get utcMidnight(): Date;
11
+ get year(): number;
12
+ /**
13
+ * 0-indexed month of the day
14
+ */
15
+ get month(): number;
16
+ /**
17
+ * Day of the month
18
+ */
19
+ get day(): number;
20
+ get dayOfYear(): number;
21
+ private _isFridayOrSaturday;
22
+ get isFridayOrSaturday(): boolean;
23
+ /**
24
+ * Zero-based day of the week as a number
25
+ */
26
+ private _dayOfWeek;
27
+ get dayOfWeek(): number;
28
+ private _nextDay;
29
+ get nextDay(): Day;
30
+ private _previousDay;
31
+ get previousDay(): Day;
32
+ private _daysInMonth;
33
+ get daysInMonth(): number;
34
+ private _startOfMonth;
35
+ get startOfMonth(): Day;
36
+ private _endOfMonth;
37
+ get endOfMonth(): Day;
38
+ private _weekOfYear;
39
+ get weekOfYear(): number;
40
+ private _startOfWeek;
41
+ get startOfWeek(): Day;
42
+ private _calendarWeek;
43
+ get calendarWeek(): CalendarWeek;
44
+ private _nextWeek;
45
+ get nextWeek(): Day;
46
+ private _prevWeek;
47
+ get prevWeek(): Day;
48
+ add(years: number, months: number, days: number): Day;
49
+ eq(day: Day): boolean;
50
+ lt(day: Day): boolean;
51
+ lte(day: Day): boolean;
52
+ gt(day: Day): boolean;
53
+ gte(day: Day): boolean;
54
+ neq(day: Day): boolean;
55
+ valueOf(): number;
56
+ print(): string;
57
+ toJSON(): string;
58
+ isSameMonth(day: Day): boolean;
59
+ /**
60
+ * Determines the difference between the two days, in days. If the argument
61
+ * is in the future the result is positive
62
+ */
63
+ diff(day: Day): number;
64
+ compare(other: Day): 1 | -1 | 0;
65
+ }
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Day = void 0;
4
+ const CalendarWeek_1 = require("./CalendarWeek");
5
+ const Month_1 = require("./Month");
6
+ const CURRENT_YEAR = new global.Date().getFullYear();
7
+ const PATTERN = /^(\d{4})-(\d{2})-(\d{2})(?:T\d\d:\d\d:\d\d)?$/;
8
+ class Day {
9
+ static from(input) {
10
+ if (input instanceof Day) {
11
+ return input;
12
+ }
13
+ if (input instanceof Date) {
14
+ return new Day(input.getFullYear(), input.getMonth(), input.getDate());
15
+ }
16
+ const match = input.match(PATTERN);
17
+ if (!match) {
18
+ throw new Error(`Invalid date format: ${input}`);
19
+ }
20
+ return new Day(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
21
+ }
22
+ static get today() {
23
+ const now = new Date();
24
+ return new Day(now.getFullYear(), now.getMonth(), now.getDate());
25
+ }
26
+ static min(a, b) {
27
+ return b.lt(a) ? b : a;
28
+ }
29
+ static max(a, b) {
30
+ return b.gt(a) ? b : a;
31
+ }
32
+ date;
33
+ constructor(year, month, day) {
34
+ if (year === undefined || month === undefined || day === undefined) {
35
+ const now = new Date();
36
+ year = now.getFullYear();
37
+ month = now.getMonth();
38
+ day = now.getDate();
39
+ }
40
+ else {
41
+ year ??= 0;
42
+ month ??= 0;
43
+ day ??= 1;
44
+ }
45
+ this.date = new Date(year, month, day);
46
+ }
47
+ get jsDate() {
48
+ return this.date;
49
+ }
50
+ get utcMidnight() {
51
+ return new Date(Date.UTC(this.year, this.month, this.day));
52
+ }
53
+ get year() {
54
+ return this.date.getFullYear();
55
+ }
56
+ /**
57
+ * 0-indexed month of the day
58
+ */
59
+ get month() {
60
+ return this.date.getMonth();
61
+ }
62
+ /**
63
+ * Day of the month
64
+ */
65
+ get day() {
66
+ return this.date.getDate();
67
+ }
68
+ get dayOfYear() {
69
+ let dayOfMonth = this.day;
70
+ for (let prev = this.add(0, -1, 0); prev.year === this.year; prev = prev.add(0, -1, 0)) {
71
+ dayOfMonth += prev.daysInMonth;
72
+ }
73
+ return dayOfMonth;
74
+ }
75
+ _isFridayOrSaturday;
76
+ get isFridayOrSaturday() {
77
+ return (this._isFridayOrSaturday ??= this.date.getDay() >= 5);
78
+ }
79
+ /**
80
+ * Zero-based day of the week as a number
81
+ */
82
+ _dayOfWeek;
83
+ get dayOfWeek() {
84
+ return (this._dayOfWeek ??= this.date.getDay());
85
+ }
86
+ _nextDay;
87
+ get nextDay() {
88
+ return (this._nextDay ??= new Day(this.year, this.month, this.day + 1));
89
+ }
90
+ _previousDay;
91
+ get previousDay() {
92
+ return (this._previousDay ??= new Day(this.year, this.month, this.day - 1));
93
+ }
94
+ _daysInMonth;
95
+ get daysInMonth() {
96
+ return (this._daysInMonth ??= new Day(this.year, this.month + 1, 0).day);
97
+ }
98
+ _startOfMonth;
99
+ get startOfMonth() {
100
+ return (this._startOfMonth ??= new Day(this.year, this.month, 1));
101
+ }
102
+ _endOfMonth;
103
+ get endOfMonth() {
104
+ return (this._endOfMonth ??= new Day(this.year, this.month, this.daysInMonth));
105
+ }
106
+ _weekOfYear;
107
+ get weekOfYear() {
108
+ return (this._weekOfYear ??= Math.floor(this.day / 7));
109
+ }
110
+ _startOfWeek;
111
+ get startOfWeek() {
112
+ return (this._startOfWeek ??= new Day(this.year, this.month, this.day - this.dayOfWeek));
113
+ }
114
+ _calendarWeek;
115
+ get calendarWeek() {
116
+ return (this._calendarWeek ??= new CalendarWeek_1.CalendarWeek(this.startOfWeek));
117
+ }
118
+ _nextWeek;
119
+ get nextWeek() {
120
+ return (this._nextWeek ??= this.add(0, 0, 7));
121
+ }
122
+ _prevWeek;
123
+ get prevWeek() {
124
+ return (this._prevWeek ??= this.add(0, 0, -7));
125
+ }
126
+ add(years, months, days) {
127
+ return new Day(this.year + years, this.month + months, this.day + days);
128
+ }
129
+ eq(day) {
130
+ return this.valueOf() === day.valueOf();
131
+ }
132
+ lt(day) {
133
+ return this.valueOf() < day.valueOf();
134
+ }
135
+ lte(day) {
136
+ return this.valueOf() <= day.valueOf();
137
+ }
138
+ gt(day) {
139
+ return this.valueOf() > day.valueOf();
140
+ }
141
+ gte(day) {
142
+ return this.valueOf() >= day.valueOf();
143
+ }
144
+ neq(day) {
145
+ return !this.eq(day);
146
+ }
147
+ valueOf() {
148
+ return this.date.valueOf();
149
+ }
150
+ print() {
151
+ return `${(0, Month_1.monthToString)(this.month)} ${this.day}${this.year === CURRENT_YEAR ? "" : `, ${this.year}`}`;
152
+ }
153
+ toJSON() {
154
+ const month = String(this.month + 1).padStart(2, "0");
155
+ const day = String(this.day).padStart(2, "0");
156
+ return `${this.year}-${month}-${day}`;
157
+ }
158
+ isSameMonth(day) {
159
+ return this.year === day.year && this.month === day.month;
160
+ }
161
+ /**
162
+ * Determines the difference between the two days, in days. If the argument
163
+ * is in the future the result is positive
164
+ */
165
+ diff(day) {
166
+ if (this.gt(day)) {
167
+ // we always want to count forward, so if day is in the past count
168
+ // the other way and flip the sign
169
+ return -day.diff(this);
170
+ }
171
+ // simple math can get us close, but we can't account for leap years and such so
172
+ // we'll just iterate until we get the right answer
173
+ let guess = (day.year - this.year) * 365 + (day.dayOfYear - this.dayOfYear);
174
+ while (true) {
175
+ const check = new Day(this.year, this.month, this.day + guess);
176
+ if (check.gt(day)) {
177
+ guess -= 1;
178
+ }
179
+ else if (check.lt(day)) {
180
+ guess += 1;
181
+ }
182
+ else {
183
+ return guess;
184
+ }
185
+ }
186
+ }
187
+ // compare this date with another, to be used in a Array.sort() callback to ensure that the results are sorted so that `this` is sorted before `other`.
188
+ compare(other) {
189
+ if (this.lt(other)) {
190
+ return -1;
191
+ }
192
+ if (this.gt(other)) {
193
+ return 1;
194
+ }
195
+ return 0;
196
+ }
197
+ }
198
+ exports.Day = Day;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const Day_1 = require("./Day");
5
+ (0, globals_1.describe)("Day", () => {
6
+ (0, globals_1.describe)("#diff()", () => {
7
+ (0, globals_1.it)("diffs two days in the same month", () => {
8
+ const day1 = new Day_1.Day(2022, 0, 1);
9
+ const day2 = new Day_1.Day(2022, 0, 15);
10
+ (0, globals_1.expect)(day1.diff(day2)).toBe(14);
11
+ });
12
+ (0, globals_1.it)("diffs two days in different months", () => {
13
+ const day1 = new Day_1.Day(2022, 0, 1);
14
+ const day2 = new Day_1.Day(2022, 1, 1);
15
+ (0, globals_1.expect)(day1.diff(day2)).toBe(31);
16
+ });
17
+ (0, globals_1.it)("diffs two days months apart", () => {
18
+ const day1 = new Day_1.Day(2022, 0, 1);
19
+ const day2 = new Day_1.Day(2022, 6, 15);
20
+ (0, globals_1.expect)(day1.diff(day2)).toBe(195);
21
+ });
22
+ (0, globals_1.it)("diffs two days in the different years", () => {
23
+ const day1 = new Day_1.Day(2022, 0, 1);
24
+ const day2 = new Day_1.Day(2023, 6, 15);
25
+ (0, globals_1.expect)(day1.diff(day2)).toBe(560);
26
+ });
27
+ (0, globals_1.it)("handles leap year", () => {
28
+ const day1 = new Day_1.Day(2020, 1, 1);
29
+ const day2 = new Day_1.Day(2020, 2, 1);
30
+ (0, globals_1.expect)(day1.diff(day2)).toBe(29);
31
+ });
32
+ (0, globals_1.it)("handles the opposite direction", () => {
33
+ const day1 = new Day_1.Day(2022, 0, 15);
34
+ const day2 = new Day_1.Day(2022, 0, 1);
35
+ (0, globals_1.expect)(day1.diff(day2)).toBe(-14);
36
+ });
37
+ });
38
+ });
@@ -0,0 +1,27 @@
1
+ import { Day } from "./Day";
2
+ export declare class Bound {
3
+ readonly month: number;
4
+ readonly day?: number | undefined;
5
+ readonly year?: number | undefined;
6
+ constructor(month: number, day?: number | undefined, year?: number | undefined);
7
+ toString(): string;
8
+ }
9
+ export declare class DaySelector {
10
+ static parse(at: string, input: string): {
11
+ startMon: string;
12
+ startDay: string;
13
+ startYear: string;
14
+ endMon: string;
15
+ endDay: string;
16
+ endYear: string;
17
+ };
18
+ static fromString(at: string, input: string): DaySelector;
19
+ static get everyDay(): DaySelector;
20
+ readonly lower: Bound;
21
+ readonly upper: Bound;
22
+ constructor(lower: [string | number, number?, number?], upper?: [string | number, number?, number?]);
23
+ toString(): string;
24
+ assertMatch(day: Day): void;
25
+ assertNoMatch(day: Day): void;
26
+ match(day: Day): boolean;
27
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DaySelector = exports.Bound = void 0;
4
+ const Month_1 = require("./Month");
5
+ const PATTERN = /^(\w{3})(?:\s*(\d{1,2}))?(?:\s*(\d{4}))?\s*(?:-\s*(\w{3})?(?:\s*(\d{1,2}))?(?:\s*(\d{4}))?)?$/i;
6
+ class Bound {
7
+ month;
8
+ day;
9
+ year;
10
+ constructor(month, day, year) {
11
+ this.month = month;
12
+ this.day = day;
13
+ this.year = year;
14
+ }
15
+ toString() {
16
+ return [(0, Month_1.monthToString)(this.month), this.day, this.year]
17
+ .filter((x) => typeof x === "string" || Number.isFinite(x))
18
+ .join("-");
19
+ }
20
+ }
21
+ exports.Bound = Bound;
22
+ class DaySelector {
23
+ static parse(at, input) {
24
+ const match = input.match(PATTERN);
25
+ if (!match) {
26
+ throw new Error(`Invalid date selector at ${at}, expected one or two dates separated by a hyphen`);
27
+ }
28
+ const [, startMon, startDay, startYear, endMon, endDay, endYear] = match;
29
+ return {
30
+ startMon,
31
+ startDay,
32
+ startYear,
33
+ endMon,
34
+ endDay,
35
+ endYear,
36
+ };
37
+ }
38
+ static fromString(at, input) {
39
+ const { startMon, startDay, startYear, endMon, endDay, endYear } = DaySelector.parse(at, input);
40
+ return new DaySelector([
41
+ startMon,
42
+ startDay ? Number(startDay) : undefined,
43
+ startYear ? Number(startYear) : undefined,
44
+ ], endMon || endDay || endYear
45
+ ? [
46
+ endMon ? endMon : startMon,
47
+ endDay ? Number(endDay) : undefined,
48
+ endYear ? Number(endYear) : undefined,
49
+ ]
50
+ : undefined);
51
+ }
52
+ static get everyDay() {
53
+ return new DaySelector(["jan", 1, 0], ["dec", 31, 9999]);
54
+ }
55
+ lower;
56
+ upper;
57
+ constructor(lower, upper) {
58
+ this.lower = new Bound((0, Month_1.parseMonth)(lower[0]), lower[1], lower[2]);
59
+ this.upper = upper
60
+ ? new Bound((0, Month_1.parseMonth)(upper[0]), upper[1], upper[2])
61
+ : new Bound(this.lower.month, this.lower.day, this.lower.year);
62
+ }
63
+ toString() {
64
+ return `${this.lower} - ${this.upper}`;
65
+ }
66
+ assertMatch(day) {
67
+ if (!this.match(day)) {
68
+ throw new Error(`Day ${day} doesn't match selector "${this}"`);
69
+ }
70
+ }
71
+ assertNoMatch(day) {
72
+ if (this.match(day)) {
73
+ throw new Error(`Day ${day} matches selector "${this}" when it should not`);
74
+ }
75
+ }
76
+ match(day) {
77
+ if ((this.lower.day != null) !== (this.upper.day != null)) {
78
+ throw new Error(`If one side of a bound specifies a day, the other side must also specify a day`);
79
+ }
80
+ if ((this.lower.year != null) !== (this.upper.year != null)) {
81
+ throw new Error(`If one side of a bound specifies a year, the other side must also specify a year`);
82
+ }
83
+ // validate years are compatible
84
+ if (!within(day.year, this.lower.year ?? -Infinity, this.upper.year ?? this.lower.year ?? Infinity))
85
+ return false;
86
+ // for the purpose of matching months and days, we pretend that every month has 31 days
87
+ // and assign a value of month * 31 + day to each end of the bounds, then plot the day
88
+ // on the same scale and check if it falls within the bounds
89
+ const lower = this.lower.month * 31 + (this.lower.day ?? 0);
90
+ const upper = this.upper.month * 31 + (this.upper.day ?? 31);
91
+ const d = day.month * 31 + day.day;
92
+ return lower > upper
93
+ ? // the bounds wrap around the end of the year
94
+ d >= lower || d <= upper
95
+ : // the bounds are within a single year
96
+ d >= lower && d <= upper;
97
+ }
98
+ }
99
+ exports.DaySelector = DaySelector;
100
+ function within(n, lower, upper) {
101
+ return n >= lower && n <= upper;
102
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const DaySelector_1 = require("./DaySelector");
5
+ const Day_1 = require("./Day");
6
+ const TEST_START = new Day_1.Day(2022, 6, 1);
7
+ const TEST_END = new Day_1.Day(2024, 6, 31);
8
+ function testCalendar(selector) {
9
+ const pattern = [];
10
+ for (let pos = TEST_START; pos.lte(TEST_END); pos = pos.nextDay) {
11
+ const matching = selector.match(pos);
12
+ const current = pattern.at(-1);
13
+ if (current?.matching !== matching) {
14
+ pattern.push({
15
+ from: pos,
16
+ to: pos,
17
+ matching,
18
+ });
19
+ }
20
+ else {
21
+ current.to = pos;
22
+ }
23
+ }
24
+ return pattern.map(({ from, to, matching }) => [
25
+ from.toJSON(),
26
+ to.toJSON(),
27
+ matching ? "X" : "O",
28
+ ]);
29
+ }
30
+ (0, globals_1.describe)("DaySelector", () => {
31
+ (0, globals_1.describe)("lower bound is January and upper bound is undefined", () => {
32
+ (0, globals_1.it)("matches days in January in any year", () => {
33
+ const selector = new DaySelector_1.DaySelector(["jan"]);
34
+ const result = testCalendar(selector);
35
+ (0, globals_1.expect)(result).toEqual([
36
+ ["2022-07-01", "2022-12-31", "O"],
37
+ ["2023-01-01", "2023-01-31", "X"],
38
+ ["2023-02-01", "2023-12-31", "O"],
39
+ ["2024-01-01", "2024-01-31", "X"],
40
+ ["2024-02-01", "2024-07-31", "O"],
41
+ ]);
42
+ });
43
+ });
44
+ (0, globals_1.describe)("lower bound is January and upper bound is December", () => {
45
+ (0, globals_1.it)("matches all days between January and December in any year", () => {
46
+ const result = testCalendar(new DaySelector_1.DaySelector(["jan"], ["dec"]));
47
+ (0, globals_1.expect)(result).toEqual([["2022-07-01", "2024-07-31", "X"]]);
48
+ });
49
+ });
50
+ (0, globals_1.describe)("bounds wrap around the end of the year", () => {
51
+ (0, globals_1.it)("matches days outside the last month and the first month if they were reversed", () => {
52
+ const result = testCalendar(new DaySelector_1.DaySelector(["oct"], ["feb"]));
53
+ (0, globals_1.expect)(result).toEqual([
54
+ ["2022-07-01", "2022-09-30", "O"],
55
+ ["2022-10-01", "2023-02-28", "X"],
56
+ ["2023-03-01", "2023-09-30", "O"],
57
+ ["2023-10-01", "2024-02-29", "X"],
58
+ ["2024-03-01", "2024-07-31", "O"],
59
+ ]);
60
+ });
61
+ });
62
+ (0, globals_1.describe)("lower bound is January 24, 2024, and upper bound is July", () => {
63
+ const selector = new DaySelector_1.DaySelector(["jan", 24, 2024], ["jun", 15, 2024]);
64
+ (0, globals_1.it)("Only matches days betwen jan-24-2024 and jul-31-2024", () => {
65
+ const result = testCalendar(selector);
66
+ (0, globals_1.expect)(result).toEqual([
67
+ ["2022-07-01", "2024-01-23", "O"],
68
+ ["2024-01-24", "2024-06-15", "X"],
69
+ ["2024-06-16", "2024-07-31", "O"],
70
+ ]);
71
+ });
72
+ });
73
+ (0, globals_1.describe)("lower bound includes year, month, and day, and upper bound is undefined", () => {
74
+ (0, globals_1.it)("matches a specific day", () => {
75
+ const result = testCalendar(new DaySelector_1.DaySelector(["jan", 24, 2024]));
76
+ (0, globals_1.expect)(result).toEqual([
77
+ ["2022-07-01", "2024-01-23", "O"],
78
+ ["2024-01-24", "2024-01-24", "X"],
79
+ ["2024-01-25", "2024-07-31", "O"],
80
+ ]);
81
+ });
82
+ });
83
+ (0, globals_1.describe)("lower bound includes month and day, and upper bound is undefined", () => {
84
+ (0, globals_1.it)("matches a specific day in any year", () => {
85
+ const result = testCalendar(new DaySelector_1.DaySelector(["jan", 24]));
86
+ (0, globals_1.expect)(result).toEqual([
87
+ ["2022-07-01", "2023-01-23", "O"],
88
+ ["2023-01-24", "2023-01-24", "X"],
89
+ ["2023-01-25", "2024-01-23", "O"],
90
+ ["2024-01-24", "2024-01-24", "X"],
91
+ ["2024-01-25", "2024-07-31", "O"],
92
+ ]);
93
+ });
94
+ });
95
+ });
@@ -0,0 +1,28 @@
1
+ import { CalendarWeek } from "./CalendarWeek";
2
+ import { Day } from "./Day";
3
+ export declare function parseMonth(input: string | number): number;
4
+ export declare function monthToString(month: number): string;
5
+ export declare class Month {
6
+ private readonly start;
7
+ static from(input: string | Month): Month;
8
+ constructor(start: Day);
9
+ toString(): string;
10
+ add(months: number): Month;
11
+ get next(): Month;
12
+ get previous(): Month;
13
+ get firstDay(): Day;
14
+ get lastDay(): Day;
15
+ get calendarWeeks(): CalendarWeek[];
16
+ get year(): number;
17
+ /**
18
+ * The month number, 0-indexed.
19
+ */
20
+ get number(): number;
21
+ contains(day: Day): boolean;
22
+ toJSON(): string;
23
+ eq(other: Month): boolean;
24
+ gt(other: Month): boolean;
25
+ gte(other: Month): boolean;
26
+ lt(other: Month): boolean;
27
+ lte(other: Month): boolean;
28
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Month = void 0;
4
+ exports.parseMonth = parseMonth;
5
+ exports.monthToString = monthToString;
6
+ const CalendarWeek_1 = require("./CalendarWeek");
7
+ const Day_1 = require("./Day");
8
+ const MONTH_STRINGS = "jan feb mar apr may jun jul aug sep oct nov dec".split(" ");
9
+ function parseMonth(input) {
10
+ if (typeof input === "number") {
11
+ return input;
12
+ }
13
+ const i = MONTH_STRINGS.indexOf(input.toLocaleLowerCase());
14
+ if (i === -1) {
15
+ throw new Error(`Invalid month name, expected a 3-character month name, got ${input}`);
16
+ }
17
+ return i;
18
+ }
19
+ function monthToString(month) {
20
+ const str = MONTH_STRINGS.at(month);
21
+ if (!str) {
22
+ throw new Error(`invalid month value ${month}`);
23
+ }
24
+ return str.slice(0, 1).toUpperCase() + str.slice(1);
25
+ }
26
+ const JSON_FORMAT = /^(\d{4})-(\d{2})$/;
27
+ class Month {
28
+ start;
29
+ static from(input) {
30
+ if (typeof input !== "string")
31
+ return input;
32
+ const match = input.match(JSON_FORMAT);
33
+ if (!match) {
34
+ throw new Error(`Invalid month format, expected YYYY-MM, got ${input}`);
35
+ }
36
+ return new Month(new Day_1.Day(Number(match[1]), Number(match[2]) - 1, 1));
37
+ }
38
+ constructor(start) {
39
+ this.start = start;
40
+ if (this.start.startOfMonth.neq(this.start)) {
41
+ throw new Error("start must be the first day of the month");
42
+ }
43
+ }
44
+ toString() {
45
+ return `${monthToString(this.start.month)} ${this.start.year}`;
46
+ }
47
+ add(months) {
48
+ return new Month(this.start.add(0, months, 0));
49
+ }
50
+ get next() {
51
+ return this.add(1);
52
+ }
53
+ get previous() {
54
+ return this.add(-1);
55
+ }
56
+ get firstDay() {
57
+ return this.start;
58
+ }
59
+ get lastDay() {
60
+ return this.start.endOfMonth;
61
+ }
62
+ get calendarWeeks() {
63
+ return CalendarWeek_1.CalendarWeek.allSpanning(this.start, this.lastDay);
64
+ }
65
+ get year() {
66
+ return this.start.year;
67
+ }
68
+ /**
69
+ * The month number, 0-indexed.
70
+ */
71
+ get number() {
72
+ return this.start.month;
73
+ }
74
+ contains(day) {
75
+ return this.start.lte(day) && this.lastDay.gte(day);
76
+ }
77
+ toJSON() {
78
+ return `${this.start.year}-${(this.start.month + 1).toString().padStart(2, "0")}`;
79
+ }
80
+ eq(other) {
81
+ return this.start.eq(other.start);
82
+ }
83
+ gt(other) {
84
+ return this.start.gt(other.start);
85
+ }
86
+ gte(other) {
87
+ return this.start.gte(other.start);
88
+ }
89
+ lt(other) {
90
+ return this.start.lt(other.start);
91
+ }
92
+ lte(other) {
93
+ return this.start.lte(other.start);
94
+ }
95
+ }
96
+ exports.Month = Month;
@@ -0,0 +1,10 @@
1
+ import { Day } from "./Day";
2
+ export declare class Week {
3
+ start: Day;
4
+ static from(start: Day | string): Week;
5
+ constructor(start: Day);
6
+ get end(): Day;
7
+ get numberInYear(): number;
8
+ get next(): Week;
9
+ print(): string;
10
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Week = void 0;
4
+ const Day_1 = require("./Day");
5
+ class Week {
6
+ start;
7
+ static from(start) {
8
+ return new Week(Day_1.Day.from(start));
9
+ }
10
+ constructor(start) {
11
+ this.start = start;
12
+ if (this.start.dayOfWeek !== 0) {
13
+ throw new Error("start must be a Sunday");
14
+ }
15
+ }
16
+ get end() {
17
+ return this.start.add(0, 0, 6);
18
+ }
19
+ get numberInYear() {
20
+ return Math.floor(this.start.dayOfYear / 7);
21
+ }
22
+ get next() {
23
+ return new Week(this.start.add(0, 0, 7));
24
+ }
25
+ print() {
26
+ return this.start.print();
27
+ }
28
+ }
29
+ exports.Week = Week;
@@ -0,0 +1,5 @@
1
+ export * from "./Day";
2
+ export * from "./Month";
3
+ export * from "./Week";
4
+ export * from "./CalendarWeek";
5
+ export * from "./DaySelector";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Day"), exports);
18
+ __exportStar(require("./Month"), exports);
19
+ __exportStar(require("./Week"), exports);
20
+ __exportStar(require("./CalendarWeek"), exports);
21
+ __exportStar(require("./DaySelector"), exports);
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.18.2/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.3.2/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+yargs-parser@21.0.3/node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/.pnpm/@types+yargs@17.0.35/node_modules/@types/yargs/index.d.ts","../../../node_modules/.pnpm/@types+istanbul-lib-coverage@2.0.6/node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/index.d.ts","../../../node_modules/.pnpm/@types+istanbul-lib-report@3.0.3/node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/.pnpm/@types+istanbul-reports@3.0.4/node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/.pnpm/@sinclair+typebox@0.27.10/node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/.pnpm/@jest+schemas@29.6.3/node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/.pnpm/@jest+types@29.6.3/node_modules/@jest/types/build/index.d.ts","../../../node_modules/.pnpm/@types+stack-utils@2.0.3/node_modules/@types/stack-utils/index.d.ts","../../../node_modules/.pnpm/jest-message-util@29.7.0/node_modules/jest-message-util/build/index.d.ts","../../../node_modules/.pnpm/@jest+console@29.7.0/node_modules/@jest/console/build/index.d.ts","../../../node_modules/.pnpm/@types+graceful-fs@4.1.9/node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/.pnpm/jest-haste-map@29.7.0/node_modules/jest-haste-map/build/index.d.ts","../../../node_modules/.pnpm/jest-resolve@29.7.0/node_modules/jest-resolve/build/index.d.ts","../../../node_modules/.pnpm/collect-v8-coverage@1.0.3/node_modules/collect-v8-coverage/index.d.ts","../../../node_modules/.pnpm/@jest+test-result@29.7.0/node_modules/@jest/test-result/build/index.d.ts","../../../node_modules/.pnpm/@jest+reporters@29.7.0/node_modules/@jest/reporters/build/index.d.ts","../../../node_modules/.pnpm/jest-changed-files@29.7.0/node_modules/jest-changed-files/build/index.d.ts","../../../node_modules/.pnpm/emittery@0.13.1/node_modules/emittery/index.d.ts","../../../node_modules/.pnpm/jest-watcher@29.7.0/node_modules/jest-watcher/build/index.d.ts","../../../node_modules/.pnpm/jest-runner@29.7.0/node_modules/jest-runner/build/index.d.ts","../../../node_modules/.pnpm/@jest+core@29.7.0/node_modules/@jest/core/build/index.d.ts","../../../node_modules/.pnpm/jest-cli@29.7.0_@types+node@25.3.2/node_modules/jest-cli/build/index.d.ts","../../../node_modules/.pnpm/jest@29.7.0_@types+node@25.3.2/node_modules/jest/build/index.d.ts","../jest.config.ts","../src/month.ts","../src/day.ts","../src/calendarweek.ts","../../../node_modules/.pnpm/jest-mock@29.7.0/node_modules/jest-mock/build/index.d.ts","../../../node_modules/.pnpm/@jest+fake-timers@29.7.0/node_modules/@jest/fake-timers/build/index.d.ts","../../../node_modules/.pnpm/@jest+environment@29.7.0/node_modules/@jest/environment/build/index.d.ts","../../../node_modules/.pnpm/@jest+expect-utils@29.7.0/node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/.pnpm/pretty-format@29.7.0/node_modules/pretty-format/build/index.d.ts","../../../node_modules/.pnpm/jest-diff@29.7.0/node_modules/jest-diff/build/index.d.ts","../../../node_modules/.pnpm/jest-matcher-utils@29.7.0/node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.d.ts","../../../node_modules/.pnpm/jest-snapshot@29.7.0/node_modules/jest-snapshot/build/index.d.ts","../../../node_modules/.pnpm/@jest+expect@29.7.0/node_modules/@jest/expect/build/index.d.ts","../../../node_modules/.pnpm/@jest+globals@29.7.0/node_modules/@jest/globals/build/index.d.ts","../src/day.test.ts","../src/dayselector.ts","../src/dayselector.test.ts","../src/week.ts","../src/index.ts"],"fileIdsList":[[67,130,133,138,142,145,147,148,149,161,179,186,195,197],[67,130,138,142,145,147,148,149,161,195,203,204,205,207,208],[67,130,138,142,145,147,148,149,161,182,186,195,216,217],[67,130,138,142,145,147,148,149,161],[67,130,138,142,145,147,148,149,161,223,224],[67,130,138,142,145,147,148,149,161,195,197,216],[67,130,138,142,145,147,148,149,161,195,216,218,225],[67,130,138,142,145,147,148,149,161,186,195,203],[67,130,138,142,145,147,148,149,161,193],[67,130,138,142,145,147,148,149,161,189,195,198,200,201,202],[67,130,138,142,145,147,148,149,161,186,188,189,190,192,194],[67,130,138,142,145,147,148,149,161,186],[67,130,138,142,145,147,148,149,161,189],[67,130,138,142,145,147,148,149,161,191],[67,127,128,130,138,142,145,147,148,149,161],[67,129,130,138,142,145,147,148,149,161],[130,138,142,145,147,148,149,161],[67,130,138,142,145,147,148,149,161,169],[67,130,131,136,138,141,142,145,147,148,149,151,161,166,178],[67,130,131,132,138,141,142,145,147,148,149,161],[67,130,133,138,142,145,147,148,149,161,179],[67,130,134,135,138,142,145,147,148,149,152,161],[67,130,135,138,142,145,147,148,149,161,166,175],[67,130,136,138,141,142,145,147,148,149,151,161],[67,129,130,137,138,142,145,147,148,149,161],[67,130,138,139,142,145,147,148,149,161],[67,130,138,140,141,142,145,147,148,149,161],[67,129,130,138,141,142,145,147,148,149,161],[67,130,138,141,142,143,145,147,148,149,161,166,178],[67,130,138,141,142,143,145,147,148,149,161,166,169],[67,117,130,138,141,142,144,145,147,148,149,151,161,166,178],[67,130,138,141,142,144,145,147,148,149,151,161,166,175,178],[67,130,138,142,144,145,146,147,148,149,161,166,175,178],[65,66,67,68,69,70,71,72,73,74,75,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185],[67,130,138,141,142,145,147,148,149,161],[67,130,138,142,145,147,149,161],[67,130,138,142,145,147,148,149,150,161,178],[67,130,138,141,142,145,147,148,149,151,161,166],[67,130,138,142,145,147,148,149,152,161],[67,130,138,142,145,147,148,149,153,161],[67,130,138,141,142,145,147,148,149,156,161],[67,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185],[67,130,138,142,145,147,148,149,158,161],[67,130,138,142,145,147,148,149,159,161],[67,130,135,138,142,145,147,148,149,151,161,169],[67,130,138,141,142,145,147,148,149,161,162],[67,130,138,142,145,147,148,149,161,163,179,182],[67,130,138,141,142,145,147,148,149,161,166,168,169],[67,130,138,142,145,147,148,149,161,167,169],[67,130,138,142,145,147,148,149,161,169,179],[67,130,138,142,145,147,148,149,161,170],[67,127,130,138,142,145,147,148,149,161,166,172,178],[67,130,138,142,145,147,148,149,161,166,171],[67,130,138,141,142,145,147,148,149,161,173,174],[67,130,138,142,145,147,148,149,161,173,174],[67,130,135,138,142,145,147,148,149,151,161,166,175],[67,130,138,142,145,147,148,149,161,176],[67,130,138,142,145,147,148,149,151,161,177],[67,130,138,142,144,145,147,148,149,159,161,178],[67,130,138,142,145,147,148,149,161,179,180],[67,130,135,138,142,145,147,148,149,161,180],[67,130,138,142,145,147,148,149,161,166,181],[67,130,138,142,145,147,148,149,150,161,182],[67,130,138,142,145,147,148,149,161,183],[67,130,133,138,142,145,147,148,149,161],[67,130,135,138,142,145,147,148,149,161],[67,130,138,142,145,147,148,149,161,179],[67,117,130,138,142,145,147,148,149,161],[67,130,138,142,145,147,148,149,161,178],[67,130,138,142,145,147,148,149,161,184],[67,130,138,142,145,147,148,149,156,161],[67,130,138,142,145,147,148,149,161,174],[67,117,130,138,141,142,143,145,147,148,149,156,161,166,169,178,181,182,184],[67,130,138,142,145,147,148,149,161,166,185],[67,130,138,142,145,147,148,149,161,187],[67,130,138,142,145,147,148,149,161,219,222],[67,130,138,142,145,147,148,149,161,188],[67,130,138,142,145,147,148,149,161,220],[67,130,138,142,145,147,148,149,161,186,195,199],[67,130,138,142,145,147,148,149,161,190,221],[67,130,138,142,145,147,148,149,161,195,196],[67,130,138,142,145,147,148,149,161,200],[67,130,138,142,145,147,148,149,161,195,203,207],[67,130,138,142,145,147,148,149,161,195,220,223],[67,130,138,142,145,147,148,149,161,186,195,203,206],[67,130,138,142,145,147,148,149,161,195,209,210],[67,130,138,142,145,147,148,149,161,194],[67,82,85,88,89,130,138,142,145,147,148,149,161,178],[67,85,130,138,142,145,147,148,149,161,166,178],[67,85,89,130,138,142,145,147,148,149,161,178],[67,130,138,142,145,147,148,149,161,166],[67,79,130,138,142,145,147,148,149,161],[67,83,130,138,142,145,147,148,149,161],[67,81,82,85,130,138,142,145,147,148,149,161,178],[67,130,138,142,145,147,148,149,151,161,175],[67,79,130,138,142,145,147,148,149,161,186],[67,81,85,130,138,142,145,147,148,149,151,161,178],[67,76,77,78,80,84,130,138,141,142,145,147,148,149,161,166,178],[67,85,94,102,130,138,142,145,147,148,149,161],[67,77,83,130,138,142,145,147,148,149,161],[67,85,111,112,130,138,142,145,147,148,149,161],[67,77,80,85,130,138,142,145,147,148,149,161,169,178,186],[67,85,130,138,142,145,147,148,149,161],[67,81,85,130,138,142,145,147,148,149,161,178],[67,76,130,138,142,145,147,148,149,161],[67,79,80,81,83,84,85,86,87,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,130,138,142,145,147,148,149,161],[67,85,104,107,130,138,142,145,147,148,149,161],[67,85,94,95,96,130,138,142,145,147,148,149,161],[67,83,85,95,97,130,138,142,145,147,148,149,161],[67,84,130,138,142,145,147,148,149,161],[67,77,79,85,130,138,142,145,147,148,149,161],[67,85,89,95,97,130,138,142,145,147,148,149,161],[67,89,130,138,142,145,147,148,149,161],[67,83,85,88,130,138,142,145,147,148,149,161,178],[67,77,81,85,94,130,138,142,145,147,148,149,161],[67,85,104,130,138,142,145,147,148,149,161],[67,97,130,138,142,145,147,148,149,161],[67,79,85,111,130,138,142,145,147,148,149,161,169,184,186],[67,130,138,142,145,147,148,149,161,211],[67,130,138,142,145,147,148,149,161,214],[67,130,138,142,145,147,148,149,161,214,226],[67,130,138,142,145,147,148,149,161,213,215],[67,130,138,142,145,147,148,149,161,214,226,228],[67,130,138,142,145,147,148,149,161,213,214],[67,130,138,142,145,147,148,149,161,213,214,215,228,230],[67,130,138,142,145,147,148,149,161,214,215]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"237ba5ac2a95702a114a309e39c53a5bddff5f6333b325db9764df9b34f3502b","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"f83fb2b1338afbb3f9d733c7d6e8b135826c41b0518867df0c0ace18ae1aa270","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9451a46a89ed209e2e08329e6cac59f89356eae79a7230f916d8cc38725407c7","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"cf9717ebf9dd23f5f1e55e00545df1edc40ac8a671a034974fb4ff5dfbfaacc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f64deb26664af64dc274637343bde8d82f930c77af05a412c7d310b77207a448","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"bce309f4d9b67c18d4eeff5bba6cf3e67b2b0aead9f03f75d6060c553974d7ba","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"fde38b23ab057617351c1676047d3317f651b1a6d207084e41c056ed158a77f9","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"c3877fef8a43cd434f9728f25a97575b0eb73d92f38b5c87c840daccc3e21d97","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"1dbd83860e7634f9c236647f45dbc5d3c4f9eba8827d87209d6e9826fdf4dbd5","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"e00243d23c495ca2170c9b9e20b5c92331239100b51efdc2b4401cdad859bbef","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"6fa5d56af71f07dc276aae3f6f30807a9cccf758517fb39742af72e963553d80","impliedFormat":1},{"version":"253b95673c4e01189af13e855c76a7f7c24197f4179954521bf2a50db5cfe643","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"31f24e33f22172ba0cc8cdc640779fb14c3480e10b517ad1b4564e83fa262a2b","impliedFormat":1},{"version":"f380ae8164792d9690a74f6b567b9e43d5323b580f074e50f68f983c0d073b5b","impliedFormat":1},{"version":"0fd641a3b3e3ec89058051a284135a3f30b94a325fb809c4e4159ec5495b5cdc","impliedFormat":1},{"version":"7b20065444d0353a2bc63145481e519e02d9113a098a2db079da21cb60590ef0","impliedFormat":1},{"version":"9f162ee475383c13e350c73e24db5adc246fba830b9d0cc11d7048af9bbd0a29","impliedFormat":1},{"version":"ce7c3363c40cd2fcc994517c7954954d1c70de2d972df7e45fa83837593b8687","impliedFormat":1},{"version":"6ab1224e0149cc983d5da72ff3540bc0cad8ee7b23cf2a3da136f77f76d01763","impliedFormat":1},{"version":"e059fb0805a29ea3976d703a6f082c1493ac5583ca8011e8c5b86d0a23667d0d","impliedFormat":1},{"version":"16fbf548a0337a83d30552e990b6832fd24bbc47042a8c491e1dc93029b4222f","impliedFormat":1},{"version":"0c4c7303956a4726568c801dcd81e9fbce32fbf74565f735bbcf46ba66417769","impliedFormat":1},{"version":"f39848c7895fd6373d5e30089e7fb1d10c464e7eeb37ce1ea47d188a707b162c","impliedFormat":1},{"version":"9249c34e7282d17a2749677c3521ea625f73c2b48792af08fa9c5e09abc6a882","impliedFormat":1},{"version":"94fe77ccecbebe0c003411c8a544d3697e0d05d2dfb042f6ba68ba92f1a247f9","signature":"dff92539e40f5118bfa1c01463fbadc69fb33c27ecd3567adb9f651e454946ba"},{"version":"c025a70523051b4291220749746e0ab313c8ec2c7feab158549906aca186dd52","signature":"f5dd12d46e5892b2f4fc662d57631ffa86849b28d34330cf8bad13e54e996702"},{"version":"7f9d7b974d196142c9849be543cd7596657c8d96309d7f6f40a3d1344a6ed233","signature":"0a114693909152c26890b259f72c1a607b520ce160d0bc34249b2f0ca1ead1ab"},{"version":"c9c6ba259493da28ff7b2dc4e766b1e42af319e2b4eb0b94dad2f5966505e50b","signature":"dfb48b952ae3f7d5aabe6db5b4a55b62358c65550f73d85f6232d6c45904d1aa"},{"version":"41ea7fd137518560e0d2af581edadadd236b685b5e2f80f083127a28e01cf0ac","impliedFormat":1},{"version":"819dddfec57391f8458929ca8e4377f030d42107ff6ec431e620b70b0695d530","impliedFormat":1},{"version":"701bdef1f4a13932f64c4ce89537f2c66301eb46daf30a16a436c991df568686","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"ac5f598a09eed39b957ae3d909b88126f3faf605bd4589c19e9ae85d23ef71e3","impliedFormat":1},{"version":"92abba98a71c0244a6bcdd3ad4d2e04f1d0a8bcae57d2bb865bf53d1ac86e3d0","impliedFormat":1},{"version":"d2afa0d86bc6f2e72c1cf2ecb2372bf1b0f002493706a81f2b9a3ee4f944e219","impliedFormat":1},{"version":"254449124e1688b65e3ca9be70e74b032180afde7339adae0559136042b4d8c3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"539fdc42084c9e2f246163e8a928e57c1226a1f72080172f40278b1cd6ea5f04","signature":"99cc67b90ae8f50b064c05a0a16b7fb4c0c0c04ba5914651166f50a003a392ce"},{"version":"f491ddb984913c0cdab5301901b5e3d8bab2dacd7a5a5d33c183dd9ccf4c8a43","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8ab3aa789293293e1c47d9d74e7f9df54724809f0fe672985066ab9f147687db","signature":"66dbcd22756ac2ed73e698720316653cfd9cbf6986f8582e7d9263ce01c26893"},"0e5234fa270c6b26815fadfa8ca7df3ee9b421d749d4872599c9b8b8dab82305"],"root":[[212,215],[227,231]],"options":{"allowJs":false,"allowSyntheticDefaultImports":true,"composite":true,"esModuleInterop":true,"importsNotUsedAsValues":0,"module":1,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","skipLibCheck":true,"strict":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":11,"useDefineForClassFields":true},"referencedMap":[[198,1],[209,2],[218,3],[219,4],[225,5],[217,6],[226,7],[204,8],[194,9],[203,10],[195,11],[193,4],[199,12],[189,4],[191,13],[192,14],[127,15],[128,15],[129,16],[67,17],[130,18],[131,19],[132,20],[65,4],[133,21],[134,22],[135,23],[136,24],[137,25],[138,26],[139,26],[140,27],[141,28],[142,29],[143,30],[68,4],[66,4],[144,31],[145,32],[146,33],[186,34],[147,35],[148,36],[149,35],[150,37],[151,38],[152,39],[153,40],[154,40],[155,40],[156,41],[157,42],[158,43],[159,44],[160,45],[161,46],[162,46],[163,47],[164,4],[165,4],[166,48],[167,49],[168,48],[169,50],[170,51],[171,52],[172,53],[173,54],[174,55],[175,56],[176,57],[177,58],[178,59],[179,60],[180,61],[181,62],[182,63],[183,64],[69,35],[70,4],[71,65],[72,66],[73,4],[74,67],[75,4],[118,68],[119,69],[120,70],[121,70],[122,71],[123,4],[124,18],[125,72],[126,69],[184,73],[185,74],[196,4],[187,4],[188,75],[190,4],[202,12],[206,4],[223,76],[205,4],[210,77],[221,78],[200,79],[222,80],[197,81],[216,4],[201,82],[208,83],[224,84],[207,85],[211,86],[220,87],[63,4],[64,4],[11,4],[13,4],[12,4],[2,4],[14,4],[15,4],[16,4],[17,4],[18,4],[19,4],[20,4],[21,4],[3,4],[22,4],[23,4],[4,4],[24,4],[28,4],[25,4],[26,4],[27,4],[29,4],[30,4],[31,4],[5,4],[32,4],[33,4],[34,4],[35,4],[6,4],[39,4],[36,4],[37,4],[38,4],[40,4],[7,4],[41,4],[46,4],[47,4],[42,4],[43,4],[44,4],[45,4],[8,4],[51,4],[48,4],[49,4],[50,4],[52,4],[9,4],[53,4],[54,4],[55,4],[57,4],[56,4],[58,4],[59,4],[10,4],[60,4],[1,4],[61,4],[62,4],[94,88],[106,89],[91,90],[107,91],[116,92],[82,93],[83,94],[81,95],[115,12],[110,96],[114,97],[85,98],[103,99],[84,100],[113,101],[79,102],[80,96],[86,103],[87,4],[93,104],[90,103],[77,105],[117,106],[108,107],[97,108],[96,103],[98,109],[101,110],[95,111],[99,112],[111,12],[88,113],[89,114],[102,115],[78,91],[105,116],[104,103],[92,114],[100,117],[109,4],[76,4],[112,118],[212,119],[215,120],[227,121],[214,122],[229,123],[228,124],[231,125],[213,126],[230,120]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@spoot/day",
3
+ "version": "1.0.0",
4
+ "description": "Date utilities: type-safe Day, Week, Month, and CalendarWeek abstractions",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/spalger/spoot.git",
8
+ "directory": "packages/day"
9
+ },
10
+ "license": "MIT",
11
+ "main": "dist/src/index.js",
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "scripts": {
16
+ "build:lib": "tsc -b",
17
+ "typecheck": "tsc --noEmit",
18
+ "test": "jest",
19
+ "check": "pnpm typecheck && pnpm test"
20
+ },
21
+ "devDependencies": {
22
+ "@jest/globals": "^29.7.0",
23
+ "jest": "^29.7.0",
24
+ "ts-jest": "^29.4.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ }
29
+ }