forked from payloadcms/website
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploymentTarget.ts
More file actions
35 lines (27 loc) · 1.41 KB
/
Copy pathdeploymentTarget.ts
File metadata and controls
35 lines (27 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import type { CloudflareContext } from '@opennextjs/cloudflare'
import { getDeploymentTargetFromEnv } from '../../scripts/lib/deploymentTarget.mjs'
/** Keep env-branch parity with `scripts/lib/deploymentTarget.mjs` when changing routing. */
export type DeploymentTarget = 'cloudflare' | 'vercel'
/** Passed through Payload config, plugins, DB, and storage — one shape for deploy/runtime branching. */
export type DeploymentRuntimeOptions = {
cloudflare: CloudflareContext | undefined
deploymentTarget: DeploymentTarget
}
/** True inside Cloudflare Workers (`workerd`), not on plain Node. */
function isCloudflareWorkersRuntime(): boolean {
if (typeof navigator === 'undefined') {return false}
const ua = (navigator as { userAgent?: string }).userAgent
return typeof ua === 'string' && ua.includes('Cloudflare-Workers')
}
/**
* Wrangler / Workers → Cloudflare stack (D1, R2). Else → Vercel-style stack when on Vercel or Postgres is configured.
*
* Order: `PAYLOAD_HOSTING` → Workers runtime → env-based routing (see `scripts/lib/deploymentTarget.mjs`).
*/
export function getDeploymentTarget(): DeploymentTarget {
if (process.env.PAYLOAD_HOSTING === 'vercel') {return 'vercel'}
if (process.env.PAYLOAD_HOSTING === 'cloudflare') {return 'cloudflare'}
// case: Wrangler / Workers runtime → Cloudflare
if (isCloudflareWorkersRuntime()) {return 'cloudflare'}
return getDeploymentTargetFromEnv(process.env)
}