{"version":3,"file":"url-C6gPMFx5.mjs","names":["url"],"sources":["../../src/url.ts"],"sourcesContent":["import { CURRENT_DEV_INSTANCE_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES } from './constants';\nimport { isStaging } from './utils/instance';\n\n/**\n *\n */\nexport function parseSearchParams(queryString = ''): URLSearchParams {\n  if (queryString.startsWith('?')) {\n    queryString = queryString.slice(1);\n  }\n  return new URLSearchParams(queryString);\n}\n\n/**\n *\n */\nexport function stripScheme(url = ''): string {\n  return (url || '').replace(/^.+:\\/\\//, '');\n}\n\n/**\n *\n */\nexport function addClerkPrefix(str: string | undefined) {\n  if (!str) {\n    return '';\n  }\n  let regex;\n  if (str.match(/^(clerk\\.)+\\w*$/)) {\n    regex = /(clerk\\.)*(?=clerk\\.)/;\n  } else if (str.match(/\\.clerk.accounts/)) {\n    return str;\n  } else {\n    regex = /^(clerk\\.)*/gi;\n  }\n\n  const stripped = str.replace(regex, '');\n  return `clerk.${stripped}`;\n}\n\n/**\n *\n * Retrieve the clerk-js major tag using the major version from the pkgVersion\n * param or use the frontendApi to determine if the canary tag should be used.\n * The default tag is `latest`.\n */\nexport const getClerkJsMajorVersionOrTag = (frontendApi: string, version?: string) => {\n  if (!version && isStaging(frontendApi)) {\n    return 'canary';\n  }\n\n  if (!version) {\n    return 'latest';\n  }\n\n  return version.split('.')[0] || 'latest';\n};\n\n/**\n *\n * Retrieve the clerk-js script url from the frontendApi and the major tag\n * using the {@link getClerkJsMajorVersionOrTag} or a provided clerkJSVersion tag.\n */\nexport const getScriptUrl = (frontendApi: string, { clerkJSVersion }: { clerkJSVersion?: string }) => {\n  const noSchemeFrontendApi = frontendApi.replace(/http(s)?:\\/\\//, '');\n  const major = getClerkJsMajorVersionOrTag(frontendApi, clerkJSVersion);\n  return `https://${noSchemeFrontendApi}/npm/@clerk/clerk-js@${clerkJSVersion || major}/dist/clerk.browser.js`;\n};\n\n// Returns true for hosts such as:\n// * accounts.foo.bar-13.lcl.dev\n// * accounts.foo.bar-13.lclstage.dev\n// * accounts.foo.bar-13.dev.lclclerk.com\n/**\n *\n */\nexport function isLegacyDevAccountPortalOrigin(host: string): boolean {\n  return LEGACY_DEV_INSTANCE_SUFFIXES.some(legacyDevSuffix => {\n    return host.startsWith('accounts.') && host.endsWith(legacyDevSuffix);\n  });\n}\n\n// Returns true for hosts such as:\n// * foo-bar-13.accounts.dev\n// * foo-bar-13.accountsstage.dev\n// * foo-bar-13.accounts.lclclerk.com\n// But false for:\n// * foo-bar-13.clerk.accounts.lclclerk.com\n/**\n *\n */\nexport function isCurrentDevAccountPortalOrigin(host: string): boolean {\n  return CURRENT_DEV_INSTANCE_SUFFIXES.some(currentDevSuffix => {\n    return host.endsWith(currentDevSuffix) && !host.endsWith('.clerk' + currentDevSuffix);\n  });\n}\n\n/* Functions below are taken from https://github.com/unjs/ufo/blob/main/src/utils.ts. LICENSE: MIT */\n\nconst TRAILING_SLASH_RE = /\\/$|\\/\\?|\\/#/;\n\n/**\n *\n */\nexport function hasTrailingSlash(input = '', respectQueryAndFragment?: boolean): boolean {\n  if (!respectQueryAndFragment) {\n    return input.endsWith('/');\n  }\n  return TRAILING_SLASH_RE.test(input);\n}\n\n/**\n *\n */\nexport function withTrailingSlash(input = '', respectQueryAndFragment?: boolean): string {\n  if (!respectQueryAndFragment) {\n    return input.endsWith('/') ? input : input + '/';\n  }\n  if (hasTrailingSlash(input, true)) {\n    return input || '/';\n  }\n  let path = input;\n  let fragment = '';\n  const fragmentIndex = input.indexOf('#');\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n    if (!path) {\n      return fragment;\n    }\n  }\n  const [s0, ...s] = path.split('?');\n  return s0 + '/' + (s.length > 0 ? `?${s.join('?')}` : '') + fragment;\n}\n\n/**\n *\n */\nexport function withoutTrailingSlash(input = '', respectQueryAndFragment?: boolean): string {\n  if (!respectQueryAndFragment) {\n    return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || '/';\n  }\n  if (!hasTrailingSlash(input, true)) {\n    return input || '/';\n  }\n  let path = input;\n  let fragment = '';\n  const fragmentIndex = input.indexOf('#');\n  if (fragmentIndex >= 0) {\n    path = input.slice(0, fragmentIndex);\n    fragment = input.slice(fragmentIndex);\n  }\n  const [s0, ...s] = path.split('?');\n  return (s0.slice(0, -1) || '/') + (s.length > 0 ? `?${s.join('?')}` : '') + fragment;\n}\n\n/**\n *\n */\nexport function hasLeadingSlash(input = ''): boolean {\n  return input.startsWith('/');\n}\n\n/**\n *\n */\nexport function withoutLeadingSlash(input = ''): string {\n  return (hasLeadingSlash(input) ? input.slice(1) : input) || '/';\n}\n\n/**\n *\n */\nexport function withLeadingSlash(input = ''): string {\n  return hasLeadingSlash(input) ? input : '/' + input;\n}\n\n/**\n *\n */\nexport function cleanDoubleSlashes(input = ''): string {\n  return input\n    .split('://')\n    .map(string_ => string_.replace(/\\/{2,}/g, '/'))\n    .join('://');\n}\n\n/**\n *\n */\nexport function isNonEmptyURL(url: string) {\n  return url && url !== '/';\n}\n\nconst JOIN_LEADING_SLASH_RE = /^\\.?\\//;\n\n/**\n *\n */\nexport function joinURL(base: string, ...input: string[]): string {\n  let url = base || '';\n\n  for (const segment of input.filter(url => isNonEmptyURL(url))) {\n    if (url) {\n      // TODO: Handle .. when joining\n      const _segment = segment.replace(JOIN_LEADING_SLASH_RE, '');\n      url = withTrailingSlash(url) + _segment;\n    } else {\n      url = segment;\n    }\n  }\n\n  return url;\n}\n\n/* Code below is taken from https://github.com/vercel/next.js/blob/fe7ff3f468d7651a92865350bfd0f16ceba27db5/packages/next/src/shared/lib/utils.ts. LICENSE: MIT */\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nexport const isAbsoluteUrl = (url: string) => ABSOLUTE_URL_REGEX.test(url);\n"],"mappings":"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"}