{"_id":"@emergente-labs/effect-env","name":"@emergente-labs/effect-env","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@emergente-labs/effect-env","version":"0.1.1","description":"Type-safe Effect-TS environment variable configuration with development fallbacks","type":"module","license":"MIT","author":{"name":"Emergente Labs"},"repository":{"type":"git","url":"git+https://github.com/emergente-labs/effect-env.git"},"bugs":{"url":"https://github.com/emergente-labs/effect-env/issues"},"homepage":"https://github.com/emergente-labs/effect-env#readme","keywords":["effect","effect-ts","environment","config","env","type-safe","typed-env"],"engines":{"node":">=18.0.0"},"types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"prepare":"pnpm build","build":"tsup","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build && pnpm run test"},"dependencies":{"effect":"^3.19.8"},"devDependencies":{"@effect/vitest":"^0.27.0","tsup":"^8.4.0","typescript":"^5.9.3","vitest":"^4.0.16"},"_id":"@emergente-labs/effect-env@0.1.1","gitHead":"10b3a2c982324d0f500997ab129fc639e3f36ede","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-YyN4DLWHxK/7ZeGnS8aA8fFOttxdfWyHbkX/qHo4bg60wrQEA7HGaXoITm0ETh57VwU26lvGDwGobcLOQl0qYA==","shasum":"aceb78d0f453adb2fc97eff6fc5688ecbc38f338","tarball":"https://registry.npmjs.org/@emergente-labs/effect-env/-/effect-env-0.1.1.tgz","fileCount":6,"unpackedSize":26403,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@emergente-labs%2feffect-env@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICLth+YiDU/f9EbhzC9zLO3NWXVnntjAAq1ZreK8SRwNAiEAytKwon2s19eHapx1wSjksp5b9T2fYWxXDArmDeLQGlo="}]},"_npmUser":{"name":"francisco-m001","email":"francisco@sellhub.cx"},"directories":{},"maintainers":[{"name":"francisco-m001","email":"francisco@sellhub.cx"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/effect-env_0.1.1_1771348331853_0.0575612379803605"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-17T17:12:11.456Z","0.1.1":"2026-02-17T17:12:12.001Z","modified":"2026-02-17T17:12:12.408Z"},"maintainers":[{"name":"francisco-m001","email":"francisco@sellhub.cx"}],"description":"Type-safe Effect-TS environment variable configuration with development fallbacks","homepage":"https://github.com/emergente-labs/effect-env#readme","keywords":["effect","effect-ts","environment","config","env","type-safe","typed-env"],"repository":{"type":"git","url":"git+https://github.com/emergente-labs/effect-env.git"},"author":{"name":"Emergente Labs"},"bugs":{"url":"https://github.com/emergente-labs/effect-env/issues"},"license":"MIT","readme":"# @emergente-labs/effect-env\n\nType-safe environment variable configuration for [Effect-TS](https://effect.website) applications. The \"T3 env\" equivalent for Effect -- clean DX, per-environment defaults, proxy access, and test helpers.\n\n## Installation\n\n```bash\nnpm install @emergente-labs/effect-env effect\n```\n\n## Quick Start\n\n```typescript\nimport { createEnv } from \"@emergente-labs/effect-env\";\nimport { Config, Effect, Redacted } from \"effect\";\n\nconst { env, requiredSecrets } = createEnv({\n  vars: {\n    // Required in all environments\n    databaseUrl: Config.redacted(\"DATABASE_URL\"),\n    \n    // Optional in development, required in production\n    apiKey: [Config.string(\"API_KEY\"), \"dev-key-123\"] as const,\n    \n    // Number config with default\n    port: [Config.number(\"PORT\"), 3000] as const,\n  },\n});\n\n// requiredSecrets = [\"DATABASE_URL\"]\n\n// Access individual variables\nconst program = Effect.gen(function* () {\n  const dbUrl = yield* env.databaseUrl;      // Redacted<string>\n  const key = yield* env.apiKey;             // string\n  const port = yield* env.port;              // number\n  \n  // Or access all at once\n  const all = yield* env;\n  // { databaseUrl: Redacted<string>, apiKey: string, port: number }\n});\n```\n\n## API\n\n### `createEnv(options)`\n\nCreates a typed environment configuration from a record of Config definitions.\n\nEach variable can be:\n- `Config.Config<T>` -- required in all environments\n- `[Config.Config<T>, T] as const` -- required only in production, uses default in dev/test\n\nReturns `{ env, requiredSecrets }`:\n- `env` -- dual-access proxy: `yield* env.key` for individual values, `yield* env` for all\n- `requiredSecrets` -- array of env var names that must be set in production\n\n### `createEnvVar(config, defaultValueInDevelopment?)`\n\nLower-level function for creating individual environment-aware configs.\n\n### `createTestEnvLayer(envMap)`\n\nCreates an Effect Layer that provides mock environment variables for testing.\n\n```typescript\nimport { createTestEnvLayer } from \"@emergente-labs/effect-env\";\n\nconst testLayer = createTestEnvLayer({\n  DATABASE_URL: \"postgresql://localhost:5432/test\",\n  NODE_ENV: \"test\",\n});\n\n// Use in tests\nconst result = yield* myEffect.pipe(Effect.provide(testLayer));\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-e57efa46069fd957f02f65e3664b37d8"}