(obj: Record<string, any>, schema: JSONSchema7)
| 149 | } |
| 150 | |
| 151 | export function fixObjectTypes(obj: Record<string, any>, schema: JSONSchema7): Record<string, any> { |
| 152 | if (!schema?.properties) { |
| 153 | return obj |
| 154 | } |
| 155 | if (!obj || typeof obj !== 'object') { |
| 156 | return obj |
| 157 | } |
| 158 | for (const [key, value] of Object.entries(obj)) { |
| 159 | const type: JSONSchema7TypeName = schema.properties[key] && (schema.properties[key] as any).type |
| 160 | switch (type) { |
| 161 | case 'object': |
| 162 | obj[key] = fixObjectTypes(value, schema.properties![key] as JSONSchema7) |
| 163 | break |
| 164 | case 'array': |
| 165 | if (Array.isArray(value)) { |
| 166 | obj[key] = value.map((item) => { |
| 167 | if (typeof item === 'object') { |
| 168 | return fixObjectTypes(item, (schema.properties![key] as any).items as JSONSchema7) |
| 169 | } else { |
| 170 | return item |
| 171 | } |
| 172 | }) |
| 173 | } else { |
| 174 | obj[key] = value |
| 175 | } |
| 176 | |
| 177 | break |
| 178 | case 'boolean': |
| 179 | obj[key] = value === 'true' ? true : value === 'false' ? false : value |
| 180 | break |
| 181 | case 'number': |
| 182 | obj[key] = Number.isFinite(Number(value)) ? Number(value) : value |
| 183 | break |
| 184 | case 'integer': |
| 185 | obj[key] = Number.isInteger(Number(value)) ? Number(value) : value |
| 186 | break |
| 187 | case 'null': |
| 188 | obj[key] = value === 'null' ? null : value |
| 189 | break |
| 190 | case 'string': |
| 191 | default: |
| 192 | obj[key] = value |
| 193 | break |
| 194 | } |
| 195 | } |
| 196 | return obj |
| 197 | } |
no outgoing calls
no test coverage detected