0
0
mirror of https://github.com/honojs/hono.git synced 2024-12-01 10:51:01 +00:00
hono/deno_dist/utils/body.ts

34 lines
1.0 KiB
TypeScript
Raw Normal View History

type JsonPrimitive = boolean | number | string | null
type JsonArray = JsonPrimitive[] | JsonObject[]
type JsonObject = {
[key: string]: JsonPrimitive | JsonObject | JsonArray
}
export type Json = JsonPrimitive | JsonArray | JsonObject
export type Body = string | Json | Record<string, string | File> | ArrayBuffer
export const parseBody = async (r: Request | Response): Promise<Body> => {
2022-07-02 06:09:45 +00:00
const contentType = r.headers.get('Content-Type') || ''
if (contentType.includes('application/json')) {
2022-07-31 13:19:28 +00:00
let body = {}
try {
body = await r.json()
} catch {} // Do nothing
return body
2022-07-02 06:09:45 +00:00
} else if (contentType.includes('application/text')) {
return await r.text()
} else if (contentType.startsWith('text')) {
return await r.text()
} else if (contentType.includes('form')) {
const form: Record<string, string | File> = {}
const data = [...(await r.formData())].reduce((acc, cur) => {
acc[cur[0]] = cur[1]
return acc
}, form)
return data
}
return r.arrayBuffer()
}