@resistdesign/voltra 3.0.0-alpha.33 → 3.0.0-alpha.34
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 +72 -2
- package/api/index.js +49 -36
- package/app/forms/Engine.d.ts +3 -0
- package/app/forms/UI.d.ts +7 -1
- package/app/forms/core/createAutoField.d.ts +11 -3
- package/app/forms/core/createFormRenderer.d.ts +3 -2
- package/app/forms/core/mergeSuites.d.ts +3 -2
- package/app/forms/core/resolveSuite.d.ts +2 -1
- package/app/forms/core/types.d.ts +20 -9
- package/app/forms/types.d.ts +34 -7
- package/app/index.js +21 -12
- package/app/utils/ApplicationState.d.ts +1 -1
- package/build/index.js +2 -2
- package/chunk-4PV5LPTT.js +1144 -0
- package/{chunk-FQMZMCXU.js → chunk-RUVFOXCR.js} +1 -1
- package/chunk-TJFTWPXQ.js +39 -0
- package/{chunk-LGM75I6P.js → chunk-WTD5BBJP.js} +223 -38
- package/common/Logging/Utils.d.ts +0 -9
- package/common/TypeParsing/TypeInfo.d.ts +20 -0
- package/common/TypeParsing/Validation.d.ts +152 -22
- package/common/index.js +6 -7
- package/iac/packs/auth.d.ts +10 -4
- package/iac-packs/index.d.ts +1 -0
- package/native/forms/UI.d.ts +8 -2
- package/native/forms/createNativeFormRenderer.d.ts +1 -1
- package/native/forms/index.d.ts +16 -0
- package/native/forms/suite.d.ts +1 -1
- package/native/index.js +71 -40
- package/native/testing/react-native.d.ts +33 -15
- package/native/utils/index.d.ts +13 -1
- package/package.json +1 -1
- package/web/forms/UI.d.ts +8 -2
- package/web/forms/createWebFormRenderer.d.ts +1 -1
- package/web/forms/suite.d.ts +1 -1
- package/web/index.js +234 -113
- package/web/utils/Route.d.ts +9 -3
- package/web/utils/index.d.ts +1 -0
- package/chunk-G5CLUK4Y.js +0 -621
- package/chunk-IWRHGGGH.js +0 -10
- package/chunk-WELZGQDJ.js +0 -456
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/app/utils/easy-layout/computeTracks.ts
|
|
2
|
+
var computeTrackPixels = ({
|
|
3
|
+
tracks,
|
|
4
|
+
totalPx,
|
|
5
|
+
gapPx = 0,
|
|
6
|
+
paddingPx = 0
|
|
7
|
+
}) => {
|
|
8
|
+
if (!tracks.length) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const gapsPx = Math.max(0, tracks.length - 1) * Math.max(0, gapPx);
|
|
12
|
+
const usablePx = Math.max(0, totalPx - Math.max(0, paddingPx) * 2 - gapsPx);
|
|
13
|
+
let fixedPx = 0;
|
|
14
|
+
let frTotal = 0;
|
|
15
|
+
for (const track of tracks) {
|
|
16
|
+
if (track.kind === "px") {
|
|
17
|
+
fixedPx += track.value;
|
|
18
|
+
} else if (track.kind === "pct") {
|
|
19
|
+
fixedPx += usablePx * track.value / 100;
|
|
20
|
+
} else {
|
|
21
|
+
frTotal += track.value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const remainderPx = Math.max(0, usablePx - fixedPx);
|
|
25
|
+
return tracks.map((track) => {
|
|
26
|
+
if (track.kind === "px") {
|
|
27
|
+
return track.value;
|
|
28
|
+
}
|
|
29
|
+
if (track.kind === "pct") {
|
|
30
|
+
return usablePx * track.value / 100;
|
|
31
|
+
}
|
|
32
|
+
if (frTotal <= 0) {
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
return remainderPx * track.value / frTotal;
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { computeTrackPixels };
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { getPathString } from './chunk-GYWRAW3Y.js';
|
|
2
2
|
|
|
3
|
+
// src/common/TypeParsing/TypeInfo.ts
|
|
4
|
+
var TypeOperation = /* @__PURE__ */ ((TypeOperation2) => {
|
|
5
|
+
TypeOperation2["CREATE"] = "CREATE";
|
|
6
|
+
TypeOperation2["READ"] = "READ";
|
|
7
|
+
TypeOperation2["UPDATE"] = "UPDATE";
|
|
8
|
+
TypeOperation2["DELETE"] = "DELETE";
|
|
9
|
+
return TypeOperation2;
|
|
10
|
+
})(TypeOperation || {});
|
|
11
|
+
|
|
3
12
|
// src/common/TypeParsing/Validation.ts
|
|
4
13
|
var RelationshipValidationType = /* @__PURE__ */ ((RelationshipValidationType2) => {
|
|
5
14
|
RelationshipValidationType2["INCLUDE"] = "INCLUDE";
|
|
@@ -13,8 +22,23 @@ var PRIMITIVE_ERROR_MESSAGE_CONSTANTS = {
|
|
|
13
22
|
number: "NOT_A_NUMBER",
|
|
14
23
|
boolean: "NOT_A_BOOLEAN"
|
|
15
24
|
};
|
|
25
|
+
var DENIED_TYPE_OPERATIONS = {
|
|
26
|
+
CREATE: "DENIED_TYPE_OPERATION_CREATE",
|
|
27
|
+
READ: "DENIED_TYPE_OPERATION_READ",
|
|
28
|
+
UPDATE: "DENIED_TYPE_OPERATION_UPDATE",
|
|
29
|
+
DELETE: "DENIED_TYPE_OPERATION_DELETE"
|
|
30
|
+
};
|
|
16
31
|
var ERROR_MESSAGE_CONSTANTS = {
|
|
17
|
-
|
|
32
|
+
NONE: "NONE",
|
|
33
|
+
INVALID_CUSTOM_TYPE,
|
|
34
|
+
[PRIMITIVE_ERROR_MESSAGE_CONSTANTS.string]: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.string,
|
|
35
|
+
[PRIMITIVE_ERROR_MESSAGE_CONSTANTS.number]: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.number,
|
|
36
|
+
[PRIMITIVE_ERROR_MESSAGE_CONSTANTS.boolean]: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.boolean,
|
|
37
|
+
[DENIED_TYPE_OPERATIONS.CREATE]: DENIED_TYPE_OPERATIONS.CREATE,
|
|
38
|
+
[DENIED_TYPE_OPERATIONS.READ]: DENIED_TYPE_OPERATIONS.READ,
|
|
39
|
+
[DENIED_TYPE_OPERATIONS.UPDATE]: DENIED_TYPE_OPERATIONS.UPDATE,
|
|
40
|
+
[DENIED_TYPE_OPERATIONS.DELETE]: DENIED_TYPE_OPERATIONS.DELETE,
|
|
41
|
+
MISSING_FIELD_VALUE: "MISSING_FIELD_VALUE",
|
|
18
42
|
INVALID_OPTION: "INVALID_OPTION",
|
|
19
43
|
INVALID_FIELD: "INVALID_FIELD",
|
|
20
44
|
RELATIONSHIP_VALUES_ARE_STRICTLY_EXCLUDED: "RELATIONSHIP_VALUES_ARE_STRICTLY_EXCLUDED",
|
|
@@ -22,34 +46,61 @@ var ERROR_MESSAGE_CONSTANTS = {
|
|
|
22
46
|
NO_UNION_TYPE_MATCHED: "NO_UNION_TYPE_MATCHED",
|
|
23
47
|
TYPE_DOES_NOT_EXIST: "TYPE_DOES_NOT_EXIST",
|
|
24
48
|
INVALID_PATTERN: "INVALID_PATTERN",
|
|
25
|
-
VALUE_DOES_NOT_MATCH_PATTERN: "VALUE_DOES_NOT_MATCH_PATTERN"
|
|
49
|
+
VALUE_DOES_NOT_MATCH_PATTERN: "VALUE_DOES_NOT_MATCH_PATTERN",
|
|
50
|
+
VALUE_BELOW_MINIMUM: "VALUE_BELOW_MINIMUM",
|
|
51
|
+
VALUE_ABOVE_MAXIMUM: "VALUE_ABOVE_MAXIMUM"
|
|
26
52
|
};
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
DELETE: "DENIED_TYPE_OPERATION_DELETE"
|
|
53
|
+
var TYPE_KEYWORD_ERROR_MESSAGE_CONSTANTS = {
|
|
54
|
+
string: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.string,
|
|
55
|
+
number: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.number,
|
|
56
|
+
boolean: PRIMITIVE_ERROR_MESSAGE_CONSTANTS.boolean
|
|
32
57
|
};
|
|
58
|
+
var ARRAY_ITEM_ERROR_MAP_KEY = "__arrayItemErrors__";
|
|
59
|
+
var getErrorDescriptor = (code = ERROR_MESSAGE_CONSTANTS.NONE, values) => ({
|
|
60
|
+
code,
|
|
61
|
+
values
|
|
62
|
+
});
|
|
63
|
+
var getNoErrorDescriptor = () => getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.NONE);
|
|
64
|
+
var isArrayErrorDescriptorCollection = (value) => typeof value === "object" && value !== null && "itemErrorMap" in value;
|
|
65
|
+
var getErrorDescriptors = (values = []) => values.filter(
|
|
66
|
+
(value) => !isArrayErrorDescriptorCollection(value)
|
|
67
|
+
);
|
|
68
|
+
var getArrayItemErrorMap = (values = []) => values.reduce((acc, value) => {
|
|
69
|
+
if (isArrayErrorDescriptorCollection(value)) {
|
|
70
|
+
for (const [indexKey, descriptors] of Object.entries(value.itemErrorMap)) {
|
|
71
|
+
const index = Number(indexKey);
|
|
72
|
+
if (!Number.isFinite(index)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
acc[index] = [...acc[index] ?? [], ...descriptors];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return acc;
|
|
79
|
+
}, {});
|
|
33
80
|
var validateValueMatchesPattern = (typeName, value, pattern) => {
|
|
34
81
|
const results = {
|
|
35
82
|
typeName,
|
|
36
83
|
valid: true,
|
|
37
|
-
error:
|
|
84
|
+
error: getNoErrorDescriptor(),
|
|
38
85
|
errorMap: {}
|
|
39
86
|
};
|
|
40
87
|
const valueSupplied = typeof value !== "undefined";
|
|
41
88
|
const patternSupplied = typeof pattern === "string" && pattern.trim() !== "";
|
|
42
|
-
if (
|
|
89
|
+
if (valueSupplied && patternSupplied) {
|
|
43
90
|
try {
|
|
44
91
|
const regex = new RegExp(pattern);
|
|
45
92
|
const testResult = typeof value === "string" && regex.test(value);
|
|
46
93
|
if (!testResult) {
|
|
47
94
|
results.valid = false;
|
|
48
|
-
results.error =
|
|
95
|
+
results.error = getErrorDescriptor(
|
|
96
|
+
ERROR_MESSAGE_CONSTANTS.VALUE_DOES_NOT_MATCH_PATTERN
|
|
97
|
+
);
|
|
49
98
|
}
|
|
50
99
|
} catch (e) {
|
|
51
100
|
results.valid = false;
|
|
52
|
-
results.error =
|
|
101
|
+
results.error = getErrorDescriptor(
|
|
102
|
+
ERROR_MESSAGE_CONSTANTS.INVALID_PATTERN
|
|
103
|
+
);
|
|
53
104
|
}
|
|
54
105
|
}
|
|
55
106
|
return results;
|
|
@@ -90,23 +141,40 @@ var validateTypeInfoFieldValue = (value, typeInfoField, typeInfoMap, ignoreArray
|
|
|
90
141
|
array,
|
|
91
142
|
optional,
|
|
92
143
|
possibleValues,
|
|
93
|
-
tags: {
|
|
144
|
+
tags: {
|
|
145
|
+
customType,
|
|
146
|
+
validation: {
|
|
147
|
+
emptyArrayIsValid: emptyArrayIsValidOverride = void 0
|
|
148
|
+
} = {},
|
|
149
|
+
constraints: {
|
|
150
|
+
pattern = void 0,
|
|
151
|
+
min = void 0,
|
|
152
|
+
max = void 0
|
|
153
|
+
} = {}
|
|
154
|
+
} = {}
|
|
94
155
|
} = typeInfoField;
|
|
95
156
|
const results = {
|
|
96
157
|
typeName: typeReference ?? type,
|
|
97
158
|
valid: true,
|
|
98
|
-
error:
|
|
159
|
+
error: getNoErrorDescriptor(),
|
|
99
160
|
errorMap: {}
|
|
100
161
|
};
|
|
101
162
|
const requiredValueAllowed = !typeReference || relationshipValidationType === "INCLUDE" /* INCLUDE */;
|
|
102
163
|
const valueIsUndefined = typeof value === "undefined";
|
|
103
164
|
const valueIsNull = value === null;
|
|
104
165
|
const canSkipValidation = itemIsPartial && (valueIsUndefined || valueIsNull) || optional && valueIsUndefined;
|
|
166
|
+
const emptyArrayIsValid = emptyArrayIsValidOverride ?? false;
|
|
105
167
|
if (canSkipValidation) {
|
|
106
168
|
results.valid = true;
|
|
107
169
|
} else if (requiredValueAllowed && !itemIsPartial && !optional && !hasValue(value)) {
|
|
108
170
|
results.valid = false;
|
|
109
|
-
results.error = ERROR_MESSAGE_CONSTANTS.
|
|
171
|
+
results.error = getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.MISSING_FIELD_VALUE);
|
|
172
|
+
} else if (array && !ignoreArray && !Array.isArray(value)) {
|
|
173
|
+
results.valid = false;
|
|
174
|
+
results.error = getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.INVALID_TYPE);
|
|
175
|
+
} else if (array && !ignoreArray && !optional && Array.isArray(value) && value.length === 0 && !emptyArrayIsValid) {
|
|
176
|
+
results.valid = false;
|
|
177
|
+
results.error = getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.MISSING_FIELD_VALUE);
|
|
110
178
|
} else if (array && !ignoreArray) {
|
|
111
179
|
const {
|
|
112
180
|
valid: validArray,
|
|
@@ -149,14 +217,18 @@ var validateTypeInfoFieldValue = (value, typeInfoField, typeInfoMap, ignoreArray
|
|
|
149
217
|
const valueSupplied = typeof value !== "undefined";
|
|
150
218
|
if (valueSupplied) {
|
|
151
219
|
results.valid = false;
|
|
152
|
-
results.error =
|
|
220
|
+
results.error = getErrorDescriptor(
|
|
221
|
+
ERROR_MESSAGE_CONSTANTS.RELATIONSHIP_VALUES_ARE_STRICTLY_EXCLUDED
|
|
222
|
+
);
|
|
153
223
|
}
|
|
154
224
|
} else if (relationshipValidationType === "EXCLUDE" /* EXCLUDE */) {
|
|
155
225
|
results.valid = getValidityValue(results.valid, true);
|
|
156
226
|
}
|
|
157
227
|
} else if (possibleValues && !possibleValues.includes(value)) {
|
|
158
228
|
results.valid = false;
|
|
159
|
-
results.error =
|
|
229
|
+
results.error = getErrorDescriptor(
|
|
230
|
+
ERROR_MESSAGE_CONSTANTS.INVALID_OPTION
|
|
231
|
+
);
|
|
160
232
|
} else {
|
|
161
233
|
const pendingValid = validateKeywordType(value, type);
|
|
162
234
|
const customValid = validateCustomType(
|
|
@@ -167,14 +239,33 @@ var validateTypeInfoFieldValue = (value, typeInfoField, typeInfoMap, ignoreArray
|
|
|
167
239
|
results.valid = getValidityValue(results.valid, pendingValid);
|
|
168
240
|
results.valid = getValidityValue(results.valid, customValid);
|
|
169
241
|
if (type === "string" && typeof pattern === "string") {
|
|
170
|
-
const { valid: patternValid, error: patternError } = validateValueMatchesPattern(value, pattern);
|
|
242
|
+
const { valid: patternValid, error: patternError } = validateValueMatchesPattern(typeReference ?? type, value, pattern);
|
|
171
243
|
results.valid = getValidityValue(results.valid, patternValid);
|
|
172
244
|
results.error = patternError;
|
|
173
245
|
}
|
|
246
|
+
if (type === "number" && typeof value === "number") {
|
|
247
|
+
if (typeof min === "number" && value < min) {
|
|
248
|
+
results.valid = false;
|
|
249
|
+
results.error = getErrorDescriptor(
|
|
250
|
+
ERROR_MESSAGE_CONSTANTS.VALUE_BELOW_MINIMUM,
|
|
251
|
+
[`${min}`]
|
|
252
|
+
);
|
|
253
|
+
} else if (typeof max === "number" && value > max) {
|
|
254
|
+
results.valid = false;
|
|
255
|
+
results.error = getErrorDescriptor(
|
|
256
|
+
ERROR_MESSAGE_CONSTANTS.VALUE_ABOVE_MAXIMUM,
|
|
257
|
+
[`${max}`]
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
174
261
|
if (!customValid) {
|
|
175
|
-
results.error =
|
|
262
|
+
results.error = getErrorDescriptor(
|
|
263
|
+
ERROR_MESSAGE_CONSTANTS.INVALID_CUSTOM_TYPE
|
|
264
|
+
);
|
|
176
265
|
} else if (!results.valid) {
|
|
177
|
-
results.error = results.error ? results.error :
|
|
266
|
+
results.error = results.error.code !== ERROR_MESSAGE_CONSTANTS.NONE ? results.error : getErrorDescriptor(
|
|
267
|
+
TYPE_KEYWORD_ERROR_MESSAGE_CONSTANTS[type]
|
|
268
|
+
);
|
|
178
269
|
}
|
|
179
270
|
}
|
|
180
271
|
}
|
|
@@ -185,14 +276,15 @@ var validateArrayOfTypeInfoFieldValues = (values = [], typeInfoField, typeInfoMa
|
|
|
185
276
|
const results = {
|
|
186
277
|
typeName: typeReference ?? type,
|
|
187
278
|
valid: true,
|
|
188
|
-
error:
|
|
279
|
+
error: getNoErrorDescriptor(),
|
|
189
280
|
errorMap: {}
|
|
190
281
|
};
|
|
282
|
+
const itemErrorMap = {};
|
|
191
283
|
for (let i = 0; i < values.length; i++) {
|
|
192
284
|
const v = values[i];
|
|
193
285
|
const {
|
|
194
286
|
valid: indexValid,
|
|
195
|
-
error: indexError =
|
|
287
|
+
error: indexError = getNoErrorDescriptor(),
|
|
196
288
|
errorMap: indexErrorMap
|
|
197
289
|
} = validateTypeInfoFieldValue(
|
|
198
290
|
v,
|
|
@@ -206,18 +298,32 @@ var validateArrayOfTypeInfoFieldValues = (values = [], typeInfoField, typeInfoMa
|
|
|
206
298
|
itemIsPartial
|
|
207
299
|
);
|
|
208
300
|
results.valid = getValidityValue(results.valid, indexValid);
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
301
|
+
const indexErrors = [
|
|
302
|
+
...indexError.code !== ERROR_MESSAGE_CONSTANTS.NONE ? [indexError] : [],
|
|
303
|
+
...getErrorDescriptors(indexErrorMap[ARRAY_ITEM_ERROR_MAP_KEY] ?? []),
|
|
304
|
+
...Object.entries(indexErrorMap).filter(([key]) => key !== ARRAY_ITEM_ERROR_MAP_KEY).flatMap(([, entries]) => getErrorDescriptors(entries)).filter((descriptor) => descriptor.code !== ERROR_MESSAGE_CONSTANTS.NONE)
|
|
305
|
+
];
|
|
306
|
+
if (indexErrors.length) {
|
|
307
|
+
itemErrorMap[i] = indexErrors;
|
|
308
|
+
if (results.error.code === ERROR_MESSAGE_CONSTANTS.NONE) {
|
|
309
|
+
results.error = indexErrors[0];
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
for (const [er, entries] of Object.entries(indexErrorMap)) {
|
|
313
|
+
if (er === ARRAY_ITEM_ERROR_MAP_KEY) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
results.errorMap[getPathString([i, er])] = entries;
|
|
212
317
|
}
|
|
213
318
|
}
|
|
319
|
+
results.errorMap[ARRAY_ITEM_ERROR_MAP_KEY] = [{ itemErrorMap }];
|
|
214
320
|
return results;
|
|
215
321
|
};
|
|
216
322
|
var validateTypeInfoFieldOperationAllowed = (fieldName, fieldOperation, typeInfoField) => {
|
|
217
323
|
const results = {
|
|
218
324
|
typeName: null,
|
|
219
325
|
valid: true,
|
|
220
|
-
error:
|
|
326
|
+
error: getNoErrorDescriptor(),
|
|
221
327
|
errorMap: {}
|
|
222
328
|
};
|
|
223
329
|
if (fieldOperation && typeInfoField) {
|
|
@@ -230,7 +336,9 @@ var validateTypeInfoFieldOperationAllowed = (fieldName, fieldOperation, typeInfo
|
|
|
230
336
|
results.typeName = typeReference ?? type;
|
|
231
337
|
results.valid = !denied;
|
|
232
338
|
if (!results.valid) {
|
|
233
|
-
results.error =
|
|
339
|
+
results.error = getErrorDescriptor(
|
|
340
|
+
DENIED_TYPE_OPERATIONS[fieldOperation]
|
|
341
|
+
);
|
|
234
342
|
results.errorMap[fieldName] = [results.error];
|
|
235
343
|
}
|
|
236
344
|
}
|
|
@@ -240,14 +348,14 @@ var validateTypeOperationAllowed = (typeName, valueFields, typeOperation, typeIn
|
|
|
240
348
|
const results = {
|
|
241
349
|
typeName,
|
|
242
350
|
valid: true,
|
|
243
|
-
error:
|
|
351
|
+
error: getNoErrorDescriptor(),
|
|
244
352
|
errorMap: {}
|
|
245
353
|
};
|
|
246
354
|
const { fields = {}, tags = {} } = typeInfo;
|
|
247
355
|
const { deniedOperations: { [typeOperation]: denied = false } = {} } = tags;
|
|
248
356
|
if (denied) {
|
|
249
357
|
results.valid = false;
|
|
250
|
-
results.error = DENIED_TYPE_OPERATIONS[typeOperation];
|
|
358
|
+
results.error = getErrorDescriptor(DENIED_TYPE_OPERATIONS[typeOperation]);
|
|
251
359
|
} else {
|
|
252
360
|
for (const vF of valueFields) {
|
|
253
361
|
const vFieldInfo = fields[vF];
|
|
@@ -260,12 +368,75 @@ var validateTypeOperationAllowed = (typeName, valueFields, typeOperation, typeIn
|
|
|
260
368
|
}
|
|
261
369
|
return results;
|
|
262
370
|
};
|
|
371
|
+
var TYPE_INFO_DATA_ITEM_TYPE_NAME = "__TYPE_INFO_DATA_ITEM__";
|
|
372
|
+
var validateTypeInfoDataItem = (value = {}, typeInfo, customValidatorMap = {}, options) => {
|
|
373
|
+
const {
|
|
374
|
+
typeName = TYPE_INFO_DATA_ITEM_TYPE_NAME,
|
|
375
|
+
typeInfoMap = {},
|
|
376
|
+
strict = true,
|
|
377
|
+
customTypeValidators,
|
|
378
|
+
typeOperation = "CREATE" /* CREATE */,
|
|
379
|
+
relationshipValidationType = "STRICT_EXCLUDE" /* STRICT_EXCLUDE */,
|
|
380
|
+
itemIsPartial = typeOperation === "UPDATE" /* UPDATE */,
|
|
381
|
+
validateHidden = false,
|
|
382
|
+
validateReadonly = false
|
|
383
|
+
} = options ?? {};
|
|
384
|
+
const sourceFields = typeInfo.fields ?? {};
|
|
385
|
+
const normalizedFields = {};
|
|
386
|
+
for (const [fieldName, field] of Object.entries(sourceFields)) {
|
|
387
|
+
const validationTags = field.tags?.validation ?? {};
|
|
388
|
+
const shouldValidateHidden = validationTags.validateHidden ?? validateHidden;
|
|
389
|
+
const shouldValidateReadonly = validationTags.validateReadonly ?? validateReadonly;
|
|
390
|
+
const shouldSkipRequiredChecks = field.tags?.hidden && !shouldValidateHidden || field.readonly && !shouldValidateReadonly;
|
|
391
|
+
normalizedFields[fieldName] = shouldSkipRequiredChecks ? {
|
|
392
|
+
...field,
|
|
393
|
+
optional: true
|
|
394
|
+
} : field;
|
|
395
|
+
}
|
|
396
|
+
const normalizedTypeInfo = {
|
|
397
|
+
...typeInfo,
|
|
398
|
+
fields: normalizedFields
|
|
399
|
+
};
|
|
400
|
+
const results = validateTypeInfoValue(
|
|
401
|
+
value ?? {},
|
|
402
|
+
typeName,
|
|
403
|
+
{ ...typeInfoMap, [typeName]: normalizedTypeInfo },
|
|
404
|
+
strict,
|
|
405
|
+
customTypeValidators,
|
|
406
|
+
typeOperation,
|
|
407
|
+
relationshipValidationType,
|
|
408
|
+
itemIsPartial
|
|
409
|
+
);
|
|
410
|
+
for (const [fieldName, validator] of Object.entries(customValidatorMap)) {
|
|
411
|
+
const field = normalizedFields[fieldName];
|
|
412
|
+
if (!field) {
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
let error = getNoErrorDescriptor();
|
|
416
|
+
try {
|
|
417
|
+
error = validator(value[fieldName], field);
|
|
418
|
+
} catch (e) {
|
|
419
|
+
error = getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.INVALID_CUSTOM_TYPE);
|
|
420
|
+
}
|
|
421
|
+
if (error.code !== ERROR_MESSAGE_CONSTANTS.NONE) {
|
|
422
|
+
results.valid = false;
|
|
423
|
+
results.errorMap[fieldName] = [
|
|
424
|
+
...results.errorMap[fieldName] ?? [],
|
|
425
|
+
error
|
|
426
|
+
];
|
|
427
|
+
if (results.error.code === ERROR_MESSAGE_CONSTANTS.NONE) {
|
|
428
|
+
results.error = error;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return results;
|
|
433
|
+
};
|
|
263
434
|
var validateTypeInfoValue = (value, typeInfoFullName, typeInfoMap, strict = false, customValidators, typeOperation, relationshipValidationType, itemIsPartial) => {
|
|
264
435
|
const typeInfo = typeInfoMap[typeInfoFullName];
|
|
265
436
|
const results = {
|
|
266
437
|
typeName: typeInfoFullName,
|
|
267
438
|
valid: !!typeInfo,
|
|
268
|
-
error: !!typeInfo ?
|
|
439
|
+
error: !!typeInfo ? getNoErrorDescriptor() : getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.TYPE_DOES_NOT_EXIST),
|
|
269
440
|
errorMap: {}
|
|
270
441
|
};
|
|
271
442
|
if (typeInfo) {
|
|
@@ -288,7 +459,7 @@ var validateTypeInfoValue = (value, typeInfoFullName, typeInfoMap, strict = fals
|
|
|
288
459
|
const existingError = results.errorMap[oE] ?? [];
|
|
289
460
|
results.errorMap[oE] = existingError ? [...existingError, ...operationErrorMap[oE]] : operationErrorMap[oE];
|
|
290
461
|
}
|
|
291
|
-
if (!operationValid && operationError) {
|
|
462
|
+
if (!operationValid && operationError.code !== ERROR_MESSAGE_CONSTANTS.NONE) {
|
|
292
463
|
results.error = operationError;
|
|
293
464
|
}
|
|
294
465
|
}
|
|
@@ -303,7 +474,9 @@ var validateTypeInfoValue = (value, typeInfoFullName, typeInfoMap, strict = fals
|
|
|
303
474
|
}
|
|
304
475
|
if (!valid) {
|
|
305
476
|
results.valid = false;
|
|
306
|
-
results.error =
|
|
477
|
+
results.error = getErrorDescriptor(
|
|
478
|
+
ERROR_MESSAGE_CONSTANTS.NO_UNION_TYPE_MATCHED
|
|
479
|
+
);
|
|
307
480
|
}
|
|
308
481
|
} else if (strict) {
|
|
309
482
|
const knownFields = Object.keys(fields || {});
|
|
@@ -311,7 +484,9 @@ var validateTypeInfoValue = (value, typeInfoFullName, typeInfoMap, strict = fals
|
|
|
311
484
|
for (const vF of valueFields) {
|
|
312
485
|
if (!knownFields.includes(vF)) {
|
|
313
486
|
results.valid = false;
|
|
314
|
-
results.errorMap[vF] = [
|
|
487
|
+
results.errorMap[vF] = [
|
|
488
|
+
getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.INVALID_FIELD)
|
|
489
|
+
];
|
|
315
490
|
}
|
|
316
491
|
}
|
|
317
492
|
}
|
|
@@ -336,18 +511,28 @@ var validateTypeInfoValue = (value, typeInfoFullName, typeInfoMap, strict = fals
|
|
|
336
511
|
itemIsPartial
|
|
337
512
|
);
|
|
338
513
|
results.valid = getValidityValue(results.valid, fieldValid);
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
514
|
+
const fieldEntries = [fieldError];
|
|
515
|
+
const arrayItemErrorMap = getArrayItemErrorMap(
|
|
516
|
+
fieldErrorMap[ARRAY_ITEM_ERROR_MAP_KEY]
|
|
517
|
+
);
|
|
518
|
+
if (Object.keys(arrayItemErrorMap).length) {
|
|
519
|
+
fieldEntries.push({ itemErrorMap: arrayItemErrorMap });
|
|
520
|
+
}
|
|
521
|
+
results.errorMap[key] = fieldEntries;
|
|
522
|
+
for (const [fE, entries] of Object.entries(fieldErrorMap)) {
|
|
523
|
+
if (fE === ARRAY_ITEM_ERROR_MAP_KEY) {
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
results.errorMap[getPathString([key, fE])] = entries;
|
|
342
527
|
}
|
|
343
528
|
}
|
|
344
529
|
}
|
|
345
530
|
}
|
|
346
|
-
if (!results.valid &&
|
|
347
|
-
results.error = ERROR_MESSAGE_CONSTANTS.INVALID_TYPE;
|
|
531
|
+
if (!results.valid && results.error.code === ERROR_MESSAGE_CONSTANTS.NONE) {
|
|
532
|
+
results.error = getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.INVALID_TYPE);
|
|
348
533
|
}
|
|
349
534
|
}
|
|
350
535
|
return results;
|
|
351
536
|
};
|
|
352
537
|
|
|
353
|
-
export { DENIED_TYPE_OPERATIONS, ERROR_MESSAGE_CONSTANTS, INVALID_CUSTOM_TYPE, PRIMITIVE_ERROR_MESSAGE_CONSTANTS, RelationshipValidationType, TYPE_KEYWORD_VALIDATORS, getValidityValue, hasValue, validateArrayOfTypeInfoFieldValues, validateCustomType, validateKeywordType, validateTypeInfoFieldOperationAllowed, validateTypeInfoFieldValue, validateTypeInfoValue, validateTypeOperationAllowed, validateValueMatchesPattern };
|
|
538
|
+
export { DENIED_TYPE_OPERATIONS, ERROR_MESSAGE_CONSTANTS, INVALID_CUSTOM_TYPE, PRIMITIVE_ERROR_MESSAGE_CONSTANTS, RelationshipValidationType, TYPE_KEYWORD_ERROR_MESSAGE_CONSTANTS, TYPE_KEYWORD_VALIDATORS, TypeOperation, getArrayItemErrorMap, getErrorDescriptor, getErrorDescriptors, getNoErrorDescriptor, getValidityValue, hasValue, isArrayErrorDescriptorCollection, validateArrayOfTypeInfoFieldValues, validateCustomType, validateKeywordType, validateTypeInfoDataItem, validateTypeInfoFieldOperationAllowed, validateTypeInfoFieldValue, validateTypeInfoValue, validateTypeOperationAllowed, validateValueMatchesPattern };
|
|
@@ -7,13 +7,4 @@ export declare enum LOGGING_MESSAGES {
|
|
|
7
7
|
OUTPUT = "OUTPUT",
|
|
8
8
|
ERROR = "ERROR"
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Make a function call and log input/output/errors when enabled.
|
|
12
|
-
*
|
|
13
|
-
* @param label - Label to include in logs.
|
|
14
|
-
* @param args - Arguments passed to the function.
|
|
15
|
-
* @param functionRef - Function to execute.
|
|
16
|
-
* @param enabled - Whether to emit logs.
|
|
17
|
-
* @returns The function result.
|
|
18
|
-
*/
|
|
19
10
|
export declare const logFunctionCall: (label: string, args: any[], functionRef: (...args: any[]) => Promise<any> | any, enabled: boolean) => Promise<any>;
|
|
@@ -112,6 +112,26 @@ export type SupportedFieldTags = Partial<{
|
|
|
112
112
|
* Operations that will be denied at the field level.
|
|
113
113
|
* */
|
|
114
114
|
deniedOperations: DeniedOperations;
|
|
115
|
+
/**
|
|
116
|
+
* Validation behavior overrides for field processing.
|
|
117
|
+
* */
|
|
118
|
+
validation: Partial<{
|
|
119
|
+
/**
|
|
120
|
+
* Whether hidden fields should be validated.
|
|
121
|
+
* Defaults to false for data-item validation flows that opt into field-level behavior.
|
|
122
|
+
*/
|
|
123
|
+
validateHidden: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Whether readonly fields should enforce required-value checks.
|
|
126
|
+
* Defaults to false for data-item validation flows that opt into field-level behavior.
|
|
127
|
+
*/
|
|
128
|
+
validateReadonly: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Whether empty arrays are accepted for required array fields.
|
|
131
|
+
* Defaults to false.
|
|
132
|
+
*/
|
|
133
|
+
emptyArrayIsValid: boolean;
|
|
134
|
+
}>;
|
|
115
135
|
}>;
|
|
116
136
|
/**
|
|
117
137
|
* The set of acceptable literal value types.
|