@blazedpath/commons 0.0.11 → 0.1.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/blz-core/index.js CHANGED
@@ -1,366 +1,364 @@
1
1
  module.exports = {
2
- Dual: {
3
- errorUndefinedArgument: function (argName) {
4
- let err = new Error();
5
- err.code = 'UndefinedArgument';
6
- err.data = { argName: argName };
7
- return err;
8
- },
9
- errorInvalidConversion: function (value, targetType) {
10
- let err = new Error();
11
- err.code = 'InvalidConversion';
12
- err.data = { value: value, targetType: targetType };
13
- return err;
14
- },
15
- compare: function (value1, value2) { // TODO: Sort require for objects
16
- if (value1 === null && value2 === null)
17
- return 0;
18
- if (value1 === null && value2 !== null)
19
- return -1;
20
- if (value1 !== null && value2 === null)
21
- return 1;
22
- let value1Type = toString.call(value1);
23
- let value2Type = toString.call(value2);
24
- let value1ToCompare = null;
25
- let value2ToCompare = null;
26
- if ((value1Type === '[object String]' && value2Type === '[object String]') ||
27
- (value1Type === '[object Number]' && value2Type === '[object Number]')) {
28
- value1ToCompare = value1;
29
- value2ToCompare = value2;
30
- }
31
- else if (value1Type === '[object Boolean]' && value2Type === '[object Boolean]') {
32
- value1ToCompare = value1 ? 1 : 0;
33
- value2ToCompare = value2 ? 1 : 0;
34
- }
35
- else if (value1Type === '[object Date]' && value2Type === '[object Date]') {
36
- value1ToCompare = value1.getTime();
37
- value2ToCompare = value2.getTime();
38
- }
39
- else if (value1Type === '[object Object]' && value2Type === '[object Object]') {
40
- value1ToCompare = JSON.stringify(value1);
41
- value2ToCompare = JSON.stringify(value2);
42
- }
43
- else if (value1Type === '[object Array]' && value2Type === '[object Array]') {
44
- let result = this.compare(value1.length, value2.length);
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
- if (value1ToCompare === value2ToCompare)
79
- return 0;
80
- else if (value1ToCompare < value2ToCompare)
81
- return -1;
82
- else if (value1ToCompare > value2ToCompare)
83
- return 1;
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
- return null;
86
- },
87
- convertMilliseconds: function (strMilliseconds) {
88
- if (strMilliseconds) {
89
- if (strMilliseconds.length < 3)
90
- strMilliseconds = strMilliseconds.padEnd(3, '0');
91
- if (strMilliseconds.length > 3)
92
- strMilliseconds = strMilliseconds.substr(0, 3);
93
- return Number(strMilliseconds);
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
- return 0;
97
- },
98
- apply: function (obj1, obj2) {
99
- let result = null;
100
- if (obj1) {
101
- result = {};
102
- for (let key in obj1) {
103
- result[key] = obj1[key];
104
- }
105
- if (obj2) {
106
- for (let key in obj2) {
107
- result[key] = obj2[key];
108
- }
109
- }
110
- }
111
- return result;
112
- },
113
- base64Decode: function (value) {
114
- if (value === undefined)
115
- throw this.errorUndefinedArgument('value');
116
- if (value === null)
117
- return null;
118
- return Buffer.from(value, 'base64');
119
- },
120
- base64Encode: function (value) {
121
- if (value === undefined)
122
- throw this.errorUndefinedArgument('value');
123
- if (value === null)
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
- throw this.errorInvalidConversion(value, 'date');
177
- },
178
- convertToDatetime: function (value) {
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
- if (valueType === '[object Date]') {
213
- return value;
214
- }
215
- throw this.errorInvalidConversion(value, 'datetime');
216
- },
217
- convertToDecimal: function (value) {
218
- if (value === null)
219
- return null;
220
- let valueType = toString.call(value);
221
- if (valueType === '[object String]' && value !== '' && !isNaN(value))
222
- return Number(value);
223
- if (valueType === '[object Number]')
224
- return value;
225
- if (valueType === '[object Boolean]')
226
- return value ? 1 : 0;
227
- throw this.errorInvalidConversion(value, 'decimal');
228
- },
229
- convertToInteger: function (value) {
230
- if (value === null)
231
- return null;
232
- let valueType = toString.call(value);
233
- if (valueType === '[object String]' && value !== '' && !isNaN(value))
234
- return Math.round(Number(value));
235
- if (valueType === '[object Number]')
236
- return Math.round(value);
237
- if (valueType === '[object Boolean]')
238
- return value ? 1 : 0;
239
- throw this.errorInvalidConversion(value, 'integer');
240
- },
241
- convertToString: function (value) {
242
- if (value === null)
243
- return null;
244
- let valueType = toString.call(value);
245
- if (valueType === '[object String]')
246
- return value;
247
- if (valueType === '[object Number]')
248
- return value.toString();
249
- if (valueType === '[object Uint8Array]')
250
- return value.toString();
251
- if (valueType === '[object Boolean]')
252
- return value ? 'true' : 'false';
253
- if (valueType === '[object Date]')
254
- return value.toJSON();
255
- if (valueType === '[object Object]' && value.type === 'Buffer' && value.data)
256
- return Buffer.from(value.data).toString();
257
- throw this.errorInvalidConversion(value, 'string');
258
- },
259
- convertToTime: function (value) {
260
- if (value === null)
261
- return null;
262
- let valueType = toString.call(value);
263
- if (valueType === '[object String]') {
264
- let matchTime = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?$/.exec(value);
265
- if (matchTime)
266
- return new Date(Date.UTC(1970, 0, 1, Number(matchTime[1]), Number(matchTime[2]), Number(matchTime[3]), this.convertMilliseconds(matchTime[4])));
267
- 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);
268
- if (matchDatetime)
269
- return new Date(Date.UTC(1970, 0, 1, Number(matchDatetime[4]), Number(matchDatetime[5]), Number(matchDatetime[6] || 0), this.convertMilliseconds(matchDatetime[7])));
270
- }
271
- if (valueType === '[object Date]') {
272
- return new Date(Date.UTC(1970, 0, 1, value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()));
273
- }
274
- throw this.errorInvalidConversion(value, 'time');
275
- },
276
- entries: function (obj) {
277
- if (obj === undefined) throw this.errorUndefinedArgument('obj');
278
- if (obj === null) return null
279
- return Object.entries(obj)
280
- },
281
- format: function (value, format) {
282
- if (typeof Blz !== 'undefined' && Blz.format) {
283
- return Blz.format(value, format);
284
- }
285
- if (value != null && value.toString) {
286
- return value.toString();
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
- return '';
289
- },
290
- htmlEncode: function (value) {
291
- if (value)
292
- return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&apos;').replace(/"/g, '&quot;');
293
- else
294
- return value;
295
- },
296
- htmlDecode: function (value) {
297
- if (value)
298
- return value.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&apos;/g, '\'').replace(/&quot;/g, '"');
299
- else
300
- return value;
301
- },
302
- if: function (condition, valueIfConditionIsTrue, valueIfConditionIsFalse) {
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 resultArray
202
+ return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond));
345
203
  }
346
- else if (source) { // obj
347
- return fnSelection(source);
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
- nvl: function (value, replacementValue) {
352
- return value !== null && value !== undefined ? value : replacementValue;
353
- },
354
- urlEncode: function (value) {
355
- return encodeURIComponent(value);
356
- },
357
- urlDecode: function (value) {
358
- return decodeURIComponent(value);
359
- },
360
- values: function (obj) {
361
- if (obj === undefined) throw this.errorUndefinedArgument('obj');
362
- if (obj === null) return null
363
- return Object.values(obj)
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,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/'/g,'&apos;').replace(/"/g,'&quot;');
292
+ else
293
+ return value;
294
+ },
295
+ htmlDecode: function (value) {
296
+ if (value)
297
+ return value.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&apos;/g,'\'').replace(/&quot;/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
  };