diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 2e18ff1e86eba..a4bfa4c4471b8 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -282,6 +282,7 @@ graph LR;
   cross-spawn-->which;
   debug-->ms;
   encoding-->iconv-lite;
+  fdir-->picomatch;
   foreground-child-->cross-spawn;
   foreground-child-->signal-exit;
   fs-minipass-->minipass;
@@ -428,16 +429,15 @@ graph LR;
   minipass-pipeline-->minipass;
   minipass-sized-->minipass;
   minizlib-->minipass;
-  minizlib-->rimraf;
   node-gyp-->env-paths;
   node-gyp-->exponential-backoff;
-  node-gyp-->glob;
   node-gyp-->graceful-fs;
   node-gyp-->make-fetch-happen;
   node-gyp-->nopt;
   node-gyp-->proc-log;
   node-gyp-->semver;
   node-gyp-->tar;
+  node-gyp-->tinyglobby;
   node-gyp-->which;
   nopt-->abbrev;
   normalize-package-data-->hosted-git-info;
@@ -677,6 +677,7 @@ graph LR;
   npmcli-smoke-tests-->npmcli-promise-spawn["@npmcli/promise-spawn"];
   npmcli-smoke-tests-->npmcli-template-oss["@npmcli/template-oss"];
   npmcli-smoke-tests-->proxy;
+  npmcli-smoke-tests-->rimraf;
   npmcli-smoke-tests-->tap;
   npmcli-smoke-tests-->which;
   pacote-->cacache;
@@ -709,7 +710,6 @@ graph LR;
   read-->mute-stream;
   read-package-json-fast-->json-parse-even-better-errors;
   read-package-json-fast-->npm-normalize-package-bin;
-  rimraf-->glob;
   shebang-command-->shebang-regex;
   sigstore-->sigstore-bundle["@sigstore/bundle"];
   sigstore-->sigstore-core["@sigstore/core"];
@@ -751,6 +751,8 @@ graph LR;
   tar-->minizlib;
   tar-->mkdirp;
   tar-->yallist;
+  tinyglobby-->fdir;
+  tinyglobby-->picomatch;
   tuf-js-->debug;
   tuf-js-->make-fetch-happen;
   tuf-js-->tufjs-models["@tufjs/models"];
diff --git a/node_modules/.gitignore b/node_modules/.gitignore
index 4ec7637cdb68a..8451947e5f73b 100644
--- a/node_modules/.gitignore
+++ b/node_modules/.gitignore
@@ -182,7 +182,6 @@
 !/read-package-json-fast
 !/read
 !/retry
-!/rimraf
 !/safer-buffer
 !/semver
 !/shebang-command
@@ -216,6 +215,11 @@
 !/tar/node_modules/minipass
 !/text-table
 !/tiny-relative-date
