@alanszp/business-days-date-fns 4.0.10 → 4.0.11
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/dist/cache/index.js.map +1 -1
- package/dist/utils/withNonBusinessDays.d.ts +5 -5
- package/dist/utils/withNonBusinessDays.js.map +1 -1
- package/dist/utils/withNonBusinessDays.test.js +130 -6
- package/dist/utils/withNonBusinessDays.test.js.map +1 -1
- package/dist/utils/wrapperNonBusinessDays.d.ts +2 -2
- package/dist/utils/wrapperNonBusinessDays.js +8 -6
- package/dist/utils/wrapperNonBusinessDays.js.map +1 -1
- package/package.json +2 -2
- package/src/cache/index.ts +1 -1
- package/src/utils/withNonBusinessDays.test.ts +197 -6
- package/src/utils/withNonBusinessDays.ts +5 -5
- package/src/utils/wrapperNonBusinessDays.ts +10 -8
package/dist/cache/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA8C;AAE9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEnC,MAAM,eAAe,GAA4B;IAC/C,GAAG,EAAE,GAAG;IACR,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,IAAI;IACX,cAAc,EAAE,IAAI;CACrB,CAAC;AAEK,MAAM,yBAAyB,GAAG,CAAC,OAAiC,EAAE,EAAE,CAC7E,IAAI,mBAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA8C;AAE9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEnC,MAAM,eAAe,GAA4B;IAC/C,GAAG,EAAE,GAAG;IACR,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,IAAI;IACX,cAAc,EAAE,IAAI;CACrB,CAAC;AAEK,MAAM,yBAAyB,GAAG,CAAC,OAAiC,EAAE,EAAE,CAC7E,IAAI,mBAAQ,CAA0B,OAAO,IAAI,eAAe,CAAC,CAAC;AADvD,QAAA,yBAAyB,6BAC8B"}
|
|
@@ -2,10 +2,10 @@ import { Options as CacheOptions } from "lru-cache";
|
|
|
2
2
|
export declare type WithNonBusinessDaysOutput<IdentifyObject> = {
|
|
3
3
|
addBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<Date> | Date;
|
|
4
4
|
subBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<Date> | Date;
|
|
5
|
-
differenceInBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify
|
|
6
|
-
isNonBusinessDay: (date: Date, identify
|
|
7
|
-
isBusinessDay: (date: Date, identify
|
|
5
|
+
differenceInBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<number> | number;
|
|
6
|
+
isNonBusinessDay: (date: Date, identify?: IdentifyObject) => Promise<boolean> | boolean;
|
|
7
|
+
isBusinessDay: (date: Date, identify?: IdentifyObject) => Promise<boolean> | boolean;
|
|
8
8
|
};
|
|
9
|
-
export declare function withNonBusinessDays<Options>(fetchStrategy: ((opts
|
|
10
|
-
serializeOptions?: (opts
|
|
9
|
+
export declare function withNonBusinessDays<Options>(fetchStrategy: ((opts: Options) => Promise<Date[]>) | Date[], cacheOpts?: CacheOptions<string, Date[]> & {
|
|
10
|
+
serializeOptions?: (opts: Options) => string;
|
|
11
11
|
}): WithNonBusinessDaysOutput<Options>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withNonBusinessDays.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA8C;AAE9C,uDAAoD;AACpD,uDAAoD;AACpD,yEAAsE;AACtE,qEAGkC;AAClC,yDAAsD;AACtD,mDAAgD;AAChD,oCAAqD;AA4BrD,SAAgB,mBAAmB,CACjC,
|
|
1
|
+
{"version":3,"file":"withNonBusinessDays.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA8C;AAE9C,uDAAoD;AACpD,uDAAoD;AACpD,yEAAsE;AACtE,qEAGkC;AAClC,yDAAsD;AACtD,mDAAgD;AAChD,oCAAqD;AA4BrD,SAAgB,mBAAmB,CACjC,aAA4D,EAC5D,SAEC;IAED,IAAI,CAAC,IAAA,gBAAU,EAAC,aAAa,CAAC,IAAI,CAAC,IAAA,gBAAO,EAAC,aAAa,CAAC,EAAE;QACzD,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;KACH;IAED,MAAM,KAAK,GAAG,IAAA,iCAAyB,EAAC,SAAS,CAAC,CAAC;IAEnD,OAAO;QACL,eAAe,EAAE,IAAA,4DAAmC,EAClD,KAAK,EACL,aAAa,EACb,iCAAe,EACf,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,gBAAgB,CAC5B;QACD,wBAAwB,EAAE,IAAA,4DAAmC,EAC3D,KAAK,EAEL,aAAa,EACb,mDAAwB,EACxB,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,gBAAgB,CAC5B;QACD,eAAe,EAAE,IAAA,4DAAmC,EAClD,KAAK,EACL,aAAa,EACb,iCAAe,EACf,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,gBAAgB,CAC5B;QACD,gBAAgB,EAAE,IAAA,mDAA0B,EAC1C,KAAK,EACL,aAAa,EACb,mCAAgB,EAChB,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,gBAAgB,CAC5B;QACD,aAAa,EAAE,IAAA,mDAA0B,EACvC,KAAK,EACL,aAAa,EACb,6BAAa,EACb,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,gBAAgB,CAC5B;KACF,CAAC;AACJ,CAAC;AA/CD,kDA+CC"}
|
|
@@ -17,7 +17,7 @@ const withNonBusinessDays_1 = require("./withNonBusinessDays");
|
|
|
17
17
|
const mockNBD = [new Date("2022-01-19"), new Date("2022-01-20")];
|
|
18
18
|
const mockSerializer = jest.fn();
|
|
19
19
|
describe("withNonBusinessDays", () => {
|
|
20
|
-
it("
|
|
20
|
+
it("bootstrapping sync should return fns", () => {
|
|
21
21
|
const { addBusinessDays, subBusinessDays, isBusinessDay, isNonBusinessDay, differenceInBusinessDays, } = (0, withNonBusinessDays_1.withNonBusinessDays)([new Date("2022-01-01"), new Date("2022-01-10")]);
|
|
22
22
|
expect(typeof addBusinessDays).toBe("function");
|
|
23
23
|
expect(typeof subBusinessDays).toBe("function");
|
|
@@ -25,7 +25,7 @@ describe("withNonBusinessDays", () => {
|
|
|
25
25
|
expect(typeof isNonBusinessDay).toBe("function");
|
|
26
26
|
expect(typeof differenceInBusinessDays).toBe("function");
|
|
27
27
|
});
|
|
28
|
-
it("
|
|
28
|
+
it("bootstrapping async should return fns and call serializer", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
29
|
const mockFetchStrategy = jest.fn();
|
|
30
30
|
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
31
31
|
const { addBusinessDays, subBusinessDays, isBusinessDay, isNonBusinessDay, differenceInBusinessDays, } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
@@ -40,7 +40,7 @@ describe("withNonBusinessDays", () => {
|
|
|
40
40
|
expect(mockSerializer).toHaveBeenCalledWith({ month: 1 });
|
|
41
41
|
expect(mockFetchStrategy).toHaveBeenCalled();
|
|
42
42
|
}));
|
|
43
|
-
it("
|
|
43
|
+
it("bootstrapping async addBusinessDays", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
44
|
const mockFetchStrategy = jest.fn();
|
|
45
45
|
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
46
46
|
const { addBusinessDays } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
@@ -49,7 +49,131 @@ describe("withNonBusinessDays", () => {
|
|
|
49
49
|
const result = yield addBusinessDays(new Date("2022-01-18"), 1);
|
|
50
50
|
expect(result).toEqual(new Date("2022-01-21"));
|
|
51
51
|
}));
|
|
52
|
-
it("
|
|
52
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const mockFetchStrategy = jest.fn();
|
|
54
|
+
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
55
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
56
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
57
|
+
});
|
|
58
|
+
yield isBusinessDay(new Date("2022-01-18"));
|
|
59
|
+
yield isBusinessDay(new Date("2022-01-20"));
|
|
60
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
61
|
+
}));
|
|
62
|
+
it("bootstrapping async without identify should call fetchStrategy but just one time, second go to cache if the promise is resolved before the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
const mockFetchStrategy = jest.fn();
|
|
64
|
+
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
65
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
66
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
67
|
+
});
|
|
68
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"));
|
|
69
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"));
|
|
70
|
+
yield Promise.all([promise1, promise2]);
|
|
71
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
72
|
+
}));
|
|
73
|
+
it("bootstrapping async without identify should call fetchStrategy but just one time, second go to cache, even if the promise is resolved after the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
const mockFetchStrategy = jest.fn();
|
|
75
|
+
let shouldResolve = false;
|
|
76
|
+
function verifyResolve(resolve) {
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
if (shouldResolve) {
|
|
79
|
+
resolve(mockNBD);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
verifyResolve(resolve);
|
|
83
|
+
}
|
|
84
|
+
}, 0);
|
|
85
|
+
}
|
|
86
|
+
mockFetchStrategy.mockImplementation(() => new Promise(verifyResolve));
|
|
87
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
88
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
89
|
+
});
|
|
90
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"));
|
|
91
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"));
|
|
92
|
+
shouldResolve = true;
|
|
93
|
+
expect(yield Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
94
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
95
|
+
}));
|
|
96
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache if the promise is resolved before the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
+
const mockFetchStrategy = jest.fn();
|
|
98
|
+
mockFetchStrategy.mockImplementation((obj) => Promise.resolve(mockNBD));
|
|
99
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
100
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
101
|
+
});
|
|
102
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
103
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
104
|
+
yield Promise.all([promise1, promise2]);
|
|
105
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
106
|
+
}));
|
|
107
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache, even if the promise is resolved after the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
+
const mockFetchStrategy = jest.fn();
|
|
109
|
+
let shouldResolve = false;
|
|
110
|
+
function verifyResolve(resolve) {
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
if (shouldResolve) {
|
|
113
|
+
resolve(mockNBD);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
verifyResolve(resolve);
|
|
117
|
+
}
|
|
118
|
+
}, 0);
|
|
119
|
+
}
|
|
120
|
+
mockFetchStrategy.mockImplementation((obj) => new Promise(verifyResolve));
|
|
121
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
122
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
123
|
+
});
|
|
124
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
125
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"), { number: 1 });
|
|
126
|
+
shouldResolve = true;
|
|
127
|
+
expect(yield Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
128
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
129
|
+
}));
|
|
130
|
+
it("bootstrapping async should call fetchStrategy two times if the promise is resolved before the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const mockFetchStrategy = jest.fn();
|
|
132
|
+
mockFetchStrategy.mockImplementation((obj) => Promise.resolve(mockNBD));
|
|
133
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
134
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
135
|
+
});
|
|
136
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
137
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"), { number: 2 });
|
|
138
|
+
yield Promise.all([promise1, promise2]);
|
|
139
|
+
expect(mockFetchStrategy).toBeCalledTimes(2);
|
|
140
|
+
}));
|
|
141
|
+
it("bootstrapping async should call fetchStrategy two times even if the promise is resolved after the second call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
+
let shouldResolve1 = false;
|
|
143
|
+
function verifyResolve1(resolve) {
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
if (shouldResolve1) {
|
|
146
|
+
resolve(mockNBD);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
verifyResolve1(resolve);
|
|
150
|
+
}
|
|
151
|
+
}, 0);
|
|
152
|
+
}
|
|
153
|
+
let shouldResolve2 = false;
|
|
154
|
+
function verifyResolve2(resolve) {
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
if (shouldResolve2) {
|
|
157
|
+
resolve(mockNBD);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
verifyResolve2(resolve);
|
|
161
|
+
}
|
|
162
|
+
}, 0);
|
|
163
|
+
}
|
|
164
|
+
const mockFetchStrategy = jest.fn();
|
|
165
|
+
mockFetchStrategy.mockImplementation((obj) => new Promise(obj.number == 1 ? verifyResolve1 : verifyResolve2));
|
|
166
|
+
const { isBusinessDay } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockFetchStrategy, {
|
|
167
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
168
|
+
});
|
|
169
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
170
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"), { number: 2 });
|
|
171
|
+
shouldResolve1 = true;
|
|
172
|
+
shouldResolve2 = true;
|
|
173
|
+
expect(yield Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
174
|
+
expect(mockFetchStrategy).toBeCalledTimes(2);
|
|
175
|
+
}));
|
|
176
|
+
it("bootstrapping async throw error", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
177
|
const mockFetchStrategy = jest.fn();
|
|
54
178
|
mockFetchStrategy.mockImplementation(() => Promise.reject());
|
|
55
179
|
try {
|
|
@@ -57,12 +181,12 @@ describe("withNonBusinessDays", () => {
|
|
|
57
181
|
}
|
|
58
182
|
catch (_a) { }
|
|
59
183
|
}));
|
|
60
|
-
it("
|
|
184
|
+
it("bootstrapping sync addBusinessDays", () => {
|
|
61
185
|
const { addBusinessDays } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockNBD);
|
|
62
186
|
const result = addBusinessDays(new Date("2022-01-18"), 1);
|
|
63
187
|
expect(result).toEqual(new Date("2022-01-21"));
|
|
64
188
|
});
|
|
65
|
-
it("
|
|
189
|
+
it("bootstrapping should throw error for bad input", () => {
|
|
66
190
|
try {
|
|
67
191
|
assert_1.default.throws(withNonBusinessDays_1.withNonBusinessDays.bind(null), TypeError);
|
|
68
192
|
assert_1.default.throws(withNonBusinessDays_1.withNonBusinessDays.bind(null), TypeError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withNonBusinessDays.test.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oDAA4B;
|
|
1
|
+
{"version":3,"file":"withNonBusinessDays.test.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import LRUCache from "lru-cache";
|
|
2
|
-
export declare function wrapperDateAndNumberNonBusinessDays<IdentifyObject, R>(cacheNBD: LRUCache<string, Date[]
|
|
3
|
-
export declare function wrapperDateNonBusinessDays<IdentifyObject, R>(cacheNBD: LRUCache<string, Date[]
|
|
2
|
+
export declare function wrapperDateAndNumberNonBusinessDays<IdentifyObject, R>(cacheNBD: LRUCache<string, Promise<Date[]>>, fetchStrategy: ((opts?: IdentifyObject) => Promise<Date[]>) | Date[], fn: (nonBusinessDays: Date[], dirtyDate: Date | number, dirtyAmount: number) => R, serializeOptions?: (opts?: IdentifyObject) => string): ((dirtyDate: Date | number, dirtyAmount: number) => R) | ((dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject | undefined) => Promise<R>);
|
|
3
|
+
export declare function wrapperDateNonBusinessDays<IdentifyObject, R>(cacheNBD: LRUCache<string, Promise<Date[]>>, fetchStrategy: ((opts?: IdentifyObject) => Promise<Date[]>) | Date[], fn: (nonBusinessDays: Date[], date: Date) => R, serializeOptions?: (opts?: IdentifyObject) => string): ((date: Date) => R) | ((date: Date, identify?: IdentifyObject | undefined) => Promise<R>);
|
|
@@ -27,15 +27,16 @@ function wrapperDateAndNumberNonBusinessDays(cacheNBD, fetchStrategy, fn, serial
|
|
|
27
27
|
let nonBusinessDays = [];
|
|
28
28
|
if (!cache) {
|
|
29
29
|
try {
|
|
30
|
-
|
|
31
|
-
cacheNBD.set(cacheIdentify,
|
|
30
|
+
const promise = fetchStrategy(identify);
|
|
31
|
+
cacheNBD.set(cacheIdentify, promise);
|
|
32
|
+
nonBusinessDays = yield promise;
|
|
32
33
|
}
|
|
33
34
|
catch (error) {
|
|
34
35
|
throw new errors_1.InternalServerError(error);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
else {
|
|
38
|
-
nonBusinessDays = cache;
|
|
39
|
+
nonBusinessDays = yield cache;
|
|
39
40
|
}
|
|
40
41
|
return fn(nonBusinessDays, dirtyDate, dirtyAmount);
|
|
41
42
|
});
|
|
@@ -53,15 +54,16 @@ function wrapperDateNonBusinessDays(cacheNBD, fetchStrategy, fn, serializeOption
|
|
|
53
54
|
let nonBusinessDays = [];
|
|
54
55
|
if (!cache) {
|
|
55
56
|
try {
|
|
56
|
-
|
|
57
|
-
cacheNBD.set(cacheIdentify,
|
|
57
|
+
const promise = fetchStrategy(identify);
|
|
58
|
+
cacheNBD.set(cacheIdentify, promise);
|
|
59
|
+
nonBusinessDays = yield promise;
|
|
58
60
|
}
|
|
59
61
|
catch (error) {
|
|
60
62
|
throw new errors_1.InternalServerError(error);
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
else {
|
|
64
|
-
nonBusinessDays = cache;
|
|
66
|
+
nonBusinessDays = yield cache;
|
|
65
67
|
}
|
|
66
68
|
return fn(nonBusinessDays, date);
|
|
67
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapperNonBusinessDays.js","sourceRoot":"","sources":["../../src/utils/wrapperNonBusinessDays.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAsD;AACtD,6DAAqC;AAGrC,SAAgB,mCAAmC,CACjD,
|
|
1
|
+
{"version":3,"file":"wrapperNonBusinessDays.js","sourceRoot":"","sources":["../../src/utils/wrapperNonBusinessDays.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAsD;AACtD,6DAAqC;AAGrC,SAAgB,mCAAmC,CACjD,QAA2C,EAC3C,aAAoE,EACpE,EAIM,EACN,gBAAoD;IAEpD,IAAI,IAAA,iBAAO,EAAC,aAAa,CAAC,EAAE;QAC1B,OAAO,CAAC,SAAwB,EAAE,WAAmB,EAAE,EAAE,CACvD,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;KAC7C;IAED,OAAO,CACL,SAAwB,EACxB,WAAmB,EACnB,QAAyB,EACb,EAAE;QACd,MAAM,aAAa,GAAG,gBAAgB;YACpC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE1C,IAAI,eAAe,GAAW,EAAE,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI;gBACF,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACrC,eAAe,GAAG,MAAM,OAAO,CAAC;aACjC;YAAC,OAAO,KAAc,EAAE;gBACvB,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;aAAM;YACL,eAAe,GAAG,MAAM,KAAK,CAAC;SAC/B;QAED,OAAO,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAA,CAAC;AACJ,CAAC;AAzCD,kFAyCC;AAED,SAAgB,0BAA0B,CACxC,QAA2C,EAC3C,aAAoE,EACpE,EAA8C,EAC9C,gBAAoD;IAEpD,IAAI,IAAA,iBAAO,EAAC,aAAa,CAAC,EAAE;QAC1B,OAAO,CAAC,IAAU,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAChD;IAED,OAAO,CAAO,IAAU,EAAE,QAAyB,EAAc,EAAE;QACjE,MAAM,aAAa,GAAG,gBAAgB;YACpC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE1C,IAAI,eAAe,GAAW,EAAE,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI;gBACF,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACrC,eAAe,GAAG,MAAM,OAAO,CAAC;aACjC;YAAC,OAAO,KAAc,EAAE;gBACvB,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;aAAM;YACL,eAAe,GAAG,MAAM,KAAK,CAAC;SAC/B;QAED,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAA,CAAC;AACJ,CAAC;AAhCD,gEAgCC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanszp/business-days-date-fns",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.11",
|
|
4
4
|
"description": "Wrapper for date-fns core TS/JS lib.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"assert": "^2.0.0",
|
|
36
36
|
"jest": "^27.4.7"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "a66f292c72a0825150333d43c23733ccbbfcb0cc"
|
|
39
39
|
}
|
package/src/cache/index.ts
CHANGED
|
@@ -10,4 +10,4 @@ const DEFAULT_OPTIONS: Options<string, Date[]> = {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export const buildNonBusinessDaysCache = (options?: Options<string, Date[]>) =>
|
|
13
|
-
new LRUCache<string, Date[]
|
|
13
|
+
new LRUCache<string, Promise<Date[]>>(options || DEFAULT_OPTIONS);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import assert from "assert";
|
|
2
|
+
import { values } from "lodash";
|
|
2
3
|
import { withNonBusinessDays } from "./withNonBusinessDays";
|
|
3
4
|
|
|
4
5
|
const mockNBD = [new Date("2022-01-19"), new Date("2022-01-20")];
|
|
5
6
|
const mockSerializer = jest.fn();
|
|
6
7
|
|
|
7
8
|
describe("withNonBusinessDays", () => {
|
|
8
|
-
it("
|
|
9
|
+
it("bootstrapping sync should return fns", () => {
|
|
9
10
|
const {
|
|
10
11
|
addBusinessDays,
|
|
11
12
|
subBusinessDays,
|
|
@@ -21,7 +22,7 @@ describe("withNonBusinessDays", () => {
|
|
|
21
22
|
expect(typeof differenceInBusinessDays).toBe("function");
|
|
22
23
|
});
|
|
23
24
|
|
|
24
|
-
it("
|
|
25
|
+
it("bootstrapping async should return fns and call serializer", async () => {
|
|
25
26
|
const mockFetchStrategy = jest.fn();
|
|
26
27
|
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
27
28
|
|
|
@@ -47,7 +48,7 @@ describe("withNonBusinessDays", () => {
|
|
|
47
48
|
expect(mockFetchStrategy).toHaveBeenCalled();
|
|
48
49
|
});
|
|
49
50
|
|
|
50
|
-
it("
|
|
51
|
+
it("bootstrapping async addBusinessDays", async () => {
|
|
51
52
|
const mockFetchStrategy = jest.fn();
|
|
52
53
|
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
53
54
|
const { addBusinessDays } = withNonBusinessDays(mockFetchStrategy, {
|
|
@@ -58,7 +59,197 @@ describe("withNonBusinessDays", () => {
|
|
|
58
59
|
expect(result).toEqual(new Date("2022-01-21"));
|
|
59
60
|
});
|
|
60
61
|
|
|
61
|
-
it("
|
|
62
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache", async () => {
|
|
63
|
+
const mockFetchStrategy = jest.fn();
|
|
64
|
+
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
65
|
+
const { isBusinessDay } = withNonBusinessDays<undefined>(
|
|
66
|
+
mockFetchStrategy,
|
|
67
|
+
{
|
|
68
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
await isBusinessDay(new Date("2022-01-18"));
|
|
73
|
+
await isBusinessDay(new Date("2022-01-20"));
|
|
74
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("bootstrapping async without identify should call fetchStrategy but just one time, second go to cache if the promise is resolved before the second call", async () => {
|
|
78
|
+
const mockFetchStrategy = jest.fn();
|
|
79
|
+
mockFetchStrategy.mockImplementation(() => Promise.resolve(mockNBD));
|
|
80
|
+
|
|
81
|
+
const { isBusinessDay } = withNonBusinessDays<undefined>(
|
|
82
|
+
mockFetchStrategy,
|
|
83
|
+
{
|
|
84
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"));
|
|
89
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"));
|
|
90
|
+
|
|
91
|
+
await Promise.all([promise1, promise2]);
|
|
92
|
+
|
|
93
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("bootstrapping async without identify should call fetchStrategy but just one time, second go to cache, even if the promise is resolved after the second call", async () => {
|
|
97
|
+
const mockFetchStrategy = jest.fn();
|
|
98
|
+
let shouldResolve = false;
|
|
99
|
+
|
|
100
|
+
function verifyResolve(resolve: (val: unknown) => void) {
|
|
101
|
+
setTimeout(() => {
|
|
102
|
+
if (shouldResolve) {
|
|
103
|
+
resolve(mockNBD);
|
|
104
|
+
} else {
|
|
105
|
+
verifyResolve(resolve);
|
|
106
|
+
}
|
|
107
|
+
}, 0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
mockFetchStrategy.mockImplementation(() => new Promise(verifyResolve));
|
|
111
|
+
|
|
112
|
+
const { isBusinessDay } = withNonBusinessDays<undefined>(
|
|
113
|
+
mockFetchStrategy,
|
|
114
|
+
{
|
|
115
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"));
|
|
120
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"));
|
|
121
|
+
|
|
122
|
+
shouldResolve = true;
|
|
123
|
+
|
|
124
|
+
expect(await Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
125
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache if the promise is resolved before the second call", async () => {
|
|
129
|
+
const mockFetchStrategy = jest.fn();
|
|
130
|
+
mockFetchStrategy.mockImplementation((obj: { number: number }) =>
|
|
131
|
+
Promise.resolve(mockNBD)
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
const { isBusinessDay } = withNonBusinessDays<{ number: number }>(
|
|
135
|
+
mockFetchStrategy,
|
|
136
|
+
{
|
|
137
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
142
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
143
|
+
|
|
144
|
+
await Promise.all([promise1, promise2]);
|
|
145
|
+
|
|
146
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it("bootstrapping async should call fetchStrategy but just one time, second go to cache, even if the promise is resolved after the second call", async () => {
|
|
150
|
+
const mockFetchStrategy = jest.fn();
|
|
151
|
+
let shouldResolve = false;
|
|
152
|
+
|
|
153
|
+
function verifyResolve(resolve: (val: unknown) => void) {
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
if (shouldResolve) {
|
|
156
|
+
resolve(mockNBD);
|
|
157
|
+
} else {
|
|
158
|
+
verifyResolve(resolve);
|
|
159
|
+
}
|
|
160
|
+
}, 0);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
mockFetchStrategy.mockImplementation(
|
|
164
|
+
(obj: { number: number }) => new Promise(verifyResolve)
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
const { isBusinessDay } = withNonBusinessDays<{ number: number }>(
|
|
168
|
+
mockFetchStrategy,
|
|
169
|
+
{
|
|
170
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
175
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"), { number: 1 });
|
|
176
|
+
|
|
177
|
+
shouldResolve = true;
|
|
178
|
+
|
|
179
|
+
expect(await Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
180
|
+
expect(mockFetchStrategy).toBeCalledTimes(1);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("bootstrapping async should call fetchStrategy two times if the promise is resolved before the second call", async () => {
|
|
184
|
+
const mockFetchStrategy = jest.fn();
|
|
185
|
+
mockFetchStrategy.mockImplementation((obj: { number: number }) =>
|
|
186
|
+
Promise.resolve(mockNBD)
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
const { isBusinessDay } = withNonBusinessDays<{ number: number }>(
|
|
190
|
+
mockFetchStrategy,
|
|
191
|
+
{
|
|
192
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
197
|
+
const promise2 = isBusinessDay(new Date("2022-01-18"), { number: 2 });
|
|
198
|
+
|
|
199
|
+
await Promise.all([promise1, promise2]);
|
|
200
|
+
|
|
201
|
+
expect(mockFetchStrategy).toBeCalledTimes(2);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it("bootstrapping async should call fetchStrategy two times even if the promise is resolved after the second call", async () => {
|
|
205
|
+
let shouldResolve1 = false;
|
|
206
|
+
|
|
207
|
+
function verifyResolve1(resolve: (val: unknown) => void) {
|
|
208
|
+
setTimeout(() => {
|
|
209
|
+
if (shouldResolve1) {
|
|
210
|
+
resolve(mockNBD);
|
|
211
|
+
} else {
|
|
212
|
+
verifyResolve1(resolve);
|
|
213
|
+
}
|
|
214
|
+
}, 0);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
let shouldResolve2 = false;
|
|
218
|
+
|
|
219
|
+
function verifyResolve2(resolve: (val: unknown) => void) {
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
if (shouldResolve2) {
|
|
222
|
+
resolve(mockNBD);
|
|
223
|
+
} else {
|
|
224
|
+
verifyResolve2(resolve);
|
|
225
|
+
}
|
|
226
|
+
}, 0);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const mockFetchStrategy = jest.fn();
|
|
230
|
+
mockFetchStrategy.mockImplementation(
|
|
231
|
+
(obj: { number: number }) =>
|
|
232
|
+
new Promise(obj.number == 1 ? verifyResolve1 : verifyResolve2)
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
const { isBusinessDay } = withNonBusinessDays<{ number: number }>(
|
|
236
|
+
mockFetchStrategy,
|
|
237
|
+
{
|
|
238
|
+
serializeOptions: (obj) => JSON.stringify(obj),
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
const promise1 = isBusinessDay(new Date("2022-01-18"), { number: 1 });
|
|
243
|
+
const promise2 = isBusinessDay(new Date("2022-01-19"), { number: 2 });
|
|
244
|
+
|
|
245
|
+
shouldResolve1 = true;
|
|
246
|
+
shouldResolve2 = true;
|
|
247
|
+
|
|
248
|
+
expect(await Promise.all([promise1, promise2])).toEqual([true, false]);
|
|
249
|
+
expect(mockFetchStrategy).toBeCalledTimes(2);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it("bootstrapping async throw error", async () => {
|
|
62
253
|
const mockFetchStrategy = jest.fn();
|
|
63
254
|
mockFetchStrategy.mockImplementation(() => Promise.reject());
|
|
64
255
|
try {
|
|
@@ -66,14 +257,14 @@ describe("withNonBusinessDays", () => {
|
|
|
66
257
|
} catch {}
|
|
67
258
|
});
|
|
68
259
|
|
|
69
|
-
it("
|
|
260
|
+
it("bootstrapping sync addBusinessDays", () => {
|
|
70
261
|
const { addBusinessDays } = withNonBusinessDays(mockNBD);
|
|
71
262
|
|
|
72
263
|
const result = addBusinessDays(new Date("2022-01-18"), 1);
|
|
73
264
|
expect(result).toEqual(new Date("2022-01-21"));
|
|
74
265
|
});
|
|
75
266
|
|
|
76
|
-
it("
|
|
267
|
+
it("bootstrapping should throw error for bad input", () => {
|
|
77
268
|
try {
|
|
78
269
|
assert.throws(withNonBusinessDays.bind(null), TypeError);
|
|
79
270
|
assert.throws(withNonBusinessDays.bind(null), TypeError);
|
|
@@ -25,22 +25,22 @@ export type WithNonBusinessDaysOutput<IdentifyObject> = {
|
|
|
25
25
|
differenceInBusinessDays: (
|
|
26
26
|
dirtyDate: Date | number,
|
|
27
27
|
dirtyAmount: number,
|
|
28
|
-
identify
|
|
28
|
+
identify?: IdentifyObject
|
|
29
29
|
) => Promise<number> | number;
|
|
30
30
|
isNonBusinessDay: (
|
|
31
31
|
date: Date,
|
|
32
|
-
identify
|
|
32
|
+
identify?: IdentifyObject
|
|
33
33
|
) => Promise<boolean> | boolean;
|
|
34
34
|
isBusinessDay: (
|
|
35
35
|
date: Date,
|
|
36
|
-
identify
|
|
36
|
+
identify?: IdentifyObject
|
|
37
37
|
) => Promise<boolean> | boolean;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export function withNonBusinessDays<Options>(
|
|
41
|
-
fetchStrategy: ((opts
|
|
41
|
+
fetchStrategy: ((opts: Options) => Promise<Date[]>) | Date[],
|
|
42
42
|
cacheOpts?: CacheOptions<string, Date[]> & {
|
|
43
|
-
serializeOptions?: (opts
|
|
43
|
+
serializeOptions?: (opts: Options) => string;
|
|
44
44
|
}
|
|
45
45
|
): WithNonBusinessDaysOutput<Options> {
|
|
46
46
|
if (!isFunction(fetchStrategy) && !isArray(fetchStrategy)) {
|
|
@@ -3,7 +3,7 @@ import isArray from "lodash/isArray";
|
|
|
3
3
|
import LRUCache from "lru-cache";
|
|
4
4
|
|
|
5
5
|
export function wrapperDateAndNumberNonBusinessDays<IdentifyObject, R>(
|
|
6
|
-
cacheNBD: LRUCache<string, Date[]
|
|
6
|
+
cacheNBD: LRUCache<string, Promise<Date[]>>,
|
|
7
7
|
fetchStrategy: ((opts?: IdentifyObject) => Promise<Date[]>) | Date[],
|
|
8
8
|
fn: (
|
|
9
9
|
nonBusinessDays: Date[],
|
|
@@ -31,13 +31,14 @@ export function wrapperDateAndNumberNonBusinessDays<IdentifyObject, R>(
|
|
|
31
31
|
|
|
32
32
|
if (!cache) {
|
|
33
33
|
try {
|
|
34
|
-
|
|
35
|
-
cacheNBD.set(cacheIdentify,
|
|
34
|
+
const promise = fetchStrategy(identify);
|
|
35
|
+
cacheNBD.set(cacheIdentify, promise);
|
|
36
|
+
nonBusinessDays = await promise;
|
|
36
37
|
} catch (error: unknown) {
|
|
37
38
|
throw new InternalServerError(error);
|
|
38
39
|
}
|
|
39
40
|
} else {
|
|
40
|
-
nonBusinessDays = cache;
|
|
41
|
+
nonBusinessDays = await cache;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
return fn(nonBusinessDays, dirtyDate, dirtyAmount);
|
|
@@ -45,7 +46,7 @@ export function wrapperDateAndNumberNonBusinessDays<IdentifyObject, R>(
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
export function wrapperDateNonBusinessDays<IdentifyObject, R>(
|
|
48
|
-
cacheNBD: LRUCache<string, Date[]
|
|
49
|
+
cacheNBD: LRUCache<string, Promise<Date[]>>,
|
|
49
50
|
fetchStrategy: ((opts?: IdentifyObject) => Promise<Date[]>) | Date[],
|
|
50
51
|
fn: (nonBusinessDays: Date[], date: Date) => R,
|
|
51
52
|
serializeOptions?: (opts?: IdentifyObject) => string
|
|
@@ -64,13 +65,14 @@ export function wrapperDateNonBusinessDays<IdentifyObject, R>(
|
|
|
64
65
|
|
|
65
66
|
if (!cache) {
|
|
66
67
|
try {
|
|
67
|
-
|
|
68
|
-
cacheNBD.set(cacheIdentify,
|
|
68
|
+
const promise = fetchStrategy(identify);
|
|
69
|
+
cacheNBD.set(cacheIdentify, promise);
|
|
70
|
+
nonBusinessDays = await promise;
|
|
69
71
|
} catch (error: unknown) {
|
|
70
72
|
throw new InternalServerError(error);
|
|
71
73
|
}
|
|
72
74
|
} else {
|
|
73
|
-
nonBusinessDays = cache;
|
|
75
|
+
nonBusinessDays = await cache;
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
return fn(nonBusinessDays, date);
|