Skip to content

Commit 395923d

Browse files
committed
Added deep object support
1 parent 61ce8f0 commit 395923d

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ function buildObject (schema, code, name) {
6868
var json = '{'
6969
`
7070

71+
var laterCode = ''
72+
7173
Object.keys(schema.properties).forEach((key, i, a) => {
7274
const type = schema.properties[key].type
7375

@@ -87,6 +89,13 @@ function buildObject (schema, code, name) {
8789
json += $asNumber(obj.${key})
8890
`
8991
break
92+
case 'object':
93+
let funcName = name + key
94+
laterCode = buildObject(schema.properties[key], laterCode, funcName)
95+
code += `
96+
json += ${funcName}(obj.${key})
97+
`
98+
break
9099
default:
91100
throw new Error(`${type} unsupported`)
92101
}
@@ -102,6 +111,8 @@ function buildObject (schema, code, name) {
102111
}
103112
`
104113

114+
code += laterCode
115+
105116
return code
106117
}
107118

test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,31 @@ buildTest({
5656
title: 'a number',
5757
type: 'number'
5858
}, 42.42)
59+
60+
buildTest({
61+
'title': 'deep',
62+
'type': 'object',
63+
'properties': {
64+
'firstName': {
65+
'type': 'string'
66+
},
67+
'lastName': {
68+
'type': 'string'
69+
},
70+
'more': {
71+
'description': 'more properties',
72+
'type': 'object',
73+
'properties': {
74+
'something': {
75+
'type': 'string'
76+
}
77+
}
78+
}
79+
}
80+
}, {
81+
firstName: 'Matteo',
82+
lastName: 'Collina',
83+
more: {
84+
something: 'else'
85+
}
86+
})

0 commit comments

Comments
 (0)