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

rusackas pushed a commit to branch feat/bun-turborepo-poc
in repository https://gitbox.apache.org/repos/asf/superset.git

commit d0575ceb29d07b637d71d512cd3dd2ce38e67453
Author: Evan Rusackas <[email protected]>
AuthorDate: Tue Feb 10 10:25:06 2026 -0800

    feat(build): POC - add Turborepo for cached package builds
    
    This PR adds Turborepo as a build orchestration tool for the frontend
    monorepo, providing intelligent caching for package builds.
    
    Changes:
    - Add turbo.json with task pipeline configuration
    - Add turbo devDependency to root package.json
    - Add packageManager field for Turborepo compatibility
    - Add build/clean/type-check scripts to all packages and plugins
    - Add .turbo to .gitignore
    
    New scripts:
    - npm run turbo:build - Build all packages with caching
    - npm run turbo:build:force - Build without cache
    - npm run turbo:type-check - Type check all packages
    - npm run turbo:clean - Clean all build artifacts
    
    Benefits:
    - Cached builds: 5s → 314ms (16x faster) on unchanged packages
    - Parallel builds across packages
    - Only rebuilds what changed
    - Local-only caching (no cloud dependencies)
    
    Note: Lerna is preserved for versioning and publishing. Turborepo
    handles build orchestration, not package publishing.
    
    Co-Authored-By: Claude Opus 4.5 <[email protected]>
---
 superset-frontend/.gitignore                       |   2 +
 superset-frontend/package-lock.json                | 103 +++++++++++++++++++++
 superset-frontend/package.json                     |  10 +-
 .../packages/superset-core/package.json            |   2 +-
 .../superset-ui-chart-controls/package.json        |   5 +
 .../packages/superset-ui-core/package.json         |   5 +
 .../packages/superset-ui-switchboard/package.json  |   5 +
 .../legacy-plugin-chart-calendar/package.json      |   5 +
 .../plugins/legacy-plugin-chart-chord/package.json |   5 +
 .../legacy-plugin-chart-country-map/package.json   |   5 +
 .../legacy-plugin-chart-horizon/package.json       |   5 +
 .../legacy-plugin-chart-map-box/package.json       |   5 +
 .../legacy-plugin-chart-paired-t-test/package.json |   5 +
 .../package.json                                   |   5 +
 .../legacy-plugin-chart-partition/package.json     |   5 +
 .../plugins/legacy-plugin-chart-rose/package.json  |   5 +
 .../legacy-plugin-chart-world-map/package.json     |   5 +
 .../legacy-preset-chart-deckgl/package.json        |   5 +
 .../plugins/legacy-preset-chart-nvd3/package.json  |   5 +
 .../plugin-chart-ag-grid-table/package.json        |   5 +
 .../plugins/plugin-chart-cartodiagram/package.json |   5 +
 .../plugins/plugin-chart-echarts/package.json      |   5 +
 .../plugins/plugin-chart-handlebars/package.json   |   5 +
 .../plugins/plugin-chart-pivot-table/package.json  |   5 +
 .../plugins/plugin-chart-table/package.json        |   5 +
 .../plugins/plugin-chart-word-cloud/package.json   |   5 +
 superset-frontend/turbo.json                       |  46 +++++++++
 27 files changed, 271 insertions(+), 2 deletions(-)

