@blazedpath/commons 0.0.11 → 0.1.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/blz-base/index.js +893 -895
- package/blz-cache/index.js +25 -14
- package/blz-core/index.js +347 -349
- package/blz-cryptography/index.js +47 -49
- package/blz-datetimes/index.js +348 -350
- package/blz-file/index.js +83 -88
- package/blz-hazelcast/index.js +100 -103
- package/blz-iterable/index.js +404 -406
- package/blz-json-schema/index.js +6 -8
- package/blz-jwt/index.js +89 -92
- package/blz-kafka/index.js +106 -108
- package/blz-math/index.js +127 -129
- package/blz-mongodb/index.js +33 -35
- package/blz-rds/index.js +44 -46
- package/blz-rds-mysql/index.js +9 -11
- package/blz-rds-mysqlx/index.js +10 -12
- package/blz-rds-oracle/index.js +99 -104
- package/blz-rds-postgres/index.js +11 -13
- package/blz-redis/index.js +123 -125
- package/blz-regex/index.js +22 -24
- package/blz-strings/index.js +165 -167
- package/blz-uuid/index.js +2 -4
- package/blz-yaml/index.js +16 -19
- package/package.json +1 -1
package/blz-core/index.js
CHANGED
|
@@ -1,366 +1,364 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
errorUndefinedArgument: function (argName) {
|
|
3
|
+
let err = new Error();
|
|
4
|
+
err.code = 'UndefinedArgument';
|
|
5
|
+
err.data = { argName: argName };
|
|
6
|
+
return err;
|
|
7
|
+
},
|
|
8
|
+
errorInvalidConversion: function (value, targetType) {
|
|
9
|
+
let err = new Error();
|
|
10
|
+
err.code = 'InvalidConversion';
|
|
11
|
+
err.data = { value: value, targetType: targetType };
|
|
12
|
+
return err;
|
|
13
|
+
},
|
|
14
|
+
compare: function (value1, value2) { // TODO: Sort require for objects
|
|
15
|
+
if (value1 === null && value2 === null)
|
|
16
|
+
return 0;
|
|
17
|
+
if (value1 === null && value2 !== null)
|
|
18
|
+
return -1;
|
|
19
|
+
if (value1 !== null && value2 === null)
|
|
20
|
+
return 1;
|
|
21
|
+
let value1Type = toString.call(value1);
|
|
22
|
+
let value2Type = toString.call(value2);
|
|
23
|
+
let value1ToCompare = null;
|
|
24
|
+
let value2ToCompare = null;
|
|
25
|
+
if ((value1Type === '[object String]' && value2Type === '[object String]') ||
|
|
26
|
+
(value1Type === '[object Number]' && value2Type === '[object Number]')) {
|
|
27
|
+
value1ToCompare = value1;
|
|
28
|
+
value2ToCompare = value2;
|
|
29
|
+
}
|
|
30
|
+
else if (value1Type === '[object Boolean]' && value2Type === '[object Boolean]') {
|
|
31
|
+
value1ToCompare = value1 ? 1 : 0;
|
|
32
|
+
value2ToCompare = value2 ? 1 : 0;
|
|
33
|
+
}
|
|
34
|
+
else if (value1Type === '[object Date]' && value2Type === '[object Date]') {
|
|
35
|
+
value1ToCompare = value1.getTime();
|
|
36
|
+
value2ToCompare = value2.getTime();
|
|
37
|
+
}
|
|
38
|
+
else if (value1Type === '[object Object]' && value2Type === '[object Object]') {
|
|
39
|
+
value1ToCompare = JSON.stringify(value1);
|
|
40
|
+
value2ToCompare = JSON.stringify(value2);
|
|
41
|
+
}
|
|
42
|
+
else if (value1Type === '[object Array]' && value2Type === '[object Array]') {
|
|
43
|
+
let result = this.compare(value1.length, value2.length);
|
|
44
|
+
if (result !== 0)
|
|
45
|
+
return result;
|
|
46
|
+
for (let i = 0; i < value1.length; i++) {
|
|
47
|
+
let item1 = value1[i];
|
|
48
|
+
let item2 = value2[i];
|
|
49
|
+
result = this.compare(item1, item2);
|
|
45
50
|
if (result !== 0)
|
|
46
51
|
return result;
|
|
47
|
-
for (let i = 0; i < value1.length; i++) {
|
|
48
|
-
let item1 = value1[i];
|
|
49
|
-
let item2 = value2[i];
|
|
50
|
-
result = this.compare(item1, item2);
|
|
51
|
-
if (result !== 0)
|
|
52
|
-
return result;
|
|
53
|
-
}
|
|
54
|
-
return 0;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
if (value1Type === '[object String]')
|
|
58
|
-
value1ToCompare = value1;
|
|
59
|
-
else if (value1Type === '[object Number]')
|
|
60
|
-
value1ToCompare = value1.toString();
|
|
61
|
-
else if (value1Type === '[object Boolean]')
|
|
62
|
-
value1ToCompare = value1 ? '1' : '0';
|
|
63
|
-
else if (value1Type === '[object Date]')
|
|
64
|
-
value1ToCompare = value1.toJSON();
|
|
65
|
-
else
|
|
66
|
-
value1ToCompare = value1.toString();
|
|
67
|
-
if (value2Type === '[object String]')
|
|
68
|
-
value2ToCompare = value2;
|
|
69
|
-
else if (value2Type === '[object Number]')
|
|
70
|
-
value2ToCompare = value2.toString();
|
|
71
|
-
else if (value2Type === '[object Boolean]')
|
|
72
|
-
value2ToCompare = value2 ? '1' : '0';
|
|
73
|
-
else if (value2Type === '[object Date]')
|
|
74
|
-
value2ToCompare = value2.toJSON();
|
|
75
|
-
else
|
|
76
|
-
value2ToCompare = value2.toString();
|
|
77
52
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if (value1Type === '[object String]')
|
|
57
|
+
value1ToCompare = value1;
|
|
58
|
+
else if (value1Type === '[object Number]')
|
|
59
|
+
value1ToCompare = value1.toString();
|
|
60
|
+
else if (value1Type === '[object Boolean]')
|
|
61
|
+
value1ToCompare = value1 ? '1' : '0';
|
|
62
|
+
else if (value1Type === '[object Date]')
|
|
63
|
+
value1ToCompare = value1.toJSON();
|
|
84
64
|
else
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
65
|
+
value1ToCompare = value1.toString();
|
|
66
|
+
if (value2Type === '[object String]')
|
|
67
|
+
value2ToCompare = value2;
|
|
68
|
+
else if (value2Type === '[object Number]')
|
|
69
|
+
value2ToCompare = value2.toString();
|
|
70
|
+
else if (value2Type === '[object Boolean]')
|
|
71
|
+
value2ToCompare = value2 ? '1' : '0';
|
|
72
|
+
else if (value2Type === '[object Date]')
|
|
73
|
+
value2ToCompare = value2.toJSON();
|
|
95
74
|
else
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return null;
|
|
125
|
-
return Buffer.from(value).toString('base64');
|
|
126
|
-
},
|
|
127
|
-
convertToBinary: function (value) {
|
|
128
|
-
if (value == null)
|
|
129
|
-
return null;
|
|
130
|
-
if (value && value.type === 'Buffer')
|
|
131
|
-
return Buffer.from(value);
|
|
132
|
-
if (Buffer.isBuffer(value))
|
|
133
|
-
return value;
|
|
134
|
-
if (Array.isArray(value) || typeof value === 'string')
|
|
135
|
-
return Buffer.from(value);
|
|
136
|
-
throw this.errorInvalidConversion(value, 'binary');
|
|
137
|
-
},
|
|
138
|
-
convertToBoolean: function (value) {
|
|
139
|
-
if (value === null)
|
|
140
|
-
return null;
|
|
141
|
-
let valueType = toString.call(value);
|
|
142
|
-
if (valueType === '[object String]') {
|
|
143
|
-
if (value === '1' || value.toUpperCase() === 'T' || value.toUpperCase() === 'TRUE' || value.toUpperCase() === 'Y' || value.toUpperCase() === 'YES')
|
|
144
|
-
return true;
|
|
145
|
-
if (value === '0' || value.toUpperCase() === 'F' || value.toUpperCase() === 'FALSE' || value.toUpperCase() === 'N' || value.toUpperCase() === 'NO')
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
if (valueType === '[object Number]') {
|
|
149
|
-
if (value === 1)
|
|
150
|
-
return true;
|
|
151
|
-
if (value === 0)
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
if (valueType === '[object Boolean]')
|
|
155
|
-
return value;
|
|
156
|
-
throw this.errorInvalidConversion(value, 'boolean');
|
|
157
|
-
},
|
|
158
|
-
convertToDate: function (value) {
|
|
159
|
-
if (value === null)
|
|
160
|
-
return null;
|
|
161
|
-
let valueType = toString.call(value);
|
|
162
|
-
if (valueType === '[object String]') {
|
|
163
|
-
let matchDate = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(value);
|
|
164
|
-
if (matchDate)
|
|
165
|
-
return new Date(Date.UTC(Number(matchDate[1]), Number(matchDate[2]) - 1, Number(matchDate[3]), 0, 0, 0, 0));
|
|
166
|
-
let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
167
|
-
if (matchDatetimeUtc)
|
|
168
|
-
return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), 0, 0, 0, 0));
|
|
169
|
-
let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
|
|
170
|
-
if (matchDatetimeZone) // timezone
|
|
171
|
-
return new Date(Date.UTC(Number(matchDatetimeZone[1]), Number(matchDatetimeZone[2]) - 1, Number(matchDatetimeZone[3]), 0, 0, 0, 0));
|
|
172
|
-
}
|
|
173
|
-
if (valueType === '[object Date]') {
|
|
174
|
-
return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), 0, 0, 0, 0));
|
|
75
|
+
value2ToCompare = value2.toString();
|
|
76
|
+
}
|
|
77
|
+
if (value1ToCompare === value2ToCompare)
|
|
78
|
+
return 0;
|
|
79
|
+
else if (value1ToCompare < value2ToCompare)
|
|
80
|
+
return -1;
|
|
81
|
+
else if (value1ToCompare > value2ToCompare)
|
|
82
|
+
return 1;
|
|
83
|
+
else
|
|
84
|
+
return null;
|
|
85
|
+
},
|
|
86
|
+
convertMilliseconds: function (strMilliseconds) {
|
|
87
|
+
if (strMilliseconds) {
|
|
88
|
+
if (strMilliseconds.length < 3)
|
|
89
|
+
strMilliseconds = strMilliseconds.padEnd(3, '0');
|
|
90
|
+
if (strMilliseconds.length > 3)
|
|
91
|
+
strMilliseconds = strMilliseconds.substr(0, 3);
|
|
92
|
+
return Number(strMilliseconds);
|
|
93
|
+
}
|
|
94
|
+
else
|
|
95
|
+
return 0;
|
|
96
|
+
},
|
|
97
|
+
apply: function (obj1, obj2) {
|
|
98
|
+
let result = null;
|
|
99
|
+
if (obj1) {
|
|
100
|
+
result = {};
|
|
101
|
+
for (let key in obj1) {
|
|
102
|
+
result[key] = obj1[key];
|
|
175
103
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (value === null)
|
|
180
|
-
return null;
|
|
181
|
-
let valueType = toString.call(value);
|
|
182
|
-
if (valueType === '[object String]') {
|
|
183
|
-
let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
184
|
-
if (matchDatetimeUtc && matchDatetimeUtc[7] !== undefined) {
|
|
185
|
-
return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), Number(matchDatetimeUtc[4]), Number(matchDatetimeUtc[5]), Number(matchDatetimeUtc[6] || 0), this.convertMilliseconds(matchDatetimeUtc[7])));
|
|
186
|
-
}
|
|
187
|
-
let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
|
|
188
|
-
if (matchDatetimeZone) { // timezone
|
|
189
|
-
let year = Number(matchDatetimeZone[1]);
|
|
190
|
-
let month = Number(matchDatetimeZone[2]) - 1; // Month is zero-based in JavaScript Date
|
|
191
|
-
let day = Number(matchDatetimeZone[3]);
|
|
192
|
-
let hour = Number(matchDatetimeZone[4]);
|
|
193
|
-
let minute = Number(matchDatetimeZone[5]);
|
|
194
|
-
let second = Number(matchDatetimeZone[6] || 0);
|
|
195
|
-
let millisecond = this.convertMilliseconds(matchDatetimeZone[7]);
|
|
196
|
-
let timezoneOffset = matchDatetimeZone[8];
|
|
197
|
-
if (timezoneOffset) {
|
|
198
|
-
let offsetSign = timezoneOffset[0] === "+" ? 1 : -1;
|
|
199
|
-
let [offsetHour, offsetMinute] = timezoneOffset.slice(1).split(":").map(Number);
|
|
200
|
-
hour -= offsetSign * offsetHour;
|
|
201
|
-
minute -= offsetSign * offsetMinute;
|
|
202
|
-
}
|
|
203
|
-
return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
const probableDate = new Date(value)
|
|
207
|
-
if (probableDate.toString() !== 'Invalid Date') {
|
|
208
|
-
return probableDate
|
|
209
|
-
}
|
|
104
|
+
if (obj2) {
|
|
105
|
+
for (let key in obj2) {
|
|
106
|
+
result[key] = obj2[key];
|
|
210
107
|
}
|
|
211
108
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (
|
|
246
|
-
return
|
|
247
|
-
if (
|
|
248
|
-
return
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if (
|
|
252
|
-
return
|
|
253
|
-
if (
|
|
254
|
-
return
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
},
|
|
112
|
+
base64Decode: function (value) {
|
|
113
|
+
if (value === undefined)
|
|
114
|
+
throw this.errorUndefinedArgument('value');
|
|
115
|
+
if (value === null)
|
|
116
|
+
return null;
|
|
117
|
+
return Buffer.from(value, 'base64');
|
|
118
|
+
},
|
|
119
|
+
base64Encode: function (value) {
|
|
120
|
+
if (value === undefined)
|
|
121
|
+
throw this.errorUndefinedArgument('value');
|
|
122
|
+
if (value === null)
|
|
123
|
+
return null;
|
|
124
|
+
return Buffer.from(value).toString('base64');
|
|
125
|
+
},
|
|
126
|
+
convertToBinary: function (value) {
|
|
127
|
+
if (value == null)
|
|
128
|
+
return null;
|
|
129
|
+
if (value && value.type === 'Buffer')
|
|
130
|
+
return Buffer.from(value);
|
|
131
|
+
if (Buffer.isBuffer(value))
|
|
132
|
+
return value;
|
|
133
|
+
if (Array.isArray(value) || typeof value === 'string')
|
|
134
|
+
return Buffer.from(value);
|
|
135
|
+
throw this.errorInvalidConversion(value, 'binary');
|
|
136
|
+
},
|
|
137
|
+
convertToBoolean: function (value) {
|
|
138
|
+
if (value === null)
|
|
139
|
+
return null;
|
|
140
|
+
let valueType = toString.call(value);
|
|
141
|
+
if (valueType === '[object String]') {
|
|
142
|
+
if (value === '1' || value.toUpperCase() === 'T' || value.toUpperCase() === 'TRUE' || value.toUpperCase() === 'Y' || value.toUpperCase() === 'YES')
|
|
143
|
+
return true;
|
|
144
|
+
if (value === '0' || value.toUpperCase() === 'F' || value.toUpperCase() === 'FALSE' || value.toUpperCase() === 'N' || value.toUpperCase() === 'NO')
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if (valueType === '[object Number]') {
|
|
148
|
+
if (value === 1)
|
|
149
|
+
return true;
|
|
150
|
+
if (value === 0)
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
if (valueType === '[object Boolean]')
|
|
154
|
+
return value;
|
|
155
|
+
throw this.errorInvalidConversion(value, 'boolean');
|
|
156
|
+
},
|
|
157
|
+
convertToDate: function (value) {
|
|
158
|
+
if (value === null)
|
|
159
|
+
return null;
|
|
160
|
+
let valueType = toString.call(value);
|
|
161
|
+
if (valueType === '[object String]') {
|
|
162
|
+
let matchDate = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(value);
|
|
163
|
+
if (matchDate)
|
|
164
|
+
return new Date(Date.UTC(Number(matchDate[1]), Number(matchDate[2]) - 1, Number(matchDate[3]), 0, 0, 0, 0));
|
|
165
|
+
let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
166
|
+
if (matchDatetimeUtc)
|
|
167
|
+
return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), 0, 0, 0, 0));
|
|
168
|
+
let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
|
|
169
|
+
if (matchDatetimeZone) // timezone
|
|
170
|
+
return new Date(Date.UTC(Number(matchDatetimeZone[1]), Number(matchDatetimeZone[2]) - 1, Number(matchDatetimeZone[3]), 0, 0, 0, 0));
|
|
171
|
+
}
|
|
172
|
+
if (valueType === '[object Date]') {
|
|
173
|
+
return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), 0, 0, 0, 0));
|
|
174
|
+
}
|
|
175
|
+
throw this.errorInvalidConversion(value, 'date');
|
|
176
|
+
},
|
|
177
|
+
convertToDatetime: function (value) {
|
|
178
|
+
if (value === null)
|
|
179
|
+
return null;
|
|
180
|
+
let valueType = toString.call(value);
|
|
181
|
+
if (valueType === '[object String]') {
|
|
182
|
+
let matchDatetimeUtc = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
183
|
+
if (matchDatetimeUtc && matchDatetimeUtc[7] !== undefined) {
|
|
184
|
+
return new Date(Date.UTC(Number(matchDatetimeUtc[1]), Number(matchDatetimeUtc[2]) - 1, Number(matchDatetimeUtc[3]), Number(matchDatetimeUtc[4]), Number(matchDatetimeUtc[5]), Number(matchDatetimeUtc[6] || 0), this.convertMilliseconds(matchDatetimeUtc[7])));
|
|
287
185
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
return condition ? valueIfConditionIsTrue : valueIfConditionIsFalse
|
|
304
|
-
},
|
|
305
|
-
isNotNull: function (value) {
|
|
306
|
-
return value !== null && value !== undefined;
|
|
307
|
-
},
|
|
308
|
-
isNull: function (value) {
|
|
309
|
-
return value === null || value === undefined;
|
|
310
|
-
},
|
|
311
|
-
isNullOrValue: function (value, valueToCompare) {
|
|
312
|
-
return value === null || value === undefined || this.compare(value, valueToCompare) === 0;
|
|
313
|
-
},
|
|
314
|
-
jsonParse: function (value) {
|
|
315
|
-
if (value === undefined)
|
|
316
|
-
throw this.errorUndefinedArgument('value');
|
|
317
|
-
if (value === null)
|
|
318
|
-
return null;
|
|
319
|
-
let obj = JSON.parse(value);
|
|
320
|
-
return obj;
|
|
321
|
-
},
|
|
322
|
-
jsonStringify: function (value, spaces) {
|
|
323
|
-
if (value === undefined)
|
|
324
|
-
throw this.errorUndefinedArgument('value');
|
|
325
|
-
if (value === null)
|
|
326
|
-
return null;
|
|
327
|
-
if (spaces === undefined || spaces === null)
|
|
328
|
-
return JSON.stringify(value);
|
|
329
|
-
else
|
|
330
|
-
return JSON.stringify(value, null, spaces);
|
|
331
|
-
},
|
|
332
|
-
keys: function (obj) {
|
|
333
|
-
if (obj === undefined) throw this.errorUndefinedArgument('obj');
|
|
334
|
-
if (obj === null) return null
|
|
335
|
-
return Object.keys(obj)
|
|
336
|
-
},
|
|
337
|
-
map: function (source, fnSelection) {
|
|
338
|
-
if (Array.isArray(source)) { // list
|
|
339
|
-
const resultArray = new Array(source.length);
|
|
340
|
-
for (let i = 0; i < source.length; ++i) {
|
|
341
|
-
const item = source[i]
|
|
342
|
-
resultArray[i] = fnSelection(item)
|
|
186
|
+
let matchDatetimeZone = /^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{1,2}):(\d{1,2})(?:\.(\d+))?([+-]\d{2}:\d{2})?$/.exec(value);
|
|
187
|
+
if (matchDatetimeZone) { // timezone
|
|
188
|
+
let year = Number(matchDatetimeZone[1]);
|
|
189
|
+
let month = Number(matchDatetimeZone[2]) - 1; // Month is zero-based in JavaScript Date
|
|
190
|
+
let day = Number(matchDatetimeZone[3]);
|
|
191
|
+
let hour = Number(matchDatetimeZone[4]);
|
|
192
|
+
let minute = Number(matchDatetimeZone[5]);
|
|
193
|
+
let second = Number(matchDatetimeZone[6] || 0);
|
|
194
|
+
let millisecond = this.convertMilliseconds(matchDatetimeZone[7]);
|
|
195
|
+
let timezoneOffset = matchDatetimeZone[8];
|
|
196
|
+
if (timezoneOffset) {
|
|
197
|
+
let offsetSign = timezoneOffset[0] === "+" ? 1 : -1;
|
|
198
|
+
let [offsetHour, offsetMinute] = timezoneOffset.slice(1).split(":").map(Number);
|
|
199
|
+
hour -= offsetSign * offsetHour;
|
|
200
|
+
minute -= offsetSign * offsetMinute;
|
|
343
201
|
}
|
|
344
|
-
return
|
|
202
|
+
return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
|
|
345
203
|
}
|
|
346
|
-
else
|
|
347
|
-
|
|
204
|
+
else {
|
|
205
|
+
const probableDate = new Date(value)
|
|
206
|
+
if (probableDate.toString() !== 'Invalid Date') {
|
|
207
|
+
return probableDate
|
|
208
|
+
}
|
|
348
209
|
}
|
|
210
|
+
}
|
|
211
|
+
if (valueType === '[object Date]') {
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
throw this.errorInvalidConversion(value, 'datetime');
|
|
215
|
+
},
|
|
216
|
+
convertToDecimal: function (value) {
|
|
217
|
+
if (value === null)
|
|
349
218
|
return null;
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return value
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
219
|
+
let valueType = toString.call(value);
|
|
220
|
+
if (valueType === '[object String]' && value !== '' && !isNaN(value))
|
|
221
|
+
return Number(value);
|
|
222
|
+
if (valueType === '[object Number]')
|
|
223
|
+
return value;
|
|
224
|
+
if (valueType === '[object Boolean]')
|
|
225
|
+
return value ? 1 : 0;
|
|
226
|
+
throw this.errorInvalidConversion(value, 'decimal');
|
|
227
|
+
},
|
|
228
|
+
convertToInteger: function (value) {
|
|
229
|
+
if (value === null)
|
|
230
|
+
return null;
|
|
231
|
+
let valueType = toString.call(value);
|
|
232
|
+
if (valueType === '[object String]' && value !== '' && !isNaN(value))
|
|
233
|
+
return Math.round(Number(value));
|
|
234
|
+
if (valueType === '[object Number]')
|
|
235
|
+
return Math.round(value);
|
|
236
|
+
if (valueType === '[object Boolean]')
|
|
237
|
+
return value ? 1 : 0;
|
|
238
|
+
throw this.errorInvalidConversion(value, 'integer');
|
|
239
|
+
},
|
|
240
|
+
convertToString: function (value) {
|
|
241
|
+
if (value === null)
|
|
242
|
+
return null;
|
|
243
|
+
let valueType = toString.call(value);
|
|
244
|
+
if (valueType === '[object String]')
|
|
245
|
+
return value;
|
|
246
|
+
if (valueType === '[object Number]')
|
|
247
|
+
return value.toString();
|
|
248
|
+
if (valueType === '[object Uint8Array]')
|
|
249
|
+
return value.toString();
|
|
250
|
+
if (valueType === '[object Boolean]')
|
|
251
|
+
return value ? 'true' : 'false';
|
|
252
|
+
if (valueType === '[object Date]')
|
|
253
|
+
return value.toJSON();
|
|
254
|
+
if (valueType === '[object Object]' && value.type === 'Buffer' && value.data)
|
|
255
|
+
return Buffer.from(value.data).toString();
|
|
256
|
+
throw this.errorInvalidConversion(value, 'string');
|
|
257
|
+
},
|
|
258
|
+
convertToTime: function (value) {
|
|
259
|
+
if (value === null)
|
|
260
|
+
return null;
|
|
261
|
+
let valueType = toString.call(value);
|
|
262
|
+
if (valueType === '[object String]') {
|
|
263
|
+
let matchTime = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?$/.exec(value);
|
|
264
|
+
if (matchTime)
|
|
265
|
+
return new Date(Date.UTC(1970, 0, 1, Number(matchTime[1]), Number(matchTime[2]), Number(matchTime[3]), this.convertMilliseconds(matchTime[4])));
|
|
266
|
+
let matchDatetime = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
267
|
+
if (matchDatetime)
|
|
268
|
+
return new Date(Date.UTC(1970, 0, 1, Number(matchDatetime[4]), Number(matchDatetime[5]), Number(matchDatetime[6] || 0), this.convertMilliseconds(matchDatetime[7])));
|
|
269
|
+
}
|
|
270
|
+
if (valueType === '[object Date]') {
|
|
271
|
+
return new Date(Date.UTC(1970, 0, 1, value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()));
|
|
272
|
+
}
|
|
273
|
+
throw this.errorInvalidConversion(value, 'time');
|
|
274
|
+
},
|
|
275
|
+
entries: function( obj ) {
|
|
276
|
+
if( obj === undefined ) throw this.errorUndefinedArgument( 'obj' );
|
|
277
|
+
if( obj === null ) return null
|
|
278
|
+
return Object.entries( obj )
|
|
279
|
+
},
|
|
280
|
+
format: function (value, format) {
|
|
281
|
+
if (typeof Blz !== 'undefined' && Blz.format) {
|
|
282
|
+
return Blz.format(value, format);
|
|
283
|
+
}
|
|
284
|
+
if (value != null && value.toString) {
|
|
285
|
+
return value.toString();
|
|
286
|
+
}
|
|
287
|
+
return '';
|
|
288
|
+
},
|
|
289
|
+
htmlEncode: function (value) {
|
|
290
|
+
if (value)
|
|
291
|
+
return value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/'/g,''').replace(/"/g,'"');
|
|
292
|
+
else
|
|
293
|
+
return value;
|
|
294
|
+
},
|
|
295
|
+
htmlDecode: function (value) {
|
|
296
|
+
if (value)
|
|
297
|
+
return value.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/'/g,'\'').replace(/"/g,'"');
|
|
298
|
+
else
|
|
299
|
+
return value;
|
|
300
|
+
},
|
|
301
|
+
if: function( condition, valueIfConditionIsTrue, valueIfConditionIsFalse ) {
|
|
302
|
+
return condition ? valueIfConditionIsTrue : valueIfConditionIsFalse
|
|
303
|
+
},
|
|
304
|
+
isNotNull: function (value) {
|
|
305
|
+
return value !== null && value !== undefined;
|
|
306
|
+
},
|
|
307
|
+
isNull: function (value) {
|
|
308
|
+
return value === null || value === undefined;
|
|
309
|
+
},
|
|
310
|
+
isNullOrValue: function (value, valueToCompare) {
|
|
311
|
+
return value === null || value === undefined || this.compare(value, valueToCompare) === 0;
|
|
312
|
+
},
|
|
313
|
+
jsonParse: function (value) {
|
|
314
|
+
if (value === undefined)
|
|
315
|
+
throw this.errorUndefinedArgument('value');
|
|
316
|
+
if (value === null)
|
|
317
|
+
return null;
|
|
318
|
+
let obj = JSON.parse(value);
|
|
319
|
+
return obj;
|
|
320
|
+
},
|
|
321
|
+
jsonStringify: function (value, spaces) {
|
|
322
|
+
if (value === undefined)
|
|
323
|
+
throw this.errorUndefinedArgument('value');
|
|
324
|
+
if (value === null)
|
|
325
|
+
return null;
|
|
326
|
+
if (spaces === undefined || spaces === null)
|
|
327
|
+
return JSON.stringify(value);
|
|
328
|
+
else
|
|
329
|
+
return JSON.stringify(value, null, spaces);
|
|
330
|
+
},
|
|
331
|
+
keys: function( obj ) {
|
|
332
|
+
if( obj === undefined ) throw this.errorUndefinedArgument( 'obj' );
|
|
333
|
+
if( obj === null ) return null
|
|
334
|
+
return Object.keys( obj )
|
|
335
|
+
},
|
|
336
|
+
map: function( source, fnSelection ) {
|
|
337
|
+
if( Array.isArray( source ) ) { // list
|
|
338
|
+
const resultArray = new Array( source.length );
|
|
339
|
+
for( let i = 0; i < source.length; ++i ) {
|
|
340
|
+
const item = source[ i ]
|
|
341
|
+
resultArray[ i ] = fnSelection( item )
|
|
342
|
+
}
|
|
343
|
+
return resultArray
|
|
344
|
+
}
|
|
345
|
+
else if( source ) { // obj
|
|
346
|
+
return fnSelection( source );
|
|
364
347
|
}
|
|
348
|
+
return null;
|
|
349
|
+
},
|
|
350
|
+
nvl: function (value, replacementValue) {
|
|
351
|
+
return value !== null && value !== undefined ? value : replacementValue;
|
|
352
|
+
},
|
|
353
|
+
urlEncode: function (value) {
|
|
354
|
+
return encodeURIComponent(value);
|
|
355
|
+
},
|
|
356
|
+
urlDecode: function (value) {
|
|
357
|
+
return decodeURIComponent(value);
|
|
358
|
+
},
|
|
359
|
+
values: function( obj ) {
|
|
360
|
+
if( obj === undefined ) throw this.errorUndefinedArgument( 'obj' );
|
|
361
|
+
if( obj === null ) return null
|
|
362
|
+
return Object.values( obj )
|
|
365
363
|
}
|
|
366
364
|
};
|