diff --git a/.changeset/purple-jobs-refuse.md b/.changeset/purple-jobs-refuse.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/purple-jobs-refuse.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 8fe4f4f08c2..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,20 +0,0 @@ -**/coverage/** -**/node_modules/** -packages/*/dist/** -packages/eslint-config-custom/** -**/dist/* -**/build/* -**/.turbo/* -playground -packages/*/examples -.idea -.vscode -.turbo -.next -.cache -.yalc -package-lock.json -**/integration/templates/**/* -commitlint.config.ts -vitest.workspace.mjs -typedoc.config.mjs diff --git a/.github/.eslintrc.js b/.github/.eslintrc.js deleted file mode 100644 index 84e4e1f1945..00000000000 --- a/.github/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: [require.resolve('../packages/eslint-config-custom/github-actions')] -}; diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 368ab0616ad..fd84292a853 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,9 +72,9 @@ jobs: if: ${{ !(github.event_name == 'merge_group') }} run: if [[ "${{ github.event.pull_request.user.login }}" = "clerk-cookie" || "${{ github.event.pull_request.user.login }}" = "renovate[bot]" ]]; then echo 'Skipping' && exit 0; else pnpm changeset status --since=origin/main; fi - - name: Lint GitHub Actions Workflows - run: pnpm eslint .github - shell: bash + # - name: Lint GitHub Actions Workflows + # run: pnpm eslint .github + # shell: bash - name: Check Formatting run: pnpm format:check diff --git a/.jit/config.yml b/.jit/config.yml index 7c86de85ee2..0381e46946f 100644 --- a/.jit/config.yml +++ b/.jit/config.yml @@ -6,7 +6,6 @@ folders: exclude: - ./**/*.test.ts - ./**/test/fixtureHelpers.ts - - path: /packages/eslint-config-custom - path: /packages/expo - path: /packages/fastify exclude: diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000000..d540d6ce23c --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,354 @@ +import eslint from '@eslint/js'; +import configPrettier from 'eslint-config-prettier'; +import configTurbo from 'eslint-config-turbo/flat'; +import pluginImport from 'eslint-plugin-import'; +import pluginJest from 'eslint-plugin-jest'; +import pluginJsxA11y from 'eslint-plugin-jsx-a11y'; +import pluginPlaywright from 'eslint-plugin-playwright'; +import pluginReact from 'eslint-plugin-react'; +import pluginReactHooks from 'eslint-plugin-react-hooks'; +import pluginSimpleImportSort from 'eslint-plugin-simple-import-sort'; +import pluginTurbo from 'eslint-plugin-turbo'; +import pluginUnusedImports from 'eslint-plugin-unused-imports'; +import pluginYml from 'eslint-plugin-yml'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +const ECMA_VERSION = 2021, + JAVASCRIPT_FILES = ['**/*.cjs', '**/*.js', '**/*.jsx', '**/*.mjs'], + TEST_FILES = ['**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx', '**/test/**', '**/__tests__/**'], + TYPESCRIPT_FILES = ['**/*.cts', '**/*.mts', '**/*.ts', '**/*.tsx']; + +export default tseslint.config([ + { + name: 'repo/ignores', + ignores: [ + '.cache', + '.idea', + '.next', + '.turbo', + '.vscode', + '.yalc', + '!.*.js', + '**/.turbo/*', + '**/build/*', + '**/coverage/*', + '**/dist/*', + '**/integration/templates/**/*', + '**/node_modules/**', + '*.snap', + 'commitlint.config.ts', + 'packages/*/dist/**', + 'packages/*/examples', + 'playground/*', + 'pnpm-lock.json', + 'typedoc.config.mjs', + 'vitest.workspace.mjs', + // package specific ignores + 'packages/astro/src/astro-components/**/*.ts', + 'packages/backend/src/runtime/**/*', + 'packages/shared/src/compiled/path-to-regexp/index.js', + ], + }, + { + name: 'repo/react-settings', + settings: { + react: { + version: 'detect', + }, + }, + }, + { + name: 'repo/language-options', + languageOptions: { + ecmaVersion: ECMA_VERSION, + globals: { + ...globals.browser, + ...globals.node, + }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + sourceType: 'module', + }, + }, + { + name: 'repo/linter-options', + linterOptions: { + reportUnusedDisableDirectives: 'error', + }, + }, + eslint.configs.recommended, + tseslint.configs.recommendedTypeChecked, + ...configTurbo, + pluginImport.flatConfigs.recommended, + pluginJsxA11y.flatConfigs.recommended, + pluginReact.configs.flat.recommended, + { + name: 'repo/global', + plugins: { + 'simple-import-sort': pluginSimpleImportSort, + 'unused-imports': pluginUnusedImports, + turbo: pluginTurbo, + }, + settings: { + 'import/ignore': ['node_modules/react-native/index\\.js$'], + }, + rules: { + curly: ['error', 'all'], + 'no-label-var': 'error', + 'no-undef-init': 'warn', + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + message: "Please always import from '@clerk/shared/' instead of '@clerk/shared'.", + name: '@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.', + }, + ], + }, + ], + + 'jsx-a11y/no-onchange': 'off', + + 'react/button-has-type': 'warn', + 'react/function-component-definition': 'off', + 'react/hook-use-state': 'warn', + 'react/jsx-boolean-value': 'warn', + 'react/jsx-curly-brace-presence': 'warn', + 'react/jsx-fragments': 'warn', + 'react/jsx-no-leaked-render': 'warn', + 'react/jsx-no-target-blank': [ + 'error', + { + allowReferrer: true, + }, + ], + 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }], + 'react/jsx-pascal-case': 'warn', + 'react/jsx-sort-props': 'warn', + 'react/no-array-index-key': 'warn', + 'react/no-unstable-nested-components': 'warn', + 'react/no-unknown-property': ['error', { ignore: ['css'] }], // Emotion + 'react/self-closing-comp': 'warn', + 'react/prop-types': 'off', + 'react/react-in-jsx-scope': 'off', + + 'simple-import-sort/imports': 'error', + + 'sort-imports': 'off', + + ...pluginTurbo.configs['flat/recommended'].rules, + + 'unused-imports/no-unused-imports': 'error', + + // TYPESCRIPT RULE DISABLES + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + }, + }, + { + name: 'repo/global-temporary', + rules: { + // TODO: All rules below should be set to their defaults + // when we're able to make the appropriate changes. + '@typescript-eslint/await-thenable': 'warn', + '@typescript-eslint/ban-ts-comment': [ + `warn`, + { + 'ts-ignore': 'allow-with-description', + 'ts-expect-error': 'allow-with-description', + 'ts-check': 'allow-with-description', + }, + ], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + disallowTypeAnnotations: true, + fixStyle: 'separate-type-imports', + }, + ], + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/no-floating-promises': [ + 'warn', + { + ignoreVoid: true, + }, + ], + '@typescript-eslint/no-misused-promises': 'warn', + '@typescript-eslint/no-non-null-assertion': 'warn', + '@typescript-eslint/no-redundant-type-constituents': 'warn', + '@typescript-eslint/no-unnecessary-type-assertion': 'warn', + '@typescript-eslint/no-unsafe-enum-comparison': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'after-used', + argsIgnorePattern: '^_', + ignoreRestSiblings: true, + vars: 'all', + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/prefer-promise-reject-errors': 'warn', + '@typescript-eslint/require-await': 'warn', + + // FIXME: This rule should be enabled when we're able to support import aliases + 'import/no-unresolved': ['error', { ignore: ['^#', '^~'] }], + + 'jsx-a11y/alt-text': 'warn', + 'jsx-a11y/html-has-lang': 'warn', + 'jsx-a11y/no-autofocus': 'warn', + + 'react/button-has-type': 'warn', + 'react/display-name': 'off', + 'react/jsx-curly-brace-presence': 'off', + 'react/jsx-no-leaked-render': 'off', + 'react/jsx-no-useless-fragment': 'warn', + 'react/jsx-sort-props': 'off', + }, + }, + { + name: 'repo/javascript', + files: JAVASCRIPT_FILES, + rules: { + 'no-unused-vars': [ + 'error', + { + args: 'after-used', + argsIgnorePattern: '^_', + ignoreRestSiblings: true, + vars: 'all', + varsIgnorePattern: '^_', + }, + ], + }, + }, + { + name: 'repo/typescript', + files: TYPESCRIPT_FILES, + extends: [pluginImport.flatConfigs.recommended, pluginImport.flatConfigs.typescript], + rules: { + 'no-unused-vars': 'off', + }, + }, + { + name: 'repo/test', + files: TEST_FILES, + languageOptions: { + globals: pluginJest.environments.globals.globals, + }, + plugins: { + jest: pluginJest, + }, + rules: { + '@typescript-eslint/unbound-method': 'off', + 'jest/unbound-method': 'error', + }, + }, + { + name: 'repo/react-hooks', + plugins: { + 'react-hooks': pluginReactHooks, + }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + 'react-hooks/rules-of-hooks': 'warn', + }, + }, + { + name: 'packages/expo-passkeys', + files: ['packages/expo-passkeys/src/**/*'], + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: ['node:*'], + }, + ], + }, + }, + { + name: 'packages/nextjs', + files: ['packages/nextjs/src/**/*'], + rules: { + 'turbo/no-undeclared-env-vars': [ + 'error', + { + allowList: ['_NEXT_ROUTER_BASEPATH'], + }, + ], + }, + }, + { + name: 'packages/ui', + files: ['packages/ui/src/**/*'], + rules: { + 'import/no-unresolved': ['error', { ignore: ['^#', '^~', '@clerk/elements/*'] }], + }, + }, + { + name: 'packages/upgrade', + files: ['packages/upgrade/src/**/*'], + rules: { + 'import/no-unresolved': ['error', { ignore: ['^#', '^~', '@inkjs/ui', '^ink'] }], + 'react/no-unescaped-entities': 'off', + '@typescript-eslint/no-floating-promises': 'warn', + }, + }, + { + name: 'repo/integration', + ...pluginPlaywright.configs['flat/recommended'], + files: ['integration/tests/**'], + rules: { + ...pluginPlaywright.configs['flat/recommended'].rules, + 'playwright/expect-expect': 'off', + 'playwright/no-skipped-test': 'off', + 'playwright/no-page-pause': 'warn', + }, + }, + { + name: 'repo/scripts', + files: ['scripts/**/*'], + rules: { + 'turbo/no-undeclared-env-vars': 'off', + }, + }, + ...pluginYml.configs['flat/recommended'], + { + name: 'repo/.github', + // rules: { + // 'regex/invalid': [ + // 'error', + // [ + // { + // regex: '^(?!.*\\$TURBO_ARGS( |$)).*turbo \\S+', + // message: 'Invalid turbo CI command. Must contain `$TURBO_ARGS`', + // }, + // ], + // ], + // }, + }, + + configPrettier, +]); diff --git a/integration/.eslintrc.js b/integration/.eslintrc.js deleted file mode 100644 index ffe05347358..00000000000 --- a/integration/.eslintrc.js +++ /dev/null @@ -1,30 +0,0 @@ -// TODO: All rules below should be set to their defaults -// when we're able to make the appropriate changes. -const disabledRules = { - 'playwright/expect-expect': 'off', - 'playwright/no-skipped-test': 'off', - 'playwright/no-page-pause': 'warn', -}; - -module.exports = { - root: true, - ignorePatterns: ['!.*.js', '*.snap', 'templates/**'], - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/playwright'], - rules: { - ...disabledRules, - }, - overrides: [ - { - files: ['./models/deployment.ts', './testUtils/emailService.ts'], - rules: { - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', // TODO: Remove when we able to update tests - }, - }, - { - files: ['./testUtils/testAgainstRunningApps.ts', './presets/longRunningApps.ts'], - rules: { - '@typescript-eslint/no-redundant-type-constituents': 'warn', // TODO: Remove when we able to update tests - }, - }, - ], -}; diff --git a/integration/cleanup/cleanup.setup.ts b/integration/cleanup/cleanup.setup.ts index 71af24fd032..c8ff98755e3 100644 --- a/integration/cleanup/cleanup.setup.ts +++ b/integration/cleanup/cleanup.setup.ts @@ -16,8 +16,8 @@ setup('cleanup instances ', async () => { .filter(Boolean); for (const entry of entries) { - console.log(`Cleanup for ${entry!.secretKey.replace(/(sk_test_)(.+)(...)/, '$1***$3')}`); - const clerkClient = createClerkClient({ secretKey: entry!.secretKey }); + console.log(`Cleanup for ${entry.secretKey.replace(/(sk_test_)(.+)(...)/, '$1***$3')}`); + const clerkClient = createClerkClient({ secretKey: entry.secretKey }); const { data: users } = await clerkClient.users.getUserList({ orderBy: '-created_at', query: 'clerkcookie', diff --git a/integration/models/applicationConfig.ts b/integration/models/applicationConfig.ts index 54e20b6c12b..c3366a14187 100644 --- a/integration/models/applicationConfig.ts +++ b/integration/models/applicationConfig.ts @@ -2,10 +2,10 @@ import * as path from 'node:path'; import { constants } from '../constants'; import { createLogger, fs } from '../scripts'; -import { application } from './application.js'; +import { application } from './application'; import type { EnvironmentConfig } from './environment'; -import type { Helpers } from './helpers.js'; -import { hash, helpers } from './helpers.js'; +import type { Helpers } from './helpers'; +import { hash, helpers } from './helpers'; export type ApplicationConfig = ReturnType; type Scripts = { dev: string; build: string; setup: string; serve: string }; diff --git a/integration/models/deployment.ts b/integration/models/deployment.ts index 524dbb01628..c47c7c85c47 100644 --- a/integration/models/deployment.ts +++ b/integration/models/deployment.ts @@ -52,7 +52,7 @@ export const vercelDeployment = async (config: ApplicationConfig) => { ); // get the deployment url from vercel - const serverUrl = await createVercelApiClient().getDeploymentUrlForProject(process.env.VERCEL_PROJECT_ID as string); + const serverUrl = await createVercelApiClient().getDeploymentUrlForProject(process.env.VERCEL_PROJECT_ID); logger.info(`Deployment URL: ${serverUrl}`); return { ...app, serverUrl }; }; diff --git a/integration/presets/elements.ts b/integration/presets/elements.ts index 91bd21fbb01..fb95a2ce5dc 100644 --- a/integration/presets/elements.ts +++ b/integration/presets/elements.ts @@ -1,6 +1,6 @@ import { constants } from '../constants'; -import { applicationConfig } from '../models/applicationConfig.js'; -import { templates } from '../templates/index.js'; +import { applicationConfig } from '../models/applicationConfig'; +import { templates } from '../templates'; import { linkPackage } from './utils'; const nextAppRouter = applicationConfig() diff --git a/integration/presets/envs.ts b/integration/presets/envs.ts index 5d60c29d114..459a73a22c3 100644 --- a/integration/presets/envs.ts +++ b/integration/presets/envs.ts @@ -3,7 +3,7 @@ import { resolve } from 'node:path'; import fs from 'fs-extra'; import { constants } from '../constants'; -import { environmentConfig } from '../models/environment.js'; +import { environmentConfig } from '../models/environment'; const getInstanceKeys = () => { let keys: Record; diff --git a/integration/presets/next.ts b/integration/presets/next.ts index 6636af850c9..a44dc9c6e1e 100644 --- a/integration/presets/next.ts +++ b/integration/presets/next.ts @@ -1,6 +1,6 @@ import { constants } from '../constants'; -import { applicationConfig } from '../models/applicationConfig.js'; -import { templates } from '../templates/index.js'; +import { applicationConfig } from '../models/applicationConfig'; +import { templates } from '../templates'; import { linkPackage } from './utils'; const appRouter = applicationConfig() diff --git a/integration/presets/react-router.ts b/integration/presets/react-router.ts index 4b43c7083bb..6dc759ddae7 100644 --- a/integration/presets/react-router.ts +++ b/integration/presets/react-router.ts @@ -1,6 +1,6 @@ import { constants } from '../constants'; -import { applicationConfig } from '../models/applicationConfig.js'; -import { templates } from '../templates/index.js'; +import { applicationConfig } from '../models/applicationConfig'; +import { templates } from '../templates'; import { linkPackage } from './utils'; const reactRouterNode = applicationConfig() diff --git a/integration/presets/tanstack.ts b/integration/presets/tanstack.ts index 03ddd8d1900..ed5898c0930 100644 --- a/integration/presets/tanstack.ts +++ b/integration/presets/tanstack.ts @@ -1,5 +1,5 @@ -import { applicationConfig } from '../models/applicationConfig.js'; -import { templates } from '../templates/index.js'; +import { applicationConfig } from '../models/applicationConfig'; +import { templates } from '../templates'; import { linkPackage } from './utils'; const router = applicationConfig() diff --git a/integration/presets/utils.ts b/integration/presets/utils.ts index 4c4f6db45d3..2d5d7a87414 100644 --- a/integration/presets/utils.ts +++ b/integration/presets/utils.ts @@ -1,7 +1,7 @@ import path from 'node:path'; export function linkPackage(pkg: string) { - // eslint-disable-next-line turbo/no-undeclared-variables + // eslint-disable-next-line turbo/no-undeclared-env-vars if (process.env.CI === 'true') return '*'; return `link:${path.resolve(process.cwd(), `packages/${pkg}`)}`; diff --git a/integration/scripts/clerkJsServer.ts b/integration/scripts/clerkJsServer.ts index 69d9b1e3a12..5e837f9a9cd 100644 --- a/integration/scripts/clerkJsServer.ts +++ b/integration/scripts/clerkJsServer.ts @@ -5,7 +5,7 @@ import path from 'node:path'; import { constants } from '../constants'; import { stateFile } from '../models/stateFile'; -import { awaitableTreekill, fs, waitForServer } from './index'; +import { awaitableTreekill, fs, waitForServer } from '.'; import { run } from './run'; export const startClerkJsHttpServer = async () => { diff --git a/integration/scripts/run.ts b/integration/scripts/run.ts index e9b99b5bfd6..175f6f184cb 100644 --- a/integration/scripts/run.ts +++ b/integration/scripts/run.ts @@ -14,8 +14,8 @@ export const run = (cmd: string, options?: Options & { log?: typeof console.log // by streaming the output to the file and reading the file from the parent process const proc = execa(file, args, { ...opts, stdin: opts.detached ? 'ignore' : undefined }); if (log) { - proc.stdout.on('data', chunkLogger(log)); - proc.stderr.on('data', chunkLogger(log)); + proc.stdout?.on('data', chunkLogger(log)); + proc.stderr?.on('data', chunkLogger(log)); } return proc; }; diff --git a/integration/scripts/waitForServer.ts b/integration/scripts/waitForServer.ts index 910b265eacc..6a5200ee7e9 100644 --- a/integration/scripts/waitForServer.ts +++ b/integration/scripts/waitForServer.ts @@ -20,7 +20,7 @@ export const waitForServer = async (url: string, opts: WaitForServerArgsType) => if (res.ok) { return Promise.resolve(); } - } catch (e) { + } catch { // ignore } attempts++; diff --git a/integration/templates/elements-next/.eslintrc.js b/integration/templates/elements-next/.eslintrc.js deleted file mode 100644 index e3513524911..00000000000 --- a/integration/templates/elements-next/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - root: true, -}; diff --git a/integration/templates/next-app-router-quickstart/.eslintrc.js b/integration/templates/next-app-router-quickstart/.eslintrc.js deleted file mode 100644 index e3513524911..00000000000 --- a/integration/templates/next-app-router-quickstart/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - root: true, -}; diff --git a/integration/templates/next-app-router/.eslintrc.js b/integration/templates/next-app-router/.eslintrc.js deleted file mode 100644 index e3513524911..00000000000 --- a/integration/templates/next-app-router/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - root: true, -}; diff --git a/integration/testUtils/appPageObject.ts b/integration/testUtils/appPageObject.ts index 306c293a396..627e2310292 100644 --- a/integration/testUtils/appPageObject.ts +++ b/integration/testUtils/appPageObject.ts @@ -9,7 +9,7 @@ export const createAppPageObject = (testArgs: { page: Page }, app: Application) goToAppHome: async () => { try { await page.goto(app.serverUrl); - } catch (e) { + } catch { // do not fail the test if interstitial is returned (401) } }, @@ -24,7 +24,7 @@ export const createAppPageObject = (testArgs: { page: Page }, app: Application) } else { url = new URL(path, page.url()); } - } catch (e) { + } catch { // However, in most tests we don't need to manually navigate to the domain // as the test is using a localhost app directly // This handles the case where the page is at about:blank diff --git a/integration/testUtils/emailService.ts b/integration/testUtils/emailService.ts index d10ffc26919..0de10de747b 100644 --- a/integration/testUtils/emailService.ts +++ b/integration/testUtils/emailService.ts @@ -1,4 +1,4 @@ -import { runWithExponentialBackOff } from '@clerk/shared'; +import { runWithExponentialBackOff } from '@clerk/shared/utils'; type Message = { _id: string; @@ -12,7 +12,8 @@ export const createEmailService = () => { const fetcher = async (url: string | URL, init?: RequestInit) => { const headers = new Headers(init?.headers || {}); - headers.set('Mailsac-Key', process.env.MAILSAC_API_KEY as string); + // eslint-disable-next-line turbo/no-undeclared-env-vars + headers.set('Mailsac-Key', process.env.MAILSAC_API_KEY); return fetch(url, { ...init, headers }); }; diff --git a/integration/tests/sign-in-or-up-email-links-flow.test.ts b/integration/tests/sign-in-or-up-email-links-flow.test.ts index 575b0e5da94..f5c828cafec 100644 --- a/integration/tests/sign-in-or-up-email-links-flow.test.ts +++ b/integration/tests/sign-in-or-up-email-links-flow.test.ts @@ -24,8 +24,8 @@ testAgainstRunningApps({ withEnv: [] })('sign-in-or-up email links flow', ({ app await u.po.signIn.continue(); await u.page.waitForAppUrl('/sign-in/create'); - const prefilledEmail = await u.po.signUp.getEmailAddressInput().inputValue(); - expect(prefilledEmail).toBe(fakeUser.email); + const prefilledEmail = u.po.signUp.getEmailAddressInput(); + await expect(prefilledEmail).toHaveValue(fakeUser.email); await u.po.signUp.setPassword(fakeUser.password); await u.po.signUp.continue(); diff --git a/integration/tests/sign-in-or-up-flow.test.ts b/integration/tests/sign-in-or-up-flow.test.ts index 952c240a362..5c67a10db33 100644 --- a/integration/tests/sign-in-or-up-flow.test.ts +++ b/integration/tests/sign-in-or-up-flow.test.ts @@ -177,8 +177,8 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSignInOrUpFlow] })('sign- await u.po.signIn.continue(); await u.page.waitForAppUrl('/sign-in/create'); - const prefilledEmail = await u.po.signUp.getEmailAddressInput().inputValue(); - expect(prefilledEmail).toBe(fakeUser.email); + const prefilledEmail = u.po.signUp.getEmailAddressInput(); + await expect(prefilledEmail).toHaveValue(fakeUser.email); await u.po.signUp.setPassword(fakeUser.password); await u.po.signUp.continue(); @@ -207,8 +207,8 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSignInOrUpFlow] })('sign- await u.po.signIn.continue(); await u.page.waitForAppUrl('/sign-in/create'); - const prefilledUsername = await u.po.signUp.getUsernameInput().inputValue(); - expect(prefilledUsername).toBe(fakeUser.username); + const prefilledUsername = u.po.signUp.getUsernameInput(); + await expect(prefilledUsername).toHaveValue(fakeUser.username); await u.po.signUp.setEmailAddress(fakeUser.email); await u.po.signUp.setPassword(fakeUser.password); @@ -237,8 +237,8 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSignInOrUpFlow] })('sign- await u.po.signIn.continue(); await u.page.waitForAppUrl('/sign-in/create'); - const prefilledEmail = await u.po.signUp.getEmailAddressInput().inputValue(); - expect(prefilledEmail).toBe(fakeUser.email); + const prefilledEmail = u.po.signUp.getEmailAddressInput(); + await expect(prefilledEmail).toHaveValue(fakeUser.email); await u.po.signUp.setPassword(fakeUser.password); await u.po.signUp.continue(); diff --git a/integration/tsconfig.json b/integration/tsconfig.json index 441382fe67b..3db7f853e2e 100644 --- a/integration/tsconfig.json +++ b/integration/tsconfig.json @@ -1,11 +1,9 @@ { "compilerOptions": { - "target": "ESNext", - "module": "CommonJS", - "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, "esModuleInterop": true, - "allowSyntheticDefaultImports": true + "module": "NodeNext", + "target": "ESNext" }, - "include": ["./tests", "types.d.ts"], "exclude": ["templates"] } diff --git a/integration/tsconfig.lint.json b/integration/tsconfig.lint.json deleted file mode 100644 index 548824873ca..00000000000 --- a/integration/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["./*.ts", "deployments", "presets", "scripts", "tests", "testUtils"], - "exclude": ["templates"] -} diff --git a/package.json b/package.json index c98c72b94c9..a9a75e8694e 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,11 @@ "format": "prettier --write .", "format:check": "prettier --cache --check .", "preinstall": "npx only-allow pnpm", - "lint": "FORCE_COLOR=1 turbo lint", + "lint": "node ./scripts/lint.mjs", "lint:attw": "FORCE_COLOR=1 turbo lint:attw", "lint:fix": "FORCE_COLOR=1 turbo lint -- --fix", + "lint:inspect": "pnpx @eslint/config-inspector@latest", + "lint:packages": "FORCE_COLOR=1 turbo lint", "lint:publint": "FORCE_COLOR=1 turbo lint:publint", "nuke": "node ./scripts/nuke.mjs", "prepare": "husky install", @@ -55,9 +57,13 @@ "@arethetypeswrong/cli": "0.15.4", "@changesets/cli": "^2.26.2", "@changesets/get-github-info": "^0.5.2", + "@clerk/backend": "workspace:*", + "@clerk/shared": "workspace:*", "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@emotion/jest": "^11.11.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", "@faker-js/faker": "^8.1.0", "@hcaptcha/types": "^1.0.3", "@jest/globals": "29.7.0", @@ -73,16 +79,30 @@ "@types/react": "catalog:react", "@types/react-dom": "catalog:react", "@vitest/coverage-v8": "3.0.2", + "chalk": "4.1.2", "citty": "^0.1.4", "conventional-changelog-conventionalcommits": "^4.6.3", "cpy-cli": "^5.0.0", "cross-spawn": "^7.0.3", "dotenv": "^16.3.1", - "eslint": "^8.49.0", + "eslint": "9.18.0", + "eslint-config-prettier": "10.0.1", + "eslint-config-turbo": "2.3.3", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-jest": "28.11.0", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-playwright": "2.1.0", + "eslint-plugin-react": "7.37.4", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-simple-import-sort": "12.1.1", + "eslint-plugin-turbo": "2.3.3", + "eslint-plugin-unused-imports": "4.1.4", + "eslint-plugin-yml": "1.16.0", "execa": "^5.1.1", "expect-type": "^0.16.0", "fs-extra": "^11.1.1", "get-port": "^5.1.1", + "globals": "^15.13.0", "globby": "^13.2.2", "http-proxy": "^1.18.1", "http-server": "^14.1.1", @@ -90,6 +110,7 @@ "jest": "^29.7.0", "jest-chrome": "^0.8.0", "jest-environment-jsdom": "^29.3.1", + "jsonwebtoken": "9.0.2", "lint-staged": "^14.0.1", "prettier": "^3.3.3", "prettier-plugin-packagejson": "^2.5.3", @@ -106,6 +127,8 @@ "turbo-ignore": "^2.0.6", "typedoc": "0.27.6", "typescript": "catalog:repo", + "typescript-eslint": "8.21.0", + "uuid": "8.3.2", "verdaccio": "^5.26.3", "vitest": "3.0.2", "yalc": "1.0.0-pre.53", diff --git a/packages/astro/.eslintrc.cjs b/packages/astro/.eslintrc.cjs deleted file mode 100644 index 84bc665e0e0..00000000000 --- a/packages/astro/.eslintrc.cjs +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/react'], - rules: { - 'import/no-unresolved': ['error', { ignore: ['^#'] }], - }, - ignorePatterns: ['src/astro-components/**/*.ts'], - overrides: [ - { - files: ['./env.d.ts'], - rules: { - '@typescript-eslint/consistent-type-imports': 'off', - }, - }, - ], -}; diff --git a/packages/astro/env.d.ts b/packages/astro/env.d.ts index c3d2cba37e6..294c409d808 100644 --- a/packages/astro/env.d.ts +++ b/packages/astro/env.d.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/consistent-type-imports */ + declare namespace App { interface Locals { authToken: string | null; diff --git a/packages/astro/package.json b/packages/astro/package.json index 66ca9eaf4c7..88e5d854c96 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -75,7 +75,7 @@ "build:dts": "tsc --emitDeclarationOnly --declaration", "copy:components": "rm -rf ./components && mkdir -p ./components/ && cp -r ./src/astro-components/* ./components/ && cp ./src/types.ts ./", "dev": "tsup --watch --onSuccess \"pnpm build:dts\"", - "lint": "eslint src/", + "lint": "eslint src env.d.ts", "lint:attw": "attw --pack . --ignore-rules no-resolution cjs-resolves-to-esm internal-resolution-error", "lint:publint": "pnpm copy:components && publint", "publish:local": "pnpm yalc push --replace --sig" @@ -87,9 +87,7 @@ "nanoid": "5.0.9", "nanostores": "0.11.3" }, - "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*" - }, + "devDependencies": {}, "peerDependencies": { "astro": "^4.15.0 || ^5.0.0" }, diff --git a/packages/astro/src/react/hooks.ts b/packages/astro/src/react/hooks.ts index 39e49cfbe3e..303a6a2c1f6 100644 --- a/packages/astro/src/react/hooks.ts +++ b/packages/astro/src/react/hooks.ts @@ -9,7 +9,7 @@ import type { import type { Store, StoreValue } from 'nanostores'; import { useCallback, useSyncExternalStore } from 'react'; -// @ts-ignore +// @ts-expect-error - TS2307: Cannot find module '#async-local-storage'. import { authAsyncStorage } from '#async-local-storage'; import { $authStore } from '../stores/external'; diff --git a/packages/astro/src/react/utils.tsx b/packages/astro/src/react/utils.tsx index e91422e80e5..f52fdb769ce 100644 --- a/packages/astro/src/react/utils.tsx +++ b/packages/astro/src/react/utils.tsx @@ -52,7 +52,7 @@ export const assertSingleChild = (name: 'SignInButton' | 'SignUpButton' | 'SignOutButton' | 'SignInWithMetamaskButton') => { try { return React.Children.only(children); - } catch (e) { + } catch { return `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`; } }; diff --git a/packages/astro/src/server/clerk-middleware.ts b/packages/astro/src/server/clerk-middleware.ts index f56a0e7c6ba..98a3d033115 100644 --- a/packages/astro/src/server/clerk-middleware.ts +++ b/packages/astro/src/server/clerk-middleware.ts @@ -169,9 +169,15 @@ export const createAuthenticateRequestOptions = ( // TODO-SHARED: Duplicate from '@clerk/nextjs' export const decorateResponseWithObservabilityHeaders = (res: Response, requestState: RequestState): Response => { - requestState.message && res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message)); - requestState.reason && res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason)); - requestState.status && res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status)); + if (requestState.message) { + res.headers.set(constants.Headers.AuthMessage, encodeURIComponent(requestState.message)); + } + if (requestState.reason) { + res.headers.set(constants.Headers.AuthReason, encodeURIComponent(requestState.reason)); + } + if (requestState.status) { + res.headers.set(constants.Headers.AuthStatus, encodeURIComponent(requestState.status)); + } return res; }; diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js deleted file mode 100644 index e3c0b10289c..00000000000 --- a/packages/backend/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], - rules: { - 'import/no-unresolved': ['error', { ignore: ['^#'] }], - }, -}; diff --git a/packages/backend/package.json b/packages/backend/package.json index 0cfe22ab410..d974260b36f 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -83,7 +83,7 @@ "build:lib": "tsup --env.NODE_ENV production", "build:runtime": "cpy 'src/runtime/**/*.{mjs,js,cjs}' dist/runtime", "clean": "rimraf ./dist", - "lint": "eslint src/", + "lint": "eslint src", "lint:publint": "publint", "lint:attw": "attw --pack . --ignore-rules false-cjs", "test": "run-s test:node test:edge-runtime test:cloudflare-miniflare", @@ -103,7 +103,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@edge-runtime/vm": "5.0.0", "msw": "2.7.0", "npm-run-all": "^4.1.5", diff --git a/packages/backend/src/createRedirect.ts b/packages/backend/src/createRedirect.ts index b7cbfb79b81..cd35a64e75f 100644 --- a/packages/backend/src/createRedirect.ts +++ b/packages/backend/src/createRedirect.ts @@ -62,8 +62,8 @@ const buildAccountsBaseUrl = (frontendApi?: string) => { // convert url from FAPI to accounts for Kima and legacy (prod & dev) instances const accountsBaseUrl = frontendApi // staging accounts - .replace(/(clerk\.accountsstage\.)/, 'accountsstage.') - .replace(/(clerk\.accounts\.|clerk\.)/, 'accounts.'); + .replace(/clerk\.accountsstage\./, 'accountsstage.') + .replace(/clerk\.accounts\.|clerk\./, 'accounts.'); return `https://${accountsBaseUrl}`; }; diff --git a/packages/backend/src/tokens/__tests__/keys.test.ts b/packages/backend/src/tokens/__tests__/keys.test.ts index 79bb10b05fc..0645ba49d67 100644 --- a/packages/backend/src/tokens/__tests__/keys.test.ts +++ b/packages/backend/src/tokens/__tests__/keys.test.ts @@ -123,7 +123,7 @@ describe('tokens.loadClerkJWKFromRemote(options)', () => { kid: 'ins_whatever', skipJwksCache: true, }); - vi.advanceTimersByTimeAsync(10000); + void vi.advanceTimersByTimeAsync(10000); await promise; }).rejects.toThrowError('Error loading Clerk JWKS from https://api.clerk.com/v1/jwks with code=503'); }); diff --git a/packages/backend/src/tokens/__tests__/request.test.ts b/packages/backend/src/tokens/__tests__/request.test.ts index d4a4042caf0..59fa8afef48 100644 --- a/packages/backend/src/tokens/__tests__/request.test.ts +++ b/packages/backend/src/tokens/__tests__/request.test.ts @@ -34,7 +34,9 @@ interface CustomMatchers { } declare module 'vitest' { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Assertion extends CustomMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AsymmetricMatchersContaining extends CustomMatchers {} } diff --git a/packages/backend/src/tokens/authStatus.ts b/packages/backend/src/tokens/authStatus.ts index 6bb141fd2bd..0d73f3e2539 100644 --- a/packages/backend/src/tokens/authStatus.ts +++ b/packages/backend/src/tokens/authStatus.ts @@ -161,7 +161,7 @@ const withDebugHeaders = (requestState: T): T => { if (requestState.message) { try { headers.set(constants.Headers.AuthMessage, requestState.message); - } catch (e) { + } catch { // headers.set can throw if unicode strings are passed to it. In this case, simply do nothing } } @@ -169,7 +169,7 @@ const withDebugHeaders = (requestState: T): T => { if (requestState.reason) { try { headers.set(constants.Headers.AuthReason, requestState.reason); - } catch (e) { + } catch { /* empty */ } } @@ -177,7 +177,7 @@ const withDebugHeaders = (requestState: T): T => { if (requestState.status) { try { headers.set(constants.Headers.AuthStatus, requestState.status); - } catch (e) { + } catch { /* empty */ } } diff --git a/packages/backend/src/tokens/authenticateContext.ts b/packages/backend/src/tokens/authenticateContext.ts index 7ec25670b58..06e270cb7e3 100644 --- a/packages/backend/src/tokens/authenticateContext.ts +++ b/packages/backend/src/tokens/authenticateContext.ts @@ -8,7 +8,7 @@ import { getCookieSuffix, getSuffixedCookieName, parsePublishableKey } from '../ import type { ClerkRequest } from './clerkRequest'; import type { AuthenticateRequestOptions } from './types'; -interface AuthenticateContextInterface extends AuthenticateRequestOptions { +interface AuthenticateContext extends AuthenticateRequestOptions { // header-based values sessionTokenInHeader: string | undefined; origin: string | undefined; @@ -29,23 +29,24 @@ interface AuthenticateContextInterface extends AuthenticateRequestOptions { handshakeRedirectLoopCounter: number; // url derived from headers clerkUrl: URL; - // cookie or header session token - sessionToken: string | undefined; // enforce existence of the following props publishableKey: string; instanceType: string; frontendApi: string; } -interface AuthenticateContext extends AuthenticateContextInterface {} - /** * All data required to authenticate a request. * This is the data we use to decide whether a request * is in a signed in or signed out state or if we need * to perform a handshake. */ -class AuthenticateContext { +class AuthenticateContext implements AuthenticateContext { + /** + * Retrieves the session token from either the cookie or the header. + * + * @returns {string | undefined} The session token if available, otherwise undefined. + */ public get sessionToken(): string | undefined { return this.sessionTokenInCookie || this.sessionTokenInHeader; } diff --git a/packages/backend/src/tokens/keys.ts b/packages/backend/src/tokens/keys.ts index a9b7d97cad1..d611ad8e5b6 100644 --- a/packages/backend/src/tokens/keys.ts +++ b/packages/backend/src/tokens/keys.ts @@ -60,7 +60,7 @@ export function loadClerkJWKFromLocal(localKey?: string): JsonWebKey { } const modulus = localKey - .replace(/(\r\n|\n|\r)/gm, '') + .replace(/\r\n|\n|\r/g, '') .replace(PEM_HEADER, '') .replace(PEM_TRAILER, '') .replace(RSA_PREFIX, '') diff --git a/packages/backend/src/tokens/request.ts b/packages/backend/src/tokens/request.ts index 1ea17f1eb5c..71626a8d4b2 100644 --- a/packages/backend/src/tokens/request.ts +++ b/packages/backend/src/tokens/request.ts @@ -211,10 +211,10 @@ ${error.getFullMessage()}`, return signedIn(authenticateContext, retryResult, headers, sessionToken); } - throw retryError; + throw new Error(retryError?.message || 'Clerk: Handshake retry failed.'); } - throw error; + throw new Error(error?.message || 'Clerk: Handshake failed.'); } async function refreshToken( diff --git a/packages/backend/tsconfig.declarations.json b/packages/backend/tsconfig.declarations.json index 4a7735336e2..f2da003cd9f 100644 --- a/packages/backend/tsconfig.declarations.json +++ b/packages/backend/tsconfig.declarations.json @@ -1,12 +1,13 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "skipLibCheck": true, - "noEmit": false, "declaration": true, - "emitDeclarationOnly": true, + "declarationDir": "./dist", "declarationMap": true, - "sourceMap": false, - "declarationDir": "./dist" - } + "emitDeclarationOnly": true, + "noEmit": false, + "skipLibCheck": true, + "sourceMap": false + }, + "exclude": ["node_modules", "dist", "/src/runtime/*", "src/**/__tests__/*.test.ts", "src/tests"] } diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json index e93e0bf52d4..f11d7b36ca9 100644 --- a/packages/backend/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -2,25 +2,24 @@ "compilerOptions": { "allowSyntheticDefaultImports": true, "baseUrl": ".", - "rootDir": "src", "declaration": true, "declarationMap": false, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "importHelpers": true, - "moduleResolution": "NodeNext", + "isolatedModules": true, "module": "NodeNext", + "moduleResolution": "NodeNext", "noImplicitReturns": true, "noUnusedLocals": false, "noUnusedParameters": true, "outDir": "dist", "resolveJsonModule": true, + "rootDir": "src", "skipLibCheck": true, "sourceMap": false, "strict": true, - "target": "ES2020", - "isolatedModules": true + "target": "ES2020" }, - "include": ["src"], - "exclude": ["node_modules", "dist", "/src/runtime/*", "src/**/__tests__/*.test.ts", "src/tests"] + "include": ["src"] } diff --git a/packages/backend/tsconfig.lint.json b/packages/backend/tsconfig.lint.json deleted file mode 100644 index 28647847cec..00000000000 --- a/packages/backend/tsconfig.lint.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "./.*"] -} diff --git a/packages/chrome-extension/.eslintrc.js b/packages/chrome-extension/.eslintrc.js deleted file mode 100644 index 15b29bf0e65..00000000000 --- a/packages/chrome-extension/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], -}; diff --git a/packages/chrome-extension/package.json b/packages/chrome-extension/package.json index 42d01e9e53b..89367658389 100644 --- a/packages/chrome-extension/package.json +++ b/packages/chrome-extension/package.json @@ -38,7 +38,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", @@ -54,7 +54,6 @@ "webextension-polyfill": "^0.10.0" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@types/chrome": "*", "@types/webextension-polyfill": "^0.10.7", "type-fest": "^4.8.3" diff --git a/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts b/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts index 1742244ba3a..a5443a40c94 100644 --- a/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts +++ b/packages/chrome-extension/src/internal/utils/__tests__/cookies.test.ts @@ -40,7 +40,7 @@ describe('Cookies', () => { getMock.mockResolvedValue(cookie); - expect(await getClientCookie({ url, name })).toBe(cookie); + expect(await getClientCookie({ callback: jest.fn(), name, url })).toBe(cookie); expectMockCalls(getMock, name, [url]); }); diff --git a/packages/chrome-extension/tsconfig.json b/packages/chrome-extension/tsconfig.json index f4aacbcb384..35a77fee5e1 100644 --- a/packages/chrome-extension/tsconfig.json +++ b/packages/chrome-extension/tsconfig.json @@ -19,6 +19,5 @@ "declarationMap": true, "emitDeclarationOnly": true }, - "include": ["src"], - "exclude": ["src/**/*.test.tsx", "src/**/*.test.ts"] + "include": ["src"] } diff --git a/packages/chrome-extension/tsconfig.lint.json b/packages/chrome-extension/tsconfig.lint.json deleted file mode 100644 index 40b167e1f0e..00000000000 --- a/packages/chrome-extension/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src", "./*.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/clerk-js/.eslintrc.js b/packages/clerk-js/.eslintrc.js deleted file mode 100644 index 8bcdbc70b83..00000000000 --- a/packages/clerk-js/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - rules: { - 'jest/no-test-prefixes': 'warn', // TODO: Remove this once we've fixed all the tests - 'turbo/no-undeclared-env-vars': ['error', { allowList: ['RSDOCTOR'] }], - }, -}; diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 54a96ae2701..e1eb09ece9e 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -42,7 +42,7 @@ "dev": "rspack serve --config rspack.config.js", "dev:headless": "rspack serve --config rspack.config.js --env variant=\"clerk.headless.browser\"", "dev:sandbox": "rspack serve --config rspack.config.js --env devOrigin=http://localhost:4000 --env sandbox=1", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint || true", "test": "jest", @@ -74,7 +74,6 @@ "regenerator-runtime": "0.13.11" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@clerk/ui": "workspace:*", "@rsdoctor/rspack-plugin": "^0.4.7", "@rspack/cli": "^1.0.14", diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index fd806d5a15d..eb89b84e606 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -1,4 +1,4 @@ -//@ts-check +// @ts-check const rspack = require('@rspack/core'); const packageJSON = require('./package.json'); const path = require('path'); diff --git a/packages/clerk-js/src/__tests__/headless.test.ts b/packages/clerk-js/src/__tests__/headless.test.ts index c7c00e4926a..949b6e30805 100644 --- a/packages/clerk-js/src/__tests__/headless.test.ts +++ b/packages/clerk-js/src/__tests__/headless.test.ts @@ -5,6 +5,7 @@ describe('clerk/headless', () => { it('JS-689: should not error when loading headless', () => { expect(() => { + // eslint-disable-next-line @typescript-eslint/no-require-imports require('../../headless/index.js'); }).not.toThrow(); }); diff --git a/packages/clerk-js/src/core/auth/CaptchaHeartbeat.ts b/packages/clerk-js/src/core/auth/CaptchaHeartbeat.ts index 5c87be87cc5..6d1d7810ad5 100644 --- a/packages/clerk-js/src/core/auth/CaptchaHeartbeat.ts +++ b/packages/clerk-js/src/core/auth/CaptchaHeartbeat.ts @@ -29,7 +29,7 @@ export class CaptchaHeartbeat { try { const params = await this.captchaChallenge.invisible(); await this.clerk.client.sendCaptchaToken(params); - } catch (e) { + } catch { // Ignore unhandled errors } } diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 58440a21a1c..b449e76aecb 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -2176,7 +2176,7 @@ export class Clerk implements ClerkInterface { removeClerkQueryParam(CLERK_SUFFIXED_COOKIES); removeClerkQueryParam('__clerk_handshake'); removeClerkQueryParam('__clerk_help'); - } catch (_) { + } catch { // ignore } }; diff --git a/packages/clerk-js/src/emotion.d.ts b/packages/clerk-js/src/emotion.d.ts index 8ca5a548440..e38c8e99aeb 100644 --- a/packages/clerk-js/src/emotion.d.ts +++ b/packages/clerk-js/src/emotion.d.ts @@ -4,5 +4,6 @@ import '@emotion/react'; import type { InternalTheme } from './ui/foundations'; declare module '@emotion/react' { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface Theme extends InternalTheme {} } diff --git a/packages/clerk-js/src/ui/common/index.ts b/packages/clerk-js/src/ui/common/index.ts index 13a2268f6b2..bea7cf9e442 100644 --- a/packages/clerk-js/src/ui/common/index.ts +++ b/packages/clerk-js/src/ui/common/index.ts @@ -1,19 +1,18 @@ export * from './BlockButtons'; -export * from './constants'; export * from './CalloutWithAction'; +export * from './constants'; +export * from './EmailLinkStatusCard'; +export * from './EmailLinkVerify'; export * from './forms'; export * from './Gate'; export * from './InfiniteListSpinner'; +export * from './NotificationCountBadge'; +export * from './PrintableComponent'; export * from './ProviderInitialIcon'; +export * from './QRCode'; export * from './redirects'; +export * from './RemoveResourceForm'; +export * from './SSOCallback'; export * from './verification'; export * from './withRedirect'; -export * from './SSOCallback'; -export * from './EmailLinkVerify'; -export * from './EmailLinkStatusCard'; export * from './Wizard'; -export * from './RemoveResourceForm'; -export * from './PrintableComponent'; -export * from './NotificationCountBadge'; -export * from './RemoveResourceForm'; -export * from './QRCode'; diff --git a/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx b/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx index bf93b476b71..c064e0b1db4 100644 --- a/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx @@ -146,7 +146,6 @@ export function getButtonLabel(factor: SignInFactor): LocalizationKey { }); case 'password': return localizationKeys('signIn.alternativeMethods.blockButton__password'); - // @ts-ignore case 'passkey': return localizationKeys('signIn.alternativeMethods.blockButton__passkey'); case 'reset_password_email_code': @@ -154,7 +153,7 @@ export function getButtonLabel(factor: SignInFactor): LocalizationKey { case 'reset_password_phone_code': return localizationKeys('signIn.forgotPasswordAlternativeMethods.blockButton__resetPassword'); default: - throw `Invalid sign in strategy: "${factor.strategy}"`; + throw new Error(`Invalid sign in strategy: "${factor.strategy}"`); } } diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx index 31fa74cfe84..b62ba1d319f 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx @@ -100,6 +100,6 @@ export function getButtonLabel(factor: SignInFactor): LocalizationKey { case 'backup_code': return localizationKeys('signIn.alternativeMethods.blockButton__backupCode'); default: - throw `Invalid sign in strategy: "${factor.strategy}"`; + throw new Error(`Invalid sign in strategy: "${factor.strategy}"`); } } diff --git a/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyEmail.test.tsx b/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyEmail.test.tsx index f94da719f59..404e3559e56 100644 --- a/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyEmail.test.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyEmail.test.tsx @@ -1,5 +1,4 @@ import { waitFor } from '@testing-library/dom'; -import React from 'react'; import { render, screen } from '../../../../testUtils'; import { bindCreateFixtures } from '../../../utils/test/createFixtures'; @@ -68,8 +67,8 @@ describe('SignUpVerifyEmail', () => { screen.getByRole('button', { name: /edit/i, }), - ), - expect(fixtures.router.navigate).toHaveBeenCalledWith('../'); + ); + expect(fixtures.router.navigate).toHaveBeenCalledWith('../'); }); it('Resend link button exists', async () => { diff --git a/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyPhone.test.tsx b/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyPhone.test.tsx index 67a4db12410..9716f7ccadb 100644 --- a/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyPhone.test.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpVerifyPhone.test.tsx @@ -1,5 +1,4 @@ import { waitFor } from '@testing-library/dom'; -import React from 'react'; import { render, screen } from '../../../../testUtils'; import { bindCreateFixtures } from '../../../utils/test/createFixtures'; @@ -48,8 +47,8 @@ describe('SignUpVerifyPhone', () => { screen.getByRole('button', { name: /edit/i, }), - ), - expect(fixtures.router.navigate).toHaveBeenCalledWith('../'); + ); + expect(fixtures.router.navigate).toHaveBeenCalledWith('../'); }); it('Resend code button exists', async () => { diff --git a/packages/clerk-js/src/ui/components/UserProfile/__tests__/SecurityPage.test.tsx b/packages/clerk-js/src/ui/components/UserProfile/__tests__/SecurityPage.test.tsx index 384ef6f22b5..d5927dfc576 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/__tests__/SecurityPage.test.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/__tests__/SecurityPage.test.tsx @@ -149,6 +149,7 @@ describe('SecurityPage', () => { devices.forEach(d => { const elem = d.parentElement?.parentElement?.parentElement?.parentElement; expect(elem).toBeDefined(); + // eslint-disable-next-line jest/unbound-method const { getByText } = within(elem!); getByText(/107.0.0.0/i); getByText(/Athens/i); diff --git a/packages/clerk-js/src/ui/components/UserProfile/utils.ts b/packages/clerk-js/src/ui/components/UserProfile/utils.ts index c2a1a8e6042..10876cd81f4 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/utils.ts +++ b/packages/clerk-js/src/ui/components/UserProfile/utils.ts @@ -14,7 +14,9 @@ export function getSecondFactors(attributes: Attributes): string[] { const secondFactors: string[] = []; Object.entries(attributes).forEach(([, attr]) => { - attr.used_for_second_factor ? secondFactors.push(...attr.second_factors) : null; + if (attr.used_for_second_factor) { + secondFactors.push(...attr.second_factors); + } }); return secondFactors; diff --git a/packages/clerk-js/src/ui/components/UserVerification/AlternativeMethods.tsx b/packages/clerk-js/src/ui/components/UserVerification/AlternativeMethods.tsx index 03a41a3d044..a4255ac764b 100644 --- a/packages/clerk-js/src/ui/components/UserVerification/AlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/UserVerification/AlternativeMethods.tsx @@ -112,7 +112,7 @@ export function getButtonLabel(factor: SessionVerificationFirstFactor): Localiza case 'password': return localizationKeys('reverification.alternativeMethods.blockButton__password'); default: - throw `Invalid sign in strategy: "${(factor as any).strategy}"`; + throw new Error(`Invalid sign in strategy: "${(factor as any).strategy}"`); } } @@ -123,5 +123,5 @@ export function getButtonIcon(factor: SessionVerificationFirstFactor) { password: LockClosedIcon, } as const; - return icons[factor.strategy as keyof typeof icons]; + return icons[factor.strategy]; } diff --git a/packages/clerk-js/src/ui/components/UserVerification/UVFactorTwoAlternativeMethods.tsx b/packages/clerk-js/src/ui/components/UserVerification/UVFactorTwoAlternativeMethods.tsx index cae82bd1405..39a265ecc90 100644 --- a/packages/clerk-js/src/ui/components/UserVerification/UVFactorTwoAlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/UserVerification/UVFactorTwoAlternativeMethods.tsx @@ -99,6 +99,6 @@ export function getButtonLabel(factor: SessionVerificationSecondFactor): Localiz case 'backup_code': return localizationKeys('reverification.alternativeMethods.blockButton__backupCode'); default: - throw `Invalid verification strategy: "${(factor as any).strategy}"`; + throw new Error(`Invalid verification strategy: "${(factor as any).strategy}"`); } } diff --git a/packages/clerk-js/src/ui/components/Waitlist/waitlistFormHelpers.ts b/packages/clerk-js/src/ui/components/Waitlist/waitlistFormHelpers.ts index 4ac0f1ca90d..1818a278913 100644 --- a/packages/clerk-js/src/ui/components/Waitlist/waitlistFormHelpers.ts +++ b/packages/clerk-js/src/ui/components/Waitlist/waitlistFormHelpers.ts @@ -1,6 +1,6 @@ -const FieldKeys = ['emailAddress']; +const _FieldKeys = ['emailAddress']; -export type FieldKey = (typeof FieldKeys)[number]; +export type FieldKey = (typeof _FieldKeys)[number]; export type Field = { required: boolean; diff --git a/packages/clerk-js/src/ui/customizables/classGeneration.ts b/packages/clerk-js/src/ui/customizables/classGeneration.ts index 6eebf5a93a3..f2e9bfa7011 100644 --- a/packages/clerk-js/src/ui/customizables/classGeneration.ts +++ b/packages/clerk-js/src/ui/customizables/classGeneration.ts @@ -129,9 +129,13 @@ const addStringClassname = (cn: string, val?: unknown) => (typeof val === 'strin const addStyleRuleObject = (css: unknown[], val: unknown, specificity = 0) => { if (specificity) { - val && typeof val === 'object' && css.push({ ['&'.repeat(specificity)]: val }); + if (val && typeof val === 'object') { + css.push({ ['&'.repeat(specificity)]: val }); + } } else { - val && typeof val === 'object' && css.push(val); + if (val && typeof val === 'object') { + css.push(val); + } } }; diff --git a/packages/clerk-js/src/ui/elements/CodeControl.tsx b/packages/clerk-js/src/ui/elements/CodeControl.tsx index 48fa99c4899..d4fe459ac2f 100644 --- a/packages/clerk-js/src/ui/elements/CodeControl.tsx +++ b/packages/clerk-js/src/ui/elements/CodeControl.tsx @@ -212,7 +212,9 @@ export const OTPCodeControl = React.forwardRef<{ reset: any }>((_, ref) => { const ref = refs.current[clampedIndex]; if (ref) { ref.focus(); - values[clampedIndex] && ref.select(); + if (values[clampedIndex]) { + ref.select(); + } } }; diff --git a/packages/clerk-js/src/ui/elements/Menu.tsx b/packages/clerk-js/src/ui/elements/Menu.tsx index 810b21afb86..4948f27161b 100644 --- a/packages/clerk-js/src/ui/elements/Menu.tsx +++ b/packages/clerk-js/src/ui/elements/Menu.tsx @@ -191,7 +191,9 @@ export const MenuItem = (props: MenuItemProps) => { focusRing={false} onClick={e => { onClick?.(e); - closeAfterClick && toggle(); + if (closeAfterClick) { + toggle(); + } }} sx={[ theme => ({ diff --git a/packages/clerk-js/src/ui/elements/PhoneInput/countryCodeData.ts b/packages/clerk-js/src/ui/elements/PhoneInput/countryCodeData.ts index 070e91e8ebc..a8467524ae1 100644 --- a/packages/clerk-js/src/ui/elements/PhoneInput/countryCodeData.ts +++ b/packages/clerk-js/src/ui/elements/PhoneInput/countryCodeData.ts @@ -568,6 +568,10 @@ export type CodeToCountryIsoMapType = ReadonlyMap; export const CodeToCountriesMap: CodeToCountryIsoMapType = data.reduce((acc, cur) => { const code = cur[2]; const country = createEntry(cur); - acc.get(code) ? acc.get(code)!.push(country) : acc.set(code, [country]); + if (acc.has(code)) { + acc.get(code)?.push(country); + } else { + acc.set(code, [country]); + } return acc; }, new Map()); diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index 0836b5465e7..5c01080716f 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -1,59 +1,58 @@ -export * from './contexts'; -export * from './Header'; +export * from './Actions'; export * from './Alert'; -export * from './Form'; -export * from './BlockWithTrailingComponent'; -export * from './BackLink'; -export * from './IdentityPreview'; -export * from './Avatar'; -export * from './CodeControl'; -export * from './TimerButton'; -export * from './VerificationCodeCard'; -export * from './LoadingCard'; -export * from './ErrorCard'; -export * from './VerificationLinkCard'; +export * from './Animated'; export * from './ApplicationLogo'; -export * from './Card'; export * from './ArrowBlockButton'; -export * from './ReversibleContainer'; +export * from './Avatar'; +export * from './AvatarUploader'; +export * from './BackLink'; +export * from './BlockWithTrailingComponent'; +export * from './Card'; +export * from './ClipboardInput'; +export * from './CodeControl'; +export * from './contexts'; +export * from './DevModeNotice'; export * from './Divider'; -export * from './Modal'; -export * from './UserPreview'; +export * from './ErrorCard'; +export * from './Form'; export * from './FormattedPhoneNumber'; -export * from './RootBox'; -export * from './InvisibleRootBox'; -export * from './ClipboardInput'; -export * from './TileButton'; -export * from './Select'; -export * from './Menu'; -export * from './Pagination'; +export * from './FormButtons'; +export * from './FormContainer'; export * from './FullHeightLoader'; -export * from './Tabs'; +export * from './Gauge'; +export * from './Header'; +export * from './IconButton'; +export * from './IconCircle'; +export * from './IdentityPreview'; +export * from './InformationBox'; export * from './InputWithIcon'; -export * from './UserAvatar'; +export * from './InvisibleRootBox'; +export * from './LegalConsentCheckbox'; +export * from './LoadingCard'; +export * from './Menu'; +export * from './Modal'; +export * from './Navbar'; +export * from './NavigateToFlowStartButton'; export * from './OrganizationAvatar'; export * from './OrganizationPreview'; +export * from './Pagination'; export * from './PersonalWorkspacePreview'; -export * from './Navbar'; -export * from './FormContainer'; -export * from './IconButton'; -export * from './AvatarUploader'; -export * from './Actions'; +export * from './Popover'; export * from './PopoverCard'; +export * from './PreviewButton'; +export * from './ProfileCard'; +export * from './ReversibleContainer'; +export * from './RootBox'; +export * from './Section'; +export * from './Select'; +export * from './SuccessPage'; +export * from './Tabs'; export * from './TagInput'; export * from './ThreeDotsMenu'; -export * from './FormButtons'; -export * from './NavigateToFlowStartButton'; -export * from './SuccessPage'; -export * from './IconCircle'; -export * from './Popover'; -export * from './Section'; -export * from './PreviewButton'; -export * from './InformationBox'; +export * from './TileButton'; +export * from './TimerButton'; +export * from './UserAvatar'; +export * from './UserPreview'; +export * from './VerificationCodeCard'; +export * from './VerificationLinkCard'; export * from './withAvatarShimmer'; -export * from './Card'; -export * from './ProfileCard'; -export * from './Gauge'; -export * from './Animated'; -export * from './DevModeNotice'; -export * from './LegalConsentCheckbox'; diff --git a/packages/clerk-js/src/ui/hooks/useLocalStorage.ts b/packages/clerk-js/src/ui/hooks/useLocalStorage.ts index ee5dfc834c4..9b0e68e49a7 100644 --- a/packages/clerk-js/src/ui/hooks/useLocalStorage.ts +++ b/packages/clerk-js/src/ui/hooks/useLocalStorage.ts @@ -10,7 +10,7 @@ export function useLocalStorage(key: string, initialValue: T) { try { const item = window.localStorage.getItem(key); return item ? JSON.parse(item) : initialValue; - } catch (error) { + } catch { return initialValue; } }); diff --git a/packages/clerk-js/src/ui/primitives/hooks/useFormField.tsx b/packages/clerk-js/src/ui/primitives/hooks/useFormField.tsx index 68672cf8f1c..662fa6a75ee 100644 --- a/packages/clerk-js/src/ui/primitives/hooks/useFormField.tsx +++ b/packages/clerk-js/src/ui/primitives/hooks/useFormField.tsx @@ -138,7 +138,6 @@ export const sanitizeInputProps = ( transformer, ...inputProps } = obj; - /* eslint-enable */ keep?.forEach(key => { /** diff --git a/packages/clerk-js/src/ui/primitives/index.ts b/packages/clerk-js/src/ui/primitives/index.ts index 36b6cc95c08..4e0697a3357 100644 --- a/packages/clerk-js/src/ui/primitives/index.ts +++ b/packages/clerk-js/src/ui/primitives/index.ts @@ -1,29 +1,28 @@ +export * from './Alert'; +export * from './AlertIcon'; +export * from './Badge'; export * from './Box'; export * from './Button'; export * from './Flex'; -export * from './Grid'; -export * from './Heading'; -export * from './Text'; -export * from './Spinner'; -export * from './Input'; -export * from './Link'; -export * from './Image'; -export * from './Alert'; -export * from './AlertIcon'; -export * from './Input'; +export * from './Form'; export * from './FormErrorText'; export * from './FormInfoText'; +export * from './FormLabel'; export * from './FormSuccessText'; export * from './FormWarningText'; -export * from './FormLabel'; -export * from './Form'; +export * from './Grid'; +export * from './Heading'; export * from './Icon'; -export * from './Badge'; +export * from './Image'; +export * from './Input'; +export * from './Link'; +export * from './NotificationBadge'; +export * from './Span'; +export * from './Spinner'; export * from './Table'; -export * from './Thead'; export * from './Tbody'; -export * from './Tr'; -export * from './Th'; export * from './Td'; -export * from './NotificationBadge'; -export * from './Span'; +export * from './Text'; +export * from './Th'; +export * from './Thead'; +export * from './Tr'; diff --git a/packages/clerk-js/src/ui/router/__tests__/HashRouter.test.tsx b/packages/clerk-js/src/ui/router/__tests__/HashRouter.test.tsx index 9eec0bd7b99..3848285b233 100644 --- a/packages/clerk-js/src/ui/router/__tests__/HashRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/__tests__/HashRouter.test.tsx @@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import type Clerk from '../../../core/clerk'; +import type { Clerk } from '../../../core/clerk'; import { HashRouter, Route, useRouter } from '..'; const mockNavigate = jest.fn(); @@ -54,7 +54,6 @@ describe('HashRouter', () => { const oldWindowLocation = window.location; beforeAll(() => { - // @ts-ignore delete window.location; }); diff --git a/packages/clerk-js/src/ui/router/__tests__/PathRouter.test.tsx b/packages/clerk-js/src/ui/router/__tests__/PathRouter.test.tsx index 1b7750c1516..52a2dff21a8 100644 --- a/packages/clerk-js/src/ui/router/__tests__/PathRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/__tests__/PathRouter.test.tsx @@ -2,7 +2,7 @@ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import type Clerk from '../../../core/clerk'; +import type { Clerk } from '../../../core/clerk'; import { PathRouter, Route, useRouter } from '..'; const mockNavigate = jest.fn(); diff --git a/packages/clerk-js/src/ui/utils/colors.ts b/packages/clerk-js/src/ui/utils/colors.ts index db7a19f7376..d3ee83e7550 100644 --- a/packages/clerk-js/src/ui/utils/colors.ts +++ b/packages/clerk-js/src/ui/utils/colors.ts @@ -201,7 +201,6 @@ const hwbTupleToRgbTuple = (hwb: ColorTuple): ColorTuple => { b = n; break; } - /* eslint-enable max-statements-per-line,no-multi-spaces */ return [r * 255, g * 255, b * 255, a]; }; diff --git a/packages/clerk-js/src/ui/utils/intl.ts b/packages/clerk-js/src/ui/utils/intl.ts index a220c84a359..feb0716fe79 100644 --- a/packages/clerk-js/src/ui/utils/intl.ts +++ b/packages/clerk-js/src/ui/utils/intl.ts @@ -21,7 +21,7 @@ function numberFormatSupportedLocalesOf(locale?: string) { try { return (Intl as any).NumberFormat.supportedLocalesOf(locale).length > 0; - } catch (e) { + } catch { return false; } } diff --git a/packages/clerk-js/src/utils/captcha/turnstile.ts b/packages/clerk-js/src/utils/captcha/turnstile.ts index bd43fd00afe..ed6e4c9ab1d 100644 --- a/packages/clerk-js/src/utils/captcha/turnstile.ts +++ b/packages/clerk-js/src/utils/captcha/turnstile.ts @@ -81,6 +81,7 @@ export const shouldRetryTurnstileErrorCode = (errorCode: string) => { async function loadCaptcha() { if (!window.turnstile) { await loadCaptchaFromCloudflareURL().catch(() => { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw { captchaError: 'captcha_script_failed_to_load' }; }); } @@ -219,6 +220,7 @@ export const getTurnstileToken = async (opts: CaptchaOptions) => { // After a failed challenge remove it captcha.remove(id); } + // eslint-disable-next-line @typescript-eslint/only-throw-error throw { captchaError: e, }; diff --git a/packages/clerk-js/src/utils/getClerkQueryParam.ts b/packages/clerk-js/src/utils/getClerkQueryParam.ts index ededb0ec19b..6dc99098368 100644 --- a/packages/clerk-js/src/utils/getClerkQueryParam.ts +++ b/packages/clerk-js/src/utils/getClerkQueryParam.ts @@ -1,6 +1,6 @@ import { CLERK_SATELLITE_URL, CLERK_SUFFIXED_COOKIES, CLERK_SYNCED } from '../core/constants'; -const ClerkQueryParams = [ +const _ClerkQueryParams = [ '__clerk_status', '__clerk_created_session', '__clerk_invitation_token', @@ -13,11 +13,11 @@ const ClerkQueryParams = [ CLERK_SUFFIXED_COOKIES, ] as const; -type ClerkQueryParam = (typeof ClerkQueryParams)[number]; +type ClerkQueryParam = (typeof _ClerkQueryParams)[number]; type ClerkQueryParamsToValuesMap = { __clerk_status: VerificationStatus | TicketStatus; -} & Record<(typeof ClerkQueryParams)[number], string>; +} & Record<(typeof _ClerkQueryParams)[number], string>; export type VerificationStatus = | 'expired' diff --git a/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts b/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts index 4980ea861af..027a9198cc3 100644 --- a/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts +++ b/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts @@ -114,7 +114,7 @@ function resourceChanged(prev: T, if (User.isUserResource(prev)) { return userChanged(prev, next as UserResource); } - } catch (e) { + } catch { // If something goes terribly wrong, prefer doing an unnecessary rerender return true; } diff --git a/packages/clerk-js/src/utils/one-tap.ts b/packages/clerk-js/src/utils/one-tap.ts index 5284cdd294d..4b56a2b083a 100644 --- a/packages/clerk-js/src/utils/one-tap.ts +++ b/packages/clerk-js/src/utils/one-tap.ts @@ -43,7 +43,7 @@ async function loadGIS() { if (!window.google) { try { await loadScript('https://accounts.google.com/gsi/client', { defer: true }); - } catch (_) { + } catch { // Rethrow with specific message clerkFailedToLoadThirdPartyScript('Google Identity Services'); } diff --git a/packages/clerk-js/src/utils/setWebpackChunkPublicPath.ts b/packages/clerk-js/src/utils/setWebpackChunkPublicPath.ts index 7806f4e9cfc..886daf54594 100644 --- a/packages/clerk-js/src/utils/setWebpackChunkPublicPath.ts +++ b/packages/clerk-js/src/utils/setWebpackChunkPublicPath.ts @@ -33,7 +33,7 @@ if (!__DEV__) { let hrefWithoutFilename = new URL(scriptUrl.href.split('/').slice(0, -1).join('/')).href; hrefWithoutFilename += hrefWithoutFilename.endsWith('/') ? '' : '/'; __webpack_public_path__ = hrefWithoutFilename.replace(CLERKJS_NPM_PATH_REGEX, `$1${__PKG_VERSION__}$3`); - } catch (e) { + } catch { // } }; diff --git a/packages/clerk-js/src/utils/url.ts b/packages/clerk-js/src/utils/url.ts index 713919d7ef9..a2e5e49ce2c 100644 --- a/packages/clerk-js/src/utils/url.ts +++ b/packages/clerk-js/src/utils/url.ts @@ -229,7 +229,7 @@ export function isValidUrl(val: unknown): val is string { try { new URL(val as string); return true; - } catch (e) { + } catch { return false; } } @@ -237,7 +237,7 @@ export function isValidUrl(val: unknown): val is string { export function relativeToAbsoluteUrl(url: string, origin: string | URL): URL { try { return new URL(url); - } catch (e) { + } catch { return new URL(url, origin); } } diff --git a/packages/clerk-js/tsconfig.declarations.json b/packages/clerk-js/tsconfig.declarations.json index 4d6f28ad16a..29c5eced402 100644 --- a/packages/clerk-js/tsconfig.declarations.json +++ b/packages/clerk-js/tsconfig.declarations.json @@ -10,5 +10,12 @@ "outDir": "./dist", "declarationDir": "./dist/types", "noImplicitReturns": false - } + }, + "include": [ + "src/index.ts", + "src/index.browser.ts", + "src/index.headless.ts", + "src/index.headless.browser.ts", + "src/**/*.d.ts" + ] } diff --git a/packages/clerk-js/tsconfig.json b/packages/clerk-js/tsconfig.json index e165a8847ef..31a34db8305 100644 --- a/packages/clerk-js/tsconfig.json +++ b/packages/clerk-js/tsconfig.json @@ -2,11 +2,14 @@ "compilerOptions": { "allowJs": false, "baseUrl": "src", + "declaration": false, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, - "module": "esnext", + "jsx": "react-jsx", + "jsxImportSource": "@emotion/react", "lib": ["dom", "dom.iterable", "es2021.intl"], + "module": "esnext", "moduleResolution": "Bundler", "noEmit": true, "noFallthroughCasesInSwitch": true, @@ -17,17 +20,7 @@ "sourceMap": false, "strict": true, "target": "ES2019", - "useUnknownInCatchVariables": false, - "declaration": false, - "jsx": "react-jsx", - "jsxImportSource": "@emotion/react" + "useUnknownInCatchVariables": false }, - "include": [ - "src/index.ts", - "src/index.browser.ts", - "src/index.headless.ts", - "src/index.headless.browser.ts", - "src/**/*.d.ts" - ], - "exclude": ["node_modules", "**/*.test.ts", "**/*.test.tsx"] + "include": ["src", "jest.setup.ts", "jest.setup-after-env.ts", "jest.jsdom-with-timezone.ts"] } diff --git a/packages/clerk-js/tsconfig.lint.json b/packages/clerk-js/tsconfig.lint.json deleted file mode 100644 index 97f9024bed3..00000000000 --- a/packages/clerk-js/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*", "./setupJestAfterEnv.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/dev-cli/.eslintrc.cjs b/packages/dev-cli/.eslintrc.cjs deleted file mode 100644 index 108309d83ac..00000000000 --- a/packages/dev-cli/.eslintrc.cjs +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/jest'], - rules: { - // allowList all environment variables since we don't use Turborepo for clerk-dev anyway. - 'turbo/no-undeclared-env-vars': ['error', { allowList: ['.*'] }], - }, -}; diff --git a/packages/dev-cli/package.json b/packages/dev-cli/package.json index 3a4ac0b4552..fdf198fda77 100644 --- a/packages/dev-cli/package.json +++ b/packages/dev-cli/package.json @@ -19,7 +19,7 @@ "clerk-dev": "bin/cli.js" }, "scripts": { - "lint": "eslint src/" + "lint": "eslint src" }, "dependencies": { "commander": "^12.1.0", @@ -28,9 +28,7 @@ "globby": "^14.0.2", "jscodeshift": "^0.16.1" }, - "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*" - }, + "devDependencies": {}, "engines": { "node": ">=18.17.0" }, diff --git a/packages/dev-cli/src/commands/config.js b/packages/dev-cli/src/commands/config.js index 8385bff1227..8e35b09f95b 100644 --- a/packages/dev-cli/src/commands/config.js +++ b/packages/dev-cli/src/commands/config.js @@ -1,3 +1,4 @@ +/* eslint-disable turbo/no-undeclared-env-vars */ import { spawn } from 'node:child_process'; import { CONFIG_FILE } from '../utils/getConfiguration.js'; diff --git a/packages/dev-cli/src/commands/init.js b/packages/dev-cli/src/commands/init.js index dd4da3bc525..7a28e88543d 100644 --- a/packages/dev-cli/src/commands/init.js +++ b/packages/dev-cli/src/commands/init.js @@ -1,3 +1,4 @@ +/* eslint-disable turbo/no-undeclared-env-vars */ import { spawn } from 'node:child_process'; import { existsSync } from 'node:fs'; import { mkdir, writeFile } from 'node:fs/promises'; diff --git a/packages/dev-cli/src/commands/setup.js b/packages/dev-cli/src/commands/setup.js index 4786097b313..acee0c5cdcd 100644 --- a/packages/dev-cli/src/commands/setup.js +++ b/packages/dev-cli/src/commands/setup.js @@ -148,7 +148,7 @@ async function importPackageLock() { child.on('close', code => { if (code !== 0) { - reject(); + reject(new Error()); return; } resolve(); @@ -183,7 +183,7 @@ async function linkDependencies() { child.on('close', code => { if (code !== 0) { - reject(); + reject(new Error()); return; } resolve(); diff --git a/packages/elements/.eslintrc.js b/packages/elements/.eslintrc.js deleted file mode 100644 index b5ca0980cb6..00000000000 --- a/packages/elements/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - rules: { - 'import/no-unresolved': [2, { ignore: ['^~/'] }], - }, - // overrides: [], -}; diff --git a/packages/elements/examples/nextjs/.eslintrc.js b/packages/elements/examples/nextjs/.eslintrc.js deleted file mode 100644 index 50d62e058c7..00000000000 --- a/packages/elements/examples/nextjs/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - root: true, - extends: [ - '@clerk/custom/browser', - '@clerk/custom/typescript', - '@clerk/custom/react', - 'plugin:@next/next/recommended', - ], -}; diff --git a/packages/elements/examples/nextjs/package.json b/packages/elements/examples/nextjs/package.json index 596efe91ea8..b16ac955a83 100644 --- a/packages/elements/examples/nextjs/package.json +++ b/packages/elements/examples/nextjs/package.json @@ -26,8 +26,6 @@ "@types/react": "catalog:react", "@types/react-dom": "catalog:react", "autoprefixer": "^10.4.20", - "eslint": "^8", - "eslint-config-next": "14.2", "postcss": "^8.4.49", "tailwindcss": "^3.4.17", "typescript": "^5.6.3" diff --git a/packages/elements/package.json b/packages/elements/package.json index e990b82d62a..0413757ee21 100644 --- a/packages/elements/package.json +++ b/packages/elements/package.json @@ -83,7 +83,6 @@ "xstate": "^5.15.0" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@statelyai/inspect": "^0.4.0", "concurrently": "^8.2.2", "next": "^14.2.22", diff --git a/packages/elements/src/internals/machines/sign-in/router.types.ts b/packages/elements/src/internals/machines/sign-in/router.types.ts index e82de5896cd..dd1823deb71 100644 --- a/packages/elements/src/internals/machines/sign-in/router.types.ts +++ b/packages/elements/src/internals/machines/sign-in/router.types.ts @@ -117,9 +117,7 @@ export interface SignInRouterContext extends BaseRouterContext { // ---------------------------------- Input ---------------------------------- // -export interface SignInRouterInput { - // NOTE: Set in INIT event -} +export type SignInRouterInput = object; // ---------------------------------- Schema ---------------------------------- // diff --git a/packages/elements/src/internals/machines/sign-up/utils/fields-to-params.ts b/packages/elements/src/internals/machines/sign-up/utils/fields-to-params.ts index 06d96ece74c..3ebe006eee4 100644 --- a/packages/elements/src/internals/machines/sign-up/utils/fields-to-params.ts +++ b/packages/elements/src/internals/machines/sign-up/utils/fields-to-params.ts @@ -33,7 +33,7 @@ export function fieldsToSignUpParams { */ if (res?.strength?.state === 'fail') { const keys = res.strength.keys; - const error = keys.map(key => get(zxcvbnKeys, key)).join(' '); + const error = JSON.stringify(keys); return onValidationError(error, keys); } @@ -65,7 +65,7 @@ export const usePassword = (callbacks?: UsePasswordCallbacks) => { */ if (res?.strength?.state === 'pass') { const keys = res.strength.keys; - const error = keys.map(key => get(zxcvbnKeys, key)).join(' '); + const error = JSON.stringify(keys); return onValidationWarning(error, keys); } @@ -90,49 +90,3 @@ export const usePassword = (callbacks?: UsePasswordCallbacks) => { validatePassword, }; }; - -const get = (t: Record, path: string) => path.split('.').reduce((r, k) => r?.[k], t); - -const zxcvbnKeys = { - unstable__errors: { - zxcvbn: { - couldBeStronger: 'Your password works, but could be stronger. Try adding more characters.', - goodPassword: 'Your password meets all the necessary requirements.', - notEnough: 'Your password is not strong enough.', - suggestions: { - allUppercase: 'Capitalize some, but not all letters.', - anotherWord: 'Add more words that are less common.', - associatedYears: 'Avoid years that are associated with you.', - capitalization: 'Capitalize more than the first letter.', - dates: 'Avoid dates and years that are associated with you.', - l33t: "Avoid predictable letter substitutions like '@' for 'a'.", - longerKeyboardPattern: 'Use longer keyboard patterns and change typing direction multiple times.', - noNeed: 'You can create strong passwords without using symbols, numbers, or uppercase letters.', - pwned: 'If you use this password elsewhere, you should change it.', - recentYears: 'Avoid recent years.', - repeated: 'Avoid repeated words and characters.', - reverseWords: 'Avoid reversed spellings of common words.', - sequences: 'Avoid common character sequences.', - useWords: 'Use multiple words, but avoid common phrases.', - }, - warnings: { - common: 'This is a commonly used password.', - commonNames: 'Common names and surnames are easy to guess.', - dates: 'Dates are easy to guess.', - extendedRepeat: 'Repeated character patterns like "abcabcabc" are easy to guess.', - keyPattern: 'Short keyboard patterns are easy to guess.', - namesByThemselves: 'Single names or surnames are easy to guess.', - pwned: 'Your password was exposed by a data breach on the Internet.', - recentYears: 'Recent years are easy to guess.', - sequences: 'Common character sequences like "abc" are easy to guess.', - similarToCommon: 'This is similar to a commonly used password.', - simpleRepeat: 'Repeated characters like "aaa" are easy to guess.', - straightRow: 'Straight rows of keys on your keyboard are easy to guess.', - topHundred: 'This is a frequently used password.', - topTen: 'This is a heavily used password.', - userInputs: 'There should not be any personal or page related data.', - wordByItself: 'Single words are easy to guess.', - }, - }, - }, -}; diff --git a/packages/elements/src/react/router/next.ts b/packages/elements/src/react/router/next.ts index 4419e8f0522..06f7531bdc2 100644 --- a/packages/elements/src/react/router/next.ts +++ b/packages/elements/src/react/router/next.ts @@ -25,9 +25,8 @@ export const useNextRouter = (): ClerkHostRouter => { push: (path: string) => router.push(path), replace: (path: string) => canUseWindowHistoryAPIs ? window.history.replaceState(null, '', path) : router.replace(path), - shallowPush(path: string) { - canUseWindowHistoryAPIs ? window.history.pushState(null, '', path) : router.push(path, {}); - }, + shallowPush: (path: string) => + canUseWindowHistoryAPIs ? window.history.pushState(null, '', path) : router.push(path, {}), pathname: () => pathname, searchParams: () => searchParams, inferredBasePath: () => inferredBasePath, diff --git a/packages/elements/src/react/sign-in/choose-strategy.tsx b/packages/elements/src/react/sign-in/choose-strategy.tsx index 84fbf15ebee..adce88933e7 100644 --- a/packages/elements/src/react/sign-in/choose-strategy.tsx +++ b/packages/elements/src/react/sign-in/choose-strategy.tsx @@ -24,7 +24,7 @@ export function isResetPasswordStrategy(strategy: TSignInStrategy | null | undef if (!strategy) { return false; } - return resetPasswordStrategies.has(strategy as TSignInStrategy); + return resetPasswordStrategies.has(strategy); } export function factorHasLocalStrategy(factor: SignInFactor | undefined | null): boolean { diff --git a/packages/elements/src/utils/safe-access.ts b/packages/elements/src/utils/safe-access.ts index 8813fbc6a65..aa2f0b9809f 100644 --- a/packages/elements/src/utils/safe-access.ts +++ b/packages/elements/src/utils/safe-access.ts @@ -1,7 +1,7 @@ export function safeAccess(fn: any, fallback: any) { try { return fn(); - } catch (e) { + } catch { return fallback; } } diff --git a/packages/elements/tsconfig.lint.json b/packages/elements/tsconfig.lint.json deleted file mode 100644 index 40b167e1f0e..00000000000 --- a/packages/elements/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src", "./*.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/eslint-config-custom/.eslintrc.js b/packages/eslint-config-custom/.eslintrc.js deleted file mode 100644 index 64f25b36fd8..00000000000 --- a/packages/eslint-config-custom/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['./node'], -}; diff --git a/packages/eslint-config-custom/CHANGELOG.md b/packages/eslint-config-custom/CHANGELOG.md deleted file mode 100644 index 993768dfe9b..00000000000 --- a/packages/eslint-config-custom/CHANGELOG.md +++ /dev/null @@ -1,91 +0,0 @@ -# Change Log - -## 0.0.2 - -### Patch Changes - -- The following are all internal changes and not relevant to any end-user: ([#3523](https://github.com/clerk/javascript/pull/3523)) by [@tmilewski](https://github.com/tmilewski) - - Remove explicit extension of Prettier from ESLint React - -## 0.0.1 - -### Patch Changes - -- Rename local `eslint-config-custom` package to `@clerk/eslint-config-custom` to avoid conflicts with previously published package. Removes `eslint-config-custom` from `@clerk/clerk-react`'s dependencies, as it should only be a development dependency. ([#3307](https://github.com/clerk/javascript/pull/3307)) by [@BRKalow](https://github.com/BRKalow) - -- Initial release of `@clerk/eslint-config-custom`, for internal use. ([#3307](https://github.com/clerk/javascript/pull/3307)) by [@BRKalow](https://github.com/BRKalow) - -- Set correct properties in `package.json` for publishing ([#3340](https://github.com/clerk/javascript/pull/3340)) by [@LekoArts](https://github.com/LekoArts) - -## [0.3.0](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.2.0...eslint-config-custom@0.3.0) (2023-05-15) - -**Note:** Version bump only for package eslint-config-custom - -## [0.2.0](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.2.0-staging.0...eslint-config-custom@0.2.0) (2023-03-29) - -**Note:** Version bump only for package eslint-config-custom - -### [0.1.1](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.1.1-staging.0...eslint-config-custom@0.1.1) (2023-02-07) - -**Note:** Version bump only for package eslint-config-custom - -### [0.1.1-staging.0](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.1.0...eslint-config-custom@0.1.1-staging.0) (2023-02-07) - -**Note:** Version bump only for package eslint-config-custom - -## [0.1.0](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.8...eslint-config-custom@0.1.0) (2023-02-07) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.8](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.8-staging.0...eslint-config-custom@0.0.8) (2023-02-01) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.7](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.7-staging.0...eslint-config-custom@0.0.7) (2023-01-27) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.6](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.5...eslint-config-custom@0.0.6) (2022-12-12) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.5](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.5-staging.0...eslint-config-custom@0.0.5) (2022-12-09) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.4](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.4-staging.0...eslint-config-custom@0.0.4) (2022-11-30) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.3](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.3-staging.1...eslint-config-custom@0.0.3) (2022-11-15) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.2](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.2-staging.3...eslint-config-custom@0.0.2) (2022-11-03) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.2-staging.3](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.2-staging.2...eslint-config-custom@0.0.2-staging.3) (2022-11-02) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.2-staging.2](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.2-staging.1...eslint-config-custom@0.0.2-staging.2) (2022-11-02) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.2-staging.1](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.2-staging.0...eslint-config-custom@0.0.2-staging.1) (2022-11-02) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.2-staging.0](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.1...eslint-config-custom@0.0.2-staging.0) (2022-11-02) - -**Note:** Version bump only for package eslint-config-custom - -### [0.0.1](https://github.com/clerk/clerk_docker/compare/eslint-config-custom@0.0.1-staging.1...eslint-config-custom@0.0.1) (2022-10-14) - -**Note:** Version bump only for package eslint-config-custom - -### 0.0.1-staging.1 (2022-10-13) - -**Note:** Version bump only for package eslint-config-custom diff --git a/packages/eslint-config-custom/_base.js b/packages/eslint-config-custom/_base.js deleted file mode 100644 index 6c884a50a8f..00000000000 --- a/packages/eslint-config-custom/_base.js +++ /dev/null @@ -1,66 +0,0 @@ -const { ECMA_VERSION, JAVASCRIPT_FILES } = require('./_constants'); - -// See: https://github.com/eslint/eslint/issues/3458 -require('@rushstack/eslint-patch/modern-module-resolution'); - -/** - * This is the base for both our browser and Node ESLint config files. - */ -module.exports = { - extends: [ - 'eslint:recommended', - 'plugin:import/recommended', - 'prettier', - 'eslint-config-turbo', - require.resolve('./rules/variables'), - ], - plugins: ['simple-import-sort', 'unused-imports'], - env: { - [`es${ECMA_VERSION}`]: true, - }, - reportUnusedDisableDirectives: true, // Report unused `eslint-disable` comments. - ignorePatterns: ['!.*.js', '*.snap'], // Tell ESLint not to ignore dot-files, which are ignored by default. - settings: { - 'import/resolver': { node: {} }, // Use the Node resolver by default. - }, - parserOptions: { - ecmaVersion: ECMA_VERSION, - sourceType: 'module', - }, - 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.', - }, - ], - }, - ], - 'turbo/no-undeclared-env-vars': 'error', - }, - overrides: [ - { - files: JAVASCRIPT_FILES, - parser: '@babel/eslint-parser', - parserOptions: { - requireConfigFile: false, - }, - }, - ], -}; diff --git a/packages/eslint-config-custom/_constants.js b/packages/eslint-config-custom/_constants.js deleted file mode 100644 index ccdbb18c386..00000000000 --- a/packages/eslint-config-custom/_constants.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - ECMA_VERSION: 2021, - JAVASCRIPT_FILES: ['*.js?(x)', '*.mjs'], - TYPESCRIPT_FILES: ['*.ts?(x)'], - TEST_FILES: ['*.test.js?(x)', '*.test.ts?(x)', 'test/**', '__tests__/**'], - YAML_FILES: ['*.yml', '*.yaml'], -}; diff --git a/packages/eslint-config-custom/browser.js b/packages/eslint-config-custom/browser.js deleted file mode 100644 index 06bba939be6..00000000000 --- a/packages/eslint-config-custom/browser.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - extends: require.resolve('./_base'), - env: { - browser: true, - node: true, - }, -}; diff --git a/packages/eslint-config-custom/github-actions.js b/packages/eslint-config-custom/github-actions.js deleted file mode 100644 index b8a4a9cdc94..00000000000 --- a/packages/eslint-config-custom/github-actions.js +++ /dev/null @@ -1,22 +0,0 @@ -const { YAML_FILES } = require('./_constants'); - -module.exports = { - plugins: ['eslint-plugin-regex'], - overrides: [ - { - files: YAML_FILES, - parser: 'any-eslint-parser', - rules: { - 'regex/invalid': [ - 'error', - [ - { - regex: '^(?!.*\\$TURBO_ARGS( |$)).*turbo \\S+', - message: 'Invalid turbo CI command. Must contain `$TURBO_ARGS`', - }, - ], - ], - }, - }, - ], -}; diff --git a/packages/eslint-config-custom/jest.js b/packages/eslint-config-custom/jest.js deleted file mode 100644 index 1467056d4ec..00000000000 --- a/packages/eslint-config-custom/jest.js +++ /dev/null @@ -1,51 +0,0 @@ -const { TEST_FILES } = require('./_constants'); - -const disabledRules = { - 'jest/prefer-lowercase-title': 'off', - - // TODO: All rules below should be set to their defaults - // when we're able to make the appropriate changes. - 'jest/expect-expect': 'off', - 'jest/no-alias-methods': 'off', - 'jest/no-commented-out-tests': 'off', - 'jest/no-disabled-tests': 'off', - 'jest/no-conditional-expect': 'off', - 'jest/no-duplicate-hooks': 'off', - 'jest/no-export': 'off', - 'jest/no-identical-title': 'off', - 'jest/no-jasmine-globals': 'off', - 'jest/require-top-level-describe': 'off', - 'jest/unbound-method': 'off', - 'jest/valid-expect': 'off', - 'jest/valid-title': 'off', -}; - -// TODO: All rules below should be set to their defaults -// when we're able to make the appropriate changes. -const disabledOverrideRules = { - '@typescript-eslint/await-thenable': 'off', - '@typescript-eslint/no-floating-promises': 'off', - '@typescript-eslint/require-await': 'off', - '@typescript-eslint/unbound-method': 'off', -}; - -module.exports = { - extends: ['plugin:jest/recommended'], - env: { - jest: true, - }, - rules: { - ...disabledRules, - }, - overrides: [ - { - files: TEST_FILES, - rules: { - '@typescript-eslint/unbound-method': 'off', - 'jest/unbound-method': 'off', // TODO: Set to `error` when we're able to make the appropriate changes. - - ...disabledOverrideRules, - }, - }, - ], -}; diff --git a/packages/eslint-config-custom/node.js b/packages/eslint-config-custom/node.js deleted file mode 100644 index 5265b350c5b..00000000000 --- a/packages/eslint-config-custom/node.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: require.resolve('./_base'), - env: { - node: true, - }, -}; diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json deleted file mode 100644 index dfde45d699e..00000000000 --- a/packages/eslint-config-custom/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@clerk/eslint-config-custom", - "version": "0.0.2", - "description": "Internal ESLint configuration for Clerk", - "homepage": "https://clerk.com/", - "bugs": { - "url": "https://github.com/clerk/javascript/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/clerk/javascript.git", - "directory": "packages/eslint-config-custom" - }, - "license": "MIT", - "author": "Clerk", - "dependencies": { - "@next/eslint-plugin-next": "^12.3.4", - "@vercel/style-guide": "^5.2.0", - "any-eslint-parser": "^1.0.1", - "eslint-config-prettier": "^9.1.0", - "eslint-config-turbo": "^2.0.3", - "eslint-plugin-playwright": "^0.22.0", - "eslint-plugin-regex": "^1.10.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-unused-imports": "^3.2.0" - }, - "peerDependencies": { - "typescript": "catalog:repo" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/eslint-config-custom/playwright.js b/packages/eslint-config-custom/playwright.js deleted file mode 100644 index a5aced94a88..00000000000 --- a/packages/eslint-config-custom/playwright.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['plugin:playwright/recommended'], -}; diff --git a/packages/eslint-config-custom/react.js b/packages/eslint-config-custom/react.js deleted file mode 100644 index df5f783c427..00000000000 --- a/packages/eslint-config-custom/react.js +++ /dev/null @@ -1,65 +0,0 @@ -const disabledRules = { - 'jsx-a11y/no-onchange': 'off', - 'react/prop-types': 'off', - 'react/react-in-jsx-scope': 'off', - - // TODO: All rules below should be set to their defaults - // when we're able to make the appropriate changes. - 'jsx-a11y/alt-text': 'warn', - 'jsx-a11y/html-has-lang': 'warn', - 'jsx-a11y/no-autofocus': 'warn', - 'react/button-has-type': 'warn', - 'react/display-name': 'off', - 'react/jsx-curly-brace-presence': 'off', - 'react/jsx-no-leaked-render': 'off', - 'react/jsx-no-useless-fragment': 'warn', - 'react/jsx-sort-props': 'off', - 'react-hooks/rules-of-hooks': 'warn', -}; - -const extensions = [ - 'plugin:react/recommended', - 'plugin:react-hooks/recommended', - 'plugin:jsx-a11y/recommended', - 'plugin:import/react', -]; - -module.exports = { - extends: extensions, - rules: { - 'react/button-has-type': 'warn', - 'react/function-component-definition': 'off', - 'react/hook-use-state': 'warn', - 'react/jsx-boolean-value': 'warn', - 'react/jsx-curly-brace-presence': 'warn', - 'react/jsx-fragments': 'warn', - 'react/jsx-no-leaked-render': 'warn', - 'react/jsx-no-target-blank': [ - 'error', - { - allowReferrer: true, - }, - ], - 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }], - 'react/jsx-pascal-case': 'warn', - 'react/jsx-sort-props': 'warn', - 'react/no-array-index-key': 'warn', - 'react/no-unstable-nested-components': 'warn', - 'react/no-unknown-property': ['error', { ignore: ['css'] }], // Emotion - 'react/self-closing-comp': 'warn', - ...disabledRules, - }, - // TODO: Enable when we're able to make the appropriate changes. - // overrides: [ - // { - // files: TEST_FILES, - // extends: [...extensions, 'plugin:jest/recommended', 'plugin:testing-library/react'], - // plugins: ['testing-library'], - // }, - // ], - settings: { - react: { - version: 'detect', - }, - }, -}; diff --git a/packages/eslint-config-custom/rules/variables.js b/packages/eslint-config-custom/rules/variables.js deleted file mode 100644 index 75ac6639a1a..00000000000 --- a/packages/eslint-config-custom/rules/variables.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - rules: { - 'no-label-var': 'error', - 'no-undef-init': 'warn', - 'no-unused-vars': [ - 'error', - { - args: 'after-used', - argsIgnorePattern: '^_', - ignoreRestSiblings: true, - vars: 'all', - varsIgnorePattern: '^_', - }, - ], - 'unused-imports/no-unused-imports': 'error', - }, -}; diff --git a/packages/eslint-config-custom/typescript.js b/packages/eslint-config-custom/typescript.js deleted file mode 100644 index 9dc2d58db70..00000000000 --- a/packages/eslint-config-custom/typescript.js +++ /dev/null @@ -1,93 +0,0 @@ -const { resolve } = require('node:path'); -const fs = require('node:fs'); -const { TYPESCRIPT_FILES } = require('./_constants'); -const requirePackage = require('./utils/require-package'); -const noUnusedVarsConfig = require('./rules/variables').rules['no-unused-vars']; - -requirePackage('typescript', 'typescript'); - -const cwd = process.cwd(); - -// Prefer tsconfig.lint.json, if it exists. Otherwise, use tsconfig.json. -let project = resolve(cwd, 'tsconfig.lint.json'); - -if (!fs.existsSync(project)) { - project = resolve(cwd, 'tsconfig.json'); -} - -const disabledRules = { - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/no-unsafe-declaration-merging': 'off', - - // TODO: All rules below should be set to their defaults - // when we're able to make the appropriate changes. - '@typescript-eslint/await-thenable': 'warn', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-misused-promises': 'warn', - '@typescript-eslint/no-floating-promises': [ - 'warn', - { - ignoreVoid: true, - }, - ], - '@typescript-eslint/no-redundant-type-constituents': 'warn', - '@typescript-eslint/no-unsafe-enum-comparison': 'warn', - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - '@typescript-eslint/require-await': 'warn', -}; - -module.exports = { - parserOptions: { - project, - }, - settings: { - 'import/resolver': { - typescript: { - project, - }, - }, - }, - overrides: [ - { - files: TYPESCRIPT_FILES, - extends: [ - require.resolve('./_base'), - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - ], - rules: { - '@typescript-eslint/ban-ts-comment': [ - `warn`, - { - 'ts-ignore': 'allow-with-description', - 'ts-expect-error': 'allow-with-description', - 'ts-check': 'allow-with-description', - }, - ], - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - disallowTypeAnnotations: true, - fixStyle: 'separate-type-imports', - }, - ], - '@typescript-eslint/no-floating-promises': [ - 'error', - { - ignoreVoid: true, - }, - ], - '@typescript-eslint/no-non-null-assertion': 'warn', - '@typescript-eslint/no-unused-vars': noUnusedVarsConfig, - ...disabledRules, - }, - }, - ], -}; diff --git a/packages/eslint-config-custom/utils/require-package.js b/packages/eslint-config-custom/utils/require-package.js deleted file mode 100644 index 6480a953f4a..00000000000 --- a/packages/eslint-config-custom/utils/require-package.js +++ /dev/null @@ -1,32 +0,0 @@ -// @ts-check -const pkgJson = require('../package.json'); - -const log = (message = '') => process.stderr.write(`${message}\n`); - -/** - * @returns {string} The name of the package manager. - */ -function readPackageManager() { - const match = process.env.npm_config_user_agent?.match(/^(?\w+)\//); - return match?.groups ? match.groups?.pm : 'npm'; -} - -/** - * @param {string} configName - * @param {string} packageName - */ -module.exports = (configName, packageName) => { - try { - require.resolve(packageName); - } catch (e) { - const packageManager = readPackageManager(); - const command = packageManager === 'yarn' ? 'add' : 'install'; - - log(`The \`${configName}\` config requires an optional peer dependency, which has not been installed.`); - log(); - log('To install it, run:'); - log(`- ${packageManager} ${command} ${packageName}@${pkgJson.peerDependencies[packageName]}`); - - process.exit(1); - } -}; diff --git a/packages/expo-passkeys/.eslintrc.js b/packages/expo-passkeys/.eslintrc.js deleted file mode 100644 index 0aab09b0b25..00000000000 --- a/packages/expo-passkeys/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/react'], - settings: { - 'import/ignore': ['node_modules/react-native/index\\.js$'], - }, - rules: { - 'no-restricted-imports': [ - 'error', - { - patterns: ['node:*'], - }, - ], - }, -}; diff --git a/packages/expo-passkeys/package.json b/packages/expo-passkeys/package.json index 756f4d19492..ebf59aea98c 100644 --- a/packages/expo-passkeys/package.json +++ b/packages/expo-passkeys/package.json @@ -25,7 +25,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "open:android": "open -a \"Android Studio\" example/android", "open:ios": "xed example/ios", "publish:local": "pnpm yalc push --replace --sig" diff --git a/packages/expo/.eslintrc.js b/packages/expo/.eslintrc.js deleted file mode 100644 index 8a9dfc8a72f..00000000000 --- a/packages/expo/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - settings: { - 'import/ignore': ['node_modules/react-native/index\\.js$'], - }, -}; diff --git a/packages/expo/package.json b/packages/expo/package.json index 6275b868925..229f7c9766a 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -61,7 +61,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "publish:local": "pnpm yalc push --replace --sig", "test": "vitest run", "test:watch": "vitest watch" @@ -76,7 +76,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@clerk/expo-passkeys": "workspace:*", "@types/base-64": "^1.0.2", "expo-auth-session": "^5.4.0", diff --git a/packages/expo/src/local-credentials/useLocalCredentials/useLocalCredentials.ts b/packages/expo/src/local-credentials/useLocalCredentials/useLocalCredentials.ts index 472cb04cd85..1a032679f02 100644 --- a/packages/expo/src/local-credentials/useLocalCredentials/useLocalCredentials.ts +++ b/packages/expo/src/local-credentials/useLocalCredentials/useLocalCredentials.ts @@ -88,7 +88,7 @@ const useUserOwnsCredentials = ({ storeKey }: { storeKey: string }) => { useEffect(() => { let ignore = false; - getItemAsync(storeKey) + void getItemAsync(storeKey) .catch(() => null) .then(res => { if (ignore) { diff --git a/packages/expo/src/secure-store/__tests__/secure-store.test.ts b/packages/expo/src/secure-store/__tests__/secure-store.test.ts index 087563f8e17..c8471fc8294 100644 --- a/packages/expo/src/secure-store/__tests__/secure-store.test.ts +++ b/packages/expo/src/secure-store/__tests__/secure-store.test.ts @@ -126,7 +126,7 @@ describe('SecureStore', () => { test('sets a value async', async () => { const secureStore = createSecureStore(); - secureStore.set(KEY, 'value'); + void secureStore.set(KEY, 'value'); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); await vi.runAllTimersAsync(); @@ -135,12 +135,12 @@ describe('SecureStore', () => { test('sets the correct last value when many sets happen almost at the same time', async () => { const secureStore = createSecureStore(); - secureStore.set(KEY, 'value'); - secureStore.set(KEY, 'value2'); - secureStore.set(KEY, 'value3'); - secureStore.set(KEY, 'value4'); - secureStore.set(KEY, 'value5'); - secureStore.set(KEY, 'value6'); + void secureStore.set(KEY, 'value'); + void secureStore.set(KEY, 'value2'); + void secureStore.set(KEY, 'value3'); + void secureStore.set(KEY, 'value4'); + void secureStore.set(KEY, 'value5'); + void secureStore.set(KEY, 'value6'); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); await vi.runAllTimersAsync(); @@ -178,7 +178,7 @@ describe('SecureStore', () => { mocks.deleteItemAsync.mockImplementation(deleteItemAsync); const secureStore = createSecureStore(); - secureStore.set(KEY, JSON.stringify(DUMMY_TEST_LARGE_JSON)); + void secureStore.set(KEY, JSON.stringify(DUMMY_TEST_LARGE_JSON)); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); @@ -226,9 +226,9 @@ describe('SecureStore', () => { mocks.deleteItemAsync.mockImplementation(deleteItemAsync); const secureStore = createSecureStore(); - secureStore.set(KEY, JSON.stringify(DUMMY_TEST_LARGE_JSON)); + void secureStore.set(KEY, JSON.stringify(DUMMY_TEST_LARGE_JSON)); await vi.runAllTimersAsync(); - secureStore.set(KEY, 'new value'); + void secureStore.set(KEY, 'new value'); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); @@ -289,7 +289,7 @@ describe('SecureStore', () => { mocks.deleteItemAsync.mockImplementation(deleteItemAsync); const secureStore = createSecureStore(); - secureStore.set(KEY, 'new value'); + void secureStore.set(KEY, 'new value'); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); await vi.runAllTimersAsync(); @@ -334,7 +334,7 @@ describe('SecureStore', () => { mocks.deleteItemAsync.mockImplementation(deleteItemAsync); const secureStore = createSecureStore(); - secureStore.set(KEY, 'new value'); + void secureStore.set(KEY, 'new value'); await vi.runAllTimersAsync(); const value = secureStore.get(KEY); await vi.runAllTimersAsync(); diff --git a/packages/express/.eslintrc.js b/packages/express/.eslintrc.js deleted file mode 100644 index 7258885b20b..00000000000 --- a/packages/express/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/jest'], -}; diff --git a/packages/express/package.json b/packages/express/package.json index 327beef2db9..4fa1a4b8163 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -46,7 +46,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", diff --git a/packages/express/tsconfig.json b/packages/express/tsconfig.json index 32969ca7c37..00aa5bab856 100644 --- a/packages/express/tsconfig.json +++ b/packages/express/tsconfig.json @@ -19,5 +19,5 @@ "types": ["jest"] }, "exclude": ["node_modules"], - "include": ["src/index.ts", "src/global.d.ts"] + "include": ["src"] } diff --git a/packages/express/tsconfig.lint.json b/packages/express/tsconfig.lint.json deleted file mode 100644 index 9b624091911..00000000000 --- a/packages/express/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/packages/fastify/.eslintrc.js b/packages/fastify/.eslintrc.js deleted file mode 100644 index 7258885b20b..00000000000 --- a/packages/fastify/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript', '@clerk/custom/jest'], -}; diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 887088b4c4d..1efddaa223b 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -32,7 +32,7 @@ "build": "tsup --env.NODE_ENV production", "clean": "rimraf ./dist", "dev": "tsup --watch", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", @@ -47,7 +47,6 @@ "fastify-plugin": "^5.0.1" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "fastify": "^5.0.0" }, "peerDependencies": { diff --git a/packages/fastify/src/test/utils.ts b/packages/fastify/src/test/utils.ts index 1fe9881726a..2680e51a9ad 100644 --- a/packages/fastify/src/test/utils.ts +++ b/packages/fastify/src/test/utils.ts @@ -4,17 +4,17 @@ import type { FastifyInstance } from 'fastify'; export function createFastifyInstanceMock() { const fastify = { decorateReply: jest.fn((name: string, fn) => { - // @ts-ignore + // @ts-expect-error - TS7053 fastify[name] = fn; }), addHook: jest.fn((name: string, fn) => { - // @ts-ignore + // @ts-expect-error - TS7053 fastify[name] = fastify[name] || []; - // @ts-ignore + // @ts-expect-error - TS7053 fastify[name].push(fn); }), decorateRequest: jest.fn((name: string, fn) => { - // @ts-ignore + // @ts-expect-error - TS7053 fastify[name] = fn; }), } as any as FastifyInstance; diff --git a/packages/fastify/tsconfig.json b/packages/fastify/tsconfig.json index 5fbaf3766c4..57b39d50251 100644 --- a/packages/fastify/tsconfig.json +++ b/packages/fastify/tsconfig.json @@ -15,6 +15,5 @@ "resolveJsonModule": true, "declarationDir": "dist/types" }, - "include": ["src/index.ts", "src/global.d.ts"], - "exclude": ["node_modules"] + "include": ["src"] } diff --git a/packages/fastify/tsconfig.lint.json b/packages/fastify/tsconfig.lint.json deleted file mode 100644 index b90fc83e04c..00000000000 --- a/packages/fastify/tsconfig.lint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"] -} diff --git a/packages/localizations/.eslintrc.js b/packages/localizations/.eslintrc.js deleted file mode 100644 index 36a013910c7..00000000000 --- a/packages/localizations/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], -}; diff --git a/packages/localizations/package.json b/packages/localizations/package.json index 86ca1e90adf..b0e83d15f4e 100644 --- a/packages/localizations/package.json +++ b/packages/localizations/package.json @@ -99,14 +99,12 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "generate": "tsc src/utils/generate.ts && node src/utils/generate.js && prettier --write src/*.ts", - "lint": "eslint src/" + "lint": "eslint src" }, "dependencies": { "@clerk/types": "workspace:^" }, - "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*" - }, + "devDependencies": {}, "engines": { "node": ">=18.17.0" }, diff --git a/packages/localizations/src/utils/generate.ts b/packages/localizations/src/utils/generate.ts index 72a980a35b2..7f7d4c03a68 100644 --- a/packages/localizations/src/utils/generate.ts +++ b/packages/localizations/src/utils/generate.ts @@ -96,14 +96,14 @@ function sortObject(obj: any) { const sortedObj = {}; if (Object.prototype.hasOwnProperty.call(obj, 'locale')) { - // @ts-ignore + // @ts-expect-error - TS7053 sortedObj['locale'] = obj['locale']; } Object.keys(obj) .sort() .forEach(key => { if (key !== 'locale') { - // @ts-ignore + // @ts-expect-error - TS7053 sortedObj[key] = sortObject(obj[key]); } }); diff --git a/packages/nextjs/.eslintrc.js b/packages/nextjs/.eslintrc.js deleted file mode 100644 index 65f7d3693a0..00000000000 --- a/packages/nextjs/.eslintrc.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - rules: { - 'import/no-unresolved': ['error', { ignore: ['^#'] }], - 'turbo/no-undeclared-env-vars': ['error', { allowList: ['__NEXT_ROUTER_BASEPATH'] }], - }, - overrides: [ - { - files: ['./src/client-boundary/NextOptionsContext.tsx'], - rules: { - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - }, - }, - ], -}; diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 29dd4329846..f70be6c164e 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -75,7 +75,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@types/crypto-js": "4.2.2", "next": "^14.2.20" }, diff --git a/packages/nextjs/src/app-router/client/ClerkProvider.tsx b/packages/nextjs/src/app-router/client/ClerkProvider.tsx index 57b3f7db58f..945021dbc64 100644 --- a/packages/nextjs/src/app-router/client/ClerkProvider.tsx +++ b/packages/nextjs/src/app-router/client/ClerkProvider.tsx @@ -23,6 +23,7 @@ import { useAwaitableReplace } from './useAwaitableReplace'; * Note: Using lazy() with Suspense instead of dynamic is not possible as React will throw a hydration error when `ClerkProvider` wraps `...` */ const LazyCreateKeylessApplication = dynamic(() => + // eslint-disable-next-line import/no-unresolved import('./keyless-creator-reader.js').then(m => m.KeylessCreatorOrReader), ); diff --git a/packages/nextjs/src/app-router/client/keyless-cookie-sync.tsx b/packages/nextjs/src/app-router/client/keyless-cookie-sync.tsx index 966feffb782..a2d926408d4 100644 --- a/packages/nextjs/src/app-router/client/keyless-cookie-sync.tsx +++ b/packages/nextjs/src/app-router/client/keyless-cookie-sync.tsx @@ -9,6 +9,7 @@ import { canUseKeyless } from '../../utils/feature-flags'; export function KeylessCookieSync(props: PropsWithChildren) { useEffect(() => { if (canUseKeyless) { + // eslint-disable-next-line import/no-unresolved void import('../keyless-actions.js').then(m => m.syncKeylessConfigAction({ ...props, diff --git a/packages/nextjs/src/app-router/keyless-actions.ts b/packages/nextjs/src/app-router/keyless-actions.ts index 1512a85aa24..5fa989051be 100644 --- a/packages/nextjs/src/app-router/keyless-actions.ts +++ b/packages/nextjs/src/app-router/keyless-actions.ts @@ -35,12 +35,14 @@ export async function createOrReadKeylessAction(): Promise m.createOrReadKeyless()); if (!result) { return null; } + // eslint-disable-next-line import/no-unresolved const { keylessLogger, createKeylessModeMessage } = await import('../server/keyless-log-cache.js'); /** @@ -70,6 +72,7 @@ export async function deleteKeylessAction() { return; } + // eslint-disable-next-line import/no-unresolved await import('../server/keyless-node.js').then(m => m.removeKeyless()); return; } diff --git a/packages/nextjs/src/app-router/server/ClerkProvider.tsx b/packages/nextjs/src/app-router/server/ClerkProvider.tsx index 60983345579..49a344a7117 100644 --- a/packages/nextjs/src/app-router/server/ClerkProvider.tsx +++ b/packages/nextjs/src/app-router/server/ClerkProvider.tsx @@ -27,7 +27,7 @@ const getNonceFromCSPHeader = React.cache(async function getNonceFromCSPHeader() const onlyTry = (cb: () => unknown) => { try { cb(); - } catch (e) { + } catch { // ignore } }; @@ -81,6 +81,7 @@ export async function ClerkProvider( let [shouldRunAsKeyless, runningWithClaimedKeys] = [false, false]; if (canUseKeyless) { + // eslint-disable-next-line import/no-unresolved const locallyStorePublishableKey = await import('../../server/keyless-node.js') .then(mod => mod.safeParseClerkFile()?.publishableKey) .catch(() => undefined); @@ -92,8 +93,10 @@ export async function ClerkProvider( if (shouldRunAsKeyless) { // NOTE: Create or read keys on every render. Usually this means only on hard refresh or hard navigations. + // eslint-disable-next-line import/no-unresolved const newOrReadKeys = await import('../../server/keyless-node.js').then(mod => mod.createOrReadKeyless()); const { keylessLogger, createConfirmationMessage, createKeylessModeMessage } = await import( + // eslint-disable-next-line import/no-unresolved '../../server/keyless-log-cache.js' ); @@ -125,6 +128,7 @@ export async function ClerkProvider( output = clientProvider; } else { + // eslint-disable-next-line import/no-unresolved const KeylessCookieSync = await import('../client/keyless-cookie-sync.js').then(mod => mod.KeylessCookieSync); const headerStore = await headers(); diff --git a/packages/nextjs/src/app-router/server/auth.ts b/packages/nextjs/src/app-router/server/auth.ts index 403dbf2710c..4a475655839 100644 --- a/packages/nextjs/src/app-router/server/auth.ts +++ b/packages/nextjs/src/app-router/server/auth.ts @@ -19,6 +19,7 @@ export interface AuthFn { } export const auth: AuthFn = async () => { + // eslint-disable-next-line @typescript-eslint/no-require-imports require('server-only'); const request = await buildRequestLike(); @@ -54,6 +55,7 @@ export const auth: AuthFn = async () => { }; auth.protect = async (...args: any[]) => { + // eslint-disable-next-line @typescript-eslint/no-require-imports require('server-only'); const request = await buildRequestLike(); diff --git a/packages/nextjs/src/app-router/server/currentUser.ts b/packages/nextjs/src/app-router/server/currentUser.ts index 1e7426843c6..80ae55827f6 100644 --- a/packages/nextjs/src/app-router/server/currentUser.ts +++ b/packages/nextjs/src/app-router/server/currentUser.ts @@ -4,6 +4,7 @@ import { clerkClient } from '../../server/clerkClient'; import { auth } from './auth'; export async function currentUser(): Promise { + // eslint-disable-next-line @typescript-eslint/no-require-imports require('server-only'); const { userId } = await auth(); diff --git a/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx b/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx index 52791c2f75b..402dce3fb17 100644 --- a/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx +++ b/packages/nextjs/src/client-boundary/hooks/useEnforceCatchAllRoute.tsx @@ -77,7 +77,7 @@ To resolve this, ensure that the middleware does not protect the catch-all route window.location.pathname }/${component}_clerk_catchall_check_${Date.now()}`; res = await fetch(url, { signal: ac.signal }); - } catch (e) { + } catch { // no op } if (res?.status === 404) { diff --git a/packages/nextjs/src/client-boundary/hooks/usePathnameWithoutCatchAll.tsx b/packages/nextjs/src/client-boundary/hooks/usePathnameWithoutCatchAll.tsx index 8be189c692d..bfef305a89d 100644 --- a/packages/nextjs/src/client-boundary/hooks/usePathnameWithoutCatchAll.tsx +++ b/packages/nextjs/src/client-boundary/hooks/usePathnameWithoutCatchAll.tsx @@ -21,9 +21,9 @@ export const usePathnameWithoutCatchAll = () => { // require is used to avoid importing next/navigation when the pages router is used, // as it will throw an error. We cannot use dynamic import as it is async // and we need the hook to be sync - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const usePathname = require('next/navigation').usePathname; - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const useParams = require('next/navigation').useParams; // Get the pathname that includes any named or catch all params diff --git a/packages/nextjs/src/global.d.ts b/packages/nextjs/src/global.d.ts index 3337919f0f3..5956a81bc90 100644 --- a/packages/nextjs/src/global.d.ts +++ b/packages/nextjs/src/global.d.ts @@ -22,7 +22,7 @@ interface Window { declare const PACKAGE_NAME: string; declare const PACKAGE_VERSION: string; -declare module globalThis { +declare namespace globalThis { // eslint-disable-next-line no-var var __clerk_internal_keyless_logger: | { diff --git a/packages/nextjs/src/runtime/node/safe-node-apis.js b/packages/nextjs/src/runtime/node/safe-node-apis.js index a5f4e694aee..5be87334100 100644 --- a/packages/nextjs/src/runtime/node/safe-node-apis.js +++ b/packages/nextjs/src/runtime/node/safe-node-apis.js @@ -1,7 +1,9 @@ /** * This file is used for conditional imports to mitigate bundling issues with Next.js server actions on version prior to 14.1.0. */ +// eslint-disable-next-line @typescript-eslint/no-require-imports const { existsSync, writeFileSync, readFileSync, appendFileSync, mkdirSync, rmSync } = require('node:fs'); +// eslint-disable-next-line @typescript-eslint/no-require-imports const path = require('node:path'); const fs = { existsSync, diff --git a/packages/nextjs/src/server/__tests__/clerkMiddleware.test.ts b/packages/nextjs/src/server/__tests__/clerkMiddleware.test.ts index ef12dcde472..5f36f242d45 100644 --- a/packages/nextjs/src/server/__tests__/clerkMiddleware.test.ts +++ b/packages/nextjs/src/server/__tests__/clerkMiddleware.test.ts @@ -47,6 +47,7 @@ afterAll(() => { // Removing this mock will cause the clerkMiddleware tests to fail due to missing publishable key // This mock SHOULD exist before the imports +// eslint-disable-next-line import/no-unresolved vi.mock(import('../constants.js'), async importOriginal => { const actual = await importOriginal(); return { @@ -84,27 +85,25 @@ describe('ClerkMiddleware type tests', () => { it('fails for unknown props', () => { // @ts-expect-error - unknown prop - clerkMiddlewareMock({ hello: '' }); + void clerkMiddlewareMock({ hello: '' }); }); it('can be used with a handler and an optional options object', () => { clerkMiddlewareMock( - async (auth, request, event) => { + async (auth, request) => { const { getToken } = await auth(); await getToken(); request.cookies.clear(); - event.sourcePage; }, { secretKey: '', publishableKey: '' }, ); }); it('can be used with just a handler and an optional options object', () => { - clerkMiddlewareMock(async (auth, request, event) => { + clerkMiddlewareMock(async (auth, request) => { const { getToken } = await auth(); await getToken(); request.cookies.clear(); - event.sourcePage; }); }); diff --git a/packages/nextjs/src/server/clerkClient.ts b/packages/nextjs/src/server/clerkClient.ts index 907d7db1e66..cb07a9073ce 100644 --- a/packages/nextjs/src/server/clerkClient.ts +++ b/packages/nextjs/src/server/clerkClient.ts @@ -19,6 +19,7 @@ const clerkClient = async () => { requestData = decryptClerkRequestData(encryptedRequestData); } catch (err) { if (err && isPrerenderingBailout(err)) { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw err; } } diff --git a/packages/nextjs/src/server/headers-utils.ts b/packages/nextjs/src/server/headers-utils.ts index 9aa4f98f341..350dac4234f 100644 --- a/packages/nextjs/src/server/headers-utils.ts +++ b/packages/nextjs/src/server/headers-utils.ts @@ -38,7 +38,7 @@ export function isNextRequest(val: unknown): val is NextRequest { typeof nextUrl?.searchParams.get === 'function' && typeof cookies?.get === 'function' ); - } catch (e) { + } catch { return false; } } @@ -47,7 +47,7 @@ export function isRequestWebAPI(val: unknown): val is Request { try { const { headers } = (val || {}) as Request; return typeof headers?.get === 'function'; - } catch (e) { + } catch { return false; } } diff --git a/packages/nextjs/src/server/keyless-node.ts b/packages/nextjs/src/server/keyless-node.ts index 9b5a4b74686..a72b9de50cc 100644 --- a/packages/nextjs/src/server/keyless-node.ts +++ b/packages/nextjs/src/server/keyless-node.ts @@ -21,7 +21,7 @@ const CLERK_HIDDEN = '.clerk'; const CLERK_LOCK = 'clerk.lock'; const throwMissingFsModule = () => { - throw "Clerk: fsModule.fs is missing. This is an internal error. Please contact Clerk's support."; + throw new Error("Clerk: fsModule.fs is missing. This is an internal error. Please contact Clerk's support."); }; const safeNodeRuntimeFs = () => { @@ -111,7 +111,7 @@ const unlockFileWriting = () => { try { rmSync(CLERK_LOCK, { force: true, recursive: true }); - } catch (e) { + } catch { // Simply ignore if the removal of the directory/file fails } @@ -199,7 +199,7 @@ function removeKeyless() { try { rmSync(generatePath(), { force: true, recursive: true }); - } catch (e) { + } catch { // Simply ignore if the removal of the directory/file fails } diff --git a/packages/nextjs/src/server/nextErrors.ts b/packages/nextjs/src/server/nextErrors.ts index 466f9ab4a4c..034132c17db 100644 --- a/packages/nextjs/src/server/nextErrors.ts +++ b/packages/nextjs/src/server/nextErrors.ts @@ -10,7 +10,7 @@ const CONTROL_FLOW_ERROR = { * In-house implementation of `notFound()` * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/not-found.ts */ -const LEGACY_NOT_FOUND_ERROR_CODE = 'NEXT_NOT_FOUND' as const; +const LEGACY_NOT_FOUND_ERROR_CODE = 'NEXT_NOT_FOUND'; type LegacyNotFoundError = Error & { digest: typeof LEGACY_NOT_FOUND_ERROR_CODE; @@ -35,7 +35,7 @@ const HTTPAccessErrorStatusCodes = { const ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatusCodes)); -export const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK' as const; +export const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'; export type HTTPAccessFallbackError = Error & { digest: `${typeof HTTP_ERROR_FALLBACK_ERROR_CODE};${string}`; diff --git a/packages/nextjs/src/server/utils.ts b/packages/nextjs/src/server/utils.ts index ede5acf23e7..df09682bd8a 100644 --- a/packages/nextjs/src/server/utils.ts +++ b/packages/nextjs/src/server/utils.ts @@ -231,7 +231,7 @@ export function decryptClerkRequestData( try { return decryptData(encryptedRequestData, maybeKeylessEncryptionKey); - } catch (err) { + } catch { /** * There is a great chance when running in Keyless mode that the above fails, * because the keys hot-swapped and the Next.js dev server has not yet fully rebuilt middleware and routes. @@ -241,7 +241,7 @@ export function decryptClerkRequestData( if (canUseKeyless) { try { return decryptData(encryptedRequestData, KEYLESS_ENCRYPTION_KEY); - } catch (e) { + } catch { throwInvalidEncryptionKey(); } } diff --git a/packages/nextjs/src/utils/invalidateNextRouterCache.ts b/packages/nextjs/src/utils/invalidateNextRouterCache.ts index d4011a5479d..27024c18e59 100644 --- a/packages/nextjs/src/utils/invalidateNextRouterCache.ts +++ b/packages/nextjs/src/utils/invalidateNextRouterCache.ts @@ -51,7 +51,7 @@ export const invalidateNextRouterCache = () => { try { invalidate((window as any).next.router.sdc); invalidate((window as any).next.router.sbc); - } catch (e) { + } catch { return; } }; diff --git a/packages/nextjs/src/utils/logFormatter.ts b/packages/nextjs/src/utils/logFormatter.ts index 53d79584ff2..51ed7996ffa 100644 --- a/packages/nextjs/src/utils/logFormatter.ts +++ b/packages/nextjs/src/utils/logFormatter.ts @@ -8,7 +8,7 @@ const maskSecretKey = (str: any) => { try { return (str || '').replace(/^(sk_(live|test)_)(.+?)(.{3})$/, '$1*********$4'); - } catch (e) { + } catch { return ''; } }; diff --git a/packages/nuxt/.eslintrc.cjs b/packages/nuxt/.eslintrc.cjs deleted file mode 100644 index 20f28714edb..00000000000 --- a/packages/nuxt/.eslintrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript'], -}; diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 4ac63a8e88f..7e857bb152a 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -51,7 +51,7 @@ "scripts": { "build": "tsup", "dev": "tsup --watch", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack . --ignore-rules no-resolution cjs-resolves-to-esm", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index 114b4918c71..454022d560d 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -7,6 +7,7 @@ import { createResolver, defineNuxtModule, updateRuntimeConfig, + // eslint-disable-next-line import/no-unresolved -- FIXME: eslint@9 } from '@nuxt/kit'; export type ModuleOptions = Omit & { diff --git a/packages/nuxt/src/runtime/plugin.ts b/packages/nuxt/src/runtime/plugin.ts index 01a164b9100..09e8f81f570 100644 --- a/packages/nuxt/src/runtime/plugin.ts +++ b/packages/nuxt/src/runtime/plugin.ts @@ -1,6 +1,8 @@ import { setClerkJsLoadingErrorPackageName } from '@clerk/shared/loadClerkJsScript'; import { clerkPlugin } from '@clerk/vue'; +// eslint-disable-next-line import/no-unresolved -- FIXME: eslint@9 import { setErrorThrowerOptions } from '@clerk/vue/internal'; +// eslint-disable-next-line import/no-unresolved -- FIXME: eslint@9 import { defineNuxtPlugin, navigateTo, useRuntimeConfig, useState } from 'nuxt/app'; setErrorThrowerOptions({ packageName: PACKAGE_NAME }); diff --git a/packages/nuxt/src/runtime/server/clerkClient.ts b/packages/nuxt/src/runtime/server/clerkClient.ts index ad19daf1e68..f623a273a33 100644 --- a/packages/nuxt/src/runtime/server/clerkClient.ts +++ b/packages/nuxt/src/runtime/server/clerkClient.ts @@ -3,7 +3,6 @@ import { isTruthy } from '@clerk/shared/underscore'; import type { H3Event } from 'h3'; // @ts-expect-error: Nitro import. Handled by Nuxt. -// eslint-disable-next-line import/no-unresolved import { useRuntimeConfig } from '#imports'; export function clerkClient(event: H3Event) { diff --git a/packages/react-router/.eslintrc.cjs b/packages/react-router/.eslintrc.cjs deleted file mode 100644 index 15b29bf0e65..00000000000 --- a/packages/react-router/.eslintrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], -}; diff --git a/packages/react-router/package.json b/packages/react-router/package.json index b47a51f4cd3..7610589d007 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -65,7 +65,7 @@ "scripts": { "build": "tsup", "dev": "tsup --watch", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack . --ignore-rules cjs-resolves-to-esm", "lint:publint": "publint", "publish:local": "pnpm dlx yalc push --replace --sig", @@ -81,7 +81,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@types/cookie": "^0.6.0", "esbuild-plugin-file-path-extensions": "^2.1.3", "react-router": "7.1.2" diff --git a/packages/react-router/src/client/useAwaitableNavigate.tsx b/packages/react-router/src/client/useAwaitableNavigate.tsx index 597856f686d..d979035cb78 100644 --- a/packages/react-router/src/client/useAwaitableNavigate.tsx +++ b/packages/react-router/src/client/useAwaitableNavigate.tsx @@ -23,7 +23,7 @@ export const useAwaitableNavigate = () => { return (to: string, opts?: NavigateOptions) => { return new Promise(res => { resolveFunctionsRef.current.push(res); - navigate(to, opts); + void navigate(to, opts); }); }; }; diff --git a/packages/react-router/src/ssr/authenticateRequest.ts b/packages/react-router/src/ssr/authenticateRequest.ts index 27c23da94e2..08c7fec72a7 100644 --- a/packages/react-router/src/ssr/authenticateRequest.ts +++ b/packages/react-router/src/ssr/authenticateRequest.ts @@ -36,6 +36,7 @@ export async function authenticateRequest( const hasLocationHeader = requestState.headers.get('location'); if (hasLocationHeader) { // triggering a handshake redirect + // eslint-disable-next-line @typescript-eslint/only-throw-error throw new Response(null, { status: 307, headers: requestState.headers }); } diff --git a/packages/react-router/src/ssr/rootAuthLoader.ts b/packages/react-router/src/ssr/rootAuthLoader.ts index 2a3e2760877..64a0c309533 100644 --- a/packages/react-router/src/ssr/rootAuthLoader.ts +++ b/packages/react-router/src/ssr/rootAuthLoader.ts @@ -71,7 +71,7 @@ export const rootAuthLoader: RootAuthLoader = async ( // clone and try to inject requestState into all json-like responses // if this fails, the user probably didn't return a json object or a valid json string return injectRequestStateIntoResponse(handlerResult, requestState, args.context); - } catch (e) { + } catch { throw new Error(invalidRootLoaderCallbackReturn); } } @@ -85,7 +85,7 @@ export const rootAuthLoader: RootAuthLoader = async ( requestState, args.context, ); - } catch (e) { + } catch { throw new Error(invalidRootLoaderCallbackReturn); } } diff --git a/packages/react-router/src/utils/env.ts b/packages/react-router/src/utils/env.ts index d42c7a0831b..078a503a245 100644 --- a/packages/react-router/src/utils/env.ts +++ b/packages/react-router/src/utils/env.ts @@ -47,7 +47,7 @@ export const getEnvVariable = (name: string, context: AppLoadContext | undefined // Cloudflare workers try { return globalThis[name as keyof typeof globalThis]; - } catch (_) { + } catch { // This will raise an error in Cloudflare Pages } diff --git a/packages/react/.eslintrc.js b/packages/react/.eslintrc.js deleted file mode 100644 index 829162d8632..00000000000 --- a/packages/react/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/react'], -}; diff --git a/packages/react/package.json b/packages/react/package.json index d6f0f1e3fff..9882940b63e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -67,7 +67,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", @@ -80,7 +80,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@clerk/localizations": "workspace:*", "@clerk/themes": "workspace:*", "@types/semver": "^7.5.8" diff --git a/packages/react/src/components/controlComponents.tsx b/packages/react/src/components/controlComponents.tsx index 09359b8fcaf..e8b71d770d8 100644 --- a/packages/react/src/components/controlComponents.tsx +++ b/packages/react/src/components/controlComponents.tsx @@ -140,7 +140,6 @@ export const Protect = ({ children, fallback, ...restAuthorizedParams }: Protect */ return authorized; }; -/* eslint-enable react-hooks/rules-of-hooks */ export const RedirectToSignIn = withClerk(({ clerk, ...props }: WithClerkProp) => { const { client, session } = clerk; diff --git a/packages/react/src/global.d.ts b/packages/react/src/global.d.ts index e411d835dcd..8bb5a65baed 100644 --- a/packages/react/src/global.d.ts +++ b/packages/react/src/global.d.ts @@ -3,7 +3,7 @@ declare const PACKAGE_VERSION: string; declare const JS_PACKAGE_VERSION: string; declare const __DEV__: boolean; -declare module globalThis { +declare namespace globalThis { // eslint-disable-next-line no-var var __BUILD_DISABLE_RHC__: boolean; } diff --git a/packages/react/src/hooks/__tests__/useAuth.test.tsx b/packages/react/src/hooks/__tests__/useAuth.test.tsx index b709f46781e..bab1bd2f23e 100644 --- a/packages/react/src/hooks/__tests__/useAuth.test.tsx +++ b/packages/react/src/hooks/__tests__/useAuth.test.tsx @@ -170,7 +170,7 @@ describe('useDerivedAuth', () => { }; renderHook(() => useDerivedAuth(authObject)); - // eslint-disable-next-line @typescript-eslint/unbound-method + // eslint-disable-next-line jest/unbound-method expect(errorThrower.throw).toHaveBeenCalledWith(invalidStateError); }); @@ -186,7 +186,7 @@ describe('useDerivedAuth', () => { } = renderHook(() => useDerivedAuth(authObject)); if (!current.userId) { - throw 'Invalid state'; + throw new Error('Invalid state'); } const result = current.has({ permission: 'test' }); diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 66c8bae03f6..269c4b32f03 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -8,7 +8,6 @@ export * from './components'; export * from './contexts'; export * from './hooks'; -export { useEmailLink } from './hooks/useEmailLink'; export type { BrowserClerk, ClerkProp, HeadlessBrowserClerk, ClerkProviderProps } from './types'; setErrorThrowerOptions({ packageName: PACKAGE_NAME }); diff --git a/packages/react/src/utils/childrenUtils.tsx b/packages/react/src/utils/childrenUtils.tsx index 7207ac23290..bfde8c9be28 100644 --- a/packages/react/src/utils/childrenUtils.tsx +++ b/packages/react/src/utils/childrenUtils.tsx @@ -8,7 +8,7 @@ export const assertSingleChild = (name: 'SignInButton' | 'SignUpButton' | 'SignOutButton' | 'SignInWithMetamaskButton') => { try { return React.Children.only(children); - } catch (e) { + } catch { return errorThrower.throw(multipleChildrenInButtonComponent(name)); } }; diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index b6a9139cc87..90e5d8cc9b4 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -21,6 +21,5 @@ "strict": true, "target": "ES2019" }, - "include": ["src"], - "exclude": ["src/**/*.test.ts", "src/**/*.test.tsx"] + "include": ["src"] } diff --git a/packages/react/tsconfig.lint.json b/packages/react/tsconfig.lint.json deleted file mode 100644 index 9b624091911..00000000000 --- a/packages/react/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/packages/remix/.eslintrc.js b/packages/remix/.eslintrc.js deleted file mode 100644 index adccc5f8ab0..00000000000 --- a/packages/remix/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - overrides: [ - { - files: ['./src/client/RemixOptionsContext.tsx'], - rules: { - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - }, - }, - ], -}; diff --git a/packages/remix/package.json b/packages/remix/package.json index f5574648624..c0a6a42490e 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -67,7 +67,7 @@ "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig" @@ -81,7 +81,6 @@ "tslib": "catalog:repo" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@remix-run/react": "^2.0.0", "@remix-run/server-runtime": "^2.0.0", "@types/cookie": "^0.6.0" diff --git a/packages/remix/src/ssr/authenticateRequest.ts b/packages/remix/src/ssr/authenticateRequest.ts index 27c23da94e2..08c7fec72a7 100644 --- a/packages/remix/src/ssr/authenticateRequest.ts +++ b/packages/remix/src/ssr/authenticateRequest.ts @@ -36,6 +36,7 @@ export async function authenticateRequest( const hasLocationHeader = requestState.headers.get('location'); if (hasLocationHeader) { // triggering a handshake redirect + // eslint-disable-next-line @typescript-eslint/only-throw-error throw new Response(null, { status: 307, headers: requestState.headers }); } diff --git a/packages/remix/src/ssr/rootAuthLoader.ts b/packages/remix/src/ssr/rootAuthLoader.ts index 5fba13fdfa8..253f17f54f3 100644 --- a/packages/remix/src/ssr/rootAuthLoader.ts +++ b/packages/remix/src/ssr/rootAuthLoader.ts @@ -83,7 +83,7 @@ export const rootAuthLoader: RootAuthLoader = async ( // clone and try to inject requestState into all json-like responses // if this fails, the user probably didn't return a json object or a valid json string return injectRequestStateIntoResponse(handlerResult, requestState, args.context); - } catch (e) { + } catch { throw new Error(invalidRootLoaderCallbackReturn); } } diff --git a/packages/remix/src/utils/utils.ts b/packages/remix/src/utils/utils.ts index fd6fcb770cd..fdd504bd3a0 100644 --- a/packages/remix/src/utils/utils.ts +++ b/packages/remix/src/utils/utils.ts @@ -73,7 +73,7 @@ export const getEnvVariable = (name: string, context: AppLoadContext | undefined // Cloudflare workers try { return globalThis[name as keyof typeof globalThis]; - } catch (_) { + } catch { // This will raise an error in Cloudflare Pages } diff --git a/packages/shared/.eslintrc.js b/packages/shared/.eslintrc.js deleted file mode 100644 index 369eacfa900..00000000000 --- a/packages/shared/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest', '@clerk/custom/react'], - overrides: [ - { - files: ['./src/utils/globs.ts'], - rules: { - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - }, - }, - ], -}; diff --git a/packages/shared/package.json b/packages/shared/package.json index d78ac0392ba..2f676f6f912 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -123,7 +123,7 @@ "dev": "tsup --watch", "dev:publish": "pnpm dev -- --env.publish", "postinstall": "node ./scripts/postinstall.mjs", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack .", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", @@ -141,7 +141,6 @@ "swr": "^2.2.0" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@types/glob-to-regexp": "0.4.4", "@types/js-cookie": "3.0.6", "cross-fetch": "^4.0.0", diff --git a/packages/shared/src/__tests__/loadClerkJsScript.test.ts b/packages/shared/src/__tests__/loadClerkJsScript.test.ts index 186298a2a9f..2e259e10292 100644 --- a/packages/shared/src/__tests__/loadClerkJsScript.test.ts +++ b/packages/shared/src/__tests__/loadClerkJsScript.test.ts @@ -21,8 +21,8 @@ describe('loadClerkJsScript(options)', () => { document.querySelector = jest.fn().mockReturnValue(null); }); - test('throws error when publishableKey is missing', () => { - expect(() => loadClerkJsScript({} as any)).rejects.toThrow( + test('throws error when publishableKey is missing', async () => { + await expect(() => loadClerkJsScript({} as any)).rejects.toThrow( '@clerk/clerk-react: Missing publishableKey. You can get your key at https://dashboard.clerk.com/last-active?path=api-keys.', ); }); diff --git a/packages/shared/src/__tests__/telemetry.test.ts b/packages/shared/src/__tests__/telemetry.test.ts index e1bf0884216..e2f1fad38be 100644 --- a/packages/shared/src/__tests__/telemetry.test.ts +++ b/packages/shared/src/__tests__/telemetry.test.ts @@ -283,7 +283,7 @@ describe('TelemetryCollector', () => { expect(fetchSpy).not.toHaveBeenCalled(); - randomSpy.mockRestore; + randomSpy.mockRestore(); }); test('generates unique key without credentials based on event payload', () => { diff --git a/packages/shared/src/date.ts b/packages/shared/src/date.ts index 73442627d13..29c07ffeae8 100644 --- a/packages/shared/src/date.ts +++ b/packages/shared/src/date.ts @@ -24,7 +24,7 @@ export function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = export function normalizeDate(d: Date | string | number): Date { try { return new Date(d || new Date()); - } catch (e) { + } catch { return new Date(); } } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index a546102cd32..aa98558a41d 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -20,7 +20,6 @@ export * from './deprecated'; export { deriveState } from './deriveState'; export * from './error'; export * from './file'; -export { handleValueOrFn } from './utils/handleValueOrFn'; export { isomorphicAtob } from './isomorphicAtob'; export { isomorphicBtoa } from './isomorphicBtoa'; export * from './keys'; @@ -36,4 +35,3 @@ export * from './object'; export * from './logger'; export { createWorkerTimers } from './workerTimers'; export { DEV_BROWSER_JWT_KEY, extractDevBrowserJWTFromURL, setDevBrowserJWTInURL } from './devBrowser'; -export { fastDeepMergeAndKeep, fastDeepMergeAndReplace } from './utils/fastDeepMerge'; diff --git a/packages/shared/src/loadScript.ts b/packages/shared/src/loadScript.ts index 9a85ab4e551..620c855b68a 100644 --- a/packages/shared/src/loadScript.ts +++ b/packages/shared/src/loadScript.ts @@ -17,7 +17,7 @@ export async function loadScript(src = '', opts: LoadScriptOptions): Promise { return new Promise((resolve, reject) => { if (!src) { - reject(NO_SRC_ERROR); + reject(new Error(NO_SRC_ERROR)); } if (!document || !document.body) { @@ -26,7 +26,7 @@ export async function loadScript(src = '', opts: LoadScriptOptions): Promise { try { window.localStorage.setItem(this.channelKey, JSON.stringify(data)); window.localStorage.removeItem(this.channelKey); - } catch (e) { + } catch { // Silently do nothing } }; @@ -43,7 +43,7 @@ export class LocalStorageBroadcastChannel { data, }); this.eventTarget.dispatchEvent(event); - } catch (e) { + } catch { // } }; diff --git a/packages/shared/src/react/clerk-swr.ts b/packages/shared/src/react/clerk-swr.ts index 2d4e7eeb5eb..8d15a0948ea 100644 --- a/packages/shared/src/react/clerk-swr.ts +++ b/packages/shared/src/react/clerk-swr.ts @@ -1,6 +1,6 @@ 'use client'; -// eslint-disable-next-line import/export + export * from 'swr'; -// eslint-disable-next-line import/export -export { default as useSWR, SWRConfig } from 'swr'; + +export { default as useSWR } from 'swr'; export { default as useSWRInfinite } from 'swr/infinite'; diff --git a/packages/shared/src/telemetry/events/component-mounted.ts b/packages/shared/src/telemetry/events/component-mounted.ts index 29b61fdf08b..a52a4a0e183 100644 --- a/packages/shared/src/telemetry/events/component-mounted.ts +++ b/packages/shared/src/telemetry/events/component-mounted.ts @@ -1,6 +1,6 @@ import type { TelemetryEventRaw } from '@clerk/types'; -const EVENT_COMPONENT_MOUNTED = 'COMPONENT_MOUNTED' as const; +const EVENT_COMPONENT_MOUNTED = 'COMPONENT_MOUNTED'; const EVENT_SAMPLING_RATE = 0.1; type ComponentMountedBase = { diff --git a/packages/shared/src/telemetry/events/method-called.ts b/packages/shared/src/telemetry/events/method-called.ts index 97a8b138149..57aefcc0147 100644 --- a/packages/shared/src/telemetry/events/method-called.ts +++ b/packages/shared/src/telemetry/events/method-called.ts @@ -1,6 +1,6 @@ import type { TelemetryEventRaw } from '@clerk/types'; -const EVENT_METHOD_CALLED = 'METHOD_CALLED' as const; +const EVENT_METHOD_CALLED = 'METHOD_CALLED'; type EventMethodCalled = { method: string; diff --git a/packages/shared/src/utils/runWithExponentialBackOff.ts b/packages/shared/src/utils/runWithExponentialBackOff.ts index 2b6eb35d8f3..992b69e425d 100644 --- a/packages/shared/src/utils/runWithExponentialBackOff.ts +++ b/packages/shared/src/utils/runWithExponentialBackOff.ts @@ -47,7 +47,6 @@ export const runWithExponentialBackOff = async ( }; const delay = createExponentialDelayAsyncFn({ firstDelay, maxDelay, timeMultiple }); - // eslint-disable-next-line no-constant-condition while (true) { try { return await callback(); diff --git a/packages/shared/src/utils/runtimeEnvironment.ts b/packages/shared/src/utils/runtimeEnvironment.ts index 9a9b96c95c9..43331de2b05 100644 --- a/packages/shared/src/utils/runtimeEnvironment.ts +++ b/packages/shared/src/utils/runtimeEnvironment.ts @@ -2,7 +2,7 @@ export const isDevelopmentEnvironment = (): boolean => { try { return process.env.NODE_ENV === 'development'; // eslint-disable-next-line no-empty - } catch (err) {} + } catch {} // TODO: add support for import.meta.env.DEV that is being used by vite @@ -13,7 +13,7 @@ export const isTestEnvironment = (): boolean => { try { return process.env.NODE_ENV === 'test'; // eslint-disable-next-line no-empty - } catch (err) {} + } catch {} // TODO: add support for import.meta.env.DEV that is being used by vite return false; @@ -23,7 +23,7 @@ export const isProductionEnvironment = (): boolean => { try { return process.env.NODE_ENV === 'production'; // eslint-disable-next-line no-empty - } catch (err) {} + } catch {} // TODO: add support for import.meta.env.DEV that is being used by vite return false; diff --git a/packages/shared/src/webauthn.ts b/packages/shared/src/webauthn.ts index adf27b6f74b..05a42c2b920 100644 --- a/packages/shared/src/webauthn.ts +++ b/packages/shared/src/webauthn.ts @@ -11,7 +11,7 @@ function isWebAuthnSupported() { async function isWebAuthnAutofillSupported(): Promise { try { return isWebAuthnSupported() && (await window.PublicKeyCredential.isConditionalMediationAvailable()); - } catch (e) { + } catch { return false; } } @@ -22,7 +22,7 @@ async function isWebAuthnPlatformAuthenticatorSupported(): Promise { typeof window !== 'undefined' && (await window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()) ); - } catch (e) { + } catch { return false; } } diff --git a/packages/shared/src/workerTimers/createWorkerTimers.ts b/packages/shared/src/workerTimers/createWorkerTimers.ts index 0065339420c..fd465acbcc6 100644 --- a/packages/shared/src/workerTimers/createWorkerTimers.ts +++ b/packages/shared/src/workerTimers/createWorkerTimers.ts @@ -8,6 +8,7 @@ import type { WorkerTimerResponseEvent, } from './workerTimers.types'; // @ts-ignore +// eslint-disable-next-line import/default import pollerWorkerSource from './workerTimers.worker'; const createWebWorker = (source: string, opts: ConstructorParameters[1] = {}): Worker | null => { @@ -19,7 +20,7 @@ const createWebWorker = (source: string, opts: ConstructorParameters=1.81.9", diff --git a/packages/tanstack-start/src/server/authenticateRequest.ts b/packages/tanstack-start/src/server/authenticateRequest.ts index 0ffbf680686..b877579c486 100644 --- a/packages/tanstack-start/src/server/authenticateRequest.ts +++ b/packages/tanstack-start/src/server/authenticateRequest.ts @@ -35,10 +35,12 @@ export async function authenticateRequest( const hasLocationHeader = requestState.headers.get('location'); if (hasLocationHeader) { // triggering a handshake redirect + // eslint-disable-next-line @typescript-eslint/only-throw-error throw new Response(null, { status: 307, headers: requestState.headers }); } if (requestState.status === AuthStatus.Handshake) { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw errorThrower.throw('Clerk: unexpected handshake without redirect'); } diff --git a/packages/tanstack-start/src/server/constants.ts b/packages/tanstack-start/src/server/constants.ts index 779ba2deb3f..c5e1114cd71 100644 --- a/packages/tanstack-start/src/server/constants.ts +++ b/packages/tanstack-start/src/server/constants.ts @@ -1,4 +1,5 @@ import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey'; +// eslint-disable-next-line import/no-unresolved import { getEvent } from 'vinxi/http'; import { getEnvVariable, getPublicEnvVariables } from '../utils/env'; diff --git a/packages/tanstack-start/src/server/loadOptions.ts b/packages/tanstack-start/src/server/loadOptions.ts index 27c8521ec20..a0a580763a5 100644 --- a/packages/tanstack-start/src/server/loadOptions.ts +++ b/packages/tanstack-start/src/server/loadOptions.ts @@ -3,6 +3,7 @@ import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; import { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy'; import { handleValueOrFn } from '@clerk/shared/utils'; +// eslint-disable-next-line import/no-unresolved import { getEvent } from 'vinxi/http'; import { errorThrower } from '../utils'; @@ -35,14 +36,17 @@ export const loadOptions = (request: Request, overrides: LoaderOptions = {}) => } if (!secretKey) { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw errorThrower.throw('Clerk: no secret key provided'); } if (isSatellite && !proxyUrl && !domain) { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw errorThrower.throw('Clerk: satellite mode requires a proxy URL or domain'); } if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey)) { + // eslint-disable-next-line @typescript-eslint/only-throw-error throw errorThrower.throw('Clerk: satellite mode requires a sign-in URL in production'); } diff --git a/packages/testing/.eslintrc.js b/packages/testing/.eslintrc.js deleted file mode 100644 index 36a013910c7..00000000000 --- a/packages/testing/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], -}; diff --git a/packages/testing/package.json b/packages/testing/package.json index 9f33c5b67f4..3bdd2c9ba01 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -59,7 +59,7 @@ "build": "tsup --env.NODE_ENV production", "clean": "rimraf ./dist", "dev": "tsup --watch", - "lint": "eslint src/" + "lint": "eslint src" }, "dependencies": { "@clerk/backend": "workspace:^", @@ -68,7 +68,6 @@ "dotenv": "16.4.5" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@playwright/test": "^1.44.0", "cypress": "^13.9.0" }, diff --git a/packages/testing/src/playwright/setupClerkTestingToken.ts b/packages/testing/src/playwright/setupClerkTestingToken.ts index 84d48cd42a8..71ac2ef5a8e 100644 --- a/packages/testing/src/playwright/setupClerkTestingToken.ts +++ b/packages/testing/src/playwright/setupClerkTestingToken.ts @@ -39,7 +39,7 @@ export const setupClerkTestingToken = async ({ page, options }: SetupClerkTestin originalUrl.searchParams.set(TESTING_TOKEN_PARAM, testingToken); } - route.continue({ + void route.continue({ url: originalUrl.toString(), }); }); diff --git a/packages/testing/tsconfig.lint.json b/packages/testing/tsconfig.lint.json deleted file mode 100644 index b90fc83e04c..00000000000 --- a/packages/testing/tsconfig.lint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"] -} diff --git a/packages/themes/.eslintrc.js b/packages/themes/.eslintrc.js deleted file mode 100644 index 36a013910c7..00000000000 --- a/packages/themes/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], -}; diff --git a/packages/themes/package.json b/packages/themes/package.json index 754e8d41d50..2fb4fc96224 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -34,15 +34,13 @@ "build": "tsc -p tsconfig.build.json", "clean": "rimraf ./dist", "dev": "tsc -p tsconfig.build.json --watch", - "lint": "eslint src/" + "lint": "eslint src" }, "dependencies": { "@clerk/types": "workspace:^", "tslib": "catalog:repo" }, - "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*" - }, + "devDependencies": {}, "engines": { "node": ">=18.17.0" }, diff --git a/packages/types/.eslintrc.js b/packages/types/.eslintrc.js deleted file mode 100644 index 36a013910c7..00000000000 --- a/packages/types/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], -}; diff --git a/packages/types/.npmignore b/packages/types/.npmignore deleted file mode 100644 index aa36c10c687..00000000000 --- a/packages/types/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!/dist/**/* diff --git a/packages/types/package.json b/packages/types/package.json index ba29c946cb4..8587bd333ab 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -33,14 +33,12 @@ "build": "tsup --env.NODE_ENV production", "clean": "rimraf ./dist", "dev": "tsup --watch", - "lint": "eslint src/" + "lint": "eslint src" }, "dependencies": { "csstype": "3.1.1" }, - "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*" - }, + "devDependencies": {}, "engines": { "node": ">=18.17.0" }, diff --git a/packages/types/src/organizationMembership.ts b/packages/types/src/organizationMembership.ts index 6ce69f7ac4b..a5b6638c661 100644 --- a/packages/types/src/organizationMembership.ts +++ b/packages/types/src/organizationMembership.ts @@ -15,6 +15,7 @@ interface Placeholder { } declare global { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface ClerkAuthorization {} } diff --git a/packages/types/src/utils.ts b/packages/types/src/utils.ts index 23be40c9e61..88227403440 100644 --- a/packages/types/src/utils.ts +++ b/packages/types/src/utils.ts @@ -78,7 +78,7 @@ export type PathValue> = P extends `${infer Key}.${ ? T[P] : never; -// eslint-disable-next-line @typescript-eslint/ban-types +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type type IsSerializable = T extends Function ? false : true; /** diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 5f65c425028..b4cd2de77f2 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -15,6 +15,6 @@ "strict": true, "types": [] }, - "include": ["./src"], + "include": ["src"], "exclude": ["node_modules"] } diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js deleted file mode 100644 index 0fbd361b447..00000000000 --- a/packages/ui/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/react'], - rules: { - 'import/no-unresolved': [2, { ignore: ['^~/'] }], - }, - // overrides: [], -}; diff --git a/packages/ui/package.json b/packages/ui/package.json index e5009563585..904b9ffe22a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -49,6 +49,7 @@ "bundlewatch": "pnpm dlx bundlewatch --config bundlewatch.config.json", "dev": "tsup --watch", "dev:theme-builder": "concurrently \"pnpm dev\" \"cd theme-builder && pnpm dev\"", + "lint": "eslint src", "test": "vitest run", "test:watch": "vitest watch" }, @@ -67,11 +68,11 @@ "react-aria-components": "^1.2.1" }, "devDependencies": { - "@clerk/eslint-config-custom": "workspace:*", "@clerk/tailwindcss-transformer": "workspace:*", "@testing-library/react": "^16.0.0", "@vitejs/plugin-react": "^4.3.1", "concurrently": "^8.2.2", - "jsdom": "^24.1.1" + "jsdom": "^24.1.1", + "tailwindcss": "^3.4.3" } } diff --git a/packages/ui/src/components/sign-in/steps/verifications.tsx b/packages/ui/src/components/sign-in/steps/verifications.tsx index 2f718a9ff3d..fe95430d6f2 100644 --- a/packages/ui/src/components/sign-in/steps/verifications.tsx +++ b/packages/ui/src/components/sign-in/steps/verifications.tsx @@ -252,7 +252,6 @@ export function SignInVerifications() { ( ( ( ( ( ( { return ( ; export const CodeToCountriesMap: CodeToCountryIsoMapType = data.reduce((acc, cur) => { const code = cur[2]; const country = createEntry(cur); - acc.get(code) ? acc.get(code)!.push(country) : acc.set(code, [country]); + if (acc.has(code)) { + acc.get(code)?.push(country); + } else { + acc.set(code, [country]); + } return acc; }, new Map()); diff --git a/packages/ui/src/contexts/AppearanceContext.tsx b/packages/ui/src/contexts/AppearanceContext.tsx index fed74b7a050..3f116aa4ed2 100644 --- a/packages/ui/src/contexts/AppearanceContext.tsx +++ b/packages/ui/src/contexts/AppearanceContext.tsx @@ -83,7 +83,7 @@ export function mergeParsedElementsFragment(...fragments: ParsedElementsFragment fragments.forEach(fragment => { for (const k in fragment) { - const key = k as keyof ParsedElementsFragment; + const key = k; if (key in acc) { acc[key]!.className = [acc[key]?.className, fragment[key]?.className].join(' '); acc[key]!.style = { @@ -170,9 +170,8 @@ function mergeAppearance(a: Appearance | null | undefined, b: Appearance | null result.elements = { ...b.elements }; } else if (result.elements && b.elements) { Object.entries(b.elements).forEach(([element, config]) => { - const el = element as DescriptorIdentifier; + const el = element; if (el in result.elements!) { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion result.elements![el] = mergeElementsAppearanceConfig(result.elements![el]!, config!); } else { result.elements![el] = config; @@ -199,12 +198,11 @@ function applyTheme(theme: ParsedElements | undefined, appearance: Appearance | if (appearance.elements) { Object.entries(appearance.elements).forEach(([element, config]) => { - const el = element as DescriptorIdentifier; + const el = element; if (el in appearance.elements!) { if (typeof config === 'string') { result.elements[el].className = [result.elements[el].className, config].join(' '); } else { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion const { className, ...style } = config!; if (className) { result.elements[el].className = [result.elements[el].className, className].join(' '); diff --git a/packages/ui/src/primitives/card.tsx b/packages/ui/src/primitives/card.tsx index 0854d22cba3..72b29d385eb 100644 --- a/packages/ui/src/primitives/card.tsx +++ b/packages/ui/src/primitives/card.tsx @@ -417,7 +417,7 @@ export const Footer = React.forwardRef(function CardFooter( aria-label='Clerk logo' href='https://www.clerk.com?utm_source=clerk&utm_medium=components' target='_blank' - rel='noopener' + rel='noopener noreferrer' className='-m-0.5 inline-flex items-center rounded-sm p-0.5 outline-none focus-visible:ring' > diff --git a/packages/ui/src/primitives/icons/icon.tsx b/packages/ui/src/primitives/icons/icon.tsx index 3da5ed57b78..1f743e0c33b 100644 --- a/packages/ui/src/primitives/icons/icon.tsx +++ b/packages/ui/src/primitives/icons/icon.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { mergeProps } from 'react-aria'; -export interface IconProps extends React.SVGProps {} +export type IconProps = React.SVGProps; export const Icon = React.forwardRef( function Icon(props, ref) { diff --git a/packages/ui/src/tailwind.config.ts b/packages/ui/src/tailwind.config.ts index 3a9e3245d41..a3efdd01d4d 100644 --- a/packages/ui/src/tailwind.config.ts +++ b/packages/ui/src/tailwind.config.ts @@ -115,6 +115,7 @@ const config = { }, }, plugins: [ + // eslint-disable-next-line @typescript-eslint/unbound-method plugin(function ({ addBase, addVariant, theme }) { /** * Extends Tailwind's built-in `addBase` function by scoping styles to diff --git a/packages/ui/src/themes/buildTheme.ts b/packages/ui/src/themes/buildTheme.ts index 96f2517670a..6a05a06b6a4 100644 --- a/packages/ui/src/themes/buildTheme.ts +++ b/packages/ui/src/themes/buildTheme.ts @@ -17,7 +17,7 @@ export function buildTheme(p: PartialTheme): ParsedElements { }); for (const descriptor in p) { - const key = descriptor as keyof ParsedElements; + const key = descriptor; if (p[key]) { if (!(key in theme)) { @@ -26,7 +26,7 @@ export function buildTheme(p: PartialTheme): ParsedElements { } // These non-null assertions are okay since we confirmed that theme contains the descriptor above. - const { className, style } = p[key]!; + const { className, style } = p[key]; if (className) { theme[key]!.className = className; } @@ -37,7 +37,6 @@ export function buildTheme(p: PartialTheme): ParsedElements { } } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion return theme as ParsedElements; } @@ -48,7 +47,7 @@ export function mergeTheme(a: ParsedElements, b: ParsedElements): ParsedElements const mergedTheme = { ...a }; for (const d in mergedTheme) { - const descriptor = d as keyof ParsedElements; + const descriptor = d; mergedTheme[descriptor].className = [mergedTheme[descriptor].className, b[descriptor].className].join(' '); mergedTheme[descriptor].style = { ...mergedTheme[descriptor].style, ...b[descriptor].style }; } diff --git a/packages/ui/src/utils/dva.ts b/packages/ui/src/utils/dva.ts index e6132664cb9..c1e7bf14fb7 100644 --- a/packages/ui/src/utils/dva.ts +++ b/packages/ui/src/utils/dva.ts @@ -213,7 +213,7 @@ export const defineConfig: DefineConfig = options => { export const { compose, dva, cx } = defineConfig(); export function getDescriptors(elements: ParsedElements, descriptorList: string) { - const descriptors = descriptorList.split(' ') as (keyof ParsedElements)[]; + const descriptors = descriptorList.split(' '); return descriptors.map(d => { const value = elements[d]; if (!value) { diff --git a/packages/ui/src/utils/make-localizable.ts b/packages/ui/src/utils/make-localizable.ts index 3b8cd0bcb14..a773b7f165d 100644 --- a/packages/ui/src/utils/make-localizable.ts +++ b/packages/ui/src/utils/make-localizable.ts @@ -1,10 +1,10 @@ // This file contains code originally found in packages/clerk-js/src/ui/localization and modified for use within UI. -import { enUS } from '@clerk/localizations'; -import { normalizeDate, titleize } from '@clerk/shared'; -import type { DeepRequired, LocalizationResource, PasswordSettingsData, PathValue, RecordToPath } from '@clerk/types'; +import { normalizeDate } from '@clerk/shared/date'; +import { titleize } from '@clerk/shared/underscore'; +import type { LocalizationResource, PasswordSettingsData, PathValue, RecordToPath } from '@clerk/types'; -const defaultResource = enUS as DeepRequired; +// const defaultResource = enUS as DeepRequired; type Value = string | number | boolean | Date; type Whitespace = ' ' | '\t' | '\n' | '\r'; diff --git a/packages/ui/src/utils/validators.ts b/packages/ui/src/utils/validators.ts index 543705c11fc..d3b420c584c 100644 --- a/packages/ui/src/utils/validators.ts +++ b/packages/ui/src/utils/validators.ts @@ -6,7 +6,7 @@ export function isValidUrl(val: unknown): val is string { try { new URL(val as string); return true; - } catch (e) { + } catch { return false; } } diff --git a/packages/ui/theme-builder/.eslintrc.js b/packages/ui/theme-builder/.eslintrc.js deleted file mode 100644 index 50d62e058c7..00000000000 --- a/packages/ui/theme-builder/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - root: true, - extends: [ - '@clerk/custom/browser', - '@clerk/custom/typescript', - '@clerk/custom/react', - 'plugin:@next/next/recommended', - ], -}; diff --git a/packages/ui/tsconfig.lint.json b/packages/ui/tsconfig.lint.json deleted file mode 100644 index 40b167e1f0e..00000000000 --- a/packages/ui/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src", "./*.ts"], - "exclude": ["node_modules"] -} diff --git a/packages/upgrade/.eslintrc.cjs b/packages/upgrade/.eslintrc.cjs deleted file mode 100644 index ace73617f09..00000000000 --- a/packages/upgrade/.eslintrc.cjs +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/react'], - rules: { 'react/no-unescaped-entities': 0, 'import/no-unresolved': 0 }, - parserOptions: { - babelOptions: { - parserOpts: { - plugins: ['jsx'], - }, - }, - }, -}; diff --git a/packages/upgrade/package.json b/packages/upgrade/package.json index df35d324dcc..b00c97d80ef 100644 --- a/packages/upgrade/package.json +++ b/packages/upgrade/package.json @@ -52,7 +52,6 @@ "devDependencies": { "@babel/cli": "^7.24.7", "@babel/preset-react": "^7.24.7", - "@clerk/eslint-config-custom": "workspace:*", "@types/jscodeshift": "^0.12.0" }, "engines": { diff --git a/packages/upgrade/src/codemods/transform-async-request.cjs b/packages/upgrade/src/codemods/transform-async-request.cjs index ef744dc92be..c68a33f7e4d 100644 --- a/packages/upgrade/src/codemods/transform-async-request.cjs +++ b/packages/upgrade/src/codemods/transform-async-request.cjs @@ -7,7 +7,7 @@ * @param {Object} _options - Additional options (unused) * @returns {string|undefined} - The transformed source code if modifications were made, otherwise undefined */ -module.exports = function transformAsyncRequest({ path, source }, { jscodeshift: j }, _options) { +module.exports = function transformAsyncRequest({ source }, { jscodeshift: j }) { const root = j(source); let dirtyFlag = false; diff --git a/packages/upgrade/src/codemods/transform-clerk-provider-dynamic.cjs b/packages/upgrade/src/codemods/transform-clerk-provider-dynamic.cjs index 8c25c13f426..dff55c72499 100644 --- a/packages/upgrade/src/codemods/transform-clerk-provider-dynamic.cjs +++ b/packages/upgrade/src/codemods/transform-clerk-provider-dynamic.cjs @@ -6,7 +6,7 @@ * @param {Object} _options - Additional options (unused) * @returns {string|undefined} - The transformed source code if modifications were made, otherwise undefined */ -module.exports = function transformClerkProviderDynamic({ _path, source }, { jscodeshift: j }, _options) { +module.exports = function transformClerkProviderDynamic({ source }, { jscodeshift: j }) { const root = j(source); let dirtyFlag = false; diff --git a/packages/upgrade/src/components/SDKWorkflow.js b/packages/upgrade/src/components/SDKWorkflow.js index a5f085a9833..f0dd802e640 100644 --- a/packages/upgrade/src/components/SDKWorkflow.js +++ b/packages/upgrade/src/components/SDKWorkflow.js @@ -27,8 +27,7 @@ export function SDKWorkflow(props) { const [runCodemod, setRunCodemod] = useState(false); const [upgradeComplete, setUpgradeComplete] = useState(false); - // eslint-disable-next-line no-unused-vars - const [version, setVersion] = useState(getClerkSdkVersion(sdk)); + const [version] = useState(getClerkSdkVersion(sdk)); if (sdk !== 'nextjs') { return ( diff --git a/packages/upgrade/src/guide-generators/text-generation.js b/packages/upgrade/src/guide-generators/text-generation.js index 8f447d1ffb2..7e72100a84e 100644 --- a/packages/upgrade/src/guide-generators/text-generation.js +++ b/packages/upgrade/src/guide-generators/text-generation.js @@ -68,6 +68,7 @@ export const accordionForCategory = partial((categories, options, { data }) => { items.push(...[].concat(options.additionalItems)); } + // eslint-disable-next-line @typescript-eslint/no-base-to-string return ` `"${parseInline(i.title)}"`).join(', ')}]}> ${items.map(i => ` ${indent('\n' + i.content.trim(), 4)}\n `).join('\n')} `; diff --git a/packages/upgrade/src/util/generate-changelog.js b/packages/upgrade/src/util/generate-changelog.js index 2e1301aabea..606b4c0803c 100644 --- a/packages/upgrade/src/util/generate-changelog.js +++ b/packages/upgrade/src/util/generate-changelog.js @@ -16,7 +16,10 @@ async function generate() { // Note: make sure to add a custom anchor link here to match the cli output // anchor should be `entry.slug` output += `
-${parseInline(entry.title)} +${ + // eslint-disable-next-line @typescript-eslint/no-base-to-string + parseInline(entry.title) + } Regex matcher: \`${entry.matcher}\` diff --git a/packages/upgrade/src/util/guess-framework.js b/packages/upgrade/src/util/guess-framework.js index a2332b63c8b..8f0e3b7ec1b 100644 --- a/packages/upgrade/src/util/guess-framework.js +++ b/packages/upgrade/src/util/guess-framework.js @@ -21,7 +21,7 @@ export default function guessFrameworks(dir, disableTelemetry) { let pkg; try { pkg = readPackageSync({ cwd: dir }); - } catch (err) { + } catch { const tmpPath = path.join(tempDir, 'clerk-upgrade-uuid'); let uuid; diff --git a/packages/upgrade/tsconfig.json b/packages/upgrade/tsconfig.json new file mode 100644 index 00000000000..da32e81b638 --- /dev/null +++ b/packages/upgrade/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "allowJs": true + } +} diff --git a/packages/vue/.eslintrc.cjs b/packages/vue/.eslintrc.cjs deleted file mode 100644 index cfd279751cb..00000000000 --- a/packages/vue/.eslintrc.cjs +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/browser', '@clerk/custom/typescript', '@clerk/custom/jest'], - rules: { - 'import/named': 'warn', - }, -}; diff --git a/packages/vue/package.json b/packages/vue/package.json index 66d7dfe3134..f25c32f091a 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -44,7 +44,7 @@ "build": "tsup --onSuccess \"pnpm build:dts\"", "build:dts": "vue-tsc --declaration --emitDeclarationOnly -p tsconfig.build.json", "dev": "tsup --watch", - "lint": "eslint src/", + "lint": "eslint src", "lint:attw": "attw --pack . --ignore-rules no-resolution cjs-resolves-to-esm internal-resolution-error", "lint:publint": "publint", "publish:local": "pnpm yalc push --replace --sig", diff --git a/playground/nextjs/.eslintrc.json b/playground/nextjs/.eslintrc.json deleted file mode 100644 index a2569c2c7ca..00000000000 --- a/playground/nextjs/.eslintrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "root": true, - "extends": "next/core-web-vitals" -} diff --git a/playground/remix-cf-pages/.eslintrc.js b/playground/remix-cf-pages/.eslintrc.js deleted file mode 100644 index f2faf1470fd..00000000000 --- a/playground/remix-cf-pages/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -module.exports = { - extends: ['@remix-run/eslint-config', '@remix-run/eslint-config/node'], -}; diff --git a/playground/remix-cf-pages/package.json b/playground/remix-cf-pages/package.json index 23eca108d0b..545f6d5941b 100644 --- a/playground/remix-cf-pages/package.json +++ b/playground/remix-cf-pages/package.json @@ -24,7 +24,6 @@ "devDependencies": { "@cloudflare/workers-types": "^3.18.0", "@remix-run/dev": "^2.0.0", - "@remix-run/eslint-config": "^2.0.0", "@types/react": "^18.2.22", "@types/react-dom": "^18.2.7", "eslint": "^8.27.0", diff --git a/playground/remix-cf-worker/.eslintrc.js b/playground/remix-cf-worker/.eslintrc.js deleted file mode 100644 index f2faf1470fd..00000000000 --- a/playground/remix-cf-worker/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -module.exports = { - extends: ['@remix-run/eslint-config', '@remix-run/eslint-config/node'], -}; diff --git a/playground/remix-node/.eslintrc.js b/playground/remix-node/.eslintrc.js deleted file mode 100644 index f523987149d..00000000000 --- a/playground/remix-node/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -module.exports = { - root: true, - extends: ['@remix-run/eslint-config', '@remix-run/eslint-config/node'], -}; diff --git a/playground/remix-node/package.json b/playground/remix-node/package.json index 9e75db9c6bc..8a8cfbc4979 100644 --- a/playground/remix-node/package.json +++ b/playground/remix-node/package.json @@ -23,7 +23,6 @@ }, "devDependencies": { "@remix-run/dev": "^2.0.0", - "@remix-run/eslint-config": "^2.0.0", "@types/react": "^18.0.27", "@types/react-dom": "^18.0.10", "eslint": "^8.27.0", diff --git a/playground/vite-react-ts/.eslintrc.cjs b/playground/vite-react-ts/.eslintrc.cjs deleted file mode 100644 index 4020bcbf409..00000000000 --- a/playground/vite-react-ts/.eslintrc.cjs +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': 'warn', - }, -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 135803c7aef..1c32457b5a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,6 +64,12 @@ importers: '@changesets/get-github-info': specifier: ^0.5.2 version: 0.5.2 + '@clerk/backend': + specifier: workspace:* + version: link:packages/backend + '@clerk/shared': + specifier: workspace:* + version: link:packages/shared '@commitlint/cli': specifier: ^19.3.0 version: 19.3.0(@types/node@22.10.6)(typescript@5.6.3) @@ -73,6 +79,12 @@ importers: '@emotion/jest': specifier: ^11.11.0 version: 11.11.0(@types/jest@29.5.12) + '@eslint/eslintrc': + specifier: ^3.2.0 + version: 3.2.0 + '@eslint/js': + specifier: 9.18.0 + version: 9.18.0 '@faker-js/faker': specifier: ^8.1.0 version: 8.1.0 @@ -118,6 +130,9 @@ importers: '@vitest/coverage-v8': specifier: 3.0.2 version: 3.0.2(vitest@3.0.2(@edge-runtime/vm@5.0.0)(@types/node@22.10.6)(jiti@2.4.0)(jsdom@24.1.3)(msw@2.7.0(@types/node@22.10.6)(typescript@5.6.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + chalk: + specifier: 4.1.2 + version: 4.1.2 citty: specifier: ^0.1.4 version: 0.1.6 @@ -134,8 +149,44 @@ importers: specifier: ^16.3.1 version: 16.4.5 eslint: - specifier: ^8.49.0 - version: 8.49.0 + specifier: 9.18.0 + version: 9.18.0(jiti@2.4.0) + eslint-config-prettier: + specifier: 10.0.1 + version: 10.0.1(eslint@9.18.0(jiti@2.4.0)) + eslint-config-turbo: + specifier: 2.3.3 + version: 2.3.3(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-import: + specifier: 2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-jest: + specifier: 28.11.0 + version: 28.11.0(@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3) + eslint-plugin-jsx-a11y: + specifier: 6.10.2 + version: 6.10.2(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-playwright: + specifier: 2.1.0 + version: 2.1.0(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-react: + specifier: 7.37.4 + version: 7.37.4(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-react-hooks: + specifier: 5.1.0 + version: 5.1.0(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-simple-import-sort: + specifier: 12.1.1 + version: 12.1.1(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-turbo: + specifier: 2.3.3 + version: 2.3.3(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-unused-imports: + specifier: 4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0)) + eslint-plugin-yml: + specifier: 1.16.0 + version: 1.16.0(eslint@9.18.0(jiti@2.4.0)) execa: specifier: ^5.1.1 version: 5.1.1 @@ -148,6 +199,9 @@ importers: get-port: specifier: ^5.1.1 version: 5.1.1 + globals: + specifier: ^15.13.0 + version: 15.14.0 globby: specifier: ^13.2.2 version: 13.2.2 @@ -169,6 +223,9 @@ importers: jest-environment-jsdom: specifier: ^29.3.1 version: 29.7.0 + jsonwebtoken: + specifier: 9.0.2 + version: 9.0.2 lint-staged: specifier: ^14.0.1 version: 14.0.1(enquirer@2.3.6) @@ -217,6 +274,12 @@ importers: typescript: specifier: catalog:repo version: 5.6.3 + typescript-eslint: + specifier: 8.21.0 + version: 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + uuid: + specifier: 8.3.2 + version: 8.3.2 verdaccio: specifier: ^5.26.3 version: 5.31.1(typanion@3.14.0) @@ -250,10 +313,6 @@ importers: nanostores: specifier: 0.11.3 version: 0.11.3 - devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom packages/backend: dependencies: @@ -273,9 +332,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@edge-runtime/vm': specifier: 5.0.0 version: 5.0.0 @@ -310,9 +366,6 @@ importers: specifier: ^0.10.0 version: 0.10.0 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@types/chrome': specifier: '*' version: 0.0.114 @@ -389,9 +442,6 @@ importers: specifier: 0.13.11 version: 0.13.11 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@clerk/ui': specifier: workspace:* version: link:../ui @@ -449,10 +499,6 @@ importers: jscodeshift: specifier: ^0.16.1 version: 0.16.1(@babel/preset-env@7.26.0(@babel/core@7.26.0)) - devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom packages/elements: dependencies: @@ -493,9 +539,6 @@ importers: specifier: ^5.15.0 version: 5.15.0 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@statelyai/inspect': specifier: ^0.4.0 version: 0.4.0(ws@8.18.0)(xstate@5.15.0) @@ -509,39 +552,6 @@ importers: specifier: ^4.31.0 version: 4.31.0 - packages/eslint-config-custom: - dependencies: - '@next/eslint-plugin-next': - specifier: ^12.3.4 - version: 12.3.4 - '@vercel/style-guide': - specifier: ^5.2.0 - version: 5.2.0(@next/eslint-plugin-next@12.3.4)(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(prettier@3.3.3)(typescript@5.6.3) - any-eslint-parser: - specifier: ^1.0.1 - version: 1.0.1(eslint@8.49.0) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.49.0) - eslint-config-turbo: - specifier: ^2.0.3 - version: 2.2.3(eslint@8.49.0) - eslint-plugin-playwright: - specifier: ^0.22.0 - version: 0.22.2(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3))(eslint@8.49.0) - eslint-plugin-regex: - specifier: ^1.10.0 - version: 1.10.0(eslint@8.49.0) - eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.49.0) - eslint-plugin-unused-imports: - specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0) - typescript: - specifier: catalog:repo - version: 5.6.3 - packages/expo: dependencies: '@clerk/clerk-js': @@ -572,9 +582,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@clerk/expo-passkeys': specifier: workspace:* version: link:../expo-passkeys @@ -664,9 +671,6 @@ importers: specifier: ^5.0.1 version: 5.0.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom fastify: specifier: ^5.0.0 version: 5.0.0 @@ -676,10 +680,6 @@ importers: '@clerk/types': specifier: workspace:^ version: link:../types - devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom packages/nextjs: dependencies: @@ -711,9 +711,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@types/crypto-js': specifier: 4.2.2 version: 4.2.2 @@ -747,7 +744,7 @@ importers: devDependencies: nuxt: specifier: ^3.14.159 - version: 3.14.159(@parcel/watcher@2.4.1)(@types/node@22.10.6)(eslint@8.49.0)(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)) + version: 3.14.159(@parcel/watcher@2.4.1)(@types/node@22.10.6)(eslint@9.18.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)) typescript: specifier: catalog:repo version: 5.6.3 @@ -770,9 +767,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@clerk/localizations': specifier: workspace:* version: link:../localizations @@ -810,9 +804,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -853,9 +844,6 @@ importers: specifier: catalog:repo version: 2.4.1 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@remix-run/react': specifier: ^2.0.0 version: 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) @@ -893,9 +881,6 @@ importers: specifier: ^2.2.0 version: 2.2.5(react@18.3.1) devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@types/glob-to-regexp': specifier: 0.4.4 version: 0.4.4 @@ -956,10 +941,10 @@ importers: tslib: specifier: catalog:repo version: 2.4.1 + vinxi: + specifier: ^0.4.1 + version: 0.4.3(@types/node@22.10.6)(ioredis@5.4.1)(terser@5.37.0)(typescript@5.6.3) devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@tanstack/react-router': specifier: ^1.81.9 version: 1.81.9(@tanstack/router-generator@1.81.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -969,9 +954,6 @@ importers: esbuild-plugin-file-path-extensions: specifier: ^2.1.2 version: 2.1.3 - vinxi: - specifier: ^0.4.1 - version: 0.4.3(@types/node@22.10.6)(ioredis@5.4.1)(terser@5.37.0)(typescript@5.6.3) packages/testing: dependencies: @@ -988,9 +970,6 @@ importers: specifier: 16.4.5 version: 16.4.5 devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@playwright/test': specifier: ^1.44.0 version: 1.44.1 @@ -1006,20 +985,12 @@ importers: tslib: specifier: catalog:repo version: 2.4.1 - devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom packages/types: dependencies: csstype: specifier: 3.1.1 version: 3.1.1 - devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom packages/ui: dependencies: @@ -1060,9 +1031,6 @@ importers: specifier: ^1.2.1 version: 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@clerk/tailwindcss-transformer': specifier: workspace:* version: link:../tailwindcss-transformer @@ -1078,6 +1046,9 @@ importers: jsdom: specifier: ^24.1.1 version: 24.1.3 + tailwindcss: + specifier: ^3.4.3 + version: 3.4.4(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)) packages/upgrade: dependencies: @@ -1142,9 +1113,6 @@ importers: '@babel/preset-react': specifier: ^7.24.7 version: 7.26.3(@babel/core@7.26.0) - '@clerk/eslint-config-custom': - specifier: workspace:* - version: link:../eslint-config-custom '@types/jscodeshift': specifier: ^0.12.0 version: 0.12.0 @@ -1258,13 +1226,6 @@ packages: resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.22.15': - resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - '@babel/generator@7.2.0': resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==} @@ -2825,17 +2786,33 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.8.1': - resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.2': - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.49.0': - resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.18.0': + resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} @@ -2997,18 +2974,25 @@ packages: '@hcaptcha/types@1.0.3': resolution: {integrity: sha512-1mbU6eSGawRrqeahRrOzZo/SVLI6oZ5/azuBpSyVrRRR96CnS3fOVDWfzxpngfxKD0/I9Rwu6c/3ITqD8rXeTQ==} - '@humanwhocodes/config-array@0.11.11': - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -3320,12 +3304,6 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@microsoft/tsdoc-config@0.16.2': - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - - '@microsoft/tsdoc@0.14.2': - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - '@miniflare/cache@2.14.4': resolution: {integrity: sha512-ayzdjhcj+4mjydbNK7ZGDpIXNliDbQY4GPcY2KrYw0v1OSUdj5kZUkygD09fqoGRfAks0d91VelkyRsAXX8FQA==} engines: {node: '>=16.13'} @@ -3421,9 +3399,6 @@ packages: '@next/env@14.2.23': resolution: {integrity: sha512-CysUC9IO+2Bh0omJ3qrb47S8DtsTKbFidGm6ow4gXIG6reZybqxbkH2nhdEm1tC8SmgzDdpq3BIML0PWsmyUYA==} - '@next/eslint-plugin-next@12.3.4': - resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} - '@next/swc-darwin-arm64@14.2.23': resolution: {integrity: sha512-WhtEntt6NcbABA8ypEoFd3uzq5iAnrl9AnZt9dXdO+PZLACE32z3a3qA5OoV20JrbJfSJ6Sd6EqGZTrlRnGxQQ==} engines: {node: '>= 10'} @@ -3481,9 +3456,6 @@ packages: '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4899,8 +4871,8 @@ packages: react-refresh: optional: true - '@rushstack/eslint-patch@1.5.1': - resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -5481,111 +5453,52 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@6.9.0': - resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/eslint-plugin@8.21.0': + resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/parser@8.21.0': + resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.21.0': + resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@6.9.0': - resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.9.0': - resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@8.21.0': + resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.21.0': + resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@6.9.0': - resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/typescript-estree@8.21.0': + resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/utils@8.21.0': + resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@6.9.0': - resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@6.9.0': - resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@6.9.0': - resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.21.0': + resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -5622,24 +5535,6 @@ packages: engines: {node: '>=16'} hasBin: true - '@vercel/style-guide@5.2.0': - resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true - '@verdaccio/auth@7.0.0-next-7.16': resolution: {integrity: sha512-jOfyBjBwCN+XqVKrjZSVQLGm1EOPKsKtaLzG9g9DyBUa89eMbjsRfA9g/ipf7jTuG1NZrZRQ68nzpGVbpEbC9Q==} engines: {node: '>=18'} @@ -6190,11 +6085,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-eslint-parser@1.0.1: - resolution: {integrity: sha512-vQoHUcGbnsVd1N4yZtCyxR+5zjDehf6Hmi4BSbOYRFpzR8ba3UySQUoHyWnj13AV9dyrxHsTZh9Z+x+eeIdqzw==} - peerDependencies: - eslint: '*' - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -6282,16 +6172,16 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: @@ -6328,8 +6218,8 @@ packages: resolution: {integrity: sha512-3bIRV4s/cNAee2rKjuvYdoG+0CMqtOIgCvWrJL6zG8R0fDyMwYzStspX5JqXPbdMzM+qxHZ6g2rMHKhr3HkPlQ==} engines: {node: '>=16.14.0'} - ast-types-flow@0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} ast-types@0.14.2: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} @@ -6414,17 +6304,13 @@ packages: aws4@1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - axe-core@4.8.0: - resolution: {integrity: sha512-ZtlVZobOeDQhb/y2lMK6mznDw7TJHDNcKx5/bbBkFvArIQ5CVFhSI6hWWQnMx9I8cNmNmZ30wpDyOC2E2nvgbQ==} + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - axobject-query@3.2.4: - resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} - engines: {node: '>= 0.4'} - axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -6654,10 +6540,6 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} @@ -6870,10 +6752,6 @@ packages: cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -7802,10 +7680,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -8019,8 +7893,8 @@ packages: es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - es-iterator-helpers@1.1.0: - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} es-module-lexer@1.6.0: @@ -8093,35 +7967,28 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + eslint-compat-utils@0.6.4: + resolution: {integrity: sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-prettier@10.0.1: + resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@2.2.3: - resolution: {integrity: sha512-/zwNU+G2w0HszXzWILdl6/Catt86ejUG7vsFSdpnFzFAAUbbT2TxgoCFvC1fKtm6+SkQsXwkRRe9tFz0aMftpg==} + eslint-config-turbo@2.3.3: + resolution: {integrity: sha512-cM9wSBYowQIrjx2MPCzFE6jTnG4vpTPJKZ/O+Ps3CqrmGK/wtNOsY6WHGMwLtKY/nNbgRahAJH6jGVF6k2coOg==} peerDependencies: eslint: '>6.6.0' - eslint-import-resolver-alias@1.1.2: - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -8141,28 +8008,22 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.28.1: - resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-jest@27.6.0: - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + eslint-plugin-jest@28.11.0: + resolution: {integrity: sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==} + engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 jest: 29.7.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': @@ -8170,112 +8031,84 @@ packages: jest: optional: true - eslint-plugin-jsx-a11y@6.7.1: - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-playwright@0.16.0: - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + eslint-plugin-playwright@2.1.0: + resolution: {integrity: sha512-wMbHOehofSB1cBdzz2CLaCYaKNLeTQ0YnOW+7AHa281TJqlpEJUBgTHbRUYOUxiXphfWwOyTPvgr6vvEmArbSA==} + engines: {node: '>=16.6.0'} peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true + eslint: '>=8.40.0' - eslint-plugin-playwright@0.22.2: - resolution: {integrity: sha512-LtOB9myIX1O7HHqg9vtvBLjvXq1MXKuXIcD1nS+qZiMUJV6s9HBdilURAr9pIFc9kEelbVF54hOJ8pMxHvJP7g==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} engines: {node: '>=10'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react@7.37.2: - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-regex@1.10.0: - resolution: {integrity: sha512-C8/qYKkkbIb0epxKzaz4aw7oVAOmm19fJpR/moUrUToq/vc4xW4sEKMlTQqH6EtNGpvLjYsbbZRlWNWwQGeTSA==} - engines: {node: '>=6.0.0'} - peerDependencies: - eslint: '>=4.0.0' - - eslint-plugin-simple-import-sort@10.0.0: - resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + eslint-plugin-simple-import-sort@12.1.1: + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: eslint: '>=5.0.0' - eslint-plugin-testing-library@6.1.0: - resolution: {integrity: sha512-r7kE+az3tbp8vyRwfyAGZ6V/xw+XvdWFPicIo6jbOPZoossOFDeHizARqPGV6gEkyF8hyCFhhH3mlQOGS3N5Sg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - - eslint-plugin-turbo@2.2.3: - resolution: {integrity: sha512-LHt35VwxthdGVO6hQRfvmFb6ee8/exAzAYWCy4o87Bnp7urltP8qg7xMd4dPSLAhtfnI2xSo1WgeVaR3MeItxw==} + eslint-plugin-turbo@2.3.3: + resolution: {integrity: sha512-j8UEA0Z+NNCsjZep9G5u5soDQHcXq/x4amrwulk6eHF1U91H2qAjp5I4jQcvJewmccCJbVp734PkHHTRnosjpg==} peerDependencies: eslint: '>6.6.0' - eslint-plugin-unicorn@48.0.1: - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} peerDependencies: - eslint: '>=8.44.0' - - eslint-plugin-unused-imports@3.2.0: - resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': 6 - 7 - eslint: '8' + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true - eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} + eslint-plugin-yml@1.16.0: + resolution: {integrity: sha512-t4MNCetPjTn18/fUDlQ/wKkcYjnuLYKChBrZ0qUaNqRigVqChHWzTP8SrfFi5s4keX3vdlkWRSu8zHJMdKwxWQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.49.0: - resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.18.0: + resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -8596,9 +8429,9 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -8667,9 +8500,9 @@ packages: find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -8929,10 +8762,6 @@ packages: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} deprecated: Glob versions prior to v9 are no longer supported - glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -8958,6 +8787,14 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -9066,10 +8903,6 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hash-sum@2.0.0: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} @@ -9320,8 +9153,8 @@ packages: resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} ignore@6.0.2: @@ -9498,10 +9331,6 @@ packages: is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -9863,8 +9692,8 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} jackspeak@3.4.3: @@ -10037,9 +9866,6 @@ packages: resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} hasBin: true - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - joi@17.12.2: resolution: {integrity: sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==} @@ -10129,10 +9955,6 @@ packages: canvas: optional: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} @@ -10148,6 +9970,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -10206,8 +10031,8 @@ packages: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} - jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} junk@4.0.1: @@ -10228,6 +10053,9 @@ packages: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -10254,11 +10082,12 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - language-tags@1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} @@ -10970,10 +10799,6 @@ packages: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -11382,11 +11207,12 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} obuf@1.1.2: @@ -12516,10 +12342,6 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - read-pkg-up@9.1.0: resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -12528,10 +12350,6 @@ packages: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-pkg@7.1.0: resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} engines: {node: '>=12.20'} @@ -12632,10 +12450,6 @@ packages: regex@4.3.3: resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -12647,10 +12461,6 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - regjsparser@0.11.2: resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} hasBin: true @@ -12733,9 +12543,6 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -13345,8 +13152,12 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} string.prototype.padend@3.1.6: @@ -13815,11 +13626,11 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' ts-expose-internals-conditionally@1.0.0-empty.0: resolution: {integrity: sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw==} @@ -13885,9 +13696,6 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} @@ -13917,12 +13725,6 @@ packages: typescript: optional: true - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@4.19.2: resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} @@ -14010,18 +13812,10 @@ packages: resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} engines: {node: '>=6'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -14069,6 +13863,13 @@ packages: peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x + typescript-eslint@8.21.0: + resolution: {integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -15052,6 +14853,10 @@ packages: yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -15301,14 +15106,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.22.15(@babel/core@7.26.0)(eslint@8.49.0)': - dependencies: - '@babel/core': 7.26.0 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.49.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - '@babel/generator@7.2.0': dependencies: '@babel/types': 7.26.3 @@ -16939,20 +16736,32 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.49.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.18.0(jiti@2.4.0))': dependencies: - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.8.1': {} + '@eslint-community/regexpp@4.12.1': {} - '@eslint/eslintrc@2.1.2': + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 debug: 4.4.0(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.2.4 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -16960,7 +16769,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.49.0': {} + '@eslint/js@9.18.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 '@expo/bunyan@4.0.1': dependencies: @@ -17386,17 +17202,18 @@ snapshots: '@hcaptcha/types@1.0.3': {} - '@humanwhocodes/config-array@0.11.11': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.4.0(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} '@iarna/toml@2.2.5': {} @@ -17821,15 +17638,6 @@ snapshots: - encoding - supports-color - '@microsoft/tsdoc-config@0.16.2': - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - - '@microsoft/tsdoc@0.14.2': {} - '@miniflare/cache@2.14.4': dependencies: '@miniflare/core': 2.14.4 @@ -17980,10 +17788,6 @@ snapshots: '@next/env@14.2.23': {} - '@next/eslint-plugin-next@12.3.4': - dependencies: - glob: 7.1.7 - '@next/swc-darwin-arm64@14.2.23': optional: true @@ -18014,10 +17818,6 @@ snapshots: '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -18179,7 +17979,7 @@ snapshots: - rollup - supports-color - '@nuxt/vite-builder@3.14.159(@types/node@22.10.6)(eslint@8.49.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))': + '@nuxt/vite-builder@3.14.159(@types/node@22.10.6)(eslint@9.18.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))': dependencies: '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.26.0) '@rollup/plugin-replace': 6.0.1(rollup@4.26.0) @@ -18213,7 +18013,7 @@ snapshots: unplugin: 1.16.1 vite: 5.4.11(@types/node@22.10.6)(terser@5.37.0) vite-node: 2.1.4(@types/node@22.10.6)(terser@5.37.0) - vite-plugin-checker: 0.8.0(eslint@8.49.0)(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)) + vite-plugin-checker: 0.8.0(eslint@9.18.0(jiti@2.4.0))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)) vue: 3.5.12(typescript@5.6.3) vue-bundle-renderer: 2.1.1 transitivePeerDependencies: @@ -20302,7 +20102,7 @@ snapshots: optionalDependencies: react-refresh: 0.14.2 - '@rushstack/eslint-patch@1.5.1': {} + '@rtsao/scc@1.1.0': {} '@sec-ant/readable-stream@0.4.1': {} @@ -21027,158 +20827,82 @@ snapshots: '@types/node': 22.10.6 optional: true - '@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.8.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.49.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/type-utils': 6.9.0(eslint@8.49.0)(typescript@5.6.3) - '@typescript-eslint/utils': 6.9.0(eslint@8.49.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 6.9.0 - debug: 4.4.0(supports-color@8.1.1) - eslint: 8.49.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.21.0 + eslint: 9.18.0(jiti@2.4.0) graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.21.0 debug: 4.4.0(supports-color@8.1.1) - eslint: 8.49.0 - optionalDependencies: + eslint: 9.18.0(jiti@2.4.0) typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/scope-manager@6.9.0': + '@typescript-eslint/scope-manager@8.21.0': dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 - '@typescript-eslint/type-utils@6.9.0(eslint@8.49.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.6.3) - '@typescript-eslint/utils': 6.9.0(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) debug: 4.4.0(supports-color@8.1.1) - eslint: 8.49.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: + eslint: 9.18.0(jiti@2.4.0) + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/types@8.21.0': {} - '@typescript-eslint/types@6.9.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.21.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 + fast-glob: 3.3.3 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.9.0(typescript@5.6.3)': + '@typescript-eslint/utils@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 - debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.18.0(jiti@2.4.0)) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.0) typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.49.0)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) - eslint: 8.49.0 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@6.9.0(eslint@8.49.0)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.6.3) - eslint: 8.49.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/visitor-keys@8.21.0': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@6.9.0': - dependencies: - '@typescript-eslint/types': 6.9.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.21.0 + eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.2.0': {} @@ -21240,38 +20964,6 @@ snapshots: - encoding - supports-color - '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@12.3.4)(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(prettier@3.3.3)(typescript@5.6.3)': - dependencies: - '@babel/core': 7.26.0 - '@babel/eslint-parser': 7.22.15(@babel/core@7.26.0)(eslint@8.49.0) - '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) - '@typescript-eslint/parser': 6.21.0(eslint@8.49.0)(typescript@5.6.3) - eslint-config-prettier: 9.1.0(eslint@8.49.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-plugin-import@2.28.1)(eslint@8.49.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.49.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3))(eslint@8.49.0) - eslint-plugin-react: 7.37.2(eslint@8.49.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0) - eslint-plugin-testing-library: 6.1.0(eslint@8.49.0)(typescript@5.6.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.49.0) - prettier-plugin-packagejson: 2.5.3(prettier@3.3.3) - optionalDependencies: - '@next/eslint-plugin-next': 12.3.4 - eslint: 8.49.0 - prettier: 3.3.3 - typescript: 5.6.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - '@verdaccio/auth@7.0.0-next-7.16': dependencies: '@verdaccio/config': 7.0.0-next-7.16 @@ -22073,10 +21765,6 @@ snapshots: ansi-styles@6.2.1: {} - any-eslint-parser@1.0.1(eslint@8.49.0): - dependencies: - eslint: 8.49.0 - any-promise@1.3.0: {} anymatch@3.1.3: @@ -22175,22 +21863,23 @@ snapshots: es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - array.prototype.findlastindex@1.2.3: + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.7 - array.prototype.flat@1.3.1: + array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: + array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -22234,7 +21923,7 @@ snapshots: '@babel/parser': 7.26.3 pathe: 1.1.2 - ast-types-flow@0.0.7: {} + ast-types-flow@0.0.8: {} ast-types@0.14.2: dependencies: @@ -22381,7 +22070,7 @@ snapshots: aws4@1.12.0: {} - axe-core@4.8.0: {} + axe-core@4.10.2: {} axios@1.7.7: dependencies: @@ -22391,8 +22080,6 @@ snapshots: transitivePeerDependencies: - debug - axobject-query@3.2.4: {} - axobject-query@4.1.0: {} b4a@1.6.6: {} @@ -22724,8 +22411,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-modules@3.3.0: {} - builtins@1.0.3: {} builtins@5.1.0: @@ -22947,10 +22632,6 @@ snapshots: cjs-module-lexer@1.2.3: {} - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - clean-stack@2.2.0: {} clean-stack@4.2.0: @@ -23885,10 +23566,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -24158,9 +23835,10 @@ snapshots: isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - es-iterator-helpers@1.1.0: + es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 @@ -24168,11 +23846,12 @@ snapshots: function-bind: 1.1.2 get-intrinsic: 1.2.7 globalthis: 1.0.4 + gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 - iterator.prototype: 1.1.3 + iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 es-module-lexer@1.6.0: {} @@ -24328,18 +24007,19 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@8.49.0): + eslint-compat-utils@0.6.4(eslint@9.18.0(jiti@2.4.0)): dependencies: - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) + semver: 7.6.3 - eslint-config-turbo@2.2.3(eslint@8.49.0): + eslint-config-prettier@10.0.1(eslint@9.18.0(jiti@2.4.0)): dependencies: - eslint: 8.49.0 - eslint-plugin-turbo: 2.2.3(eslint@8.49.0) + eslint: 9.18.0(jiti@2.4.0) - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.28.1): + eslint-config-turbo@2.3.3(eslint@9.18.0(jiti@2.4.0)): dependencies: - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0) + eslint: 9.18.0(jiti@2.4.0) + eslint-plugin-turbo: 2.3.3(eslint@9.18.0(jiti@2.4.0)) eslint-import-resolver-node@0.3.9: dependencies: @@ -24349,252 +24029,192 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-plugin-import@2.28.1)(eslint@8.49.0): - dependencies: - debug: 4.4.0(supports-color@8.1.1) - enhanced-resolve: 5.18.0 - eslint: 8.49.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0) - fast-glob: 3.3.3 - get-tsconfig: 4.8.0 - is-core-module: 2.16.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.18.0(jiti@2.4.0)): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.49.0)(typescript@5.6.3) - eslint: 8.49.0 + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-plugin-import@2.28.1)(eslint@8.49.0) transitivePeerDependencies: - supports-color - eslint-plugin-eslint-comments@3.2.0(eslint@8.49.0): - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.49.0 - ignore: 5.2.4 - - eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0)): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.2 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0) - has: 1.0.3 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.18.0(jiti@2.4.0)) + hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 - object.groupby: 1.0.1 - object.values: 1.2.0 + object.groupby: 1.0.3 + object.values: 1.2.1 semver: 6.3.1 + string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3): + eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) - eslint: 8.49.0 + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) jest: 29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsx-a11y@6.7.1(eslint@8.49.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.18.0(jiti@2.4.0)): dependencies: - '@babel/runtime': 7.26.0 aria-query: 5.3.2 array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.7 - axe-core: 4.8.0 - axobject-query: 3.2.4 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.49.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 + eslint: 9.18.0(jiti@2.4.0) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.8 object.fromentries: 2.0.8 - semver: 6.3.1 - - eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3))(eslint@8.49.0): - dependencies: - eslint: 8.49.0 - optionalDependencies: - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3) + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 - eslint-plugin-playwright@0.22.2(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3))(eslint@8.49.0): + eslint-plugin-playwright@2.1.0(eslint@9.18.0(jiti@2.4.0)): dependencies: - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) globals: 13.24.0 - optionalDependencies: - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(jest@29.7.0(@types/node@22.10.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.6.3)))(typescript@5.6.3) - eslint-plugin-react-hooks@4.6.0(eslint@8.49.0): + eslint-plugin-react-hooks@5.1.0(eslint@9.18.0(jiti@2.4.0)): dependencies: - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) - eslint-plugin-react@7.37.2(eslint@8.49.0): + eslint-plugin-react@7.37.4(eslint@9.18.0(jiti@2.4.0)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.1.0 - eslint: 8.49.0 + es-iterator-helpers: 1.2.1 + eslint: 9.18.0(jiti@2.4.0) estraverse: 5.3.0 hasown: 2.0.2 - jsx-ast-utils: 3.3.3 + jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regex@1.10.0(eslint@8.49.0): - dependencies: - eslint: 8.49.0 - - eslint-plugin-simple-import-sort@10.0.0(eslint@8.49.0): - dependencies: - eslint: 8.49.0 - - eslint-plugin-testing-library@6.1.0(eslint@8.49.0)(typescript@5.6.3): - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.6.3) - eslint: 8.49.0 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-tsdoc@0.2.17: + eslint-plugin-simple-import-sort@12.1.1(eslint@9.18.0(jiti@2.4.0)): dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 + eslint: 9.18.0(jiti@2.4.0) - eslint-plugin-turbo@2.2.3(eslint@8.49.0): + eslint-plugin-turbo@2.3.3(eslint@9.18.0(jiti@2.4.0)): dependencies: dotenv: 16.0.3 - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) - eslint-plugin-unicorn@48.0.1(eslint@8.49.0): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0)): dependencies: - '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.49.0 - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.1.0 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.3 - strip-indent: 3.0.0 - - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0): - dependencies: - eslint: 8.49.0 - eslint-rule-composer: 0.3.0 + eslint: 9.18.0(jiti@2.4.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.21.0(eslint@8.49.0)(typescript@5.6.3))(eslint@8.49.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) - eslint-rule-composer@0.3.0: {} + eslint-plugin-yml@1.16.0(eslint@9.18.0(jiti@2.4.0)): + dependencies: + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.18.0(jiti@2.4.0) + eslint-compat-utils: 0.6.4(eslint@9.18.0(jiti@2.4.0)) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.3 + transitivePeerDependencies: + - supports-color eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-visitor-keys@2.1.0: {} - eslint-visitor-keys@3.4.3: {} - eslint@8.49.0: + eslint-visitor-keys@4.2.0: {} + + eslint@9.18.0(jiti@2.4.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@eslint-community/regexpp': 4.8.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.49.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.18.0(jiti@2.4.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.4.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -25086,9 +24706,9 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.0.4 + flat-cache: 4.0.1 file-uri-to-path@1.0.0: {} @@ -25188,10 +24808,10 @@ snapshots: dependencies: micromatch: 4.0.8 - flat-cache@3.0.4: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 - rimraf: 3.0.2 + keyv: 4.5.4 flatted@3.3.1: {} @@ -25474,15 +25094,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@7.1.7: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -25514,6 +25125,10 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@14.0.0: {} + + globals@15.14.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -25524,7 +25139,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.3 - ignore: 5.2.4 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -25532,7 +25147,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.3 - ignore: 5.2.4 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -25540,7 +25155,7 @@ snapshots: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 - ignore: 5.2.4 + ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -25652,10 +25267,6 @@ snapshots: has-unicode@2.0.1: {} - has@1.0.3: - dependencies: - function-bind: 1.1.2 - hash-sum@2.0.0: {} hasown@2.0.2: @@ -25976,7 +25587,7 @@ snapshots: dependencies: minimatch: 5.1.6 - ignore@5.2.4: {} + ignore@5.3.2: {} ignore@6.0.2: {} @@ -26179,10 +25790,6 @@ snapshots: is-buffer@1.1.6: {} - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - is-callable@1.2.7: {} is-ci@3.0.1: @@ -26487,12 +26094,13 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.3: + iterator.prototype@1.1.5: dependencies: - define-properties: 1.2.1 + define-data-property: 1.1.4 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.7 + get-proto: 1.0.1 has-symbols: 1.1.0 - reflect.getprototypeof: 1.0.10 set-function-name: 2.0.2 jackspeak@3.4.3: @@ -26853,8 +26461,6 @@ snapshots: jiti@2.4.0: {} - jju@1.4.0: {} - joi@17.12.2: dependencies: '@hapi/hoek': 9.3.0 @@ -27035,14 +26641,14 @@ snapshots: - supports-color - utf-8-validate - jsesc@0.5.0: {} - jsesc@2.5.2: {} jsesc@3.0.2: {} jsesc@3.1.0: {} + json-buffer@3.0.1: {} + json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -27112,10 +26718,12 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jsx-ast-utils@3.3.3: + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 + array.prototype.flat: 1.3.3 object.assign: 4.1.7 + object.values: 1.2.1 junk@4.0.1: {} @@ -27140,6 +26748,10 @@ snapshots: dependencies: tsscmp: 1.0.6 + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kind-of@3.2.2: dependencies: is-buffer: 1.1.6 @@ -27156,11 +26768,11 @@ snapshots: kolorist@1.8.0: {} - language-subtag-registry@0.3.22: {} + language-subtag-registry@0.3.23: {} - language-tags@1.0.5: + language-tags@1.0.9: dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 launch-editor@2.9.1: dependencies: @@ -28162,10 +27774,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -28604,14 +28212,14 @@ snapshots: nuxi@3.15.0: {} - nuxt@3.14.159(@parcel/watcher@2.4.1)(@types/node@22.10.6)(eslint@8.49.0)(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)): + nuxt@3.14.159(@parcel/watcher@2.4.1)(@types/node@22.10.6)(eslint@9.18.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)): dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.6.0(rollup@4.26.0)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0))(vue@3.5.12(typescript@5.6.3)) '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.26.0) '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@4.26.0) '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.26.0) - '@nuxt/vite-builder': 3.14.159(@types/node@22.10.6)(eslint@8.49.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@nuxt/vite-builder': 3.14.159(@types/node@22.10.6)(eslint@9.18.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.26.0)(terser@5.37.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) '@unhead/dom': 1.11.11 '@unhead/shared': 1.11.11 '@unhead/ssr': 1.11.11 @@ -28765,16 +28373,16 @@ snapshots: es-abstract: 1.23.9 es-object-atoms: 1.0.0 - object.groupby@1.0.1: + object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - get-intrinsic: 1.2.7 - object.values@1.2.0: + object.values@1.2.1: dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -29950,12 +29558,6 @@ snapshots: dependencies: pify: 2.3.0 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - read-pkg-up@9.1.0: dependencies: find-up: 6.3.0 @@ -29968,13 +29570,6 @@ snapshots: normalize-package-data: 2.5.0 path-type: 3.0.0 - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-pkg@7.1.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -30106,8 +29701,6 @@ snapshots: regex@4.3.3: {} - regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -30128,10 +29721,6 @@ snapshots: regjsgen@0.8.0: {} - regjsparser@0.10.0: - dependencies: - jsesc: 0.5.0 - regjsparser@0.11.2: dependencies: jsesc: 3.0.2 @@ -30238,11 +29827,6 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.19.0: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -31003,11 +30587,18 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.11: + string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 get-intrinsic: 1.2.7 @@ -31502,7 +31093,7 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@2.0.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -31570,8 +31161,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.4.1: {} tslib@2.8.1: {} @@ -31605,11 +31194,6 @@ snapshots: - tsx - yaml - tsutils@3.21.0(typescript@5.6.3): - dependencies: - tslib: 1.14.1 - typescript: 5.6.3 - tsx@4.19.2: dependencies: esbuild: 0.23.1 @@ -31678,12 +31262,8 @@ snapshots: type-fest@0.3.1: {} - type-fest@0.6.0: {} - type-fest@0.7.1: {} - type-fest@0.8.1: {} - type-fest@1.4.0: {} type-fest@2.19.0: {} @@ -31750,6 +31330,16 @@ snapshots: typescript: 5.6.3 yaml: 2.7.0 + typescript-eslint@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.0) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + typescript@5.3.3: {} typescript@5.6.3: {} @@ -32318,7 +31908,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.8.0(eslint@8.49.0)(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)): + vite-plugin-checker@0.8.0(eslint@9.18.0(jiti@2.4.0))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.11(@types/node@22.10.6)(terser@5.37.0)): dependencies: '@babel/code-frame': 7.26.2 ansi-escapes: 4.3.2 @@ -32336,7 +31926,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 8.49.0 + eslint: 9.18.0(jiti@2.4.0) optionator: 0.9.4 typescript: 5.6.3 @@ -32904,7 +32494,7 @@ snapshots: detect-indent: 6.1.0 fs-extra: 8.1.0 glob: 7.2.3 - ignore: 5.2.4 + ignore: 5.3.2 ini: 2.0.0 npm-packlist: 2.2.2 yargs: 16.2.0 @@ -32917,6 +32507,12 @@ snapshots: yaml-ast-parser@0.0.43: {} + yaml-eslint-parser@1.2.3: + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.7.0 + yaml@1.10.2: {} yaml@2.3.1: {} diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js deleted file mode 100644 index e3c0b10289c..00000000000 --- a/scripts/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - root: true, - extends: ['@clerk/custom/node', '@clerk/custom/typescript'], - rules: { - 'import/no-unresolved': ['error', { ignore: ['^#'] }], - }, -}; diff --git a/scripts/canary.mjs b/scripts/canary.mjs index 4fca369fa37..5c47d167f30 100755 --- a/scripts/canary.mjs +++ b/scripts/canary.mjs @@ -37,7 +37,7 @@ try { // generate a temp .md file that indicates that all packages have changes // in order to force a snapshot release await $`touch .changeset/snap.md && echo ${snapshot} > .changeset/snap.md`; -} catch (e) { +} catch { // otherwise, do nothing } diff --git a/scripts/install-site-in-isolation.mjs b/scripts/install-site-in-isolation.mjs index dccd2fa4610..f2aa0707e76 100644 --- a/scripts/install-site-in-isolation.mjs +++ b/scripts/install-site-in-isolation.mjs @@ -1,6 +1,5 @@ #!/usr/bin/env zx -/* eslint-disable turbo/no-undeclared-env-vars */ import { cp, mkdir, mkdtemp } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; diff --git a/scripts/lint.mjs b/scripts/lint.mjs new file mode 100644 index 00000000000..aa66d1e6145 --- /dev/null +++ b/scripts/lint.mjs @@ -0,0 +1,49 @@ +#!/usr/bin/env node + +import { $, chalk } from 'zx'; + +$.env = { + ...process.env, + FORCE_COLOR: 1, +}; +$.stdio = 'inherit'; +$.verbose = !!process.env.VERBOSE; + +const [github, integration, scripts] = await Promise.allSettled([ + $`echo "SKIPPING: pnpm eslint .github/workflows"`, + $`pnpm eslint integration`, + $`pnpm eslint scripts`, +]); + +let packages; +try { + await $`pnpm turbo lint`; +} catch (error) { + packages = error; +} + +function logLintResult(status, directory, command) { + console.log(''); + + if (status === 'rejected') { + console.log(chalk.red(`${directory} lint failed`)); + console.log(`Run '${chalk.bold(command)}' to reproduce the error`); + } + if (status === 'fulfilled') { + console.log(chalk.green(`${directory} lint passed`)); + } +} + +logLintResult(github.status, 'GitHub Actions', 'pnpm eslint .github/workflows'); +logLintResult(integration.status, 'Integration directory', 'pnpm eslint integration'); +logLintResult(scripts.status, 'Scripts directory', 'pnpm eslint scripts'); + +if (packages?.exitCode) { + console.log(''); + console.log(chalk.red('Packages lint failed')); + console.log(`Run '${chalk.bold('pnpm turbo lint')}' to reproduce the error`); +} + +if (integration.status === 'rejected' || packages?.exitCode) { + process.exit(1); +} diff --git a/scripts/nuke.mjs b/scripts/nuke.mjs index fb07d195663..066e09b37b6 100755 --- a/scripts/nuke.mjs +++ b/scripts/nuke.mjs @@ -7,7 +7,6 @@ import { $ } from 'zx'; const $$ = $({ env: { NODE_ENV: 'production' }, - // eslint-disable-next-line turbo/no-undeclared-env-vars verbose: !!process.env.VERBOSE, }); diff --git a/scripts/search-for-rhc.mjs b/scripts/search-for-rhc.mjs index a3b3ba2b1a7..4f6b971f878 100644 --- a/scripts/search-for-rhc.mjs +++ b/scripts/search-for-rhc.mjs @@ -7,17 +7,13 @@ import { $, argv } from 'zx'; -async function run() { - const buildFolder = argv._[0]; - console.log(`🔍 Inspecting folder: ${buildFolder}`); - const flags = ['--recursive', '--quiet', '--include=*.js', '--include=*.mjs']; +const buildFolder = argv._[0]; +console.log(`🔍 Inspecting folder: ${buildFolder}`); +const flags = ['--recursive', '--quiet', '--include=*.js', '--include=*.mjs']; - // Leveraging https://google.github.io/zx/process-promise#nothrow to avoid throwing an error if the command fails - if ((await $`grep ${flags} 'https://\${scriptHost}/npm/@clerk/clerk-js' ${buildFolder}`.exitCode) === 0) { - throw new Error('Found RHC in build output'); - } else { - console.log('✅ No RHC found in build output'); - } +// Leveraging https://google.github.io/zx/process-promise#nothrow to avoid throwing an error if the command fails +if ((await $`grep ${flags} 'https://\${scriptHost}/npm/@clerk/clerk-js' ${buildFolder}`.exitCode) === 0) { + throw new Error('Found RHC in build output'); +} else { + console.log('✅ No RHC found in build output'); } - -run(); diff --git a/scripts/snapshot.mjs b/scripts/snapshot.mjs index a4aa3db2ad3..8b65c77e882 100755 --- a/scripts/snapshot.mjs +++ b/scripts/snapshot.mjs @@ -39,7 +39,7 @@ try { // generate a temp .md file that indicates that all packages have changes // in order to force a snapshot release await $`touch .changeset/snap.md && echo ${snapshot} > .changeset/snap.md`; -} catch (e) { +} catch { // otherwise, do nothing } diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 00000000000..1809033ffb2 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true + } +} diff --git a/scripts/utils.ts b/scripts/utils.ts index c63f71ba152..9b0efba0b31 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -1,4 +1,4 @@ -import { Options } from 'tsup'; +import type { Options } from 'tsup'; export const runAfterLast = (commands: Array) => diff --git a/tsconfig.json b/tsconfig.json index 12569e30cc0..e5339d09383 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,6 @@ "noEmitHelpers": true, "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, - "noImplicitUseStrict": true, "noUnusedLocals": true, "noUnusedParameters": true, "pretty": true, diff --git a/turbo.json b/turbo.json index f91b5b04d8b..6d7bdb5ae37 100644 --- a/turbo.json +++ b/turbo.json @@ -7,6 +7,7 @@ "globalDependencies": [ ".github/.cache-version", ".npmrc", + "eslint.config.mjs", "jest.*.ts", "package.json", "pnpm-lock.yaml", @@ -17,18 +18,19 @@ ], "globalEnv": [ "CLERK_*", + "EXPO_PUBLIC_CLERK_*", + "NEXT_PHASE", "NEXT_PUBLIC_CLERK_*", - "PLASMO_PUBLIC_CLERK_*", - "PUBLIC_CLERK_*", "NODE_ENV", "NODE_VERSION", "NPM_VERSION", + "PLASMO_PUBLIC_CLERK_*", + "PUBLIC_CLERK_*", + "REACT_APP_CLERK_*", + "RSDOCTOR", "TZ", "VERCEL", - "VITE_CLERK_*", - "EXPO_PUBLIC_CLERK_*", - "REACT_APP_CLERK_*", - "NEXT_PHASE" + "VITE_CLERK_*" ], "globalPassThroughEnv": ["AWS_SECRET_KEY", "GITHUB_TOKEN", "ACTIONS_RUNNER_DEBUG", "ACTIONS_STEP_DEBUG"], "tasks": { diff --git a/typedoc.config.mjs b/typedoc.config.mjs index c5f6540c7a2..a8117849bf0 100644 --- a/typedoc.config.mjs +++ b/typedoc.config.mjs @@ -4,7 +4,6 @@ import fs from 'node:fs'; const IGNORE_LIST = [ '.DS_Store', 'dev-cli', - 'eslint-config-custom', 'expo-passkeys', 'tailwind-css-transformer', 'testing',