@blazedpath/commons 0.0.4
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/README.md +3 -0
- package/blz-base/health/index.js +215 -0
- package/blz-base/index.js +1466 -0
- package/blz-cache/LruCache.js +44 -0
- package/blz-cache/index.js +29 -0
- package/blz-config/index.js +434 -0
- package/blz-core/index.js +364 -0
- package/blz-cryptography/index.js +54 -0
- package/blz-datetimes/index.js +356 -0
- package/blz-file/example.dat +2545 -0
- package/blz-file/fileService.js +205 -0
- package/blz-file/index.js +94 -0
- package/blz-file/index.test.js +31 -0
- package/blz-file/lab.js +33 -0
- package/blz-hazelcast/index.js +189 -0
- package/blz-hazelcast/lib/credentials.js +25 -0
- package/blz-hazelcast/lib/credentialsFactory.js +12 -0
- package/blz-hazelcast/lib/hazelcastCache.js +234 -0
- package/blz-iterable/index.js +446 -0
- package/blz-json-schema/index.js +11 -0
- package/blz-jwt/index.js +121 -0
- package/blz-kafka/index.js +522 -0
- package/blz-math/index.js +131 -0
- package/blz-mongodb/index.js +326 -0
- package/blz-rds/__test__/scape.test.js +58 -0
- package/blz-rds/blz-rds-executor.js +578 -0
- package/blz-rds/blz-rds-helper.js +310 -0
- package/blz-rds/commands/core/add.js +13 -0
- package/blz-rds/commands/core/and.js +18 -0
- package/blz-rds/commands/core/asc.js +10 -0
- package/blz-rds/commands/core/avg.js +10 -0
- package/blz-rds/commands/core/column-ref.js +8 -0
- package/blz-rds/commands/core/count-distinct.js +10 -0
- package/blz-rds/commands/core/count.js +10 -0
- package/blz-rds/commands/core/decimal.js +8 -0
- package/blz-rds/commands/core/desc.js +10 -0
- package/blz-rds/commands/core/distinct.js +10 -0
- package/blz-rds/commands/core/divide.js +11 -0
- package/blz-rds/commands/core/embedded-exists.js +17 -0
- package/blz-rds/commands/core/embedded-select.js +17 -0
- package/blz-rds/commands/core/equals.js +9 -0
- package/blz-rds/commands/core/false.js +8 -0
- package/blz-rds/commands/core/greater-or-equal.js +9 -0
- package/blz-rds/commands/core/greater.js +9 -0
- package/blz-rds/commands/core/in.js +9 -0
- package/blz-rds/commands/core/integer.js +8 -0
- package/blz-rds/commands/core/is-not-null.js +11 -0
- package/blz-rds/commands/core/is-null-or-value.js +10 -0
- package/blz-rds/commands/core/is-null.js +11 -0
- package/blz-rds/commands/core/less-or-equal.js +9 -0
- package/blz-rds/commands/core/less-unary.js +12 -0
- package/blz-rds/commands/core/less.js +9 -0
- package/blz-rds/commands/core/like.js +12 -0
- package/blz-rds/commands/core/max.js +10 -0
- package/blz-rds/commands/core/min.js +10 -0
- package/blz-rds/commands/core/multiply.js +13 -0
- package/blz-rds/commands/core/not-equals.js +9 -0
- package/blz-rds/commands/core/not-in.js +9 -0
- package/blz-rds/commands/core/not.js +13 -0
- package/blz-rds/commands/core/null.js +8 -0
- package/blz-rds/commands/core/nvl.js +11 -0
- package/blz-rds/commands/core/or.js +13 -0
- package/blz-rds/commands/core/parameter.js +34 -0
- package/blz-rds/commands/core/remainder.js +16 -0
- package/blz-rds/commands/core/string.js +8 -0
- package/blz-rds/commands/core/subtract.js +13 -0
- package/blz-rds/commands/core/sum.js +10 -0
- package/blz-rds/commands/core/true.js +8 -0
- package/blz-rds/commands/core/tuple.js +13 -0
- package/blz-rds/commands/datetimes/add-days.js +11 -0
- package/blz-rds/commands/datetimes/add-hours.js +11 -0
- package/blz-rds/commands/datetimes/add-milliseconds.js +11 -0
- package/blz-rds/commands/datetimes/add-minutes.js +11 -0
- package/blz-rds/commands/datetimes/add-months.js +11 -0
- package/blz-rds/commands/datetimes/add-seconds.js +11 -0
- package/blz-rds/commands/datetimes/add-years.js +11 -0
- package/blz-rds/commands/datetimes/date-diff.js +11 -0
- package/blz-rds/commands/datetimes/date.js +12 -0
- package/blz-rds/commands/datetimes/datetime-diff.js +11 -0
- package/blz-rds/commands/datetimes/datetime.js +15 -0
- package/blz-rds/commands/datetimes/day.js +10 -0
- package/blz-rds/commands/datetimes/hour.js +10 -0
- package/blz-rds/commands/datetimes/millisecond.js +10 -0
- package/blz-rds/commands/datetimes/minute.js +10 -0
- package/blz-rds/commands/datetimes/month-text.js +10 -0
- package/blz-rds/commands/datetimes/month.js +10 -0
- package/blz-rds/commands/datetimes/now.js +9 -0
- package/blz-rds/commands/datetimes/second.js +10 -0
- package/blz-rds/commands/datetimes/subtract-days.js +11 -0
- package/blz-rds/commands/datetimes/subtract-hours.js +11 -0
- package/blz-rds/commands/datetimes/subtract-milliseconds.js +11 -0
- package/blz-rds/commands/datetimes/subtract-minutes.js +11 -0
- package/blz-rds/commands/datetimes/subtract-seconds.js +11 -0
- package/blz-rds/commands/datetimes/time-diff.js +11 -0
- package/blz-rds/commands/datetimes/time.js +13 -0
- package/blz-rds/commands/datetimes/today.js +9 -0
- package/blz-rds/commands/datetimes/week-day-text.js +10 -0
- package/blz-rds/commands/datetimes/week-day.js +10 -0
- package/blz-rds/commands/datetimes/week.js +10 -0
- package/blz-rds/commands/datetimes/year.js +10 -0
- package/blz-rds/commands/math/abs.js +10 -0
- package/blz-rds/commands/math/acos.js +10 -0
- package/blz-rds/commands/math/asin.js +10 -0
- package/blz-rds/commands/math/atan.js +10 -0
- package/blz-rds/commands/math/atan2.js +11 -0
- package/blz-rds/commands/math/ceil.js +10 -0
- package/blz-rds/commands/math/cos.js +10 -0
- package/blz-rds/commands/math/cosh.js +10 -0
- package/blz-rds/commands/math/exp.js +10 -0
- package/blz-rds/commands/math/floor.js +10 -0
- package/blz-rds/commands/math/log.js +18 -0
- package/blz-rds/commands/math/log10.js +10 -0
- package/blz-rds/commands/math/pow.js +11 -0
- package/blz-rds/commands/math/random.js +9 -0
- package/blz-rds/commands/math/round.js +18 -0
- package/blz-rds/commands/math/sign.js +10 -0
- package/blz-rds/commands/math/sin.js +10 -0
- package/blz-rds/commands/math/sinh.js +10 -0
- package/blz-rds/commands/math/sqrt.js +10 -0
- package/blz-rds/commands/math/tan.js +10 -0
- package/blz-rds/commands/math/tanh.js +10 -0
- package/blz-rds/commands/math/trunc.js +18 -0
- package/blz-rds/commands/strings/concat.js +20 -0
- package/blz-rds/commands/strings/contains.js +12 -0
- package/blz-rds/commands/strings/ends-with.js +12 -0
- package/blz-rds/commands/strings/index-of.js +11 -0
- package/blz-rds/commands/strings/is-null-or-empty.js +11 -0
- package/blz-rds/commands/strings/is-null-or-white-space.js +11 -0
- package/blz-rds/commands/strings/join.js +22 -0
- package/blz-rds/commands/strings/last-index-of.js +11 -0
- package/blz-rds/commands/strings/length.js +10 -0
- package/blz-rds/commands/strings/pad-left.js +20 -0
- package/blz-rds/commands/strings/pad-right.js +20 -0
- package/blz-rds/commands/strings/replace.js +12 -0
- package/blz-rds/commands/strings/starts-with.js +12 -0
- package/blz-rds/commands/strings/substring.js +12 -0
- package/blz-rds/commands/strings/to-lower.js +10 -0
- package/blz-rds/commands/strings/to-upper.js +10 -0
- package/blz-rds/commands/strings/trim-end.js +10 -0
- package/blz-rds/commands/strings/trim-start.js +10 -0
- package/blz-rds/commands/strings/trim.js +10 -0
- package/blz-rds/index.js +744 -0
- package/blz-rds-mysql/base.js +857 -0
- package/blz-rds-mysql/connection-manager.js +129 -0
- package/blz-rds-mysql/execute-bulk-insert.js +35 -0
- package/blz-rds-mysql/execute-bulk-merge.js +45 -0
- package/blz-rds-mysql/execute-non-query.js +34 -0
- package/blz-rds-mysql/execute-query.js +50 -0
- package/blz-rds-mysql/index.js +41 -0
- package/blz-rds-mysql/stored-procedure.js +207 -0
- package/blz-rds-mysql/syntaxis.json +114 -0
- package/blz-rds-mysqlx/base.js +846 -0
- package/blz-rds-mysqlx/connection-manager.js +141 -0
- package/blz-rds-mysqlx/execute-bulk-insert.js +35 -0
- package/blz-rds-mysqlx/execute-bulk-merge.js +45 -0
- package/blz-rds-mysqlx/execute-non-query.js +29 -0
- package/blz-rds-mysqlx/execute-query.js +39 -0
- package/blz-rds-mysqlx/index.js +41 -0
- package/blz-rds-mysqlx/stored-procedure.js +179 -0
- package/blz-rds-mysqlx/syntaxis.json +105 -0
- package/blz-rds-oracle/index.js +540 -0
- package/blz-rds-oracle/syntaxis.json +112 -0
- package/blz-rds-postgres/base.js +861 -0
- package/blz-rds-postgres/connection-manager.js +225 -0
- package/blz-rds-postgres/execute-bulk-insert.js +81 -0
- package/blz-rds-postgres/execute-bulk-merge.js +93 -0
- package/blz-rds-postgres/execute-non-query.js +23 -0
- package/blz-rds-postgres/execute-query.js +37 -0
- package/blz-rds-postgres/index.js +41 -0
- package/blz-rds-postgres/result-set.js +51 -0
- package/blz-rds-postgres/stored-procedure.js +116 -0
- package/blz-rds-postgres/syntaxis.json +114 -0
- package/blz-redis/index.js +217 -0
- package/blz-redis/lib/redisCache.js +265 -0
- package/blz-regex/index.js +25 -0
- package/blz-security/.eslintrc.js +15 -0
- package/blz-security/__test__/AuthorizationKpn.yaml +1043 -0
- package/blz-security/__test__/FinancingSetting.yaml +177 -0
- package/blz-security/__test__/KpnConfigPortal.yaml +330 -0
- package/blz-security/__test__/OrderManagement.yaml +5190 -0
- package/blz-security/__test__/Security.yaml +128 -0
- package/blz-security/__test__/autorization.test.js +105 -0
- package/blz-security/__test__/orderManagement.test.js +26 -0
- package/blz-security/__test__/secureUrl.test.js +79 -0
- package/blz-security/__test__/solveMergeRule.test.js +109 -0
- package/blz-security/__test__/sqlInjectionGuard.test.js +203 -0
- package/blz-security/__test__/xssGuard.test.js +204 -0
- package/blz-security/authorizationService.js +536 -0
- package/blz-security/config/global.js +8 -0
- package/blz-security/config/welcome +8 -0
- package/blz-security/doc/README.md +75 -0
- package/blz-security/filescanner/index.js +46 -0
- package/blz-security/helpers/consts.js +229 -0
- package/blz-security/helpers/utils.js +267 -0
- package/blz-security/implementations/cache.js +90 -0
- package/blz-security/implementations/oidc.js +404 -0
- package/blz-security/implementations/pkceCacheStore.js +23 -0
- package/blz-security/implementations/saml.js +10 -0
- package/blz-security/implementations/uma.js +63 -0
- package/blz-security/implementations/webAuthn.js +9 -0
- package/blz-security/implementations/wstg.js +72 -0
- package/blz-security/index.js +77 -0
- package/blz-security/lab/index.js +27 -0
- package/blz-security/middleware/HapiServerAzureAd.js +641 -0
- package/blz-security/middleware/HapiServerKeycloak.js +840 -0
- package/blz-security/middleware/HapiServerSimToken.js +247 -0
- package/blz-security/middleware/hapi.js +515 -0
- package/blz-security/middleware/hapiServer.js +974 -0
- package/blz-security/navigationMemoryRepository.js +15 -0
- package/blz-security/navigationMongoDbRepository.js +73 -0
- package/blz-security/secureUrlService.js +47 -0
- package/blz-security/securityService.js +409 -0
- package/blz-security/sqlInjectionGuard.js +162 -0
- package/blz-security/templates/forbidden.html +0 -0
- package/blz-security/templates/session-iframe-azure-ad.html +7 -0
- package/blz-security/templates/session-iframe.html +73 -0
- package/blz-security/templates/unauthorized.html +1 -0
- package/blz-security/xssGuard.js +87 -0
- package/blz-strings/index.js +167 -0
- package/blz-uuid/index.js +7 -0
- package/blz-yaml/index.js +19 -0
- package/index.js +84 -0
- package/package.json +97 -0
- package/process-managers/index.js +422 -0
|
@@ -0,0 +1,846 @@
|
|
|
1
|
+
const Fs = require('fs-extra');
|
|
2
|
+
const toString = Object.prototype.toString;
|
|
3
|
+
const dayjs = require("dayjs");
|
|
4
|
+
const utc = require('dayjs/plugin/utc')
|
|
5
|
+
const _ = require('underscore');
|
|
6
|
+
const { h3lp } = require('h3lp');
|
|
7
|
+
dayjs.extend(utc);
|
|
8
|
+
module.exports = {
|
|
9
|
+
replace: function (string, search, replace) {
|
|
10
|
+
return string.split(search).join(replace)
|
|
11
|
+
},
|
|
12
|
+
error: function (code, data, innerError = new Error("UndefinedError")) {
|
|
13
|
+
let err = new Error(`${code} ${innerError.message}`);
|
|
14
|
+
err.code = code;
|
|
15
|
+
if (data) {
|
|
16
|
+
err.data = data;
|
|
17
|
+
}
|
|
18
|
+
err.innerError = innerError;
|
|
19
|
+
return err;
|
|
20
|
+
},
|
|
21
|
+
errorUndefinedArgument: function (argName) {
|
|
22
|
+
return this.error('UndefinedArgument', { argName: argName });
|
|
23
|
+
},
|
|
24
|
+
tryString: function (value) {
|
|
25
|
+
if (toString.call(value) === '[object String]')
|
|
26
|
+
return value;
|
|
27
|
+
else
|
|
28
|
+
return null;
|
|
29
|
+
},
|
|
30
|
+
tryInteger: function (value) {
|
|
31
|
+
if (toString.call(value) === '[object Number]' && value === parseInt(value))
|
|
32
|
+
return value;
|
|
33
|
+
else
|
|
34
|
+
return null;
|
|
35
|
+
},
|
|
36
|
+
tryDecimal: function (value) {
|
|
37
|
+
if (toString.call(value) === '[object Number]')
|
|
38
|
+
return value;
|
|
39
|
+
else
|
|
40
|
+
return null;
|
|
41
|
+
},
|
|
42
|
+
tryBoolean: function (value) {
|
|
43
|
+
if (toString.call(value) === '[object Boolean]')
|
|
44
|
+
return value;
|
|
45
|
+
else
|
|
46
|
+
return null;
|
|
47
|
+
},
|
|
48
|
+
tryDatetime: function (value) {
|
|
49
|
+
let strType = toString.call(value);
|
|
50
|
+
if (strType === '[object Date]') {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
else if (strType === '[object String]') {
|
|
54
|
+
let match = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
55
|
+
if (match) {
|
|
56
|
+
const probableDate = new Date(value);
|
|
57
|
+
if (probableDate.toString() !== 'Invalid Date') {
|
|
58
|
+
return probableDate;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
},
|
|
64
|
+
tryDate: function (value) {
|
|
65
|
+
let strType = toString.call(value);
|
|
66
|
+
if (strType === '[object Date]') {
|
|
67
|
+
return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), 0, 0, 0, 0));
|
|
68
|
+
}
|
|
69
|
+
else if (strType === '[object String]') {
|
|
70
|
+
let match = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(value);
|
|
71
|
+
if (match)
|
|
72
|
+
return new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]), 0, 0, 0, 0));
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
},
|
|
76
|
+
tryTime: function (value) {
|
|
77
|
+
let convertMilliseconds = function(strMilliseconds) {
|
|
78
|
+
if (strMilliseconds) {
|
|
79
|
+
if (strMilliseconds.length < 3)
|
|
80
|
+
strMilliseconds = strMilliseconds.padEnd(3, '0');
|
|
81
|
+
if (strMilliseconds.length > 3)
|
|
82
|
+
strMilliseconds = strMilliseconds.substr(0, 3);
|
|
83
|
+
return Number(strMilliseconds);
|
|
84
|
+
}
|
|
85
|
+
else
|
|
86
|
+
return 0;
|
|
87
|
+
};
|
|
88
|
+
let strType = toString.call(value);
|
|
89
|
+
if (strType === '[object Date]') {
|
|
90
|
+
return new Date(Date.UTC(1970, 0, 1, value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()));
|
|
91
|
+
}
|
|
92
|
+
else if (strType === '[object String]') {
|
|
93
|
+
let match = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?$/.exec(value);
|
|
94
|
+
if (match)
|
|
95
|
+
return new Date(Date.UTC(1970, 0, 1, Number(match[1]), Number(match[2]), Number(match[3]), convertMilliseconds(match[4])));
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
},
|
|
99
|
+
tryBinary: function (value) {
|
|
100
|
+
if (Buffer.isBuffer(value)) {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
else if (Array.isArray(value)) {
|
|
104
|
+
return Buffer.from(value);
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
},
|
|
108
|
+
tryObject: function (value) {
|
|
109
|
+
if (toString.call(value) === '[object Object]')
|
|
110
|
+
return value;
|
|
111
|
+
else
|
|
112
|
+
return null;
|
|
113
|
+
},
|
|
114
|
+
tryArray: function (value) {
|
|
115
|
+
if (toString.call(value) === '[object Array]')
|
|
116
|
+
return value;
|
|
117
|
+
else
|
|
118
|
+
return null;
|
|
119
|
+
},
|
|
120
|
+
ensureString: function (value) {
|
|
121
|
+
let string = this.tryString(value);
|
|
122
|
+
if (string !== null)
|
|
123
|
+
return string;
|
|
124
|
+
else
|
|
125
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'string' });
|
|
126
|
+
},
|
|
127
|
+
ensureInteger: function (value) {
|
|
128
|
+
let integer = this.tryInteger(value);
|
|
129
|
+
if (integer !== null)
|
|
130
|
+
return integer;
|
|
131
|
+
else
|
|
132
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'integer' });
|
|
133
|
+
},
|
|
134
|
+
ensureDecimal: function (value) {
|
|
135
|
+
let decimal = this.tryDecimal(value);
|
|
136
|
+
if (decimal !== null)
|
|
137
|
+
return decimal;
|
|
138
|
+
else
|
|
139
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'decimal' });
|
|
140
|
+
},
|
|
141
|
+
ensureBoolean: function (value) {
|
|
142
|
+
let boolean = this.tryBoolean(value);
|
|
143
|
+
if (boolean !== null)
|
|
144
|
+
return boolean;
|
|
145
|
+
else
|
|
146
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'boolean' });
|
|
147
|
+
},
|
|
148
|
+
ensureDatetime: function (value) {
|
|
149
|
+
let datetime = this.tryDatetime(value);
|
|
150
|
+
if (datetime !== null)
|
|
151
|
+
return datetime;
|
|
152
|
+
else
|
|
153
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'datetime' });
|
|
154
|
+
},
|
|
155
|
+
ensureDate: function (value) {
|
|
156
|
+
let date = this.tryDate(value);
|
|
157
|
+
if (date !== null)
|
|
158
|
+
return date;
|
|
159
|
+
else
|
|
160
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'date' });
|
|
161
|
+
},
|
|
162
|
+
ensureTime: function (value) {
|
|
163
|
+
let time = this.tryTime(value);
|
|
164
|
+
if (time !== null)
|
|
165
|
+
return time;
|
|
166
|
+
else
|
|
167
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'time' });
|
|
168
|
+
},
|
|
169
|
+
ensureBinary: function (value) {
|
|
170
|
+
let binary = this.tryBinary(value);
|
|
171
|
+
if (binary !== null)
|
|
172
|
+
return binary;
|
|
173
|
+
else
|
|
174
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'binary' });
|
|
175
|
+
},
|
|
176
|
+
ensureObject: function (value) {
|
|
177
|
+
let object = this.tryObject(value);
|
|
178
|
+
if (object !== null)
|
|
179
|
+
return array;
|
|
180
|
+
else
|
|
181
|
+
throw this.error('UnexpectedType', { value: object, expectedType: 'object' });
|
|
182
|
+
},
|
|
183
|
+
ensureArray: function (value) {
|
|
184
|
+
let array = this.tryArray(value);
|
|
185
|
+
if (array !== null)
|
|
186
|
+
return array;
|
|
187
|
+
else
|
|
188
|
+
throw this.error('UnexpectedType', { value: value, expectedType: 'array' });
|
|
189
|
+
},
|
|
190
|
+
convertToString: function (value) {
|
|
191
|
+
if (value === null)
|
|
192
|
+
return null;
|
|
193
|
+
let string = this.tryString(value);
|
|
194
|
+
if (string !== null)
|
|
195
|
+
return string;
|
|
196
|
+
let integer = this.tryInteger(value);
|
|
197
|
+
if (integer !== null)
|
|
198
|
+
return integer.toString();
|
|
199
|
+
let decimal = this.tryDecimal(value);
|
|
200
|
+
if (decimal !== null)
|
|
201
|
+
return decimal.toString();
|
|
202
|
+
let boolean = this.tryBoolean(value);
|
|
203
|
+
if (boolean !== null)
|
|
204
|
+
return boolean ? 'true' : 'false';
|
|
205
|
+
let datetime = this.tryDatetime(value);
|
|
206
|
+
if (datetime !== null)
|
|
207
|
+
return datetime.toJSON();
|
|
208
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'string' });
|
|
209
|
+
},
|
|
210
|
+
convertToInteger: function (value) {
|
|
211
|
+
if (value === null)
|
|
212
|
+
return null;
|
|
213
|
+
let integer = this.tryInteger(value);
|
|
214
|
+
if (integer !== null)
|
|
215
|
+
return integer;
|
|
216
|
+
let string = this.tryString(value);
|
|
217
|
+
if (string !== null && !isNaN(string))
|
|
218
|
+
return Math.round(Number(string));
|
|
219
|
+
let decimal = this.tryDecimal(value);
|
|
220
|
+
if (decimal !== null)
|
|
221
|
+
return Math.round(decimal);
|
|
222
|
+
let boolean = this.tryBoolean(value);
|
|
223
|
+
if (boolean !== null)
|
|
224
|
+
return boolean ? 1 : 0;
|
|
225
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'integer' });
|
|
226
|
+
},
|
|
227
|
+
convertToDecimal: function (value) {
|
|
228
|
+
if (value === null)
|
|
229
|
+
return null;
|
|
230
|
+
let decimal = this.tryDecimal(value);
|
|
231
|
+
if (decimal !== null)
|
|
232
|
+
return decimal;
|
|
233
|
+
let string = this.tryString(value);
|
|
234
|
+
if (string !== null && !isNaN(string))
|
|
235
|
+
return Number(string);
|
|
236
|
+
let integer = this.tryInteger(value);
|
|
237
|
+
if (integer !== null)
|
|
238
|
+
return integer;
|
|
239
|
+
let boolean = this.tryBoolean(value);
|
|
240
|
+
if (boolean !== null)
|
|
241
|
+
return boolean ? 1 : 0;
|
|
242
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'decimal' });
|
|
243
|
+
},
|
|
244
|
+
convertToBoolean: function (value) {
|
|
245
|
+
if (value === null)
|
|
246
|
+
return null;
|
|
247
|
+
let boolean = this.tryBoolean(value);
|
|
248
|
+
if (boolean !== null)
|
|
249
|
+
return boolean;
|
|
250
|
+
let string = this.tryString(value);
|
|
251
|
+
if (string !== null && (string === '1' || string.toUpperCase() === 'T' || string.toUpperCase() === 'TRUE' || string.toUpperCase() === 'Y' || string.toUpperCase() === 'YES'))
|
|
252
|
+
return true;
|
|
253
|
+
if (string !== null && (string === '0' || string.toUpperCase() === 'F' || string.toUpperCase() === 'FALSE' || string.toUpperCase() === 'N' || string.toUpperCase() === 'NO'))
|
|
254
|
+
return false;
|
|
255
|
+
let integer = this.tryInteger(value);
|
|
256
|
+
if (integer !== null && integer === 1)
|
|
257
|
+
return true;
|
|
258
|
+
if (integer !== null && integer === 0)
|
|
259
|
+
return false;
|
|
260
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'boolean' });
|
|
261
|
+
},
|
|
262
|
+
convertToDatetime: function (value) {
|
|
263
|
+
if (value === null)
|
|
264
|
+
return null;
|
|
265
|
+
let datetime = this.tryDatetime(value);
|
|
266
|
+
if (datetime !== null)
|
|
267
|
+
return datetime;
|
|
268
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'datetime' });
|
|
269
|
+
},
|
|
270
|
+
convertToDate: function (value) {
|
|
271
|
+
if (value === null)
|
|
272
|
+
return null;
|
|
273
|
+
let date = this.tryDate(value);
|
|
274
|
+
if (date !== null)
|
|
275
|
+
return date;
|
|
276
|
+
let datetime = this.tryDatetime(value);
|
|
277
|
+
if (datetime !== null)
|
|
278
|
+
return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), 0, 0, 0, 0));
|
|
279
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'date' });
|
|
280
|
+
},
|
|
281
|
+
convertToTime: function (value) {
|
|
282
|
+
if (value === null)
|
|
283
|
+
return null;
|
|
284
|
+
let time = this.tryTime(value);
|
|
285
|
+
if (time !== null)
|
|
286
|
+
return time;
|
|
287
|
+
let datetime = this.tryDatetime(value);
|
|
288
|
+
if (datetime !== null)
|
|
289
|
+
return new Date(Date.UTC(1970, 0, 1, datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds()));
|
|
290
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'time' });
|
|
291
|
+
},
|
|
292
|
+
convertToBinary: function (value) {
|
|
293
|
+
if (value == null)
|
|
294
|
+
return null;
|
|
295
|
+
let binary = this.tryBinary(value);
|
|
296
|
+
if (binary !== null)
|
|
297
|
+
return binary;
|
|
298
|
+
throw this.error('InvalidConversion', { value: value, targetType: 'binary' });
|
|
299
|
+
},
|
|
300
|
+
convertToListOfStrings: function (value) {
|
|
301
|
+
if (Array.isArray(value)) {
|
|
302
|
+
let list = [];
|
|
303
|
+
for (let i = 0; i < value.length; i++) {
|
|
304
|
+
list.push(this.convertToString(value[i]));
|
|
305
|
+
}
|
|
306
|
+
return list;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return [this.convertToString(value)];
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
convertToListOfIntegers: function (value) {
|
|
313
|
+
if (Array.isArray(value)) {
|
|
314
|
+
let list = [];
|
|
315
|
+
for (let i = 0; i < value.length; i++) {
|
|
316
|
+
list.push(this.convertToInteger(value[i]));
|
|
317
|
+
}
|
|
318
|
+
return list;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
return [this.convertToInteger(value)];
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
convertToListOfDecimals: function (value) {
|
|
325
|
+
if (Array.isArray(value)) {
|
|
326
|
+
let list = [];
|
|
327
|
+
for (let i = 0; i < value.length; i++) {
|
|
328
|
+
list.push(this.convertToDecimal(value[i]));
|
|
329
|
+
}
|
|
330
|
+
return list;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
return [this.convertToDecimal(value)];
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
convertToListOfBooleans: function (value) {
|
|
337
|
+
if (Array.isArray(value)) {
|
|
338
|
+
let list = [];
|
|
339
|
+
for (let i = 0; i < value.length; i++) {
|
|
340
|
+
list.push(this.convertToBoolean(value[i]));
|
|
341
|
+
}
|
|
342
|
+
return list;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
return [this.convertToBoolean(value)];
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
convertToListOfDatetimes: function (value) {
|
|
349
|
+
if (Array.isArray(value)) {
|
|
350
|
+
let list = [];
|
|
351
|
+
for (let i = 0; i < value.length; i++) {
|
|
352
|
+
list.push(this.convertToDatetime(value[i]));
|
|
353
|
+
}
|
|
354
|
+
return list;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return [this.convertToDatetime(value)];
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
convertToListOfDates: function (value) {
|
|
361
|
+
if (Array.isArray(value)) {
|
|
362
|
+
let list = [];
|
|
363
|
+
for (let i = 0; i < value.length; i++) {
|
|
364
|
+
list.push(this.convertToDate(value[i]));
|
|
365
|
+
}
|
|
366
|
+
return list;
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
return [this.convertToDate(value)];
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
convertToListOfTimes: function (value) {
|
|
373
|
+
if (Array.isArray(value)) {
|
|
374
|
+
let list = [];
|
|
375
|
+
for (let i = 0; i < value.length; i++) {
|
|
376
|
+
list.push(this.convertToTime(value[i]));
|
|
377
|
+
}
|
|
378
|
+
return list;
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
return [this.convertToTime(value)];
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
convertToListOfBinaries: function (value) {
|
|
385
|
+
if (Array.isArray(value)) {
|
|
386
|
+
let list = [];
|
|
387
|
+
for (let i = 0; i < value.length; i++) {
|
|
388
|
+
list.push(this.convertToBinary(value[i]));
|
|
389
|
+
}
|
|
390
|
+
return list;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
return [this.convertToBinary(value)];
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
httpCall: function (httpRequest) {
|
|
397
|
+
return new Promise(function (response, reject) {
|
|
398
|
+
let options = {
|
|
399
|
+
method: httpRequest.method ? httpRequest.method.toLowerCase() : 'get',
|
|
400
|
+
headers: {},
|
|
401
|
+
body: httpRequest.body
|
|
402
|
+
};
|
|
403
|
+
if (httpRequest.headers)
|
|
404
|
+
for (let i = 0; i < httpRequest.headers.length; i++) {
|
|
405
|
+
let httpHeader = httpRequest.headers[i];
|
|
406
|
+
options.headers[httpHeader.name] = httpHeader.value;
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
},
|
|
410
|
+
isNotNull: function (value) {
|
|
411
|
+
return value !== null;
|
|
412
|
+
},
|
|
413
|
+
isNull: function (value) {
|
|
414
|
+
return value === null;
|
|
415
|
+
},
|
|
416
|
+
isNullOrValue: function (value, valueToCompare) {
|
|
417
|
+
return value === null || this.compare(value, valueToCompare) === 0;
|
|
418
|
+
},
|
|
419
|
+
nvl: function (value, replacementValue) {
|
|
420
|
+
return value !== null ? value : replacementValue;
|
|
421
|
+
},
|
|
422
|
+
get: function (objOrTuple, codePathOrIndex) {
|
|
423
|
+
if (objOrTuple === null)
|
|
424
|
+
return null;
|
|
425
|
+
else {
|
|
426
|
+
let obj = this.tryObject(objOrTuple);
|
|
427
|
+
if (obj) {
|
|
428
|
+
let posPoint = codePathOrIndex.indexOf('.');
|
|
429
|
+
if (posPoint === -1)
|
|
430
|
+
return obj[codePathOrIndex] !== undefined ? obj[codePathOrIndex] : null;
|
|
431
|
+
else
|
|
432
|
+
return this.get(obj[codePathOrIndex.substring(0, posPoint)], codePathOrIndex.substring(posPoint + 1, codePathOrIndex.length));
|
|
433
|
+
}
|
|
434
|
+
if (toString.call(objOrTuple) === '[object Error]') {
|
|
435
|
+
let error = objOrTuple;
|
|
436
|
+
let posPoint = codePathOrIndex.indexOf('.');
|
|
437
|
+
if (posPoint === -1)
|
|
438
|
+
return error[codePathOrIndex] !== undefined ? error[codePathOrIndex] : null;
|
|
439
|
+
else
|
|
440
|
+
return this.get(error[codePathOrIndex.substring(0, posPoint)], codePathOrIndex.substring(posPoint + 1, codePathOrIndex.length));
|
|
441
|
+
}
|
|
442
|
+
let tuple = this.tryArray(objOrTuple);
|
|
443
|
+
if (tuple) {
|
|
444
|
+
return tuple[codePathOrIndex];
|
|
445
|
+
}
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
and: function (value1, value2) {
|
|
450
|
+
return this.ensureBoolean(value1) && this.ensureBoolean(value2);
|
|
451
|
+
},
|
|
452
|
+
or: function (value1, value2) {
|
|
453
|
+
return this.ensureBoolean(value1) || this.ensureBoolean(value2);
|
|
454
|
+
},
|
|
455
|
+
not: function (value) {
|
|
456
|
+
return !this.ensureBoolean(value);
|
|
457
|
+
},
|
|
458
|
+
compare: function (value1, value2) { // TODO: Sort require for objects
|
|
459
|
+
let compareClassic = function (value1, value2) {
|
|
460
|
+
if (value1 === value2)
|
|
461
|
+
return 0;
|
|
462
|
+
else if (value1 < value2)
|
|
463
|
+
return -1;
|
|
464
|
+
else if (value1 > value2)
|
|
465
|
+
return 1;
|
|
466
|
+
else
|
|
467
|
+
return null;
|
|
468
|
+
};
|
|
469
|
+
if (value1 === null && value2 === null)
|
|
470
|
+
return 0;
|
|
471
|
+
if (value1 === null && value2 !== null)
|
|
472
|
+
return -1;
|
|
473
|
+
if (value1 !== null && value2 === null)
|
|
474
|
+
return 1;
|
|
475
|
+
let string1 = this.tryString(value1);
|
|
476
|
+
let string2 = this.tryString(value2);
|
|
477
|
+
if (string1 !== null && string2 !== null)
|
|
478
|
+
return compareClassic(string1, string2);
|
|
479
|
+
let decimal1 = this.tryDecimal(value1);
|
|
480
|
+
let decimal2 = this.tryDecimal(value2);
|
|
481
|
+
if (decimal1 !== null && decimal2 !== null)
|
|
482
|
+
return compareClassic(decimal1, decimal2);
|
|
483
|
+
let boolean1 = this.tryBoolean(value1);
|
|
484
|
+
let boolean2 = this.tryBoolean(value2);
|
|
485
|
+
if (boolean1 !== null && boolean2 !== null)
|
|
486
|
+
return compareClassic(boolean1, boolean2);
|
|
487
|
+
let datetime1 = this.tryDatetime(value1);
|
|
488
|
+
let datetime2 = this.tryDatetime(value2);
|
|
489
|
+
if (datetime1 !== null && datetime2 !== null)
|
|
490
|
+
return compareClassic(datetime1.toJSON(), datetime2.toJSON());
|
|
491
|
+
let date1 = this.tryDate(value1);
|
|
492
|
+
let date2 = this.tryDate(value2);
|
|
493
|
+
if (date1 !== null && date2 !== null)
|
|
494
|
+
return compareClassic(date1.toJSON(), date2.toJSON());
|
|
495
|
+
let time1 = this.tryTime(value1);
|
|
496
|
+
let time2 = this.tryTime(value2);
|
|
497
|
+
if (time1 !== null && time2 !== null)
|
|
498
|
+
return compareClassic(time1.toJSON(), time2.toJSON());
|
|
499
|
+
let array1 = this.tryArray(value1);
|
|
500
|
+
let array2 = this.tryArray(value2);
|
|
501
|
+
if (array1 !== null && array2 !== null) {
|
|
502
|
+
let result;
|
|
503
|
+
result = compareClassic(array1.length, array2.length);
|
|
504
|
+
if (result !== 0)
|
|
505
|
+
return result;
|
|
506
|
+
for (let i = 0; i < array1.length; i++) {
|
|
507
|
+
if (result === 0) {
|
|
508
|
+
let item1 = array1[i];
|
|
509
|
+
let item2 = array2[i];
|
|
510
|
+
result = this.compare(item1, item2);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return result;
|
|
514
|
+
}
|
|
515
|
+
let binary1 = this.tryBinary(value1);
|
|
516
|
+
let binary2 = this.tryBinary(value2);
|
|
517
|
+
if (binary1 !== null && binary2 !== null)
|
|
518
|
+
return Buffer.compare(binary1, binary2);
|
|
519
|
+
let obj1 = this.tryObject(value1);
|
|
520
|
+
let obj2 = this.tryObject(value2);
|
|
521
|
+
if (obj1 !== null && obj2 !== null) {
|
|
522
|
+
////Only other option is we have object. JsonStringify is more performant than deepAssert by 42%
|
|
523
|
+
return compareClassic(JSON.stringify(obj1), JSON.stringify(obj2));
|
|
524
|
+
}
|
|
525
|
+
return null;
|
|
526
|
+
},
|
|
527
|
+
equals: function (value1, value2) {
|
|
528
|
+
return this.compare(value1, value2) === 0;
|
|
529
|
+
},
|
|
530
|
+
notEquals: function (value1, value2) {
|
|
531
|
+
return this.compare(value1, value2) !== 0;
|
|
532
|
+
},
|
|
533
|
+
greater: function (value1, value2) {
|
|
534
|
+
return this.compare(value1, value2) > 0;
|
|
535
|
+
},
|
|
536
|
+
less: function (value1, value2) {
|
|
537
|
+
return this.compare(value1, value2) < 0;
|
|
538
|
+
},
|
|
539
|
+
greaterOrEqual: function (value1, value2) {
|
|
540
|
+
return this.compare(value1, value2) >= 0;
|
|
541
|
+
},
|
|
542
|
+
lessOrEqual: function (value1, value2) {
|
|
543
|
+
return this.compare(value1, value2) <= 0;
|
|
544
|
+
},
|
|
545
|
+
concat: function (value1, value2) {
|
|
546
|
+
if (value1 === null)
|
|
547
|
+
return value2;
|
|
548
|
+
if (value2 === null)
|
|
549
|
+
return value1;
|
|
550
|
+
let string1 = this.ensureString(value1);
|
|
551
|
+
let string2 = this.ensureString(value2);
|
|
552
|
+
return string1 + string2;
|
|
553
|
+
},
|
|
554
|
+
add: function (value1, value2) {
|
|
555
|
+
if (value1 === null)
|
|
556
|
+
return value2;
|
|
557
|
+
if (value2 === null)
|
|
558
|
+
return value1;
|
|
559
|
+
let integer1 = this.tryInteger(value1);
|
|
560
|
+
let integer2 = this.tryInteger(value2);
|
|
561
|
+
if (integer1 !== null && integer2 !== null)
|
|
562
|
+
return integer1 + integer2;
|
|
563
|
+
let decimal1 = this.ensureDecimal(value1);
|
|
564
|
+
let decimal2 = this.ensureDecimal(value2);
|
|
565
|
+
return decimal1 + decimal2;
|
|
566
|
+
},
|
|
567
|
+
subtract: function (value1, value2) {
|
|
568
|
+
if (value1 === null)
|
|
569
|
+
return null;
|
|
570
|
+
if (value2 === null)
|
|
571
|
+
return value1;
|
|
572
|
+
let integer1 = this.tryInteger(value1);
|
|
573
|
+
let integer2 = this.tryInteger(value2);
|
|
574
|
+
if (integer1 !== null && integer2 !== null)
|
|
575
|
+
return integer1 - integer2;
|
|
576
|
+
let decimal1 = this.ensureDecimal(value1);
|
|
577
|
+
let decimal2 = this.ensureDecimal(value2);
|
|
578
|
+
return decimal1 - decimal2;
|
|
579
|
+
},
|
|
580
|
+
multiply: function (value1, value2) {
|
|
581
|
+
if (value1 === null)
|
|
582
|
+
return null;
|
|
583
|
+
if (value2 === null)
|
|
584
|
+
return null;
|
|
585
|
+
let integer1 = this.tryInteger(value1);
|
|
586
|
+
let integer2 = this.tryInteger(value2);
|
|
587
|
+
if (integer1 !== null && integer2 !== null)
|
|
588
|
+
return integer1 * integer2;
|
|
589
|
+
let decimal1 = this.ensureDecimal(value1);
|
|
590
|
+
let decimal2 = this.ensureDecimal(value2);
|
|
591
|
+
return decimal1 * decimal2;
|
|
592
|
+
},
|
|
593
|
+
divide: function (value1, value2) {
|
|
594
|
+
if (value1 === null)
|
|
595
|
+
return null;
|
|
596
|
+
let decimal1 = this.ensureDecimal(value1);
|
|
597
|
+
let decimal2 = this.ensureDecimal(value2);
|
|
598
|
+
if (decimal2 === 0)
|
|
599
|
+
throw this.error('DivisionByZero');
|
|
600
|
+
return decimal1 / decimal2;
|
|
601
|
+
},
|
|
602
|
+
remainder: function (value1, value2) {
|
|
603
|
+
if (value1 === null)
|
|
604
|
+
return null;
|
|
605
|
+
let decimal1 = this.ensureDecimal(value1);
|
|
606
|
+
let decimal2 = this.ensureDecimal(value2);
|
|
607
|
+
if (decimal2 === 0)
|
|
608
|
+
throw this.error('DivisionByZero');
|
|
609
|
+
return decimal1 % decimal2;
|
|
610
|
+
},
|
|
611
|
+
lessUnary: function (value) {
|
|
612
|
+
if (value === null)
|
|
613
|
+
return null;
|
|
614
|
+
let integer = this.tryInteger(value);
|
|
615
|
+
if (integer !== null)
|
|
616
|
+
return -integer;
|
|
617
|
+
let decimal = this.ensureDecimal(value);
|
|
618
|
+
return -decimal;
|
|
619
|
+
},
|
|
620
|
+
datetimeAdd: function (value1, value2) {
|
|
621
|
+
if (value1 === null)
|
|
622
|
+
return null;
|
|
623
|
+
if (value2 === null)
|
|
624
|
+
return value1;
|
|
625
|
+
let datetime = this.ensureDatetime(value1);
|
|
626
|
+
let milliseconds = this.ensureInteger(value2);
|
|
627
|
+
return new Date(Date.UTC(datetime.getUTCFullYear(), datetime.getUTCMonth(), datetime.getUTCDate(), datetime.getUTCHours(), datetime.getUTCMinutes(), datetime.getUTCSeconds(), datetime.getUTCMilliseconds() + milliseconds));
|
|
628
|
+
},
|
|
629
|
+
datetimeDiff: function (value1, value2) {
|
|
630
|
+
if (value1 === null)
|
|
631
|
+
return null;
|
|
632
|
+
if (value2 === null)
|
|
633
|
+
return value1;
|
|
634
|
+
let datetime1 = this.ensureDatetime(value1);
|
|
635
|
+
let datetime2 = this.ensureDatetime(value2);
|
|
636
|
+
return datetime1 - datetime2;
|
|
637
|
+
},
|
|
638
|
+
dateAdd: function (value1, value2) {
|
|
639
|
+
if (value1 === null)
|
|
640
|
+
return null;
|
|
641
|
+
if (value2 === null)
|
|
642
|
+
return value1;
|
|
643
|
+
let date = this.ensureDate(value1);
|
|
644
|
+
let days = this.ensureInteger(value2);
|
|
645
|
+
return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate() + days, 0, 0, 0 ,0));
|
|
646
|
+
},
|
|
647
|
+
dateDiff: function (value1, value2) {
|
|
648
|
+
if (value1 === null)
|
|
649
|
+
return null;
|
|
650
|
+
if (value2 === null)
|
|
651
|
+
return value1;
|
|
652
|
+
let date1 = this.ensureDate(value1);
|
|
653
|
+
let date2 = this.ensureDate(value2);
|
|
654
|
+
return (date1 - date2) / 86400000;
|
|
655
|
+
},
|
|
656
|
+
timeAdd: function (value1, value2) {
|
|
657
|
+
if (value1 === null)
|
|
658
|
+
return null;
|
|
659
|
+
if (value2 === null)
|
|
660
|
+
return value1;
|
|
661
|
+
let time = this.ensureTime(value1);
|
|
662
|
+
let milliseconds = this.ensureInteger(value2);
|
|
663
|
+
return new Date(Date.UTC(1970, 0, 1, time.getUTCHours(), time.getUTCMinutes(), time.getUTCSeconds(), time.getUTCMilliseconds() + milliseconds));
|
|
664
|
+
},
|
|
665
|
+
timeDiff: function (value1, value2) {
|
|
666
|
+
if (value1 === null)
|
|
667
|
+
return null;
|
|
668
|
+
if (value2 === null)
|
|
669
|
+
return value1;
|
|
670
|
+
let time1 = this.ensureTime(value1);
|
|
671
|
+
let time2 = this.ensureTime(value2);
|
|
672
|
+
return time1 - time2;
|
|
673
|
+
},
|
|
674
|
+
jsonParse: function (value) {
|
|
675
|
+
if (value === undefined)
|
|
676
|
+
throw this.errorUndefinedArgument('value');
|
|
677
|
+
if (value === null)
|
|
678
|
+
return null;
|
|
679
|
+
let obj = JSON.parse(this.ensureString(value));
|
|
680
|
+
return obj;
|
|
681
|
+
},
|
|
682
|
+
jsonStringify: function (value, spaces) {
|
|
683
|
+
if (value === undefined)
|
|
684
|
+
throw this.errorUndefinedArgument('value');
|
|
685
|
+
if (value === null)
|
|
686
|
+
return null;
|
|
687
|
+
if (spaces === undefined || spaces === null) {
|
|
688
|
+
let stringified = JSON.stringify(value);
|
|
689
|
+
return stringified;
|
|
690
|
+
} else {
|
|
691
|
+
let identSpaces = this.ensureInteger(spaces);
|
|
692
|
+
let stringified = JSON.stringify(value, null, identSpaces);
|
|
693
|
+
return stringified;
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
base64Decode: function (value) {
|
|
697
|
+
if (value === undefined)
|
|
698
|
+
throw this.errorUndefinedArgument('value');
|
|
699
|
+
if (value === null)
|
|
700
|
+
return null;
|
|
701
|
+
let ensuredString = this.ensureString(value);
|
|
702
|
+
return Buffer.from(ensuredString, 'base64');
|
|
703
|
+
},
|
|
704
|
+
base64Encode: function (value) {
|
|
705
|
+
if (value === undefined)
|
|
706
|
+
throw this.errorUndefinedArgument('value');
|
|
707
|
+
if (value === null)
|
|
708
|
+
return null;
|
|
709
|
+
let ensuredBinary = this.ensureBinary(value);
|
|
710
|
+
return Buffer.from(ensuredBinary).toString('base64');
|
|
711
|
+
},
|
|
712
|
+
apply: function (obj1, obj2) {
|
|
713
|
+
let result = {};
|
|
714
|
+
if (obj1 === null)
|
|
715
|
+
return null;
|
|
716
|
+
let obj1Ok = this.tryObject(obj1);
|
|
717
|
+
if (obj1Ok === null)
|
|
718
|
+
throw fnError('InvalidObject', { value: obj1 });
|
|
719
|
+
for (let key in obj1Ok) {
|
|
720
|
+
result[key] = obj1Ok[key];
|
|
721
|
+
}
|
|
722
|
+
if (obj2 !== null) {
|
|
723
|
+
let obj2Ok = this.tryObject(obj2);
|
|
724
|
+
if (obj2Ok === null)
|
|
725
|
+
throw fnError('InvalidObject', { value: obj2 });
|
|
726
|
+
for (let key in obj2Ok) {
|
|
727
|
+
result[key] = obj2Ok[key];
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
return result;
|
|
731
|
+
},
|
|
732
|
+
stringFormat: function () {
|
|
733
|
+
if (arguments.length === 0) {
|
|
734
|
+
return null;
|
|
735
|
+
}
|
|
736
|
+
else if (arguments.length === 1) {
|
|
737
|
+
return arguments[0];
|
|
738
|
+
}
|
|
739
|
+
else {
|
|
740
|
+
let result = arguments[0];
|
|
741
|
+
for (let i = 1; i < arguments.length; i++) {
|
|
742
|
+
result = result.split('%' + i + '$s').join(arguments[i]);
|
|
743
|
+
}
|
|
744
|
+
return result;
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
loadResource: function (name) {
|
|
748
|
+
return Promise.resolve()
|
|
749
|
+
.then(function () {
|
|
750
|
+
if (name.indexOf('.') === -1) {
|
|
751
|
+
return require('../resources/main/' + name + '.json');
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
let nameParts = name.split('.');
|
|
755
|
+
return require('../resources/edges/' + nameParts[0] + '/' + nameParts[1] + '.json');
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
},
|
|
759
|
+
existsPath: async function (sourcePath) {
|
|
760
|
+
const fullPath = this.resolvePath(sourcePath)
|
|
761
|
+
return new Promise((resolve) => {
|
|
762
|
+
Fs.access(fullPath, (err) => {
|
|
763
|
+
if (err) {
|
|
764
|
+
resolve(false)
|
|
765
|
+
} else {
|
|
766
|
+
resolve(true)
|
|
767
|
+
}
|
|
768
|
+
})
|
|
769
|
+
})
|
|
770
|
+
},
|
|
771
|
+
resolvePath: function (source) {
|
|
772
|
+
const _source = source.trim()
|
|
773
|
+
if (_source.startsWith('.')) {
|
|
774
|
+
return Path.join(process.cwd(), source)
|
|
775
|
+
}
|
|
776
|
+
if (_source.startsWith('~')) {
|
|
777
|
+
return _source.replace('~', process.env.HOME)
|
|
778
|
+
}
|
|
779
|
+
return source
|
|
780
|
+
},
|
|
781
|
+
readFile: async function(filePath) {
|
|
782
|
+
const fullPath = this.resolvePath(filePath)
|
|
783
|
+
if (!await this.existsPath(fullPath)) {
|
|
784
|
+
return null
|
|
785
|
+
}
|
|
786
|
+
return new Promise((resolve, reject) => {
|
|
787
|
+
Fs.readFile(fullPath, (err, data) => err ? reject(err) : resolve(data.toString('utf8')))
|
|
788
|
+
})
|
|
789
|
+
},
|
|
790
|
+
tryDatetime: function (value) {
|
|
791
|
+
let strType = toString.call(value);
|
|
792
|
+
if (strType === '[object Date]') {
|
|
793
|
+
return value;
|
|
794
|
+
}
|
|
795
|
+
else if (strType === '[object String]') {
|
|
796
|
+
let match = /^(\d{4})-(\d{1,2})-(\d{1,2})[T,\s](\d{1,2})\:(\d{1,2})\:(\d{1,2})\.?(\d+)?Z?$/.exec(value);
|
|
797
|
+
if (match) {
|
|
798
|
+
const probableDate = new Date(value);
|
|
799
|
+
if (probableDate.toString() !== 'Invalid Date') {
|
|
800
|
+
return probableDate;
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
return null;
|
|
805
|
+
},
|
|
806
|
+
convertValueToDb: function (value) {
|
|
807
|
+
if (_.isUndefined(value)) {
|
|
808
|
+
return null;
|
|
809
|
+
}
|
|
810
|
+
if(_.isNull(value)) {
|
|
811
|
+
return null;
|
|
812
|
+
}
|
|
813
|
+
if (value === true) {
|
|
814
|
+
return 1;
|
|
815
|
+
}
|
|
816
|
+
if (value === false) {
|
|
817
|
+
return 0;
|
|
818
|
+
}
|
|
819
|
+
let datetime = this.tryDatetime(value);
|
|
820
|
+
if (datetime) {
|
|
821
|
+
return datetime;
|
|
822
|
+
// let result = datetime.toJSON();
|
|
823
|
+
// if (result.length === 24) {
|
|
824
|
+
// result = result.substring(0, 19);
|
|
825
|
+
// }
|
|
826
|
+
// return result;
|
|
827
|
+
}
|
|
828
|
+
return value;
|
|
829
|
+
},
|
|
830
|
+
/**
|
|
831
|
+
* @param {[{name: string, value}]} parameters
|
|
832
|
+
* @returns {Object}
|
|
833
|
+
*/
|
|
834
|
+
reduceParameters: function(parameters,options) {
|
|
835
|
+
const acc = {};
|
|
836
|
+
for ( let i=0; i<parameters.length; i++) {
|
|
837
|
+
const parameter = parameters[i];
|
|
838
|
+
acc[parameter.name] = this.convertValueToDb(parameter.value);
|
|
839
|
+
}
|
|
840
|
+
return acc;
|
|
841
|
+
// _.reduce(parameters, (acc, cur) => {
|
|
842
|
+
// acc[cur.name] = convertValueToDb(cur.value);
|
|
843
|
+
// return acc;
|
|
844
|
+
// }, {});
|
|
845
|
+
}
|
|
846
|
+
}
|