feat: enhance configuration handling and add type definitions for query and URL serializers
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user