feat: enhance configuration handling and add type definitions for query and URL serializers

This commit is contained in:
2026-03-02 00:13:29 -05:00
parent 8cf5bfd9ec
commit 66d6a98ac4
7 changed files with 109 additions and 43 deletions

View File

@@ -4,28 +4,32 @@ import { deepClone } from '@/shared/helpers/deep-clone'
import type {
FLuentUrlPlainObject,
FluentUrlConfig,
QuerySerializer,
NormalizeOptionsArgs,
PlainObjectConstraint,
} from '@/shared/types'
export function normalizeConfig(
config?: Partial<FluentUrlConfig>,
): FluentUrlConfig {
export function normalizeConfig<
PQO extends PlainObjectConstraint,
SQO extends PlainObjectConstraint,
>(config?: Partial<FluentUrlConfig<PQO, SQO>>): FluentUrlConfig<PQO, SQO> {
return {
parseQuery: config?.parseQuery ?? parseQuery,
parseQueryOptions: config?.parseQueryOptions,
stringifyQuery: config?.stringifyQuery ?? stringifyQuery,
stringifyQueryOptions: config?.stringifyQueryOptions,
}
}
export function normalizeOptions(args: {
urlOptions?: Partial<FLuentUrlPlainObject> | string
parseQuery: QuerySerializer['parseQuery']
}): FLuentUrlPlainObject {
const { urlOptions: urlOrOptions, parseQuery } = args
export function normalizeOptions<T extends PlainObjectConstraint>({
urlOrOptions,
parseQuery,
parseQueryOptions,
}: NormalizeOptionsArgs<T>): FLuentUrlPlainObject {
if (typeof urlOrOptions === 'string') {
return parseUrl({
str: urlOrOptions,
parseQuery: parseQuery,
parseQuery,
parseQueryOptions,
})
}
@@ -39,13 +43,18 @@ export function normalizeOptions(args: {
}
}
export function mergeConfig(
current: FluentUrlConfig,
merge?: Partial<FluentUrlConfig>,
): FluentUrlConfig {
export function mergeConfig<
PQO extends PlainObjectConstraint,
SQO extends PlainObjectConstraint,
>(
current: FluentUrlConfig<PQO, SQO>,
merge?: Partial<FluentUrlConfig<PQO, SQO>>,
): FluentUrlConfig<PQO, SQO> {
return {
parseQuery: merge?.parseQuery ?? current.parseQuery,
parseQueryOptions: merge?.parseQueryOptions,
stringifyQuery: merge?.stringifyQuery ?? current.stringifyQuery,
stringifyQueryOptions: merge?.stringifyQueryOptions,
}
}