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

hainenber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 613033b294b chore(build): replace external file-related deps with 
native Node modules (#42939)
613033b294b is described below

commit 613033b294bb827ebbdfa662d99852c6c4459734
Author: Đỗ Trọng Hải <[email protected]>
AuthorDate: Thu Sep 24 22:17:02 2026 +0700

    chore(build): replace external file-related deps with native Node modules 
(#42939)
    
    Signed-off-by: hainenber <[email protected]>
---
 superset-frontend/package-lock.json                | 24 ++++++++--
 superset-frontend/package.json                     |  7 +--
 .../packages/generator-superset/package.json       |  1 -
 .../generator-superset/test/plugin-chart.test.ts   |  6 +--
 superset-frontend/scripts/build.js                 | 21 ++++----
 superset-frontend/scripts/copyAssets.js            | 56 ----------------------
 6 files changed, 38 insertions(+), 77 deletions(-)

diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 8b34a3e8981..7a25297ee99 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -89,8 +89,6 @@
         "dom-to-image-more": "^3.10.2",
         "dom-to-pdf": "^0.3.2",
         "echarts": "^6.1.0",
-        "fast-glob": "^3.3.2",
-        "fs-extra": "^11.4.0",
         "fuse.js": "^7.5.0",
         "geolib": "^3.3.14",
         "geostyler": "^18.6.0",
@@ -8284,6 +8282,7 @@
       "version": "2.1.5",
       "resolved": 
"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz";,
       "integrity": 
"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
@@ -8297,6 +8296,7 @@
       "version": "2.0.5",
       "resolved": 
"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz";,
       "integrity": 
"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 8"
@@ -8306,6 +8306,7 @@
       "version": "1.2.8",
       "resolved": 
"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz";,
       "integrity": 
"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
@@ -17991,6 +17992,7 @@
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz";,
       "integrity": 
"sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "fill-range": "^7.1.1"
@@ -22648,6 +22650,7 @@
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz";,
       "integrity": 
"sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -22771,6 +22774,7 @@
       "version": "1.18.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz";,
       "integrity": 
"sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "reusify": "^1.0.4"
@@ -22937,6 +22941,7 @@
       "version": "7.1.1",
       "resolved": 
"https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz";,
       "integrity": 
"sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "to-regex-range": "^5.0.1"
@@ -23496,6 +23501,7 @@
       "version": "11.4.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz";,
       "integrity": 
"sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "graceful-fs": "^4.2.0",
@@ -24459,6 +24465,7 @@
       "version": "5.1.2",
       "resolved": 
"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";,
       "integrity": 
"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "is-glob": "^4.0.1"
@@ -24702,6 +24709,7 @@
       "version": "4.2.11",
       "resolved": 
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz";,
       "integrity": 
"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "dev": true,
       "license": "ISC"
     },
     "node_modules/h3-js": {
@@ -26107,6 +26115,7 @@
       "version": "2.1.1",
       "resolved": 
"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";,
       "integrity": 
"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -26169,6 +26178,7 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";,
       "integrity": 
"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "is-extglob": "^2.1.1"
@@ -26276,6 +26286,7 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";,
       "integrity": 
"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.12.0"
@@ -31058,6 +31069,7 @@
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz";,
       "integrity": 
"sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "universalify": "^2.0.0"
@@ -33088,6 +33100,7 @@
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";,
       "integrity": 
"sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 8"
@@ -33666,6 +33679,7 @@
       "version": "4.0.8",
       "resolved": 
"https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz";,
       "integrity": 
"sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "braces": "^3.0.3",
@@ -37429,6 +37443,7 @@
       "version": "1.2.3",
       "resolved": 
"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";,
       "integrity": 
"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -40158,6 +40173,7 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";,
       "integrity": 
"sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "iojs": ">=1.0.0",
@@ -40244,6 +40260,7 @@
       "version": "1.2.0",
       "resolved": 
"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";,
       "integrity": 
"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -43254,6 +43271,7 @@
       "version": "5.0.1",
       "resolved": 
"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";,
       "integrity": 
"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "is-number": "^7.0.0"
@@ -44263,6 +44281,7 @@
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz";,
       "integrity": 
"sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 10.0.0"
@@ -46772,7 +46791,6 @@
       },
       "devDependencies": {
         "cross-env": "^10.1.0",
-        "fs-extra": "^11.4.0",
         "jest": "^30.5.1",
         "yeoman-test": "^11.8.2"
       },
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 2a6471f2ac5..715a5f65231 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -52,8 +52,8 @@
     "cover": "cross-env NODE_ENV=test 
NODE_OPTIONS=\"--max-old-space-size=4096\" jest --coverage",
     "dev": "webpack --mode=development --color --watch",
     "dev-server": "cross-env NODE_ENV=development BABEL_ENV=development node 
--max_old_space_size=4096 
./node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode=development",
-    "format": "npm run _format --write",
-    "format-check": "npm run _format --check",
+    "format": "npm run _format -- --write",
+    "format-check": "npm run _format -- --check",
     "lint": "npx oxlint --config oxlint.json --quiet",
     "lint:all": "npx oxlint --config oxlint.json && npm run type",
     "lint-fix": "npx oxlint --config oxlint.json --fix --quiet",
@@ -66,7 +66,6 @@
     "ensure-oxc": "echo 'OXC linter is ready' && npx oxlint --version",
     "lint-stats": "node ./scripts/oxlint-metrics-uploader.js",
     "plugins:build": "node ./scripts/build.js",
-    "plugins:build-assets": "node ./scripts/copyAssets.js",
     "plugins:create-conventional-version": "npm run prune && lerna version 
--conventional-commits --create-release github --no-private --yes 
--tag-version-prefix=\"plugins-and-packages-v\"",
     "plugins:create-minor-version": "npm run prune && lerna version minor 
--no-private --yes --tag-version-prefix=\"plugins-and-packages-v\"",
     "plugins:create-patch-version": "npm run prune && lerna version patch 
--no-private --yes --tag-version-prefix=\"plugins-and-packages-v\"",
@@ -167,8 +166,6 @@
     "dom-to-image-more": "^3.10.2",
     "dom-to-pdf": "^0.3.2",
     "echarts": "^6.1.0",
-    "fast-glob": "^3.3.2",
-    "fs-extra": "^11.4.0",
     "fuse.js": "^7.5.0",
     "geolib": "^3.3.14",
     "geostyler": "^18.6.0",
diff --git a/superset-frontend/packages/generator-superset/package.json 
b/superset-frontend/packages/generator-superset/package.json
index 370541f3443..6699c1f9b1f 100644
--- a/superset-frontend/packages/generator-superset/package.json
+++ b/superset-frontend/packages/generator-superset/package.json
@@ -38,7 +38,6 @@
   },
   "devDependencies": {
     "cross-env": "^10.1.0",
-    "fs-extra": "^11.4.0",
     "jest": "^30.5.1",
     "yeoman-test": "^11.8.2"
   },
