0
0
mirror of https://github.com/honojs/hono.git synced 2024-12-01 11:51:01 +01:00
hono/deno_dist/client/utils.ts
hagishi 7ffb5b547e
feat(client): Inject common headers (#908)
* feat(client): Inject common headers

* feat: Accept a RequestOptions object as argument.

* refactor: Rename RequestOption to RequestOptions

* denoify
2023-02-20 08:22:01 +09:00

49 lines
1.3 KiB
TypeScript

import { getPathFromURL } from '../utils/url.ts'
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<string, string>) => {
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) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const path = getPathFromURL(urlSting)
if (path === '/index') {
return urlSting.replace(/index$/, '')
}
return urlSting
}
function isObject(item: unknown): item is ObjectType {
return typeof item === 'object' && item !== null && !Array.isArray(item)
}
export function deepMerge<T>(target: T, source: Record<string, unknown>): T {
if (!isObject(target) && !isObject(source)) {
return source as T
}
const merged = { ...target } as ObjectType<T>
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
}