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 2026/06/29 00:50:44 UTC
(superset) 01/01: perf(frontend): migrate lodash imports to lodash-es for tree-shaking
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch chore/lodash-es-migration
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 15648fa9c22db9ca80bb3c6ab38c3fabc1625419
Author: Claude Code <no...@anthropic.com>
AuthorDate: Sun Jun 28 17:50:20 2026 -0700
perf(frontend): migrate lodash imports to lodash-es for tree-shaking
Replaces bare `import { x } from 'lodash'` with `from 'lodash-es'` across the
frontend (173 source files). lodash-es is an ES-module build that webpack
tree-shakes natively at the method level, so bundles include only the lodash
functions actually used.
This also removes the frontend's reliance on babel-plugin-lodash, which is
unmaintained and incompatible with Babel 8 (it calls the removed `path.hoist`
API). Native tree-shaking via lodash-es is the modern replacement and does not
require a build-time Babel plugin.
- Codemod is limited to named imports (`import { debounce } from 'lodash'`),
which map 1:1 to lodash-es. There were no default (`import _ from 'lodash'`)
or namespace (`import * as _`) imports, which lodash-es does not support.
- `lodash-es` added to the manifests of every workspace that imports it, plus
`@types/lodash-es` at the root. `lodash` is retained for the remaining
per-method `lodash/x` imports and transitive consumers.
- lodash-es is already covered by jest's transformIgnorePatterns.
Validated with the production webpack build, the Jest unit suite, and
`tsc --noEmit` (no type errors introduced; @types/lodash-es matches
@types/lodash).
Co-Authored-By: Claude Opus 4.8 <no...@anthropic.com>
---
superset-frontend/package-lock.json | 51 ++++++++--------------
superset-frontend/package.json | 6 ++-
.../packages/superset-core/package.json | 3 ++
.../packages/superset-core/src/theme/Theme.tsx | 2 +-
.../packages/superset-core/src/utils/isBlank.ts | 2 +-
.../superset-ui-chart-controls/package.json | 3 +-
.../src/components/CertifiedIconWithTooltip.tsx | 2 +-
.../src/operators/sortOperator.ts | 2 +-
.../src/shared-controls/sharedControls.tsx | 2 +-
.../src/utils/getColorFormatters.ts | 2 +-
.../test/operators/histogramOperator.test.ts | 2 +-
.../packages/superset-ui-core/package.json | 3 +-
.../src/color/CategoricalColorNamespace.ts | 2 +-
.../src/components/DropdownButton/index.tsx | 2 +-
.../DropdownContainer.stories.tsx | 2 +-
.../src/components/InfoTooltip/index.tsx | 2 +-
.../src/components/MetadataBar/MetadataBar.tsx | 2 +-
.../src/components/Modal/Modal.tsx | 2 +-
.../src/components/SafeMarkdown/SafeMarkdown.tsx | 2 +-
.../src/components/Select/AsyncSelect.tsx | 2 +-
.../src/components/Select/Select.tsx | 2 +-
.../src/components/TableView/TableView.tsx | 2 +-
.../src/connection/callApi/parseResponse.ts | 2 +-
.../superset-ui-core/src/query/normalizeOrderBy.ts | 2 +-
.../src/query/normalizeTimeColumn.ts | 2 +-
.../src/time-comparison/fetchTimeRange.ts | 2 +-
.../src/time-comparison/getTimeOffset.ts | 2 +-
.../src/utils/convertKeysToCamelCase.ts | 2 +-
.../packages/superset-ui-core/src/utils/merge.ts | 2 +-
.../test/components/SafeMarkdown.test.tsx | 2 +-
.../plugins/legacy-preset-chart-nvd3/package.json | 3 +-
.../legacy-preset-chart-nvd3/src/NVD3Vis.ts | 2 +-
.../plugin-chart-ag-grid-table/package.json | 3 +-
.../src/AgGridTable/index.tsx | 2 +-
.../src/AgGridTableChart.tsx | 2 +-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 2 +-
.../src/controlPanel.tsx | 2 +-
.../src/transformProps.ts | 2 +-
.../plugin-chart-ag-grid-table/src/utils/extent.ts | 2 +-
.../src/utils/getInitialFilterModel.ts | 2 +-
.../plugins/plugin-chart-cartodiagram/package.json | 3 +-
.../src/components/OlChartMap.tsx | 2 +-
.../src/util/transformPropsUtil.ts | 2 +-
.../plugins/plugin-chart-echarts/package.json | 3 +-
.../BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx | 2 +-
.../BigNumberPeriodOverPeriod/buildQuery.ts | 2 +-
.../BigNumberPeriodOverPeriod/controlPanel.ts | 2 +-
.../useOverflowDetection.ts | 2 +-
.../src/Gauge/transformProps.ts | 2 +-
.../src/Heatmap/transformProps.ts | 2 +-
.../src/Histogram/transformProps.ts | 2 +-
.../src/MixedTimeseries/controlPanel.tsx | 2 +-
.../src/MixedTimeseries/transformProps.ts | 2 +-
.../src/Timeseries/transformProps.ts | 2 +-
.../plugin-chart-echarts/src/utils/annotation.ts | 2 +-
.../plugin-chart-echarts/src/utils/series.ts | 2 +-
.../src/utils/themeOverrides.ts | 2 +-
.../plugin-chart-echarts/src/utils/treeBuilder.ts | 6 +--
.../plugins/plugin-chart-handlebars/package.json | 3 +-
.../src/components/Handlebars/HandlebarsViewer.tsx | 2 +-
.../plugins/plugin-chart-handlebars/src/consts.ts | 2 +-
.../src/plugin/controls/orderBy.tsx | 2 +-
.../plugins/plugin-chart-table/package.json | 3 +-
.../plugin-chart-table/src/DataTable/DataTable.tsx | 2 +-
.../plugins/plugin-chart-table/src/TableChart.tsx | 2 +-
.../plugins/plugin-chart-table/src/buildQuery.ts | 2 +-
.../plugin-chart-table/src/controlPanel.tsx | 2 +-
.../plugin-chart-table/src/transformProps.ts | 2 +-
.../plugins/plugin-chart-table/src/utils/extent.ts | 2 +-
.../plugin-chart-table/test/TableChart.test.tsx | 2 +-
.../plugins/plugin-chart-word-cloud/package.json | 3 +-
.../src/chart/WordCloud.tsx | 2 +-
.../plugin/controls/ColorSchemeControl/index.tsx | 2 +-
.../plugins/preset-chart-deckgl/package.json | 3 +-
.../preset-chart-deckgl/src/DeckGLContainer.tsx | 2 +-
.../preset-chart-deckgl/src/Multi/Multi.tsx | 2 +-
.../plugins/preset-chart-deckgl/src/factory.tsx | 2 +-
.../src/utilities/HandlebarsRenderer.tsx | 2 +-
.../src/utilities/TooltipTemplateControl.tsx | 2 +-
superset-frontend/src/SqlLab/actions/sqlLab.ts | 2 +-
.../src/SqlLab/components/App/index.tsx | 2 +-
.../src/SqlLab/components/AppLayout/index.tsx | 2 +-
.../src/SqlLab/components/PopEditorTab/index.tsx | 2 +-
.../SqlLab/components/QueryAutoRefresh/index.tsx | 2 +-
.../src/SqlLab/components/QueryHistory/index.tsx | 2 +-
.../src/SqlLab/components/ResultSet/index.tsx | 2 +-
.../SqlLab/components/SaveDatasetModal/index.tsx | 2 +-
.../ShareSqlLabQuery/ShareSqlLabQuery.test.tsx | 2 +-
.../src/SqlLab/components/SqlEditor/index.tsx | 2 +-
.../components/TemplateParamsEditor/index.tsx | 2 +-
.../src/SqlLab/hooks/useQueryEditor/index.ts | 2 +-
.../middlewares/persistSqlLabStateEnhancer.ts | 2 +-
superset-frontend/src/SqlLab/reducers/sqlLab.ts | 2 +-
.../SqlLab/utils/reduxStateToLocalStorageHelper.ts | 2 +-
.../src/components/AlteredSliceTag/index.tsx | 2 +-
.../src/components/Chart/ChartRenderer.tsx | 2 +-
.../components/Chart/DrillBy/DrillByModal.test.tsx | 2 +-
.../components/Chart/DrillBy/DrillBySubmenu.tsx | 2 +-
.../src/components/Chart/DrillDetail/utils.ts | 2 +-
.../src/components/Chart/chartReducer.ts | 2 +-
.../Chart/useDrillDetailMenuItems/index.tsx | 2 +-
.../components/Datasource/FoldersEditor/index.tsx | 2 +-
.../src/components/DynamicPlugins/index.tsx | 2 +-
.../ListView/Filters/CompactSelectPanel.tsx | 2 +-
superset-frontend/src/components/ListView/utils.ts | 2 +-
.../src/dashboard/actions/dashboardState.ts | 2 +-
.../src/dashboard/actions/nativeFilters.ts | 2 +-
.../src/dashboard/components/ColorSchemeSelect.tsx | 2 +-
.../DashboardBuilder/DashboardContainer.tsx | 2 +-
.../DashboardBuilder/DashboardWrapper.tsx | 2 +-
.../dashboard/components/FiltersBadge/index.tsx | 2 +-
.../Header/useHeaderActionsDropdownMenu.tsx | 2 +-
.../dashboard/components/PropertiesModal/index.tsx | 2 +-
.../src/dashboard/components/SliceAdder.tsx | 2 +-
.../components/SyncDashboardState/index.tsx | 2 +-
.../src/dashboard/components/dnd/handleHover.ts | 2 +-
.../components/gridComponents/Chart/Chart.tsx | 2 +-
.../FilterBar/FilterControls/FilterValue.tsx | 2 +-
.../FilterBar/FilterControls/utils.ts | 2 +-
.../nativeFilters/FilterBar/Vertical.tsx | 2 +-
.../components/nativeFilters/FilterBar/index.tsx | 2 +-
.../components/nativeFilters/FilterBar/utils.ts | 2 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 2 +-
.../FiltersConfigModal/FiltersConfigForm/utils.ts | 2 +-
.../FiltersConfigModal/FiltersConfigModal.tsx | 2 +-
.../hooks/useItemStateManager.ts | 2 +-
.../FiltersConfigModal/hooks/useModalSaveLogic.ts | 2 +-
.../src/dashboard/hooks/useDownloadScreenshot.ts | 2 +-
.../src/dashboard/reducers/datasources.ts | 2 +-
.../dashboard/util/activeAllDashboardFilters.ts | 2 +-
.../src/dashboard/util/activeDashboardFilters.ts | 2 +-
.../util/charts/getFormDataWithExtraFilters.ts | 2 +-
.../src/dashboard/util/crossFilters.ts | 2 +-
.../src/dashboard/util/getDashboardUrl.ts | 2 +-
.../dashboard/util/getFilterScopeFromNodesTree.ts | 2 +-
.../src/dashboard/util/getFilterScopeNodesTree.ts | 2 +-
superset-frontend/src/dataMask/reducer.ts | 2 +-
superset-frontend/src/embedded/utils.test.ts | 2 +-
superset-frontend/src/embedded/utils.ts | 2 +-
.../src/explore/actions/saveModalActions.ts | 2 +-
.../src/explore/components/Control.tsx | 2 +-
.../explore/components/ControlPanelsContainer.tsx | 2 +-
.../explore/components/DataTableControl/index.tsx | 2 +-
.../components/DataTableControls.tsx | 2 +-
.../components/ExploreViewContainer/index.tsx | 2 +-
.../explore/components/controls/BoundsControl.tsx | 2 +-
.../controls/ColorSchemeControl/index.tsx | 2 +-
.../ColumnConfigControl/ControlForm/index.tsx | 2 +-
.../components/controls/ComparisonRangeLabel.tsx | 2 +-
.../DndColumnMetricSelect.tsx | 2 +-
.../DndColumnSelectControl/DndColumnSelect.tsx | 2 +-
.../DndColumnSelectControl/useResizeButton.tsx | 2 +-
.../FilterControl/AdhocFilterEditPopover/index.tsx | 2 +-
.../useAdvancedDataTypes.ts | 2 +-
.../controls/MetricControl/MetricsControl.tsx | 2 +-
.../components/controls/TextAreaControl.tsx | 2 +-
.../components/controls/TextControl/index.tsx | 2 +-
.../components/controls/TimeOffsetControl.tsx | 2 +-
.../components/controls/ViewQueryModalFooter.tsx | 2 +-
.../getControlValuesCompatibleWithDatasource.ts | 2 +-
.../getFormDataWithDashboardContext.ts | 2 +-
.../explore/controlUtils/standardizedFormData.ts | 2 +-
.../src/explore/reducers/exploreReducer.ts | 2 +-
.../databases/DatabaseModal/SSHTunnelSwitch.tsx | 2 +-
.../src/features/databases/DatabaseModal/index.tsx | 2 +-
superset-frontend/src/features/home/RightMenu.tsx | 2 +-
superset-frontend/src/features/home/SubMenu.tsx | 2 +-
.../src/features/reports/ReportModal/actions.ts | 2 +-
.../src/features/reports/ReportModal/reducer.ts | 2 +-
.../src/features/themes/ThemeModal.tsx | 2 +-
.../filters/components/Range/RangeFilterPlugin.tsx | 2 +-
.../components/Select/SelectFilterPlugin.tsx | 2 +-
.../src/hooks/apiResources/sqlEditorTabs.ts | 2 +-
superset-frontend/src/pages/ChartList/index.tsx | 2 +-
superset-frontend/src/pages/Home/index.tsx | 2 +-
superset-frontend/src/pages/SqlLab/SqlLab.test.tsx | 2 +-
superset-frontend/src/reduxUtils.ts | 2 +-
superset-frontend/src/types/bootstrapTypes.ts | 2 +-
.../src/utils/DebouncedMessageQueue.ts | 2 +-
superset-frontend/src/utils/colorScheme.ts | 2 +-
superset-frontend/src/utils/downloadAsImage.tsx | 2 +-
superset-frontend/src/utils/downloadAsPdf.ts | 2 +-
.../src/utils/getChartFormDiffs/index.ts | 2 +-
.../src/utils/sanitizeFormData/index.ts | 2 +-
superset-frontend/src/utils/urlUtils.ts | 2 +-
superset-frontend/src/views/CRUD/utils.tsx | 2 +-
186 files changed, 219 insertions(+), 221 deletions(-)
diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index ea64badbe71..05c45dad194 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -109,6 +109,7 @@
"json-bigint": "^1.0.0",
"json-stringify-pretty-compact": "^4.0.0",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"mapbox-gl": "^3.25.0",
"markdown-to-jsx": "^9.8.2",
"match-sorter": "^8.3.0",
@@ -199,6 +200,7 @@
"@types/jquery": "^4.0.1",
"@types/js-levenshtein": "^1.1.3",
"@types/json-bigint": "^1.0.4",
+ "@types/lodash-es": "^4.17.12",
"@types/mousetrap": "^1.6.15",
"@types/node": "^26.0.0",
"@types/react": "^18.3.0",
@@ -44244,6 +44246,9 @@
"name": "@apache-superset/core",
"version": "0.1.0",
"license": "Apache-2.0",
+ "dependencies": {
+ "lodash-es": "^4.17.21"
+ },
"devDependencies": {
"@babel/cli": "^7.29.7",
"@babel/core": "^7.29.7",
@@ -44286,6 +44291,7 @@
"@apache-superset/core": "*",
"@types/react": "*",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"tinycolor2": "*"
},
"peerDependencies": {
@@ -44333,6 +44339,7 @@
"handlebars": "^4.7.9",
"jed": "^1.1.1",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"math-expression-evaluator": "^2.0.7",
"parse-ms": "^4.0.0",
"re-resizable": "^6.11.2",
@@ -44796,6 +44803,7 @@
"dompurify": "^3.4.11",
"fast-safe-stringify": "^2.1.1",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"nvd3-fork": "^2.0.5",
"prop-types": "^15.8.1",
"urijs": "^1.19.11"
@@ -44818,6 +44826,7 @@
"classnames": "^2.5.1",
"d3-array": "^3.2.4",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"memoize-one": "^6.0.0",
"react-table": "^7.8.0",
"regenerator-runtime": "^0.14.1",
@@ -44856,7 +44865,8 @@
"dependencies": {
"@types/geojson": "^7946.0.16",
"geojson": "^0.5.0",
- "lodash": "^4.18.1"
+ "lodash": "^4.18.1",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@ant-design/icons": "^5.6.1",
@@ -44886,6 +44896,7 @@
"acorn": "^8.17.0",
"d3-array": "^3.2.4",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"zod": "^4.4.3"
},
"peerDependencies": {
@@ -44929,7 +44940,8 @@
"dependencies": {
"currencyformatter.js": "^1.0.5",
"handlebars-group-by": "^1.0.1",
- "just-handlebars-helpers": "^1.0.19"
+ "just-handlebars-helpers": "^1.0.19",
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@types/jest": "^30.0.0",
@@ -45010,6 +45022,7 @@
"classnames": "^2.5.1",
"d3-array": "^3.2.4",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"memoize-one": "^6.0.0",
"react-table": "^7.8.0",
"regenerator-runtime": "^0.14.1",
@@ -45049,7 +45062,8 @@
"dependencies": {
"@types/d3-scale": "^4.0.9",
"d3-cloud": "^1.2.9",
- "d3-scale": "^4.0.2"
+ "d3-scale": "^4.0.2",
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@types/d3-cloud": "^1.2.9"
@@ -45098,6 +45112,7 @@
"d3-scale": "^4.0.2",
"handlebars": "^4.7.9",
"lodash": "^4.18.1",
+ "lodash-es": "^4.17.21",
"maplibre-gl": "^5.24.0",
"mousetrap": "^1.6.5",
"ngeohash": "^0.6.3",
@@ -45167,36 +45182,6 @@
"version": "1.0.0",
"extraneous": true,
"license": "Apache-2.0"
- },
- "node_modules/jsdom/node_modules/@noble/hashes": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
- "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 20.19.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/whatwg-url/node_modules/@noble/hashes": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
- "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 20.19.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
}
}
}
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 69025fcfb98..397d8261a6c 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -239,7 +239,8 @@
"use-query-params": "^2.2.2",
"uuid": "^14.0.0",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
- "yargs": "^18.0.0"
+ "yargs": "^18.0.0",
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@babel/cli": "^7.29.7",
@@ -372,7 +373,8 @@
"webpack-dev-server": "^5.2.5",
"webpack-manifest-plugin": "^6.0.1",
"webpack-sources": "^3.5.0",
- "webpack-visualizer-plugin2": "^2.0.0"
+ "webpack-visualizer-plugin2": "^2.0.0",
+ "@types/lodash-es": "^4.17.12"
},
"peerDependencies": {
"ace-builds": "^1.41.0",
diff --git a/superset-frontend/packages/superset-core/package.json b/superset-frontend/packages/superset-core/package.json
index c91754ab260..ddea4ffb3d5 100644
--- a/superset-frontend/packages/superset-core/package.json
+++ b/superset-frontend/packages/superset-core/package.json
@@ -120,5 +120,8 @@
},
"publishConfig": {
"access": "public"
+ },
+ "dependencies": {
+ "lodash-es": "^4.17.21"
}
}
diff --git a/superset-frontend/packages/superset-core/src/theme/Theme.tsx b/superset-frontend/packages/superset-core/src/theme/Theme.tsx
index d6ba80d1394..83e60c35c5c 100644
--- a/superset-frontend/packages/superset-core/src/theme/Theme.tsx
+++ b/superset-frontend/packages/superset-core/src/theme/Theme.tsx
@@ -25,7 +25,7 @@ import {
CacheProvider as EmotionCacheProvider,
} from '@emotion/react';
import createCache from '@emotion/cache';
-import { noop, mergeWith } from 'lodash';
+import { noop, mergeWith } from 'lodash-es';
import { GlobalStyles } from './GlobalStyles';
import {
AntdThemeConfig,
diff --git a/superset-frontend/packages/superset-core/src/utils/isBlank.ts b/superset-frontend/packages/superset-core/src/utils/isBlank.ts
index e409dabe529..0db22780c09 100644
--- a/superset-frontend/packages/superset-core/src/utils/isBlank.ts
+++ b/superset-frontend/packages/superset-core/src/utils/isBlank.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty, isNaN, isNil, isString, trim } from 'lodash';
+import { isEmpty, isNaN, isNil, isString, trim } from 'lodash-es';
/**
* Checks if a value is null, undefined, NaN, or a whitespace-only string.
diff --git a/superset-frontend/packages/superset-ui-chart-controls/package.json b/superset-frontend/packages/superset-ui-chart-controls/package.json
index 6a09858cbde..cb07a5dcb49 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/package.json
+++ b/superset-frontend/packages/superset-ui-chart-controls/package.json
@@ -27,7 +27,8 @@
"@apache-superset/core": "*",
"@types/react": "*",
"lodash": "^4.18.1",
- "tinycolor2": "*"
+ "tinycolor2": "*",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@ant-design/icons": "^5.6.1",
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/components/CertifiedIconWithTooltip.tsx b/superset-frontend/packages/superset-ui-chart-controls/src/components/CertifiedIconWithTooltip.tsx
index 03d7a70438b..93ad3c6d997 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/components/CertifiedIconWithTooltip.tsx
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/components/CertifiedIconWithTooltip.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { kebabCase } from 'lodash';
+import { kebabCase } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { useTheme, styled } from '@apache-superset/core/theme';
import { Tooltip } from '@superset-ui/core/components';
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 ee4238a857c..c242608e9ba 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
@@ -16,7 +16,7 @@
* specific language governing permissions and limitationsxw
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
ensureIsArray,
getMetricLabel,
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/sharedControls.tsx b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/sharedControls.tsx
index fdedfcac032..1bbe5e832bb 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/sharedControls.tsx
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/sharedControls.tsx
@@ -32,7 +32,7 @@
* here's a list of the keys that are common to all controls, and as a result define the
* control interface.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
getCategoricalSchemeRegistry,
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/utils/getColorFormatters.ts b/superset-frontend/packages/superset-ui-chart-controls/src/utils/getColorFormatters.ts
index dbff332cdc0..730d679c894 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/utils/getColorFormatters.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/utils/getColorFormatters.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import memoizeOne from 'memoize-one';
-import { isString, isBoolean } from 'lodash';
+import { isString, isBoolean } from 'lodash-es';
import { isBlank } from '@apache-superset/core/utils';
import { addAlpha, DataRecord } from '@superset-ui/core';
import tinycolor from 'tinycolor2';
diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/operators/histogramOperator.test.ts b/superset-frontend/packages/superset-ui-chart-controls/test/operators/histogramOperator.test.ts
index b4f76f42016..5636231da1d 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/test/operators/histogramOperator.test.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/test/operators/histogramOperator.test.ts
@@ -18,7 +18,7 @@
*/
import { histogramOperator } from '@superset-ui/chart-controls';
import { SqlaFormData, VizType } from '@superset-ui/core';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
const formData: SqlaFormData = {
bins: 5,
diff --git a/superset-frontend/packages/superset-ui-core/package.json b/superset-frontend/packages/superset-ui-core/package.json
index a3e74045600..eb695f8ff64 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -66,7 +66,8 @@
"reselect": "^5.2.0",
"rison": "^0.1.1",
"seedrandom": "^3.0.5",
- "xss": "^1.0.15"
+ "xss": "^1.0.15",
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@emotion/styled": "^11.14.1",
diff --git a/superset-frontend/packages/superset-ui-core/src/color/CategoricalColorNamespace.ts b/superset-frontend/packages/superset-ui-core/src/color/CategoricalColorNamespace.ts
index 9389ad549fd..00181d1d5f2 100644
--- a/superset-frontend/packages/superset-ui-core/src/color/CategoricalColorNamespace.ts
+++ b/superset-frontend/packages/superset-ui-core/src/color/CategoricalColorNamespace.ts
@@ -17,7 +17,7 @@
* under the License.
*/
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import CategoricalColorScale from './CategoricalColorScale';
import { ColorsLookup } from './types';
import getCategoricalSchemeRegistry from './CategoricalSchemeRegistrySingleton';
diff --git a/superset-frontend/packages/superset-ui-core/src/components/DropdownButton/index.tsx b/superset-frontend/packages/superset-ui-core/src/components/DropdownButton/index.tsx
index 2cfcf9badc7..e51ddf6ed70 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/DropdownButton/index.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/DropdownButton/index.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { Dropdown } from 'antd';
-import { kebabCase } from 'lodash';
+import { kebabCase } from 'lodash-es';
import { css, useTheme } from '@apache-superset/core/theme';
import { Tooltip } from '../Tooltip';
import type { DropdownButtonProps } from './types';
diff --git a/superset-frontend/packages/superset-ui-core/src/components/DropdownContainer/DropdownContainer.stories.tsx b/superset-frontend/packages/superset-ui-core/src/components/DropdownContainer/DropdownContainer.stories.tsx
index f70cbc094a6..c180b61858a 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/DropdownContainer/DropdownContainer.stories.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/DropdownContainer/DropdownContainer.stories.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { useRef, useCallback, useState } from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { css } from '@apache-superset/core/theme';
import { Button } from '../Button';
import { Select } from '../Select';
diff --git a/superset-frontend/packages/superset-ui-core/src/components/InfoTooltip/index.tsx b/superset-frontend/packages/superset-ui-core/src/components/InfoTooltip/index.tsx
index 171d7ab4790..e1212771edc 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/InfoTooltip/index.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/InfoTooltip/index.tsx
@@ -18,7 +18,7 @@
*/
import { KeyboardEvent, useMemo } from 'react';
import { SerializedStyles, CSSObject } from '@emotion/react';
-import { kebabCase } from 'lodash';
+import { kebabCase } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { css, useTheme, getFontSize } from '@apache-superset/core/theme';
import {
diff --git a/superset-frontend/packages/superset-ui-core/src/components/MetadataBar/MetadataBar.tsx b/superset-frontend/packages/superset-ui-core/src/components/MetadataBar/MetadataBar.tsx
index 50b2f3cac00..85f36163e81 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/MetadataBar/MetadataBar.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/MetadataBar/MetadataBar.tsx
@@ -18,7 +18,7 @@
*/
import { useCallback, useEffect, useRef, useState } from 'react';
import { useResizeDetector } from 'react-resize-detector';
-import { uniqWith } from 'lodash';
+import { uniqWith } from 'lodash-es';
import { styled } from '@apache-superset/core/theme';
import { Tooltip } from '../Tooltip';
import { TooltipPlacement } from '../Tooltip/types';
diff --git a/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx b/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
index 3901ac10690..0f0e73debff 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.tsx
@@ -24,7 +24,7 @@ import {
useState,
type ComponentType,
} from 'react';
-import { isNil } from 'lodash';
+import { isNil } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { css, styled, useTheme } from '@apache-superset/core/theme';
import { Modal as AntdModal, ModalProps as AntdModalProps } from 'antd';
diff --git a/superset-frontend/packages/superset-ui-core/src/components/SafeMarkdown/SafeMarkdown.tsx b/superset-frontend/packages/superset-ui-core/src/components/SafeMarkdown/SafeMarkdown.tsx
index e990d2a329b..e1de572eb09 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/SafeMarkdown/SafeMarkdown.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/SafeMarkdown/SafeMarkdown.tsx
@@ -22,7 +22,7 @@ import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
// remark-gfm v4+ requires react-markdown v9+, which requires React 18.
// Currently pinned to v3.0.1 for compatibility with react-markdown v8 and React 17.
import remarkGfm from 'remark-gfm';
-import { cloneDeep, mergeWith } from 'lodash';
+import { cloneDeep, mergeWith } from 'lodash-es';
import { FeatureFlag, isFeatureEnabled } from '../../utils';
interface SafeMarkdownProps {
diff --git a/superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.tsx b/superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.tsx
index 7d9079a0150..4104911fc12 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/Select/AsyncSelect.tsx
@@ -41,7 +41,7 @@ import {
LabeledValue as AntdLabeledValue,
RefSelectProps,
} from 'antd/es/select';
-import { debounce, isEqual, uniq } from 'lodash';
+import { debounce, isEqual, uniq } from 'lodash-es';
import { Constants, Icons } from '@superset-ui/core/components';
import { Space } from '../Space';
import {
diff --git a/superset-frontend/packages/superset-ui-core/src/components/Select/Select.tsx b/superset-frontend/packages/superset-ui-core/src/components/Select/Select.tsx
index 7f313f78c67..322a6188c5c 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/Select/Select.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/Select/Select.tsx
@@ -37,7 +37,7 @@ import {
LabeledValue as AntdLabeledValue,
RefSelectProps,
} from 'antd/es/select';
-import { debounce, isEqual, uniq } from 'lodash';
+import { debounce, isEqual, uniq } from 'lodash-es';
import {
dropDownRenderHelper,
getOption,
diff --git a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
index 371397773a1..df46330cd63 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { memo, useEffect, useRef, useMemo, useCallback, useState } from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { styled } from '@apache-superset/core/theme';
import { useFilters, useSortBy, useTable } from 'react-table';
import { Empty } from '@superset-ui/core/components';
diff --git a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
index 2f914531bb5..0716f16a8ac 100644
--- a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
+++ b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import _JSONbig from 'json-bigint';
-import { cloneDeepWith } from 'lodash';
+import { cloneDeepWith } from 'lodash-es';
import { ParseMethod, TextResponse, JsonResponse } from '../types';
diff --git a/superset-frontend/packages/superset-ui-core/src/query/normalizeOrderBy.ts b/superset-frontend/packages/superset-ui-core/src/query/normalizeOrderBy.ts
index 67945d6b013..8a67463580b 100644
--- a/superset-frontend/packages/superset-ui-core/src/query/normalizeOrderBy.ts
+++ b/superset-frontend/packages/superset-ui-core/src/query/normalizeOrderBy.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { QueryObject } from './types';
diff --git a/superset-frontend/packages/superset-ui-core/src/query/normalizeTimeColumn.ts b/superset-frontend/packages/superset-ui-core/src/query/normalizeTimeColumn.ts
index b5bde0c88db..5f200ab3fca 100644
--- a/superset-frontend/packages/superset-ui-core/src/query/normalizeTimeColumn.ts
+++ b/superset-frontend/packages/superset-ui-core/src/query/normalizeTimeColumn.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import {
AdhocColumn,
diff --git a/superset-frontend/packages/superset-ui-core/src/time-comparison/fetchTimeRange.ts b/superset-frontend/packages/superset-ui-core/src/time-comparison/fetchTimeRange.ts
index 61c2a2f8ad3..4389f271001 100644
--- a/superset-frontend/packages/superset-ui-core/src/time-comparison/fetchTimeRange.ts
+++ b/superset-frontend/packages/superset-ui-core/src/time-comparison/fetchTimeRange.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import rison from 'rison';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
SupersetClient,
getClientErrorObject,
diff --git a/superset-frontend/packages/superset-ui-core/src/time-comparison/getTimeOffset.ts b/superset-frontend/packages/superset-ui-core/src/time-comparison/getTimeOffset.ts
index b8f970dc100..9af5a86116c 100644
--- a/superset-frontend/packages/superset-ui-core/src/time-comparison/getTimeOffset.ts
+++ b/superset-frontend/packages/superset-ui-core/src/time-comparison/getTimeOffset.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { ensureIsArray } from '../utils';
import { customTimeRangeDecode } from './customTimeRangeDecode';
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/convertKeysToCamelCase.ts b/superset-frontend/packages/superset-ui-core/src/utils/convertKeysToCamelCase.ts
index fb39add6095..0317f8e348c 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/convertKeysToCamelCase.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/convertKeysToCamelCase.ts
@@ -17,7 +17,7 @@
* under the License.
*/
-import { camelCase, isPlainObject, mapKeys } from 'lodash';
+import { camelCase, isPlainObject, mapKeys } from 'lodash-es';
export default function convertKeysToCamelCase<T>(object: T) {
if (object === null || object === undefined) {
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/merge.ts b/superset-frontend/packages/superset-ui-core/src/utils/merge.ts
index bde3783f908..1114e683717 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/merge.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/merge.ts
@@ -17,7 +17,7 @@
* under the License.
*/
-import { mergeWith } from 'lodash';
+import { mergeWith } from 'lodash-es';
/**
* Merges objects using lodash.mergeWith, but replaces arrays instead of concatenating them.
diff --git a/superset-frontend/packages/superset-ui-core/test/components/SafeMarkdown.test.tsx b/superset-frontend/packages/superset-ui-core/test/components/SafeMarkdown.test.tsx
index d3209e6907c..ddc87280029 100644
--- a/superset-frontend/packages/superset-ui-core/test/components/SafeMarkdown.test.tsx
+++ b/superset-frontend/packages/superset-ui-core/test/components/SafeMarkdown.test.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { render } from '@testing-library/react';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { defaultSchema } from 'rehype-sanitize';
import {
getOverrideHtmlSchema,
diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json b/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
index 7676c10473c..1203935290a 100644
--- a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
+++ b/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
@@ -36,7 +36,8 @@
"nvd3-fork": "^2.0.5",
"dompurify": "^3.4.11",
"prop-types": "^15.8.1",
- "urijs": "^1.19.11"
+ "urijs": "^1.19.11",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@apache-superset/core": "*",
diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts
index 23b779e09e4..a34e61e68f3 100644
--- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts
+++ b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts
@@ -18,7 +18,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { kebabCase, throttle } from 'lodash';
+import { kebabCase, throttle } from 'lodash-es';
import d3 from 'd3';
import utc from 'dayjs/plugin/utc';
import nv from 'nvd3-fork';
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json b/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json
index a92989b92af..39952a635d9 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json
@@ -32,7 +32,8 @@
"memoize-one": "^6.0.0",
"react-table": "^7.8.0",
"regenerator-runtime": "^0.14.1",
- "xss": "^1.0.15"
+ "xss": "^1.0.15",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@ant-design/icons": "^5.6.1",
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTable/index.tsx b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTable/index.tsx
index ebb66b0db28..0dc74c8ac58 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTable/index.tsx
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTable/index.tsx
@@ -50,7 +50,7 @@ import {
JsonObject,
} from '@superset-ui/core';
import { SearchOutlined } from '@ant-design/icons';
-import { debounce, isEqual } from 'lodash';
+import { debounce, isEqual } from 'lodash-es';
import Pagination from './components/Pagination';
import SearchSelectDropdown from './components/SearchSelectDropdown';
import { SearchOption, SortByItem } from '../types';
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTableChart.tsx b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTableChart.tsx
index 24bc28e5322..44f2e5ad966 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTableChart.tsx
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/AgGridTableChart.tsx
@@ -24,7 +24,7 @@ import {
} from '@superset-ui/core';
import { GenericDataType } from '@apache-superset/core/common';
import { useCallback, useEffect, useRef, useState, useMemo } from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
CellClickedEvent,
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts
index 9753fa01571..36fe1f91ef8 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts
@@ -38,7 +38,7 @@ import {
isTimeComparison,
timeCompareOperator,
} from '@superset-ui/chart-controls';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { TableChartFormData } from './types';
import { updateTableOwnState } from './utils/externalAPIs';
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx
index 6759e95052a..e219c495d2b 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/controlPanel.tsx
@@ -55,7 +55,7 @@ import {
withLabel,
} from '@superset-ui/core';
import { GenericDataType } from '@apache-superset/core/common';
-import { isEmpty, last } from 'lodash';
+import { isEmpty, last } from 'lodash-es';
import { PAGE_SIZE_OPTIONS, SERVER_PAGE_SIZE_OPTIONS } from './consts';
/**
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts
index 1ad19b06b57..4a3585effaf 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/transformProps.ts
@@ -38,7 +38,7 @@ import {
AgGridFilterModel,
} from '@superset-ui/core';
import { GenericDataType } from '@apache-superset/core/common';
-import { isEmpty, isEqual, merge } from 'lodash';
+import { isEmpty, isEqual, merge } from 'lodash-es';
import {
ConditionalFormattingConfig,
getColorFormatters,
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/extent.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/extent.ts
index 4b326800d2f..183dd9eb077 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/extent.ts
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/extent.ts
@@ -17,7 +17,7 @@
* under the License.
*/
-import { isNil } from 'lodash';
+import { isNil } from 'lodash-es';
export default function extent<T = number | string | Date | undefined | null>(
values: T[],
diff --git a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/getInitialFilterModel.ts b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/getInitialFilterModel.ts
index bfe3c054be4..1e0f5a51d7e 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/getInitialFilterModel.ts
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/getInitialFilterModel.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import type { AgGridChartState } from '@superset-ui/core';
const getInitialFilterModel = (
diff --git a/superset-frontend/plugins/plugin-chart-cartodiagram/package.json b/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
index 994c3e10214..527b089858e 100644
--- a/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
+++ b/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
@@ -31,7 +31,8 @@
"dependencies": {
"@types/geojson": "^7946.0.16",
"geojson": "^0.5.0",
- "lodash": "^4.18.1"
+ "lodash": "^4.18.1",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@ant-design/icons": "^5.6.1",
diff --git a/superset-frontend/plugins/plugin-chart-cartodiagram/src/components/OlChartMap.tsx b/superset-frontend/plugins/plugin-chart-cartodiagram/src/components/OlChartMap.tsx
index 89b097e8992..8c16e2bd2b9 100644
--- a/superset-frontend/plugins/plugin-chart-cartodiagram/src/components/OlChartMap.tsx
+++ b/superset-frontend/plugins/plugin-chart-cartodiagram/src/components/OlChartMap.tsx
@@ -24,7 +24,7 @@ import { View } from 'ol';
import BaseEvent from 'ol/events/Event';
import { unByKey } from 'ol/Observable';
import { toLonLat } from 'ol/proj';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { fitMapToCharts } from '../util/mapUtil';
import { ChartLayer } from './ChartLayer';
import { createLayer } from '../util/layerUtil';
diff --git a/superset-frontend/plugins/plugin-chart-cartodiagram/src/util/transformPropsUtil.ts b/superset-frontend/plugins/plugin-chart-cartodiagram/src/util/transformPropsUtil.ts
index fb416005739..0ab23b643c8 100644
--- a/superset-frontend/plugins/plugin-chart-cartodiagram/src/util/transformPropsUtil.ts
+++ b/superset-frontend/plugins/plugin-chart-cartodiagram/src/util/transformPropsUtil.ts
@@ -22,7 +22,7 @@ import {
convertKeysToCamelCase,
DataRecord,
} from '@superset-ui/core';
-import { isObject } from 'lodash';
+import { isObject } from 'lodash-es';
import {
LocationConfigMapping,
SelectedChartConfig,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/package.json b/superset-frontend/plugins/plugin-chart-echarts/package.json
index a1467781349..6699199f487 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/package.json
+++ b/superset-frontend/plugins/plugin-chart-echarts/package.json
@@ -29,7 +29,8 @@
"acorn": "^8.17.0",
"d3-array": "^3.2.4",
"lodash": "^4.18.1",
- "zod": "^4.4.3"
+ "zod": "^4.4.3",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@apache-superset/core": "*",
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx
index 209c4a20748..4af6f5d221e 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx
@@ -29,7 +29,7 @@ import {
DEFAULT_DATE_PATTERN,
ColorSchemeEnum,
} from '@superset-ui/chart-controls';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
PopKPIComparisonSymbolStyleProps,
PopKPIComparisonValueStyleProps,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
index cb185ef8540..0b6a49eb02c 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
@@ -26,7 +26,7 @@ import {
isTimeComparison,
timeCompareOperator,
} from '@superset-ui/chart-controls';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
export default function buildQuery(formData: QueryFormData) {
const { cols: groupby, extra_form_data } = formData;
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
index 9da2cfa8e2e..b11d373324a 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
@@ -25,7 +25,7 @@ import {
sections,
ColorSchemeEnum,
} from '@superset-ui/chart-controls';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
import {
headerFontSize,
subheaderFontSize,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/useOverflowDetection.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/useOverflowDetection.ts
index 42cda225d3c..9e5be864628 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/useOverflowDetection.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/useOverflowDetection.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { useEffect, useRef, useState } from 'react';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
export const useOverflowDetection = (flexGap: number) => {
const symbolContainerRef = useRef<HTMLDivElement>(null);
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Gauge/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Gauge/transformProps.ts
index c879557ba75..dceb4927d02 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Gauge/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Gauge/transformProps.ts
@@ -30,7 +30,7 @@ import type { EChartsCoreOption } from 'echarts/core';
import type { GaugeSeriesOption } from 'echarts/charts';
import type { GaugeDataItemOption } from 'echarts/types/src/chart/gauge/GaugeSeries';
import type { CallbackDataParams } from 'echarts/types/src/util/types';
-import { range } from 'lodash';
+import { range } from 'lodash-es';
import { parseNumbersList } from '../utils/controls';
import {
DEFAULT_FORM_DATA as DEFAULT_GAUGE_FORM_DATA,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/transformProps.ts
index cb2d250dd04..ae90acb2d85 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/transformProps.ts
@@ -32,7 +32,7 @@ import {
import { logging } from '@apache-superset/core/utils';
import { GenericDataType } from '@apache-superset/core/common';
import memoizeOne from 'memoize-one';
-import { maxBy, minBy } from 'lodash';
+import { maxBy, minBy } from 'lodash-es';
import type { ComposeOption } from 'echarts/core';
import type { HeatmapSeriesOption } from 'echarts/charts';
import type { CallbackDataParams } from 'echarts/types/src/util/types';
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Histogram/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Histogram/transformProps.ts
index 28d2a93e6d1..f562e46fb58 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Histogram/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Histogram/transformProps.ts
@@ -20,7 +20,7 @@ import type { ComposeOption } from 'echarts/core';
import type { BarSeriesOption } from 'echarts/charts';
import type { GridComponentOption } from 'echarts/components';
import type { CallbackDataParams } from 'echarts/types/src/util/types';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
CategoricalColorNamespace,
NumberFormats,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/controlPanel.tsx b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/controlPanel.tsx
index 3cb27c928bc..a3f9b9a6ada 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/controlPanel.tsx
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/controlPanel.tsx
@@ -18,7 +18,7 @@
*/
import { t } from '@apache-superset/core/translation';
import { ensureIsArray } from '@superset-ui/core';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import {
ControlPanelsContainerProps,
ControlPanelConfig,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts
index 14805e9ba6f..9654981c226 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/transformProps.ts
@@ -17,7 +17,7 @@
* under the License.
*/
/* eslint-disable camelcase */
-import { invert } from 'lodash';
+import { invert } from 'lodash-es';
import {
AnnotationLayer,
AxisType,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts
index 089167f3945..c8335fb727d 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/transformProps.ts
@@ -17,7 +17,7 @@
* under the License.
*/
/* eslint-disable camelcase */
-import { invert } from 'lodash';
+import { invert } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
AnnotationLayer,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/utils/annotation.ts b/superset-frontend/plugins/plugin-chart-echarts/src/utils/annotation.ts
index 90a450c3c3a..0b319b5f55a 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/utils/annotation.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/utils/annotation.ts
@@ -17,7 +17,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
Annotation,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/utils/series.ts b/superset-frontend/plugins/plugin-chart-echarts/src/utils/series.ts
index a8c80303ced..535a310dcc5 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/utils/series.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/utils/series.ts
@@ -37,7 +37,7 @@ import { SortSeriesType, LegendPaddingType } from '@superset-ui/chart-controls';
import { format } from 'echarts/core';
import type { LegendComponentOption } from 'echarts/components';
import type { SeriesOption } from 'echarts';
-import { isEmpty, maxBy, meanBy, minBy, orderBy, sumBy } from 'lodash';
+import { isEmpty, maxBy, meanBy, minBy, orderBy, sumBy } from 'lodash-es';
import {
NULL_STRING,
StackControlsValue,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/utils/themeOverrides.ts b/superset-frontend/plugins/plugin-chart-echarts/src/utils/themeOverrides.ts
index 46789d5b8a7..d4f266860f7 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/utils/themeOverrides.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/utils/themeOverrides.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { mergeWith, isPlainObject } from 'lodash';
+import { mergeWith, isPlainObject } from 'lodash-es';
/**
* Custom merge function for ECharts theme overrides.
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/utils/treeBuilder.ts b/superset-frontend/plugins/plugin-chart-echarts/src/utils/treeBuilder.ts
index d932da03369..a0fbb34640f 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/utils/treeBuilder.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/utils/treeBuilder.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { DataRecord, DataRecordValue } from '@superset-ui/core';
-import { groupBy as _groupBy, transform } from 'lodash';
+import { groupBy as _groupBy, transform } from 'lodash-es';
export type TreeNode = {
name: DataRecordValue;
@@ -95,8 +95,6 @@ export function treeBuilder(
// is dropped too: keeping it would leave a zero-value arc that yields a NaN
// secondaryValue/value ratio for coloring and tooltips.
return filterNullNames
- ? nodes.filter(
- node => node.name !== null && node.children?.length !== 0,
- )
+ ? nodes.filter(node => node.name !== null && node.children?.length !== 0)
: nodes;
}
diff --git a/superset-frontend/plugins/plugin-chart-handlebars/package.json b/superset-frontend/plugins/plugin-chart-handlebars/package.json
index f9931d1800e..88f21a811f4 100644
--- a/superset-frontend/plugins/plugin-chart-handlebars/package.json
+++ b/superset-frontend/plugins/plugin-chart-handlebars/package.json
@@ -29,7 +29,8 @@
"dependencies": {
"currencyformatter.js": "^1.0.5",
"handlebars-group-by": "^1.0.1",
- "just-handlebars-helpers": "^1.0.19"
+ "just-handlebars-helpers": "^1.0.19",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@superset-ui/chart-controls": "*",
diff --git a/superset-frontend/plugins/plugin-chart-handlebars/src/components/Handlebars/HandlebarsViewer.tsx b/superset-frontend/plugins/plugin-chart-handlebars/src/components/Handlebars/HandlebarsViewer.tsx
index 828c7f906ed..389b5d22114 100644
--- a/superset-frontend/plugins/plugin-chart-handlebars/src/components/Handlebars/HandlebarsViewer.tsx
+++ b/superset-frontend/plugins/plugin-chart-handlebars/src/components/Handlebars/HandlebarsViewer.tsx
@@ -22,7 +22,7 @@ import { SafeMarkdown } from '@superset-ui/core/components';
import { extendedDayjs as dayjs } from '@superset-ui/core/utils/dates';
import Handlebars from 'handlebars';
import { useMemo, useState } from 'react';
-import { isPlainObject } from 'lodash';
+import { isPlainObject } from 'lodash-es';
import Helpers from 'just-handlebars-helpers';
import HandlebarsGroupBy from 'handlebars-group-by';
diff --git a/superset-frontend/plugins/plugin-chart-handlebars/src/consts.ts b/superset-frontend/plugins/plugin-chart-handlebars/src/consts.ts
index 8b722af5435..4177b38e560 100644
--- a/superset-frontend/plugins/plugin-chart-handlebars/src/consts.ts
+++ b/superset-frontend/plugins/plugin-chart-handlebars/src/consts.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { Constants } from '@superset-ui/core/components';
export const debounceFunc = debounce(
diff --git a/superset-frontend/plugins/plugin-chart-handlebars/src/plugin/controls/orderBy.tsx b/superset-frontend/plugins/plugin-chart-handlebars/src/plugin/controls/orderBy.tsx
index cd46e8a3880..4740af0c1a6 100644
--- a/superset-frontend/plugins/plugin-chart-handlebars/src/plugin/controls/orderBy.tsx
+++ b/superset-frontend/plugins/plugin-chart-handlebars/src/plugin/controls/orderBy.tsx
@@ -18,7 +18,7 @@
*/
import { ControlSetItem, Dataset } from '@superset-ui/chart-controls';
import { t } from '@apache-superset/core/translation';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { isAggMode, isRawMode } from './shared';
export const orderByControlSetItem: ControlSetItem = {
diff --git a/superset-frontend/plugins/plugin-chart-table/package.json b/superset-frontend/plugins/plugin-chart-table/package.json
index da653a22c4c..29bce06ae29 100644
--- a/superset-frontend/plugins/plugin-chart-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-table/package.json
@@ -32,7 +32,8 @@
"memoize-one": "^6.0.0",
"react-table": "^7.8.0",
"regenerator-runtime": "^0.14.1",
- "xss": "^1.0.15"
+ "xss": "^1.0.15",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@ant-design/icons": "^5.6.1",
diff --git a/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx b/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
index 0c9a1dff575..a40d91b0d7d 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/DataTable/DataTable.tsx
@@ -43,7 +43,7 @@ import {
Row,
} from 'react-table';
import { matchSorter, rankings } from 'match-sorter';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { Flex, Space } from '@superset-ui/core/components';
import GlobalFilter, { GlobalFilterProps } from './components/GlobalFilter';
import SelectPageSize, {
diff --git a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
index 0898f227217..ce533a13c51 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
@@ -75,7 +75,7 @@ import {
PlusCircleOutlined,
TableOutlined,
} from '@ant-design/icons';
-import { isEmpty, debounce, isEqual } from 'lodash';
+import { isEmpty, debounce, isEqual } from 'lodash-es';
import {
ColorFormatters,
getTextColorForBackground,
diff --git a/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts b/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts
index 37687c0cf96..d74c097e80d 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts
+++ b/superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts
@@ -34,7 +34,7 @@ import {
isTimeComparison,
timeCompareOperator,
} from '@superset-ui/chart-controls';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { TableChartFormData } from './types';
import { updateTableOwnState } from './DataTable/utils/externalAPIs';
diff --git a/superset-frontend/plugins/plugin-chart-table/src/controlPanel.tsx b/superset-frontend/plugins/plugin-chart-table/src/controlPanel.tsx
index 2801f1478e0..5a81e4ff526 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/controlPanel.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/controlPanel.tsx
@@ -57,7 +57,7 @@ import {
withLabel,
} from '@superset-ui/core';
import { GenericDataType } from '@apache-superset/core/common';
-import { isEmpty, last } from 'lodash';
+import { isEmpty, last } from 'lodash-es';
import { PAGE_SIZE_OPTIONS, SERVER_PAGE_SIZE_OPTIONS } from './consts';
function getQueryMode(controls: ControlStateMapping): QueryMode {
diff --git a/superset-frontend/plugins/plugin-chart-table/src/transformProps.ts b/superset-frontend/plugins/plugin-chart-table/src/transformProps.ts
index ffa23217f68..a1bef459def 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-table/src/transformProps.ts
@@ -45,7 +45,7 @@ import {
ColorSchemeEnum,
} from '@superset-ui/chart-controls';
-import { isEmpty, merge } from 'lodash';
+import { isEmpty, merge } from 'lodash-es';
import isEqualColumns from './utils/isEqualColumns';
import DateWithFormatter from './utils/DateWithFormatter';
import {
diff --git a/superset-frontend/plugins/plugin-chart-table/src/utils/extent.ts b/superset-frontend/plugins/plugin-chart-table/src/utils/extent.ts
index 4b326800d2f..183dd9eb077 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/utils/extent.ts
+++ b/superset-frontend/plugins/plugin-chart-table/src/utils/extent.ts
@@ -17,7 +17,7 @@
* under the License.
*/
-import { isNil } from 'lodash';
+import { isNil } from 'lodash-es';
export default function extent<T = number | string | Date | undefined | null>(
values: T[],
diff --git a/superset-frontend/plugins/plugin-chart-table/test/TableChart.test.tsx b/superset-frontend/plugins/plugin-chart-table/test/TableChart.test.tsx
index 7a12f25ec92..5dbeba45635 100644
--- a/superset-frontend/plugins/plugin-chart-table/test/TableChart.test.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/test/TableChart.test.tsx
@@ -29,7 +29,7 @@ import {
waitFor,
within,
} from '@superset-ui/core/spec';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import {
QueryMode,
TimeGranularity,
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/package.json b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
index 9d803d101c9..a269d73e448 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/package.json
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
@@ -31,7 +31,8 @@
"dependencies": {
"@types/d3-scale": "^4.0.9",
"d3-cloud": "^1.2.9",
- "d3-scale": "^4.0.2"
+ "d3-scale": "^4.0.2",
+ "lodash-es": "^4.17.21"
},
"peerDependencies": {
"@apache-superset/core": "*",
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
index 75736057c19..58f831fca4a 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
@@ -21,7 +21,7 @@ import cloudLayout from 'd3-cloud';
import { scaleLinear } from 'd3-scale';
import { seed, CategoricalColorNamespace } from '@superset-ui/core';
import { SupersetTheme, withTheme } from '@apache-superset/core/theme';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
const seedRandom = seed('superset-ui');
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/controls/ColorSchemeControl/index.tsx b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/controls/ColorSchemeControl/index.tsx
index b10654aa270..13083b1146c 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/controls/ColorSchemeControl/index.tsx
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/controls/ColorSchemeControl/index.tsx
@@ -27,7 +27,7 @@ import {
CategoricalColorNamespace,
} from '@superset-ui/core';
import { css, useTheme } from '@apache-superset/core/theme';
-import { sortBy } from 'lodash';
+import { sortBy } from 'lodash-es';
import { ControlHeader } from '@superset-ui/chart-controls';
import {
Tooltip,
diff --git a/superset-frontend/plugins/preset-chart-deckgl/package.json b/superset-frontend/plugins/preset-chart-deckgl/package.json
index ca416c8ad02..75273b191a7 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/package.json
+++ b/superset-frontend/plugins/preset-chart-deckgl/package.json
@@ -53,7 +53,8 @@
"tinycolor2": "^1.6.0",
"underscore": "^1.13.7",
"urijs": "^1.19.11",
- "xss": "^1.0.15"
+ "xss": "^1.0.15",
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@types/mapbox__geojson-extent": "^1.0.3",
diff --git a/superset-frontend/plugins/preset-chart-deckgl/src/DeckGLContainer.tsx b/superset-frontend/plugins/preset-chart-deckgl/src/DeckGLContainer.tsx
index 9fc884a479c..3a4112478d4 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/src/DeckGLContainer.tsx
+++ b/superset-frontend/plugins/preset-chart-deckgl/src/DeckGLContainer.tsx
@@ -27,7 +27,7 @@ import {
useState,
isValidElement,
} from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { Map as MapLibreMap } from 'react-map-gl/maplibre';
import { Map as MapboxMap } from 'react-map-gl/mapbox';
import mapboxgl from 'mapbox-gl';
diff --git a/superset-frontend/plugins/preset-chart-deckgl/src/Multi/Multi.tsx b/superset-frontend/plugins/preset-chart-deckgl/src/Multi/Multi.tsx
index 690e4e57db6..f2d221b09c5 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/src/Multi/Multi.tsx
+++ b/superset-frontend/plugins/preset-chart-deckgl/src/Multi/Multi.tsx
@@ -21,7 +21,7 @@
*/
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { useSelector } from 'react-redux';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { createSelector } from '@reduxjs/toolkit';
import {
AdhocFilter,
diff --git a/superset-frontend/plugins/preset-chart-deckgl/src/factory.tsx b/superset-frontend/plugins/preset-chart-deckgl/src/factory.tsx
index d80f25502bb..ec38466c079 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/src/factory.tsx
+++ b/superset-frontend/plugins/preset-chart-deckgl/src/factory.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { memo, useCallback, useEffect, useRef, useState } from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import type { Layer } from '@deck.gl/core';
import { getMapboxApiKey } from './utils/mapbox';
import {
diff --git a/superset-frontend/plugins/preset-chart-deckgl/src/utilities/HandlebarsRenderer.tsx b/superset-frontend/plugins/preset-chart-deckgl/src/utilities/HandlebarsRenderer.tsx
index a6d0a0fdc36..083b5afd3ab 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/src/utilities/HandlebarsRenderer.tsx
+++ b/superset-frontend/plugins/preset-chart-deckgl/src/utilities/HandlebarsRenderer.tsx
@@ -22,7 +22,7 @@ import { sanitizeHtml } from '@superset-ui/core';
import { styled } from '@apache-superset/core/theme';
import { extendedDayjs as dayjs } from '@superset-ui/core/utils/dates';
import Handlebars from 'handlebars';
-import { isPlainObject } from 'lodash';
+import { isPlainObject } from 'lodash-es';
export interface HandlebarsRendererProps {
templateSource: string;
diff --git a/superset-frontend/plugins/preset-chart-deckgl/src/utilities/TooltipTemplateControl.tsx b/superset-frontend/plugins/preset-chart-deckgl/src/utilities/TooltipTemplateControl.tsx
index 94bdc970806..2bde85469d8 100644
--- a/superset-frontend/plugins/preset-chart-deckgl/src/utilities/TooltipTemplateControl.tsx
+++ b/superset-frontend/plugins/preset-chart-deckgl/src/utilities/TooltipTemplateControl.tsx
@@ -18,7 +18,7 @@
*/
import { useCallback } from 'react';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { useTheme } from '@apache-superset/core/theme';
import { InfoTooltip, Constants } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.ts b/superset-frontend/src/SqlLab/actions/sqlLab.ts
index 072bfd05260..42331f1364e 100644
--- a/superset-frontend/src/SqlLab/actions/sqlLab.ts
+++ b/superset-frontend/src/SqlLab/actions/sqlLab.ts
@@ -29,7 +29,7 @@ import {
getClientErrorObject,
} from '@superset-ui/core';
import { t } from '@apache-superset/core/translation';
-import { invert, mapKeys } from 'lodash';
+import { invert, mapKeys } from 'lodash-es';
import { now } from '@superset-ui/core/utils/dates';
import {
diff --git a/superset-frontend/src/SqlLab/components/App/index.tsx b/superset-frontend/src/SqlLab/components/App/index.tsx
index eb5645b9aca..5c1e40b10b6 100644
--- a/superset-frontend/src/SqlLab/components/App/index.tsx
+++ b/superset-frontend/src/SqlLab/components/App/index.tsx
@@ -22,7 +22,7 @@ import { Redirect } from 'react-router-dom';
import Mousetrap from 'mousetrap';
import { t } from '@apache-superset/core/translation';
import { css, styled } from '@apache-superset/core/theme';
-import { throttle } from 'lodash';
+import { throttle } from 'lodash-es';
import {
LOCALSTORAGE_MAX_USAGE_KB,
LOCALSTORAGE_WARNING_THRESHOLD,
diff --git a/superset-frontend/src/SqlLab/components/AppLayout/index.tsx b/superset-frontend/src/SqlLab/components/AppLayout/index.tsx
index 38786b8d511..55fdd413f4f 100644
--- a/superset-frontend/src/SqlLab/components/AppLayout/index.tsx
+++ b/superset-frontend/src/SqlLab/components/AppLayout/index.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { useSelector } from 'react-redux';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
import type { SqlLabRootState } from 'src/SqlLab/types';
import { css, styled } from '@apache-superset/core/theme';
import { useComponentDidUpdate } from '@superset-ui/core';
diff --git a/superset-frontend/src/SqlLab/components/PopEditorTab/index.tsx b/superset-frontend/src/SqlLab/components/PopEditorTab/index.tsx
index c8b937db206..4d49112a80b 100644
--- a/superset-frontend/src/SqlLab/components/PopEditorTab/index.tsx
+++ b/superset-frontend/src/SqlLab/components/PopEditorTab/index.tsx
@@ -20,7 +20,7 @@ import { useEffect, useState } from 'react';
import { useSelector } from 'react-redux';
import { useAppDispatch } from 'src/SqlLab/hooks/useAppDispatch';
import URI from 'urijs';
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
import { useComponentDidUpdate } from '@superset-ui/core';
import { Skeleton } from '@superset-ui/core/components';
import useEffectEvent from 'src/hooks/useEffectEvent';
diff --git a/superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.tsx b/superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.tsx
index 4203a544c37..c2b559826fa 100644
--- a/superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.tsx
+++ b/superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.tsx
@@ -19,7 +19,7 @@
import { useRef } from 'react';
import { useSelector } from 'react-redux';
import { useAppDispatch } from 'src/SqlLab/hooks/useAppDispatch';
-import { isObject } from 'lodash';
+import { isObject } from 'lodash-es';
import rison from 'rison';
import {
SupersetClient,
diff --git a/superset-frontend/src/SqlLab/components/QueryHistory/index.tsx b/superset-frontend/src/SqlLab/components/QueryHistory/index.tsx
index 1e58a30f5c5..d41c13fe750 100644
--- a/superset-frontend/src/SqlLab/components/QueryHistory/index.tsx
+++ b/superset-frontend/src/SqlLab/components/QueryHistory/index.tsx
@@ -19,7 +19,7 @@
import { useEffect, useMemo, useState } from 'react';
import { shallowEqual, useSelector } from 'react-redux';
import { useInView } from 'react-intersection-observer';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import { EmptyState, Skeleton } from '@superset-ui/core/components';
import { t } from '@apache-superset/core/translation';
import { FeatureFlag, isFeatureEnabled } from '@superset-ui/core';
diff --git a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
index a227566f60f..732d1dec8f9 100644
--- a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
+++ b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx
@@ -31,7 +31,7 @@ import AutoSizer from 'react-virtualized-auto-sizer';
import { shallowEqual, useSelector } from 'react-redux';
import { useAppDispatch } from 'src/SqlLab/hooks/useAppDispatch';
import { useHistory } from 'react-router-dom';
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
import {
Button,
ButtonGroup,
diff --git a/superset-frontend/src/SqlLab/components/SaveDatasetModal/index.tsx b/superset-frontend/src/SqlLab/components/SaveDatasetModal/index.tsx
index a1aa08b277f..e1de7b46634 100644
--- a/superset-frontend/src/SqlLab/components/SaveDatasetModal/index.tsx
+++ b/superset-frontend/src/SqlLab/components/SaveDatasetModal/index.tsx
@@ -56,7 +56,7 @@ import {
import { mountExploreUrl } from 'src/explore/exploreUtils';
import { postFormData } from 'src/explore/exploreUtils/formData';
import { URL_PARAMS } from 'src/constants';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { clearDatasetCache } from 'src/utils/cachedSupersetGet';
interface QueryDatabase {
diff --git a/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx b/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
index 055abb3f31f..abe7f9cf903 100644
--- a/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
+++ b/superset-frontend/src/SqlLab/components/ShareSqlLabQuery/ShareSqlLabQuery.test.tsx
@@ -29,7 +29,7 @@ import {
} from 'spec/helpers/testing-library';
import ShareSqlLabQuery from 'src/SqlLab/components/ShareSqlLabQuery';
import { initialState } from 'src/SqlLab/fixtures';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
const mockStore = configureStore([thunk]);
const defaultProps = {
diff --git a/superset-frontend/src/SqlLab/components/SqlEditor/index.tsx b/superset-frontend/src/SqlLab/components/SqlEditor/index.tsx
index d4d7b6a14c6..f95b4bb32d4 100644
--- a/superset-frontend/src/SqlLab/components/SqlEditor/index.tsx
+++ b/superset-frontend/src/SqlLab/components/SqlEditor/index.tsx
@@ -49,7 +49,7 @@ import type {
CursorPosition,
} from 'src/SqlLab/types';
import type { DatabaseObject } from 'src/features/databases/types';
-import { debounce, isEmpty } from 'lodash';
+import { debounce, isEmpty } from 'lodash-es';
import Mousetrap from 'mousetrap';
import {
Button,
diff --git a/superset-frontend/src/SqlLab/components/TemplateParamsEditor/index.tsx b/superset-frontend/src/SqlLab/components/TemplateParamsEditor/index.tsx
index e966f426fa8..b0fe667d80b 100644
--- a/superset-frontend/src/SqlLab/components/TemplateParamsEditor/index.tsx
+++ b/superset-frontend/src/SqlLab/components/TemplateParamsEditor/index.tsx
@@ -19,7 +19,7 @@
import { useState, useEffect } from 'react';
import { t } from '@apache-superset/core/translation';
import { styled } from '@apache-superset/core/theme';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import {
Badge,
InfoTooltip,
diff --git a/superset-frontend/src/SqlLab/hooks/useQueryEditor/index.ts b/superset-frontend/src/SqlLab/hooks/useQueryEditor/index.ts
index 2845fe90349..b020d4ce3dc 100644
--- a/superset-frontend/src/SqlLab/hooks/useQueryEditor/index.ts
+++ b/superset-frontend/src/SqlLab/hooks/useQueryEditor/index.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
import { useMemo } from 'react';
import { shallowEqual, useSelector } from 'react-redux';
import { SqlLabRootState, QueryEditor } from 'src/SqlLab/types';
diff --git a/superset-frontend/src/SqlLab/middlewares/persistSqlLabStateEnhancer.ts b/superset-frontend/src/SqlLab/middlewares/persistSqlLabStateEnhancer.ts
index 730482cf6be..fdd7cbefe91 100644
--- a/superset-frontend/src/SqlLab/middlewares/persistSqlLabStateEnhancer.ts
+++ b/superset-frontend/src/SqlLab/middlewares/persistSqlLabStateEnhancer.ts
@@ -18,7 +18,7 @@
*/
import type { StoreEnhancer } from 'redux';
import persistState from 'redux-localstorage';
-import { pickBy } from 'lodash';
+import { pickBy } from 'lodash-es';
import { isFeatureEnabled, FeatureFlag } from '@superset-ui/core';
import { filterUnsavedQueryEditorList } from 'src/SqlLab/components/EditorAutoSync';
import type {
diff --git a/superset-frontend/src/SqlLab/reducers/sqlLab.ts b/superset-frontend/src/SqlLab/reducers/sqlLab.ts
index 4bafa1d705b..b4b511c635a 100644
--- a/superset-frontend/src/SqlLab/reducers/sqlLab.ts
+++ b/superset-frontend/src/SqlLab/reducers/sqlLab.ts
@@ -18,7 +18,7 @@
*/
import { normalizeTimestamp, QueryState } from '@superset-ui/core';
import { t } from '@apache-superset/core/translation';
-import { isEqual, omit } from 'lodash';
+import { isEqual, omit } from 'lodash-es';
import { shallowEqual } from 'react-redux';
import { now } from '@superset-ui/core/utils/dates';
import type { SqlLabRootState, QueryEditor, Table } from '../types';
diff --git a/superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.ts b/superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.ts
index 683b082b38c..427f9ceebc9 100644
--- a/superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.ts
+++ b/superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.ts
@@ -29,7 +29,7 @@ import type {
Table,
} from 'src/SqlLab/types';
import type { ThunkDispatch } from 'redux-thunk';
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
import { tableApiUtil } from 'src/hooks/apiResources/tables';
import {
BYTES_PER_CHAR,
diff --git a/superset-frontend/src/components/AlteredSliceTag/index.tsx b/superset-frontend/src/components/AlteredSliceTag/index.tsx
index 0637bba6006..7bc1c62f69a 100644
--- a/superset-frontend/src/components/AlteredSliceTag/index.tsx
+++ b/superset-frontend/src/components/AlteredSliceTag/index.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { useEffect, useMemo, useState, FC } from 'react';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import getControlsForVizType from 'src/utils/getControlsForVizType';
import {
diff --git a/superset-frontend/src/components/Chart/ChartRenderer.tsx b/superset-frontend/src/components/Chart/ChartRenderer.tsx
index 90a35d75a45..52f0d3a4d9d 100644
--- a/superset-frontend/src/components/Chart/ChartRenderer.tsx
+++ b/superset-frontend/src/components/Chart/ChartRenderer.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { snakeCase, cloneDeep } from 'lodash';
+import { snakeCase, cloneDeep } from 'lodash-es';
import {
useCallback,
useEffect,
diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.test.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.test.tsx
index 05b0194f5f8..3a309be0915 100644
--- a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.test.tsx
@@ -19,7 +19,7 @@
import { useState } from 'react';
import fetchMock from 'fetch-mock';
-import { omit, omitBy } from 'lodash';
+import { omit, omitBy } from 'lodash-es';
import {
render,
screen,
diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillBySubmenu.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillBySubmenu.tsx
index b0905f86013..0b6e9b9ba59 100644
--- a/superset-frontend/src/components/Chart/DrillBy/DrillBySubmenu.tsx
+++ b/superset-frontend/src/components/Chart/DrillBy/DrillBySubmenu.tsx
@@ -43,7 +43,7 @@ import {
Popover,
Icons,
} from '@superset-ui/core/components';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { FixedSizeList as List } from 'react-window';
import { InputRef } from 'antd';
import { MenuItemTooltip } from '../DisabledMenuItemTooltip';
diff --git a/superset-frontend/src/components/Chart/DrillDetail/utils.ts b/superset-frontend/src/components/Chart/DrillDetail/utils.ts
index 03494024a98..5d24c3c2348 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/utils.ts
+++ b/superset-frontend/src/components/Chart/DrillDetail/utils.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import {
ensureIsArray,
QueryFormData,
diff --git a/superset-frontend/src/components/Chart/chartReducer.ts b/superset-frontend/src/components/Chart/chartReducer.ts
index 874c7d18cf8..e4f4138b095 100644
--- a/superset-frontend/src/components/Chart/chartReducer.ts
+++ b/superset-frontend/src/components/Chart/chartReducer.ts
@@ -18,7 +18,7 @@
*/
/* eslint camelcase: 0 */
import { t } from '@apache-superset/core/translation';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import { HYDRATE_DASHBOARD } from 'src/dashboard/actions/hydrate';
import { DatasourcesAction } from 'src/dashboard/actions/datasources';
import { ChartState } from 'src/explore/types';
diff --git a/superset-frontend/src/components/Chart/useDrillDetailMenuItems/index.tsx b/superset-frontend/src/components/Chart/useDrillDetailMenuItems/index.tsx
index 2be084159bc..2914dbbd8c7 100644
--- a/superset-frontend/src/components/Chart/useDrillDetailMenuItems/index.tsx
+++ b/superset-frontend/src/components/Chart/useDrillDetailMenuItems/index.tsx
@@ -24,7 +24,7 @@ import {
useCallback,
useMemo,
} from 'react';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
Behavior,
diff --git a/superset-frontend/src/components/Datasource/FoldersEditor/index.tsx b/superset-frontend/src/components/Datasource/FoldersEditor/index.tsx
index e48db973978..606df275587 100644
--- a/superset-frontend/src/components/Datasource/FoldersEditor/index.tsx
+++ b/superset-frontend/src/components/Datasource/FoldersEditor/index.tsx
@@ -18,7 +18,7 @@
*/
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import AutoSizer from 'react-virtualized-auto-sizer';
import {
DndContext,
diff --git a/superset-frontend/src/components/DynamicPlugins/index.tsx b/superset-frontend/src/components/DynamicPlugins/index.tsx
index ea42135e4f0..166d19fea3b 100644
--- a/superset-frontend/src/components/DynamicPlugins/index.tsx
+++ b/superset-frontend/src/components/DynamicPlugins/index.tsx
@@ -34,7 +34,7 @@ import {
makeApi,
} from '@superset-ui/core';
import { logging } from '@apache-superset/core/utils';
-import { omitBy } from 'lodash';
+import { omitBy } from 'lodash-es';
import type { Plugin, PluginAction, PluginContextType } from './types';
const metadataRegistry = getChartMetadataRegistry();
diff --git a/superset-frontend/src/components/ListView/Filters/CompactSelectPanel.tsx b/superset-frontend/src/components/ListView/Filters/CompactSelectPanel.tsx
index 872b90e65cf..cde60f9355f 100644
--- a/superset-frontend/src/components/ListView/Filters/CompactSelectPanel.tsx
+++ b/superset-frontend/src/components/ListView/Filters/CompactSelectPanel.tsx
@@ -26,7 +26,7 @@ import {
type CSSProperties,
type RefObject,
} from 'react';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { useTheme, styled, css } from '@apache-superset/core/theme';
import {
diff --git a/superset-frontend/src/components/ListView/utils.ts b/superset-frontend/src/components/ListView/utils.ts
index eafcb2f12b9..12df0e28bb9 100644
--- a/superset-frontend/src/components/ListView/utils.ts
+++ b/superset-frontend/src/components/ListView/utils.ts
@@ -34,7 +34,7 @@ import {
} from 'use-query-params';
import rison from 'rison';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
ListViewFetchDataConfig as FetchDataConfig,
ListViewFilter as Filter,
diff --git a/superset-frontend/src/dashboard/actions/dashboardState.ts b/superset-frontend/src/dashboard/actions/dashboardState.ts
index 7b682a2a1a0..81a49581fcc 100644
--- a/superset-frontend/src/dashboard/actions/dashboardState.ts
+++ b/superset-frontend/src/dashboard/actions/dashboardState.ts
@@ -58,7 +58,7 @@ import { getActiveFilters } from 'src/dashboard/util/activeDashboardFilters';
import { safeStringify } from 'src/utils/safeStringify';
import { logEvent } from 'src/logger/actions';
import { LOG_ACTIONS_CONFIRM_OVERWRITE_DASHBOARD_METADATA } from 'src/logger/LogUtils';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { navigateWithState, navigateTo } from 'src/utils/navigationUtils';
import type { AnyAction } from 'redux';
import type { ThunkDispatch } from 'redux-thunk';
diff --git a/superset-frontend/src/dashboard/actions/nativeFilters.ts b/superset-frontend/src/dashboard/actions/nativeFilters.ts
index af3d711495a..f06a02f0249 100644
--- a/superset-frontend/src/dashboard/actions/nativeFilters.ts
+++ b/superset-frontend/src/dashboard/actions/nativeFilters.ts
@@ -27,7 +27,7 @@ import {
} from '@superset-ui/core';
import { Dispatch } from 'redux';
import { RootState } from 'src/dashboard/types';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { setDataMaskForFilterChangesComplete } from 'src/dataMask/actions';
import { HYDRATE_DASHBOARD } from './hydrate';
import {
diff --git a/superset-frontend/src/dashboard/components/ColorSchemeSelect.tsx b/superset-frontend/src/dashboard/components/ColorSchemeSelect.tsx
index 58906e4fd7c..548cad24f17 100644
--- a/superset-frontend/src/dashboard/components/ColorSchemeSelect.tsx
+++ b/superset-frontend/src/dashboard/components/ColorSchemeSelect.tsx
@@ -25,7 +25,7 @@ import {
CategoricalScheme,
} from '@superset-ui/core';
import { css, useTheme } from '@apache-superset/core/theme';
-import { sortBy } from 'lodash';
+import { sortBy } from 'lodash-es';
import { Select, Tooltip } from '@superset-ui/core/components';
import { Icons } from '@superset-ui/core/components/Icons';
import ColorSchemeLabel from 'src/explore/components/controls/ColorSchemeControl/ColorSchemeLabel';
diff --git a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
index ac73c2cab7e..ed995587b06 100644
--- a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
+++ b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardContainer.tsx
@@ -30,7 +30,7 @@ import {
} from 'react';
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
import { createSelector } from '@reduxjs/toolkit';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
ChartCustomizationConfiguration,
ChartCustomizationType,
diff --git a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardWrapper.tsx b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardWrapper.tsx
index 1c8b5970d54..8fd07069aff 100644
--- a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardWrapper.tsx
+++ b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardWrapper.tsx
@@ -24,7 +24,7 @@ import { RootState } from 'src/dashboard/types';
import { useSelector } from 'react-redux';
import { useDragDropManager } from 'react-dnd';
import classNames from 'classnames';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
const StyledDiv = styled.div`
${({ theme }) => css`
diff --git a/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx b/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
index a1df06aa1d7..c74c9edd2a4 100644
--- a/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
+++ b/superset-frontend/src/dashboard/components/FiltersBadge/index.tsx
@@ -27,7 +27,7 @@ import {
} from 'react';
import { useDispatch, useSelector } from 'react-redux';
-import { uniqWith } from 'lodash';
+import { uniqWith } from 'lodash-es';
import cx from 'classnames';
import { t } from '@apache-superset/core/translation';
import {
diff --git a/superset-frontend/src/dashboard/components/Header/useHeaderActionsDropdownMenu.tsx b/superset-frontend/src/dashboard/components/Header/useHeaderActionsDropdownMenu.tsx
index 102a0a70581..8a1c09249f2 100644
--- a/superset-frontend/src/dashboard/components/Header/useHeaderActionsDropdownMenu.tsx
+++ b/superset-frontend/src/dashboard/components/Header/useHeaderActionsDropdownMenu.tsx
@@ -22,7 +22,7 @@ import { useSelector } from 'react-redux';
import { useHistory, useLocation } from 'react-router-dom';
import { Menu, MenuItem } from '@superset-ui/core/components/Menu';
import { t } from '@apache-superset/core/translation';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { URL_PARAMS } from 'src/constants';
import { useShareMenuItems } from 'src/dashboard/components/menu/ShareMenuItems';
import { useDownloadMenuItems } from 'src/dashboard/components/menu/DownloadMenuItems';
diff --git a/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx b/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
index de7ce91f28e..5a9be8ab656 100644
--- a/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
+++ b/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import jsonStringify from 'json-stringify-pretty-compact';
import {
Form,
diff --git a/superset-frontend/src/dashboard/components/SliceAdder.tsx b/superset-frontend/src/dashboard/components/SliceAdder.tsx
index 15acf37afc6..fab2250c2a1 100644
--- a/superset-frontend/src/dashboard/components/SliceAdder.tsx
+++ b/superset-frontend/src/dashboard/components/SliceAdder.tsx
@@ -46,7 +46,7 @@ import {
NEW_CHART_ID,
NEW_COMPONENTS_SOURCE_ID,
} from 'src/dashboard/util/constants';
-import { debounce, pickBy } from 'lodash';
+import { debounce, pickBy } from 'lodash-es';
import { Dispatch } from 'redux';
import { Slice } from 'src/dashboard/types';
import { navigateTo } from 'src/utils/navigationUtils';
diff --git a/superset-frontend/src/dashboard/components/SyncDashboardState/index.tsx b/superset-frontend/src/dashboard/components/SyncDashboardState/index.tsx
index bed9965d2cd..381a03c261e 100644
--- a/superset-frontend/src/dashboard/components/SyncDashboardState/index.tsx
+++ b/superset-frontend/src/dashboard/components/SyncDashboardState/index.tsx
@@ -18,7 +18,7 @@
*/
import { FC, useEffect } from 'react';
-import { pick, pickBy } from 'lodash';
+import { pick, pickBy } from 'lodash-es';
import { useSelector } from 'react-redux';
import { createSelector } from '@reduxjs/toolkit';
import { DashboardContextForExplore } from 'src/types/DashboardContextForExplore';
diff --git a/superset-frontend/src/dashboard/components/dnd/handleHover.ts b/superset-frontend/src/dashboard/components/dnd/handleHover.ts
index 7e25246e03d..3b62e7934a7 100644
--- a/superset-frontend/src/dashboard/components/dnd/handleHover.ts
+++ b/superset-frontend/src/dashboard/components/dnd/handleHover.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { throttle } from 'lodash';
+import { throttle } from 'lodash-es';
import { DropTargetMonitor } from 'react-dnd';
import { DASHBOARD_ROOT_TYPE } from 'src/dashboard/util/componentTypes';
import getDropPosition from 'src/dashboard/util/getDropPosition';
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Chart/Chart.tsx b/superset-frontend/src/dashboard/components/gridComponents/Chart/Chart.tsx
index ac3cf271b5d..a654c56ed1f 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Chart/Chart.tsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Chart/Chart.tsx
@@ -31,7 +31,7 @@ import type { ChartCustomization, JsonObject } from '@superset-ui/core';
import { VizType } from '@superset-ui/core';
import { styled } from '@apache-superset/core/theme';
import { t } from '@apache-superset/core/translation';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { bindActionCreators } from 'redux';
import { useDispatch, useSelector } from 'react-redux';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
index e3f5c803b7f..e8151d24814 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
@@ -44,7 +44,7 @@ import {
import { styled, SupersetTheme } from '@apache-superset/core/theme';
import { useTheme } from '@emotion/react';
import { useDispatch, useSelector } from 'react-redux';
-import { isEqual, isEqualWith } from 'lodash';
+import { isEqual, isEqualWith } from 'lodash-es';
import { getChartDataRequest } from 'src/components/Chart/chartAction';
import { ErrorAlert, ErrorMessageWithStackTrace } from 'src/components';
import { Loading, Constants, Flex } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/utils.ts b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/utils.ts
index 3e556e535ee..6a90f5af741 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/utils.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/utils.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { Dispatch } from 'react';
import {
setFocusedNativeFilter,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
index 5f1e097c1c4..a835e58fe27 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
@@ -18,7 +18,7 @@
*/
/* eslint-disable no-param-reassign */
-import { throttle } from 'lodash';
+import { throttle } from 'lodash-es';
import {
memo,
useEffect,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
index 9fb1b004d82..ef9f3dc69a1 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx
@@ -52,7 +52,7 @@ import {
} from 'src/dashboard/actions/chartCustomizationActions';
import { useImmer } from 'use-immer';
-import { isEmpty, isEqual, debounce } from 'lodash';
+import { isEmpty, isEqual, debounce } from 'lodash-es';
import { getInitialDataMask } from 'src/dataMask/reducer';
import { URL_PARAMS } from 'src/constants';
import { applicationRoot } from 'src/utils/getBootstrapData';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/utils.ts b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/utils.ts
index 98f941c03e0..b8a8e0ba193 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/utils.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/utils.ts
@@ -23,7 +23,7 @@ import {
Filter,
FilterState,
} from '@superset-ui/core';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { useSelector } from 'react-redux';
import { createSelector } from '@reduxjs/toolkit';
import { areObjectsEqual } from 'src/reduxUtils';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
index c59fec2483b..83113aa40c9 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
@@ -38,7 +38,7 @@ import {
} from '@superset-ui/core';
import { styled, useTheme, css } from '@apache-superset/core/theme';
import { GenericDataType } from '@apache-superset/core/common';
-import { debounce, isEqual } from 'lodash';
+import { debounce, isEqual } from 'lodash-es';
import {
forwardRef,
useCallback,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts
index f586dcb5024..b0aac24f1c0 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/utils.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { flatMapDeep } from 'lodash';
+import { flatMapDeep } from 'lodash-es';
import type { FormInstance } from '@superset-ui/core/components';
import { useState, useCallback } from 'react';
import { CustomControlItem, Dataset } from '@superset-ui/chart-controls';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.tsx
index 44ba434ab66..1db2d3331f8 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { memo, useEffect, useCallback, useMemo, useState, useRef } from 'react';
-import { uniq, debounce } from 'lodash';
+import { uniq, debounce } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { ChartCustomizationType, NativeFilterType } from '@superset-ui/core';
import { styled, css, useTheme } from '@apache-superset/core/theme';
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useItemStateManager.ts b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useItemStateManager.ts
index ee33c7b17b8..de783d13782 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useItemStateManager.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useItemStateManager.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { useState, useCallback, useEffect } from 'react';
-import { uniq, isEmpty } from 'lodash';
+import { uniq, isEmpty } from 'lodash-es';
import { FilterChangesType, FilterRemoval } from '../types';
const DEFAULT_EMPTY_ARRAY: string[] = [];
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.ts b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.ts
index 51f4e56ce45..5894c30cdf1 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.ts
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { useCallback, useMemo } from 'react';
-import { isEqual, sortBy } from 'lodash';
+import { isEqual, sortBy } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
Filter,
diff --git a/superset-frontend/src/dashboard/hooks/useDownloadScreenshot.ts b/superset-frontend/src/dashboard/hooks/useDownloadScreenshot.ts
index 2af759a7555..8e286521be4 100644
--- a/superset-frontend/src/dashboard/hooks/useDownloadScreenshot.ts
+++ b/superset-frontend/src/dashboard/hooks/useDownloadScreenshot.ts
@@ -19,7 +19,7 @@
import { useCallback, useEffect, useRef } from 'react';
import { useSelector } from 'react-redux';
import { useToasts } from 'src/components/MessageToasts/withToasts';
-import { last } from 'lodash';
+import { last } from 'lodash-es';
import rison from 'rison';
import { parse as parseContentDisposition } from 'content-disposition';
import { t } from '@apache-superset/core/translation';
diff --git a/superset-frontend/src/dashboard/reducers/datasources.ts b/superset-frontend/src/dashboard/reducers/datasources.ts
index 386657455a9..80601300128 100644
--- a/superset-frontend/src/dashboard/reducers/datasources.ts
+++ b/superset-frontend/src/dashboard/reducers/datasources.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { keyBy } from 'lodash';
+import { keyBy } from 'lodash-es';
import { DatasourcesState } from 'src/dashboard/types';
import {
DatasourcesActionPayload,
diff --git a/superset-frontend/src/dashboard/util/activeAllDashboardFilters.ts b/superset-frontend/src/dashboard/util/activeAllDashboardFilters.ts
index 206185795b4..02c0a2d2bc2 100644
--- a/superset-frontend/src/dashboard/util/activeAllDashboardFilters.ts
+++ b/superset-frontend/src/dashboard/util/activeAllDashboardFilters.ts
@@ -22,7 +22,7 @@ import {
JsonObject,
PartialFilters,
} from '@superset-ui/core';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import { ActiveFilters, ChartConfiguration } from '../types';
export const getRelevantDataMask = (
diff --git a/superset-frontend/src/dashboard/util/activeDashboardFilters.ts b/superset-frontend/src/dashboard/util/activeDashboardFilters.ts
index 31823ff6f8c..4f0b7d20391 100644
--- a/superset-frontend/src/dashboard/util/activeDashboardFilters.ts
+++ b/superset-frontend/src/dashboard/util/activeDashboardFilters.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { mapValues, flow, keyBy } from 'lodash/fp';
import {
JsonValue,
diff --git a/superset-frontend/src/dashboard/util/charts/getFormDataWithExtraFilters.ts b/superset-frontend/src/dashboard/util/charts/getFormDataWithExtraFilters.ts
index e0cb579aa34..ceb583ba644 100644
--- a/superset-frontend/src/dashboard/util/charts/getFormDataWithExtraFilters.ts
+++ b/superset-frontend/src/dashboard/util/charts/getFormDataWithExtraFilters.ts
@@ -35,7 +35,7 @@ import {
} from 'src/dashboard/types';
import { getExtraFormData } from 'src/dashboard/components/nativeFilters/utils';
import { isChartCustomization } from 'src/dashboard/components/nativeFilters/FiltersConfigModal/utils';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { areObjectsEqual } from 'src/reduxUtils';
import {
isSingleColumnDimensionChart,
diff --git a/superset-frontend/src/dashboard/util/crossFilters.ts b/superset-frontend/src/dashboard/util/crossFilters.ts
index 559755349d7..3269c93d676 100644
--- a/superset-frontend/src/dashboard/util/crossFilters.ts
+++ b/superset-frontend/src/dashboard/util/crossFilters.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import {
Behavior,
getChartMetadataRegistry,
diff --git a/superset-frontend/src/dashboard/util/getDashboardUrl.ts b/superset-frontend/src/dashboard/util/getDashboardUrl.ts
index bade710936f..797d3260fe8 100644
--- a/superset-frontend/src/dashboard/util/getDashboardUrl.ts
+++ b/superset-frontend/src/dashboard/util/getDashboardUrl.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { JsonObject } from '@superset-ui/core';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { URL_PARAMS } from 'src/constants';
import { getUrlParam } from 'src/utils/urlUtils';
import serializeActiveFilterValues from './serializeActiveFilterValues';
diff --git a/superset-frontend/src/dashboard/util/getFilterScopeFromNodesTree.ts b/superset-frontend/src/dashboard/util/getFilterScopeFromNodesTree.ts
index fd59214e571..a17fe94967e 100644
--- a/superset-frontend/src/dashboard/util/getFilterScopeFromNodesTree.ts
+++ b/superset-frontend/src/dashboard/util/getFilterScopeFromNodesTree.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { flow, keyBy, mapValues } from 'lodash/fp';
-import { flatMap, isEmpty } from 'lodash';
+import { flatMap, isEmpty } from 'lodash-es';
import { CHART_TYPE, TAB_TYPE } from './componentTypes';
import { getChartIdAndColumnFromFilterKey } from './getDashboardFilterKey';
diff --git a/superset-frontend/src/dashboard/util/getFilterScopeNodesTree.ts b/superset-frontend/src/dashboard/util/getFilterScopeNodesTree.ts
index ec9dbe78f13..b7448f837ef 100644
--- a/superset-frontend/src/dashboard/util/getFilterScopeNodesTree.ts
+++ b/superset-frontend/src/dashboard/util/getFilterScopeNodesTree.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { DASHBOARD_ROOT_ID } from './constants';
diff --git a/superset-frontend/src/dataMask/reducer.ts b/superset-frontend/src/dataMask/reducer.ts
index 9120f9d91af..6f69d6bec78 100644
--- a/superset-frontend/src/dataMask/reducer.ts
+++ b/superset-frontend/src/dataMask/reducer.ts
@@ -45,7 +45,7 @@ import {
migrateChartCustomizationArray,
isLegacyChartCustomizationFormat,
} from 'src/dashboard/util/migrateChartCustomization';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
AnyDataMaskAction,
CLEAR_DATA_MASK_STATE,
diff --git a/superset-frontend/src/embedded/utils.test.ts b/superset-frontend/src/embedded/utils.test.ts
index a28f47d2527..a24d7cd0cbb 100644
--- a/superset-frontend/src/embedded/utils.test.ts
+++ b/superset-frontend/src/embedded/utils.test.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { DataMaskStateWithId } from '@superset-ui/core';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { getDataMaskChangeTrigger, getChartDataPayloads } from './utils';
import { RootState } from 'src/views/store';
import * as chartStateConverter from 'src/dashboard/util/chartStateConverter';
diff --git a/superset-frontend/src/embedded/utils.ts b/superset-frontend/src/embedded/utils.ts
index cc9e8612f03..53e5e803476 100644
--- a/superset-frontend/src/embedded/utils.ts
+++ b/superset-frontend/src/embedded/utils.ts
@@ -23,7 +23,7 @@ import {
QueryFormData,
} from '@superset-ui/core';
import { logging } from '@apache-superset/core/utils';
-import { isEmpty, isEqual } from 'lodash';
+import { isEmpty, isEqual } from 'lodash-es';
import { NATIVE_FILTER_PREFIX } from 'src/dashboard/components/nativeFilters/FiltersConfigModal/utils';
import {
hasChartStateConverter,
diff --git a/superset-frontend/src/explore/actions/saveModalActions.ts b/superset-frontend/src/explore/actions/saveModalActions.ts
index db8f6b901c6..6af123274bc 100644
--- a/superset-frontend/src/explore/actions/saveModalActions.ts
+++ b/superset-frontend/src/explore/actions/saveModalActions.ts
@@ -26,7 +26,7 @@ import {
SupersetClient,
} from '@superset-ui/core';
import { addSuccessToast } from 'src/components/MessageToasts/actions';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { Slice } from 'src/dashboard/types';
import { Operators } from '../constants';
import { buildV1ChartDataPayload } from '../exploreUtils';
diff --git a/superset-frontend/src/explore/components/Control.tsx b/superset-frontend/src/explore/components/Control.tsx
index 794525111e9..eeb2be1ee91 100644
--- a/superset-frontend/src/explore/components/Control.tsx
+++ b/superset-frontend/src/explore/components/Control.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { ReactNode, useCallback, useState, useEffect } from 'react';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
ControlType,
ControlComponentProps as BaseControlComponentProps,
diff --git a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
index a4baf6a8a06..427c34f67b1 100644
--- a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
+++ b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx
@@ -59,7 +59,7 @@ import {
sections,
} from '@superset-ui/chart-controls';
import { useSelector } from 'react-redux';
-import { kebabCase, isEqual } from 'lodash';
+import { kebabCase, isEqual } from 'lodash-es';
import {
Collapse,
diff --git a/superset-frontend/src/explore/components/DataTableControl/index.tsx b/superset-frontend/src/explore/components/DataTableControl/index.tsx
index dcdcdcbdf29..eef3e1aedcb 100644
--- a/superset-frontend/src/explore/components/DataTableControl/index.tsx
+++ b/superset-frontend/src/explore/components/DataTableControl/index.tsx
@@ -20,7 +20,7 @@ import { useMemo, useEffect, useRef, RefObject } from 'react';
import { t } from '@apache-superset/core/translation';
import { css, styled, useTheme } from '@apache-superset/core/theme';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { Constants, Button, Icons, Input } from '@superset-ui/core/components';
import { CopyToClipboard } from 'src/components';
import {
diff --git a/superset-frontend/src/explore/components/DataTablesPane/components/DataTableControls.tsx b/superset-frontend/src/explore/components/DataTablesPane/components/DataTableControls.tsx
index 72b8fab8941..8ca46c6f136 100644
--- a/superset-frontend/src/explore/components/DataTablesPane/components/DataTableControls.tsx
+++ b/superset-frontend/src/explore/components/DataTablesPane/components/DataTableControls.tsx
@@ -20,7 +20,7 @@ import { styled, css, useTheme } from '@apache-superset/core/theme';
import { t } from '@apache-superset/core/translation';
import { GenericDataType } from '@apache-superset/core/common';
import { useMemo } from 'react';
-import { zip } from 'lodash';
+import { zip } from 'lodash-es';
import { Select, Tooltip } from '@superset-ui/core/components';
import { Icons } from '@superset-ui/core/components/Icons';
import {
diff --git a/superset-frontend/src/explore/components/ExploreViewContainer/index.tsx b/superset-frontend/src/explore/components/ExploreViewContainer/index.tsx
index 49eb6e6e74c..caa72a53659 100644
--- a/superset-frontend/src/explore/components/ExploreViewContainer/index.tsx
+++ b/superset-frontend/src/explore/components/ExploreViewContainer/index.tsx
@@ -45,7 +45,7 @@ import {
import { styled, css, useTheme } from '@apache-superset/core/theme';
import { t } from '@apache-superset/core/translation';
import { logging } from '@apache-superset/core/utils';
-import { debounce, isEqual, isObjectLike, omit, pick } from 'lodash';
+import { debounce, isEqual, isObjectLike, omit, pick } from 'lodash-es';
import { Resizable } from 're-resizable';
import { useHistory } from 'react-router-dom';
import { Tooltip } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/explore/components/controls/BoundsControl.tsx b/superset-frontend/src/explore/components/controls/BoundsControl.tsx
index 6d132595258..41fc1fae6fc 100644
--- a/superset-frontend/src/explore/components/controls/BoundsControl.tsx
+++ b/superset-frontend/src/explore/components/controls/BoundsControl.tsx
@@ -20,7 +20,7 @@ import { useEffect, useRef, useState } from 'react';
import { InputNumber } from '@superset-ui/core/components';
import { t } from '@apache-superset/core/translation';
import { styled } from '@apache-superset/core/theme';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import ControlHeader from 'src/explore/components/ControlHeader';
type ValueType = (number | null)[];
diff --git a/superset-frontend/src/explore/components/controls/ColorSchemeControl/index.tsx b/superset-frontend/src/explore/components/controls/ColorSchemeControl/index.tsx
index 529136f1702..99e08c21380 100644
--- a/superset-frontend/src/explore/components/controls/ColorSchemeControl/index.tsx
+++ b/superset-frontend/src/explore/components/controls/ColorSchemeControl/index.tsx
@@ -27,7 +27,7 @@ import {
CategoricalColorNamespace,
} from '@superset-ui/core';
import { css, useTheme } from '@apache-superset/core/theme';
-import { sortBy } from 'lodash';
+import { sortBy } from 'lodash-es';
import ControlHeader from 'src/explore/components/ControlHeader';
import {
Tooltip,
diff --git a/superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/index.tsx b/superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/index.tsx
index 2b05b70ceac..fea69a1a2da 100644
--- a/superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/index.tsx
+++ b/superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/index.tsx
@@ -25,7 +25,7 @@ import {
import { JsonObject, JsonValue } from '@superset-ui/core';
import { useTheme } from '@apache-superset/core/theme';
import { Constants } from '@superset-ui/core/components';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { ControlFormItemNode } from './ControlFormItem';
export * from './ControlFormItem';
diff --git a/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx b/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
index 1273c1633ac..8e926c01c49 100644
--- a/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
+++ b/superset-frontend/src/explore/components/controls/ComparisonRangeLabel.tsx
@@ -19,7 +19,7 @@
import { useEffect, useState } from 'react';
import { useSelector } from 'react-redux';
-import { isEmpty, isEqual, noop } from 'lodash';
+import { isEmpty, isEqual, noop } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
BinaryAdhocFilter,
diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx
index 0c4fbe40d76..f820bcd0d20 100644
--- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx
+++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnMetricSelect.tsx
@@ -29,7 +29,7 @@ import {
} from '@superset-ui/core';
import { tn } from '@apache-superset/core/translation';
import { ColumnMeta, isColumnMeta } from '@superset-ui/chart-controls';
-import { isString } from 'lodash';
+import { isString } from 'lodash-es';
import DndSelectLabel from 'src/explore/components/controls/DndColumnSelectControl/DndSelectLabel';
import OptionWrapper from 'src/explore/components/controls/DndColumnSelectControl/OptionWrapper';
import { DatasourcePanelDndItem } from 'src/explore/components/DatasourcePanel/types';
diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx
index c3fe9d0211b..dea06e9f792 100644
--- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx
+++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndColumnSelect.tsx
@@ -22,7 +22,7 @@ import { t } from '@apache-superset/core/translation';
import { AdhocColumn, QueryFormColumn, isAdhocColumn } from '@superset-ui/core';
import { tn } from '@apache-superset/core/translation';
import { ColumnMeta, isColumnMeta } from '@superset-ui/chart-controls';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import DndSelectLabel from 'src/explore/components/controls/DndColumnSelectControl/DndSelectLabel';
import OptionWrapper from 'src/explore/components/controls/DndColumnSelectControl/OptionWrapper';
import { OptionSelector } from 'src/explore/components/controls/DndColumnSelectControl/utils';
diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/useResizeButton.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/useResizeButton.tsx
index c32826a106e..6bd8509a8c1 100644
--- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/useResizeButton.tsx
+++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/useResizeButton.tsx
@@ -24,7 +24,7 @@ import {
MouseEvent as ReactMouseEvent,
} from 'react';
import { t } from '@apache-superset/core/translation';
-import { throttle } from 'lodash';
+import { throttle } from 'lodash-es';
import {
POPOVER_INITIAL_HEIGHT,
POPOVER_INITIAL_WIDTH,
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx
index 7cc4eb71095..01ef9f6ce1f 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx
@@ -36,7 +36,7 @@ import {
Operators,
} from 'src/explore/constants';
import rison from 'rison';
-import { isObject } from 'lodash';
+import { isObject } from 'lodash-es';
import { ExpressionTypes } from '../types';
interface LayerOption {
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/useAdvancedDataTypes.ts b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/useAdvancedDataTypes.ts
index 185a01f1216..fc0fab21b7b 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/useAdvancedDataTypes.ts
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/useAdvancedDataTypes.ts
@@ -19,7 +19,7 @@
import { useCallback, useState } from 'react';
import { t } from '@apache-superset/core/translation';
import { ensureIsArray, SupersetClient } from '@superset-ui/core';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import rison from 'rison';
import { AdvancedDataTypesState, Props } from './index';
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.tsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.tsx
index 247a5d7fbd7..ef7529468d7 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.tsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.tsx
@@ -19,7 +19,7 @@
import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
import { ensureIsArray, usePrevious } from '@superset-ui/core';
import { t } from '@apache-superset/core/translation';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import ControlHeader from 'src/explore/components/ControlHeader';
import { Icons } from '@superset-ui/core/components/Icons';
import {
diff --git a/superset-frontend/src/explore/components/controls/TextAreaControl.tsx b/superset-frontend/src/explore/components/controls/TextAreaControl.tsx
index ce9be8c3573..753b6fd8e73 100644
--- a/superset-frontend/src/explore/components/controls/TextAreaControl.tsx
+++ b/superset-frontend/src/explore/components/controls/TextAreaControl.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { useCallback, useEffect, useRef, useMemo } from 'react';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import {
Input,
Tooltip,
diff --git a/superset-frontend/src/explore/components/controls/TextControl/index.tsx b/superset-frontend/src/explore/components/controls/TextControl/index.tsx
index 13d853da9d3..3e238658b40 100644
--- a/superset-frontend/src/explore/components/controls/TextControl/index.tsx
+++ b/superset-frontend/src/explore/components/controls/TextControl/index.tsx
@@ -18,7 +18,7 @@
*/
import { useState, useCallback, useRef, useEffect, ChangeEvent } from 'react';
import { legacyValidateNumber, legacyValidateInteger } from '@superset-ui/core';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import ControlHeader from 'src/explore/components/ControlHeader';
import { Constants, Input } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/explore/components/controls/TimeOffsetControl.tsx b/superset-frontend/src/explore/components/controls/TimeOffsetControl.tsx
index 23fa5bda8bf..b65c761ce60 100644
--- a/superset-frontend/src/explore/components/controls/TimeOffsetControl.tsx
+++ b/superset-frontend/src/explore/components/controls/TimeOffsetControl.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { ReactNode, useCallback, useEffect, useState } from 'react';
-import { isEmpty, isEqual } from 'lodash';
+import { isEmpty, isEqual } from 'lodash-es';
import { extendedDayjs } from '@superset-ui/core/utils/dates';
import {
parseDttmToDate,
diff --git a/superset-frontend/src/explore/components/controls/ViewQueryModalFooter.tsx b/superset-frontend/src/explore/components/controls/ViewQueryModalFooter.tsx
index fc8c7c948b2..f409aabc39c 100644
--- a/superset-frontend/src/explore/components/controls/ViewQueryModalFooter.tsx
+++ b/superset-frontend/src/explore/components/controls/ViewQueryModalFooter.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import { FC } from 'react';
-import { isObject } from 'lodash';
+import { isObject } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { SupersetClient } from '@superset-ui/core';
import { Button } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/explore/controlUtils/getControlValuesCompatibleWithDatasource.ts b/superset-frontend/src/explore/controlUtils/getControlValuesCompatibleWithDatasource.ts
index bfc53dc6d82..67ab32221ec 100644
--- a/superset-frontend/src/explore/controlUtils/getControlValuesCompatibleWithDatasource.ts
+++ b/superset-frontend/src/explore/controlUtils/getControlValuesCompatibleWithDatasource.ts
@@ -27,7 +27,7 @@ import {
JsonValue,
SimpleAdhocFilter,
} from '@superset-ui/core';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const isControlValueCompatibleWithDatasource = (
diff --git a/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts b/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts
index 127df121552..1a372a53c56 100644
--- a/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts
+++ b/superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import {
AdhocFilter,
ensureIsArray,
diff --git a/superset-frontend/src/explore/controlUtils/standardizedFormData.ts b/superset-frontend/src/explore/controlUtils/standardizedFormData.ts
index 1adf00d1ee7..be65ecb7699 100644
--- a/superset-frontend/src/explore/controlUtils/standardizedFormData.ts
+++ b/superset-frontend/src/explore/controlUtils/standardizedFormData.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import {
ensureIsArray,
getChartControlPanelRegistry,
diff --git a/superset-frontend/src/explore/reducers/exploreReducer.ts b/superset-frontend/src/explore/reducers/exploreReducer.ts
index c7eaf4d699d..6d18681ce4c 100644
--- a/superset-frontend/src/explore/reducers/exploreReducer.ts
+++ b/superset-frontend/src/explore/reducers/exploreReducer.ts
@@ -28,7 +28,7 @@ import {
ControlStateMapping,
Dataset,
} from '@superset-ui/chart-controls';
-import { omit, pick } from 'lodash';
+import { omit, pick } from 'lodash-es';
import { DYNAMIC_PLUGIN_CONTROLS_READY } from 'src/components/Chart/chartAction';
import { getControlsState } from 'src/explore/store';
import {
diff --git a/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx b/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx
index 0fa7cb9dc53..9206561d244 100644
--- a/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx
@@ -22,7 +22,7 @@ import { isFeatureEnabled, FeatureFlag } from '@superset-ui/core';
import { SupersetTheme } from '@apache-superset/core/theme';
import { Switch } from '@superset-ui/core/components/Switch';
import { InfoTooltip } from '@superset-ui/core/components';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { infoTooltip, toggleStyle } from './styles';
import { SwitchProps } from '../types';
diff --git a/superset-frontend/src/features/databases/DatabaseModal/index.tsx b/superset-frontend/src/features/databases/DatabaseModal/index.tsx
index 5313498e2ca..3019d82ded9 100644
--- a/superset-frontend/src/features/databases/DatabaseModal/index.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/index.tsx
@@ -63,7 +63,7 @@ import {
} from 'src/views/CRUD/hooks';
import { FileEncryptedExtraFields } from 'src/views/CRUD/types';
import { useCommonConf } from 'src/features/databases/state';
-import { isEmpty, pick } from 'lodash';
+import { isEmpty, pick } from 'lodash-es';
import { OnlyKeyWithType } from 'src/utils/types';
import { ModalTitleWithIcon } from 'src/components/ModalTitleWithIcon';
import {
diff --git a/superset-frontend/src/features/home/RightMenu.tsx b/superset-frontend/src/features/home/RightMenu.tsx
index c6de308d6ed..d05abae30c9 100644
--- a/superset-frontend/src/features/home/RightMenu.tsx
+++ b/superset-frontend/src/features/home/RightMenu.tsx
@@ -29,7 +29,7 @@ import rison from 'rison';
import { useSelector } from 'react-redux';
import { Link } from 'react-router-dom';
import { useQueryParams, BooleanParam } from 'use-query-params';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import {
SupersetClient,
diff --git a/superset-frontend/src/features/home/SubMenu.tsx b/superset-frontend/src/features/home/SubMenu.tsx
index 9c2e2c451eb..d0c71fc02ec 100644
--- a/superset-frontend/src/features/home/SubMenu.tsx
+++ b/superset-frontend/src/features/home/SubMenu.tsx
@@ -27,7 +27,7 @@ import {
useTheme,
} from '@apache-superset/core/theme';
import cx from 'classnames';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import { Menu, MenuMode } from '@superset-ui/core/components/Menu';
import {
Button,
diff --git a/superset-frontend/src/features/reports/ReportModal/actions.ts b/superset-frontend/src/features/reports/ReportModal/actions.ts
index 59e99568418..25119e1a774 100644
--- a/superset-frontend/src/features/reports/ReportModal/actions.ts
+++ b/superset-frontend/src/features/reports/ReportModal/actions.ts
@@ -24,7 +24,7 @@ import {
addDangerToast,
addSuccessToast,
} from 'src/components/MessageToasts/actions';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import { Dispatch, AnyAction } from 'redux';
import { ThunkDispatch } from 'redux-thunk';
import { ReportObject, ReportCreationMethod } from 'src/features/reports/types';
diff --git a/superset-frontend/src/features/reports/ReportModal/reducer.ts b/superset-frontend/src/features/reports/ReportModal/reducer.ts
index 3bea7f90b50..08a3001c006 100644
--- a/superset-frontend/src/features/reports/ReportModal/reducer.ts
+++ b/superset-frontend/src/features/reports/ReportModal/reducer.ts
@@ -17,7 +17,7 @@
* under the License.
*/
/* eslint-disable camelcase */
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import {
SET_REPORT,
ADD_REPORT,
diff --git a/superset-frontend/src/features/themes/ThemeModal.tsx b/superset-frontend/src/features/themes/ThemeModal.tsx
index db7692443bb..7c591a0eb64 100644
--- a/superset-frontend/src/features/themes/ThemeModal.tsx
+++ b/superset-frontend/src/features/themes/ThemeModal.tsx
@@ -24,7 +24,7 @@ import {
useMemo,
ChangeEvent,
} from 'react';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { Alert } from '@apache-superset/core/components';
diff --git a/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx b/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx
index 52771c85d8a..de275aeeb36 100644
--- a/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx
+++ b/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx
@@ -28,7 +28,7 @@ import { styled, useTheme, css } from '@apache-superset/core/theme';
import { useCallback, useEffect, useMemo, useState, useRef } from 'react';
import { FilterBarOrientation } from 'src/dashboard/types';
// import Metadata from '@superset-ui/core/components/Metadata';
-import { isNumber } from 'lodash';
+import { isNumber } from 'lodash-es';
import { InputNumber } from '@superset-ui/core/components/Input';
import Slider from '@superset-ui/core/components/Slider';
import { FormItem, Tooltip, Icons } from '@superset-ui/core/components';
diff --git a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx
index dab4fa66cb1..fc5e3d597c0 100644
--- a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx
+++ b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx
@@ -31,7 +31,7 @@ import {
import { tn } from '@apache-superset/core/translation';
import { styled } from '@apache-superset/core/theme';
import { GenericDataType } from '@apache-superset/core/common';
-import { debounce, isUndefined } from 'lodash';
+import { debounce, isUndefined } from 'lodash-es';
import { useImmerReducer } from 'use-immer';
import {
FormItem,
diff --git a/superset-frontend/src/hooks/apiResources/sqlEditorTabs.ts b/superset-frontend/src/hooks/apiResources/sqlEditorTabs.ts
index 717a1cd1f25..feceeeea342 100644
--- a/superset-frontend/src/hooks/apiResources/sqlEditorTabs.ts
+++ b/superset-frontend/src/hooks/apiResources/sqlEditorTabs.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { pickBy } from 'lodash';
+import { pickBy } from 'lodash-es';
import { QueryEditor, LatestQueryEditorVersion } from 'src/SqlLab/types';
import { api, JsonResponse } from './queryApi';
diff --git a/superset-frontend/src/pages/ChartList/index.tsx b/superset-frontend/src/pages/ChartList/index.tsx
index 7b08bfc73e4..c329e0ed29c 100644
--- a/superset-frontend/src/pages/ChartList/index.tsx
+++ b/superset-frontend/src/pages/ChartList/index.tsx
@@ -29,7 +29,7 @@ import {
import { css, styled } from '@apache-superset/core/theme';
import { useState, useMemo, useCallback } from 'react';
import rison from 'rison';
-import { uniqBy } from 'lodash';
+import { uniqBy } from 'lodash-es';
import { useSelector } from 'react-redux';
import {
createErrorHandler,
diff --git a/superset-frontend/src/pages/Home/index.tsx b/superset-frontend/src/pages/Home/index.tsx
index e270fd9872c..fa18b639459 100644
--- a/superset-frontend/src/pages/Home/index.tsx
+++ b/superset-frontend/src/pages/Home/index.tsx
@@ -28,7 +28,7 @@ import { styled } from '@apache-superset/core/theme';
import rison from 'rison';
import { Collapse, ListViewCard } from '@superset-ui/core/components';
import { User } from 'src/types/bootstrapTypes';
-import { reject } from 'lodash';
+import { reject } from 'lodash-es';
import {
dangerouslyGetItemDoNotUse,
dangerouslySetItemDoNotUse,
diff --git a/superset-frontend/src/pages/SqlLab/SqlLab.test.tsx b/superset-frontend/src/pages/SqlLab/SqlLab.test.tsx
index 819e0323be0..bd4edf34318 100644
--- a/superset-frontend/src/pages/SqlLab/SqlLab.test.tsx
+++ b/superset-frontend/src/pages/SqlLab/SqlLab.test.tsx
@@ -18,7 +18,7 @@
*/
import fetchMock from 'fetch-mock';
import { isValidElement } from 'react';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
import {
render,
act,
diff --git a/superset-frontend/src/reduxUtils.ts b/superset-frontend/src/reduxUtils.ts
index 9c3fa9b146f..ae4f8466b43 100644
--- a/superset-frontend/src/reduxUtils.ts
+++ b/superset-frontend/src/reduxUtils.ts
@@ -19,7 +19,7 @@
import { nanoid } from 'nanoid';
import { compose } from 'redux';
import persistState, { StorageAdapter } from 'redux-localstorage';
-import { isEqual, omitBy, omit, isEqualWith } from 'lodash';
+import { isEqual, omitBy, omit, isEqualWith } from 'lodash-es';
import { ensureIsArray } from '@superset-ui/core';
export function addToObject(
diff --git a/superset-frontend/src/types/bootstrapTypes.ts b/superset-frontend/src/types/bootstrapTypes.ts
index 4b8e646fbbf..9ae4c42d502 100644
--- a/superset-frontend/src/types/bootstrapTypes.ts
+++ b/superset-frontend/src/types/bootstrapTypes.ts
@@ -18,7 +18,7 @@
*/
import { FormatLocaleDefinition } from 'd3-format';
import { TimeLocaleDefinition } from 'd3-time-format';
-import { isPlainObject } from 'lodash';
+import { isPlainObject } from 'lodash-es';
import { Languages } from 'src/features/home/LanguagePicker';
import {
AnyThemeConfig,
diff --git a/superset-frontend/src/utils/DebouncedMessageQueue.ts b/superset-frontend/src/utils/DebouncedMessageQueue.ts
index 99b50650aee..5fe2fffba76 100644
--- a/superset-frontend/src/utils/DebouncedMessageQueue.ts
+++ b/superset-frontend/src/utils/DebouncedMessageQueue.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
export interface DebouncedMessageQueueOptions<T> {
callback?: (events: T[]) => void;
diff --git a/superset-frontend/src/utils/colorScheme.ts b/superset-frontend/src/utils/colorScheme.ts
index a64df17abfd..63a76109c24 100644
--- a/superset-frontend/src/utils/colorScheme.ts
+++ b/superset-frontend/src/utils/colorScheme.ts
@@ -23,7 +23,7 @@ import {
getCategoricalSchemeRegistry,
getLabelsColorMap,
} from '@superset-ui/core';
-import { intersection, omit, pick } from 'lodash';
+import { intersection, omit, pick } from 'lodash-es';
import { areObjectsEqual } from 'src/reduxUtils';
const EMPTY_ARRAY: string[] = [];
diff --git a/superset-frontend/src/utils/downloadAsImage.tsx b/superset-frontend/src/utils/downloadAsImage.tsx
index db55a35e036..70905828d1a 100644
--- a/superset-frontend/src/utils/downloadAsImage.tsx
+++ b/superset-frontend/src/utils/downloadAsImage.tsx
@@ -18,7 +18,7 @@
*/
import { SyntheticEvent } from 'react';
import domToImage from 'dom-to-image-more';
-import { kebabCase } from 'lodash';
+import { kebabCase } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { SupersetTheme } from '@apache-superset/core/theme';
import { addWarningToast } from 'src/components/MessageToasts/actions';
diff --git a/superset-frontend/src/utils/downloadAsPdf.ts b/superset-frontend/src/utils/downloadAsPdf.ts
index 43c67996dc1..a83b96249b1 100644
--- a/superset-frontend/src/utils/downloadAsPdf.ts
+++ b/superset-frontend/src/utils/downloadAsPdf.ts
@@ -18,7 +18,7 @@
*/
import { SyntheticEvent } from 'react';
import domToPdf from 'dom-to-pdf';
-import { kebabCase } from 'lodash';
+import { kebabCase } from 'lodash-es';
import { t } from '@apache-superset/core/translation';
import { logging } from '@apache-superset/core/utils';
import { addWarningToast } from 'src/components/MessageToasts/actions';
diff --git a/superset-frontend/src/utils/getChartFormDiffs/index.ts b/superset-frontend/src/utils/getChartFormDiffs/index.ts
index 6c89b4fef31..94554d5196b 100644
--- a/superset-frontend/src/utils/getChartFormDiffs/index.ts
+++ b/superset-frontend/src/utils/getChartFormDiffs/index.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
import { DiffType } from 'src/types/DiffType';
import { JsonObject } from '@superset-ui/core';
import { sanitizeFormData } from '../sanitizeFormData';
diff --git a/superset-frontend/src/utils/sanitizeFormData/index.ts b/superset-frontend/src/utils/sanitizeFormData/index.ts
index 9c55cfc6cf4..01542ec983e 100644
--- a/superset-frontend/src/utils/sanitizeFormData/index.ts
+++ b/superset-frontend/src/utils/sanitizeFormData/index.ts
@@ -17,7 +17,7 @@
* under the License.
*/
import { JsonObject } from '@superset-ui/core';
-import { omit } from 'lodash';
+import { omit } from 'lodash-es';
const TEMPORARY_CONTROLS: string[] = ['url_params'];
diff --git a/superset-frontend/src/utils/urlUtils.ts b/superset-frontend/src/utils/urlUtils.ts
index dedc20c8330..b7889442d3d 100644
--- a/superset-frontend/src/utils/urlUtils.ts
+++ b/superset-frontend/src/utils/urlUtils.ts
@@ -24,7 +24,7 @@ import {
} from '@superset-ui/core';
import Switchboard from '@superset-ui/switchboard';
import rison from 'rison';
-import { isEmpty } from 'lodash';
+import { isEmpty } from 'lodash-es';
import {
RESERVED_CHART_URL_PARAMS,
RESERVED_DASHBOARD_URL_PARAMS,
diff --git a/superset-frontend/src/views/CRUD/utils.tsx b/superset-frontend/src/views/CRUD/utils.tsx
index a7e7d894c57..414a1ef51b3 100644
--- a/superset-frontend/src/views/CRUD/utils.tsx
+++ b/superset-frontend/src/views/CRUD/utils.tsx
@@ -27,7 +27,7 @@ import {
} from '@superset-ui/core';
import { styled } from '@apache-superset/core/theme';
import Chart from 'src/types/Chart';
-import { intersection } from 'lodash';
+import { intersection } from 'lodash-es';
import rison from 'rison';
import type {
ListViewFetchDataConfig as FetchDataConfig,