-
Notifications
You must be signed in to change notification settings - Fork 452
Expand file tree
/
Copy pathbuild-clerk-hotload-script.ts
More file actions
85 lines (72 loc) · 2.41 KB
/
build-clerk-hotload-script.ts
File metadata and controls
85 lines (72 loc) · 2.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { clerkJSScriptUrl, clerkUIScriptUrl } from '@clerk/shared/loadClerkJsScript';
import type { APIContext } from 'astro';
import { getSafeEnv } from './get-safe-env';
function buildClerkHotloadScript(locals: APIContext['locals']) {
const env = getSafeEnv(locals);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const publishableKey = env.pk!;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const proxyUrl = env.proxyUrl!;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const domain = env.domain!;
// Skip ClerkJS CDN script when js prop is bundled
if (env.skipJsCdn) {
if (env.prefetchUI === false) {
return '\n';
}
const clerkUIScriptSrc = clerkUIScriptUrl({
clerkUIUrl: env.clerkUIUrl,
clerkUIVersion: env.clerkUIVersion,
domain,
proxyUrl,
publishableKey,
});
const clerkUIPreload = `
<link rel="preload"
href="${clerkUIScriptSrc}"
as="script"
crossOrigin="anonymous"
/>`;
return clerkUIPreload + '\n';
}
const clerkJsScriptSrc = clerkJSScriptUrl({
clerkJSUrl: env.clerkJsUrl,
clerkJSVersion: env.clerkJsVersion,
domain,
proxyUrl,
publishableKey,
});
const clerkJsScript = `
<script src="${clerkJsScriptSrc}"
data-clerk-js-script
async
crossOrigin='anonymous'
${publishableKey ? `data-clerk-publishable-key="${publishableKey}"` : ``}
${proxyUrl ? `data-clerk-proxy-url="${proxyUrl}"` : ``}
${domain ? `data-clerk-domain="${domain}"` : ``}
></script>`;
if (env.prefetchUI === false) {
return clerkJsScript + '\n';
}
const clerkUIScriptSrc = clerkUIScriptUrl({
clerkUIUrl: env.clerkUIUrl,
clerkUIVersion: env.clerkUIVersion,
domain,
proxyUrl,
publishableKey,
});
// Use <link rel='preload'> instead of <script> for the UI bundle.
// This tells the browser to download the resource immediately (high priority)
// but doesn't execute it, avoiding race conditions with __clerkSharedModules
// registration (which happens when React code runs @clerk/ui/register).
// When loadClerkUIScript() later adds a <script> tag, the browser uses the
// cached resource and executes it without re-downloading.
const clerkUIPreload = `
<link rel="preload"
href="${clerkUIScriptSrc}"
as="script"
crossOrigin="anonymous"
/>`;
return clerkJsScript + clerkUIPreload + '\n';
}
export { buildClerkHotloadScript };