npm.io
1.0.0 • Published 1 month ago

@rx-ted/packages-config

Licence
MIT
Version
1.0.0
Deps
3
Size
19 kB
Vulns
0
Weekly
0
DeprecatedThis package is deprecated

@rx-ted/config

Universal environment configuration adapter for multiple JavaScript runtimes.

Supported Runtimes

  • Deno - Native Deno.env
  • Bun - Native Bun.env
  • Node.js - dotenv with .env file support
  • Cloudflare Workers - Global scope with optional KV bindings

Installation

pnpm add @rx-ted/config

Quick Start

import { createEnvAdapter } from "@rx-ted/config";

// Create adapter (auto-detects runtime)
const adapter = createEnvAdapter();

// Get environment variable
const dbHost = adapter.get("DB_HOST");
const port = adapter.get("PORT");

// Get runtime environment
const env = adapter.getRuntimeEnv(); // 'dev' | 'test' | 'prod'

// Get adapter name
console.log(adapter.name); // 'node' | 'bun' | 'deno' | 'cloudflare'

API

createEnvAdapter(path?, cloudflareEnv?)

Creates an EnvAdapter instance for the current runtime.

Parameters:

Parameter Type Description
path string Path to .env file (Node.js only)
cloudflareEnv Record<string, string | undefined> Cloudflare KV bindings

Returns: EnvAdapter

EnvAdapter
Property/Method Type Description
name string Runtime name: 'node', 'bun', 'deno', 'cloudflare'
get(key) string | undefined Get env variable by key
getRuntimeEnv() AppEnv Get runtime environment ('dev' | 'test' | 'prod')
Types
type AppEnv = "prod" | "dev" | "test";

interface EnvAdapter {
  readonly name: string;
  get(key: string): string | undefined;
  getRuntimeEnv(): AppEnv;
}

Examples

Node.js with .env file
import { createEnvAdapter } from "@rx-ted/config";

const adapter = createEnvAdapter("/path/to/.env");

const dbHost = adapter.get("DB_HOST");
const dbPort = Number(adapter.get("DB_PORT") || "3306");
Deno
import { createEnvAdapter } from "@rx-ted/config";

const adapter = createEnvAdapter();

// Deno reads from Deno.env automatically
const apiKey = adapter.get("API_KEY");
Cloudflare Workers
import { createEnvAdapter } from "@rx-ted/config";

export default {
  async fetch(request: Request, env: Env) {
    const adapter = createEnvAdapter(env);
    const apiUrl = adapter.get("API_URL");
    // ...
  },
};
Checking Environment
const adapter = createEnvAdapter();
const env = adapter.getRuntimeEnv();

if (env === "dev") {
  console.log("Development mode");
} else if (env === "prod") {
  console.log("Production mode");
}

Environment Detection

The adapter detects environment from these environment variables (in order):

  1. NODE_ENV
  2. DENO_ENV (Deno only)
  3. ENVIRONMENT

Values:

  • production / prod'prod'
  • test / testing'test'
  • Anything else → 'dev'

Keywords