Type Safety dan Validasi Environment Variable dengan Zod
Hal yang sering terlupakan ketika melakukan deployment adalah kita lupa menambahkan environtment variable baru, karena tidak ada validasi pada saat startup aplikasi, masalah ini baru terdeteksi ketika fitur terkait digunakan oleh user, menyebabkan error saat runtime.
process.env.MY_NEW_VARIABLE is not defined
Untuk menghindari hal ini kita bisa menggunakan prinspip fail fast
dimana aplikasi tidak dapat berjalan sampai environment variable yang dibutuhkan terisi. Dengan begitu, kita dapat memperbaiki error sesegera mungkin, tanpa user mengalami error saat menggunakan fitur terkait.
Di sini kita bisa memanfaatkan library znv
dan zod
untuk memvalidasi environment variable yang kita gunakan.
npm install znv zod
Kemudian kita bisa menggunakannya sebagai berikut
import { parseEnv } from "znv";
import { z } from "zod";
export const env = parseEnv(process.env, {
NODE_ENV: z.enum(["development", "production"]).default("development"),
DATABASE_URL: z.string(),
});
console.log(env.NODE_ENV);
console.log(env.DATABASE_URL);
Ketika kita melakukan deployment ulang, dan melupakan environment variable yang dibutuhkan, maka process nodejs akan berhenti dan menampilkan error seperti berikut
Error: Errors found while parsing environment:
[DATABASE_URL]:
This field is required.
(received undefined)
Selain validasi, kita juga mendapatkan type safety dari zod yang akan memberikan autocomplete ketika menggunakan environment variable.
const env: DeepReadonlyObject<{
NODE_ENV: "development" | "production";
DATABASE_URL: string;
}>