fix: allow parsing other types than SchemaObject

This commit is contained in:
Florian Bouillon 2025-03-31 11:16:19 +02:00
parent 35e67bd63a
commit 1c216723a0
Signed by: Florian Bouillon
GPG Key ID: 7676FF78F3BC40EC

View File

@ -18,14 +18,12 @@ export function parseQuery<T extends SchemaItem>(model: T, query: URLSearchParam
return model.parse(record, opts) as ReturnType<T['parse']>
}
export function parseFormData<T extends SchemaObject>(model: T, data: FormData, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
export function parseFormData<T extends SchemaItem>(model: T, data: FormData, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
const record: Record<string, unknown> = {}
// console.log('VALIDATE FORM DATA data', data)
for (const [key, value] of data) {
// console.log('parse', key, value)
const isArray = model.model[key].isOfType([]) ?? false
// record[key] = isArray ? data.getAll(key) : value
objectSet(record, key.split('.').map((it) => /^\d+$/g.test(it) ? parseInt(it, 10) : it), isArray ? data.getAll(key) : value)
const hasMultipleValues = data.getAll(key).length > 1
objectSet(record, key.split('.').map((it) => /^\d+$/g.test(it) ? parseInt(it, 10) : it), hasMultipleValues ? data.getAll(key) : value)
}
// quick hack to handle FormData not returning Checkboxes
@ -54,11 +52,13 @@ export function parseFormData<T extends SchemaObject>(model: T, data: FormData,
handleBoolean(value as unknown as SchemaItem, [...keys, key])
})
}
handleSchemaForBoolean(model.model)
// console.log(JSON.stringify(record, undefined, 2))
if (model instanceof SchemaObject) {
handleSchemaForBoolean(model.model)
}
return model.parse(record, opts) as ReturnType<T['parse']>
}
export function parseForm<T extends SchemaObject>(model: T, form: HTMLFormElement, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
export function parseForm<T extends SchemaItem>(model: T, form: HTMLFormElement, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
return parseFormData(model, new FormData(form), opts)
}