+!/tinyglobby
+!/tinyglobby/node_modules/
+/tinyglobby/node_modules/*
+!/tinyglobby/node_modules/fdir
+!/tinyglobby/node_modules/picomatch
 !/treeverse
 !/tuf-js
 !/unique-filename
diff --git a/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js b/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
index ad65eef049507..b4906d2783372 100644
--- a/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
+++ b/node_modules/cacache/node_modules/minizlib/dist/commonjs/index.js
@@ -1,4 +1,37 @@
 "use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
@@ -7,11 +40,18 @@ exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unz
 const assert_1 = __importDefault(require("assert"));
 const buffer_1 = require("buffer");
 const minipass_1 = require("minipass");
-const zlib_1 = __importDefault(require("zlib"));
+const realZlib = __importStar(require("zlib"));
 const constants_js_1 = require("./constants.js");
 var constants_js_2 = require("./constants.js");
 Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
 const OriginalBufferConcat = buffer_1.Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 class ZlibError extends Error {
     code;
@@ -69,7 +109,7 @@ class ZlibBase extends minipass_1.Minipass {
         try {
             // @types/node doesn't know that it exports the classes, but they're there
             //@ts-ignore
-            this.#handle = new zlib_1.default[mode](opts);
+            this.#handle = new realZlib[mode](opts);
         }
         catch (er) {
             // make sure that all errors get decorated properly
@@ -159,7 +199,7 @@ class ZlibBase extends minipass_1.Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        buffer_1.Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -167,12 +207,12 @@ class ZlibBase extends minipass_1.Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/cacache/node_modules/minizlib/dist/esm/index.js b/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
index a6269b505f47c..f33586a8ab0ec 100644
--- a/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
+++ b/node_modules/cacache/node_modules/minizlib/dist/esm/index.js
@@ -1,10 +1,17 @@
 import assert from 'assert';
 import { Buffer } from 'buffer';
 import { Minipass } from 'minipass';
-import realZlib from 'zlib';
+import * as realZlib from 'zlib';
 import { constants } from './constants.js';
 export { constants } from './constants.js';
 const OriginalBufferConcat = Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 export class ZlibError extends Error {
     code;
@@ -151,7 +158,7 @@ class ZlibBase extends Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -159,12 +166,12 @@ class ZlibBase extends Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/cacache/node_modules/minizlib/package.json b/node_modules/cacache/node_modules/minizlib/package.json
index e94623ff43d35..43cb855e15a5d 100644
--- a/node_modules/cacache/node_modules/minizlib/package.json
+++ b/node_modules/cacache/node_modules/minizlib/package.json
@@ -1,11 +1,10 @@
 {
   "name": "minizlib",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
   "main": "./dist/commonjs/index.js",
   "dependencies": {
-    "minipass": "^7.0.4",
-    "rimraf": "^5.0.5"
+    "minipass": "^7.1.2"
   },
   "scripts": {
     "prepare": "tshy",
@@ -34,11 +33,10 @@
   "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
   "license": "MIT",
   "devDependencies": {
-    "@types/node": "^20.11.29",
-    "mkdirp": "^3.0.1",
-    "tap": "^18.7.1",
-    "tshy": "^1.12.0",
-    "typedoc": "^0.25.12"
+    "@types/node": "^22.13.14",
+    "tap": "^21.1.0",
+    "tshy": "^3.0.2",
+    "typedoc": "^0.28.1"
   },
   "files": [
     "dist"
@@ -77,5 +75,6 @@
     "bracketSameLine": true,
     "arrowParens": "avoid",
     "endOfLine": "lf"
-  }
+  },
+  "module": "./dist/esm/index.js"
 }
diff --git a/node_modules/ci-info/index.js b/node_modules/ci-info/index.js
index 9eba6940c4147..9cd162991a02e 100644
--- a/node_modules/ci-info/index.js
+++ b/node_modules/ci-info/index.js
@@ -36,7 +36,7 @@ exports.isCI = !!(
   env.CI !== 'false' && // Bypass all checks if CI env is explicitly set to 'false'
   (env.BUILD_ID || // Jenkins, Cloudbees
     env.BUILD_NUMBER || // Jenkins, TeamCity
-    env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari
+    env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari, Cloudflare Pages
     env.CI_APP_ID || // Appflow
     env.CI_BUILD_ID || // Appflow
     env.CI_BUILD_NUMBER || // Appflow
diff --git a/node_modules/ci-info/package.json b/node_modules/ci-info/package.json
index 156329d2ce379..fc7e8999ea3e5 100644
--- a/node_modules/ci-info/package.json
+++ b/node_modules/ci-info/package.json
@@ -1,12 +1,13 @@
 {
   "name": "ci-info",
-  "version": "4.1.0",
+  "version": "4.2.0",
   "description": "Get details about the current Continuous Integration environment",
   "main": "index.js",
   "typings": "index.d.ts",
+  "type": "commonjs",
   "author": "Thomas Watson Steen <w@tson.dk> (https://twitter.com/wa7son)",
   "license": "MIT",
-  "repository": "https://github.com/watson/ci-info.git",
+  "repository": "github:watson/ci-info",
   "bugs": "https://github.com/watson/ci-info/issues",
   "homepage": "https://github.com/watson/ci-info",
   "contributors": [
@@ -41,7 +42,8 @@
   },
   "devDependencies": {
     "clear-module": "^4.1.2",
-    "husky": "^9.1.6",
+    "husky": "^9.1.7",
+    "publint": "^0.3.8",
     "standard": "^17.1.2",
     "tape": "^5.9.0"
   },
diff --git a/node_modules/ci-info/vendors.json b/node_modules/ci-info/vendors.json
index 64d5924d1a557..0c47fa99caef2 100644
--- a/node_modules/ci-info/vendors.json
+++ b/node_modules/ci-info/vendors.json
@@ -85,6 +85,11 @@
     "env": "CIRRUS_CI",
     "pr": "CIRRUS_PR"
   },
+  {
+    "name": "Cloudflare Pages",
+    "constant": "CLOUDFLARE_PAGES",
+    "env": "CF_PAGES"
+  },
   {
     "name": "Codefresh",
     "constant": "CODEFRESH",
diff --git a/node_modules/minipass-fetch/lib/index.js b/node_modules/minipass-fetch/lib/index.js
index da402161670e6..f0f4bb66dbb67 100644
--- a/node_modules/minipass-fetch/lib/index.js
+++ b/node_modules/minipass-fetch/lib/index.js
@@ -318,8 +318,7 @@ const fetch = async (url, opts) => {
       if (codings === 'deflate' || codings === 'x-deflate') {
         // handle the infamous raw deflate response from old servers
         // a hack for old IIS and Apache servers
-        const raw = res.pipe(new Minipass())
-        raw.once('data', chunk => {
+        res.once('data', chunk => {
           // see http://stackoverflow.com/questions/37519828
           const decoder = (chunk[0] & 0x0F) === 0x08
             ? new zlib.Inflate()
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js b/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
index ad65eef049507..b4906d2783372 100644
--- a/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
+++ b/node_modules/minipass-fetch/node_modules/minizlib/dist/commonjs/index.js
@@ -1,4 +1,37 @@
 "use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
@@ -7,11 +40,18 @@ exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unz
 const assert_1 = __importDefault(require("assert"));
 const buffer_1 = require("buffer");
 const minipass_1 = require("minipass");
-const zlib_1 = __importDefault(require("zlib"));
+const realZlib = __importStar(require("zlib"));
 const constants_js_1 = require("./constants.js");
 var constants_js_2 = require("./constants.js");
 Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
 const OriginalBufferConcat = buffer_1.Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 class ZlibError extends Error {
     code;
@@ -69,7 +109,7 @@ class ZlibBase extends minipass_1.Minipass {
         try {
             // @types/node doesn't know that it exports the classes, but they're there
             //@ts-ignore
-            this.#handle = new zlib_1.default[mode](opts);
+            this.#handle = new realZlib[mode](opts);
         }
         catch (er) {
             // make sure that all errors get decorated properly
@@ -159,7 +199,7 @@ class ZlibBase extends minipass_1.Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        buffer_1.Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -167,12 +207,12 @@ class ZlibBase extends minipass_1.Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js b/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
index a6269b505f47c..f33586a8ab0ec 100644
--- a/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
+++ b/node_modules/minipass-fetch/node_modules/minizlib/dist/esm/index.js
@@ -1,10 +1,17 @@
 import assert from 'assert';
 import { Buffer } from 'buffer';
 import { Minipass } from 'minipass';
-import realZlib from 'zlib';
+import * as realZlib from 'zlib';
 import { constants } from './constants.js';
 export { constants } from './constants.js';
 const OriginalBufferConcat = Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 export class ZlibError extends Error {
     code;
@@ -151,7 +158,7 @@ class ZlibBase extends Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -159,12 +166,12 @@ class ZlibBase extends Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/package.json b/node_modules/minipass-fetch/node_modules/minizlib/package.json
index e94623ff43d35..43cb855e15a5d 100644
--- a/node_modules/minipass-fetch/node_modules/minizlib/package.json
+++ b/node_modules/minipass-fetch/node_modules/minizlib/package.json
@@ -1,11 +1,10 @@
 {
   "name": "minizlib",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
   "main": "./dist/commonjs/index.js",
   "dependencies": {
-    "minipass": "^7.0.4",
-    "rimraf": "^5.0.5"
+    "minipass": "^7.1.2"
   },
   "scripts": {
     "prepare": "tshy",
@@ -34,11 +33,10 @@
   "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
   "license": "MIT",
   "devDependencies": {
-    "@types/node": "^20.11.29",
-    "mkdirp": "^3.0.1",
-    "tap": "^18.7.1",
-    "tshy": "^1.12.0",
-    "typedoc": "^0.25.12"
+    "@types/node": "^22.13.14",
+    "tap": "^21.1.0",
+    "tshy": "^3.0.2",
+    "typedoc": "^0.28.1"
   },
   "files": [
     "dist"
@@ -77,5 +75,6 @@
     "bracketSameLine": true,
     "arrowParens": "avoid",
     "endOfLine": "lf"
-  }
+  },
+  "module": "./dist/esm/index.js"
 }
diff --git a/node_modules/minipass-fetch/package.json b/node_modules/minipass-fetch/package.json
index 6e24834598038..eb8a4d4fac40d 100644
--- a/node_modules/minipass-fetch/package.json
+++ b/node_modules/minipass-fetch/package.json
@@ -1,6 +1,6 @@
 {
   "name": "minipass-fetch",
-  "version": "4.0.0",
+  "version": "4.0.1",
   "description": "An implementation of window.fetch in Node.js using Minipass streams",
   "license": "MIT",
   "main": "lib/index.js",
diff --git a/node_modules/node-gyp/.release-please-manifest.json b/node_modules/node-gyp/.release-please-manifest.json
index b91326402215a..f098464b1facd 100644
--- a/node_modules/node-gyp/.release-please-manifest.json
+++ b/node_modules/node-gyp/.release-please-manifest.json
@@ -1,3 +1,3 @@
 {
-    ".": "11.1.0"
+    ".": "11.2.0"
 }
diff --git a/node_modules/node-gyp/gyp/.release-please-manifest.json b/node_modules/node-gyp/gyp/.release-please-manifest.json
index 1f9113816b3aa..589cd4553e1bd 100644
--- a/node_modules/node-gyp/gyp/.release-please-manifest.json
+++ b/node_modules/node-gyp/gyp/.release-please-manifest.json
@@ -1,3 +1,3 @@
 {
-    ".": "0.19.1"
+    ".": "0.20.0"
 }
diff --git a/node_modules/node-gyp/gyp/docs/Hacking.md b/node_modules/node-gyp/gyp/docs/Hacking.md
index b00783bd36f2b..156d485b5b82d 100644
--- a/node_modules/node-gyp/gyp/docs/Hacking.md
+++ b/node_modules/node-gyp/gyp/docs/Hacking.md
@@ -24,7 +24,7 @@ to make sure your changes aren't breaking anything important.
 You run the test driver with e.g.
 
 ``` sh
-$ python -m pip install --upgrade pip setuptools
+$ python -m pip install --upgrade pip
 $ pip install --editable ".[dev]"
 $ python -m pytest
 ```
diff --git a/node_modules/node-gyp/gyp/docs/InputFormatReference.md b/node_modules/node-gyp/gyp/docs/InputFormatReference.md
index 2b2c180f4443c..4b114f2debca4 100644
--- a/node_modules/node-gyp/gyp/docs/InputFormatReference.md
+++ b/node_modules/node-gyp/gyp/docs/InputFormatReference.md
@@ -194,6 +194,7 @@ lists associated with the following keys, are treated as pathnames:
   * include\_dirs
   * inputs
   * libraries
+  * library\_dirs
   * outputs
   * sources
   * mac\_bundle\_resources
@@ -231,7 +232,8 @@ Source dictionary from `../build/common.gypi`:
 ```
 {
   'include_dirs': ['include'],  # Treated as relative to ../build
-  'libraries': ['-lz'],  # Not treated as a pathname, begins with a dash
+  'library_dirs': ['lib'],      # Treated as relative to ../build
+  'libraries': ['-lz'],   # Not treated as a pathname, begins with a dash
   'defines': ['NDEBUG'],  # defines does not contain pathnames
 }
 ```
@@ -250,6 +252,7 @@ Merged dictionary:
 {
   'sources': ['string_util.cc'],
   'include_dirs': ['../build/include'],
+  'library_dirs': ['../build/lib'],
   'libraries': ['-lz'],
   'defines': ['NDEBUG'],
 }
diff --git a/node_modules/node-gyp/gyp/gyp_main.py b/node_modules/node-gyp/gyp/gyp_main.py
index f23dcdf882d1b..bf16987485146 100755
--- a/node_modules/node-gyp/gyp/gyp_main.py
+++ b/node_modules/node-gyp/gyp/gyp_main.py
@@ -5,8 +5,8 @@
 # found in the LICENSE file.
 
 import os
-import sys
 import subprocess
+import sys
 
 
 def IsCygwin():
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
index 629f3f61b4819..339d27d4029fc 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
@@ -4,7 +4,7 @@
 
 """Visual Studio project reader/writer."""
 
-import gyp.easy_xml as easy_xml
+from gyp import easy_xml
 
 # ------------------------------------------------------------------------------
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
index 6ca09687ad7f1..0504728d994ca 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
@@ -7,10 +7,10 @@
 """Unit tests for the MSVSSettings.py file."""
 
 import unittest
-import gyp.MSVSSettings as MSVSSettings
-
 from io import StringIO
 
+from gyp import MSVSSettings
+
 
 class TestSequenceFunctions(unittest.TestCase):
     def setUp(self):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
index 2e5c811bdde32..901ba84588589 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
@@ -4,7 +4,7 @@
 
 """Visual Studio project reader/writer."""
 
-import gyp.easy_xml as easy_xml
+from gyp import easy_xml
 
 
 class Writer:
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
index e580c00fb76d3..23d3e16953c43 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
@@ -8,8 +8,7 @@
 import re
 import socket  # for gethostname
 
-import gyp.easy_xml as easy_xml
-
+from gyp import easy_xml
 
 # ------------------------------------------------------------------------------
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
index 36bb782bd319a..27647f11d0746 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
@@ -7,7 +7,6 @@
 import copy
 import os
 
-
 # A dictionary mapping supported target types to extensions.
 TARGET_TYPE_EXT = {
     "executable": "exe",
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
index 1b3536292201b..93f48bc05c8dc 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
@@ -5,11 +5,11 @@
 """Handle version information related to Visual Stuio."""
 
 import errno
+import glob
 import os
 import re
 import subprocess
 import sys
-import glob
 
 
 def JoinPath(*args):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
index 8933d0c4f707c..77800661a48c0 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
@@ -5,16 +5,17 @@
 # found in the LICENSE file.
 
 from __future__ import annotations
-import copy
-import gyp.input
+
 import argparse
+import copy
 import os.path
 import re
 import shlex
 import sys
 import traceback
-from gyp.common import GypError
 
+import gyp.input
+from gyp.common import GypError
 
 # Default debug modes for GYP
 debug = {}
@@ -205,8 +206,7 @@ def NameValueListToDict(name_value_list):
 
 
 def ShlexEnv(env_name):
-    flags = os.environ.get(env_name, [])
-    if flags:
+    if flags := os.environ.get(env_name) or []:
         flags = shlex.split(flags)
     return flags
 
@@ -361,7 +361,7 @@ def gyp_main(args):
         action="store",
         env_name="GYP_CONFIG_DIR",
         default=None,
-        help="The location for configuration files like " "include.gypi.",
+        help="The location for configuration files like include.gypi.",
     )
     parser.add_argument(
         "-d",
@@ -525,19 +525,18 @@ def gyp_main(args):
         # If no format was given on the command line, then check the env variable.
         generate_formats = []
         if options.use_environment:
-            generate_formats = os.environ.get("GYP_GENERATORS", [])
+            generate_formats = os.environ.get("GYP_GENERATORS") or []
         if generate_formats:
             generate_formats = re.split(r"[\s,]", generate_formats)
         if generate_formats:
             options.formats = generate_formats
+        # Nothing in the variable, default based on platform.
+        elif sys.platform == "darwin":
+            options.formats = ["xcode"]
+        elif sys.platform in ("win32", "cygwin"):
+            options.formats = ["msvs"]
         else:
-            # Nothing in the variable, default based on platform.
-            if sys.platform == "darwin":
-                options.formats = ["xcode"]
-            elif sys.platform in ("win32", "cygwin"):
-                options.formats = ["msvs"]
-            else:
-                options.formats = ["make"]
+            options.formats = ["make"]
 
     if not options.generator_output and options.use_environment:
         g_o = os.environ.get("GYP_GENERATOR_OUTPUT")
@@ -696,7 +695,7 @@ def main(args):
         return 1
 
 
-# NOTE: setuptools generated console_scripts calls function with no arguments
+# NOTE: console_scripts calls this function with no arguments
 def script_main():
     return main(sys.argv[1:])
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/common.py b/node_modules/node-gyp/gyp/pylib/gyp/common.py
index 762ae021090ca..fbf1024fc3831 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/common.py
@@ -6,11 +6,10 @@
 import filecmp
 import os.path
 import re
-import tempfile
-import sys
-import subprocess
 import shlex
-
+import subprocess
+import sys
+import tempfile
 from collections.abc import MutableSet
 
 
@@ -35,7 +34,6 @@ class GypError(Exception):
   to the user.  The main entry point will catch and display this.
   """
 
-    pass
 
 
 def ExceptionAppend(e, msg):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/common_test.py b/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
index b6c4cccc1ac5c..bd7172afaf369 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
@@ -6,11 +6,13 @@
 
 """Unit tests for the common.py file."""
 
-import gyp.common
-import unittest
-import sys
 import os
-from unittest.mock import patch, MagicMock
+import sys
+import unittest
+from unittest.mock import MagicMock, patch
+
+import gyp.common
+
 
 class TestTopologicallySorted(unittest.TestCase):
     def test_Valid(self):
@@ -109,14 +111,14 @@ def mock_run(env, defines_stdout, expected_cmd):
                 return [defines, flavor]
 
         [defines1, _] = mock_run({}, "", [])
-        assert {} == defines1
+        assert defines1 == {}
 
         [defines2, flavor2] = mock_run(
             { "CC_target": "/opt/wasi-sdk/bin/clang" },
             "#define __wasm__ 1\n#define __wasi__ 1\n",
             ["/opt/wasi-sdk/bin/clang"]
         )
-        assert { "__wasm__": "1", "__wasi__": "1" } == defines2
+        assert defines2 == { "__wasm__": "1", "__wasi__": "1" }
         assert flavor2 == "wasi"
 
         [defines3, flavor3] = mock_run(
@@ -124,7 +126,7 @@ def mock_run(env, defines_stdout, expected_cmd):
             "#define __wasm__ 1\n",
             ["/opt/wasi-sdk/bin/clang", "--target=wasm32"]
         )
-        assert { "__wasm__": "1" } == defines3
+        assert defines3 == { "__wasm__": "1" }
         assert flavor3 == "wasm"
 
         [defines4, flavor4] = mock_run(
@@ -132,7 +134,7 @@ def mock_run(env, defines_stdout, expected_cmd):
             "#define __EMSCRIPTEN__ 1\n",
             ["/emsdk/upstream/emscripten/emcc"]
         )
-        assert { "__EMSCRIPTEN__": "1" } == defines4
+        assert defines4 == { "__EMSCRIPTEN__": "1" }
         assert flavor4 == "emscripten"
 
         # Test path which include white space
@@ -149,11 +151,11 @@ def mock_run(env, defines_stdout, expected_cmd):
                 "-pthread"
             ]
         )
-        assert {
+        assert defines5 == {
             "__wasm__": "1",
             "__wasi__": "1",
             "_REENTRANT": "1"
-        } == defines5
+        }
         assert flavor5 == "wasi"
 
         original_sep = os.sep
@@ -164,7 +166,7 @@ def mock_run(env, defines_stdout, expected_cmd):
             ["C:/Program Files/wasi-sdk/clang.exe"]
         )
         os.sep = original_sep
-        assert { "__wasm__": "1", "__wasi__": "1" } == defines6
+        assert defines6 == { "__wasm__": "1", "__wasi__": "1" }
         assert flavor6 == "wasi"
 
 if __name__ == "__main__":
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
index 02567b251446d..e4d2f82b68741 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
@@ -2,10 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import sys
-import re
-import os
 import locale
+import os
+import re
+import sys
 from functools import reduce
 
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
index 2d9b15210dc12..bb97b802c5955 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
@@ -6,11 +6,11 @@
 
 """ Unit tests for the easy_xml.py file. """
 
-import gyp.easy_xml as easy_xml
 import unittest
-
 from io import StringIO
 
+from gyp import easy_xml
+
 
 class TestSequenceFunctions(unittest.TestCase):
     def setUp(self):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
index 64573ad2cc70d..cb18742cd8df6 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
@@ -63,11 +63,12 @@
 """
 
 
-import gyp.common
 import json
 import os
 import posixpath
 
+import gyp.common
+
 debug = False
 
 found_dependency_string = "Found dependency"
@@ -157,7 +158,7 @@ def _AddSources(sources, base_path, base_path_components, result):
   and tracked in some other means."""
     # NOTE: gyp paths are always posix style.
     for source in sources:
-        if not len(source) or source.startswith("!!!") or source.startswith("$"):
+        if not len(source) or source.startswith(("!!!", "$")):
             continue
         # variable expansion may lead to //.
         org_source = source
@@ -747,7 +748,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
 
         if not config.files:
             raise Exception(
-                "Must specify files to analyze via config_path generator " "flag"
+                "Must specify files to analyze via config_path generator flag"
             )
 
         toplevel_dir = _ToGypPath(os.path.abspath(params["options"].toplevel_dir))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
index 64da385e6aeb4..5ebe58bb556d8 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
@@ -15,13 +15,14 @@
 # Try to avoid setting global variables where possible.
 
 
-import gyp
-import gyp.common
-import gyp.generator.make as make  # Reuse global functions from make backend.
 import os
 import re
 import subprocess
 
+import gyp
+import gyp.common
+from gyp.generator import make  # Reuse global functions from make backend.
+
 generator_default_variables = {
     "OS": "android",
     "EXECUTABLE_PREFIX": "",
@@ -177,7 +178,7 @@ def Write(
             self.WriteLn("LOCAL_MULTILIB := $(GYP_HOST_MULTILIB)")
         elif sdk_version > 0:
             self.WriteLn(
-                "LOCAL_MODULE_TARGET_ARCH := " "$(TARGET_$(GYP_VAR_PREFIX)ARCH)"
+                "LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)"
             )
             self.WriteLn("LOCAL_SDK_VERSION := %s" % sdk_version)
 
@@ -587,11 +588,10 @@ def WriteSources(self, spec, configs, extra_sources):
         local_files = []
         for source in sources:
             (root, ext) = os.path.splitext(source)
-            if "$(gyp_shared_intermediate_dir)" in source:
-                extra_sources.append(source)
-            elif "$(gyp_intermediate_dir)" in source:
-                extra_sources.append(source)
-            elif IsCPPExtension(ext) and ext != local_cpp_extension:
+            if ("$(gyp_shared_intermediate_dir)" in source
+                or "$(gyp_intermediate_dir)" in source
+                or (IsCPPExtension(ext) and ext != local_cpp_extension)
+            ):
                 extra_sources.append(source)
             else:
                 local_files.append(os.path.normpath(os.path.join(self.path, source)))
@@ -730,19 +730,18 @@ def ComputeOutput(self, spec):
                 path = "$($(GYP_HOST_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)"
             else:
                 path = "$($(GYP_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)"
+        # Other targets just get built into their intermediate dir.
+        elif self.toolset == "host":
+            path = (
+                "$(call intermediates-dir-for,%s,%s,true,,"
+                "$(GYP_HOST_VAR_PREFIX))"
+                % (self.android_class, self.android_module)
+            )
         else:
-            # Other targets just get built into their intermediate dir.
-            if self.toolset == "host":
-                path = (
-                    "$(call intermediates-dir-for,%s,%s,true,,"
-                    "$(GYP_HOST_VAR_PREFIX))"
-                    % (self.android_class, self.android_module)
-                )
-            else:
-                path = (
-                    f"$(call intermediates-dir-for,{self.android_class},"
-                    f"{self.android_module},,,$(GYP_VAR_PREFIX))"
-                )
+            path = (
+                f"$(call intermediates-dir-for,{self.android_class},"
+                f"{self.android_module},,,$(GYP_VAR_PREFIX))"
+            )
 
         assert spec.get("product_dir") is None  # TODO: not supported?
         return os.path.join(path, self.ComputeOutputBasename(spec))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
index 8720a3daf3a0d..e69103e1b9ba3 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
@@ -33,6 +33,7 @@
 import os
 import signal
 import subprocess
+
 import gyp.common
 import gyp.xcode_emulation
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
index 5d7f14da9699d..bebb1303154e1 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
@@ -2,11 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import gyp.common
-import gyp.xcode_emulation
 import json
 import os
 
+import gyp.common
+import gyp.xcode_emulation
+
 generator_additional_non_configuration_keys = []
 generator_additional_path_sections = []
 generator_extra_sources_for_rules = []
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
index 99d5c1fd69db3..e41c72d71070a 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
@@ -3,11 +3,12 @@
 # found in the LICENSE file.
 
 
+import json
 import os
+
 import gyp
 import gyp.common
 import gyp.msvs_emulation
-import json
 
 generator_supports_multiple_toolsets = True
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
index 52aeae6050990..ed6daa91bac3e 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
@@ -17,14 +17,15 @@
 This generator has no automated tests, so expect it to be broken.
 """
 
-from xml.sax.saxutils import escape
 import os.path
+import shlex
 import subprocess
+import xml.etree.ElementTree as ET
+from xml.sax.saxutils import escape
+
 import gyp
 import gyp.common
 import gyp.msvs_emulation
-import shlex
-import xml.etree.ElementTree as ET
 
 generator_wants_static_library_dependencies_adjusted = False
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
index 4171704c47a4b..a0aa6d9245c81 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
@@ -31,9 +31,9 @@
 """
 
 
-import gyp.common
 import pprint
 
+import gyp.common
 
 # These variables should just be spit back out as variable references.
 _generator_identity_variables = [
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
index 8dfb1f1645f77..36a05deb7eb8b 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
@@ -17,7 +17,6 @@
 import code
 import sys
 
-
 # All of this stuff about generator variables was lovingly ripped from gypd.py.
 # That module has a much better description of what's going on and why.
 _generator_identity_variables = [
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
index 634da8973c4ab..e860479069aba 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
@@ -22,17 +22,17 @@
 # the side to keep the files readable.
 
 
+import hashlib
 import os
 import re
 import subprocess
 import sys
+
 import gyp
 import gyp.common
 import gyp.xcode_emulation
 from gyp.common import GetEnvironFallback
 
-import hashlib
-
 generator_default_variables = {
     "EXECUTABLE_PREFIX": "",
     "EXECUTABLE_SUFFIX": "",
@@ -1440,7 +1440,7 @@ def WriteSources(
         for obj in objs:
             assert " " not in obj, "Spaces in object filenames not supported (%s)" % obj
         self.WriteLn(
-            "# Add to the list of files we specially track " "dependencies for."
+            "# Add to the list of files we specially track dependencies for."
         )
         self.WriteLn("all_deps += $(OBJS)")
         self.WriteLn()
@@ -1450,7 +1450,7 @@ def WriteSources(
             self.WriteMakeRule(
                 ["$(OBJS)"],
                 deps,
-                comment="Make sure our dependencies are built " "before any of us.",
+                comment="Make sure our dependencies are built before any of us.",
                 order_only=True,
             )
 
@@ -1461,7 +1461,7 @@ def WriteSources(
             self.WriteMakeRule(
                 ["$(OBJS)"],
                 extra_outputs,
-                comment="Make sure our actions/rules run " "before any of us.",
+                comment="Make sure our actions/rules run before any of us.",
                 order_only=True,
             )
 
@@ -1699,7 +1699,7 @@ def WriteTarget(
             self.WriteMakeRule(
                 extra_outputs,
                 deps,
-                comment=("Preserve order dependency of " "special output on deps."),
+                comment=("Preserve order dependency of special output on deps."),
                 order_only=True,
             )
 
@@ -1738,7 +1738,8 @@ def WriteTarget(
                         # into the link command, so we need lots of escaping.
                         ldflags.append(r"-Wl,-rpath=\$$ORIGIN/")
                         ldflags.append(r"-Wl,-rpath-link=\$(builddir)/")
-                library_dirs = config.get("library_dirs", [])
+                if library_dirs := config.get("library_dirs", []):
+                    library_dirs = [Sourceify(self.Absolutify(i)) for i in library_dirs]
                 ldflags += [("-L%s" % library_dir) for library_dir in library_dirs]
                 self.WriteList(ldflags, "LDFLAGS_%s" % configname)
                 if self.flavor == "mac":
@@ -1844,7 +1845,7 @@ def WriteTarget(
                 "on the bundle, not the binary (target '%s')" % self.target
             )
             assert "product_dir" not in spec, (
-                "Postbuilds do not work with " "custom product_dir"
+                "Postbuilds do not work with custom product_dir"
             )
 
         if self.type == "executable":
@@ -1895,21 +1896,20 @@ def WriteTarget(
                         part_of_all,
                         postbuilds=postbuilds,
                     )
+            elif self.flavor in ("linux", "android"):
+                self.WriteMakeRule(
+                    [self.output_binary],
+                    link_deps,
+                    actions=["$(call create_archive,$@,$^)"],
+                )
             else:
-                if self.flavor in ("linux", "android"):
-                    self.WriteMakeRule(
-                        [self.output_binary],
-                        link_deps,
-                        actions=["$(call create_archive,$@,$^)"],
-                    )
-                else:
-                    self.WriteDoCmd(
-                        [self.output_binary],
-                        link_deps,
-                        "alink",
-                        part_of_all,
-                        postbuilds=postbuilds,
-                    )
+                self.WriteDoCmd(
+                    [self.output_binary],
+                    link_deps,
+                    "alink",
+                    part_of_all,
+                    postbuilds=postbuilds,
+                )
         elif self.type == "shared_library":
             self.WriteLn(
                 "%s: LD_INPUTS := %s"
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
index bea6e643488ad..b4aea2e69a193 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
@@ -9,22 +9,21 @@
 import re
 import subprocess
 import sys
-
 from collections import OrderedDict
 
 import gyp.common
-import gyp.easy_xml as easy_xml
 import gyp.generator.ninja as ninja_generator
-import gyp.MSVSNew as MSVSNew
-import gyp.MSVSProject as MSVSProject
-import gyp.MSVSSettings as MSVSSettings
-import gyp.MSVSToolFile as MSVSToolFile
-import gyp.MSVSUserFile as MSVSUserFile
-import gyp.MSVSUtil as MSVSUtil
-import gyp.MSVSVersion as MSVSVersion
-from gyp.common import GypError
-from gyp.common import OrderedSet
-
+from gyp import (
+    MSVSNew,
+    MSVSProject,
+    MSVSSettings,
+    MSVSToolFile,
+    MSVSUserFile,
+    MSVSUtil,
+    MSVSVersion,
+    easy_xml,
+)
+from gyp.common import GypError, OrderedSet
 
 # Regular expression for validating Visual Studio GUIDs.  If the GUID
 # contains lowercase hex letters, MSVS will be fine. However,
@@ -185,7 +184,7 @@ def _IsWindowsAbsPath(path):
   it does not treat those as relative, which results in bad paths like:
   '..\\C:\\<some path>\\some_source_code_file.cc'
   """
-    return path.startswith("c:") or path.startswith("C:")
+    return path.startswith(("c:", "C:"))
 
 
 def _FixPaths(paths, separator="\\"):
@@ -2507,7 +2506,7 @@ def _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules):
         rule_name = rule.rule_name
         target_outputs = "%%(%s.Outputs)" % rule_name
         target_inputs = (
-            "%%(%s.Identity);%%(%s.AdditionalDependencies);" "$(MSBuildProjectFile)"
+            "%%(%s.Identity);%%(%s.AdditionalDependencies);$(MSBuildProjectFile)"
         ) % (rule_name, rule_name)
         rule_inputs = "%%(%s.Identity)" % rule_name
         extension_condition = (
@@ -3100,9 +3099,7 @@ def _ConvertMSVSBuildAttributes(spec, config, build_file):
             msbuild_attributes[a] = _ConvertMSVSCharacterSet(msvs_attributes[a])
         elif a == "ConfigurationType":
             msbuild_attributes[a] = _ConvertMSVSConfigurationType(msvs_attributes[a])
-        elif a == "SpectreMitigation":
-            msbuild_attributes[a] = msvs_attributes[a]
-        elif a == "VCToolsVersion":
+        elif a == "SpectreMitigation" or a == "VCToolsVersion":
             msbuild_attributes[a] = msvs_attributes[a]
         else:
             print("Warning: Do not know how to convert MSVS attribute " + a)
@@ -3491,11 +3488,10 @@ def _VerifySourcesExist(sources, root_dir):
     for source in sources:
         if isinstance(source, MSVSProject.Filter):
             missing_sources.extend(_VerifySourcesExist(source.contents, root_dir))
-        else:
-            if "$" not in source:
-                full_path = os.path.join(root_dir, source)
-                if not os.path.exists(full_path):
-                    missing_sources.append(full_path)
+        elif "$" not in source:
+            full_path = os.path.join(root_dir, source)
+            if not os.path.exists(full_path):
+                missing_sources.append(full_path)
     return missing_sources
 
 
@@ -3565,75 +3561,74 @@ def _AddSources2(
                 sources_handled_by_action,
                 list_excluded,
             )
-        else:
-            if source not in sources_handled_by_action:
-                detail = []
-                excluded_configurations = exclusions.get(source, [])
-                if len(excluded_configurations) == len(spec["configurations"]):
-                    detail.append(["ExcludedFromBuild", "true"])
-                else:
-                    for config_name, configuration in sorted(excluded_configurations):
-                        condition = _GetConfigurationCondition(
-                            config_name, configuration
-                        )
-                        detail.append(
-                            ["ExcludedFromBuild", {"Condition": condition}, "true"]
-                        )
-                # Add precompile if needed
-                for config_name, configuration in spec["configurations"].items():
-                    precompiled_source = configuration.get(
-                        "msvs_precompiled_source", ""
+        elif source not in sources_handled_by_action:
+            detail = []
+            excluded_configurations = exclusions.get(source, [])
+            if len(excluded_configurations) == len(spec["configurations"]):
+                detail.append(["ExcludedFromBuild", "true"])
+            else:
+                for config_name, configuration in sorted(excluded_configurations):
+                    condition = _GetConfigurationCondition(
+                        config_name, configuration
                     )
-                    if precompiled_source != "":
-                        precompiled_source = _FixPath(precompiled_source)
-                        if not extensions_excluded_from_precompile:
-                            # If the precompiled header is generated by a C source,
-                            # we must not try to use it for C++ sources,
-                            # and vice versa.
-                            basename, extension = os.path.splitext(precompiled_source)
-                            if extension == ".c":
-                                extensions_excluded_from_precompile = [
-                                    ".cc",
-                                    ".cpp",
-                                    ".cxx",
-                                ]
-                            else:
-                                extensions_excluded_from_precompile = [".c"]
-
-                    if precompiled_source == source:
-                        condition = _GetConfigurationCondition(
-                            config_name, configuration, spec
-                        )
-                        detail.append(
-                            ["PrecompiledHeader", {"Condition": condition}, "Create"]
-                        )
-                    else:
-                        # Turn off precompiled header usage for source files of a
-                        # different type than the file that generated the
-                        # precompiled header.
-                        for extension in extensions_excluded_from_precompile:
-                            if source.endswith(extension):
-                                detail.append(["PrecompiledHeader", ""])
-                                detail.append(["ForcedIncludeFiles", ""])
-
-                group, element = _MapFileToMsBuildSourceType(
-                    source,
-                    rule_dependencies,
-                    extension_to_rule_name,
-                    _GetUniquePlatforms(spec),
-                    spec["toolset"],
+                    detail.append(
+                        ["ExcludedFromBuild", {"Condition": condition}, "true"]
+                    )
+            # Add precompile if needed
+            for config_name, configuration in spec["configurations"].items():
+                precompiled_source = configuration.get(
+                    "msvs_precompiled_source", ""
                 )
-                if group == "compile" and not os.path.isabs(source):
-                    # Add an <ObjectFileName> value to support duplicate source
-                    # file basenames, except for absolute paths to avoid paths
-                    # with more than 260 characters.
-                    file_name = os.path.splitext(source)[0] + ".obj"
-                    if file_name.startswith("..\\"):
-                        file_name = re.sub(r"^(\.\.\\)+", "", file_name)
-                    elif file_name.startswith("$("):
-                        file_name = re.sub(r"^\$\([^)]+\)\\", "", file_name)
-                    detail.append(["ObjectFileName", "$(IntDir)\\" + file_name])
-                grouped_sources[group].append([element, {"Include": source}] + detail)
+                if precompiled_source != "":
+                    precompiled_source = _FixPath(precompiled_source)
+                    if not extensions_excluded_from_precompile:
+                        # If the precompiled header is generated by a C source,
+                        # we must not try to use it for C++ sources,
+                        # and vice versa.
+                        basename, extension = os.path.splitext(precompiled_source)
+                        if extension == ".c":
+                            extensions_excluded_from_precompile = [
+                                ".cc",
+                                ".cpp",
+                                ".cxx",
+                            ]
+                        else:
+                            extensions_excluded_from_precompile = [".c"]
+
+                if precompiled_source == source:
+                    condition = _GetConfigurationCondition(
+                        config_name, configuration, spec
+                    )
+                    detail.append(
+                        ["PrecompiledHeader", {"Condition": condition}, "Create"]
+                    )
+                else:
+                    # Turn off precompiled header usage for source files of a
+                    # different type than the file that generated the
+                    # precompiled header.
+                    for extension in extensions_excluded_from_precompile:
+                        if source.endswith(extension):
+                            detail.append(["PrecompiledHeader", ""])
+                            detail.append(["ForcedIncludeFiles", ""])
+
+            group, element = _MapFileToMsBuildSourceType(
+                source,
+                rule_dependencies,
+                extension_to_rule_name,
+                _GetUniquePlatforms(spec),
+                spec["toolset"],
+            )
+            if group == "compile" and not os.path.isabs(source):
+                # Add an <ObjectFileName> value to support duplicate source
+                # file basenames, except for absolute paths to avoid paths
+                # with more than 260 characters.
+                file_name = os.path.splitext(source)[0] + ".obj"
+                if file_name.startswith("..\\"):
+                    file_name = re.sub(r"^(\.\.\\)+", "", file_name)
+                elif file_name.startswith("$("):
+                    file_name = re.sub(r"^\$\([^)]+\)\\", "", file_name)
+                detail.append(["ObjectFileName", "$(IntDir)\\" + file_name])
+            grouped_sources[group].append([element, {"Include": source}] + detail)
 
 
 def _GetMSBuildProjectReferences(project):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
index e80b57f06a130..8cea3d1479e3b 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
@@ -5,11 +5,11 @@
 
 """ Unit tests for the msvs.py file. """
 
-import gyp.generator.msvs as msvs
 import unittest
-
 from io import StringIO
 
+from gyp.generator import msvs
+
 
 class TestSequenceFunctions(unittest.TestCase):
     def setUp(self):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
index ae3dded9b41b7..b7ac823d1490d 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
@@ -10,20 +10,18 @@
 import multiprocessing
 import os.path
 import re
-import signal
 import shutil
+import signal
 import subprocess
 import sys
+from io import StringIO
+
 import gyp
 import gyp.common
 import gyp.msvs_emulation
-import gyp.MSVSUtil as MSVSUtil
 import gyp.xcode_emulation
-
-from io import StringIO
-
+from gyp import MSVSUtil, ninja_syntax
 from gyp.common import GetEnvironFallback
-import gyp.ninja_syntax as ninja_syntax
 
 generator_default_variables = {
     "EXECUTABLE_PREFIX": "",
@@ -1465,7 +1463,7 @@ def WriteLinkForArch(
             # Respect environment variables related to build, but target-specific
             # flags can still override them.
             ldflags = env_ldflags + config.get("ldflags", [])
-            if is_executable and len(solibs):
+            if is_executable and solibs:
                 rpath = "lib/"
                 if self.toolset != "target":
                     rpath += self.toolset
@@ -1555,7 +1553,7 @@ def WriteLinkForArch(
             if pdbname:
                 output = [output, pdbname]
 
-        if len(solibs):
+        if solibs:
             extra_bindings.append(
                 ("solibs", gyp.common.EncodePOSIXShellList(sorted(solibs)))
             )
@@ -2085,7 +2083,7 @@ def CommandWithWrapper(cmd, wrappers, prog):
 
 def GetDefaultConcurrentLinks():
     """Returns a best-guess for a number of concurrent links."""
-    pool_size = int(os.environ.get("GYP_LINK_CONCURRENCY", 0))
+    pool_size = int(os.environ.get("GYP_LINK_CONCURRENCY") or 0)
     if pool_size:
         return pool_size
 
@@ -2112,7 +2110,7 @@ class MEMORYSTATUSEX(ctypes.Structure):
         # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM
         # on a 64 GiB machine.
         mem_limit = max(1, stat.ullTotalPhys // (5 * (2 ** 30)))  # total / 5GiB
-        hard_cap = max(1, int(os.environ.get("GYP_LINK_CONCURRENCY_MAX", 2 ** 32)))
+        hard_cap = max(1, int(os.environ.get("GYP_LINK_CONCURRENCY_MAX") or 2 ** 32))
         return min(mem_limit, hard_cap)
     elif sys.platform.startswith("linux"):
         if os.path.exists("/proc/meminfo"):
@@ -2535,7 +2533,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
             % {"suffix": "@$link_file_list"},
             rspfile="$link_file_list",
             rspfile_content=(
-                "-Wl,--whole-archive $in $solibs -Wl," "--no-whole-archive $libs"
+                "-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs"
             ),
             pool="link_pool",
         )
@@ -2684,7 +2682,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
         master_ninja.rule(
             "link",
             description="LINK $out, POSTBUILDS",
-            command=("$ld $ldflags -o $out " "$in $solibs $libs$postbuilds"),
+            command=("$ld $ldflags -o $out $in $solibs $libs$postbuilds"),
             pool="link_pool",
         )
         master_ninja.rule(
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
index 15cddfdf2443b..581b14595e143 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
@@ -6,11 +6,11 @@
 
 """ Unit tests for the ninja.py file. """
 
-from pathlib import Path
 import sys
 import unittest
+from pathlib import Path
 
-import gyp.generator.ninja as ninja
+from gyp.generator import ninja
 
 
 class TestPrefixesAndSuffixes(unittest.TestCase):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
index c3c000c4ef683..cdf11c3b27b1d 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
@@ -3,19 +3,19 @@
 # found in the LICENSE file.
 
 
-import filecmp
-import gyp.common
-import gyp.xcodeproj_file
-import gyp.xcode_ninja
 import errno
+import filecmp
 import os
-import sys
 import posixpath
 import re
 import shutil
 import subprocess
+import sys
 import tempfile
 
+import gyp.common
+import gyp.xcode_ninja
+import gyp.xcodeproj_file
 
 # Project files generated by this module will use _intermediate_var as a
 # custom Xcode setting whose value is a DerivedSources-like directory that's
@@ -793,7 +793,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
             except KeyError as e:
                 gyp.common.ExceptionAppend(
                     e,
-                    "-- unknown product type while " "writing target %s" % target_name,
+                    "-- unknown product type while writing target %s" % target_name,
                 )
                 raise
         else:
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
index 49772d1f4d810..b0b51a08a6db4 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
@@ -6,9 +6,10 @@
 
 """ Unit tests for the xcode.py file. """
 
-import gyp.generator.xcode as xcode
-import unittest
 import sys
+import unittest
+
+from gyp.generator import xcode
 
 
 class TestEscapeXcodeDefine(unittest.TestCase):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/input.py b/node_modules/node-gyp/gyp/pylib/gyp/input.py
index 5e71fdace0c66..994bf6625fb81 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/input.py
@@ -4,9 +4,6 @@
 
 
 import ast
-
-import gyp.common
-import gyp.simple_copy
 import multiprocessing
 import os.path
 import re
@@ -16,10 +13,13 @@
 import sys
 import threading
 import traceback
-from gyp.common import GypError
-from gyp.common import OrderedSet
+
 from packaging.version import Version
 
+import gyp.common
+import gyp.simple_copy
+from gyp.common import GypError, OrderedSet
+
 # A list of types that are treated as linkable.
 linkable_types = [
     "executable",
@@ -990,25 +990,24 @@ def ExpandVariables(input, phase, variables, build_file):
                 )
                 replacement = cached_value
 
-        else:
-            if contents not in variables:
-                if contents[-1] in ["!", "/"]:
-                    # In order to allow cross-compiles (nacl) to happen more naturally,
-                    # we will allow references to >(sources/) etc. to resolve to
-                    # and empty list if undefined. This allows actions to:
-                    # 'action!': [
-                    #   '>@(_sources!)',
-                    # ],
-                    # 'action/': [
-                    #   '>@(_sources/)',
-                    # ],
-                    replacement = []
-                else:
-                    raise GypError(
-                        "Undefined variable " + contents + " in " + build_file
-                    )
+        elif contents not in variables:
+            if contents[-1] in ["!", "/"]:
+                # In order to allow cross-compiles (nacl) to happen more naturally,
+                # we will allow references to >(sources/) etc. to resolve to
+                # and empty list if undefined. This allows actions to:
+                # 'action!': [
+                #   '>@(_sources!)',
+                # ],
+                # 'action/': [
+                #   '>@(_sources/)',
+                # ],
+                replacement = []
             else:
-                replacement = variables[contents]
+                raise GypError(
+                    "Undefined variable " + contents + " in " + build_file
+                )
+        else:
+            replacement = variables[contents]
 
         if isinstance(replacement, bytes) and not isinstance(replacement, str):
             replacement = replacement.decode("utf-8")  # done on Python 3 only
@@ -1074,7 +1073,7 @@ def ExpandVariables(input, phase, variables, build_file):
     if output == input:
         gyp.DebugOutput(
             gyp.DEBUG_VARIABLES,
-            "Found only identity matches on %r, avoiding infinite " "recursion.",
+            "Found only identity matches on %r, avoiding infinite recursion.",
             output,
         )
     else:
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/input_test.py b/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
index a18f72e9ebb0a..ff8c8fbecc3e5 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
@@ -6,9 +6,10 @@
 
 """Unit tests for the input.py file."""
 
-import gyp.input
 import unittest
 
+import gyp.input
+
 
 class TestFindCycles(unittest.TestCase):
     def setUp(self):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py b/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
index 59647c9a89034..70aab4f1787f4 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
@@ -59,9 +59,7 @@ def ExecCopyBundleResource(self, source, dest, convert_to_binary):
             if os.path.exists(dest):
                 shutil.rmtree(dest)
             shutil.copytree(source, dest)
-        elif extension == ".xib":
-            return self._CopyXIBFile(source, dest)
-        elif extension == ".storyboard":
+        elif extension in {".xib", ".storyboard"}:
             return self._CopyXIBFile(source, dest)
         elif extension == ".strings" and not convert_to_binary:
             self._CopyStringsFile(source, dest)
@@ -70,7 +68,7 @@ def ExecCopyBundleResource(self, source, dest, convert_to_binary):
                 os.unlink(dest)
             shutil.copy(source, dest)
 
-        if convert_to_binary and extension in (".plist", ".strings"):
+        if convert_to_binary and extension in {".plist", ".strings"}:
             self._ConvertToBinary(dest)
 
     def _CopyXIBFile(self, source, dest):
@@ -164,9 +162,7 @@ def _DetectInputEncoding(self, file_name):
                 header = fp.read(3)
             except Exception:
                 return None
-        if header.startswith(b"\xFE\xFF"):
-            return "UTF-16"
-        elif header.startswith(b"\xFF\xFE"):
+        if header.startswith((b"\xFE\xFF", b"\xFF\xFE")):
             return "UTF-16"
         elif header.startswith(b"\xEF\xBB\xBF"):
             return "UTF-8"
@@ -261,7 +257,7 @@ def ExecFilterLibtool(self, *cmd_list):
         """Calls libtool and filters out '/path/to/libtool: file: foo.o has no
     symbols'."""
         libtool_re = re.compile(
-            r"^.*libtool: (?:for architecture: \S* )?" r"file: .* has no symbols$"
+            r"^.*libtool: (?:for architecture: \S* )?file: .* has no symbols$"
         )
         libtool_re5 = re.compile(
             r"^.*libtool: warning for library: "
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
index adda5a0273f8a..ace0cae5ebff2 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
@@ -7,15 +7,15 @@
 build systems, primarily ninja.
 """
 
-import collections
 import os
 import re
 import subprocess
 import sys
+from collections import namedtuple
 
-from gyp.common import OrderedSet
 import gyp.MSVSUtil
 import gyp.MSVSVersion
+from gyp.common import OrderedSet
 
 windows_quoter_regex = re.compile(r'(\\*)"')
 
@@ -933,7 +933,7 @@ def BuildCygwinBashCommandLine(self, args, path_to_base):
         )
         return cmd
 
-    RuleShellFlags = collections.namedtuple("RuleShellFlags", ["cygwin", "quote"])
+    RuleShellFlags = namedtuple("RuleShellFlags", ["cygwin", "quote"])  # noqa: PYI024
 
     def GetRuleShellFlags(self, rule):
         """Return RuleShellFlags about how the given rule should be run. This
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py b/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
index 171d7295747fc..7e647f40a84c5 100755
--- a/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
@@ -13,9 +13,9 @@
 import os
 import re
 import shutil
-import subprocess
 import stat
 import string
+import subprocess
 import sys
 
 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
index aee1a542da329..85a63dfd7ae0e 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
@@ -9,13 +9,14 @@
 
 
 import copy
-import gyp.common
 import os
 import os.path
 import re
 import shlex
 import subprocess
 import sys
+
+import gyp.common
 from gyp.common import GypError
 
 # Populated lazily by XcodeVersion, for efficiency, and to fix an issue when
@@ -471,17 +472,14 @@ def _GetStandaloneBinaryPath(self):
         """Returns the name of the non-bundle binary represented by this target.
     E.g. hello_world. Only valid for non-bundles."""
         assert not self._IsBundle()
-        assert self.spec["type"] in (
+        assert self.spec["type"] in {
             "executable",
             "shared_library",
             "static_library",
             "loadable_module",
-        ), ("Unexpected type %s" % self.spec["type"])
+        }, ("Unexpected type %s" % self.spec["type"])
         target = self.spec["target_name"]
-        if self.spec["type"] == "static_library":
-            if target[:3] == "lib":
-                target = target[3:]
-        elif self.spec["type"] in ("loadable_module", "shared_library"):
+        if self.spec["type"] in {"loadable_module", "shared_library", "static_library"}:
             if target[:3] == "lib":
                 target = target[3:]
 
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
index 98b02320d5a9e..03cbbaea84601 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
@@ -2,10 +2,11 @@
 
 """Unit tests for the xcode_emulation.py file."""
 
-from gyp.xcode_emulation import XcodeSettings
 import sys
 import unittest
 
+from gyp.xcode_emulation import XcodeSettings
+
 
 class TestXcodeSettings(unittest.TestCase):
     def setUp(self):
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py b/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
index bb74eacbeaf4a..cac1af56f7bfb 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
@@ -13,11 +13,12 @@
 """
 
 import errno
-import gyp.generator.ninja
 import os
 import re
 import xml.sax.saxutils
 
+import gyp.generator.ninja
+
 
 def _WriteWorkspace(main_gyp, sources_gyp, params):
     """ Create a workspace to wrap main and sources gyp paths. """
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py b/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
index cd72aa262d2d9..be17ef946dce3 100644
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+++ b/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
@@ -137,14 +137,15 @@
 a project file is output.
 """
 
-import gyp.common
-from functools import cmp_to_key
 import hashlib
-from operator import attrgetter
 import posixpath
 import re
 import struct
 import sys
+from functools import cmp_to_key
+from operator import attrgetter
+
+import gyp.common
 
 
 def cmp(x, y):
@@ -460,7 +461,7 @@ def _HashUpdate(hash, data):
             digest_int_count = hash.digest_size // 4
             digest_ints = struct.unpack(">" + "I" * digest_int_count, hash.digest())
             id_ints = [0, 0, 0]
-            for index in range(0, digest_int_count):
+            for index in range(digest_int_count):
                 id_ints[index % 3] ^= digest_ints[index]
             self.id = "%08X%08X%08X" % tuple(id_ints)
 
@@ -1640,7 +1641,6 @@ class PBXVariantGroup(PBXGroup, XCFileLikeElement):
     """PBXVariantGroup is used by Xcode to represent localizations."""
 
     # No additions to the schema relative to PBXGroup.
-    pass
 
 
 # PBXReferenceProxy is also an XCFileLikeElement subclass.  It is defined below
@@ -1766,9 +1766,8 @@ def GetBuildSetting(self, key):
             configuration_value = configuration.GetBuildSetting(key)
             if value is None:
                 value = configuration_value
-            else:
-                if value != configuration_value:
-                    raise ValueError("Variant values for " + key)
+            elif value != configuration_value:
+                raise ValueError("Variant values for " + key)
 
         return value
 
@@ -1924,14 +1923,13 @@ def _AddBuildFileToDicts(self, pbxbuildfile, path=None):
             # It's best when the caller provides the path.
             if isinstance(xcfilelikeelement, PBXVariantGroup):
                 paths.append(path)
+        # If the caller didn't provide a path, there can be either multiple
+        # paths (PBXVariantGroup) or one.
+        elif isinstance(xcfilelikeelement, PBXVariantGroup):
+            for variant in xcfilelikeelement._properties["children"]:
+                paths.append(variant.FullPath())
         else:
-            # If the caller didn't provide a path, there can be either multiple
-            # paths (PBXVariantGroup) or one.
-            if isinstance(xcfilelikeelement, PBXVariantGroup):
-                for variant in xcfilelikeelement._properties["children"]:
-                    paths.append(variant.FullPath())
-            else:
-                paths.append(xcfilelikeelement.FullPath())
+            paths.append(xcfilelikeelement.FullPath())
 
         # Add the paths first, because if something's going to raise, the
         # messages provided by _AddPathToDict are more useful owing to its
diff --git a/node_modules/node-gyp/gyp/pyproject.toml b/node_modules/node-gyp/gyp/pyproject.toml
index 4b0c88c8a22c4..537308731fe54 100644
--- a/node_modules/node-gyp/gyp/pyproject.toml
+++ b/node_modules/node-gyp/gyp/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "gyp-next"
-version = "0.19.1"
+version = "0.20.0"
 authors = [
   { name="Node.js contributors", email="ryzokuken@disroot.org" },
 ]
@@ -92,14 +92,9 @@ select = [
   # "TRY",  # tryceratops
 ]
 ignore = [
-  "PLC1901",
-  "PLR0402",
   "PLR1714",
-  "PLR2004",
-  "PLR5501",
   "PLW0603",
   "PLW2901",
-  "PYI024",
   "RUF005",
   "RUF012",
   "UP031",
@@ -109,6 +104,7 @@ ignore = [
 max-complexity = 101
 
 [tool.ruff.lint.pylint]
+allow-magic-value-types = ["float", "int", "str"]
 max-args = 11
 max-branches = 108
 max-returns = 10
diff --git a/node_modules/node-gyp/lib/build.js b/node_modules/node-gyp/lib/build.js
index e1f49bb6ff0ca..9c0cca8fc2634 100644
--- a/node_modules/node-gyp/lib/build.js
+++ b/node_modules/node-gyp/lib/build.js
@@ -3,7 +3,7 @@
 const gracefulFs = require('graceful-fs')
 const fs = gracefulFs.promises
 const path = require('path')
-const { glob } = require('glob')
+const { glob } = require('tinyglobby')
 const log = require('./log')
 const which = require('which')
 const win = process.platform === 'win32'
@@ -84,9 +84,10 @@ async function build (gyp, argv) {
    */
 
   async function findSolutionFile () {
-    const files = await glob('build/*.sln')
+    const files = await glob('build/*.sln', { expandDirectories: false })
     if (files.length === 0) {
-      if (gracefulFs.existsSync('build/Makefile') || (await glob('build/*.mk')).length !== 0) {
+      if (gracefulFs.existsSync('build/Makefile') ||
+          (await glob('build/*.mk', { expandDirectories: false })).length !== 0) {
         command = makeCommand
         await doWhich(false)
         return
@@ -141,6 +142,8 @@ async function build (gyp, argv) {
     if (msvs) {
       // Turn off the Microsoft logo on Windows
       argv.push('/nologo')
+      // No lingering msbuild processes and open file handles
+      argv.push('/nodeReuse:false')
     }
 
     // Specify the build type, Release by default
@@ -209,7 +212,7 @@ async function build (gyp, argv) {
     await new Promise((resolve, reject) => proc.on('exit', async (code, signal) => {
       if (buildBinsDir) {
         // Clean up the build-time dependency symlinks:
-        await fs.rm(buildBinsDir, { recursive: true })
+        await fs.rm(buildBinsDir, { recursive: true, maxRetries: 3 })
       }
 
       if (code !== 0) {
diff --git a/node_modules/node-gyp/lib/clean.js b/node_modules/node-gyp/lib/clean.js
index 523f8016caece..479c374f10fa2 100644
--- a/node_modules/node-gyp/lib/clean.js
+++ b/node_modules/node-gyp/lib/clean.js
@@ -8,7 +8,7 @@ async function clean (gyp, argv) {
   const buildDir = 'build'
 
   log.verbose('clean', 'removing "%s" directory', buildDir)
-  await fs.rm(buildDir, { recursive: true, force: true })
+  await fs.rm(buildDir, { recursive: true, force: true, maxRetries: 3 })
 }
 
 module.exports = clean
diff --git a/node_modules/node-gyp/lib/install.js b/node_modules/node-gyp/lib/install.js
index 7196a316296fb..90be86c822c8f 100644
--- a/node_modules/node-gyp/lib/install.js
+++ b/node_modules/node-gyp/lib/install.js
@@ -284,7 +284,7 @@ async function install (gyp, argv) {
       if (tarExtractDir !== devDir) {
         try {
           // try to cleanup temp dir
-          await fs.rm(tarExtractDir, { recursive: true })
+          await fs.rm(tarExtractDir, { recursive: true, maxRetries: 3 })
         } catch {
           log.warn('failed to clean up temp tarball extract directory')
         }
diff --git a/node_modules/node-gyp/lib/remove.js b/node_modules/node-gyp/lib/remove.js
index 7efdb01a662e7..55736f71d97c5 100644
--- a/node_modules/node-gyp/lib/remove.js
+++ b/node_modules/node-gyp/lib/remove.js
@@ -36,7 +36,7 @@ async function remove (gyp, argv) {
     throw err
   }
 
-  await fs.rm(versionPath, { recursive: true, force: true })
+  await fs.rm(versionPath, { recursive: true, force: true, maxRetries: 3 })
 }
 
 module.exports = remove
diff --git a/node_modules/node-gyp/node_modules/minizlib/dist/commonjs/index.js b/node_modules/node-gyp/node_modules/minizlib/dist/commonjs/index.js
index ad65eef049507..b4906d2783372 100644
--- a/node_modules/node-gyp/node_modules/minizlib/dist/commonjs/index.js
+++ b/node_modules/node-gyp/node_modules/minizlib/dist/commonjs/index.js
@@ -1,4 +1,37 @@
 "use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
@@ -7,11 +40,18 @@ exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unz
 const assert_1 = __importDefault(require("assert"));
 const buffer_1 = require("buffer");
 const minipass_1 = require("minipass");
-const zlib_1 = __importDefault(require("zlib"));
+const realZlib = __importStar(require("zlib"));
 const constants_js_1 = require("./constants.js");
 var constants_js_2 = require("./constants.js");
 Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
 const OriginalBufferConcat = buffer_1.Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 class ZlibError extends Error {
     code;
@@ -69,7 +109,7 @@ class ZlibBase extends minipass_1.Minipass {
         try {
             // @types/node doesn't know that it exports the classes, but they're there
             //@ts-ignore
-            this.#handle = new zlib_1.default[mode](opts);
+            this.#handle = new realZlib[mode](opts);
         }
         catch (er) {
             // make sure that all errors get decorated properly
@@ -159,7 +199,7 @@ class ZlibBase extends minipass_1.Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        buffer_1.Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -167,12 +207,12 @@ class ZlibBase extends minipass_1.Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/node-gyp/node_modules/minizlib/dist/esm/index.js b/node_modules/node-gyp/node_modules/minizlib/dist/esm/index.js
index a6269b505f47c..f33586a8ab0ec 100644
--- a/node_modules/node-gyp/node_modules/minizlib/dist/esm/index.js
+++ b/node_modules/node-gyp/node_modules/minizlib/dist/esm/index.js
@@ -1,10 +1,17 @@
 import assert from 'assert';
 import { Buffer } from 'buffer';
 import { Minipass } from 'minipass';
-import realZlib from 'zlib';
+import * as realZlib from 'zlib';
 import { constants } from './constants.js';
 export { constants } from './constants.js';
 const OriginalBufferConcat = Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 export class ZlibError extends Error {
     code;
@@ -151,7 +158,7 @@ class ZlibBase extends Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -159,12 +166,12 @@ class ZlibBase extends Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/node-gyp/node_modules/minizlib/package.json b/node_modules/node-gyp/node_modules/minizlib/package.json
index e94623ff43d35..43cb855e15a5d 100644
--- a/node_modules/node-gyp/node_modules/minizlib/package.json
+++ b/node_modules/node-gyp/node_modules/minizlib/package.json
@@ -1,11 +1,10 @@
 {
   "name": "minizlib",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
   "main": "./dist/commonjs/index.js",
   "dependencies": {
-    "minipass": "^7.0.4",
-    "rimraf": "^5.0.5"
+    "minipass": "^7.1.2"
   },
   "scripts": {
     "prepare": "tshy",
@@ -34,11 +33,10 @@
   "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
   "license": "MIT",
   "devDependencies": {
-    "@types/node": "^20.11.29",
-    "mkdirp": "^3.0.1",
-    "tap": "^18.7.1",
-    "tshy": "^1.12.0",
-    "typedoc": "^0.25.12"
+    "@types/node": "^22.13.14",
+    "tap": "^21.1.0",
+    "tshy": "^3.0.2",
+    "typedoc": "^0.28.1"
   },
   "files": [
     "dist"
@@ -77,5 +75,6 @@
     "bracketSameLine": true,
     "arrowParens": "avoid",
     "endOfLine": "lf"
-  }
+  },
+  "module": "./dist/esm/index.js"
 }
diff --git a/node_modules/node-gyp/package.json b/node_modules/node-gyp/package.json
index 2bc123c87ed4c..f69a022ef3d12 100644
--- a/node_modules/node-gyp/package.json
+++ b/node_modules/node-gyp/package.json
@@ -11,7 +11,7 @@
     "bindings",
     "gyp"
   ],
-  "version": "11.1.0",
+  "version": "11.2.0",
   "installVersion": 11,
   "author": "Nathan Rajlich <nathan@tootallnate.net> (http://tootallnate.net)",
   "repository": {
@@ -24,13 +24,13 @@
   "dependencies": {
     "env-paths": "^2.2.0",
     "exponential-backoff": "^3.1.1",
-    "glob": "^10.3.10",
     "graceful-fs": "^4.2.6",
     "make-fetch-happen": "^14.0.3",
     "nopt": "^8.0.0",
     "proc-log": "^5.0.0",
     "semver": "^7.3.5",
     "tar": "^7.4.3",
+    "tinyglobby": "^0.2.12",
     "which": "^5.0.0"
   },
   "engines": {
diff --git a/node_modules/node-gyp/src/win_delay_load_hook.cc b/node_modules/node-gyp/src/win_delay_load_hook.cc
index c6e80aa31320d..63e197706d466 100644
--- a/node_modules/node-gyp/src/win_delay_load_hook.cc
+++ b/node_modules/node-gyp/src/win_delay_load_hook.cc
@@ -29,7 +29,7 @@ static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {
     return NULL;
 
   // try for libnode.dll to compat node.js that using 'vcbuild.bat dll'
-  m = GetModuleHandle("libnode.dll");
+  m = GetModuleHandle(TEXT("libnode.dll"));
   if (m == NULL) m = GetModuleHandle(NULL);
   return (FARPROC) m;
 }
diff --git a/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js b/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
index ad65eef049507..b4906d2783372 100644
--- a/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
+++ b/node_modules/npm-registry-fetch/node_modules/minizlib/dist/commonjs/index.js
@@ -1,4 +1,37 @@
 "use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
@@ -7,11 +40,18 @@ exports.BrotliDecompress = exports.BrotliCompress = exports.Brotli = exports.Unz
 const assert_1 = __importDefault(require("assert"));
 const buffer_1 = require("buffer");
 const minipass_1 = require("minipass");
-const zlib_1 = __importDefault(require("zlib"));
+const realZlib = __importStar(require("zlib"));
 const constants_js_1 = require("./constants.js");
 var constants_js_2 = require("./constants.js");
 Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return constants_js_2.constants; } });
 const OriginalBufferConcat = buffer_1.Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(buffer_1.Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        buffer_1.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 class ZlibError extends Error {
     code;
@@ -69,7 +109,7 @@ class ZlibBase extends minipass_1.Minipass {
         try {
             // @types/node doesn't know that it exports the classes, but they're there
             //@ts-ignore
-            this.#handle = new zlib_1.default[mode](opts);
+            this.#handle = new realZlib[mode](opts);
         }
         catch (er) {
             // make sure that all errors get decorated properly
@@ -159,7 +199,7 @@ class ZlibBase extends minipass_1.Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        buffer_1.Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -167,12 +207,12 @@ class ZlibBase extends minipass_1.Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            buffer_1.Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js b/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
index a6269b505f47c..f33586a8ab0ec 100644
--- a/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
+++ b/node_modules/npm-registry-fetch/node_modules/minizlib/dist/esm/index.js
@@ -1,10 +1,17 @@
 import assert from 'assert';
 import { Buffer } from 'buffer';
 import { Minipass } from 'minipass';
-import realZlib from 'zlib';
+import * as realZlib from 'zlib';
 import { constants } from './constants.js';
 export { constants } from './constants.js';
 const OriginalBufferConcat = Buffer.concat;
+const desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');
+const noop = (args) => args;
+const passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined
+    ? (makeNoOp) => {
+        Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+    }
+    : (_) => { };
 const _superWrite = Symbol('_superWrite');
 export class ZlibError extends Error {
     code;
@@ -151,7 +158,7 @@ class ZlibBase extends Minipass {
         this.#handle.close = () => { };
         // It also calls `Buffer.concat()` at the end, which may be convenient
         // for some, but which we are not interested in as it slows us down.
-        Buffer.concat = args => args;
+        passthroughBufferConcat(true);
         let result = undefined;
         try {
             const flushFlag = typeof chunk[_flushFlag] === 'number'
@@ -159,12 +166,12 @@ class ZlibBase extends Minipass {
                 : this.#flushFlag;
             result = this.#handle._processChunk(chunk, flushFlag);
             // if we don't throw, reset it back how it was
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
         }
         catch (err) {
             // or if we do, put Buffer.concat() back before we emit error
             // Error events call into user code, which may call Buffer.concat()
-            Buffer.concat = OriginalBufferConcat;
+            passthroughBufferConcat(false);
             this.#onError(new ZlibError(err));
         }
         finally {
diff --git a/node_modules/npm-registry-fetch/node_modules/minizlib/package.json b/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
index e94623ff43d35..43cb855e15a5d 100644
--- a/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
+++ b/node_modules/npm-registry-fetch/node_modules/minizlib/package.json
@@ -1,11 +1,10 @@
 {
   "name": "minizlib",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
   "main": "./dist/commonjs/index.js",
   "dependencies": {
-    "minipass": "^7.0.4",
-    "rimraf": "^5.0.5"
+    "minipass": "^7.1.2"
   },
   "scripts": {
     "prepare": "tshy",
@@ -34,11 +33,10 @@
   "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
   "license": "MIT",
   "devDependencies": {
-    "@types/node": "^20.11.29",
-    "mkdirp": "^3.0.1",
-    "tap": "^18.7.1",
-    "tshy": "^1.12.0",
-    "typedoc": "^0.25.12"
+    "@types/node": "^22.13.14",
+    "tap": "^21.1.0",
+    "tshy": "^3.0.2",
+    "typedoc": "^0.28.1"
   },
   "files": [
     "dist"
@@ -77,5 +75,6 @@
     "bracketSameLine": true,
     "arrowParens": "avoid",
     "endOfLine": "lf"
-  }
+  },
+  "module": "./dist/esm/index.js"
 }
diff --git a/node_modules/rimraf/LICENSE b/node_modules/rimraf/LICENSE
deleted file mode 100644
index 1493534e60dce..0000000000000
--- a/node_modules/rimraf/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/rimraf/dist/commonjs/default-tmp.js b/node_modules/rimraf/dist/commonjs/default-tmp.js
deleted file mode 100644
index ae9087881962d..0000000000000
--- a/node_modules/rimraf/dist/commonjs/default-tmp.js
+++ /dev/null
@@ -1,61 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.defaultTmpSync = exports.defaultTmp = void 0;
-// The default temporary folder location for use in the windows algorithm.
-// It's TEMPting to use dirname(path), since that's guaranteed to be on the
-// same device.  However, this means that:
-// rimraf(path).then(() => rimraf(dirname(path)))
-// will often fail with EBUSY, because the parent dir contains
-// marked-for-deletion directory entries (which do not show up in readdir).
-// The approach here is to use os.tmpdir() if it's on the same drive letter,
-// or resolve(path, '\\temp') if it exists, or the root of the drive if not.
-// On Posix (not that you'd be likely to use the windows algorithm there),
-// it uses os.tmpdir() always.
-const os_1 = require("os");
-const path_1 = require("path");
-const fs_js_1 = require("./fs.js");
-const platform_js_1 = __importDefault(require("./platform.js"));
-const { stat } = fs_js_1.promises;
-const isDirSync = (path) => {
-    try {
-        return (0, fs_js_1.statSync)(path).isDirectory();
-    }
-    catch (er) {
-        return false;
-    }
-};
-const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
-const win32DefaultTmp = async (path) => {
-    const { root } = (0, path_1.parse)(path);
-    const tmp = (0, os_1.tmpdir)();
-    const { root: tmpRoot } = (0, path_1.parse)(tmp);
-    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
-        return tmp;
-    }
-    const driveTmp = (0, path_1.resolve)(root, '/temp');
-    if (await isDir(driveTmp)) {
-        return driveTmp;
-    }
-    return root;
-};
-const win32DefaultTmpSync = (path) => {
-    const { root } = (0, path_1.parse)(path);
-    const tmp = (0, os_1.tmpdir)();
-    const { root: tmpRoot } = (0, path_1.parse)(tmp);
-    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
-        return tmp;
-    }
-    const driveTmp = (0, path_1.resolve)(root, '/temp');
-    if (isDirSync(driveTmp)) {
-        return driveTmp;
-    }
-    return root;
-};
-const posixDefaultTmp = async () => (0, os_1.tmpdir)();
-const posixDefaultTmpSync = () => (0, os_1.tmpdir)();
-exports.defaultTmp = platform_js_1.default === 'win32' ? win32DefaultTmp : posixDefaultTmp;
-exports.defaultTmpSync = platform_js_1.default === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
-//# sourceMappingURL=default-tmp.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/fix-eperm.js b/node_modules/rimraf/dist/commonjs/fix-eperm.js
deleted file mode 100644
index 7baecb7c9589b..0000000000000
--- a/node_modules/rimraf/dist/commonjs/fix-eperm.js
+++ /dev/null
@@ -1,58 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.fixEPERMSync = exports.fixEPERM = void 0;
-const fs_js_1 = require("./fs.js");
-const { chmod } = fs_js_1.promises;
-const fixEPERM = (fn) => async (path) => {
-    try {
-        return await fn(path);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOENT') {
-            return;
-        }
-        if (fer?.code === 'EPERM') {
-            try {
-                await chmod(path, 0o666);
-            }
-            catch (er2) {
-                const fer2 = er2;
-                if (fer2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-            return await fn(path);
-        }
-        throw er;
-    }
-};
-exports.fixEPERM = fixEPERM;
-const fixEPERMSync = (fn) => (path) => {
-    try {
-        return fn(path);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOENT') {
-            return;
-        }
-        if (fer?.code === 'EPERM') {
-            try {
-                (0, fs_js_1.chmodSync)(path, 0o666);
-            }
-            catch (er2) {
-                const fer2 = er2;
-                if (fer2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-            return fn(path);
-        }
-        throw er;
-    }
-};
-exports.fixEPERMSync = fixEPERMSync;
-//# sourceMappingURL=fix-eperm.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/fs.js b/node_modules/rimraf/dist/commonjs/fs.js
deleted file mode 100644
index dba64c9830ed8..0000000000000
--- a/node_modules/rimraf/dist/commonjs/fs.js
+++ /dev/null
@@ -1,46 +0,0 @@
-"use strict";
-// promisify ourselves, because older nodes don't have fs.promises
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.promises = exports.readdirSync = exports.unlinkSync = exports.lstatSync = exports.statSync = exports.rmSync = exports.rmdirSync = exports.renameSync = exports.mkdirSync = exports.chmodSync = void 0;
-const fs_1 = __importDefault(require("fs"));
-// sync ones just take the sync version from node
-var fs_2 = require("fs");
-Object.defineProperty(exports, "chmodSync", { enumerable: true, get: function () { return fs_2.chmodSync; } });
-Object.defineProperty(exports, "mkdirSync", { enumerable: true, get: function () { return fs_2.mkdirSync; } });
-Object.defineProperty(exports, "renameSync", { enumerable: true, get: function () { return fs_2.renameSync; } });
-Object.defineProperty(exports, "rmdirSync", { enumerable: true, get: function () { return fs_2.rmdirSync; } });
-Object.defineProperty(exports, "rmSync", { enumerable: true, get: function () { return fs_2.rmSync; } });
-Object.defineProperty(exports, "statSync", { enumerable: true, get: function () { return fs_2.statSync; } });
-Object.defineProperty(exports, "lstatSync", { enumerable: true, get: function () { return fs_2.lstatSync; } });
-Object.defineProperty(exports, "unlinkSync", { enumerable: true, get: function () { return fs_2.unlinkSync; } });
-const fs_3 = require("fs");
-const readdirSync = (path) => (0, fs_3.readdirSync)(path, { withFileTypes: true });
-exports.readdirSync = readdirSync;
-// unrolled for better inlining, this seems to get better performance
-// than something like:
-// const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
-// which would be a bit cleaner.
-const chmod = (path, mode) => new Promise((res, rej) => fs_1.default.chmod(path, mode, (er, ...d) => (er ? rej(er) : res(...d))));
-const mkdir = (path, options) => new Promise((res, rej) => fs_1.default.mkdir(path, options, (er, made) => (er ? rej(er) : res(made))));
-const readdir = (path) => new Promise((res, rej) => fs_1.default.readdir(path, { withFileTypes: true }, (er, data) => er ? rej(er) : res(data)));
-const rename = (oldPath, newPath) => new Promise((res, rej) => fs_1.default.rename(oldPath, newPath, (er, ...d) => er ? rej(er) : res(...d)));
-const rm = (path, options) => new Promise((res, rej) => fs_1.default.rm(path, options, (er, ...d) => (er ? rej(er) : res(...d))));
-const rmdir = (path) => new Promise((res, rej) => fs_1.default.rmdir(path, (er, ...d) => (er ? rej(er) : res(...d))));
-const stat = (path) => new Promise((res, rej) => fs_1.default.stat(path, (er, data) => (er ? rej(er) : res(data))));
-const lstat = (path) => new Promise((res, rej) => fs_1.default.lstat(path, (er, data) => (er ? rej(er) : res(data))));
-const unlink = (path) => new Promise((res, rej) => fs_1.default.unlink(path, (er, ...d) => (er ? rej(er) : res(...d))));
-exports.promises = {
-    chmod,
-    mkdir,
-    readdir,
-    rename,
-    rm,
-    rmdir,
-    stat,
-    lstat,
-    unlink,
-};
-//# sourceMappingURL=fs.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/ignore-enoent.js b/node_modules/rimraf/dist/commonjs/ignore-enoent.js
deleted file mode 100644
index 02595342121f7..0000000000000
--- a/node_modules/rimraf/dist/commonjs/ignore-enoent.js
+++ /dev/null
@@ -1,21 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.ignoreENOENTSync = exports.ignoreENOENT = void 0;
-const ignoreENOENT = async (p) => p.catch(er => {
-    if (er.code !== 'ENOENT') {
-        throw er;
-    }
-});
-exports.ignoreENOENT = ignoreENOENT;
-const ignoreENOENTSync = (fn) => {
-    try {
-        return fn();
-    }
-    catch (er) {
-        if (er?.code !== 'ENOENT') {
-            throw er;
-        }
-    }
-};
-exports.ignoreENOENTSync = ignoreENOENTSync;
-//# sourceMappingURL=ignore-enoent.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/index.js b/node_modules/rimraf/dist/commonjs/index.js
deleted file mode 100644
index 09b5d9993c1e7..0000000000000
--- a/node_modules/rimraf/dist/commonjs/index.js
+++ /dev/null
@@ -1,78 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimraf = exports.sync = exports.rimrafSync = exports.moveRemove = exports.moveRemoveSync = exports.posix = exports.posixSync = exports.windows = exports.windowsSync = exports.manual = exports.manualSync = exports.native = exports.nativeSync = exports.isRimrafOptions = exports.assertRimrafOptions = void 0;
-const glob_1 = require("glob");
-const opt_arg_js_1 = require("./opt-arg.js");
-const path_arg_js_1 = __importDefault(require("./path-arg.js"));
-const rimraf_manual_js_1 = require("./rimraf-manual.js");
-const rimraf_move_remove_js_1 = require("./rimraf-move-remove.js");
-const rimraf_native_js_1 = require("./rimraf-native.js");
-const rimraf_posix_js_1 = require("./rimraf-posix.js");
-const rimraf_windows_js_1 = require("./rimraf-windows.js");
-const use_native_js_1 = require("./use-native.js");
-var opt_arg_js_2 = require("./opt-arg.js");
-Object.defineProperty(exports, "assertRimrafOptions", { enumerable: true, get: function () { return opt_arg_js_2.assertRimrafOptions; } });
-Object.defineProperty(exports, "isRimrafOptions", { enumerable: true, get: function () { return opt_arg_js_2.isRimrafOptions; } });
-const wrap = (fn) => async (path, opt) => {
-    const options = (0, opt_arg_js_1.optArg)(opt);
-    if (options.glob) {
-        path = await (0, glob_1.glob)(path, options.glob);
-    }
-    if (Array.isArray(path)) {
-        return !!(await Promise.all(path.map(p => fn((0, path_arg_js_1.default)(p, options), options)))).reduce((a, b) => a && b, true);
-    }
-    else {
-        return !!(await fn((0, path_arg_js_1.default)(path, options), options));
-    }
-};
-const wrapSync = (fn) => (path, opt) => {
-    const options = (0, opt_arg_js_1.optArgSync)(opt);
-    if (options.glob) {
-        path = (0, glob_1.globSync)(path, options.glob);
-    }
-    if (Array.isArray(path)) {
-        return !!path
-            .map(p => fn((0, path_arg_js_1.default)(p, options), options))
-            .reduce((a, b) => a && b, true);
-    }
-    else {
-        return !!fn((0, path_arg_js_1.default)(path, options), options);
-    }
-};
-exports.nativeSync = wrapSync(rimraf_native_js_1.rimrafNativeSync);
-exports.native = Object.assign(wrap(rimraf_native_js_1.rimrafNative), { sync: exports.nativeSync });
-exports.manualSync = wrapSync(rimraf_manual_js_1.rimrafManualSync);
-exports.manual = Object.assign(wrap(rimraf_manual_js_1.rimrafManual), { sync: exports.manualSync });
-exports.windowsSync = wrapSync(rimraf_windows_js_1.rimrafWindowsSync);
-exports.windows = Object.assign(wrap(rimraf_windows_js_1.rimrafWindows), { sync: exports.windowsSync });
-exports.posixSync = wrapSync(rimraf_posix_js_1.rimrafPosixSync);
-exports.posix = Object.assign(wrap(rimraf_posix_js_1.rimrafPosix), { sync: exports.posixSync });
-exports.moveRemoveSync = wrapSync(rimraf_move_remove_js_1.rimrafMoveRemoveSync);
-exports.moveRemove = Object.assign(wrap(rimraf_move_remove_js_1.rimrafMoveRemove), {
-    sync: exports.moveRemoveSync,
-});
-exports.rimrafSync = wrapSync((path, opt) => (0, use_native_js_1.useNativeSync)(opt) ?
-    (0, rimraf_native_js_1.rimrafNativeSync)(path, opt)
-    : (0, rimraf_manual_js_1.rimrafManualSync)(path, opt));
-exports.sync = exports.rimrafSync;
-const rimraf_ = wrap((path, opt) => (0, use_native_js_1.useNative)(opt) ? (0, rimraf_native_js_1.rimrafNative)(path, opt) : (0, rimraf_manual_js_1.rimrafManual)(path, opt));
-exports.rimraf = Object.assign(rimraf_, {
-    rimraf: rimraf_,
-    sync: exports.rimrafSync,
-    rimrafSync: exports.rimrafSync,
-    manual: exports.manual,
-    manualSync: exports.manualSync,
-    native: exports.native,
-    nativeSync: exports.nativeSync,
-    posix: exports.posix,
-    posixSync: exports.posixSync,
-    windows: exports.windows,
-    windowsSync: exports.windowsSync,
-    moveRemove: exports.moveRemove,
-    moveRemoveSync: exports.moveRemoveSync,
-});
-exports.rimraf.rimraf = exports.rimraf;
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/opt-arg.js b/node_modules/rimraf/dist/commonjs/opt-arg.js
deleted file mode 100644
index 1d030a16d3c0f..0000000000000
--- a/node_modules/rimraf/dist/commonjs/opt-arg.js
+++ /dev/null
@@ -1,53 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.optArgSync = exports.optArg = exports.assertRimrafOptions = exports.isRimrafOptions = void 0;
-const typeOrUndef = (val, t) => typeof val === 'undefined' || typeof val === t;
-const isRimrafOptions = (o) => !!o &&
-    typeof o === 'object' &&
-    typeOrUndef(o.preserveRoot, 'boolean') &&
-    typeOrUndef(o.tmp, 'string') &&
-    typeOrUndef(o.maxRetries, 'number') &&
-    typeOrUndef(o.retryDelay, 'number') &&
-    typeOrUndef(o.backoff, 'number') &&
-    typeOrUndef(o.maxBackoff, 'number') &&
-    (typeOrUndef(o.glob, 'boolean') || (o.glob && typeof o.glob === 'object')) &&
-    typeOrUndef(o.filter, 'function');
-exports.isRimrafOptions = isRimrafOptions;
-const assertRimrafOptions = (o) => {
-    if (!(0, exports.isRimrafOptions)(o)) {
-        throw new Error('invalid rimraf options');
-    }
-};
-exports.assertRimrafOptions = assertRimrafOptions;
-const optArgT = (opt) => {
-    (0, exports.assertRimrafOptions)(opt);
-    const { glob, ...options } = opt;
-    if (!glob) {
-        return options;
-    }
-    const globOpt = glob === true ?
-        opt.signal ?
-            { signal: opt.signal }
-            : {}
-        : opt.signal ?
-            {
-                signal: opt.signal,
-                ...glob,
-            }
-            : glob;
-    return {
-        ...options,
-        glob: {
-            ...globOpt,
-            // always get absolute paths from glob, to ensure
-            // that we are referencing the correct thing.
-            absolute: true,
-            withFileTypes: false,
-        },
-    };
-};
-const optArg = (opt = {}) => optArgT(opt);
-exports.optArg = optArg;
-const optArgSync = (opt = {}) => optArgT(opt);
-exports.optArgSync = optArgSync;
-//# sourceMappingURL=opt-arg.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/package.json b/node_modules/rimraf/dist/commonjs/package.json
deleted file mode 100644
index 5bbefffbabee3..0000000000000
--- a/node_modules/rimraf/dist/commonjs/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "type": "commonjs"
-}
diff --git a/node_modules/rimraf/dist/commonjs/path-arg.js b/node_modules/rimraf/dist/commonjs/path-arg.js
deleted file mode 100644
index 8a4908aa08ef5..0000000000000
--- a/node_modules/rimraf/dist/commonjs/path-arg.js
+++ /dev/null
@@ -1,52 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const path_1 = require("path");
-const util_1 = require("util");
-const platform_js_1 = __importDefault(require("./platform.js"));
-const pathArg = (path, opt = {}) => {
-    const type = typeof path;
-    if (type !== 'string') {
-        const ctor = path && type === 'object' && path.constructor;
-        const received = ctor && ctor.name ? `an instance of ${ctor.name}`
-            : type === 'object' ? (0, util_1.inspect)(path)
-                : `type ${type} ${path}`;
-        const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
-        throw Object.assign(new TypeError(msg), {
-            path,
-            code: 'ERR_INVALID_ARG_TYPE',
-        });
-    }
-    if (/\0/.test(path)) {
-        // simulate same failure that node raises
-        const msg = 'path must be a string without null bytes';
-        throw Object.assign(new TypeError(msg), {
-            path,
-            code: 'ERR_INVALID_ARG_VALUE',
-        });
-    }
-    path = (0, path_1.resolve)(path);
-    const { root } = (0, path_1.parse)(path);
-    if (path === root && opt.preserveRoot !== false) {
-        const msg = 'refusing to remove root directory without preserveRoot:false';
-        throw Object.assign(new Error(msg), {
-            path,
-            code: 'ERR_PRESERVE_ROOT',
-        });
-    }
-    if (platform_js_1.default === 'win32') {
-        const badWinChars = /[*|"<>?:]/;
-        const { root } = (0, path_1.parse)(path);
-        if (badWinChars.test(path.substring(root.length))) {
-            throw Object.assign(new Error('Illegal characters in path.'), {
-                path,
-                code: 'EINVAL',
-            });
-        }
-    }
-    return path;
-};
-exports.default = pathArg;
-//# sourceMappingURL=path-arg.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/platform.js b/node_modules/rimraf/dist/commonjs/platform.js
deleted file mode 100644
index 58f197ffbf824..0000000000000
--- a/node_modules/rimraf/dist/commonjs/platform.js
+++ /dev/null
@@ -1,4 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.default = process.env.__TESTING_RIMRAF_PLATFORM__ || process.platform;
-//# sourceMappingURL=platform.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/readdir-or-error.js b/node_modules/rimraf/dist/commonjs/readdir-or-error.js
deleted file mode 100644
index 75330cb3816c8..0000000000000
--- a/node_modules/rimraf/dist/commonjs/readdir-or-error.js
+++ /dev/null
@@ -1,19 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.readdirOrErrorSync = exports.readdirOrError = void 0;
-// returns an array of entries if readdir() works,
-// or the error that readdir() raised if not.
-const fs_js_1 = require("./fs.js");
-const { readdir } = fs_js_1.promises;
-const readdirOrError = (path) => readdir(path).catch(er => er);
-exports.readdirOrError = readdirOrError;
-const readdirOrErrorSync = (path) => {
-    try {
-        return (0, fs_js_1.readdirSync)(path);
-    }
-    catch (er) {
-        return er;
-    }
-};
-exports.readdirOrErrorSync = readdirOrErrorSync;
-//# sourceMappingURL=readdir-or-error.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/retry-busy.js b/node_modules/rimraf/dist/commonjs/retry-busy.js
deleted file mode 100644
index 5f9d15252bb10..0000000000000
--- a/node_modules/rimraf/dist/commonjs/retry-busy.js
+++ /dev/null
@@ -1,68 +0,0 @@
-"use strict";
-// note: max backoff is the maximum that any *single* backoff will do
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.retryBusySync = exports.retryBusy = exports.codes = exports.MAXRETRIES = exports.RATE = exports.MAXBACKOFF = void 0;
-exports.MAXBACKOFF = 200;
-exports.RATE = 1.2;
-exports.MAXRETRIES = 10;
-exports.codes = new Set(['EMFILE', 'ENFILE', 'EBUSY']);
-const retryBusy = (fn) => {
-    const method = async (path, opt, backoff = 1, total = 0) => {
-        const mbo = opt.maxBackoff || exports.MAXBACKOFF;
-        const rate = opt.backoff || exports.RATE;
-        const max = opt.maxRetries || exports.MAXRETRIES;
-        let retries = 0;
-        while (true) {
-            try {
-                return await fn(path);
-            }
-            catch (er) {
-                const fer = er;
-                if (fer?.path === path && fer?.code && exports.codes.has(fer.code)) {
-                    backoff = Math.ceil(backoff * rate);
-                    total = backoff + total;
-                    if (total < mbo) {
-                        return new Promise((res, rej) => {
-                            setTimeout(() => {
-                                method(path, opt, backoff, total).then(res, rej);
-                            }, backoff);
-                        });
-                    }
-                    if (retries < max) {
-                        retries++;
-                        continue;
-                    }
-                }
-                throw er;
-            }
-        }
-    };
-    return method;
-};
-exports.retryBusy = retryBusy;
-// just retries, no async so no backoff
-const retryBusySync = (fn) => {
-    const method = (path, opt) => {
-        const max = opt.maxRetries || exports.MAXRETRIES;
-        let retries = 0;
-        while (true) {
-            try {
-                return fn(path);
-            }
-            catch (er) {
-                const fer = er;
-                if (fer?.path === path &&
-                    fer?.code &&
-                    exports.codes.has(fer.code) &&
-                    retries < max) {
-                    retries++;
-                    continue;
-                }
-                throw er;
-            }
-        }
-    };
-    return method;
-};
-exports.retryBusySync = retryBusySync;
-//# sourceMappingURL=retry-busy.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/rimraf-manual.js b/node_modules/rimraf/dist/commonjs/rimraf-manual.js
deleted file mode 100644
index 1c95ae23bb98b..0000000000000
--- a/node_modules/rimraf/dist/commonjs/rimraf-manual.js
+++ /dev/null
@@ -1,12 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimrafManualSync = exports.rimrafManual = void 0;
-const platform_js_1 = __importDefault(require("./platform.js"));
-const rimraf_posix_js_1 = require("./rimraf-posix.js");
-const rimraf_windows_js_1 = require("./rimraf-windows.js");
-exports.rimrafManual = platform_js_1.default === 'win32' ? rimraf_windows_js_1.rimrafWindows : rimraf_posix_js_1.rimrafPosix;
-exports.rimrafManualSync = platform_js_1.default === 'win32' ? rimraf_windows_js_1.rimrafWindowsSync : rimraf_posix_js_1.rimrafPosixSync;
-//# sourceMappingURL=rimraf-manual.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js b/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js
deleted file mode 100644
index ac668d1c9dbba..0000000000000
--- a/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js
+++ /dev/null
@@ -1,192 +0,0 @@
-"use strict";
-// https://youtu.be/uhRWMGBjlO8?t=537
-//
-// 1. readdir
-// 2. for each entry
-//   a. if a non-empty directory, recurse
-//   b. if an empty directory, move to random hidden file name in $TEMP
-//   c. unlink/rmdir $TEMP
-//
-// This works around the fact that unlink/rmdir is non-atomic and takes
-// a non-deterministic amount of time to complete.
-//
-// However, it is HELLA SLOW, like 2-10x slower than a naive recursive rm.
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimrafMoveRemoveSync = exports.rimrafMoveRemove = void 0;
-const path_1 = require("path");
-const default_tmp_js_1 = require("./default-tmp.js");
-const ignore_enoent_js_1 = require("./ignore-enoent.js");
-const fs_js_1 = require("./fs.js");
-const { lstat, rename, unlink, rmdir, chmod } = fs_js_1.promises;
-const readdir_or_error_js_1 = require("./readdir-or-error.js");
-// crypto.randomBytes is much slower, and Math.random() is enough here
-const uniqueFilename = (path) => `.${(0, path_1.basename)(path)}.${Math.random()}`;
-const unlinkFixEPERM = async (path) => unlink(path).catch((er) => {
-    if (er.code === 'EPERM') {
-        return chmod(path, 0o666).then(() => unlink(path), er2 => {
-            if (er2.code === 'ENOENT') {
-                return;
-            }
-            throw er;
-        });
-    }
-    else if (er.code === 'ENOENT') {
-        return;
-    }
-    throw er;
-});
-const unlinkFixEPERMSync = (path) => {
-    try {
-        (0, fs_js_1.unlinkSync)(path);
-    }
-    catch (er) {
-        if (er?.code === 'EPERM') {
-            try {
-                return (0, fs_js_1.chmodSync)(path, 0o666);
-            }
-            catch (er2) {
-                if (er2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-        }
-        else if (er?.code === 'ENOENT') {
-            return;
-        }
-        throw er;
-    }
-};
-const rimrafMoveRemove = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafMoveRemoveDir(path, opt, await lstat(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafMoveRemove = rimrafMoveRemove;
-const rimrafMoveRemoveDir = async (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    if (!opt.tmp) {
-        return rimrafMoveRemoveDir(path, { ...opt, tmp: await (0, default_tmp_js_1.defaultTmp)(path) }, ent);
-    }
-    if (path === opt.tmp && (0, path_1.parse)(path).root !== path) {
-        throw new Error('cannot delete temp directory used for deletion');
-    }
-    const entries = ent.isDirectory() ? await (0, readdir_or_error_js_1.readdirOrError)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await (0, ignore_enoent_js_1.ignoreENOENT)(tmpUnlink(path, opt.tmp, unlinkFixEPERM));
-        return true;
-    }
-    const removedAll = (await Promise.all(entries.map(ent => rimrafMoveRemoveDir((0, path_1.resolve)(path, ent.name), opt, ent)))).reduce((a, b) => a && b, true);
-    if (!removedAll) {
-        return false;
-    }
-    // we don't ever ACTUALLY try to unlink /, because that can never work
-    // but when preserveRoot is false, we could be operating on it.
-    // No need to check if preserveRoot is not false.
-    if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-        return false;
-    }
-    if (opt.filter && !(await opt.filter(path, ent))) {
-        return false;
-    }
-    await (0, ignore_enoent_js_1.ignoreENOENT)(tmpUnlink(path, opt.tmp, rmdir));
-    return true;
-};
-const tmpUnlink = async (path, tmp, rm) => {
-    const tmpFile = (0, path_1.resolve)(tmp, uniqueFilename(path));
-    await rename(path, tmpFile);
-    return await rm(tmpFile);
-};
-const rimrafMoveRemoveSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafMoveRemoveDirSync(path, opt, (0, fs_js_1.lstatSync)(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafMoveRemoveSync = rimrafMoveRemoveSync;
-const rimrafMoveRemoveDirSync = (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    if (!opt.tmp) {
-        return rimrafMoveRemoveDirSync(path, { ...opt, tmp: (0, default_tmp_js_1.defaultTmpSync)(path) }, ent);
-    }
-    const tmp = opt.tmp;
-    if (path === opt.tmp && (0, path_1.parse)(path).root !== path) {
-        throw new Error('cannot delete temp directory used for deletion');
-    }
-    const entries = ent.isDirectory() ? (0, readdir_or_error_js_1.readdirOrErrorSync)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        (0, ignore_enoent_js_1.ignoreENOENTSync)(() => tmpUnlinkSync(path, tmp, unlinkFixEPERMSync));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const p = (0, path_1.resolve)(path, ent.name);
-        removedAll = rimrafMoveRemoveDirSync(p, opt, ent) && removedAll;
-    }
-    if (!removedAll) {
-        return false;
-    }
-    if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-        return false;
-    }
-    if (opt.filter && !opt.filter(path, ent)) {
-        return false;
-    }
-    (0, ignore_enoent_js_1.ignoreENOENTSync)(() => tmpUnlinkSync(path, tmp, fs_js_1.rmdirSync));
-    return true;
-};
-const tmpUnlinkSync = (path, tmp, rmSync) => {
-    const tmpFile = (0, path_1.resolve)(tmp, uniqueFilename(path));
-    (0, fs_js_1.renameSync)(path, tmpFile);
-    return rmSync(tmpFile);
-};
-//# sourceMappingURL=rimraf-move-remove.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/rimraf-native.js b/node_modules/rimraf/dist/commonjs/rimraf-native.js
deleted file mode 100644
index ab9f633d7ca15..0000000000000
--- a/node_modules/rimraf/dist/commonjs/rimraf-native.js
+++ /dev/null
@@ -1,24 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimrafNativeSync = exports.rimrafNative = void 0;
-const fs_js_1 = require("./fs.js");
-const { rm } = fs_js_1.promises;
-const rimrafNative = async (path, opt) => {
-    await rm(path, {
-        ...opt,
-        force: true,
-        recursive: true,
-    });
-    return true;
-};
-exports.rimrafNative = rimrafNative;
-const rimrafNativeSync = (path, opt) => {
-    (0, fs_js_1.rmSync)(path, {
-        ...opt,
-        force: true,
-        recursive: true,
-    });
-    return true;
-};
-exports.rimrafNativeSync = rimrafNativeSync;
-//# sourceMappingURL=rimraf-native.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/rimraf-posix.js b/node_modules/rimraf/dist/commonjs/rimraf-posix.js
deleted file mode 100644
index eb0e7f1168010..0000000000000
--- a/node_modules/rimraf/dist/commonjs/rimraf-posix.js
+++ /dev/null
@@ -1,123 +0,0 @@
-"use strict";
-// the simple recursive removal, where unlink and rmdir are atomic
-// Note that this approach does NOT work on Windows!
-// We stat first and only unlink if the Dirent isn't a directory,
-// because sunos will let root unlink a directory, and some
-// SUPER weird breakage happens as a result.
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimrafPosixSync = exports.rimrafPosix = void 0;
-const fs_js_1 = require("./fs.js");
-const { lstat, rmdir, unlink } = fs_js_1.promises;
-const path_1 = require("path");
-const readdir_or_error_js_1 = require("./readdir-or-error.js");
-const ignore_enoent_js_1 = require("./ignore-enoent.js");
-const rimrafPosix = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafPosixDir(path, opt, await lstat(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafPosix = rimrafPosix;
-const rimrafPosixSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafPosixDirSync(path, opt, (0, fs_js_1.lstatSync)(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafPosixSync = rimrafPosixSync;
-const rimrafPosixDir = async (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? await (0, readdir_or_error_js_1.readdirOrError)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await (0, ignore_enoent_js_1.ignoreENOENT)(unlink(path));
-        return true;
-    }
-    const removedAll = (await Promise.all(entries.map(ent => rimrafPosixDir((0, path_1.resolve)(path, ent.name), opt, ent)))).reduce((a, b) => a && b, true);
-    if (!removedAll) {
-        return false;
-    }
-    // we don't ever ACTUALLY try to unlink /, because that can never work
-    // but when preserveRoot is false, we could be operating on it.
-    // No need to check if preserveRoot is not false.
-    if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-        return false;
-    }
-    if (opt.filter && !(await opt.filter(path, ent))) {
-        return false;
-    }
-    await (0, ignore_enoent_js_1.ignoreENOENT)(rmdir(path));
-    return true;
-};
-const rimrafPosixDirSync = (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? (0, readdir_or_error_js_1.readdirOrErrorSync)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        (0, ignore_enoent_js_1.ignoreENOENTSync)(() => (0, fs_js_1.unlinkSync)(path));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const p = (0, path_1.resolve)(path, ent.name);
-        removedAll = rimrafPosixDirSync(p, opt, ent) && removedAll;
-    }
-    if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-        return false;
-    }
-    if (!removedAll) {
-        return false;
-    }
-    if (opt.filter && !opt.filter(path, ent)) {
-        return false;
-    }
-    (0, ignore_enoent_js_1.ignoreENOENTSync)(() => (0, fs_js_1.rmdirSync)(path));
-    return true;
-};
-//# sourceMappingURL=rimraf-posix.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/rimraf-windows.js b/node_modules/rimraf/dist/commonjs/rimraf-windows.js
deleted file mode 100644
index 8d19f98f96360..0000000000000
--- a/node_modules/rimraf/dist/commonjs/rimraf-windows.js
+++ /dev/null
@@ -1,182 +0,0 @@
-"use strict";
-// This is the same as rimrafPosix, with the following changes:
-//
-// 1. EBUSY, ENFILE, EMFILE trigger retries and/or exponential backoff
-// 2. All non-directories are removed first and then all directories are
-//    removed in a second sweep.
-// 3. If we hit ENOTEMPTY in the second sweep, fall back to move-remove on
-//    the that folder.
-//
-// Note: "move then remove" is 2-10 times slower, and just as unreliable.
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.rimrafWindowsSync = exports.rimrafWindows = void 0;
-const path_1 = require("path");
-const fix_eperm_js_1 = require("./fix-eperm.js");
-const fs_js_1 = require("./fs.js");
-const ignore_enoent_js_1 = require("./ignore-enoent.js");
-const readdir_or_error_js_1 = require("./readdir-or-error.js");
-const retry_busy_js_1 = require("./retry-busy.js");
-const rimraf_move_remove_js_1 = require("./rimraf-move-remove.js");
-const { unlink, rmdir, lstat } = fs_js_1.promises;
-const rimrafWindowsFile = (0, retry_busy_js_1.retryBusy)((0, fix_eperm_js_1.fixEPERM)(unlink));
-const rimrafWindowsFileSync = (0, retry_busy_js_1.retryBusySync)((0, fix_eperm_js_1.fixEPERMSync)(fs_js_1.unlinkSync));
-const rimrafWindowsDirRetry = (0, retry_busy_js_1.retryBusy)((0, fix_eperm_js_1.fixEPERM)(rmdir));
-const rimrafWindowsDirRetrySync = (0, retry_busy_js_1.retryBusySync)((0, fix_eperm_js_1.fixEPERMSync)(fs_js_1.rmdirSync));
-const rimrafWindowsDirMoveRemoveFallback = async (path, opt) => {
-    /* c8 ignore start */
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    /* c8 ignore stop */
-    // already filtered, remove from options so we don't call unnecessarily
-    const { filter, ...options } = opt;
-    try {
-        return await rimrafWindowsDirRetry(path, options);
-    }
-    catch (er) {
-        if (er?.code === 'ENOTEMPTY') {
-            return await (0, rimraf_move_remove_js_1.rimrafMoveRemove)(path, options);
-        }
-        throw er;
-    }
-};
-const rimrafWindowsDirMoveRemoveFallbackSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    // already filtered, remove from options so we don't call unnecessarily
-    const { filter, ...options } = opt;
-    try {
-        return rimrafWindowsDirRetrySync(path, options);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOTEMPTY') {
-            return (0, rimraf_move_remove_js_1.rimrafMoveRemoveSync)(path, options);
-        }
-        throw er;
-    }
-};
-const START = Symbol('start');
-const CHILD = Symbol('child');
-const FINISH = Symbol('finish');
-const rimrafWindows = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafWindowsDir(path, opt, await lstat(path), START);
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafWindows = rimrafWindows;
-const rimrafWindowsSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafWindowsDirSync(path, opt, (0, fs_js_1.lstatSync)(path), START);
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-exports.rimrafWindowsSync = rimrafWindowsSync;
-const rimrafWindowsDir = async (path, opt, ent, state = START) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? await (0, readdir_or_error_js_1.readdirOrError)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        // is a file
-        await (0, ignore_enoent_js_1.ignoreENOENT)(rimrafWindowsFile(path, opt));
-        return true;
-    }
-    const s = state === START ? CHILD : state;
-    const removedAll = (await Promise.all(entries.map(ent => rimrafWindowsDir((0, path_1.resolve)(path, ent.name), opt, ent, s)))).reduce((a, b) => a && b, true);
-    if (state === START) {
-        return rimrafWindowsDir(path, opt, ent, FINISH);
-    }
-    else if (state === FINISH) {
-        if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-            return false;
-        }
-        if (!removedAll) {
-            return false;
-        }
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await (0, ignore_enoent_js_1.ignoreENOENT)(rimrafWindowsDirMoveRemoveFallback(path, opt));
-    }
-    return true;
-};
-const rimrafWindowsDirSync = (path, opt, ent, state = START) => {
-    const entries = ent.isDirectory() ? (0, readdir_or_error_js_1.readdirOrErrorSync)(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        // is a file
-        (0, ignore_enoent_js_1.ignoreENOENTSync)(() => rimrafWindowsFileSync(path, opt));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const s = state === START ? CHILD : state;
-        const p = (0, path_1.resolve)(path, ent.name);
-        removedAll = rimrafWindowsDirSync(p, opt, ent, s) && removedAll;
-    }
-    if (state === START) {
-        return rimrafWindowsDirSync(path, opt, ent, FINISH);
-    }
-    else if (state === FINISH) {
-        if (opt.preserveRoot === false && path === (0, path_1.parse)(path).root) {
-            return false;
-        }
-        if (!removedAll) {
-            return false;
-        }
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        (0, ignore_enoent_js_1.ignoreENOENTSync)(() => {
-            rimrafWindowsDirMoveRemoveFallbackSync(path, opt);
-        });
-    }
-    return true;
-};
-//# sourceMappingURL=rimraf-windows.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/commonjs/use-native.js b/node_modules/rimraf/dist/commonjs/use-native.js
deleted file mode 100644
index 1f668768d96bc..0000000000000
--- a/node_modules/rimraf/dist/commonjs/use-native.js
+++ /dev/null
@@ -1,22 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.useNativeSync = exports.useNative = void 0;
-const platform_js_1 = __importDefault(require("./platform.js"));
-const version = process.env.__TESTING_RIMRAF_NODE_VERSION__ || process.version;
-const versArr = version.replace(/^v/, '').split('.');
-/* c8 ignore start */
-const [major = 0, minor = 0] = versArr.map(v => parseInt(v, 10));
-/* c8 ignore stop */
-const hasNative = major > 14 || (major === 14 && minor >= 14);
-// we do NOT use native by default on Windows, because Node's native
-// rm implementation is less advanced.  Change this code if that changes.
-exports.useNative = !hasNative || platform_js_1.default === 'win32' ?
-    () => false
-    : opt => !opt?.signal && !opt?.filter;
-exports.useNativeSync = !hasNative || platform_js_1.default === 'win32' ?
-    () => false
-    : opt => !opt?.signal && !opt?.filter;
-//# sourceMappingURL=use-native.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/bin.d.mts b/node_modules/rimraf/dist/esm/bin.d.mts
deleted file mode 100644
index 5600d7c766e6d..0000000000000
--- a/node_modules/rimraf/dist/esm/bin.d.mts
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env node
-export declare const help: string;
-declare const main: {
-    (...args: string[]): Promise<1 | 0>;
-    help: string;
-};
-export default main;
-//# sourceMappingURL=bin.d.mts.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/bin.mjs b/node_modules/rimraf/dist/esm/bin.mjs
deleted file mode 100755
index 4aea35e9c4325..0000000000000
--- a/node_modules/rimraf/dist/esm/bin.mjs
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/bin/env node
-import { readFile } from 'fs/promises';
-import { rimraf } from './index.js';
-const pj = fileURLToPath(new URL('../package.json', import.meta.url));
-const pjDist = fileURLToPath(new URL('../../package.json', import.meta.url));
-const { version } = JSON.parse(await readFile(pjDist, 'utf8').catch(() => readFile(pj, 'utf8')));
-const runHelpForUsage = () => console.error('run `rimraf --help` for usage information');
-export const help = `rimraf version ${version}
-
-Usage: rimraf <path> [<path> ...]
-Deletes all files and folders at "path", recursively.
-
-Options:
-  --                   Treat all subsequent arguments as paths
-  -h --help            Display this usage info
-  --preserve-root      Do not remove '/' recursively (default)
-  --no-preserve-root   Do not treat '/' specially
-  -G --no-glob         Treat arguments as literal paths, not globs (default)
-  -g --glob            Treat arguments as glob patterns
-  -v --verbose         Be verbose when deleting files, showing them as
-                       they are removed. Not compatible with --impl=native
-  -V --no-verbose      Be silent when deleting files, showing nothing as
-                       they are removed (default)
-  -i --interactive     Ask for confirmation before deleting anything
-                       Not compatible with --impl=native
-  -I --no-interactive  Do not ask for confirmation before deleting
-
-  --impl=<type>        Specify the implementation to use:
-                       rimraf: choose the best option (default)
-                       native: the built-in implementation in Node.js
-                       manual: the platform-specific JS implementation
-                       posix: the Posix JS implementation
-                       windows: the Windows JS implementation (falls back to
-                                move-remove on ENOTEMPTY)
-                       move-remove: a slow reliable Windows fallback
-
-Implementation-specific options:
-  --tmp=<path>        Temp file folder for 'move-remove' implementation
-  --max-retries=<n>   maxRetries for 'native' and 'windows' implementations
-  --retry-delay=<n>   retryDelay for 'native' implementation, default 100
-  --backoff=<n>       Exponential backoff factor for retries (default: 1.2)
-`;
-import { parse, relative, resolve } from 'path';
-const cwd = process.cwd();
-import { createInterface } from 'readline';
-import { fileURLToPath } from 'url';
-const prompt = async (rl, q) => new Promise(res => rl.question(q, res));
-const interactiveRimraf = async (impl, paths, opt) => {
-    const existingFilter = opt.filter || (() => true);
-    let allRemaining = false;
-    let noneRemaining = false;
-    const queue = [];
-    let processing = false;
-    const processQueue = async () => {
-        if (processing)
-            return;
-        processing = true;
-        let next;
-        while ((next = queue.shift())) {
-            await next();
-        }
-        processing = false;
-    };
-    const oneAtATime = (fn) => async (s, e) => {
-        const p = new Promise(res => {
-            queue.push(async () => {
-                const result = await fn(s, e);
-                res(result);
-                return result;
-            });
-        });
-        processQueue();
-        return p;
-    };
-    const rl = createInterface({
-        input: process.stdin,
-        output: process.stdout,
-    });
-    opt.filter = oneAtATime(async (path, ent) => {
-        if (noneRemaining) {
-            return false;
-        }
-        while (!allRemaining) {
-            const a = (await prompt(rl, `rm? ${relative(cwd, path)}\n[(Yes)/No/All/Quit] > `)).trim();
-            if (/^n/i.test(a)) {
-                return false;
-            }
-            else if (/^a/i.test(a)) {
-                allRemaining = true;
-                break;
-            }
-            else if (/^q/i.test(a)) {
-                noneRemaining = true;
-                return false;
-            }
-            else if (a === '' || /^y/i.test(a)) {
-                break;
-            }
-            else {
-                continue;
-            }
-        }
-        return existingFilter(path, ent);
-    });
-    await impl(paths, opt);
-    rl.close();
-};
-const main = async (...args) => {
-    const verboseFilter = (s) => {
-        console.log(relative(cwd, s));
-        return true;
-    };
-    if (process.env.__RIMRAF_TESTING_BIN_FAIL__ === '1') {
-        throw new Error('simulated rimraf failure');
-    }
-    const opt = {};
-    const paths = [];
-    let dashdash = false;
-    let impl = rimraf;
-    let interactive = false;
-    for (const arg of args) {
-        if (dashdash) {
-            paths.push(arg);
-            continue;
-        }
-        if (arg === '--') {
-            dashdash = true;
-            continue;
-        }
-        else if (arg === '-rf' || arg === '-fr') {
-            // this never did anything, but people put it there I guess
-            continue;
-        }
-        else if (arg === '-h' || arg === '--help') {
-            console.log(help);
-            return 0;
-        }
-        else if (arg === '--interactive' || arg === '-i') {
-            interactive = true;
-            continue;
-        }
-        else if (arg === '--no-interactive' || arg === '-I') {
-            interactive = false;
-            continue;
-        }
-        else if (arg === '--verbose' || arg === '-v') {
-            opt.filter = verboseFilter;
-            continue;
-        }
-        else if (arg === '--no-verbose' || arg === '-V') {
-            opt.filter = undefined;
-            continue;
-        }
-        else if (arg === '-g' || arg === '--glob') {
-            opt.glob = true;
-            continue;
-        }
-        else if (arg === '-G' || arg === '--no-glob') {
-            opt.glob = false;
-            continue;
-        }
-        else if (arg === '--preserve-root') {
-            opt.preserveRoot = true;
-            continue;
-        }
-        else if (arg === '--no-preserve-root') {
-            opt.preserveRoot = false;
-            continue;
-        }
-        else if (/^--tmp=/.test(arg)) {
-            const val = arg.substring('--tmp='.length);
-            opt.tmp = val;
-            continue;
-        }
-        else if (/^--max-retries=/.test(arg)) {
-            const val = +arg.substring('--max-retries='.length);
-            opt.maxRetries = val;
-            continue;
-        }
-        else if (/^--retry-delay=/.test(arg)) {
-            const val = +arg.substring('--retry-delay='.length);
-            opt.retryDelay = val;
-            continue;
-        }
-        else if (/^--backoff=/.test(arg)) {
-            const val = +arg.substring('--backoff='.length);
-            opt.backoff = val;
-            continue;
-        }
-        else if (/^--impl=/.test(arg)) {
-            const val = arg.substring('--impl='.length);
-            switch (val) {
-                case 'rimraf':
-                    impl = rimraf;
-                    continue;
-                case 'native':
-                case 'manual':
-                case 'posix':
-                case 'windows':
-                    impl = rimraf[val];
-                    continue;
-                case 'move-remove':
-                    impl = rimraf.moveRemove;
-                    continue;
-                default:
-                    console.error(`unknown implementation: ${val}`);
-                    runHelpForUsage();
-                    return 1;
-            }
-        }
-        else if (/^-/.test(arg)) {
-            console.error(`unknown option: ${arg}`);
-            runHelpForUsage();
-            return 1;
-        }
-        else {
-            paths.push(arg);
-        }
-    }
-    if (opt.preserveRoot !== false) {
-        for (const path of paths.map(p => resolve(p))) {
-            if (path === parse(path).root) {
-                console.error(`rimraf: it is dangerous to operate recursively on '/'`);
-                console.error('use --no-preserve-root to override this failsafe');
-                return 1;
-            }
-        }
-    }
-    if (!paths.length) {
-        console.error('rimraf: must provide a path to remove');
-        runHelpForUsage();
-        return 1;
-    }
-    if (impl === rimraf.native && (interactive || opt.filter)) {
-        console.error('native implementation does not support -v or -i');
-        runHelpForUsage();
-        return 1;
-    }
-    if (interactive) {
-        await interactiveRimraf(impl, paths, opt);
-    }
-    else {
-        await impl(paths, opt);
-    }
-    return 0;
-};
-main.help = help;
-export default main;
-if (process.env.__TESTING_RIMRAF_BIN__ !== '1') {
-    const args = process.argv.slice(2);
-    main(...args).then(code => process.exit(code), er => {
-        console.error(er);
-        process.exit(1);
-    });
-}
-//# sourceMappingURL=bin.mjs.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/default-tmp.js b/node_modules/rimraf/dist/esm/default-tmp.js
deleted file mode 100644
index fb0846af5c3ac..0000000000000
--- a/node_modules/rimraf/dist/esm/default-tmp.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// The default temporary folder location for use in the windows algorithm.
-// It's TEMPting to use dirname(path), since that's guaranteed to be on the
-// same device.  However, this means that:
-// rimraf(path).then(() => rimraf(dirname(path)))
-// will often fail with EBUSY, because the parent dir contains
-// marked-for-deletion directory entries (which do not show up in readdir).
-// The approach here is to use os.tmpdir() if it's on the same drive letter,
-// or resolve(path, '\\temp') if it exists, or the root of the drive if not.
-// On Posix (not that you'd be likely to use the windows algorithm there),
-// it uses os.tmpdir() always.
-import { tmpdir } from 'os';
-import { parse, resolve } from 'path';
-import { promises, statSync } from './fs.js';
-import platform from './platform.js';
-const { stat } = promises;
-const isDirSync = (path) => {
-    try {
-        return statSync(path).isDirectory();
-    }
-    catch (er) {
-        return false;
-    }
-};
-const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
-const win32DefaultTmp = async (path) => {
-    const { root } = parse(path);
-    const tmp = tmpdir();
-    const { root: tmpRoot } = parse(tmp);
-    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
-        return tmp;
-    }
-    const driveTmp = resolve(root, '/temp');
-    if (await isDir(driveTmp)) {
-        return driveTmp;
-    }
-    return root;
-};
-const win32DefaultTmpSync = (path) => {
-    const { root } = parse(path);
-    const tmp = tmpdir();
-    const { root: tmpRoot } = parse(tmp);
-    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
-        return tmp;
-    }
-    const driveTmp = resolve(root, '/temp');
-    if (isDirSync(driveTmp)) {
-        return driveTmp;
-    }
-    return root;
-};
-const posixDefaultTmp = async () => tmpdir();
-const posixDefaultTmpSync = () => tmpdir();
-export const defaultTmp = platform === 'win32' ? win32DefaultTmp : posixDefaultTmp;
-export const defaultTmpSync = platform === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
-//# sourceMappingURL=default-tmp.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/fix-eperm.js b/node_modules/rimraf/dist/esm/fix-eperm.js
deleted file mode 100644
index 633c0e119df1f..0000000000000
--- a/node_modules/rimraf/dist/esm/fix-eperm.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import { chmodSync, promises } from './fs.js';
-const { chmod } = promises;
-export const fixEPERM = (fn) => async (path) => {
-    try {
-        return await fn(path);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOENT') {
-            return;
-        }
-        if (fer?.code === 'EPERM') {
-            try {
-                await chmod(path, 0o666);
-            }
-            catch (er2) {
-                const fer2 = er2;
-                if (fer2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-            return await fn(path);
-        }
-        throw er;
-    }
-};
-export const fixEPERMSync = (fn) => (path) => {
-    try {
-        return fn(path);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOENT') {
-            return;
-        }
-        if (fer?.code === 'EPERM') {
-            try {
-                chmodSync(path, 0o666);
-            }
-            catch (er2) {
-                const fer2 = er2;
-                if (fer2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-            return fn(path);
-        }
-        throw er;
-    }
-};
-//# sourceMappingURL=fix-eperm.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/fs.js b/node_modules/rimraf/dist/esm/fs.js
deleted file mode 100644
index f9422ce992a54..0000000000000
--- a/node_modules/rimraf/dist/esm/fs.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// promisify ourselves, because older nodes don't have fs.promises
-import fs from 'fs';
-// sync ones just take the sync version from node
-export { chmodSync, mkdirSync, renameSync, rmdirSync, rmSync, statSync, lstatSync, unlinkSync, } from 'fs';
-import { readdirSync as rdSync } from 'fs';
-export const readdirSync = (path) => rdSync(path, { withFileTypes: true });
-// unrolled for better inlining, this seems to get better performance
-// than something like:
-// const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
-// which would be a bit cleaner.
-const chmod = (path, mode) => new Promise((res, rej) => fs.chmod(path, mode, (er, ...d) => (er ? rej(er) : res(...d))));
-const mkdir = (path, options) => new Promise((res, rej) => fs.mkdir(path, options, (er, made) => (er ? rej(er) : res(made))));
-const readdir = (path) => new Promise((res, rej) => fs.readdir(path, { withFileTypes: true }, (er, data) => er ? rej(er) : res(data)));
-const rename = (oldPath, newPath) => new Promise((res, rej) => fs.rename(oldPath, newPath, (er, ...d) => er ? rej(er) : res(...d)));
-const rm = (path, options) => new Promise((res, rej) => fs.rm(path, options, (er, ...d) => (er ? rej(er) : res(...d))));
-const rmdir = (path) => new Promise((res, rej) => fs.rmdir(path, (er, ...d) => (er ? rej(er) : res(...d))));
-const stat = (path) => new Promise((res, rej) => fs.stat(path, (er, data) => (er ? rej(er) : res(data))));
-const lstat = (path) => new Promise((res, rej) => fs.lstat(path, (er, data) => (er ? rej(er) : res(data))));
-const unlink = (path) => new Promise((res, rej) => fs.unlink(path, (er, ...d) => (er ? rej(er) : res(...d))));
-export const promises = {
-    chmod,
-    mkdir,
-    readdir,
-    rename,
-    rm,
-    rmdir,
-    stat,
-    lstat,
-    unlink,
-};
-//# sourceMappingURL=fs.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/ignore-enoent.js b/node_modules/rimraf/dist/esm/ignore-enoent.js
deleted file mode 100644
index 753f4811cd384..0000000000000
--- a/node_modules/rimraf/dist/esm/ignore-enoent.js
+++ /dev/null
@@ -1,16 +0,0 @@
-export const ignoreENOENT = async (p) => p.catch(er => {
-    if (er.code !== 'ENOENT') {
-        throw er;
-    }
-});
-export const ignoreENOENTSync = (fn) => {
-    try {
-        return fn();
-    }
-    catch (er) {
-        if (er?.code !== 'ENOENT') {
-            throw er;
-        }
-    }
-};
-//# sourceMappingURL=ignore-enoent.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/index.js b/node_modules/rimraf/dist/esm/index.js
deleted file mode 100644
index d94d6f81a485c..0000000000000
--- a/node_modules/rimraf/dist/esm/index.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import { glob, globSync } from 'glob';
-import { optArg, optArgSync, } from './opt-arg.js';
-import pathArg from './path-arg.js';
-import { rimrafManual, rimrafManualSync } from './rimraf-manual.js';
-import { rimrafMoveRemove, rimrafMoveRemoveSync } from './rimraf-move-remove.js';
-import { rimrafNative, rimrafNativeSync } from './rimraf-native.js';
-import { rimrafPosix, rimrafPosixSync } from './rimraf-posix.js';
-import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows.js';
-import { useNative, useNativeSync } from './use-native.js';
-export { assertRimrafOptions, isRimrafOptions, } from './opt-arg.js';
-const wrap = (fn) => async (path, opt) => {
-    const options = optArg(opt);
-    if (options.glob) {
-        path = await glob(path, options.glob);
-    }
-    if (Array.isArray(path)) {
-        return !!(await Promise.all(path.map(p => fn(pathArg(p, options), options)))).reduce((a, b) => a && b, true);
-    }
-    else {
-        return !!(await fn(pathArg(path, options), options));
-    }
-};
-const wrapSync = (fn) => (path, opt) => {
-    const options = optArgSync(opt);
-    if (options.glob) {
-        path = globSync(path, options.glob);
-    }
-    if (Array.isArray(path)) {
-        return !!path
-            .map(p => fn(pathArg(p, options), options))
-            .reduce((a, b) => a && b, true);
-    }
-    else {
-        return !!fn(pathArg(path, options), options);
-    }
-};
-export const nativeSync = wrapSync(rimrafNativeSync);
-export const native = Object.assign(wrap(rimrafNative), { sync: nativeSync });
-export const manualSync = wrapSync(rimrafManualSync);
-export const manual = Object.assign(wrap(rimrafManual), { sync: manualSync });
-export const windowsSync = wrapSync(rimrafWindowsSync);
-export const windows = Object.assign(wrap(rimrafWindows), { sync: windowsSync });
-export const posixSync = wrapSync(rimrafPosixSync);
-export const posix = Object.assign(wrap(rimrafPosix), { sync: posixSync });
-export const moveRemoveSync = wrapSync(rimrafMoveRemoveSync);
-export const moveRemove = Object.assign(wrap(rimrafMoveRemove), {
-    sync: moveRemoveSync,
-});
-export const rimrafSync = wrapSync((path, opt) => useNativeSync(opt) ?
-    rimrafNativeSync(path, opt)
-    : rimrafManualSync(path, opt));
-export const sync = rimrafSync;
-const rimraf_ = wrap((path, opt) => useNative(opt) ? rimrafNative(path, opt) : rimrafManual(path, opt));
-export const rimraf = Object.assign(rimraf_, {
-    rimraf: rimraf_,
-    sync: rimrafSync,
-    rimrafSync: rimrafSync,
-    manual,
-    manualSync,
-    native,
-    nativeSync,
-    posix,
-    posixSync,
-    windows,
-    windowsSync,
-    moveRemove,
-    moveRemoveSync,
-});
-rimraf.rimraf = rimraf;
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/opt-arg.js b/node_modules/rimraf/dist/esm/opt-arg.js
deleted file mode 100644
index eacfe6c4325e2..0000000000000
--- a/node_modules/rimraf/dist/esm/opt-arg.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const typeOrUndef = (val, t) => typeof val === 'undefined' || typeof val === t;
-export const isRimrafOptions = (o) => !!o &&
-    typeof o === 'object' &&
-    typeOrUndef(o.preserveRoot, 'boolean') &&
-    typeOrUndef(o.tmp, 'string') &&
-    typeOrUndef(o.maxRetries, 'number') &&
-    typeOrUndef(o.retryDelay, 'number') &&
-    typeOrUndef(o.backoff, 'number') &&
-    typeOrUndef(o.maxBackoff, 'number') &&
-    (typeOrUndef(o.glob, 'boolean') || (o.glob && typeof o.glob === 'object')) &&
-    typeOrUndef(o.filter, 'function');
-export const assertRimrafOptions = (o) => {
-    if (!isRimrafOptions(o)) {
-        throw new Error('invalid rimraf options');
-    }
-};
-const optArgT = (opt) => {
-    assertRimrafOptions(opt);
-    const { glob, ...options } = opt;
-    if (!glob) {
-        return options;
-    }
-    const globOpt = glob === true ?
-        opt.signal ?
-            { signal: opt.signal }
-            : {}
-        : opt.signal ?
-            {
-                signal: opt.signal,
-                ...glob,
-            }
-            : glob;
-    return {
-        ...options,
-        glob: {
-            ...globOpt,
-            // always get absolute paths from glob, to ensure
-            // that we are referencing the correct thing.
-            absolute: true,
-            withFileTypes: false,
-        },
-    };
-};
-export const optArg = (opt = {}) => optArgT(opt);
-export const optArgSync = (opt = {}) => optArgT(opt);
-//# sourceMappingURL=opt-arg.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/package.json b/node_modules/rimraf/dist/esm/package.json
deleted file mode 100644
index 3dbc1ca591c05..0000000000000
--- a/node_modules/rimraf/dist/esm/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "type": "module"
-}
diff --git a/node_modules/rimraf/dist/esm/path-arg.js b/node_modules/rimraf/dist/esm/path-arg.js
deleted file mode 100644
index f32cb106756db..0000000000000
--- a/node_modules/rimraf/dist/esm/path-arg.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import { parse, resolve } from 'path';
-import { inspect } from 'util';
-import platform from './platform.js';
-const pathArg = (path, opt = {}) => {
-    const type = typeof path;
-    if (type !== 'string') {
-        const ctor = path && type === 'object' && path.constructor;
-        const received = ctor && ctor.name ? `an instance of ${ctor.name}`
-            : type === 'object' ? inspect(path)
-                : `type ${type} ${path}`;
-        const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
-        throw Object.assign(new TypeError(msg), {
-            path,
-            code: 'ERR_INVALID_ARG_TYPE',
-        });
-    }
-    if (/\0/.test(path)) {
-        // simulate same failure that node raises
-        const msg = 'path must be a string without null bytes';
-        throw Object.assign(new TypeError(msg), {
-            path,
-            code: 'ERR_INVALID_ARG_VALUE',
-        });
-    }
-    path = resolve(path);
-    const { root } = parse(path);
-    if (path === root && opt.preserveRoot !== false) {
-        const msg = 'refusing to remove root directory without preserveRoot:false';
-        throw Object.assign(new Error(msg), {
-            path,
-            code: 'ERR_PRESERVE_ROOT',
-        });
-    }
-    if (platform === 'win32') {
-        const badWinChars = /[*|"<>?:]/;
-        const { root } = parse(path);
-        if (badWinChars.test(path.substring(root.length))) {
-            throw Object.assign(new Error('Illegal characters in path.'), {
-                path,
-                code: 'EINVAL',
-            });
-        }
-    }
-    return path;
-};
-export default pathArg;
-//# sourceMappingURL=path-arg.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/platform.js b/node_modules/rimraf/dist/esm/platform.js
deleted file mode 100644
index a2641721b7819..0000000000000
--- a/node_modules/rimraf/dist/esm/platform.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export default process.env.__TESTING_RIMRAF_PLATFORM__ || process.platform;
-//# sourceMappingURL=platform.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/readdir-or-error.js b/node_modules/rimraf/dist/esm/readdir-or-error.js
deleted file mode 100644
index 71235135c6300..0000000000000
--- a/node_modules/rimraf/dist/esm/readdir-or-error.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// returns an array of entries if readdir() works,
-// or the error that readdir() raised if not.
-import { promises, readdirSync } from './fs.js';
-const { readdir } = promises;
-export const readdirOrError = (path) => readdir(path).catch(er => er);
-export const readdirOrErrorSync = (path) => {
-    try {
-        return readdirSync(path);
-    }
-    catch (er) {
-        return er;
-    }
-};
-//# sourceMappingURL=readdir-or-error.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/retry-busy.js b/node_modules/rimraf/dist/esm/retry-busy.js
deleted file mode 100644
index 17e336a4d583f..0000000000000
--- a/node_modules/rimraf/dist/esm/retry-busy.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// note: max backoff is the maximum that any *single* backoff will do
-export const MAXBACKOFF = 200;
-export const RATE = 1.2;
-export const MAXRETRIES = 10;
-export const codes = new Set(['EMFILE', 'ENFILE', 'EBUSY']);
-export const retryBusy = (fn) => {
-    const method = async (path, opt, backoff = 1, total = 0) => {
-        const mbo = opt.maxBackoff || MAXBACKOFF;
-        const rate = opt.backoff || RATE;
-        const max = opt.maxRetries || MAXRETRIES;
-        let retries = 0;
-        while (true) {
-            try {
-                return await fn(path);
-            }
-            catch (er) {
-                const fer = er;
-                if (fer?.path === path && fer?.code && codes.has(fer.code)) {
-                    backoff = Math.ceil(backoff * rate);
-                    total = backoff + total;
-                    if (total < mbo) {
-                        return new Promise((res, rej) => {
-                            setTimeout(() => {
-                                method(path, opt, backoff, total).then(res, rej);
-                            }, backoff);
-                        });
-                    }
-                    if (retries < max) {
-                        retries++;
-                        continue;
-                    }
-                }
-                throw er;
-            }
-        }
-    };
-    return method;
-};
-// just retries, no async so no backoff
-export const retryBusySync = (fn) => {
-    const method = (path, opt) => {
-        const max = opt.maxRetries || MAXRETRIES;
-        let retries = 0;
-        while (true) {
-            try {
-                return fn(path);
-            }
-            catch (er) {
-                const fer = er;
-                if (fer?.path === path &&
-                    fer?.code &&
-                    codes.has(fer.code) &&
-                    retries < max) {
-                    retries++;
-                    continue;
-                }
-                throw er;
-            }
-        }
-    };
-    return method;
-};
-//# sourceMappingURL=retry-busy.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/rimraf-manual.js b/node_modules/rimraf/dist/esm/rimraf-manual.js
deleted file mode 100644
index 132708ffaa587..0000000000000
--- a/node_modules/rimraf/dist/esm/rimraf-manual.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import platform from './platform.js';
-import { rimrafPosix, rimrafPosixSync } from './rimraf-posix.js';
-import { rimrafWindows, rimrafWindowsSync } from './rimraf-windows.js';
-export const rimrafManual = platform === 'win32' ? rimrafWindows : rimrafPosix;
-export const rimrafManualSync = platform === 'win32' ? rimrafWindowsSync : rimrafPosixSync;
-//# sourceMappingURL=rimraf-manual.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/rimraf-move-remove.js b/node_modules/rimraf/dist/esm/rimraf-move-remove.js
deleted file mode 100644
index 093e40f49f5a2..0000000000000
--- a/node_modules/rimraf/dist/esm/rimraf-move-remove.js
+++ /dev/null
@@ -1,187 +0,0 @@
-// https://youtu.be/uhRWMGBjlO8?t=537
-//
-// 1. readdir
-// 2. for each entry
-//   a. if a non-empty directory, recurse
-//   b. if an empty directory, move to random hidden file name in $TEMP
-//   c. unlink/rmdir $TEMP
-//
-// This works around the fact that unlink/rmdir is non-atomic and takes
-// a non-deterministic amount of time to complete.
-//
-// However, it is HELLA SLOW, like 2-10x slower than a naive recursive rm.
-import { basename, parse, resolve } from 'path';
-import { defaultTmp, defaultTmpSync } from './default-tmp.js';
-import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
-import { chmodSync, lstatSync, promises as fsPromises, renameSync, rmdirSync, unlinkSync, } from './fs.js';
-const { lstat, rename, unlink, rmdir, chmod } = fsPromises;
-import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
-// crypto.randomBytes is much slower, and Math.random() is enough here
-const uniqueFilename = (path) => `.${basename(path)}.${Math.random()}`;
-const unlinkFixEPERM = async (path) => unlink(path).catch((er) => {
-    if (er.code === 'EPERM') {
-        return chmod(path, 0o666).then(() => unlink(path), er2 => {
-            if (er2.code === 'ENOENT') {
-                return;
-            }
-            throw er;
-        });
-    }
-    else if (er.code === 'ENOENT') {
-        return;
-    }
-    throw er;
-});
-const unlinkFixEPERMSync = (path) => {
-    try {
-        unlinkSync(path);
-    }
-    catch (er) {
-        if (er?.code === 'EPERM') {
-            try {
-                return chmodSync(path, 0o666);
-            }
-            catch (er2) {
-                if (er2?.code === 'ENOENT') {
-                    return;
-                }
-                throw er;
-            }
-        }
-        else if (er?.code === 'ENOENT') {
-            return;
-        }
-        throw er;
-    }
-};
-export const rimrafMoveRemove = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafMoveRemoveDir(path, opt, await lstat(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-const rimrafMoveRemoveDir = async (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    if (!opt.tmp) {
-        return rimrafMoveRemoveDir(path, { ...opt, tmp: await defaultTmp(path) }, ent);
-    }
-    if (path === opt.tmp && parse(path).root !== path) {
-        throw new Error('cannot delete temp directory used for deletion');
-    }
-    const entries = ent.isDirectory() ? await readdirOrError(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await ignoreENOENT(tmpUnlink(path, opt.tmp, unlinkFixEPERM));
-        return true;
-    }
-    const removedAll = (await Promise.all(entries.map(ent => rimrafMoveRemoveDir(resolve(path, ent.name), opt, ent)))).reduce((a, b) => a && b, true);
-    if (!removedAll) {
-        return false;
-    }
-    // we don't ever ACTUALLY try to unlink /, because that can never work
-    // but when preserveRoot is false, we could be operating on it.
-    // No need to check if preserveRoot is not false.
-    if (opt.preserveRoot === false && path === parse(path).root) {
-        return false;
-    }
-    if (opt.filter && !(await opt.filter(path, ent))) {
-        return false;
-    }
-    await ignoreENOENT(tmpUnlink(path, opt.tmp, rmdir));
-    return true;
-};
-const tmpUnlink = async (path, tmp, rm) => {
-    const tmpFile = resolve(tmp, uniqueFilename(path));
-    await rename(path, tmpFile);
-    return await rm(tmpFile);
-};
-export const rimrafMoveRemoveSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafMoveRemoveDirSync(path, opt, lstatSync(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-const rimrafMoveRemoveDirSync = (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    if (!opt.tmp) {
-        return rimrafMoveRemoveDirSync(path, { ...opt, tmp: defaultTmpSync(path) }, ent);
-    }
-    const tmp = opt.tmp;
-    if (path === opt.tmp && parse(path).root !== path) {
-        throw new Error('cannot delete temp directory used for deletion');
-    }
-    const entries = ent.isDirectory() ? readdirOrErrorSync(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, unlinkFixEPERMSync));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const p = resolve(path, ent.name);
-        removedAll = rimrafMoveRemoveDirSync(p, opt, ent) && removedAll;
-    }
-    if (!removedAll) {
-        return false;
-    }
-    if (opt.preserveRoot === false && path === parse(path).root) {
-        return false;
-    }
-    if (opt.filter && !opt.filter(path, ent)) {
-        return false;
-    }
-    ignoreENOENTSync(() => tmpUnlinkSync(path, tmp, rmdirSync));
-    return true;
-};
-const tmpUnlinkSync = (path, tmp, rmSync) => {
-    const tmpFile = resolve(tmp, uniqueFilename(path));
-    renameSync(path, tmpFile);
-    return rmSync(tmpFile);
-};
-//# sourceMappingURL=rimraf-move-remove.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/rimraf-native.js b/node_modules/rimraf/dist/esm/rimraf-native.js
deleted file mode 100644
index 719161fc9e85c..0000000000000
--- a/node_modules/rimraf/dist/esm/rimraf-native.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { promises, rmSync } from './fs.js';
-const { rm } = promises;
-export const rimrafNative = async (path, opt) => {
-    await rm(path, {
-        ...opt,
-        force: true,
-        recursive: true,
-    });
-    return true;
-};
-export const rimrafNativeSync = (path, opt) => {
-    rmSync(path, {
-        ...opt,
-        force: true,
-        recursive: true,
-    });
-    return true;
-};
-//# sourceMappingURL=rimraf-native.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/rimraf-posix.js b/node_modules/rimraf/dist/esm/rimraf-posix.js
deleted file mode 100644
index 356a477765a66..0000000000000
--- a/node_modules/rimraf/dist/esm/rimraf-posix.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// the simple recursive removal, where unlink and rmdir are atomic
-// Note that this approach does NOT work on Windows!
-// We stat first and only unlink if the Dirent isn't a directory,
-// because sunos will let root unlink a directory, and some
-// SUPER weird breakage happens as a result.
-import { lstatSync, promises, rmdirSync, unlinkSync } from './fs.js';
-const { lstat, rmdir, unlink } = promises;
-import { parse, resolve } from 'path';
-import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
-import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
-export const rimrafPosix = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafPosixDir(path, opt, await lstat(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-export const rimrafPosixSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafPosixDirSync(path, opt, lstatSync(path));
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-const rimrafPosixDir = async (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? await readdirOrError(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await ignoreENOENT(unlink(path));
-        return true;
-    }
-    const removedAll = (await Promise.all(entries.map(ent => rimrafPosixDir(resolve(path, ent.name), opt, ent)))).reduce((a, b) => a && b, true);
-    if (!removedAll) {
-        return false;
-    }
-    // we don't ever ACTUALLY try to unlink /, because that can never work
-    // but when preserveRoot is false, we could be operating on it.
-    // No need to check if preserveRoot is not false.
-    if (opt.preserveRoot === false && path === parse(path).root) {
-        return false;
-    }
-    if (opt.filter && !(await opt.filter(path, ent))) {
-        return false;
-    }
-    await ignoreENOENT(rmdir(path));
-    return true;
-};
-const rimrafPosixDirSync = (path, opt, ent) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? readdirOrErrorSync(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        ignoreENOENTSync(() => unlinkSync(path));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const p = resolve(path, ent.name);
-        removedAll = rimrafPosixDirSync(p, opt, ent) && removedAll;
-    }
-    if (opt.preserveRoot === false && path === parse(path).root) {
-        return false;
-    }
-    if (!removedAll) {
-        return false;
-    }
-    if (opt.filter && !opt.filter(path, ent)) {
-        return false;
-    }
-    ignoreENOENTSync(() => rmdirSync(path));
-    return true;
-};
-//# sourceMappingURL=rimraf-posix.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/rimraf-windows.js b/node_modules/rimraf/dist/esm/rimraf-windows.js
deleted file mode 100644
index bd2fa80657848..0000000000000
--- a/node_modules/rimraf/dist/esm/rimraf-windows.js
+++ /dev/null
@@ -1,177 +0,0 @@
-// This is the same as rimrafPosix, with the following changes:
-//
-// 1. EBUSY, ENFILE, EMFILE trigger retries and/or exponential backoff
-// 2. All non-directories are removed first and then all directories are
-//    removed in a second sweep.
-// 3. If we hit ENOTEMPTY in the second sweep, fall back to move-remove on
-//    the that folder.
-//
-// Note: "move then remove" is 2-10 times slower, and just as unreliable.
-import { parse, resolve } from 'path';
-import { fixEPERM, fixEPERMSync } from './fix-eperm.js';
-import { lstatSync, promises, rmdirSync, unlinkSync } from './fs.js';
-import { ignoreENOENT, ignoreENOENTSync } from './ignore-enoent.js';
-import { readdirOrError, readdirOrErrorSync } from './readdir-or-error.js';
-import { retryBusy, retryBusySync } from './retry-busy.js';
-import { rimrafMoveRemove, rimrafMoveRemoveSync } from './rimraf-move-remove.js';
-const { unlink, rmdir, lstat } = promises;
-const rimrafWindowsFile = retryBusy(fixEPERM(unlink));
-const rimrafWindowsFileSync = retryBusySync(fixEPERMSync(unlinkSync));
-const rimrafWindowsDirRetry = retryBusy(fixEPERM(rmdir));
-const rimrafWindowsDirRetrySync = retryBusySync(fixEPERMSync(rmdirSync));
-const rimrafWindowsDirMoveRemoveFallback = async (path, opt) => {
-    /* c8 ignore start */
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    /* c8 ignore stop */
-    // already filtered, remove from options so we don't call unnecessarily
-    const { filter, ...options } = opt;
-    try {
-        return await rimrafWindowsDirRetry(path, options);
-    }
-    catch (er) {
-        if (er?.code === 'ENOTEMPTY') {
-            return await rimrafMoveRemove(path, options);
-        }
-        throw er;
-    }
-};
-const rimrafWindowsDirMoveRemoveFallbackSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    // already filtered, remove from options so we don't call unnecessarily
-    const { filter, ...options } = opt;
-    try {
-        return rimrafWindowsDirRetrySync(path, options);
-    }
-    catch (er) {
-        const fer = er;
-        if (fer?.code === 'ENOTEMPTY') {
-            return rimrafMoveRemoveSync(path, options);
-        }
-        throw er;
-    }
-};
-const START = Symbol('start');
-const CHILD = Symbol('child');
-const FINISH = Symbol('finish');
-export const rimrafWindows = async (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return await rimrafWindowsDir(path, opt, await lstat(path), START);
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-export const rimrafWindowsSync = (path, opt) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    try {
-        return rimrafWindowsDirSync(path, opt, lstatSync(path), START);
-    }
-    catch (er) {
-        if (er?.code === 'ENOENT')
-            return true;
-        throw er;
-    }
-};
-const rimrafWindowsDir = async (path, opt, ent, state = START) => {
-    if (opt?.signal?.aborted) {
-        throw opt.signal.reason;
-    }
-    const entries = ent.isDirectory() ? await readdirOrError(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        // is a file
-        await ignoreENOENT(rimrafWindowsFile(path, opt));
-        return true;
-    }
-    const s = state === START ? CHILD : state;
-    const removedAll = (await Promise.all(entries.map(ent => rimrafWindowsDir(resolve(path, ent.name), opt, ent, s)))).reduce((a, b) => a && b, true);
-    if (state === START) {
-        return rimrafWindowsDir(path, opt, ent, FINISH);
-    }
-    else if (state === FINISH) {
-        if (opt.preserveRoot === false && path === parse(path).root) {
-            return false;
-        }
-        if (!removedAll) {
-            return false;
-        }
-        if (opt.filter && !(await opt.filter(path, ent))) {
-            return false;
-        }
-        await ignoreENOENT(rimrafWindowsDirMoveRemoveFallback(path, opt));
-    }
-    return true;
-};
-const rimrafWindowsDirSync = (path, opt, ent, state = START) => {
-    const entries = ent.isDirectory() ? readdirOrErrorSync(path) : null;
-    if (!Array.isArray(entries)) {
-        // this can only happen if lstat/readdir lied, or if the dir was
-        // swapped out with a file at just the right moment.
-        /* c8 ignore start */
-        if (entries) {
-            if (entries.code === 'ENOENT') {
-                return true;
-            }
-            if (entries.code !== 'ENOTDIR') {
-                throw entries;
-            }
-        }
-        /* c8 ignore stop */
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        // is a file
-        ignoreENOENTSync(() => rimrafWindowsFileSync(path, opt));
-        return true;
-    }
-    let removedAll = true;
-    for (const ent of entries) {
-        const s = state === START ? CHILD : state;
-        const p = resolve(path, ent.name);
-        removedAll = rimrafWindowsDirSync(p, opt, ent, s) && removedAll;
-    }
-    if (state === START) {
-        return rimrafWindowsDirSync(path, opt, ent, FINISH);
-    }
-    else if (state === FINISH) {
-        if (opt.preserveRoot === false && path === parse(path).root) {
-            return false;
-        }
-        if (!removedAll) {
-            return false;
-        }
-        if (opt.filter && !opt.filter(path, ent)) {
-            return false;
-        }
-        ignoreENOENTSync(() => {
-            rimrafWindowsDirMoveRemoveFallbackSync(path, opt);
-        });
-    }
-    return true;
-};
-//# sourceMappingURL=rimraf-windows.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/dist/esm/use-native.js b/node_modules/rimraf/dist/esm/use-native.js
deleted file mode 100644
index bf1ea5a14c5aa..0000000000000
--- a/node_modules/rimraf/dist/esm/use-native.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import platform from './platform.js';
-const version = process.env.__TESTING_RIMRAF_NODE_VERSION__ || process.version;
-const versArr = version.replace(/^v/, '').split('.');
-/* c8 ignore start */
-const [major = 0, minor = 0] = versArr.map(v => parseInt(v, 10));
-/* c8 ignore stop */
-const hasNative = major > 14 || (major === 14 && minor >= 14);
-// we do NOT use native by default on Windows, because Node's native
-// rm implementation is less advanced.  Change this code if that changes.
-export const useNative = !hasNative || platform === 'win32' ?
-    () => false
-    : opt => !opt?.signal && !opt?.filter;
-export const useNativeSync = !hasNative || platform === 'win32' ?
-    () => false
-    : opt => !opt?.signal && !opt?.filter;
-//# sourceMappingURL=use-native.js.map
\ No newline at end of file
diff --git a/node_modules/rimraf/package.json b/node_modules/rimraf/package.json
deleted file mode 100644
index 212180c8e3fcc..0000000000000
--- a/node_modules/rimraf/package.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "name": "rimraf",
-  "version": "5.0.10",
-  "publishConfig": {
-    "tag": "v5-legacy"
-  },
-  "type": "module",
-  "tshy": {
-    "main": true,
-    "exports": {
-      "./package.json": "./package.json",
-      ".": "./src/index.ts"
-    }
-  },
-  "bin": "./dist/esm/bin.mjs",
-  "main": "./dist/commonjs/index.js",
-  "types": "./dist/commonjs/index.d.ts",
-  "exports": {
-    "./package.json": "./package.json",
-    ".": {
-      "import": {
-        "types": "./dist/esm/index.d.ts",
-        "default": "./dist/esm/index.js"
-      },
-      "require": {
-        "types": "./dist/commonjs/index.d.ts",
-        "default": "./dist/commonjs/index.js"
-      }
-    }
-  },
-  "files": [
-    "dist"
-  ],
-  "description": "A deep deletion module for node (like `rm -rf`)",
-  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
-  "license": "ISC",
-  "repository": "git://github.com/isaacs/rimraf.git",
-  "scripts": {
-    "preversion": "npm test",
-    "postversion": "npm publish",
-    "prepublishOnly": "git push origin --follow-tags",
-    "prepare": "tshy",
-    "pretest": "npm run prepare",
-    "presnap": "npm run prepare",
-    "test": "tap",
-    "snap": "tap",
-    "format": "prettier --write . --log-level warn",
-    "benchmark": "node benchmark/index.js",
-    "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
-  },
-  "prettier": {
-    "experimentalTernaries": true,
-    "semi": false,
-    "printWidth": 80,
-    "tabWidth": 2,
-    "useTabs": false,
-    "singleQuote": true,
-    "jsxSingleQuote": false,
-    "bracketSameLine": true,
-    "arrowParens": "avoid",
-    "endOfLine": "lf"
-  },
-  "devDependencies": {
-    "@types/node": "^20.12.11",
-    "mkdirp": "^3.0.1",
-    "prettier": "^3.2.5",
-    "tap": "^19.0.1",
-    "tshy": "^1.14.0",
-    "typedoc": "^0.25.13",
-    "typescript": "^5.4.5"
-  },
-  "funding": {
-    "url": "https://github.com/sponsors/isaacs"
-  },
-  "dependencies": {
-    "glob": "^10.3.7"
-  },
-  "keywords": [
-    "rm",
-    "rm -rf",
-    "rm -fr",
-    "remove",
-    "directory",
-    "cli",
-    "rmdir",
-    "recursive"
-  ],
-  "module": "./dist/esm/index.js"
-}
diff --git a/node_modules/tinyglobby/LICENSE b/node_modules/tinyglobby/LICENSE
new file mode 100644
index 0000000000000..8657364bb085e
--- /dev/null
+++ b/node_modules/tinyglobby/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Madeline Gurriarán
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/tinyglobby/dist/index.d.mts b/node_modules/tinyglobby/dist/index.d.mts
new file mode 100644
index 0000000000000..c60f4f85b569b
--- /dev/null
+++ b/node_modules/tinyglobby/dist/index.d.mts
@@ -0,0 +1,26 @@
+declare const convertPathToPattern: (path: string) => string;
+declare const escapePath: (path: string) => string;
+declare function isDynamicPattern(pattern: string, options?: {
+    caseSensitiveMatch: boolean;
+}): boolean;
+
+interface GlobOptions {
+    absolute?: boolean;
+    cwd?: string;
+    patterns?: string | string[];
+    ignore?: string | string[];
+    dot?: boolean;
+    deep?: number;
+    followSymbolicLinks?: boolean;
+    caseSensitiveMatch?: boolean;
+    expandDirectories?: boolean;
+    onlyDirectories?: boolean;
+    onlyFiles?: boolean;
+    debug?: boolean;
+}
+declare function glob(patterns: string | string[], options?: Omit<GlobOptions, 'patterns'>): Promise<string[]>;
+declare function glob(options: GlobOptions): Promise<string[]>;
+declare function globSync(patterns: string | string[], options?: Omit<GlobOptions, 'patterns'>): string[];
+declare function globSync(options: GlobOptions): string[];
+
+export { type GlobOptions, convertPathToPattern, escapePath, glob, globSync, isDynamicPattern };
diff --git a/node_modules/tinyglobby/dist/index.js b/node_modules/tinyglobby/dist/index.js
new file mode 100644
index 0000000000000..95e26e55b024c
--- /dev/null
+++ b/node_modules/tinyglobby/dist/index.js
@@ -0,0 +1,333 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+  convertPathToPattern: () => convertPathToPattern,
+  escapePath: () => escapePath,
+  glob: () => glob,
+  globSync: () => globSync,
+  isDynamicPattern: () => isDynamicPattern
+});
+module.exports = __toCommonJS(index_exports);
+var import_node_path = __toESM(require("path"));
+var import_fdir = require("fdir");
+var import_picomatch2 = __toESM(require("picomatch"));
+
+// src/utils.ts
+var import_picomatch = __toESM(require("picomatch"));
+var ONLY_PARENT_DIRECTORIES = /^(\/?\.\.)+$/;
+function getPartialMatcher(patterns, options) {
+  const patternsCount = patterns.length;
+  const patternsParts = Array(patternsCount);
+  const regexes = Array(patternsCount);
+  for (let i = 0; i < patternsCount; i++) {
+    const parts = splitPattern(patterns[i]);
+    patternsParts[i] = parts;
+    const partsCount = parts.length;
+    const partRegexes = Array(partsCount);
+    for (let j = 0; j < partsCount; j++) {
+      partRegexes[j] = import_picomatch.default.makeRe(parts[j], options);
+    }
+    regexes[i] = partRegexes;
+  }
+  return (input) => {
+    const inputParts = input.split("/");
+    if (inputParts[0] === ".." && ONLY_PARENT_DIRECTORIES.test(input)) {
+      return true;
+    }
+    for (let i = 0; i < patterns.length; i++) {
+      const patternParts = patternsParts[i];
+      const regex = regexes[i];
+      const inputPatternCount = inputParts.length;
+      const minParts = Math.min(inputPatternCount, patternParts.length);
+      let j = 0;
+      while (j < minParts) {
+        const part = patternParts[j];
+        if (part.includes("/")) {
+          return true;
+        }
+        const match = regex[j].test(inputParts[j]);
+        if (!match) {
+          break;
+        }
+        if (part === "**") {
+          return true;
+        }
+        j++;
+      }
+      if (j === inputPatternCount) {
+        return true;
+      }
+    }
+    return false;
+  };
+}
+var splitPatternOptions = { parts: true };
+function splitPattern(path2) {
+  var _a;
+  const result = import_picomatch.default.scan(path2, splitPatternOptions);
+  return ((_a = result.parts) == null ? void 0 : _a.length) ? result.parts : [path2];
+}
+var isWin = process.platform === "win32";
+var ESCAPED_WIN32_BACKSLASHES = /\\(?![()[\]{}!+@])/g;
+function convertPosixPathToPattern(path2) {
+  return escapePosixPath(path2);
+}
+function convertWin32PathToPattern(path2) {
+  return escapeWin32Path(path2).replace(ESCAPED_WIN32_BACKSLASHES, "/");
+}
+var convertPathToPattern = isWin ? convertWin32PathToPattern : convertPosixPathToPattern;
+var POSIX_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}*?|]|^!|[!+@](?=\()|\\(?![()[\]{}!*+?@|]))/g;
+var WIN32_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}]|^!|[!+@](?=\())/g;
+var escapePosixPath = (path2) => path2.replace(POSIX_UNESCAPED_GLOB_SYMBOLS, "\\$&");
+var escapeWin32Path = (path2) => path2.replace(WIN32_UNESCAPED_GLOB_SYMBOLS, "\\$&");
+var escapePath = isWin ? escapeWin32Path : escapePosixPath;
+function isDynamicPattern(pattern, options) {
+  if ((options == null ? void 0 : options.caseSensitiveMatch) === false) {
+    return true;
+  }
+  const scan = import_picomatch.default.scan(pattern);
+  return scan.isGlob || scan.negated;
+}
+function log(...tasks) {
+  console.log(`[tinyglobby ${(/* @__PURE__ */ new Date()).toLocaleTimeString("es")}]`, ...tasks);
+}
+
+// src/index.ts
+var PARENT_DIRECTORY = /^(\/?\.\.)+/;
+var ESCAPING_BACKSLASHES = /\\(?=[()[\]{}!*+?@|])/g;
+var BACKSLASHES = /\\/g;
+function normalizePattern(pattern, expandDirectories, cwd, props, isIgnore) {
+  var _a;
+  let result = pattern;
+  if (pattern.endsWith("/")) {
+    result = pattern.slice(0, -1);
+  }
+  if (!result.endsWith("*") && expandDirectories) {
+    result += "/**";
+  }
+  if (import_node_path.default.isAbsolute(result.replace(ESCAPING_BACKSLASHES, ""))) {
+    result = import_node_path.posix.relative(escapePath(cwd), result);
+  } else {
+    result = import_node_path.posix.normalize(result);
+  }
+  const parentDirectoryMatch = PARENT_DIRECTORY.exec(result);
+  if (parentDirectoryMatch == null ? void 0 : parentDirectoryMatch[0]) {
+    const potentialRoot = import_node_path.posix.join(cwd, parentDirectoryMatch[0]);
+    if (props.root.length > potentialRoot.length) {
+      props.root = potentialRoot;
+      props.depthOffset = -(parentDirectoryMatch[0].length + 1) / 3;
+    }
+  } else if (!isIgnore && props.depthOffset >= 0) {
+    const parts = splitPattern(result);
+    (_a = props.commonPath) != null ? _a : props.commonPath = parts;
+    const newCommonPath = [];
+    const length = Math.min(props.commonPath.length, parts.length);
+    for (let i = 0; i < length; i++) {
+      const part = parts[i];
+      if (part === "**" && !parts[i + 1]) {
+        newCommonPath.pop();
+        break;
+      }
+      if (part !== props.commonPath[i] || isDynamicPattern(part) || i === parts.length - 1) {
+        break;
+      }
+      newCommonPath.push(part);
+    }
+    props.depthOffset = newCommonPath.length;
+    props.commonPath = newCommonPath;
+    props.root = newCommonPath.length > 0 ? `${cwd}/${newCommonPath.join("/")}` : cwd;
+  }
+  return result;
+}
+function processPatterns({ patterns, ignore = [], expandDirectories = true }, cwd, props) {
+  if (typeof patterns === "string") {
+    patterns = [patterns];
+  } else if (!patterns) {
+    patterns = ["**/*"];
+  }
+  if (typeof ignore === "string") {
+    ignore = [ignore];
+  }
+  const matchPatterns = [];
+  const ignorePatterns = [];
+  for (const pattern of ignore) {
+    if (!pattern) {
+      continue;
+    }
+    if (pattern[0] !== "!" || pattern[1] === "(") {
+      ignorePatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, true));
+    }
+  }
+  for (const pattern of patterns) {
+    if (!pattern) {
+      continue;
+    }
+    if (pattern[0] !== "!" || pattern[1] === "(") {
+      matchPatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, false));
+    } else if (pattern[1] !== "!" || pattern[2] === "(") {
+      ignorePatterns.push(normalizePattern(pattern.slice(1), expandDirectories, cwd, props, true));
+    }
+  }
+  return { match: matchPatterns, ignore: ignorePatterns };
+}
+function getRelativePath(path2, cwd, root) {
+  return import_node_path.posix.relative(cwd, `${root}/${path2}`) || ".";
+}
+function processPath(path2, cwd, root, isDirectory, absolute) {
+  const relativePath = absolute ? path2.slice(root.length + 1) || "." : path2;
+  if (root === cwd) {
+    return isDirectory && relativePath !== "." ? relativePath.slice(0, -1) : relativePath;
+  }
+  return getRelativePath(relativePath, cwd, root);
+}
+function formatPaths(paths, cwd, root) {
+  for (let i = paths.length - 1; i >= 0; i--) {
+    const path2 = paths[i];
+    paths[i] = getRelativePath(path2, cwd, root) + (!path2 || path2.endsWith("/") ? "/" : "");
+  }
+  return paths;
+}
+function crawl(options, cwd, sync) {
+  if (process.env.TINYGLOBBY_DEBUG) {
+    options.debug = true;
+  }
+  if (options.debug) {
+    log("globbing with options:", options, "cwd:", cwd);
+  }
+  if (Array.isArray(options.patterns) && options.patterns.length === 0) {
+    return sync ? [] : Promise.resolve([]);
+  }
+  const props = {
+    root: cwd,
+    commonPath: null,
+    depthOffset: 0
+  };
+  const processed = processPatterns(options, cwd, props);
+  const nocase = options.caseSensitiveMatch === false;
+  if (options.debug) {
+    log("internal processing patterns:", processed);
+  }
+  const matcher = (0, import_picomatch2.default)(processed.match, {
+    dot: options.dot,
+    nocase,
+    ignore: processed.ignore
+  });
+  const ignore = (0, import_picomatch2.default)(processed.ignore, {
+    dot: options.dot,
+    nocase
+  });
+  const partialMatcher = getPartialMatcher(processed.match, {
+    dot: options.dot,
+    nocase
+  });
+  const fdirOptions = {
+    // use relative paths in the matcher
+    filters: [
+      options.debug ? (p, isDirectory) => {
+        const path2 = processPath(p, cwd, props.root, isDirectory, options.absolute);
+        const matches = matcher(path2);
+        if (matches) {
+          log(`matched ${path2}`);
+        }
+        return matches;
+      } : (p, isDirectory) => matcher(processPath(p, cwd, props.root, isDirectory, options.absolute))
+    ],
+    exclude: options.debug ? (_, p) => {
+      const relativePath = processPath(p, cwd, props.root, true, true);
+      const skipped = relativePath !== "." && !partialMatcher(relativePath) || ignore(relativePath);
+      if (skipped) {
+        log(`skipped ${p}`);
+      } else {
+        log(`crawling ${p}`);
+      }
+      return skipped;
+    } : (_, p) => {
+      const relativePath = processPath(p, cwd, props.root, true, true);
+      return relativePath !== "." && !partialMatcher(relativePath) || ignore(relativePath);
+    },
+    pathSeparator: "/",
+    relativePaths: true,
+    resolveSymlinks: true
+  };
+  if (options.deep) {
+    fdirOptions.maxDepth = Math.round(options.deep - props.depthOffset);
+  }
+  if (options.absolute) {
+    fdirOptions.relativePaths = false;
+    fdirOptions.resolvePaths = true;
+    fdirOptions.includeBasePath = true;
+  }
+  if (options.followSymbolicLinks === false) {
+    fdirOptions.resolveSymlinks = false;
+    fdirOptions.excludeSymlinks = true;
+  }
+  if (options.onlyDirectories) {
+    fdirOptions.excludeFiles = true;
+    fdirOptions.includeDirs = true;
+  } else if (options.onlyFiles === false) {
+    fdirOptions.includeDirs = true;
+  }
+  props.root = props.root.replace(BACKSLASHES, "");
+  const root = props.root;
+  if (options.debug) {
+    log("internal properties:", props);
+  }
+  const api = new import_fdir.fdir(fdirOptions).crawl(root);
+  if (cwd === root || options.absolute) {
+    return sync ? api.sync() : api.withPromise();
+  }
+  return sync ? formatPaths(api.sync(), cwd, root) : api.withPromise().then((paths) => formatPaths(paths, cwd, root));
+}
+async function glob(patternsOrOptions, options) {
+  if (patternsOrOptions && (options == null ? void 0 : options.patterns)) {
+    throw new Error("Cannot pass patterns as both an argument and an option");
+  }
+  const opts = Array.isArray(patternsOrOptions) || typeof patternsOrOptions === "string" ? { ...options, patterns: patternsOrOptions } : patternsOrOptions;
+  const cwd = opts.cwd ? import_node_path.default.resolve(opts.cwd).replace(BACKSLASHES, "/") : process.cwd().replace(BACKSLASHES, "/");
+  return crawl(opts, cwd, false);
+}
+function globSync(patternsOrOptions, options) {
+  if (patternsOrOptions && (options == null ? void 0 : options.patterns)) {
+    throw new Error("Cannot pass patterns as both an argument and an option");
+  }
+  const opts = Array.isArray(patternsOrOptions) || typeof patternsOrOptions === "string" ? { ...options, patterns: patternsOrOptions } : patternsOrOptions;
+  const cwd = opts.cwd ? import_node_path.default.resolve(opts.cwd).replace(BACKSLASHES, "/") : process.cwd().replace(BACKSLASHES, "/");
+  return crawl(opts, cwd, true);
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  convertPathToPattern,
+  escapePath,
+  glob,
+  globSync,
+  isDynamicPattern
+});
diff --git a/node_modules/tinyglobby/dist/index.mjs b/node_modules/tinyglobby/dist/index.mjs
new file mode 100644
index 0000000000000..d9866ad8919a1
--- /dev/null
+++ b/node_modules/tinyglobby/dist/index.mjs
@@ -0,0 +1,294 @@
+// src/index.ts
+import path, { posix } from "path";
+import { fdir } from "fdir";
+import picomatch2 from "picomatch";
+
+// src/utils.ts
+import picomatch from "picomatch";
+var ONLY_PARENT_DIRECTORIES = /^(\/?\.\.)+$/;
+function getPartialMatcher(patterns, options) {
+  const patternsCount = patterns.length;
+  const patternsParts = Array(patternsCount);
+  const regexes = Array(patternsCount);
+  for (let i = 0; i < patternsCount; i++) {
+    const parts = splitPattern(patterns[i]);
+    patternsParts[i] = parts;
+    const partsCount = parts.length;
+    const partRegexes = Array(partsCount);
+    for (let j = 0; j < partsCount; j++) {
+      partRegexes[j] = picomatch.makeRe(parts[j], options);
+    }
+    regexes[i] = partRegexes;
+  }
+  return (input) => {
+    const inputParts = input.split("/");
+    if (inputParts[0] === ".." && ONLY_PARENT_DIRECTORIES.test(input)) {
+      return true;
+    }
+    for (let i = 0; i < patterns.length; i++) {
+      const patternParts = patternsParts[i];
+      const regex = regexes[i];
+      const inputPatternCount = inputParts.length;
+      const minParts = Math.min(inputPatternCount, patternParts.length);
+      let j = 0;
+      while (j < minParts) {
+        const part = patternParts[j];
+        if (part.includes("/")) {
+          return true;
+        }
+        const match = regex[j].test(inputParts[j]);
+        if (!match) {
+          break;
+        }
+        if (part === "**") {
+          return true;
+        }
+        j++;
+      }
+      if (j === inputPatternCount) {
+        return true;
+      }
+    }
+    return false;
+  };
+}
+var splitPatternOptions = { parts: true };
+function splitPattern(path2) {
+  var _a;
+  const result = picomatch.scan(path2, splitPatternOptions);
+  return ((_a = result.parts) == null ? void 0 : _a.length) ? result.parts : [path2];
+}
+var isWin = process.platform === "win32";
+var ESCAPED_WIN32_BACKSLASHES = /\\(?![()[\]{}!+@])/g;
+function convertPosixPathToPattern(path2) {
+  return escapePosixPath(path2);
+}
+function convertWin32PathToPattern(path2) {
+  return escapeWin32Path(path2).replace(ESCAPED_WIN32_BACKSLASHES, "/");
+}
+var convertPathToPattern = isWin ? convertWin32PathToPattern : convertPosixPathToPattern;
+var POSIX_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}*?|]|^!|[!+@](?=\()|\\(?![()[\]{}!*+?@|]))/g;
+var WIN32_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}]|^!|[!+@](?=\())/g;
+var escapePosixPath = (path2) => path2.replace(POSIX_UNESCAPED_GLOB_SYMBOLS, "\\$&");
+var escapeWin32Path = (path2) => path2.replace(WIN32_UNESCAPED_GLOB_SYMBOLS, "\\$&");
+var escapePath = isWin ? escapeWin32Path : escapePosixPath;
+function isDynamicPattern(pattern, options) {
+  if ((options == null ? void 0 : options.caseSensitiveMatch) === false) {
+    return true;
+  }
+  const scan = picomatch.scan(pattern);
+  return scan.isGlob || scan.negated;
+}
+function log(...tasks) {
+  console.log(`[tinyglobby ${(/* @__PURE__ */ new Date()).toLocaleTimeString("es")}]`, ...tasks);
+}
+
+// src/index.ts
+var PARENT_DIRECTORY = /^(\/?\.\.)+/;
+var ESCAPING_BACKSLASHES = /\\(?=[()[\]{}!*+?@|])/g;
+var BACKSLASHES = /\\/g;
+function normalizePattern(pattern, expandDirectories, cwd, props, isIgnore) {
+  var _a;
+  let result = pattern;
+  if (pattern.endsWith("/")) {
+    result = pattern.slice(0, -1);
+  }
+  if (!result.endsWith("*") && expandDirectories) {
+    result += "/**";
+  }
+  if (path.isAbsolute(result.replace(ESCAPING_BACKSLASHES, ""))) {
+    result = posix.relative(escapePath(cwd), result);
+  } else {
+    result = posix.normalize(result);
+  }
+  const parentDirectoryMatch = PARENT_DIRECTORY.exec(result);
+  if (parentDirectoryMatch == null ? void 0 : parentDirectoryMatch[0]) {
+    const potentialRoot = posix.join(cwd, parentDirectoryMatch[0]);
+    if (props.root.length > potentialRoot.length) {
+      props.root = potentialRoot;
+      props.depthOffset = -(parentDirectoryMatch[0].length + 1) / 3;
+    }
+  } else if (!isIgnore && props.depthOffset >= 0) {
+    const parts = splitPattern(result);
+    (_a = props.commonPath) != null ? _a : props.commonPath = parts;
+    const newCommonPath = [];
+    const length = Math.min(props.commonPath.length, parts.length);
+    for (let i = 0; i < length; i++) {
+      const part = parts[i];
+      if (part === "**" && !parts[i + 1]) {
+        newCommonPath.pop();
+        break;
+      }
+      if (part !== props.commonPath[i] || isDynamicPattern(part) || i === parts.length - 1) {
+        break;
+      }
+      newCommonPath.push(part);
+    }
+    props.depthOffset = newCommonPath.length;
+    props.commonPath = newCommonPath;
+    props.root = newCommonPath.length > 0 ? `${cwd}/${newCommonPath.join("/")}` : cwd;
+  }
+  return result;
+}
+function processPatterns({ patterns, ignore = [], expandDirectories = true }, cwd, props) {
+  if (typeof patterns === "string") {
+    patterns = [patterns];
+  } else if (!patterns) {
+    patterns = ["**/*"];
+  }
+  if (typeof ignore === "string") {
+    ignore = [ignore];
+  }
+  const matchPatterns = [];
+  const ignorePatterns = [];
+  for (const pattern of ignore) {
+    if (!pattern) {
+      continue;
+    }
+    if (pattern[0] !== "!" || pattern[1] === "(") {
+      ignorePatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, true));
+    }
+  }
+  for (const pattern of patterns) {
+    if (!pattern) {
+      continue;
+    }
+    if (pattern[0] !== "!" || pattern[1] === "(") {
+      matchPatterns.push(normalizePattern(pattern, expandDirectories, cwd, props, false));
+    } else if (pattern[1] !== "!" || pattern[2] === "(") {
+      ignorePatterns.push(normalizePattern(pattern.slice(1), expandDirectories, cwd, props, true));
+    }
+  }
+  return { match: matchPatterns, ignore: ignorePatterns };
+}
+function getRelativePath(path2, cwd, root) {
+  return posix.relative(cwd, `${root}/${path2}`) || ".";
+}
+function processPath(path2, cwd, root, isDirectory, absolute) {
+  const relativePath = absolute ? path2.slice(root.length + 1) || "." : path2;
+  if (root === cwd) {
+    return isDirectory && relativePath !== "." ? relativePath.slice(0, -1) : relativePath;
+  }
+  return getRelativePath(relativePath, cwd, root);
+}
+function formatPaths(paths, cwd, root) {
+  for (let i = paths.length - 1; i >= 0; i--) {
+    const path2 = paths[i];
+    paths[i] = getRelativePath(path2, cwd, root) + (!path2 || path2.endsWith("/") ? "/" : "");
+  }
+  return paths;
+}
+function crawl(options, cwd, sync) {
+  if (process.env.TINYGLOBBY_DEBUG) {
+    options.debug = true;
+  }
+  if (options.debug) {
+    log("globbing with options:", options, "cwd:", cwd);
+  }
+  if (Array.isArray(options.patterns) && options.patterns.length === 0) {
+    return sync ? [] : Promise.resolve([]);
+  }
+  const props = {
+    root: cwd,
+    commonPath: null,
+    depthOffset: 0
+  };
+  const processed = processPatterns(options, cwd, props);
+  const nocase = options.caseSensitiveMatch === false;
+  if (options.debug) {
+    log("internal processing patterns:", processed);
+  }
+  const matcher = picomatch2(processed.match, {
+    dot: options.dot,
+    nocase,
+    ignore: processed.ignore
+  });
+  const ignore = picomatch2(processed.ignore, {
+    dot: options.dot,
+    nocase
+  });
+  const partialMatcher = getPartialMatcher(processed.match, {
+    dot: options.dot,
+    nocase
+  });
+  const fdirOptions = {
+    // use relative paths in the matcher
+    filters: [
+      options.debug ? (p, isDirectory) => {
+        const path2 = processPath(p, cwd, props.root, isDirectory, options.absolute);
+        const matches = matcher(path2);
+        if (matches) {
+          log(`matched ${path2}`);
+        }
+        return matches;
+      } : (p, isDirectory) => matcher(processPath(p, cwd, props.root, isDirectory, options.absolute))
+    ],
+    exclude: options.debug ? (_, p) => {
+      const relativePath = processPath(p, cwd, props.root, true, true);
+      const skipped = relativePath !== "." && !partialMatcher(relativePath) || ignore(relativePath);
+      if (skipped) {
+        log(`skipped ${p}`);
+      } else {
+        log(`crawling ${p}`);
+      }
+      return skipped;
+    } : (_, p) => {
+      const relativePath = processPath(p, cwd, props.root, true, true);
+      return relativePath !== "." && !partialMatcher(relativePath) || ignore(relativePath);
+    },
+    pathSeparator: "/",
+    relativePaths: true,
+    resolveSymlinks: true
+  };
+  if (options.deep) {
+    fdirOptions.maxDepth = Math.round(options.deep - props.depthOffset);
+  }
+  if (options.absolute) {
+    fdirOptions.relativePaths = false;
+    fdirOptions.resolvePaths = true;
+    fdirOptions.includeBasePath = true;
+  }
+  if (options.followSymbolicLinks === false) {
+    fdirOptions.resolveSymlinks = false;
+    fdirOptions.excludeSymlinks = true;
+  }
+  if (options.onlyDirectories) {
+    fdirOptions.excludeFiles = true;
+    fdirOptions.includeDirs = true;
+  } else if (options.onlyFiles === false) {
+    fdirOptions.includeDirs = true;
+  }
+  props.root = props.root.replace(BACKSLASHES, "");
+  const root = props.root;
+  if (options.debug) {
+    log("internal properties:", props);
+  }
+  const api = new fdir(fdirOptions).crawl(root);
+  if (cwd === root || options.absolute) {
+    return sync ? api.sync() : api.withPromise();
+  }
+  return sync ? formatPaths(api.sync(), cwd, root) : api.withPromise().then((paths) => formatPaths(paths, cwd, root));
+}
+async function glob(patternsOrOptions, options) {
+  if (patternsOrOptions && (options == null ? void 0 : options.patterns)) {
+    throw new Error("Cannot pass patterns as both an argument and an option");
+  }
+  const opts = Array.isArray(patternsOrOptions) || typeof patternsOrOptions === "string" ? { ...options, patterns: patternsOrOptions } : patternsOrOptions;
+  const cwd = opts.cwd ? path.resolve(opts.cwd).replace(BACKSLASHES, "/") : process.cwd().replace(BACKSLASHES, "/");
+  return crawl(opts, cwd, false);
+}
+function globSync(patternsOrOptions, options) {
+  if (patternsOrOptions && (options == null ? void 0 : options.patterns)) {
+    throw new Error("Cannot pass patterns as both an argument and an option");
+  }
+  const opts = Array.isArray(patternsOrOptions) || typeof patternsOrOptions === "string" ? { ...options, patterns: patternsOrOptions } : patternsOrOptions;
+  const cwd = opts.cwd ? path.resolve(opts.cwd).replace(BACKSLASHES, "/") : process.cwd().replace(BACKSLASHES, "/");
+  return crawl(opts, cwd, true);
+}
+export {
+  convertPathToPattern,
+  escapePath,
+  glob,
+  globSync,
+  isDynamicPattern
+};
diff --git a/node_modules/tinyglobby/node_modules/fdir/LICENSE b/node_modules/tinyglobby/node_modules/fdir/LICENSE
new file mode 100644
index 0000000000000..bb7fdee44cae6
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/LICENSE
@@ -0,0 +1,7 @@
+Copyright 2023 Abdullah Atta
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/async.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/async.js
new file mode 100644
index 0000000000000..efc6649cb04e4
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/async.js
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.callback = exports.promise = void 0;
+const walker_1 = require("./walker");
+function promise(root, options) {
+    return new Promise((resolve, reject) => {
+        callback(root, options, (err, output) => {
+            if (err)
+                return reject(err);
+            resolve(output);
+        });
+    });
+}
+exports.promise = promise;
+function callback(root, options, callback) {
+    let walker = new walker_1.Walker(root, options, callback);
+    walker.start();
+}
+exports.callback = callback;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/counter.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/counter.js
new file mode 100644
index 0000000000000..685cb270b73e5
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/counter.js
@@ -0,0 +1,27 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Counter = void 0;
+class Counter {
+    _files = 0;
+    _directories = 0;
+    set files(num) {
+        this._files = num;
+    }
+    get files() {
+        return this._files;
+    }
+    set directories(num) {
+        this._directories = num;
+    }
+    get directories() {
+        return this._directories;
+    }
+    /**
+     * @deprecated use `directories` instead
+     */
+    /* c8 ignore next 3 */
+    get dirs() {
+        return this._directories;
+    }
+}
+exports.Counter = Counter;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/get-array.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/get-array.js
new file mode 100644
index 0000000000000..1e02308dfa6f2
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/get-array.js
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const getArray = (paths) => {
+    return paths;
+};
+const getArrayGroup = () => {
+    return [""].slice(0, 0);
+};
+function build(options) {
+    return options.group ? getArrayGroup : getArray;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/group-files.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/group-files.js
new file mode 100644
index 0000000000000..4ccaa1a481156
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/group-files.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const groupFiles = (groups, directory, files) => {
+    groups.push({ directory, files, dir: directory });
+};
+const empty = () => { };
+function build(options) {
+    return options.group ? groupFiles : empty;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/invoke-callback.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/invoke-callback.js
new file mode 100644
index 0000000000000..ed59ca2da7898
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/invoke-callback.js
@@ -0,0 +1,57 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const onlyCountsSync = (state) => {
+    return state.counts;
+};
+const groupsSync = (state) => {
+    return state.groups;
+};
+const defaultSync = (state) => {
+    return state.paths;
+};
+const limitFilesSync = (state) => {
+    return state.paths.slice(0, state.options.maxFiles);
+};
+const onlyCountsAsync = (state, error, callback) => {
+    report(error, callback, state.counts, state.options.suppressErrors);
+    return null;
+};
+const defaultAsync = (state, error, callback) => {
+    report(error, callback, state.paths, state.options.suppressErrors);
+    return null;
+};
+const limitFilesAsync = (state, error, callback) => {
+    report(error, callback, state.paths.slice(0, state.options.maxFiles), state.options.suppressErrors);
+    return null;
+};
+const groupsAsync = (state, error, callback) => {
+    report(error, callback, state.groups, state.options.suppressErrors);
+    return null;
+};
+function report(error, callback, output, suppressErrors) {
+    if (error && !suppressErrors)
+        callback(error, output);
+    else
+        callback(null, output);
+}
+function build(options, isSynchronous) {
+    const { onlyCounts, group, maxFiles } = options;
+    if (onlyCounts)
+        return isSynchronous
+            ? onlyCountsSync
+            : onlyCountsAsync;
+    else if (group)
+        return isSynchronous
+            ? groupsSync
+            : groupsAsync;
+    else if (maxFiles)
+        return isSynchronous
+            ? limitFilesSync
+            : limitFilesAsync;
+    else
+        return isSynchronous
+            ? defaultSync
+            : defaultAsync;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/is-recursive-symlink.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/is-recursive-symlink.js
new file mode 100644
index 0000000000000..54ed388815ebf
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/is-recursive-symlink.js
@@ -0,0 +1,35 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isRecursive = exports.isRecursiveAsync = void 0;
+const path_1 = require("path");
+const fs_1 = require("fs");
+const isRecursiveAsync = (state, path, resolved, callback) => {
+    if (state.options.useRealPaths)
+        return callback(state.visited.has(resolved + state.options.pathSeparator));
+    let parent = (0, path_1.dirname)(path);
+    if (parent + state.options.pathSeparator === state.root || parent === path)
+        return callback(false);
+    if (state.symlinks.get(parent) === resolved)
+        return callback(true);
+    (0, fs_1.readlink)(parent, (error, resolvedParent) => {
+        if (error)
+            return (0, exports.isRecursiveAsync)(state, parent, resolved, callback);
+        callback(resolvedParent === resolved);
+    });
+};
+exports.isRecursiveAsync = isRecursiveAsync;
+function isRecursive(state, path, resolved) {
+    if (state.options.useRealPaths)
+        return state.visited.has(resolved + state.options.pathSeparator);
+    let parent = (0, path_1.dirname)(path);
+    if (parent + state.options.pathSeparator === state.root || parent === path)
+        return false;
+    try {
+        const resolvedParent = state.symlinks.get(parent) || (0, fs_1.readlinkSync)(parent);
+        return resolvedParent === resolved;
+    }
+    catch (e) {
+        return isRecursive(state, parent, resolved);
+    }
+}
+exports.isRecursive = isRecursive;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/join-path.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/join-path.js
new file mode 100644
index 0000000000000..e84faf617734e
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/join-path.js
@@ -0,0 +1,36 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = exports.joinDirectoryPath = exports.joinPathWithBasePath = void 0;
+const path_1 = require("path");
+const utils_1 = require("../../utils");
+function joinPathWithBasePath(filename, directoryPath) {
+    return directoryPath + filename;
+}
+exports.joinPathWithBasePath = joinPathWithBasePath;
+function joinPathWithRelativePath(root, options) {
+    return function (filename, directoryPath) {
+        const sameRoot = directoryPath.startsWith(root);
+        if (sameRoot)
+            return directoryPath.replace(root, "") + filename;
+        else
+            return ((0, utils_1.convertSlashes)((0, path_1.relative)(root, directoryPath), options.pathSeparator) +
+                options.pathSeparator +
+                filename);
+    };
+}
+function joinPath(filename) {
+    return filename;
+}
+function joinDirectoryPath(filename, directoryPath, separator) {
+    return directoryPath + filename + separator;
+}
+exports.joinDirectoryPath = joinDirectoryPath;
+function build(root, options) {
+    const { relativePaths, includeBasePath } = options;
+    return relativePaths && root
+        ? joinPathWithRelativePath(root, options)
+        : includeBasePath
+            ? joinPathWithBasePath
+            : joinPath;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-directory.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-directory.js
new file mode 100644
index 0000000000000..6858cb6253201
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-directory.js
@@ -0,0 +1,37 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+function pushDirectoryWithRelativePath(root) {
+    return function (directoryPath, paths) {
+        paths.push(directoryPath.substring(root.length) || ".");
+    };
+}
+function pushDirectoryFilterWithRelativePath(root) {
+    return function (directoryPath, paths, filters) {
+        const relativePath = directoryPath.substring(root.length) || ".";
+        if (filters.every((filter) => filter(relativePath, true))) {
+            paths.push(relativePath);
+        }
+    };
+}
+const pushDirectory = (directoryPath, paths) => {
+    paths.push(directoryPath || ".");
+};
+const pushDirectoryFilter = (directoryPath, paths, filters) => {
+    const path = directoryPath || ".";
+    if (filters.every((filter) => filter(path, true))) {
+        paths.push(path);
+    }
+};
+const empty = () => { };
+function build(root, options) {
+    const { includeDirs, filters, relativePaths } = options;
+    if (!includeDirs)
+        return empty;
+    if (relativePaths)
+        return filters && filters.length
+            ? pushDirectoryFilterWithRelativePath(root)
+            : pushDirectoryWithRelativePath(root);
+    return filters && filters.length ? pushDirectoryFilter : pushDirectory;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-file.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-file.js
new file mode 100644
index 0000000000000..88843952946ad
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-file.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const pushFileFilterAndCount = (filename, _paths, counts, filters) => {
+    if (filters.every((filter) => filter(filename, false)))
+        counts.files++;
+};
+const pushFileFilter = (filename, paths, _counts, filters) => {
+    if (filters.every((filter) => filter(filename, false)))
+        paths.push(filename);
+};
+const pushFileCount = (_filename, _paths, counts, _filters) => {
+    counts.files++;
+};
+const pushFile = (filename, paths) => {
+    paths.push(filename);
+};
+const empty = () => { };
+function build(options) {
+    const { excludeFiles, filters, onlyCounts } = options;
+    if (excludeFiles)
+        return empty;
+    if (filters && filters.length) {
+        return onlyCounts ? pushFileFilterAndCount : pushFileFilter;
+    }
+    else if (onlyCounts) {
+        return pushFileCount;
+    }
+    else {
+        return pushFile;
+    }
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/resolve-symlink.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/resolve-symlink.js
new file mode 100644
index 0000000000000..dbf0720cd41f8
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/resolve-symlink.js
@@ -0,0 +1,67 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const fs_1 = __importDefault(require("fs"));
+const path_1 = require("path");
+const resolveSymlinksAsync = function (path, state, callback) {
+    const { queue, options: { suppressErrors }, } = state;
+    queue.enqueue();
+    fs_1.default.realpath(path, (error, resolvedPath) => {
+        if (error)
+            return queue.dequeue(suppressErrors ? null : error, state);
+        fs_1.default.stat(resolvedPath, (error, stat) => {
+            if (error)
+                return queue.dequeue(suppressErrors ? null : error, state);
+            if (stat.isDirectory() && isRecursive(path, resolvedPath, state))
+                return queue.dequeue(null, state);
+            callback(stat, resolvedPath);
+            queue.dequeue(null, state);
+        });
+    });
+};
+const resolveSymlinks = function (path, state, callback) {
+    const { queue, options: { suppressErrors }, } = state;
+    queue.enqueue();
+    try {
+        const resolvedPath = fs_1.default.realpathSync(path);
+        const stat = fs_1.default.statSync(resolvedPath);
+        if (stat.isDirectory() && isRecursive(path, resolvedPath, state))
+            return;
+        callback(stat, resolvedPath);
+    }
+    catch (e) {
+        if (!suppressErrors)
+            throw e;
+    }
+};
+function build(options, isSynchronous) {
+    if (!options.resolveSymlinks || options.excludeSymlinks)
+        return null;
+    return isSynchronous ? resolveSymlinks : resolveSymlinksAsync;
+}
+exports.build = build;
+function isRecursive(path, resolved, state) {
+    if (state.options.useRealPaths)
+        return isRecursiveUsingRealPaths(resolved, state);
+    let parent = (0, path_1.dirname)(path);
+    let depth = 1;
+    while (parent !== state.root && depth < 2) {
+        const resolvedPath = state.symlinks.get(parent);
+        const isSameRoot = !!resolvedPath &&
+            (resolvedPath === resolved ||
+                resolvedPath.startsWith(resolved) ||
+                resolved.startsWith(resolvedPath));
+        if (isSameRoot)
+            depth++;
+        else
+            parent = (0, path_1.dirname)(parent);
+    }
+    state.symlinks.set(path, resolved);
+    return depth > 1;
+}
+function isRecursiveUsingRealPaths(resolved, state) {
+    return state.visited.includes(resolved + state.options.pathSeparator);
+}
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/walk-directory.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/walk-directory.js
new file mode 100644
index 0000000000000..7515131e0bda9
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/walk-directory.js
@@ -0,0 +1,40 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.build = void 0;
+const fs_1 = __importDefault(require("fs"));
+const readdirOpts = { withFileTypes: true };
+const walkAsync = (state, crawlPath, directoryPath, currentDepth, callback) => {
+    if (currentDepth < 0)
+        return state.queue.dequeue(null, state);
+    state.visited.push(crawlPath);
+    state.counts.directories++;
+    state.queue.enqueue();
+    // Perf: Node >= 10 introduced withFileTypes that helps us
+    // skip an extra fs.stat call.
+    fs_1.default.readdir(crawlPath || ".", readdirOpts, (error, entries = []) => {
+        callback(entries, directoryPath, currentDepth);
+        state.queue.dequeue(state.options.suppressErrors ? null : error, state);
+    });
+};
+const walkSync = (state, crawlPath, directoryPath, currentDepth, callback) => {
+    if (currentDepth < 0)
+        return;
+    state.visited.push(crawlPath);
+    state.counts.directories++;
+    let entries = [];
+    try {
+        entries = fs_1.default.readdirSync(crawlPath || ".", readdirOpts);
+    }
+    catch (e) {
+        if (!state.options.suppressErrors)
+            throw e;
+    }
+    callback(entries, directoryPath, currentDepth);
+};
+function build(isSynchronous) {
+    return isSynchronous ? walkSync : walkAsync;
+}
+exports.build = build;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/queue.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/queue.js
new file mode 100644
index 0000000000000..e959ebec356af
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/queue.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Queue = void 0;
+/**
+ * This is a custom stateless queue to track concurrent async fs calls.
+ * It increments a counter whenever a call is queued and decrements it
+ * as soon as it completes. When the counter hits 0, it calls onQueueEmpty.
+ */
+class Queue {
+    onQueueEmpty;
+    count = 0;
+    constructor(onQueueEmpty) {
+        this.onQueueEmpty = onQueueEmpty;
+    }
+    enqueue() {
+        this.count++;
+    }
+    dequeue(error, output) {
+        if (--this.count <= 0 || error)
+            this.onQueueEmpty(error, output);
+    }
+}
+exports.Queue = Queue;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/sync.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/sync.js
new file mode 100644
index 0000000000000..073bc88d212be
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/sync.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.sync = void 0;
+const walker_1 = require("./walker");
+function sync(root, options) {
+    const walker = new walker_1.Walker(root, options);
+    return walker.start();
+}
+exports.sync = sync;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/api/walker.js b/node_modules/tinyglobby/node_modules/fdir/dist/api/walker.js
new file mode 100644
index 0000000000000..8812759c1f897
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/api/walker.js
@@ -0,0 +1,124 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Walker = void 0;
+const path_1 = require("path");
+const utils_1 = require("../utils");
+const joinPath = __importStar(require("./functions/join-path"));
+const pushDirectory = __importStar(require("./functions/push-directory"));
+const pushFile = __importStar(require("./functions/push-file"));
+const getArray = __importStar(require("./functions/get-array"));
+const groupFiles = __importStar(require("./functions/group-files"));
+const resolveSymlink = __importStar(require("./functions/resolve-symlink"));
+const invokeCallback = __importStar(require("./functions/invoke-callback"));
+const walkDirectory = __importStar(require("./functions/walk-directory"));
+const queue_1 = require("./queue");
+const counter_1 = require("./counter");
+class Walker {
+    root;
+    isSynchronous;
+    state;
+    joinPath;
+    pushDirectory;
+    pushFile;
+    getArray;
+    groupFiles;
+    resolveSymlink;
+    walkDirectory;
+    callbackInvoker;
+    constructor(root, options, callback) {
+        this.isSynchronous = !callback;
+        this.callbackInvoker = invokeCallback.build(options, this.isSynchronous);
+        this.root = (0, utils_1.normalizePath)(root, options);
+        this.state = {
+            root: this.root.slice(0, -1),
+            // Perf: we explicitly tell the compiler to optimize for String arrays
+            paths: [""].slice(0, 0),
+            groups: [],
+            counts: new counter_1.Counter(),
+            options,
+            queue: new queue_1.Queue((error, state) => this.callbackInvoker(state, error, callback)),
+            symlinks: new Map(),
+            visited: [""].slice(0, 0),
+        };
+        /*
+         * Perf: We conditionally change functions according to options. This gives a slight
+         * performance boost. Since these functions are so small, they are automatically inlined
+         * by the javascript engine so there's no function call overhead (in most cases).
+         */
+        this.joinPath = joinPath.build(this.root, options);
+        this.pushDirectory = pushDirectory.build(this.root, options);
+        this.pushFile = pushFile.build(options);
+        this.getArray = getArray.build(options);
+        this.groupFiles = groupFiles.build(options);
+        this.resolveSymlink = resolveSymlink.build(options, this.isSynchronous);
+        this.walkDirectory = walkDirectory.build(this.isSynchronous);
+    }
+    start() {
+        this.walkDirectory(this.state, this.root, this.root, this.state.options.maxDepth, this.walk);
+        return this.isSynchronous ? this.callbackInvoker(this.state, null) : null;
+    }
+    walk = (entries, directoryPath, depth) => {
+        const { paths, options: { filters, resolveSymlinks, excludeSymlinks, exclude, maxFiles, signal, useRealPaths, pathSeparator, }, } = this.state;
+        if ((signal && signal.aborted) || (maxFiles && paths.length > maxFiles))
+            return;
+        this.pushDirectory(directoryPath, paths, filters);
+        const files = this.getArray(this.state.paths);
+        for (let i = 0; i < entries.length; ++i) {
+            const entry = entries[i];
+            if (entry.isFile() ||
+                (entry.isSymbolicLink() && !resolveSymlinks && !excludeSymlinks)) {
+                const filename = this.joinPath(entry.name, directoryPath);
+                this.pushFile(filename, files, this.state.counts, filters);
+            }
+            else if (entry.isDirectory()) {
+                let path = joinPath.joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator);
+                if (exclude && exclude(entry.name, path))
+                    continue;
+                this.walkDirectory(this.state, path, path, depth - 1, this.walk);
+            }
+            else if (entry.isSymbolicLink() && this.resolveSymlink) {
+                let path = joinPath.joinPathWithBasePath(entry.name, directoryPath);
+                this.resolveSymlink(path, this.state, (stat, resolvedPath) => {
+                    if (stat.isDirectory()) {
+                        resolvedPath = (0, utils_1.normalizePath)(resolvedPath, this.state.options);
+                        if (exclude && exclude(entry.name, useRealPaths ? resolvedPath : path + pathSeparator))
+                            return;
+                        this.walkDirectory(this.state, resolvedPath, useRealPaths ? resolvedPath : path + pathSeparator, depth - 1, this.walk);
+                    }
+                    else {
+                        resolvedPath = useRealPaths ? resolvedPath : path;
+                        const filename = (0, path_1.basename)(resolvedPath);
+                        const directoryPath = (0, utils_1.normalizePath)((0, path_1.dirname)(resolvedPath), this.state.options);
+                        resolvedPath = this.joinPath(filename, directoryPath);
+                        this.pushFile(resolvedPath, files, this.state.counts, filters);
+                    }
+                });
+            }
+        }
+        this.groupFiles(this.state.groups, directoryPath, files);
+    };
+}
+exports.Walker = Walker;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/builder/api-builder.js b/node_modules/tinyglobby/node_modules/fdir/dist/builder/api-builder.js
new file mode 100644
index 0000000000000..0538e6fabfb49
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/builder/api-builder.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.APIBuilder = void 0;
+const async_1 = require("../api/async");
+const sync_1 = require("../api/sync");
+class APIBuilder {
+    root;
+    options;
+    constructor(root, options) {
+        this.root = root;
+        this.options = options;
+    }
+    withPromise() {
+        return (0, async_1.promise)(this.root, this.options);
+    }
+    withCallback(cb) {
+        (0, async_1.callback)(this.root, this.options, cb);
+    }
+    sync() {
+        return (0, sync_1.sync)(this.root, this.options);
+    }
+}
+exports.APIBuilder = APIBuilder;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/builder/index.js b/node_modules/tinyglobby/node_modules/fdir/dist/builder/index.js
new file mode 100644
index 0000000000000..a48b00502765f
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/builder/index.js
@@ -0,0 +1,136 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Builder = void 0;
+const path_1 = require("path");
+const api_builder_1 = require("./api-builder");
+var pm = null;
+/* c8 ignore next 6 */
+try {
+    require.resolve("picomatch");
+    pm = require("picomatch");
+}
+catch (_e) {
+    // do nothing
+}
+class Builder {
+    globCache = {};
+    options = {
+        maxDepth: Infinity,
+        suppressErrors: true,
+        pathSeparator: path_1.sep,
+        filters: [],
+    };
+    globFunction;
+    constructor(options) {
+        this.options = { ...this.options, ...options };
+        this.globFunction = this.options.globFunction;
+    }
+    group() {
+        this.options.group = true;
+        return this;
+    }
+    withPathSeparator(separator) {
+        this.options.pathSeparator = separator;
+        return this;
+    }
+    withBasePath() {
+        this.options.includeBasePath = true;
+        return this;
+    }
+    withRelativePaths() {
+        this.options.relativePaths = true;
+        return this;
+    }
+    withDirs() {
+        this.options.includeDirs = true;
+        return this;
+    }
+    withMaxDepth(depth) {
+        this.options.maxDepth = depth;
+        return this;
+    }
+    withMaxFiles(limit) {
+        this.options.maxFiles = limit;
+        return this;
+    }
+    withFullPaths() {
+        this.options.resolvePaths = true;
+        this.options.includeBasePath = true;
+        return this;
+    }
+    withErrors() {
+        this.options.suppressErrors = false;
+        return this;
+    }
+    withSymlinks({ resolvePaths = true } = {}) {
+        this.options.resolveSymlinks = true;
+        this.options.useRealPaths = resolvePaths;
+        return this.withFullPaths();
+    }
+    withAbortSignal(signal) {
+        this.options.signal = signal;
+        return this;
+    }
+    normalize() {
+        this.options.normalizePath = true;
+        return this;
+    }
+    filter(predicate) {
+        this.options.filters.push(predicate);
+        return this;
+    }
+    onlyDirs() {
+        this.options.excludeFiles = true;
+        this.options.includeDirs = true;
+        return this;
+    }
+    exclude(predicate) {
+        this.options.exclude = predicate;
+        return this;
+    }
+    onlyCounts() {
+        this.options.onlyCounts = true;
+        return this;
+    }
+    crawl(root) {
+        return new api_builder_1.APIBuilder(root || ".", this.options);
+    }
+    withGlobFunction(fn) {
+        // cast this since we don't have the new type params yet
+        this.globFunction = fn;
+        return this;
+    }
+    /**
+     * @deprecated Pass options using the constructor instead:
+     * ```ts
+     * new fdir(options).crawl("/path/to/root");
+     * ```
+     * This method will be removed in v7.0
+     */
+    /* c8 ignore next 4 */
+    crawlWithOptions(root, options) {
+        this.options = { ...this.options, ...options };
+        return new api_builder_1.APIBuilder(root || ".", this.options);
+    }
+    glob(...patterns) {
+        if (this.globFunction) {
+            return this.globWithOptions(patterns);
+        }
+        return this.globWithOptions(patterns, ...[{ dot: true }]);
+    }
+    globWithOptions(patterns, ...options) {
+        const globFn = (this.globFunction || pm);
+        /* c8 ignore next 5 */
+        if (!globFn) {
+            throw new Error('Please specify a glob function to use glob matching.');
+        }
+        var isMatch = this.globCache[patterns.join("\0")];
+        if (!isMatch) {
+            isMatch = globFn(patterns, ...options);
+            this.globCache[patterns.join("\0")] = isMatch;
+        }
+        this.options.filters.push((path) => isMatch(path));
+        return this;
+    }
+}
+exports.Builder = Builder;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/index.js b/node_modules/tinyglobby/node_modules/fdir/dist/index.js
new file mode 100644
index 0000000000000..b907a8b91ca12
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/index.js
@@ -0,0 +1,20 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.fdir = void 0;
+const builder_1 = require("./builder");
+Object.defineProperty(exports, "fdir", { enumerable: true, get: function () { return builder_1.Builder; } });
+__exportStar(require("./types"), exports);
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/optimizer.js b/node_modules/tinyglobby/node_modules/fdir/dist/optimizer.js
new file mode 100644
index 0000000000000..bdea807dfea7f
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/optimizer.js
@@ -0,0 +1,54 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.findMaxDepth = exports.findDirectoryPatterns = exports.findCommonRoots = void 0;
+// Glob Optimizations:
+// 1. Find common roots and only iterate on them
+//    For example:
+//      1. "node_modules/**/*.ts" only requires us to search in node_modules
+//          folder.
+//      2. Similarly, multiple glob patterns can have common deterministic roots
+//         The optimizer's job is to find these roots and only crawl them.
+//      3. If any of the glob patterns have a globstar i.e. **/ in them, we
+//         should bail out.
+// 2. Find out if glob is requesting only directories
+// 3. Find maximum depth requested
+// 4. If glob contains a root that doesn't exist, bail out
+const braces_1 = require("braces");
+const glob_parent_1 = __importDefault(require("glob-parent"));
+function findCommonRoots(patterns) {
+    const allRoots = new Set();
+    patterns = patterns.map((p) => (p.includes("{") ? (0, braces_1.expand)(p) : p)).flat();
+    for (const pattern of patterns) {
+        const parent = (0, glob_parent_1.default)(pattern);
+        if (parent === ".")
+            return [];
+        allRoots.add(parent);
+    }
+    return Array.from(allRoots.values()).filter((root) => {
+        for (const r of allRoots) {
+            if (r === root)
+                continue;
+            if (root.startsWith(r))
+                return false;
+        }
+        return true;
+    });
+}
+exports.findCommonRoots = findCommonRoots;
+function findDirectoryPatterns(patterns) {
+    return patterns.filter((p) => p.endsWith("/"));
+}
+exports.findDirectoryPatterns = findDirectoryPatterns;
+function findMaxDepth(patterns) {
+    const isGlobstar = patterns.some((p) => p.includes("**/") || p.includes("/**") || p === "**");
+    if (isGlobstar)
+        return false;
+    const maxDepth = patterns.reduce((depth, p) => {
+        return Math.max(depth, p.split("/").filter(Boolean).length);
+    }, 0);
+    return maxDepth;
+}
+exports.findMaxDepth = findMaxDepth;
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/types.js b/node_modules/tinyglobby/node_modules/fdir/dist/types.js
new file mode 100644
index 0000000000000..c8ad2e549bdc6
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/types.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/node_modules/tinyglobby/node_modules/fdir/dist/utils.js b/node_modules/tinyglobby/node_modules/fdir/dist/utils.js
new file mode 100644
index 0000000000000..bf27ea43e2849
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/dist/utils.js
@@ -0,0 +1,32 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.normalizePath = exports.convertSlashes = exports.cleanPath = void 0;
+const path_1 = require("path");
+function cleanPath(path) {
+    let normalized = (0, path_1.normalize)(path);
+    // we have to remove the last path separator
+    // to account for / root path
+    if (normalized.length > 1 && normalized[normalized.length - 1] === path_1.sep)
+        normalized = normalized.substring(0, normalized.length - 1);
+    return normalized;
+}
+exports.cleanPath = cleanPath;
+const SLASHES_REGEX = /[\\/]/g;
+function convertSlashes(path, separator) {
+    return path.replace(SLASHES_REGEX, separator);
+}
+exports.convertSlashes = convertSlashes;
+function normalizePath(path, options) {
+    const { resolvePaths, normalizePath, pathSeparator } = options;
+    const pathNeedsCleaning = (process.platform === "win32" && path.includes("/")) ||
+        path.startsWith(".");
+    if (resolvePaths)
+        path = (0, path_1.resolve)(path);
+    if (normalizePath || pathNeedsCleaning)
+        path = cleanPath(path);
+    if (path === ".")
+        return "";
+    const needsSeperator = path[path.length - 1] !== pathSeparator;
+    return convertSlashes(needsSeperator ? path + pathSeparator : path, pathSeparator);
+}
+exports.normalizePath = normalizePath;
diff --git a/node_modules/tinyglobby/node_modules/fdir/package.json b/node_modules/tinyglobby/node_modules/fdir/package.json
new file mode 100644
index 0000000000000..4657d1cca64a0
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/fdir/package.json
@@ -0,0 +1,88 @@
+{
+  "name": "fdir",
+  "version": "6.4.3",
+  "description": "The fastest directory crawler & globbing alternative to glob, fast-glob, & tiny-glob. Crawls 1m files in < 1s",
+  "main": "dist/index.js",
+  "types": "dist/index.d.ts",
+  "scripts": {
+    "prepublishOnly": "npm run test && npm run build",
+    "build": "tsc",
+    "test": "vitest run __tests__/",
+    "test:coverage": "vitest run --coverage __tests__/",
+    "test:watch": "vitest __tests__/",
+    "bench": "ts-node benchmarks/benchmark.js",
+    "bench:glob": "ts-node benchmarks/glob-benchmark.ts",
+    "bench:fdir": "ts-node benchmarks/fdir-benchmark.ts",
+    "release": "./scripts/release.sh"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/thecodrr/fdir.git"
+  },
+  "keywords": [
+    "util",
+    "os",
+    "sys",
+    "fs",
+    "walk",
+    "crawler",
+    "directory",
+    "files",
+    "io",
+    "tiny-glob",
+    "glob",
+    "fast-glob",
+    "speed",
+    "javascript",
+    "nodejs"
+  ],
+  "author": "thecodrr <thecodrr@protonmail.com>",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/thecodrr/fdir/issues"
+  },
+  "homepage": "https://github.com/thecodrr/fdir#readme",
+  "devDependencies": {
+    "@types/glob": "^8.1.0",
+    "@types/mock-fs": "^4.13.4",
+    "@types/node": "^20.9.4",
+    "@types/picomatch": "^3.0.0",
+    "@types/tap": "^15.0.11",
+    "@vitest/coverage-v8": "^0.34.6",
+    "all-files-in-tree": "^1.1.2",
+    "benny": "^3.7.1",
+    "csv-to-markdown-table": "^1.3.1",
+    "expect": "^29.7.0",
+    "fast-glob": "^3.3.2",
+    "fdir1": "npm:fdir@1.2.0",
+    "fdir2": "npm:fdir@2.1.0",
+    "fdir3": "npm:fdir@3.4.2",
+    "fdir4": "npm:fdir@4.1.0",
+    "fdir5": "npm:fdir@5.0.0",
+    "fs-readdir-recursive": "^1.1.0",
+    "get-all-files": "^4.1.0",
+    "glob": "^10.3.10",
+    "klaw-sync": "^6.0.0",
+    "mock-fs": "^5.2.0",
+    "picomatch": "^4.0.2",
+    "recur-readdir": "0.0.1",
+    "recursive-files": "^1.0.2",
+    "recursive-fs": "^2.1.0",
+    "recursive-readdir": "^2.2.3",
+    "rrdir": "^12.1.0",
+    "systeminformation": "^5.21.17",
+    "tiny-glob": "^0.2.9",
+    "ts-node": "^10.9.1",
+    "typescript": "^5.3.2",
+    "vitest": "^0.34.6",
+    "walk-sync": "^3.0.0"
+  },
+  "peerDependencies": {
+    "picomatch": "^3 || ^4"
+  },
+  "peerDependenciesMeta": {
+    "picomatch": {
+      "optional": true
+    }
+  }
+}
diff --git a/node_modules/tinyglobby/node_modules/picomatch/LICENSE b/node_modules/tinyglobby/node_modules/picomatch/LICENSE
new file mode 100644
index 0000000000000..3608dca25e30b
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017-present, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/tinyglobby/node_modules/picomatch/index.js b/node_modules/tinyglobby/node_modules/picomatch/index.js
new file mode 100644
index 0000000000000..a753b1d9e843c
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+const pico = require('./lib/picomatch');
+const utils = require('./lib/utils');
+
+function picomatch(glob, options, returnState = false) {
+  // default to os.platform()
+  if (options && (options.windows === null || options.windows === undefined)) {
+    // don't mutate the original options object
+    options = { ...options, windows: utils.isWindows() };
+  }
+
+  return pico(glob, options, returnState);
+}
+
+Object.assign(picomatch, pico);
+module.exports = picomatch;
diff --git a/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js b/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js
new file mode 100644
index 0000000000000..27b3e20fdfe9b
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js
@@ -0,0 +1,179 @@
+'use strict';
+
+const WIN_SLASH = '\\\\/';
+const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
+
+/**
+ * Posix glob regex
+ */
+
+const DOT_LITERAL = '\\.';
+const PLUS_LITERAL = '\\+';
+const QMARK_LITERAL = '\\?';
+const SLASH_LITERAL = '\\/';
+const ONE_CHAR = '(?=.)';
+const QMARK = '[^/]';
+const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
+const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
+const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
+const NO_DOT = `(?!${DOT_LITERAL})`;
+const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
+const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
+const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
+const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
+const STAR = `${QMARK}*?`;
+const SEP = '/';
+
+const POSIX_CHARS = {
+  DOT_LITERAL,
+  PLUS_LITERAL,
+  QMARK_LITERAL,
+  SLASH_LITERAL,
+  ONE_CHAR,
+  QMARK,
+  END_ANCHOR,
+  DOTS_SLASH,
+  NO_DOT,
+  NO_DOTS,
+  NO_DOT_SLASH,
+  NO_DOTS_SLASH,
+  QMARK_NO_DOT,
+  STAR,
+  START_ANCHOR,
+  SEP
+};
+
+/**
+ * Windows glob regex
+ */
+
+const WINDOWS_CHARS = {
+  ...POSIX_CHARS,
+
+  SLASH_LITERAL: `[${WIN_SLASH}]`,
+  QMARK: WIN_NO_SLASH,
+  STAR: `${WIN_NO_SLASH}*?`,
+  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
+  NO_DOT: `(?!${DOT_LITERAL})`,
+  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
+  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
+  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
+  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,
+  SEP: '\\'
+};
+
+/**
+ * POSIX Bracket Regex
+ */
+
+const POSIX_REGEX_SOURCE = {
+  alnum: 'a-zA-Z0-9',
+  alpha: 'a-zA-Z',
+  ascii: '\\x00-\\x7F',
+  blank: ' \\t',
+  cntrl: '\\x00-\\x1F\\x7F',
+  digit: '0-9',
+  graph: '\\x21-\\x7E',
+  lower: 'a-z',
+  print: '\\x20-\\x7E ',
+  punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
+  space: ' \\t\\r\\n\\v\\f',
+  upper: 'A-Z',
+  word: 'A-Za-z0-9_',
+  xdigit: 'A-Fa-f0-9'
+};
+
+module.exports = {
+  MAX_LENGTH: 1024 * 64,
+  POSIX_REGEX_SOURCE,
+
+  // regular expressions
+  REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
+  REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
+  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
+  REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
+  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
+  REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
+
+  // Replace globs with equivalent patterns to reduce parsing time.
+  REPLACEMENTS: {
+    '***': '*',
+    '**/**': '**',
+    '**/**/**': '**'
+  },
+
+  // Digits
+  CHAR_0: 48, /* 0 */
+  CHAR_9: 57, /* 9 */
+
+  // Alphabet chars.
+  CHAR_UPPERCASE_A: 65, /* A */
+  CHAR_LOWERCASE_A: 97, /* a */
+  CHAR_UPPERCASE_Z: 90, /* Z */
+  CHAR_LOWERCASE_Z: 122, /* z */
+
+  CHAR_LEFT_PARENTHESES: 40, /* ( */
+  CHAR_RIGHT_PARENTHESES: 41, /* ) */
+
+  CHAR_ASTERISK: 42, /* * */
+
+  // Non-alphabetic chars.
+  CHAR_AMPERSAND: 38, /* & */
+  CHAR_AT: 64, /* @ */
+  CHAR_BACKWARD_SLASH: 92, /* \ */
+  CHAR_CARRIAGE_RETURN: 13, /* \r */
+  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
+  CHAR_COLON: 58, /* : */
+  CHAR_COMMA: 44, /* , */
+  CHAR_DOT: 46, /* . */
+  CHAR_DOUBLE_QUOTE: 34, /* " */
+  CHAR_EQUAL: 61, /* = */
+  CHAR_EXCLAMATION_MARK: 33, /* ! */
+  CHAR_FORM_FEED: 12, /* \f */
+  CHAR_FORWARD_SLASH: 47, /* / */
+  CHAR_GRAVE_ACCENT: 96, /* ` */
+  CHAR_HASH: 35, /* # */
+  CHAR_HYPHEN_MINUS: 45, /* - */
+  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
+  CHAR_LEFT_CURLY_BRACE: 123, /* { */
+  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
+  CHAR_LINE_FEED: 10, /* \n */
+  CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
+  CHAR_PERCENT: 37, /* % */
+  CHAR_PLUS: 43, /* + */
+  CHAR_QUESTION_MARK: 63, /* ? */
+  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
+  CHAR_RIGHT_CURLY_BRACE: 125, /* } */
+  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
+  CHAR_SEMICOLON: 59, /* ; */
+  CHAR_SINGLE_QUOTE: 39, /* ' */
+  CHAR_SPACE: 32, /*   */
+  CHAR_TAB: 9, /* \t */
+  CHAR_UNDERSCORE: 95, /* _ */
+  CHAR_VERTICAL_LINE: 124, /* | */
+  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
+
+  /**
+   * Create EXTGLOB_CHARS
+   */
+
+  extglobChars(chars) {
+    return {
+      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
+      '?': { type: 'qmark', open: '(?:', close: ')?' },
+      '+': { type: 'plus', open: '(?:', close: ')+' },
+      '*': { type: 'star', open: '(?:', close: ')*' },
+      '@': { type: 'at', open: '(?:', close: ')' }
+    };
+  },
+
+  /**
+   * Create GLOB_CHARS
+   */
+
+  globChars(win32) {
+    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
+  }
+};
diff --git a/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js b/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js
new file mode 100644
index 0000000000000..8fd8ff499d182
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js
@@ -0,0 +1,1085 @@
+'use strict';
+
+const constants = require('./constants');
+const utils = require('./utils');
+
+/**
+ * Constants
+ */
+
+const {
+  MAX_LENGTH,
+  POSIX_REGEX_SOURCE,
+  REGEX_NON_SPECIAL_CHARS,
+  REGEX_SPECIAL_CHARS_BACKREF,
+  REPLACEMENTS
+} = constants;
+
+/**
+ * Helpers
+ */
+
+const expandRange = (args, options) => {
+  if (typeof options.expandRange === 'function') {
+    return options.expandRange(...args, options);
+  }
+
+  args.sort();
+  const value = `[${args.join('-')}]`;
+
+  try {
+    /* eslint-disable-next-line no-new */
+    new RegExp(value);
+  } catch (ex) {
+    return args.map(v => utils.escapeRegex(v)).join('..');
+  }
+
+  return value;
+};
+
+/**
+ * Create the message for a syntax error
+ */
+
+const syntaxError = (type, char) => {
+  return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
+};
+
+/**
+ * Parse the given input string.
+ * @param {String} input
+ * @param {Object} options
+ * @return {Object}
+ */
+
+const parse = (input, options) => {
+  if (typeof input !== 'string') {
+    throw new TypeError('Expected a string');
+  }
+
+  input = REPLACEMENTS[input] || input;
+
+  const opts = { ...options };
+  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+
+  let len = input.length;
+  if (len > max) {
+    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+  }
+
+  const bos = { type: 'bos', value: '', output: opts.prepend || '' };
+  const tokens = [bos];
+
+  const capture = opts.capture ? '' : '?:';
+
+  // create constants based on platform, for windows or posix
+  const PLATFORM_CHARS = constants.globChars(opts.windows);
+  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
+
+  const {
+    DOT_LITERAL,
+    PLUS_LITERAL,
+    SLASH_LITERAL,
+    ONE_CHAR,
+    DOTS_SLASH,
+    NO_DOT,
+    NO_DOT_SLASH,
+    NO_DOTS_SLASH,
+    QMARK,
+    QMARK_NO_DOT,
+    STAR,
+    START_ANCHOR
+  } = PLATFORM_CHARS;
+
+  const globstar = opts => {
+    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+  };
+
+  const nodot = opts.dot ? '' : NO_DOT;
+  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
+  let star = opts.bash === true ? globstar(opts) : STAR;
+
+  if (opts.capture) {
+    star = `(${star})`;
+  }
+
+  // minimatch options support
+  if (typeof opts.noext === 'boolean') {
+    opts.noextglob = opts.noext;
+  }
+
+  const state = {
+    input,
+    index: -1,
+    start: 0,
+    dot: opts.dot === true,
+    consumed: '',
+    output: '',
+    prefix: '',
+    backtrack: false,
+    negated: false,
+    brackets: 0,
+    braces: 0,
+    parens: 0,
+    quotes: 0,
+    globstar: false,
+    tokens
+  };
+
+  input = utils.removePrefix(input, state);
+  len = input.length;
+
+  const extglobs = [];
+  const braces = [];
+  const stack = [];
+  let prev = bos;
+  let value;
+
+  /**
+   * Tokenizing helpers
+   */
+
+  const eos = () => state.index === len - 1;
+  const peek = state.peek = (n = 1) => input[state.index + n];
+  const advance = state.advance = () => input[++state.index] || '';
+  const remaining = () => input.slice(state.index + 1);
+  const consume = (value = '', num = 0) => {
+    state.consumed += value;
+    state.index += num;
+  };
+
+  const append = token => {
+    state.output += token.output != null ? token.output : token.value;
+    consume(token.value);
+  };
+
+  const negate = () => {
+    let count = 1;
+
+    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
+      advance();
+      state.start++;
+      count++;
+    }
+
+    if (count % 2 === 0) {
+      return false;
+    }
+
+    state.negated = true;
+    state.start++;
+    return true;
+  };
+
+  const increment = type => {
+    state[type]++;
+    stack.push(type);
+  };
+
+  const decrement = type => {
+    state[type]--;
+    stack.pop();
+  };
+
+  /**
+   * Push tokens onto the tokens array. This helper speeds up
+   * tokenizing by 1) helping us avoid backtracking as much as possible,
+   * and 2) helping us avoid creating extra tokens when consecutive
+   * characters are plain text. This improves performance and simplifies
+   * lookbehinds.
+   */
+
+  const push = tok => {
+    if (prev.type === 'globstar') {
+      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
+      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
+
+      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
+        state.output = state.output.slice(0, -prev.output.length);
+        prev.type = 'star';
+        prev.value = '*';
+        prev.output = star;
+        state.output += prev.output;
+      }
+    }
+
+    if (extglobs.length && tok.type !== 'paren') {
+      extglobs[extglobs.length - 1].inner += tok.value;
+    }
+
+    if (tok.value || tok.output) append(tok);
+    if (prev && prev.type === 'text' && tok.type === 'text') {
+      prev.output = (prev.output || prev.value) + tok.value;
+      prev.value += tok.value;
+      return;
+    }
+
+    tok.prev = prev;
+    tokens.push(tok);
+    prev = tok;
+  };
+
+  const extglobOpen = (type, value) => {
+    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
+
+    token.prev = prev;
+    token.parens = state.parens;
+    token.output = state.output;
+    const output = (opts.capture ? '(' : '') + token.open;
+
+    increment('parens');
+    push({ type, value, output: state.output ? '' : ONE_CHAR });
+    push({ type: 'paren', extglob: true, value: advance(), output });
+    extglobs.push(token);
+  };
+
+  const extglobClose = token => {
+    let output = token.close + (opts.capture ? ')' : '');
+    let rest;
+
+    if (token.type === 'negate') {
+      let extglobStar = star;
+
+      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
+        extglobStar = globstar(opts);
+      }
+
+      if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
+        output = token.close = `)$))${extglobStar}`;
+      }
+
+      if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
+        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.
+        // In this case, we need to parse the string and use it in the output of the original pattern.
+        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.
+        //
+        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.
+        const expression = parse(rest, { ...options, fastpaths: false }).output;
+
+        output = token.close = `)${expression})${extglobStar})`;
+      }
+
+      if (token.prev.type === 'bos') {
+        state.negatedExtglob = true;
+      }
+    }
+
+    push({ type: 'paren', extglob: true, value, output });
+    decrement('parens');
+  };
+
+  /**
+   * Fast paths
+   */
+
+  if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
+    let backslashes = false;
+
+    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
+      if (first === '\\') {
+        backslashes = true;
+        return m;
+      }
+
+      if (first === '?') {
+        if (esc) {
+          return esc + first + (rest ? QMARK.repeat(rest.length) : '');
+        }
+        if (index === 0) {
+          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
+        }
+        return QMARK.repeat(chars.length);
+      }
+
+      if (first === '.') {
+        return DOT_LITERAL.repeat(chars.length);
+      }
+
+      if (first === '*') {
+        if (esc) {
+          return esc + first + (rest ? star : '');
+        }
+        return star;
+      }
+      return esc ? m : `\\${m}`;
+    });
+
+    if (backslashes === true) {
+      if (opts.unescape === true) {
+        output = output.replace(/\\/g, '');
+      } else {
+        output = output.replace(/\\+/g, m => {
+          return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
+        });
+      }
+    }
+
+    if (output === input && opts.contains === true) {
+      state.output = input;
+      return state;
+    }
+
+    state.output = utils.wrapOutput(output, state, options);
+    return state;
+  }
+
+  /**
+   * Tokenize input until we reach end-of-string
+   */
+
+  while (!eos()) {
+    value = advance();
+
+    if (value === '\u0000') {
+      continue;
+    }
+
+    /**
+     * Escaped characters
+     */
+
+    if (value === '\\') {
+      const next = peek();
+
+      if (next === '/' && opts.bash !== true) {
+        continue;
+      }
+
+      if (next === '.' || next === ';') {
+        continue;
+      }
+
+      if (!next) {
+        value += '\\';
+        push({ type: 'text', value });
+        continue;
+      }
+
+      // collapse slashes to reduce potential for exploits
+      const match = /^\\+/.exec(remaining());
+      let slashes = 0;
+
+      if (match && match[0].length > 2) {
+        slashes = match[0].length;
+        state.index += slashes;
+        if (slashes % 2 !== 0) {
+          value += '\\';
+        }
+      }
+
+      if (opts.unescape === true) {
+        value = advance();
+      } else {
+        value += advance();
+      }
+
+      if (state.brackets === 0) {
+        push({ type: 'text', value });
+        continue;
+      }
+    }
+
+    /**
+     * If we're inside a regex character class, continue
+     * until we reach the closing bracket.
+     */
+
+    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
+      if (opts.posix !== false && value === ':') {
+        const inner = prev.value.slice(1);
+        if (inner.includes('[')) {
+          prev.posix = true;
+
+          if (inner.includes(':')) {
+            const idx = prev.value.lastIndexOf('[');
+            const pre = prev.value.slice(0, idx);
+            const rest = prev.value.slice(idx + 2);
+            const posix = POSIX_REGEX_SOURCE[rest];
+            if (posix) {
+              prev.value = pre + posix;
+              state.backtrack = true;
+              advance();
+
+              if (!bos.output && tokens.indexOf(prev) === 1) {
+                bos.output = ONE_CHAR;
+              }
+              continue;
+            }
+          }
+        }
+      }
+
+      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
+        value = `\\${value}`;
+      }
+
+      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
+        value = `\\${value}`;
+      }
+
+      if (opts.posix === true && value === '!' && prev.value === '[') {
+        value = '^';
+      }
+
+      prev.value += value;
+      append({ value });
+      continue;
+    }
+
+    /**
+     * If we're inside a quoted string, continue
+     * until we reach the closing double quote.
+     */
+
+    if (state.quotes === 1 && value !== '"') {
+      value = utils.escapeRegex(value);
+      prev.value += value;
+      append({ value });
+      continue;
+    }
+
+    /**
+     * Double quotes
+     */
+
+    if (value === '"') {
+      state.quotes = state.quotes === 1 ? 0 : 1;
+      if (opts.keepQuotes === true) {
+        push({ type: 'text', value });
+      }
+      continue;
+    }
+
+    /**
+     * Parentheses
+     */
+
+    if (value === '(') {
+      increment('parens');
+      push({ type: 'paren', value });
+      continue;
+    }
+
+    if (value === ')') {
+      if (state.parens === 0 && opts.strictBrackets === true) {
+        throw new SyntaxError(syntaxError('opening', '('));
+      }
+
+      const extglob = extglobs[extglobs.length - 1];
+      if (extglob && state.parens === extglob.parens + 1) {
+        extglobClose(extglobs.pop());
+        continue;
+      }
+
+      push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
+      decrement('parens');
+      continue;
+    }
+
+    /**
+     * Square brackets
+     */
+
+    if (value === '[') {
+      if (opts.nobracket === true || !remaining().includes(']')) {
+        if (opts.nobracket !== true && opts.strictBrackets === true) {
+          throw new SyntaxError(syntaxError('closing', ']'));
+        }
+
+        value = `\\${value}`;
+      } else {
+        increment('brackets');
+      }
+
+      push({ type: 'bracket', value });
+      continue;
+    }
+
+    if (value === ']') {
+      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
+        push({ type: 'text', value, output: `\\${value}` });
+        continue;
+      }
+
+      if (state.brackets === 0) {
+        if (opts.strictBrackets === true) {
+          throw new SyntaxError(syntaxError('opening', '['));
+        }
+
+        push({ type: 'text', value, output: `\\${value}` });
+        continue;
+      }
+
+      decrement('brackets');
+
+      const prevValue = prev.value.slice(1);
+      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
+        value = `/${value}`;
+      }
+
+      prev.value += value;
+      append({ value });
+
+      // when literal brackets are explicitly disabled
+      // assume we should match with a regex character class
+      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
+        continue;
+      }
+
+      const escaped = utils.escapeRegex(prev.value);
+      state.output = state.output.slice(0, -prev.value.length);
+
+      // when literal brackets are explicitly enabled
+      // assume we should escape the brackets to match literal characters
+      if (opts.literalBrackets === true) {
+        state.output += escaped;
+        prev.value = escaped;
+        continue;
+      }
+
+      // when the user specifies nothing, try to match both
+      prev.value = `(${capture}${escaped}|${prev.value})`;
+      state.output += prev.value;
+      continue;
+    }
+
+    /**
+     * Braces
+     */
+
+    if (value === '{' && opts.nobrace !== true) {
+      increment('braces');
+
+      const open = {
+        type: 'brace',
+        value,
+        output: '(',
+        outputIndex: state.output.length,
+        tokensIndex: state.tokens.length
+      };
+
+      braces.push(open);
+      push(open);
+      continue;
+    }
+
+    if (value === '}') {
+      const brace = braces[braces.length - 1];
+
+      if (opts.nobrace === true || !brace) {
+        push({ type: 'text', value, output: value });
+        continue;
+      }
+
+      let output = ')';
+
+      if (brace.dots === true) {
+        const arr = tokens.slice();
+        const range = [];
+
+        for (let i = arr.length - 1; i >= 0; i--) {
+          tokens.pop();
+          if (arr[i].type === 'brace') {
+            break;
+          }
+          if (arr[i].type !== 'dots') {
+            range.unshift(arr[i].value);
+          }
+        }
+
+        output = expandRange(range, opts);
+        state.backtrack = true;
+      }
+
+      if (brace.comma !== true && brace.dots !== true) {
+        const out = state.output.slice(0, brace.outputIndex);
+        const toks = state.tokens.slice(brace.tokensIndex);
+        brace.value = brace.output = '\\{';
+        value = output = '\\}';
+        state.output = out;
+        for (const t of toks) {
+          state.output += (t.output || t.value);
+        }
+      }
+
+      push({ type: 'brace', value, output });
+      decrement('braces');
+      braces.pop();
+      continue;
+    }
+
+    /**
+     * Pipes
+     */
+
+    if (value === '|') {
+      if (extglobs.length > 0) {
+        extglobs[extglobs.length - 1].conditions++;
+      }
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Commas
+     */
+
+    if (value === ',') {
+      let output = value;
+
+      const brace = braces[braces.length - 1];
+      if (brace && stack[stack.length - 1] === 'braces') {
+        brace.comma = true;
+        output = '|';
+      }
+
+      push({ type: 'comma', value, output });
+      continue;
+    }
+
+    /**
+     * Slashes
+     */
+
+    if (value === '/') {
+      // if the beginning of the glob is "./", advance the start
+      // to the current index, and don't add the "./" characters
+      // to the state. This greatly simplifies lookbehinds when
+      // checking for BOS characters like "!" and "." (not "./")
+      if (prev.type === 'dot' && state.index === state.start + 1) {
+        state.start = state.index + 1;
+        state.consumed = '';
+        state.output = '';
+        tokens.pop();
+        prev = bos; // reset "prev" to the first token
+        continue;
+      }
+
+      push({ type: 'slash', value, output: SLASH_LITERAL });
+      continue;
+    }
+
+    /**
+     * Dots
+     */
+
+    if (value === '.') {
+      if (state.braces > 0 && prev.type === 'dot') {
+        if (prev.value === '.') prev.output = DOT_LITERAL;
+        const brace = braces[braces.length - 1];
+        prev.type = 'dots';
+        prev.output += value;
+        prev.value += value;
+        brace.dots = true;
+        continue;
+      }
+
+      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
+        push({ type: 'text', value, output: DOT_LITERAL });
+        continue;
+      }
+
+      push({ type: 'dot', value, output: DOT_LITERAL });
+      continue;
+    }
+
+    /**
+     * Question marks
+     */
+
+    if (value === '?') {
+      const isGroup = prev && prev.value === '(';
+      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        extglobOpen('qmark', value);
+        continue;
+      }
+
+      if (prev && prev.type === 'paren') {
+        const next = peek();
+        let output = value;
+
+        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
+          output = `\\${value}`;
+        }
+
+        push({ type: 'text', value, output });
+        continue;
+      }
+
+      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
+        push({ type: 'qmark', value, output: QMARK_NO_DOT });
+        continue;
+      }
+
+      push({ type: 'qmark', value, output: QMARK });
+      continue;
+    }
+
+    /**
+     * Exclamation
+     */
+
+    if (value === '!') {
+      if (opts.noextglob !== true && peek() === '(') {
+        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
+          extglobOpen('negate', value);
+          continue;
+        }
+      }
+
+      if (opts.nonegate !== true && state.index === 0) {
+        negate();
+        continue;
+      }
+    }
+
+    /**
+     * Plus
+     */
+
+    if (value === '+') {
+      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        extglobOpen('plus', value);
+        continue;
+      }
+
+      if ((prev && prev.value === '(') || opts.regex === false) {
+        push({ type: 'plus', value, output: PLUS_LITERAL });
+        continue;
+      }
+
+      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
+        push({ type: 'plus', value });
+        continue;
+      }
+
+      push({ type: 'plus', value: PLUS_LITERAL });
+      continue;
+    }
+
+    /**
+     * Plain text
+     */
+
+    if (value === '@') {
+      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        push({ type: 'at', extglob: true, value, output: '' });
+        continue;
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Plain text
+     */
+
+    if (value !== '*') {
+      if (value === '$' || value === '^') {
+        value = `\\${value}`;
+      }
+
+      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
+      if (match) {
+        value += match[0];
+        state.index += match[0].length;
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Stars
+     */
+
+    if (prev && (prev.type === 'globstar' || prev.star === true)) {
+      prev.type = 'star';
+      prev.star = true;
+      prev.value += value;
+      prev.output = star;
+      state.backtrack = true;
+      state.globstar = true;
+      consume(value);
+      continue;
+    }
+
+    let rest = remaining();
+    if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
+      extglobOpen('star', value);
+      continue;
+    }
+
+    if (prev.type === 'star') {
+      if (opts.noglobstar === true) {
+        consume(value);
+        continue;
+      }
+
+      const prior = prev.prev;
+      const before = prior.prev;
+      const isStart = prior.type === 'slash' || prior.type === 'bos';
+      const afterStar = before && (before.type === 'star' || before.type === 'globstar');
+
+      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
+        push({ type: 'star', value, output: '' });
+        continue;
+      }
+
+      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
+      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
+      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
+        push({ type: 'star', value, output: '' });
+        continue;
+      }
+
+      // strip consecutive `/**/`
+      while (rest.slice(0, 3) === '/**') {
+        const after = input[state.index + 4];
+        if (after && after !== '/') {
+          break;
+        }
+        rest = rest.slice(3);
+        consume('/**', 3);
+      }
+
+      if (prior.type === 'bos' && eos()) {
+        prev.type = 'globstar';
+        prev.value += value;
+        prev.output = globstar(opts);
+        state.output = prev.output;
+        state.globstar = true;
+        consume(value);
+        continue;
+      }
+
+      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
+        state.output = state.output.slice(0, -(prior.output + prev.output).length);
+        prior.output = `(?:${prior.output}`;
+
+        prev.type = 'globstar';
+        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
+        prev.value += value;
+        state.globstar = true;
+        state.output += prior.output + prev.output;
+        consume(value);
+        continue;
+      }
+
+      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
+        const end = rest[1] !== void 0 ? '|$' : '';
+
+        state.output = state.output.slice(0, -(prior.output + prev.output).length);
+        prior.output = `(?:${prior.output}`;
+
+        prev.type = 'globstar';
+        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
+        prev.value += value;
+
+        state.output += prior.output + prev.output;
+        state.globstar = true;
+
+        consume(value + advance());
+
+        push({ type: 'slash', value: '/', output: '' });
+        continue;
+      }
+
+      if (prior.type === 'bos' && rest[0] === '/') {
+        prev.type = 'globstar';
+        prev.value += value;
+        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
+        state.output = prev.output;
+        state.globstar = true;
+        consume(value + advance());
+        push({ type: 'slash', value: '/', output: '' });
+        continue;
+      }
+
+      // remove single star from output
+      state.output = state.output.slice(0, -prev.output.length);
+
+      // reset previous token to globstar
+      prev.type = 'globstar';
+      prev.output = globstar(opts);
+      prev.value += value;
+
+      // reset output with globstar
+      state.output += prev.output;
+      state.globstar = true;
+      consume(value);
+      continue;
+    }
+
+    const token = { type: 'star', value, output: star };
+
+    if (opts.bash === true) {
+      token.output = '.*?';
+      if (prev.type === 'bos' || prev.type === 'slash') {
+        token.output = nodot + token.output;
+      }
+      push(token);
+      continue;
+    }
+
+    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
+      token.output = value;
+      push(token);
+      continue;
+    }
+
+    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
+      if (prev.type === 'dot') {
+        state.output += NO_DOT_SLASH;
+        prev.output += NO_DOT_SLASH;
+
+      } else if (opts.dot === true) {
+        state.output += NO_DOTS_SLASH;
+        prev.output += NO_DOTS_SLASH;
+
+      } else {
+        state.output += nodot;
+        prev.output += nodot;
+      }
+
+      if (peek() !== '*') {
+        state.output += ONE_CHAR;
+        prev.output += ONE_CHAR;
+      }
+    }
+
+    push(token);
+  }
+
+  while (state.brackets > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
+    state.output = utils.escapeLast(state.output, '[');
+    decrement('brackets');
+  }
+
+  while (state.parens > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
+    state.output = utils.escapeLast(state.output, '(');
+    decrement('parens');
+  }
+
+  while (state.braces > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
+    state.output = utils.escapeLast(state.output, '{');
+    decrement('braces');
+  }
+
+  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
+    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
+  }
+
+  // rebuild the output if we had to backtrack at any point
+  if (state.backtrack === true) {
+    state.output = '';
+
+    for (const token of state.tokens) {
+      state.output += token.output != null ? token.output : token.value;
+
+      if (token.suffix) {
+        state.output += token.suffix;
+      }
+    }
+  }
+
+  return state;
+};
+
+/**
+ * Fast paths for creating regular expressions for common glob patterns.
+ * This can significantly speed up processing and has very little downside
+ * impact when none of the fast paths match.
+ */
+
+parse.fastpaths = (input, options) => {
+  const opts = { ...options };
+  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+  const len = input.length;
+  if (len > max) {
+    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+  }
+
+  input = REPLACEMENTS[input] || input;
+
+  // create constants based on platform, for windows or posix
+  const {
+    DOT_LITERAL,
+    SLASH_LITERAL,
+    ONE_CHAR,
+    DOTS_SLASH,
+    NO_DOT,
+    NO_DOTS,
+    NO_DOTS_SLASH,
+    STAR,
+    START_ANCHOR
+  } = constants.globChars(opts.windows);
+
+  const nodot = opts.dot ? NO_DOTS : NO_DOT;
+  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
+  const capture = opts.capture ? '' : '?:';
+  const state = { negated: false, prefix: '' };
+  let star = opts.bash === true ? '.*?' : STAR;
+
+  if (opts.capture) {
+    star = `(${star})`;
+  }
+
+  const globstar = opts => {
+    if (opts.noglobstar === true) return star;
+    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+  };
+
+  const create = str => {
+    switch (str) {
+      case '*':
+        return `${nodot}${ONE_CHAR}${star}`;
+
+      case '.*':
+        return `${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '*.*':
+        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '*/*':
+        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
+
+      case '**':
+        return nodot + globstar(opts);
+
+      case '**/*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
+
+      case '**/*.*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '**/.*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      default: {
+        const match = /^(.*?)\.(\w+)$/.exec(str);
+        if (!match) return;
+
+        const source = create(match[1]);
+        if (!source) return;
+
+        return source + DOT_LITERAL + match[2];
+      }
+    }
+  };
+
+  const output = utils.removePrefix(input, state);
+  let source = create(output);
+
+  if (source && opts.strictSlashes !== true) {
+    source += `${SLASH_LITERAL}?`;
+  }
+
+  return source;
+};
+
+module.exports = parse;
diff --git a/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js b/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js
new file mode 100644
index 0000000000000..d0ebd9f163cf2
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js
@@ -0,0 +1,341 @@
+'use strict';
+
+const scan = require('./scan');
+const parse = require('./parse');
+const utils = require('./utils');
+const constants = require('./constants');
+const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
+
+/**
+ * Creates a matcher function from one or more glob patterns. The
+ * returned function takes a string to match as its first argument,
+ * and returns true if the string is a match. The returned matcher
+ * function also takes a boolean as the second argument that, when true,
+ * returns an object with additional information.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch(glob[, options]);
+ *
+ * const isMatch = picomatch('*.!(*a)');
+ * console.log(isMatch('a.a')); //=> false
+ * console.log(isMatch('a.b')); //=> true
+ * ```
+ * @name picomatch
+ * @param {String|Array} `globs` One or more glob patterns.
+ * @param {Object=} `options`
+ * @return {Function=} Returns a matcher function.
+ * @api public
+ */
+
+const picomatch = (glob, options, returnState = false) => {
+  if (Array.isArray(glob)) {
+    const fns = glob.map(input => picomatch(input, options, returnState));
+    const arrayMatcher = str => {
+      for (const isMatch of fns) {
+        const state = isMatch(str);
+        if (state) return state;
+      }
+      return false;
+    };
+    return arrayMatcher;
+  }
+
+  const isState = isObject(glob) && glob.tokens && glob.input;
+
+  if (glob === '' || (typeof glob !== 'string' && !isState)) {
+    throw new TypeError('Expected pattern to be a non-empty string');
+  }
+
+  const opts = options || {};
+  const posix = opts.windows;
+  const regex = isState
+    ? picomatch.compileRe(glob, options)
+    : picomatch.makeRe(glob, options, false, true);
+
+  const state = regex.state;
+  delete regex.state;
+
+  let isIgnored = () => false;
+  if (opts.ignore) {
+    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
+    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
+  }
+
+  const matcher = (input, returnObject = false) => {
+    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
+    const result = { glob, state, regex, posix, input, output, match, isMatch };
+
+    if (typeof opts.onResult === 'function') {
+      opts.onResult(result);
+    }
+
+    if (isMatch === false) {
+      result.isMatch = false;
+      return returnObject ? result : false;
+    }
+
+    if (isIgnored(input)) {
+      if (typeof opts.onIgnore === 'function') {
+        opts.onIgnore(result);
+      }
+      result.isMatch = false;
+      return returnObject ? result : false;
+    }
+
+    if (typeof opts.onMatch === 'function') {
+      opts.onMatch(result);
+    }
+    return returnObject ? result : true;
+  };
+
+  if (returnState) {
+    matcher.state = state;
+  }
+
+  return matcher;
+};
+
+/**
+ * Test `input` with the given `regex`. This is used by the main
+ * `picomatch()` function to test the input string.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.test(input, regex[, options]);
+ *
+ * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
+ * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
+ * ```
+ * @param {String} `input` String to test.
+ * @param {RegExp} `regex`
+ * @return {Object} Returns an object with matching info.
+ * @api public
+ */
+
+picomatch.test = (input, regex, options, { glob, posix } = {}) => {
+  if (typeof input !== 'string') {
+    throw new TypeError('Expected input to be a string');
+  }
+
+  if (input === '') {
+    return { isMatch: false, output: '' };
+  }
+
+  const opts = options || {};
+  const format = opts.format || (posix ? utils.toPosixSlashes : null);
+  let match = input === glob;
+  let output = (match && format) ? format(input) : input;
+
+  if (match === false) {
+    output = format ? format(input) : input;
+    match = output === glob;
+  }
+
+  if (match === false || opts.capture === true) {
+    if (opts.matchBase === true || opts.basename === true) {
+      match = picomatch.matchBase(input, regex, options, posix);
+    } else {
+      match = regex.exec(output);
+    }
+  }
+
+  return { isMatch: Boolean(match), match, output };
+};
+
+/**
+ * Match the basename of a filepath.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.matchBase(input, glob[, options]);
+ * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
+ * ```
+ * @param {String} `input` String to test.
+ * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
+ * @return {Boolean}
+ * @api public
+ */
+
+picomatch.matchBase = (input, glob, options) => {
+  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
+  return regex.test(utils.basename(input));
+};
+
+/**
+ * Returns true if **any** of the given glob `patterns` match the specified `string`.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.isMatch(string, patterns[, options]);
+ *
+ * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
+ * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
+ * ```
+ * @param {String|Array} str The string to test.
+ * @param {String|Array} patterns One or more glob patterns to use for matching.
+ * @param {Object} [options] See available [options](#options).
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
+
+/**
+ * Parse a glob pattern to create the source string for a regular
+ * expression.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * const result = picomatch.parse(pattern[, options]);
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
+ * @api public
+ */
+
+picomatch.parse = (pattern, options) => {
+  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
+  return parse(pattern, { ...options, fastpaths: false });
+};
+
+/**
+ * Scan a glob pattern to separate the pattern into segments.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.scan(input[, options]);
+ *
+ * const result = picomatch.scan('!./foo/*.js');
+ * console.log(result);
+ * { prefix: '!./',
+ *   input: '!./foo/*.js',
+ *   start: 3,
+ *   base: 'foo',
+ *   glob: '*.js',
+ *   isBrace: false,
+ *   isBracket: false,
+ *   isGlob: true,
+ *   isExtglob: false,
+ *   isGlobstar: false,
+ *   negated: true }
+ * ```
+ * @param {String} `input` Glob pattern to scan.
+ * @param {Object} `options`
+ * @return {Object} Returns an object with
+ * @api public
+ */
+
+picomatch.scan = (input, options) => scan(input, options);
+
+/**
+ * Compile a regular expression from the `state` object returned by the
+ * [parse()](#parse) method.
+ *
+ * @param {Object} `state`
+ * @param {Object} `options`
+ * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.
+ * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.
+ * @return {RegExp}
+ * @api public
+ */
+
+picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
+  if (returnOutput === true) {
+    return state.output;
+  }
+
+  const opts = options || {};
+  const prepend = opts.contains ? '' : '^';
+  const append = opts.contains ? '' : '$';
+
+  let source = `${prepend}(?:${state.output})${append}`;
+  if (state && state.negated === true) {
+    source = `^(?!${source}).*$`;
+  }
+
+  const regex = picomatch.toRegex(source, options);
+  if (returnState === true) {
+    regex.state = state;
+  }
+
+  return regex;
+};
+
+/**
+ * Create a regular expression from a parsed glob pattern.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * const state = picomatch.parse('*.js');
+ * // picomatch.compileRe(state[, options]);
+ *
+ * console.log(picomatch.compileRe(state));
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
+ * ```
+ * @param {String} `state` The object returned from the `.parse` method.
+ * @param {Object} `options`
+ * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.
+ * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.
+ * @return {RegExp} Returns a regex created from the given pattern.
+ * @api public
+ */
+
+picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
+  if (!input || typeof input !== 'string') {
+    throw new TypeError('Expected a non-empty string');
+  }
+
+  let parsed = { negated: false, fastpaths: true };
+
+  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
+    parsed.output = parse.fastpaths(input, options);
+  }
+
+  if (!parsed.output) {
+    parsed = parse(input, options);
+  }
+
+  return picomatch.compileRe(parsed, options, returnOutput, returnState);
+};
+
+/**
+ * Create a regular expression from the given regex source string.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.toRegex(source[, options]);
+ *
+ * const { output } = picomatch.parse('*.js');
+ * console.log(picomatch.toRegex(output));
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
+ * ```
+ * @param {String} `source` Regular expression source string.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+picomatch.toRegex = (source, options) => {
+  try {
+    const opts = options || {};
+    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
+  } catch (err) {
+    if (options && options.debug === true) throw err;
+    return /$^/;
+  }
+};
+
+/**
+ * Picomatch constants.
+ * @return {Object}
+ */
+
+picomatch.constants = constants;
+
+/**
+ * Expose "picomatch"
+ */
+
+module.exports = picomatch;
diff --git a/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js b/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js
new file mode 100644
index 0000000000000..e59cd7a1357b1
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js
@@ -0,0 +1,391 @@
+'use strict';
+
+const utils = require('./utils');
+const {
+  CHAR_ASTERISK,             /* * */
+  CHAR_AT,                   /* @ */
+  CHAR_BACKWARD_SLASH,       /* \ */
+  CHAR_COMMA,                /* , */
+  CHAR_DOT,                  /* . */
+  CHAR_EXCLAMATION_MARK,     /* ! */
+  CHAR_FORWARD_SLASH,        /* / */
+  CHAR_LEFT_CURLY_BRACE,     /* { */
+  CHAR_LEFT_PARENTHESES,     /* ( */
+  CHAR_LEFT_SQUARE_BRACKET,  /* [ */
+  CHAR_PLUS,                 /* + */
+  CHAR_QUESTION_MARK,        /* ? */
+  CHAR_RIGHT_CURLY_BRACE,    /* } */
+  CHAR_RIGHT_PARENTHESES,    /* ) */
+  CHAR_RIGHT_SQUARE_BRACKET  /* ] */
+} = require('./constants');
+
+const isPathSeparator = code => {
+  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+};
+
+const depth = token => {
+  if (token.isPrefix !== true) {
+    token.depth = token.isGlobstar ? Infinity : 1;
+  }
+};
+
+/**
+ * Quickly scans a glob pattern and returns an object with a handful of
+ * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
+ * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not
+ * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).
+ *
+ * ```js
+ * const pm = require('picomatch');
+ * console.log(pm.scan('foo/bar/*.js'));
+ * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with tokens and regex source string.
+ * @api public
+ */
+
+const scan = (input, options) => {
+  const opts = options || {};
+
+  const length = input.length - 1;
+  const scanToEnd = opts.parts === true || opts.scanToEnd === true;
+  const slashes = [];
+  const tokens = [];
+  const parts = [];
+
+  let str = input;
+  let index = -1;
+  let start = 0;
+  let lastIndex = 0;
+  let isBrace = false;
+  let isBracket = false;
+  let isGlob = false;
+  let isExtglob = false;
+  let isGlobstar = false;
+  let braceEscaped = false;
+  let backslashes = false;
+  let negated = false;
+  let negatedExtglob = false;
+  let finished = false;
+  let braces = 0;
+  let prev;
+  let code;
+  let token = { value: '', depth: 0, isGlob: false };
+
+  const eos = () => index >= length;
+  const peek = () => str.charCodeAt(index + 1);
+  const advance = () => {
+    prev = code;
+    return str.charCodeAt(++index);
+  };
+
+  while (index < length) {
+    code = advance();
+    let next;
+
+    if (code === CHAR_BACKWARD_SLASH) {
+      backslashes = token.backslashes = true;
+      code = advance();
+
+      if (code === CHAR_LEFT_CURLY_BRACE) {
+        braceEscaped = true;
+      }
+      continue;
+    }
+
+    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
+      braces++;
+
+      while (eos() !== true && (code = advance())) {
+        if (code === CHAR_BACKWARD_SLASH) {
+          backslashes = token.backslashes = true;
+          advance();
+          continue;
+        }
+
+        if (code === CHAR_LEFT_CURLY_BRACE) {
+          braces++;
+          continue;
+        }
+
+        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
+          isBrace = token.isBrace = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+
+          if (scanToEnd === true) {
+            continue;
+          }
+
+          break;
+        }
+
+        if (braceEscaped !== true && code === CHAR_COMMA) {
+          isBrace = token.isBrace = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+
+          if (scanToEnd === true) {
+            continue;
+          }
+
+          break;
+        }
+
+        if (code === CHAR_RIGHT_CURLY_BRACE) {
+          braces--;
+
+          if (braces === 0) {
+            braceEscaped = false;
+            isBrace = token.isBrace = true;
+            finished = true;
+            break;
+          }
+        }
+      }
+
+      if (scanToEnd === true) {
+        continue;
+      }
+
+      break;
+    }
+
+    if (code === CHAR_FORWARD_SLASH) {
+      slashes.push(index);
+      tokens.push(token);
+      token = { value: '', depth: 0, isGlob: false };
+
+      if (finished === true) continue;
+      if (prev === CHAR_DOT && index === (start + 1)) {
+        start += 2;
+        continue;
+      }
+
+      lastIndex = index + 1;
+      continue;
+    }
+
+    if (opts.noext !== true) {
+      const isExtglobChar = code === CHAR_PLUS
+        || code === CHAR_AT
+        || code === CHAR_ASTERISK
+        || code === CHAR_QUESTION_MARK
+        || code === CHAR_EXCLAMATION_MARK;
+
+      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
+        isGlob = token.isGlob = true;
+        isExtglob = token.isExtglob = true;
+        finished = true;
+        if (code === CHAR_EXCLAMATION_MARK && index === start) {
+          negatedExtglob = true;
+        }
+
+        if (scanToEnd === true) {
+          while (eos() !== true && (code = advance())) {
+            if (code === CHAR_BACKWARD_SLASH) {
+              backslashes = token.backslashes = true;
+              code = advance();
+              continue;
+            }
+
+            if (code === CHAR_RIGHT_PARENTHESES) {
+              isGlob = token.isGlob = true;
+              finished = true;
+              break;
+            }
+          }
+          continue;
+        }
+        break;
+      }
+    }
+
+    if (code === CHAR_ASTERISK) {
+      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
+      isGlob = token.isGlob = true;
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+      break;
+    }
+
+    if (code === CHAR_QUESTION_MARK) {
+      isGlob = token.isGlob = true;
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+      break;
+    }
+
+    if (code === CHAR_LEFT_SQUARE_BRACKET) {
+      while (eos() !== true && (next = advance())) {
+        if (next === CHAR_BACKWARD_SLASH) {
+          backslashes = token.backslashes = true;
+          advance();
+          continue;
+        }
+
+        if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+          isBracket = token.isBracket = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+          break;
+        }
+      }
+
+      if (scanToEnd === true) {
+        continue;
+      }
+
+      break;
+    }
+
+    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
+      negated = token.negated = true;
+      start++;
+      continue;
+    }
+
+    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
+      isGlob = token.isGlob = true;
+
+      if (scanToEnd === true) {
+        while (eos() !== true && (code = advance())) {
+          if (code === CHAR_LEFT_PARENTHESES) {
+            backslashes = token.backslashes = true;
+            code = advance();
+            continue;
+          }
+
+          if (code === CHAR_RIGHT_PARENTHESES) {
+            finished = true;
+            break;
+          }
+        }
+        continue;
+      }
+      break;
+    }
+
+    if (isGlob === true) {
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+
+      break;
+    }
+  }
+
+  if (opts.noext === true) {
+    isExtglob = false;
+    isGlob = false;
+  }
+
+  let base = str;
+  let prefix = '';
+  let glob = '';
+
+  if (start > 0) {
+    prefix = str.slice(0, start);
+    str = str.slice(start);
+    lastIndex -= start;
+  }
+
+  if (base && isGlob === true && lastIndex > 0) {
+    base = str.slice(0, lastIndex);
+    glob = str.slice(lastIndex);
+  } else if (isGlob === true) {
+    base = '';
+    glob = str;
+  } else {
+    base = str;
+  }
+
+  if (base && base !== '' && base !== '/' && base !== str) {
+    if (isPathSeparator(base.charCodeAt(base.length - 1))) {
+      base = base.slice(0, -1);
+    }
+  }
+
+  if (opts.unescape === true) {
+    if (glob) glob = utils.removeBackslashes(glob);
+
+    if (base && backslashes === true) {
+      base = utils.removeBackslashes(base);
+    }
+  }
+
+  const state = {
+    prefix,
+    input,
+    start,
+    base,
+    glob,
+    isBrace,
+    isBracket,
+    isGlob,
+    isExtglob,
+    isGlobstar,
+    negated,
+    negatedExtglob
+  };
+
+  if (opts.tokens === true) {
+    state.maxDepth = 0;
+    if (!isPathSeparator(code)) {
+      tokens.push(token);
+    }
+    state.tokens = tokens;
+  }
+
+  if (opts.parts === true || opts.tokens === true) {
+    let prevIndex;
+
+    for (let idx = 0; idx < slashes.length; idx++) {
+      const n = prevIndex ? prevIndex + 1 : start;
+      const i = slashes[idx];
+      const value = input.slice(n, i);
+      if (opts.tokens) {
+        if (idx === 0 && start !== 0) {
+          tokens[idx].isPrefix = true;
+          tokens[idx].value = prefix;
+        } else {
+          tokens[idx].value = value;
+        }
+        depth(tokens[idx]);
+        state.maxDepth += tokens[idx].depth;
+      }
+      if (idx !== 0 || value !== '') {
+        parts.push(value);
+      }
+      prevIndex = i;
+    }
+
+    if (prevIndex && prevIndex + 1 < input.length) {
+      const value = input.slice(prevIndex + 1);
+      parts.push(value);
+
+      if (opts.tokens) {
+        tokens[tokens.length - 1].value = value;
+        depth(tokens[tokens.length - 1]);
+        state.maxDepth += tokens[tokens.length - 1].depth;
+      }
+    }
+
+    state.slashes = slashes;
+    state.parts = parts;
+  }
+
+  return state;
+};
+
+module.exports = scan;
diff --git a/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js b/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js
new file mode 100644
index 0000000000000..9c97cae222ca8
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js
@@ -0,0 +1,72 @@
+/*global navigator*/
+'use strict';
+
+const {
+  REGEX_BACKSLASH,
+  REGEX_REMOVE_BACKSLASH,
+  REGEX_SPECIAL_CHARS,
+  REGEX_SPECIAL_CHARS_GLOBAL
+} = require('./constants');
+
+exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
+exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
+exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
+exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
+exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
+
+exports.isWindows = () => {
+  if (typeof navigator !== 'undefined' && navigator.platform) {
+    const platform = navigator.platform.toLowerCase();
+    return platform === 'win32' || platform === 'windows';
+  }
+
+  if (typeof process !== 'undefined' && process.platform) {
+    return process.platform === 'win32';
+  }
+
+  return false;
+};
+
+exports.removeBackslashes = str => {
+  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
+    return match === '\\' ? '' : match;
+  });
+};
+
+exports.escapeLast = (input, char, lastIdx) => {
+  const idx = input.lastIndexOf(char, lastIdx);
+  if (idx === -1) return input;
+  if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
+  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
+};
+
+exports.removePrefix = (input, state = {}) => {
+  let output = input;
+  if (output.startsWith('./')) {
+    output = output.slice(2);
+    state.prefix = './';
+  }
+  return output;
+};
+
+exports.wrapOutput = (input, state = {}, options = {}) => {
+  const prepend = options.contains ? '' : '^';
+  const append = options.contains ? '' : '$';
+
+  let output = `${prepend}(?:${input})${append}`;
+  if (state.negated === true) {
+    output = `(?:^(?!${output}).*$)`;
+  }
+  return output;
+};
+
+exports.basename = (path, { windows } = {}) => {
+  const segs = path.split(windows ? /[\\/]/ : '/');
+  const last = segs[segs.length - 1];
+
+  if (last === '') {
+    return segs[segs.length - 2];
+  }
+
+  return last;
+};
diff --git a/node_modules/tinyglobby/node_modules/picomatch/package.json b/node_modules/tinyglobby/node_modules/picomatch/package.json
new file mode 100644
index 0000000000000..703a83dcd0661
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/package.json
@@ -0,0 +1,83 @@
+{
+  "name": "picomatch",
+  "description": "Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.",
+  "version": "4.0.2",
+  "homepage": "https://github.com/micromatch/picomatch",
+  "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+  "funding": "https://github.com/sponsors/jonschlinkert",
+  "repository": "micromatch/picomatch",
+  "bugs": {
+    "url": "https://github.com/micromatch/picomatch/issues"
+  },
+  "license": "MIT",
+  "files": [
+    "index.js",
+    "posix.js",
+    "lib"
+  ],
+  "sideEffects": false,
+  "main": "index.js",
+  "engines": {
+    "node": ">=12"
+  },
+  "scripts": {
+    "lint": "eslint --cache --cache-location node_modules/.cache/.eslintcache --report-unused-disable-directives --ignore-path .gitignore .",
+    "mocha": "mocha --reporter dot",
+    "test": "npm run lint && npm run mocha",
+    "test:ci": "npm run test:cover",
+    "test:cover": "nyc npm run mocha"
+  },
+  "devDependencies": {
+    "eslint": "^8.57.0",
+    "fill-range": "^7.0.1",
+    "gulp-format-md": "^2.0.0",
+    "mocha": "^10.4.0",
+    "nyc": "^15.1.0",
+    "time-require": "github:jonschlinkert/time-require"
+  },
+  "keywords": [
+    "glob",
+    "match",
+    "picomatch"
+  ],
+  "nyc": {
+    "reporter": [
+      "html",
+      "lcov",
+      "text-summary"
+    ]
+  },
+  "verb": {
+    "toc": {
+      "render": true,
+      "method": "preWrite",
+      "maxdepth": 3
+    },
+    "layout": "empty",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    },
+    "related": {
+      "list": [
+        "braces",
+        "micromatch"
+      ]
+    },
+    "reflinks": [
+      "braces",
+      "expand-brackets",
+      "extglob",
+      "fill-range",
+      "micromatch",
+      "minimatch",
+      "nanomatch",
+      "picomatch"
+    ]
+  }
+}
diff --git a/node_modules/tinyglobby/node_modules/picomatch/posix.js b/node_modules/tinyglobby/node_modules/picomatch/posix.js
new file mode 100644
index 0000000000000..d2f2bc59d0ac7
--- /dev/null
+++ b/node_modules/tinyglobby/node_modules/picomatch/posix.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./lib/picomatch');
diff --git a/node_modules/tinyglobby/package.json b/node_modules/tinyglobby/package.json
new file mode 100644
index 0000000000000..d30c599603a93
--- /dev/null
+++ b/node_modules/tinyglobby/package.json
@@ -0,0 +1,65 @@
+{
+  "name": "tinyglobby",
+  "version": "0.2.12",
+  "description": "A fast and minimal alternative to globby and fast-glob",
+  "main": "dist/index.js",
+  "module": "dist/index.mjs",
+  "types": "dist/index.d.ts",
+  "exports": {
+    "import": "./dist/index.mjs",
+    "require": "./dist/index.js"
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "author": "Superchupu",
+  "license": "MIT",
+  "keywords": [
+    "glob",
+    "patterns",
+    "fast",
+    "implementation"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/SuperchupuDev/tinyglobby.git"
+  },
+  "bugs": {
+    "url": "https://github.com/SuperchupuDev/tinyglobby/issues"
+  },
+  "homepage": "https://github.com/SuperchupuDev/tinyglobby#readme",
+  "funding": {
+    "url": "https://github.com/sponsors/SuperchupuDev"
+  },
+  "dependencies": {
+    "fdir": "^6.4.3",
+    "picomatch": "^4.0.2"
+  },
+  "devDependencies": {
+    "@biomejs/biome": "^1.9.4",
+    "@types/node": "^22.13.4",
+    "@types/picomatch": "^3.0.2",
+    "fs-fixture": "^2.7.0",
+    "tsup": "^8.3.6",
+    "typescript": "^5.7.3"
+  },
+  "engines": {
+    "node": ">=12.0.0"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "scripts": {
+    "build": "tsup",
+    "check": "biome check",
+    "format": "biome format --write",
+    "lint": "biome lint",
+    "lint:fix": "biome lint --fix --unsafe",
+    "test": "node --experimental-transform-types --test",
+    "test:coverage": "node --experimental-transform-types --test --experimental-test-coverage",
+    "test:only": "node --experimental-transform-types --test --test-only",
+    "typecheck": "tsc --noEmit"
+  }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index db8773e7edae5..4b03d6210985d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -98,7 +98,7 @@
         "archy": "~1.0.0",
         "cacache": "^19.0.1",
         "chalk": "^5.4.1",
-        "ci-info": "^4.1.0",
+        "ci-info": "^4.2.0",
         "cli-columns": "^4.0.0",
         "fastest-levenshtein": "^1.0.16",
         "fs-minipass": "^3.0.3",
@@ -124,7 +124,7 @@
         "minipass": "^7.1.1",
         "minipass-pipeline": "^1.2.4",
         "ms": "^2.1.2",
-        "node-gyp": "^11.1.0",
+        "node-gyp": "^11.2.0",
         "nopt": "^8.1.0",
         "normalize-package-data": "^7.0.0",
         "npm-audit-report": "^6.0.0",
@@ -810,9 +810,9 @@
       }
     },
     "docs/node_modules/micromark": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz",
-      "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+      "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
       "dev": true,
       "funding": [
         {
@@ -846,9 +846,9 @@
       }
     },
     "docs/node_modules/micromark-core-commonmark": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz",
-      "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+      "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
       "dev": true,
       "funding": [
         {
@@ -1344,9 +1344,9 @@
       }
     },
     "docs/node_modules/micromark-util-subtokenize": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz",
-      "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+      "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
       "dev": true,
       "funding": [
         {
@@ -1384,9 +1384,9 @@
       "license": "MIT"
     },
     "docs/node_modules/micromark-util-types": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz",
-      "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+      "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
       "dev": true,
       "funding": [
         {
@@ -1823,9 +1823,9 @@
       }
     },
     "docs/node_modules/tr46": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
-      "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz",
+      "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1976,13 +1976,13 @@
       }
     },
     "docs/node_modules/whatwg-url": {
-      "version": "14.1.1",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.1.tgz",
-      "integrity": "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==",
+      "version": "14.2.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+      "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "tr46": "^5.0.0",
+        "tr46": "^5.1.0",
         "webidl-conversions": "^7.0.0"
       },
       "engines": {
@@ -2204,9 +2204,9 @@
       }
     },
     "node_modules/@actions/http-client/node_modules/undici": {
-      "version": "5.28.5",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz",
-      "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==",
+      "version": "5.29.0",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
+      "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2238,14 +2238,14 @@
       }
     },
     "node_modules/@asamuzakjp/css-color": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz",
