@onivoro/isomorphic-common 24.12.0 → 24.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest.config.ts +11 -0
- package/package.json +2 -8
- package/project.json +33 -0
- package/src/index.ts +80 -0
- package/src/lib/constants/api-id-header.constant.ts +1 -0
- package/src/lib/constants/api-key-header.constant.ts +1 -0
- package/src/lib/constants/auth-cookie-name.constant.ts +2 -0
- package/src/lib/constants/millis-per-day.constant.ts +3 -0
- package/src/lib/constants/millis-per-hour.constant.ts +3 -0
- package/src/lib/constants/millis-per-minute.constant.ts +1 -0
- package/src/lib/constants/regexes.constant.ts +30 -0
- package/src/lib/functions/__snapshots__/chunk.function.spec.ts.snap +94 -0
- package/src/lib/functions/__snapshots__/split-date-range-into-days.function.spec.ts.snap +50 -0
- package/src/lib/functions/add-offset.function.spec.ts +12 -0
- package/src/lib/functions/add-offset.function.ts +14 -0
- package/src/lib/functions/arrange-act-assert.function.ts +23 -0
- package/src/lib/functions/camel-case.function.ts +30 -0
- package/src/lib/functions/chunk.function.spec.ts +20 -0
- package/src/lib/functions/chunk.function.ts +25 -0
- package/src/lib/functions/convert-object-to-literal.function.spec.ts +16 -0
- package/src/lib/functions/convert-object-to-literal.function.ts +10 -0
- package/src/lib/functions/format-usd.function.ts +4 -0
- package/src/lib/functions/from-boolean-string.function.ts +3 -0
- package/src/lib/functions/from-calendar-date.function.spec.ts +11 -0
- package/src/lib/functions/from-calendar-date.function.ts +5 -0
- package/src/lib/functions/from-csv-string.function.ts +3 -0
- package/src/lib/functions/get-date-last-month.function.ts +6 -0
- package/src/lib/functions/get-date-range-for-month.function copy.ts +8 -0
- package/src/lib/functions/get-date-range-for-month.function.ts +8 -0
- package/src/lib/functions/get-tag.function.ts +10 -0
- package/src/lib/functions/get-user-full-name.function.ts +5 -0
- package/src/lib/functions/is-symbol.function.ts +11 -0
- package/src/lib/functions/is-valid-date.function.ts +5 -0
- package/src/lib/functions/kebab-case.function.ts +5 -0
- package/src/lib/functions/map-entities-to-options.function.ts +11 -0
- package/src/lib/functions/map-enum-to-array-of-values.function copy.ts +3 -0
- package/src/lib/functions/map-enum-to-array-of-values.function.ts +3 -0
- package/src/lib/functions/map-enum-to-lookup-array.function.ts +6 -0
- package/src/lib/functions/map-enum-to-options.function copy.ts +7 -0
- package/src/lib/functions/map-enum-to-options.function.ts +7 -0
- package/src/lib/functions/mock-calls.function.ts +4 -0
- package/src/lib/functions/money.function.spec.ts +10 -0
- package/src/lib/functions/money.function.ts +22 -0
- package/src/lib/functions/parse-bool.function.ts +3 -0
- package/src/lib/functions/properties-to-array.function.ts +21 -0
- package/src/lib/functions/remove-alpha-chars.function.spec.ts +11 -0
- package/src/lib/functions/remove-alpha-chars.function.ts +9 -0
- package/src/lib/functions/remove-element-at-index.function copy.ts +9 -0
- package/src/lib/functions/remove-element-at-index.function.ts +9 -0
- package/src/lib/functions/round.function copy.ts +4 -0
- package/src/lib/functions/round.function.ts +4 -0
- package/src/lib/functions/sanitize-filename.function.ts +9 -0
- package/src/lib/functions/sleep.function.ts +3 -0
- package/src/lib/functions/snake-case.function.ts +34 -0
- package/src/lib/functions/sort-by-created-at.function.ts +7 -0
- package/src/lib/functions/sort-by-full-name.function.ts +6 -0
- package/src/lib/functions/sort-by-id.function.ts +3 -0
- package/src/lib/functions/sort-by-name.function.ts +3 -0
- package/src/lib/functions/sort-numbers.function.ts +3 -0
- package/src/lib/functions/split-date-range-into-days.function.spec.ts +17 -0
- package/src/lib/functions/split-date-range-into-days.function.ts +26 -0
- package/src/lib/functions/subtract-offset.function.spec.ts +12 -0
- package/src/lib/functions/subtract-offset.function.ts +14 -0
- package/src/lib/functions/to-boolean-string.function.ts +3 -0
- package/src/lib/functions/to-calendar-date.function.ts +11 -0
- package/src/lib/functions/to-csv-string.function.ts +3 -0
- package/src/lib/functions/to-decimal-base.function.ts +23 -0
- package/src/lib/functions/to-dollars-and-cents.function.spec.ts +7 -0
- package/src/lib/functions/to-dollars-and-cents.function.ts +17 -0
- package/src/lib/functions/to-string.function.ts +25 -0
- package/src/lib/functions/to-unique-array.function.spec.ts +45 -0
- package/src/lib/functions/to-unique-array.function.ts +3 -0
- package/src/lib/functions/to-words.function.spec.ts +7 -0
- package/src/lib/functions/to-words.function.ts +108 -0
- package/src/lib/functions/try-json-parse.spec.ts +37 -0
- package/src/lib/functions/try-json-parse.ts +11 -0
- package/src/lib/functions/try-json-stringify.spec.ts +44 -0
- package/src/lib/functions/try-json-stringify.ts +11 -0
- package/src/lib/functions/try-parse-date.function.spec.ts +12 -0
- package/src/lib/functions/try-parse-date.function.ts +17 -0
- package/src/lib/functions/unicode-words.const.ts +70 -0
- package/src/lib/functions/upper-first.function.spec.ts +16 -0
- package/src/lib/functions/upper-first.function.ts +10 -0
- package/src/lib/functions/use-date.function.ts +21 -0
- package/src/lib/functions/words.function.ts +38 -0
- package/src/lib/types/access-token.interface.ts +8 -0
- package/src/lib/types/axios-wrapped-nest-exception.interface.ts +5 -0
- package/src/lib/types/company.type.ts +18 -0
- package/src/lib/types/createable.type.ts +1 -0
- package/src/lib/types/entity-provider.interface.ts +9 -0
- package/src/lib/types/keys-of.type copy.ts +1 -0
- package/src/lib/types/keys-of.type.ts +1 -0
- package/src/lib/types/lookup.interface copy.ts +4 -0
- package/src/lib/types/lookup.interface.ts +4 -0
- package/src/lib/types/nameable.type.ts +4 -0
- package/tsconfig.json +13 -0
- package/tsconfig.lib.json +10 -0
- package/tsconfig.spec.json +14 -0
package/jest.config.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
export default {
|
|
3
|
+
displayName: 'lib-isomorphic-common',
|
|
4
|
+
preset: '../../../jest.preset.js',
|
|
5
|
+
testEnvironment: 'node',
|
|
6
|
+
transform: {
|
|
7
|
+
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
|
8
|
+
},
|
|
9
|
+
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
10
|
+
coverageDirectory: '../../../coverage/libs/isomorphic/common',
|
|
11
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onivoro/isomorphic-common",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.14.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -10,11 +10,5 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"tslib": "^2.3.0"
|
|
13
|
-
}
|
|
14
|
-
"files": [
|
|
15
|
-
"**/*.js",
|
|
16
|
-
"**/*.d.ts",
|
|
17
|
-
"**/*.js.map",
|
|
18
|
-
"README.md"
|
|
19
|
-
]
|
|
13
|
+
}
|
|
20
14
|
}
|
package/project.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lib-isomorphic-common",
|
|
3
|
+
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
+
"sourceRoot": "libs/isomorphic/common/src",
|
|
5
|
+
"projectType": "library",
|
|
6
|
+
"targets": {
|
|
7
|
+
"build": {
|
|
8
|
+
"executor": "@nx/js:tsc",
|
|
9
|
+
"outputs": ["{options.outputPath}"],
|
|
10
|
+
"options": {
|
|
11
|
+
"outputPath": "dist/libs/isomorphic/common",
|
|
12
|
+
"main": "libs/isomorphic/common/src/index.ts",
|
|
13
|
+
"tsConfig": "libs/isomorphic/common/tsconfig.lib.json",
|
|
14
|
+
"assets": [
|
|
15
|
+
"libs/isomorphic/common/README.md",
|
|
16
|
+
"libs/isomorphic/common/package.json"
|
|
17
|
+
],
|
|
18
|
+
"declaration": true,
|
|
19
|
+
"updateBuildableProjectPackageJsonDependencies": true,
|
|
20
|
+
"rootDir": "libs/isomorphic/common/src"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"publish": {
|
|
24
|
+
"executor": "@nx/js:npm",
|
|
25
|
+
"outputs": [],
|
|
26
|
+
"dependsOn": ["build"],
|
|
27
|
+
"options": {
|
|
28
|
+
"packageRoot": "dist/libs/isomorphic/common"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"tags": []
|
|
33
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export * from './lib/constants/api-id-header.constant';
|
|
2
|
+
export * from './lib/constants/api-key-header.constant';
|
|
3
|
+
export * from './lib/constants/auth-cookie-name.constant';
|
|
4
|
+
export * from './lib/constants/regexes.constant';
|
|
5
|
+
|
|
6
|
+
export * from './lib/functions/arrange-act-assert.function';
|
|
7
|
+
export * from './lib/functions/mock-calls.function';
|
|
8
|
+
|
|
9
|
+
export * from './lib/functions/chunk.function';
|
|
10
|
+
export * from './lib/functions/format-usd.function';
|
|
11
|
+
export * from './lib/functions/get-date-last-month.function';
|
|
12
|
+
export * from './lib/functions/get-date-range-for-month.function';
|
|
13
|
+
export * from './lib/functions/get-user-full-name.function';
|
|
14
|
+
export * from './lib/functions/is-valid-date.function';
|
|
15
|
+
export * from './lib/functions/map-entities-to-options.function';
|
|
16
|
+
export * from './lib/functions/map-enum-to-array-of-values.function';
|
|
17
|
+
export * from './lib/functions/map-enum-to-lookup-array.function';
|
|
18
|
+
export * from './lib/functions/map-enum-to-options.function';
|
|
19
|
+
export * from './lib/functions/remove-element-at-index.function';
|
|
20
|
+
export * from './lib/functions/round.function';
|
|
21
|
+
export * from './lib/functions/sort-by-created-at.function';
|
|
22
|
+
export * from './lib/functions/sort-by-full-name.function';
|
|
23
|
+
export * from './lib/functions/sort-by-id.function';
|
|
24
|
+
export * from './lib/functions/sort-by-name.function';
|
|
25
|
+
export * from './lib/functions/sort-numbers.function';
|
|
26
|
+
export * from './lib/functions/split-date-range-into-days.function';
|
|
27
|
+
export * from './lib/functions/use-date.function';
|
|
28
|
+
|
|
29
|
+
export * from './lib/types/access-token.interface';
|
|
30
|
+
export * from './lib/types/company.type';
|
|
31
|
+
export * from './lib/types/createable.type';
|
|
32
|
+
export * from './lib/types/keys-of.type';
|
|
33
|
+
export * from './lib/types/lookup.interface';
|
|
34
|
+
export * from './lib/types/nameable.type';
|
|
35
|
+
|
|
36
|
+
export * from './lib/constants/millis-per-day.constant';
|
|
37
|
+
export * from './lib/constants/millis-per-hour.constant';
|
|
38
|
+
export * from './lib/constants/millis-per-minute.constant';
|
|
39
|
+
export * from './lib/constants/regexes.constant';
|
|
40
|
+
|
|
41
|
+
export * from './lib/functions/add-offset.function';
|
|
42
|
+
export * from './lib/functions/camel-case.function';
|
|
43
|
+
export * from './lib/functions/convert-object-to-literal.function';
|
|
44
|
+
export * from './lib/functions/format-usd.function';
|
|
45
|
+
export * from './lib/functions/from-boolean-string.function';
|
|
46
|
+
export * from './lib/functions/from-calendar-date.function';
|
|
47
|
+
export * from './lib/functions/from-csv-string.function';
|
|
48
|
+
export * from './lib/functions/get-date-range-for-month.function';
|
|
49
|
+
export * from './lib/functions/is-symbol.function';
|
|
50
|
+
export * from './lib/functions/is-valid-date.function';
|
|
51
|
+
export * from './lib/functions/kebab-case.function';
|
|
52
|
+
export * from './lib/functions/map-enum-to-array-of-values.function';
|
|
53
|
+
export * from './lib/functions/map-enum-to-lookup-array.function';
|
|
54
|
+
export * from './lib/functions/map-enum-to-options.function';
|
|
55
|
+
export * from './lib/functions/money.function';
|
|
56
|
+
export * from './lib/functions/parse-bool.function';
|
|
57
|
+
export * from './lib/functions/properties-to-array.function';
|
|
58
|
+
export * from './lib/functions/remove-alpha-chars.function';
|
|
59
|
+
export * from './lib/functions/remove-element-at-index.function';
|
|
60
|
+
export * from './lib/functions/round.function';
|
|
61
|
+
export * from './lib/functions/sleep.function';
|
|
62
|
+
export * from './lib/functions/sanitize-filename.function';
|
|
63
|
+
export * from './lib/functions/snake-case.function';
|
|
64
|
+
export * from './lib/functions/subtract-offset.function';
|
|
65
|
+
export * from './lib/functions/to-boolean-string.function';
|
|
66
|
+
export * from './lib/functions/to-calendar-date.function';
|
|
67
|
+
export * from './lib/functions/to-csv-string.function';
|
|
68
|
+
export * from './lib/functions/to-decimal-base.function';
|
|
69
|
+
export * from './lib/functions/to-dollars-and-cents.function';
|
|
70
|
+
export * from './lib/functions/to-unique-array.function';
|
|
71
|
+
export * from './lib/functions/to-words.function';
|
|
72
|
+
export * from './lib/functions/try-parse-date.function';
|
|
73
|
+
export * from './lib/functions/unicode-words.const';
|
|
74
|
+
export * from './lib/functions/upper-first.function';
|
|
75
|
+
export * from './lib/functions/words.function';
|
|
76
|
+
|
|
77
|
+
export * from './lib/types/axios-wrapped-nest-exception.interface';
|
|
78
|
+
export * from './lib/types/entity-provider.interface';
|
|
79
|
+
export * from './lib/types/keys-of.type';
|
|
80
|
+
export * from './lib/types/lookup.interface';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const apiIdHeader = 'x-api-id';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const apiKeyHeader = 'x-api-key';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const MILLIS_PER_MINUTE = 1000 * 60;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const oneOrMoreSpaces = /\s{1,}/g;
|
|
2
|
+
export const multipleSpaces = /\s{2,}/g;
|
|
3
|
+
export const comma = /,/g;
|
|
4
|
+
export const dashesLettersNumbers = /^([a-z]|-|\d)*$/i;
|
|
5
|
+
export const dashesLettersNumbersSpaces = /^([a-z]|-|\s|\d)*$/i;
|
|
6
|
+
export const zip = /^\d{5}$/;
|
|
7
|
+
export const phone = /^\d{3}-\d{3}-\d{4}$/;
|
|
8
|
+
export const phonePlusOne = /^\+1\d{10}$/;
|
|
9
|
+
export const code = /^\d{6}$/;
|
|
10
|
+
export const url = /(https?:\/\/|https?:\/\/).*\..+/;
|
|
11
|
+
export const protocol = /https?:\/\/|https?:\/\//;
|
|
12
|
+
export const firstSpaceLast = /[a-z]+\s[a-z]+([a-z]|')+[a-z]+/i;
|
|
13
|
+
export const passwordNumber = /\d/;
|
|
14
|
+
export const passwordUpper = /[A-Z]/;
|
|
15
|
+
export const passwordLower = /[a-z]/;
|
|
16
|
+
export const passwordSpecial = /\^|\$|\*|\.|\?|-|!|@|#|%|>|<|:|;|_|~|\+|=/;
|
|
17
|
+
export const ssn = /^\d{3}-\d{2}-\d{4}$/;
|
|
18
|
+
export const numeric = /^(\d|\.)*$/;
|
|
19
|
+
export const duns = /^\d{9}$/;
|
|
20
|
+
export const lastFourSocial = /^\d{4}$/;
|
|
21
|
+
export const ein = /^\d{2}-\d{7}$/;
|
|
22
|
+
export const stateShort = /^[A-Z]{2}$/;
|
|
23
|
+
export const email = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
24
|
+
export const domain = /^(?!:\/\/)([a-zA-Z0-9-_]{1,63}\.)+[a-zA-Z]{2,63}$/;
|
|
25
|
+
export const emailDomain = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
26
|
+
export const v4 = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
|
|
27
|
+
export const dateIso8601 = /^\d{4}-\d{1,2}-\d{1,2}$/;
|
|
28
|
+
export const dateIso8601WithTime = /^\d{4}-\d{1,2}-\d{1,2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
29
|
+
export const decimalRegex = /(\d|\.)/g;
|
|
30
|
+
export const slashR = /\r/g;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`chunk given 1, returns an array of arrays 1`] = `
|
|
4
|
+
[
|
|
5
|
+
[
|
|
6
|
+
"one",
|
|
7
|
+
"two",
|
|
8
|
+
"three",
|
|
9
|
+
"four",
|
|
10
|
+
"five",
|
|
11
|
+
"six",
|
|
12
|
+
"seven",
|
|
13
|
+
"eight",
|
|
14
|
+
],
|
|
15
|
+
]
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
exports[`chunk given 2, returns an array of arrays 1`] = `
|
|
19
|
+
[
|
|
20
|
+
[
|
|
21
|
+
"one",
|
|
22
|
+
"two",
|
|
23
|
+
"three",
|
|
24
|
+
"four",
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"five",
|
|
28
|
+
"six",
|
|
29
|
+
"seven",
|
|
30
|
+
"eight",
|
|
31
|
+
],
|
|
32
|
+
]
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
exports[`chunk given 3, returns an array of arrays 1`] = `
|
|
36
|
+
[
|
|
37
|
+
[
|
|
38
|
+
"one",
|
|
39
|
+
"two",
|
|
40
|
+
"three",
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
"four",
|
|
44
|
+
"five",
|
|
45
|
+
"six",
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"seven",
|
|
49
|
+
"eight",
|
|
50
|
+
],
|
|
51
|
+
]
|
|
52
|
+
`;
|
|
53
|
+
|
|
54
|
+
exports[`chunk given 4, returns an array of arrays 1`] = `
|
|
55
|
+
[
|
|
56
|
+
[
|
|
57
|
+
"one",
|
|
58
|
+
"two",
|
|
59
|
+
],
|
|
60
|
+
[
|
|
61
|
+
"three",
|
|
62
|
+
"four",
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
"five",
|
|
66
|
+
"six",
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
"seven",
|
|
70
|
+
"eight",
|
|
71
|
+
],
|
|
72
|
+
]
|
|
73
|
+
`;
|
|
74
|
+
|
|
75
|
+
exports[`chunk given 5, returns an array of arrays 1`] = `
|
|
76
|
+
[
|
|
77
|
+
[
|
|
78
|
+
"one",
|
|
79
|
+
"two",
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
"three",
|
|
83
|
+
"four",
|
|
84
|
+
],
|
|
85
|
+
[
|
|
86
|
+
"five",
|
|
87
|
+
"six",
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"seven",
|
|
91
|
+
"eight",
|
|
92
|
+
],
|
|
93
|
+
]
|
|
94
|
+
`;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`splitDateRangeIntoDays given {"from":"","to":""}, returns an array of days 1`] = `[]`;
|
|
4
|
+
|
|
5
|
+
exports[`splitDateRangeIntoDays given {"from":"2024-01-01","to":"2024-01-01"}, returns an array of days 1`] = `
|
|
6
|
+
[
|
|
7
|
+
"2024-01-01",
|
|
8
|
+
]
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
exports[`splitDateRangeIntoDays given {"from":"2024-01-01","to":"2024-02-01"}, returns an array of days 1`] = `
|
|
12
|
+
[
|
|
13
|
+
"2024-01-01",
|
|
14
|
+
"2024-01-02",
|
|
15
|
+
"2024-01-03",
|
|
16
|
+
"2024-01-04",
|
|
17
|
+
"2024-01-05",
|
|
18
|
+
"2024-01-06",
|
|
19
|
+
"2024-01-07",
|
|
20
|
+
"2024-01-08",
|
|
21
|
+
"2024-01-09",
|
|
22
|
+
"2024-01-10",
|
|
23
|
+
"2024-01-11",
|
|
24
|
+
"2024-01-12",
|
|
25
|
+
"2024-01-13",
|
|
26
|
+
"2024-01-14",
|
|
27
|
+
"2024-01-15",
|
|
28
|
+
"2024-01-16",
|
|
29
|
+
"2024-01-17",
|
|
30
|
+
"2024-01-18",
|
|
31
|
+
"2024-01-19",
|
|
32
|
+
"2024-01-20",
|
|
33
|
+
"2024-01-21",
|
|
34
|
+
"2024-01-22",
|
|
35
|
+
"2024-01-23",
|
|
36
|
+
"2024-01-24",
|
|
37
|
+
"2024-01-25",
|
|
38
|
+
"2024-01-26",
|
|
39
|
+
"2024-01-27",
|
|
40
|
+
"2024-01-28",
|
|
41
|
+
"2024-01-29",
|
|
42
|
+
"2024-01-30",
|
|
43
|
+
"2024-01-31",
|
|
44
|
+
"2024-02-01",
|
|
45
|
+
]
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
exports[`splitDateRangeIntoDays given {"from":"2025-01-01","to":""}, returns an array of days 1`] = `[]`;
|
|
49
|
+
|
|
50
|
+
exports[`splitDateRangeIntoDays given {"from":"asdf","to":"2345"}, returns an array of days 1`] = `[]`;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { addOffset } from './add-offset.function';
|
|
2
|
+
|
|
3
|
+
describe('addOffset', () => {
|
|
4
|
+
describe('GIVEN input is partial or full ISO8601', () => {
|
|
5
|
+
it.each([
|
|
6
|
+
'2023-12-23',
|
|
7
|
+
'2023-12-23T00:00:00.000',
|
|
8
|
+
])('%j', (input) => {
|
|
9
|
+
expect(addOffset(input)).toMatchSnapshot();
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MILLIS_PER_MINUTE } from '../constants/millis-per-minute.constant';
|
|
2
|
+
import { tryParseDate } from './try-parse-date.function';
|
|
3
|
+
|
|
4
|
+
export function addOffset(input: string | Date | undefined | null): Date | undefined {
|
|
5
|
+
const parsed = tryParseDate(input);
|
|
6
|
+
|
|
7
|
+
if(!parsed) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const offset = (parsed).getTimezoneOffset();
|
|
12
|
+
|
|
13
|
+
return new Date(parsed.valueOf() + offset * MILLIS_PER_MINUTE);
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// YOU MUST AWAIT THIS FUNCTION WHEN INVOKING IT!!!
|
|
2
|
+
|
|
3
|
+
// TODO: PUT THIS IN A TEST-ONLY LIBRARY => LIBS/ISO/JEST
|
|
4
|
+
|
|
5
|
+
export async function arrangeActAssert<TArrangeOutput, TActOutput>({ arrange, act, assert }: { arrange: () => TArrangeOutput, act: (_: TArrangeOutput) => TActOutput, assert: (_: TArrangeOutput & { result: TActOutput }) => any }) {
|
|
6
|
+
const arrangeOutput = arrange();
|
|
7
|
+
|
|
8
|
+
const actInput = isPromise(arrangeOutput) ? await arrangeOutput : arrangeOutput;
|
|
9
|
+
|
|
10
|
+
const actOutput = act(actInput);
|
|
11
|
+
|
|
12
|
+
const assertInput = isPromise(actOutput) ? await actOutput : actOutput;
|
|
13
|
+
|
|
14
|
+
const assertOutput = assert({ ...actInput, result: assertInput });
|
|
15
|
+
|
|
16
|
+
const returnValue = isPromise(assertOutput) ? await assertOutput : assertOutput;
|
|
17
|
+
|
|
18
|
+
return returnValue;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isPromise(value: any) {
|
|
22
|
+
return (typeof value?.then) === 'function';
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// https://github.com/lodash/lodash/blob/main/src/camelCase.ts
|
|
2
|
+
|
|
3
|
+
import { toString } from './to-string.function';
|
|
4
|
+
import { upperFirst } from './upper-first.function';
|
|
5
|
+
import { words } from './words.function';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
|
|
9
|
+
*
|
|
10
|
+
* @since 3.0.0
|
|
11
|
+
* @category String
|
|
12
|
+
* @param {string} [string=''] The string to convert.
|
|
13
|
+
* @returns {string} Returns the camel cased string.
|
|
14
|
+
* @see lowerCase, kebabCase, snakeCase, startCase, upperCase, upperFirst
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* camelCase('Foo Bar')
|
|
18
|
+
* // => 'fooBar'
|
|
19
|
+
*
|
|
20
|
+
* camelCase('--foo-bar--')
|
|
21
|
+
* // => 'fooBar'
|
|
22
|
+
*
|
|
23
|
+
* camelCase('__FOO_BAR__')
|
|
24
|
+
* // => 'fooBar'
|
|
25
|
+
*/
|
|
26
|
+
export const camelCase = (string: string): string =>
|
|
27
|
+
(words(toString(string).replace(/['\u2019]/g, '')) as string[]).reduce((result: string, word: string, index: number) => {
|
|
28
|
+
word = word.toLowerCase();
|
|
29
|
+
return result + (index ? upperFirst(word) : word);
|
|
30
|
+
}, '');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { chunk } from './chunk.function';
|
|
2
|
+
import { arrangeActAssert } from '../functions/arrange-act-assert.function';
|
|
3
|
+
|
|
4
|
+
const array = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'];
|
|
5
|
+
|
|
6
|
+
describe('chunk', () => {
|
|
7
|
+
it.each([
|
|
8
|
+
[1],
|
|
9
|
+
[2],
|
|
10
|
+
[3],
|
|
11
|
+
[4],
|
|
12
|
+
[5],
|
|
13
|
+
])('given %j, returns an array of arrays', async (_) => await arrangeActAssert({
|
|
14
|
+
arrange: () => ({ subject: chunk }),
|
|
15
|
+
act: ({ subject }) => subject(array, _),
|
|
16
|
+
assert: ({ result }) => {
|
|
17
|
+
expect(result).toMatchSnapshot();
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function chunk<T>(array: T[], numDivisions: number): T[][] {
|
|
2
|
+
if (numDivisions <= 0) {
|
|
3
|
+
throw new Error('Number of divisions must be greater than or equal to 0');
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
if (array.length === 0) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const result: T[][] = [];
|
|
11
|
+
const chunkSize = Math.ceil(array.length / numDivisions);
|
|
12
|
+
|
|
13
|
+
for (let i = 0; i < array.length; i += chunkSize) {
|
|
14
|
+
result.push(array.slice(i, i + chunkSize));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
while (result.length > numDivisions) {
|
|
18
|
+
const lastChunk = result.pop();
|
|
19
|
+
if (lastChunk) {
|
|
20
|
+
result[result.length - 1].push(...lastChunk);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { convertObjectToLiteral } from './convert-object-to-literal.function';
|
|
2
|
+
|
|
3
|
+
const qty = 337;
|
|
4
|
+
const price = 100;
|
|
5
|
+
const product = 'flux-capacitor';
|
|
6
|
+
|
|
7
|
+
describe('convertObjectToLiteral', () => {
|
|
8
|
+
it.each([[(k, v) => `${k}=${v}`, ' AND ', { qty, price, product }]])(
|
|
9
|
+
'converts an object to a string',
|
|
10
|
+
(literalFn, delimiter, obj) => {
|
|
11
|
+
expect(
|
|
12
|
+
convertObjectToLiteral(literalFn, delimiter, obj)
|
|
13
|
+
).toMatchSnapshot();
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function convertObjectToLiteral(
|
|
2
|
+
literalFn: (k: string, v: any) => string,
|
|
3
|
+
delimiter: string,
|
|
4
|
+
keyValuePairs: Record<string, any>
|
|
5
|
+
) {
|
|
6
|
+
return Object.entries(keyValuePairs)
|
|
7
|
+
.filter(([, v]) => !!v || v === 0 || v === false)
|
|
8
|
+
.map(([k, v]) => literalFn(k, v?.toString?.()))
|
|
9
|
+
.join(delimiter);
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { fromCalendarDate } from './from-calendar-date.function';
|
|
2
|
+
|
|
3
|
+
describe('fromCalendarDate', () => {
|
|
4
|
+
describe('GIVEN input is partial or full ISO8601', () => {
|
|
5
|
+
it.each([
|
|
6
|
+
'2023-12-23',
|
|
7
|
+
])('%j', (input) => {
|
|
8
|
+
expect(fromCalendarDate(input)).toMatchSnapshot();
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MILLIS_PER_DAY } from "../constants/millis-per-day.constant";
|
|
2
|
+
|
|
3
|
+
export function getDateRangeForMonth(year: number, month: number) {
|
|
4
|
+
const startDate = new Date(+Date.UTC(year, month + -1, 0) + MILLIS_PER_DAY);
|
|
5
|
+
const endDate = new Date(+Date.UTC(year, month + 0, 0) + MILLIS_PER_DAY);
|
|
6
|
+
|
|
7
|
+
return { startDate, endDate };
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MILLIS_PER_DAY } from "../constants/millis-per-day.constant";
|
|
2
|
+
|
|
3
|
+
export function getDateRangeForMonth(year: number, month: number) {
|
|
4
|
+
const startDate = new Date(+Date.UTC(year, month + -1, 0) + MILLIS_PER_DAY);
|
|
5
|
+
const endDate = new Date(+Date.UTC(year, month + 0, 0) + MILLIS_PER_DAY);
|
|
6
|
+
|
|
7
|
+
return { startDate, endDate };
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// https://github.com/lodash/lodash/blob/main/src/.internal/getTag.ts
|
|
2
|
+
|
|
3
|
+
const toString = Object.prototype.toString
|
|
4
|
+
|
|
5
|
+
export function getTag(value: any): string {
|
|
6
|
+
if (value == null) {
|
|
7
|
+
return value === undefined ? '[object Undefined]' : '[object Null]'
|
|
8
|
+
}
|
|
9
|
+
return toString.call(value)
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// https://github.com/lodash/lodash/blob/main/src/isSymbol.ts
|
|
2
|
+
|
|
3
|
+
import { getTag } from './get-tag.function';
|
|
4
|
+
|
|
5
|
+
export function isSymbol(value: any): boolean {
|
|
6
|
+
const type = typeof value;
|
|
7
|
+
return (
|
|
8
|
+
type === 'symbol' ||
|
|
9
|
+
(type === 'object' && value != null && getTag(value) === '[object Symbol]')
|
|
10
|
+
);
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function mapEntitiesToOptions<TEntity extends { name?: string, id: string }>(
|
|
2
|
+
entities: Record<string, TEntity>,
|
|
3
|
+
ids: string[],
|
|
4
|
+
includeBlank = true,
|
|
5
|
+
) {
|
|
6
|
+
const entityArray = ids?.length ? (ids?.map((value => ({ value, display: entities[value].name || entities[value].id })))) : [];
|
|
7
|
+
|
|
8
|
+
return includeBlank
|
|
9
|
+
? [{ display: '', value: '' }, ...entityArray]
|
|
10
|
+
: entityArray;
|
|
11
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ILookup } from "../types/lookup.interface";
|
|
2
|
+
|
|
3
|
+
export function mapEnumToLookupArray<TEnum extends object>(enumeration: TEnum): ILookup<string, string>[] {
|
|
4
|
+
return Object.entries(enumeration)
|
|
5
|
+
.map(([key, value]) => ({ value, display: key.replace(/_/g, ' ') }) satisfies ILookup<string, string>);
|
|
6
|
+
}
|