@alanszp/business-days-date-fns 4.0.10
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/.eslintrc.js +93 -0
- package/.gitignore +3 -0
- package/.npmignore +3 -0
- package/LICENSE +21 -0
- package/README.MD +51 -0
- package/babel.config.js +7 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.js +17 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/addBusinessDays.d.ts +1 -0
- package/dist/utils/addBusinessDays.js +42 -0
- package/dist/utils/addBusinessDays.js.map +1 -0
- package/dist/utils/addBusinessDays.test.d.ts +1 -0
- package/dist/utils/addBusinessDays.test.js +94 -0
- package/dist/utils/addBusinessDays.test.js.map +1 -0
- package/dist/utils/differenceInBusinessDay.test.d.ts +1 -0
- package/dist/utils/differenceInBusinessDay.test.js +96 -0
- package/dist/utils/differenceInBusinessDay.test.js.map +1 -0
- package/dist/utils/differenceInBusinessDays.d.ts +1 -0
- package/dist/utils/differenceInBusinessDays.js +34 -0
- package/dist/utils/differenceInBusinessDays.js.map +1 -0
- package/dist/utils/isBusinessDay.d.ts +1 -0
- package/dist/utils/isBusinessDay.js +16 -0
- package/dist/utils/isBusinessDay.js.map +1 -0
- package/dist/utils/isBusinessDay.test.d.ts +1 -0
- package/dist/utils/isBusinessDay.test.js +34 -0
- package/dist/utils/isBusinessDay.test.js.map +1 -0
- package/dist/utils/isNonBusinessDay.d.ts +1 -0
- package/dist/utils/isNonBusinessDay.js +17 -0
- package/dist/utils/isNonBusinessDay.js.map +1 -0
- package/dist/utils/isNonBusinessDay.test.d.ts +1 -0
- package/dist/utils/isNonBusinessDay.test.js +52 -0
- package/dist/utils/isNonBusinessDay.test.js.map +1 -0
- package/dist/utils/requiredArgs.d.ts +1 -0
- package/dist/utils/requiredArgs.js +10 -0
- package/dist/utils/requiredArgs.js.map +1 -0
- package/dist/utils/subBusinessDays.d.ts +1 -0
- package/dist/utils/subBusinessDays.js +14 -0
- package/dist/utils/subBusinessDays.js.map +1 -0
- package/dist/utils/subBusinessDays.test.d.ts +1 -0
- package/dist/utils/subBusinessDays.test.js +69 -0
- package/dist/utils/subBusinessDays.test.js.map +1 -0
- package/dist/utils/withNonBusinessDays.d.ts +11 -0
- package/dist/utils/withNonBusinessDays.js +45 -0
- package/dist/utils/withNonBusinessDays.js.map +1 -0
- package/dist/utils/withNonBusinessDays.test.d.ts +1 -0
- package/dist/utils/withNonBusinessDays.test.js +73 -0
- package/dist/utils/withNonBusinessDays.test.js.map +1 -0
- package/dist/utils/wrapperNonBusinessDays.d.ts +3 -0
- package/dist/utils/wrapperNonBusinessDays.js +70 -0
- package/dist/utils/wrapperNonBusinessDays.js.map +1 -0
- package/header.png +0 -0
- package/jest.config.js +10 -0
- package/package.json +39 -0
- package/src/cache/index.ts +13 -0
- package/src/index.ts +1 -0
- package/src/utils/addBusinessDays.test.ts +131 -0
- package/src/utils/addBusinessDays.ts +46 -0
- package/src/utils/differenceInBusinessDay.test.ts +176 -0
- package/src/utils/differenceInBusinessDays.ts +37 -0
- package/src/utils/isBusinessDay.test.ts +47 -0
- package/src/utils/isBusinessDay.ts +18 -0
- package/src/utils/isNonBusinessDay.test.ts +69 -0
- package/src/utils/isNonBusinessDay.ts +17 -0
- package/src/utils/requiredArgs.ts +5 -0
- package/src/utils/subBusinessDays.test.ts +99 -0
- package/src/utils/subBusinessDays.ts +10 -0
- package/src/utils/withNonBusinessDays.test.ts +82 -0
- package/src/utils/withNonBusinessDays.ts +87 -0
- package/src/utils/wrapperNonBusinessDays.ts +78 -0
- package/tsconfig.json +15 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// eslint-disable-next-line unicorn/prefer-module
|
|
2
|
+
module.exports = {
|
|
3
|
+
plugins: [
|
|
4
|
+
"@typescript-eslint",
|
|
5
|
+
"eslint-comments",
|
|
6
|
+
"jest",
|
|
7
|
+
"promise",
|
|
8
|
+
"unicorn",
|
|
9
|
+
],
|
|
10
|
+
extends: [
|
|
11
|
+
"airbnb-typescript/base",
|
|
12
|
+
"plugin:@typescript-eslint/recommended",
|
|
13
|
+
"plugin:@typescript-eslint/recommended-requiring-type-checking",
|
|
14
|
+
"plugin:eslint-comments/recommended",
|
|
15
|
+
"plugin:jest/recommended",
|
|
16
|
+
"plugin:promise/recommended",
|
|
17
|
+
"plugin:unicorn/recommended",
|
|
18
|
+
"prettier",
|
|
19
|
+
],
|
|
20
|
+
env: {
|
|
21
|
+
node: true,
|
|
22
|
+
browser: true,
|
|
23
|
+
jest: true,
|
|
24
|
+
},
|
|
25
|
+
parserOptions: {
|
|
26
|
+
project: "./tsconfig.json",
|
|
27
|
+
},
|
|
28
|
+
rules: {
|
|
29
|
+
// Too restrictive, writing ugly code to defend against a very unlikely scenario: https://eslint.org/docs/rules/no-prototype-builtins
|
|
30
|
+
"no-prototype-builtins": "off",
|
|
31
|
+
// https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html
|
|
32
|
+
"import/prefer-default-export": "off",
|
|
33
|
+
"import/no-default-export": "error",
|
|
34
|
+
// Too restrictive: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/destructuring-assignment.md
|
|
35
|
+
"react/destructuring-assignment": "off",
|
|
36
|
+
// No jsx extension: https://github.com/facebook/create-react-app/issues/87#issuecomment-234627904
|
|
37
|
+
"react/jsx-filename-extension": "off",
|
|
38
|
+
// Use function hoisting to improve code readability
|
|
39
|
+
"no-use-before-define": [
|
|
40
|
+
"error",
|
|
41
|
+
{ functions: false, classes: true, variables: true },
|
|
42
|
+
],
|
|
43
|
+
// Allow most functions to rely on type inference. If the function is exported, then `@typescript-eslint/explicit-module-boundary-types` will ensure it's typed.
|
|
44
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
45
|
+
"@typescript-eslint/no-use-before-define": [
|
|
46
|
+
"error",
|
|
47
|
+
{ functions: false, classes: true, variables: true, typedefs: true },
|
|
48
|
+
],
|
|
49
|
+
// Common abbreviations are known and readable
|
|
50
|
+
"unicorn/prevent-abbreviations": "off",
|
|
51
|
+
// Airbnb prefers forEach
|
|
52
|
+
"unicorn/no-array-for-each": "off",
|
|
53
|
+
"unicorn/filename-case": [
|
|
54
|
+
"error",
|
|
55
|
+
{
|
|
56
|
+
cases: {
|
|
57
|
+
camelCase: true,
|
|
58
|
+
pascalCase: true,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
"class-methods-use-this": "off",
|
|
63
|
+
"unicorn/prefer-node-protocol": "off",
|
|
64
|
+
"unicorn/prefer-module": "off",
|
|
65
|
+
"@typescript-eslint/no-implicit-any-catch": "error",
|
|
66
|
+
"@typescript-eslint/no-misused-promises": [
|
|
67
|
+
"error",
|
|
68
|
+
{ checksVoidReturn: false },
|
|
69
|
+
],
|
|
70
|
+
"unicorn/no-null": "off",
|
|
71
|
+
"@typescript-eslint/no-unused-vars": [
|
|
72
|
+
"error",
|
|
73
|
+
{ vars: "all", args: "all", argsIgnorePattern: "^_" },
|
|
74
|
+
],
|
|
75
|
+
"no-unused-vars": "off",
|
|
76
|
+
"consistent-return": "off",
|
|
77
|
+
"no-underscore-dangle": "off",
|
|
78
|
+
"import/no-extraneous-dependencies": [
|
|
79
|
+
"error",
|
|
80
|
+
{ devDependencies: ["**/test/**", "**/*.test.js"] },
|
|
81
|
+
],
|
|
82
|
+
curly: ["error", "multi-line"],
|
|
83
|
+
},
|
|
84
|
+
overrides: [
|
|
85
|
+
{
|
|
86
|
+
files: ["*.js"],
|
|
87
|
+
rules: {
|
|
88
|
+
// Allow `require()`
|
|
89
|
+
"@typescript-eslint/no-var-requires": "off",
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
};
|
package/.gitignore
ADDED
package/.npmignore
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Alan Szpigiel
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.MD
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 📆 business-days-date-fns
|
|
2
|
+
|
|
3
|
+
An wrapper of some functionalities of <a href='https://date-fns.org/'>date-fns</a> with a custom non business days calendar.
|
|
4
|
+
|
|
5
|
+
<img src="header.png" />
|
|
6
|
+
|
|
7
|
+
## 🙋 Why?
|
|
8
|
+
|
|
9
|
+
`date-fns` is great, but maybe you want to control dates using a your self calendar. This library allow you to do this.
|
|
10
|
+
|
|
11
|
+
## ⌚ TD;LR
|
|
12
|
+
|
|
13
|
+
This library is like isWeekend that excludes Saturday and Sunday but excluding the dates of your calendar too
|
|
14
|
+
|
|
15
|
+
## 🕹️ Features
|
|
16
|
+
|
|
17
|
+
- <a href="https://date-fns.org/v2.28.0/docs/addBusinessDays">addBusinessDays</a>, <a href="https://date-fns.org/v2.28.0/docs/differenceInBusinessDays">differenceInBusinessDays</a> and <a href="https://date-fns.org/v2.28.0/docs/subBusinessDays">subBusinessDays</a> implementation and new functions: isNonBusinessDay, isBusinessDay,
|
|
18
|
+
- cache storage for a better performance
|
|
19
|
+
|
|
20
|
+
### Async implementation
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
const {
|
|
24
|
+
addBusinessDays,
|
|
25
|
+
subBusinessDays
|
|
26
|
+
differenceInBusinessDays,
|
|
27
|
+
isNonBusinessDay,
|
|
28
|
+
isBusinessDay
|
|
29
|
+
} = withNonBusinessDays(({ year }) => {
|
|
30
|
+
return fetch(`${MY_API_CALENDAR}?year=${year}`)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const result = await addBusinessDays(new Date("2022-01-01"), 10, { year: 2022 })
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Sync implementation
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
const {
|
|
40
|
+
addBusinessDays,
|
|
41
|
+
subBusinessDays
|
|
42
|
+
differenceInBusinessDays,
|
|
43
|
+
isNonBusinessDay,
|
|
44
|
+
isBusinessDay
|
|
45
|
+
} = withNonBusinessDays([
|
|
46
|
+
new Date('2022-01-01'),
|
|
47
|
+
new Date('2022-01-10')
|
|
48
|
+
])
|
|
49
|
+
|
|
50
|
+
const result = addBusinessDays(new Date("2022-01-01"), 10)
|
|
51
|
+
```
|
package/babel.config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const buildNonBusinessDaysCache: (options?: any) => any;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildNonBusinessDaysCache = void 0;
|
|
7
|
+
const lru_cache_1 = __importDefault(require("lru-cache"));
|
|
8
|
+
const oneDay = 1000 * 60 * 60 * 24;
|
|
9
|
+
const DEFAULT_OPTIONS = {
|
|
10
|
+
max: 300,
|
|
11
|
+
maxAge: oneDay,
|
|
12
|
+
stale: true,
|
|
13
|
+
updateAgeOnGet: true,
|
|
14
|
+
};
|
|
15
|
+
const buildNonBusinessDaysCache = (options) => new lru_cache_1.default(options || DEFAULT_OPTIONS);
|
|
16
|
+
exports.buildNonBusinessDaysCache = buildNonBusinessDaysCache;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { withNonBusinessDays } from "./utils/withNonBusinessDays";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withNonBusinessDays = void 0;
|
|
4
|
+
var withNonBusinessDays_1 = require("./utils/withNonBusinessDays");
|
|
5
|
+
Object.defineProperty(exports, "withNonBusinessDays", { enumerable: true, get: function () { return withNonBusinessDays_1.withNonBusinessDays; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mEAAkE;AAAzD,0HAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function addBusinessDays(nonBusinessDays: Date[], dirtyDate: Date | number, dirtyAmount: number): Date;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addBusinessDays = void 0;
|
|
7
|
+
const toDate_1 = __importDefault(require("date-fns/toDate"));
|
|
8
|
+
const isSunday_1 = __importDefault(require("date-fns/isSunday"));
|
|
9
|
+
const isSaturday_1 = __importDefault(require("date-fns/isSaturday"));
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
const isNonBusinessDay_1 = require("./isNonBusinessDay");
|
|
12
|
+
const requiredArgs_1 = require("./requiredArgs");
|
|
13
|
+
function addBusinessDays(nonBusinessDays, dirtyDate, dirtyAmount) {
|
|
14
|
+
(0, requiredArgs_1.requiredArgs)(2, [dirtyDate, dirtyAmount]);
|
|
15
|
+
const date = (0, toDate_1.default)(dirtyDate);
|
|
16
|
+
const startedOnWeekend = (0, isNonBusinessDay_1.isNonBusinessDay)(nonBusinessDays, date);
|
|
17
|
+
const amount = (0, lodash_1.toInteger)(dirtyAmount);
|
|
18
|
+
if (Number.isNaN(amount))
|
|
19
|
+
return new Date(Number.NaN);
|
|
20
|
+
const hours = date.getHours();
|
|
21
|
+
const sign = amount < 0 ? -1 : 1;
|
|
22
|
+
const fullWeeks = (0, lodash_1.toInteger)(amount / 5);
|
|
23
|
+
date.setDate(date.getDate() + fullWeeks * 7);
|
|
24
|
+
let restDays = Math.abs(amount % 5);
|
|
25
|
+
while (restDays > 0) {
|
|
26
|
+
date.setDate(date.getDate() + sign);
|
|
27
|
+
if (!(0, isNonBusinessDay_1.isNonBusinessDay)(nonBusinessDays, date))
|
|
28
|
+
restDays -= 1;
|
|
29
|
+
}
|
|
30
|
+
if (startedOnWeekend &&
|
|
31
|
+
(0, isNonBusinessDay_1.isNonBusinessDay)(nonBusinessDays, date) &&
|
|
32
|
+
amount !== 0) {
|
|
33
|
+
if ((0, isSaturday_1.default)(date))
|
|
34
|
+
date.setDate(date.getDate() + (sign < 0 ? 2 : -1));
|
|
35
|
+
if ((0, isSunday_1.default)(date))
|
|
36
|
+
date.setDate(date.getDate() + (sign < 0 ? 1 : -2));
|
|
37
|
+
}
|
|
38
|
+
date.setHours(hours);
|
|
39
|
+
return date;
|
|
40
|
+
}
|
|
41
|
+
exports.addBusinessDays = addBusinessDays;
|
|
42
|
+
//# sourceMappingURL=addBusinessDays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addBusinessDays.js","sourceRoot":"","sources":["../../src/utils/addBusinessDays.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAqC;AACrC,iEAAyC;AACzC,qEAA6C;AAC7C,mCAAmC;AACnC,yDAAsD;AACtD,iDAA8C;AAE9C,SAAgB,eAAe,CAC7B,eAAuB,EACvB,SAAwB,EACxB,WAAmB;IAEnB,IAAA,2BAAY,EAAC,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAA,gBAAM,EAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,gBAAgB,GAAG,IAAA,mCAAgB,EAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;IAE7C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpC,OAAO,QAAQ,GAAG,CAAC,EAAE;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAA,mCAAgB,EAAC,eAAe,EAAE,IAAI,CAAC;YAAE,QAAQ,IAAI,CAAC,CAAC;KAC7D;IAED,IACE,gBAAgB;QAChB,IAAA,mCAAgB,EAAC,eAAe,EAAE,IAAI,CAAC;QACvC,MAAM,KAAK,CAAC,EACZ;QACA,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,IAAA,kBAAQ,EAAC,IAAI,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxE;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,IAAI,CAAC;AACd,CAAC;AAtCD,0CAsCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const addBusinessDays_1 = require("./addBusinessDays");
|
|
8
|
+
describe("addBusinessDays", () => {
|
|
9
|
+
it("should return 2 next days", () => {
|
|
10
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([new Date("2022-01-20")], new Date("2022-01-19"), 1);
|
|
11
|
+
expect(result).toEqual(new Date("2022-01-21"));
|
|
12
|
+
});
|
|
13
|
+
it("should return next monday", () => {
|
|
14
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([new Date("2022-01-20"), new Date("2022-01-21")], new Date("2022-01-19"), 1);
|
|
15
|
+
expect(result).toEqual(new Date("2022-01-24"));
|
|
16
|
+
});
|
|
17
|
+
it("should return next monday when you start on weekend", () => {
|
|
18
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date("2022-01-21"), 1);
|
|
19
|
+
expect(result).toEqual(new Date("2022-01-24"));
|
|
20
|
+
});
|
|
21
|
+
// original tests
|
|
22
|
+
it("adds the given number of business days", () => {
|
|
23
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 8 /* Sep */, 1), 10);
|
|
24
|
+
expect(result).toEqual(new Date(2014, 8 /* Sep */, 15));
|
|
25
|
+
});
|
|
26
|
+
it("handles negative amount", () => {
|
|
27
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 8 /* Sep */, 15), -10);
|
|
28
|
+
expect(result).toEqual(new Date(2014, 8 /* Sep */, 1));
|
|
29
|
+
});
|
|
30
|
+
it("returns the Monday when 1 day is added on the Friday", () => {
|
|
31
|
+
expect((0, addBusinessDays_1.addBusinessDays)([], new Date(2020, 0 /* Jan */, 10), 1) // Friday
|
|
32
|
+
).toEqual(new Date(2020, 0 /* Jan */, 13) // Monday
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
it("returns the Monday when 1 day is added on the Saturday", () => {
|
|
36
|
+
expect((0, addBusinessDays_1.addBusinessDays)([], new Date(2020, 0 /* Jan */, 11), 1) // Saturday
|
|
37
|
+
).toEqual(new Date(2020, 0 /* Jan */, 13) // Monday
|
|
38
|
+
);
|
|
39
|
+
});
|
|
40
|
+
it("returns the Monday when 1 day is added on the Sunday", () => {
|
|
41
|
+
expect((0, addBusinessDays_1.addBusinessDays)([], new Date(2020, 0 /* Jan */, 12), 1) // Sunday
|
|
42
|
+
).toEqual(new Date(2020, 0 /* Jan */, 13) // Monday
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
it("can handle a large number of business days", () => {
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
if (typeof global.timeout === "function") {
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
global.timeout(500 /* 500 ms test timeout */);
|
|
50
|
+
}
|
|
51
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 0 /* Jan */, 1), 3387885);
|
|
52
|
+
expect(result).toEqual(new Date(15000, 0 /* Jan */, 1));
|
|
53
|
+
});
|
|
54
|
+
it("accepts a timestamp", () => {
|
|
55
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 8 /* Sep */, 1).getTime(), 10);
|
|
56
|
+
expect(result).toEqual(new Date(2014, 8 /* Sep */, 15));
|
|
57
|
+
});
|
|
58
|
+
it("converts a fractional number to an integer", () => {
|
|
59
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 8 /* Sep */, 1), 10.5);
|
|
60
|
+
expect(result).toEqual(new Date(2014, 8 /* Sep */, 15));
|
|
61
|
+
});
|
|
62
|
+
it("implicitly converts number arguments", () => {
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(2014, 8 /* Sep */, 1), "10");
|
|
65
|
+
expect(result).toEqual(new Date(2014, 8 /* Sep */, 15));
|
|
66
|
+
});
|
|
67
|
+
it("does not mutate the original date", () => {
|
|
68
|
+
const date = new Date(2014, 8 /* Sep */, 1);
|
|
69
|
+
(0, addBusinessDays_1.addBusinessDays)([], date, 11);
|
|
70
|
+
expect(date).toEqual(new Date(2014, 8 /* Sep */, 1));
|
|
71
|
+
});
|
|
72
|
+
it("returns `Invalid Date` if the given date is invalid", () => {
|
|
73
|
+
const result = (0, addBusinessDays_1.addBusinessDays)([], new Date(NaN), 10);
|
|
74
|
+
(0, assert_1.default)(result instanceof Date && Number.isNaN(result.getTime()));
|
|
75
|
+
});
|
|
76
|
+
it("throws TypeError exception if passed less than 2 arguments", () => {
|
|
77
|
+
try {
|
|
78
|
+
assert_1.default.throws(addBusinessDays_1.addBusinessDays.bind(null), TypeError);
|
|
79
|
+
assert_1.default.throws(addBusinessDays_1.addBusinessDays.bind(null, 1), TypeError);
|
|
80
|
+
}
|
|
81
|
+
catch (_a) { }
|
|
82
|
+
});
|
|
83
|
+
it("starting from a weekend day should land on a weekday when reducing a divisible by 5", () => {
|
|
84
|
+
const substractResult = (0, addBusinessDays_1.addBusinessDays)([], new Date(2019, 7, 18), -5);
|
|
85
|
+
expect(substractResult).toEqual(new Date(2019, 7, 12));
|
|
86
|
+
const subtractResultWeekend = (0, addBusinessDays_1.addBusinessDays)([], new Date(2019, 7, 17), -5);
|
|
87
|
+
expect(subtractResultWeekend).toEqual(new Date(2019, 7, 12));
|
|
88
|
+
const addResult = (0, addBusinessDays_1.addBusinessDays)([], new Date(2019, 7, 18), 5);
|
|
89
|
+
expect(addResult).toEqual(new Date(2019, 7, 23));
|
|
90
|
+
const addResultWeekend = (0, addBusinessDays_1.addBusinessDays)([], new Date(2019, 7, 17), 5);
|
|
91
|
+
expect(addResultWeekend).toEqual(new Date(2019, 7, 23));
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=addBusinessDays.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addBusinessDays.test.js","sourceRoot":"","sources":["../../src/utils/addBusinessDays.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const differenceInBusinessDays_1 = require("./differenceInBusinessDays");
|
|
8
|
+
describe("differenceInBusinessDays", () => {
|
|
9
|
+
it("should return 2 difference day taking weekend days", () => {
|
|
10
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([new Date("2022-01-20"), new Date("2022-01-21")], new Date("2022-01-25"), new Date("2022-01-19"));
|
|
11
|
+
expect(result).toBe(2);
|
|
12
|
+
});
|
|
13
|
+
it("should return 2 difference", () => {
|
|
14
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([new Date("2022-01-19")], new Date("2022-01-21"), new Date("2022-01-18"));
|
|
15
|
+
expect(result).toBe(2);
|
|
16
|
+
});
|
|
17
|
+
// date-fns original tests
|
|
18
|
+
it("returns the number of business days between the given dates, excluding weekends", () => {
|
|
19
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 6 /* Jul */, 18), new Date(2014, 0 /* Jan */, 10));
|
|
20
|
+
expect(result).toEqual(135);
|
|
21
|
+
});
|
|
22
|
+
it("can handle long ranges", () => {
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
if (typeof global.timeout === "function") {
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
global.timeout(500 /* 500 ms test timeout */);
|
|
27
|
+
}
|
|
28
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(15000, 0 /* Jan */, 1), new Date(2014, 0 /* Jan */, 1));
|
|
29
|
+
expect(result).toEqual(3387885);
|
|
30
|
+
});
|
|
31
|
+
it("the same except given first date falls on a weekend", () => {
|
|
32
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2019, 6 /* Jul */, 20), new Date(2019, 6 /* Jul */, 18));
|
|
33
|
+
expect(result).toEqual(2);
|
|
34
|
+
});
|
|
35
|
+
it("the same except given second date falls on a weekend", () => {
|
|
36
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2019, 6 /* Jul */, 23), new Date(2019, 6 /* Jul */, 20));
|
|
37
|
+
expect(result).toEqual(1);
|
|
38
|
+
});
|
|
39
|
+
it("the same except both given dates fall on a weekend", () => {
|
|
40
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2019, 6 /* Jul */, 28), new Date(2019, 6 /* Jul */, 20));
|
|
41
|
+
expect(result).toEqual(5);
|
|
42
|
+
});
|
|
43
|
+
it("returns a negative number if the time value of the first date is smaller", () => {
|
|
44
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 0 /* Jan */, 10), new Date(2014, 6 /* Jul */, 20));
|
|
45
|
+
expect(result).toEqual(-135);
|
|
46
|
+
});
|
|
47
|
+
it("accepts timestamps", () => {
|
|
48
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 6, 18).getTime(), new Date(2014, 0, 10).getTime());
|
|
49
|
+
expect(result).toEqual(135);
|
|
50
|
+
});
|
|
51
|
+
it("the difference is less than a day, but the given dates are in different calendar days", () => {
|
|
52
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 4, 23, 59));
|
|
53
|
+
expect(result).toEqual(1);
|
|
54
|
+
});
|
|
55
|
+
it("the same for the swapped dates", () => {
|
|
56
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 8 /* Sep */, 4, 23, 59), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
57
|
+
expect(result).toEqual(-1);
|
|
58
|
+
});
|
|
59
|
+
it("the time values of the given dates are the same", () => {
|
|
60
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 4, 0, 0));
|
|
61
|
+
expect(result).toEqual(1);
|
|
62
|
+
});
|
|
63
|
+
it("the given dates are the same", () => {
|
|
64
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
65
|
+
expect(result).toEqual(0);
|
|
66
|
+
});
|
|
67
|
+
it("does not return -0 when the given dates are the same", () => {
|
|
68
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
69
|
+
function isNegativeZero(x) {
|
|
70
|
+
return x === 0 && 1 / x < 0;
|
|
71
|
+
}
|
|
72
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
73
|
+
const resultIsNegative = isNegativeZero(result);
|
|
74
|
+
expect(resultIsNegative).toBeFalsy();
|
|
75
|
+
});
|
|
76
|
+
it("returns NaN if the first date is `Invalid Date`", () => {
|
|
77
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
78
|
+
expect(Number.isNaN(result)).toBeTruthy();
|
|
79
|
+
});
|
|
80
|
+
it("returns NaN if the second date is `Invalid Date`", () => {
|
|
81
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
82
|
+
expect(Number.isNaN(result)).toBeTruthy();
|
|
83
|
+
});
|
|
84
|
+
it("returns NaN if the both dates are `Invalid Date`", () => {
|
|
85
|
+
const result = (0, differenceInBusinessDays_1.differenceInBusinessDays)([], new Date(NaN), new Date(NaN));
|
|
86
|
+
expect(Number.isNaN(result)).toBeTruthy();
|
|
87
|
+
});
|
|
88
|
+
it("throws TypeError exception if passed less than 2 arguments", () => {
|
|
89
|
+
try {
|
|
90
|
+
assert_1.default.throws(differenceInBusinessDays_1.differenceInBusinessDays.bind(null), TypeError);
|
|
91
|
+
assert_1.default.throws(differenceInBusinessDays_1.differenceInBusinessDays.bind(null, 1), TypeError);
|
|
92
|
+
}
|
|
93
|
+
catch (_a) { }
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=differenceInBusinessDay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"differenceInBusinessDay.test.js","sourceRoot":"","sources":["../../src/utils/differenceInBusinessDay.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function differenceInBusinessDays(nonBusinessDays: Date[], dirtyDateLeft: Date | number, dirtyDateRight: Date | number): number;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.differenceInBusinessDays = void 0;
|
|
7
|
+
const differenceInCalendarDays_1 = __importDefault(require("date-fns/differenceInCalendarDays"));
|
|
8
|
+
const addDays_1 = __importDefault(require("date-fns/addDays"));
|
|
9
|
+
const isSameDay_1 = __importDefault(require("date-fns/isSameDay"));
|
|
10
|
+
const isValid_1 = __importDefault(require("date-fns/isValid"));
|
|
11
|
+
const toInteger_1 = __importDefault(require("lodash/toInteger"));
|
|
12
|
+
const toDate_1 = __importDefault(require("date-fns/toDate"));
|
|
13
|
+
const requiredArgs_1 = require("./requiredArgs");
|
|
14
|
+
const isNonBusinessDay_1 = require("./isNonBusinessDay");
|
|
15
|
+
function differenceInBusinessDays(nonBusinessDays, dirtyDateLeft, dirtyDateRight) {
|
|
16
|
+
// eslint-disable-next-line prefer-rest-params
|
|
17
|
+
(0, requiredArgs_1.requiredArgs)(2, [dirtyDateLeft, dirtyDateRight]);
|
|
18
|
+
const dateLeft = (0, toDate_1.default)(dirtyDateLeft);
|
|
19
|
+
let dateRight = (0, toDate_1.default)(dirtyDateRight);
|
|
20
|
+
if (!(0, isValid_1.default)(dateLeft) || !(0, isValid_1.default)(dateRight))
|
|
21
|
+
return Number.NaN;
|
|
22
|
+
const calendarDifference = (0, differenceInCalendarDays_1.default)(dateLeft, dateRight);
|
|
23
|
+
const sign = calendarDifference < 0 ? -1 : 1;
|
|
24
|
+
const weeks = (0, toInteger_1.default)(calendarDifference / 7);
|
|
25
|
+
let result = weeks * 5;
|
|
26
|
+
dateRight = (0, addDays_1.default)(dateRight, weeks * 7);
|
|
27
|
+
while (!(0, isSameDay_1.default)(dateLeft, dateRight)) {
|
|
28
|
+
result += (0, isNonBusinessDay_1.isNonBusinessDay)(nonBusinessDays, dateRight) ? 0 : sign;
|
|
29
|
+
dateRight = (0, addDays_1.default)(dateRight, sign);
|
|
30
|
+
}
|
|
31
|
+
return result === 0 ? 0 : result;
|
|
32
|
+
}
|
|
33
|
+
exports.differenceInBusinessDays = differenceInBusinessDays;
|
|
34
|
+
//# sourceMappingURL=differenceInBusinessDays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"differenceInBusinessDays.js","sourceRoot":"","sources":["../../src/utils/differenceInBusinessDays.ts"],"names":[],"mappings":";;;;;;AAAA,iGAAyE;AACzE,+DAAuC;AACvC,mEAA2C;AAC3C,+DAAuC;AACvC,iEAAyC;AACzC,6DAAqC;AACrC,iDAA8C;AAC9C,yDAAsD;AAEtD,SAAgB,wBAAwB,CACtC,eAAuB,EACvB,aAA4B,EAC5B,cAA6B;IAE7B,8CAA8C;IAC9C,IAAA,2BAAY,EAAC,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,IAAA,gBAAM,EAAC,aAAa,CAAC,CAAC;IACvC,IAAI,SAAS,GAAG,IAAA,gBAAM,EAAC,cAAc,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAA,iBAAO,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,iBAAO,EAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAEjE,MAAM,kBAAkB,GAAG,IAAA,kCAAwB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAEhD,IAAI,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;IACvB,SAAS,GAAG,IAAA,iBAAO,EAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,IAAA,mBAAS,EAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;QACtC,MAAM,IAAI,IAAA,mCAAgB,EAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,SAAS,GAAG,IAAA,iBAAO,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KACtC;IAED,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnC,CAAC;AA3BD,4DA2BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isBusinessDay(nonBusinessDays: Date[], dirtyDate: Date | number): boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isBusinessDay = void 0;
|
|
7
|
+
const date_fns_1 = require("date-fns");
|
|
8
|
+
const isSameDay_1 = __importDefault(require("date-fns/isSameDay"));
|
|
9
|
+
const requiredArgs_1 = require("./requiredArgs");
|
|
10
|
+
function isBusinessDay(nonBusinessDays, dirtyDate) {
|
|
11
|
+
(0, requiredArgs_1.requiredArgs)(1, [dirtyDate]);
|
|
12
|
+
const date = (0, date_fns_1.toDate)(dirtyDate);
|
|
13
|
+
return (!nonBusinessDays.some((nonBusinessDay) => (0, isSameDay_1.default)(nonBusinessDay, date)) && !(0, date_fns_1.isWeekend)(date));
|
|
14
|
+
}
|
|
15
|
+
exports.isBusinessDay = isBusinessDay;
|
|
16
|
+
//# sourceMappingURL=isBusinessDay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isBusinessDay.js","sourceRoot":"","sources":["../../src/utils/isBusinessDay.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA6C;AAC7C,mEAA2C;AAC3C,iDAA8C;AAE9C,SAAgB,aAAa,CAC3B,eAAuB,EACvB,SAAwB;IAExB,IAAA,2BAAY,EAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,IAAA,iBAAM,EAAC,SAAS,CAAC,CAAC;IAE/B,OAAO,CACL,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CACvC,IAAA,mBAAS,EAAC,cAAc,EAAE,IAAI,CAAC,CAChC,IAAI,CAAC,IAAA,oBAAS,EAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAbD,sCAaC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const date_fns_1 = require("date-fns");
|
|
8
|
+
const isBusinessDay_1 = require("./isBusinessDay");
|
|
9
|
+
describe("isNonBusinessDay", () => {
|
|
10
|
+
it("should return is non business day", () => {
|
|
11
|
+
const result = (0, isBusinessDay_1.isBusinessDay)([new Date("2022-01-01"), new Date("2022-01-02")], new Date("2022-01-01"));
|
|
12
|
+
expect(result).toBeFalsy();
|
|
13
|
+
});
|
|
14
|
+
it("should return is a business day", () => {
|
|
15
|
+
const result = (0, isBusinessDay_1.isBusinessDay)([new Date("2022-01-01"), new Date("2022-01-02")], new Date("2022-01-03"));
|
|
16
|
+
expect(result).toBeTruthy();
|
|
17
|
+
});
|
|
18
|
+
it("should work properly using hh:mm:ss", () => {
|
|
19
|
+
const mondayLate = (0, isBusinessDay_1.isBusinessDay)([], (0, date_fns_1.parse)("2022-01-24T23:59:59", "yyyy-MM-dd HH:mm:ss", new Date()));
|
|
20
|
+
const fridayLate = (0, isBusinessDay_1.isBusinessDay)([(0, date_fns_1.parse)("2022-01-28T23:59:59", "yyyy-MM-dd HH:mm:ss", new Date())], (0, date_fns_1.parse)("2022-01-28T23:59:59", "yyyy-MM-dd HH:mm:ss", new Date()));
|
|
21
|
+
expect(mondayLate).toBeTruthy();
|
|
22
|
+
expect(fridayLate).toBeTruthy();
|
|
23
|
+
});
|
|
24
|
+
it("throws TypeError exception if passed less than 2 arguments", () => {
|
|
25
|
+
try {
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
(0, isBusinessDay_1.isBusinessDay)([new Date("2022-01-01"), new Date("2022-01-02")]);
|
|
28
|
+
assert_1.default.throws(isBusinessDay_1.isBusinessDay.bind(null), TypeError);
|
|
29
|
+
assert_1.default.throws(isBusinessDay_1.isBusinessDay.bind(null, 1), TypeError);
|
|
30
|
+
}
|
|
31
|
+
catch (_a) { }
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=isBusinessDay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isBusinessDay.test.js","sourceRoot":"","sources":["../../src/utils/isBusinessDay.test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,uCAAiC;AACjC,mDAAgD;AAEhD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAA,6BAAa,EAC1B,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAChD,IAAI,IAAI,CAAC,YAAY,CAAC,CACvB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,IAAA,6BAAa,EAC1B,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAChD,IAAI,IAAI,CAAC,YAAY,CAAC,CACvB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,UAAU,GAAG,IAAA,6BAAa,EAC9B,EAAE,EACF,IAAA,gBAAK,EAAC,qBAAqB,EAAE,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,CAChE,CAAC;QACF,MAAM,UAAU,GAAG,IAAA,6BAAa,EAC9B,CAAC,IAAA,gBAAK,EAAC,qBAAqB,EAAE,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,EACjE,IAAA,gBAAK,EAAC,qBAAqB,EAAE,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,CAChE,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,IAAI;YACF,aAAa;YACb,IAAA,6BAAa,EAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEhE,gBAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;YACnD,gBAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SACvD;QAAC,WAAM,GAAE;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isNonBusinessDay(nonBusinessDays: Date[], dirtyDate: Date): boolean;
|