diff --git a/docs/components/content/examples/FormExampleValibot.vue b/docs/components/content/examples/FormExampleValibot.vue
index 2c8b189e..6da9ec85 100644
--- a/docs/components/content/examples/FormExampleValibot.vue
+++ b/docs/components/content/examples/FormExampleValibot.vue
@@ -1,13 +1,13 @@
-
+
diff --git a/docs/package.json b/docs/package.json
index 47ad2dc5..1370f4cf 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -25,7 +25,7 @@
"typescript": "^5.4.5",
"ufo": "^1.5.3",
"v-calendar": "^3.1.2",
- "valibot": "^0.30.0",
+ "valibot": "^0.31.0",
"yup": "^1.4.0",
"zod": "^3.23.8"
}
diff --git a/package.json b/package.json
index f6e7c5bd..880d81ff 100644
--- a/package.json
+++ b/package.json
@@ -71,7 +71,8 @@
"release-it": "^17.3.0",
"typescript": "^5.4.5",
"unbuild": "^2.0.0",
- "valibot": "^0.30.0",
+ "valibot30": "npm:valibot@0.30.0",
+ "valibot": "^0.31.1",
"vitest": "^1.6.0",
"vitest-environment-nuxt": "^1.0.0",
"vue-tsc": "^2.0.16",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7f6da76b..1bd0c640 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -120,8 +120,11 @@ importers:
specifier: ^2.0.0
version: 2.0.0(typescript@5.4.5)
valibot:
- specifier: ^0.30.0
- version: 0.30.0
+ specifier: ^0.31.1
+ version: 0.31.1
+ valibot30:
+ specifier: npm:valibot@0.30.0
+ version: valibot@0.30.0
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@20.11.19)(happy-dom@14.10.1)(terser@5.27.2)
@@ -207,8 +210,8 @@ importers:
specifier: ^3.1.2
version: 3.1.2(@popperjs/core@2.11.8)(vue@3.4.25(typescript@5.4.5))
valibot:
- specifier: ^0.30.0
- version: 0.30.0
+ specifier: ^0.31.0
+ version: 0.31.1
yup:
specifier: ^1.4.0
version: 1.4.0
@@ -7154,6 +7157,9 @@ packages:
valibot@0.30.0:
resolution: {integrity: sha512-5POBdbSkM+3nvJ6ZlyQHsggisfRtyT4tVTo1EIIShs6qCdXJnyWU5TJ68vr8iTg5zpOLjXLRiBqNx+9zwZz/rA==}
+ valibot@0.31.1:
+ resolution: {integrity: sha512-2YYIhPrnVSz/gfT2/iXVTrSj92HwchCt9Cga/6hX4B26iCz9zkIsGTS0HjDYTZfTi1Un0X6aRvhBi1cfqs/i0Q==}
+
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
@@ -17312,6 +17318,8 @@ snapshots:
valibot@0.30.0: {}
+ valibot@0.31.1: {}
+
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
diff --git a/src/runtime/components/forms/Form.vue b/src/runtime/components/forms/Form.vue
index 81947f6d..2e23d307 100644
--- a/src/runtime/components/forms/Form.vue
+++ b/src/runtime/components/forms/Form.vue
@@ -10,7 +10,8 @@ import { useEventBus } from '@vueuse/core'
import type { ZodSchema } from 'zod'
import type { ValidationError as JoiError, Schema as JoiSchema } from 'joi'
import type { ObjectSchema as YupObjectSchema, ValidationError as YupError } from 'yup'
-import type { ObjectSchemaAsync as ValibotObjectSchema } from 'valibot'
+import type { BaseSchema as ValibotSchema30, BaseSchemaAsync as ValibotSchemaAsync30 } from 'valibot30'
+import type { GenericSchema as ValibotSchema, GenericSchemaAsync as ValibotSchemaAsync, SafeParser as ValibotSafeParser, SafeParserAsync as ValibotSafeParserAsync } from 'valibot'
import type { FormError, FormEvent, FormEventType, FormSubmitEvent, FormErrorEvent, Form } from '../../types/form'
import { useId } from '#imports'
@@ -25,11 +26,13 @@ class FormException extends Error {
export default defineComponent({
props: {
schema: {
- type: Object as
+ type: [Object, Function] as
| PropType
| PropType>
| PropType
- | PropType>,
+ | PropType
+ | PropType
+ | PropType | ValibotSafeParserAsync>,
default: undefined
},
state: {
@@ -255,21 +258,19 @@ async function getJoiErrors (
}
}
-function isValibotSchema (schema: any): schema is ValibotObjectSchema {
- return schema._parse !== undefined
+function isValibotSchema (schema: any): schema is ValibotSchema30 | ValibotSchemaAsync30 | ValibotSchema | ValibotSchemaAsync | ValibotSafeParser | ValibotSafeParserAsync {
+ return '_parse' in schema || '_run' in schema || (typeof schema === 'function' && 'schema' in schema)
}
async function getValibotError (
state: any,
- schema: ValibotObjectSchema
+ schema: ValibotSchema30 | ValibotSchemaAsync30 | ValibotSchema | ValibotSchemaAsync | ValibotSafeParser | ValibotSafeParserAsync
): Promise {
- const result = await schema._parse(state)
- if (result.issues) {
- return result.issues.map((issue) => ({
- path: issue.path?.map(p => p.key).join('.') || '',
- message: issue.message
- }))
- }
- return []
+ const result = await ('_parse' in schema ? schema._parse(state) : '_run' in schema ? schema._run({ typed: false, value: state }, {}) : schema(state))
+ return result.issues?.map((issue) => ({
+ // We know that the key for a form schema is always a string or a number
+ path: issue.path?.map((item) => item.key).join('.') || '',
+ message: issue.message
+ })) || []
}