diff --git a/eslint-suppressions.json b/eslint-suppressions.json index a5155bbdd95..7464e82bb3e 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -24,11 +24,6 @@ "count": 1 } }, - "packages/grafana-data/src/dataframe/ArrayDataFrame.ts": { - "@typescript-eslint/no-explicit-any": { - "count": 1 - } - }, "packages/grafana-data/src/dataframe/CircularDataFrame.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 @@ -36,7 +31,7 @@ }, "packages/grafana-data/src/dataframe/DataFrameView.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 2 + "count": 1 }, "@typescript-eslint/no-explicit-any": { "count": 2 @@ -44,28 +39,23 @@ }, "packages/grafana-data/src/dataframe/MutableDataFrame.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 3 + "count": 1 }, "@typescript-eslint/no-explicit-any": { - "count": 9 + "count": 6 } }, "packages/grafana-data/src/dataframe/StreamingDataFrame.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 4 - } - }, - "packages/grafana-data/src/dataframe/processDataFrame.test.ts": { - "@typescript-eslint/no-explicit-any": { - "count": 1 + "count": 3 } }, "packages/grafana-data/src/dataframe/processDataFrame.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 15 + "count": 11 }, "@typescript-eslint/no-explicit-any": { - "count": 5 + "count": 4 } }, "packages/grafana-data/src/datetime/moment_wrapper.ts": { @@ -106,7 +96,7 @@ "count": 1 }, "@typescript-eslint/no-explicit-any": { - "count": 5 + "count": 4 } }, "packages/grafana-data/src/panel/registryFactories.ts": { @@ -305,7 +295,7 @@ }, "packages/grafana-data/src/utils/csv.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 3 + "count": 2 }, "@typescript-eslint/no-explicit-any": { "count": 2 @@ -347,11 +337,6 @@ "count": 3 } }, - "packages/grafana-data/src/vector/CircularVector.ts": { - "@typescript-eslint/no-explicit-any": { - "count": 1 - } - }, "packages/grafana-data/src/vector/FunctionalVector.ts": { "@typescript-eslint/no-explicit-any": { "count": 9 @@ -769,7 +754,7 @@ }, "packages/grafana-ui/src/components/Modal/ModalsContext.tsx": { "@typescript-eslint/no-explicit-any": { - "count": 4 + "count": 2 }, "react-prefer-function-component/react-prefer-function-component": { "count": 1 @@ -847,7 +832,7 @@ }, "packages/grafana-ui/src/components/Select/SelectBase.tsx": { "@typescript-eslint/consistent-type-assertions": { - "count": 2 + "count": 1 }, "@typescript-eslint/no-explicit-any": { "count": 4 @@ -860,7 +845,7 @@ }, "packages/grafana-ui/src/components/Select/resetSelectStyles.ts": { "@typescript-eslint/no-explicit-any": { - "count": 4 + "count": 1 } }, "packages/grafana-ui/src/components/Select/types.ts": { @@ -875,7 +860,7 @@ }, "packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts": { "@typescript-eslint/consistent-type-assertions": { - "count": 3 + "count": 2 }, "@typescript-eslint/no-explicit-any": { "count": 13 @@ -4751,7 +4736,7 @@ }, "public/app/plugins/panel/live/LiveChannelEditor.tsx": { "@typescript-eslint/consistent-type-assertions": { - "count": 2 + "count": 1 }, "@typescript-eslint/no-explicit-any": { "count": 1 diff --git a/packages/grafana-data/src/dataframe/ArrayDataFrame.ts b/packages/grafana-data/src/dataframe/ArrayDataFrame.ts index 8817812b5bd..fdcfed8c039 100644 --- a/packages/grafana-data/src/dataframe/ArrayDataFrame.ts +++ b/packages/grafana-data/src/dataframe/ArrayDataFrame.ts @@ -8,14 +8,14 @@ import { guessFieldTypeForField } from './processDataFrame'; * * @deprecated use arrayToDataFrame */ -export class ArrayDataFrame implements DataFrame { +export class ArrayDataFrame implements DataFrame { fields: Field[] = []; length = 0; name?: string; refId?: string; meta?: QueryResultMeta; - constructor(source: T[], names?: string[]) { + constructor(source: unknown[], names?: string[]) { return arrayToDataFrame(source, names); // returns a standard DataFrame } } @@ -27,7 +27,7 @@ export class ArrayDataFrame implements DataFrame { * * @public */ -export function arrayToDataFrame(source: Array> | unknown[], names?: string[]): DataFrame { +export function arrayToDataFrame(source: unknown[], names?: string[]): DataFrame { const df: DataFrame = { fields: [], length: source.length, diff --git a/packages/grafana-data/src/dataframe/DataFrameView.ts b/packages/grafana-data/src/dataframe/DataFrameView.ts index d4d3c157d62..e911748fa39 100644 --- a/packages/grafana-data/src/dataframe/DataFrameView.ts +++ b/packages/grafana-data/src/dataframe/DataFrameView.ts @@ -23,7 +23,7 @@ export class DataFrameView extends FunctionalVector { constructor(private data: DataFrame) { super(); const obj = {} as T; - const fields = {} as any; + const fields: any = {}; for (let i = 0; i < data.fields.length; i++) { const field = data.fields[i]; diff --git a/packages/grafana-data/src/dataframe/MutableDataFrame.ts b/packages/grafana-data/src/dataframe/MutableDataFrame.ts index 4437aa44b5e..6ac9b79e38a 100644 --- a/packages/grafana-data/src/dataframe/MutableDataFrame.ts +++ b/packages/grafana-data/src/dataframe/MutableDataFrame.ts @@ -13,6 +13,8 @@ export type MutableField = Field; /** @deprecated */ type MutableVectorCreator = (buffer?: unknown[]) => unknown[]; +type Parser = (v: string) => unknown; + export const MISSING_VALUE = undefined; // Treated as connected in new graph panel /** @@ -149,14 +151,14 @@ export class MutableDataFrame extends FunctionalVector implements Da } } - private parsers: Map any> | undefined = undefined; + private parsers: Map | undefined = undefined; /** * @deprecated unclear if this is actually used */ - setParser(field: Field, parser: (v: string) => any) { + setParser(field: Field, parser: Parser) { if (!this.parsers) { - this.parsers = new Map any>(); + this.parsers = new Map(); } this.parsers.set(field, parser); return parser; @@ -222,7 +224,7 @@ export class MutableDataFrame extends FunctionalVector implements Da */ add(value: T): void { // Will add one value for every field - const obj = value as any; + const obj: any = value; for (const field of this.fields) { let val = obj[field.name]; @@ -243,7 +245,7 @@ export class MutableDataFrame extends FunctionalVector implements Da throw new Error('Unable to set value beyond current length'); } - const obj = (value as Record) || {}; + const obj: Record = value || {}; for (const field of this.fields) { field.values[index] = obj[field.name]; } diff --git a/packages/grafana-data/src/dataframe/StreamingDataFrame.ts b/packages/grafana-data/src/dataframe/StreamingDataFrame.ts index bb410406ed9..8d37543f73e 100644 --- a/packages/grafana-data/src/dataframe/StreamingDataFrame.ts +++ b/packages/grafana-data/src/dataframe/StreamingDataFrame.ts @@ -420,9 +420,7 @@ export class StreamingDataFrame implements DataFrame { }; getMatchingFieldIndexes = (fieldPredicate: (f: Field) => boolean): number[] => - this.fields - .map((f, index) => (fieldPredicate(f) ? index : undefined)) - .filter((val) => val !== undefined) as number[]; + this.fields.map((f, index) => (fieldPredicate(f) ? index : undefined)).filter((val) => val !== undefined); getValuesFromLastPacket = (): unknown[][] => this.fields.map((f) => { diff --git a/packages/grafana-data/src/dataframe/processDataFrame.test.ts b/packages/grafana-data/src/dataframe/processDataFrame.test.ts index 5c7593e91c0..bb9ffefefcd 100644 --- a/packages/grafana-data/src/dataframe/processDataFrame.test.ts +++ b/packages/grafana-data/src/dataframe/processDataFrame.test.ts @@ -348,11 +348,11 @@ describe('SeriesData backwards compatibility', () => { expect(isDataFrame(timeseries)).toBeFalsy(); expect(isDataFrame(series)).toBeTruthy(); - const roundtrip = toLegacyResponseData(series) as any; + const roundtrip = toLegacyResponseData(series); expect(isDataFrame(roundtrip)).toBeFalsy(); - expect(roundtrip.type).toBe('docs'); - expect(roundtrip.target).toBe('docs'); - expect(roundtrip.filterable).toBeTruthy(); + expect('type' in roundtrip && roundtrip.type).toBe('docs'); + expect('target' in roundtrip && roundtrip.target).toBe('docs'); + expect('filterable' in roundtrip && roundtrip.filterable).toBeTruthy(); }); }); diff --git a/packages/grafana-data/src/dataframe/processDataFrame.ts b/packages/grafana-data/src/dataframe/processDataFrame.ts index 14621547725..c3fd65486c7 100644 --- a/packages/grafana-data/src/dataframe/processDataFrame.ts +++ b/packages/grafana-data/src/dataframe/processDataFrame.ts @@ -26,13 +26,13 @@ import { dataFrameFromJSON } from './DataFrameJSON'; function convertTableToDataFrame(table: TableData): DataFrame { const fields = table.columns.map((c) => { // TODO: should be Column but type does not exists there so not sure whats up here. - const { text, type, ...disp } = c as any; + const { text, type, ...disp } = c as Column & { type?: FieldType }; const values: unknown[] = []; return { - name: text?.length ? text : c, // rename 'text' to the 'name' field - config: (disp || {}) as FieldConfig, + name: text ?? c, // rename 'text' to the 'name' field + config: disp || {}, values, - type: type && Object.values(FieldType).includes(type as FieldType) ? (type as FieldType) : FieldType.other, + type: type && Object.values(FieldType).includes(type) ? type : FieldType.other, }; }); @@ -400,8 +400,9 @@ export const toLegacyResponseData = (frame: DataFrame): TimeSeries | TableData = if (config) { // keep unit etc const { ...column } = config; - (column as Column).text = name; - return column as Column; + const result = column as Column; + result.text = name; + return result; } return { text: name }; }), diff --git a/packages/grafana-data/src/panel/PanelPlugin.ts b/packages/grafana-data/src/panel/PanelPlugin.ts index 61985074be9..4822d4c6acb 100644 --- a/packages/grafana-data/src/panel/PanelPlugin.ts +++ b/packages/grafana-data/src/panel/PanelPlugin.ts @@ -122,11 +122,6 @@ export class PanelPlugin< alertStates: false, }; - /** - * Legacy angular ctrl. If this exists it will be used instead of the panel - */ - angularPanelCtrl?: any; - constructor(panel: ComponentType> | null) { super(); this.panel = panel; diff --git a/packages/grafana-data/src/utils/csv.ts b/packages/grafana-data/src/utils/csv.ts index 7c225e47ac0..9823aa4c550 100644 --- a/packages/grafana-data/src/utils/csv.ts +++ b/packages/grafana-data/src/utils/csv.ts @@ -115,7 +115,7 @@ export class CSVReader { if (!fields[j].config) { fields[j].config = {}; } - const disp = fields[j].config as any; // any lets name lookup + const disp: any = fields[j].config; // any lets name lookup disp[k] = j === 0 ? v : line[j]; } } diff --git a/packages/grafana-data/src/utils/throwIfAngular.test.ts b/packages/grafana-data/src/utils/throwIfAngular.test.ts index 8cdbae71cd9..8b17e2f10e6 100644 --- a/packages/grafana-data/src/utils/throwIfAngular.test.ts +++ b/packages/grafana-data/src/utils/throwIfAngular.test.ts @@ -33,6 +33,7 @@ describe('throwIfAngular', () => { it('should throw if angular panel', () => { const underTest = new PanelPlugin(null); + // @ts-expect-error underTest.angularPanelCtrl = {}; expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported'); }); diff --git a/packages/grafana-data/src/vector/CircularVector.ts b/packages/grafana-data/src/vector/CircularVector.ts index 221f7c488e5..70b570630bc 100644 --- a/packages/grafana-data/src/vector/CircularVector.ts +++ b/packages/grafana-data/src/vector/CircularVector.ts @@ -16,7 +16,7 @@ interface CircularOptions { * @public * @deprecated use a simple Arrays */ -export class CircularVector extends FunctionalVector { +export class CircularVector extends FunctionalVector { private buffer: T[]; private index: number; private capacity: number; diff --git a/packages/grafana-ui/src/components/Modal/ModalsContext.tsx b/packages/grafana-ui/src/components/Modal/ModalsContext.tsx index 4a540716fee..734e3fe620b 100644 --- a/packages/grafana-ui/src/components/Modal/ModalsContext.tsx +++ b/packages/grafana-ui/src/components/Modal/ModalsContext.tsx @@ -17,10 +17,6 @@ export const ModalsContext = React.createContext({ interface ModalsProviderProps { children: React.ReactNode; - /** Set default component to render as modal. Useful when rendering modals from Angular */ - component?: React.ComponentType | null; - /** Set default component props. Useful when rendering modals from Angular */ - props?: any; } /** @@ -31,8 +27,8 @@ export class ModalsProvider extends Component({ const creatableProps: ComponentProps>> = {}; let asyncSelectProps: any = {}; - let selectedValue; + let selectedValue: any; if (isMulti && loadOptions) { - selectedValue = value as any; + selectedValue = value; } else { // If option is passed as a plain value (value property from SelectableValue property) // we are selecting the corresponding value from the options diff --git a/packages/grafana-ui/src/components/Select/resetSelectStyles.ts b/packages/grafana-ui/src/components/Select/resetSelectStyles.ts index 067cdaadf76..90ac3877c2a 100644 --- a/packages/grafana-ui/src/components/Select/resetSelectStyles.ts +++ b/packages/grafana-ui/src/components/Select/resetSelectStyles.ts @@ -51,7 +51,7 @@ export function useCustomSelectStyles(theme: GrafanaTheme2, width: number | stri return useMemo(() => { return { ...resetSelectStyles(theme), - menuPortal: (base: any) => { + menuPortal: (base: CSSObjectWithLabel) => { // Would like to correct top position when menu is placed bottom, but have props are not sent to this style function. // Only state is. https://github.com/JedWatson/react-select/blob/master/packages/react-select/src/components/Menu.tsx#L605 return { @@ -60,7 +60,7 @@ export function useCustomSelectStyles(theme: GrafanaTheme2, width: number | stri }; }, //These are required for the menu positioning to function - menu: ({ top, bottom, position }: any) => { + menu: ({ top, bottom, position }: CSSObjectWithLabel) => { return { top, bottom, @@ -73,7 +73,7 @@ export function useCustomSelectStyles(theme: GrafanaTheme2, width: number | stri width: width ? theme.spacing(width) : '100%', display: width === 'auto' ? 'inline-flex' : 'flex', }), - option: (provided: any, state: any) => ({ + option: (provided: CSSObjectWithLabel, state: any) => ({ ...provided, opacity: state.isDisabled ? 0.5 : 1, }), diff --git a/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts b/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts index cf2dc4fffb0..b9aa005074c 100644 --- a/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts +++ b/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts @@ -197,7 +197,7 @@ export function sharedSingleStatMigrationHandler(panel: PanelModel { it('should not increment configRev when no changes made and leaving panel edit', async () => { const sourcePanel = new PanelModel({ id: 12, type: 'graph' }); sourcePanel.plugin = getPanelPlugin({}); - sourcePanel.plugin.angularPanelCtrl = undefined; const dashboard = createDashboardModelFixture({ panels: [{ id: 12, type: 'graph' }], @@ -169,7 +168,6 @@ describe('panelEditor actions', () => { it('should apply changes when dashboard was saved from panel edit', async () => { const sourcePanel = new PanelModel({ id: 12, type: 'graph' }); sourcePanel.plugin = getPanelPlugin({}); - sourcePanel.plugin.angularPanelCtrl = undefined; const dashboard = createDashboardModelFixture({ panels: [{ id: 12, type: 'graph' }], diff --git a/public/app/features/search/service/frontend.ts b/public/app/features/search/service/frontend.ts index b926d0c2cb2..40740144077 100644 --- a/public/app/features/search/service/frontend.ts +++ b/public/app/features/search/service/frontend.ts @@ -117,8 +117,7 @@ class FullResultCache { const allFields = this.full.dataFrame.fields; const haystack = this.names; - // eslint-disable-next-line - const values = allFields.map((v) => [] as any[]); // empty value for each field + const values = allFields.map((v) => []); // empty value for each field let [idxs, info, order] = this.ufuzzy.search(haystack, query, 5); diff --git a/public/app/plugins/panel/live/LiveChannelEditor.tsx b/public/app/plugins/panel/live/LiveChannelEditor.tsx index 90cd5f4b474..06af567317e 100644 --- a/public/app/plugins/panel/live/LiveChannelEditor.tsx +++ b/public/app/plugins/panel/live/LiveChannelEditor.tsx @@ -135,7 +135,7 @@ export function LiveChannelEditor(props: Props) { 'Select watchable resource' )} onChange={(v) => { - const resource = (v as any).resource as GroupDiscoveryResource; + const resource: GroupDiscoveryResource = (v as any).resource; if (resource) { props.onChange({ scope: LiveChannelScope.Watch,