-      "integrity": "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz",
+      "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@csstools/css-calc": "^2.1.1",
-        "@csstools/css-color-parser": "^3.0.7",
+        "@csstools/css-calc": "^2.1.2",
+        "@csstools/css-color-parser": "^3.0.8",
         "@csstools/css-parser-algorithms": "^3.0.4",
         "@csstools/css-tokenizer": "^3.0.3",
         "lru-cache": "^10.4.3"
@@ -2277,22 +2277,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
-      "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
+      "version": "7.26.10",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
+      "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
+        "@babel/generator": "^7.26.10",
         "@babel/helper-compilation-targets": "^7.26.5",
         "@babel/helper-module-transforms": "^7.26.0",
-        "@babel/helpers": "^7.26.9",
-        "@babel/parser": "^7.26.9",
+        "@babel/helpers": "^7.26.10",
+        "@babel/parser": "^7.26.10",
         "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.9",
-        "@babel/types": "^7.26.9",
+        "@babel/traverse": "^7.26.10",
+        "@babel/types": "^7.26.10",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -2325,14 +2325,14 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
-      "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
+      "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9",
+        "@babel/parser": "^7.27.0",
+        "@babel/types": "^7.27.0",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^3.0.2"
@@ -2342,13 +2342,13 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.26.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
-      "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz",
+      "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.26.5",
+        "@babel/compat-data": "^7.26.8",
         "@babel/helper-validator-option": "^7.25.9",
         "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
