mirror of
https://github.com/kennethnym/aris.git
synced 2026-06-14 03:21:18 +01:00
chore: rename aelis to freya
This commit is contained in:
39
apps/freya-client/src/api/client.ts
Normal file
39
apps/freya-client/src/api/client.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { createContext, useContext } from "react"
|
||||
|
||||
export type ApiRequestMiddleware = (
|
||||
url: Parameters<typeof fetch>[0],
|
||||
init: RequestInit,
|
||||
) => RequestInit
|
||||
|
||||
export class ApiClient {
|
||||
private readonly baseUrl: string
|
||||
private readonly middlewares: readonly ApiRequestMiddleware[]
|
||||
|
||||
static noop = new ApiClient({ baseUrl: "" })
|
||||
|
||||
constructor({
|
||||
baseUrl,
|
||||
middlewares = [],
|
||||
}: {
|
||||
baseUrl: string
|
||||
middlewares?: ApiRequestMiddleware[]
|
||||
}) {
|
||||
this.baseUrl = baseUrl
|
||||
this.middlewares = middlewares
|
||||
}
|
||||
|
||||
async request<T>(...[url, init = {}]: Parameters<typeof fetch>): Promise<[Response, T]> {
|
||||
const finalInit = this.middlewares.reduce(
|
||||
(prevInit, middleware) => middleware(url, prevInit),
|
||||
init,
|
||||
)
|
||||
return fetch(this.baseUrl ? new URL(url.toString(), this.baseUrl) : url, finalInit).then(
|
||||
(res) => Promise.all([Promise.resolve(res), res.json()]),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export const ApiClientContext = createContext(ApiClient.noop)
|
||||
export function useApiClient() {
|
||||
return useContext(ApiClientContext)
|
||||
}
|
||||
Reference in New Issue
Block a user