From a3f20adc12c15c1ddfd21ea138a6c20599952de0 Mon Sep 17 00:00:00 2001 From: Marcus Notheis Date: Fri, 4 Oct 2024 16:24:21 +0200 Subject: [PATCH] chore: migrate to eslint v9 (#6445) --- .eslintignore | 28 - .eslintrc.yml | 142 ----- eslint.config.mjs | 231 +++++++ package.json | 27 +- packages/base/bin/codemod.js | 38 -- packages/base/codemods/renamePropsV18.js | 413 ------------- packages/base/codemods/transformLibToDist.js | 23 - packages/base/package.json | 5 - packages/base/src/stores/I18nStore.ts | 2 +- packages/charts/{src => }/postcss.config.mjs | 2 +- .../chartbody/TimelineChartBody.tsx | 18 +- packages/main/babel-plugin-ssr.mjs | 3 +- .../ColumnHeader/ColumnHeaderModal.tsx | 3 +- .../hooks/useKeyboardNavigation.ts | 7 +- .../AnalyticalTable/hooks/usePopIn.ts | 2 +- .../main/src/components/MessageView/index.tsx | 4 +- .../main/src/components/ObjectPage/index.tsx | 4 +- .../useConcatSplitterElements.tsx | 2 +- .../VariantManagement/ManageViewsDialog.tsx | 2 +- .../ManageViewsTableRows.tsx | 2 +- .../components/VariantManagement/index.tsx | 2 +- .../main/src/internal/withWebComponent.cy.tsx | 4 + .../main/src/internal/withWebComponent.tsx | 2 +- yarn.lock | 569 +++++++++++------- 24 files changed, 635 insertions(+), 900 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.yml create mode 100644 eslint.config.mjs delete mode 100755 packages/base/bin/codemod.js delete mode 100644 packages/base/codemods/renamePropsV18.js delete mode 100644 packages/base/codemods/transformLibToDist.js rename packages/charts/{src => }/postcss.config.mjs (66%) diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index b7ef713b0fe..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,28 +0,0 @@ -# build results for base package -packages/base/dist -packages/base/types - -# build results for charts package -packages/charts/dist - -# build results for cli package -packages/cli/dist - -# build results for compat package -packages/compat/dist - -# build results for main package -packages/main/dist -packages/main/wrappers - -# i18n defaults -packages/main/src/i18n/i18n-defaults.ts - -# build result for cypress-commands package -packages/cypress-commands/dist - -scripts -shared -examples -templates - diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index dca77eab197..00000000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,142 +0,0 @@ ---- -root: true -parser: '@typescript-eslint/parser' -parserOptions: - sourceType: module - ecmaFeatures: - jsx: true -env: - browser: true - es2022: true -extends: - - plugin:react/recommended - - plugin:react/jsx-runtime - - plugin:react-hooks/recommended - - plugin:import/recommended - - plugin:prettier/recommended -plugins: - - prefer-arrow -settings: - react: - version: detect -rules: - camelcase: - - 'error' - - allow: - - sap_fiori_3 - - sap_fiori_3_dark - - sap_fiori_3_hcb - - sap_fiori_3_hcw - - sap_belize - - sap_belize_hcb - - sap_belize_hcw - - sap_horizon - - sap_horizon_dark - - sap_horizon_hcb - - sap_horizon_hcw - import/order: - - 'error' - - newlines-between: never - alphabetize: - order: asc - caseInsensitive: true - import/no-duplicates: 'error' - import/no-unresolved: 'off' -overrides: - # add config for all TypeScript files - - files: - - '*.ts' - - '*.tsx' - parserOptions: - projectService: - # TODO https://github.com/typescript-eslint/typescript-eslint/issues/9450 - maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING: 1000 - plugins: - - '@typescript-eslint' - extends: - - 'plugin:@typescript-eslint/recommended' - - 'plugin:@typescript-eslint/recommended-requiring-type-checking' - - 'plugin:import/typescript' - settings: - import/resolver: - typescript: true - rules: - # disabled some rules from the recommended preset - '@typescript-eslint/no-empty-function': 'off' - '@typescript-eslint/no-unsafe-member-access': 'off' - '@typescript-eslint/no-unsafe-argument': 'off' - '@typescript-eslint/no-unsafe-return': 'off' - '@typescript-eslint/no-unsafe-assignment': 'off' - '@typescript-eslint/no-unsafe-call': 'off' - '@typescript-eslint/restrict-plus-operands': 'off' - '@typescript-eslint/restrict-template-expressions': 'off' - - '@typescript-eslint/no-explicit-any': 'warn' - - # consistent type exports/imports - '@typescript-eslint/consistent-type-exports': - - 'error' - - fixMixedExportsWithInlineTypeSpecifier: false - '@typescript-eslint/consistent-type-imports': - - 'error' - - prefer: 'type-imports' - fixStyle: 'separate-type-imports' - - # lots of UI5 Web Components API are promised based but 'fire and forget' is sufficient for us - '@typescript-eslint/no-floating-promises': 'warn' - - '@typescript-eslint/no-unused-vars': - - 'error' - - varsIgnorePattern: '^_' - argsIgnorePattern: '^_' - caughtErrorsIgnorePattern: '^_' - - # Performance Improvements: https://typescript-eslint.io/linting/troubleshooting/performance-troubleshooting#eslint-plugin-import - 'import/named': 'off' - 'import/namespace': 'off' - 'import/default': 'off' - 'import/no-named-as-default-member': 'off' - - # Generated Web Component Wrappers might contain empty interfaces - - files: - - 'packages/main/src/webComponents/*/index.tsx' - - 'packages/compat/src/components/TableCell/index.tsx' - - 'packages/compat/src/components/TableGroupRow/index.tsx' - rules: - '@typescript-eslint/no-empty-object-type': 'off' - - # disable prop types check for Analytical Table Defaults (TODO might change for react-table v8) - - files: - - 'packages/main/src/components/AnalyticalTable/defaults/**/*.tsx' - - 'packages/main/src/components/AnalyticalTable/hooks/*.ts' - - 'packages/main/src/components/AnalyticalTable/hooks/*.tsx' - - 'packages/main/src/components/AnalyticalTable/TableBody/VirtualTableBodyContainer.tsx' - rules: - 'react/prop-types': 'off' - - - files: - - 'cypress/**/*' - rules: - '@typescript-eslint/no-namespace': 'off' - - - files: - - '*.cy.ts' - - '*.cy.tsx' - plugins: - - no-only-tests - rules: - '@typescript-eslint/no-empty-function': 'off' - 'import/order': 'warn' - 'react/no-unescaped-entities': 'off' - '@typescript-eslint/unbound-method': 'warn' - 'react/display-name': 'off' - no-only-tests/no-only-tests: 'error' - - - files: - - '*.stories.tsx' - extends: - - 'plugin:storybook/recommended' - rules: - 'react/prop-types': 'off' # inline custom components within stories don't need prop types - '@typescript-eslint/no-unused-vars': 'warn' # some samples can include unused vars to show the API / signature - 'react/no-unescaped-entities': 'off' diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000000..1596f129e1b --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,231 @@ +// @ts-check + +import eslint from '@eslint/js'; +import importPlugin from 'eslint-plugin-import'; +import noOnlyTests from 'eslint-plugin-no-only-tests'; +import prettierPlugin from 'eslint-plugin-prettier/recommended'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; +import storybookPlugin from 'eslint-plugin-storybook'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +const ignorePatterns = { + ignores: [ + 'packages/base/dist', + 'packages/base/types', + 'packages/charts/dist', + 'packages/cli/dist', + 'packages/compat/dist', + 'packages/main/dist', + 'packages/main/wrappers', + 'packages/main/src/i18n/i18n-defaults.ts', + 'packages/main/src/generated', + 'packages/cypress-commands/dist', + '**/scripts', + '**/shared', + '**/examples', + '**/templates' + ] +}; +const config = tseslint.config( + ignorePatterns, + eslint.configs.recommended, + // typescript-eslint shared configs + ...tseslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + // import plugin + importPlugin.flatConfigs.recommended, + importPlugin.flatConfigs.typescript, + // eslint-plugin-react + reactPlugin.configs.flat.recommended, // This is not a plugin object, but a shareable config object + reactPlugin.configs.flat['jsx-runtime'], // Add this if you are using React 17+ + // eslint-plugin-react-hooks + { + plugins: { + 'react-hooks': reactHooksPlugin + }, + rules: reactHooksPlugin.configs.recommended.rules + }, + { + languageOptions: { + globals: { + ...globals.browser + }, + + ecmaVersion: 'latest', + sourceType: 'module', + + parserOptions: { + projectService: { + allowDefaultProject: ['packages/*/postcss.config.mjs'], + // eslint-disable-next-line camelcase + maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING: 1000 + } + } + }, + + settings: { + react: { + version: 'detect' + } + }, + + rules: { + camelcase: [ + 'error', + { + allow: [ + 'sap_fiori_3', + 'sap_fiori_3_dark', + 'sap_fiori_3_hcb', + 'sap_fiori_3_hcw', + 'sap_belize', + 'sap_belize_hcb', + 'sap_belize_hcw', + 'sap_horizon', + 'sap_horizon_dark', + 'sap_horizon_hcb', + 'sap_horizon_hcw' + ] + } + ], + + 'import/order': [ + 'error', + { + 'newlines-between': 'never', + + alphabetize: { + order: 'asc', + caseInsensitive: true + } + } + ], + + 'import/no-duplicates': 'error', + 'import/no-unresolved': 'off', + + // recommended eslint rules + 'no-extra-boolean-cast': 'warn' + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + + settings: { + 'import/resolver': { + typescript: true + } + }, + + rules: { + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-explicit-any': 'warn', + + '@typescript-eslint/consistent-type-exports': [ + 'error', + { + fixMixedExportsWithInlineTypeSpecifier: false + } + ], + + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + fixStyle: 'separate-type-imports' + } + ], + + '@typescript-eslint/no-floating-promises': 'warn', + + '@typescript-eslint/no-unused-vars': [ + 'error', + { + varsIgnorePattern: '^_', + argsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_' + } + ], + + 'import/named': 'off', + 'import/namespace': 'off', + 'import/default': 'off', + 'import/no-named-as-default-member': 'off' + } + }, + { + files: ['**/*.mjs'], + ...tseslint.configs.disableTypeChecked + }, + { + files: [ + 'packages/main/src/webComponents/*/index.tsx', + 'packages/compat/src/components/TableCell/index.tsx', + 'packages/compat/src/components/TableGroupRow/index.tsx' + ], + + rules: { + '@typescript-eslint/no-empty-object-type': 'off' + } + }, + { + files: [ + 'packages/main/src/components/AnalyticalTable/defaults/**/*.tsx', + 'packages/main/src/components/AnalyticalTable/hooks/*.ts', + 'packages/main/src/components/AnalyticalTable/hooks/*.tsx', + 'packages/main/src/components/AnalyticalTable/TableBody/VirtualTableBodyContainer.tsx' + ], + + rules: { + 'react/prop-types': 'off' + } + }, + { + files: ['cypress/**/*'], + + rules: { + '@typescript-eslint/no-namespace': 'off' + } + }, + { + files: ['**/*.cy.ts', '**/*.cy.tsx'], + + plugins: { + 'no-only-tests': noOnlyTests + }, + + rules: { + '@typescript-eslint/no-empty-function': 'off', + 'import/order': 'warn', + 'react/no-unescaped-entities': 'off', + '@typescript-eslint/unbound-method': 'warn', + 'react/display-name': 'off', + 'no-only-tests/no-only-tests': 'error' + } + }, + + // Storybook + ...storybookPlugin.configs['flat/recommended'], + { + files: ['**/*.stories.tsx'], + rules: { + 'react/prop-types': 'off', + '@typescript-eslint/no-unused-vars': 'warn', + 'react/no-unescaped-entities': 'off' + } + }, + + // prettier plugin must be the last entry in the config! + prettierPlugin +); + +export default config; diff --git a/package.json b/package.json index 9df43776814..14a3f2e8b51 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "clean": "tsc --build --clean && tsc --build tsconfig.build.json --clean && rimraf temp .out && lerna run clean", "clean:remove-modules": "yarn clean && rimraf node_modules", "prettier:all": "prettier --write --config ./prettier.config.cjs \"packages/**/*.{js,jsx,ts,tsx,mdx,json,md}\"", - "lint": "eslint packages --ext .ts,.tsx", + "lint": "eslint packages", "lerna:version-dryrun": "lerna version --conventional-graduate --no-git-tag-version --no-push", "wrappers:main": "WITH_WEB_COMPONENT_IMPORT_PATH='../../internal/withWebComponent.js' INTERFACES_IMPORT_PATH='../../types/index.js' node packages/cli/dist/bin/index.js create-wrappers --packageName @ui5/webcomponents --out ./packages/main/src/webComponents --additionalComponentNote 'This is a UI5 Web Component! [Repository](https://github.com/SAP/ui5-webcomponents) | [Documentation](https://sap.github.io/ui5-webcomponents/)'", "wrappers:fiori": "WITH_WEB_COMPONENT_IMPORT_PATH='../../internal/withWebComponent.js' INTERFACES_IMPORT_PATH='../../types/index.js' node packages/cli/dist/bin/index.js create-wrappers --packageName @ui5/webcomponents-fiori --out ./packages/main/src/webComponents --additionalComponentNote 'This is a UI5 Web Component! [Repository](https://github.com/SAP/ui5-webcomponents) | [Documentation](https://sap.github.io/ui5-webcomponents/)'", @@ -55,15 +55,15 @@ "@babel/preset-react": "7.24.7", "@babel/preset-typescript": "7.24.7", "@cypress/code-coverage": "^3.10.0", + "@eslint/js": "^9.11.1", "@semantic-release/github": "^11.0.0", "@testing-library/cypress": "^10.0.0", + "@types/eslint__js": "^8.42.3", "@types/jscodeshift": "^0.11.11", "@types/node": "^20.0.0", "@types/react": "^18.3.4", "@types/react-dom": "^18.3.0", "@types/use-sync-external-store": "^0.0.6", - "@typescript-eslint/eslint-plugin": "8", - "@typescript-eslint/parser": "8", "@ui5/webcomponents-tools": "2.3.0", "@vitejs/plugin-react": "^4.2.0", "chromatic": "^11.0.0", @@ -71,17 +71,17 @@ "cypress": "13.15.0", "cypress-real-events": "^1.8.1", "dedent": "^1.0.0", - "eslint": "^8.35.0", - "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.5.3", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-no-only-tests": "^3.1.0", - "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-storybook": "^0.9.0", + "eslint": "^9.11.1", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-no-only-tests": "^3.3.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.1", + "eslint-plugin-react-hooks": "beta", + "eslint-plugin-storybook": "0.10.0--canary.156.408aed4.0", "glob": "^11.0.0", + "globals": "^15.10.0", "husky": "^9.0.6", "lerna": "^8.0.0", "lint-staged": "^15.0.0", @@ -96,6 +96,7 @@ "storybook": "8.3.4", "typedoc": "^0.26.0", "typescript": "5.6.2", + "typescript-eslint": "^8.8.0", "vite": "^5.0.0", "vite-plugin-istanbul": "^6.0.0", "vite-tsconfig-paths": "^5.0.0" diff --git a/packages/base/bin/codemod.js b/packages/base/bin/codemod.js deleted file mode 100755 index fbeea0fbba8..00000000000 --- a/packages/base/bin/codemod.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env node - -const childProcess = require('child_process'); -const path = require('path'); - -const SUPPORTED_TRANSFORMERS = ['transformLibToDist', 'renamePropsV18']; - -const transformerDir = path.resolve(__dirname, '..', 'codemods'); - -const [transform, input = 'src', ...args] = process.argv.slice(2); - -if (!SUPPORTED_TRANSFORMERS.includes(transform)) { - // eslint-disable-next-line no-console - console.error('Invalid transform choice, pick one of:'); - // eslint-disable-next-line no-console - console.error(SUPPORTED_TRANSFORMERS.map((x) => '- ' + x).join('\n')); - process.exit(1); -} - -const jscodeshiftOptions = []; - -const transformerPath = path.join(transformerDir, `${transform}.js`); -jscodeshiftOptions.push(`--transform`, transformerPath); - -if (args.includes('--typescript')) { - jscodeshiftOptions.push('--extensions=tsx,ts,jsx,js'); - jscodeshiftOptions.push('--parser', 'tsx'); -} else { - jscodeshiftOptions.push('--extensions=jsx,js'); -} - -jscodeshiftOptions.push('--ignore-pattern=**/node_modules/**'); - -// eslint-disable-next-line no-console -console.log(`Executing 'npx jscodeshift ${jscodeshiftOptions.join(' ')} ${input}'`); -childProcess.spawnSync('npx', ['jscodeshift', ...jscodeshiftOptions, input], { - stdio: 'inherit' -}); diff --git a/packages/base/codemods/renamePropsV18.js b/packages/base/codemods/renamePropsV18.js deleted file mode 100644 index d9d67241b84..00000000000 --- a/packages/base/codemods/renamePropsV18.js +++ /dev/null @@ -1,413 +0,0 @@ -const renamingMap = { - // UI5 Web Components - Avatar: { - backgroundColor: 'colorScheme', - image: 'children', - imageFitType: null - }, - AvatarGroup: { - avatarSize: null - }, - Bar: { - middleContent: 'children' - }, - Button: { - 'aria-label': 'accessibleName', - 'aria-labelledby': null, - iconSize: null - }, - Card: { - 'aria-label': null, - 'aria-labelledby': null - }, - Carousel: { - hideNavigation: 'hideNavigationArrows', - selectedIndex: null, - infiniteScrollOffset: null - }, - CheckBox: { - 'aria-label': null, - 'aria-labelledby': null, - wrap: 'wrappingType' - }, - ComboBox: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef', - filterValue: 'value' - }, - ColorPalette: { - onChange: 'onItemClick', - showMoreColors: null, - showRecentColors: null, - value: null - }, - ColorPaletteItem: { - stableDomRef: null - }, - DatePicker: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef' - }, - DateRangePicker: { - firstDateValue: 'startDateValue', - lastDateValue: 'endDateValue' - }, - Dialog: { - 'aria-label': 'accessibleName' - }, - FlexibleColumnLayout: { - noArrows: 'hideArrows' - }, - Input: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef', - highlight: null - }, - Label: { - wrap: 'wrappingType' - }, - Link: { - 'aria-label': null, - wrap: 'wrappingType' - }, - List: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef', - inset: 'indent' - }, - MessageStrip: { - noIcon: 'hideIcon', - noCloseButton: 'hideCloseButton', - type: 'design' - }, - NotificationListItem: { - heading: 'titleText', - wrap: 'wrappingType' - }, - NotificationListGroupItem: { - heading: 'titleText' - }, - Panel: { - 'aria-label': 'accessibleName' - }, - Popover: { - 'aria-label': 'accessibleName', - noArrow: 'hideArrow' - }, - Popup: { - 'aria-label': 'accessibleName' - }, - ProductSwitchItem: { - heading: 'titleText', - subheading: 'subtitleText' - }, - RadioButton: { - wrap: 'wrappingType', - selected: 'checked', - onSelect: 'onChange' - }, - RatingIndicator: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef', - maxValue: 'max' - }, - Select: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef' - }, - StepInput: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef' - }, - ShellBar: { - notificationCount: 'notificationsCount' - }, - StandardListItem: { - info: 'additionalText', - infoState: 'additionalTextState' - }, - SuggestionItem: { - info: 'additionalText', - infoState: 'additionalTextState', - group: null // use SuggestionItemGroup instead - }, - Switch: { - graphical: 'design' - }, - Tab: { - semanticColor: 'design' - }, - TabContainer: { - tabsPlacement: null - }, - Table: { - showNoData: 'hideNoData', - moreText: 'growingButtonText', - moreSubtext: 'growingButtonSubtext' - }, - TimelineItem: { - itemName: 'name', - itemNameClickable: 'nameClickable', - onItemNameClick: 'onNameClick' - }, - Title: { - wrap: 'wrappingType' - }, - ToggleButton: { - 'aria-label': 'accessibleName', - iconSize: null - }, - TreeListItem: { - info: 'additionalText', - infoState: 'additionalTextState' - }, - TreeItem: { - info: 'additionalText', - infoState: 'additionalTextState' - }, - TextArea: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef' - }, - UploadCollection: { - onFileDeleted: 'onItemDelete', - noDnd: 'hideDragOverlay' - }, - UploadCollectionItem: { - noDelete: 'disableDeleteButton', - noRetry: 'hideRetryButton', - noTerminate: 'hideTerminateButton' - }, - Wizard: { - 'aria-label': 'accessibleName', - 'aria-labelledby': 'accessibleNameRef', - onSelectionChange: 'onStepChange' - }, - WizardStep: { - 'aria-label': 'accessibleName', - heading: 'titleText', - subheading: 'subtitleText' - }, - - // UI5 Web Components React - AnalyticalCardHeader: { - title: 'titleText', - subTitle: 'subtitleText', - onHeaderClick: 'onClick' - }, - AnalyticalTable: { - title: 'header' - }, - DynamicPageTitle: { - heading: 'header', - subheading: 'subHeader', - showSubheadingRight: 'showSubHeaderRight' - }, - Form: { - title: 'titleText' - }, - FormGroup: { - title: 'titleText' - }, - MessageBox: { - title: 'titleText' - }, - ObjectPageSection: { - heading: 'titleText', - headingUppercase: 'titleTextUppercase' - }, - ObjectPageSubSection: { - heading: 'titleText' - }, - VariantManagement: { - popupTitle: 'titleText' - } -}; - -const enumRenamingMap = { - AvatarBackgroundColor: 'AvatarColorScheme', - PlacementType: 'PopoverPlacementType', - PanelAccessibleRoles: 'PanelAccessibleRole', - ListItemTypes: 'ListItemType', - MessageStripType: 'MessageStripDesign', - AvatarFitType: null, - TabContainerTabsPlacement: null, - SearchFunctions: null, - TabContainerHeaderMode: null, - TabDesignMode: null -}; - -process.env.NODE_ENV = 'development'; - -const componentIsImportedFromWebComponentsReact = (j, root, componentName) => { - const imports = root.find(j.ImportDeclaration); - const importStatement = imports.find(j.ImportSpecifier, { local: { name: componentName } }); - - if (importStatement.length === 0) return false; - - const importedFrom = importStatement.get().parentPath.parentPath.value.source.value; - - return importedFrom.startsWith('@ui5/webcomponents-react'); -}; - -const addWebComponentsReactImport = (j, root, importName) => { - const imports = root.find(j.ImportDeclaration); - const n = imports.length; - - const isAlreadyImported = componentIsImportedFromWebComponentsReact(j, root, importName); - - if (isAlreadyImported) { - return; - } - - const importStatement = j.importDeclaration( - [j.importSpecifier(j.identifier(importName), j.identifier(importName))], - j.literal('@ui5/webcomponents-react') - ); - - if (n) { - j(imports.at(n - 1).get()).insertAfter(importStatement); - } else { - root.get().node.program.body.unshift(importStatement); - } -}; - -const renameEnums = (j, root) => { - for (const oldEnumName in enumRenamingMap) { - if (!componentIsImportedFromWebComponentsReact(j, root, oldEnumName)) { - continue; - } - - const newEnumName = enumRenamingMap[oldEnumName]; - - // import statement - const importStatement = root.find(j.ImportSpecifier, { local: { name: oldEnumName } }); - const importedFrom = importStatement.get().parentPath.parentPath.value.source.value; - - if (importedFrom === '@ui5/webcomponents-react') { - if (newEnumName === null) { - importStatement.remove(); - } else { - importStatement.replaceWith(j.importSpecifier(j.identifier(newEnumName), j.identifier(newEnumName))); - } - } else if (importedFrom.startsWith(`@ui5/webcomponents-react/dist/${oldEnumName}`)) { - if (newEnumName === null) { - root.find(j.ImportDeclaration, { source: { value: importedFrom } }).remove(); - } else { - importStatement.replaceWith(j.importSpecifier(j.identifier(newEnumName), j.identifier(newEnumName))); - importStatement.get().parentPath.parentPath.value.source = j.literal('@ui5/webcomponents-react'); - } - } - - // usages - const expression = root.find(j.MemberExpression, { object: { name: oldEnumName } }); - expression.replaceWith((nodePath) => { - return j.memberExpression(j.identifier(newEnumName), nodePath.value.property); - }); - } -}; - -module.exports = (file, api, options) => { - const j = api.jscodeshift; - const printOptions = options.printOptions || {}; - - const root = j(file.source); - - // eslint-disable-next-line guard-for-in - for (const componentName in renamingMap) { - const jsxElements = root.findJSXElements(componentName); - - if (jsxElements.length === 0) { - continue; - } - - const validMatch = componentIsImportedFromWebComponentsReact(j, root, componentName); - - if (!validMatch) { - continue; - } - - Object.entries(renamingMap[componentName]).forEach(([oldName, newName]) => { - const jsxAttributes = jsxElements.find(j.JSXAttribute, { name: { name: oldName } }); - if (!jsxAttributes.length) { - return; - } - if (newName === null) { - jsxAttributes.remove(); - } else { - jsxAttributes.find(j.JSXIdentifier, { name: oldName }).replaceWith(j.jsxIdentifier(newName)); - } - - if (componentName === 'Avatar' && newName === 'children') { - jsxAttributes - .filter((nodePath) => { - return nodePath.value.name.name === 'children'; - }) - .replaceWith((nodePath) => { - const imageSrc = - nodePath.value.value.type === 'StringLiteral' - ? nodePath.value.value.value - : nodePath.value.value.expression.value; - const imageTag = j.jsxElement( - j.jsxOpeningElement( - j.jsxIdentifier('img'), - [j.jsxAttribute(j.jsxIdentifier('src'), j.stringLiteral(imageSrc))], - true - ), - null, - [] - ); - return j.jsxAttribute(nodePath.value.name, j.jsxExpressionContainer(imageTag)); - }); - } - - if (newName === 'wrappingType') { - addWebComponentsReactImport(j, root, 'WrappingType'); - jsxAttributes.replaceWith((nodePath) => { - return j.jsxAttribute( - nodePath.value.name, - j.jsxExpressionContainer( - j.memberExpression( - j.identifier('WrappingType'), - nodePath.value.value?.expression?.value === false ? j.identifier('None') : j.identifier('Normal') - ) - ) - ); - }); - } - - if (componentName === 'Table' && newName === 'hideNoData') { - // remove all values that used to be like `` or `
` - jsxAttributes - .filter((nodePath) => { - return ( - nodePath.value.name.name === 'hideNoData' && - (nodePath.value.value === null || nodePath.value.value?.expression?.value === true) - ); - }) - .remove(); - // invert the boolean - jsxAttributes.find(j.BooleanLiteral, { value: false }).replaceWith(j.booleanLiteral(true)); - } - - if (componentName === 'Switch' && newName === 'design') { - addWebComponentsReactImport(j, root, 'SwitchDesign'); - jsxAttributes.replaceWith((nodePath) => { - return j.jsxAttribute( - nodePath.value.name, - j.jsxExpressionContainer( - j.memberExpression( - j.identifier('SwitchDesign'), - nodePath.value.value?.expression?.value === false ? j.identifier('Textual') : j.identifier('Graphical') - ) - ) - ); - }); - } - }); - } - - renameEnums(j, root); - - return root.toSource(printOptions); -}; diff --git a/packages/base/codemods/transformLibToDist.js b/packages/base/codemods/transformLibToDist.js deleted file mode 100644 index a0fe302cb41..00000000000 --- a/packages/base/codemods/transformLibToDist.js +++ /dev/null @@ -1,23 +0,0 @@ -const libReplaceRegex = /^@ui5\/webcomponents-react(-(base|charts))?\/lib/; - -module.exports = function ({ path, source }, api, options) { - const j = api.jscodeshift; - const printOptions = options.printOptions || {}; - - const root = j(source) - .find(j.ImportDeclaration) - .forEach((nodePath) => { - if (libReplaceRegex.test(nodePath.value.source.value)) { - j(nodePath).replaceWith( - j.importDeclaration( - nodePath.value.specifiers, - j.literal(nodePath.value.source.value.replace('/lib/', '/dist/')) - ) - ); - } - - return nodePath; - }); - - return root.toSource(printOptions); -}; diff --git a/packages/base/package.json b/packages/base/package.json index 21370e7809e..019197d7a61 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -45,12 +45,7 @@ "publishConfig": { "access": "public" }, - "bin": { - "ui5wcr-codemod": "./bin/codemod.js" - }, "files": [ - "bin", - "codemods", "dist", "CHANGELOG.md", "LICENSE", diff --git a/packages/base/src/stores/I18nStore.ts b/packages/base/src/stores/I18nStore.ts index 8253a447054..d959f67b600 100644 --- a/packages/base/src/stores/I18nStore.ts +++ b/packages/base/src/stores/I18nStore.ts @@ -40,7 +40,7 @@ export const I18nStore = { }, loadBundle: (bundleName: string) => { const bundles = getSnapshot(); - if (!bundles.hasOwnProperty(bundleName)) { + if (!Object.prototype.hasOwnProperty.call(bundles, bundleName)) { void getI18nBundle(bundleName).then((bundle) => { STORE_LOCATION[STORE_SYMBOL] = { ...STORE_LOCATION[STORE_SYMBOL], diff --git a/packages/charts/src/postcss.config.mjs b/packages/charts/postcss.config.mjs similarity index 66% rename from packages/charts/src/postcss.config.mjs rename to packages/charts/postcss.config.mjs index 7e0068d1a4f..1f94acdf7c2 100644 --- a/packages/charts/src/postcss.config.mjs +++ b/packages/charts/postcss.config.mjs @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { postcssConfigFactory } from '../../../config/postcss-config-factory.js'; +import { postcssConfigFactory } from '../../config/postcss-config-factory.js'; const packageName = JSON.parse(fs.readFileSync('./package.json').toString()).name; diff --git a/packages/charts/src/components/TimelineChart/chartbody/TimelineChartBody.tsx b/packages/charts/src/components/TimelineChart/chartbody/TimelineChartBody.tsx index 047925d4ae3..875189ec87a 100644 --- a/packages/charts/src/components/TimelineChart/chartbody/TimelineChartBody.tsx +++ b/packages/charts/src/components/TimelineChart/chartbody/TimelineChartBody.tsx @@ -197,14 +197,16 @@ const TimelineChartTooltip = forwardRef { - const { x, y, width, height } = divRef.current?.getBoundingClientRect(); - // Adjust the x and y position of the tooltip popover in order to try - // to prevent it from being cut off by the bounds of the parent div. - const offSetX = mouseX - x; - const offSetY = mouseY - y; - const xPos = offSetX < width - 80 ? offSetX : offSetX - 120; - const yPos = offSetY < height - 70 ? offSetY : offSetY - 70; - setState({ x: xPos, y: yPos, label, visible: true, startTime, duration, color, isMilestone }); + if (divRef.current) { + const { x, y, width, height } = divRef.current.getBoundingClientRect(); + // Adjust the x and y position of the tooltip popover in order to try + // to prevent it from being cut off by the bounds of the parent div. + const offSetX = mouseX - x; + const offSetY = mouseY - y; + const xPos = offSetX < width - 80 ? offSetX : offSetX - 120; + const yPos = offSetY < height - 70 ? offSetY : offSetY - 70; + setState({ x: xPos, y: yPos, label, visible: true, startTime, duration, color, isMilestone }); + } }; const onLeaveItem = () => { diff --git a/packages/main/babel-plugin-ssr.mjs b/packages/main/babel-plugin-ssr.mjs index 35e7f3e1006..46989bdd37a 100644 --- a/packages/main/babel-plugin-ssr.mjs +++ b/packages/main/babel-plugin-ssr.mjs @@ -4,8 +4,9 @@ const Modes = { SSR: 'ssr' }; +// eslint-disable-next-line @typescript-eslint/no-unused-vars export default function (babel) { - const { types: t } = babel; + // const { types } = babel; return { name: 'ui5-webcomponents-ssr-plugin', diff --git a/packages/main/src/components/AnalyticalTable/ColumnHeader/ColumnHeaderModal.tsx b/packages/main/src/components/AnalyticalTable/ColumnHeader/ColumnHeaderModal.tsx index bab126b13aa..1d36e592137 100644 --- a/packages/main/src/components/AnalyticalTable/ColumnHeader/ColumnHeaderModal.tsx +++ b/packages/main/src/components/AnalyticalTable/ColumnHeader/ColumnHeaderModal.tsx @@ -102,7 +102,7 @@ export const ColumnHeaderModal = (props: ColumnHeaderModalProperties) => { ); } break; - case 'group': + case 'group': { const willGroup = !column.isGrouped; column.toggleGroupBy(willGroup); if (typeof onGroupBy === 'function') { @@ -114,6 +114,7 @@ export const ColumnHeaderModal = (props: ColumnHeaderModalProperties) => { ); } break; + } } setPopoverOpen(false); }; diff --git a/packages/main/src/components/AnalyticalTable/hooks/useKeyboardNavigation.ts b/packages/main/src/components/AnalyticalTable/hooks/useKeyboardNavigation.ts index e6025774abc..995af9ef182 100644 --- a/packages/main/src/components/AnalyticalTable/hooks/useKeyboardNavigation.ts +++ b/packages/main/src/components/AnalyticalTable/hooks/useKeyboardNavigation.ts @@ -103,7 +103,7 @@ const useGetTableProps = ( const { dataset } = e.target; if ( dataset.emptyRowCell === 'true' || - dataset.hasOwnProperty('subcomponentActiveElement') || + Object.prototype.hasOwnProperty.call(dataset, 'subcomponentActiveElement') || // todo: with the new popover API of ui5wc this might not be necessary anymore dataset.componentName === 'ATHeaderPopoverList' || dataset.componentName === 'ATHeaderPopover' @@ -157,7 +157,10 @@ const useGetTableProps = ( const onKeyboardNavigation = useCallback( (e) => { const { isRtl } = state; - const isActiveItemInSubComponent = e.target.dataset.hasOwnProperty('subcomponentActiveElement'); + const isActiveItemInSubComponent = Object.prototype.hasOwnProperty.call( + e.target.dataset, + 'subcomponentActiveElement' + ); // check if target is cell and if so proceed from there if ( !currentlyFocusedCell.current && diff --git a/packages/main/src/components/AnalyticalTable/hooks/usePopIn.ts b/packages/main/src/components/AnalyticalTable/hooks/usePopIn.ts index 85ea39b83c0..9f776c03b69 100644 --- a/packages/main/src/components/AnalyticalTable/hooks/usePopIn.ts +++ b/packages/main/src/components/AnalyticalTable/hooks/usePopIn.ts @@ -21,7 +21,7 @@ const popInVisibleColumns = (cols, { instance }: { instance: TableInstance }) => return cols.filter( (col) => !popInColumns.some((item) => item.id === (col.id ?? col.accessor)) && - (col.hasOwnProperty('responsiveMinWidth') + (Object.prototype.hasOwnProperty.call(col, 'responsiveMinWidth') ? !tableClientWidth || tableClientWidth >= col.responsiveMinWidth : true) ); diff --git a/packages/main/src/components/MessageView/index.tsx b/packages/main/src/components/MessageView/index.tsx index 300b8080921..5ccf657ed57 100644 --- a/packages/main/src/components/MessageView/index.tsx +++ b/packages/main/src/components/MessageView/index.tsx @@ -66,7 +66,7 @@ export const resolveMessageTypes = (children: ReactElement .reduce( (acc, type) => { const finalType = type === ValueState.None ? ValueState.Information : type; - if (acc.hasOwnProperty(finalType)) { + if (Object.prototype.hasOwnProperty.call(acc, finalType)) { acc[finalType]++; } return acc; @@ -83,7 +83,7 @@ export const resolveMessageTypes = (children: ReactElement export const resolveMessageGroups = (children: ReactElement[]) => { const groups = (children ?? []).reduce((acc, val) => { const groupName = val?.props?.groupName ?? ''; - if (acc.hasOwnProperty(groupName)) { + if (Object.prototype.hasOwnProperty.call(acc, groupName)) { acc[groupName].push(val); } else { acc[groupName] = [val]; diff --git a/packages/main/src/components/ObjectPage/index.tsx b/packages/main/src/components/ObjectPage/index.tsx index c9c5e5f5a6d..96cf11a4a5d 100644 --- a/packages/main/src/components/ObjectPage/index.tsx +++ b/packages/main/src/components/ObjectPage/index.tsx @@ -676,7 +676,9 @@ const ObjectPage = forwardRef((props, ref const selectedTabDataset = event.detail.tab.dataset; const sectionIndex = parseInt(selectedTabDataset.index, 10); const sectionId = selectedTabDataset.parentId ?? selectedTabDataset.sectionId; - const subSectionId = selectedTabDataset.hasOwnProperty('isSubTab') ? selectedTabDataset.sectionId : undefined; + const subSectionId = Object.prototype.hasOwnProperty.call(selectedTabDataset, 'isSubTab') + ? selectedTabDataset.sectionId + : undefined; onBeforeNavigate( enrichEventWithDetails(event, { sectionIndex, diff --git a/packages/main/src/components/SplitterLayout/useConcatSplitterElements.tsx b/packages/main/src/components/SplitterLayout/useConcatSplitterElements.tsx index c818d92c7e0..29628b69e69 100644 --- a/packages/main/src/components/SplitterLayout/useConcatSplitterElements.tsx +++ b/packages/main/src/components/SplitterLayout/useConcatSplitterElements.tsx @@ -25,7 +25,7 @@ export const useConcatSplitterElements = (concatSplitterElements: ConcatSplitter childrenArray.forEach((child, index) => { const splitterElementChild = childrenArray[index + splitterCount]; - const splitterElementChildMinSize = splitterElementChild.props.hasOwnProperty('minSize') + const splitterElementChildMinSize = Object.prototype.hasOwnProperty.call(splitterElementChild.props, 'minSize') ? splitterElementChild.props.minSize : 0; if ( diff --git a/packages/main/src/components/VariantManagement/ManageViewsDialog.tsx b/packages/main/src/components/VariantManagement/ManageViewsDialog.tsx index 02393fa091b..f6dd74af522 100644 --- a/packages/main/src/components/VariantManagement/ManageViewsDialog.tsx +++ b/packages/main/src/components/VariantManagement/ManageViewsDialog.tsx @@ -161,7 +161,7 @@ export const ManageViewsDialog = (props: ManageViewsDialogPropTypes) => { prev .filter((item) => item.children !== e.target.dataset.children) .map((item) => { - if (changedTableRows.current.hasOwnProperty(item.children)) { + if (Object.prototype.hasOwnProperty.call(changedTableRows.current, item.children)) { return { ...item, ...changedTableRows.current[item.children] }; } return item; diff --git a/packages/main/src/components/VariantManagement/ManageViewsTableRows.tsx b/packages/main/src/components/VariantManagement/ManageViewsTableRows.tsx index 5f263295a1f..f048c6ac352 100644 --- a/packages/main/src/components/VariantManagement/ManageViewsTableRows.tsx +++ b/packages/main/src/components/VariantManagement/ManageViewsTableRows.tsx @@ -113,7 +113,7 @@ export const ManageViewsTableRows = (props: ManageViewsTableRowsProps) => { setVariantNameInvalid(false); setInvalidVariants((prev) => { const invalidRows = { ...prev }; - if (prev.hasOwnProperty(children)) { + if (Object.prototype.hasOwnProperty.call(prev, children)) { delete invalidRows[children]; } return invalidRows; diff --git a/packages/main/src/components/VariantManagement/index.tsx b/packages/main/src/components/VariantManagement/index.tsx index dce2579343b..250b1356b89 100644 --- a/packages/main/src/components/VariantManagement/index.tsx +++ b/packages/main/src/components/VariantManagement/index.tsx @@ -318,7 +318,7 @@ const VariantManagement = forwardRef }, [safeChildrenWithFavorites]); // todo: this applies if `readOnly` is set to `false` as well since the value is read via data-attribute and is therefore a string not a boolean - const showSaveBtn = dirtyState && !selectedVariant?.hasOwnProperty('readOnly'); + const showSaveBtn = dirtyState && !Object.prototype.hasOwnProperty.call(selectedVariant, 'readOnly'); return (
diff --git a/packages/main/src/internal/withWebComponent.cy.tsx b/packages/main/src/internal/withWebComponent.cy.tsx index e392bf01b4a..4a7f0fbcf80 100644 --- a/packages/main/src/internal/withWebComponent.cy.tsx +++ b/packages/main/src/internal/withWebComponent.cy.tsx @@ -90,12 +90,15 @@ describe('withWebComponent', () => { <> {true} not mounted + {/* eslint-disable-next-line no-constant-binary-expression */} {false && not mounted} mounted <> + {/* eslint-disable-next-line no-constant-binary-expression */} {false && not mounted} mounted <> + {/* eslint-disable-next-line no-constant-binary-expression */} {false && not mounted} mounted <> @@ -106,6 +109,7 @@ describe('withWebComponent', () => { <> mounted + {/* eslint-disable-next-line no-constant-binary-expression */} <>{false && not mounted} <> mounted diff --git a/packages/main/src/internal/withWebComponent.tsx b/packages/main/src/internal/withWebComponent.tsx index cafaf767fac..f622b53128b 100644 --- a/packages/main/src/internal/withWebComponent.tsx +++ b/packages/main/src/internal/withWebComponent.tsx @@ -48,7 +48,7 @@ export const withWebComponent = , RefType = Ui // regular props (no booleans, no slots and no events) const regularProps = regularProperties.reduce((acc, name) => { - if (rest.hasOwnProperty(name) && isPrimitiveAttribute(rest[name])) { + if (Object.prototype.hasOwnProperty.call(rest, name) && isPrimitiveAttribute(rest[name])) { return { ...acc, [camelToKebabCase(name)]: rest[name] }; } return acc; diff --git a/yarn.lock b/yarn.lock index e5a88cdd30e..e2d9abe0a96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3162,13 +3162,38 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1": version: 4.6.2 resolution: "@eslint-community/regexpp@npm:4.6.2" checksum: 10c0/da800788298f8419f4c4e04eaa4e3c97e7f57537e822e7b150de662e420e3d437816b863e490807bd0b00e715b0989f9d8864bf54357cbcfa84e4255b910789d languageName: node linkType: hard +"@eslint/config-array@npm:^0.18.0": + version: 0.18.0 + resolution: "@eslint/config-array@npm:0.18.0" + dependencies: + "@eslint/object-schema": "npm:^2.1.4" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/0234aeb3e6b052ad2402a647d0b4f8a6aa71524bafe1adad0b8db1dfe94d7f5f26d67c80f79bb37ac61361a1d4b14bb8fb475efe501de37263cf55eabb79868f + languageName: node + linkType: hard + +"@eslint/core@npm:^0.6.0": + version: 0.6.0 + resolution: "@eslint/core@npm:0.6.0" + checksum: 10c0/fffdb3046ad6420f8cb9204b6466fdd8632a9baeebdaf2a97d458a4eac0e16653ba50d82d61835d7d771f6ced0ec942ec482b2fbccc300e45f2cbf784537f240 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -3186,27 +3211,43 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@eslint/eslintrc@npm:^3.1.0": + version: 3.1.0 + resolution: "@eslint/eslintrc@npm:3.1.0" dependencies: ajv: "npm:^6.12.4" debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" ignore: "npm:^5.2.0" import-fresh: "npm:^3.2.1" js-yaml: "npm:^4.1.0" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + checksum: 10c0/5b7332ed781edcfc98caa8dedbbb843abfb9bda2e86538529c843473f580e40c69eb894410eddc6702f487e9ee8f8cfa8df83213d43a8fdb549f23ce06699167 languageName: node linkType: hard -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 +"@eslint/js@npm:9.11.1, @eslint/js@npm:^9.11.1": + version: 9.11.1 + resolution: "@eslint/js@npm:9.11.1" + checksum: 10c0/22916ef7b09c6f60c62635d897c66e1e3e38d90b5a5cf5e62769033472ecbcfb6ec7c886090a4b32fe65d6ce371da54384e46c26a899e38184dfc152c6152f7b + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 10c0/e9885532ea70e483fb007bf1275968b05bb15ebaa506d98560c41a41220d33d342e19023d5f2939fed6eb59676c1bda5c847c284b4b55fce521d282004da4dda + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.0": + version: 0.2.0 + resolution: "@eslint/plugin-kit@npm:0.2.0" + dependencies: + levn: "npm:^0.4.1" + checksum: 10c0/00b92bc52ad09b0e2bbbb30591c02a895f0bec3376759562590e8a57a13d096b22f8c8773b6bf791a7cf2ea614123b3d592fd006c51ac5fd0edbb90ea6d8760c languageName: node linkType: hard @@ -3224,17 +3265,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -3260,10 +3290,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.0 + resolution: "@humanwhocodes/retry@npm:0.3.0" + checksum: 10c0/7111ec4e098b1a428459b4e3be5a5d2a13b02905f805a2468f4fa628d072f0de2da26a27d04f65ea2846f73ba51f4204661709f05bfccff645e3cedef8781bb6 languageName: node linkType: hard @@ -5253,6 +5283,32 @@ __metadata: languageName: node linkType: hard +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/eslint__js@npm:^8.42.3": + version: 8.42.3 + resolution: "@types/eslint__js@npm:8.42.3" + dependencies: + "@types/eslint": "npm:*" + checksum: 10c0/ccc5180b92155929a089ffb03ed62625216dcd5e46dd3197c6f82370ce8b52c7cb9df66c06b0a3017995409e023bc9eafe5a3f009e391960eacefaa1b62d9a56 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + "@types/estree@npm:1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" @@ -5405,6 +5461,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.12": version: 7.0.12 resolution: "@types/json-schema@npm:7.0.12" @@ -5412,13 +5475,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.9": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 10c0/bd1f9a7b898ff15c4bb494eb19124f2d688b804c39f07cbf135ac73f35324970e9e8329b72aae1fb543d925ea295a1568b23056c26658cecec4741fa28c3b81a - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -5659,13 +5715,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12": - version: 7.3.13 - resolution: "@types/semver@npm:7.3.13" - checksum: 10c0/73295bb1fee46f8c76c7a759feeae5a3022f5bedfdc17d16982092e4b33af17560234fb94861560c20992a702a1e1b9a173bb623a96f95f80892105f5e7d25e3 - languageName: node - linkType: hard - "@types/semver@npm:^7.5.0": version: 7.5.0 resolution: "@types/semver@npm:7.5.0" @@ -5803,7 +5852,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8": +"@typescript-eslint/eslint-plugin@npm:8.8.0": version: 8.8.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.8.0" dependencies: @@ -5851,7 +5900,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8": +"@typescript-eslint/parser@npm:8.8.0": version: 8.8.0 resolution: "@typescript-eslint/parser@npm:8.8.0" dependencies: @@ -5887,16 +5936,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" - checksum: 10c0/861253235576c1c5c1772d23cdce1418c2da2618a479a7de4f6114a12a7ca853011a1e530525d0931c355a8fd237b9cd828fac560f85f9623e24054fd024726f - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/scope-manager@npm:6.21.0" @@ -5907,6 +5946,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.8.0": version: 8.8.0 resolution: "@typescript-eslint/scope-manager@npm:8.8.0" @@ -5949,13 +5998,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 10c0/7febd3a7f0701c0b927e094f02e82d8ee2cada2b186fcb938bc2b94ff6fbad88237afc304cbaf33e82797078bbbb1baf91475f6400912f8b64c89be79bfa4ddf - languageName: node - linkType: hard - "@typescript-eslint/types@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/types@npm:6.21.0" @@ -5963,6 +6005,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.8.0": version: 8.8.0 resolution: "@typescript-eslint/types@npm:8.8.0" @@ -5970,40 +6019,41 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" dependencies: - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/visitor-keys": "npm:5.62.0" + "@typescript-eslint/types": "npm:6.21.0" + "@typescript-eslint/visitor-keys": "npm:6.21.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - semver: "npm:^7.3.7" - tsutils: "npm:^3.21.0" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/d7984a3e9d56897b2481940ec803cb8e7ead03df8d9cfd9797350be82ff765dfcf3cfec04e7355e1779e948da8f02bc5e11719d07a596eb1cb995c48a95e38cf + checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 languageName: node linkType: hard @@ -6057,31 +6107,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" +"@typescript-eslint/utils@npm:^7.15.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@types/json-schema": "npm:^7.0.9" - "@types/semver": "npm:^7.3.12" - "@typescript-eslint/scope-manager": "npm:5.62.0" - "@typescript-eslint/types": "npm:5.62.0" - "@typescript-eslint/typescript-estree": "npm:5.62.0" - eslint-scope: "npm:^5.1.1" - semver: "npm:^7.3.7" + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/f09b7d9952e4a205eb1ced31d7684dd55cee40bf8c2d78e923aa8a255318d97279825733902742c09d8690f37a50243f4c4d383ab16bd7aefaf9c4b438f785e1 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": "npm:5.62.0" - eslint-visitor-keys: "npm:^3.3.0" - checksum: 10c0/7c3b8e4148e9b94d9b7162a596a1260d7a3efc4e65199693b8025c71c4652b8042501c0bc9f57654c1e2943c26da98c0f77884a746c6ae81389fcb0b513d995d + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e languageName: node linkType: hard @@ -6095,6 +6131,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.8.0": version: 8.8.0 resolution: "@typescript-eslint/visitor-keys@npm:8.8.0" @@ -6199,8 +6245,6 @@ __metadata: optional: true "@ui5/webcomponents-base": optional: true - bin: - ui5wcr-codemod: ./bin/codemod.js languageName: unknown linkType: soft @@ -6371,7 +6415,7 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": +"@ungap/structured-clone@npm:^1.0.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d @@ -6736,6 +6780,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.12.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 + languageName: node + linkType: hard + "acorn@npm:^8.9.0": version: 8.9.0 resolution: "acorn@npm:8.9.0" @@ -10697,7 +10750,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^9.0.0": +"eslint-config-prettier@npm:^9.1.0": version: 9.1.0 resolution: "eslint-config-prettier@npm:9.1.0" peerDependencies: @@ -10719,7 +10772,7 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:^3.5.3": +"eslint-import-resolver-typescript@npm:^3.6.3": version: 3.6.3 resolution: "eslint-import-resolver-typescript@npm:3.6.3" dependencies: @@ -10744,6 +10797,18 @@ __metadata: languageName: node linkType: hard +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.8.1": version: 2.8.2 resolution: "eslint-module-utils@npm:2.8.2" @@ -10779,7 +10844,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.22.1, eslint-plugin-import@npm:^2.27.5": +"eslint-plugin-import@npm:^2.22.1": version: 2.30.0 resolution: "eslint-plugin-import@npm:2.30.0" dependencies: @@ -10807,23 +10872,43 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-no-only-tests@npm:^3.1.0": - version: 3.3.0 - resolution: "eslint-plugin-no-only-tests@npm:3.3.0" - checksum: 10c0/a04425d9d3bcd745267168782eb12a3a712b8357264ddd4e204204318975c2c21e2c1efe68113181de908548a85762205b61d8f92ec9dc5e0a5ae54c0240a24d +"eslint-plugin-import@npm:^2.31.0": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a languageName: node linkType: hard -"eslint-plugin-prefer-arrow@npm:^1.2.3": - version: 1.2.3 - resolution: "eslint-plugin-prefer-arrow@npm:1.2.3" - peerDependencies: - eslint: ">=2.0.0" - checksum: 10c0/9fd463ae0a8b80f216bee947783813b565d1859583e82b7f72f8853931be7cf6297209610f8e4bdc0b7e5459328b6f0030eab695964d3662ef1939eaada2e86e +"eslint-plugin-no-only-tests@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-plugin-no-only-tests@npm:3.3.0" + checksum: 10c0/a04425d9d3bcd745267168782eb12a3a712b8357264ddd4e204204318975c2c21e2c1efe68113181de908548a85762205b61d8f92ec9dc5e0a5ae54c0240a24d languageName: node linkType: hard -"eslint-plugin-prettier@npm:^5.0.0": +"eslint-plugin-prettier@npm:^5.2.1": version: 5.2.1 resolution: "eslint-plugin-prettier@npm:5.2.1" dependencies: @@ -10843,18 +10928,18 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.6.0": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:beta": + version: 5.1.0-beta-26f2496093-20240514 + resolution: "eslint-plugin-react-hooks@npm:5.1.0-beta-26f2496093-20240514" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/99d399fc985a80126378feca1c84427ae4a63a120a2097761f13b94bea3919a15ee312ee51525b7906d0aef654987e938e1f3ca0c7e2cda72ef739f9671d947d languageName: node linkType: hard -"eslint-plugin-react@npm:^7.32.2": - version: 7.37.0 - resolution: "eslint-plugin-react@npm:7.37.0" +"eslint-plugin-react@npm:^7.37.1": + version: 7.37.1 + resolution: "eslint-plugin-react@npm:7.37.1" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" @@ -10876,21 +10961,20 @@ __metadata: string.prototype.repeat: "npm:^1.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10c0/c9b02cd425c2a7c36b07fe223e405ae235500ac98f04898529cd8842c78fdd5b54f7c29189db5d6eab390ac5ac531af6e7b94a1f3fe9ad1e6564f7d78fd0eb6b + checksum: 10c0/13cf55666f16d2ca45b14aad1b0e14741d1817679c86d20aff0bc1e802439a8541f40a42c4c8e3486ffb710f1bcc2f3e56697f2b5f724306a7fca174e1ad6433 languageName: node linkType: hard -"eslint-plugin-storybook@npm:^0.9.0": - version: 0.9.0 - resolution: "eslint-plugin-storybook@npm:0.9.0" +"eslint-plugin-storybook@npm:0.10.0--canary.156.408aed4.0": + version: 0.10.0--canary.156.408aed4.0 + resolution: "eslint-plugin-storybook@npm:0.10.0--canary.156.408aed4.0" dependencies: "@storybook/csf": "npm:^0.0.1" - "@typescript-eslint/utils": "npm:^5.62.0" - requireindex: "npm:^1.2.0" + "@typescript-eslint/utils": "npm:^7.15.0" ts-dedent: "npm:^2.2.0" peerDependencies: eslint: ">=6" - checksum: 10c0/e7e0682092ef4c3035a1e679b89adb0427db386996698791de18e95ba71ba2fed4d254d6ef70c2e0375970e057fd0fa06206c81f3a0acc4455051ed74a87e816 + checksum: 10c0/48a49965083b9ef9baddacb3cc9c2c6dd0df4e40a5c5eb3b2b113656e51023c6e38729d0998f00bee6ca63fb9fd2d9da80afc7aa21629992156070c7dd000c9a languageName: node linkType: hard @@ -10904,13 +10988,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" +"eslint-scope@npm:^8.0.2": + version: 8.1.0 + resolution: "eslint-scope@npm:8.1.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + checksum: 10c0/ae1df7accae9ea90465c2ded70f7064d6d1f2962ef4cc87398855c4f0b3a5ab01063e0258d954bb94b184f6759febe04c3118195cab5c51978a7229948ba2875 languageName: node linkType: hard @@ -10958,6 +11042,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-visitor-keys@npm:4.1.0" + checksum: 10c0/5483ef114c93a136aa234140d7aa3bd259488dae866d35cb0d0b52e6a158f614760a57256ac8d549acc590a87042cb40f6951815caa821e55dc4fd6ef4c722eb + languageName: node + linkType: hard + "eslint@npm:^7.22.0": version: 7.32.0 resolution: "eslint@npm:7.32.0" @@ -11008,51 +11099,55 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.35.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" +"eslint@npm:^9.11.1": + version: 9.11.1 + resolution: "eslint@npm:9.11.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" + "@eslint-community/regexpp": "npm:^4.11.0" + "@eslint/config-array": "npm:^0.18.0" + "@eslint/core": "npm:^0.6.0" + "@eslint/eslintrc": "npm:^3.1.0" + "@eslint/js": "npm:9.11.1" + "@eslint/plugin-kit": "npm:^0.2.0" "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.3.0" "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.2" debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" + eslint-scope: "npm:^8.0.2" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.1.0" + esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" + file-entry-cache: "npm:^8.0.0" find-up: "npm:^5.0.0" glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" lodash.merge: "npm:^4.6.2" minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" strip-ansi: "npm:^6.0.1" text-table: "npm:^0.2.0" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + checksum: 10c0/fc9afc31155fef8c27fc4fd00669aeafa4b89ce5abfbf6f60e05482c03d7ff1d5e7546e416aa47bf0f28c9a56597a94663fd0264c2c42a1890f53cac49189f24 languageName: node linkType: hard @@ -11067,6 +11162,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.1.0": + version: 10.2.0 + resolution: "espree@npm:10.2.0" + dependencies: + acorn: "npm:^8.12.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.1.0" + checksum: 10c0/2b6bfb683e7e5ab2e9513949879140898d80a2d9867ea1db6ff5b0256df81722633b60a7523a7c614f05a39aeea159dd09ad2a0e90c0e218732fc016f9086215 + languageName: node + linkType: hard + "espree@npm:^7.3.0, espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" @@ -11078,28 +11184,6 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0": - version: 9.6.0 - resolution: "espree@npm:9.6.0" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/f064a43bcf7f435d34e600c056320dde1c15b3eeb5da24e7585ed6cf83adcbbeafb4fa4d062ff14281b0d246b0a9645dd9d3796a638099f19595004eee4ac8be - languageName: node - linkType: hard - -"espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -11110,7 +11194,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0, esquery@npm:^1.4.2": +"esquery@npm:^1.4.0": version: 1.4.2 resolution: "esquery@npm:1.4.2" dependencies: @@ -11119,6 +11203,15 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -11481,6 +11574,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + "filelist@npm:^1.0.1": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -11601,6 +11703,16 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" @@ -11617,6 +11729,13 @@ __metadata: languageName: node linkType: hard +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + languageName: node + linkType: hard + "follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" @@ -12331,7 +12450,16 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0, globals@npm:^13.6.0, globals@npm:^13.9.0": +"globals@npm:^13.20.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globals@npm:^13.6.0, globals@npm:^13.9.0": version: 13.20.0 resolution: "globals@npm:13.20.0" dependencies: @@ -12340,12 +12468,17 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.20.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^15.10.0": + version: 15.10.0 + resolution: "globals@npm:15.10.0" + checksum: 10c0/fef8f320e88f01f1492fef1b04b056908e1f6726eeaffe3bca03247237300c2d86e71585ee641b62ba71460a6eaff0d6ca7fca284e61bd1b3f833c7ad68b160a languageName: node linkType: hard @@ -14249,6 +14382,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -19182,13 +19324,6 @@ __metadata: languageName: node linkType: hard -"requireindex@npm:^1.2.0": - version: 1.2.0 - resolution: "requireindex@npm:1.2.0" - checksum: 10c0/7fb42aed73bf8de9acc4d6716cf07acc7fbe180e58729433bafcf702e76e7bb10e54f8266c06bfec62d752e0ac14d50e8758833de539e6f4e2cd642077866153 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -21021,7 +21156,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 @@ -21042,17 +21177,6 @@ __metadata: languageName: node linkType: hard -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: "npm:^1.8.1" - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 10c0/02f19e458ec78ead8fffbf711f834ad8ecd2cc6ade4ec0320790713dccc0a412b99e7fd907c4cda2a1dc602c75db6f12e0108e87a5afad4b2f9e90a24cabd5a2 - languageName: node - linkType: hard - "tuf-js@npm:^2.2.1": version: 2.2.1 resolution: "tuf-js@npm:2.2.1" @@ -21310,6 +21434,20 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.8.0": + version: 8.8.0 + resolution: "typescript-eslint@npm:8.8.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.8.0" + "@typescript-eslint/parser": "npm:8.8.0" + "@typescript-eslint/utils": "npm:8.8.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/545f0ce051282921aff56288baf288cffe6f7bafee5149f1b87af2c67f81f8c2088924a2e0fc0f0dcd12692b6a97eca10149a619c8c85d4aaef2fe763938da8d + languageName: node + linkType: hard + "typescript@npm:5.6.2": version: 5.6.2 resolution: "typescript@npm:5.6.2" @@ -21410,6 +21548,7 @@ __metadata: "@babel/preset-react": "npm:7.24.7" "@babel/preset-typescript": "npm:7.24.7" "@cypress/code-coverage": "npm:^3.10.0" + "@eslint/js": "npm:^9.11.1" "@semantic-release/github": "npm:^11.0.0" "@storybook/addon-a11y": "npm:8.3.4" "@storybook/addon-essentials": "npm:8.3.4" @@ -21420,13 +21559,12 @@ __metadata: "@storybook/react-vite": "npm:8.3.4" "@storybook/theming": "npm:8.3.4" "@testing-library/cypress": "npm:^10.0.0" + "@types/eslint__js": "npm:^8.42.3" "@types/jscodeshift": "npm:^0.11.11" "@types/node": "npm:^20.0.0" "@types/react": "npm:^18.3.4" "@types/react-dom": "npm:^18.3.0" "@types/use-sync-external-store": "npm:^0.0.6" - "@typescript-eslint/eslint-plugin": "npm:8" - "@typescript-eslint/parser": "npm:8" "@ui5/webcomponents": "npm:2.3.0" "@ui5/webcomponents-compat": "npm:2.3.0" "@ui5/webcomponents-fiori": "npm:2.3.0" @@ -21438,17 +21576,17 @@ __metadata: cypress: "npm:13.15.0" cypress-real-events: "npm:^1.8.1" dedent: "npm:^1.0.0" - eslint: "npm:^8.35.0" - eslint-config-prettier: "npm:^9.0.0" - eslint-import-resolver-typescript: "npm:^3.5.3" - eslint-plugin-import: "npm:^2.27.5" - eslint-plugin-no-only-tests: "npm:^3.1.0" - eslint-plugin-prefer-arrow: "npm:^1.2.3" - eslint-plugin-prettier: "npm:^5.0.0" - eslint-plugin-react: "npm:^7.32.2" - eslint-plugin-react-hooks: "npm:^4.6.0" - eslint-plugin-storybook: "npm:^0.9.0" + eslint: "npm:^9.11.1" + eslint-config-prettier: "npm:^9.1.0" + eslint-import-resolver-typescript: "npm:^3.6.3" + eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-no-only-tests: "npm:^3.3.0" + eslint-plugin-prettier: "npm:^5.2.1" + eslint-plugin-react: "npm:^7.37.1" + eslint-plugin-react-hooks: "npm:beta" + eslint-plugin-storybook: "npm:0.10.0--canary.156.408aed4.0" glob: "npm:^11.0.0" + globals: "npm:^15.10.0" husky: "npm:^9.0.6" lerna: "npm:^8.0.0" lint-staged: "npm:^15.0.0" @@ -21467,6 +21605,7 @@ __metadata: tocbot: "npm:4.30.0" typedoc: "npm:^0.26.0" typescript: "npm:5.6.2" + typescript-eslint: "npm:^8.8.0" vite: "npm:^5.0.0" vite-plugin-istanbul: "npm:^6.0.0" vite-tsconfig-paths: "npm:^5.0.0"