@syncbridge/common 0.12.4 → 0.12.6
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/constants.js
CHANGED
|
@@ -92,6 +92,12 @@ __decorate([
|
|
|
92
92
|
}),
|
|
93
93
|
__metadata("design:type", Boolean)
|
|
94
94
|
], VariableMetadata.prototype, "isArray", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
ApiField({
|
|
97
|
+
description: 'Determines if "null" values is allowed',
|
|
98
|
+
}),
|
|
99
|
+
__metadata("design:type", Boolean)
|
|
100
|
+
], VariableMetadata.prototype, "nullable", void 0);
|
|
95
101
|
__decorate([
|
|
96
102
|
ApiField({
|
|
97
103
|
description: 'Minimum number of items in the array. Available if isArray is true',
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncbridge/common",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.6",
|
|
4
4
|
"description": "SyncBridge Common utilities",
|
|
5
5
|
"author": "Panates Inc",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@jsopen/objects": "^2.2.
|
|
8
|
+
"@jsopen/objects": "^2.2.2",
|
|
9
9
|
"fast-deep-equal": "^3.1.3",
|
|
10
10
|
"node-events-async": "^1.5.2",
|
|
11
11
|
"caller-callsite": "^6.0.0",
|
|
12
12
|
"reflect-metadata": "^0.2.2",
|
|
13
|
-
"semver": "^7.8.
|
|
13
|
+
"semver": "^7.8.5",
|
|
14
14
|
"ts-gems": "^3.12.0",
|
|
15
|
-
"valgen": "^6.2.
|
|
15
|
+
"valgen": "^6.2.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@opra/common": ">=1.17.1 <2"
|
package/utils/decode-profile.js
CHANGED
|
@@ -149,71 +149,77 @@ function _decodeVariables(stackExecutor, codec, metadata, profile, options) {
|
|
|
149
149
|
stackExecutor.execute(k, () => {
|
|
150
150
|
if (defVariable == null)
|
|
151
151
|
return;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
let valueFn = isAny;
|
|
153
|
+
/* If variable is ignored and no default value is set, field should be undefined */
|
|
154
|
+
if (defVariable.ignored && defVariable.default === undefined) {
|
|
155
|
+
target[k] = vg.isUndefined({ coerce: true });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
/* If variable is ignored and a default value is set, field should be set to default value */
|
|
159
|
+
if (defVariable.ignored && defVariable.default !== undefined) {
|
|
160
|
+
if (defVariable.default === null) {
|
|
161
|
+
target[k] = null;
|
|
155
162
|
return;
|
|
156
|
-
|
|
163
|
+
}
|
|
164
|
+
valueFn = vg.fixed(defVariable.default);
|
|
157
165
|
}
|
|
158
166
|
switch (defVariable.type) {
|
|
159
167
|
case VariableType.String: {
|
|
160
168
|
switch (defVariable.format) {
|
|
161
169
|
case 'hex':
|
|
162
|
-
|
|
170
|
+
valueFn = isHex;
|
|
163
171
|
break;
|
|
164
172
|
case 'base64':
|
|
165
|
-
|
|
173
|
+
valueFn = isBase64;
|
|
166
174
|
break;
|
|
167
175
|
case 'url':
|
|
168
|
-
|
|
176
|
+
valueFn = isURL;
|
|
169
177
|
break;
|
|
170
178
|
case 'email':
|
|
171
|
-
|
|
179
|
+
valueFn = isEmail;
|
|
172
180
|
break;
|
|
173
181
|
case 'date':
|
|
174
|
-
|
|
182
|
+
valueFn = vg.isDateString({
|
|
175
183
|
precisionMin: 'day',
|
|
176
184
|
precisionMax: 'day',
|
|
177
185
|
trim: true,
|
|
178
|
-
})
|
|
186
|
+
});
|
|
179
187
|
break;
|
|
180
188
|
case 'date-time':
|
|
181
|
-
|
|
189
|
+
valueFn = isDateString;
|
|
182
190
|
break;
|
|
183
191
|
case 'time':
|
|
184
|
-
|
|
192
|
+
valueFn = isTime;
|
|
185
193
|
break;
|
|
186
194
|
default:
|
|
187
|
-
|
|
195
|
+
valueFn = isString;
|
|
188
196
|
}
|
|
189
|
-
if (defVariable.pattern)
|
|
190
|
-
fns.push(vg.matches(defVariable.pattern));
|
|
191
197
|
break;
|
|
192
198
|
}
|
|
193
199
|
case VariableType.Secret: {
|
|
194
|
-
|
|
200
|
+
valueFn = isString;
|
|
195
201
|
if (options?.cryptoSecretKey) {
|
|
196
202
|
if (codec === 'decode')
|
|
197
|
-
|
|
203
|
+
valueFn = secretDecryptor(options.cryptoSecretKey);
|
|
198
204
|
else
|
|
199
|
-
|
|
205
|
+
valueFn = secretEncryptor(options.cryptoSecretKey);
|
|
200
206
|
}
|
|
201
207
|
break;
|
|
202
208
|
}
|
|
203
209
|
case VariableType.Number: {
|
|
204
|
-
|
|
210
|
+
valueFn = isNumber;
|
|
205
211
|
break;
|
|
206
212
|
}
|
|
207
213
|
case VariableType.BigInt: {
|
|
208
|
-
|
|
214
|
+
valueFn = isBigint;
|
|
209
215
|
break;
|
|
210
216
|
}
|
|
211
217
|
case VariableType.Boolean: {
|
|
212
|
-
|
|
218
|
+
valueFn = isBoolean;
|
|
213
219
|
break;
|
|
214
220
|
}
|
|
215
221
|
case VariableType.Enum: {
|
|
216
|
-
|
|
222
|
+
valueFn = vg.isEnum(defVariable.enumValues);
|
|
217
223
|
break;
|
|
218
224
|
}
|
|
219
225
|
case VariableType.Nested: {
|
|
@@ -221,50 +227,61 @@ function _decodeVariables(stackExecutor, codec, metadata, profile, options) {
|
|
|
221
227
|
delete target[k];
|
|
222
228
|
}
|
|
223
229
|
else {
|
|
224
|
-
|
|
230
|
+
valueFn = validator(old => {
|
|
225
231
|
if (!old)
|
|
226
232
|
return;
|
|
227
233
|
const v = {};
|
|
228
234
|
process(defVariable.variables, v, old);
|
|
229
235
|
return v;
|
|
230
|
-
})
|
|
231
|
-
// fns.push(isAny);
|
|
236
|
+
});
|
|
232
237
|
}
|
|
233
238
|
break;
|
|
234
239
|
}
|
|
235
|
-
default:
|
|
236
|
-
fns.push(isAny);
|
|
237
240
|
}
|
|
241
|
+
/* */
|
|
242
|
+
let hasDefault = false;
|
|
243
|
+
if (defVariable.default !== undefined &&
|
|
244
|
+
(options?.setDefaultValues ?? true)) {
|
|
245
|
+
hasDefault = true;
|
|
246
|
+
valueFn = vg.required(valueFn, { default: defVariable.default });
|
|
247
|
+
}
|
|
248
|
+
/* Validation rules for each data value */
|
|
238
249
|
if (codec === 'decode') {
|
|
250
|
+
const fns = [];
|
|
251
|
+
if (defVariable.type === VariableType.String) {
|
|
252
|
+
if (defVariable.pattern)
|
|
253
|
+
fns.push(vg.matches(defVariable.pattern));
|
|
254
|
+
}
|
|
239
255
|
if (defVariable.minValue)
|
|
240
256
|
fns.push(vg.isGte(defVariable.minValue));
|
|
241
257
|
if (defVariable.maxValue)
|
|
242
258
|
fns.push(vg.isLt(defVariable.maxValue));
|
|
259
|
+
if (fns.length)
|
|
260
|
+
valueFn =
|
|
261
|
+
fns.length > 1 ? vg.pipe(fns, { returnIndex: 0 }) : fns[0];
|
|
243
262
|
}
|
|
244
|
-
let fn = fns.length > 1 ? vg.pipe(fns) : fns[0];
|
|
245
263
|
if (defVariable.isArray) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
264
|
+
valueFn = vg.isArray(valueFn);
|
|
265
|
+
/* Validation rules for each array */
|
|
266
|
+
if (codec === 'decode') {
|
|
267
|
+
const fns = [];
|
|
268
|
+
if (defVariable.minOccurs !== null || defVariable.maxOccurs) {
|
|
269
|
+
if (defVariable.minOccurs != null)
|
|
270
|
+
fns.push(vg.lengthMin(1));
|
|
271
|
+
if (defVariable.maxOccurs != null)
|
|
272
|
+
fns.push(vg.lengthMax(defVariable.maxOccurs));
|
|
273
|
+
}
|
|
274
|
+
if (fns.length)
|
|
275
|
+
valueFn =
|
|
276
|
+
fns.length > 1 ? vg.pipe(fns, { returnIndex: 0 }) : fns[0];
|
|
254
277
|
}
|
|
255
278
|
}
|
|
256
|
-
if (
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
: vg.optional(fn);
|
|
279
|
+
if (!defVariable.required && !hasDefault) {
|
|
280
|
+
valueFn = defVariable.nullable
|
|
281
|
+
? vg.nullable(valueFn)
|
|
282
|
+
: vg.optional(valueFn);
|
|
261
283
|
}
|
|
262
|
-
|
|
263
|
-
fn =
|
|
264
|
-
!defVariable.required || defVariable.default != null
|
|
265
|
-
? vg.optional(fn)
|
|
266
|
-
: vg.required(fn);
|
|
267
|
-
target[k] = fn(oldVals?.[k], { coerce: true });
|
|
284
|
+
target[k] = valueFn(oldVals?.[k], { coerce: true });
|
|
268
285
|
});
|
|
269
286
|
}
|
|
270
287
|
};
|