@@ -2448,27 +2448,27 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
-      "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
+      "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9"
+        "@babel/template": "^7.27.0",
+        "@babel/types": "^7.27.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
-      "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+      "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.26.9"
+        "@babel/types": "^7.27.0"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -2478,32 +2478,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
-      "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
+      "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.26.2",
-        "@babel/parser": "^7.26.9",
-        "@babel/types": "^7.26.9"
+        "@babel/parser": "^7.27.0",
+        "@babel/types": "^7.27.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
-      "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
+      "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.26.2",
-        "@babel/generator": "^7.26.9",
-        "@babel/parser": "^7.26.9",
-        "@babel/template": "^7.26.9",
-        "@babel/types": "^7.26.9",
+        "@babel/generator": "^7.27.0",
+        "@babel/parser": "^7.27.0",
+        "@babel/template": "^7.27.0",
+        "@babel/types": "^7.27.0",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2522,9 +2522,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.26.9",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
-      "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
+      "version": "7.27.0",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+      "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2547,17 +2547,17 @@
       }
     },
     "node_modules/@commitlint/cli": {
-      "version": "19.7.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.7.1.tgz",
-      "integrity": "sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.0.tgz",
+      "integrity": "sha512-t/fCrLVu+Ru01h0DtlgHZXbHV2Y8gKocTR5elDOqIRUzQd0/6hpt2VIWOj9b3NDo7y4/gfxeR2zRtXq/qO6iUg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/format": "^19.5.0",
-        "@commitlint/lint": "^19.7.1",
-        "@commitlint/load": "^19.6.1",
-        "@commitlint/read": "^19.5.0",
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/format": "^19.8.0",
+        "@commitlint/lint": "^19.8.0",
+        "@commitlint/load": "^19.8.0",
+        "@commitlint/read": "^19.8.0",
+        "@commitlint/types": "^19.8.0",
         "tinyexec": "^0.3.0",
         "yargs": "^17.0.0"
       },
