From a651fb13489e3f9958b5d3917e8df97bf3d16481 Mon Sep 17 00:00:00 2001 From: Tom Ratcliffe Date: Tue, 21 Oct 2025 12:55:57 +0100 Subject: [PATCH] Chore: Add 'import/no-extraneous-dependencies' rule for packages (#111931) --- eslint.config.js | 3 +- package.json | 3 - packages/grafana-data/package.json | 2 + .../panel/getPanelOptionsWithDefaults.test.ts | 19 ++-- .../src/utils/throwIfAngular.test.ts | 3 +- packages/grafana-plugin-configs/package.json | 3 + packages/grafana-prometheus/package.json | 1 + packages/grafana-schema/package.json | 1 + packages/grafana-test-utils/package.json | 8 +- packages/rollup.config.parts.ts | 1 + yarn.lock | 88 +++++++++++++------ 11 files changed, 87 insertions(+), 45 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index d85694070b3..f01463559aa 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -275,10 +275,11 @@ module.exports = [ { // No NPM package should import from @grafana/*/internal because it does not exist // outside of this repo - they're not published to NPM. - name: 'grafana/packages-overrides', + name: 'grafana/packages', files: ['packages/**/*.{ts,tsx}'], ignores: [], rules: { + 'import/no-extraneous-dependencies': ['error', { includeInternal: true }], 'no-restricted-imports': [ 'error', withBaseRestrictedImportsConfig({ diff --git a/package.json b/package.json index 5e9240b2018..d045ebb590a 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,6 @@ "@types/slate-react": "0.22.9", "@types/swagger-ui-react": "5.18.0", "@types/systemjs": "6.15.3", - "@types/tinycolor2": "1.4.6", "@types/uuid": "10.0.0", "@types/webpack-assets-manifest": "^5", "@types/webpack-env": "^1.18.4", @@ -251,7 +250,6 @@ "style-loader": "4.0.0", "stylelint": "16.23.0", "stylelint-config-sass-guidelines": "12.1.0", - "terser-webpack-plugin": "5.3.14", "testing-library-selector": "0.3.1", "tracelib": "1.0.1", "ts-jest": "29.4.0", @@ -430,7 +428,6 @@ "swagger-ui-react": "5.28.1", "symbol-observable": "4.0.0", "systemjs": "6.15.1", - "tinycolor2": "1.6.0", "tslib": "2.8.1", "tween-functions": "^1.2.0", "type-fest": "^4.18.2", diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index 6180fdf1417..950d5122932 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -84,7 +84,9 @@ "xss": "^1.0.14" }, "devDependencies": { + "@grafana/scenes": "6.38.0", "@rollup/plugin-node-resolve": "16.0.1", + "@testing-library/react": "16.3.0", "@types/history": "4.7.11", "@types/lodash": "4.17.20", "@types/node": "22.17.0", diff --git a/packages/grafana-data/src/panel/getPanelOptionsWithDefaults.test.ts b/packages/grafana-data/src/panel/getPanelOptionsWithDefaults.test.ts index f155696053d..7c182b53837 100644 --- a/packages/grafana-data/src/panel/getPanelOptionsWithDefaults.test.ts +++ b/packages/grafana-data/src/panel/getPanelOptionsWithDefaults.test.ts @@ -1,18 +1,11 @@ -import { - ConfigOverrideRule, - FieldColorModeId, - FieldConfig, - FieldConfigProperty, - FieldConfigSource, - PanelPlugin, - standardEditorsRegistry, - standardFieldConfigEditorRegistry, - StandardOptionConfig, - ThresholdsMode, -} from '@grafana/data'; - import { getPanelPlugin, mockStandardFieldConfigOptions } from '../../test'; +import { standardEditorsRegistry, standardFieldConfigEditorRegistry } from '../field/standardFieldConfigEditorRegistry'; +import { FieldConfig } from '../types/dataFrame'; +import { FieldColorModeId } from '../types/fieldColor'; +import { ConfigOverrideRule, FieldConfigProperty, FieldConfigSource } from '../types/fieldOverrides'; +import { ThresholdsMode } from '../types/thresholds'; +import { PanelPlugin, StandardOptionConfig } from './PanelPlugin'; import { getPanelOptionsWithDefaults, restoreCustomOverrideRules } from './getPanelOptionsWithDefaults'; standardFieldConfigEditorRegistry.setInit(() => mockStandardFieldConfigOptions()); diff --git a/packages/grafana-data/src/utils/throwIfAngular.test.ts b/packages/grafana-data/src/utils/throwIfAngular.test.ts index 6e3bf3c0f83..8cdbae71cd9 100644 --- a/packages/grafana-data/src/utils/throwIfAngular.test.ts +++ b/packages/grafana-data/src/utils/throwIfAngular.test.ts @@ -1,4 +1,5 @@ -import { PanelPlugin, PluginMeta, PluginType } from '@grafana/data'; +import { PanelPlugin } from '../panel/PanelPlugin'; +import { PluginMeta, PluginType } from '../types/plugin'; import { throwIfAngular } from './throwIfAngular'; diff --git a/packages/grafana-plugin-configs/package.json b/packages/grafana-plugin-configs/package.json index 7c4b0d8b191..d18f5f00a96 100644 --- a/packages/grafana-plugin-configs/package.json +++ b/packages/grafana-plugin-configs/package.json @@ -4,6 +4,8 @@ "private": true, "version": "12.3.0-pre", "dependencies": { + "react": "18.3.1", + "terser-webpack-plugin": "5.3.14", "tslib": "2.8.1" }, "type": "module", @@ -13,6 +15,7 @@ "@swc/helpers": "^0.5.0", "@swc/jest": "^0.2.26", "@types/eslint": "9.6.1", + "@types/react": "18.3.18", "@types/webpack-bundle-analyzer": "^4.7.0", "copy-webpack-plugin": "13.0.0", "eslint": "9.32.0", diff --git a/packages/grafana-prometheus/package.json b/packages/grafana-prometheus/package.json index e45930fd07d..772df81b58f 100644 --- a/packages/grafana-prometheus/package.json +++ b/packages/grafana-prometheus/package.json @@ -67,6 +67,7 @@ "lodash": "4.17.21", "moment": "2.30.1", "moment-timezone": "0.5.47", + "monaco-editor": "0.34.1", "monaco-promql": "1.8.0", "pluralize": "8.0.0", "prismjs": "1.30.0", diff --git a/packages/grafana-schema/package.json b/packages/grafana-schema/package.json index 773a4a663d2..feff0eb8ba3 100644 --- a/packages/grafana-schema/package.json +++ b/packages/grafana-schema/package.json @@ -41,6 +41,7 @@ "glob": "^11.0.0", "rimraf": "6.0.1", "rollup": "^4.22.4", + "rollup-plugin-copy": "3.5.0", "rollup-plugin-esbuild": "6.2.1", "rollup-plugin-node-externals": "^8.0.0", "typescript": "5.9.2" diff --git a/packages/grafana-test-utils/package.json b/packages/grafana-test-utils/package.json index 60e375d77cb..70bf836f843 100644 --- a/packages/grafana-test-utils/package.json +++ b/packages/grafana-test-utils/package.json @@ -53,12 +53,18 @@ "test:ci": "jest --maxWorkers 4" }, "dependencies": { - "msw": "2.10.4" + "chance": "^1.1.13", + "jest-matcher-utils": "29.7.0", + "lodash": "4.17.21", + "msw": "2.10.4", + "rxjs": "7.8.2" }, "devDependencies": { "@swc/core": "1.13.3", "@swc/jest": "^0.2.26", + "@types/chance": "^1.1.7", "@types/jest": "29.5.14", + "@types/lodash": "4.17.20", "@types/node": "22.17.0", "jest": "29.7.0", "typescript": "5.9.2" diff --git a/packages/rollup.config.parts.ts b/packages/rollup.config.parts.ts index 1323a52539a..31116f56bdb 100644 --- a/packages/rollup.config.parts.ts +++ b/packages/rollup.config.parts.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ // This file contains the common parts of the rollup configuration that are shared across multiple packages. import nodeResolve from '@rollup/plugin-node-resolve'; import { dirname, resolve } from 'node:path'; diff --git a/yarn.lock b/yarn.lock index 658de69ad35..0a15a639521 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2324,15 +2324,15 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.3.6": - version: 2.3.6 - resolution: "@formatjs/ecma402-abstract@npm:2.3.6" +"@formatjs/ecma402-abstract@npm:2.3.4": + version: 2.3.4 + resolution: "@formatjs/ecma402-abstract@npm:2.3.4" dependencies: "@formatjs/fast-memoize": "npm:2.2.7" - "@formatjs/intl-localematcher": "npm:0.6.2" + "@formatjs/intl-localematcher": "npm:0.6.1" decimal.js: "npm:^10.4.3" tslib: "npm:^2.8.0" - checksum: 10/30b1b5cd6b62ba46245f934429936592df5500bc1b089dc92dd49c826757b873dd92c305dcfe370701e4df6b057bf007782113abb9b65db550d73be4961718bc + checksum: 10/573971ffc291096a4b9fcc80b4708124e89bf2e3ac50e0f78b41eb797e9aa1b842f4dc3665e4467a853c738386821769d9e40408a1d25bc73323a1f057a16cf2 languageName: node linkType: hard @@ -2376,13 +2376,13 @@ __metadata: linkType: hard "@formatjs/intl-durationformat@npm:^0.7.0": - version: 0.7.6 - resolution: "@formatjs/intl-durationformat@npm:0.7.6" + version: 0.7.4 + resolution: "@formatjs/intl-durationformat@npm:0.7.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.6" - "@formatjs/intl-localematcher": "npm:0.6.2" + "@formatjs/ecma402-abstract": "npm:2.3.4" + "@formatjs/intl-localematcher": "npm:0.6.1" tslib: "npm:^2.8.0" - checksum: 10/442236ba85bcd9cb7296c43a708271fa09f110b1ca9d5899066d00812fc2965eaeaec6b5240be421b80daba62860352131088449ba0fcd2061f671cec6240f0b + checksum: 10/d62273ecd635475ca91e9b501301f3f396403fa91b584c550734b19b2d194ba1316b27303fed985c1d42ae933d54eb220da6540edfdf376b0d9371ecfd0d4e15 languageName: node linkType: hard @@ -2395,12 +2395,12 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.6.2": - version: 0.6.2 - resolution: "@formatjs/intl-localematcher@npm:0.6.2" +"@formatjs/intl-localematcher@npm:0.6.1": + version: 0.6.1 + resolution: "@formatjs/intl-localematcher@npm:0.6.1" dependencies: tslib: "npm:^2.8.0" - checksum: 10/eb12a7f5367bbecdfafc20d7f005559ce840f420e970f425c5213d35e94e86dfe75bde03464971a26494bf8427d4961269db22ecad2834f2a19d888b5d9cc064 + checksum: 10/c7b3bc8395d18670677f207b2fd107561fff5d6394a9b4273c29e0bea920300ec3a2eefead600ebb7761c04a770cada28f78ac059f84d00520bfb57a9db36998 languageName: node linkType: hard @@ -3050,9 +3050,11 @@ __metadata: dependencies: "@braintree/sanitize-url": "npm:7.0.1" "@grafana/i18n": "npm:12.3.0-pre" + "@grafana/scenes": "npm:6.38.0" "@grafana/schema": "npm:12.3.0-pre" "@leeoniya/ufuzzy": "npm:1.0.19" "@rollup/plugin-node-resolve": "npm:16.0.1" + "@testing-library/react": "npm:16.3.0" "@types/d3-interpolate": "npm:^3.0.0" "@types/history": "npm:4.7.11" "@types/lodash": "npm:4.17.20" @@ -3356,6 +3358,7 @@ __metadata: "@swc/helpers": "npm:^0.5.0" "@swc/jest": "npm:^0.2.26" "@types/eslint": "npm:9.6.1" + "@types/react": "npm:18.3.18" "@types/webpack-bundle-analyzer": "npm:^4.7.0" copy-webpack-plugin: "npm:13.0.0" eslint: "npm:9.32.0" @@ -3366,8 +3369,10 @@ __metadata: imports-loader: "npm:^5.0.0" jest-canvas-mock: "npm:2.5.2" jest-environment-jsdom: "npm:29.7.0" + react: "npm:18.3.1" replace-in-file-webpack-plugin: "npm:1.0.6" swc-loader: "npm:0.2.6" + terser-webpack-plugin: "npm:5.3.14" tslib: "npm:2.8.1" typescript: "npm:5.9.2" webpack: "npm:5.101.0" @@ -3465,6 +3470,7 @@ __metadata: lodash: "npm:4.17.21" moment: "npm:2.30.1" moment-timezone: "npm:0.5.47" + monaco-editor: "npm:0.34.1" monaco-promql: "npm:1.8.0" pluralize: "npm:8.0.0" prismjs: "npm:1.30.0" @@ -3553,6 +3559,32 @@ __metadata: languageName: node linkType: hard +"@grafana/scenes@npm:6.38.0": + version: 6.38.0 + resolution: "@grafana/scenes@npm:6.38.0" + dependencies: + "@floating-ui/react": "npm:^0.26.16" + "@leeoniya/ufuzzy": "npm:^1.0.16" + "@tanstack/react-virtual": "npm:^3.9.0" + i18next-parser: "npm:9.3.0" + react-grid-layout: "npm:1.3.4" + react-use: "npm:17.5.0" + react-virtualized-auto-sizer: "npm:1.0.24" + uuid: "npm:^9.0.0" + peerDependencies: + "@grafana/data": ">=10.4" + "@grafana/e2e-selectors": ">=10.4" + "@grafana/i18n": "*" + "@grafana/runtime": ">=10.4" + "@grafana/schema": ">=10.4" + "@grafana/ui": ">=10.4" + react: ^18.0.0 + react-dom: ^18.0.0 + react-router-dom: ^6.28.0 + checksum: 10/9372896e76271becb80e4a8691d8c51bc3b54b54d98c82f2953134f407a7370dc66a3e8afaa508003147e2f1b5b08d0ddbb6b1616a3a3ab3f7ad69fb941dd998 + languageName: node + linkType: hard + "@grafana/scenes@npm:6.39.8, @grafana/scenes@npm:^6.39.8": version: 6.39.8 resolution: "@grafana/scenes@npm:6.39.8" @@ -3588,6 +3620,7 @@ __metadata: glob: "npm:^11.0.0" rimraf: "npm:6.0.1" rollup: "npm:^4.22.4" + rollup-plugin-copy: "npm:3.5.0" rollup-plugin-esbuild: "npm:6.2.1" rollup-plugin-node-externals: "npm:^8.0.0" tslib: "npm:2.8.1" @@ -3646,10 +3679,16 @@ __metadata: dependencies: "@swc/core": "npm:1.13.3" "@swc/jest": "npm:^0.2.26" + "@types/chance": "npm:^1.1.7" "@types/jest": "npm:29.5.14" + "@types/lodash": "npm:4.17.20" "@types/node": "npm:22.17.0" + chance: "npm:^1.1.13" jest: "npm:29.7.0" + jest-matcher-utils: "npm:29.7.0" + lodash: "npm:4.17.21" msw: "npm:2.10.4" + rxjs: "npm:7.8.2" typescript: "npm:5.9.2" languageName: unknown linkType: soft @@ -5765,9 +5804,9 @@ __metadata: linkType: hard "@openfeature/core@npm:^1.9.0": - version: 1.9.1 - resolution: "@openfeature/core@npm:1.9.1" - checksum: 10/6099e16b1b4cd6e3c45c05ab4acd44c9cb4ab501b676ab6f3e77f0be1b56abc7506c5629187381333a02975d315d831e0905582435b356d9676255e72a465899 + version: 1.9.0 + resolution: "@openfeature/core@npm:1.9.0" + checksum: 10/c6d20edc09053afd99752fe46d8328158680950bca4b86679f67f79249d7226eea127b31fffdc38e26ecb729f2bab5a4a5a7c1db708ae76b7fbbac68cd56f094 languageName: node linkType: hard @@ -5792,11 +5831,11 @@ __metadata: linkType: hard "@openfeature/web-sdk@npm:^1.6.1": - version: 1.6.2 - resolution: "@openfeature/web-sdk@npm:1.6.2" + version: 1.6.1 + resolution: "@openfeature/web-sdk@npm:1.6.1" peerDependencies: "@openfeature/core": ^1.9.0 - checksum: 10/0fcc0ef76ff51d4725a00ff07755b21941b647f775d1ff04fc3d973143e78c909ccba485f582fcbc7f6201f42c795c85bcb103c43d64924fedf13ea517f625ac + checksum: 10/8bd7d1ea386e21cdd7492cab2fd1d2b138b4e6a376a4c0a40244633e5955f6452039bc2633fc5230bd7b494506a4137ba7210d40850634f9618f77a0ee435f9d languageName: node linkType: hard @@ -18400,7 +18439,6 @@ __metadata: "@types/slate-react": "npm:0.22.9" "@types/swagger-ui-react": "npm:5.18.0" "@types/systemjs": "npm:6.15.3" - "@types/tinycolor2": "npm:1.4.6" "@types/uuid": "npm:10.0.0" "@types/webpack-assets-manifest": "npm:^5" "@types/webpack-env": "npm:^1.18.4" @@ -18595,9 +18633,7 @@ __metadata: swagger-ui-react: "npm:5.28.1" symbol-observable: "npm:4.0.0" systemjs: "npm:6.15.1" - terser-webpack-plugin: "npm:5.3.14" testing-library-selector: "npm:0.3.1" - tinycolor2: "npm:1.6.0" tracelib: "npm:1.0.1" ts-jest: "npm:29.4.0" ts-node: "npm:10.9.2" @@ -23580,11 +23616,11 @@ __metadata: linkType: hard "nanoid@npm:^5.0.9": - version: 5.1.6 - resolution: "nanoid@npm:5.1.6" + version: 5.1.5 + resolution: "nanoid@npm:5.1.5" bin: nanoid: bin/nanoid.js - checksum: 10/4109dbcf596d7f297a9b42f459b8f01694a03ebbdd2f41408d963ad54e5ec7234cbe7b4acad137751f31add11bb4fb3415a3e688082516745812811f05570014 + checksum: 10/6de2d006b51c983be385ef7ee285f7f2a57bd96f8c0ca881c4111461644bd81fafc2544f8e07cb834ca0f3e0f3f676c1fe78052183f008b0809efe6e273119f5 languageName: node linkType: hard