diff --git a/packages/kotti-ui/source/make-props.test.ts b/packages/kotti-ui/source/make-props.test.ts index fe3a5788a2..915e198bfe 100644 --- a/packages/kotti-ui/source/make-props.test.ts +++ b/packages/kotti-ui/source/make-props.test.ts @@ -578,7 +578,8 @@ describe('never', () => { null, undefined, ) - expect(prop.default.description).toBe('NEVER') + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect((prop.default as any)?.description).toBe('NEVER') }) it('can’t specify “z.never().nullable()”', () => { diff --git a/packages/kotti-ui/source/make-props.ts b/packages/kotti-ui/source/make-props.ts index ff944e85d7..47bfb1b601 100644 --- a/packages/kotti-ui/source/make-props.ts +++ b/packages/kotti-ui/source/make-props.ts @@ -42,8 +42,9 @@ const propValidator = ({ // HACK: 'error' in result is necessary as `ts-jest` doesn’t see that result.success was already properly checked to be falsy and that error now exists if ('error' in result) console.error(result.error) - if (Array.isArray(value)) console.table(cloneDeep(value)) - else console.log(cloneDeep(value)) + const clonedValue = cloneDeep(value) + if (Array.isArray(value)) console.table(clonedValue) + else console.log(clonedValue) console.trace() @@ -57,8 +58,9 @@ const propValidator = ({ console.error(error) - if (Array.isArray(value)) console.table(cloneDeep(value)) - else console.log(cloneDeep(value)) + const clonedValue = cloneDeep(value) + if (Array.isArray(value)) console.table(clonedValue) + else console.log(clonedValue) console.trace() @@ -240,8 +242,11 @@ export const makeProps = >( ): { [PROP_NAME in keyof PROPS_SCHEMA['shape']]: Omit< PropOptions, - 'required' | 'type' + 'default' | 'required' | 'type' > & { + default: undefined extends z.input[PROP_NAME] + ? () => z.output[PROP_NAME] + : undefined required: undefined extends z.input[PROP_NAME] ? false : true type: PropType[PROP_NAME]> } @@ -267,7 +272,11 @@ export const makeProps = >( }), } - if (!isNever) { + if (isNever) { + // HACK: for the KtFields because we are constrained by VueTypes + propDefinition.default = NEVER + propDefinition.type = Symbol + } else { const vuePropTypes = uniq( [...zodTypeSet] .filter((x) => !ignoredZodTypes.has(x)) @@ -308,9 +317,6 @@ export const makeProps = >( if (isOptional) propDefinition.default = propSchema._def.defaultValue else propDefinition.required = true - } else { - propDefinition.default = NEVER - propDefinition.type = Symbol } return [propName, propDefinition] @@ -319,8 +325,11 @@ export const makeProps = >( ) as { [KEY in keyof PROPS_SCHEMA['shape']]: Omit< PropOptions, - 'required' | 'type' + 'default' | 'required' | 'type' > & { + default: undefined extends z.input[KEY] + ? () => z.output[KEY] + : undefined required: undefined extends z.input[KEY] ? false : true type: PropType[KEY]> }