@@ -2569,13 +2569,13 @@
       }
     },
     "node_modules/@commitlint/config-conventional": {
-      "version": "19.7.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.7.1.tgz",
-      "integrity": "sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.0.tgz",
+      "integrity": "sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "conventional-changelog-conventionalcommits": "^7.0.2"
       },
       "engines": {
@@ -2583,13 +2583,13 @@
       }
     },
     "node_modules/@commitlint/config-validator": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz",
-      "integrity": "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.0.tgz",
+      "integrity": "sha512-+r5ZvD/0hQC3w5VOHJhGcCooiAVdynFlCe2d6I9dU+PvXdV3O+fU4vipVg+6hyLbQUuCH82mz3HnT/cBQTYYuA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "ajv": "^8.11.0"
       },
       "engines": {
@@ -2597,13 +2597,13 @@
       }
     },
     "node_modules/@commitlint/ensure": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.5.0.tgz",
-      "integrity": "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.0.tgz",
+      "integrity": "sha512-kNiNU4/bhEQ/wutI1tp1pVW1mQ0QbAjfPRo5v8SaxoVV+ARhkB8Wjg3BSseNYECPzWWfg/WDqQGIfV1RaBFQZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "lodash.camelcase": "^4.3.0",
         "lodash.kebabcase": "^4.1.1",
         "lodash.snakecase": "^4.1.1",
