| /** | |
| * Data sources used by `Config` to load raw configuration values. A | |
| * `ConfigProvider` reads paths from places such as environment variables, | |
| * JavaScript objects, `.env` contents, or directories, and returns a uniform | |
| * `Node` shape that config schemas can decode. The module also includes helpers | |
| * for composing providers, changing paths, and installing providers through | |
| * layers. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| import * as Context from "./Context.ts"; | |
| import * as Effect from "./Effect.ts"; | |
| import * as FileSystem from "./FileSystem.ts"; | |
| import * as Layer from "./Layer.ts"; | |
| import * as Path_ from "./Path.ts"; | |
| import type { Pipeable } from "./Pipeable.ts"; | |
| import type { PlatformError } from "./PlatformError.ts"; | |
| import type { Scope } from "./Scope.ts"; | |
| /** | |
| * A discriminated union describing the shape of a configuration value at a | |
| * given path. | |
| * | |
| * **When to use** | |
| * | |
| * Use when implementing a custom `ConfigProvider` by returning raw | |
| * nodes from the `get` callback passed to {@link make}, or when inspecting raw | |
| * provider output before schema parsing. | |
| * | |
| * **Details** | |
| * | |
| * `Value` is a terminal string leaf. `Record` is an object-like container | |
| * whose immediate child keys are known and may carry an optional co-located | |
| * `value`. `Array` is an indexed container with a known `length` and may also | |
| * carry an optional co-located `value`. | |
| * | |
| * @see {@link makeValue} – construct a `Value` node | |
| * @see {@link makeRecord} – construct a `Record` node | |
| * @see {@link makeArray} – construct an `Array` node | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export type Node = | |
| /** A terminal string value */ | |
| { | |
| readonly _tag: "Value"; | |
| readonly value: string; | |
| } | |
| /** An object; keys are unordered */ | |
| | { | |
| readonly _tag: "Record"; | |
| readonly keys: ReadonlySet<string>; | |
| readonly value: string | undefined; | |
| } | |
| /** An array-like container; length is the number of elements */ | |
| | { | |
| readonly _tag: "Array"; | |
| readonly length: number; | |
| readonly value: string | undefined; | |
| }; | |
| /** | |
| * Creates a `Value` node representing a terminal string leaf. | |
| * | |
| * **When to use** | |
| * | |
| * Use when building nodes inside a custom `ConfigProvider`'s `get` | |
| * callback. | |
| * | |
| * **Details** | |
| * | |
| * The function returns a new plain object. | |
| * | |
| * **Example** (Creating a value node) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const node = ConfigProvider.makeValue("3000") | |
| * // { _tag: "Value", value: "3000" } | |
| * ``` | |
| * | |
| * @see {@link makeRecord} – for object-like containers | |
| * @see {@link makeArray} – for array-like containers | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare function makeValue(value: string): Node; | |
| /** | |
| * Creates a `Record` node representing an object-like container with known | |
| * child keys. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to describe a directory or JSON object inside a custom | |
| * provider. | |
| * | |
| * **Details** | |
| * | |
| * The optional `value` allows a node to be both a container and a leaf at the | |
| * same time (for example, an env var `A=x` that also has children `A_FOO` and | |
| * `A_BAR`). | |
| * | |
| * **Example** (Creating a record node) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const node = ConfigProvider.makeRecord(new Set(["host", "port"])) | |
| * // { _tag: "Record", keys: Set(["host", "port"]), value: undefined } | |
| * ``` | |
| * | |
| * @see {@link makeValue} – for terminal leaves | |
| * @see {@link makeArray} – for array-like containers | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare function makeRecord(keys: ReadonlySet<string>, value?: string): Node; | |
| /** | |
| * Creates an `Array` node representing an indexed container with a known | |
| * length. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to describe a JSON array or numerically indexed env vars | |
| * inside a custom provider. | |
| * | |
| * **Details** | |
| * | |
| * The optional `value` allows a node to be both a container and a leaf at the | |
| * same time. | |
| * | |
| * **Example** (Creating an array node) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const node = ConfigProvider.makeArray(3) | |
| * // { _tag: "Array", length: 3, value: undefined } | |
| * ``` | |
| * | |
| * @see {@link makeValue} – for terminal leaves | |
| * @see {@link makeRecord} – for object-like containers | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare function makeArray(length: number, value?: string): Node; | |
| declare const SourceError_base: new <A extends Record<string, any> = {}>(args: import("./Types.ts").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("./Cause.ts").YieldableError & { | |
| readonly _tag: "SourceError"; | |
| } & Readonly<A>; | |
| /** | |
| * Typed error indicating that a configuration source could not be read. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to report that a custom provider's underlying store is | |
| * unreachable or produced an I/O error while reading configuration data. | |
| * | |
| * **Gotchas** | |
| * | |
| * Do not use `SourceError` for "key not found". That case is represented by | |
| * returning `undefined` from `load` or `get`. | |
| * | |
| * **Example** (Failing with a SourceError) | |
| * | |
| * ```ts | |
| * import { ConfigProvider, Effect } from "effect" | |
| * | |
| * const provider = ConfigProvider.make((_path) => | |
| * Effect.fail( | |
| * new ConfigProvider.SourceError({ message: "connection refused" }) | |
| * ) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link ConfigProvider} – the interface whose `load`/`get` may fail | |
| * with this error | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export declare class SourceError extends SourceError_base<{ | |
| readonly message: string; | |
| readonly cause?: unknown; | |
| }> { | |
| } | |
| /** | |
| * An ordered sequence of string or numeric segments that addresses a node in | |
| * the configuration tree. String segments name object keys; numeric segments | |
| * index into arrays. | |
| * | |
| * **When to use** | |
| * | |
| * Use to address raw configuration nodes when implementing or transforming a | |
| * `ConfigProvider`. | |
| * | |
| * **Example** (A typical config path) | |
| * | |
| * ```ts | |
| * import type { ConfigProvider } from "effect" | |
| * | |
| * const path: ConfigProvider.Path = ["database", "replicas", 0, "host"] | |
| * ``` | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export type Path = ReadonlyArray<string | number>; | |
| /** | |
| * The core interface for loading raw configuration data. | |
| * | |
| * **When to use** | |
| * | |
| * Use to type-annotate variables that hold a provider or to implement a | |
| * custom provider via {@link make}. | |
| * | |
| * **Details** | |
| * | |
| * `load(path)` resolves `mapInput` and `prefix` transformations, then | |
| * delegates to `get`. This is what the `Config` module calls. `get(path)` is | |
| * raw access to the underlying store without path transformations. | |
| * `mapInput` and `prefix` are optional path transformations set by | |
| * {@link mapInput} and {@link nested}. All methods return | |
| * `Effect<Node | undefined, SourceError>`: `undefined` means "not found" and | |
| * `SourceError` means the source itself failed. | |
| * | |
| * @see {@link make} – construct a provider from a lookup function | |
| * @see {@link orElse} – compose providers with fallback | |
| * | |
| * @category models | |
| * @since 2.0.0 | |
| */ | |
| export interface ConfigProvider extends Pipeable { | |
| /** | |
| * Returns the node found at `path`, or `undefined` if it does not exist. | |
| * Fails with `SourceError` when the underlying source cannot be read. | |
| * | |
| * **When to use** | |
| * | |
| * Use to resolve a path through this provider's path transformations before | |
| * reading the backing source. | |
| */ | |
| readonly load: (path: Path) => Effect.Effect<Node | undefined, SourceError>; | |
| /** | |
| * Raw access to the underlying source. | |
| * | |
| * **When to use** | |
| * | |
| * Use to read from the backing source without applying this provider's path | |
| * transformations. | |
| */ | |
| readonly get: (path: Path) => Effect.Effect<Node | undefined, SourceError>; | |
| /** | |
| * Function to map the input path. | |
| * | |
| * **When to use** | |
| * | |
| * Use to store the path transformation applied before raw provider lookup. | |
| */ | |
| readonly mapInput: ((path: Path) => Path) | undefined; | |
| /** | |
| * Prefix to add to the input path. | |
| * | |
| * **When to use** | |
| * | |
| * Use to store the path prefix applied before raw provider lookup. | |
| */ | |
| readonly prefix: Path | undefined; | |
| } | |
| /** | |
| * Context reference for the active raw configuration provider, registered in the context with a | |
| * default value of `fromEnv()`. Because it is a `Context.Reference`, it is | |
| * available without explicit provision; `Config` schemas automatically resolve | |
| * it. | |
| * | |
| * **When to use** | |
| * | |
| * Use to override the active raw configuration provider for an entire program, | |
| * or retrieve the current provider inside an Effect. | |
| * | |
| * **Example** (Providing a custom provider) | |
| * | |
| * ```ts | |
| * import { ConfigProvider, Effect } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromUnknown({ port: 8080 }) | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const current = yield* ConfigProvider.ConfigProvider | |
| * return current | |
| * }).pipe( | |
| * Effect.provideService(ConfigProvider.ConfigProvider, provider) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link layer} – install a provider as a Layer | |
| * @see {@link layerAdd} – add a fallback provider as a Layer | |
| * | |
| * @category services | |
| * @since 2.0.0 | |
| */ | |
| export declare const ConfigProvider: Context.Reference<ConfigProvider>; | |
| /** | |
| * Creates a `ConfigProvider` from a raw lookup function. | |
| * | |
| * **When to use** | |
| * | |
| * Use when implementing a provider backed by a custom store, such as a | |
| * database, remote API, or in-memory map. | |
| * | |
| * **Details** | |
| * | |
| * The `get` callback receives a `Path` and must return | |
| * `Effect<Node | undefined, SourceError>`. Return `undefined` when the path | |
| * does not exist; fail with `SourceError` only for actual I/O errors. | |
| * | |
| * The optional `mapInput` and `prefix` parameters are wired into the | |
| * resulting `load` method so that combinators like {@link mapInput} and | |
| * {@link nested} can compose without wrapping `get`. | |
| * | |
| * **Example** (A simple in-memory provider) | |
| * | |
| * ```ts | |
| * import { ConfigProvider, Effect } from "effect" | |
| * | |
| * const data: Record<string, string> = { | |
| * host: "localhost", | |
| * port: "5432" | |
| * } | |
| * | |
| * const provider = ConfigProvider.make((path) => { | |
| * const key = path.join(".") | |
| * const value = data[key] | |
| * return Effect.succeed( | |
| * value !== undefined ? ConfigProvider.makeValue(value) : undefined | |
| * ) | |
| * }) | |
| * ``` | |
| * | |
| * @see {@link fromEnv} – pre-built provider for environment variables | |
| * @see {@link fromUnknown} – pre-built provider for JSON objects | |
| * | |
| * @category constructors | |
| * @since 2.0.0 | |
| */ | |
| export declare function make(get: (path: Path) => Effect.Effect<Node | undefined, SourceError>, mapInput?: (path: Path) => Path, prefix?: Path): ConfigProvider; | |
| /** | |
| * Returns a provider that falls back to `that` when `self` returns `undefined` | |
| * for a path. | |
| * | |
| * **When to use** | |
| * | |
| * Use to layer multiple config sources, such as env vars plus a defaults file, | |
| * or provide partial overrides on top of a base config. | |
| * | |
| * **Details** | |
| * | |
| * Supports both data-last and data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The fallback only runs when the path is not found (`undefined`). A | |
| * `SourceError` from `self` is not caught; it propagates immediately. | |
| * | |
| * **Example** (Falling back to a default provider) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const envProvider = ConfigProvider.fromEnv({ | |
| * env: { HOST: "prod.example.com" } | |
| * }) | |
| * const defaults = ConfigProvider.fromUnknown({ HOST: "localhost", PORT: "3000" }) | |
| * | |
| * const combined = ConfigProvider.orElse(envProvider, defaults) | |
| * ``` | |
| * | |
| * @see {@link layerAdd} – install a fallback provider via a Layer | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| export declare const orElse: { | |
| /** | |
| * Returns a provider that falls back to `that` when `self` returns `undefined` | |
| * for a path. | |
| * | |
| * **When to use** | |
| * | |
| * Use to layer multiple config sources, such as env vars plus a defaults file, | |
| * or provide partial overrides on top of a base config. | |
| * | |
| * **Details** | |
| * | |
| * Supports both data-last and data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The fallback only runs when the path is not found (`undefined`). A | |
| * `SourceError` from `self` is not caught; it propagates immediately. | |
| * | |
| * **Example** (Falling back to a default provider) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const envProvider = ConfigProvider.fromEnv({ | |
| * env: { HOST: "prod.example.com" } | |
| * }) | |
| * const defaults = ConfigProvider.fromUnknown({ HOST: "localhost", PORT: "3000" }) | |
| * | |
| * const combined = ConfigProvider.orElse(envProvider, defaults) | |
| * ``` | |
| * | |
| * @see {@link layerAdd} – install a fallback provider via a Layer | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| (that: ConfigProvider): (self: ConfigProvider) => ConfigProvider; | |
| /** | |
| * Returns a provider that falls back to `that` when `self` returns `undefined` | |
| * for a path. | |
| * | |
| * **When to use** | |
| * | |
| * Use to layer multiple config sources, such as env vars plus a defaults file, | |
| * or provide partial overrides on top of a base config. | |
| * | |
| * **Details** | |
| * | |
| * Supports both data-last and data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The fallback only runs when the path is not found (`undefined`). A | |
| * `SourceError` from `self` is not caught; it propagates immediately. | |
| * | |
| * **Example** (Falling back to a default provider) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const envProvider = ConfigProvider.fromEnv({ | |
| * env: { HOST: "prod.example.com" } | |
| * }) | |
| * const defaults = ConfigProvider.fromUnknown({ HOST: "localhost", PORT: "3000" }) | |
| * | |
| * const combined = ConfigProvider.orElse(envProvider, defaults) | |
| * ``` | |
| * | |
| * @see {@link layerAdd} – install a fallback provider via a Layer | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| (self: ConfigProvider, that: ConfigProvider): ConfigProvider; | |
| }; | |
| /** | |
| * Transforms the path segments before they reach the underlying store. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to rename, re-case, or otherwise transform config path | |
| * segments before lookup. | |
| * | |
| * **Details** | |
| * | |
| * The function `f` receives the full path and must return a new path. If the | |
| * provider already has a `mapInput`, the functions compose: the existing | |
| * mapping runs first, then `f`. Supports both data-last and data-first calling | |
| * conventions. | |
| * | |
| * **Example** (Uppercasing path segments) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost" } | |
| * }) | |
| * | |
| * const upper = ConfigProvider.mapInput(provider, (path) => | |
| * path.map((seg) => | |
| * typeof seg === "string" ? seg.toUpperCase() : seg | |
| * ) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link constantCase} – a preset that converts to `CONSTANT_CASE` | |
| * @see {@link nested} – for prepending a prefix instead of transforming | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| export declare const mapInput: { | |
| /** | |
| * Transforms the path segments before they reach the underlying store. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to rename, re-case, or otherwise transform config path | |
| * segments before lookup. | |
| * | |
| * **Details** | |
| * | |
| * The function `f` receives the full path and must return a new path. If the | |
| * provider already has a `mapInput`, the functions compose: the existing | |
| * mapping runs first, then `f`. Supports both data-last and data-first calling | |
| * conventions. | |
| * | |
| * **Example** (Uppercasing path segments) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost" } | |
| * }) | |
| * | |
| * const upper = ConfigProvider.mapInput(provider, (path) => | |
| * path.map((seg) => | |
| * typeof seg === "string" ? seg.toUpperCase() : seg | |
| * ) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link constantCase} – a preset that converts to `CONSTANT_CASE` | |
| * @see {@link nested} – for prepending a prefix instead of transforming | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| (f: (path: Path) => Path): (self: ConfigProvider) => ConfigProvider; | |
| /** | |
| * Transforms the path segments before they reach the underlying store. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to rename, re-case, or otherwise transform config path | |
| * segments before lookup. | |
| * | |
| * **Details** | |
| * | |
| * The function `f` receives the full path and must return a new path. If the | |
| * provider already has a `mapInput`, the functions compose: the existing | |
| * mapping runs first, then `f`. Supports both data-last and data-first calling | |
| * conventions. | |
| * | |
| * **Example** (Uppercasing path segments) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost" } | |
| * }) | |
| * | |
| * const upper = ConfigProvider.mapInput(provider, (path) => | |
| * path.map((seg) => | |
| * typeof seg === "string" ? seg.toUpperCase() : seg | |
| * ) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link constantCase} – a preset that converts to `CONSTANT_CASE` | |
| * @see {@link nested} – for prepending a prefix instead of transforming | |
| * | |
| * @category combinators | |
| * @since 4.0.0 | |
| */ | |
| (self: ConfigProvider, f: (path: Path) => Path): ConfigProvider; | |
| }; | |
| /** | |
| * Converts all string path segments to `CONSTANT_CASE` before lookup. | |
| * | |
| * **When to use** | |
| * | |
| * Use to bridge camelCase schema keys to `SCREAMING_SNAKE_CASE` | |
| * environment variables. | |
| * | |
| * **Details** | |
| * | |
| * Numeric segments are left unchanged. This is a specialization of | |
| * {@link mapInput}. | |
| * | |
| * **Example** (Resolving camelCase keys to env vars) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { DATABASE_HOST: "localhost" } | |
| * }).pipe(ConfigProvider.constantCase) | |
| * | |
| * // path ["databaseHost"] now resolves to env var DATABASE_HOST | |
| * ``` | |
| * | |
| * @see {@link mapInput} – for arbitrary path transformations | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| export declare const constantCase: (self: ConfigProvider) => ConfigProvider; | |
| /** | |
| * Scopes a provider so that all lookups are prefixed with the given path | |
| * segments. | |
| * | |
| * **When to use** | |
| * | |
| * Use to namespace config under a prefix like `"app"` or `"database"`, or | |
| * reuse the same provider shape for multiple sub-configs. | |
| * | |
| * **Details** | |
| * | |
| * Accepts a single string or a full `Path` array. Supports both data-last and | |
| * data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The prefix is prepended after any `mapInput` transformation runs, so | |
| * ordering matters when composing with {@link mapInput} or | |
| * {@link constantCase}. | |
| * | |
| * **Example** (Nesting under a prefix) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost", APP_PORT: "3000" } | |
| * }) | |
| * | |
| * // Lookups for ["HOST"] now resolve to ["APP", "HOST"] | |
| * const scoped = ConfigProvider.nested(provider, "APP") | |
| * ``` | |
| * | |
| * @see {@link mapInput} – for arbitrary path transformations | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| export declare const nested: { | |
| /** | |
| * Scopes a provider so that all lookups are prefixed with the given path | |
| * segments. | |
| * | |
| * **When to use** | |
| * | |
| * Use to namespace config under a prefix like `"app"` or `"database"`, or | |
| * reuse the same provider shape for multiple sub-configs. | |
| * | |
| * **Details** | |
| * | |
| * Accepts a single string or a full `Path` array. Supports both data-last and | |
| * data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The prefix is prepended after any `mapInput` transformation runs, so | |
| * ordering matters when composing with {@link mapInput} or | |
| * {@link constantCase}. | |
| * | |
| * **Example** (Nesting under a prefix) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost", APP_PORT: "3000" } | |
| * }) | |
| * | |
| * // Lookups for ["HOST"] now resolve to ["APP", "HOST"] | |
| * const scoped = ConfigProvider.nested(provider, "APP") | |
| * ``` | |
| * | |
| * @see {@link mapInput} – for arbitrary path transformations | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| (prefix: string | Path): (self: ConfigProvider) => ConfigProvider; | |
| /** | |
| * Scopes a provider so that all lookups are prefixed with the given path | |
| * segments. | |
| * | |
| * **When to use** | |
| * | |
| * Use to namespace config under a prefix like `"app"` or `"database"`, or | |
| * reuse the same provider shape for multiple sub-configs. | |
| * | |
| * **Details** | |
| * | |
| * Accepts a single string or a full `Path` array. Supports both data-last and | |
| * data-first calling conventions. | |
| * | |
| * **Gotchas** | |
| * | |
| * The prefix is prepended after any `mapInput` transformation runs, so | |
| * ordering matters when composing with {@link mapInput} or | |
| * {@link constantCase}. | |
| * | |
| * **Example** (Nesting under a prefix) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { APP_HOST: "localhost", APP_PORT: "3000" } | |
| * }) | |
| * | |
| * // Lookups for ["HOST"] now resolve to ["APP", "HOST"] | |
| * const scoped = ConfigProvider.nested(provider, "APP") | |
| * ``` | |
| * | |
| * @see {@link mapInput} – for arbitrary path transformations | |
| * | |
| * @category combinators | |
| * @since 2.0.0 | |
| */ | |
| (self: ConfigProvider, prefix: string | Path): ConfigProvider; | |
| }; | |
| /** | |
| * Provides a layer that installs a `ConfigProvider` as the active provider for | |
| * all downstream effects, replacing any previously installed provider. | |
| * | |
| * **When to use** | |
| * | |
| * Use to set the config source for an entire application or test suite. | |
| * | |
| * **Details** | |
| * | |
| * Accepts either a plain `ConfigProvider` or an `Effect` that produces one. | |
| * When given an Effect, it is evaluated once when the layer is built. | |
| * | |
| * **Example** (Using a JSON object as the config source) | |
| * | |
| * ```ts | |
| * import { Config, ConfigProvider, Effect, Layer } from "effect" | |
| * | |
| * const TestLayer = ConfigProvider.layer( | |
| * ConfigProvider.fromUnknown({ port: 8080 }) | |
| * ) | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const port = yield* Config.number("port") | |
| * return port | |
| * }) | |
| * | |
| * // Effect.runSync(Effect.provide(program, TestLayer)) // 8080 | |
| * ``` | |
| * | |
| * @see {@link layerAdd} – add a provider without replacing the existing one | |
| * | |
| * @category layers | |
| * @since 4.0.0 | |
| */ | |
| export declare const layer: <E = never, R = never>(self: ConfigProvider | Effect.Effect<ConfigProvider, E, R>) => Layer.Layer<never, E, Exclude<R, Scope>>; | |
| /** | |
| * Creates a Layer that composes a new `ConfigProvider` with the currently | |
| * active one, rather than replacing it. | |
| * | |
| * **When to use** | |
| * | |
| * Use to add defaults that should only apply when the primary provider has no | |
| * value for a path, or override specific keys while keeping the rest from the | |
| * existing provider by setting `asPrimary: true`. | |
| * | |
| * **Details** | |
| * | |
| * By default, the new provider acts as a fallback and is consulted only when | |
| * the current provider returns `undefined`. Set `asPrimary: true` to make the | |
| * new provider the primary source, with the existing one as fallback. | |
| * | |
| * **Example** (Adding default values) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const defaults = ConfigProvider.fromUnknown({ | |
| * HOST: "localhost", | |
| * PORT: "3000" | |
| * }) | |
| * | |
| * // The current env provider is tried first; `defaults` is the fallback | |
| * const DefaultsLayer = ConfigProvider.layerAdd(defaults) | |
| * ``` | |
| * | |
| * @see {@link layer} – replace the provider entirely | |
| * @see {@link orElse} – compose providers without layers | |
| * | |
| * @category layers | |
| * @since 4.0.0 | |
| */ | |
| export declare const layerAdd: <E = never, R = never>(self: ConfigProvider | Effect.Effect<ConfigProvider, E, R>, options?: { | |
| readonly asPrimary?: boolean | undefined; | |
| } | undefined) => Layer.Layer<never, E, Exclude<R, Scope>>; | |
| /** | |
| * Creates a `ConfigProvider` backed by an in-memory JavaScript value | |
| * (typically a parsed JSON object). | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need deterministic config from an in-memory JavaScript value, | |
| * such as in tests, embedded config, or parsed JSON. | |
| * | |
| * **Details** | |
| * | |
| * Path traversal follows standard JS rules: string segments index into object | |
| * keys, numeric segments index into arrays. Returns `undefined` for any path | |
| * that cannot be resolved. Never fails with `SourceError`. | |
| * | |
| * Primitive values (`number`, `boolean`, `bigint`) are stringified via | |
| * `String(...)`. | |
| * | |
| * **Example** (Providing config from a plain object) | |
| * | |
| * ```ts | |
| * import { Config, ConfigProvider, Effect } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromUnknown({ | |
| * database: { | |
| * host: "localhost", | |
| * port: 5432 | |
| * } | |
| * }) | |
| * | |
| * const host = Config.string("host").parse( | |
| * provider.pipe(ConfigProvider.nested("database")) | |
| * ) | |
| * | |
| * // Effect.runSync(host) // "localhost" | |
| * ``` | |
| * | |
| * @see {@link fromEnv} – for environment variables | |
| * @see {@link make} – for custom backing stores | |
| * | |
| * @category ConfigProviders | |
| * @since 4.0.0 | |
| */ | |
| export declare function fromUnknown(root: unknown): ConfigProvider; | |
| /** | |
| * Creates a `ConfigProvider` backed by environment variables. | |
| * | |
| * **When to use** | |
| * | |
| * Use to read configuration from `process.env`, which is the default when no | |
| * provider is explicitly set, or pass a custom env record for testing or | |
| * non-Node runtimes. | |
| * | |
| * **Details** | |
| * | |
| * Path segments are joined with `_` for direct lookup, and env var names are | |
| * also split on `_` to build a trie for child key discovery. This means | |
| * `DATABASE_HOST=localhost` is accessible at both path `["DATABASE_HOST"]` | |
| * and `["DATABASE", "HOST"]`. If all immediate children of a trie node have | |
| * purely numeric names, the node is reported as an `Array`; otherwise as a | |
| * `Record`. | |
| * | |
| * The default environment merges `process.env` and `import.meta.env` (when | |
| * available). Override by passing `{ env: { ... } }`. | |
| * | |
| * Never fails with `SourceError` — all lookups are synchronous. | |
| * | |
| * **Example** (Reading from a custom env record) | |
| * | |
| * ```ts | |
| * import { Config, ConfigProvider, Effect } from "effect" | |
| * | |
| * const provider = ConfigProvider.fromEnv({ | |
| * env: { | |
| * DATABASE_HOST: "localhost", | |
| * DATABASE_PORT: "5432" | |
| * } | |
| * }) | |
| * | |
| * const host = Config.string("HOST").parse( | |
| * provider.pipe(ConfigProvider.nested("DATABASE")) | |
| * ) | |
| * | |
| * // Effect.runSync(host) // "localhost" | |
| * ``` | |
| * | |
| * @see {@link fromUnknown} – for JSON objects | |
| * @see {@link constantCase} – bridge camelCase keys to SCREAMING_SNAKE_CASE | |
| * | |
| * @category ConfigProviders | |
| * @since 2.0.0 | |
| */ | |
| export declare function fromEnv(options?: { | |
| readonly env?: Record<string, string> | undefined; | |
| }): ConfigProvider; | |
| /** | |
| * Creates a `ConfigProvider` by parsing the string contents of a `.env` file. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you already have the `.env` contents as a string, such as contents | |
| * fetched from a remote store or embedded in a test. | |
| * | |
| * **Details** | |
| * | |
| * Supports `export` prefixes, single/double/backtick quoting, inline comments, | |
| * and escaped newlines. Variable expansion (for example, `${VAR}`) is disabled | |
| * by default; enable with `{ expandVariables: true }`. | |
| * | |
| * Parsing is based on the `dotenv` / `dotenv-expand` algorithm. | |
| * | |
| * Internally delegates to {@link fromEnv} with the parsed key-value pairs. | |
| * | |
| * **Example** (Parsing .env contents) | |
| * | |
| * ```ts | |
| * import { ConfigProvider } from "effect" | |
| * | |
| * const contents = ` | |
| * HOST=localhost | |
| * PORT=3000 | |
| * # this is a comment | |
| * ` | |
| * | |
| * const provider = ConfigProvider.fromDotEnvContents(contents) | |
| * ``` | |
| * | |
| * @see {@link fromDotEnv} – loads a `.env` file from disk | |
| * @see {@link fromEnv} – for raw environment variable access | |
| * | |
| * @category ConfigProviders | |
| * @since 4.0.0 | |
| */ | |
| export declare function fromDotEnvContents(lines: string, options?: { | |
| readonly expandVariables?: boolean | undefined; | |
| }): ConfigProvider; | |
| /** | |
| * Creates a `ConfigProvider` by reading and parsing a `.env` file from the | |
| * file system. | |
| * | |
| * **When to use** | |
| * | |
| * Use to load environment config from a `.env` file at application startup. | |
| * | |
| * **Details** | |
| * | |
| * Requires `FileSystem` in the Effect context. Defaults to reading `".env"` in | |
| * the current directory; override with `{ path: "/custom/.env" }`. | |
| * | |
| * Returns an `Effect` that resolves to a `ConfigProvider`. Fails with a | |
| * `PlatformError` if the file cannot be read. | |
| * | |
| * **Example** (Loading a .env file) | |
| * | |
| * ```ts | |
| * import { ConfigProvider, Effect } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const provider = yield* ConfigProvider.fromDotEnv() | |
| * return provider | |
| * }) | |
| * ``` | |
| * | |
| * @see {@link fromDotEnvContents} – parse a `.env` string directly | |
| * @see {@link fromEnv} – read from the runtime environment | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromDotEnv: (options?: { | |
| readonly path?: string | undefined; | |
| readonly expandVariables?: boolean | undefined; | |
| }) => Effect.Effect<ConfigProvider, PlatformError, FileSystem.FileSystem>; | |
| /** | |
| * Creates a `ConfigProvider` that reads configuration from a directory tree | |
| * on disk, where each file is a leaf value and each directory is a container. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you expose each config key as a file under a directory, such as | |
| * Kubernetes ConfigMap or Secret volume mounts. | |
| * | |
| * **Details** | |
| * | |
| * Resolution tries a regular file first and returns a `Value` node with | |
| * trimmed file contents. If the file read fails, it tries a directory and | |
| * returns a `Record` node with immediate child names as keys. If both fail, it | |
| * returns `SourceError`. | |
| * | |
| * Requires `Path` and `FileSystem` in the Effect context. Defaults to root | |
| * path `/`; override with `{ rootPath: "/etc/config" }`. | |
| * | |
| * **Example** (Reading config from a directory) | |
| * | |
| * ```ts | |
| * import { ConfigProvider, Effect } from "effect" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const provider = yield* ConfigProvider.fromDir({ | |
| * rootPath: "/etc/myapp" | |
| * }) | |
| * return provider | |
| * }) | |
| * ``` | |
| * | |
| * @see {@link fromEnv} – for environment variables | |
| * @see {@link fromDotEnv} – for `.env` files | |
| * | |
| * @category ConfigProviders | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromDir: (options?: { | |
| readonly rootPath?: string | undefined; | |
| }) => Effect.Effect<ConfigProvider, never, Path_.Path | FileSystem.FileSystem>; | |
| export {}; | |
| //# sourceMappingURL=ConfigProvider.d.ts.map |
Xet Storage Details
- Size:
- 31 kB
- Xet hash:
- 4bb3f46ccc957c4ebc580adc67d81fa615f70a37edf76a4ae31a8a09fc4af70b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.