From ecdbf2e38fb03a1f902915c2679ee083911f4372 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 18:25:53 +0200 Subject: [PATCH 1/9] fix(nextjs): Import helper from subpath to avoid static analysis warnings Otherwise, next prod builds will report the following issue: A Node.js API is used (MessageEvent at line: 28) which is not supported in the Edge Runtime. Learn more: https://nextjs.org/docs/api-reference/edge-runtime Import trace for requested module: ./node_modules/@clerk/shared/dist/chunk-RSOCGYTF.mjs ./node_modules/@clerk/shared/dist/index.mjs --- packages/nextjs/src/server/createGetAuth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nextjs/src/server/createGetAuth.ts b/packages/nextjs/src/server/createGetAuth.ts index c8acc34ff66..03c1b7bd355 100644 --- a/packages/nextjs/src/server/createGetAuth.ts +++ b/packages/nextjs/src/server/createGetAuth.ts @@ -1,7 +1,7 @@ import type { AuthObject } from '@clerk/backend'; import { constants } from '@clerk/backend/internal'; import { decodeJwt } from '@clerk/backend/jwt'; -import { isTruthy } from '@clerk/shared'; +import { isTruthy } from '@clerk/shared/underscore'; import { withLogger } from '../utils/debugLogger'; import { getAuthDataFromRequest } from './data/getAuthDataFromRequest'; From 3914bd05279e7e1a0e594a9c71affb88e9e9f805 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 18:51:10 +0200 Subject: [PATCH 2/9] chore(repo): Disallow imports root level imports from @clerk/shared --- packages/eslint-config-custom/_base.js | 22 ++++++++++++++++++++++ packages/eslint-config-custom/react.js | 12 ------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/eslint-config-custom/_base.js b/packages/eslint-config-custom/_base.js index 30891e13e37..b705ccc20ea 100644 --- a/packages/eslint-config-custom/_base.js +++ b/packages/eslint-config-custom/_base.js @@ -30,6 +30,28 @@ module.exports = { rules: { 'simple-import-sort/imports': 'error', curly: 'error', + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: '@clerk/shared', + message: "Please always import from '@clerk/shared/' instead of '@clerk/shared'.", + }, + ], + patterns: [ + { + group: ['!@clerk/shared/*'], + message: 'ignore this line -- eslint matching workaround to allow all imports except @clerk/shared', + }, + { + group: ['@emotion/*'], + message: + 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', + }, + ], + }, + ], }, overrides: [ { diff --git a/packages/eslint-config-custom/react.js b/packages/eslint-config-custom/react.js index cac51a93309..df5f783c427 100644 --- a/packages/eslint-config-custom/react.js +++ b/packages/eslint-config-custom/react.js @@ -27,18 +27,6 @@ const extensions = [ module.exports = { extends: extensions, rules: { - 'no-restricted-imports': [ - 'error', - { - patterns: [ - { - group: ['@emotion/*'], - message: - 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', - }, - ], - }, - ], 'react/button-has-type': 'warn', 'react/function-component-definition': 'off', 'react/hook-use-state': 'warn', From b0abb61377d5749274e3ad9a5045e65395c8fe97 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 18:52:07 +0200 Subject: [PATCH 3/9] Create early-steaks-yawn.md --- .changeset/early-steaks-yawn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/early-steaks-yawn.md diff --git a/.changeset/early-steaks-yawn.md b/.changeset/early-steaks-yawn.md new file mode 100644 index 00000000000..1ae3332f64d --- /dev/null +++ b/.changeset/early-steaks-yawn.md @@ -0,0 +1,5 @@ +--- +"@clerk/nextjs": patch +--- + +Fix static analysis warnings warning during production NextJS builds From 808769b2ecd7575953bb6547aa9a94a33d806c89 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 18:51:10 +0200 Subject: [PATCH 4/9] chore(repo): Disallow imports root level imports from @clerk/shared --- packages/eslint-config-custom/_base.js | 22 +++++++++++++++++++ packages/eslint-config-custom/react.js | 12 ---------- .../react/src/components/uiComponents.tsx | 3 ++- .../react/src/utils/useCustomMenuItems.tsx | 2 +- packages/react/src/utils/useCustomPages.tsx | 2 +- packages/shared/package.json | 13 ++++++++++- packages/shared/src/index.ts | 2 +- packages/shared/subpaths.mjs | 4 ++-- packages/shared/tsup.config.ts | 2 +- 9 files changed, 42 insertions(+), 20 deletions(-) diff --git a/packages/eslint-config-custom/_base.js b/packages/eslint-config-custom/_base.js index 30891e13e37..b705ccc20ea 100644 --- a/packages/eslint-config-custom/_base.js +++ b/packages/eslint-config-custom/_base.js @@ -30,6 +30,28 @@ module.exports = { rules: { 'simple-import-sort/imports': 'error', curly: 'error', + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: '@clerk/shared', + message: "Please always import from '@clerk/shared/' instead of '@clerk/shared'.", + }, + ], + patterns: [ + { + group: ['!@clerk/shared/*'], + message: 'ignore this line -- eslint matching workaround to allow all imports except @clerk/shared', + }, + { + group: ['@emotion/*'], + message: + 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', + }, + ], + }, + ], }, overrides: [ { diff --git a/packages/eslint-config-custom/react.js b/packages/eslint-config-custom/react.js index cac51a93309..df5f783c427 100644 --- a/packages/eslint-config-custom/react.js +++ b/packages/eslint-config-custom/react.js @@ -27,18 +27,6 @@ const extensions = [ module.exports = { extends: extensions, rules: { - 'no-restricted-imports': [ - 'error', - { - patterns: [ - { - group: ['@emotion/*'], - message: - 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', - }, - ], - }, - ], 'react/button-has-type': 'warn', 'react/function-component-definition': 'off', 'react/hook-use-state': 'warn', diff --git a/packages/react/src/components/uiComponents.tsx b/packages/react/src/components/uiComponents.tsx index d4c589ced15..10c111a46f6 100644 --- a/packages/react/src/components/uiComponents.tsx +++ b/packages/react/src/components/uiComponents.tsx @@ -1,5 +1,6 @@ -import { logErrorInDevMode, without } from '@clerk/shared'; +import { without } from '@clerk/shared/object'; import { isDeeplyEqual } from '@clerk/shared/react'; +import { logErrorInDevMode } from '@clerk/shared/utils'; import type { CreateOrganizationProps, GoogleOneTapProps, diff --git a/packages/react/src/utils/useCustomMenuItems.tsx b/packages/react/src/utils/useCustomMenuItems.tsx index 239a1e0bbf8..73ca937e7d3 100644 --- a/packages/react/src/utils/useCustomMenuItems.tsx +++ b/packages/react/src/utils/useCustomMenuItems.tsx @@ -1,4 +1,4 @@ -import { logErrorInDevMode } from '@clerk/shared'; +import { logErrorInDevMode } from '@clerk/shared/utils'; import type { CustomMenuItem } from '@clerk/types'; import type { ReactElement } from 'react'; import React from 'react'; diff --git a/packages/react/src/utils/useCustomPages.tsx b/packages/react/src/utils/useCustomPages.tsx index c3367d1cc7b..66c25873d1e 100644 --- a/packages/react/src/utils/useCustomPages.tsx +++ b/packages/react/src/utils/useCustomPages.tsx @@ -1,4 +1,4 @@ -import { logErrorInDevMode } from '@clerk/shared'; +import { logErrorInDevMode } from '@clerk/shared/utils'; import type { CustomPage } from '@clerk/types'; import type { ReactElement } from 'react'; import React from 'react'; diff --git a/packages/shared/package.json b/packages/shared/package.json index e097ab21366..cb78886d3e8 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -40,6 +40,16 @@ "default": "./dist/react/index.js" } }, + "./utils": { + "import": { + "types": "./dist/utils/index.d.mts", + "default": "./dist/utils/index.mjs" + }, + "require": { + "types": "./dist/utils/index.d.ts", + "default": "./dist/utils/index.js" + } + }, "./package.json": "./package.json" }, "main": "./dist/index.js", @@ -77,7 +87,8 @@ "logger", "webauthn", "router", - "pathToRegexp" + "pathToRegexp", + "utils" ], "scripts": { "build": "tsup", diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index a166f784ca3..d2a01c08c66 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,4 +1,4 @@ -/** The following files are not exported on purpose: +1; /** The following files are not exported on purpose: * - cookie.ts * - globs.ts * diff --git a/packages/shared/subpaths.mjs b/packages/shared/subpaths.mjs index 182e3fd70bb..d364684f658 100644 --- a/packages/shared/subpaths.mjs +++ b/packages/shared/subpaths.mjs @@ -7,8 +7,8 @@ import packageJson from './package.json' with { type: 'json' }; * When you add an entry to the package.json "files" field, a subfolder will be automatically created with a package.json pointing to that file */ -export const subpathNames = packageJson.files.filter(k => !['dist', 'scripts', 'react'].includes(k)); +export const subpathFoldersBarrel = ['react', 'utils']; -export const subpathFoldersBarrel = ['react']; +export const subpathNames = packageJson.files.filter(k => !['dist', 'scripts', ...subpathFoldersBarrel].includes(k)); export const ignoredFolders = ['scripts']; diff --git a/packages/shared/tsup.config.ts b/packages/shared/tsup.config.ts index 12bb36aac30..28df0cb88a4 100644 --- a/packages/shared/tsup.config.ts +++ b/packages/shared/tsup.config.ts @@ -10,7 +10,7 @@ export default defineConfig(overrideOptions => { const isWatch = !!overrideOptions.watch; return { - entry: ['./src/*.{ts,tsx}', './src/react/index.ts', '!./src/**/*.test.{ts,tsx}'], + entry: ['./src/*.{ts,tsx}', './src/react/index.ts', './src/utils/index.ts', '!./src/**/*.test.{ts,tsx}'], format: ['cjs', 'esm'], bundle: true, clean: true, From aa75829847ffc68ffe1ae99577b7575b18ffc272 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 20:05:50 +0200 Subject: [PATCH 5/9] chore(repo): Fix shared imports --- packages/astro/src/server/clerk-middleware.ts | 4 ++- .../src/server/server-redirect-with-auth.ts | 3 ++- .../chrome-extension/src/internal/clerk.ts | 2 +- .../src/core/auth/SessionCookiePoller.ts | 2 +- packages/clerk-js/src/core/clerk.ts | 25 ++++++------------- packages/clerk-js/src/core/fapiClient.ts | 4 ++- .../src/core/resources/ExternalAccount.ts | 2 +- .../clerk-js/src/core/resources/Session.ts | 2 +- .../src/core/resources/SessionVerification.ts | 2 +- .../clerk-js/src/core/resources/SignIn.ts | 3 ++- .../clerk-js/src/core/resources/SignUp.ts | 2 +- packages/clerk-js/src/ui/Components.tsx | 2 +- .../SignIn/SignInFactorOneCodeForm.tsx | 2 +- .../src/ui/components/SignIn/utils.ts | 2 +- .../ui/components/SignUp/signUpFormHelpers.ts | 2 +- .../UserProfile/AddAuthenticatorApp.tsx | 2 +- .../src/ui/customizables/parseAppearance.ts | 2 +- .../clerk-js/src/ui/elements/FormControl.tsx | 2 +- packages/clerk-js/src/ui/hooks/usePassword.ts | 2 +- .../ui/localization/localizationModifiers.ts | 3 ++- .../src/ui/localization/parseLocalization.ts | 2 +- packages/clerk-js/src/ui/new/index.tsx | 2 +- .../src/ui/router/__mocks__/RouteContext.tsx | 2 +- .../src/ui/styledSystem/createVariants.ts | 2 +- .../clerk-js/src/ui/utils/errorHandler.ts | 2 +- .../src/ui/utils/getRelativeToNowDateKey.ts | 2 +- .../src/ui/utils/runtimeEnvironment.ts | 2 +- .../src/utils/__tests__/querystring.test.ts | 2 +- .../utils/convertPageToOffsetSearchParams.ts | 2 +- .../clerk-js/src/utils/passwords/password.ts | 2 +- .../elements/src/internals/errors/index.ts | 1 + .../src/react/hooks/use-password.hook.ts | 2 +- packages/express/src/authenticateRequest.ts | 2 +- .../hooks/useEnforceCatchAllRoute.tsx | 2 +- packages/nextjs/src/server/utils.ts | 2 +- packages/react/src/isomorphicClerk.ts | 2 +- packages/remix/src/ssr/loadOptions.ts | 2 +- packages/sdk-node/src/authenticateRequest.ts | 2 +- packages/shared/package.json | 13 +++++++++- .../src/__tests__/fastDeepMerge.test.ts | 2 +- .../src/__tests__/handleValueOrFn.test.ts | 2 +- packages/shared/src/index.ts | 4 +-- .../shared/src/{ => utils}/fastDeepMerge.ts | 0 .../shared/src/{ => utils}/handleValueOrFn.ts | 0 packages/shared/src/utils/index.ts | 2 ++ packages/shared/subpaths.mjs | 2 +- packages/shared/tsup.config.ts | 8 +++++- .../tanstack-start/src/server/loadOptions.ts | 2 +- packages/tanstack-start/src/utils/index.ts | 2 +- packages/testing/src/common/setup.ts | 2 +- packages/ui/src/hooks/use-localizations.ts | 2 +- 51 files changed, 82 insertions(+), 64 deletions(-) rename packages/shared/src/{ => utils}/fastDeepMerge.ts (100%) rename packages/shared/src/{ => utils}/handleValueOrFn.ts (100%) diff --git a/packages/astro/src/server/clerk-middleware.ts b/packages/astro/src/server/clerk-middleware.ts index 67f276258fd..6e6f4d809cc 100644 --- a/packages/astro/src/server/clerk-middleware.ts +++ b/packages/astro/src/server/clerk-middleware.ts @@ -1,8 +1,10 @@ import type { AuthObject, ClerkClient } from '@clerk/backend'; import type { AuthenticateRequestOptions, ClerkRequest, RedirectFun, RequestState } from '@clerk/backend/internal'; import { AuthStatus, constants, createClerkRequest, createRedirect } from '@clerk/backend/internal'; -import { handleValueOrFn, isDevelopmentFromSecretKey, isHttpOrHttps } from '@clerk/shared'; +import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; +import { isHttpOrHttps } from '@clerk/shared/proxy'; import { eventMethodCalled } from '@clerk/shared/telemetry'; +import { handleValueOrFn } from '@clerk/shared/utils'; import type { APIContext } from 'astro'; // @ts-ignore diff --git a/packages/astro/src/server/server-redirect-with-auth.ts b/packages/astro/src/server/server-redirect-with-auth.ts index 38d8c33523b..a624ef0cb3b 100644 --- a/packages/astro/src/server/server-redirect-with-auth.ts +++ b/packages/astro/src/server/server-redirect-with-auth.ts @@ -1,7 +1,8 @@ // Middleware runs on the server side, before clerk-js is loaded, that's why we need Cookies. import type { AuthenticateRequestOptions, ClerkRequest } from '@clerk/backend/internal'; import { constants } from '@clerk/backend/internal'; -import { DEV_BROWSER_JWT_KEY, isDevelopmentFromSecretKey, setDevBrowserJWTInURL } from '@clerk/shared'; +import { DEV_BROWSER_JWT_KEY, setDevBrowserJWTInURL } from '@clerk/shared/devBrowser'; +import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { getSafeEnv } from './get-safe-env'; import type { AstroMiddlewareContextParam } from './types'; diff --git a/packages/chrome-extension/src/internal/clerk.ts b/packages/chrome-extension/src/internal/clerk.ts index d22716f0e4c..79a1944bfb9 100644 --- a/packages/chrome-extension/src/internal/clerk.ts +++ b/packages/chrome-extension/src/internal/clerk.ts @@ -1,5 +1,5 @@ import { Clerk } from '@clerk/clerk-js'; -import { DEV_BROWSER_JWT_KEY } from '@clerk/shared'; +import { DEV_BROWSER_JWT_KEY } from '@clerk/shared/devBrowser'; import { parsePublishableKey } from '@clerk/shared/keys'; import browser from 'webextension-polyfill'; diff --git a/packages/clerk-js/src/core/auth/SessionCookiePoller.ts b/packages/clerk-js/src/core/auth/SessionCookiePoller.ts index 3d4ed2fc41b..dd4ff1f2a05 100644 --- a/packages/clerk-js/src/core/auth/SessionCookiePoller.ts +++ b/packages/clerk-js/src/core/auth/SessionCookiePoller.ts @@ -1,4 +1,4 @@ -import { createWorkerTimers } from '@clerk/shared'; +import { createWorkerTimers } from '@clerk/shared/workerTimers'; import { SafeLock } from './safeLock'; diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 2da6fd302c4..d7d6cf61696 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1,22 +1,13 @@ -import { - addClerkPrefix, - ClerkRuntimeError, - deprecated, - handleValueOrFn, - inBrowser as inClientSide, - is4xxError, - isClerkAPIResponseError, - isHttpOrHttps, - isValidBrowserOnline, - isValidProxyUrl, - LocalStorageBroadcastChannel, - noop, - parsePublishableKey, - proxyUrlToAbsoluteURL, - stripScheme, -} from '@clerk/shared'; +import { inBrowser as inClientSide, isValidBrowserOnline } from '@clerk/shared/browser'; +import { deprecated } from '@clerk/shared/deprecated'; +import { ClerkRuntimeError, is4xxError, isClerkAPIResponseError } from '@clerk/shared/error'; +import { parsePublishableKey } from '@clerk/shared/keys'; +import { LocalStorageBroadcastChannel } from '@clerk/shared/localStorageBroadcastChannel'; import { logger } from '@clerk/shared/logger'; +import { isHttpOrHttps, isValidProxyUrl, proxyUrlToAbsoluteURL } from '@clerk/shared/proxy'; import { eventPrebuiltComponentMounted, TelemetryCollector } from '@clerk/shared/telemetry'; +import { addClerkPrefix, stripScheme } from '@clerk/shared/url'; +import { handleValueOrFn, noop } from '@clerk/shared/utils'; import type { __experimental_UserVerificationModalProps, ActiveSessionResource, diff --git a/packages/clerk-js/src/core/fapiClient.ts b/packages/clerk-js/src/core/fapiClient.ts index 0b557c5d8c8..e8ea7011a46 100644 --- a/packages/clerk-js/src/core/fapiClient.ts +++ b/packages/clerk-js/src/core/fapiClient.ts @@ -1,4 +1,6 @@ -import { camelToSnake, isBrowserOnline, runWithExponentialBackOff } from '@clerk/shared'; +import { isBrowserOnline } from '@clerk/shared/browser'; +import { camelToSnake } from '@clerk/shared/underscore'; +import { runWithExponentialBackOff } from '@clerk/shared/utils'; import type { Clerk, ClerkAPIErrorJSON, ClientJSON } from '@clerk/types'; import { buildEmailAddress as buildEmailAddressUtil, buildURL as buildUrlUtil, stringifyQueryParams } from '../utils'; diff --git a/packages/clerk-js/src/core/resources/ExternalAccount.ts b/packages/clerk-js/src/core/resources/ExternalAccount.ts index b8d9366dc11..a8dfddb2cb7 100644 --- a/packages/clerk-js/src/core/resources/ExternalAccount.ts +++ b/packages/clerk-js/src/core/resources/ExternalAccount.ts @@ -1,4 +1,4 @@ -import { titleize } from '@clerk/shared'; +import { titleize } from '@clerk/shared/underscore'; import type { ExternalAccountJSON, ExternalAccountResource, diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index b9ef6743736..e1fe7c07b77 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -1,6 +1,6 @@ -import { runWithExponentialBackOff } from '@clerk/shared'; import { createCheckAuthorization } from '@clerk/shared/authorization'; import { is4xxError } from '@clerk/shared/error'; +import { runWithExponentialBackOff } from '@clerk/shared/utils'; import type { __experimental_SessionVerificationJSON, __experimental_SessionVerificationResource, diff --git a/packages/clerk-js/src/core/resources/SessionVerification.ts b/packages/clerk-js/src/core/resources/SessionVerification.ts index a22ef77e448..234b3b8339e 100644 --- a/packages/clerk-js/src/core/resources/SessionVerification.ts +++ b/packages/clerk-js/src/core/resources/SessionVerification.ts @@ -1,4 +1,4 @@ -import { deepSnakeToCamel } from '@clerk/shared'; +import { deepSnakeToCamel } from '@clerk/shared/underscore'; import type { __experimental_SessionVerificationFirstFactor, __experimental_SessionVerificationJSON, diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 50ce5f39e4c..566d242d394 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -1,4 +1,5 @@ -import { deepSnakeToCamel, Poller } from '@clerk/shared'; +import { Poller } from '@clerk/shared/poller'; +import { deepSnakeToCamel } from '@clerk/shared/underscore'; import { isWebAuthnAutofillSupported, isWebAuthnSupported } from '@clerk/shared/webauthn'; import type { AttemptFirstFactorParams, diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 2dbaf053378..5f25c7def5b 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -1,5 +1,5 @@ -import { Poller } from '@clerk/shared'; import { isCaptchaError, isClerkAPIResponseError } from '@clerk/shared/error'; +import { Poller } from '@clerk/shared/poller'; import type { AttemptEmailAddressVerificationParams, AttemptPhoneNumberVerificationParams, diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index 5fd0168ee3d..edf8f0aa608 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -1,5 +1,5 @@ -import { createDeferredPromise } from '@clerk/shared'; import { useSafeLayoutEffect } from '@clerk/shared/react'; +import { createDeferredPromise } from '@clerk/shared/utils'; import type { __experimental_UserVerificationProps, Appearance, diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx index 523d6657a12..455633fa264 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx @@ -1,4 +1,4 @@ -import { isUserLockedError } from '@clerk/shared'; +import { isUserLockedError } from '@clerk/shared/error'; import { useClerk } from '@clerk/shared/react'; import type { EmailCodeFactor, PhoneCodeFactor, ResetPasswordCodeFactor } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/components/SignIn/utils.ts b/packages/clerk-js/src/ui/components/SignIn/utils.ts index db98cd21748..ced616f462e 100644 --- a/packages/clerk-js/src/ui/components/SignIn/utils.ts +++ b/packages/clerk-js/src/ui/components/SignIn/utils.ts @@ -1,4 +1,4 @@ -import { titleize } from '@clerk/shared'; +import { titleize } from '@clerk/shared/underscore'; import { isWebAuthnSupported } from '@clerk/shared/webauthn'; import type { PreferredSignInStrategy, SignInFactor, SignInResource, SignInStrategy } from '@clerk/types'; diff --git a/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts b/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts index 5318a5890ad..f67db1f55f0 100644 --- a/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts +++ b/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/shared'; +import { camelToSnake } from '@clerk/shared/underscore'; import type { Attributes, SignUpResource, UserSettingsResource } from '@clerk/types'; import type { FieldState } from '../../common'; diff --git a/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx b/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx index 78dcbc6abcd..997916cee4f 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx @@ -1,4 +1,4 @@ -import { isClerkRuntimeError } from '@clerk/shared'; +import { isClerkRuntimeError } from '@clerk/shared/error'; import { __experimental_useReverification as useReverification, useUser } from '@clerk/shared/react'; import type { TOTPResource } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/customizables/parseAppearance.ts b/packages/clerk-js/src/ui/customizables/parseAppearance.ts index a8d88af77f2..1c5f32c5526 100644 --- a/packages/clerk-js/src/ui/customizables/parseAppearance.ts +++ b/packages/clerk-js/src/ui/customizables/parseAppearance.ts @@ -1,4 +1,4 @@ -import { fastDeepMergeAndReplace } from '@clerk/shared'; +import { fastDeepMergeAndReplace } from '@clerk/shared/utils'; import type { Appearance, DeepPartial, Elements, Layout, Theme } from '@clerk/types'; import { createInternalTheme, defaultInternalTheme } from '../foundations'; diff --git a/packages/clerk-js/src/ui/elements/FormControl.tsx b/packages/clerk-js/src/ui/elements/FormControl.tsx index b472fbcb8ea..b58c2f53c82 100644 --- a/packages/clerk-js/src/ui/elements/FormControl.tsx +++ b/packages/clerk-js/src/ui/elements/FormControl.tsx @@ -1,4 +1,4 @@ -import { titleize } from '@clerk/shared'; +import { titleize } from '@clerk/shared/underscore'; import type { FieldId } from '@clerk/types'; import { useCallback, useMemo, useRef, useState } from 'react'; diff --git a/packages/clerk-js/src/ui/hooks/usePassword.ts b/packages/clerk-js/src/ui/hooks/usePassword.ts index 1fcce876077..f464218716a 100644 --- a/packages/clerk-js/src/ui/hooks/usePassword.ts +++ b/packages/clerk-js/src/ui/hooks/usePassword.ts @@ -1,4 +1,4 @@ -import { noop } from '@clerk/shared'; +import { noop } from '@clerk/shared/utils'; import type { PasswordValidation } from '@clerk/types'; import { useCallback, useMemo } from 'react'; diff --git a/packages/clerk-js/src/ui/localization/localizationModifiers.ts b/packages/clerk-js/src/ui/localization/localizationModifiers.ts index ed266d10ea3..7728bf6bfd7 100644 --- a/packages/clerk-js/src/ui/localization/localizationModifiers.ts +++ b/packages/clerk-js/src/ui/localization/localizationModifiers.ts @@ -1,4 +1,5 @@ -import { normalizeDate, titleize } from '@clerk/shared'; +import { normalizeDate } from '@clerk/shared/date'; +import { titleize } from '@clerk/shared/underscore'; const timeString = (val: Date | string | number, locale?: string) => { try { diff --git a/packages/clerk-js/src/ui/localization/parseLocalization.ts b/packages/clerk-js/src/ui/localization/parseLocalization.ts index c30935a877d..5c9616d780a 100644 --- a/packages/clerk-js/src/ui/localization/parseLocalization.ts +++ b/packages/clerk-js/src/ui/localization/parseLocalization.ts @@ -1,4 +1,4 @@ -import { fastDeepMergeAndReplace } from '@clerk/shared'; +import { fastDeepMergeAndReplace } from '@clerk/shared/utils'; import type { DeepPartial, LocalizationResource } from '@clerk/types'; import { dequal as deepEqual } from 'dequal'; diff --git a/packages/clerk-js/src/ui/new/index.tsx b/packages/clerk-js/src/ui/new/index.tsx index 42b8614102f..d066810767e 100644 --- a/packages/clerk-js/src/ui/new/index.tsx +++ b/packages/clerk-js/src/ui/new/index.tsx @@ -1,5 +1,5 @@ -import { createDeferredPromise } from '@clerk/shared'; import type { ClerkHostRouter } from '@clerk/shared/router'; +import { createDeferredPromise } from '@clerk/shared/utils'; import type { ClerkOptions, LoadedClerk } from '@clerk/types'; import type { init } from './renderer'; diff --git a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx index cabc7dfec95..7693d51fe48 100644 --- a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx +++ b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx @@ -1,4 +1,4 @@ -import { noop } from '@clerk/shared'; +import { noop } from '@clerk/shared/utils'; export const useRouter = () => ({ resolve: jest.fn(() => ({ diff --git a/packages/clerk-js/src/ui/styledSystem/createVariants.ts b/packages/clerk-js/src/ui/styledSystem/createVariants.ts index 5718d316c5f..64c36b9456e 100644 --- a/packages/clerk-js/src/ui/styledSystem/createVariants.ts +++ b/packages/clerk-js/src/ui/styledSystem/createVariants.ts @@ -1,4 +1,4 @@ -import { fastDeepMergeAndReplace } from '@clerk/shared'; +import { fastDeepMergeAndReplace } from '@clerk/shared/utils'; import { createInfiniteAccessProxy } from '../utils'; import type { InternalTheme, StyleRule } from './types'; diff --git a/packages/clerk-js/src/ui/utils/errorHandler.ts b/packages/clerk-js/src/ui/utils/errorHandler.ts index 2f7a7bff54b..5f49338ead1 100644 --- a/packages/clerk-js/src/ui/utils/errorHandler.ts +++ b/packages/clerk-js/src/ui/utils/errorHandler.ts @@ -1,4 +1,4 @@ -import { snakeToCamel } from '@clerk/shared'; +import { snakeToCamel } from '@clerk/shared/underscore'; import type { ClerkAPIError, ClerkRuntimeError } from '@clerk/types'; import { diff --git a/packages/clerk-js/src/ui/utils/getRelativeToNowDateKey.ts b/packages/clerk-js/src/ui/utils/getRelativeToNowDateKey.ts index 93ca664e02f..4d2be05006d 100644 --- a/packages/clerk-js/src/ui/utils/getRelativeToNowDateKey.ts +++ b/packages/clerk-js/src/ui/utils/getRelativeToNowDateKey.ts @@ -1,4 +1,4 @@ -import { formatRelative } from '@clerk/shared'; +import { formatRelative } from '@clerk/shared/date'; import { localizationKeys } from '../localization'; diff --git a/packages/clerk-js/src/ui/utils/runtimeEnvironment.ts b/packages/clerk-js/src/ui/utils/runtimeEnvironment.ts index d3316a01eee..66586a31ed0 100644 --- a/packages/clerk-js/src/ui/utils/runtimeEnvironment.ts +++ b/packages/clerk-js/src/ui/utils/runtimeEnvironment.ts @@ -1,4 +1,4 @@ -import { isDevelopmentEnvironment } from '@clerk/shared'; +import { isDevelopmentEnvironment } from '@clerk/shared/utils'; import type { LoadedClerk } from '@clerk/types'; export const isDevelopmentSDK = (clerk: LoadedClerk) => diff --git a/packages/clerk-js/src/utils/__tests__/querystring.test.ts b/packages/clerk-js/src/utils/__tests__/querystring.test.ts index 5dbfa1ff0b7..75a5b54a322 100644 --- a/packages/clerk-js/src/utils/__tests__/querystring.test.ts +++ b/packages/clerk-js/src/utils/__tests__/querystring.test.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/shared'; +import { camelToSnake } from '@clerk/shared/underscore'; import { getQueryParams, stringifyQueryParams } from '../querystring'; diff --git a/packages/clerk-js/src/utils/convertPageToOffsetSearchParams.ts b/packages/clerk-js/src/utils/convertPageToOffsetSearchParams.ts index ed1189461cf..257f1835f1c 100644 --- a/packages/clerk-js/src/utils/convertPageToOffsetSearchParams.ts +++ b/packages/clerk-js/src/utils/convertPageToOffsetSearchParams.ts @@ -1,4 +1,4 @@ -import { getNonUndefinedValues } from '@clerk/shared'; +import { getNonUndefinedValues } from '@clerk/shared/underscore'; import type { ClerkPaginationParams } from '@clerk/types'; export function convertPageToOffsetSearchParams(pageParams: ClerkPaginationParams | undefined) { diff --git a/packages/clerk-js/src/utils/passwords/password.ts b/packages/clerk-js/src/utils/passwords/password.ts index 651c41b0c1f..afb43b97d12 100644 --- a/packages/clerk-js/src/utils/passwords/password.ts +++ b/packages/clerk-js/src/utils/passwords/password.ts @@ -1,4 +1,4 @@ -import { noop } from '@clerk/shared'; +import { noop } from '@clerk/shared/utils'; import type { PasswordSettingsData, PasswordValidation, ValidatePasswordCallbacks } from '@clerk/types'; import { loadZxcvbn } from '../zxcvbn'; diff --git a/packages/elements/src/internals/errors/index.ts b/packages/elements/src/internals/errors/index.ts index daeb21fe094..74957c32861 100644 --- a/packages/elements/src/internals/errors/index.ts +++ b/packages/elements/src/internals/errors/index.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-restricted-imports import type { MetamaskError } from '@clerk/shared'; import type { ClerkAPIError } from '@clerk/types'; diff --git a/packages/elements/src/react/hooks/use-password.hook.ts b/packages/elements/src/react/hooks/use-password.hook.ts index f7138b3eb2d..3f5a03d6f5b 100644 --- a/packages/elements/src/react/hooks/use-password.hook.ts +++ b/packages/elements/src/react/hooks/use-password.hook.ts @@ -1,5 +1,5 @@ -import { noop } from '@clerk/shared'; import { useClerk } from '@clerk/shared/react'; +import { noop } from '@clerk/shared/utils'; import type { PasswordSettingsData, PasswordValidation } from '@clerk/types'; import * as React from 'react'; diff --git a/packages/express/src/authenticateRequest.ts b/packages/express/src/authenticateRequest.ts index d3b862ecf31..4b8cc3c19a3 100644 --- a/packages/express/src/authenticateRequest.ts +++ b/packages/express/src/authenticateRequest.ts @@ -1,8 +1,8 @@ import type { RequestState } from '@clerk/backend/internal'; import { AuthStatus, createClerkRequest } from '@clerk/backend/internal'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { isHttpOrHttps, isProxyUrlRelative, isValidProxyUrl } from '@clerk/shared/proxy'; +import { handleValueOrFn } from '@clerk/shared/utils'; import type { RequestHandler, Response } from 'express'; import type { IncomingMessage } from 'http'; diff --git a/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx b/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx index 47e61f1a47e..52791c2f75b 100644 --- a/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx +++ b/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx @@ -1,4 +1,4 @@ -import { isProductionEnvironment } from '@clerk/shared'; +import { isProductionEnvironment } from '@clerk/shared/utils'; import type { RoutingStrategy } from '@clerk/types'; import React from 'react'; diff --git a/packages/nextjs/src/server/utils.ts b/packages/nextjs/src/server/utils.ts index 90c2a0cb4c8..175251133ac 100644 --- a/packages/nextjs/src/server/utils.ts +++ b/packages/nextjs/src/server/utils.ts @@ -1,9 +1,9 @@ import type { AuthenticateRequestOptions, ClerkRequest, RequestState } from '@clerk/backend/internal'; import { constants } from '@clerk/backend/internal'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { logger } from '@clerk/shared/logger'; import { isHttpOrHttps } from '@clerk/shared/proxy'; +import { handleValueOrFn } from '@clerk/shared/utils'; import AES from 'crypto-js/aes'; import encUtf8 from 'crypto-js/enc-utf8'; import hmacSHA1 from 'crypto-js/hmac-sha1'; diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 509e69550b0..bb3d5e14432 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -1,7 +1,7 @@ import { inBrowser } from '@clerk/shared/browser'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { loadClerkJsScript } from '@clerk/shared/loadClerkJsScript'; import type { TelemetryCollector } from '@clerk/shared/telemetry'; +import { handleValueOrFn } from '@clerk/shared/utils'; import type { __experimental_UserVerificationModalProps, __experimental_UserVerificationProps, diff --git a/packages/remix/src/ssr/loadOptions.ts b/packages/remix/src/ssr/loadOptions.ts index ea582305ebd..d65fbea3562 100644 --- a/packages/remix/src/ssr/loadOptions.ts +++ b/packages/remix/src/ssr/loadOptions.ts @@ -1,9 +1,9 @@ import { createClerkRequest } from '@clerk/backend/internal'; import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy'; import { isTruthy } from '@clerk/shared/underscore'; +import { handleValueOrFn } from '@clerk/shared/utils'; import { noSecretKeyError, satelliteAndMissingProxyUrlAndDomain, satelliteAndMissingSignInUrl } from '../utils/errors'; import { getEnvVariable } from '../utils/utils'; diff --git a/packages/sdk-node/src/authenticateRequest.ts b/packages/sdk-node/src/authenticateRequest.ts index 5bc1e63040a..30e3983bf2a 100644 --- a/packages/sdk-node/src/authenticateRequest.ts +++ b/packages/sdk-node/src/authenticateRequest.ts @@ -1,8 +1,8 @@ import type { RequestState } from '@clerk/backend/internal'; import { AuthStatus, createClerkRequest } from '@clerk/backend/internal'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { isHttpOrHttps, isProxyUrlRelative, isValidProxyUrl } from '@clerk/shared/proxy'; +import { handleValueOrFn } from '@clerk/shared/utils'; import type { Response } from 'express'; import type { IncomingMessage } from 'http'; diff --git a/packages/shared/package.json b/packages/shared/package.json index cb78886d3e8..300af2cc83b 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -50,6 +50,16 @@ "default": "./dist/utils/index.js" } }, + "./workerTimers": { + "import": { + "types": "./dist/workerTimers/index.d.mts", + "default": "./dist/workerTimers/index.mjs" + }, + "require": { + "types": "./dist/workerTimers/index.d.ts", + "default": "./dist/workerTimers/index.js" + } + }, "./package.json": "./package.json" }, "main": "./dist/index.js", @@ -88,7 +98,8 @@ "webauthn", "router", "pathToRegexp", - "utils" + "utils", + "workerTimers" ], "scripts": { "build": "tsup", diff --git a/packages/shared/src/__tests__/fastDeepMerge.test.ts b/packages/shared/src/__tests__/fastDeepMerge.test.ts index 8c5c91e27df..178cf401f40 100644 --- a/packages/shared/src/__tests__/fastDeepMerge.test.ts +++ b/packages/shared/src/__tests__/fastDeepMerge.test.ts @@ -1,4 +1,4 @@ -import { fastDeepMergeAndKeep, fastDeepMergeAndReplace } from '../fastDeepMerge'; +import { fastDeepMergeAndKeep, fastDeepMergeAndReplace } from '../utils/fastDeepMerge'; describe('fastDeepMergeReplace', () => { it('merges simple objects', () => { diff --git a/packages/shared/src/__tests__/handleValueOrFn.test.ts b/packages/shared/src/__tests__/handleValueOrFn.test.ts index e48a321c147..669cb0619d4 100644 --- a/packages/shared/src/__tests__/handleValueOrFn.test.ts +++ b/packages/shared/src/__tests__/handleValueOrFn.test.ts @@ -1,4 +1,4 @@ -import { handleValueOrFn } from '../handleValueOrFn'; +import { handleValueOrFn } from '../utils/handleValueOrFn'; const url = new URL('https://example.com'); diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index d2a01c08c66..d0bab715399 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -20,7 +20,7 @@ export * from './deprecated'; export { deriveState } from './deriveState'; export * from './error'; export * from './file'; -export { handleValueOrFn } from './handleValueOrFn'; +export { handleValueOrFn } from './utils/handleValueOrFn'; export { isomorphicAtob } from './isomorphicAtob'; export { isomorphicBtoa } from './isomorphicBtoa'; export * from './keys'; @@ -36,4 +36,4 @@ export * from './object'; export * from './logger'; export { createWorkerTimers } from './workerTimers'; export { DEV_BROWSER_JWT_KEY, extractDevBrowserJWTFromURL, setDevBrowserJWTInURL } from './devBrowser'; -export * from './fastDeepMerge'; +export { fastDeepMergeAndKeep, fastDeepMergeAndReplace } from './utils/fastDeepMerge'; diff --git a/packages/shared/src/fastDeepMerge.ts b/packages/shared/src/utils/fastDeepMerge.ts similarity index 100% rename from packages/shared/src/fastDeepMerge.ts rename to packages/shared/src/utils/fastDeepMerge.ts diff --git a/packages/shared/src/handleValueOrFn.ts b/packages/shared/src/utils/handleValueOrFn.ts similarity index 100% rename from packages/shared/src/handleValueOrFn.ts rename to packages/shared/src/utils/handleValueOrFn.ts diff --git a/packages/shared/src/utils/index.ts b/packages/shared/src/utils/index.ts index 6e35eadacd3..2bca1129d18 100644 --- a/packages/shared/src/utils/index.ts +++ b/packages/shared/src/utils/index.ts @@ -4,3 +4,5 @@ export { logErrorInDevMode } from './logErrorInDevMode'; export { noop } from './noop'; export * from './runWithExponentialBackOff'; export * from './runtimeEnvironment'; +export { handleValueOrFn } from './handleValueOrFn'; +export { fastDeepMergeAndReplace, fastDeepMergeAndKeep } from './fastDeepMerge'; diff --git a/packages/shared/subpaths.mjs b/packages/shared/subpaths.mjs index d364684f658..06a96b6fde0 100644 --- a/packages/shared/subpaths.mjs +++ b/packages/shared/subpaths.mjs @@ -7,7 +7,7 @@ import packageJson from './package.json' with { type: 'json' }; * When you add an entry to the package.json "files" field, a subfolder will be automatically created with a package.json pointing to that file */ -export const subpathFoldersBarrel = ['react', 'utils']; +export const subpathFoldersBarrel = ['react', 'utils', 'workerTimers']; export const subpathNames = packageJson.files.filter(k => !['dist', 'scripts', ...subpathFoldersBarrel].includes(k)); diff --git a/packages/shared/tsup.config.ts b/packages/shared/tsup.config.ts index 28df0cb88a4..5387fbc8749 100644 --- a/packages/shared/tsup.config.ts +++ b/packages/shared/tsup.config.ts @@ -10,7 +10,13 @@ export default defineConfig(overrideOptions => { const isWatch = !!overrideOptions.watch; return { - entry: ['./src/*.{ts,tsx}', './src/react/index.ts', './src/utils/index.ts', '!./src/**/*.test.{ts,tsx}'], + entry: [ + './src/*.{ts,tsx}', + './src/react/index.ts', + './src/utils/index.ts', + './src/workerTimers/index.ts', + '!./src/**/*.test.{ts,tsx}', + ], format: ['cjs', 'esm'], bundle: true, clean: true, diff --git a/packages/tanstack-start/src/server/loadOptions.ts b/packages/tanstack-start/src/server/loadOptions.ts index 4deeadfe876..b20f392930c 100644 --- a/packages/tanstack-start/src/server/loadOptions.ts +++ b/packages/tanstack-start/src/server/loadOptions.ts @@ -1,8 +1,8 @@ import { createClerkRequest } from '@clerk/backend/internal'; import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey'; -import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy'; +import { handleValueOrFn } from '@clerk/shared/utils'; import { errorThrower } from '../utils'; import { getEnvVariable, getPublicEnvVariables } from '../utils/env'; diff --git a/packages/tanstack-start/src/utils/index.ts b/packages/tanstack-start/src/utils/index.ts index 550ec0f13ab..b872bce0300 100644 --- a/packages/tanstack-start/src/utils/index.ts +++ b/packages/tanstack-start/src/utils/index.ts @@ -1,4 +1,4 @@ -import { buildErrorThrower } from '@clerk/shared'; +import { buildErrorThrower } from '@clerk/shared/error'; export const isClient = () => typeof window !== 'undefined'; diff --git a/packages/testing/src/common/setup.ts b/packages/testing/src/common/setup.ts index 2f4721992e2..d6486ccaa4b 100644 --- a/packages/testing/src/common/setup.ts +++ b/packages/testing/src/common/setup.ts @@ -1,5 +1,5 @@ import { createClerkClient } from '@clerk/backend'; -import { isProductionFromSecretKey, parsePublishableKey } from '@clerk/shared'; +import { isProductionFromSecretKey, parsePublishableKey } from '@clerk/shared/keys'; import dotenv from 'dotenv'; import type { ClerkSetupOptions, ClerkSetupReturn } from './types'; diff --git a/packages/ui/src/hooks/use-localizations.ts b/packages/ui/src/hooks/use-localizations.ts index f69e7162521..db56a2dcf41 100644 --- a/packages/ui/src/hooks/use-localizations.ts +++ b/packages/ui/src/hooks/use-localizations.ts @@ -1,5 +1,5 @@ import { enUS } from '@clerk/localizations'; -import { fastDeepMergeAndReplace } from '@clerk/shared'; +import { fastDeepMergeAndReplace } from '@clerk/shared/utils'; import type { DeepPartial, DeepRequired, LocalizationResource } from '@clerk/types'; import { dequal as deepEqual } from 'dequal'; From c1727418ea9ebcae56ff03f19ccf7d021b2fb813 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 20:25:00 +0200 Subject: [PATCH 6/9] chore(repo): Bump node to 22 --- .github/actions/init/action.yml | 2 +- .github/workflows/ci.yml | 3 +-- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/actions/init/action.yml b/.github/actions/init/action.yml index a3485991e09..ce9add0638a 100644 --- a/.github/actions/init/action.yml +++ b/.github/actions/init/action.yml @@ -4,7 +4,7 @@ inputs: node-version: description: 'The node version to use' required: false - default: '18' + default: '22' playwright-enabled: description: 'Enable Playwright?' required: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33a1743bcfe..cf33fe0c79e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,6 @@ jobs: turbo-summarize: ${{ env.TURBO_SUMMARIZE }} turbo-team: ${{ vars.TURBO_TEAM }} turbo-token: ${{ secrets.TURBO_TOKEN }} - node-version: 20 - name: Require Changeset if: ${{ !(github.event_name == 'merge_group') }} @@ -91,7 +90,7 @@ jobs: strategy: matrix: - node-version: [18, 20] + node-version: [18,22] steps: - name: Checkout Repo diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4809ff95c0..bd9bdaa94b9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -126,7 +126,7 @@ jobs: strategy: matrix: - version: [20] # NOTE: 18 is cached in the main release workflow + version: [22] # NOTE: 18 is cached in the main release workflow steps: - name: Checkout Repo From b6bd16d3bb1971de52b6a2c128630823315d340f Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 20:37:42 +0200 Subject: [PATCH 7/9] chore(repo): Fix shared imports --- packages/shared/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/shared/package.json b/packages/shared/package.json index 300af2cc83b..8d60a73f4c1 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -99,7 +99,8 @@ "router", "pathToRegexp", "utils", - "workerTimers" + "workerTimers", + "devBrowser" ], "scripts": { "build": "tsup", From bbef2bc98301b2c1f6b6118ba9ce7fa03d3ab299 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 20:48:55 +0200 Subject: [PATCH 8/9] Create metal-mails-explode.md --- .changeset/metal-mails-explode.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/metal-mails-explode.md diff --git a/.changeset/metal-mails-explode.md b/.changeset/metal-mails-explode.md new file mode 100644 index 00000000000..09deeea0175 --- /dev/null +++ b/.changeset/metal-mails-explode.md @@ -0,0 +1,8 @@ +--- +"@clerk/astro": patch +"@clerk/chrome-extension": patch +"@clerk/clerk-js": patch +"@clerk/shared": patch +--- + +Refactor imports from @clerk/shared to improve treeshaking support From 638966e0905ea59ca4eddd457f705d0c869c80ef Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 2 Nov 2024 21:11:21 +0200 Subject: [PATCH 9/9] Update packages/shared/src/index.ts Co-authored-by: Jacek Radko --- packages/shared/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index d0bab715399..a546102cd32 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,4 +1,4 @@ -1; /** The following files are not exported on purpose: +/** The following files are not exported on purpose: * - cookie.ts * - globs.ts *