diff --git a/.nvmrc b/.nvmrc
index 10fef25..35d2d08 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-20.18
+22.12
diff --git a/package-lock.json b/package-lock.json
index c9e9384..503817c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,12 +19,14 @@
"eslint": "^9.17.0",
"eslint-plugin-vue": "^9.32.0",
"rollup-plugin-visualizer": "^5.12.0",
+ "type-fest": "^4.30.2",
"typescript": "^5.6.3",
"vite": "^6.0.3",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-dts": "^4.3.0",
"vitepress": "^1.5.0",
"vitest": "^2.1.8",
+ "vue-component-type-helpers": "^2.1.10",
"vue-tsc": "^2.1.10"
},
"peerDependencies": {
@@ -3804,6 +3806,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/eslint-plugin-vue/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint-plugin-vue/node_modules/xml-name-validator": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
@@ -6411,12 +6426,13 @@
}
},
"node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "version": "4.30.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.2.tgz",
+ "integrity": "sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -11459,6 +11475,12 @@
"type-fest": "^0.20.2"
}
},
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
"xml-name-validator": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
@@ -13295,9 +13317,9 @@
}
},
"type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "version": "4.30.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.2.tgz",
+ "integrity": "sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==",
"dev": true
},
"typescript": {
diff --git a/package.json b/package.json
index 21b0a9e..b6e4da2 100644
--- a/package.json
+++ b/package.json
@@ -25,12 +25,14 @@
"eslint": "^9.17.0",
"eslint-plugin-vue": "^9.32.0",
"rollup-plugin-visualizer": "^5.12.0",
+ "type-fest": "^4.30.2",
"typescript": "^5.6.3",
"vite": "^6.0.3",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-dts": "^4.3.0",
"vitepress": "^1.5.0",
"vitest": "^2.1.8",
+ "vue-component-type-helpers": "^2.1.10",
"vue-tsc": "^2.1.10"
},
"peerDependencies": {
diff --git a/src/App.vue b/src/App.vue
index 928f9f2..8647338 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -6,7 +6,7 @@
'my-input': [{ message: 'outer error' }],
'my.nested.value': [{ message: 'qwe' }]
}"
- :resolver="$options.resolver"
+ :resolver="resolver"
@submit="onSubmit"
>
@@ -22,7 +22,7 @@
@@ -32,7 +32,7 @@
@@ -51,7 +51,7 @@
@@ -60,7 +60,7 @@
@@ -69,14 +69,14 @@
@@ -153,82 +153,72 @@
-
diff --git a/src/components/ValidationField.vue b/src/components/ValidationField.vue
index db535a2..78276ca 100644
--- a/src/components/ValidationField.vue
+++ b/src/components/ValidationField.vue
@@ -14,7 +14,7 @@