/** * Environment variable source compatible with `process.env`, Worker bindings, * and edge runtime environment objects. * * @example * ```ts * const env: EnvSource = { * NODE_ENV: "staging", * FLAG_NEW_CHECKOUT: "true", * }; * ``` */ export type EnvSource = Readonly>>; /** * Selects the active environment for flag defaults. * * Declared defaults matching `NODE_ENV` win. Otherwise, `development` is used * only for `NODE_ENV=development`; every other value falls back to `production`. * * @example * ```ts * const environment = resolveEnvironment( * { NODE_ENV: "staging" }, * { development: true, staging: true, production: false } * ); * ``` */ export function resolveEnvironment( env: EnvSource = process.env, defaults?: Readonly> ): string { const environment = env.NODE_ENV; if (environment !== undefined && defaults?.[environment] !== undefined) { return environment; } return environment === "development" ? "development" : "production"; }