EdgeAIG's picture
download
raw
16.2 kB
/**
* 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.
*
* @since 4.0.0
*/
import * as Arr from "../../Array.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 Result from "../../Result.ts";
import * as Schema from "../../Schema.ts";
declare const TypeId = "~effect/http/UrlParams";
/**
* Immutable collection of URL query parameters.
*
* **Details**
*
* Parameters are stored as ordered string key-value pairs and can contain multiple
* values for the same key.
*
* @category models
* @since 4.0.0
*/
export interface UrlParams extends Pipeable, Inspectable, Iterable<readonly [string, string]> {
readonly [TypeId]: typeof TypeId;
readonly params: ReadonlyArray<readonly [string, string]>;
}
/**
* Returns `true` when a value is a `UrlParams` instance.
*
* @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.
*
* @category models
* @since 4.0.0
*/
export type Input = CoercibleRecordInput | Iterable<readonly [string, Coercible]> | URLSearchParams;
type CoercibleRecordInput = CoercibleRecord & {
readonly [Symbol.iterator]?: never;
};
/**
* Primitive value that can be converted into a URL parameter string.
*
* **Gotchas**
*
* `undefined` values are skipped when constructing from input.
*
* @category models
* @since 4.0.0
*/
export type Coercible = string | number | bigint | boolean | null | undefined;
/**
* @category models
* @since 4.0.0
*/
type CoercibleRecordField<A> = A extends Coercible ? A : A extends ReadonlyArray<infer Item> ? ReadonlyArray<Item extends Coercible ? Item : never> : A extends object ? CoercibleRecord<A> : 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.
*
* @category models
* @since 4.0.0
*/
export type CoercibleRecord<A extends object = any> = {
readonly [K in keyof A]: CoercibleRecordField<A[K]>;
};
/**
* Creates `UrlParams` from ordered string key-value pairs.
*
* **Details**
*
* The input pairs are used as-is and are not coerced or normalized.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: (params: ReadonlyArray<readonly [string, string]>) => 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.
*
* @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.
*
* @category instances
* @since 4.0.0
*/
export declare const Equivalence: Equ.Equivalence<UrlParams>;
/**
* Schema type for `UrlParams`.
*
* @category schemas
* @since 4.0.0
*/
export interface UrlParamsSchema extends Schema.declare<UrlParams, ReadonlyArray<readonly [string, string]>> {
}
/**
* Schema for `UrlParams`.
*
* **Details**
*
* The encoded representation is an array of string key-value tuples.
*
* @category schemas
* @since 4.0.0
*/
export declare const UrlParamsSchema: UrlParamsSchema;
/**
* An empty `UrlParams` value.
*
* @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.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
(key: string): (self: UrlParams) => ReadonlyArray<string>;
/**
* Returns all values for a query parameter key in insertion order.
*
* **Details**
*
* Returns an empty array when the key is absent.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, key: string): ReadonlyArray<string>;
};
/**
* 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.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
(key: string): (self: UrlParams) => Option.Option<string>;
/**
* 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.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, key: string): Option.Option<string>;
};
/**
* 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.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
(key: string): (self: UrlParams) => Option.Option<string>;
/**
* 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.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, key: string): Option.Option<string>;
};
/**
* 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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, input: Input): UrlParams;
};
/**
* Appends a query parameter value without removing existing values for the key.
*
* @category combinators
* @since 4.0.0
*/
export declare const append: {
/**
* Appends a query parameter value without removing existing values for the key.
*
* @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.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
export declare const appendAll: {
/**
* Appends all query parameters produced from the supplied input.
*
* **Details**
*
* Existing parameters are preserved.
*
* @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.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, input: Input): UrlParams;
};
/**
* Removes all query parameter values for the specified key.
*
* @category combinators
* @since 4.0.0
*/
export declare const remove: {
/**
* Removes all query parameter values for the specified key.
*
* @category combinators
* @since 4.0.0
*/
(key: string): (self: UrlParams) => UrlParams;
/**
* Removes all query parameter values for the specified key.
*
* @category combinators
* @since 4.0.0
*/
(self: UrlParams, key: string): UrlParams;
};
declare const UrlParamsError_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: "UrlParamsError";
} & Readonly<A>;
/**
* Error returned when constructing a `URL` from `UrlParams` fails.
*
* @category errors
* @since 4.0.0
*/
export declare class UrlParamsError extends UrlParamsError_base<{
cause: unknown;
}> {
}
/**
* Creates a `URL` safely by appending `UrlParams` and an optional hash to a URL string.
*
* **Details**
*
* Returns a `Result` that fails with `UrlParamsError` if the URL cannot be
* constructed.
*
* @category converting
* @since 4.0.0
*/
export declare const makeUrl: (url: string, params: UrlParams, hash: string | undefined) => Result.Result<URL, UrlParamsError>;
/**
* Serializes `UrlParams` to a URL query string without a leading question mark.
*
* @category converting
* @since 4.0.0
*/
export declare const toString: (self: UrlParams) => 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<string>`
* (when more than one value for a key)
*
* **Example** (Converting parameters to a record)
*
* ```ts
* import { UrlParams } from "effect/unstable/http"
* import * as assert from "node:assert"
*
* const urlParams = UrlParams.fromInput({
* a: 1,
* b: true,
* c: "string",
* e: [1, 2, 3]
* })
* const result = UrlParams.toRecord(urlParams)
*
* assert.deepStrictEqual(
* result,
* { "a": "1", "b": "true", "c": "string", "e": ["1", "2", "3"] }
* )
* ```
*
* @category converting
* @since 4.0.0
*/
export declare const toRecord: (self: UrlParams) => Record<string, string | Arr.NonEmptyArray<string>>;
/**
* 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.
*
* @category converting
* @since 4.0.0
*/
export declare const toReadonlyRecord: (self: UrlParams) => ReadonlyRecord<string, string | Arr.NonEmptyReadonlyArray<string>>;
/**
* Schema type for decoding one URL parameter field as JSON.
*
* @category schemas
* @since 4.0.0
*/
export interface schemaJsonField extends Schema.decodeTo<Schema.UnknownFromJsonString, UrlParamsSchema> {
}
/**
* Extracts a JSON value from the first occurrence of the given `field` in the
* `UrlParams`.
*
* **Example** (Decoding JSON parameter fields)
*
* ```ts
* import { Schema } from "effect"
* import { UrlParams } from "effect/unstable/http"
*
* const extractFoo = UrlParams.schemaJsonField("foo").pipe(
* Schema.decodeTo(Schema.Struct({
* some: Schema.String,
* number: Schema.Number
* }))
* )
*
* console.log(
* Schema.decodeSync(extractFoo)(UrlParams.fromInput({
* foo: JSON.stringify({ some: "bar", number: 42 }),
* baz: "qux"
* }))
* )
* ```
*
* @category schemas
* @since 4.0.0
*/
export declare const schemaJsonField: (field: string) => schemaJsonField;
/**
* Extract a record of key-value pairs from the `UrlParams`.
*
* @category schemas
* @since 4.0.0
*/
export interface schemaRecord extends Schema.decodeTo<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.NonEmptyArray<Schema.String>]>>, UrlParamsSchema, never, never> {
}
/**
* Schema that decodes `UrlParams` into a record of key-value pairs.
*
* **Details**
*
* Keys with one value decode to a string, and keys with multiple values decode to
* a non-empty readonly array of strings.
*
* **Example** (Decoding URL parameters to a record)
*
* ```ts
* import { Schema } from "effect"
* import { UrlParams } from "effect/unstable/http"
*
* const toStruct = UrlParams.schemaRecord.pipe(
* Schema.decodeTo(Schema.Struct({
* some: Schema.String,
* number: Schema.FiniteFromString
* }))
* )
*
* console.log(
* Schema.decodeSync(toStruct)(UrlParams.fromInput({
* some: "value",
* number: 42
* }))
* )
* ```
*
* @category schemas
* @since 4.0.0
*/
export declare const schemaRecord: schemaRecord;
export {};
//# sourceMappingURL=UrlParams.d.ts.map

Xet Storage Details

Size:
16.2 kB
·
Xet hash:
beb39273ca9edc983bbe9069fec69bb19f4334b54fb480c0b36480d03975c448

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.