@beseif-solutions/prow-core 0.3.1 → 0.3.2
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.
|
@@ -38,6 +38,7 @@ type StringInputField<Extend = Record<never, never>> = {
|
|
|
38
38
|
max?: number;
|
|
39
39
|
regexp?: string;
|
|
40
40
|
pattern?: `email` | `uri`;
|
|
41
|
+
allow_empty?: boolean;
|
|
41
42
|
} & (SelectField<string, Extend> | CustomDisplayTextField | IDETextField | {});
|
|
42
43
|
type NumberInputField<Extend = Record<never, never>> = {
|
|
43
44
|
type: `number`;
|
|
@@ -79,6 +79,7 @@ const stringInputFieldSchema = () => joi_1.default.object({
|
|
|
79
79
|
max: joi_1.default.number(),
|
|
80
80
|
regexp: joi_1.default.string(),
|
|
81
81
|
pattern: joi_1.default.string().valid(`email`, `uri`),
|
|
82
|
+
allow_empty: joi_1.default.bool().default(false),
|
|
82
83
|
})
|
|
83
84
|
.concat(joi_1.default.object({
|
|
84
85
|
format: joi_1.default.string().valid(`select`, `textarea`, `rich-text`, `markdown`, `code`),
|
|
@@ -164,6 +165,7 @@ const fileSchema = () => joi_1.default.object({
|
|
|
164
165
|
const fileReplacer = (field) => ({
|
|
165
166
|
key: field.key,
|
|
166
167
|
type: `dict`,
|
|
168
|
+
unknown: true,
|
|
167
169
|
items: [
|
|
168
170
|
{
|
|
169
171
|
key: `name`,
|
|
@@ -256,10 +258,10 @@ const getSimpleFieldSchema = (field) => {
|
|
|
256
258
|
if (field.length) {
|
|
257
259
|
typeSchema = typeSchema.length(field.length);
|
|
258
260
|
}
|
|
259
|
-
if (field.min) {
|
|
261
|
+
if (field.min > 0) {
|
|
260
262
|
typeSchema = typeSchema.min(field.min);
|
|
261
263
|
}
|
|
262
|
-
else {
|
|
264
|
+
else if (field.allow_empty) {
|
|
263
265
|
typeSchema = typeSchema.allow(``);
|
|
264
266
|
}
|
|
265
267
|
if (field.max) {
|
|
@@ -474,12 +476,10 @@ const recursive_schema = async (field, data, options) => {
|
|
|
474
476
|
let genericItemSchema;
|
|
475
477
|
if (noArrayField.type === `dict` && noArrayField.items) {
|
|
476
478
|
const items = [];
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
items.push({ key: item.key, schema: recursive.schema, field: recursive.field });
|
|
482
|
-
}
|
|
479
|
+
for (const item of noArrayField.items) {
|
|
480
|
+
const recursive = await recursive_schema(item, data, { alter: options.alter && true, relative: `${relativeKey}[0]`, context: options.context });
|
|
481
|
+
if (recursive) {
|
|
482
|
+
items.push({ key: item.key, schema: recursive.schema, field: recursive.field });
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
genericItemSchema = getObjectFieldSchema(noArrayField, items);
|
|
@@ -489,16 +489,15 @@ const recursive_schema = async (field, data, options) => {
|
|
|
489
489
|
genericItemSchema = getSimpleFieldSchema(noArrayField);
|
|
490
490
|
}
|
|
491
491
|
calculatedSchema = getItemsArrayFieldSchema(newField, [genericItemSchema]);
|
|
492
|
+
lodash_1.default.unset(data, relativeKey);
|
|
492
493
|
}
|
|
493
494
|
}
|
|
494
495
|
else if (newField.type === `dict` && newField.items) {
|
|
495
496
|
const items = [];
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
items.push({ key: item.key, schema: recursive.schema, field: recursive.field });
|
|
501
|
-
}
|
|
497
|
+
for (const item of newField.items) {
|
|
498
|
+
const recursive = await recursive_schema(item, data, { alter: options.alter && true, relative: relativeKey, context: options.context });
|
|
499
|
+
if (recursive) {
|
|
500
|
+
items.push({ key: item.key, schema: recursive.schema, field: recursive.field });
|
|
502
501
|
}
|
|
503
502
|
}
|
|
504
503
|
calculatedSchema = getObjectFieldSchema(newField, items);
|
package/package.json
CHANGED
|
@@ -59,6 +59,7 @@ type StringInputField<Extend = Record<never, never>> = {
|
|
|
59
59
|
max?: number,
|
|
60
60
|
regexp?: string,
|
|
61
61
|
pattern?: `email` | `uri`,
|
|
62
|
+
allow_empty?: boolean,
|
|
62
63
|
} & (
|
|
63
64
|
| SelectField<string, Extend>
|
|
64
65
|
| CustomDisplayTextField
|
|
@@ -275,6 +276,7 @@ const stringInputFieldSchema = () =>
|
|
|
275
276
|
max: Joi.number(),
|
|
276
277
|
regexp: Joi.string(),
|
|
277
278
|
pattern: Joi.string().valid(`email`, `uri`),
|
|
279
|
+
allow_empty: Joi.bool().default(false),
|
|
278
280
|
})
|
|
279
281
|
.concat(
|
|
280
282
|
Joi.object({
|
|
@@ -375,6 +377,7 @@ const fileSchema = () => Joi.object({
|
|
|
375
377
|
const fileReplacer = (field: Common & FileInputField): Field => ({
|
|
376
378
|
key: field.key,
|
|
377
379
|
type: `dict`,
|
|
380
|
+
unknown: true,
|
|
378
381
|
items: [
|
|
379
382
|
{
|
|
380
383
|
key: `name`,
|
|
@@ -474,9 +477,9 @@ const getSimpleFieldSchema = (field: Field) => {
|
|
|
474
477
|
case `string`:
|
|
475
478
|
typeSchema = Joi.string();
|
|
476
479
|
if (field.length) { typeSchema = (typeSchema as StringSchema).length(field.length); }
|
|
477
|
-
if (field.min) {
|
|
480
|
+
if (field.min > 0) {
|
|
478
481
|
typeSchema = (typeSchema as StringSchema).min(field.min);
|
|
479
|
-
} else {
|
|
482
|
+
} else if (field.allow_empty) {
|
|
480
483
|
typeSchema = typeSchema.allow(``);
|
|
481
484
|
}
|
|
482
485
|
if (field.max) { typeSchema = (typeSchema as StringSchema).max(field.max); }
|
|
@@ -682,11 +685,9 @@ const recursive_schema = async (field: Field, data: Record<string, any>, options
|
|
|
682
685
|
if (noArrayField.type === `dict` && noArrayField.items) {
|
|
683
686
|
const items: { key: string, schema: Joi.Schema, field: Field }[] = [];
|
|
684
687
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
if (recursive) { items.push({ key: item.key, schema: recursive.schema, field: recursive.field }); }
|
|
689
|
-
}
|
|
688
|
+
for (const item of noArrayField.items) {
|
|
689
|
+
const recursive = await recursive_schema(item, data, { alter: options.alter && true, relative: `${relativeKey}[0]`, context: options.context });
|
|
690
|
+
if (recursive) { items.push({ key: item.key, schema: recursive.schema, field: recursive.field }); }
|
|
690
691
|
}
|
|
691
692
|
|
|
692
693
|
genericItemSchema = getObjectFieldSchema(noArrayField, items);
|
|
@@ -696,15 +697,16 @@ const recursive_schema = async (field: Field, data: Record<string, any>, options
|
|
|
696
697
|
}
|
|
697
698
|
|
|
698
699
|
calculatedSchema = getItemsArrayFieldSchema(newField, [genericItemSchema]);
|
|
700
|
+
|
|
701
|
+
// unset value if it wasn't resolved
|
|
702
|
+
_.unset(data, relativeKey);
|
|
699
703
|
}
|
|
700
704
|
} else if (newField.type === `dict` && newField.items) {
|
|
701
705
|
const items: { key: string, schema: Joi.Schema, field: Field }[] = [];
|
|
702
706
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
if (recursive) { items.push({ key: item.key, schema: recursive.schema, field: recursive.field }); }
|
|
707
|
-
}
|
|
707
|
+
for (const item of newField.items) {
|
|
708
|
+
const recursive = await recursive_schema(item, data, { alter: options.alter && true, relative: relativeKey, context: options.context });
|
|
709
|
+
if (recursive) { items.push({ key: item.key, schema: recursive.schema, field: recursive.field }); }
|
|
708
710
|
}
|
|
709
711
|
|
|
710
712
|
calculatedSchema = getObjectFieldSchema(newField, items);
|