Skip to content

Commit 77114f0

Browse files
refactor: spread root of object required properties (#434)
1 parent d1efdaf commit 77114f0

File tree

1 file changed

+5
-25
lines changed

1 file changed

+5
-25
lines changed

index.js

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ function buildCode (location, code, laterCode, name) {
723723
}
724724

725725
const schema = location.schema
726-
let required = schema.required
726+
const required = schema.required || []
727727

728728
Object.keys(schema.properties || {}).forEach((key, i, a) => {
729729
let propertyLocation = mergeLocation(location, { schema: schema.properties[key] })
@@ -777,14 +777,12 @@ function buildCode (location, code, laterCode, name) {
777777

778778
const defaultValue = schema.properties[key].default
779779
if (defaultValue !== undefined) {
780-
required = filterRequired(required, key)
781780
code += `
782781
} else {
783782
${addComma}
784783
json += ${asString} + ':' + ${JSON.stringify(JSON.stringify(defaultValue))}
785784
`
786-
} else if (required && required.indexOf(key) !== -1) {
787-
required = filterRequired(required, key)
785+
} else if (required.includes(key)) {
788786
code += `
789787
} else {
790788
throw new Error('${sanitized} is required!')
@@ -802,20 +800,9 @@ function buildCode (location, code, laterCode, name) {
802800
}
803801
})
804802

805-
if (required && required.length > 0) {
806-
code += 'var required = ['
807-
// eslint-disable-next-line
808-
for (var i = 0; i < required.length; i++) {
809-
if (i > 0) {
810-
code += ','
811-
}
812-
code += `${JSON.stringify(required[i])}`
813-
}
814-
code += `]
815-
for (var i = 0; i < required.length; i++) {
816-
if (obj[required[i]] === undefined) throw new Error('"' + required[i] + '" is required!')
817-
}
818-
`
803+
for (const requiredProperty of required) {
804+
if (schema.properties && schema.properties[requiredProperty] !== undefined) continue
805+
code += `if (obj['${requiredProperty}'] === undefined) throw new Error('"${requiredProperty}" is required!')\n`
819806
}
820807

821808
if (schema.allOf) {
@@ -827,13 +814,6 @@ function buildCode (location, code, laterCode, name) {
827814
return { code, laterCode }
828815
}
829816

830-
function filterRequired (required, key) {
831-
if (!required) {
832-
return required
833-
}
834-
return required.filter(k => k !== key)
835-
}
836-
837817
function buildCodeWithAllOfs (location, code, laterCode, name) {
838818
if (location.schema.allOf) {
839819
location.schema.allOf.forEach((ss) => {

0 commit comments

Comments
 (0)