@nu-art/ts-common 0.300.8 → 0.400.1
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/consts/consts.js +2 -4
- package/consts/consts.js.map +1 -0
- package/core/application.d.ts +1 -1
- package/core/application.js +3 -6
- package/core/application.js.map +1 -0
- package/core/debug-flags.d.ts +1 -1
- package/core/debug-flags.js +15 -17
- package/core/debug-flags.js.map +1 -0
- package/core/dispatcher.d.ts +2 -2
- package/core/dispatcher.js +7 -8
- package/core/dispatcher.js.map +1 -0
- package/core/error-handling.d.ts +5 -5
- package/core/error-handling.js +7 -9
- package/core/error-handling.js.map +1 -0
- package/core/exceptions/exceptions.d.ts +2 -2
- package/core/exceptions/exceptions.js +33 -44
- package/core/exceptions/exceptions.js.map +1 -0
- package/core/exceptions/http-codes.d.ts +8 -2
- package/core/exceptions/http-codes.js +6 -6
- package/core/exceptions/http-codes.js.map +1 -0
- package/core/exceptions/types.js +2 -2
- package/core/exceptions/types.js.map +1 -0
- package/core/logger/BeLogged.d.ts +2 -2
- package/core/logger/BeLogged.js +9 -11
- package/core/logger/BeLogged.js.map +1 -0
- package/core/logger/LogClient.d.ts +3 -1
- package/core/logger/LogClient.js +21 -24
- package/core/logger/LogClient.js.map +1 -0
- package/core/logger/LogClient_BaseRotate.d.ts +2 -2
- package/core/logger/LogClient_BaseRotate.js +12 -12
- package/core/logger/LogClient_BaseRotate.js.map +1 -0
- package/core/logger/LogClient_Browser.d.ts +2 -2
- package/core/logger/LogClient_Browser.js +40 -45
- package/core/logger/LogClient_Browser.js.map +1 -0
- package/core/logger/LogClient_BrowserGroups.d.ts +2 -2
- package/core/logger/LogClient_BrowserGroups.js +65 -67
- package/core/logger/LogClient_BrowserGroups.js.map +1 -0
- package/core/logger/LogClient_ConsoleProxy.d.ts +23 -0
- package/core/logger/LogClient_ConsoleProxy.js +89 -0
- package/core/logger/LogClient_ConsoleProxy.js.map +1 -0
- package/core/logger/LogClient_File.d.ts +1 -1
- package/core/logger/LogClient_File.js +6 -30
- package/core/logger/LogClient_File.js.map +1 -0
- package/core/logger/LogClient_Function.d.ts +2 -2
- package/core/logger/LogClient_Function.js +6 -8
- package/core/logger/LogClient_Function.js.map +1 -0
- package/core/logger/LogClient_MemBuffer.d.ts +2 -2
- package/core/logger/LogClient_MemBuffer.js +19 -21
- package/core/logger/LogClient_MemBuffer.js.map +1 -0
- package/core/logger/LogClient_Terminal.d.ts +2 -2
- package/core/logger/LogClient_Terminal.js +16 -21
- package/core/logger/LogClient_Terminal.js.map +1 -0
- package/core/logger/Logger.d.ts +2 -2
- package/core/logger/Logger.js +37 -39
- package/core/logger/Logger.js.map +1 -0
- package/core/logger/types.js +4 -6
- package/core/logger/types.js.map +1 -0
- package/core/logger/utils.d.ts +1 -1
- package/core/logger/utils.js +10 -15
- package/core/logger/utils.js.map +1 -0
- package/core/module-manager.d.ts +8 -6
- package/core/module-manager.js +28 -26
- package/core/module-manager.js.map +1 -0
- package/core/module.d.ts +5 -5
- package/core/module.js +28 -28
- package/core/module.js.map +1 -0
- package/csv.d.ts +2 -2
- package/csv.js +3 -18
- package/csv.js.map +1 -0
- package/db/consts.d.ts +3 -0
- package/db/consts.js +17 -7
- package/db/consts.js.map +1 -0
- package/db/dependencies-test.js +2 -2
- package/db/dependencies-test.js.map +1 -0
- package/db/types.d.ts +10 -2
- package/db/types.js +2 -2
- package/db/types.js.map +1 -0
- package/esm.d.ts +1 -0
- package/esm.js +4 -0
- package/esm.js.map +1 -0
- package/index.d.ts +50 -49
- package/index.js +51 -65
- package/index.js.map +1 -0
- package/mem-storage/MemStorage.d.ts +3 -1
- package/mem-storage/MemStorage.js +90 -72
- package/mem-storage/MemStorage.js.map +1 -0
- package/mem-storage/index.d.ts +1 -0
- package/mem-storage/index.js +2 -0
- package/mem-storage/index.js.map +1 -0
- package/modules/CSVModule.d.ts +2 -2
- package/modules/CSVModule.js +22 -48
- package/modules/CSVModule.js.map +1 -0
- package/modules/CSVModuleV3.d.ts +2 -2
- package/modules/CSVModuleV3.js +60 -86
- package/modules/CSVModuleV3.js.map +1 -0
- package/modules/CliParamsModule.d.ts +2 -2
- package/modules/CliParamsModule.js +23 -28
- package/modules/CliParamsModule.js.map +1 -0
- package/modules/JSONCSVModule.d.ts +2 -2
- package/modules/JSONCSVModule.js +56 -78
- package/modules/JSONCSVModule.js.map +1 -0
- package/modules/csv-serializer.d.ts +1 -1
- package/modules/csv-serializer.js +11 -5
- package/modules/csv-serializer.js.map +1 -0
- package/package.json +20 -11
- package/replacer-v2/ReplacerV2.d.ts +1 -1
- package/replacer-v2/ReplacerV2.js +6 -9
- package/replacer-v2/ReplacerV2.js.map +1 -0
- package/test-index.d.ts +2 -2
- package/test-index.js +3 -18
- package/test-index.js.map +1 -0
- package/testing/consts.d.ts +13 -2
- package/testing/consts.js +66 -26
- package/testing/consts.js.map +1 -0
- package/testing/test-template.test.d.ts +1 -0
- package/testing/test-template.test.js +42 -0
- package/testing/test-template.test.js.map +1 -0
- package/testing/types.d.ts +17 -5
- package/testing/types.js +2 -2
- package/testing/types.js.map +1 -0
- package/testing/workspace-creator.d.ts +10 -0
- package/testing/workspace-creator.js +79 -0
- package/testing/workspace-creator.js.map +1 -0
- package/tools/Replacer.d.ts +2 -2
- package/tools/Replacer.js +22 -24
- package/tools/Replacer.js.map +1 -0
- package/tools/get-log-style.js +4 -6
- package/tools/get-log-style.js.map +1 -0
- package/utils/FileSystemUtils.d.ts +34 -0
- package/utils/FileSystemUtils.js +153 -0
- package/utils/FileSystemUtils.js.map +1 -0
- package/utils/array-tools.d.ts +4 -4
- package/utils/array-tools.js +56 -83
- package/utils/array-tools.js.map +1 -0
- package/utils/conflict-tools.d.ts +1 -0
- package/utils/conflict-tools.js +3 -0
- package/utils/conflict-tools.js.map +1 -0
- package/utils/crypto-tools.d.ts +44 -0
- package/utils/crypto-tools.js +101 -10
- package/utils/crypto-tools.js.map +1 -0
- package/utils/date-time-tools.d.ts +48 -4
- package/utils/date-time-tools.js +166 -64
- package/utils/date-time-tools.js.map +1 -0
- package/utils/db-object-tools.d.ts +7 -2
- package/utils/db-object-tools.js +20 -20
- package/utils/db-object-tools.js.map +1 -0
- package/utils/exception-tools.js +13 -15
- package/utils/exception-tools.js.map +1 -0
- package/utils/filter-tools.js +48 -48
- package/utils/filter-tools.js.map +1 -0
- package/utils/hash-tools.js +14 -22
- package/utils/hash-tools.js.map +1 -0
- package/utils/index.d.ts +27 -0
- package/utils/index.js +28 -0
- package/utils/index.js.map +1 -0
- package/utils/json-tools.js +5 -8
- package/utils/json-tools.js.map +1 -0
- package/utils/merge-tools.d.ts +9 -0
- package/utils/merge-tools.js +18 -19
- package/utils/merge-tools.js.map +1 -0
- package/utils/mimetype-tools.d.ts +1 -0
- package/utils/mimetype-tools.js +26 -27
- package/utils/mimetype-tools.js.map +1 -0
- package/utils/number-tools.js +3 -7
- package/utils/number-tools.js.map +1 -0
- package/utils/object-tools.d.ts +15 -1
- package/utils/object-tools.js +110 -33
- package/utils/object-tools.js.map +1 -0
- package/utils/promise-tools.d.ts +5 -0
- package/utils/promise-tools.js +9 -5
- package/utils/promise-tools.js.map +1 -0
- package/utils/query-params.js +3 -6
- package/utils/query-params.js.map +1 -0
- package/utils/queue-v2.d.ts +1 -1
- package/utils/queue-v2.js +72 -73
- package/utils/queue-v2.js.map +1 -0
- package/utils/queue.d.ts +1 -1
- package/utils/queue.js +15 -17
- package/utils/queue.js.map +1 -0
- package/utils/random-tools.js +7 -11
- package/utils/random-tools.js.map +1 -0
- package/utils/storage-capacity-tools.js +7 -9
- package/utils/storage-capacity-tools.js.map +1 -0
- package/utils/string-tools.js +17 -31
- package/utils/string-tools.js.map +1 -0
- package/utils/time-proxy.d.ts +8 -0
- package/utils/time-proxy.js +10 -0
- package/utils/time-proxy.js.map +1 -0
- package/utils/tools.d.ts +1 -1
- package/utils/tools.js +18 -28
- package/utils/tools.js.map +1 -0
- package/utils/types.d.ts +9 -3
- package/utils/types.js +2 -4
- package/utils/types.js.map +1 -0
- package/utils/ui-tools.js +6 -12
- package/utils/ui-tools.js.map +1 -0
- package/utils/url-tools.d.ts +5 -0
- package/utils/url-tools.js +20 -0
- package/utils/url-tools.js.map +1 -0
- package/utils/version-tools.js +17 -12
- package/utils/version-tools.js.map +1 -0
- package/validator/type-validators.d.ts +14 -10
- package/validator/type-validators.js +84 -105
- package/validator/type-validators.js.map +1 -0
- package/validator/validator-core.d.ts +4 -4
- package/validator/validator-core.js +16 -21
- package/validator/validator-core.js.map +1 -0
- package/validator/validators.d.ts +9 -5
- package/validator/validators.js +48 -47
- package/validator/validators.js.map +1 -0
- package/tsconfig.json +0 -23
package/utils/array-tools.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/*
|
|
3
2
|
* ts-common is the basic building blocks of our typescript projects
|
|
4
3
|
*
|
|
@@ -16,44 +15,10 @@
|
|
|
16
15
|
* See the License for the specific language governing permissions and
|
|
17
16
|
* limitations under the License.
|
|
18
17
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
exports.removeFromArrayByIndex = removeFromArrayByIndex;
|
|
24
|
-
exports.swapInArrayByIndex = swapInArrayByIndex;
|
|
25
|
-
exports.addItemToArray = addItemToArray;
|
|
26
|
-
exports.addItemToArrayAtIndex = addItemToArrayAtIndex;
|
|
27
|
-
exports.toggleElementInArray = toggleElementInArray;
|
|
28
|
-
exports.filterAsync = filterAsync;
|
|
29
|
-
exports.findDuplicates = findDuplicates;
|
|
30
|
-
exports.filterDuplicates = filterDuplicates;
|
|
31
|
-
exports.filterInstances = filterInstances;
|
|
32
|
-
exports.filterFalsy = filterFalsy;
|
|
33
|
-
exports.arrayToMap = arrayToMap;
|
|
34
|
-
exports.reduceToMap = reduceToMap;
|
|
35
|
-
exports.sortArray = sortArray;
|
|
36
|
-
exports.batchAction = batchAction;
|
|
37
|
-
exports.Promise_all_sequentially = Promise_all_sequentially;
|
|
38
|
-
exports.batchActionParallel = batchActionParallel;
|
|
39
|
-
exports.flatArray = flatArray;
|
|
40
|
-
exports.filterFlatInstances = filterFlatInstances;
|
|
41
|
-
exports.groupArrayBy = groupArrayBy;
|
|
42
|
-
exports.toggleInArray = toggleInArray;
|
|
43
|
-
exports.generateArray = generateArray;
|
|
44
|
-
exports.asArray = asArray;
|
|
45
|
-
exports.asOptionalArray = asOptionalArray;
|
|
46
|
-
exports.lastElement = lastElement;
|
|
47
|
-
exports.firstElement = firstElement;
|
|
48
|
-
exports.arrayIncludesAny = arrayIncludesAny;
|
|
49
|
-
exports.clearArrayInstance = clearArrayInstance;
|
|
50
|
-
exports.arrayIncludesAll = arrayIncludesAll;
|
|
51
|
-
exports.getMax = getMax;
|
|
52
|
-
exports.getMin = getMin;
|
|
53
|
-
const tools_1 = require("./tools");
|
|
54
|
-
const object_tools_1 = require("./object-tools");
|
|
55
|
-
const exceptions_1 = require("../core/exceptions/exceptions");
|
|
56
|
-
function filterInOut(input, filter) {
|
|
18
|
+
import { exists } from './tools.js';
|
|
19
|
+
import { _keys } from './object-tools.js';
|
|
20
|
+
import { BadImplementationException } from '../core/exceptions/exceptions.js';
|
|
21
|
+
export function filterInOut(input, filter) {
|
|
57
22
|
return {
|
|
58
23
|
filteredIn: input.filter(filter),
|
|
59
24
|
filteredOut: input.filter((object) => !filter(object))
|
|
@@ -63,7 +28,7 @@ function filterInOut(input, filter) {
|
|
|
63
28
|
* Finds and removes first instance of item from array
|
|
64
29
|
* tested V
|
|
65
30
|
*/
|
|
66
|
-
function removeItemFromArray(array, item) {
|
|
31
|
+
export function removeItemFromArray(array, item) {
|
|
67
32
|
const index = array.indexOf(item);
|
|
68
33
|
return removeFromArrayByIndex(array, index);
|
|
69
34
|
}
|
|
@@ -71,24 +36,26 @@ function removeItemFromArray(array, item) {
|
|
|
71
36
|
* Removes the first item answering the condition given from array in place
|
|
72
37
|
* tested V
|
|
73
38
|
*/
|
|
74
|
-
function removeFromArray(array,
|
|
75
|
-
const
|
|
76
|
-
|
|
39
|
+
export function removeFromArray(array, filter) {
|
|
40
|
+
const kept = array.filter(x => !filter(x));
|
|
41
|
+
array.length = 0;
|
|
42
|
+
array.push(...kept);
|
|
43
|
+
return array;
|
|
77
44
|
}
|
|
78
45
|
/**
|
|
79
46
|
* Removes item from array in index
|
|
80
47
|
* tested V
|
|
81
48
|
*/
|
|
82
|
-
function removeFromArrayByIndex(array, index) {
|
|
49
|
+
export function removeFromArrayByIndex(array, index) {
|
|
83
50
|
if (index > -1)
|
|
84
51
|
array.splice(index, 1);
|
|
85
52
|
return array;
|
|
86
53
|
}
|
|
87
|
-
function swapInArrayByIndex(array, i1, i2) {
|
|
54
|
+
export function swapInArrayByIndex(array, i1, i2) {
|
|
88
55
|
if (i1 < 0 || i1 >= array.length)
|
|
89
|
-
throw new
|
|
56
|
+
throw new BadImplementationException(`index i1 out of bounds: ${i1}`);
|
|
90
57
|
if (i2 < 0 || i2 >= array.length)
|
|
91
|
-
throw new
|
|
58
|
+
throw new BadImplementationException(`index i2 out of bounds: ${i2}`);
|
|
92
59
|
if (i1 === i2)
|
|
93
60
|
return array;
|
|
94
61
|
const temp = array[i1];
|
|
@@ -99,15 +66,15 @@ function swapInArrayByIndex(array, i1, i2) {
|
|
|
99
66
|
/**
|
|
100
67
|
* Deprecated
|
|
101
68
|
*/
|
|
102
|
-
function addItemToArray(array, item) {
|
|
69
|
+
export function addItemToArray(array, item) {
|
|
103
70
|
array.push(item);
|
|
104
71
|
return array;
|
|
105
72
|
}
|
|
106
|
-
function addItemToArrayAtIndex(array, item, index) {
|
|
73
|
+
export function addItemToArrayAtIndex(array, item, index) {
|
|
107
74
|
array.splice(index, 0, item);
|
|
108
75
|
return array;
|
|
109
76
|
}
|
|
110
|
-
function toggleElementInArray(array, item) {
|
|
77
|
+
export function toggleElementInArray(array, item) {
|
|
111
78
|
const index = array.indexOf(item);
|
|
112
79
|
if (index > -1)
|
|
113
80
|
array.splice(index, 1);
|
|
@@ -118,7 +85,7 @@ function toggleElementInArray(array, item) {
|
|
|
118
85
|
/**
|
|
119
86
|
* Removes all items answering the condition given from array in place
|
|
120
87
|
*/
|
|
121
|
-
async function filterAsync(arr, filter) {
|
|
88
|
+
export async function filterAsync(arr, filter) {
|
|
122
89
|
//const boolArray = await arr.map(item => filter(item)); changed
|
|
123
90
|
const boolArray = await Promise.all(arr.map(item => filter(item)));
|
|
124
91
|
return arr.filter((item, index) => boolArray[index]);
|
|
@@ -127,42 +94,47 @@ async function filterAsync(arr, filter) {
|
|
|
127
94
|
* builds array that holds all items that are in array1 and array2
|
|
128
95
|
* problem with objects
|
|
129
96
|
*/
|
|
130
|
-
function findDuplicates(array1, array2) {
|
|
97
|
+
export function findDuplicates(array1, array2) {
|
|
131
98
|
return array1.filter(val => array2.indexOf(val) !== -1);
|
|
132
99
|
}
|
|
133
100
|
const defaultMapper = (item) => item;
|
|
134
101
|
/**
|
|
135
102
|
remove all duplicates in array
|
|
136
103
|
* */
|
|
137
|
-
function filterDuplicates(source, mapper = defaultMapper) {
|
|
104
|
+
export function filterDuplicates(source, mapper = defaultMapper) {
|
|
138
105
|
if (defaultMapper === mapper)
|
|
139
106
|
return Array.from(new Set(source));
|
|
140
|
-
|
|
141
|
-
|
|
107
|
+
let _mapper;
|
|
108
|
+
if (typeof mapper === 'function')
|
|
109
|
+
_mapper = mapper;
|
|
110
|
+
else
|
|
111
|
+
_mapper = ((item) => item[mapper]);
|
|
112
|
+
const uniqueKeys = new Set(source.map(_mapper));
|
|
113
|
+
return source.filter(item => uniqueKeys.delete(_mapper(item)));
|
|
142
114
|
}
|
|
143
115
|
/**
|
|
144
116
|
* filter array of all undefined and null
|
|
145
117
|
* */
|
|
146
|
-
function filterInstances(array) {
|
|
147
|
-
return (
|
|
118
|
+
export function filterInstances(array) {
|
|
119
|
+
return (array?.filter(item => exists(item)) || []);
|
|
148
120
|
}
|
|
149
121
|
/**
|
|
150
122
|
* filter array of all falsy instances
|
|
151
123
|
* */
|
|
152
|
-
function filterFalsy(array) {
|
|
153
|
-
return (
|
|
124
|
+
export function filterFalsy(array) {
|
|
125
|
+
return (array?.filter(item => !!item) || []);
|
|
154
126
|
}
|
|
155
127
|
/**
|
|
156
128
|
* receives array and builds hashmap whom keys are decided via function and values are from array
|
|
157
129
|
* */
|
|
158
|
-
function arrayToMap(array, getKey, map = {}) {
|
|
130
|
+
export function arrayToMap(array, getKey, map = {}) {
|
|
159
131
|
return reduceToMap(array, getKey, item => item, map);
|
|
160
132
|
}
|
|
161
133
|
/**
|
|
162
134
|
* turns array into object that is similar to hashmap
|
|
163
135
|
*
|
|
164
136
|
*/
|
|
165
|
-
function reduceToMap(array, keyResolver, mapper, map = {}) {
|
|
137
|
+
export function reduceToMap(array, keyResolver, mapper, map = {}) {
|
|
166
138
|
return array.reduce((toRet, element, index) => {
|
|
167
139
|
const keys = keyResolver(element, index, toRet);
|
|
168
140
|
const output = mapper(element, index, toRet);
|
|
@@ -176,7 +148,7 @@ function reduceToMap(array, keyResolver, mapper, map = {}) {
|
|
|
176
148
|
/**
|
|
177
149
|
* sorts array
|
|
178
150
|
* */
|
|
179
|
-
function sortArray(array, map = i => i, invert = false) {
|
|
151
|
+
export function sortArray(array, map = i => i, invert = false) {
|
|
180
152
|
const functionMap = map;
|
|
181
153
|
if (typeof functionMap === 'function') {
|
|
182
154
|
const compareFn = (a, b) => {
|
|
@@ -198,7 +170,7 @@ function sortArray(array, map = i => i, invert = false) {
|
|
|
198
170
|
/**
|
|
199
171
|
* "splits" array into given size of chunks and then does "action" on chunk and return to array of actions on chunks +-
|
|
200
172
|
* */
|
|
201
|
-
async function batchAction(arr, chunk, action) {
|
|
173
|
+
export async function batchAction(arr, chunk, action) {
|
|
202
174
|
const result = [];
|
|
203
175
|
for (let i = 0, j = arr.length; i < j; i += chunk) {
|
|
204
176
|
const items = await action(arr.slice(i, i + chunk));
|
|
@@ -228,14 +200,14 @@ async function batchAction(arr, chunk, action) {
|
|
|
228
200
|
* ```
|
|
229
201
|
* @param promises
|
|
230
202
|
*/
|
|
231
|
-
async function Promise_all_sequentially(promises) {
|
|
203
|
+
export async function Promise_all_sequentially(promises) {
|
|
232
204
|
const results = [];
|
|
233
205
|
for (const promise of promises) {
|
|
234
206
|
results.push(await promise());
|
|
235
207
|
}
|
|
236
208
|
return results;
|
|
237
209
|
}
|
|
238
|
-
async function batchActionParallel(arr, chunk, action) {
|
|
210
|
+
export async function batchActionParallel(arr, chunk, action) {
|
|
239
211
|
const promises = [];
|
|
240
212
|
for (let i = 0, j = arr.length; i < j; i += chunk) {
|
|
241
213
|
addItemToArray(promises, action(arr.slice(i, i + chunk)));
|
|
@@ -257,7 +229,7 @@ async function batchActionParallel(arr, chunk, action) {
|
|
|
257
229
|
* @param arr An array that is potentially a matrix
|
|
258
230
|
* @param result A flat array of single values
|
|
259
231
|
*/
|
|
260
|
-
function flatArray(arr, result = []) {
|
|
232
|
+
export function flatArray(arr, result = []) {
|
|
261
233
|
for (let i = 0, length = arr.length; i < length; i++) {
|
|
262
234
|
const value = arr[i];
|
|
263
235
|
if (Array.isArray(value)) {
|
|
@@ -269,42 +241,42 @@ function flatArray(arr, result = []) {
|
|
|
269
241
|
}
|
|
270
242
|
return result;
|
|
271
243
|
}
|
|
272
|
-
function filterFlatInstances(arr, result = []) {
|
|
244
|
+
export function filterFlatInstances(arr, result = []) {
|
|
273
245
|
return filterInstances(flatArray(arr, result));
|
|
274
246
|
}
|
|
275
|
-
function groupArrayBy(arr, mapper) {
|
|
247
|
+
export function groupArrayBy(arr, mapper) {
|
|
276
248
|
const map = arr.reduce((agg, item, index) => {
|
|
277
249
|
const key = mapper(item, index);
|
|
278
250
|
(agg[key] || (agg[key] = [])).push(item);
|
|
279
251
|
return agg;
|
|
280
252
|
}, {});
|
|
281
|
-
return
|
|
253
|
+
return _keys(map).map(key => ({ key, values: map[key] }));
|
|
282
254
|
}
|
|
283
|
-
function toggleInArray(arr, item, mapper = item => item) {
|
|
255
|
+
export function toggleInArray(arr, item, mapper = item => item) {
|
|
284
256
|
const index = arr.findIndex(_item => mapper(_item) === mapper(item));
|
|
285
257
|
if (index !== -1)
|
|
286
258
|
removeFromArrayByIndex(arr, index);
|
|
287
259
|
else
|
|
288
260
|
arr.push(item);
|
|
289
261
|
}
|
|
290
|
-
function generateArray(length, mapper = i => i) {
|
|
262
|
+
export function generateArray(length, mapper = i => i) {
|
|
291
263
|
return Array.from({ length }).map((e, i) => mapper(i));
|
|
292
264
|
}
|
|
293
|
-
function asArray(toBeArray) {
|
|
265
|
+
export function asArray(toBeArray) {
|
|
294
266
|
return Array.isArray(toBeArray) ? toBeArray : [toBeArray];
|
|
295
267
|
}
|
|
296
|
-
function asOptionalArray(toBeArray) {
|
|
297
|
-
if (!
|
|
268
|
+
export function asOptionalArray(toBeArray) {
|
|
269
|
+
if (!exists(toBeArray))
|
|
298
270
|
return undefined;
|
|
299
271
|
return asArray(toBeArray);
|
|
300
272
|
}
|
|
301
|
-
function lastElement(array) {
|
|
302
|
-
return array
|
|
273
|
+
export function lastElement(array) {
|
|
274
|
+
return array?.[array?.length - 1];
|
|
303
275
|
}
|
|
304
|
-
function firstElement(array) {
|
|
305
|
-
return array
|
|
276
|
+
export function firstElement(array) {
|
|
277
|
+
return array?.[0];
|
|
306
278
|
}
|
|
307
|
-
function arrayIncludesAny(arr1, arr2) {
|
|
279
|
+
export function arrayIncludesAny(arr1, arr2) {
|
|
308
280
|
return arr1.some(item => arr2.includes(item));
|
|
309
281
|
}
|
|
310
282
|
/**
|
|
@@ -312,7 +284,7 @@ function arrayIncludesAny(arr1, arr2) {
|
|
|
312
284
|
* This function will take any array and clear it's content completely while keeping the same instance to save memory
|
|
313
285
|
* @param arr - Any array
|
|
314
286
|
*/
|
|
315
|
-
function clearArrayInstance(arr) {
|
|
287
|
+
export function clearArrayInstance(arr) {
|
|
316
288
|
arr.length = 0;
|
|
317
289
|
}
|
|
318
290
|
/**
|
|
@@ -320,14 +292,15 @@ function clearArrayInstance(arr) {
|
|
|
320
292
|
* @param arr1
|
|
321
293
|
* @param arr2
|
|
322
294
|
*/
|
|
323
|
-
function arrayIncludesAll(arr1, arr2) {
|
|
295
|
+
export function arrayIncludesAll(arr1, arr2) {
|
|
324
296
|
return arr2.every(item => arr1.includes(item));
|
|
325
297
|
}
|
|
326
|
-
function getMax(arr, mapper = (item) => item) {
|
|
298
|
+
export function getMax(arr, mapper = (item) => item) {
|
|
327
299
|
const sorted = sortArray(arr, mapper, true);
|
|
328
300
|
return sorted[0];
|
|
329
301
|
}
|
|
330
|
-
function getMin(arr, mapper = (item) => item) {
|
|
302
|
+
export function getMin(arr, mapper = (item) => item) {
|
|
331
303
|
const sorted = sortArray(arr, mapper);
|
|
332
304
|
return sorted[0];
|
|
333
305
|
}
|
|
306
|
+
//# sourceMappingURL=array-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-tools.js","sourceRoot":"/Users/tacb0ss/dev/nu-art/beamz/_thunderstorm/ts-common/src/main/","sources":["utils/array-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const findConflicts: <T>(origin: T, ours: T, theirs: T) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-tools.js","sourceRoot":"/Users/tacb0ss/dev/nu-art/beamz/_thunderstorm/ts-common/src/main/","sources":["utils/conflict-tools.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,MAAS,EAAE,IAAO,EAAE,MAAS,EAAE,EAAE;AAElE,CAAC,CAAC"}
|
package/utils/crypto-tools.d.ts
CHANGED
|
@@ -1,3 +1,47 @@
|
|
|
1
|
+
import { RecursiveObjectOfPrimitives } from './types.js';
|
|
1
2
|
export declare function randomNumber(range: number): number;
|
|
2
3
|
export declare function randomObject<T>(items: T[]): T;
|
|
3
4
|
export declare function hashPasswordWithSalt(salt: string | Buffer, password: string | Buffer): string;
|
|
5
|
+
export type JWT_BaseClaims = {
|
|
6
|
+
iat: number;
|
|
7
|
+
exp: number;
|
|
8
|
+
};
|
|
9
|
+
/** Options for encoding a JWT */
|
|
10
|
+
export interface EncodeJWT_Options {
|
|
11
|
+
/** Expiration – e.g. '1h', '10m', or absolute epoch seconds */
|
|
12
|
+
expiresIn?: string | number;
|
|
13
|
+
/** Signing algorithm – defaults to 'HS256'. Examples: 'RS256', 'ES256', 'EdDSA' */
|
|
14
|
+
alg?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const JwtTools: {
|
|
17
|
+
/**
|
|
18
|
+
* Create a signed JWT.
|
|
19
|
+
* @param data Payload to embed in the token.
|
|
20
|
+
* @param secret Shared secret (HS*) **or** private key (other algs).
|
|
21
|
+
* @param options Optional `expiresIn` and `alg` (defaults to 'HS256'). If
|
|
22
|
+
* `expiresIn` is omitted, a 1‑hour token is issued.
|
|
23
|
+
*/
|
|
24
|
+
encode: <T extends RecursiveObjectOfPrimitives>(data: T, secret: string, options?: EncodeJWT_Options) => Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Decode a JWT.
|
|
27
|
+
* – If `secret` is provided, verify signature and registered claims.
|
|
28
|
+
* – If omitted, only parse Base64Url segments (⚠️ no integrity check).
|
|
29
|
+
*/
|
|
30
|
+
decode: <T extends RecursiveObjectOfPrimitives>(token: string, secret?: string) => Promise<T & JWT_BaseClaims>;
|
|
31
|
+
verifySignature: <T extends RecursiveObjectOfPrimitives>(token: string, secret: string) => Promise<T & JWT_BaseClaims>;
|
|
32
|
+
/**
|
|
33
|
+
* Extract the `iat` (Issued‑At) claim from a token without verifying.
|
|
34
|
+
* @returns Epoch seconds or `undefined` if the claim is missing / malformed.
|
|
35
|
+
*/
|
|
36
|
+
getCreationTime: (token: string) => Promise<number | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Lightweight client‑side freshness check based on the `exp` claim.
|
|
39
|
+
* NOTE: This does **not** verify the signature.
|
|
40
|
+
*/
|
|
41
|
+
isJwtActive: (token: string) => Promise<boolean>;
|
|
42
|
+
isJwtExpired: (token: string) => Promise<boolean>;
|
|
43
|
+
};
|
|
44
|
+
export declare const TEST_JwtTools: {
|
|
45
|
+
beforeAll: () => void;
|
|
46
|
+
afterAll: () => void;
|
|
47
|
+
};
|
package/utils/crypto-tools.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/*
|
|
3
2
|
* ts-common is the basic building blocks of our typescript projects
|
|
4
3
|
*
|
|
@@ -16,19 +15,111 @@
|
|
|
16
15
|
* See the License for the specific language governing permissions and
|
|
17
16
|
* limitations under the License.
|
|
18
17
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
import { createHmac } from 'crypto';
|
|
19
|
+
import { decodeJwt, jwtVerify, SignJWT } from 'jose';
|
|
20
|
+
import { exists } from './tools.js';
|
|
21
|
+
import { currentTimeMillis } from './date-time-tools.js';
|
|
22
|
+
// Text encoder instance reused for key derivation
|
|
23
|
+
const te = new TextEncoder();
|
|
24
|
+
export function randomNumber(range) {
|
|
25
25
|
return Math.floor(Math.random() * (range));
|
|
26
26
|
}
|
|
27
|
-
function randomObject(items) {
|
|
27
|
+
export function randomObject(items) {
|
|
28
28
|
return items[randomNumber(items.length)];
|
|
29
29
|
}
|
|
30
|
-
function hashPasswordWithSalt(salt, password) {
|
|
31
|
-
return
|
|
30
|
+
export function hashPasswordWithSalt(salt, password) {
|
|
31
|
+
return createHmac('sha512', salt)
|
|
32
32
|
.update(password)
|
|
33
33
|
.digest('hex');
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Derive an HMAC‑SHA secret key from a raw string.
|
|
37
|
+
* jose APIs expect a Uint8Array key for HS* algorithms.
|
|
38
|
+
*/
|
|
39
|
+
const hmacKey = (secret) => te.encode(secret);
|
|
40
|
+
export const JwtTools = {
|
|
41
|
+
/**
|
|
42
|
+
* Create a signed JWT.
|
|
43
|
+
* @param data Payload to embed in the token.
|
|
44
|
+
* @param secret Shared secret (HS*) **or** private key (other algs).
|
|
45
|
+
* @param options Optional `expiresIn` and `alg` (defaults to 'HS256'). If
|
|
46
|
+
* `expiresIn` is omitted, a 1‑hour token is issued.
|
|
47
|
+
*/
|
|
48
|
+
encode: async (data, secret, options) => {
|
|
49
|
+
return new SignJWT(data)
|
|
50
|
+
.setProtectedHeader({ alg: options?.alg ?? 'HS256', type: 'JWT' })
|
|
51
|
+
.setIssuedAt()
|
|
52
|
+
.setExpirationTime(options?.expiresIn ?? '1h')
|
|
53
|
+
.sign(hmacKey(secret));
|
|
54
|
+
},
|
|
55
|
+
/**
|
|
56
|
+
* Decode a JWT.
|
|
57
|
+
* – If `secret` is provided, verify signature and registered claims.
|
|
58
|
+
* – If omitted, only parse Base64Url segments (⚠️ no integrity check).
|
|
59
|
+
*/
|
|
60
|
+
decode: async (token, secret) => {
|
|
61
|
+
if (secret)
|
|
62
|
+
return JwtTools.verifySignature(token, secret);
|
|
63
|
+
return decodeJwt(token);
|
|
64
|
+
},
|
|
65
|
+
verifySignature: async (token, secret) => {
|
|
66
|
+
return (await jwtVerify(token, hmacKey(secret))).payload;
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Extract the `iat` (Issued‑At) claim from a token without verifying.
|
|
70
|
+
* @returns Epoch seconds or `undefined` if the claim is missing / malformed.
|
|
71
|
+
*/
|
|
72
|
+
getCreationTime: async (token) => {
|
|
73
|
+
try {
|
|
74
|
+
const { iat } = decodeJwt(token);
|
|
75
|
+
return typeof iat === 'number' ? iat : undefined;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Lightweight client‑side freshness check based on the `exp` claim.
|
|
83
|
+
* NOTE: This does **not** verify the signature.
|
|
84
|
+
*/
|
|
85
|
+
isJwtActive: async (token) => {
|
|
86
|
+
try {
|
|
87
|
+
const { exp } = decodeJwt(token);
|
|
88
|
+
if (!exists(exp))
|
|
89
|
+
return false;
|
|
90
|
+
const now = Math.floor(currentTimeMillis() / 1000);
|
|
91
|
+
return exp > now;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
// Preserve original behaviour: swallow errors and report invalid.
|
|
95
|
+
// this.logError?.('Error validating session token', err);
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
isJwtExpired: async (token) => {
|
|
100
|
+
return !(await JwtTools.isJwtActive(token));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const originalJwtTools_encode = JwtTools.encode;
|
|
104
|
+
const originalJwtTools_verifySignature = JwtTools.verifySignature;
|
|
105
|
+
const TEST_JwtTools_BeforeAll = () => {
|
|
106
|
+
JwtTools.encode = async (data, secret, options) => {
|
|
107
|
+
return new SignJWT(data)
|
|
108
|
+
.setProtectedHeader({ alg: options?.alg ?? 'HS256', type: 'JWT' })
|
|
109
|
+
.setIssuedAt(Math.floor(currentTimeMillis() / 1000))
|
|
110
|
+
.setExpirationTime(options?.expiresIn ?? '1h')
|
|
111
|
+
.sign(hmacKey(secret));
|
|
112
|
+
};
|
|
113
|
+
JwtTools.verifySignature = async (token, secret) => {
|
|
114
|
+
return (await jwtVerify(token, hmacKey(secret), { currentDate: new Date(currentTimeMillis()) })).payload;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const TEST_JwtTools_AfterAll = () => {
|
|
118
|
+
JwtTools.encode = originalJwtTools_encode;
|
|
119
|
+
JwtTools.verifySignature = originalJwtTools_verifySignature;
|
|
120
|
+
};
|
|
121
|
+
export const TEST_JwtTools = {
|
|
122
|
+
beforeAll: TEST_JwtTools_BeforeAll,
|
|
123
|
+
afterAll: TEST_JwtTools_AfterAll,
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=crypto-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-tools.js","sourceRoot":"/Users/tacb0ss/dev/nu-art/beamz/_thunderstorm/ts-common/src/main/","sources":["utils/crypto-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuditBy, Timestamp } from './types';
|
|
1
|
+
import { AuditBy, Timestamp } from './types.js';
|
|
2
2
|
export declare const Second = 1000;
|
|
3
3
|
export declare const Minute: number;
|
|
4
4
|
export declare const Hour: number;
|
|
@@ -10,14 +10,54 @@ export declare const Format_HHmmss_DDMMYYYY = "HH:mm:ss_DD-MM-YYYY";
|
|
|
10
10
|
export declare const Format_YYYYMMDD_HHmmss = "YYYY-MM-DD_HH:mm:ss";
|
|
11
11
|
export type Weekday = 'Sunday' | 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday' | 'Saturday';
|
|
12
12
|
export declare const Weekdays: Weekday[];
|
|
13
|
-
export type TimerHandler = (...args:
|
|
13
|
+
export type TimerHandler<Args extends any[] = any[]> = (...args: Args) => void;
|
|
14
14
|
export type TimeRange = [number, number] | [undefined, number] | [number, undefined];
|
|
15
|
+
export type TimeCounter = {
|
|
16
|
+
dt: () => number;
|
|
17
|
+
format: (format: string) => string;
|
|
18
|
+
};
|
|
15
19
|
export declare function timeout(sleepMs: number): Promise<unknown>;
|
|
16
20
|
export declare const sleep: typeof timeout;
|
|
17
|
-
export declare function _setTimeout(handler: TimerHandler
|
|
21
|
+
export declare function _setTimeout<Args extends any[]>(handler: TimerHandler<Args>, sleepMs?: number, ...args: Args): number;
|
|
18
22
|
export declare function _clearTimeout(handlerId?: number): void;
|
|
19
|
-
export declare function _setInterval(handler: TimerHandler
|
|
23
|
+
export declare function _setInterval<Args extends any[]>(handler: TimerHandler<Args>, sleepMs?: number, ...args: Args): number;
|
|
20
24
|
export declare function _clearInterval(handlerId?: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a timeout handler object that manages a single `setTimeout` instance.
|
|
27
|
+
* Includes lifecycle controls: set, clear, reset, isActive.
|
|
28
|
+
*
|
|
29
|
+
* @param handler The function to be called after the timeout.
|
|
30
|
+
* @param sleepMs Timeout duration in milliseconds. Defaults to 0.
|
|
31
|
+
* @param args Arguments passed to the handler function.
|
|
32
|
+
* @returns An object with `set`, `clear`, `reset`, and `isActive` methods.
|
|
33
|
+
*/
|
|
34
|
+
export declare const timeoutHandler: <Args extends any[]>(handler: TimerHandler<Args>, sleepMs?: number, ...args: Args) => {
|
|
35
|
+
set: () => void;
|
|
36
|
+
clear: () => void;
|
|
37
|
+
reset: () => void;
|
|
38
|
+
isActive: () => boolean;
|
|
39
|
+
_: {
|
|
40
|
+
onTimeAdjusted: () => void;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Creates an interval handler object that manages a single `setInterval` instance.
|
|
45
|
+
* Includes lifecycle controls: set, clear, reset, isActive.
|
|
46
|
+
*
|
|
47
|
+
* @param handler The function to be called repeatedly.
|
|
48
|
+
* @param sleepMs Interval duration in milliseconds. Defaults to 0.
|
|
49
|
+
* @param args Arguments passed to the handler function.
|
|
50
|
+
* @returns An object with `set`, `clear`, `reset`, and `isActive` methods.
|
|
51
|
+
*/
|
|
52
|
+
export declare const intervalHandler: <Args extends any[]>(handler: TimerHandler<Args>, sleepMs?: number, ...args: Args) => {
|
|
53
|
+
set: () => void;
|
|
54
|
+
clear: () => void;
|
|
55
|
+
reset: () => void;
|
|
56
|
+
isActive: () => boolean;
|
|
57
|
+
_: {
|
|
58
|
+
onTimeAdjusted: () => NodeJS.Timeout | undefined;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
21
61
|
/**
|
|
22
62
|
* @param comment @deprecated
|
|
23
63
|
*/
|
|
@@ -51,3 +91,7 @@ export declare const DateTimeFormat_DDMMYYYY: {
|
|
|
51
91
|
};
|
|
52
92
|
export declare function isSameDay(date1: Date, date2: Date): boolean;
|
|
53
93
|
export declare function deltaDays(d1: Date | number, d2: Date | number): number;
|
|
94
|
+
export declare function timeCounter(): {
|
|
95
|
+
dt: () => number;
|
|
96
|
+
format: (format: string) => string;
|
|
97
|
+
};
|