From 6f19e33c236d7e4af96d80718d0688394c5674ce Mon Sep 17 00:00:00 2001 From: Chung Wei Date: Thu, 27 Apr 2023 11:35:26 +0800 Subject: [PATCH 1/6] fix: handle empty env object type --- packages/core/index.ts | 4 ++-- packages/nextjs/index.ts | 14 ++++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/core/index.ts b/packages/core/index.ts index dddf664d..f59e1cac 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -91,8 +91,8 @@ export interface StrictOptions< export function createEnv< TPrefix extends string, - TServer extends Record, - TClient extends Record + TServer extends Record = NonNullable, + TClient extends Record = NonNullable >( opts: | LooseOptions diff --git a/packages/nextjs/index.ts b/packages/nextjs/index.ts index 0810f145..dcb38b8b 100644 --- a/packages/nextjs/index.ts +++ b/packages/nextjs/index.ts @@ -6,8 +6,11 @@ const CLIENT_PREFIX = "NEXT_PUBLIC_" as const; type ClientPrefix = typeof CLIENT_PREFIX; interface Options< - TServer extends Record, - TClient extends Record<`${ClientPrefix}${string}`, ZodType> + TServer extends Record = NonNullable, + TClient extends Record< + `${ClientPrefix}${string}`, + ZodType + > = NonNullable > extends Omit< StrictOptions, "runtimeEnvStrict" | "runtimeEnv" | "clientPrefix" @@ -19,8 +22,11 @@ interface Options< } export function createEnv< - TServer extends Record, - TClient extends Record<`${ClientPrefix}${string}`, ZodType> + TServer extends Record = NonNullable, + TClient extends Record< + `${ClientPrefix}${string}`, + ZodType + > = NonNullable >({ runtimeEnv, ...opts }: Options) { return createEnvCore({ ...opts, From b7376a4cc1fc8a37ef58094c473f3905c4953eee Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 27 Apr 2023 23:55:51 +0200 Subject: [PATCH 2/6] bug: add failing test for #17 --- packages/core/test/smoke.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/core/test/smoke.test.ts b/packages/core/test/smoke.test.ts index 8721b7db..19117de6 100644 --- a/packages/core/test/smoke.test.ts +++ b/packages/core/test/smoke.test.ts @@ -123,6 +123,24 @@ describe("return type is correctly inferred", () => { FOO_BAR: "foo", }); }); + + test("without client vars", () => { + const env = createEnv({ + clientPrefix: "FOO_", + server: { BAR: z.string() }, + client: {}, + runtimeEnvStrict: { + BAR: "bar", + }, + }); + + expectTypeOf(env).toEqualTypeOf<{ + BAR: string; + }>(); + + expect(env).toMatchObject({ + BAR: "bar", + }); }); describe("errors when validation fails", () => { From 1de8c89f7afdc26dc24e41447d9a3de55c8a8f66 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 28 Apr 2023 00:11:54 +0200 Subject: [PATCH 3/6] Update packages/nextjs/index.ts --- packages/nextjs/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/nextjs/index.ts b/packages/nextjs/index.ts index dcb38b8b..8c81d13c 100644 --- a/packages/nextjs/index.ts +++ b/packages/nextjs/index.ts @@ -6,11 +6,8 @@ const CLIENT_PREFIX = "NEXT_PUBLIC_" as const; type ClientPrefix = typeof CLIENT_PREFIX; interface Options< - TServer extends Record = NonNullable, - TClient extends Record< - `${ClientPrefix}${string}`, - ZodType - > = NonNullable + TServer extends Record, + TClient extends Record<`${ClientPrefix}${string}`, ZodType> > extends Omit< StrictOptions, "runtimeEnvStrict" | "runtimeEnv" | "clientPrefix" From 3cbdd4c452c2c6e08508ec912d397f2968b63d66 Mon Sep 17 00:00:00 2001 From: Chung Wei Leong Date: Fri, 28 Apr 2023 13:48:04 +0800 Subject: [PATCH 4/6] fix: exclude `dist` in tsconfig --- packages/core/tsconfig.json | 3 ++- packages/nextjs/tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index abdb6744..a88d8cac 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,4 +1,5 @@ { "extends": "../../tsconfig.json", - "include": ["index.ts", "tsup.config.ts", "test"] + "include": ["index.ts", "tsup.config.ts", "test"], + "exclude": ["dist"] } diff --git a/packages/nextjs/tsconfig.json b/packages/nextjs/tsconfig.json index abdb6744..a88d8cac 100644 --- a/packages/nextjs/tsconfig.json +++ b/packages/nextjs/tsconfig.json @@ -1,4 +1,5 @@ { "extends": "../../tsconfig.json", - "include": ["index.ts", "tsup.config.ts", "test"] + "include": ["index.ts", "tsup.config.ts", "test"], + "exclude": ["dist"] } From 77b5de754b2e36959ccec07f4bcfd71015a501f5 Mon Sep 17 00:00:00 2001 From: Chung Wei Leong Date: Fri, 28 Apr 2023 14:00:47 +0800 Subject: [PATCH 5/6] chore: add changeset --- .changeset/dirty-impalas-juggle.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/dirty-impalas-juggle.md diff --git a/.changeset/dirty-impalas-juggle.md b/.changeset/dirty-impalas-juggle.md new file mode 100644 index 00000000..803fbeb7 --- /dev/null +++ b/.changeset/dirty-impalas-juggle.md @@ -0,0 +1,6 @@ +--- +"@t3-oss/env-core": minor +"@t3-oss/env-nextjs": minor +--- + +Fix empty env object type From b6e4f968eff6745b116a5a2ad7cb799e8133fb22 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 28 Apr 2023 08:03:05 +0200 Subject: [PATCH 6/6] Update .changeset/dirty-impalas-juggle.md --- .changeset/dirty-impalas-juggle.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/dirty-impalas-juggle.md b/.changeset/dirty-impalas-juggle.md index 803fbeb7..7cdaec5c 100644 --- a/.changeset/dirty-impalas-juggle.md +++ b/.changeset/dirty-impalas-juggle.md @@ -1,6 +1,6 @@ --- -"@t3-oss/env-core": minor -"@t3-oss/env-nextjs": minor +"@t3-oss/env-core": patch +"@t3-oss/env-nextjs": patch --- Fix empty env object type