You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2023/12/08 02:47:12 UTC

(superset) branch shut-up-eslint created (now 91ed2140ba)

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a change to branch shut-up-eslint
in repository https://gitbox.apache.org/repos/asf/superset.git


      at 91ed2140ba Fixing some things that broke. Still at 81

This branch includes the following new commits:

     new 186bddd7a8 disabling 'react-hooks/exhaustive-deps' - 275 down to 98.
     new 104b43f983 Down to 81
     new 91ed2140ba Fixing some things that broke. Still at 81

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 01/03: disabling 'react-hooks/exhaustive-deps' - 275 down to 98.

Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch shut-up-eslint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 186bddd7a8f6a4796a1d01cd757b0fad88a1d8b4
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Thu Dec 7 16:37:02 2023 -0700

    disabling 'react-hooks/exhaustive-deps' - 275 down to 98.
---
 superset-frontend/.eslintrc.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/superset-frontend/.eslintrc.js b/superset-frontend/.eslintrc.js
index 6eebb0d2df..3b0c77a254 100644
--- a/superset-frontend/.eslintrc.js
+++ b/superset-frontend/.eslintrc.js
@@ -145,6 +145,7 @@ module.exports = {
         'react/require-default-props': 0,
         'react/sort-comp': 0, // TODO: re-enable in separate PR
         'react/static-property-placement': 0, // re-enable up for discussion
+        'react-hooks/exhaustive-deps': 0,
         'prettier/prettier': 'error',
         'file-progress/activate': 1,
       },


(superset) 02/03: Down to 81

Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch shut-up-eslint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 104b43f983289a3b82e818b6f3728c533fd56e61
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Thu Dec 7 17:01:30 2023 -0700

    Down to 81
---
 .../src/operators/sortOperator.ts                  | 60 +++++++++++-----------
 .../superset-ui-core/src/api/types/core.ts         | 31 -----------
 .../ShareSqlLabQuery/ShareSqlLabQuery.test.tsx     |  4 +-
 .../src/explore/exploreUtils/exploreUtils.test.jsx |  6 +++
 .../src/features/allEntities/AllEntitiesTable.tsx  |  2 -
 .../src/features/profile/RecentActivity.tsx        |  7 +--
 .../src/features/tags/BulkTagModal.tsx             |  2 +-
 superset-frontend/src/pages/AllEntities/index.tsx  |  6 +--
 superset-frontend/src/utils/downloadAsImage.ts     |  1 +
 .../src/utils/getClientErrorObject.ts              | 46 ++++++++---------
 superset-frontend/src/utils/testUtils.ts           |  1 -
 11 files changed, 66 insertions(+), 100 deletions(-)

diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts b/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
index 4d7b5deaf4..412fa0ca9e 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
@@ -28,42 +28,40 @@ import {
 import { PostProcessingFactory } from './types';
 import { extractExtraMetrics } from './utils';
 
-export const sortOperator: PostProcessingFactory<PostProcessingSort> = (
-  formData,
-  queryObject,
-) => {
-  // the sortOperator only used in the barchart v2
-  const sortableLabels = [
-    getXAxisLabel(formData),
-    ...ensureIsArray(formData.metrics).map(getMetricLabel),
-    ...extractExtraMetrics(formData).map(getMetricLabel),
-  ].filter(Boolean);
+export const sortOperator: PostProcessingFactory<PostProcessingSort> =
+  formData => {
+    // the sortOperator only used in the barchart v2
+    const sortableLabels = [
+      getXAxisLabel(formData),
+      ...ensureIsArray(formData.metrics).map(getMetricLabel),
+      ...extractExtraMetrics(formData).map(getMetricLabel),
+    ].filter(Boolean);
+
+    if (
+      hasGenericChartAxes &&
+      isDefined(formData?.x_axis_sort) &&
+      isDefined(formData?.x_axis_sort_asc) &&
+      sortableLabels.includes(formData.x_axis_sort) &&
+      // the sort operator doesn't support sort-by multiple series.
+      isEmpty(formData.groupby)
+    ) {
+      if (formData.x_axis_sort === getXAxisLabel(formData)) {
+        return {
+          operation: 'sort',
+          options: {
+            is_sort_index: true,
+            ascending: formData.x_axis_sort_asc,
+          },
+        };
+      }
 
-  if (
-    hasGenericChartAxes &&
-    isDefined(formData?.x_axis_sort) &&
-    isDefined(formData?.x_axis_sort_asc) &&
-    sortableLabels.includes(formData.x_axis_sort) &&
-    // the sort operator doesn't support sort-by multiple series.
-    isEmpty(formData.groupby)
-  ) {
-    if (formData.x_axis_sort === getXAxisLabel(formData)) {
       return {
         operation: 'sort',
         options: {
-          is_sort_index: true,
+          by: formData.x_axis_sort,
           ascending: formData.x_axis_sort_asc,
         },
       };
     }
-
-    return {
-      operation: 'sort',
-      options: {
-        by: formData.x_axis_sort,
-        ascending: formData.x_axis_sort_asc,
-      },
-    };
-  }
-  return undefined;
-};
+    return undefined;
+  };
diff --git a/superset-frontend/packages/superset-ui-core/src/api/types/core.ts b/superset-frontend/packages/superset-ui-core/src/api/types/core.ts
deleted file mode 100644
index 9aeba85acc..0000000000
--- a/superset-frontend/packages/superset-ui-core/src/api/types/core.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// /superset/sqllab_viz
-interface SqlLabPostRequest {
-  data: {
-    schema: string;
-    sql: string;
-    dbId: number;
-    templateParams?: string | undefined;
-    datasourceName: string;
-    metrics?: string[];
-    columns?: string[];
-  };
-}
diff --git a/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx b/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
index 877edb76c8..06497a1cef 100644
--- a/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
+++ b/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
@@ -123,7 +123,7 @@ describe('ShareSqlLabQuery', () => {
         });
       });
       const button = screen.getByRole('button');
-      const { id, remoteId, ...expected } = mockQueryEditor;
+      const expected = (({ id, remoteId, ...rest }) => rest)(mockQueryEditor);
       const storeQuerySpy = jest.spyOn(utils, 'storeQuery');
       userEvent.click(button);
       expect(storeQuerySpy.mock.calls).toHaveLength(1);
@@ -138,7 +138,7 @@ describe('ShareSqlLabQuery', () => {
         });
       });
       const button = screen.getByRole('button');
-      const { id, ...expected } = unsavedQueryEditor;
+      const expected = (({ id, ...rest }) => rest)(mockQueryEditor);
       const storeQuerySpy = jest.spyOn(utils, 'storeQuery');
       userEvent.click(button);
       expect(storeQuerySpy.mock.calls).toHaveLength(1);
diff --git a/superset-frontend/src/explore/exploreUtils/exploreUtils.test.jsx b/superset-frontend/src/explore/exploreUtils/exploreUtils.test.jsx
index 3105f30868..5e1b0f4bf1 100644
--- a/superset-frontend/src/explore/exploreUtils/exploreUtils.test.jsx
+++ b/superset-frontend/src/explore/exploreUtils/exploreUtils.test.jsx
@@ -53,6 +53,7 @@ describe('exploreUtils', () => {
       });
       compareURI(URI(url), URI('/explore/'));
     });
