| Server IP : 159.203.156.69 / Your IP : 216.73.217.172 Web Server : nginx/1.24.0 System : Linux main-ubuntu 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/tanviranik.com/node_modules/vinext/dist/shims/ |
Upload File : |
{"version":3,"file":"script.js","names":[],"sources":["../../src/shims/script.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * next/script shim\n *\n * Provides the <Script> component for loading third-party scripts with\n * configurable loading strategies.\n *\n * Strategies:\n * - \"beforeInteractive\": rendered as a <script> tag in SSR output\n * - \"afterInteractive\" (default): loaded client-side after hydration\n * - \"lazyOnload\": deferred until window.load + requestIdleCallback\n * - \"worker\": sets type=\"text/partytown\" (requires Partytown setup)\n */\nimport React, { useEffect, useRef } from \"react\";\nimport { escapeInlineContent } from \"./head.js\";\nimport { useScriptNonce } from \"./script-nonce-context.js\";\n\nexport type ScriptProps = {\n /** Script source URL */\n src?: string;\n /** Loading strategy. Default: \"afterInteractive\" */\n strategy?: \"beforeInteractive\" | \"afterInteractive\" | \"lazyOnload\" | \"worker\";\n /** Unique identifier for the script */\n id?: string;\n /** Called when the script has loaded */\n onLoad?: (e: Event) => void;\n /** Called when the script is ready (after load, and on every re-render if already loaded) */\n onReady?: () => void;\n /** Called on script load error */\n onError?: (e: Event) => void;\n /** Inline script content */\n children?: React.ReactNode;\n /** Dangerous inner HTML */\n dangerouslySetInnerHTML?: { __html: string };\n /** Script type attribute */\n type?: string;\n /** Async attribute */\n async?: boolean;\n /** Defer attribute */\n defer?: boolean;\n /** Crossorigin attribute */\n crossOrigin?: string;\n /** Nonce for CSP */\n nonce?: string;\n /** Integrity hash */\n integrity?: string;\n /** Additional attributes */\n [key: string]: unknown;\n};\n\n// Track scripts that have already been loaded to avoid duplicates\nconst loadedScripts = new Set<string>();\n\nfunction getClientAutoNonce(): string | undefined {\n if (typeof document === \"undefined\") return undefined;\n\n const existingNonceElement = document.querySelector(\"[nonce]\");\n if (!(existingNonceElement instanceof HTMLElement)) {\n return undefined;\n }\n\n return existingNonceElement.nonce || existingNonceElement.getAttribute(\"nonce\") || undefined;\n}\n\nfunction resolveScriptNonce(explicitNonce: unknown, contextualNonce?: string): string | undefined {\n if (typeof explicitNonce === \"string\" && explicitNonce.length > 0) {\n return explicitNonce;\n }\n\n if (typeof window === \"undefined\") {\n return contextualNonce;\n }\n\n return getClientAutoNonce();\n}\n\nfunction buildBeforeInteractiveScriptProps(options: {\n src?: string;\n id?: string;\n rest: Record<string, unknown>;\n resolvedNonce?: string;\n dangerouslySetInnerHTML?: { __html: string };\n}): Record<string, unknown> {\n const scriptProps: Record<string, unknown> = { ...options.rest };\n if (options.src) scriptProps.src = options.src;\n if (options.id) scriptProps.id = options.id;\n if (options.resolvedNonce) {\n scriptProps.nonce = options.resolvedNonce;\n }\n if (options.dangerouslySetInnerHTML) {\n scriptProps.dangerouslySetInnerHTML = {\n __html: escapeInlineContent(options.dangerouslySetInnerHTML.__html, \"script\"),\n };\n }\n return scriptProps;\n}\n\n/**\n * Load a script imperatively (outside of React).\n */\nexport function handleClientScriptLoad(props: ScriptProps): void {\n const {\n src,\n id,\n onLoad,\n onError,\n strategy: _strategy,\n onReady: _onReady,\n children,\n ...rest\n } = props;\n if (typeof window === \"undefined\") return;\n\n const key = id ?? src ?? \"\";\n if (key && loadedScripts.has(key)) return;\n\n const el = document.createElement(\"script\");\n if (src) el.src = src;\n if (id) el.id = id;\n const resolvedNonce = resolveScriptNonce(rest.nonce);\n\n for (const [attr, value] of Object.entries(rest)) {\n if (attr === \"dangerouslySetInnerHTML\" || attr === \"className\") continue;\n if (typeof value === \"string\") {\n el.setAttribute(attr, value);\n } else if (typeof value === \"boolean\" && value) {\n el.setAttribute(attr, \"\");\n }\n }\n if (resolvedNonce && !el.getAttribute(\"nonce\")) {\n el.setAttribute(\"nonce\", resolvedNonce);\n }\n\n if (children && typeof children === \"string\") {\n el.textContent = children;\n }\n\n if (onLoad) el.addEventListener(\"load\", onLoad);\n if (onError) el.addEventListener(\"error\", onError);\n\n document.body.appendChild(el);\n if (key) loadedScripts.add(key);\n}\n\n/**\n * Initialize multiple scripts at once (called during app bootstrap).\n */\nexport function initScriptLoader(scripts: ScriptProps[]): void {\n for (const script of scripts) {\n handleClientScriptLoad(script);\n }\n}\n\nfunction Script(props: ScriptProps): React.ReactElement | null {\n const {\n src,\n id,\n strategy = \"afterInteractive\",\n onLoad,\n onReady,\n onError,\n children,\n dangerouslySetInnerHTML,\n ...rest\n } = props;\n\n const hasMounted = useRef(false);\n const key = id ?? src ?? \"\";\n const contextualNonce = useScriptNonce();\n const resolvedNonce = resolveScriptNonce(rest.nonce, contextualNonce);\n\n // Client path: load scripts via useEffect based on strategy.\n // useEffect never runs during SSR, so it's safe to call unconditionally.\n useEffect(() => {\n if (hasMounted.current) return;\n hasMounted.current = true;\n\n if (strategy === \"beforeInteractive\") {\n return;\n }\n\n // Already loaded — just fire onReady\n if (key && loadedScripts.has(key)) {\n onReady?.();\n return;\n }\n\n const load = () => {\n if (key && loadedScripts.has(key)) {\n onReady?.();\n return;\n }\n\n const el = document.createElement(\"script\");\n if (src) el.src = src;\n if (id) el.id = id;\n\n for (const [attr, value] of Object.entries(rest)) {\n if (attr === \"className\") {\n el.setAttribute(\"class\", String(value));\n } else if (typeof value === \"string\") {\n el.setAttribute(attr, value);\n } else if (typeof value === \"boolean\" && value) {\n el.setAttribute(attr, \"\");\n }\n }\n if (resolvedNonce && !el.getAttribute(\"nonce\")) {\n el.setAttribute(\"nonce\", resolvedNonce);\n }\n\n if (strategy === \"worker\") {\n el.setAttribute(\"type\", \"text/partytown\");\n }\n\n if (dangerouslySetInnerHTML?.__html) {\n // Intentional: mirrors the Next.js <Script> API where dangerouslySetInnerHTML\n // is developer-supplied inline script content (not user input). The prop name\n // itself signals developer awareness of the XSS risk, consistent with React's\n // design. User-supplied data must never flow into this prop.\n el.innerHTML = dangerouslySetInnerHTML.__html as string;\n } else if (children && typeof children === \"string\") {\n el.textContent = children;\n }\n\n el.addEventListener(\"load\", (e) => {\n if (key) loadedScripts.add(key);\n onLoad?.(e);\n onReady?.();\n });\n\n if (onError) {\n el.addEventListener(\"error\", onError);\n }\n\n document.body.appendChild(el);\n };\n\n if (strategy === \"lazyOnload\") {\n // Wait for window load, then use idle callback\n if (document.readyState === \"complete\") {\n if (typeof requestIdleCallback === \"function\") {\n requestIdleCallback(load);\n } else {\n setTimeout(load, 1);\n }\n } else {\n window.addEventListener(\"load\", () => {\n if (typeof requestIdleCallback === \"function\") {\n requestIdleCallback(load);\n } else {\n setTimeout(load, 1);\n }\n });\n }\n } else {\n // \"afterInteractive\" (default), \"beforeInteractive\" (client re-mount), \"worker\"\n load();\n }\n }, [\n src,\n id,\n strategy,\n onLoad,\n onReady,\n onError,\n children,\n dangerouslySetInnerHTML,\n key,\n resolvedNonce,\n rest,\n ]);\n\n // SSR path: only \"beforeInteractive\" renders a <script> tag server-side\n if (typeof window === \"undefined\") {\n if (strategy === \"beforeInteractive\") {\n return React.createElement(\n \"script\",\n buildBeforeInteractiveScriptProps({\n src,\n id,\n rest,\n resolvedNonce,\n dangerouslySetInnerHTML,\n }),\n children,\n );\n }\n // Other strategies don't render during SSR\n return null;\n }\n\n if (strategy === \"beforeInteractive\") {\n return React.createElement(\n \"script\",\n buildBeforeInteractiveScriptProps({\n src,\n id,\n rest,\n resolvedNonce,\n dangerouslySetInnerHTML,\n }),\n children,\n );\n }\n\n // The component itself renders nothing — scripts are injected imperatively\n return null;\n}\n\nexport default Script;\n"],"mappings":"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"}