Env

Env - модуль для валидации и типизации переменных окружения

Основные задачи, решаемые модулем:

  • Валидация переменных окружения
  • Фильтрация process.env для webpack и vite
  • Их частичная типизация

Основной принцип работы состоит в том, что сначала модуль выбирает используемые переменные process.env согласно передаваемой zod схеме, валидирует эти переменные через схему и дальше извлечение типа из схемы для типизации переменных и генерация файла env.d.ts с добавлением reference в nuxt.d.ts.

В случае неудачной валидации выбрасывается ошибка с деталями о неверных переменных и билд проекта останавливается.

Module options

schema

  • type: z.ZodObject<ZodRawShape>
  • default: DEFAULT_ENV_SCHEMA

Zod схема для валидации и типизации process.env. Дефолтная схема находится в файле lib/modules/env/default-schema.ts.

errorMessageOptions

  • type: ErrorMessageOptions
  • default: DEFAULT_ERROR_MESSAGE_OPTIONS

Объект для форматирования ZodError для пакета zod-error. Дефолтное значение находится в файле lib/modules/env/validator.ts. zod-error

Usage

import { z } from 'zod';

import { defineNuxtConfig } from 'nuxt/config';

import { DEFAULT_ENV_SCHEMA } from 'shared-front/lib/modules/env';

const schema = z.object({
  FOO: z.string().describe('Numeric string'),
  MODE: z.enum(['dev', 'prod'])
});
const anotherSchema = DEFAULT_ENV_SCHEMA.extend({
  FOO: z.string(),
});

const errorMessageOptions = {
  path: {
    enabled: true,
    type: 'breadcrumbs',
    delimeter: '/',
    transform: ({ value }) => value,
  },

  message: {
    enabled: true,
    transform: ({ value }) => value,
  },
};

export default defineNuxtConfig({
  base: {
    env: {
      schema,
      errorMessageOptions
    },
  },
});

Сгенерированный файл с типами env.d.ts

declare global {
  namespace NodeJS {
    interface ProcessEnv {
      /** Numeric string */
      FOO: string;

      MODE: "dev" | "prod";
    }
  }
}

export {}