+    // eslint-disable-next-line jest/expect-expect
     it('generates proper json url', () => {
       const url = getExploreUrl({
         formData,
@@ -62,6 +63,7 @@ describe('exploreUtils', () => {
       });
       compareURI(URI(url), URI('/superset/explore_json/'));
     });
+    // eslint-disable-next-line jest/expect-expect
     it('generates proper json forced url', () => {
       const url = getExploreUrl({
         formData,
@@ -74,6 +76,7 @@ describe('exploreUtils', () => {
         URI('/superset/explore_json/').search({ force: 'true' }),
       );
     });
+    // eslint-disable-next-line jest/expect-expect
     it('generates proper csv URL', () => {
       const url = getExploreUrl({
         formData,
@@ -86,6 +89,7 @@ describe('exploreUtils', () => {
         URI('/superset/explore_json/').search({ csv: 'true' }),
       );
     });
+    // eslint-disable-next-line jest/expect-expect
     it('generates proper standalone URL', () => {
       const url = getExploreUrl({
         formData,
@@ -100,6 +104,7 @@ describe('exploreUtils', () => {
         }),
       );
     });
+    // eslint-disable-next-line jest/expect-expect
     it('preserves main URLs params', () => {
       const url = getExploreUrl({
         formData,
@@ -112,6 +117,7 @@ describe('exploreUtils', () => {
         URI('/superset/explore_json/').search({ foo: 'bar' }),
       );
     });
+    // eslint-disable-next-line jest/expect-expect
     it('generate proper save slice url', () => {
       const url = getExploreUrl({
         formData,
diff --git a/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
index 50fdd5a51b..e3c75c27b7 100644
--- a/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
+++ b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
@@ -68,13 +68,11 @@ export interface TaggedObjects {
 }
 
 interface AllEntitiesTableProps {
-  search?: string;
   setShowTagModal: (show: boolean) => void;
   objects: TaggedObjects;
 }
 
 export default function AllEntitiesTable({
-  search = '',
   setShowTagModal,
   objects,
 }: AllEntitiesTableProps) {
diff --git a/superset-frontend/src/features/profile/RecentActivity.tsx b/superset-frontend/src/features/profile/RecentActivity.tsx
index d550d2a953..5a57f5c988 100644
--- a/superset-frontend/src/features/profile/RecentActivity.tsx
+++ b/superset-frontend/src/features/profile/RecentActivity.tsx
@@ -21,14 +21,9 @@ import moment from 'moment';
 import { t } from '@superset-ui/core';
 import rison from 'rison';
 import TableLoader from 'src/components/TableLoader';
-import { BootstrapUser } from 'src/types/bootstrapTypes';
 import { ActivityResult } from './types';
 
-interface RecentActivityProps {
-  user: BootstrapUser;
-}
-
-export default function RecentActivity({ user }: RecentActivityProps) {
+export default function RecentActivity() {
   const rowLimit = 50;
   const mutator = function (data: ActivityResult) {
     return data.result
diff --git a/superset-frontend/src/features/tags/BulkTagModal.tsx b/superset-frontend/src/features/tags/BulkTagModal.tsx
index 643dcdb432..6f8e38d00f 100644
--- a/superset-frontend/src/features/tags/BulkTagModal.tsx
+++ b/superset-frontend/src/features/tags/BulkTagModal.tsx
@@ -80,7 +80,7 @@ const BulkTagModal: React.FC<BulkTagModalProps> = ({
         }
         addSuccessToast(t('Tagged %s %ss', tagged.length, resourceName));
       })
-      .catch(err => {
+      .catch(() => {
         addDangerToast(t('Failed to tag items'));
       });
 
diff --git a/superset-frontend/src/pages/AllEntities/index.tsx b/superset-frontend/src/pages/AllEntities/index.tsx
index b94cab846d..ed6fd5f681 100644
--- a/superset-frontend/src/pages/AllEntities/index.tsx
+++ b/superset-frontend/src/pages/AllEntities/index.tsx
@@ -117,7 +117,7 @@ function AllEntities() {
   const editableTitleProps = {
     title: tag?.name || '',
     placeholder: 'testing',
-    onSave: (newDatasetName: string) => {},
+    onSave: () => {},
     canEdit: false,
     label: t('dataset name'),
   };
@@ -162,7 +162,7 @@ function AllEntities() {
         setObjects(objects);
         setLoading(false);
       },
-      (error: Response) => {
+      () => {
         addDangerToast('Error Fetching Tagged Objects');
         setLoading(false);
       },
@@ -176,7 +176,7 @@ function AllEntities() {
         setTag(tag);
         setLoading(false);
       },
-      (error: Response) => {
+      () => {
         addDangerToast(t('Error Fetching Tagged Objects'));
         setLoading(false);
       },
diff --git a/superset-frontend/src/utils/downloadAsImage.ts b/superset-frontend/src/utils/downloadAsImage.ts
index 79373cc76a..54172ee32e 100644
--- a/superset-frontend/src/utils/downloadAsImage.ts
+++ b/superset-frontend/src/utils/downloadAsImage.ts
@@ -81,6 +81,7 @@ export default function downloadAsImage(
         link.click();
       })
       .catch(e => {
+        // eslint-disable-next-line no-console
         console.error('Creating image failed', e);
       });
   };
diff --git a/superset-frontend/src/utils/getClientErrorObject.ts b/superset-frontend/src/utils/getClientErrorObject.ts
index a5f2871872..7c806e4d52 100644
--- a/superset-frontend/src/utils/getClientErrorObject.ts
+++ b/superset-frontend/src/utils/getClientErrorObject.ts
@@ -86,29 +86,6 @@ export function parseErrorJson(responseObject: JsonObject): ClientErrorObject {
   return { ...error, error: error.error }; // explicit ClientErrorObject
 }
 
-/*
- * Utility to get standardized error text for generic update failures
- */
-export async function getErrorText(
-  errorObject: ErrorType,
-  source: ErrorTextSource,
-) {
-  const { error, message } = await getClientErrorObject(errorObject);
-  let errorText = t('Sorry, an unknown error occurred.');
-
-  if (error) {
-    errorText = t(
-      'Sorry, there was an error saving this %s: %s',
-      source,
-      error,
-    );
-  }
-  if (typeof message === 'string' && message === 'Forbidden') {
-    errorText = t('You do not have permission to edit this %s', source);
-  }
-  return errorText;
-}
-
 export function getClientErrorObject(
   response:
     | SupersetClientResponse
@@ -203,6 +180,29 @@ export function getClientErrorObject(
   });
 }
 
+/*
+ * Utility to get standardized error text for generic update failures
+ */
+export async function getErrorText(
+  errorObject: ErrorType,
+  source: ErrorTextSource,
+) {
+  const { error, message } = await getClientErrorObject(errorObject);
+  let errorText = t('Sorry, an unknown error occurred.');
+
+  if (error) {
+    errorText = t(
+      'Sorry, there was an error saving this %s: %s',
+      source,
+      error,
+    );
+  }
+  if (typeof message === 'string' && message === 'Forbidden') {
+    errorText = t('You do not have permission to edit this %s', source);
+  }
+  return errorText;
+}
+
 export function getClientErrorMessage(
   message: string,
   clientError?: ClientErrorObject,
diff --git a/superset-frontend/src/utils/testUtils.ts b/superset-frontend/src/utils/testUtils.ts
index c62ce741a2..6faebb595b 100644
--- a/superset-frontend/src/utils/testUtils.ts
+++ b/superset-frontend/src/utils/testUtils.ts
@@ -37,7 +37,6 @@ export const testWithId =
       return (resultIdOnly ? id : { 'data-test': id }) as TestWithIdType<T>;
     }
     if (!id && !prefix) {
-      console.warn('testWithId function has missed "prefix" and "id" params');
       return (resultIdOnly ? '' : { 'data-test': '' }) as TestWithIdType<T>;
     }
     const newId = `${prefix}__${id}`;


(superset) 03/03: Fixing some things that broke. Still at 81

Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch shut-up-eslint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 91ed2140bad7569fbed9a6c954c365006682529a
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Thu Dec 7 19:47:03 2023 -0700

    Fixing some things that broke. Still at 81
---
 superset-frontend/package-lock.json                | 505 ++++++++++++++++++++-
 .../packages/generator-superset/package.json       |   2 +
 .../superset-ui-core/src/api/types/core.ts         |  31 ++
 .../src/react-pivottable/utilities.js              |   1 +
 .../SqlLab/components/SqlEditorTabHeader/index.tsx |   1 +
 .../src/features/allEntities/AllEntitiesTable.tsx  |   1 +
 .../src/features/profile/RecentActivity.tsx        |   7 +-
 7 files changed, 541 insertions(+), 7 deletions(-)

diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index c4e771b259..ba9c76a4c0 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -19248,6 +19248,18 @@
         "@types/ms": "*"
       }
     },
+    "node_modules/@types/diff": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.0.9.tgz",
+      "integrity": "sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ==",
+      "dev": true
+    },
+    "node_modules/@types/ejs": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+      "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+      "dev": true
+    },
     "node_modules/@types/enzyme": {
       "version": "3.10.10",
       "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.10.tgz",
@@ -19293,8 +19305,7 @@
       "version": "1.20.4",
       "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
       "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
-      "devOptional": true,
-      "peer": true
+      "devOptional": true
     },
     "node_modules/@types/express": {
       "version": "4.17.13",
@@ -19389,6 +19400,31 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/inquirer": {
+      "version": "8.2.10",
+      "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.10.tgz",
+      "integrity": "sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==",
+      "dev": true,
+      "dependencies": {
+        "@types/through": "*",
+        "rxjs": "^7.2.0"
+      }
+    },
+    "node_modules/@types/inquirer/node_modules/rxjs": {
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+      "dev": true,
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@types/inquirer/node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+      "dev": true
+    },
     "node_modules/@types/is-function": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
@@ -19500,6 +19536,30 @@
         "@types/unist": "*"
       }
     },
+    "node_modules/@types/mem-fs": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/@types/mem-fs/-/mem-fs-1.1.5.tgz",
+      "integrity": "sha512-fnzN9xAKb3IPEoKgAkbpDE+8Q5J+QoCThPTVv3oKDHUe5xBpENP7ZwXC6HZnXBmVPLK5zfUZrphPe6zeCTPyrQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*",
+        "@types/vinyl": "*"
+      }
+    },
+    "node_modules/@types/mem-fs-editor": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/mem-fs-editor/-/mem-fs-editor-7.0.7.tgz",
+      "integrity": "sha512-hLNd2KEDHz/3dg4Rq7y8fQJSOObzR/aFHrnR1imAfTtSO/6vJs2mOCy3Fwpfqs1uVj9KFahW1Ky7BFlDqPl1hg==",
+      "dev": true,
+      "dependencies": {
+        "@types/ejs": "*",
+        "@types/json-schema": "*",
+        "@types/mem-fs": "*",
+        "@types/node": "*",
+        "@types/vinyl": "*",
+        "globby": "^11.1.0"
+      }
+    },
     "node_modules/@types/mime": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
@@ -19897,6 +19957,21 @@
         "@types/jest": "*"
       }
     },
+    "node_modules/@types/text-table": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.5.tgz",
+      "integrity": "sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA==",
+      "dev": true
+    },
+    "node_modules/@types/through": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz",
+      "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
     "node_modules/@types/tinycolor2": {
       "version": "1.4.3",
       "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz",
@@ -19940,7 +20015,6 @@
       "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz",
       "integrity": "sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g==",
       "devOptional": true,
-      "peer": true,
       "dependencies": {
         "@types/expect": "^1.20.4",
         "@types/node": "*"
@@ -20042,6 +20116,197 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/yeoman-assert": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-assert/-/yeoman-assert-3.1.4.tgz",
+      "integrity": "sha512-hKiUQ1VVfJW1CFE/trneWj2oTcZ/VPGbiSB6RV/lGOGb6zpue+9jelw5fh0jMA5usEsKllK8LrzlKoPe2tghpw==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/yeoman-environment": {
+      "version": "2.10.11",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-environment/-/yeoman-environment-2.10.11.tgz",
+      "integrity": "sha512-kIDgoiuPnL9HGHwa2t6h4FiUgYFb411/okY0nKhRKw+IMsRxMOWzQUFhZ/CKQvwXvKoCjFTj+MZI2KXAKxVmug==",
+      "dev": true,
+      "dependencies": {
+        "@types/diff": "*",
+        "@types/inquirer": "^8",
+        "@types/mem-fs": "*",
+        "@types/node": "*",
+        "@types/text-table": "*",
+        "@types/vinyl": "*",
+        "@types/yeoman-generator": "*",
+        "chalk": "^4.1.0",
+        "commander": "^9.0.0",
+        "execa": "^5.0.0",
+        "rxjs": "^6.4.0"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@types/yeoman-environment/node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@types/yeoman-generator": {
+      "version": "5.2.14",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-generator/-/yeoman-generator-5.2.14.tgz",
+      "integrity": "sha512-eIYBqQyURXiAaoU6jvJqMI+tNSG4s7EXtcHucLCgb8EV2vqz4x1WPr91MT0MiWHV8+9dDRrMkc1VZ6LduexuyA==",
+      "dev": true,
+      "dependencies": {
+        "@types/debug": "*",
+        "@types/ejs": "*",
+        "@types/inquirer": "^8",
+        "@types/mem-fs-editor": "*",
+        "@types/node": "*",
+        "@types/yeoman-environment": "*",
+        "rxjs": "^6.4.0"
+      }
+    },
+    "node_modules/@types/yeoman-test": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-test/-/yeoman-test-4.0.6.tgz",
+      "integrity": "sha512-yPhCCqXeinWoH78bvzalZ1fAYjPSSrLK+RgxFxkKKu1WSlSG0ilOPBnquqE4UwvXC30hrwHvXIUMPsXQaTESXA==",
+      "dev": true,
+      "dependencies": {
+        "@types/mem-fs": "*",
+        "@types/mem-fs-editor": "*",
+        "@types/yeoman-environment": "*",
+        "@types/yeoman-generator": "*"
+      }
+    },
     "node_modules/@typescript-eslint/eslint-plugin": {
       "version": "5.62.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
@@ -61952,6 +62217,8 @@
         "yosay": "^2.0.2"
       },
       "devDependencies": {
+        "@types/yeoman-assert": "^3.1.4",
+        "@types/yeoman-test": "^4.0.6",
         "fs-extra": "^10.0.0",
         "yeoman-assert": "^3.1.0",
         "yeoman-test": "^6.2.0"
@@ -77896,6 +78163,8 @@
     "@superset-ui/generator-superset": {
       "version": "file:packages/generator-superset",
       "requires": {
+        "@types/yeoman-assert": "^3.1.4",
+        "@types/yeoman-test": "^4.0.6",
         "chalk": "^4.0.0",
         "fs-extra": "^10.0.0",
         "lodash": "^4.17.11",
@@ -79208,6 +79477,18 @@
         "@types/ms": "*"
       }
     },
+    "@types/diff": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.0.9.tgz",
+      "integrity": "sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ==",
+      "dev": true
+    },
+    "@types/ejs": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+      "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+      "dev": true
+    },
     "@types/enzyme": {
       "version": "3.10.10",
       "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.10.tgz",
@@ -79253,8 +79534,7 @@
       "version": "1.20.4",
       "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
       "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
-      "devOptional": true,
-      "peer": true
+      "devOptional": true
     },
     "@types/express": {
       "version": "4.17.13",
@@ -79349,6 +79629,33 @@
         "@types/node": "*"
       }
     },
+    "@types/inquirer": {
+      "version": "8.2.10",
+      "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.10.tgz",
+      "integrity": "sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==",
+      "dev": true,
+      "requires": {
+        "@types/through": "*",
+        "rxjs": "^7.2.0"
+      },
+      "dependencies": {
+        "rxjs": {
+          "version": "7.8.1",
+          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+          "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+          "dev": true,
+          "requires": {
+            "tslib": "^2.1.0"
+          }
+        },
+        "tslib": {
+          "version": "2.6.2",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+          "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+          "dev": true
+        }
+      }
+    },
     "@types/is-function": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
@@ -79460,6 +79767,30 @@
         "@types/unist": "*"
       }
     },
+    "@types/mem-fs": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/@types/mem-fs/-/mem-fs-1.1.5.tgz",
+      "integrity": "sha512-fnzN9xAKb3IPEoKgAkbpDE+8Q5J+QoCThPTVv3oKDHUe5xBpENP7ZwXC6HZnXBmVPLK5zfUZrphPe6zeCTPyrQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/vinyl": "*"
+      }
+    },
+    "@types/mem-fs-editor": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/mem-fs-editor/-/mem-fs-editor-7.0.7.tgz",
+      "integrity": "sha512-hLNd2KEDHz/3dg4Rq7y8fQJSOObzR/aFHrnR1imAfTtSO/6vJs2mOCy3Fwpfqs1uVj9KFahW1Ky7BFlDqPl1hg==",
+      "dev": true,
+      "requires": {
+        "@types/ejs": "*",
+        "@types/json-schema": "*",
+        "@types/mem-fs": "*",
+        "@types/node": "*",
+        "@types/vinyl": "*",
+        "globby": "^11.1.0"
+      }
+    },
     "@types/mime": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
@@ -79858,6 +80189,21 @@
         "@types/jest": "*"
       }
     },
+    "@types/text-table": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.5.tgz",
+      "integrity": "sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA==",
+      "dev": true
+    },
+    "@types/through": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz",
+      "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
     "@types/tinycolor2": {
       "version": "1.4.3",
       "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz",
@@ -79900,7 +80246,6 @@
       "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz",
       "integrity": "sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g==",
       "devOptional": true,
-      "peer": true,
       "requires": {
         "@types/expect": "^1.20.4",
         "@types/node": "*"
@@ -79994,6 +80339,154 @@
         "@types/node": "*"
       }
     },
+    "@types/yeoman-assert": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-assert/-/yeoman-assert-3.1.4.tgz",
+      "integrity": "sha512-hKiUQ1VVfJW1CFE/trneWj2oTcZ/VPGbiSB6RV/lGOGb6zpue+9jelw5fh0jMA5usEsKllK8LrzlKoPe2tghpw==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/yeoman-environment": {
+      "version": "2.10.11",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-environment/-/yeoman-environment-2.10.11.tgz",
+      "integrity": "sha512-kIDgoiuPnL9HGHwa2t6h4FiUgYFb411/okY0nKhRKw+IMsRxMOWzQUFhZ/CKQvwXvKoCjFTj+MZI2KXAKxVmug==",
+      "dev": true,
+      "requires": {
+        "@types/diff": "*",
+        "@types/inquirer": "^8",
+        "@types/mem-fs": "*",
+        "@types/node": "*",
+        "@types/text-table": "*",
+        "@types/vinyl": "*",
+        "@types/yeoman-generator": "*",
+        "chalk": "^4.1.0",
+        "commander": "^9.0.0",
+        "execa": "^5.0.0",
+        "rxjs": "^6.4.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "9.5.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+          "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+          "dev": true
+        },
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "execa": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+          "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.3",
+            "get-stream": "^6.0.0",
+            "human-signals": "^2.1.0",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.1",
+            "onetime": "^5.1.2",
+            "signal-exit": "^3.0.3",
+            "strip-final-newline": "^2.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+          "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+          "dev": true
+        },
+        "human-signals": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+          "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+          "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+          "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "@types/yeoman-generator": {
+      "version": "5.2.14",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-generator/-/yeoman-generator-5.2.14.tgz",
+      "integrity": "sha512-eIYBqQyURXiAaoU6jvJqMI+tNSG4s7EXtcHucLCgb8EV2vqz4x1WPr91MT0MiWHV8+9dDRrMkc1VZ6LduexuyA==",
+      "dev": true,
+      "requires": {
+        "@types/debug": "*",
+        "@types/ejs": "*",
+        "@types/inquirer": "^8",
+        "@types/mem-fs-editor": "*",
+        "@types/node": "*",
+        "@types/yeoman-environment": "*",
+        "rxjs": "^6.4.0"
+      }
+    },
+    "@types/yeoman-test": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/@types/yeoman-test/-/yeoman-test-4.0.6.tgz",
+      "integrity": "sha512-yPhCCqXeinWoH78bvzalZ1fAYjPSSrLK+RgxFxkKKu1WSlSG0ilOPBnquqE4UwvXC30hrwHvXIUMPsXQaTESXA==",
+      "dev": true,
+      "requires": {
+        "@types/mem-fs": "*",
+        "@types/mem-fs-editor": "*",
+        "@types/yeoman-environment": "*",
+        "@types/yeoman-generator": "*"
+      }
+    },
     "@typescript-eslint/eslint-plugin": {
       "version": "5.62.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
diff --git a/superset-frontend/packages/generator-superset/package.json b/superset-frontend/packages/generator-superset/package.json
index 161ca22b1a..5b8b08a1a8 100644
--- a/superset-frontend/packages/generator-superset/package.json
+++ b/superset-frontend/packages/generator-superset/package.json
@@ -30,6 +30,8 @@
     "yosay": "^2.0.2"
   },
   "devDependencies": {
+    "@types/yeoman-assert": "^3.1.4",
+    "@types/yeoman-test": "^4.0.6",
     "fs-extra": "^10.0.0",
     "yeoman-assert": "^3.1.0",
     "yeoman-test": "^6.2.0"
diff --git a/superset-frontend/packages/superset-ui-core/src/api/types/core.ts b/superset-frontend/packages/superset-ui-core/src/api/types/core.ts
new file mode 100644
index 0000000000..9aeba85acc
--- /dev/null
+++ b/superset-frontend/packages/superset-ui-core/src/api/types/core.ts
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// /superset/sqllab_viz
+interface SqlLabPostRequest {
+  data: {
+    schema: string;
+    sql: string;
+    dbId: number;
+    templateParams?: string | undefined;
+    datasourceName: string;
+    metrics?: string[];
+    columns?: string[];
+  };
+}
diff --git a/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/utilities.js b/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/utilities.js
index 9b47132936..ed439463ae 100644
--- a/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/utilities.js
+++ b/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/utilities.js
@@ -610,6 +610,7 @@ class PivotData {
     this.props = { ...PivotData.defaultProps, ...inputProps };
     this.processRecord = this.processRecord.bind(this);
     PropTypes.checkPropTypes(
+      // eslint-disable-next-line react/forbid-foreign-prop-types
       PivotData.propTypes,
       this.props,
       'prop',
diff --git a/superset-frontend/src/SqlLab/components/SqlEditorTabHeader/index.tsx b/superset-frontend/src/SqlLab/components/SqlEditorTabHeader/index.tsx
index 487af451a5..316c2e68a8 100644
--- a/superset-frontend/src/SqlLab/components/SqlEditorTabHeader/index.tsx
+++ b/superset-frontend/src/SqlLab/components/SqlEditorTabHeader/index.tsx
@@ -79,6 +79,7 @@ const SqlEditorTabHeader: React.FC<Props> = ({ queryEditor }) => {
   );
 
   function renameTab() {
+    // eslint-disable-next-line no-alert
     const newTitle = prompt(t('Enter a new title for the tab'));
     if (newTitle) {
       actions.queryEditorSetTitle(qe, newTitle, qe.id);
diff --git a/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
index e3c75c27b7..d8aaaac441 100644
--- a/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
+++ b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
@@ -68,6 +68,7 @@ export interface TaggedObjects {
 }
 
 interface AllEntitiesTableProps {
+  search?: string;
   setShowTagModal: (show: boolean) => void;
   objects: TaggedObjects;
 }
diff --git a/superset-frontend/src/features/profile/RecentActivity.tsx b/superset-frontend/src/features/profile/RecentActivity.tsx
index 5a57f5c988..d550d2a953 100644
--- a/superset-frontend/src/features/profile/RecentActivity.tsx
+++ b/superset-frontend/src/features/profile/RecentActivity.tsx
@@ -21,9 +21,14 @@ import moment from 'moment';
 import { t } from '@superset-ui/core';
 import rison from 'rison';
 import TableLoader from 'src/components/TableLoader';
+import { BootstrapUser } from 'src/types/bootstrapTypes';
 import { ActivityResult } from './types';
 
-export default function RecentActivity() {
+interface RecentActivityProps {
+  user: BootstrapUser;
+}
+
+export default function RecentActivity({ user }: RecentActivityProps) {
   const rowLimit = 50;
   const mutator = function (data: ActivityResult) {
     return data.result