/** * Models URL query parameters as ordered string pairs. * * `UrlParams` is used for HTTP client query strings, URL-encoded form bodies, * and server-side decoding. Values can be built from records, iterables, or * native `URLSearchParams`, then updated, serialized, converted to a `URL`, or * decoded with schemas. * * @stability unstable * @since 4.0.0 */ import * as Arr from "../Array.ts"; import * as Context from "../Context.ts"; import * as Equ from "../Equivalence.ts"; import type { Inspectable } from "../Inspectable.ts"; import * as Option from "../Option.ts"; import type { Pipeable } from "../Pipeable.ts"; import type { ReadonlyRecord } from "../Record.ts"; import * as Redactable from "../Redactable.ts"; import * as Redacted from "../Redacted.ts"; declare const TypeId = "~effect/http/UrlParams"; /** * Immutable collection of URL query parameters. * * **Details** * * Parameters are ordered key-value pairs, and a key can repeat. Each value is a * string or a `Redacted` string, which is sent unwrapped. Inspection redacts * `Redacted` values and values whose names match `CurrentRedactedNames`. * * @stability unstable * @category models * @since 4.0.0 */ export interface UrlParams extends Pipeable, Inspectable, Redactable.Redactable, Iterable { readonly [TypeId]: typeof TypeId; readonly params: ReadonlyArray; } /** * Returns `true` when a value is a `UrlParams` instance. * * @stability unstable * @category guards * @since 4.0.0 */ export declare const isUrlParams: (u: unknown) => u is UrlParams; /** * Input accepted when constructing `UrlParams`. * * **Details** * * Values can be provided as a coercible record, an iterable of key-value pairs, or * a native `URLSearchParams` value. * * @stability unstable * @category models * @since 4.0.0 */ export type Input = UrlParams | CoercibleRecordInput | Iterable | URLSearchParams; type CoercibleRecordInput = CoercibleRecord & { readonly [Symbol.iterator]?: never; }; /** * Value that can be converted into a URL parameter string. * * **Details** * * `Redacted` values are stored wrapped and sent unwrapped. * * **Gotchas** * * `undefined` values are skipped when constructing from input. * * @stability unstable * @category models * @since 4.0.0 */ export type Coercible = string | number | bigint | boolean | null | undefined | Redacted.Redacted; /** * @stability unstable * @category models * @since 4.0.0 */ type CoercibleRecordField = A extends Coercible ? A : A extends ReadonlyArray ? ReadonlyArray : A extends object ? CoercibleRecord : never; /** * Record input whose fields can be coerced into URL parameter values. * * **Details** * * Nested records are rendered using bracket notation, and arrays produce repeated * parameters. * * @stability unstable * @category models * @since 4.0.0 */ export type CoercibleRecord = { readonly [K in keyof A]: CoercibleRecordField; }; /** * Creates `UrlParams` from ordered key-value pairs. * * **Details** * * The input pairs are used as-is and are not coerced or normalized. * * @stability unstable * @category constructors * @since 4.0.0 */ export declare const make: (params: ReadonlyArray) => UrlParams; /** * Creates `UrlParams` from a supported input shape. * * **Details** * * Primitive values are converted to strings, arrays produce repeated parameters, * nested records use bracket notation, and `undefined` values are omitted. * `Redacted` values are kept as-is. * * @stability unstable * @category constructors * @since 4.0.0 */ export declare const fromInput: (input: Input) => UrlParams; /** * Provides an order-sensitive `Equivalence` instance for `UrlParams`. * * **Details** * * Two values are equivalent when they contain the same key-value pairs in the same * order. * * @stability unstable * @category instances * @since 4.0.0 */ export declare const Equivalence: Equ.Equivalence; /** * An empty `UrlParams` value. * * @stability unstable * @category constructors * @since 4.0.0 */ export declare const empty: UrlParams; /** * Returns all values for a query parameter key in insertion order. * * **Details** * * Returns an empty array when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const getAll: { /** * Returns all values for a query parameter key in insertion order. * * **Details** * * Returns an empty array when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string): (self: UrlParams) => ReadonlyArray; /** * Returns all values for a query parameter key in insertion order. * * **Details** * * Returns an empty array when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string): ReadonlyArray; }; /** * Returns the first value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the first occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const getFirst: { /** * Returns the first value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the first occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string): (self: UrlParams) => Option.Option; /** * Returns the first value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the first occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string): Option.Option; }; /** * Returns the last value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the last occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const getLast: { /** * Returns the last value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the last occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string): (self: UrlParams) => Option.Option; /** * Returns the last value for a query parameter key safely. * * **When to use** * * Use when duplicate query parameters are ordered and the last occurrence has * precedence. * * **Details** * * Returns `Option.none` when the key is absent. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string): Option.Option; }; /** * Sets a query parameter to a single value. * * **Details** * * Existing values for the same key are removed, and the new value is appended to * the end. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const set: { /** * Sets a query parameter to a single value. * * **Details** * * Existing values for the same key are removed, and the new value is appended to * the end. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string, value: Coercible): (self: UrlParams) => UrlParams; /** * Sets a query parameter to a single value. * * **Details** * * Existing values for the same key are removed, and the new value is appended to * the end. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string, value: Coercible): UrlParams; }; /** * Transforms the underlying ordered key-value pairs of `UrlParams`. * * **Details** * * The result is wrapped in a new `UrlParams` value. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const transform: { /** * Transforms the underlying ordered key-value pairs of `UrlParams`. * * **Details** * * The result is wrapped in a new `UrlParams` value. * * @stability unstable * @category combinators * @since 4.0.0 */ (f: (params: UrlParams["params"]) => UrlParams["params"]): (self: UrlParams) => UrlParams; /** * Transforms the underlying ordered key-value pairs of `UrlParams`. * * **Details** * * The result is wrapped in a new `UrlParams` value. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, f: (params: UrlParams["params"]) => UrlParams["params"]): UrlParams; }; /** * Sets multiple query parameters from input. * * **Details** * * Keys present in the input replace existing values for those keys, while * unmentioned existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const setAll: { /** * Sets multiple query parameters from input. * * **Details** * * Keys present in the input replace existing values for those keys, while * unmentioned existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ (input: Input): (self: UrlParams) => UrlParams; /** * Sets multiple query parameters from input. * * **Details** * * Keys present in the input replace existing values for those keys, while * unmentioned existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, input: Input): UrlParams; }; /** * Appends a query parameter value without removing existing values for the key. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const append: { /** * Appends a query parameter value without removing existing values for the key. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string, value: Coercible): (self: UrlParams) => UrlParams; /** * Appends a query parameter value without removing existing values for the key. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string, value: Coercible): UrlParams; }; /** * Appends all query parameters produced from the supplied input. * * **Details** * * Existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const appendAll: { /** * Appends all query parameters produced from the supplied input. * * **Details** * * Existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ (input: Input): (self: UrlParams) => UrlParams; /** * Appends all query parameters produced from the supplied input. * * **Details** * * Existing parameters are preserved. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, input: Input): UrlParams; }; /** * Removes all query parameter values for the specified key. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const remove: { /** * Removes all query parameter values for the specified key. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string): (self: UrlParams) => UrlParams; /** * Removes all query parameter values for the specified key. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string): UrlParams; }; /** * Serializes `UrlParams` to a URL query string without a leading question mark. * * **Gotchas** * * The output contains the unwrapped values of `Redacted` parameters. * * @stability unstable * @category converting * @since 4.0.0 */ export declare const toString: (input: Input) => string; /** * Builds a `Record` containing all the key-value pairs in the given `UrlParams` * as `string` (if only one value for a key) or a `NonEmptyArray` * (when more than one value for a key) * * **Example** (Converting parameters to a record) * * ```ts import.meta.vitest * import { UrlParams } from "effect/http" * * const urlParams = UrlParams.fromInput({ * a: 1, * b: true, * c: "string", * e: [1, 2, 3] * }) * UrlParams.toRecord(urlParams) // => { a: "1", b: "true", c: "string", e: ["1", "2", "3"] } * ``` * * @stability unstable * @category converting * @since 4.0.0 */ export declare const toRecord: (self: UrlParams) => Record>; /** * Builds a readonly record from `UrlParams`. * * **Details** * * Keys with one value map to a string, and keys with multiple values map to a * non-empty readonly array of strings. * * @stability unstable * @category converting * @since 4.0.0 */ export declare const toReadonlyRecord: (self: UrlParams) => ReadonlyRecord>; /** * Returns the parameter pairs with selected values wrapped in `Redacted`. * * **Details** * * Keeps `Redacted` values and wraps values whose names match `isRedactedName`, * preserving order and repeated names. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const redact: { /** * Returns the parameter pairs with selected values wrapped in `Redacted`. * * **Details** * * Keeps `Redacted` values and wraps values whose names match `isRedactedName`, * preserving order and repeated names. * * @stability unstable * @category combinators * @since 4.0.0 */ (key: string | RegExp | ReadonlyArray): (self: UrlParams) => Array<[string, string | Redacted.Redacted]>; /** * Returns the parameter pairs with selected values wrapped in `Redacted`. * * **Details** * * Keeps `Redacted` values and wraps values whose names match `isRedactedName`, * preserving order and repeated names. * * @stability unstable * @category combinators * @since 4.0.0 */ (self: UrlParams, key: string | RegExp | ReadonlyArray): Array<[string, string | Redacted.Redacted]>; }; /** * Checks whether a parameter name matches one of the redaction patterns. * * **Details** * * String patterns match case-insensitively; regular expressions test the name. * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const isRedactedName: (name: string, patterns: ReadonlyArray) => boolean; /** * Redacts URL userinfo and the values of matching query parameters. * * **Details** * * Replaces userinfo with `REDACTED:REDACTED` and query values with `REDACTED` * when their decoded names match `isRedactedName`. Preserves all other text. * When names are omitted, uses the current fiber's `CurrentRedactedNames`, * falling back to the defaults outside a fiber. * * **Example** (Redacting a signed URL) * * ```ts import.meta.vitest * import { UrlParams } from "effect/http" * * const url = UrlParams.redactUrl("https://bucket.test/file?Signature=abc&size=1") * url // => "https://bucket.test/file?Signature=REDACTED&size=1" * ``` * * @stability unstable * @category combinators * @since 4.0.0 */ export declare const redactUrl: (url: string, redactedNames?: ReadonlyArray) => string; /** * Query parameter names or patterns to redact in inspection, spans and errors. * * **Details** * * Defaults include `AWSAccessKeyId`, `Signature`, `sig` and `X-Goog-Signature`. * A custom list replaces the defaults. Matching uses `isRedactedName`. * Redaction leaves request URLs and parameter values unchanged. `Redacted` * values are redacted regardless of this list. * * @stability unstable * @category services * @since 4.0.0 */ export declare const CurrentRedactedNames: Context.Reference; export {}; //# sourceMappingURL=UrlParams.d.ts.map