From 2c0c370fd1d53ba05684b946a89908dab27eb510 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Wed, 11 Dec 2024 15:53:31 +0100 Subject: [PATCH 01/12] feat(eslint): upgrade to v9 and flat config - Various packages were majorly or minorly upgraded. - Configuration for ESlint and various plugins was overhauled. --- .eslintignore | 12 - .eslintrc.json | 72 ----- .eslintrc.ts.json | 1 - .lintstagedrc.json | 3 +- .markdownlint.json | 5 - .markdownlintignore | 6 - eslint.config.mjs | 109 +++++++ package.json | 20 +- pnpm-lock.yaml | 722 +++++++++++++++++++++++++------------------- tsconfig.json | 27 +- 10 files changed, 556 insertions(+), 421 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json delete mode 100644 .markdownlint.json delete mode 100644 .markdownlintignore create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 0197edddf1..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -# Ignore 3rd party files -node_modules/ -vendor/ - -# Ignore generated files -build/ -coverage/ -dist/ -tmp/ - -# Ignore generated React icon files -proprietary/react-icons diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index e5a9cdf6f6..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "node": false, - "jest": true - }, - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module", - "ecmaFeatures": { - "jsx": true - } - }, - "settings": { - "react": { - "version": "detect" - } - }, - "overrides": [ - { - "extends": ["plugin:json/recommended"], - "files": ["*.json"] - }, - { - "extends": [ - "plugin:react/recommended", - "eslint-config-prettier", - "./.eslintrc.ts.json", - "./.eslintrc.react.json", - "plugin:mdx/overrides" - ], - "files": ["*.mdx"], - "plugins": ["import"] - }, - { - "extends": [ - "plugin:react/recommended", - "eslint-config-prettier", - "./.eslintrc.ts.json", - "./.eslintrc.react.json" - ], - "files": ["*.js", "*.jsx"], - "plugins": ["import"] - }, - { - "extends": [ - "plugin:react/recommended", - "eslint-config-prettier", - "./.eslintrc.ts.json", - "./.eslintrc.react.json" - ], - "files": ["*.ts", "*.tsx"], - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "import", "jest"] - }, - { - "extends": [ - "plugin:react/recommended", - "eslint-config-prettier", - "./.eslintrc.ts.json", - "./.eslintrc.react.json" - ], - "files": ["*.ts", "*.tsx"], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": ["tsconfig.json", "tsconfig.node.json", "tsconfig.test.json"] - }, - "plugins": ["@typescript-eslint"] - } - ] -} diff --git a/.eslintrc.ts.json b/.eslintrc.ts.json index f58a5492ce..ada5cdd195 100644 --- a/.eslintrc.ts.json +++ b/.eslintrc.ts.json @@ -1,6 +1,5 @@ { "rules": { - "@typescript-eslint/consistent-type-definitions": ["error", "type"], "array-callback-return": ["error", { "checkForEach": false }], "block-scoped-var": "error", "consistent-return": "error", diff --git a/.lintstagedrc.json b/.lintstagedrc.json index c5cdda0919..c678d8e441 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,7 +1,6 @@ { "composer.json": "composer validate", "package.json": "npmPkgJsonLint --allowEmptyTargets", - "*.md": ["markdownlint", "prettier --check"], - "*.{js,json,jsx,mdx,ts,tsx}": ["eslint --no-error-on-unmatched-pattern", "prettier --check"], + "*.{md,js,json,jsx,mdx,ts,tsx}": ["eslint --no-error-on-unmatched-pattern", "prettier --check"], "*.{css,scss}": ["stylelint --allow-empty-input", "prettier --check"] } diff --git a/.markdownlint.json b/.markdownlint.json deleted file mode 100644 index 6ab7bd17cd..0000000000 --- a/.markdownlint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "default": true, - "MD013": false, - "MD033": false -} diff --git a/.markdownlintignore b/.markdownlintignore deleted file mode 100644 index 68bfcbc1bd..0000000000 --- a/.markdownlintignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore 3rd party files -node_modules - -# Ignore generated files -dist -CHANGELOG.md diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..1d89db859f --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,109 @@ +import _import from 'eslint-plugin-import' +import { fileURLToPath } from 'node:url' +import { fixupPluginRules } from '@eslint/compat' +import { FlatCompat } from '@eslint/eslintrc' +import eslint from '@eslint/js' +import globals from 'globals' +import jest from 'eslint-plugin-jest' +import json from '@eslint/json' +import markdown from '@eslint/markdown' +import mdx from 'eslint-plugin-mdx' +import path from 'node:path' +import react from 'eslint-plugin-react' +import tseslint from 'typescript-eslint' +import tsParser from '@typescript-eslint/parser' +import tsPlugin from '@typescript-eslint/eslint-plugin' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: eslint.configs.recommended, + allConfig: eslint.configs.all, +}) + +export default tseslint.config( + // Global + { + ignores: [ + '**/node_modules/', + '**/vendor/', + '**/build/', + '**/coverage/', + '**/dist/', + '**/tmp/', + 'proprietary/react-icons', + ], + }, + { + languageOptions: { + globals: { ...globals.browser, ...globals.es6, ...globals.jest }, + }, + }, + ...compat.extends('eslint-config-prettier'), + + // JSON + { + files: ['**/*.json'], + plugins: { json }, + language: 'json/json', + ...json.configs.recommended, + }, + + // Markdown + { + plugins: { markdown }, + }, + { + files: ['**/*.md'], + ignores: ['dist/**/*.md', 'CHANGELOG.md'], + processor: 'markdown/markdown', + rules: { + ...markdown.configs.recommended.rules, + 'markdown/line-length': 'off', + 'markdown/no-inline-html': 'off', + }, + }, + + // MDX + { + ...mdx.flat, + files: ['**/*.mdx'], + processor: mdx.createRemarkProcessor({ + lintCodeBlocks: true, + }), + }, + ...compat.extends('plugin:mdx/overrides').map((config) => ({ + ...config, + ...mdx.flatCodeBlocks, + rules: { + ...mdx.flatCodeBlocks.rules, + 'react/jsx-no-undef': 'off', + }, + })), + + // JavaScript, TypeScript & React + ...compat.extends('plugin:react/recommended', './.eslintrc.ts.json', './.eslintrc.react.json').map(() => ({ + files: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'], + plugins: { + '@typescript-eslint': tsPlugin, + import: fixupPluginRules(_import), + jest, + react, + }, + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaFeatures: { jsx: true }, + }, + }, + settings: { + 'import/resolver': { + node: { + extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'], + }, + }, + react: { version: '18' }, + }, + })), +) diff --git a/package.json b/package.json index 8520fb2c77..352db4feb5 100644 --- a/package.json +++ b/package.json @@ -27,17 +27,24 @@ "./storybook" ], "devDependencies": { + "@eslint/compat": "1.2.4", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.16.0", + "@eslint/json": "0.8.0", + "@eslint/markdown": "6.2.1", "@types/node": "22.10.1", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/eslint-plugin": "8.18.0", + "@typescript-eslint/parser": "8.18.0", "conventional-changelog-conventionalcommits": "8.0.0", - "eslint": "8.57.1", + "eslint": "9.16.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-jest": "28.9.0", - "eslint-plugin-json": "3.1.0", + "eslint-plugin-json": "4.0.1", + "eslint-plugin-markdown": "5.1.0", "eslint-plugin-mdx": "3.1.5", "eslint-plugin-react": "7.37.2", + "globals": "15.13.0", "html-validate": "8.27.0", "husky": "9.1.7", "lint-staged": "15.2.10", @@ -54,6 +61,7 @@ "stylelint-order": "6.0.4", "stylelint-use-logical": "2.1.2", "typescript": "5.7.2", + "typescript-eslint": "8.18.0", "wait-on": "8.0.1" }, "scripts": { @@ -61,13 +69,13 @@ "clean": "pnpm -r clean", "lint": "npm-run-all --continue-on-error lint:** lint-workspaces", "lint:css": "stylelint --allow-empty-input '**/*.{css,scss}'", - "lint:js": "eslint . --ext .js,.json,.jsx,.mdx,.ts,.tsx --report-unused-disable-directives", + "lint:js": "eslint .", "lint:md": "markdownlint **/*.md --ignore node_modules", "lint:package-json": "npmPkgJsonLint **/package.json", "lint:package-lock": "pnpm ls --recursive", "lint-fix": "npm-run-all --continue-on-error lint-fix:** prettier", "lint-fix:css": "stylelint --fix '**/*.{css,scss}'", - "lint-fix:js": "eslint . --ext .js,.json,.jsx,.mdx,.ts,.tsx --fix --report-unused-disable-directives", + "lint-fix:js": "eslint . --fix", "lint-fix:md": "markdownlint --fix **/*.md", "lint-workspaces": "pnpm -r --no-bail lint", "plop": "plop", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22bd90ab78..a93afaa23a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,39 +22,60 @@ importers: .: devDependencies: + '@eslint/compat': + specifier: 1.2.4 + version: 1.2.4(eslint@9.16.0) + '@eslint/eslintrc': + specifier: 3.2.0 + version: 3.2.0 + '@eslint/js': + specifier: 9.16.0 + version: 9.16.0 + '@eslint/json': + specifier: 0.8.0 + version: 0.8.0 + '@eslint/markdown': + specifier: 6.2.1 + version: 6.2.1 '@types/node': specifier: 22.10.1 version: 22.10.1 '@typescript-eslint/eslint-plugin': - specifier: 7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + specifier: 8.18.0 + version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2) '@typescript-eslint/parser': - specifier: 7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.7.2) + specifier: 8.18.0 + version: 8.18.0(eslint@9.16.0)(typescript@5.7.2) conventional-changelog-conventionalcommits: specifier: 8.0.0 version: 8.0.0 eslint: - specifier: 8.57.1 - version: 8.57.1 + specifier: 9.16.0 + version: 9.16.0 eslint-config-prettier: specifier: 9.1.0 - version: 9.1.0(eslint@8.57.1) + version: 9.1.0(eslint@9.16.0) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0) eslint-plugin-jest: specifier: 28.9.0 - version: 28.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1))(typescript@5.7.2) + version: 28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(jest@29.7.0(@types/node@22.10.1))(typescript@5.7.2) eslint-plugin-json: - specifier: 3.1.0 - version: 3.1.0 + specifier: 4.0.1 + version: 4.0.1 + eslint-plugin-markdown: + specifier: 5.1.0 + version: 5.1.0(eslint@9.16.0) eslint-plugin-mdx: specifier: 3.1.5 - version: 3.1.5(eslint@8.57.1) + version: 3.1.5(eslint@9.16.0) eslint-plugin-react: specifier: 7.37.2 - version: 7.37.2(eslint@8.57.1) + version: 7.37.2(eslint@9.16.0) + globals: + specifier: 15.13.0 + version: 15.13.0 html-validate: specifier: 8.27.0 version: 8.27.0(jest-diff@29.7.0)(jest-snapshot@29.7.0)(jest@29.7.0(@types/node@22.10.1)) @@ -103,6 +124,9 @@ importers: typescript: specifier: 5.7.2 version: 5.7.2 + typescript-eslint: + specifier: 8.18.0 + version: 8.18.0(eslint@9.16.0)(typescript@5.7.2) wait-on: specifier: 8.0.1 version: 8.0.1 @@ -1260,12 +1284,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1276,13 +1294,50 @@ packages: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/compat@1.2.4': + resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + 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.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/json@0.8.0': + resolution: {integrity: sha512-DdWL9kT3h0XNRK1EVo4ZvxcdQus30msg1Yligb3VR7dnP+1CPM+qBH+SqVV53++XSEhiUJB702bHOttlaa5vhg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/markdown@6.2.1': + resolution: {integrity: sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==} + 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.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -1297,18 +1352,29 @@ packages: resolution: {integrity: sha512-Nl8HCv0hGRSLQ+n1OD4Hk3a+Urwk9HH0vQkAzzCarT4KlA7bRl+6xEiS5PZVwOmjtC7XiH/oNe3as9Fxcr2A1w==} engines: {node: '>= 16'} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - 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@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/momoa@3.3.5': + resolution: {integrity: sha512-NI9codbQNjw9g4SS/cOizi8JDZ93B3oGVko8M3y0XF3gITaGDSQqea35V8fswWehnRQBLxPfZY5TJnuNhNCEzA==} + engines: {node: '>=18'} + + '@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'} '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -2314,6 +2380,9 @@ packages: '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -2377,9 +2446,6 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@2.0.8': - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} - '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} @@ -2392,61 +2458,43 @@ packages: '@types/yargs@17.0.24': resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.18.0': + resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.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@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.18.0': + resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/scope-manager@8.13.0': resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/scope-manager@8.18.0': + resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.18.0': + resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + 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-eslint/types@8.13.0': resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.18.0': + resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.13.0': resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} @@ -2457,11 +2505,11 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.18.0': + resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/utils@8.13.0': resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} @@ -2469,14 +2517,21 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.18.0': + resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + 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-eslint/visitor-keys@8.13.0': resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.18.0': + resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -2550,6 +2605,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -3164,14 +3224,6 @@ packages: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3261,15 +3313,6 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -3620,9 +3663,9 @@ packages: jest: optional: true - eslint-plugin-json@3.1.0: - resolution: {integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==} - engines: {node: '>=12.0'} + eslint-plugin-json@4.0.1: + resolution: {integrity: sha512-3An5ISV5dq/kHfXdNyY5TUe2ONC3yXFSkLX2gu+W8xAhKhfvrRvkSAeKXCxZqZ0KJLX15ojBuLPyj+UikQMkOA==} + engines: {node: '>=18.0'} eslint-plugin-markdown@3.0.1: resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} @@ -3630,6 +3673,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-markdown@5.1.0: + resolution: {integrity: sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8' + eslint-plugin-mdx@3.1.5: resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} engines: {node: '>=18.0.0'} @@ -3642,19 +3691,31 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - 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-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.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - 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.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -3771,9 +3832,9 @@ packages: resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} engines: {node: '>=14'} - 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-entry-cache@9.1.0: resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==} @@ -3818,17 +3879,14 @@ packages: resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} engines: {node: '>= 10.13.0'} - flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flat-cache@5.0.0: resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} engines: {node: '>=18'} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} @@ -3996,9 +4054,13 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.22.0: - resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} @@ -5059,6 +5121,9 @@ packages: mdast-util-from-markdown@2.0.0: resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-gfm-autolink-literal@2.0.0: resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} @@ -6718,9 +6783,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thingies@1.21.0: resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} engines: {node: '>=10.18'} @@ -6787,12 +6849,6 @@ packages: trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@1.4.0: resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} @@ -6891,6 +6947,13 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript-eslint@8.18.0: + resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + 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.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -8298,24 +8361,37 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0)': dependencies: - eslint: 8.57.1 + eslint: 9.16.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + '@eslint-community/regexpp@4.10.0': {} + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.2.4(eslint@9.16.0)': + optionalDependencies: + eslint: 9.16.0 + + '@eslint/config-array@0.19.1': dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 + '@eslint/object-schema': 2.1.5 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color - '@eslint-community/regexpp@4.10.0': {} + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.6 - espree: 9.6.1 - globals: 13.22.0 + debug: 4.3.7 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -8324,7 +8400,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.16.0': {} + + '@eslint/json@0.8.0': + dependencies: + '@eslint/plugin-kit': 0.2.4 + '@humanwhocodes/momoa': 3.3.5 + + '@eslint/markdown@6.2.1': + dependencies: + '@eslint/plugin-kit': 0.2.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 '@gar/promisify@1.1.3': {} @@ -8338,17 +8434,20 @@ snapshots: dependencies: kleur: 4.1.5 - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6 - 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@2.0.3': {} + '@humanwhocodes/momoa@3.3.5': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -9459,6 +9558,8 @@ snapshots: '@types/tough-cookie': 4.0.2 parse5: 7.1.2 + '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} '@types/liftoff@4.0.3': @@ -9470,7 +9571,7 @@ snapshots: '@types/mdast@3.0.12': dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.11 '@types/mdast@4.0.3': dependencies: @@ -9520,8 +9621,6 @@ snapshots: '@types/unist@2.0.11': {} - '@types/unist@2.0.8': {} - '@types/unist@3.0.2': {} '@types/uuid@9.0.8': {} @@ -9532,77 +9631,59 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.0 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.1 + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 9.16.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.7.2) - optionalDependencies: + ts-api-utils: 1.4.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.5 - eslint: 8.57.1 - optionalDependencies: + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.3.7 + eslint: 9.16.0 typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.18.0': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.13.0': dependencies: '@typescript-eslint/types': 8.13.0 '@typescript-eslint/visitor-keys': 8.13.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/scope-manager@8.18.0': + dependencies: + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + + '@typescript-eslint/type-utils@8.18.0(eslint@9.16.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.7.2) debug: 4.3.7 - eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.7.2) - optionalDependencies: + eslint: 9.16.0 + ts-api-utils: 1.4.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.13.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.2)': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.7.2) - optionalDependencies: - typescript: 5.7.2 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.18.0': {} '@typescript-eslint/typescript-estree@8.13.0(typescript@5.7.2)': dependencies: @@ -9619,38 +9700,52 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) - eslint: 8.57.1 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/utils@8.13.0(eslint@8.57.1)(typescript@5.7.2)': + '@typescript-eslint/utils@8.13.0(eslint@9.16.0)(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) '@typescript-eslint/scope-manager': 8.13.0 '@typescript-eslint/types': 8.13.0 '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.7.2) - eslint: 8.57.1 + eslint: 9.16.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.18.0': + '@typescript-eslint/utils@8.18.0(eslint@9.16.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + eslint: 9.16.0 + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.13.0': dependencies: '@typescript-eslint/types': 8.13.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.18.0': + dependencies: + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.2.0': {} '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@22.10.1)(sass@1.82.0)(terser@5.17.1))': @@ -9713,7 +9808,7 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.10.0 + acorn: 8.14.0 acorn-walk: 8.2.0 acorn-jsx@5.3.2(acorn@8.10.0): @@ -9724,12 +9819,18 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.2.0: {} acorn@8.10.0: {} acorn@8.11.3: {} + acorn@8.14.0: {} + agent-base@6.0.2: dependencies: debug: 4.3.7 @@ -10479,18 +10580,6 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cross-spawn@7.0.5: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -10576,10 +10665,6 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.5: - dependencies: - ms: 2.1.2 - debug@4.3.6: dependencies: ms: 2.1.2 @@ -10956,9 +11041,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@8.57.1): + eslint-config-prettier@9.1.0(eslint@9.16.0): dependencies: - eslint: 8.57.1 + eslint: 9.16.0 eslint-import-resolver-node@0.3.9: dependencies: @@ -10968,11 +11053,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-mdx@3.1.5(eslint@8.57.1): + eslint-mdx@3.1.5(eslint@9.16.0): dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) - eslint: 8.57.1 + eslint: 9.16.0 espree: 9.6.1 estree-util-visit: 2.0.0 remark-mdx: 3.0.0 @@ -10988,17 +11073,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + eslint: 9.16.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -11007,9 +11092,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.16.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -11021,40 +11106,47 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1))(typescript@5.7.2): + eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(jest@29.7.0(@types/node@22.10.1))(typescript@5.7.2): dependencies: - '@typescript-eslint/utils': 8.13.0(eslint@8.57.1)(typescript@5.7.2) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.13.0(eslint@9.16.0)(typescript@5.7.2) + eslint: 9.16.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2) jest: 29.7.0(@types/node@22.10.1) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-json@3.1.0: + eslint-plugin-json@4.0.1: dependencies: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-markdown@3.0.1(eslint@8.57.1): + eslint-plugin-markdown@3.0.1(eslint@9.16.0): dependencies: - eslint: 8.57.1 + eslint: 9.16.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color - eslint-plugin-mdx@3.1.5(eslint@8.57.1): + eslint-plugin-markdown@5.1.0(eslint@9.16.0): dependencies: - eslint: 8.57.1 - eslint-mdx: 3.1.5(eslint@8.57.1) - eslint-plugin-markdown: 3.0.1(eslint@8.57.1) + eslint: 9.16.0 + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + + eslint-plugin-mdx@3.1.5(eslint@9.16.0): + dependencies: + eslint: 9.16.0 + eslint-mdx: 3.1.5(eslint@9.16.0) + eslint-plugin-markdown: 3.0.1(eslint@9.16.0) remark-mdx: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -11064,7 +11156,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.2(eslint@8.57.1): + eslint-plugin-react@7.37.2(eslint@9.16.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -11072,7 +11164,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.1.0 - eslint: 8.57.1 + eslint: 9.16.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -11086,56 +11178,60 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.0: {} + + eslint@9.16.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@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.3 - debug: 4.3.6 - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.3.7 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.22.0 - graphemer: 1.4.0 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.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + espree@9.6.1: dependencies: acorn: 8.10.0 @@ -11189,7 +11285,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -11260,9 +11356,9 @@ snapshots: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.1.1 + flat-cache: 4.0.1 file-entry-cache@9.1.0: dependencies: @@ -11315,19 +11411,16 @@ snapshots: flagged-respawn@2.0.0: {} - flat-cache@3.1.1: + flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 flat-cache@5.0.0: dependencies: flatted: 3.3.2 keyv: 4.5.4 - flatted@3.3.1: {} - flatted@3.3.2: {} follow-redirects@1.15.6: {} @@ -11521,9 +11614,9 @@ snapshots: globals@11.12.0: {} - globals@13.22.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} + + globals@15.13.0: {} globalthis@1.0.3: dependencies: @@ -12824,6 +12917,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-autolink-literal@2.0.0: dependencies: '@types/mdast': 4.0.3 @@ -12836,7 +12946,7 @@ snapshots: dependencies: '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: @@ -12845,7 +12955,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -12855,7 +12965,7 @@ snapshots: '@types/mdast': 4.0.3 devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -12864,14 +12974,14 @@ snapshots: dependencies: '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.0 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -12887,7 +12997,7 @@ snapshots: '@types/hast': 3.0.3 '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -12900,7 +13010,7 @@ snapshots: '@types/unist': 3.0.2 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.3 @@ -12912,7 +13022,7 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.0 mdast-util-mdx-jsx: 3.0.0 mdast-util-mdxjs-esm: 2.0.1 @@ -12926,7 +13036,7 @@ snapshots: '@types/hast': 3.0.3 '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -13814,7 +13924,7 @@ snapshots: parse-entities@4.0.1: dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.11 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -13865,7 +13975,7 @@ snapshots: '@yarnpkg/lockfile': 1.1.0 chalk: 4.1.2 ci-info: 3.8.0 - cross-spawn: 7.0.5 + cross-spawn: 7.0.6 find-yarn-workspace-root: 2.0.0 fs-extra: 9.1.0 json-stable-stringify: 1.1.1 @@ -15045,8 +15155,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thingies@1.21.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -15097,10 +15205,6 @@ snapshots: trough@2.1.0: {} - ts-api-utils@1.3.0(typescript@5.7.2): - dependencies: - typescript: 5.7.2 - ts-api-utils@1.4.0(typescript@5.7.2): dependencies: typescript: 5.7.2 @@ -15212,6 +15316,16 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.18.0(eslint@9.16.0)(typescript@5.7.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.7.2))(eslint@9.16.0)(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.7.2) + eslint: 9.16.0 + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + typescript@5.7.2: {} uc.micro@2.1.0: {} @@ -15314,7 +15428,7 @@ snapshots: unist-util-stringify-position@2.0.3: dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.11 unist-util-stringify-position@4.0.0: dependencies: @@ -15335,7 +15449,7 @@ snapshots: unplugin@1.7.1: dependencies: - acorn: 8.11.3 + acorn: 8.14.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 diff --git a/tsconfig.json b/tsconfig.json index aebad59b73..f2aae17722 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,24 @@ { "compileOnSave": false, "compilerOptions": { - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, + "allowSyntheticDefaultImports": true, "declaration": false, "downlevelIteration": true, "experimentalDecorators": true, - "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, "importHelpers": true, - "target": "es2020", - "module": "es2020", + "jsx": "react-jsx", "lib": ["es2020", "dom"], - "allowSyntheticDefaultImports": true, - "jsx": "react-jsx" + "module": "es2020", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "sourceMap": true, + "strict": true, + "target": "es2020" }, - "exclude": ["**/node_modules/*"] + "exclude": ["**/node_modules/*"], + "include": ["next-env.d.ts", ".next/types/**/*.ts", "**/*.ts", "**/*.tsx", "next.config.mjs", "eslint.config.mjs"] } From ead0b57256fe9b00c7a6c2dce0e974c176680a2e Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Wed, 11 Dec 2024 15:55:51 +0100 Subject: [PATCH 02/12] fix(eslint): address lint issues --- CONTRIBUTING.md | 8 ++++++-- documentation/storybook.md | 2 +- packages/css/README.md | 2 +- packages/react/README.md | 2 +- packages/react/babel.config.js | 1 - .../react/src/ImageSlider/ImageSliderContext.tsx | 1 - packages/react/src/Pagination/Pagination.tsx | 1 - packages/react/src/Tabs/TabsContext.tsx | 1 - packages/react/src/common/useKeyboardFocus.test.tsx | 1 - proprietary/assets/svgo.config.js | 1 - proprietary/react-icons/README.md | 10 ++++------ storybook/src/components/FieldSet/FieldSet.docs.mdx | 12 ++---------- .../components/SearchField/SearchField.stories.tsx | 1 - .../docs/developer-guide/getting-started.docs.mdx | 4 ++-- 14 files changed, 17 insertions(+), 30 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 12383c4a8b..b56ed48698 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -140,6 +140,8 @@ You can use any editor you like, but if you use [Visual Studio Code](https://cod To enable correct validation and to fix lint/style errors on save, add this to your VSCode `settings.json`: + + ```json "css.validate": false, "scss.validate": false, @@ -153,6 +155,8 @@ To enable correct validation and to fix lint/style errors on save, add this to y "editor.formatOnSave": true, ``` + + ### Run storybook @@ -196,7 +200,7 @@ The copyright holder for all files created by people working for the City of Ams If you use code from other EUPL-1.2 or higher licensed files that have a copyright notice, don’t forget to add this copyright notice as well. So, for a file with code written by someone working for the City of Amsterdam in 2023, but also containing code from another EUPL-1.2 or higher licensed file written by John Doe in 2021, the header would look like this: -```javascript +```js /** * @license EUPL-1.2+ * Copyright (c) 2021 John Doe @@ -208,7 +212,7 @@ All documentation files should also start with a license header. We use the Creative Commons Zero (CC0) license for this. The license header looks like this: -```md +```html ``` diff --git a/documentation/storybook.md b/documentation/storybook.md index 6894e63553..318fdbafcd 100644 --- a/documentation/storybook.md +++ b/documentation/storybook.md @@ -74,7 +74,7 @@ For example, when the child is a simple string (like in the default Button compo To do this, you can override the default like so: -```js +```txt argTypes: { children: { table: { disable: false }, diff --git a/packages/css/README.md b/packages/css/README.md index 836ac8723b..c8303a69fa 100644 --- a/packages/css/README.md +++ b/packages/css/README.md @@ -35,7 +35,7 @@ Other communities only need to overwrite design tokens to use our components wit Import the main stylesheet and use the class names in your markup. -```ts +```jsx import "@amsterdam/design-system-assets/font/index.css" import "@amsterdam/design-system-css/dist/index.css" import "@amsterdam/design-system-tokens/dist/index.css" diff --git a/packages/react/README.md b/packages/react/README.md index 8535fde08e..2a286d7f90 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -32,7 +32,7 @@ Import the stylesheets for the fonts, tokens, and components. Then import and use the components in your JSX. -```ts +```jsx import "@amsterdam/design-system-assets/font/index.css" import "@amsterdam/design-system-css/dist/index.css" import "@amsterdam/design-system-tokens/dist/index.css" diff --git a/packages/react/babel.config.js b/packages/react/babel.config.js index 8baca3ee36..c57c4cc6ee 100644 --- a/packages/react/babel.config.js +++ b/packages/react/babel.config.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-undef module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], } diff --git a/packages/react/src/ImageSlider/ImageSliderContext.tsx b/packages/react/src/ImageSlider/ImageSliderContext.tsx index f20148ccd6..7923b9afac 100644 --- a/packages/react/src/ImageSlider/ImageSliderContext.tsx +++ b/packages/react/src/ImageSlider/ImageSliderContext.tsx @@ -11,7 +11,6 @@ export type ImageSliderContextValue = { isAtEnd: boolean goToNextSlide: () => void goToPreviousSlide: () => void - // eslint-disable-next-line no-unused-vars goToSlideId: (id: number) => void } diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index 6372884cfa..05efc51252 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -17,7 +17,6 @@ export type PaginationProps = { /** The accessible name for the next page-button. */ nextVisuallyHiddenLabel?: string /** A function to run when the page number changes. */ - // eslint-disable-next-line no-unused-vars onPageChange?: (page: number) => void /** The current page number. */ page?: number diff --git a/packages/react/src/Tabs/TabsContext.tsx b/packages/react/src/Tabs/TabsContext.tsx index 805a53efdb..bd530a88a7 100644 --- a/packages/react/src/Tabs/TabsContext.tsx +++ b/packages/react/src/Tabs/TabsContext.tsx @@ -11,7 +11,6 @@ export type TabsContextValue = { /** The identifier of the tab set. */ tabsId: string /** A function to update the active tab. */ - // eslint-disable-next-line no-unused-vars updateTab: (tab: number) => void } diff --git a/packages/react/src/common/useKeyboardFocus.test.tsx b/packages/react/src/common/useKeyboardFocus.test.tsx index 2dc6e7c529..3e4abf890b 100644 --- a/packages/react/src/common/useKeyboardFocus.test.tsx +++ b/packages/react/src/common/useKeyboardFocus.test.tsx @@ -8,7 +8,6 @@ describe('use focus with arrows', () => { const onFocusThreeMock = jest.fn() const getComponent = (rotate: boolean | undefined = undefined) => - // eslint-disable-next-line react/display-name function () { const ref = useRef(null) const { keyDown } = useKeyboardFocus(ref, { diff --git a/proprietary/assets/svgo.config.js b/proprietary/assets/svgo.config.js index 5ecb855c70..298dc82499 100644 --- a/proprietary/assets/svgo.config.js +++ b/proprietary/assets/svgo.config.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ module.exports = { plugins: [ 'removeDimensions', diff --git a/proprietary/react-icons/README.md b/proprietary/react-icons/README.md index 7fe4eb2d92..272af594f4 100644 --- a/proprietary/react-icons/README.md +++ b/proprietary/react-icons/README.md @@ -19,13 +19,11 @@ npm install @amsterdam/design-system-react-icons Import the component for the icon you need, as well as the generic Icon component, and use them in your JSX. -```ts -import { Icon } from '@amsterdam/design-system-react' -import { SearchIcon } from '@amsterdam/design-system-react-icons' +```js +import { Icon } from "@amsterdam/design-system-react"; +import { SearchIcon } from "@amsterdam/design-system-react-icons"; -export const App = () => ( - -) +export const App = () => ; ``` ## Updating diff --git a/storybook/src/components/FieldSet/FieldSet.docs.mdx b/storybook/src/components/FieldSet/FieldSet.docs.mdx index 4bd1217f67..53e289fc60 100644 --- a/storybook/src/components/FieldSet/FieldSet.docs.mdx +++ b/storybook/src/components/FieldSet/FieldSet.docs.mdx @@ -72,11 +72,7 @@ but we think that is preferable to missing the description entirely. Add an `id` to the Field Set and the description, and add both to the `aria-labelledby` attribute of Field Set, like so: ```jsx -
+
Description ...
@@ -93,11 +89,7 @@ we add the Error Message text to the label as well. Add an `id` to the Field Set and the Error Message, and add both to the `aria-labelledby` attribute of Field Set, like so: ```jsx -
+
Error message ...
diff --git a/storybook/src/components/SearchField/SearchField.stories.tsx b/storybook/src/components/SearchField/SearchField.stories.tsx index 5db2019d78..047e463569 100644 --- a/storybook/src/components/SearchField/SearchField.stories.tsx +++ b/storybook/src/components/SearchField/SearchField.stories.tsx @@ -75,7 +75,6 @@ export const Controlled: any = { const value = formData.get('search-box') // search actions should not be triggered without a value if (value) { - // eslint-disable-next-line no-alert alert(`Gezocht op '${value}'`) } }} diff --git a/storybook/src/docs/developer-guide/getting-started.docs.mdx b/storybook/src/docs/developer-guide/getting-started.docs.mdx index 67e0f585d6..a50071822e 100644 --- a/storybook/src/docs/developer-guide/getting-started.docs.mdx +++ b/storybook/src/docs/developer-guide/getting-started.docs.mdx @@ -16,7 +16,7 @@ npm install @amsterdam/design-system-assets @amsterdam/design-system-css @amster Import the components and stylesheets you need, for example: -```javascript +```js import "@amsterdam/design-system-assets/font/index.css"; import "@amsterdam/design-system-css/dist/index.css"; import "@amsterdam/design-system-tokens/dist/index.css"; @@ -35,7 +35,7 @@ For applications, the large text and ample white space of the theme can be count That’s why there is a compact mode. To use the compact mode, import the compact CSS **after** the theme CSS, like so: -```javascript +```js import "@amsterdam/design-system-tokens/dist/index.css"; import "@amsterdam/design-system-tokens/dist/compact.css"; ``` From baeb0a4afdf903eae6ff14ff3be9c2054c6d4093 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Wed, 11 Dec 2024 16:12:41 +0100 Subject: [PATCH 03/12] feat(eslint): remove lint:md task --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 352db4feb5..5fd505a4b7 100644 --- a/package.json +++ b/package.json @@ -70,13 +70,11 @@ "lint": "npm-run-all --continue-on-error lint:** lint-workspaces", "lint:css": "stylelint --allow-empty-input '**/*.{css,scss}'", "lint:js": "eslint .", - "lint:md": "markdownlint **/*.md --ignore node_modules", "lint:package-json": "npmPkgJsonLint **/package.json", "lint:package-lock": "pnpm ls --recursive", "lint-fix": "npm-run-all --continue-on-error lint-fix:** prettier", "lint-fix:css": "stylelint --fix '**/*.{css,scss}'", "lint-fix:js": "eslint . --fix", - "lint-fix:md": "markdownlint --fix **/*.md", "lint-workspaces": "pnpm -r --no-bail lint", "plop": "plop", "prepare": "husky", From 860f605a44e14727c58d51b52c28989618889438 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Fri, 13 Dec 2024 11:15:46 +0100 Subject: [PATCH 04/12] feat(markdownlint): remove cli pkg and update docs --- eslint.config.mjs | 4 +- package.json | 1 - pnpm-lock.yaml | 101 ---------------------------------------------- 3 files changed, 1 insertion(+), 105 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 1d89db859f..71bb3257e6 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -51,11 +51,9 @@ export default tseslint.config( }, // Markdown - { - plugins: { markdown }, - }, { files: ['**/*.md'], + plugins: { markdown }, ignores: ['dist/**/*.md', 'CHANGELOG.md'], processor: 'markdown/markdown', rules: { diff --git a/package.json b/package.json index 5fd505a4b7..7cc6efa49a 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "html-validate": "8.27.0", "husky": "9.1.7", "lint-staged": "15.2.10", - "markdownlint-cli": "0.43.0", "npm-check-updates": "17.1.11", "npm-package-json-lint": "8.0.0", "npm-run-all": "4.1.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93afaa23a..596291aa0d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,9 +85,6 @@ importers: lint-staged: specifier: 15.2.10 version: 15.2.10 - markdownlint-cli: - specifier: 0.43.0 - version: 0.43.0 npm-check-updates: specifier: 17.1.11 version: 17.1.11 @@ -3357,10 +3354,6 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4891,10 +4884,6 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -4946,9 +4935,6 @@ packages: resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.2.10: resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} engines: {node: '>=18.12.0'} @@ -5089,26 +5075,9 @@ packages: map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - markdownlint-cli@0.43.0: - resolution: {integrity: sha512-6vwurKK4B21eyYzwgX6ph13cZS7hE6LZfcS8QyD722CyxVD2RtAvbZK2p7k+FZbbKORulEuwl+hJaEq1l6/hoQ==} - engines: {node: '>=18'} - hasBin: true - - markdownlint-micromark@0.1.12: - resolution: {integrity: sha512-RlB6EwMGgc0sxcIhOQ2+aq7Zw1V2fBnzbXKGgYK/mVWdT7cz34fteKSwfYeo4rL6+L/q2tyC9QtD/PgZbkdyJQ==} - engines: {node: '>=18'} - - markdownlint@0.36.1: - resolution: {integrity: sha512-s73fU2CQN7WCgjhaQUQ8wYESQNzGRNOKDd+3xgVqu8kuTEhmwepd/mxOv1LR2oV046ONrTLBFsM7IoKWNvmy5g==} - engines: {node: '>=18'} - mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} @@ -5175,9 +5144,6 @@ packages: mdn-data@2.12.1: resolution: {integrity: sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==} - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - memfs@4.9.3: resolution: {integrity: sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==} engines: {node: '>= 4.0.0'} @@ -6002,10 +5968,6 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -6298,10 +6260,6 @@ packages: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} - run-con@1.3.2: - resolution: {integrity: sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==} - hasBin: true - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6461,10 +6419,6 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.3.1: - resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} - engines: {node: '>= 18'} - snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -6959,9 +6913,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -10690,8 +10641,6 @@ snapshots: deep-eql@5.0.2: {} - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -12609,8 +12558,6 @@ snapshots: jsonparse@1.3.1: {} - jsonpointer@5.0.1: {} - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -12660,10 +12607,6 @@ snapshots: lines-and-columns@2.0.4: {} - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - lint-staged@15.2.10: dependencies: chalk: 5.3.0 @@ -12850,37 +12793,8 @@ snapshots: map-or-similar@1.5.0: {} - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - markdown-table@3.0.3: {} - markdownlint-cli@0.43.0: - dependencies: - commander: 12.1.0 - glob: 11.0.0 - ignore: 6.0.2 - js-yaml: 4.1.0 - jsonc-parser: 3.3.1 - jsonpointer: 5.0.1 - markdownlint: 0.36.1 - minimatch: 10.0.1 - run-con: 1.3.2 - smol-toml: 1.3.1 - - markdownlint-micromark@0.1.12: {} - - markdownlint@0.36.1: - dependencies: - markdown-it: 14.1.0 - markdownlint-micromark: 0.1.12 - mathml-tag-names@2.1.3: {} mdast-util-find-and-replace@3.0.1: @@ -13069,8 +12983,6 @@ snapshots: mdn-data@2.12.1: {} - mdurl@2.0.0: {} - memfs@4.9.3: dependencies: '@jsonjoy.com/json-pack': 1.0.4(tslib@2.8.1) @@ -14169,8 +14081,6 @@ snapshots: proxy-from-env@1.1.0: {} - punycode.js@2.3.1: {} - punycode@1.4.1: {} punycode@2.3.0: {} @@ -14542,13 +14452,6 @@ snapshots: run-async@3.0.0: {} - run-con@1.3.2: - dependencies: - deep-extend: 0.6.0 - ini: 4.1.3 - minimist: 1.2.8 - strip-json-comments: 3.1.1 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -14748,8 +14651,6 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.3.1: {} - snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -15328,8 +15229,6 @@ snapshots: typescript@5.7.2: {} - uc.micro@2.1.0: {} - uglify-js@3.17.4: optional: true From 7759704595f2372ee36404493c27adec3f593bf3 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Fri, 13 Dec 2024 11:17:21 +0100 Subject: [PATCH 05/12] docs(contrib): vscode settings --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b56ed48698..add79d867e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -133,7 +133,6 @@ You can use any editor you like, but if you use [Visual Studio Code](https://cod - [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) -- [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) - [MDX](https://marketplace.visualstudio.com/items?itemName=silvenon.mdx) - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - [stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) @@ -143,6 +142,7 @@ To enable correct validation and to fix lint/style errors on save, add this to y ```json + "eslint.useFlatConfig": true, "css.validate": false, "scss.validate": false, "stylelint.validate": ["css", "scss"], From 3b65a3c88bd8e646f1a524b36bbea46c99167f63 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Fri, 13 Dec 2024 14:07:52 +0100 Subject: [PATCH 06/12] fix(teslint): enable linting ts --- .eslintrc.react.json | 8 -- .eslintrc.ts.json | 115 -------------------------- eslint.config.mjs | 191 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 162 insertions(+), 152 deletions(-) delete mode 100644 .eslintrc.react.json delete mode 100644 .eslintrc.ts.json diff --git a/.eslintrc.react.json b/.eslintrc.react.json deleted file mode 100644 index d99f452f9d..0000000000 --- a/.eslintrc.react.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "rules": { - "react/no-unknown-property": "off", - "react/prop-types": "off", - "react/jsx-key": "off", - "react/react-in-jsx-scope": "off" - } -} diff --git a/.eslintrc.ts.json b/.eslintrc.ts.json deleted file mode 100644 index ada5cdd195..0000000000 --- a/.eslintrc.ts.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "rules": { - "array-callback-return": ["error", { "checkForEach": false }], - "block-scoped-var": "error", - "consistent-return": "error", - "constructor-super": "error", - "eqeqeq": "error", - "for-direction": "error", - "getter-return": "error", - "import/order": [ - "error", - { - "alphabetize": { "order": "asc", "caseInsensitive": false }, - "groups": [ - ["builtin", "external"], - ["internal", "unknown"], - ["parent", "sibling", "index"] - ], - "newlines-between": "never", - "warnOnUnassignedImports": false - } - ], - "no-alert": "error", - "no-async-promise-executor": "error", - "no-caller": "error", - "no-case-declarations": "error", - "no-class-assign": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-const-assign": "error", - "no-constant-condition": "error", - "no-constructor-return": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-args": "error", - "no-dupe-class-members": "error", - "no-dupe-else-if": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-pattern": "error", - "no-eval": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-extra-semi": "error", - "no-fallthrough": "error", - "no-func-assign": "error", - "no-global-assign": "error", - "no-implicit-globals": "error", - "no-implied-eval": "error", - "no-import-assign": "error", - "no-inner-declarations": "error", - "no-invalid-regexp": "error", - "no-invalid-this": "error", - "no-irregular-whitespace": "error", - "no-lone-blocks": "error", - "no-loop-func": "error", - "no-misleading-character-class": "error", - "no-multi-str": "error", - "no-new-func": "error", - "no-new-symbol": "error", - "no-new-wrappers": "error", - "no-obj-calls": "error", - "no-octal": "error", - "no-octal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-redeclare": "error", - "no-regex-spaces": "error", - "no-return-assign": "error", - "no-return-await": "error", - "no-self-assign": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-setter-return": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-this-before-super": "error", - "no-throw-literal": "error", - "no-undef": "error", - "no-unexpected-multiline": "error", - "no-unmodified-loop-condition": "error", - "no-unreachable": "error", - "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-vars": "error", - "no-useless-call": "error", - "no-useless-catch": "error", - "no-useless-concat": "error", - "no-useless-escape": "error", - "no-useless-return": "error", - "no-void": "error", - "no-with": "error", - "prefer-regex-literals": "error", - "radix": "error", - "require-yield": "error", - "sort-imports": [ - "error", - { - "ignoreCase": true, - "ignoreDeclarationSort": true, - "ignoreMemberSort": false, - "allowSeparatedGroups": false - } - ], - "use-isnan": "error", - "valid-typeof": "error", - "vars-on-top": "off", - "yoda": "error" - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs index 71bb3257e6..366b8f1e33 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -42,6 +42,159 @@ export default tseslint.config( }, ...compat.extends('eslint-config-prettier'), + // JavaScript, TypeScript & React + ...compat.extends('plugin:react/recommended').map(() => ({ + files: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'], + plugins: { + '@typescript-eslint': tsPlugin, + import: fixupPluginRules(_import), + jest, + react, + }, + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaFeatures: { jsx: true }, + }, + }, + settings: { + 'import/resolver': { + node: { + extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'], + }, + }, + react: { version: 'detect' }, + }, + rules: { + 'array-callback-return': [ + 'error', + { + checkForEach: false, + }, + ], + 'block-scoped-var': 'error', + 'consistent-return': 'error', + 'constructor-super': 'error', + eqeqeq: 'error', + 'for-direction': 'error', + 'getter-return': 'error', + 'import/order': [ + 'error', + { + alphabetize: { + caseInsensitive: false, + order: 'asc', + }, + groups: [ + ['builtin', 'external'], + ['internal', 'unknown'], + ['parent', 'sibling', 'index'], + ], + 'newlines-between': 'never', + warnOnUnassignedImports: false, + }, + ], + 'no-alert': 'error', + 'no-async-promise-executor': 'error', + 'no-caller': 'error', + 'no-case-declarations': 'error', + 'no-class-assign': 'error', + 'no-compare-neg-zero': 'error', + 'no-cond-assign': 'error', + 'no-const-assign': 'error', + 'no-constant-condition': 'error', + 'no-constructor-return': 'error', + 'no-control-regex': 'error', + 'no-debugger': 'error', + 'no-delete-var': 'error', + 'no-dupe-args': 'error', + 'no-dupe-class-members': 'error', + 'no-dupe-else-if': 'error', + 'no-dupe-keys': 'error', + 'no-duplicate-case': 'error', + 'no-empty': 'error', + 'no-empty-character-class': 'error', + 'no-empty-pattern': 'error', + 'no-eval': 'error', + 'no-ex-assign': 'error', + 'no-extra-boolean-cast': 'error', + 'no-extra-semi': 'error', + 'no-fallthrough': 'error', + 'no-func-assign': 'error', + 'no-global-assign': 'error', + 'no-implicit-globals': 'error', + 'no-implied-eval': 'error', + 'no-import-assign': 'error', + 'no-inner-declarations': 'error', + 'no-invalid-regexp': 'error', + 'no-invalid-this': 'error', + 'no-irregular-whitespace': 'error', + 'no-lone-blocks': 'error', + 'no-loop-func': 'error', + 'no-misleading-character-class': 'error', + 'no-multi-str': 'error', + 'no-new-func': 'error', + 'no-new-symbol': 'error', + 'no-new-wrappers': 'error', + 'no-obj-calls': 'error', + 'no-octal': 'error', + 'no-octal-escape': 'error', + 'no-param-reassign': 'error', + 'no-prototype-builtins': 'error', + 'no-redeclare': 'error', + 'no-regex-spaces': 'error', + 'no-return-assign': 'error', + 'no-return-await': 'error', + 'no-self-assign': 'error', + 'no-self-compare': 'error', + 'no-sequences': 'error', + 'no-setter-return': 'error', + 'no-shadow-restricted-names': 'error', + 'no-sparse-arrays': 'error', + 'no-this-before-super': 'error', + 'no-throw-literal': 'error', + 'no-undef': 'error', + 'no-unexpected-multiline': 'error', + 'no-unmodified-loop-condition': 'error', + 'no-unreachable': 'error', + 'no-unsafe-finally': 'error', + 'no-unsafe-negation': 'error', + 'no-unused-expressions': 'error', + 'no-unused-labels': 'error', + '@typescript-eslint/no-unused-vars': 'error', + 'no-useless-call': 'error', + 'no-useless-catch': 'error', + 'no-useless-concat': 'error', + 'no-useless-escape': 'error', + 'no-useless-return': 'error', + 'no-var': 'error', + 'no-void': 'error', + 'no-with': 'error', + 'prefer-regex-literals': 'error', + radix: 'error', + // Start of React rules + 'react/jsx-key': 'off', + 'react/no-unknown-property': 'off', + 'react/prop-types': 'off', + 'react/react-in-jsx-scope': 'off', + // End of React rules + 'require-yield': 'error', + 'sort-imports': [ + 'error', + { + allowSeparatedGroups: false, + ignoreCase: true, + ignoreDeclarationSort: true, + ignoreMemberSort: false, + }, + ], + 'use-isnan': 'error', + 'valid-typeof': 'error', + 'vars-on-top': 'off', + yoda: 'error', + }, + })), + // JSON { files: ['**/*.json'], @@ -54,7 +207,7 @@ export default tseslint.config( { files: ['**/*.md'], plugins: { markdown }, - ignores: ['dist/**/*.md', 'CHANGELOG.md'], + ignores: ['CHANGELOG.md'], processor: 'markdown/markdown', rules: { ...markdown.configs.recommended.rules, @@ -70,38 +223,18 @@ export default tseslint.config( processor: mdx.createRemarkProcessor({ lintCodeBlocks: true, }), + rules: { + ...markdown.configs.recommended.rules, + ...mdx.flat.rules, + }, }, - ...compat.extends('plugin:mdx/overrides').map((config) => ({ - ...config, + { ...mdx.flatCodeBlocks, rules: { ...mdx.flatCodeBlocks.rules, + '@typescript-eslint/no-unused-vars': 'off', + 'no-undef': 'off', 'react/jsx-no-undef': 'off', }, - })), - - // JavaScript, TypeScript & React - ...compat.extends('plugin:react/recommended', './.eslintrc.ts.json', './.eslintrc.react.json').map(() => ({ - files: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'], - plugins: { - '@typescript-eslint': tsPlugin, - import: fixupPluginRules(_import), - jest, - react, - }, - languageOptions: { - parser: tsParser, - parserOptions: { - ecmaFeatures: { jsx: true }, - }, - }, - settings: { - 'import/resolver': { - node: { - extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'], - }, - }, - react: { version: '18' }, - }, - })), + }, ) From 882866dfcd3e03f30342c0f7ff4cd412c5cdef55 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Fri, 13 Dec 2024 14:08:21 +0100 Subject: [PATCH 07/12] fix(teslint): address lint issues --- .ncurc.major.js | 1 + .ncurc.minor.js | 1 + .ncurc.patch.js | 1 + CONTRIBUTING.md | 3 +-- eslint.config.mjs | 4 ---- packages/css/README.md | 2 +- packages/react/README.md | 2 +- packages/react/babel.config.js | 1 + packages/react/documentation/coding-conventions.md | 9 ++++----- packages/react/package.json | 2 +- proprietary/assets/svgo.config.js | 1 + proprietary/react-icons/README.md | 2 +- proprietary/tokens/README.md | 6 +++--- storybook/src/components/FieldSet/FieldSet.docs.mdx | 4 ++-- storybook/src/components/Grid/Grid.stories.tsx | 1 + storybook/src/components/Icon/Icon.docs.mdx | 4 ++-- storybook/src/components/LinkList/LinkList.stories.tsx | 1 + .../src/components/SearchField/SearchField.stories.tsx | 1 + .../src/docs/developer-guide/getting-started.docs.mdx | 4 ++-- .../src/docs/developer-guide/routing-libraries.docs.mdx | 6 +++--- 20 files changed, 29 insertions(+), 27 deletions(-) diff --git a/.ncurc.major.js b/.ncurc.major.js index ffe0fc6584..66737db8ab 100644 --- a/.ncurc.major.js +++ b/.ncurc.major.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ const minorConfig = require('./.ncurc.minor') module.exports = { diff --git a/.ncurc.minor.js b/.ncurc.minor.js index 9abb8fb1e8..a90ed37db3 100644 --- a/.ncurc.minor.js +++ b/.ncurc.minor.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ const patchConfig = require('./.ncurc.patch') module.exports = { diff --git a/.ncurc.patch.js b/.ncurc.patch.js index 5484dd19a4..0d1dbbcccf 100644 --- a/.ncurc.patch.js +++ b/.ncurc.patch.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ module.exports = { reject: [], } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index add79d867e..62c8a44982 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -149,7 +149,6 @@ To enable correct validation and to fix lint/style errors on save, add this to y "editor.codeActionsOnSave": { "source.fixAll.eslint": true, "source.fixAll.stylelint": true, - "source.fixAll.markdownlint": true }, "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, @@ -200,7 +199,7 @@ The copyright holder for all files created by people working for the City of Ams If you use code from other EUPL-1.2 or higher licensed files that have a copyright notice, don’t forget to add this copyright notice as well. So, for a file with code written by someone working for the City of Amsterdam in 2023, but also containing code from another EUPL-1.2 or higher licensed file written by John Doe in 2021, the header would look like this: -```js +```ts /** * @license EUPL-1.2+ * Copyright (c) 2021 John Doe diff --git a/eslint.config.mjs b/eslint.config.mjs index 366b8f1e33..01aec909b6 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -223,10 +223,6 @@ export default tseslint.config( processor: mdx.createRemarkProcessor({ lintCodeBlocks: true, }), - rules: { - ...markdown.configs.recommended.rules, - ...mdx.flat.rules, - }, }, { ...mdx.flatCodeBlocks, diff --git a/packages/css/README.md b/packages/css/README.md index c8303a69fa..02a09d94a9 100644 --- a/packages/css/README.md +++ b/packages/css/README.md @@ -35,7 +35,7 @@ Other communities only need to overwrite design tokens to use our components wit Import the main stylesheet and use the class names in your markup. -```jsx +```tsx import "@amsterdam/design-system-assets/font/index.css" import "@amsterdam/design-system-css/dist/index.css" import "@amsterdam/design-system-tokens/dist/index.css" diff --git a/packages/react/README.md b/packages/react/README.md index 2a286d7f90..5e87a2ef7c 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -32,7 +32,7 @@ Import the stylesheets for the fonts, tokens, and components. Then import and use the components in your JSX. -```jsx +```tsx import "@amsterdam/design-system-assets/font/index.css" import "@amsterdam/design-system-css/dist/index.css" import "@amsterdam/design-system-tokens/dist/index.css" diff --git a/packages/react/babel.config.js b/packages/react/babel.config.js index c57c4cc6ee..98f433dddf 100644 --- a/packages/react/babel.config.js +++ b/packages/react/babel.config.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], } diff --git a/packages/react/documentation/coding-conventions.md b/packages/react/documentation/coding-conventions.md index ed38613983..7d9aea1e1e 100644 --- a/packages/react/documentation/coding-conventions.md +++ b/packages/react/documentation/coding-conventions.md @@ -9,11 +9,10 @@ Barrel files allow a consumer to do this: Instead of a separate import for each component, while even reaching into the `dist` directory: - -```js -import Heading from "@amsterdam/design-system-react/dist/Heading/Heading" -import Link from "@amsterdam/design-system-react/dist/Link/Link" -import Paragraph from "@amsterdam/design-system-react/dist/Paragraph/Paragraph" +```ts +import Heading from "@amsterdam/design-system-react/dist/Heading/Heading"; +import Link from "@amsterdam/design-system-react/dist/Link/Link"; +import Paragraph from "@amsterdam/design-system-react/dist/Paragraph/Paragraph"; ``` However, barrel files have 2 potential pitfalls: diff --git a/packages/react/package.json b/packages/react/package.json index 02a2063220..f93b1c5c00 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -26,7 +26,7 @@ "build": "rollup -c", "build:watch": "rollup -c --watch", "clean": "rimraf dist/", - "lint": "tsc --project ./tsconfig.json --noEmit && tsc --noEmit --project ./tsconfig.test.json", + "lint": "tsc --noEmit --project ./tsconfig.json && tsc --noEmit --project ./tsconfig.test.json", "test": "jest --verbose --coverage", "watch:test": "jest --verbose --watch" }, diff --git a/proprietary/assets/svgo.config.js b/proprietary/assets/svgo.config.js index 298dc82499..5ecb855c70 100644 --- a/proprietary/assets/svgo.config.js +++ b/proprietary/assets/svgo.config.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ module.exports = { plugins: [ 'removeDimensions', diff --git a/proprietary/react-icons/README.md b/proprietary/react-icons/README.md index 272af594f4..cf5b099ad0 100644 --- a/proprietary/react-icons/README.md +++ b/proprietary/react-icons/README.md @@ -19,7 +19,7 @@ npm install @amsterdam/design-system-react-icons Import the component for the icon you need, as well as the generic Icon component, and use them in your JSX. -```js +```ts import { Icon } from "@amsterdam/design-system-react"; import { SearchIcon } from "@amsterdam/design-system-react-icons"; diff --git a/proprietary/tokens/README.md b/proprietary/tokens/README.md index ed4a0f2646..abab112e46 100644 --- a/proprietary/tokens/README.md +++ b/proprietary/tokens/README.md @@ -165,7 +165,7 @@ Here, tokens start their name with a prefix of `ams.`. Use ‘dot notation’ or square brackets to access the tokens. -```ts +```tsx import tokens from "@amsterdam/design-system-tokens/dist/index.json" const { ams } = tokens @@ -177,9 +177,9 @@ Import and merge the compact tokens if you need them. Then you can use the tokens in scripting or css-in-js libraries. -```ts -import spaciousTokens from "@amsterdam/design-system-tokens/dist/index.json" +```tsx import compactTokens from "@amsterdam/design-system-tokens/dist/compact.json" +import spaciousTokens from "@amsterdam/design-system-tokens/dist/index.json" const { ams } = { ...spaciousTokens, ...compactTokens } ``` diff --git a/storybook/src/components/FieldSet/FieldSet.docs.mdx b/storybook/src/components/FieldSet/FieldSet.docs.mdx index 53e289fc60..314b955738 100644 --- a/storybook/src/components/FieldSet/FieldSet.docs.mdx +++ b/storybook/src/components/FieldSet/FieldSet.docs.mdx @@ -71,7 +71,7 @@ Screen reader users will no longer be able to skip the description, but we think that is preferable to missing the description entirely. Add an `id` to the Field Set and the description, and add both to the `aria-labelledby` attribute of Field Set, like so: -```jsx +```tsx
Description ... @@ -88,7 +88,7 @@ Because of [the NVDA bug mentioned earlier](https://github.com/nvaccess/nvda/iss we add the Error Message text to the label as well. Add an `id` to the Field Set and the Error Message, and add both to the `aria-labelledby` attribute of Field Set, like so: -```jsx +```tsx
Error message ... diff --git a/storybook/src/components/Grid/Grid.stories.tsx b/storybook/src/components/Grid/Grid.stories.tsx index e38db74efd..1b27aaa31a 100644 --- a/storybook/src/components/Grid/Grid.stories.tsx +++ b/storybook/src/components/Grid/Grid.stories.tsx @@ -54,6 +54,7 @@ const meta = { export default meta +// eslint-disable-next-line @typescript-eslint/no-unused-vars const cellMeta = { component: Grid.Cell, argTypes: { diff --git a/storybook/src/components/Icon/Icon.docs.mdx b/storybook/src/components/Icon/Icon.docs.mdx index e6df514b6d..e4079bb634 100644 --- a/storybook/src/components/Icon/Icon.docs.mdx +++ b/storybook/src/components/Icon/Icon.docs.mdx @@ -16,13 +16,13 @@ import { StatusBadge } from "../../docs/components/StatusBadge"; Use the React Icon component together with a React SVG component from `@amsterdam/design-system-react-icons`. Import this SVG as follows: -```js +```tsx import { EmailIcon } from "@amsterdam/design-system-react-icons"; ``` Then, you can use it in the component like this: -```jsx +```tsx ``` diff --git a/storybook/src/components/LinkList/LinkList.stories.tsx b/storybook/src/components/LinkList/LinkList.stories.tsx index f7a4733c59..384667427c 100644 --- a/storybook/src/components/LinkList/LinkList.stories.tsx +++ b/storybook/src/components/LinkList/LinkList.stories.tsx @@ -17,6 +17,7 @@ const meta = { export default meta +// eslint-disable-next-line @typescript-eslint/no-unused-vars const linkMeta = { component: LinkList.Link, } satisfies Meta diff --git a/storybook/src/components/SearchField/SearchField.stories.tsx b/storybook/src/components/SearchField/SearchField.stories.tsx index 047e463569..5db2019d78 100644 --- a/storybook/src/components/SearchField/SearchField.stories.tsx +++ b/storybook/src/components/SearchField/SearchField.stories.tsx @@ -75,6 +75,7 @@ export const Controlled: any = { const value = formData.get('search-box') // search actions should not be triggered without a value if (value) { + // eslint-disable-next-line no-alert alert(`Gezocht op '${value}'`) } }} diff --git a/storybook/src/docs/developer-guide/getting-started.docs.mdx b/storybook/src/docs/developer-guide/getting-started.docs.mdx index a50071822e..441361c154 100644 --- a/storybook/src/docs/developer-guide/getting-started.docs.mdx +++ b/storybook/src/docs/developer-guide/getting-started.docs.mdx @@ -16,7 +16,7 @@ npm install @amsterdam/design-system-assets @amsterdam/design-system-css @amster Import the components and stylesheets you need, for example: -```js +```tsx import "@amsterdam/design-system-assets/font/index.css"; import "@amsterdam/design-system-css/dist/index.css"; import "@amsterdam/design-system-tokens/dist/index.css"; @@ -35,7 +35,7 @@ For applications, the large text and ample white space of the theme can be count That’s why there is a compact mode. To use the compact mode, import the compact CSS **after** the theme CSS, like so: -```js +```ts import "@amsterdam/design-system-tokens/dist/index.css"; import "@amsterdam/design-system-tokens/dist/compact.css"; ``` diff --git a/storybook/src/docs/developer-guide/routing-libraries.docs.mdx b/storybook/src/docs/developer-guide/routing-libraries.docs.mdx index 110cf30816..f33f30dfb7 100644 --- a/storybook/src/docs/developer-guide/routing-libraries.docs.mdx +++ b/storybook/src/docs/developer-guide/routing-libraries.docs.mdx @@ -17,7 +17,7 @@ Some examples for common routing libraries: You can hook into the Next router using the `legacyBehaviour` and `passHref` props on the Next link component, like so: {/* prettier-ignore */} -```js +```tsx import { Link } from "@amsterdam/design-system-react" import NextLink from "next/link" @@ -32,9 +32,9 @@ React Router allows you to hook into their routing functionality with [the useLi You can use this hook directly on a link component, or you can write a component which adds this functionality to the link component you pass to it, like so: {/* prettier-ignore */} -```js +```jsx import { Link } from "@amsterdam/design-system-react" -import { useLinkClickHandler, useHref } from "react-router-dom" +import { useHref, useLinkClickHandler } from "react-router-dom" const ReactRouterLink = ({ component, to, ...restProps }) => { const Tag = component From 40cb206f6f5ea4387aa330554f97b216d0c77a35 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Fri, 13 Dec 2024 14:16:30 +0100 Subject: [PATCH 08/12] fix: address comments --- CONTRIBUTING.md | 10 ++++------ eslint.config.mjs | 3 +-- proprietary/react-icons/README.md | 9 +++++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 62c8a44982..e650d08213 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -139,23 +139,21 @@ You can use any editor you like, but if you use [Visual Studio Code](https://cod To enable correct validation and to fix lint/style errors on save, add this to your VSCode `settings.json`: - - ```json +{ "eslint.useFlatConfig": true, "css.validate": false, "scss.validate": false, "stylelint.validate": ["css", "scss"], "editor.codeActionsOnSave": { "source.fixAll.eslint": true, - "source.fixAll.stylelint": true, + "source.fixAll.stylelint": true }, "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, + "editor.formatOnSave": true +} ``` - - ### Run storybook diff --git a/eslint.config.mjs b/eslint.config.mjs index 01aec909b6..f70ef7c709 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -66,6 +66,7 @@ export default tseslint.config( react: { version: 'detect' }, }, rules: { + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], 'array-callback-return': [ 'error', { @@ -229,8 +230,6 @@ export default tseslint.config( rules: { ...mdx.flatCodeBlocks.rules, '@typescript-eslint/no-unused-vars': 'off', - 'no-undef': 'off', - 'react/jsx-no-undef': 'off', }, }, ) diff --git a/proprietary/react-icons/README.md b/proprietary/react-icons/README.md index cf5b099ad0..0ba6b47575 100644 --- a/proprietary/react-icons/README.md +++ b/proprietary/react-icons/README.md @@ -19,11 +19,12 @@ npm install @amsterdam/design-system-react-icons Import the component for the icon you need, as well as the generic Icon component, and use them in your JSX. -```ts -import { Icon } from "@amsterdam/design-system-react"; -import { SearchIcon } from "@amsterdam/design-system-react-icons"; + +```tsx +import { Icon } from "@amsterdam/design-system-react" +import { SearchIcon } from "@amsterdam/design-system-react-icons" -export const App = () => ; +export const App = () => ``` ## Updating From e2a225ede08be5dea25a9c3b9e368431d17679f1 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Mon, 16 Dec 2024 14:14:12 +0100 Subject: [PATCH 09/12] fix: remove ignore of node_modules It is part of the patterns ignored by default. --- eslint.config.mjs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index f70ef7c709..38c5390201 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -25,15 +25,7 @@ const compat = new FlatCompat({ export default tseslint.config( // Global { - ignores: [ - '**/node_modules/', - '**/vendor/', - '**/build/', - '**/coverage/', - '**/dist/', - '**/tmp/', - 'proprietary/react-icons', - ], + ignores: ['**/vendor/', '**/build/', '**/coverage/', '**/dist/', '**/tmp/', 'proprietary/react-icons'], }, { languageOptions: { From 56d331f3a62c6e0fac1138f4aac5c6a32c540e67 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Mon, 16 Dec 2024 14:15:26 +0100 Subject: [PATCH 10/12] refactor(eslint): sort rules alphabetically --- eslint.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 38c5390201..6560409d4a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -59,6 +59,7 @@ export default tseslint.config( }, rules: { '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/no-unused-vars': 'error', 'array-callback-return': [ 'error', { @@ -154,7 +155,6 @@ export default tseslint.config( 'no-unsafe-negation': 'error', 'no-unused-expressions': 'error', 'no-unused-labels': 'error', - '@typescript-eslint/no-unused-vars': 'error', 'no-useless-call': 'error', 'no-useless-catch': 'error', 'no-useless-concat': 'error', From f9be0f70d9e9e29e0639965b4c6bbd32bd7eca28 Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Mon, 16 Dec 2024 14:19:03 +0100 Subject: [PATCH 11/12] style(prettier): ignore prettier for code block --- .../docs/developer-guide/getting-started.docs.mdx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/storybook/src/docs/developer-guide/getting-started.docs.mdx b/storybook/src/docs/developer-guide/getting-started.docs.mdx index 441361c154..84e90f9dbe 100644 --- a/storybook/src/docs/developer-guide/getting-started.docs.mdx +++ b/storybook/src/docs/developer-guide/getting-started.docs.mdx @@ -16,17 +16,18 @@ npm install @amsterdam/design-system-assets @amsterdam/design-system-css @amster Import the components and stylesheets you need, for example: +{/* prettier-ignore */} ```tsx -import "@amsterdam/design-system-assets/font/index.css"; -import "@amsterdam/design-system-css/dist/index.css"; -import "@amsterdam/design-system-tokens/dist/index.css"; -import { Paragraph } from "@amsterdam/design-system-react"; +import "@amsterdam/design-system-assets/font/index.css" +import "@amsterdam/design-system-css/dist/index.css" +import "@amsterdam/design-system-tokens/dist/index.css" +import { Paragraph } from "@amsterdam/design-system-react" function App() { - return Hello, world!; + return Hello, world! } -export default App; +export default App ``` ## Compact Mode From 33729fbb43b2487a48f09f63eb5ee6e7cfe04f4a Mon Sep 17 00:00:00 2001 From: Ruben Sibon Date: Mon, 16 Dec 2024 14:19:03 +0100 Subject: [PATCH 12/12] style(prettier): ignore prettier for code block --- .../docs/developer-guide/getting-started.docs.mdx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/storybook/src/docs/developer-guide/getting-started.docs.mdx b/storybook/src/docs/developer-guide/getting-started.docs.mdx index 441361c154..84e90f9dbe 100644 --- a/storybook/src/docs/developer-guide/getting-started.docs.mdx +++ b/storybook/src/docs/developer-guide/getting-started.docs.mdx @@ -16,17 +16,18 @@ npm install @amsterdam/design-system-assets @amsterdam/design-system-css @amster Import the components and stylesheets you need, for example: +{/* prettier-ignore */} ```tsx -import "@amsterdam/design-system-assets/font/index.css"; -import "@amsterdam/design-system-css/dist/index.css"; -import "@amsterdam/design-system-tokens/dist/index.css"; -import { Paragraph } from "@amsterdam/design-system-react"; +import "@amsterdam/design-system-assets/font/index.css" +import "@amsterdam/design-system-css/dist/index.css" +import "@amsterdam/design-system-tokens/dist/index.css" +import { Paragraph } from "@amsterdam/design-system-react" function App() { - return Hello, world!; + return Hello, world! } -export default App; +export default App ``` ## Compact Mode