diff --git a/superset-frontend/.gitignore b/superset-frontend/.gitignore
index 71eded30927..55e8390f69d 100644
--- a/superset-frontend/.gitignore
+++ b/superset-frontend/.gitignore
@@ -12,3 +12,5 @@ src/temp
 **/lib/*
 **/storybook-static/*
 migration-storybook.log
+# Turborepo cache
+.turbo
diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 3c56d90a230..0f195794d82 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -285,6 +285,7 @@
         "ts-jest": "^29.4.6",
         "tscw-config": "^1.1.2",
         "tsx": "^4.21.0",
+        "turbo": "^2.8.4",
         "typescript": "5.4.5",
         "unzipper": "^0.12.3",
         "vm-browserify": "^1.1.2",
@@ -51939,6 +51940,108 @@
         "node": "*"
       }
     },
+    "node_modules/turbo": {
+      "version": "2.8.4",
+      "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.8.4.tgz";,
+      "integrity": 
"sha512-yf0DFQBoR0DCOg11pYRAX5/CvXwTUwJsIFTHTOpHbUy3GnEpGBfE5E4440nmn8g6FpXXpy8Im2UEpmmv0fz67g==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "turbo": "bin/turbo"
+      },
+      "optionalDependencies": {
+        "turbo-darwin-64": "2.8.4",
+        "turbo-darwin-arm64": "2.8.4",
+        "turbo-linux-64": "2.8.4",
+        "turbo-linux-arm64": "2.8.4",
+        "turbo-windows-64": "2.8.4",
+        "turbo-windows-arm64": "2.8.4"
+      }
+    },
+    "node_modules/turbo-darwin-64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.8.4.tgz";,
+      "integrity": 
"sha512-xVkkgQMRyLdKodZ0NU0lkjcLDm7J9R0zDNY61H4K38F94ZuspjeM1zaVB9HNM/7m4/7QvAPrvO/vCBr2qWmKKg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/turbo-darwin-arm64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.8.4.tgz";,
+      "integrity": 
"sha512-ycg5jmWIV9hFScbb7bOhBc0A8jiKfOdP5SAige6FUJDnSTkL29qpLIZxcE5/J/5NNys7hVifHocDCT08ELcJ5Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/turbo-linux-64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.8.4.tgz";,
+      "integrity": 
"sha512-RzH0bTRRCobvBs6mLxporuF/L2MhPJlYZ/rwfzMfwWX/TnNYUcOROgNqHIH6MK4eBAjQ7YliBDrstHnFrO8C7A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/turbo-linux-arm64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.8.4.tgz";,
+      "integrity": 
"sha512-7HPdZjqZqq/3eg16oQMmEguZLrl4BGGVlXNpiy2mIhNjXheJjtSJ7rvgnpxMHXAFsaOPytSEkvgydB2qsYtM3g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/turbo-windows-64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.8.4.tgz";,
+      "integrity": 
"sha512-cKo42yFeEixPz3rljG4rSHTjCLsNSxdS3HUDen5CpoyXu+eGxAeO50wUnGIzvkXRRLJTkG9rhIITNdqUzlrijA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/turbo-windows-arm64": {
+      "version": "2.8.4",
+      "resolved": 
"https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.8.4.tgz";,
+      "integrity": 
"sha512-9g6P11SIIQSRlDqwd9QITR82hPeUjHenSYVsULrK7X57x+dmQIAkenZahSaMRDts9fRQygF5xBMoH0uZGwUvoA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
     "node_modules/tweetnacl": {
       "version": "0.14.5",
       "resolved": 
"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";,
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index aaf6dcad08a..1c22cba448d 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -1,6 +1,7 @@
 {
   "name": "superset",
   "version": "0.0.0-dev",
+  "packageManager": "[email protected]",
   "description": "Superset is a data exploration platform designed to be 
visual, intuitive, and interactive.",
   "keywords": [
     "big",
@@ -68,6 +69,12 @@
     "plugins:publish-all": "npm run prune && npm run plugins:build && lerna 
publish from-package --force-publish --yes",
     "plugins:release-conventional": "npm run prune && npm run plugins:build && 
lerna publish --conventional-commits --create-release github --yes",
     "plugins:release-from-tag": "npm run prune && npm run plugins:build && 
lerna publish from-package --yes",
+    "turbo:build": "turbo run build",
+    "turbo:build:force": "turbo run build --force",
+    "turbo:type-check": "turbo run type-check",
+    "turbo:lint": "turbo run lint",
+    "turbo:test": "turbo run test",
+    "turbo:clean": "turbo run clean && rm -rf .turbo",
     "plugins:storybook": "cd packages/superset-ui-demo && npm run storybook",
     "playwright:test": "playwright test",
     "playwright:ui": "playwright test --ui",
@@ -187,11 +194,11 @@
     "markdown-to-jsx": "^9.7.3",
     "match-sorter": "^6.3.4",
     "memoize-one": "^5.2.1",
-    "pretty-ms": "^9.3.0",
     "mousetrap": "^1.6.5",
     "mustache": "^4.2.0",
     "nanoid": "^5.1.6",
     "ol": "^7.5.2",
+    "pretty-ms": "^9.3.0",
     "query-string": "9.3.1",
     "re-resizable": "^6.11.2",
     "react": "^17.0.2",
@@ -367,6 +374,7 @@
     "ts-jest": "^29.4.6",
     "tscw-config": "^1.1.2",
     "tsx": "^4.21.0",
+    "turbo": "^2.8.4",
     "typescript": "5.4.5",
     "unzipper": "^0.12.3",
     "vm-browserify": "^1.1.2",
diff --git a/superset-frontend/packages/superset-core/package.json 
b/superset-frontend/packages/superset-core/package.json
index 6d75d70c8d0..531f7cd7abe 100644
--- a/superset-frontend/packages/superset-core/package.json
+++ b/superset-frontend/packages/superset-core/package.json
@@ -47,7 +47,7 @@
   "scripts": {
     "clean": "rm -rf lib tsconfig.tsbuildinfo",
     "build": "npm run clean && npx tsc --build",
-    "type": "npx tsc --noEmit"
+    "type-check": "npx tsc --noEmit"
   },
   "publishConfig": {
     "access": "public"
diff --git a/superset-frontend/packages/superset-ui-chart-controls/package.json 
b/superset-frontend/packages/superset-ui-chart-controls/package.json
index 061eba7bd4a..aed549e376d 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/package.json
+++ b/superset-frontend/packages/superset-ui-chart-controls/package.json
@@ -47,5 +47,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/packages/superset-ui-core/package.json 
b/superset-frontend/packages/superset-ui-core/package.json
index 425e90aaa06..7cac32f1685 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -131,5 +131,10 @@
       "require": "./lib/utils/*.js",
       "types": "./lib/utils/*.d.ts"
     }
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/packages/superset-ui-switchboard/package.json 
b/superset-frontend/packages/superset-ui-switchboard/package.json
index 58298fd41e9..11c45b18255 100644
--- a/superset-frontend/packages/superset-ui-switchboard/package.json
+++ b/superset-frontend/packages/superset-ui-switchboard/package.json
@@ -30,5 +30,10 @@
   "homepage": "https://github.com/apache/superset#readme";,
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-calendar/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-calendar/package.json
index 99966ea0d0b..adb4727912a 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-calendar/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-calendar/package.json
@@ -37,5 +37,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-plugin-chart-chord/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-chord/package.json
index 03ecfd5d7f8..e81d8deae63 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-chord/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-chord/package.json
@@ -37,5 +37,10 @@
     "@superset-ui/chart-controls": "*",
     "@superset-ui/core": "*",
     "@apache-superset/core": "*"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-country-map/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-country-map/package.json
index 1a5d8f09003..33ff3ac8d80 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-country-map/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-country-map/package.json
@@ -35,5 +35,10 @@
     "@superset-ui/chart-controls": "*",
     "@superset-ui/core": "*",
     "react": "^17.0.2"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-plugin-chart-horizon/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-horizon/package.json
index 5f7cbc4ed2a..9180cbc5ced 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-horizon/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-horizon/package.json
@@ -35,5 +35,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-plugin-chart-map-box/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-map-box/package.json
index 90b77fece55..e1b12872a49 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-map-box/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-map-box/package.json
@@ -40,5 +40,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/package.json
index 3272f943d62..a8579497e5b 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/package.json
@@ -35,5 +35,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/package.json
 
b/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/package.json
index 42900f5382e..6d5469baf84 100644
--- 
a/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/package.json
+++ 
b/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/package.json
@@ -37,5 +37,10 @@
     "@superset-ui/core": "*",
     "@apache-superset/core": "*",
     "react": "^17.0.2"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-partition/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-partition/package.json
index ce7d12ebf9e..a0ca3e415c1 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-partition/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-partition/package.json
@@ -38,5 +38,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-rose/package.json
index c6607a37951..02460762446 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-rose/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-rose/package.json
@@ -36,5 +36,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git 
a/superset-frontend/plugins/legacy-plugin-chart-world-map/package.json 
b/superset-frontend/plugins/legacy-plugin-chart-world-map/package.json
index bb132c0f4f8..d0a3ebc97aa 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-world-map/package.json
+++ b/superset-frontend/plugins/legacy-plugin-chart-world-map/package.json
@@ -40,5 +40,10 @@
     "@superset-ui/core": "*",
     "@apache-superset/core": "*",
     "react": "^17.0.2"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json 
b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json
index e40690c12df..073e470c5c7 100644
--- a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json
+++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json
@@ -72,5 +72,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json 
b/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
index 640a338a831..747f67bf40c 100644
--- a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
+++ b/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json
@@ -44,5 +44,10 @@
     "@superset-ui/core": "*",
     "dayjs": "^1.11.19",
     "react": "^17.0.2"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
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 6d23f8bd241..84f528d5855 100644
--- a/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-ag-grid-table/package.json
@@ -52,5 +52,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-cartodiagram/package.json 
b/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
index abca2cc0ab0..5946db0c61b 100644
--- a/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
+++ b/superset-frontend/plugins/plugin-chart-cartodiagram/package.json
@@ -49,5 +49,10 @@
     "polished": "*",
     "react": "^17.0.2",
     "react-dom": "^17.0.2"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-echarts/package.json 
b/superset-frontend/plugins/plugin-chart-echarts/package.json
index 3bba8cfea3e..1ed5d509f37 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/package.json
+++ b/superset-frontend/plugins/plugin-chart-echarts/package.json
@@ -40,5 +40,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-handlebars/package.json 
b/superset-frontend/plugins/plugin-chart-handlebars/package.json
index fd990ed955b..6108a49a673 100644
--- a/superset-frontend/plugins/plugin-chart-handlebars/package.json
+++ b/superset-frontend/plugins/plugin-chart-handlebars/package.json
@@ -46,5 +46,10 @@
     "@types/jest": "^30.0.0",
     "@types/lodash": "^4.17.23",
     "jest": "^30.2.0"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-pivot-table/package.json 
b/superset-frontend/plugins/plugin-chart-pivot-table/package.json
index b20f5970919..667f8d19e24 100644
--- a/superset-frontend/plugins/plugin-chart-pivot-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-pivot-table/package.json
@@ -41,5 +41,10 @@
     "@babel/types": "^7.29.0",
     "@types/jest": "^30.0.0",
     "jest": "^30.2.0"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-table/package.json 
b/superset-frontend/plugins/plugin-chart-table/package.json
index 27b073ec388..6dc47da4f46 100644
--- a/superset-frontend/plugins/plugin-chart-table/package.json
+++ b/superset-frontend/plugins/plugin-chart-table/package.json
@@ -52,5 +52,10 @@
   },
   "publishConfig": {
     "access": "public"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/package.json 
b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
index 54bb2d7c55b..537ea35e66d 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/package.json
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
@@ -43,5 +43,10 @@
   },
   "devDependencies": {
     "@types/d3-cloud": "^1.2.9"
+  },
+  "scripts": {
+    "clean": "rm -rf lib esm tsconfig.tsbuildinfo",
+    "build": "npm run clean && npx tsc --build",
+    "type-check": "npx tsc --noEmit"
   }
 }
diff --git a/superset-frontend/turbo.json b/superset-frontend/turbo.json
new file mode 100644
index 00000000000..8ee8dcbda19
--- /dev/null
+++ b/superset-frontend/turbo.json
@@ -0,0 +1,46 @@
+{
+  "$schema": "https://turbo.build/schema.json";,
+  "tasks": {
+    "build": {
+      "dependsOn": ["^build"],
+      "inputs": ["src/**", "package.json", "tsconfig.json", "tsconfig.*.json"],
+      "outputs": ["lib/**", "esm/**", "dist/**", "tsconfig.tsbuildinfo"],
+      "cache": true
+    },
+    "build:esm": {
+      "dependsOn": ["^build:esm"],
+      "inputs": ["src/**", "package.json", "tsconfig.json"],
+      "outputs": ["esm/**"],
+      "cache": true
+    },
+    "build:cjs": {
+      "dependsOn": ["^build:cjs"],
+      "inputs": ["src/**", "package.json", "tsconfig.json"],
+      "outputs": ["lib/**"],
+      "cache": true
+    },
+    "type-check": {
+      "dependsOn": ["^build"],
+      "inputs": ["src/**", "*.ts", "*.tsx", "tsconfig.json"],
+      "outputs": [],
+      "cache": true
+    },
+    "lint": {
+      "inputs": ["src/**", "*.ts", "*.tsx", "*.js", "*.jsx"],
+      "outputs": [],
+      "cache": true
+    },
+    "test": {
+      "dependsOn": ["^build"],
+      "inputs": ["src/**", "test/**", "spec/**", "**/*.test.*", "**/*.spec.*"],
+      "outputs": ["coverage/**"],
+      "cache": true
+    },
+    "clean": {
+      "cache": false
+    }
+  },
+  "ui": "tui",
+  "daemon": true,
+  "cacheDir": ".turbo"
+}

Reply via email to