import type { ObjectType } from './types.ts' export const mergePath = (base: string, path: string) => { base = base.replace(/\/+$/, '') base = base + '/' path = path.replace(/^\/+/, '') return base + path } export const replaceUrlParam = (urlString: string, params: Record) => { for (const [k, v] of Object.entries(params)) { const reg = new RegExp('/:' + k + '({[^}]*})?') urlString = urlString.replace(reg, `/${v}`) } return urlString } export const removeIndexString = (urlSting: string) => { return urlSting.replace(/\/index$/, '/') } function isObject(item: unknown): item is ObjectType { return typeof item === 'object' && item !== null && !Array.isArray(item) } export function deepMerge(target: T, source: Record): T { if (!isObject(target) && !isObject(source)) { return source as T } const merged = { ...target } as ObjectType for (const key in source) { const value = source[key] if (isObject(merged[key]) && isObject(value)) { merged[key] = deepMerge(merged[key], value) } else { merged[key] = value as T[keyof T] & T } } return merged as T }