From 0eb5a4b810155abc5d69404c7ead43275e286ff8 Mon Sep 17 00:00:00 2001 From: pcc Date: Fri, 7 Jul 2023 17:14:32 +0200 Subject: [PATCH 1/3] Add parsong for nativeEnum input --- .../zod/parsers/parseZodNativeEnumDef.ts | 12 ++++++++++++ .../src/parse/input-mappers/zod/selector.ts | 4 ++++ 2 files changed, 16 insertions(+) create mode 100644 packages/trpc-panel/src/parse/input-mappers/zod/parsers/parseZodNativeEnumDef.ts diff --git a/packages/trpc-panel/src/parse/input-mappers/zod/parsers/parseZodNativeEnumDef.ts b/packages/trpc-panel/src/parse/input-mappers/zod/parsers/parseZodNativeEnumDef.ts new file mode 100644 index 0000000..00f981e --- /dev/null +++ b/packages/trpc-panel/src/parse/input-mappers/zod/parsers/parseZodNativeEnumDef.ts @@ -0,0 +1,12 @@ +import { nodePropertiesFromRef } from "@src/parse/utils"; +import { ZodNativeEnumDef } from "zod"; +import { EnumNode, ParseFunction } from "../../../parseNodeTypes"; + +export const parseZodNativeEnumDef: ParseFunction = ( + def, + refs +) => { + const values = Object.values(def.values) as string[]; + refs.addDataFunctions.addDescriptionIfExists(def, refs); + return { type: "enum", enumValues: values, ...nodePropertiesFromRef(refs) }; +}; diff --git a/packages/trpc-panel/src/parse/input-mappers/zod/selector.ts b/packages/trpc-panel/src/parse/input-mappers/zod/selector.ts index d61c854..e96ab63 100644 --- a/packages/trpc-panel/src/parse/input-mappers/zod/selector.ts +++ b/packages/trpc-panel/src/parse/input-mappers/zod/selector.ts @@ -6,6 +6,7 @@ import { ZodDefaultDef, ZodEffectsDef, ZodEnumDef, + ZodNativeEnumDef, ZodFirstPartyTypeKind, ZodLiteralDef, ZodNullableDef, @@ -28,6 +29,7 @@ import { ZodDiscriminatedUnionDefUnversioned, } from "./parsers/parseZodDiscriminatedUnionDef"; import { parseZodEnumDef } from "./parsers/parseZodEnumDef"; +import { parseZodNativeEnumDef } from "./parsers/parseZodNativeEnumDef"; import { parseZodLiteralDef } from "./parsers/parseZodLiteralDef"; import { parseZodNumberDef } from "./parsers/parseZodNumberDef"; import { parseZodObjectDef } from "./parsers/parseZodObjectDef"; @@ -63,6 +65,8 @@ export const zodSelectorFunction: ParserSelectorFunction = ( ); case ZodFirstPartyTypeKind.ZodEnum: return parseZodEnumDef(def as ZodEnumDef, references); + case ZodFirstPartyTypeKind.ZodNativeEnum: + return parseZodNativeEnumDef(def as ZodNativeEnumDef, references); case ZodFirstPartyTypeKind.ZodLiteral: return parseZodLiteralDef(def as ZodLiteralDef, references); case ZodFirstPartyTypeKind.ZodNumber: From 8910d3f2e6ea77199ffc399cd26c658844a9e905 Mon Sep 17 00:00:00 2001 From: pcc Date: Fri, 7 Jul 2023 17:15:59 +0200 Subject: [PATCH 2/3] Add tests and router example --- packages/dev-app/src/router.ts | 5 ++++ .../__tests__/zod/nativeEnum.test.ts | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 packages/trpc-panel/src/parse/input-mappers/__tests__/zod/nativeEnum.test.ts diff --git a/packages/dev-app/src/router.ts b/packages/dev-app/src/router.ts index b7e8a8d..a9ac729 100644 --- a/packages/dev-app/src/router.ts +++ b/packages/dev-app/src/router.ts @@ -51,6 +51,11 @@ export const appRouter = createTRPCRouter({ .query(() => { return "It's an input"; }), + nativeEnumInput: procedure + .input(z.object({ aEnumInput: z.nativeEnum({ONE: "one", TWO: "two"}) })) + .query(() => { + return "It's an input"; + }), stringArrayInput: procedure .input(z.object({ aStringArray: z.string().array() })) .query(() => { diff --git a/packages/trpc-panel/src/parse/input-mappers/__tests__/zod/nativeEnum.test.ts b/packages/trpc-panel/src/parse/input-mappers/__tests__/zod/nativeEnum.test.ts new file mode 100644 index 0000000..f20093e --- /dev/null +++ b/packages/trpc-panel/src/parse/input-mappers/__tests__/zod/nativeEnum.test.ts @@ -0,0 +1,26 @@ +import { defaultReferences } from "@src/parse/input-mappers/defaultReferences"; +import { parseZodNativeEnumDef } from "@src/parse/input-mappers/zod/parsers/parseZodNativeEnumDef"; +import { EnumNode } from "@src/parse/parseNodeTypes"; +import { z } from "zod"; + +describe("Parse ZodNativeEnum", () => { + it("should parse a zod native enum", () => { + const expected: EnumNode = { + type: "enum", + enumValues: ["one", "two", "three"], + path: [], + }; + + enum ExampleEnum { + ONE = "one", + TWO = "two", + THREE = "three", + }; + + const parsed = parseZodNativeEnumDef( + z.nativeEnum(ExampleEnum)._def, + defaultReferences() + ); + expect(expected).toStrictEqual(parsed); + }); +}); From 46474c53f0a02f0dd36a333bb804f23d5266c1e6 Mon Sep 17 00:00:00 2001 From: Pierre Cardona Date: Sat, 8 Jul 2023 11:53:35 +0000 Subject: [PATCH 3/3] doc: Add zod nativeEnum type supported --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index bf0ebbc..3c9aed1 100644 --- a/README.MD +++ b/README.MD @@ -151,6 +151,7 @@ The following are supported - Effects - Enum - Literal +- NativeEnum - Nullable - Null - Nullish