mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 12:37:20 +00:00
56 lines
1.2 KiB
TypeScript
56 lines
1.2 KiB
TypeScript
import { getRuntimeKey as honoGetRuntimeKey } from "hono/adapter";
|
|
|
|
/**
|
|
* Adds additional checks for nextjs
|
|
*/
|
|
export function getRuntimeKey(): string {
|
|
const global = globalThis as any;
|
|
|
|
// Detect Next.js server-side runtime
|
|
if (global?.process?.env?.NEXT_RUNTIME === "nodejs") {
|
|
return "nextjs";
|
|
}
|
|
|
|
// Detect Next.js edge runtime
|
|
if (global?.process?.env?.NEXT_RUNTIME === "edge") {
|
|
return "nextjs-edge";
|
|
}
|
|
|
|
// Detect Next.js client-side runtime
|
|
// @ts-ignore
|
|
if (typeof window !== "undefined" && window.__NEXT_DATA__) {
|
|
return "nextjs-client";
|
|
}
|
|
|
|
return honoGetRuntimeKey();
|
|
}
|
|
|
|
const features = {
|
|
// supports the redirect of not full qualified addresses
|
|
// not supported in nextjs
|
|
redirects_non_fq: true,
|
|
};
|
|
|
|
export function runtimeSupports(feature: keyof typeof features) {
|
|
const runtime = getRuntimeKey();
|
|
if (runtime.startsWith("nextjs")) {
|
|
features.redirects_non_fq = false;
|
|
}
|
|
|
|
return features[feature];
|
|
}
|
|
|
|
export function isNode() {
|
|
try {
|
|
return global?.process?.release?.name === "node";
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function invariant(condition: boolean | any, message: string) {
|
|
if (!condition) {
|
|
throw new Error(message);
|
|
}
|
|
}
|