@alanszp/business-days-date-fns 4.0.10 → 5.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.
@@ -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,CAAiB,OAAO,IAAI,eAAe,CAAC,CAAC;AAD9C,QAAA,yBAAyB,6BACqB"}
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"}
@@ -1,11 +1,13 @@
1
+ import LRUCache from "lru-cache";
1
2
  import { Options as CacheOptions } from "lru-cache";
2
3
  export declare type WithNonBusinessDaysOutput<IdentifyObject> = {
3
4
  addBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<Date> | Date;
4
5
  subBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<Date> | Date;
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;
6
+ differenceInBusinessDays: (dirtyDate: Date | number, dirtyAmount: number, identify?: IdentifyObject) => Promise<number> | number;
7
+ isNonBusinessDay: (date: Date, identify?: IdentifyObject) => Promise<boolean> | boolean;
8
+ isBusinessDay: (date: Date, identify?: IdentifyObject) => Promise<boolean> | boolean;
9
+ cache: LRUCache<IdentifyObject, Promise<Date[]>>;
8
10
  };
9
- export declare function withNonBusinessDays<Options>(fetchStrategy: ((opts?: Options) => Promise<Date[]>) | Date[], cacheOpts?: CacheOptions<string, Date[]> & {
10
- serializeOptions?: (opts?: Options) => string;
11
+ export declare function withNonBusinessDays<Options>(fetchStrategy: ((opts: Options) => Promise<Date[]>) | Date[], cacheOpts?: CacheOptions<string, Date[]> & {
12
+ serializeOptions?: (opts: Options) => string;
11
13
  }): WithNonBusinessDaysOutput<Options>;
@@ -20,7 +20,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.withNonBusinessDays = void 0;
23
- const lodash_1 = __importStar(require("lodash/"));
23
+ const lodash_1 = __importStar(require("lodash"));
24
24
  const addBusinessDays_1 = require("./addBusinessDays");
25
25
  const subBusinessDays_1 = require("./subBusinessDays");
26
26
  const differenceInBusinessDays_1 = require("./differenceInBusinessDays");
@@ -39,6 +39,7 @@ function withNonBusinessDays(fetchStrategy, cacheOpts) {
39
39
  subBusinessDays: (0, wrapperNonBusinessDays_1.wrapperDateAndNumberNonBusinessDays)(cache, fetchStrategy, subBusinessDays_1.subBusinessDays, cacheOpts === null || cacheOpts === void 0 ? void 0 : cacheOpts.serializeOptions),
40
40
  isNonBusinessDay: (0, wrapperNonBusinessDays_1.wrapperDateNonBusinessDays)(cache, fetchStrategy, isNonBusinessDay_1.isNonBusinessDay, cacheOpts === null || cacheOpts === void 0 ? void 0 : cacheOpts.serializeOptions),
41
41
  isBusinessDay: (0, wrapperNonBusinessDays_1.wrapperDateNonBusinessDays)(cache, fetchStrategy, isBusinessDay_1.isBusinessDay, cacheOpts === null || cacheOpts === void 0 ? void 0 : cacheOpts.serializeOptions),
42
+ cache,
42
43
  };
43
44
  }
44
45
  exports.withNonBusinessDays = withNonBusinessDays;
@@ -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,aAA6D,EAC7D,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"}
1
+ {"version":3,"file":"withNonBusinessDays.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA6C;AAG7C,uDAAoD;AACpD,uDAAoD;AACpD,yEAAsE;AACtE,qEAGkC;AAClC,yDAAsD;AACtD,mDAAgD;AAChD,oCAAqD;AA6BrD,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;QACD,KAAK;KACN,CAAC;AACJ,CAAC;AAhDD,kDAgDC"}
@@ -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("bootstraping sync should return fns", () => {
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("bootstraping async should return fns and call serializer", () => __awaiter(void 0, void 0, void 0, function* () {
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("bootstraping async addBusinessDays", () => __awaiter(void 0, void 0, void 0, function* () {
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("bootstraping async throw error", () => __awaiter(void 0, void 0, void 0, function* () {
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,17 +181,22 @@ describe("withNonBusinessDays", () => {
57
181
  }
58
182
  catch (_a) { }
59
183
  }));
60
- it("bootstraping sync addBusinessDays", () => {
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("bootstraping should throw error for bad input", () => {
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);
69
193
  }
70
194
  catch (_a) { }
71
195
  });
196
+ it("should export cache correctly", () => {
197
+ const { cache } = (0, withNonBusinessDays_1.withNonBusinessDays)(mockNBD);
198
+ cache.set("key-name", "key-value");
199
+ expect(cache.get("key-name")).toEqual("key-value");
200
+ });
72
201
  });
73
202
  //# sourceMappingURL=withNonBusinessDays.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withNonBusinessDays.test.js","sourceRoot":"","sources":["../../src/utils/withNonBusinessDays.test.ts"],"names":[],"mappings":"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"}
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[]>, 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, 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>);
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
- nonBusinessDays = yield fetchStrategy(identify);
31
- cacheNBD.set(cacheIdentify, nonBusinessDays);
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
- nonBusinessDays = yield fetchStrategy(identify);
57
- cacheNBD.set(cacheIdentify, nonBusinessDays);
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,QAAkC,EAClC,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,eAAe,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;aAC9C;YAAC,OAAO,KAAc,EAAE;gBACvB,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;aAAM;YACL,eAAe,GAAG,KAAK,CAAC;SACzB;QAED,OAAO,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAA,CAAC;AACJ,CAAC;AAxCD,kFAwCC;AAED,SAAgB,0BAA0B,CACxC,QAAkC,EAClC,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,eAAe,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;aAC9C;YAAC,OAAO,KAAc,EAAE;gBACvB,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;aAAM;YACL,eAAe,GAAG,KAAK,CAAC;SACzB;QAED,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAA,CAAC;AACJ,CAAC;AA/BD,gEA+BC"}
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.10",
3
+ "version": "5.0.0",
4
4
  "description": "Wrapper for date-fns core TS/JS lib.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  "test--watch": "yarn run test --watch"
24
24
  },
25
25
  "dependencies": {
26
- "@alanszp/errors": "^4.0.5",
26
+ "@alanszp/errors": "^5.0.0",
27
27
  "@babel/core": "^7.16.12",
28
28
  "date-fns": "^2.28.0",
29
29
  "lodash": "^4.17.21"
@@ -35,5 +35,5 @@
35
35
  "assert": "^2.0.0",
36
36
  "jest": "^27.4.7"
37
37
  },
38
- "gitHead": "8f2981459501da8cf7e9c7583f7508753f286c70"
38
+ "gitHead": "c5afc8bd74e5dcf26c9260ec2a8da8ab3a3570a9"
39
39
  }
@@ -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[]>(options || DEFAULT_OPTIONS);
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("bootstraping sync should return fns", () => {
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("bootstraping async should return fns and call serializer", async () => {
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("bootstraping async addBusinessDays", async () => {
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("bootstraping async throw error", async () => {
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,17 +257,25 @@ describe("withNonBusinessDays", () => {
66
257
  } catch {}
67
258
  });
68
259
 
69
- it("bootstraping sync addBusinessDays", () => {
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("bootstraping should throw error for bad input", () => {
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);
80
271
  } catch {}
81
272
  });
273
+
274
+ it("should export cache correctly", () => {
275
+ const { cache } = withNonBusinessDays(mockNBD);
276
+
277
+ cache.set("key-name", "key-value");
278
+
279
+ expect(cache.get("key-name")).toEqual("key-value");
280
+ });
82
281
  });
@@ -1,4 +1,5 @@
1
- import isFunction, { isArray } from "lodash/";
1
+ import isFunction, { isArray } from "lodash";
2
+ import LRUCache from "lru-cache";
2
3
  import { Options as CacheOptions } from "lru-cache";
3
4
  import { addBusinessDays } from "./addBusinessDays";
4
5
  import { subBusinessDays } from "./subBusinessDays";
@@ -25,22 +26,23 @@ export type WithNonBusinessDaysOutput<IdentifyObject> = {
25
26
  differenceInBusinessDays: (
26
27
  dirtyDate: Date | number,
27
28
  dirtyAmount: number,
28
- identify: IdentifyObject
29
+ identify?: IdentifyObject
29
30
  ) => Promise<number> | number;
30
31
  isNonBusinessDay: (
31
32
  date: Date,
32
- identify: IdentifyObject
33
+ identify?: IdentifyObject
33
34
  ) => Promise<boolean> | boolean;
34
35
  isBusinessDay: (
35
36
  date: Date,
36
- identify: IdentifyObject
37
+ identify?: IdentifyObject
37
38
  ) => Promise<boolean> | boolean;
39
+ cache: LRUCache<IdentifyObject, Promise<Date[]>>;
38
40
  };
39
41
 
40
42
  export function withNonBusinessDays<Options>(
41
- fetchStrategy: ((opts?: Options) => Promise<Date[]>) | Date[],
43
+ fetchStrategy: ((opts: Options) => Promise<Date[]>) | Date[],
42
44
  cacheOpts?: CacheOptions<string, Date[]> & {
43
- serializeOptions?: (opts?: Options) => string;
45
+ serializeOptions?: (opts: Options) => string;
44
46
  }
45
47
  ): WithNonBusinessDaysOutput<Options> {
46
48
  if (!isFunction(fetchStrategy) && !isArray(fetchStrategy)) {
@@ -83,5 +85,6 @@ export function withNonBusinessDays<Options>(
83
85
  isBusinessDay,
84
86
  cacheOpts?.serializeOptions
85
87
  ),
88
+ cache,
86
89
  };
87
90
  }
@@ -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
- nonBusinessDays = await fetchStrategy(identify);
35
- cacheNBD.set(cacheIdentify, nonBusinessDays);
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
- nonBusinessDays = await fetchStrategy(identify);
68
- cacheNBD.set(cacheIdentify, nonBusinessDays);
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);