@@ -2615,9 +2615,9 @@
       }
     },
     "node_modules/@commitlint/execute-rule": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz",
-      "integrity": "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.0.tgz",
+      "integrity": "sha512-fuLeI+EZ9x2v/+TXKAjplBJWI9CNrHnyi5nvUQGQt4WRkww/d95oVRsc9ajpt4xFrFmqMZkd/xBQHZDvALIY7A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2625,13 +2625,13 @@
       }
     },
     "node_modules/@commitlint/format": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.5.0.tgz",
-      "integrity": "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.0.tgz",
+      "integrity": "sha512-EOpA8IERpQstxwp/WGnDArA7S+wlZDeTeKi98WMOvaDLKbjptuHWdOYYr790iO7kTCif/z971PKPI2PkWMfOxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "chalk": "^5.3.0"
       },
       "engines": {
@@ -2639,13 +2639,13 @@
       }
     },
     "node_modules/@commitlint/is-ignored": {
-      "version": "19.7.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.7.1.tgz",
-      "integrity": "sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.0.tgz",
+      "integrity": "sha512-L2Jv9yUg/I+jF3zikOV0rdiHUul9X3a/oU5HIXhAJLE2+TXTnEBfqYP9G5yMw/Yb40SnR764g4fyDK6WR2xtpw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "semver": "^7.6.0"
       },
       "engines": {
@@ -2653,32 +2653,32 @@
       }
     },
     "node_modules/@commitlint/lint": {
-      "version": "19.7.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.7.1.tgz",
-      "integrity": "sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.0.tgz",
+      "integrity": "sha512-+/NZKyWKSf39FeNpqhfMebmaLa1P90i1Nrb1SrA7oSU5GNN/lksA4z6+ZTnsft01YfhRZSYMbgGsARXvkr/VLQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/is-ignored": "^19.7.1",
-        "@commitlint/parse": "^19.5.0",
-        "@commitlint/rules": "^19.6.0",
-        "@commitlint/types": "^19.5.0"
+        "@commitlint/is-ignored": "^19.8.0",
+        "@commitlint/parse": "^19.8.0",
+        "@commitlint/rules": "^19.8.0",
+        "@commitlint/types": "^19.8.0"
       },
       "engines": {
         "node": ">=v18"
       }
     },
     "node_modules/@commitlint/load": {
-      "version": "19.6.1",
-      "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.6.1.tgz",
-      "integrity": "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.0.tgz",
+      "integrity": "sha512-4rvmm3ff81Sfb+mcWT5WKlyOa+Hd33WSbirTVUer0wjS1Hv/Hzr07Uv1ULIV9DkimZKNyOwXn593c+h8lsDQPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/config-validator": "^19.5.0",
-        "@commitlint/execute-rule": "^19.5.0",
-        "@commitlint/resolve-extends": "^19.5.0",
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/config-validator": "^19.8.0",
+        "@commitlint/execute-rule": "^19.8.0",
+        "@commitlint/resolve-extends": "^19.8.0",
+        "@commitlint/types": "^19.8.0",
         "chalk": "^5.3.0",
         "cosmiconfig": "^9.0.0",
         "cosmiconfig-typescript-loader": "^6.1.0",
@@ -2691,9 +2691,9 @@
       }
     },
     "node_modules/@commitlint/message": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.5.0.tgz",
