Skip to content

Commit ad3d4a3

Browse files
committed
feat(try-it-out): validation should consider readOnly
1 parent 9f62154 commit ad3d4a3

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/core/utils.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -428,15 +428,19 @@ function validateValueBySchema(value, schema, requiredByParam, bypassRequiredChe
428428
let maxItems = schema.get("maxItems")
429429
let minItems = schema.get("minItems")
430430
let pattern = schema.get("pattern")
431+
const isReadOnly = schema.get("readOnly", false)
432+
433+
let isRequired = isReadOnly
434+
? false
435+
: requiredByParam || requiredBySchema === true
431436

432-
const schemaRequiresValue = requiredByParam || requiredBySchema === true
433437
const hasValue = value !== undefined && value !== null
434-
const isValidEmpty = !schemaRequiresValue && !hasValue
438+
const isValidEmpty = !isRequired && !hasValue
435439

436440
const needsExplicitConstraintValidation = hasValue && type === "array"
437441

438442
const requiresFurtherValidation =
439-
schemaRequiresValue
443+
isRequired
440444
|| needsExplicitConstraintValidation
441445
|| !isValidEmpty
442446

@@ -471,7 +475,7 @@ function validateValueBySchema(value, schema, requiredByParam, bypassRequiredChe
471475

472476
const passedAnyCheck = allChecks.some(v => !!v)
473477

474-
if (schemaRequiresValue && !passedAnyCheck && !bypassRequiredCheck) {
478+
if (isRequired && !passedAnyCheck && !bypassRequiredCheck) {
475479
errors.push("Required field is not provided")
476480
return errors
477481
}
@@ -491,7 +495,8 @@ function validateValueBySchema(value, schema, requiredByParam, bypassRequiredChe
491495
}
492496
if(schema && schema.has("required") && isFunc(requiredBySchema.isList) && requiredBySchema.isList()) {
493497
requiredBySchema.forEach(key => {
494-
if(objectVal[key] === undefined) {
498+
const propIsReadOnly = schema.getIn(["properties", key, "readOnly"], false)
499+
if (!propIsReadOnly && objectVal[key] === undefined) {
495500
errors.push({ propKey: key, error: "Required property not found" })
496501
}
497502
})

0 commit comments

Comments
 (0)