Compare commits

...

4 Commits

Author SHA1 Message Date
Tommy Verrall 7a1c9d1ba6 Tidy up. 2026-04-27 13:38:28 +02:00
Tommy Verrall 1aee1a949d ESLint 9 flat config, CI smoke, and react TSX lint fix
- Comment feedback and tightening up CI smoke tests
2026-04-27 13:14:47 +02:00
Tommy Verrall 03c4372224 Trim eslint config comments;
- Update packages
2026-04-23 16:16:34 +01:00
Tommy Verrall 17978aeacf Reapply "Merge remote-tracking branch 'origin/develop' into chore/eslint-9-flat-config-migration"
This reverts commit aaa8ee9d53.
2026-04-23 15:44:15 +01:00
35 changed files with 672 additions and 241 deletions
+24 -4
View File
@@ -6,23 +6,43 @@ on:
paths:
- "ts-packages/**"
- "sdk/typescript/**"
- "nym-wallet/src/**"
- "nym-wallet/package.json"
- "nym-wallet/**"
- "explorer-v2/**"
- ".github/workflows/ci-lint-typescript.yml"
- "scripts/eslint-ci-smoke.sh"
- "package.json"
- ".nvmrc"
jobs:
eslint-smoke:
runs-on: arc-linux-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- name: Setup yarn
run: npm install -g yarn
- name: Install
run: yarn
- name: ESLint flat config smoke (print-config + max-warnings 0)
run: yarn lint:ci:eslint-smoke
build:
runs-on: arc-linux-latest
env:
RUSTUP_PERMIT_COPY_RENAME: 1
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: rlespinasse/github-slug-action@v3.x
- uses: actions/setup-node@v4
with:
node-version: 20
node-version-file: '.nvmrc'
- name: Setup yarn
run: npm install -g yarn
+1
View File
@@ -0,0 +1 @@
20.19.5
+18
View File
@@ -0,0 +1,18 @@
// nym-wallet: shared preset + tsconfig.eslint.json
const sharedConfig = require('@nymproject/eslint-config-react-typescript');
module.exports = [
...sharedConfig,
{
languageOptions: {
parserOptions: {
project: './tsconfig.eslint.json',
tsconfigRootDir: __dirname,
},
},
},
{
ignores: ['dist/**', 'node_modules/**', 'src-tauri/**', '*.config.js'],
},
];
+8 -8
View File
@@ -88,8 +88,8 @@
"@types/semver": "^7.3.8",
"@types/uuid": "^8.3.4",
"@types/zxcvbn": "^4.4.1",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.13.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"babel-loader": "^8.3.0",
"babel-plugin-root-import": "^6.6.0",
"clean-webpack-plugin": "^4.0.0",
@@ -101,13 +101,13 @@
"eslint-config-airbnb-typescript": "^16.1.0",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-root-import": "^1.0.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.1.1",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.2",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-storybook": "^0.5.12",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-storybook": "^0.11.0",
"favicons": "^7.0.2",
"favicons-webpack-plugin": "^5.0.2",
"file-loader": "^6.2.0",
@@ -63,7 +63,7 @@ const operatingCostAndPmValidation = (params?: TauriContractStateParams) => {
operatorCost: Yup.object().shape({
amount: Yup.string()
.required('An operating cost is required')
// eslint-disable-next-line prefer-arrow-callback
.test('valid-operating-cost', 'A valid amount is required', async function isValidAmount(this, value) {
if (
value &&
@@ -23,7 +23,7 @@ const operatingCostAndPmValidation = (params?: TauriContractStateParams) => {
interval_operating_cost: Yup.object().shape({
amount: Yup.string()
.required('An operating cost is required')
// eslint-disable-next-line prefer-arrow-callback
.test('valid-operating-cost', 'A valid amount is required', async function isValidAmount(this, value) {
if (
value &&
@@ -163,7 +163,6 @@ export const DelegationList: FCWithChildren<{
items: TDelegations;
onItemActionClick?: (item: DelegationWithEverything, action: DelegationListItemActions) => void;
explorerUrl: string;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}> = ({ isLoading, items, onItemActionClick, explorerUrl }) => {
const [order, setOrder] = React.useState<Order>('asc');
const [orderBy, setOrderBy] = React.useState<SortingKeys>('delegated_on_iso_datetime');
@@ -8,7 +8,6 @@ import { ErrorModal } from '../Modals/ErrorModal';
export type ActionType = 'delegate' | 'undelegate' | 'redeem' | 'redeem-all' | 'compound';
const actionToHeader = (action: ActionType): string => {
// eslint-disable-next-line default-case
switch (action) {
case 'redeem':
return 'Rewards redeemed successfully';
-1
View File
@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/naming-convention */
import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';
import {
CurrencyDenom,
@@ -1,4 +1,3 @@
/* eslint-disable no-nested-ternary */
import React from 'react';
import zxcvbn, { ZXCVBNScore } from 'zxcvbn';
import { LockOutlined } from '@mui/icons-material';
@@ -1,4 +1,3 @@
/* eslint-disable react/no-unused-prop-types */
import React from 'react';
import { useNavigate } from 'react-router-dom';
import { Box, Button, Stack, Typography } from '@mui/material';
@@ -1,4 +1,3 @@
/* eslint-disable react/no-unused-prop-types */
import React from 'react';
import { useNavigate } from 'react-router-dom';
import { Button, Stack, Typography } from '@mui/material';
@@ -1,4 +1,3 @@
/* eslint-disable react/no-unused-prop-types */
import React from 'react';
import { Button, Stack } from '@mui/material';
import { useNavigate } from 'react-router-dom';
@@ -1,4 +1,3 @@
/* eslint-disable no-nested-ternary */
import React, { useContext, useState } from 'react';
import { useForm } from 'react-hook-form';
import { Box, Button, Chip, CircularProgress, Grid, LinearProgress, Stack, TextField, Typography } from '@mui/material';
+1 -1
View File
@@ -1,4 +1,4 @@
/* eslint-disable no-shadow,@typescript-eslint/no-unused-vars,@typescript-eslint/no-empty-interface */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Theme, ThemeOptions, Palette, PaletteOptions } from '@mui/material/styles';
import { PaletteMode } from '@mui/material';
+1
View File
@@ -21,6 +21,7 @@
"docs:prod:build": "run-s docs:prod:build:ws",
"docs:prod:build:ws": "lerna run docs:prod:build --stream",
"lint": "lerna run lint --stream",
"lint:ci:eslint-smoke": "bash scripts/eslint-ci-smoke.sh",
"lint:fix": "lerna run lint:fix --stream",
"nuke": "npx rimraf **/node_modules node_modules",
"postbuild:ci": "yarn dev:off",
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env bash
# Fast CI: flat config resolves (incl. parserOptions.project) and workspace lint is warning-clean.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
ESLINT="$ROOT/node_modules/.bin/eslint"
print_cfg() {
local subdir="$1" relpath="$2"
(cd "$ROOT/$subdir" && "$ESLINT" --print-config "$relpath" >/dev/null)
}
print_cfg ts-packages/types src/index.ts
print_cfg ts-packages/webpack index.js
print_cfg sdk/typescript/packages/react-components src/components/link/Link.tsx
print_cfg sdk/typescript/packages/mui-theme src/index.ts
print_cfg nym-wallet src/theme/index.tsx
yarn workspace @nymproject/eslint-config-react-typescript run lint --max-warnings 0
yarn workspace @nymproject/types run lint --max-warnings 0
yarn workspace @nymproject/webpack run lint --max-warnings 0
yarn workspace @nymproject/react run lint --max-warnings 0
yarn workspace @nymproject/mui-theme run lint --max-warnings 0
yarn workspace @nymproject/nym-wallet-app run lint --max-warnings 0
@@ -0,0 +1,12 @@
const { airbnbTypescriptBaseFlat } = require('@nymproject/eslint-config-react-typescript/airbnb-typescript-base-flat');
module.exports = [
...airbnbTypescriptBaseFlat({
baseDirectory: __dirname,
project: './tsconfig.json',
typedGlobs: ['**/*.ts', '**/*.tsx'],
}),
{
ignores: ['tsconfig.json', '**/*.d.ts', 'dist/**', 'node_modules/**', '*.config.js'],
},
];
@@ -11,20 +11,22 @@
"@mui/styles": "^5.2.2"
},
"devDependencies": {
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.26.0",
"@nymproject/eslint-config-react-typescript": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.13.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"eslint": "^9.26.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^16.1.0",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-root-import": "^1.0.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.1.1",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.2",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^5.0.0",
"prettier": "^2.8.7",
"typescript": "^4.6.2",
"ts-jest": "^27.0.5",
@@ -1,12 +1,11 @@
import { createTheme, Palette, ThemeOptions } from '@mui/material/styles';
import { PaletteMode } from '@mui/material';
import { nymPalette, NymPalette } from './common';
// eslint-disable-next-line import/no-cycle
/* eslint-disable import/no-cycle -- palette modules reference each other (MUI theme graph) */
import { NymWalletPalette } from './wallet';
// eslint-disable-next-line import/no-cycle
import { NetworkExplorerPalette } from './network-explorer';
// eslint-disable-next-line import/no-cycle
import { createDarkModePalette, createLightModePalette } from './utils';
/* eslint-enable import/no-cycle */
/**
* To use the theme, copy the file in `../../template/mui-theme.d.ts` into `src/typings/mui-theme.d.ts` in your project.
@@ -24,7 +23,6 @@ export interface NymPaletteWithExtensions {
/**
* Add anything Nym specific to the MUI theme.
*/
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface NymTheme {
palette: Palette & NymPaletteWithExtensions;
}
@@ -0,0 +1,14 @@
const { airbnbTypescriptBaseFlat } = require('@nymproject/eslint-config-react-typescript/airbnb-typescript-base-flat');
module.exports = [
...airbnbTypescriptBaseFlat({
baseDirectory: __dirname,
project: './tsconfig.eslint.json',
typedGlobs: ['**/*.ts', '**/*.tsx'],
}),
{
// .storybook excluded: those .js files use JSX/optional-chaining without a matching parser.
// Follow-up: add a Storybook-scoped ESLint slice (parser + plugin:storybook/recommended).
ignores: ['tsconfig.json', '**/*.d.ts', '.storybook/**', 'dist/**', 'node_modules/**', '*.config.js'],
},
];
@@ -46,6 +46,8 @@
},
"devDependencies": {
"@babel/core": "^7.17.5",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.26.0",
"@nymproject/eslint-config-react-typescript": "^1.0.0",
"@storybook/addon-actions": "^6.5.8",
"@storybook/addon-essentials": "^6.5.8",
@@ -59,8 +61,8 @@
"@types/flat": "^5.0.2",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.10",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.13.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"babel-loader": "^8.2.3",
"babel-plugin-root-import": "^5.1.0",
"eslint": "^9.26.0",
@@ -68,13 +70,13 @@
"eslint-config-airbnb-typescript": "^16.1.0",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-root-import": "^1.0.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.1.1",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.2",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-storybook": "^0.5.12",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-storybook": "^0.11.0",
"jest": "^27.1.0",
"prettier": "^2.8.7",
"rimraf": "^3.0.2",
@@ -87,8 +89,8 @@
"tsc": "tsc --noEmit true",
"build": "tsc --noEmit false",
"watch": "tsc --noEmit false -w",
"lint": "eslint src .storybook",
"lint:fix": "eslint src .storybook --fix",
"lint": "eslint src",
"lint:fix": "eslint src --fix",
"storybook": "start-storybook -p 6006",
"storybook:build": "build-storybook"
},
@@ -4,13 +4,11 @@ import { CopyToClipboard } from '../clipboard/CopyToClipboard';
const AddressTooltip: FCWithChildren<{ visible?: boolean; address?: string }> = ({ visible, address, children }) => {
if (!visible || !address) {
// eslint-disable-next-line react/jsx-no-useless-fragment
return <>{children}</>;
}
return (
<Tooltip title={address} arrow>
{/* eslint-disable-next-line react/jsx-no-useless-fragment */}
<>{children}</>
</Tooltip>
);
@@ -1,13 +1,12 @@
/* eslint-disable react/no-array-index-key */
import * as React from 'react';
import type { DecCoin } from '@nymproject/types';
import { Stack, SxProps, Typography } from '@mui/material';
export const CURRENCY_AMOUNT_SPACING = 0.35;
const toReverseChunks = (value: String, size: number = 3): Array<string> => {
const toReverseChunks = (value: string, size: number = 3): Array<string> => {
const reversed = value.split('').reverse();
const chunks: Array<Array<String>> = [];
const chunks: Array<Array<string>> = [];
let chunksIndex = 0;
reversed.forEach((char, index) => {
if (index > 0 && index % size === 0) {
@@ -21,8 +20,8 @@ const toReverseChunks = (value: String, size: number = 3): Array<string> => {
return chunks.map((chars) => chars.reverse().join('')).reverse();
};
const toChunks = (value: String, size: number = 3): Array<string> => {
const chunks: Array<Array<String>> = [];
const toChunks = (value: string, size: number = 3): Array<string> => {
const chunks: Array<Array<string>> = [];
let chunksIndex = 0;
value.split('').forEach((char, index) => {
if (index > 0 && index % size === 0) {
@@ -1,16 +1,15 @@
/* eslint-disable no-nested-ternary */
import React from 'react';
import zxcvbn, { ZXCVBNScore } from 'zxcvbn';
import { LockOutlined } from '@mui/icons-material';
import { LinearProgress, Stack, Typography, Box } from '@mui/material';
const colorMap = {
4: 'success' as 'success',
3: 'success' as 'success',
2: 'warning' as 'warning',
1: 'error' as 'error',
0: 'error' as 'error',
};
4: 'success',
3: 'success',
2: 'warning',
1: 'error',
0: 'error',
} as const;
const getText = (score: ZXCVBNScore) => {
switch (score) {
@@ -1,4 +1,3 @@
/* eslint-disable react/no-array-index-key */
import * as React from 'react';
import type { Theme } from '@mui/material/styles';
import { SimpleTreeView, TreeItem } from '@mui/x-tree-view';
@@ -0,0 +1,97 @@
'use strict';
const { FlatCompat } = require('@eslint/eslintrc');
const js = require('@eslint/js');
function airbnbTypescriptBaseFlat({ baseDirectory, project, typedGlobs }) {
const compat = new FlatCompat({
baseDirectory,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
return compat.config({
env: {
browser: true,
es6: true,
node: true,
jest: true,
},
parserOptions: {
ecmaVersion: 2019,
sourceType: 'module',
},
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},
plugins: ['prettier'],
extends: ['airbnb-base', 'prettier'],
rules: {
'prettier/prettier': 'error',
'import/prefer-default-export': 'off',
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: ['**/*.test.[jt]s', '**/*.spec.[jt]s'],
},
],
'import/extensions': [
'error',
'ignorePackages',
{
ts: 'never',
js: 'never',
},
],
},
overrides: [
{
files: typedGlobs,
parser: '@typescript-eslint/parser',
parserOptions: {
project,
tsconfigRootDir: baseDirectory,
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'airbnb-typescript/base',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
],
rules: {
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'no-use-before-define': [0],
'@typescript-eslint/no-use-before-define': [1],
'import/no-unresolved': 0,
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: ['**/*.test.ts', '**/*.spec.ts', '**/*.stories.ts', '**/*.stories.tsx'],
},
],
quotes: [
2,
'single',
{
avoidEscape: true,
},
],
'@typescript-eslint/no-unused-vars': [2, { argsIgnorePattern: '^_', caughtErrors: 'none' }],
'@typescript-eslint/lines-between-class-members': 'off',
'@typescript-eslint/no-throw-literal': 'off',
'@typescript-eslint/space-before-function-paren': 'off',
'@typescript-eslint/no-loss-of-precision': 'off',
'@typescript-eslint/quotes': 'off',
'@typescript-eslint/no-empty-object-type': 'off',
'import/extensions': 'off',
},
},
],
});
}
module.exports = { airbnbTypescriptBaseFlat };
@@ -0,0 +1,32 @@
// Self-lint only: index.js, eslint.config.js (see package.json `eslint *.js`).
const js = require('@eslint/js');
const prettierPlugin = require('eslint-plugin-prettier');
const prettierConfig = require('eslint-config-prettier');
module.exports = [
js.configs.recommended,
{
files: ['index.js', 'airbnb-typescript-base-flat.js', 'eslint.config.js'],
languageOptions: {
ecmaVersion: 2022,
sourceType: 'commonjs',
globals: {
module: 'readonly',
require: 'readonly',
__dirname: 'readonly',
process: 'readonly',
},
},
plugins: {
prettier: prettierPlugin,
},
rules: {
...prettierConfig.rules,
'prettier/prettier': 'error',
},
},
{
ignores: ['node_modules/**', 'dist/**'],
},
];
@@ -1,115 +1,122 @@
module.exports = {
env: {
browser: true,
es6: true,
node: true,
jest: true,
},
parserOptions: {
ecmaFeatures: {
jsx: true,
// ESLint 9 flat preset (FlatCompat). Consumers: `...require('...')` then append `languageOptions.parserOptions`.
const { FlatCompat } = require('@eslint/eslintrc');
const js = require('@eslint/js');
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
module.exports = [
...compat.config({
env: {
browser: true,
es6: true,
node: true,
jest: true,
},
ecmaVersion: 2019,
sourceType: 'module',
project: './tsconfig.json',
},
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},
plugins: ['react', 'react-hooks', 'jsx-a11y', 'prettier', 'jest'],
extends: [
'plugin:react/recommended',
'airbnb',
'airbnb-typescript',
'prettier',
'plugin:jest/recommended',
'plugin:jest/style',
],
ignorePatterns: ['dist/**/*', 'dist', 'node_modules'],
rules: {
'jest/prefer-strict-equal': 'error',
'jest/prefer-to-have-length': 'warn',
'prettier/prettier': 'error',
'import/prefer-default-export': 'off',
'react/prop-types': 'off',
'react/jsx-filename-extension': 'off',
'react/jsx-props-no-spreading': 'off',
'react/require-default-props': [
1, // warn
{
ignoreFunctionalComponents: true,
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 2019,
sourceType: 'module',
},
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},
plugins: ['react', 'react-hooks', 'jsx-a11y', 'prettier', 'jest'],
extends: [
'plugin:react/recommended',
'airbnb',
'airbnb-typescript',
'prettier',
'plugin:jest/recommended',
'plugin:jest/style',
],
// see https://github.com/facebook/create-react-app/discussions/11864#discussioncomment-1933829
// and https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
'react/function-component-definition': [
2, // error
{
namedComponents: 'arrow-function',
unnamedComponents: 'arrow-function',
},
],
'import/no-extraneous-dependencies': [
2, // error
{
devDependencies: [
'**/*.test.[jt]s',
'**/*.spec.[jt]s',
'**/*.test.[jt]sx',
'**/*.spec.[jt]sx',
// see https://github.com/storybookjs/linter-config/blob/master/eslint.config.js#L100
'**/*.stories.*',
'**/.storybook/**/*.*',
],
peerDependencies: true,
},
],
'import/extensions': [
'error',
'ignorePackages',
{
ts: 'never',
tsx: 'never',
js: 'never',
jsx: 'never',
},
],
'@typescript-eslint/no-use-before-define': [
'error',
{ functions: false, classes: true, variables: true, typedefs: true },
],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'no-use-before-define': [0],
'import/no-unresolved': 0,
quotes: 'off',
'@typescript-eslint/quotes': [
2,
'single',
{
avoidEscape: true,
},
],
'@typescript-eslint/no-unused-vars': [2, { argsIgnorePattern: '^_' }],
},
// overrides: [
// {
// files: ['**/*.js', '**/*.jsx'],
// parser: 'espree', // override parser to be the default eslint Javascript parser (see https://eslint.org/docs/user-guide/configuring/plugins#specifying-parser)
// extends: ['plugin:react/recommended', 'airbnb', 'prettier', 'plugin:jest/recommended', 'plugin:jest/style'],
// },
// ],
settings: {
'import/resolver': {
'root-import': {
rootPathPrefix: '@',
rootPathSuffix: 'src',
extensions: ['.js', '.ts', '.tsx', '.jsx', '.mdx'],
rules: {
'jest/prefer-strict-equal': 'error',
'jest/prefer-to-have-length': 'error',
'prettier/prettier': 'error',
'import/prefer-default-export': 'off',
'react/prop-types': 'off',
'react/jsx-filename-extension': 'off',
'react/jsx-props-no-spreading': 'off',
'react/require-default-props': [
1,
{
ignoreFunctionalComponents: true,
},
],
'react/function-component-definition': [
2,
{
namedComponents: 'arrow-function',
unnamedComponents: 'arrow-function',
},
],
'import/no-extraneous-dependencies': [
2,
{
devDependencies: [
'**/*.test.[jt]s',
'**/*.spec.[jt]s',
'**/*.test.[jt]sx',
'**/*.spec.[jt]sx',
'**/*.stories.*',
'**/.storybook/**/*.*',
],
peerDependencies: true,
},
],
'import/extensions': [
'error',
'ignorePackages',
{
ts: 'never',
tsx: 'never',
js: 'never',
jsx: 'never',
},
],
'@typescript-eslint/no-use-before-define': [
'error',
{ functions: false, classes: true, variables: true, typedefs: true },
],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'no-use-before-define': [0],
'import/no-unresolved': 0,
quotes: [
2,
'single',
{
avoidEscape: true,
},
],
'@typescript-eslint/no-unused-vars': [2, { argsIgnorePattern: '^_', caughtErrors: 'none' }],
'@typescript-eslint/lines-between-class-members': 'off',
'@typescript-eslint/no-throw-literal': 'off',
'@typescript-eslint/space-before-function-paren': 'off',
'@typescript-eslint/no-loss-of-precision': 'off',
'@typescript-eslint/quotes': 'off',
'@typescript-eslint/no-empty-object-type': 'off',
},
settings: {
'import/resolver': {
'root-import': {
rootPathPrefix: '@',
rootPathSuffix: 'src',
extensions: ['.js', '.ts', '.tsx', '.jsx', '.mdx'],
},
},
},
}),
{
ignores: ['dist/**', 'node_modules/**'],
},
};
];
@@ -4,55 +4,45 @@
"version": "1.0.0",
"license": "Apache-2.0",
"main": "index.js",
"exports": {
".": "./index.js",
"./airbnb-typescript-base-flat": "./airbnb-typescript-base-flat.js"
},
"peerDependencies": {
"@typescript-eslint/eslint-plugin": ">= 5",
"@typescript-eslint/parser": ">= 5",
"eslint": ">= 8",
"@typescript-eslint/eslint-plugin": ">= 8",
"@typescript-eslint/parser": ">= 8",
"eslint": ">= 9",
"eslint-config-airbnb": ">= 19",
"eslint-config-airbnb-typescript": ">= 16",
"eslint-config-prettier": ">= 8",
"eslint-import-resolver-root-import": ">= 1",
"eslint-plugin-import": ">= 2",
"eslint-plugin-jest": ">= 26.1.1",
"eslint-plugin-jsx-a11y": ">= 6",
"eslint-plugin-import": ">= 2.31",
"eslint-plugin-jest": ">= 28",
"eslint-plugin-jsx-a11y": ">= 6.10",
"eslint-plugin-prettier": ">= 4",
"eslint-plugin-react": ">= 7",
"eslint-plugin-react-hooks": ">= 4",
"eslint-plugin-react": ">= 7.35",
"eslint-plugin-react-hooks": ">= 5",
"eslint-plugin-storybook": "*",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"dependencies": {
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.26.0"
},
"devDependencies": {
"eslint": "^9.26.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-root-import": "^1.0.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.1.1",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.2",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^5.0.0",
"prettier": "^2.8.7"
},
"eslintConfig": {
"plugins": [
"prettier"
],
"extends": [
"eslint:recommended",
"plugin:prettier/recommended"
],
"rules": {
"prettier/prettier": "error"
},
"root": true,
"env": {
"browser": false,
"es6": false,
"node": true
}
},
"scripts": {
"lint": "eslint *.js",
"lint:fix": "eslint *.js --fix"
+18
View File
@@ -0,0 +1,18 @@
// types: shared preset + tsconfig.json project
const sharedConfig = require('@nymproject/eslint-config-react-typescript');
module.exports = [
...sharedConfig,
{
languageOptions: {
parserOptions: {
project: './tsconfig.json',
tsconfigRootDir: __dirname,
},
},
},
{
ignores: ['dist/**', 'node_modules/**', '*.config.js'],
},
];
+7 -7
View File
@@ -11,19 +11,19 @@
},
"devDependencies": {
"@nymproject/eslint-config-react-typescript": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.13.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"eslint": "^9.26.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^16.1.0",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-root-import": "^1.0.4",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.1.1",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.2",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^5.0.0",
"prettier": "^2.8.7",
"typescript": "^4.6.2",
"ts-jest": "^27.0.5",
+32
View File
@@ -0,0 +1,32 @@
// webpack package: root *.js only (matches `eslint *.js`).
const js = require('@eslint/js');
const prettierPlugin = require('eslint-plugin-prettier');
const prettierConfig = require('eslint-config-prettier');
module.exports = [
js.configs.recommended,
{
files: ['*.js'],
languageOptions: {
ecmaVersion: 2022,
sourceType: 'commonjs',
globals: {
module: 'readonly',
require: 'readonly',
__dirname: 'readonly',
process: 'readonly',
},
},
plugins: {
prettier: prettierPlugin,
},
rules: {
...prettierConfig.rules,
'prettier/prettier': 'error',
},
},
{
ignores: ['node_modules/**', 'dist/**'],
},
];
+1
View File
@@ -19,6 +19,7 @@
"clean-webpack-plugin": "^4.0.0",
"css-loader": "^6.7.3",
"dotenv-webpack": "^7.0.3",
"@eslint/js": "^9.26.0",
"eslint": "^9.26.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
+210 -35
View File
@@ -1727,14 +1727,14 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6"
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0":
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.9.1":
version "4.9.1"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
dependencies:
eslint-visitor-keys "^3.4.3"
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.4.0":
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2", "@eslint-community/regexpp@^4.4.0":
version "4.12.2"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
@@ -1760,6 +1760,21 @@
dependencies:
"@types/json-schema" "^7.0.15"
"@eslint/eslintrc@^3.2.0":
version "3.3.5"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60"
integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==
dependencies:
ajv "^6.14.0"
debug "^4.3.2"
espree "^10.0.1"
globals "^14.0.0"
ignore "^5.2.0"
import-fresh "^3.2.1"
js-yaml "^4.1.1"
minimatch "^3.1.5"
strip-json-comments "^3.1.1"
"@eslint/eslintrc@^3.3.1":
version "3.3.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac"
@@ -1780,6 +1795,11 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.26.0.tgz#1e13126b67a3db15111d2dcc61f69a2acff70bd5"
integrity sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==
"@eslint/js@^9.26.0":
version "9.39.4"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1"
integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==
"@eslint/object-schema@^2.1.6":
version "2.1.7"
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad"
@@ -3391,10 +3411,10 @@
resolved "https://registry.yarnpkg.com/@nymproject/contract-clients/-/contract-clients-1.4.1.tgz#ae2644387b518eb13e8825fa8021d4c81ffe7852"
integrity sha512-HuJZ4Hv+Rl6ZZEtCHKgurNLJapM+QQRJlGkevFH2a4UdqUqF9omUkUi3AVes4679dPoSFgvA7plyVSDBdbgV6w==
"@nymproject/mix-fetch@>=1.4.1-rc1 || ^1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch/-/mix-fetch-1.4.1.tgz#6a923b40e09c4a571fb947297a3afd41cd2d5ea6"
integrity sha512-FN5UeCkje6fauCt2pd8kFGFYXj2kaNewEJVKRLWzI2/suxD+J2bmg/YvXBGLWMWglXNA3+YFHA/1Vjh6OGtgig==
"@nymproject/mix-fetch@>=1.4.2-rc.0 || ^1":
version "1.4.4"
resolved "https://registry.yarnpkg.com/@nymproject/mix-fetch/-/mix-fetch-1.4.4.tgz#f10fbde17255c16f9de8c3dd6e8c8f49c4d12c88"
integrity sha512-sdyXXJG7sYv2OFOEf6FYm7HglKfMvJmJjrQC3Rbusy5rH5C2ajg2KyuBbZReLgIIbkkx3mK8sc5WRUOKTcKt2Q==
"@nymproject/node-tester@^1.3.1":
version "1.3.1"
@@ -5470,12 +5490,12 @@
dependencies:
lodash "^4.17.15"
"@storybook/csf@^0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6"
integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==
"@storybook/csf@^0.1.11":
version "0.1.13"
resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.13.tgz#c8a9bea2ae518a3d9700546748fa30a8b07f7f80"
integrity sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==
dependencies:
lodash "^4.17.15"
type-fest "^2.19.0"
"@storybook/docs-tools@6.5.16":
version "6.5.16"
@@ -6944,12 +6964,19 @@
natural-compare "^1.4.0"
ts-api-utils "^2.1.0"
"@typescript-eslint/experimental-utils@^5.3.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741"
integrity sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==
"@typescript-eslint/eslint-plugin@^8.0.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz#fcbe76b693ce2412410cf4d48aefd617d345f2d9"
integrity sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==
dependencies:
"@typescript-eslint/utils" "5.62.0"
"@eslint-community/regexpp" "^4.12.2"
"@typescript-eslint/scope-manager" "8.59.0"
"@typescript-eslint/type-utils" "8.59.0"
"@typescript-eslint/utils" "8.59.0"
"@typescript-eslint/visitor-keys" "8.59.0"
ignore "^7.0.5"
natural-compare "^1.4.0"
ts-api-utils "^2.5.0"
"@typescript-eslint/parser@^5.13.0":
version "5.62.0"
@@ -6972,6 +6999,17 @@
"@typescript-eslint/visitor-keys" "8.46.2"
debug "^4.3.4"
"@typescript-eslint/parser@^8.0.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.59.0.tgz#57a138280b3ceaf07904fbd62c433d5cc1ee1573"
integrity sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==
dependencies:
"@typescript-eslint/scope-manager" "8.59.0"
"@typescript-eslint/types" "8.59.0"
"@typescript-eslint/typescript-estree" "8.59.0"
"@typescript-eslint/visitor-keys" "8.59.0"
debug "^4.4.3"
"@typescript-eslint/project-service@8.46.2":
version "8.46.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.46.2.tgz#ab2f02a0de4da6a7eeb885af5e059be57819d608"
@@ -6981,6 +7019,15 @@
"@typescript-eslint/types" "^8.46.2"
debug "^4.3.4"
"@typescript-eslint/project-service@8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.59.0.tgz#914bf62069d870faa0389ffd725774a200f511bf"
integrity sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==
dependencies:
"@typescript-eslint/tsconfig-utils" "^8.59.0"
"@typescript-eslint/types" "^8.59.0"
debug "^4.4.3"
"@typescript-eslint/scope-manager@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
@@ -6997,11 +7044,24 @@
"@typescript-eslint/types" "8.46.2"
"@typescript-eslint/visitor-keys" "8.46.2"
"@typescript-eslint/scope-manager@8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz#f71be268bd31da1c160815c689e4dde7c9bc9e8e"
integrity sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==
dependencies:
"@typescript-eslint/types" "8.59.0"
"@typescript-eslint/visitor-keys" "8.59.0"
"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2":
version "8.46.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz#d110451cb93bbd189865206ea37ef677c196828c"
integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==
"@typescript-eslint/tsconfig-utils@8.59.0", "@typescript-eslint/tsconfig-utils@^8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz#1276077f5ad77e384446ea28a2474e8f8be1af41"
integrity sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==
"@typescript-eslint/type-utils@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a"
@@ -7023,6 +7083,17 @@
debug "^4.3.4"
ts-api-utils "^2.1.0"
"@typescript-eslint/type-utils@8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz#2834ea3b179cedfc9244dcd4f74105a27751a439"
integrity sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==
dependencies:
"@typescript-eslint/types" "8.59.0"
"@typescript-eslint/typescript-estree" "8.59.0"
"@typescript-eslint/utils" "8.59.0"
debug "^4.4.3"
ts-api-utils "^2.5.0"
"@typescript-eslint/types@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
@@ -7033,6 +7104,11 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.2.tgz#2bad7348511b31e6e42579820e62b73145635763"
integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==
"@typescript-eslint/types@8.59.0", "@typescript-eslint/types@^8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.59.0.tgz#cfcc643c6e879016479775850d86d84c14492738"
integrity sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==
"@typescript-eslint/typescript-estree@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
@@ -7062,6 +7138,21 @@
semver "^7.6.0"
ts-api-utils "^2.1.0"
"@typescript-eslint/typescript-estree@8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz#feba58a70ab6ea7ac53a2f3ae900db28ce3454c2"
integrity sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==
dependencies:
"@typescript-eslint/project-service" "8.59.0"
"@typescript-eslint/tsconfig-utils" "8.59.0"
"@typescript-eslint/types" "8.59.0"
"@typescript-eslint/visitor-keys" "8.59.0"
debug "^4.4.3"
minimatch "^10.2.2"
semver "^7.7.3"
tinyglobby "^0.2.15"
ts-api-utils "^2.5.0"
"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.10.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
@@ -7086,6 +7177,16 @@
"@typescript-eslint/types" "8.46.2"
"@typescript-eslint/typescript-estree" "8.46.2"
"@typescript-eslint/utils@8.59.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/utils@^8.8.1":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.59.0.tgz#f50df9bd6967881ef64fba62230111153179ead5"
integrity sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==
dependencies:
"@eslint-community/eslint-utils" "^4.9.1"
"@typescript-eslint/scope-manager" "8.59.0"
"@typescript-eslint/types" "8.59.0"
"@typescript-eslint/typescript-estree" "8.59.0"
"@typescript-eslint/visitor-keys@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
@@ -7102,6 +7203,14 @@
"@typescript-eslint/types" "8.46.2"
eslint-visitor-keys "^4.2.1"
"@typescript-eslint/visitor-keys@8.59.0":
version "8.59.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz#2e80de30e7e944ed4bd47d751e37dcb04db03795"
integrity sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==
dependencies:
"@typescript-eslint/types" "8.59.0"
eslint-visitor-keys "^5.0.0"
"@uidotdev/usehooks@^2.4.1":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf"
@@ -7834,6 +7943,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^6.14.0:
version "6.14.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a"
integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^8.0.0, ajv@^8.17.1, ajv@^8.9.0:
version "8.17.1"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
@@ -8484,6 +8603,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
balanced-match@^4.0.2:
version "4.0.4"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
base-x@^3.0.2, base-x@^3.0.6:
version "3.0.11"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff"
@@ -8721,6 +8845,13 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
brace-expansion@^5.0.5:
version "5.0.5"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb"
integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==
dependencies:
balanced-match "^4.0.2"
braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -11586,6 +11717,13 @@ eslint-plugin-jest@^26.1.1:
dependencies:
"@typescript-eslint/utils" "^5.10.0"
eslint-plugin-jest@^28.0.0:
version "28.14.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz#02da77dc27d7b4c5480df3552ea26de056857b36"
integrity sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==
dependencies:
"@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0"
eslint-plugin-jsx-a11y@^6.10.0, eslint-plugin-jsx-a11y@^6.5.1:
version "6.10.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483"
@@ -11614,17 +11752,12 @@ eslint-plugin-prettier@^4.0.0:
dependencies:
prettier-linter-helpers "^1.0.0"
eslint-plugin-react-hooks@^4.3.0:
version "4.6.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596"
integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==
eslint-plugin-react-hooks@^5.0.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3"
integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==
eslint-plugin-react@^7.29.2, eslint-plugin-react@^7.35.0:
eslint-plugin-react@^7.35.0:
version "7.37.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065"
integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==
@@ -11648,14 +11781,14 @@ eslint-plugin-react@^7.29.2, eslint-plugin-react@^7.35.0:
string.prototype.matchall "^4.0.12"
string.prototype.repeat "^1.0.0"
eslint-plugin-storybook@^0.5.12:
version "0.5.13"
resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.5.13.tgz#dee4056eaa59c886a9ae78fb7b2ee0ed5fad4366"
integrity sha512-82x3FH1VAi68Awu1VEjn/hLkzFZsOP8ItcC5/uGF9WszIrj6n7Q3MZD57oE26k3aKwuPfFtAPnSjFnaBkBab+g==
eslint-plugin-storybook@^0.11.0:
version "0.11.6"
resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.6.tgz#3ab1fb37c62641853417c6da8f4c4fd050162489"
integrity sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==
dependencies:
"@storybook/csf" "^0.0.1"
"@typescript-eslint/experimental-utils" "^5.3.0"
requireindex "^1.1.0"
"@storybook/csf" "^0.1.11"
"@typescript-eslint/utils" "^8.8.1"
ts-dedent "^2.2.0"
eslint-scope@5.1.1, eslint-scope@^5.1.1:
version "5.1.1"
@@ -11691,6 +11824,11 @@ eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
eslint-visitor-keys@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be"
integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==
eslint@^9, eslint@^9.26.0:
version "9.26.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.26.0.tgz#978fe029adc2aceed28ab437bca876e83461c3b4"
@@ -13654,7 +13792,7 @@ ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
ignore@^7.0.0:
ignore@^7.0.0, ignore@^7.0.5:
version "7.0.5"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9"
integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==
@@ -16648,6 +16786,13 @@ minimatch@^10.0.3:
dependencies:
"@isaacs/brace-expansion" "^5.0.0"
minimatch@^10.2.2:
version "10.2.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1"
integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==
dependencies:
brace-expansion "^5.0.5"
minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -16655,6 +16800,13 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
minimatch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e"
integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
dependencies:
brace-expansion "^1.1.7"
minimatch@^5.0.1:
version "5.1.6"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
@@ -18104,6 +18256,11 @@ picomatch@^4.0.2, picomatch@^4.0.3:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
picomatch@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589"
integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==
pidtree@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
@@ -19834,11 +19991,6 @@ require-from-string@^2.0.2:
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
requireindex@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -20185,6 +20337,11 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.7.3:
version "7.7.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
send@0.19.0:
version "0.19.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
@@ -21503,6 +21660,14 @@ tinyglobby@^0.2.13:
fdir "^6.5.0"
picomatch "^4.0.3"
tinyglobby@^0.2.15:
version "0.2.16"
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6"
integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==
dependencies:
fdir "^6.5.0"
picomatch "^4.0.4"
tinyrainbow@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5"
@@ -21667,6 +21832,11 @@ ts-api-utils@^2.1.0:
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
ts-api-utils@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1"
integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==
ts-dedent@^2.0.0, ts-dedent@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5"
@@ -21830,6 +22000,11 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
type-fest@^2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
type-is@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97"