-      "integrity": "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.0.tgz",
+      "integrity": "sha512-qs/5Vi9bYjf+ZV40bvdCyBn5DvbuelhR6qewLE8Bh476F7KnNyLfdM/ETJ4cp96WgeeHo6tesA2TMXS0sh5X4A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2701,13 +2701,13 @@
       }
     },
     "node_modules/@commitlint/parse": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.5.0.tgz",
-      "integrity": "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.0.tgz",
+      "integrity": "sha512-YNIKAc4EXvNeAvyeEnzgvm1VyAe0/b3Wax7pjJSwXuhqIQ1/t2hD3OYRXb6D5/GffIvaX82RbjD+nWtMZCLL7Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/types": "^19.8.0",
         "conventional-changelog-angular": "^7.0.0",
         "conventional-commits-parser": "^5.0.0"
       },
@@ -2716,14 +2716,14 @@
       }
     },
     "node_modules/@commitlint/read": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.5.0.tgz",
-      "integrity": "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.0.tgz",
+      "integrity": "sha512-6ywxOGYajcxK1y1MfzrOnwsXO6nnErna88gRWEl3qqOOP8MDu/DTeRkGLXBFIZuRZ7mm5yyxU5BmeUvMpNte5w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/top-level": "^19.5.0",
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/top-level": "^19.8.0",
+        "@commitlint/types": "^19.8.0",
         "git-raw-commits": "^4.0.0",
         "minimist": "^1.2.8",
         "tinyexec": "^0.3.0"
