@terascope/core-utils 2.0.0-dev.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/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/src/arrays.d.ts +59 -0
- package/dist/src/arrays.d.ts.map +1 -0
- package/dist/src/arrays.js +180 -0
- package/dist/src/arrays.js.map +1 -0
- package/dist/src/big-lru-map.d.ts +14 -0
- package/dist/src/big-lru-map.d.ts.map +1 -0
- package/dist/src/big-lru-map.js +20 -0
- package/dist/src/big-lru-map.js.map +1 -0
- package/dist/src/big-map.d.ts +28 -0
- package/dist/src/big-map.d.ts.map +1 -0
- package/dist/src/big-map.js +148 -0
- package/dist/src/big-map.js.map +1 -0
- package/dist/src/big-set.d.ts +20 -0
- package/dist/src/big-set.d.ts.map +1 -0
- package/dist/src/big-set.js +109 -0
- package/dist/src/big-set.js.map +1 -0
- package/dist/src/booleans.d.ts +44 -0
- package/dist/src/booleans.d.ts.map +1 -0
- package/dist/src/booleans.js +81 -0
- package/dist/src/booleans.js.map +1 -0
- package/dist/src/buffers.d.ts +9 -0
- package/dist/src/buffers.d.ts.map +1 -0
- package/dist/src/buffers.js +22 -0
- package/dist/src/buffers.js.map +1 -0
- package/dist/src/collector.d.ts +48 -0
- package/dist/src/collector.d.ts.map +1 -0
- package/dist/src/collector.js +74 -0
- package/dist/src/collector.js.map +1 -0
- package/dist/src/dates.d.ts +180 -0
- package/dist/src/dates.d.ts.map +1 -0
- package/dist/src/dates.js +744 -0
- package/dist/src/dates.js.map +1 -0
- package/dist/src/decorators.d.ts +7 -0
- package/dist/src/decorators.d.ts.map +1 -0
- package/dist/src/decorators.js +21 -0
- package/dist/src/decorators.js.map +1 -0
- package/dist/src/deps.d.ts +25 -0
- package/dist/src/deps.d.ts.map +1 -0
- package/dist/src/deps.js +96 -0
- package/dist/src/deps.js.map +1 -0
- package/dist/src/empty.d.ts +11 -0
- package/dist/src/empty.d.ts.map +1 -0
- package/dist/src/empty.js +32 -0
- package/dist/src/empty.js.map +1 -0
- package/dist/src/entities/data-entity.d.ts +153 -0
- package/dist/src/entities/data-entity.d.ts.map +1 -0
- package/dist/src/entities/data-entity.js +354 -0
- package/dist/src/entities/data-entity.js.map +1 -0
- package/dist/src/entities/index.d.ts +3 -0
- package/dist/src/entities/index.d.ts.map +1 -0
- package/dist/src/entities/index.js +3 -0
- package/dist/src/entities/index.js.map +1 -0
- package/dist/src/entities/interfaces.d.ts +52 -0
- package/dist/src/entities/interfaces.d.ts.map +1 -0
- package/dist/src/entities/interfaces.js +13 -0
- package/dist/src/entities/interfaces.js.map +1 -0
- package/dist/src/entities/utils.d.ts +9 -0
- package/dist/src/entities/utils.d.ts.map +1 -0
- package/dist/src/entities/utils.js +44 -0
- package/dist/src/entities/utils.js.map +1 -0
- package/dist/src/env.d.ts +6 -0
- package/dist/src/env.d.ts.map +1 -0
- package/dist/src/env.js +15 -0
- package/dist/src/env.js.map +1 -0
- package/dist/src/equality.d.ts +72 -0
- package/dist/src/equality.d.ts.map +1 -0
- package/dist/src/equality.js +128 -0
- package/dist/src/equality.js.map +1 -0
- package/dist/src/errors.d.ts +140 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +372 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/event-loop.d.ts +33 -0
- package/dist/src/event-loop.d.ts.map +1 -0
- package/dist/src/event-loop.js +74 -0
- package/dist/src/event-loop.js.map +1 -0
- package/dist/src/fp.d.ts +15 -0
- package/dist/src/fp.d.ts.map +1 -0
- package/dist/src/fp.js +25 -0
- package/dist/src/fp.js.map +1 -0
- package/dist/src/functions.d.ts +19 -0
- package/dist/src/functions.d.ts.map +1 -0
- package/dist/src/functions.js +58 -0
- package/dist/src/functions.js.map +1 -0
- package/dist/src/index.d.ts +33 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +33 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/iterators.d.ts +9 -0
- package/dist/src/iterators.d.ts.map +1 -0
- package/dist/src/iterators.js +13 -0
- package/dist/src/iterators.js.map +1 -0
- package/dist/src/json.d.ts +8 -0
- package/dist/src/json.d.ts.map +1 -0
- package/dist/src/json.js +46 -0
- package/dist/src/json.js.map +1 -0
- package/dist/src/logger.d.ts +18 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +87 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/numbers.d.ts +86 -0
- package/dist/src/numbers.d.ts.map +1 -0
- package/dist/src/numbers.js +354 -0
- package/dist/src/numbers.js.map +1 -0
- package/dist/src/objects.d.ts +66 -0
- package/dist/src/objects.d.ts.map +1 -0
- package/dist/src/objects.js +170 -0
- package/dist/src/objects.js.map +1 -0
- package/dist/src/phone-number.d.ts +4 -0
- package/dist/src/phone-number.d.ts.map +1 -0
- package/dist/src/phone-number.js +31 -0
- package/dist/src/phone-number.js.map +1 -0
- package/dist/src/promises.d.ts +102 -0
- package/dist/src/promises.d.ts.map +1 -0
- package/dist/src/promises.js +289 -0
- package/dist/src/promises.js.map +1 -0
- package/dist/src/queue/index.d.ts +27 -0
- package/dist/src/queue/index.d.ts.map +1 -0
- package/dist/src/queue/index.js +170 -0
- package/dist/src/queue/index.js.map +1 -0
- package/dist/src/queue/node.d.ts +7 -0
- package/dist/src/queue/node.d.ts.map +1 -0
- package/dist/src/queue/node.js +17 -0
- package/dist/src/queue/node.js.map +1 -0
- package/dist/src/regex.d.ts +19 -0
- package/dist/src/regex.d.ts.map +1 -0
- package/dist/src/regex.js +138 -0
- package/dist/src/regex.js.map +1 -0
- package/dist/src/schemas.d.ts +69 -0
- package/dist/src/schemas.d.ts.map +1 -0
- package/dist/src/schemas.js +619 -0
- package/dist/src/schemas.js.map +1 -0
- package/dist/src/status-codes.d.ts +67 -0
- package/dist/src/status-codes.d.ts.map +1 -0
- package/dist/src/status-codes.js +66 -0
- package/dist/src/status-codes.js.map +1 -0
- package/dist/src/strings.d.ts +279 -0
- package/dist/src/strings.d.ts.map +1 -0
- package/dist/src/strings.js +578 -0
- package/dist/src/strings.js.map +1 -0
- package/dist/src/vector.d.ts +2 -0
- package/dist/src/vector.d.ts.map +1 -0
- package/dist/src/vector.js +16 -0
- package/dist/src/vector.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
import validator from 'validator';
|
|
2
|
+
import { trim as lTrim, trimStart as lTrimStart, trimEnd as lTrimEnd, camelCase as lCamelCase, snakeCase as lSnakeCase, kebabCase as lKebabCase, startCase as lStartCase, } from 'lodash-es';
|
|
3
|
+
import { isArrayLike } from './arrays.js';
|
|
4
|
+
import { getTypeOf } from './deps.js';
|
|
5
|
+
import { bigIntToJSON } from './numbers.js';
|
|
6
|
+
/** A simplified implementation of lodash isString */
|
|
7
|
+
export function isString(val) {
|
|
8
|
+
return typeof val === 'string';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Safely convert any input to a string
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
*
|
|
15
|
+
* toString(1); // '1'
|
|
16
|
+
* toString(0.01); // '0.01'
|
|
17
|
+
* toString(true); // 'true'
|
|
18
|
+
* toString(BigInt(2) ** BigInt(64)); // '18,446,744,073,709,551,616'
|
|
19
|
+
* toString(new Date('2020-09-23T14:54:21.020Z')) // '2020-09-23T14:54:21.020Z'
|
|
20
|
+
*/
|
|
21
|
+
export function toString(val) {
|
|
22
|
+
if (val == null)
|
|
23
|
+
return '';
|
|
24
|
+
if (typeof val === 'string')
|
|
25
|
+
return val;
|
|
26
|
+
if (typeof val === 'number' || typeof val === 'symbol' || typeof val === 'boolean') {
|
|
27
|
+
return String(val);
|
|
28
|
+
}
|
|
29
|
+
if (typeof val === 'bigint') {
|
|
30
|
+
const res = bigIntToJSON(val);
|
|
31
|
+
if (typeof res === 'string')
|
|
32
|
+
return res;
|
|
33
|
+
return `${res}`;
|
|
34
|
+
}
|
|
35
|
+
if (typeof val === 'function') {
|
|
36
|
+
return val.toString();
|
|
37
|
+
}
|
|
38
|
+
if (isArrayLike(val)) {
|
|
39
|
+
return val.map(toString).join(',');
|
|
40
|
+
}
|
|
41
|
+
if (val instanceof Date) {
|
|
42
|
+
return val.toISOString();
|
|
43
|
+
}
|
|
44
|
+
if (typeof val === 'object' && val != null) {
|
|
45
|
+
if (Symbol.iterator in val) {
|
|
46
|
+
return [...val].map(toString).join(',');
|
|
47
|
+
}
|
|
48
|
+
// is error
|
|
49
|
+
if ('message' in val && 'stack' in val) {
|
|
50
|
+
return val.toString();
|
|
51
|
+
}
|
|
52
|
+
if (Symbol.toPrimitive in val) {
|
|
53
|
+
return `${val}`;
|
|
54
|
+
}
|
|
55
|
+
if (typeof val.toJSON === 'function') {
|
|
56
|
+
return toString(val.toJSON());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// fall back to this
|
|
60
|
+
return JSON.stringify(val);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if a value is a JavaScript primitive value OR
|
|
64
|
+
* it is object with Symbol.toPrimitive
|
|
65
|
+
*/
|
|
66
|
+
export function isPrimitiveValue(value) {
|
|
67
|
+
const type = typeof value;
|
|
68
|
+
if (type === 'string')
|
|
69
|
+
return true;
|
|
70
|
+
if (type === 'boolean')
|
|
71
|
+
return true;
|
|
72
|
+
if (type === 'number')
|
|
73
|
+
return true;
|
|
74
|
+
if (type === 'bigint')
|
|
75
|
+
return true;
|
|
76
|
+
if (type === 'symbol')
|
|
77
|
+
return true;
|
|
78
|
+
if (type === 'object' && typeof value[Symbol.toPrimitive] === 'function')
|
|
79
|
+
return true;
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Convert a JavaScript primitive value to a string.
|
|
84
|
+
* (Does not covert object like entities unless Symbol.toPrimitive is specified)
|
|
85
|
+
*/
|
|
86
|
+
export function primitiveToString(value) {
|
|
87
|
+
if (value == null)
|
|
88
|
+
return '';
|
|
89
|
+
if (!isPrimitiveValue(value)) {
|
|
90
|
+
throw new Error(`Expected ${value} (${getTypeOf(value)}) to be in a string like format`);
|
|
91
|
+
}
|
|
92
|
+
return `${value}`;
|
|
93
|
+
}
|
|
94
|
+
/** safely trims whitespace from an input */
|
|
95
|
+
export function trim(input, char) {
|
|
96
|
+
return lTrim(primitiveToString(input), char);
|
|
97
|
+
}
|
|
98
|
+
export function trimFP(char) {
|
|
99
|
+
return function _trim(input) {
|
|
100
|
+
return trim(input, char);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function trimStart(input, char) {
|
|
104
|
+
return lTrimStart(primitiveToString(input), char);
|
|
105
|
+
}
|
|
106
|
+
export function trimStartFP(char) {
|
|
107
|
+
return function _trimStart(input) {
|
|
108
|
+
return trimStart(input, char);
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function trimEnd(input, char) {
|
|
112
|
+
return lTrimEnd(primitiveToString(input), char);
|
|
113
|
+
}
|
|
114
|
+
export function trimEndFP(char) {
|
|
115
|
+
return function _trimEnd(input) {
|
|
116
|
+
return trimEnd(input, char);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** safely trim and to lower a input, useful for string comparison */
|
|
120
|
+
export function trimAndToLower(input) {
|
|
121
|
+
return trim(input).toLowerCase();
|
|
122
|
+
}
|
|
123
|
+
/** safely trim and to lower a input, useful for string comparison */
|
|
124
|
+
export function trimAndToUpper(input) {
|
|
125
|
+
return trim(input).toUpperCase();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Converts a value to upper case
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
*
|
|
132
|
+
* toUpperCase('lowercase'); // 'LOWERCASE'
|
|
133
|
+
* toUpperCase('MixEd'); // 'MIXED'
|
|
134
|
+
* toUpperCase('UPPERCASE'); // 'UPPERCASE'
|
|
135
|
+
*/
|
|
136
|
+
export function toUpperCase(input) {
|
|
137
|
+
if (typeof input !== 'string')
|
|
138
|
+
return '';
|
|
139
|
+
return input.toUpperCase();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Converts a value to lower case
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
*
|
|
146
|
+
* toLowerCase('lowercase'); // 'lowercase'
|
|
147
|
+
* toLowerCase('MixEd'); // 'mixed'
|
|
148
|
+
* toLowerCase('UPPERCASE'); // 'uppercase'
|
|
149
|
+
*/
|
|
150
|
+
export function toLowerCase(input) {
|
|
151
|
+
if (typeof input !== 'string')
|
|
152
|
+
return '';
|
|
153
|
+
return input.toLowerCase();
|
|
154
|
+
}
|
|
155
|
+
/** Unescape characters in string and avoid double escaping */
|
|
156
|
+
export function unescapeString(str = '') {
|
|
157
|
+
const len = str.length;
|
|
158
|
+
let unescaped = '';
|
|
159
|
+
for (let i = 0; i < len; i++) {
|
|
160
|
+
const char = str.charAt(i);
|
|
161
|
+
const next = i < len ? str.charAt(i + 1) : '';
|
|
162
|
+
if (char === '\\' && next) {
|
|
163
|
+
unescaped += next;
|
|
164
|
+
i++;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
unescaped += char;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return unescaped;
|
|
171
|
+
}
|
|
172
|
+
/** A native implementation of lodash startsWith */
|
|
173
|
+
export function startsWith(str, val) {
|
|
174
|
+
if (!isString(str))
|
|
175
|
+
return false;
|
|
176
|
+
if (!isString(val))
|
|
177
|
+
return false;
|
|
178
|
+
return str.startsWith(val);
|
|
179
|
+
}
|
|
180
|
+
/** A function version of startsWith */
|
|
181
|
+
export function startsWithFP(val) {
|
|
182
|
+
if (!isString(val)) {
|
|
183
|
+
throw new Error(`Invalid argument "val", must be of type string, got ${getTypeOf(val)}`);
|
|
184
|
+
}
|
|
185
|
+
return function _startsWithFP(str) {
|
|
186
|
+
return startsWith(str, val);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/** A native implementation of lodash endsWith */
|
|
190
|
+
export function endsWith(str, val) {
|
|
191
|
+
if (!isString(str))
|
|
192
|
+
return false;
|
|
193
|
+
if (!isString(val))
|
|
194
|
+
return false;
|
|
195
|
+
return str.endsWith(val);
|
|
196
|
+
}
|
|
197
|
+
/** A function version of startsWith */
|
|
198
|
+
export function endsWithFP(val) {
|
|
199
|
+
if (!isString(val)) {
|
|
200
|
+
throw new Error(`Invalid argument "val", must be of type string, got ${getTypeOf(val)}`);
|
|
201
|
+
}
|
|
202
|
+
return function _startsWithFP(str) {
|
|
203
|
+
return endsWith(str, val);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Truncate a string value, by default it will add an ellipsis (...) if truncated.
|
|
208
|
+
*/
|
|
209
|
+
export function truncate(value, len, ellipsis = true) {
|
|
210
|
+
if (value == null || value === '')
|
|
211
|
+
return '';
|
|
212
|
+
if (!isString(value)) {
|
|
213
|
+
throw new SyntaxError(`Expected string value to truncate, got ${getTypeOf(value)}`);
|
|
214
|
+
}
|
|
215
|
+
if (!ellipsis)
|
|
216
|
+
return value.slice(0, len);
|
|
217
|
+
const sliceLen = len - 4 > 0 ? len - 4 : len;
|
|
218
|
+
return value.length >= len ? `${value.slice(0, sliceLen)} ...` : value;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* A functional version of truncate
|
|
222
|
+
*/
|
|
223
|
+
export function truncateFP(len, ellipsis = true) {
|
|
224
|
+
return function _truncateFP(value) {
|
|
225
|
+
return truncate(value, len, ellipsis);
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export const LOWER_CASE_CHARS = {
|
|
229
|
+
a: true,
|
|
230
|
+
b: true,
|
|
231
|
+
c: true,
|
|
232
|
+
d: true,
|
|
233
|
+
e: true,
|
|
234
|
+
f: true,
|
|
235
|
+
g: true,
|
|
236
|
+
h: true,
|
|
237
|
+
i: true,
|
|
238
|
+
j: true,
|
|
239
|
+
k: true,
|
|
240
|
+
l: true,
|
|
241
|
+
m: true,
|
|
242
|
+
n: true,
|
|
243
|
+
o: true,
|
|
244
|
+
p: true,
|
|
245
|
+
q: true,
|
|
246
|
+
r: true,
|
|
247
|
+
s: true,
|
|
248
|
+
t: true,
|
|
249
|
+
u: true,
|
|
250
|
+
v: true,
|
|
251
|
+
w: true,
|
|
252
|
+
x: true,
|
|
253
|
+
y: true,
|
|
254
|
+
z: true,
|
|
255
|
+
};
|
|
256
|
+
export const UPPER_CASE_CHARS = {
|
|
257
|
+
A: true,
|
|
258
|
+
B: true,
|
|
259
|
+
C: true,
|
|
260
|
+
D: true,
|
|
261
|
+
E: true,
|
|
262
|
+
F: true,
|
|
263
|
+
G: true,
|
|
264
|
+
H: true,
|
|
265
|
+
I: true,
|
|
266
|
+
J: true,
|
|
267
|
+
K: true,
|
|
268
|
+
L: true,
|
|
269
|
+
M: true,
|
|
270
|
+
N: true,
|
|
271
|
+
O: true,
|
|
272
|
+
P: true,
|
|
273
|
+
Q: true,
|
|
274
|
+
R: true,
|
|
275
|
+
S: true,
|
|
276
|
+
T: true,
|
|
277
|
+
U: true,
|
|
278
|
+
V: true,
|
|
279
|
+
W: true,
|
|
280
|
+
X: true,
|
|
281
|
+
Y: true,
|
|
282
|
+
Z: true,
|
|
283
|
+
};
|
|
284
|
+
export const NUM_CHARS = {
|
|
285
|
+
0: true,
|
|
286
|
+
1: true,
|
|
287
|
+
2: true,
|
|
288
|
+
3: true,
|
|
289
|
+
4: true,
|
|
290
|
+
5: true,
|
|
291
|
+
6: true,
|
|
292
|
+
7: true,
|
|
293
|
+
8: true,
|
|
294
|
+
9: true,
|
|
295
|
+
};
|
|
296
|
+
export const WORD_SEPARATOR_CHARS = {
|
|
297
|
+
' ': true,
|
|
298
|
+
_: true,
|
|
299
|
+
'-': true,
|
|
300
|
+
};
|
|
301
|
+
export const WORD_CHARS = {
|
|
302
|
+
...LOWER_CASE_CHARS,
|
|
303
|
+
...UPPER_CASE_CHARS,
|
|
304
|
+
...NUM_CHARS,
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* Split a string and get the word parts
|
|
308
|
+
*/
|
|
309
|
+
export function getWordParts(input) {
|
|
310
|
+
if (!isString(input)) {
|
|
311
|
+
throw new Error(`Expected string, got ${getTypeOf(input)}`);
|
|
312
|
+
}
|
|
313
|
+
const parts = [];
|
|
314
|
+
let word = '';
|
|
315
|
+
let started = false;
|
|
316
|
+
for (let i = 0; i < input.length; i++) {
|
|
317
|
+
const char = input.charAt(i);
|
|
318
|
+
const nextChar = input.charAt(i + 1);
|
|
319
|
+
if (!started && char === '_') {
|
|
320
|
+
if (nextChar === '_' || nextChar in WORD_CHARS) {
|
|
321
|
+
word += char;
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
started = true;
|
|
326
|
+
if (char && char in WORD_CHARS) {
|
|
327
|
+
word += char;
|
|
328
|
+
}
|
|
329
|
+
if (nextChar in WORD_SEPARATOR_CHARS) {
|
|
330
|
+
parts.push(word);
|
|
331
|
+
word = '';
|
|
332
|
+
}
|
|
333
|
+
if (nextChar in UPPER_CASE_CHARS) {
|
|
334
|
+
const nextNextChar = input.charAt(i + 2);
|
|
335
|
+
if (nextNextChar in LOWER_CASE_CHARS) {
|
|
336
|
+
parts.push(word);
|
|
337
|
+
word = '';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return parts.concat(word).filter(Boolean);
|
|
342
|
+
}
|
|
343
|
+
export function toCamelCase(input) {
|
|
344
|
+
return lCamelCase(input);
|
|
345
|
+
}
|
|
346
|
+
export function toPascalCase(input) {
|
|
347
|
+
return firstToUpper(lCamelCase(input));
|
|
348
|
+
}
|
|
349
|
+
export function toKebabCase(input) {
|
|
350
|
+
return lKebabCase(input);
|
|
351
|
+
}
|
|
352
|
+
export function toSnakeCase(input) {
|
|
353
|
+
return lSnakeCase(input);
|
|
354
|
+
}
|
|
355
|
+
export function toTitleCase(input) {
|
|
356
|
+
return lStartCase(input);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Make a string url/elasticsearch safe.
|
|
360
|
+
* safeString converts the string to lower case,
|
|
361
|
+
* removes any invalid characters,
|
|
362
|
+
* and replaces whitespace with _ (if it exists in the string) or -
|
|
363
|
+
* Warning this may reduce the str length
|
|
364
|
+
*/
|
|
365
|
+
export function toSafeString(input) {
|
|
366
|
+
let s = trimAndToLower(input);
|
|
367
|
+
const startReg = /^[_\-+]+/;
|
|
368
|
+
while (startReg.test(s)) {
|
|
369
|
+
s = s.replace(startReg, '');
|
|
370
|
+
}
|
|
371
|
+
const whitespaceChar = s.includes('_') ? '_' : '-';
|
|
372
|
+
s = s.replace(/\s/g, whitespaceChar);
|
|
373
|
+
const reg = /[.+#*?"<>|/\\\\]/g;
|
|
374
|
+
s = s.replace(reg, '');
|
|
375
|
+
return s;
|
|
376
|
+
}
|
|
377
|
+
function _replaceFirstWordChar(str, fn) {
|
|
378
|
+
let found = false;
|
|
379
|
+
return str.split('').map((s) => {
|
|
380
|
+
if (!found && s in WORD_CHARS) {
|
|
381
|
+
found = true;
|
|
382
|
+
return fn(s);
|
|
383
|
+
}
|
|
384
|
+
return s;
|
|
385
|
+
})
|
|
386
|
+
.join('');
|
|
387
|
+
}
|
|
388
|
+
/** Change first character in string to upper case */
|
|
389
|
+
export function firstToUpper(str) {
|
|
390
|
+
if (!str)
|
|
391
|
+
return '';
|
|
392
|
+
return _replaceFirstWordChar(str, (char) => char.toUpperCase());
|
|
393
|
+
}
|
|
394
|
+
/** Change first character in string to lower case */
|
|
395
|
+
export function firstToLower(str) {
|
|
396
|
+
if (!str)
|
|
397
|
+
return '';
|
|
398
|
+
return _replaceFirstWordChar(str, (char) => char.toLowerCase());
|
|
399
|
+
}
|
|
400
|
+
export function getFirstChar(input) {
|
|
401
|
+
if (!input)
|
|
402
|
+
return '';
|
|
403
|
+
return trim(input).charAt(0);
|
|
404
|
+
}
|
|
405
|
+
// http://www.regular-expressions.info/email.html
|
|
406
|
+
// not an exhaustive email regex, which is impossible, but will catch obvious errors
|
|
407
|
+
// is more lenient in most cases
|
|
408
|
+
const EmailRegex = /^[A-Z0-9._%+-@]{1,64}@(?:[A-Z0-9-]{1,63}\.){1,8}[A-Z]{2,63}$/i;
|
|
409
|
+
export function isEmail(input) {
|
|
410
|
+
return isString(input) && EmailRegex.test(input);
|
|
411
|
+
}
|
|
412
|
+
const macAddressDelimiters = {
|
|
413
|
+
colon: /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,
|
|
414
|
+
space: /^([0-9a-fA-F][0-9a-fA-F]\s){5}([0-9a-fA-F][0-9a-fA-F])$/,
|
|
415
|
+
dash: /^([0-9a-fA-F][0-9a-fA-F]-){5}([0-9a-fA-F][0-9a-fA-F])$/,
|
|
416
|
+
dot: /^([0-9a-fA-F]{4}\.){2}([0-9a-fA-F]{4})$/,
|
|
417
|
+
none: /^([0-9a-fA-F]){12}$/
|
|
418
|
+
};
|
|
419
|
+
export function isMACAddress(input, delimiter) {
|
|
420
|
+
if (!isString(input))
|
|
421
|
+
return false;
|
|
422
|
+
if (!delimiter || delimiter === 'any') {
|
|
423
|
+
return Object.values(macAddressDelimiters).some((d) => d.test(input));
|
|
424
|
+
}
|
|
425
|
+
return macAddressDelimiters[delimiter].test(input);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* A functional version of isMacAddress
|
|
429
|
+
*/
|
|
430
|
+
export function isMACAddressFP(args) {
|
|
431
|
+
return function _isMacAddressFP(input) {
|
|
432
|
+
return isMACAddress(input, args);
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
export function isURL(input) {
|
|
436
|
+
return isString(input) && validator.isURL(input);
|
|
437
|
+
}
|
|
438
|
+
export function isUUID(input) {
|
|
439
|
+
return isString(input) && validator.isUUID(input);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Check whether a string includes another string
|
|
443
|
+
*/
|
|
444
|
+
export function contains(input, substring) {
|
|
445
|
+
return isString(input) && input.includes(substring);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* A function version of contains
|
|
449
|
+
*/
|
|
450
|
+
export function containsFP(substring) {
|
|
451
|
+
return function _contains(input) {
|
|
452
|
+
return isString(input) && input.includes(substring);
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
export function isBase64(input) {
|
|
456
|
+
if (!isString(input))
|
|
457
|
+
return false;
|
|
458
|
+
const validatorValid = validator.isBase64(input);
|
|
459
|
+
if (validatorValid) {
|
|
460
|
+
const decode = Buffer.from(input, 'base64').toString('utf8');
|
|
461
|
+
const encode = Buffer.from(decode, 'utf8').toString('base64');
|
|
462
|
+
return input === encode;
|
|
463
|
+
}
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
export function isFQDN(input) {
|
|
467
|
+
return isString(input) && validator.isFQDN(input);
|
|
468
|
+
}
|
|
469
|
+
export function isCountryCode(input) {
|
|
470
|
+
return isString(input) && validator.isISO31661Alpha2(input);
|
|
471
|
+
}
|
|
472
|
+
export function isPostalCode(input, locale = 'any') {
|
|
473
|
+
return validator.isPostalCode(toString(input), locale);
|
|
474
|
+
}
|
|
475
|
+
export function isPort(input) {
|
|
476
|
+
return validator.isPort(toString(input));
|
|
477
|
+
}
|
|
478
|
+
export function isAlpha(input, locale) {
|
|
479
|
+
return isString(input) && validator.isAlpha(input, locale);
|
|
480
|
+
}
|
|
481
|
+
export function isAlphaNumeric(input, locale) {
|
|
482
|
+
return isString(input) && validator.isAlphanumeric(input, locale);
|
|
483
|
+
}
|
|
484
|
+
export function isMIMEType(input) {
|
|
485
|
+
return validator.isMimeType(toString(input));
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Maps an array of strings and and trims the result, or
|
|
489
|
+
* parses a comma separated list and trims the result
|
|
490
|
+
*/
|
|
491
|
+
export function parseList(input) {
|
|
492
|
+
let strings = [];
|
|
493
|
+
if (isString(input)) {
|
|
494
|
+
strings = input.split(',');
|
|
495
|
+
}
|
|
496
|
+
else if (isArrayLike(input)) {
|
|
497
|
+
strings = input.map((val) => {
|
|
498
|
+
if (!val)
|
|
499
|
+
return '';
|
|
500
|
+
return toString(val);
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
return [];
|
|
505
|
+
}
|
|
506
|
+
return strings.map((s) => s.trim()).filter((s) => !!s);
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Create a sentence from a list (all items will be unique, empty values will be skipped)
|
|
510
|
+
*/
|
|
511
|
+
export function joinList(input, sep = ',', join = 'and') {
|
|
512
|
+
if (!Array.isArray(input)) {
|
|
513
|
+
throw new Error('joinList requires input to be a array');
|
|
514
|
+
}
|
|
515
|
+
const list = [
|
|
516
|
+
...new Set(input
|
|
517
|
+
.filter((str) => str != null && str !== '')
|
|
518
|
+
.map((str) => toString(str).trim()))
|
|
519
|
+
];
|
|
520
|
+
if (list.length === 0) {
|
|
521
|
+
throw new Error('joinList requires at least one string');
|
|
522
|
+
}
|
|
523
|
+
if (list.length === 1)
|
|
524
|
+
return `${list[0]}`;
|
|
525
|
+
return list.reduce((acc, curr, index, arr) => {
|
|
526
|
+
if (!acc)
|
|
527
|
+
return curr;
|
|
528
|
+
const isLast = (index + 1) === arr.length;
|
|
529
|
+
if (isLast) {
|
|
530
|
+
return `${acc} ${join} ${curr}`;
|
|
531
|
+
}
|
|
532
|
+
return `${acc}${sep} ${curr}`;
|
|
533
|
+
}, '');
|
|
534
|
+
}
|
|
535
|
+
// inspired from https://gist.github.com/jabney/5018b4adc9b2bf488696
|
|
536
|
+
/** Performs a Shannon entropy calculation on string inputs */
|
|
537
|
+
export function shannonEntropy(input) {
|
|
538
|
+
if (!isString(input)) {
|
|
539
|
+
throw new Error(`Invalid input ${input}, must be of type String`);
|
|
540
|
+
}
|
|
541
|
+
let sum = 0;
|
|
542
|
+
const len = input.length;
|
|
543
|
+
const dict = Object.create(null);
|
|
544
|
+
// get number of chars per string
|
|
545
|
+
for (const char of input) {
|
|
546
|
+
if (dict[char] != null) {
|
|
547
|
+
dict[char]++;
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
dict[char] = 1;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
for (const num of Object.values(dict)) {
|
|
554
|
+
const p = num / len;
|
|
555
|
+
const pLogCalc = p * Math.log(p);
|
|
556
|
+
sum -= pLogCalc / Math.log(2);
|
|
557
|
+
}
|
|
558
|
+
return sum;
|
|
559
|
+
}
|
|
560
|
+
export var StringEntropy;
|
|
561
|
+
(function (StringEntropy) {
|
|
562
|
+
StringEntropy["shannon"] = "shannon";
|
|
563
|
+
})(StringEntropy || (StringEntropy = {}));
|
|
564
|
+
const StringEntropyDict = {
|
|
565
|
+
[StringEntropy.shannon]: shannonEntropy
|
|
566
|
+
};
|
|
567
|
+
/** returns a function to perform entropy calculations, currently only supports
|
|
568
|
+
* the "shannon" algorithm
|
|
569
|
+
* */
|
|
570
|
+
export function stringEntropy(algo = StringEntropy.shannon) {
|
|
571
|
+
const fn = StringEntropyDict[algo];
|
|
572
|
+
if (fn == null) {
|
|
573
|
+
const keys = Object.keys(StringEntropyDict);
|
|
574
|
+
throw new Error(`Unsupported algorithm ${algo}, please use the available algorithms ${joinList(keys, ', ')}`);
|
|
575
|
+
}
|
|
576
|
+
return fn;
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/strings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,YAYvC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { isArray } from './arrays.js';
|
|
2
|
+
import { isFloat, toNumberOrThrow } from './numbers.js';
|
|
3
|
+
export function getVector(input) {
|
|
4
|
+
if (!isArray(input))
|
|
5
|
+
throw new Error('Vector must be an array');
|
|
6
|
+
// its a string input, map and validate
|
|
7
|
+
if (input.length === 1 && typeof input[0] === 'string') {
|
|
8
|
+
return input[0].split(',').map(toNumberOrThrow);
|
|
9
|
+
// this is where variables are put
|
|
10
|
+
}
|
|
11
|
+
else if (!input.every(isFloat)) {
|
|
12
|
+
throw new Error('Vector must be an array of floats');
|
|
13
|
+
}
|
|
14
|
+
return input;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEhE,uCAAuC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAChD,kCAAkC;IACtC,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
|