Skip to content

Commit d973bd9

Browse files
committed
Support for missing parameters
1 parent a6f7292 commit d973bd9

File tree

2 files changed

+50
-22
lines changed

2 files changed

+50
-22
lines changed

index.js

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -140,17 +140,33 @@ function buildObject (schema, code, name) {
140140
var laterCode = ''
141141

142142
Object.keys(schema.properties).forEach((key, i, a) => {
143+
/* code += `
144+
if (obj.hasOwnProperty('${key}')) {
145+
json += '${$asString(key)}:'`*/
143146
code += `
144-
json += '${$asString(key)}:'
145-
`
147+
if (obj.${key} !== undefined) {
148+
json += '${$asString(key)}:'`
146149

147150
const result = nested(laterCode, name, '.' + key, schema.properties[key])
148151

149152
code += result.code
150153
laterCode = result.laterCode
151154

152155
if (i < a.length - 1) {
153-
code += 'json += \',\''
156+
code += `
157+
json += \',\'`
158+
}
159+
160+
if (schema.properties[key].required) {
161+
code += `
162+
} else {
163+
throw new Error('${key} is required!')
164+
}
165+
`
166+
} else {
167+
code += `
168+
}
169+
`
154170
}
155171
})
156172

@@ -202,48 +218,36 @@ function buildArray (schema, code, name) {
202218
function nested (laterCode, name, key, schema) {
203219
var code = ''
204220
var funcName
205-
if (schema.required) {
206-
code += `
207-
if (!obj.hasOwnProperty('${key.slice(1)}')) {
208-
throw new Error('${key} is required!')
209-
}`
210-
}
211221
const type = schema.type
212222
switch (type) {
213223
case 'null':
214224
code += `
215-
json += $asNull()
216-
`
225+
json += $asNull()`
217226
break
218227
case 'string':
219228
code += `
220-
json += $asString(obj${key})
221-
`
229+
json += $asString(obj${key})`
222230
break
223231
case 'number':
224232
case 'integer':
225233
code += `
226-
json += $asNumber(obj${key})
227-
`
234+
json += $asNumber(obj${key})`
228235
break
229236
case 'boolean':
230237
code += `
231-
json += $asBoolean(obj${key})
232-
`
238+
json += $asBoolean(obj${key})`
233239
break
234240
case 'object':
235241
funcName = (name + key).replace(/[-.\[\]]/g, '')
236242
laterCode = buildObject(schema, laterCode, funcName)
237243
code += `
238-
json += ${funcName}(obj${key})
239-
`
244+
json += ${funcName}(obj${key})`
240245
break
241246
case 'array':
242247
funcName = (name + key).replace(/[-.\[\]]/g, '')
243248
laterCode = buildArray(schema, laterCode, funcName)
244249
code += `
245-
json += ${funcName}(obj${key})
246-
`
250+
json += ${funcName}(obj${key})`
247251
break
248252
default:
249253
throw new Error(`${type} unsupported`)

test.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,31 @@ test('object with required field', (t) => {
288288
})
289289
t.fail()
290290
} catch (e) {
291-
t.is(e.message, '.str is required!')
291+
t.is(e.message, 'str is required!')
292292
t.pass()
293293
}
294294
})
295+
296+
test('missing values', (t) => {
297+
t.plan(3)
298+
299+
const stringify = build({
300+
title: 'object with missing values',
301+
type: 'object',
302+
properties: {
303+
str: {
304+
type: 'string'
305+
},
306+
num: {
307+
type: 'number'
308+
},
309+
val: {
310+
type: 'string'
311+
}
312+
}
313+
})
314+
315+
t.equal('{"val":"value"}', stringify({ val: 'value' }))
316+
t.equal('{"str":"string","val":"value"}', stringify({ str: 'string', val: 'value' }))
317+
t.equal('{"str":"string","num":42,"val":"value"}', stringify({ str: 'string', num: 42, val: 'value' }))
318+
})

0 commit comments

Comments
 (0)