@@ -2733,14 +2733,14 @@
       }
     },
     "node_modules/@commitlint/resolve-extends": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz",
-      "integrity": "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.0.tgz",
+      "integrity": "sha512-CLanRQwuG2LPfFVvrkTrBR/L/DMy3+ETsgBqW1OvRxmzp/bbVJW0Xw23LnnExgYcsaFtos967lul1CsbsnJlzQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/config-validator": "^19.5.0",
-        "@commitlint/types": "^19.5.0",
+        "@commitlint/config-validator": "^19.8.0",
+        "@commitlint/types": "^19.8.0",
         "global-directory": "^4.0.1",
         "import-meta-resolve": "^4.0.0",
         "lodash.mergewith": "^4.6.2",
@@ -2751,25 +2751,25 @@
       }
     },
     "node_modules/@commitlint/rules": {
-      "version": "19.6.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.6.0.tgz",
-      "integrity": "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.0.tgz",
+      "integrity": "sha512-IZ5IE90h6DSWNuNK/cwjABLAKdy8tP8OgGVGbXe1noBEX5hSsu00uRlLu6JuruiXjWJz2dZc+YSw3H0UZyl/mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@commitlint/ensure": "^19.5.0",
-        "@commitlint/message": "^19.5.0",
-        "@commitlint/to-lines": "^19.5.0",
-        "@commitlint/types": "^19.5.0"
+        "@commitlint/ensure": "^19.8.0",
+        "@commitlint/message": "^19.8.0",
+        "@commitlint/to-lines": "^19.8.0",
+        "@commitlint/types": "^19.8.0"
       },
       "engines": {
         "node": ">=v18"
       }
     },
     "node_modules/@commitlint/to-lines": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.5.0.tgz",
-      "integrity": "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.0.tgz",
+      "integrity": "sha512-3CKLUw41Cur8VMjh16y8LcsOaKbmQjAKCWlXx6B0vOUREplp6em9uIVhI8Cv934qiwkbi2+uv+mVZPnXJi1o9A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2777,9 +2777,9 @@
       }
     },
     "node_modules/@commitlint/top-level": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.5.0.tgz",
-      "integrity": "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.0.tgz",
+      "integrity": "sha512-Rphgoc/omYZisoNkcfaBRPQr4myZEHhLPx2/vTXNLjiCw4RgfPR1wEgUpJ9OOmDCiv5ZyIExhprNLhteqH4FuQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2790,9 +2790,9 @@
       }
     },
     "node_modules/@commitlint/types": {
-      "version": "19.5.0",
-      "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz",
-      "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==",
+      "version": "19.8.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.0.tgz",
+      "integrity": "sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2930,9 +2930,9 @@
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-      "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+      "version": "4.5.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
+      "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -5049,13 +5049,13 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.13.5",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz",
-      "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==",
+      "version": "22.14.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz",
+      "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.20.0"
+        "undici-types": "~6.21.0"
       }
     },
     "node_modules/@types/normalize-package-data": {
@@ -5132,9 +5132,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.14.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+      "version": "8.14.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -5453,19 +5453,20 @@
       }
     },
     "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "call-bind": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
+        "es-abstract": "^1.23.9",
         "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
+        "es-object-atoms": "^1.1.1",
+        "es-shim-unscopables": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5812,14 +5813,13 @@
       }
     },
     "node_modules/cacache/node_modules/minizlib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
-      "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^7.0.4",
-        "rimraf": "^5.0.5"
+        "minipass": "^7.1.2"
       },
       "engines": {
         "node": ">= 18"
@@ -5940,15 +5940,15 @@
       }
     },
     "node_modules/call-bound": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
-      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "get-intrinsic": "^1.2.6"
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -6003,9 +6003,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001701",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz",
-      "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==",
+      "version": "1.0.30001709",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz",
+      "integrity": "sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA==",
       "dev": true,
       "funding": [
         {
@@ -6129,9 +6129,9 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz",
-      "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
+      "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
       "funding": [
         {
           "type": "github",
@@ -6798,13 +6798,13 @@
       }
     },
     "node_modules/cssstyle": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz",
-      "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz",
+      "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@asamuzakjp/css-color": "^2.8.2",
+        "@asamuzakjp/css-color": "^3.1.1",
         "rrweb-cssom": "^0.8.0"
       },
       "engines": {
@@ -6846,9 +6846,9 @@
       }
     },
     "node_modules/data-urls/node_modules/tr46": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
-      "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz",
+      "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6869,13 +6869,13 @@
       }
     },
     "node_modules/data-urls/node_modules/whatwg-url": {
-      "version": "14.1.1",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.1.tgz",
-      "integrity": "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==",
+      "version": "14.2.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+      "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "tr46": "^5.0.0",
+        "tr46": "^5.1.0",
         "webidl-conversions": "^7.0.0"
       },
       "engines": {
@@ -7012,9 +7012,9 @@
       "license": "MIT"
     },
     "node_modules/decode-named-character-reference": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
-      "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
+      "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7278,9 +7278,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.105",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.105.tgz",
-      "integrity": "sha512-ccp7LocdXx3yBhwiG0qTQ7XFrK48Ua2pxIxBdJO8cbddp/MvbBtPFzvnTchtyHQTsgqqczO8cdmAIbpMa0u2+g==",
+      "version": "1.5.130",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.130.tgz",
+      "integrity": "sha512-Ou2u7L9j2XLZbhqzyX0jWDj6gA8D3jIfVzt4rikLf3cGBa0VdReuFimBKS9tQJA4+XpeCxj1NoWlfBXzbMa9IA==",
       "dev": true,
       "license": "ISC"
     },
@@ -11918,9 +11918,9 @@
       }
     },
     "node_modules/minipass-fetch": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.0.tgz",
-      "integrity": "sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz",
+      "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
@@ -11936,14 +11936,13 @@
       }
     },
     "node_modules/minipass-fetch/node_modules/minizlib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
-      "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^7.0.4",
-        "rimraf": "^5.0.5"
+        "minipass": "^7.1.2"
       },
       "engines": {
         "node": ">= 18"
@@ -12206,21 +12205,21 @@
       }
     },
     "node_modules/node-gyp": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.1.0.tgz",
-      "integrity": "sha512-/+7TuHKnBpnMvUQnsYEb0JOozDZqarQbfNuSGLXIjhStMT0fbw7IdSqWgopOP5xhRZE+lsbIvAHcekddruPZgQ==",
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz",
+      "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
         "env-paths": "^2.2.0",
         "exponential-backoff": "^3.1.1",
-        "glob": "^10.3.10",
         "graceful-fs": "^4.2.6",
         "make-fetch-happen": "^14.0.3",
         "nopt": "^8.0.0",
         "proc-log": "^5.0.0",
         "semver": "^7.3.5",
         "tar": "^7.4.3",
+        "tinyglobby": "^0.2.12",
         "which": "^5.0.0"
       },
       "bin": {
@@ -12241,14 +12240,13 @@
       }
     },
     "node_modules/node-gyp/node_modules/minizlib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
-      "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^7.0.4",
-        "rimraf": "^5.0.5"
+        "minipass": "^7.1.2"
       },
       "engines": {
         "node": ">= 18"
@@ -12496,14 +12494,13 @@
       }
     },
     "node_modules/npm-registry-fetch/node_modules/minizlib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
-      "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "minipass": "^7.0.4",
-        "rimraf": "^5.0.5"
+        "minipass": "^7.1.2"
       },
       "engines": {
         "node": ">= 18"
@@ -12533,9 +12530,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.16",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
-      "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+      "version": "2.2.20",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+      "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
       "dev": true,
       "license": "MIT"
     },
@@ -14263,7 +14260,7 @@
       "version": "5.0.10",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
       "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
-      "inBundle": true,
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "glob": "^10.3.7"
@@ -17582,6 +17579,51 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/tinyglobby": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
+      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
+      "inBundle": true,
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.4.3",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/tinyglobby/node_modules/fdir": {
+      "version": "6.4.3",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+      "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+      "inBundle": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/tinyglobby/node_modules/picomatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+      "inBundle": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -17838,9 +17880,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.7.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
-      "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+      "version": "5.8.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+      "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
       "dev": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -17887,9 +17929,9 @@
       }
     },
     "node_modules/undici": {
-      "version": "6.21.1",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz",
-      "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==",
+      "version": "6.21.2",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz",
+      "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -17897,9 +17939,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.20.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
-      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+      "version": "6.21.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -18082,9 +18124,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
-      "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
       "dev": true,
       "funding": [
         {
@@ -18425,17 +18467,18 @@
       "license": "ISC"
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.18",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
-      "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
+      "version": "1.1.19",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+      "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
         "available-typed-arrays": "^1.0.7",
         "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "for-each": "^0.3.3",
+        "call-bound": "^1.0.4",
+        "for-each": "^0.3.5",
+        "get-proto": "^1.0.1",
         "gopd": "^1.2.0",
         "has-tostringtag": "^1.0.2"
       },
@@ -18668,9 +18711,9 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
-      "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
+      "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
       "dev": true,
       "license": "ISC",
       "bin": {
@@ -18710,9 +18753,9 @@
       }
     },
     "node_modules/yocto-queue": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
-      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+      "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -18743,6 +18786,7 @@
         "@npmcli/promise-spawn": "^8.0.1",
         "@npmcli/template-oss": "4.23.6",
         "proxy": "^2.1.1",
+        "rimraf": "^6.0.1",
         "tap": "^16.3.8",
         "which": "^5.0.0"
       },
@@ -18750,6 +18794,109 @@
         "node": "^20.17.0 || >=22.9.0"
       }
     },
+    "smoke-tests/node_modules/glob": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
+      "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^4.0.1",
+        "minimatch": "^10.0.0",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^2.0.0"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "smoke-tests/node_modules/jackspeak": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz",
+      "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "smoke-tests/node_modules/lru-cache": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
+      "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "smoke-tests/node_modules/minimatch": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+      "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "smoke-tests/node_modules/path-scurry": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^11.0.0",
+        "minipass": "^7.1.2"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "smoke-tests/node_modules/rimraf": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz",
+      "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^11.0.0",
+        "package-json-from-dist": "^1.0.0"
+      },
+      "bin": {
+        "rimraf": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "workspaces/arborist": {
       "name": "@npmcli/arborist",
       "version": "9.0.1",
diff --git a/package.json b/package.json
index 23204fabb664f..5fb934d221275 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
     "archy": "~1.0.0",
     "cacache": "^19.0.1",
     "chalk": "^5.4.1",
-    "ci-info": "^4.1.0",
+    "ci-info": "^4.2.0",
     "cli-columns": "^4.0.0",
     "fastest-levenshtein": "^1.0.16",
     "fs-minipass": "^3.0.3",
@@ -91,7 +91,7 @@
     "minipass": "^7.1.1",
     "minipass-pipeline": "^1.2.4",
     "ms": "^2.1.2",
-    "node-gyp": "^11.1.0",
+    "node-gyp": "^11.2.0",
     "nopt": "^8.1.0",
     "normalize-package-data": "^7.0.0",
     "npm-audit-report": "^6.0.0",
diff --git a/smoke-tests/package.json b/smoke-tests/package.json
index 913aa28c405a1..8571b794f1e2b 100644
--- a/smoke-tests/package.json
+++ b/smoke-tests/package.json
@@ -24,6 +24,7 @@
     "@npmcli/promise-spawn": "^8.0.1",
     "@npmcli/template-oss": "4.23.6",
     "proxy": "^2.1.1",
+    "rimraf": "^6.0.1",
     "tap": "^16.3.8",
     "which": "^5.0.0"
   },
diff --git a/smoke-tests/test/large-install.js b/smoke-tests/test/large-install.js
index 460205c673182..c7bf74affff2a 100644
--- a/smoke-tests/test/large-install.js
+++ b/smoke-tests/test/large-install.js
@@ -31,7 +31,7 @@ t.test('large install', async t => {
   const { stdout } = await runTest(t)
   // As a bonus this test asserts that this package-lock always
   // installs the same number of packages.
-  t.match(stdout, `added 126${process.platform === 'linux' ? 4 : 5} packages in`)
+  t.match(stdout, `added 130${process.platform === 'win32' ? 7 : 6} packages in`)
 })
 
 t.test('large install, no lock and low memory', async t => {
