Compare commits

...

2 Commits

Author SHA1 Message Date
a0cc29169d
0.0.6 2025-03-31 11:16:24 +02:00
1c216723a0
fix: allow parsing other types than SchemaObject 2025-03-31 11:16:19 +02:00
3 changed files with 11 additions and 11 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "@dzeio/schema",
"version": "0.0.5",
"version": "0.0.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@dzeio/schema",
"version": "0.0.5",
"version": "0.0.6",
"dependencies": {
"@dzeio/object-util": "^1.8.3",
"@standard-schema/spec": "^1.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "@dzeio/schema",
"version": "0.0.5",
"version": "0.0.6",
"dependencies": {
"@dzeio/object-util": "^1.8.3"
},

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)
}