From 6ab83a0df62c79dceb3197ffcb8f6af72cd15c45 Mon Sep 17 00:00:00 2001 From: jfet97 Date: Fri, 1 Aug 2025 19:17:41 +0200 Subject: [PATCH 1/3] refactor: improve type safety for excluded props in OmegaWrapper --- .../src/components/OmegaForm/OmegaWrapper.vue | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue index 89cecd935..ec8406498 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue @@ -107,28 +107,34 @@ onBeforeMount(() => { if (!props.form) return const formOptionsKeys = Object.keys(props.form.options || {}) - const excludedKeys: Set = new Set([ + const excludedKeys = new Set([ "omegaConfig", "subscribe", "showErrorsOn", "asyncAlways", "form", "schema", - ]) + ]) satisfies Set + type ExcludedKeys = typeof excludedKeys extends Set ? U : never const filteredProps = Object.fromEntries( Object.entries(props).filter( ([key, value]) => - !excludedKeys.has(key as keyof typeof props) && value !== undefined, + !excludedKeys.has(key as ExcludedKeys) && value !== undefined, ), - ) as Partial + ) as typeof props extends infer TOP + ? { + [K in keyof TOP as K extends ExcludedKeys ? never : K]: NonNullable + } + : never const propsKeys = Object.keys(filteredProps) const overlappingKeys = formOptionsKeys.filter( key => propsKeys.includes(key) && - filteredProps[key as keyof typeof props] !== undefined, + key in filteredProps && + filteredProps[key as keyof typeof filteredProps] !== undefined, ) if (overlappingKeys.length > 0) { @@ -144,11 +150,13 @@ onBeforeMount(() => { ...filteredProps, } + const what = Object.entries(mergedOptions).map(([key, value]) => { + return value! + }) + formToUse.value.options = Object.fromEntries( // TODO - (Object.entries(mergedOptions) as any).filter( - ([_, value]: any) => value !== undefined, - ), + Object.entries(mergedOptions).filter(([_, value]) => value !== undefined), ) }) From ee285f3e26c8810eb8a74644e1c0c935f2758c22 Mon Sep 17 00:00:00 2001 From: jfet97 Date: Fri, 1 Aug 2025 19:18:44 +0200 Subject: [PATCH 2/3] refactor: enhance type safety in form options handling --- .../src/components/OmegaForm/OmegaWrapper.vue | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue index ec8406498..6c4f62ea8 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue @@ -124,7 +124,9 @@ onBeforeMount(() => { ), ) as typeof props extends infer TOP ? { - [K in keyof TOP as K extends ExcludedKeys ? never : K]: NonNullable + [K in keyof TOP as K extends ExcludedKeys ? never : K]: NonNullable< + TOP[K] + > } : never @@ -150,10 +152,6 @@ onBeforeMount(() => { ...filteredProps, } - const what = Object.entries(mergedOptions).map(([key, value]) => { - return value! - }) - formToUse.value.options = Object.fromEntries( // TODO Object.entries(mergedOptions).filter(([_, value]) => value !== undefined), From 5e6ac27d0258401b6c3ba269fa31369360aa16ba Mon Sep 17 00:00:00 2001 From: jfet97 Date: Fri, 1 Aug 2025 19:19:54 +0200 Subject: [PATCH 3/3] more precise? --- .../vue-components/src/components/OmegaForm/OmegaWrapper.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue index 6c4f62ea8..43cae6c5e 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaWrapper.vue @@ -124,7 +124,7 @@ onBeforeMount(() => { ), ) as typeof props extends infer TOP ? { - [K in keyof TOP as K extends ExcludedKeys ? never : K]: NonNullable< + [K in keyof TOP as K extends ExcludedKeys ? never : K]-?: NonNullable< TOP[K] > }