@clerk/shared 3.31.0 → 3.31.1-snapshot.v20251105162613
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runtime/color-CPeLVdj4.d.mts.map +1 -1
- package/dist/runtime/date-DDNRUU0r.d.ts.map +1 -1
- package/dist/runtime/error-N5pE9_pc.d.mts.map +1 -1
- package/dist/runtime/globs.d.mts.map +1 -1
- package/dist/runtime/globs.d.ts.map +1 -1
- package/dist/runtime/index-QKCu8BC3.d.ts.map +1 -1
- package/dist/runtime/index.js +2 -2
- package/dist/runtime/index.mjs +2 -2
- package/dist/runtime/{loadClerkJsScript-B6B9VpJL.mjs → loadClerkJsScript-CqAq0B5f.mjs} +2 -2
- package/dist/runtime/{loadClerkJsScript-B6B9VpJL.mjs.map → loadClerkJsScript-CqAq0B5f.mjs.map} +1 -1
- package/dist/runtime/{loadClerkJsScript-BIPE-l3G.js → loadClerkJsScript-SFD6IA1A.js} +2 -2
- package/dist/runtime/{loadClerkJsScript-BIPE-l3G.js.map → loadClerkJsScript-SFD6IA1A.js.map} +1 -1
- package/dist/runtime/loadClerkJsScript.js +2 -2
- package/dist/runtime/loadClerkJsScript.mjs +2 -2
- package/dist/runtime/pathMatcher-CFwDMx3z.d.ts.map +1 -1
- package/dist/runtime/pathMatcher-n7OPVmtA.d.mts.map +1 -1
- package/dist/runtime/poller-CIrx6NwR.d.ts.map +1 -1
- package/dist/runtime/poller-Cn-a74Uo.d.mts.map +1 -1
- package/dist/runtime/react/index.js +5 -1
- package/dist/runtime/react/index.js.map +1 -1
- package/dist/runtime/react/index.mjs +5 -1
- package/dist/runtime/react/index.mjs.map +1 -1
- package/dist/runtime/url-2rfd29Os.d.mts.map +1 -1
- package/dist/runtime/url-Ms4rigVZ.d.ts.map +1 -1
- package/dist/runtime/{versionSelector-BKo0Znsl.js → versionSelector-2V8yqqgZ.js} +3 -3
- package/dist/runtime/{versionSelector-BKo0Znsl.js.map → versionSelector-2V8yqqgZ.js.map} +1 -1
- package/dist/runtime/{versionSelector-Ctjkw92Q.mjs → versionSelector-w-Zk-G-8.mjs} +3 -3
- package/dist/runtime/{versionSelector-Ctjkw92Q.mjs.map → versionSelector-w-Zk-G-8.mjs.map} +1 -1
- package/dist/runtime/versionSelector.js +1 -1
- package/dist/runtime/versionSelector.mjs +1 -1
- package/dist/types/index.d.mts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/runtime/index.js
CHANGED
|
@@ -22,8 +22,8 @@ require('./retry-rhkPbMCS.js');
|
|
|
22
22
|
const require_loadScript = require('./loadScript-CRbXHvGF.js');
|
|
23
23
|
const require_proxy = require('./proxy-B_Yui2Mf.js');
|
|
24
24
|
const require_url = require('./url-DngZvS9Y.js');
|
|
25
|
-
const require_versionSelector = require('./versionSelector-
|
|
26
|
-
const require_loadClerkJsScript = require('./loadClerkJsScript-
|
|
25
|
+
const require_versionSelector = require('./versionSelector-2V8yqqgZ.js');
|
|
26
|
+
const require_loadClerkJsScript = require('./loadClerkJsScript-SFD6IA1A.js');
|
|
27
27
|
const require_localStorageBroadcastChannel = require('./localStorageBroadcastChannel-BSJY81in.js');
|
|
28
28
|
const require_workerTimers = require('./workerTimers-CyP1YqyG.js');
|
|
29
29
|
const require_poller = require('./poller-QBwri4RY.js');
|
package/dist/runtime/index.mjs
CHANGED
|
@@ -22,8 +22,8 @@ import "./retry-DAlTROH9.mjs";
|
|
|
22
22
|
import { loadScript } from "./loadScript-Bll0Ohcb.mjs";
|
|
23
23
|
import { isHttpOrHttps, isProxyUrlRelative, isValidProxyUrl, proxyUrlToAbsoluteURL } from "./proxy-Bq8EHApG.mjs";
|
|
24
24
|
import { addClerkPrefix, cleanDoubleSlashes, getClerkJsMajorVersionOrTag, getScriptUrl, hasLeadingSlash, hasTrailingSlash, isAbsoluteUrl, isCurrentDevAccountPortalOrigin, isLegacyDevAccountPortalOrigin, isNonEmptyURL, joinURL, parseSearchParams, stripScheme, withLeadingSlash, withTrailingSlash, withoutLeadingSlash, withoutTrailingSlash } from "./url-BuzaT2V9.mjs";
|
|
25
|
-
import { versionSelector } from "./versionSelector-
|
|
26
|
-
import { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName } from "./loadClerkJsScript-
|
|
25
|
+
import { versionSelector } from "./versionSelector-w-Zk-G-8.mjs";
|
|
26
|
+
import { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName } from "./loadClerkJsScript-CqAq0B5f.mjs";
|
|
27
27
|
import { LocalStorageBroadcastChannel } from "./localStorageBroadcastChannel-sPutPiqo.mjs";
|
|
28
28
|
import { createWorkerTimers } from "./workerTimers-SDJuCuGo.mjs";
|
|
29
29
|
import { Poller } from "./poller-Co9NmMWr.mjs";
|
|
@@ -3,7 +3,7 @@ import { ClerkRuntimeError, buildErrorThrower } from "./error-B2RA62bv.mjs";
|
|
|
3
3
|
import { loadScript } from "./loadScript-Bll0Ohcb.mjs";
|
|
4
4
|
import { isValidProxyUrl, proxyUrlToAbsoluteURL } from "./proxy-Bq8EHApG.mjs";
|
|
5
5
|
import { addClerkPrefix } from "./url-BuzaT2V9.mjs";
|
|
6
|
-
import { versionSelector } from "./versionSelector-
|
|
6
|
+
import { versionSelector } from "./versionSelector-w-Zk-G-8.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/loadClerkJsScript.ts
|
|
9
9
|
const ERROR_CODE = "failed_to_load_clerk_js";
|
|
@@ -168,4 +168,4 @@ const applyClerkJsScriptAttributes = (options) => (script) => {
|
|
|
168
168
|
|
|
169
169
|
//#endregion
|
|
170
170
|
export { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName };
|
|
171
|
-
//# sourceMappingURL=loadClerkJsScript-
|
|
171
|
+
//# sourceMappingURL=loadClerkJsScript-CqAq0B5f.mjs.map
|
package/dist/runtime/{loadClerkJsScript-B6B9VpJL.mjs.map → loadClerkJsScript-CqAq0B5f.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadClerkJsScript-B6B9VpJL.mjs","names":["packageName: string","timeoutMs: number","timeoutId: ReturnType<typeof setTimeout>","pollInterval: ReturnType<typeof setInterval>","timeoutId","pollInterval","opts?: LoadClerkJsScriptOptions","opts: LoadClerkJsScriptOptions","options: LoadClerkJsScriptOptions","obj: Record<string, string>","script: HTMLScriptElement"],"sources":["../../src/loadClerkJsScript.ts"],"sourcesContent":["import { buildErrorThrower, ClerkRuntimeError } from './error';\nimport { createDevOrStagingUrlCache, parsePublishableKey } from './keys';\nimport { loadScript } from './loadScript';\nimport { isValidProxyUrl, proxyUrlToAbsoluteURL } from './proxy';\nimport type { ClerkOptions, SDKMetadata, Without } from './types';\nimport { addClerkPrefix } from './url';\nimport { versionSelector } from './versionSelector';\n\nconst ERROR_CODE = 'failed_to_load_clerk_js';\nconst ERROR_CODE_TIMEOUT = 'failed_to_load_clerk_js_timeout';\nconst FAILED_TO_LOAD_ERROR = 'Failed to load Clerk';\n\nconst { isDevOrStagingUrl } = createDevOrStagingUrlCache();\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/shared' });\n\n/**\n * Sets the package name for error messages during ClerkJS script loading.\n *\n * @param packageName - The name of the package to use in error messages (e.g., '@clerk/clerk-react').\n * @example\n * ```typescript\n * setClerkJsLoadingErrorPackageName('@clerk/clerk-react');\n * ```\n */\nexport function setClerkJsLoadingErrorPackageName(packageName: string) {\n errorThrower.setPackageName({ packageName });\n}\n\ntype LoadClerkJsScriptOptions = Without<ClerkOptions, 'isSatellite'> & {\n publishableKey: string;\n clerkJSUrl?: string;\n clerkJSVariant?: 'headless' | '';\n clerkJSVersion?: string;\n sdkMetadata?: SDKMetadata;\n proxyUrl?: string;\n domain?: string;\n nonce?: string;\n /**\n * Timeout in milliseconds to wait for clerk-js to load before considering it failed.\n *\n * @default 15000 (15 seconds)\n */\n scriptLoadTimeout?: number;\n};\n\n/**\n * Validates that window.Clerk exists and is properly initialized.\n * This ensures we don't have false positives where the script loads but Clerk is malformed.\n *\n * @returns `true` if window.Clerk exists and has the expected structure with a load method.\n */\nfunction isClerkProperlyLoaded(): boolean {\n if (typeof window === 'undefined' || !(window as any).Clerk) {\n return false;\n }\n\n // Basic validation that window.Clerk has the expected structure\n const clerk = (window as any).Clerk;\n return typeof clerk === 'object' && typeof clerk.load === 'function';\n}\n\n/**\n * Waits for Clerk to be properly loaded with a timeout mechanism.\n * Uses polling to check if Clerk becomes available within the specified timeout.\n *\n * @param timeoutMs - Maximum time to wait in milliseconds.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error if timeout is reached.\n */\nfunction waitForClerkWithTimeout(timeoutMs: number): Promise<HTMLScriptElement | null> {\n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const cleanup = (timeoutId: ReturnType<typeof setTimeout>, pollInterval: ReturnType<typeof setInterval>) => {\n clearTimeout(timeoutId);\n clearInterval(pollInterval);\n };\n\n const checkAndResolve = () => {\n if (resolved) {\n return;\n }\n\n if (isClerkProperlyLoaded()) {\n resolved = true;\n cleanup(timeoutId, pollInterval);\n resolve(null);\n }\n };\n\n const handleTimeout = () => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n cleanup(timeoutId, pollInterval);\n\n if (!isClerkProperlyLoaded()) {\n reject(new ClerkRuntimeError(FAILED_TO_LOAD_ERROR, { code: ERROR_CODE_TIMEOUT }));\n } else {\n resolve(null);\n }\n };\n\n const timeoutId = setTimeout(handleTimeout, timeoutMs);\n\n checkAndResolve();\n\n const pollInterval = setInterval(() => {\n if (resolved) {\n clearInterval(pollInterval);\n return;\n }\n checkAndResolve();\n }, 100);\n });\n}\n\n/**\n * Hotloads the Clerk JS script with robust failure detection.\n *\n * Uses a timeout-based approach to ensure absolute certainty about load success/failure.\n * If the script fails to load within the timeout period, or loads but doesn't create\n * a proper Clerk instance, the promise rejects with an error.\n *\n * @param opts - The options used to build the Clerk JS script URL and load the script.\n * Must include a `publishableKey` if no existing script is found.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error.\n *\n * @example\n * ```typescript\n * try {\n * await loadClerkJsScript({ publishableKey: 'pk_test_...' });\n * console.log('Clerk loaded successfully');\n * } catch (error) {\n * console.error('Failed to load Clerk:', error.message);\n * }\n * ```\n */\nconst loadClerkJsScript = async (opts?: LoadClerkJsScriptOptions): Promise<HTMLScriptElement | null> => {\n const timeout = opts?.scriptLoadTimeout ?? 15000;\n\n if (isClerkProperlyLoaded()) {\n return null;\n }\n\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-clerk-js-script]');\n\n if (existingScript) {\n return waitForClerkWithTimeout(timeout);\n }\n\n if (!opts?.publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n return null;\n }\n\n const loadPromise = waitForClerkWithTimeout(timeout);\n\n loadScript(clerkJsScriptUrl(opts), {\n async: true,\n crossOrigin: 'anonymous',\n nonce: opts.nonce,\n beforeLoad: applyClerkJsScriptAttributes(opts),\n }).catch(error => {\n throw new ClerkRuntimeError(FAILED_TO_LOAD_ERROR + (error.message ? `, ${error.message}` : ''), {\n code: ERROR_CODE,\n cause: error,\n });\n });\n\n return loadPromise;\n};\n\n/**\n * Generates a Clerk JS script URL based on the provided options.\n *\n * @param opts - The options to use when building the Clerk JS script URL.\n * @returns The complete URL to the Clerk JS script.\n *\n * @example\n * ```typescript\n * const url = clerkJsScriptUrl({ publishableKey: 'pk_test_...' });\n * // Returns: \"https://example.clerk.accounts.dev/npm/@clerk/clerk-js@5/dist/clerk.browser.js\"\n * ```\n */\nconst clerkJsScriptUrl = (opts: LoadClerkJsScriptOptions) => {\n const { clerkJSUrl, clerkJSVariant, clerkJSVersion, proxyUrl, domain, publishableKey } = opts;\n\n if (clerkJSUrl) {\n return clerkJSUrl;\n }\n\n let scriptHost = '';\n if (!!proxyUrl && isValidProxyUrl(proxyUrl)) {\n scriptHost = proxyUrlToAbsoluteURL(proxyUrl).replace(/http(s)?:\\/\\//, '');\n } else if (domain && !isDevOrStagingUrl(parsePublishableKey(publishableKey)?.frontendApi || '')) {\n scriptHost = addClerkPrefix(domain);\n } else {\n scriptHost = parsePublishableKey(publishableKey)?.frontendApi || '';\n }\n\n const variant = clerkJSVariant ? `${clerkJSVariant.replace(/\\.+$/, '')}.` : '';\n const version = versionSelector(clerkJSVersion);\n return `https://${scriptHost}/npm/@clerk/clerk-js@${version}/dist/clerk.${variant}browser.js`;\n};\n\n/**\n * Builds an object of Clerk JS script attributes based on the provided options.\n *\n * @param options - The options containing the values for script attributes.\n * @returns An object containing data attributes to be applied to the script element.\n */\nconst buildClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => {\n const obj: Record<string, string> = {};\n\n if (options.publishableKey) {\n obj['data-clerk-publishable-key'] = options.publishableKey;\n }\n\n if (options.proxyUrl) {\n obj['data-clerk-proxy-url'] = options.proxyUrl;\n }\n\n if (options.domain) {\n obj['data-clerk-domain'] = options.domain;\n }\n\n if (options.nonce) {\n obj.nonce = options.nonce;\n }\n\n return obj;\n};\n\n/**\n * Returns a function that applies Clerk JS script attributes to a script element.\n *\n * @param options - The options containing the values for script attributes.\n * @returns A function that accepts a script element and applies the attributes to it.\n */\nconst applyClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => (script: HTMLScriptElement) => {\n const attributes = buildClerkJsScriptAttributes(options);\n for (const attribute in attributes) {\n script.setAttribute(attribute, attributes[attribute]);\n }\n};\n\nexport { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript };\nexport type { LoadClerkJsScriptOptions };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadClerkJsScript-CqAq0B5f.mjs","names":["packageName: string","timeoutMs: number","timeoutId: ReturnType<typeof setTimeout>","pollInterval: ReturnType<typeof setInterval>","timeoutId","pollInterval","opts?: LoadClerkJsScriptOptions","opts: LoadClerkJsScriptOptions","options: LoadClerkJsScriptOptions","obj: Record<string, string>","script: HTMLScriptElement"],"sources":["../../src/loadClerkJsScript.ts"],"sourcesContent":["import { buildErrorThrower, ClerkRuntimeError } from './error';\nimport { createDevOrStagingUrlCache, parsePublishableKey } from './keys';\nimport { loadScript } from './loadScript';\nimport { isValidProxyUrl, proxyUrlToAbsoluteURL } from './proxy';\nimport type { ClerkOptions, SDKMetadata, Without } from './types';\nimport { addClerkPrefix } from './url';\nimport { versionSelector } from './versionSelector';\n\nconst ERROR_CODE = 'failed_to_load_clerk_js';\nconst ERROR_CODE_TIMEOUT = 'failed_to_load_clerk_js_timeout';\nconst FAILED_TO_LOAD_ERROR = 'Failed to load Clerk';\n\nconst { isDevOrStagingUrl } = createDevOrStagingUrlCache();\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/shared' });\n\n/**\n * Sets the package name for error messages during ClerkJS script loading.\n *\n * @param packageName - The name of the package to use in error messages (e.g., '@clerk/clerk-react').\n * @example\n * ```typescript\n * setClerkJsLoadingErrorPackageName('@clerk/clerk-react');\n * ```\n */\nexport function setClerkJsLoadingErrorPackageName(packageName: string) {\n errorThrower.setPackageName({ packageName });\n}\n\ntype LoadClerkJsScriptOptions = Without<ClerkOptions, 'isSatellite'> & {\n publishableKey: string;\n clerkJSUrl?: string;\n clerkJSVariant?: 'headless' | '';\n clerkJSVersion?: string;\n sdkMetadata?: SDKMetadata;\n proxyUrl?: string;\n domain?: string;\n nonce?: string;\n /**\n * Timeout in milliseconds to wait for clerk-js to load before considering it failed.\n *\n * @default 15000 (15 seconds)\n */\n scriptLoadTimeout?: number;\n};\n\n/**\n * Validates that window.Clerk exists and is properly initialized.\n * This ensures we don't have false positives where the script loads but Clerk is malformed.\n *\n * @returns `true` if window.Clerk exists and has the expected structure with a load method.\n */\nfunction isClerkProperlyLoaded(): boolean {\n if (typeof window === 'undefined' || !(window as any).Clerk) {\n return false;\n }\n\n // Basic validation that window.Clerk has the expected structure\n const clerk = (window as any).Clerk;\n return typeof clerk === 'object' && typeof clerk.load === 'function';\n}\n\n/**\n * Waits for Clerk to be properly loaded with a timeout mechanism.\n * Uses polling to check if Clerk becomes available within the specified timeout.\n *\n * @param timeoutMs - Maximum time to wait in milliseconds.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error if timeout is reached.\n */\nfunction waitForClerkWithTimeout(timeoutMs: number): Promise<HTMLScriptElement | null> {\n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const cleanup = (timeoutId: ReturnType<typeof setTimeout>, pollInterval: ReturnType<typeof setInterval>) => {\n clearTimeout(timeoutId);\n clearInterval(pollInterval);\n };\n\n const checkAndResolve = () => {\n if (resolved) {\n return;\n }\n\n if (isClerkProperlyLoaded()) {\n resolved = true;\n cleanup(timeoutId, pollInterval);\n resolve(null);\n }\n };\n\n const handleTimeout = () => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n cleanup(timeoutId, pollInterval);\n\n if (!isClerkProperlyLoaded()) {\n reject(new ClerkRuntimeError(FAILED_TO_LOAD_ERROR, { code: ERROR_CODE_TIMEOUT }));\n } else {\n resolve(null);\n }\n };\n\n const timeoutId = setTimeout(handleTimeout, timeoutMs);\n\n checkAndResolve();\n\n const pollInterval = setInterval(() => {\n if (resolved) {\n clearInterval(pollInterval);\n return;\n }\n checkAndResolve();\n }, 100);\n });\n}\n\n/**\n * Hotloads the Clerk JS script with robust failure detection.\n *\n * Uses a timeout-based approach to ensure absolute certainty about load success/failure.\n * If the script fails to load within the timeout period, or loads but doesn't create\n * a proper Clerk instance, the promise rejects with an error.\n *\n * @param opts - The options used to build the Clerk JS script URL and load the script.\n * Must include a `publishableKey` if no existing script is found.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error.\n *\n * @example\n * ```typescript\n * try {\n * await loadClerkJsScript({ publishableKey: 'pk_test_...' });\n * console.log('Clerk loaded successfully');\n * } catch (error) {\n * console.error('Failed to load Clerk:', error.message);\n * }\n * ```\n */\nconst loadClerkJsScript = async (opts?: LoadClerkJsScriptOptions): Promise<HTMLScriptElement | null> => {\n const timeout = opts?.scriptLoadTimeout ?? 15000;\n\n if (isClerkProperlyLoaded()) {\n return null;\n }\n\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-clerk-js-script]');\n\n if (existingScript) {\n return waitForClerkWithTimeout(timeout);\n }\n\n if (!opts?.publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n return null;\n }\n\n const loadPromise = waitForClerkWithTimeout(timeout);\n\n loadScript(clerkJsScriptUrl(opts), {\n async: true,\n crossOrigin: 'anonymous',\n nonce: opts.nonce,\n beforeLoad: applyClerkJsScriptAttributes(opts),\n }).catch(error => {\n throw new ClerkRuntimeError(FAILED_TO_LOAD_ERROR + (error.message ? `, ${error.message}` : ''), {\n code: ERROR_CODE,\n cause: error,\n });\n });\n\n return loadPromise;\n};\n\n/**\n * Generates a Clerk JS script URL based on the provided options.\n *\n * @param opts - The options to use when building the Clerk JS script URL.\n * @returns The complete URL to the Clerk JS script.\n *\n * @example\n * ```typescript\n * const url = clerkJsScriptUrl({ publishableKey: 'pk_test_...' });\n * // Returns: \"https://example.clerk.accounts.dev/npm/@clerk/clerk-js@5/dist/clerk.browser.js\"\n * ```\n */\nconst clerkJsScriptUrl = (opts: LoadClerkJsScriptOptions) => {\n const { clerkJSUrl, clerkJSVariant, clerkJSVersion, proxyUrl, domain, publishableKey } = opts;\n\n if (clerkJSUrl) {\n return clerkJSUrl;\n }\n\n let scriptHost = '';\n if (!!proxyUrl && isValidProxyUrl(proxyUrl)) {\n scriptHost = proxyUrlToAbsoluteURL(proxyUrl).replace(/http(s)?:\\/\\//, '');\n } else if (domain && !isDevOrStagingUrl(parsePublishableKey(publishableKey)?.frontendApi || '')) {\n scriptHost = addClerkPrefix(domain);\n } else {\n scriptHost = parsePublishableKey(publishableKey)?.frontendApi || '';\n }\n\n const variant = clerkJSVariant ? `${clerkJSVariant.replace(/\\.+$/, '')}.` : '';\n const version = versionSelector(clerkJSVersion);\n return `https://${scriptHost}/npm/@clerk/clerk-js@${version}/dist/clerk.${variant}browser.js`;\n};\n\n/**\n * Builds an object of Clerk JS script attributes based on the provided options.\n *\n * @param options - The options containing the values for script attributes.\n * @returns An object containing data attributes to be applied to the script element.\n */\nconst buildClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => {\n const obj: Record<string, string> = {};\n\n if (options.publishableKey) {\n obj['data-clerk-publishable-key'] = options.publishableKey;\n }\n\n if (options.proxyUrl) {\n obj['data-clerk-proxy-url'] = options.proxyUrl;\n }\n\n if (options.domain) {\n obj['data-clerk-domain'] = options.domain;\n }\n\n if (options.nonce) {\n obj.nonce = options.nonce;\n }\n\n return obj;\n};\n\n/**\n * Returns a function that applies Clerk JS script attributes to a script element.\n *\n * @param options - The options containing the values for script attributes.\n * @returns A function that accepts a script element and applies the attributes to it.\n */\nconst applyClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => (script: HTMLScriptElement) => {\n const attributes = buildClerkJsScriptAttributes(options);\n for (const attribute in attributes) {\n script.setAttribute(attribute, attributes[attribute]);\n }\n};\n\nexport { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript };\nexport type { LoadClerkJsScriptOptions };\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ const require_error = require('./error-B8rjBHwB.js');
|
|
|
3
3
|
const require_loadScript = require('./loadScript-CRbXHvGF.js');
|
|
4
4
|
const require_proxy = require('./proxy-B_Yui2Mf.js');
|
|
5
5
|
const require_url = require('./url-DngZvS9Y.js');
|
|
6
|
-
const require_versionSelector = require('./versionSelector-
|
|
6
|
+
const require_versionSelector = require('./versionSelector-2V8yqqgZ.js');
|
|
7
7
|
|
|
8
8
|
//#region src/loadClerkJsScript.ts
|
|
9
9
|
const ERROR_CODE = "failed_to_load_clerk_js";
|
|
@@ -191,4 +191,4 @@ Object.defineProperty(exports, 'setClerkJsLoadingErrorPackageName', {
|
|
|
191
191
|
return setClerkJsLoadingErrorPackageName;
|
|
192
192
|
}
|
|
193
193
|
});
|
|
194
|
-
//# sourceMappingURL=loadClerkJsScript-
|
|
194
|
+
//# sourceMappingURL=loadClerkJsScript-SFD6IA1A.js.map
|
package/dist/runtime/{loadClerkJsScript-BIPE-l3G.js.map → loadClerkJsScript-SFD6IA1A.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadClerkJsScript-BIPE-l3G.js","names":["packageName: string","timeoutMs: number","timeoutId: ReturnType<typeof setTimeout>","pollInterval: ReturnType<typeof setInterval>","timeoutId","pollInterval","ClerkRuntimeError","opts?: LoadClerkJsScriptOptions","opts: LoadClerkJsScriptOptions","options: LoadClerkJsScriptOptions","obj: Record<string, string>","script: HTMLScriptElement"],"sources":["../../src/loadClerkJsScript.ts"],"sourcesContent":["import { buildErrorThrower, ClerkRuntimeError } from './error';\nimport { createDevOrStagingUrlCache, parsePublishableKey } from './keys';\nimport { loadScript } from './loadScript';\nimport { isValidProxyUrl, proxyUrlToAbsoluteURL } from './proxy';\nimport type { ClerkOptions, SDKMetadata, Without } from './types';\nimport { addClerkPrefix } from './url';\nimport { versionSelector } from './versionSelector';\n\nconst ERROR_CODE = 'failed_to_load_clerk_js';\nconst ERROR_CODE_TIMEOUT = 'failed_to_load_clerk_js_timeout';\nconst FAILED_TO_LOAD_ERROR = 'Failed to load Clerk';\n\nconst { isDevOrStagingUrl } = createDevOrStagingUrlCache();\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/shared' });\n\n/**\n * Sets the package name for error messages during ClerkJS script loading.\n *\n * @param packageName - The name of the package to use in error messages (e.g., '@clerk/clerk-react').\n * @example\n * ```typescript\n * setClerkJsLoadingErrorPackageName('@clerk/clerk-react');\n * ```\n */\nexport function setClerkJsLoadingErrorPackageName(packageName: string) {\n errorThrower.setPackageName({ packageName });\n}\n\ntype LoadClerkJsScriptOptions = Without<ClerkOptions, 'isSatellite'> & {\n publishableKey: string;\n clerkJSUrl?: string;\n clerkJSVariant?: 'headless' | '';\n clerkJSVersion?: string;\n sdkMetadata?: SDKMetadata;\n proxyUrl?: string;\n domain?: string;\n nonce?: string;\n /**\n * Timeout in milliseconds to wait for clerk-js to load before considering it failed.\n *\n * @default 15000 (15 seconds)\n */\n scriptLoadTimeout?: number;\n};\n\n/**\n * Validates that window.Clerk exists and is properly initialized.\n * This ensures we don't have false positives where the script loads but Clerk is malformed.\n *\n * @returns `true` if window.Clerk exists and has the expected structure with a load method.\n */\nfunction isClerkProperlyLoaded(): boolean {\n if (typeof window === 'undefined' || !(window as any).Clerk) {\n return false;\n }\n\n // Basic validation that window.Clerk has the expected structure\n const clerk = (window as any).Clerk;\n return typeof clerk === 'object' && typeof clerk.load === 'function';\n}\n\n/**\n * Waits for Clerk to be properly loaded with a timeout mechanism.\n * Uses polling to check if Clerk becomes available within the specified timeout.\n *\n * @param timeoutMs - Maximum time to wait in milliseconds.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error if timeout is reached.\n */\nfunction waitForClerkWithTimeout(timeoutMs: number): Promise<HTMLScriptElement | null> {\n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const cleanup = (timeoutId: ReturnType<typeof setTimeout>, pollInterval: ReturnType<typeof setInterval>) => {\n clearTimeout(timeoutId);\n clearInterval(pollInterval);\n };\n\n const checkAndResolve = () => {\n if (resolved) {\n return;\n }\n\n if (isClerkProperlyLoaded()) {\n resolved = true;\n cleanup(timeoutId, pollInterval);\n resolve(null);\n }\n };\n\n const handleTimeout = () => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n cleanup(timeoutId, pollInterval);\n\n if (!isClerkProperlyLoaded()) {\n reject(new ClerkRuntimeError(FAILED_TO_LOAD_ERROR, { code: ERROR_CODE_TIMEOUT }));\n } else {\n resolve(null);\n }\n };\n\n const timeoutId = setTimeout(handleTimeout, timeoutMs);\n\n checkAndResolve();\n\n const pollInterval = setInterval(() => {\n if (resolved) {\n clearInterval(pollInterval);\n return;\n }\n checkAndResolve();\n }, 100);\n });\n}\n\n/**\n * Hotloads the Clerk JS script with robust failure detection.\n *\n * Uses a timeout-based approach to ensure absolute certainty about load success/failure.\n * If the script fails to load within the timeout period, or loads but doesn't create\n * a proper Clerk instance, the promise rejects with an error.\n *\n * @param opts - The options used to build the Clerk JS script URL and load the script.\n * Must include a `publishableKey` if no existing script is found.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error.\n *\n * @example\n * ```typescript\n * try {\n * await loadClerkJsScript({ publishableKey: 'pk_test_...' });\n * console.log('Clerk loaded successfully');\n * } catch (error) {\n * console.error('Failed to load Clerk:', error.message);\n * }\n * ```\n */\nconst loadClerkJsScript = async (opts?: LoadClerkJsScriptOptions): Promise<HTMLScriptElement | null> => {\n const timeout = opts?.scriptLoadTimeout ?? 15000;\n\n if (isClerkProperlyLoaded()) {\n return null;\n }\n\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-clerk-js-script]');\n\n if (existingScript) {\n return waitForClerkWithTimeout(timeout);\n }\n\n if (!opts?.publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n return null;\n }\n\n const loadPromise = waitForClerkWithTimeout(timeout);\n\n loadScript(clerkJsScriptUrl(opts), {\n async: true,\n crossOrigin: 'anonymous',\n nonce: opts.nonce,\n beforeLoad: applyClerkJsScriptAttributes(opts),\n }).catch(error => {\n throw new ClerkRuntimeError(FAILED_TO_LOAD_ERROR + (error.message ? `, ${error.message}` : ''), {\n code: ERROR_CODE,\n cause: error,\n });\n });\n\n return loadPromise;\n};\n\n/**\n * Generates a Clerk JS script URL based on the provided options.\n *\n * @param opts - The options to use when building the Clerk JS script URL.\n * @returns The complete URL to the Clerk JS script.\n *\n * @example\n * ```typescript\n * const url = clerkJsScriptUrl({ publishableKey: 'pk_test_...' });\n * // Returns: \"https://example.clerk.accounts.dev/npm/@clerk/clerk-js@5/dist/clerk.browser.js\"\n * ```\n */\nconst clerkJsScriptUrl = (opts: LoadClerkJsScriptOptions) => {\n const { clerkJSUrl, clerkJSVariant, clerkJSVersion, proxyUrl, domain, publishableKey } = opts;\n\n if (clerkJSUrl) {\n return clerkJSUrl;\n }\n\n let scriptHost = '';\n if (!!proxyUrl && isValidProxyUrl(proxyUrl)) {\n scriptHost = proxyUrlToAbsoluteURL(proxyUrl).replace(/http(s)?:\\/\\//, '');\n } else if (domain && !isDevOrStagingUrl(parsePublishableKey(publishableKey)?.frontendApi || '')) {\n scriptHost = addClerkPrefix(domain);\n } else {\n scriptHost = parsePublishableKey(publishableKey)?.frontendApi || '';\n }\n\n const variant = clerkJSVariant ? `${clerkJSVariant.replace(/\\.+$/, '')}.` : '';\n const version = versionSelector(clerkJSVersion);\n return `https://${scriptHost}/npm/@clerk/clerk-js@${version}/dist/clerk.${variant}browser.js`;\n};\n\n/**\n * Builds an object of Clerk JS script attributes based on the provided options.\n *\n * @param options - The options containing the values for script attributes.\n * @returns An object containing data attributes to be applied to the script element.\n */\nconst buildClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => {\n const obj: Record<string, string> = {};\n\n if (options.publishableKey) {\n obj['data-clerk-publishable-key'] = options.publishableKey;\n }\n\n if (options.proxyUrl) {\n obj['data-clerk-proxy-url'] = options.proxyUrl;\n }\n\n if (options.domain) {\n obj['data-clerk-domain'] = options.domain;\n }\n\n if (options.nonce) {\n obj.nonce = options.nonce;\n }\n\n return obj;\n};\n\n/**\n * Returns a function that applies Clerk JS script attributes to a script element.\n *\n * @param options - The options containing the values for script attributes.\n * @returns A function that accepts a script element and applies the attributes to it.\n */\nconst applyClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => (script: HTMLScriptElement) => {\n const attributes = buildClerkJsScriptAttributes(options);\n for (const attribute in attributes) {\n script.setAttribute(attribute, attributes[attribute]);\n }\n};\n\nexport { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript };\nexport type { LoadClerkJsScriptOptions };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadClerkJsScript-SFD6IA1A.js","names":["packageName: string","timeoutMs: number","timeoutId: ReturnType<typeof setTimeout>","pollInterval: ReturnType<typeof setInterval>","timeoutId","pollInterval","ClerkRuntimeError","opts?: LoadClerkJsScriptOptions","opts: LoadClerkJsScriptOptions","options: LoadClerkJsScriptOptions","obj: Record<string, string>","script: HTMLScriptElement"],"sources":["../../src/loadClerkJsScript.ts"],"sourcesContent":["import { buildErrorThrower, ClerkRuntimeError } from './error';\nimport { createDevOrStagingUrlCache, parsePublishableKey } from './keys';\nimport { loadScript } from './loadScript';\nimport { isValidProxyUrl, proxyUrlToAbsoluteURL } from './proxy';\nimport type { ClerkOptions, SDKMetadata, Without } from './types';\nimport { addClerkPrefix } from './url';\nimport { versionSelector } from './versionSelector';\n\nconst ERROR_CODE = 'failed_to_load_clerk_js';\nconst ERROR_CODE_TIMEOUT = 'failed_to_load_clerk_js_timeout';\nconst FAILED_TO_LOAD_ERROR = 'Failed to load Clerk';\n\nconst { isDevOrStagingUrl } = createDevOrStagingUrlCache();\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/shared' });\n\n/**\n * Sets the package name for error messages during ClerkJS script loading.\n *\n * @param packageName - The name of the package to use in error messages (e.g., '@clerk/clerk-react').\n * @example\n * ```typescript\n * setClerkJsLoadingErrorPackageName('@clerk/clerk-react');\n * ```\n */\nexport function setClerkJsLoadingErrorPackageName(packageName: string) {\n errorThrower.setPackageName({ packageName });\n}\n\ntype LoadClerkJsScriptOptions = Without<ClerkOptions, 'isSatellite'> & {\n publishableKey: string;\n clerkJSUrl?: string;\n clerkJSVariant?: 'headless' | '';\n clerkJSVersion?: string;\n sdkMetadata?: SDKMetadata;\n proxyUrl?: string;\n domain?: string;\n nonce?: string;\n /**\n * Timeout in milliseconds to wait for clerk-js to load before considering it failed.\n *\n * @default 15000 (15 seconds)\n */\n scriptLoadTimeout?: number;\n};\n\n/**\n * Validates that window.Clerk exists and is properly initialized.\n * This ensures we don't have false positives where the script loads but Clerk is malformed.\n *\n * @returns `true` if window.Clerk exists and has the expected structure with a load method.\n */\nfunction isClerkProperlyLoaded(): boolean {\n if (typeof window === 'undefined' || !(window as any).Clerk) {\n return false;\n }\n\n // Basic validation that window.Clerk has the expected structure\n const clerk = (window as any).Clerk;\n return typeof clerk === 'object' && typeof clerk.load === 'function';\n}\n\n/**\n * Waits for Clerk to be properly loaded with a timeout mechanism.\n * Uses polling to check if Clerk becomes available within the specified timeout.\n *\n * @param timeoutMs - Maximum time to wait in milliseconds.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error if timeout is reached.\n */\nfunction waitForClerkWithTimeout(timeoutMs: number): Promise<HTMLScriptElement | null> {\n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const cleanup = (timeoutId: ReturnType<typeof setTimeout>, pollInterval: ReturnType<typeof setInterval>) => {\n clearTimeout(timeoutId);\n clearInterval(pollInterval);\n };\n\n const checkAndResolve = () => {\n if (resolved) {\n return;\n }\n\n if (isClerkProperlyLoaded()) {\n resolved = true;\n cleanup(timeoutId, pollInterval);\n resolve(null);\n }\n };\n\n const handleTimeout = () => {\n if (resolved) {\n return;\n }\n\n resolved = true;\n cleanup(timeoutId, pollInterval);\n\n if (!isClerkProperlyLoaded()) {\n reject(new ClerkRuntimeError(FAILED_TO_LOAD_ERROR, { code: ERROR_CODE_TIMEOUT }));\n } else {\n resolve(null);\n }\n };\n\n const timeoutId = setTimeout(handleTimeout, timeoutMs);\n\n checkAndResolve();\n\n const pollInterval = setInterval(() => {\n if (resolved) {\n clearInterval(pollInterval);\n return;\n }\n checkAndResolve();\n }, 100);\n });\n}\n\n/**\n * Hotloads the Clerk JS script with robust failure detection.\n *\n * Uses a timeout-based approach to ensure absolute certainty about load success/failure.\n * If the script fails to load within the timeout period, or loads but doesn't create\n * a proper Clerk instance, the promise rejects with an error.\n *\n * @param opts - The options used to build the Clerk JS script URL and load the script.\n * Must include a `publishableKey` if no existing script is found.\n * @returns Promise that resolves with null if Clerk loads successfully, or rejects with an error.\n *\n * @example\n * ```typescript\n * try {\n * await loadClerkJsScript({ publishableKey: 'pk_test_...' });\n * console.log('Clerk loaded successfully');\n * } catch (error) {\n * console.error('Failed to load Clerk:', error.message);\n * }\n * ```\n */\nconst loadClerkJsScript = async (opts?: LoadClerkJsScriptOptions): Promise<HTMLScriptElement | null> => {\n const timeout = opts?.scriptLoadTimeout ?? 15000;\n\n if (isClerkProperlyLoaded()) {\n return null;\n }\n\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-clerk-js-script]');\n\n if (existingScript) {\n return waitForClerkWithTimeout(timeout);\n }\n\n if (!opts?.publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n return null;\n }\n\n const loadPromise = waitForClerkWithTimeout(timeout);\n\n loadScript(clerkJsScriptUrl(opts), {\n async: true,\n crossOrigin: 'anonymous',\n nonce: opts.nonce,\n beforeLoad: applyClerkJsScriptAttributes(opts),\n }).catch(error => {\n throw new ClerkRuntimeError(FAILED_TO_LOAD_ERROR + (error.message ? `, ${error.message}` : ''), {\n code: ERROR_CODE,\n cause: error,\n });\n });\n\n return loadPromise;\n};\n\n/**\n * Generates a Clerk JS script URL based on the provided options.\n *\n * @param opts - The options to use when building the Clerk JS script URL.\n * @returns The complete URL to the Clerk JS script.\n *\n * @example\n * ```typescript\n * const url = clerkJsScriptUrl({ publishableKey: 'pk_test_...' });\n * // Returns: \"https://example.clerk.accounts.dev/npm/@clerk/clerk-js@5/dist/clerk.browser.js\"\n * ```\n */\nconst clerkJsScriptUrl = (opts: LoadClerkJsScriptOptions) => {\n const { clerkJSUrl, clerkJSVariant, clerkJSVersion, proxyUrl, domain, publishableKey } = opts;\n\n if (clerkJSUrl) {\n return clerkJSUrl;\n }\n\n let scriptHost = '';\n if (!!proxyUrl && isValidProxyUrl(proxyUrl)) {\n scriptHost = proxyUrlToAbsoluteURL(proxyUrl).replace(/http(s)?:\\/\\//, '');\n } else if (domain && !isDevOrStagingUrl(parsePublishableKey(publishableKey)?.frontendApi || '')) {\n scriptHost = addClerkPrefix(domain);\n } else {\n scriptHost = parsePublishableKey(publishableKey)?.frontendApi || '';\n }\n\n const variant = clerkJSVariant ? `${clerkJSVariant.replace(/\\.+$/, '')}.` : '';\n const version = versionSelector(clerkJSVersion);\n return `https://${scriptHost}/npm/@clerk/clerk-js@${version}/dist/clerk.${variant}browser.js`;\n};\n\n/**\n * Builds an object of Clerk JS script attributes based on the provided options.\n *\n * @param options - The options containing the values for script attributes.\n * @returns An object containing data attributes to be applied to the script element.\n */\nconst buildClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => {\n const obj: Record<string, string> = {};\n\n if (options.publishableKey) {\n obj['data-clerk-publishable-key'] = options.publishableKey;\n }\n\n if (options.proxyUrl) {\n obj['data-clerk-proxy-url'] = options.proxyUrl;\n }\n\n if (options.domain) {\n obj['data-clerk-domain'] = options.domain;\n }\n\n if (options.nonce) {\n obj.nonce = options.nonce;\n }\n\n return obj;\n};\n\n/**\n * Returns a function that applies Clerk JS script attributes to a script element.\n *\n * @param options - The options containing the values for script attributes.\n * @returns A function that accepts a script element and applies the attributes to it.\n */\nconst applyClerkJsScriptAttributes = (options: LoadClerkJsScriptOptions) => (script: HTMLScriptElement) => {\n const attributes = buildClerkJsScriptAttributes(options);\n for (const attribute in attributes) {\n script.setAttribute(attribute, attributes[attribute]);\n }\n};\n\nexport { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript };\nexport type { LoadClerkJsScriptOptions };\n"],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ require('./retry-rhkPbMCS.js');
|
|
|
8
8
|
require('./loadScript-CRbXHvGF.js');
|
|
9
9
|
require('./proxy-B_Yui2Mf.js');
|
|
10
10
|
require('./url-DngZvS9Y.js');
|
|
11
|
-
require('./versionSelector-
|
|
12
|
-
const require_loadClerkJsScript = require('./loadClerkJsScript-
|
|
11
|
+
require('./versionSelector-2V8yqqgZ.js');
|
|
12
|
+
const require_loadClerkJsScript = require('./loadClerkJsScript-SFD6IA1A.js');
|
|
13
13
|
|
|
14
14
|
exports.buildClerkJsScriptAttributes = require_loadClerkJsScript.buildClerkJsScriptAttributes;
|
|
15
15
|
exports.clerkJsScriptUrl = require_loadClerkJsScript.clerkJsScriptUrl;
|
|
@@ -8,7 +8,7 @@ import "./retry-DAlTROH9.mjs";
|
|
|
8
8
|
import "./loadScript-Bll0Ohcb.mjs";
|
|
9
9
|
import "./proxy-Bq8EHApG.mjs";
|
|
10
10
|
import "./url-BuzaT2V9.mjs";
|
|
11
|
-
import "./versionSelector-
|
|
12
|
-
import { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName } from "./loadClerkJsScript-
|
|
11
|
+
import "./versionSelector-w-Zk-G-8.mjs";
|
|
12
|
+
import { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName } from "./loadClerkJsScript-CqAq0B5f.mjs";
|
|
13
13
|
|
|
14
14
|
export { buildClerkJsScriptAttributes, clerkJsScriptUrl, loadClerkJsScript, setClerkJsLoadingErrorPackageName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathMatcher-CFwDMx3z.d.ts","names":[],"sources":["../../src/pathMatcher.ts"],"sourcesContent":[],"mappings":";;;KAGY,yCAAyC;KACzC,WAAA,GAAc,aAAa;AAD3B,KAEA,gBAAA,GAAmB,KAFI,CAEE,
|
|
1
|
+
{"version":3,"file":"pathMatcher-CFwDMx3z.d.ts","names":[],"sources":["../../src/pathMatcher.ts"],"sourcesContent":[],"mappings":";;;KAGY,yCAAyC;KACzC,WAAA,GAAc,aAAa;AAD3B,KAEA,gBAAA,GAAmB,KAFI,CAEE,MAFgB,GAEP,WAFQ,CAAA,GAEO,MAFP,GAEgB,WAFhB;AACtD;AACA;;;;;AAAsE,cAYzD,iBAZyD,EAAA,CAAA,QAAA,EAY1B,gBAZ0B,EAAA,GAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathMatcher-n7OPVmtA.d.mts","names":[],"sources":["../../src/pathMatcher.ts"],"sourcesContent":[],"mappings":";;;KAGY,yCAAyC;KACzC,WAAA,GAAc,aAAa;AAD3B,KAEA,gBAAA,GAAmB,KAFI,CAEE,
|
|
1
|
+
{"version":3,"file":"pathMatcher-n7OPVmtA.d.mts","names":[],"sources":["../../src/pathMatcher.ts"],"sourcesContent":[],"mappings":";;;KAGY,yCAAyC;KACzC,WAAA,GAAc,aAAa;AAD3B,KAEA,gBAAA,GAAmB,KAFI,CAEE,MAFF,GAEW,WAFQ,CAAA,GAEO,MAFP,GAEgB,WAFhB;AACtD;AACA;;;;;AAAsE,cAYzD,iBAZyD,EAAA,CAAA,QAAA,EAY1B,gBAZ0B,EAAA,GAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller-CIrx6NwR.d.ts","names":[],"sources":["../../src/poller.ts"],"sourcesContent":[],"mappings":";KAEY,UAAA;AAAA,KACA,cAAA,GADU,CAAA,IAAA,EACc,UADd,EAAA,GAC6B,OAD7B,CAAA,OAAA,CAAA;AACV,KACA,SAAA,GADc,CAAA,EAAA,EACG,cADO,
|
|
1
|
+
{"version":3,"file":"poller-CIrx6NwR.d.ts","names":[],"sources":["../../src/poller.ts"],"sourcesContent":[],"mappings":";KAEY,UAAA;AAAA,KACA,cAAA,GADU,CAAA,IAAA,EACc,UADd,EAAA,GAC6B,OAD7B,CAAA,OAAA,CAAA;AACV,KACA,SAAA,GADc,CAAA,EAAA,EACG,cADO,EAAe,GACH,OADU,CAAA,IAAA,CAAA;AAC1D,KAEK,aAAA,GAFgB;EAEhB,SAAA,EAAA,MAAa;AAIlB,CAAA;AAKgB,KALJ,MAAA,GAKU;EAAG,GAAA,EAJlB,SAIkB;EAAa,IAAA,EAH9B,UAG8B;CAAsC;AAAM,iBAAlE,MAAA,CAAkE;EAAA;AAAA,CAAA,CAAA,EAA5C,aAA4C,CAAA,EAAN,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller-Cn-a74Uo.d.mts","names":[],"sources":["../../src/poller.ts"],"sourcesContent":[],"mappings":";KAEY,UAAA;AAAA,KACA,cAAA,GADU,CAAA,IAAA,EACc,UADd,EAAA,GAC6B,OAD7B,CAAA,OAAA,CAAA;AACV,KACA,SAAA,GADc,CAAA,EAAA,EACG,cADO,
|
|
1
|
+
{"version":3,"file":"poller-Cn-a74Uo.d.mts","names":[],"sources":["../../src/poller.ts"],"sourcesContent":[],"mappings":";KAEY,UAAA;AAAA,KACA,cAAA,GADU,CAAA,IAAA,EACc,UADd,EAAA,GAC6B,OAD7B,CAAA,OAAA,CAAA;AACV,KACA,SAAA,GADc,CAAA,EAAA,EACG,cADO,EAAA,GACY,OADU,CAAA,IAAA,CAAA;AAC1D,KAEK,aAAA,GAFgB;EAEhB,SAAA,EAAA,MAAa;AAIlB,CAAA;AAKgB,KALJ,MAAA,GAKU;EAAG,GAAA,EAJlB,SAIkB;EAAa,IAAA,EAH9B,UAG8B;CAAsC;AAAM,iBAAlE,MAAA,CAAkE;EAAA;AAAA,CAAA,CAAA,EAA5C,aAA4C,CAAA,EAAN,MAAM"}
|
|
@@ -217,6 +217,10 @@ const cachingSWROptions = {
|
|
|
217
217
|
dedupingInterval: 1e3 * 60,
|
|
218
218
|
focusThrottleInterval: 1e3 * 60 * 2
|
|
219
219
|
};
|
|
220
|
+
const cachingSWRInfiniteOptions = {
|
|
221
|
+
...cachingSWROptions,
|
|
222
|
+
revalidateFirstPage: false
|
|
223
|
+
};
|
|
220
224
|
/**
|
|
221
225
|
* A flexible pagination hook that supports both traditional pagination and infinite loading.
|
|
222
226
|
* It provides a unified API for handling paginated data fetching, with built-in caching through SWR.
|
|
@@ -274,7 +278,7 @@ const usePagesOrInfinite = (params, fetcher, config, cacheKeys) => {
|
|
|
274
278
|
}, (cacheKeyParams) => {
|
|
275
279
|
const requestParams = getDifferentKeys(cacheKeyParams, cacheKeys);
|
|
276
280
|
return fetcher?.(requestParams);
|
|
277
|
-
},
|
|
281
|
+
}, cachingSWRInfiniteOptions);
|
|
278
282
|
const page = (0, react.useMemo)(() => {
|
|
279
283
|
if (triggerInfinite) return size;
|
|
280
284
|
return paginatedPage;
|