Skip to main content

Env accessor

The eridu-tech/env-accessor component provides easy type-safe access to enviroment variables. It supports multiple sources (sync/async), schema validation, and convenient access patterns.

EnvAccessor class​

Initial configuration​

./samples/env-accessor-initial-config.ts
import { EnvAccessor } from "eridu-tech/env-accessor";
import { z } from "zod";

// Combine multiple sources as env variables
// Note: The order matters—later sources override previous ones for overlapping keys.
const sources = [
process.env,
async () => {
// Load secrets from a remote store (e.g. AWS Secrets Manager) and return
// them as a plain object, mirroring what a secret-store SDK call would do.
return {
PORT: "3000",
};
},
];

// Define a schema for your environment variables
const schema = z.object({
NODE_ENV: z.string().optional(),
PORT: z.string().default("3000").pipe(z.coerce.number()),
});

// Initialize the accessor
export const accessor = new EnvAccessor({ schema, sources });
await accessor.init();

Accessing enviroment variables​

get​

Will return null if PORT enviroment field is missing:

./samples/get.ts
import { accessor } from "./env-accessor-initial-config.js";

accessor.get("PORT");

getOr​

Will return default value if NODE_ENV enviroment field is missing:

./samples/get-or.ts
import { accessor } from "./env-accessor-initial-config.js";

accessor.getOr("NODE_ENV", "DEV");

IEnvAccessor contract​

The IEnvAccessor contract defines the contract for environment variable access. It provides type-safe methods for retrieving environment variables.

./samples/contract.ts
import type { UndefinedToNull, Lazyable } from "eridu-tech/utilities";

type BaseEnvConfig = Partial<Record<string, string | number | boolean>>;

type IEnvAccessor<TEnvConfig extends BaseEnvConfig = BaseEnvConfig> = {
get<TField extends keyof TEnvConfig, TValue extends TEnvConfig[TField]>(
field: TField,
): UndefinedToNull<TValue>;

getOr<TField extends keyof TEnvConfig, TValue extends TEnvConfig[TField]>(
field: TField,
defaultValue: Lazyable<NonNullable<TValue>>,
): NonNullable<TValue>;
};

Further information​

For further information refer to eridu-tech/env-accessor API docs.