diff --git 
a/superset-frontend/packages/generator-superset/test/plugin-chart.test.ts 
b/superset-frontend/packages/generator-superset/test/plugin-chart.test.ts
index 4687d27db5f..bdeea43bc5a 100644
--- a/superset-frontend/packages/generator-superset/test/plugin-chart.test.ts
+++ b/superset-frontend/packages/generator-superset/test/plugin-chart.test.ts
@@ -20,8 +20,7 @@
 import { dirname, join } from 'path';
 // @ts-ignore -- yeoman-test type resolution differs between local and Docker 
environments
 import helpers from 'yeoman-test';
-// @ts-ignore -- fs-extra/esm has no type declarations
-import { copySync } from 'fs-extra/esm';
+import { cpSync } from 'fs';
 import { fileURLToPath } from 'url';
 import pluginChartModule from '../generators/plugin-chart';
 
@@ -31,9 +30,10 @@ test('generator-superset:plugin-chart:creates files', async 
() => {
     .onTargetDirectory((dir: string) => {
       // `dir` is the path to the new temporary directory
       const generatorDirname = dirname(fileURLToPath(import.meta.url));
-      copySync(
+      cpSync(
         join(generatorDirname, '../generators/plugin-chart/templates'),
         join(dir, 'unknown/templates'),
+        { recursive: true },
       );
     })
     .withPrompts({
diff --git a/superset-frontend/scripts/build.js 
b/superset-frontend/scripts/build.js
index ad3c8c696c6..6b0325ab257 100755
--- a/superset-frontend/scripts/build.js
+++ b/superset-frontend/scripts/build.js
@@ -25,7 +25,7 @@
  */
 
 import { spawnSync } from 'node:child_process';
-import fastGlob from 'fast-glob';
+import { globSync } from 'node:fs';
 import yargs from 'yargs';
 import { hideBin } from 'yargs/helpers';
 
@@ -61,26 +61,29 @@ function getPackages(packagePattern, tsOnly = false) {
   // Find packages in both @superset-ui and @apache-superset scopes
   const supersetUiPackages = [
     ...new Set(
-      fastGlob
-        .sync([
+      globSync(
+        [
           `./node_modules/@superset-ui/${pattern}/src/**/*.${
             tsOnly ? '{ts,tsx}' : '{ts,tsx,js,jsx}'
           }`,
-        ])
-        .map(x => x.split('/')[3])
+        ],
+        { followSymlinks: true },
+      )
+        .map(x => x.split('/')[2])
         .filter(x => !META_PACKAGES.has(x)),
     ),
   ];
 
   const apachePackages = [
     ...new Set(
-      fastGlob
-        .sync([
+      globSync(
+        [
           `./node_modules/@apache-superset/${pattern}/src/**/*.${
             tsOnly ? '{ts,tsx}' : '{ts,tsx,js,jsx}'
           }`,
-        ])
-        .map(x => x.split('/')[3]),
+        ],
+        { followSymlinks: true },
+      ).map(x => x.split('/')[2]),
     ),
   ];
 
diff --git a/superset-frontend/scripts/copyAssets.js 
b/superset-frontend/scripts/copyAssets.js
deleted file mode 100644
index 7d37c33e18e..00000000000
--- a/superset-frontend/scripts/copyAssets.js
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env node
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable no-console */
-import { sync } from 'fast-glob';
-import { copy } from 'fs-extra';
-
-const pkgGlob = process.argv[2] || '*';
-
-const packages = sync([`{packages,plugins}/${pkgGlob}`], {
-  onlyDirectories: true,
-});
-
-console.log('Copying asset files from package {src} to {lib,esm}...');
-packages.forEach(pkg => {
-  const assets = sync([`${pkg}/src/**/*.{png,gif,jpg,css,geojson}`]);
-  assets.forEach(filePath => {
-    ['lib', 'esm']
-      .map(dir => filePath.replace(`${pkg}/src`, `${pkg}/${dir}`))
-      .forEach(newFilePath => {
-        copy(filePath, newFilePath, err => {
-          if (err) {
-            console.error(err);
-          }
-        });
-      });
-  });
-  if (assets.length > 0) {
-    console.log(
-      `  Copied ${assets.length
-        .toString()
-        .padStart(2)} asset files for ${pkg.replace(
-        'packages/superset-ui-',
-        '',
-      )}`,
-    );
-  }
-});

Reply via email to