0
0
mirror of https://github.com/honojs/hono.git synced 2024-12-01 10:51:01 +00:00
hono/deno_dist/helper/adapter/index.ts
watany d8b0e7e51e
refactor(helper): Use getRuntimeKey() in env function (#1454)
* refactor

* lint&denoify

* marker

* type assersion

* revert fastly message
2023-09-15 18:40:06 +09:00

45 lines
1.4 KiB
TypeScript

import type { Context } from '../../context.ts'
export const env = <T extends Record<string, string>, C extends Context = Context<{}>>(
c: C
): T & C['env'] => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const global = globalThis as any
const globalEnv = global?.process?.env as T
const runtime = getRuntimeKey()
const runtimeEnvHandlers: Record<string, () => T> = {
bun: () => globalEnv,
node: () => globalEnv,
'edge-light': () => globalEnv,
lagon: () => globalEnv,
deno: () => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return Deno.env.toObject() as T
},
workerd: () => c.env,
// On Fastly Compute@Edge, you can use the ConfigStore to manage user-defined data.
fastly: () => ({} as T),
other: () => ({} as T),
}
return runtimeEnvHandlers[runtime]()
}
export const getRuntimeKey = () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const global = globalThis as any
if (global?.Deno !== undefined) return 'deno'
if (global?.Bun !== undefined) return 'bun'
if (typeof global?.WebSocketPair === 'function') return 'workerd'
if (typeof global?.EdgeRuntime === 'string') return 'edge-light'
if (global?.fastly !== undefined) return 'fastly'
if (global?.__lagon__ !== undefined) return 'lagon'
if (global?.process?.release?.name === 'node') return 'node'
return 'other'
}