Commit 24d41a1

Anton Golub <antongolub@antongolub.com>
2025-11-21 16:16:27
chore: update deps (#1368)
globby → 16.0.0 which → 6.0.0
1 parent 9c6cb9b
build/3rd-party-licenses
@@ -70,7 +70,7 @@ glob-parent@5.1.2
   gulpjs/glob-parent
   ISC
 
-globby@15.0.0
+globby@16.0.0
   Sindre Sorhus <sindresorhus@gmail.com>
   sindresorhus/globby
   MIT
@@ -85,6 +85,11 @@ is-glob@4.0.3
   micromatch/is-glob
   MIT
 
+is-path-inside@4.0.0
+  Sindre Sorhus <sindresorhus@gmail.com>
+  sindresorhus/is-path-inside
+  MIT
+
 isexe@3.1.1
   Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)
   https://github.com/isaacs/isexe
@@ -115,11 +120,6 @@ node-fetch-native@1.6.7
   unjs/node-fetch-native
   MIT
 
-path-type@6.0.0
-  Sindre Sorhus <sindresorhus@gmail.com>
-  sindresorhus/path-type
-  MIT
-
 picomatch@2.3.1
   Jon Schlinkert (https://github.com/jonschlinkert)
   micromatch/picomatch
@@ -135,12 +135,12 @@ to-regex-range@5.0.1
   micromatch/to-regex-range
   MIT
 
-unicorn-magic@0.3.0
+unicorn-magic@0.4.0
   Sindre Sorhus <sindresorhus@gmail.com>
   sindresorhus/unicorn-magic
   MIT
 
-which@5.0.0
+which@6.0.0
   GitHub Inc.
   git+https://github.com/npm/node-which.git
   ISC
build/index.cjs
@@ -61,10 +61,10 @@ var versions = {
   dotenv: "0.2.3",
   fetch: "1.6.7",
   fs: "11.3.2",
-  glob: "15.0.0",
+  glob: "16.0.0",
   minimist: "1.2.8",
   ps: "1.0.0",
-  which: "5.0.0",
+  which: "6.0.0",
   yaml: "2.8.1"
 };
 
build/vendor-extra.cjs
@@ -90,7 +90,7 @@ var require_path = __commonJS({
     Object.defineProperty(exports2, "__esModule", { value: true });
     exports2.convertPosixPathToPattern = exports2.convertWindowsPathToPattern = exports2.convertPathToPattern = exports2.escapePosixPath = exports2.escapeWindowsPath = exports2.escape = exports2.removeLeadingDotSegment = exports2.makeAbsolute = exports2.unixify = void 0;
     var os = require("os");
-    var path3 = require("path");
+    var path5 = require("path");
     var IS_WINDOWS_PLATFORM = os.platform() === "win32";
     var LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2;
     var POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g;
@@ -102,7 +102,7 @@ var require_path = __commonJS({
     }
     exports2.unixify = unixify;
     function makeAbsolute(cwd, filepath) {
-      return path3.resolve(cwd, filepath);
+      return path5.resolve(cwd, filepath);
     }
     exports2.makeAbsolute = makeAbsolute;
     function removeLeadingDotSegment(entry) {
@@ -1401,7 +1401,7 @@ var require_braces = __commonJS({
 var require_constants2 = __commonJS({
   "node_modules/picomatch/lib/constants.js"(exports2, module2) {
     "use strict";
-    var path3 = require("path");
+    var path5 = require("path");
     var WIN_SLASH = "\\\\/";
     var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
     var DOT_LITERAL = "\\.";
@@ -1570,7 +1570,7 @@ var require_constants2 = __commonJS({
       /* | */
       CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
       /* \uFEFF */
-      SEP: path3.sep,
+      SEP: path5.sep,
       /**
        * Create EXTGLOB_CHARS
        */
@@ -1597,7 +1597,7 @@ var require_constants2 = __commonJS({
 var require_utils2 = __commonJS({
   "node_modules/picomatch/lib/utils.js"(exports2) {
     "use strict";
-    var path3 = require("path");
+    var path5 = require("path");
     var win32 = process.platform === "win32";
     var {
       REGEX_BACKSLASH,
@@ -1626,7 +1626,7 @@ var require_utils2 = __commonJS({
       if (options && typeof options.windows === "boolean") {
         return options.windows;
       }
-      return win32 === true || path3.sep === "\\";
+      return win32 === true || path5.sep === "\\";
     };
     exports2.escapeLast = (input, char, lastIdx) => {
       const idx = input.lastIndexOf(char, lastIdx);
@@ -2761,7 +2761,7 @@ var require_parse2 = __commonJS({
 var require_picomatch = __commonJS({
   "node_modules/picomatch/lib/picomatch.js"(exports2, module2) {
     "use strict";
-    var path3 = require("path");
+    var path5 = require("path");
     var scan = require_scan();
     var parse4 = require_parse2();
     var utils = require_utils2();
@@ -2846,7 +2846,7 @@ var require_picomatch = __commonJS({
     };
     picomatch.matchBase = (input, glob2, options, posix = utils.isWindows(options)) => {
       const regex = glob2 instanceof RegExp ? glob2 : picomatch.makeRe(glob2, options);
-      return regex.test(path3.basename(input));
+      return regex.test(path5.basename(input));
     };
     picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
     picomatch.parse = (pattern, options) => {
@@ -3073,7 +3073,7 @@ var require_pattern = __commonJS({
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
     exports2.isAbsolute = exports2.partitionAbsoluteAndRelative = exports2.removeDuplicateSlashes = exports2.matchAny = exports2.convertPatternsToRe = exports2.makeRe = exports2.getPatternParts = exports2.expandBraceExpansion = exports2.expandPatternsWithBraceExpansion = exports2.isAffectDepthOfReadingPattern = exports2.endsWithSlashGlobStar = exports2.hasGlobStar = exports2.getBaseDirectory = exports2.isPatternRelatedToParentDirectory = exports2.getPatternsOutsideCurrentDirectory = exports2.getPatternsInsideCurrentDirectory = exports2.getPositivePatterns = exports2.getNegativePatterns = exports2.isPositivePattern = exports2.isNegativePattern = exports2.convertToNegativePattern = exports2.convertToPositivePattern = exports2.isDynamicPattern = exports2.isStaticPattern = void 0;
-    var path3 = require("path");
+    var path5 = require("path");
     var globParent = require_glob_parent();
     var micromatch = require_micromatch();
     var GLOBSTAR = "**";
@@ -3168,7 +3168,7 @@ var require_pattern = __commonJS({
     }
     exports2.endsWithSlashGlobStar = endsWithSlashGlobStar;
     function isAffectDepthOfReadingPattern(pattern) {
-      const basename = path3.basename(pattern);
+      const basename = path5.basename(pattern);
       return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
     }
     exports2.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
@@ -3226,7 +3226,7 @@ var require_pattern = __commonJS({
     }
     exports2.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;
     function isAbsolute(pattern) {
-      return path3.isAbsolute(pattern);
+      return path5.isAbsolute(pattern);
     }
     exports2.isAbsolute = isAbsolute;
   }
@@ -3403,8 +3403,8 @@ var require_utils3 = __commonJS({
     exports2.errno = errno;
     var fs6 = require_fs();
     exports2.fs = fs6;
-    var path3 = require_path();
-    exports2.path = path3;
+    var path5 = require_path();
+    exports2.path = path5;
     var pattern = require_pattern();
     exports2.pattern = pattern;
     var stream = require_stream();
@@ -3516,8 +3516,8 @@ var require_async = __commonJS({
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
     exports2.read = void 0;
-    function read(path3, settings, callback) {
-      settings.fs.lstat(path3, (lstatError, lstat) => {
+    function read(path5, settings, callback) {
+      settings.fs.lstat(path5, (lstatError, lstat) => {
         if (lstatError !== null) {
           callFailureCallback(callback, lstatError);
           return;
@@ -3526,7 +3526,7 @@ var require_async = __commonJS({
           callSuccessCallback(callback, lstat);
           return;
         }
-        settings.fs.stat(path3, (statError, stat) => {
+        settings.fs.stat(path5, (statError, stat) => {
           if (statError !== null) {
             if (settings.throwErrorOnBrokenSymbolicLink) {
               callFailureCallback(callback, statError);
@@ -3558,13 +3558,13 @@ var require_sync = __commonJS({
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
     exports2.read = void 0;
-    function read(path3, settings) {
-      const lstat = settings.fs.lstatSync(path3);
+    function read(path5, settings) {
+      const lstat = settings.fs.lstatSync(path5);
       if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
         return lstat;
       }
       try {
-        const stat = settings.fs.statSync(path3);
+        const stat = settings.fs.statSync(path5);
         if (settings.markSymbolicLink) {
           stat.isSymbolicLink = () => true;
         }
@@ -3635,17 +3635,17 @@ var require_out = __commonJS({
     var sync = require_sync();
     var settings_1 = require_settings();
     exports2.Settings = settings_1.default;
-    function stat(path3, optionsOrSettingsOrCallback, callback) {
+    function stat(path5, optionsOrSettingsOrCallback, callback) {
       if (typeof optionsOrSettingsOrCallback === "function") {
-        async.read(path3, getSettings(), optionsOrSettingsOrCallback);
+        async.read(path5, getSettings(), optionsOrSettingsOrCallback);
         return;
       }
-      async.read(path3, getSettings(optionsOrSettingsOrCallback), callback);
+      async.read(path5, getSettings(optionsOrSettingsOrCallback), callback);
     }
     exports2.stat = stat;
-    function statSync(path3, optionsOrSettings) {
+    function statSync(path5, optionsOrSettings) {
       const settings = getSettings(optionsOrSettings);
-      return sync.read(path3, settings);
+      return sync.read(path5, settings);
     }
     exports2.statSync = statSync;
     function getSettings(settingsOrOptions = {}) {
@@ -3863,16 +3863,16 @@ var require_async2 = __commonJS({
           return;
         }
         const tasks = names.map((name) => {
-          const path3 = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
+          const path5 = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
           return (done) => {
-            fsStat.stat(path3, settings.fsStatSettings, (error, stats) => {
+            fsStat.stat(path5, settings.fsStatSettings, (error, stats) => {
               if (error !== null) {
                 done(error);
                 return;
               }
               const entry = {
                 name,
-                path: path3,
+                path: path5,
                 dirent: utils.fs.createDirentFromStats(name, stats)
               };
               if (settings.stats) {
@@ -3990,7 +3990,7 @@ var require_settings2 = __commonJS({
   "node_modules/@nodelib/fs.scandir/out/settings.js"(exports2) {
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
-    var path3 = require("path");
+    var path5 = require("path");
     var fsStat = require_out();
     var fs6 = require_fs4();
     var Settings = class {
@@ -3998,7 +3998,7 @@ var require_settings2 = __commonJS({
         this._options = _options;
         this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
         this.fs = fs6.createFileSystemAdapter(this._options.fs);
-        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path3.sep);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path5.sep);
         this.stats = this._getValue(this._options.stats, false);
         this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
         this.fsStatSettings = new fsStat.Settings({
@@ -4025,17 +4025,17 @@ var require_out2 = __commonJS({
     var sync = require_sync2();
     var settings_1 = require_settings2();
     exports2.Settings = settings_1.default;
-    function scandir(path3, optionsOrSettingsOrCallback, callback) {
+    function scandir(path5, optionsOrSettingsOrCallback, callback) {
       if (typeof optionsOrSettingsOrCallback === "function") {
-        async.read(path3, getSettings(), optionsOrSettingsOrCallback);
+        async.read(path5, getSettings(), optionsOrSettingsOrCallback);
         return;
       }
-      async.read(path3, getSettings(optionsOrSettingsOrCallback), callback);
+      async.read(path5, getSettings(optionsOrSettingsOrCallback), callback);
     }
     exports2.scandir = scandir;
-    function scandirSync(path3, optionsOrSettings) {
+    function scandirSync(path5, optionsOrSettings) {
       const settings = getSettings(optionsOrSettings);
-      return sync.read(path3, settings);
+      return sync.read(path5, settings);
     }
     exports2.scandirSync = scandirSync;
     function getSettings(settingsOrOptions = {}) {
@@ -4659,7 +4659,7 @@ var require_settings3 = __commonJS({
   "node_modules/@nodelib/fs.walk/out/settings.js"(exports2) {
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
-    var path3 = require("path");
+    var path5 = require("path");
     var fsScandir = require_out2();
     var Settings = class {
       constructor(_options = {}) {
@@ -4669,7 +4669,7 @@ var require_settings3 = __commonJS({
         this.deepFilter = this._getValue(this._options.deepFilter, null);
         this.entryFilter = this._getValue(this._options.entryFilter, null);
         this.errorFilter = this._getValue(this._options.errorFilter, null);
-        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path3.sep);
+        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path5.sep);
         this.fsScandirSettings = new fsScandir.Settings({
           followSymbolicLinks: this._options.followSymbolicLinks,
           fs: this._options.fs,
@@ -4731,7 +4731,7 @@ var require_reader2 = __commonJS({
   "node_modules/fast-glob/out/readers/reader.js"(exports2) {
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
-    var path3 = require("path");
+    var path5 = require("path");
     var fsStat = require_out();
     var utils = require_utils3();
     var Reader = class {
@@ -4744,7 +4744,7 @@ var require_reader2 = __commonJS({
         });
       }
       _getFullEntryPath(filepath) {
-        return path3.resolve(this._settings.cwd, filepath);
+        return path5.resolve(this._settings.cwd, filepath);
       }
       _makeEntry(stats, pattern) {
         const entry = {
@@ -5162,7 +5162,7 @@ var require_provider = __commonJS({
   "node_modules/fast-glob/out/providers/provider.js"(exports2) {
     "use strict";
     Object.defineProperty(exports2, "__esModule", { value: true });
-    var path3 = require("path");
+    var path5 = require("path");
     var deep_1 = require_deep();
     var entry_1 = require_entry();
     var error_1 = require_error();
@@ -5176,7 +5176,7 @@ var require_provider = __commonJS({
         this.entryTransformer = new entry_2.default(this._settings);
       }
       _getRootDirectory(task) {
-        return path3.resolve(this._settings.cwd, task.base);
+        return path5.resolve(this._settings.cwd, task.base);
       }
       _getReaderOptions(task) {
         const basePath = task.base === "." ? "" : task.base;
@@ -5814,7 +5814,7 @@ var require_ignore = __commonJS({
       //   path matching.
       // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE`
       // @returns {TestResult} true if a file is ignored
-      test(path3, checkUnignored, mode) {
+      test(path5, checkUnignored, mode) {
         let ignored = false;
         let unignored = false;
         let matchedRule;
@@ -5823,7 +5823,7 @@ var require_ignore = __commonJS({
           if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {
             return;
           }
-          const matched = rule[mode].test(path3);
+          const matched = rule[mode].test(path5);
           if (!matched) {
             return;
           }
@@ -5844,17 +5844,17 @@ var require_ignore = __commonJS({
     var throwError = (message, Ctor) => {
       throw new Ctor(message);
     };
-    var checkPath = (path3, originalPath, doThrow) => {
-      if (!isString(path3)) {
+    var checkPath = (path5, originalPath, doThrow) => {
+      if (!isString(path5)) {
         return doThrow(
           `path must be a string, but got \`${originalPath}\``,
           TypeError
         );
       }
-      if (!path3) {
+      if (!path5) {
         return doThrow(`path must not be empty`, TypeError);
       }
-      if (checkPath.isNotRelative(path3)) {
+      if (checkPath.isNotRelative(path5)) {
         const r2 = "`path.relative()`d";
         return doThrow(
           `path should be a ${r2} string, but got "${originalPath}"`,
@@ -5863,7 +5863,7 @@ var require_ignore = __commonJS({
       }
       return true;
     };
-    var isNotRelative = (path3) => REGEX_TEST_INVALID_PATH.test(path3);
+    var isNotRelative = (path5) => REGEX_TEST_INVALID_PATH.test(path5);
     checkPath.isNotRelative = isNotRelative;
     checkPath.convert = (p2) => p2;
     var Ignore = class {
@@ -5893,19 +5893,19 @@ var require_ignore = __commonJS({
       }
       // @returns {TestResult}
       _test(originalPath, cache, checkUnignored, slices) {
-        const path3 = originalPath && checkPath.convert(originalPath);
+        const path5 = originalPath && checkPath.convert(originalPath);
         checkPath(
-          path3,
+          path5,
           originalPath,
           this._strictPathCheck ? throwError : RETURN_FALSE
         );
-        return this._t(path3, cache, checkUnignored, slices);
+        return this._t(path5, cache, checkUnignored, slices);
       }
-      checkIgnore(path3) {
-        if (!REGEX_TEST_TRAILING_SLASH.test(path3)) {
-          return this.test(path3);
+      checkIgnore(path5) {
+        if (!REGEX_TEST_TRAILING_SLASH.test(path5)) {
+          return this.test(path5);
         }
-        const slices = path3.split(SLASH).filter(Boolean);
+        const slices = path5.split(SLASH).filter(Boolean);
         slices.pop();
         if (slices.length) {
           const parent = this._t(
@@ -5918,18 +5918,18 @@ var require_ignore = __commonJS({
             return parent;
           }
         }
-        return this._rules.test(path3, false, MODE_CHECK_IGNORE);
+        return this._rules.test(path5, false, MODE_CHECK_IGNORE);
       }
-      _t(path3, cache, checkUnignored, slices) {
-        if (path3 in cache) {
-          return cache[path3];
+      _t(path5, cache, checkUnignored, slices) {
+        if (path5 in cache) {
+          return cache[path5];
         }
         if (!slices) {
-          slices = path3.split(SLASH).filter(Boolean);
+          slices = path5.split(SLASH).filter(Boolean);
         }
         slices.pop();
         if (!slices.length) {
-          return cache[path3] = this._rules.test(path3, checkUnignored, MODE_IGNORE);
+          return cache[path5] = this._rules.test(path5, checkUnignored, MODE_IGNORE);
         }
         const parent = this._t(
           slices.join(SLASH) + SLASH,
@@ -5937,29 +5937,29 @@ var require_ignore = __commonJS({
           checkUnignored,
           slices
         );
-        return cache[path3] = parent.ignored ? parent : this._rules.test(path3, checkUnignored, MODE_IGNORE);
+        return cache[path5] = parent.ignored ? parent : this._rules.test(path5, checkUnignored, MODE_IGNORE);
       }
-      ignores(path3) {
-        return this._test(path3, this._ignoreCache, false).ignored;
+      ignores(path5) {
+        return this._test(path5, this._ignoreCache, false).ignored;
       }
       createFilter() {
-        return (path3) => !this.ignores(path3);
+        return (path5) => !this.ignores(path5);
       }
       filter(paths) {
         return makeArray(paths).filter(this.createFilter());
       }
       // @returns {TestResult}
-      test(path3) {
-        return this._test(path3, this._testCache, true);
+      test(path5) {
+        return this._test(path5, this._testCache, true);
       }
     };
     var factory = (options) => new Ignore(options);
-    var isPathValid = (path3) => checkPath(path3 && checkPath.convert(path3), path3, RETURN_FALSE);
+    var isPathValid = (path5) => checkPath(path5 && checkPath.convert(path5), path5, RETURN_FALSE);
     var setupWindows = () => {
       const makePosix = (str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/");
       checkPath.convert = makePosix;
       const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
-      checkPath.isNotRelative = (path3) => REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path3) || isNotRelative(path3);
+      checkPath.isNotRelative = (path5) => REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path5) || isNotRelative(path5);
     };
     if (
       // Detect `process` so that it can run in browsers.
@@ -6055,14 +6055,14 @@ var require_polyfills = __commonJS({
       fs6.fstatSync = statFixSync(fs6.fstatSync);
       fs6.lstatSync = statFixSync(fs6.lstatSync);
       if (fs6.chmod && !fs6.lchmod) {
-        fs6.lchmod = function(path3, mode, cb) {
+        fs6.lchmod = function(path5, mode, cb) {
           if (cb) process.nextTick(cb);
         };
         fs6.lchmodSync = function() {
         };
       }
       if (fs6.chown && !fs6.lchown) {
-        fs6.lchown = function(path3, uid, gid, cb) {
+        fs6.lchown = function(path5, uid, gid, cb) {
           if (cb) process.nextTick(cb);
         };
         fs6.lchownSync = function() {
@@ -6129,9 +6129,9 @@ var require_polyfills = __commonJS({
         };
       })(fs6.readSync);
       function patchLchmod(fs7) {
-        fs7.lchmod = function(path3, mode, callback) {
+        fs7.lchmod = function(path5, mode, callback) {
           fs7.open(
-            path3,
+            path5,
             constants.O_WRONLY | constants.O_SYMLINK,
             mode,
             function(err, fd) {
@@ -6147,8 +6147,8 @@ var require_polyfills = __commonJS({
             }
           );
         };
-        fs7.lchmodSync = function(path3, mode) {
-          var fd = fs7.openSync(path3, constants.O_WRONLY | constants.O_SYMLINK, mode);
+        fs7.lchmodSync = function(path5, mode) {
+          var fd = fs7.openSync(path5, constants.O_WRONLY | constants.O_SYMLINK, mode);
           var threw = true;
           var ret;
           try {
@@ -6169,8 +6169,8 @@ var require_polyfills = __commonJS({
       }
       function patchLutimes(fs7) {
         if (constants.hasOwnProperty("O_SYMLINK") && fs7.futimes) {
-          fs7.lutimes = function(path3, at, mt2, cb) {
-            fs7.open(path3, constants.O_SYMLINK, function(er, fd) {
+          fs7.lutimes = function(path5, at, mt2, cb) {
+            fs7.open(path5, constants.O_SYMLINK, function(er, fd) {
               if (er) {
                 if (cb) cb(er);
                 return;
@@ -6182,8 +6182,8 @@ var require_polyfills = __commonJS({
               });
             });
           };
-          fs7.lutimesSync = function(path3, at, mt2) {
-            var fd = fs7.openSync(path3, constants.O_SYMLINK);
+          fs7.lutimesSync = function(path5, at, mt2) {
+            var fd = fs7.openSync(path5, constants.O_SYMLINK);
             var ret;
             var threw = true;
             try {
@@ -6302,11 +6302,11 @@ var require_legacy_streams = __commonJS({
         ReadStream,
         WriteStream
       };
-      function ReadStream(path3, options) {
-        if (!(this instanceof ReadStream)) return new ReadStream(path3, options);
+      function ReadStream(path5, options) {
+        if (!(this instanceof ReadStream)) return new ReadStream(path5, options);
         Stream.call(this);
         var self2 = this;
-        this.path = path3;
+        this.path = path5;
         this.fd = null;
         this.readable = true;
         this.paused = false;
@@ -6351,10 +6351,10 @@ var require_legacy_streams = __commonJS({
           self2._read();
         });
       }
-      function WriteStream(path3, options) {
-        if (!(this instanceof WriteStream)) return new WriteStream(path3, options);
+      function WriteStream(path5, options) {
+        if (!(this instanceof WriteStream)) return new WriteStream(path5, options);
         Stream.call(this);
-        this.path = path3;
+        this.path = path5;
         this.fd = null;
         this.writable = true;
         this.flags = "w";
@@ -6498,14 +6498,14 @@ var require_graceful_fs = __commonJS({
       fs7.createWriteStream = createWriteStream;
       var fs$readFile = fs7.readFile;
       fs7.readFile = readFile;
-      function readFile(path3, options, cb) {
+      function readFile(path5, options, cb) {
         if (typeof options === "function")
           cb = options, options = null;
-        return go$readFile(path3, options, cb);
-        function go$readFile(path4, options2, cb2, startTime) {
-          return fs$readFile(path4, options2, function(err) {
+        return go$readFile(path5, options, cb);
+        function go$readFile(path6, options2, cb2, startTime) {
+          return fs$readFile(path6, options2, function(err) {
             if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
-              enqueue([go$readFile, [path4, options2, cb2], err, startTime || Date.now(), Date.now()]);
+              enqueue([go$readFile, [path6, options2, cb2], err, startTime || Date.now(), Date.now()]);
             else {
               if (typeof cb2 === "function")
                 cb2.apply(this, arguments);
@@ -6515,14 +6515,14 @@ var require_graceful_fs = __commonJS({
       }
       var fs$writeFile = fs7.writeFile;
       fs7.writeFile = writeFile;
-      function writeFile(path3, data, options, cb) {
+      function writeFile(path5, data, options, cb) {
         if (typeof options === "function")
           cb = options, options = null;
-        return go$writeFile(path3, data, options, cb);
-        function go$writeFile(path4, data2, options2, cb2, startTime) {
-          return fs$writeFile(path4, data2, options2, function(err) {
+        return go$writeFile(path5, data, options, cb);
+        function go$writeFile(path6, data2, options2, cb2, startTime) {
+          return fs$writeFile(path6, data2, options2, function(err) {
             if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
-              enqueue([go$writeFile, [path4, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+              enqueue([go$writeFile, [path6, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
             else {
               if (typeof cb2 === "function")
                 cb2.apply(this, arguments);
@@ -6533,14 +6533,14 @@ var require_graceful_fs = __commonJS({
       var fs$appendFile = fs7.appendFile;
       if (fs$appendFile)
         fs7.appendFile = appendFile;
-      function appendFile(path3, data, options, cb) {
+      function appendFile(path5, data, options, cb) {
         if (typeof options === "function")
           cb = options, options = null;
-        return go$appendFile(path3, data, options, cb);
-        function go$appendFile(path4, data2, options2, cb2, startTime) {
-          return fs$appendFile(path4, data2, options2, function(err) {
+        return go$appendFile(path5, data, options, cb);
+        function go$appendFile(path6, data2, options2, cb2, startTime) {
+          return fs$appendFile(path6, data2, options2, function(err) {
             if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
-              enqueue([go$appendFile, [path4, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+              enqueue([go$appendFile, [path6, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
             else {
               if (typeof cb2 === "function")
                 cb2.apply(this, arguments);
@@ -6571,31 +6571,31 @@ var require_graceful_fs = __commonJS({
       var fs$readdir = fs7.readdir;
       fs7.readdir = readdir;
       var noReaddirOptionVersions = /^v[0-5]\./;
-      function readdir(path3, options, cb) {
+      function readdir(path5, options, cb) {
         if (typeof options === "function")
           cb = options, options = null;
-        var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path4, options2, cb2, startTime) {
-          return fs$readdir(path4, fs$readdirCallback(
-            path4,
+        var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path6, options2, cb2, startTime) {
+          return fs$readdir(path6, fs$readdirCallback(
+            path6,
             options2,
             cb2,
             startTime
           ));
-        } : function go$readdir2(path4, options2, cb2, startTime) {
-          return fs$readdir(path4, options2, fs$readdirCallback(
-            path4,
+        } : function go$readdir2(path6, options2, cb2, startTime) {
+          return fs$readdir(path6, options2, fs$readdirCallback(
+            path6,
             options2,
             cb2,
             startTime
           ));
         };
-        return go$readdir(path3, options, cb);
-        function fs$readdirCallback(path4, options2, cb2, startTime) {
+        return go$readdir(path5, options, cb);
+        function fs$readdirCallback(path6, options2, cb2, startTime) {
           return function(err, files) {
             if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
               enqueue([
                 go$readdir,
-                [path4, options2, cb2],
+                [path6, options2, cb2],
                 err,
                 startTime || Date.now(),
                 Date.now()
@@ -6666,7 +6666,7 @@ var require_graceful_fs = __commonJS({
         enumerable: true,
         configurable: true
       });
-      function ReadStream(path3, options) {
+      function ReadStream(path5, options) {
         if (this instanceof ReadStream)
           return fs$ReadStream.apply(this, arguments), this;
         else
@@ -6686,7 +6686,7 @@ var require_graceful_fs = __commonJS({
           }
         });
       }
-      function WriteStream(path3, options) {
+      function WriteStream(path5, options) {
         if (this instanceof WriteStream)
           return fs$WriteStream.apply(this, arguments), this;
         else
@@ -6704,22 +6704,22 @@ var require_graceful_fs = __commonJS({
           }
         });
       }
-      function createReadStream(path3, options) {
-        return new fs7.ReadStream(path3, options);
+      function createReadStream(path5, options) {
+        return new fs7.ReadStream(path5, options);
       }
-      function createWriteStream(path3, options) {
-        return new fs7.WriteStream(path3, options);
+      function createWriteStream(path5, options) {
+        return new fs7.WriteStream(path5, options);
       }
       var fs$open = fs7.open;
       fs7.open = open;
-      function open(path3, flags, mode, cb) {
+      function open(path5, flags, mode, cb) {
         if (typeof mode === "function")
           cb = mode, mode = null;
-        return go$open(path3, flags, mode, cb);
-        function go$open(path4, flags2, mode2, cb2, startTime) {
-          return fs$open(path4, flags2, mode2, function(err, fd) {
+        return go$open(path5, flags, mode, cb);
+        function go$open(path6, flags2, mode2, cb2, startTime) {
+          return fs$open(path6, flags2, mode2, function(err, fd) {
             if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
-              enqueue([go$open, [path4, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
+              enqueue([go$open, [path6, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
             else {
               if (typeof cb2 === "function")
                 cb2.apply(this, arguments);
@@ -6902,10 +6902,10 @@ var require_fs5 = __commonJS({
 var require_utils5 = __commonJS({
   "node_modules/fs-extra/lib/mkdirs/utils.js"(exports2, module2) {
     "use strict";
-    var path3 = require("path");
+    var path5 = require("path");
     module2.exports.checkPath = function checkPath(pth) {
       if (process.platform === "win32") {
-        const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path3.parse(pth).root, ""));
+        const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path5.parse(pth).root, ""));
         if (pathHasInvalidWinCharacters) {
           const error = new Error(`Path contains invalid characters: ${pth}`);
           error.code = "EINVAL";
@@ -6969,8 +6969,8 @@ var require_path_exists = __commonJS({
     "use strict";
     var u = require_universalify().fromPromise;
     var fs6 = require_fs5();
-    function pathExists(path3) {
-      return fs6.access(path3).then(() => true).catch(() => false);
+    function pathExists(path5) {
+      return fs6.access(path5).then(() => true).catch(() => false);
     }
     module2.exports = {
       pathExists: u(pathExists),
@@ -6985,9 +6985,9 @@ var require_utimes = __commonJS({
     "use strict";
     var fs6 = require_fs5();
     var u = require_universalify().fromPromise;
-    function utimesMillis(path3, atime, mtime) {
+    function utimesMillis(path5, atime, mtime) {
       return __async(this, null, function* () {
-        const fd = yield fs6.open(path3, "r+");
+        const fd = yield fs6.open(path5, "r+");
         let closeErr = null;
         try {
           yield fs6.futimes(fd, atime, mtime);
@@ -7003,8 +7003,8 @@ var require_utimes = __commonJS({
         }
       });
     }
-    function utimesMillisSync(path3, atime, mtime) {
-      const fd = fs6.openSync(path3, "r+");
+    function utimesMillisSync(path5, atime, mtime) {
+      const fd = fs6.openSync(path5, "r+");
       fs6.futimesSync(fd, atime, mtime);
       return fs6.closeSync(fd);
     }
@@ -7020,7 +7020,7 @@ var require_stat = __commonJS({
   "node_modules/fs-extra/lib/util/stat.js"(exports2, module2) {
     "use strict";
     var fs6 = require_fs5();
-    var path3 = require("path");
+    var path5 = require("path");
     var u = require_universalify().fromPromise;
     function getStats(src, dest, opts) {
       const statFunc = opts.dereference ? (file) => fs6.stat(file, { bigint: true }) : (file) => fs6.lstat(file, { bigint: true });
@@ -7049,8 +7049,8 @@ var require_stat = __commonJS({
         const { srcStat, destStat } = yield getStats(src, dest, opts);
         if (destStat) {
           if (areIdentical(srcStat, destStat)) {
-            const srcBaseName = path3.basename(src);
-            const destBaseName = path3.basename(dest);
+            const srcBaseName = path5.basename(src);
+            const destBaseName = path5.basename(dest);
             if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
               return { srcStat, destStat, isChangingCase: true };
             }
@@ -7073,8 +7073,8 @@ var require_stat = __commonJS({
       const { srcStat, destStat } = getStatsSync(src, dest, opts);
       if (destStat) {
         if (areIdentical(srcStat, destStat)) {
-          const srcBaseName = path3.basename(src);
-          const destBaseName = path3.basename(dest);
+          const srcBaseName = path5.basename(src);
+          const destBaseName = path5.basename(dest);
           if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
             return { srcStat, destStat, isChangingCase: true };
           }
@@ -7094,9 +7094,9 @@ var require_stat = __commonJS({
     }
     function checkParentPaths(src, srcStat, dest, funcName) {
       return __async(this, null, function* () {
-        const srcParent = path3.resolve(path3.dirname(src));
-        const destParent = path3.resolve(path3.dirname(dest));
-        if (destParent === srcParent || destParent === path3.parse(destParent).root) return;
+        const srcParent = path5.resolve(path5.dirname(src));
+        const destParent = path5.resolve(path5.dirname(dest));
+        if (destParent === srcParent || destParent === path5.parse(destParent).root) return;
         let destStat;
         try {
           destStat = yield fs6.stat(destParent, { bigint: true });
@@ -7111,9 +7111,9 @@ var require_stat = __commonJS({
       });
     }
     function checkParentPathsSync(src, srcStat, dest, funcName) {
-      const srcParent = path3.resolve(path3.dirname(src));
-      const destParent = path3.resolve(path3.dirname(dest));
-      if (destParent === srcParent || destParent === path3.parse(destParent).root) return;
+      const srcParent = path5.resolve(path5.dirname(src));
+      const destParent = path5.resolve(path5.dirname(dest));
+      if (destParent === srcParent || destParent === path5.parse(destParent).root) return;
       let destStat;
       try {
         destStat = fs6.statSync(destParent, { bigint: true });
@@ -7130,8 +7130,8 @@ var require_stat = __commonJS({
       return destStat.ino !== void 0 && destStat.dev !== void 0 && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev;
     }
     function isSrcSubdir(src, dest) {
-      const srcArr = path3.resolve(src).split(path3.sep).filter((i) => i);
-      const destArr = path3.resolve(dest).split(path3.sep).filter((i) => i);
+      const srcArr = path5.resolve(src).split(path5.sep).filter((i) => i);
+      const destArr = path5.resolve(dest).split(path5.sep).filter((i) => i);
       return srcArr.every((cur, i) => destArr[i] === cur);
     }
     function errMsg(src, dest, funcName) {
@@ -7198,7 +7198,7 @@ var require_copy = __commonJS({
   "node_modules/fs-extra/lib/copy/copy.js"(exports2, module2) {
     "use strict";
     var fs6 = require_fs5();
-    var path3 = require("path");
+    var path5 = require("path");
     var { mkdirs } = require_mkdirs();
     var { pathExists } = require_path_exists();
     var { utimesMillis } = require_utimes();
@@ -7222,7 +7222,7 @@ var require_copy = __commonJS({
         yield stat.checkParentPaths(src, srcStat, dest, "copy");
         const include = yield runFilter(src, dest, opts);
         if (!include) return;
-        const destParent = path3.dirname(dest);
+        const destParent = path5.dirname(dest);
         const dirExists = yield pathExists(destParent);
         if (!dirExists) {
           yield mkdirs(destParent);
@@ -7285,8 +7285,8 @@ var require_copy = __commonJS({
           yield fs6.mkdir(dest);
         }
         yield asyncIteratorConcurrentProcess(yield fs6.opendir(src), (item) => __async(null, null, function* () {
-          const srcItem = path3.join(src, item.name);
-          const destItem = path3.join(dest, item.name);
+          const srcItem = path5.join(src, item.name);
+          const destItem = path5.join(dest, item.name);
           const include = yield runFilter(srcItem, destItem, opts);
           if (include) {
             const { destStat: destStat2 } = yield stat.checkPaths(srcItem, destItem, "copy", opts);
@@ -7302,7 +7302,7 @@ var require_copy = __commonJS({
       return __async(this, null, function* () {
         let resolvedSrc = yield fs6.readlink(src);
         if (opts.dereference) {
-          resolvedSrc = path3.resolve(process.cwd(), resolvedSrc);
+          resolvedSrc = path5.resolve(process.cwd(), resolvedSrc);
         }
         if (!destStat) {
           return fs6.symlink(resolvedSrc, dest);
@@ -7315,7 +7315,7 @@ var require_copy = __commonJS({
           throw e;
         }
         if (opts.dereference) {
-          resolvedDest = path3.resolve(process.cwd(), resolvedDest);
+          resolvedDest = path5.resolve(process.cwd(), resolvedDest);
         }
         if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
           throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`);
@@ -7336,7 +7336,7 @@ var require_copy_sync = __commonJS({
   "node_modules/fs-extra/lib/copy/copy-sync.js"(exports2, module2) {
     "use strict";
     var fs6 = require_graceful_fs();
-    var path3 = require("path");
+    var path5 = require("path");
     var mkdirsSync = require_mkdirs().mkdirsSync;
     var utimesMillisSync = require_utimes().utimesMillisSync;
     var stat = require_stat();
@@ -7357,7 +7357,7 @@ var require_copy_sync = __commonJS({
       const { srcStat, destStat } = stat.checkPathsSync(src, dest, "copy", opts);
       stat.checkParentPathsSync(src, srcStat, dest, "copy");
       if (opts.filter && !opts.filter(src, dest)) return;
-      const destParent = path3.dirname(dest);
+      const destParent = path5.dirname(dest);
       if (!fs6.existsSync(destParent)) mkdirsSync(destParent);
       return getStats(destStat, src, dest, opts);
     }
@@ -7426,8 +7426,8 @@ var require_copy_sync = __commonJS({
       }
     }
     function copyDirItem(item, src, dest, opts) {
-      const srcItem = path3.join(src, item);
-      const destItem = path3.join(dest, item);
+      const srcItem = path5.join(src, item);
+      const destItem = path5.join(dest, item);
       if (opts.filter && !opts.filter(srcItem, destItem)) return;
       const { destStat } = stat.checkPathsSync(srcItem, destItem, "copy", opts);
       return getStats(destStat, srcItem, destItem, opts);
@@ -7435,7 +7435,7 @@ var require_copy_sync = __commonJS({
     function onLink(destStat, src, dest, opts) {
       let resolvedSrc = fs6.readlinkSync(src);
       if (opts.dereference) {
-        resolvedSrc = path3.resolve(process.cwd(), resolvedSrc);
+        resolvedSrc = path5.resolve(process.cwd(), resolvedSrc);
       }
       if (!destStat) {
         return fs6.symlinkSync(resolvedSrc, dest);
@@ -7448,7 +7448,7 @@ var require_copy_sync = __commonJS({
           throw err;
         }
         if (opts.dereference) {
-          resolvedDest = path3.resolve(process.cwd(), resolvedDest);
+          resolvedDest = path5.resolve(process.cwd(), resolvedDest);
         }
         if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
           throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`);
@@ -7485,11 +7485,11 @@ var require_remove = __commonJS({
     "use strict";
     var fs6 = require_graceful_fs();
     var u = require_universalify().fromCallback;
-    function remove(path3, callback) {
-      fs6.rm(path3, { recursive: true, force: true }, callback);
+    function remove(path5, callback) {
+      fs6.rm(path5, { recursive: true, force: true }, callback);
     }
-    function removeSync(path3) {
-      fs6.rmSync(path3, { recursive: true, force: true });
+    function removeSync(path5) {
+      fs6.rmSync(path5, { recursive: true, force: true });
     }
     module2.exports = {
       remove: u(remove),
@@ -7504,7 +7504,7 @@ var require_empty = __commonJS({
     "use strict";
     var u = require_universalify().fromPromise;
     var fs6 = require_fs5();
-    var path3 = require("path");
+    var path5 = require("path");
     var mkdir = require_mkdirs();
     var remove = require_remove();
     var emptyDir = u(function emptyDir2(dir) {
@@ -7515,7 +7515,7 @@ var require_empty = __commonJS({
         } catch (e) {
           return mkdir.mkdirs(dir);
         }
-        return Promise.all(items.map((item) => remove.remove(path3.join(dir, item))));
+        return Promise.all(items.map((item) => remove.remove(path5.join(dir, item))));
       });
     });
     function emptyDirSync(dir) {
@@ -7526,7 +7526,7 @@ var require_empty = __commonJS({
         return mkdir.mkdirsSync(dir);
       }
       items.forEach((item) => {
-        item = path3.join(dir, item);
+        item = path5.join(dir, item);
         remove.removeSync(item);
       });
     }
@@ -7544,7 +7544,7 @@ var require_file = __commonJS({
   "node_modules/fs-extra/lib/ensure/file.js"(exports2, module2) {
     "use strict";
     var u = require_universalify().fromPromise;
-    var path3 = require("path");
+    var path5 = require("path");
     var fs6 = require_fs5();
     var mkdir = require_mkdirs();
     function createFile(file) {
@@ -7555,7 +7555,7 @@ var require_file = __commonJS({
         } catch (e) {
         }
         if (stats && stats.isFile()) return;
-        const dir = path3.dirname(file);
+        const dir = path5.dirname(file);
         let dirStats = null;
         try {
           dirStats = yield fs6.stat(dir);
@@ -7582,7 +7582,7 @@ var require_file = __commonJS({
       } catch (e) {
       }
       if (stats && stats.isFile()) return;
-      const dir = path3.dirname(file);
+      const dir = path5.dirname(file);
       try {
         if (!fs6.statSync(dir).isDirectory()) {
           fs6.readdirSync(dir);
@@ -7605,7 +7605,7 @@ var require_link = __commonJS({
   "node_modules/fs-extra/lib/ensure/link.js"(exports2, module2) {
     "use strict";
     var u = require_universalify().fromPromise;
-    var path3 = require("path");
+    var path5 = require("path");
     var fs6 = require_fs5();
     var mkdir = require_mkdirs();
     var { pathExists } = require_path_exists();
@@ -7625,7 +7625,7 @@ var require_link = __commonJS({
           throw err;
         }
         if (dstStat && areIdentical(srcStat, dstStat)) return;
-        const dir = path3.dirname(dstpath);
+        const dir = path5.dirname(dstpath);
         const dirExists = yield pathExists(dir);
         if (!dirExists) {
           yield mkdir.mkdirs(dir);
@@ -7646,7 +7646,7 @@ var require_link = __commonJS({
         err.message = err.message.replace("lstat", "ensureLink");
         throw err;
       }
-      const dir = path3.dirname(dstpath);
+      const dir = path5.dirname(dstpath);
       const dirExists = fs6.existsSync(dir);
       if (dirExists) return fs6.linkSync(srcpath, dstpath);
       mkdir.mkdirsSync(dir);
@@ -7663,13 +7663,13 @@ var require_link = __commonJS({
 var require_symlink_paths = __commonJS({
   "node_modules/fs-extra/lib/ensure/symlink-paths.js"(exports2, module2) {
     "use strict";
-    var path3 = require("path");
+    var path5 = require("path");
     var fs6 = require_fs5();
     var { pathExists } = require_path_exists();
     var u = require_universalify().fromPromise;
     function symlinkPaths(srcpath, dstpath) {
       return __async(this, null, function* () {
-        if (path3.isAbsolute(srcpath)) {
+        if (path5.isAbsolute(srcpath)) {
           try {
             yield fs6.lstat(srcpath);
           } catch (err) {
@@ -7681,8 +7681,8 @@ var require_symlink_paths = __commonJS({
             toDst: srcpath
           };
         }
-        const dstdir = path3.dirname(dstpath);
-        const relativeToDst = path3.join(dstdir, srcpath);
+        const dstdir = path5.dirname(dstpath);
+        const relativeToDst = path5.join(dstdir, srcpath);
         const exists = yield pathExists(relativeToDst);
         if (exists) {
           return {
@@ -7698,12 +7698,12 @@ var require_symlink_paths = __commonJS({
         }
         return {
           toCwd: srcpath,
-          toDst: path3.relative(dstdir, srcpath)
+          toDst: path5.relative(dstdir, srcpath)
         };
       });
     }
     function symlinkPathsSync(srcpath, dstpath) {
-      if (path3.isAbsolute(srcpath)) {
+      if (path5.isAbsolute(srcpath)) {
         const exists2 = fs6.existsSync(srcpath);
         if (!exists2) throw new Error("absolute srcpath does not exist");
         return {
@@ -7711,8 +7711,8 @@ var require_symlink_paths = __commonJS({
           toDst: srcpath
         };
       }
-      const dstdir = path3.dirname(dstpath);
-      const relativeToDst = path3.join(dstdir, srcpath);
+      const dstdir = path5.dirname(dstpath);
+      const relativeToDst = path5.join(dstdir, srcpath);
       const exists = fs6.existsSync(relativeToDst);
       if (exists) {
         return {
@@ -7724,7 +7724,7 @@ var require_symlink_paths = __commonJS({
       if (!srcExists) throw new Error("relative srcpath does not exist");
       return {
         toCwd: srcpath,
-        toDst: path3.relative(dstdir, srcpath)
+        toDst: path5.relative(dstdir, srcpath)
       };
     }
     module2.exports = {
@@ -7774,7 +7774,7 @@ var require_symlink = __commonJS({
   "node_modules/fs-extra/lib/ensure/symlink.js"(exports2, module2) {
     "use strict";
     var u = require_universalify().fromPromise;
-    var path3 = require("path");
+    var path5 = require("path");
     var fs6 = require_fs5();
     var { mkdirs, mkdirsSync } = require_mkdirs();
     var { symlinkPaths, symlinkPathsSync } = require_symlink_paths();
@@ -7798,7 +7798,7 @@ var require_symlink = __commonJS({
         const relative = yield symlinkPaths(srcpath, dstpath);
         srcpath = relative.toDst;
         const toType = yield symlinkType(relative.toCwd, type);
-        const dir = path3.dirname(dstpath);
+        const dir = path5.dirname(dstpath);
         if (!(yield pathExists(dir))) {
           yield mkdirs(dir);
         }
@@ -7819,7 +7819,7 @@ var require_symlink = __commonJS({
       const relative = symlinkPathsSync(srcpath, dstpath);
       srcpath = relative.toDst;
       type = symlinkTypeSync(relative.toCwd, type);
-      const dir = path3.dirname(dstpath);
+      const dir = path5.dirname(dstpath);
       const exists = fs6.existsSync(dir);
       if (exists) return fs6.symlinkSync(srcpath, dstpath, type);
       mkdirsSync(dir);
@@ -7975,12 +7975,12 @@ var require_output_file = __commonJS({
     "use strict";
     var u = require_universalify().fromPromise;
     var fs6 = require_fs5();
-    var path3 = require("path");
+    var path5 = require("path");
     var mkdir = require_mkdirs();
     var pathExists = require_path_exists().pathExists;
     function outputFile(file, data, encoding = "utf-8") {
       return __async(this, null, function* () {
-        const dir = path3.dirname(file);
+        const dir = path5.dirname(file);
         if (!(yield pathExists(dir))) {
           yield mkdir.mkdirs(dir);
         }
@@ -7988,7 +7988,7 @@ var require_output_file = __commonJS({
       });
     }
     function outputFileSync(file, ...args) {
-      const dir = path3.dirname(file);
+      const dir = path5.dirname(file);
       if (!fs6.existsSync(dir)) {
         mkdir.mkdirsSync(dir);
       }
@@ -8054,7 +8054,7 @@ var require_move = __commonJS({
   "node_modules/fs-extra/lib/move/move.js"(exports2, module2) {
     "use strict";
     var fs6 = require_fs5();
-    var path3 = require("path");
+    var path5 = require("path");
     var { copy } = require_copy2();
     var { remove } = require_remove();
     var { mkdirp } = require_mkdirs();
@@ -8065,8 +8065,8 @@ var require_move = __commonJS({
         const overwrite = opts.overwrite || opts.clobber || false;
         const { srcStat, isChangingCase = false } = yield stat.checkPaths(src, dest, "move", opts);
         yield stat.checkParentPaths(src, srcStat, dest, "move");
-        const destParent = path3.dirname(dest);
-        const parsedParentPath = path3.parse(destParent);
+        const destParent = path5.dirname(dest);
+        const parsedParentPath = path5.parse(destParent);
         if (parsedParentPath.root !== destParent) {
           yield mkdirp(destParent);
         }
@@ -8112,7 +8112,7 @@ var require_move_sync = __commonJS({
   "node_modules/fs-extra/lib/move/move-sync.js"(exports2, module2) {
     "use strict";
     var fs6 = require_graceful_fs();
-    var path3 = require("path");
+    var path5 = require("path");
     var copySync = require_copy2().copySync;
     var removeSync = require_remove().removeSync;
     var mkdirpSync = require_mkdirs().mkdirpSync;
@@ -8122,12 +8122,12 @@ var require_move_sync = __commonJS({
       const overwrite = opts.overwrite || opts.clobber || false;
       const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, "move", opts);
       stat.checkParentPathsSync(src, srcStat, dest, "move");
-      if (!isParentRoot(dest)) mkdirpSync(path3.dirname(dest));
+      if (!isParentRoot(dest)) mkdirpSync(path5.dirname(dest));
       return doRename(src, dest, overwrite, isChangingCase);
     }
     function isParentRoot(dest) {
-      const parent = path3.dirname(dest);
-      const parsedPath = path3.parse(parent);
+      const parent = path5.dirname(dest);
+      const parsedPath = path5.parse(parent);
       return parsedPath.root === parent;
     }
     function doRename(src, dest, overwrite, isChangingCase) {
@@ -8185,14 +8185,14 @@ var require_create_require = __commonJS({
   "node_modules/create-require/create-require.js"(exports2, module2) {
     "use strict";
     var nativeModule = require("module");
-    var path3 = require("path");
+    var path5 = require("path");
     var fs6 = require("fs");
     function createRequire2(filename) {
       if (!filename) {
         filename = process.cwd();
       }
       if (isDir(filename)) {
-        filename = path3.join(filename, "index.js");
+        filename = path5.join(filename, "index.js");
       }
       if (nativeModule.createRequire) {
         return nativeModule.createRequire(filename);
@@ -8205,13 +8205,13 @@ var require_create_require = __commonJS({
     function _createRequire2(filename) {
       const mod = new nativeModule.Module(filename, null);
       mod.filename = filename;
-      mod.paths = nativeModule.Module._nodeModulePaths(path3.dirname(filename));
+      mod.paths = nativeModule.Module._nodeModulePaths(path5.dirname(filename));
       mod._compile("module.exports = require;", filename);
       return mod.exports;
     }
-    function isDir(path4) {
+    function isDir(path6) {
       try {
-        const stat = fs6.lstatSync(path4);
+        const stat = fs6.lstatSync(path6);
         return stat.isDirectory();
       } catch (e) {
         return false;
@@ -11278,7 +11278,7 @@ function Ui() {
   var _a2, _b2, _c, _d;
   !((_b2 = (_a2 = globalThis.process) == null ? void 0 : _a2.versions) == null ? void 0 : _b2.node) && !((_d = (_c = globalThis.process) == null ? void 0 : _c.env) == null ? void 0 : _d.DISABLE_NODE_FETCH_NATIVE_WARN || true) && console.warn("[node-fetch-native] Node.js compatible build of `node-fetch-native` is being used in a non-Node.js environment. Please make sure you are using proper export conditions or report this issue to https://github.com/unjs/node-fetch-native. You can set `process.env.DISABLE_NODE_FETCH_NATIVE_WARN` to disable this warning.");
 }
-var import_node_http, import_node_https, import_node_zlib, import_node_stream3, import_node_buffer, import_node_util2, import_node_url2, import_node_net, import_node_fs4, import_node_path3, Os, fi, n2, ci, O, be, X, ve, zt, bt, Cr, ze, It, Ft, mt, ee, yt, He, Ve, gt, pi, kt, xs, bi, mi, yi, gi, ut, Vs, qn, Wt, Qs, Ys, _i, Gs, Si, On, Ue, br, Un, ft, xn, G, mr, wi, yr, Ks, Js, Xs, el, H, Nn, xe, In, tl, Ri, rl, nl, gr, Fn, Pr, ye, il, jn, se, Ne, le, al, Ci, sl, $2, qt, dl, vr, dt, hl, Hn, _r, Ln, Pi, bl, ml, $n, yl, gl, _l, Sl, vi, Ei, Er, Sr, wl, Bi, Dn, zi, Ii, Fi, wr, Vn, pt, Tr, Mn, $i, ql, Ol, Mi;
+var import_node_http, import_node_https, import_node_zlib, import_node_stream3, import_node_buffer, import_node_util3, import_node_url2, import_node_net, import_node_fs4, import_node_path5, Os, fi, n2, ci, O, be, X, ve, zt, bt, Cr, ze, It, Ft, mt, ee, yt, He, Ve, gt, pi, kt, xs, bi, mi, yi, gi, ut, Vs, qn, Wt, Qs, Ys, _i, Gs, Si, On, Ue, br, Un, ft, xn, G, mr, wi, yr, Ks, Js, Xs, el, H, Nn, xe, In, tl, Ri, rl, nl, gr, Fn, Pr, ye, il, jn, se, Ne, le, al, Ci, sl, $2, qt, dl, vr, dt, hl, Hn, _r, Ln, Pi, bl, ml, $n, yl, gl, _l, Sl, vi, Ei, Er, Sr, wl, Bi, Dn, zi, Ii, Fi, wr, Vn, pt, Tr, Mn, $i, ql, Ol, Mi;
 var init_node = __esm({
   "node_modules/node-fetch-native/dist/node.mjs"() {
     "use strict";
@@ -11287,12 +11287,12 @@ var init_node = __esm({
     import_node_zlib = __toESM(require("zlib"), 1);
     import_node_stream3 = __toESM(require("stream"), 1);
     import_node_buffer = require("buffer");
-    import_node_util2 = require("util");
+    import_node_util3 = require("util");
     init_node_fetch_native_DfbY2q_x();
     import_node_url2 = require("url");
     import_node_net = require("net");
     import_node_fs4 = require("fs");
-    import_node_path3 = require("path");
+    import_node_path5 = require("path");
     Os = Object.defineProperty;
     fi = (i) => {
       throw TypeError(i);
@@ -11536,12 +11536,12 @@ var init_node = __esm({
       const a = new URL(o3).protocol, f2 = new URL(i).protocol;
       return a === f2;
     }, "isSameProtocol");
-    el = (0, import_node_util2.promisify)(import_node_stream3.default.pipeline);
+    el = (0, import_node_util3.promisify)(import_node_stream3.default.pipeline);
     H = Symbol("Body internals");
     Nn = class Nn2 {
       constructor(o3, { size: a = 0 } = {}) {
         let f2 = null;
-        o3 === null ? o3 = null : wi(o3) ? o3 = import_node_buffer.Buffer.from(o3.toString()) : yr(o3) || import_node_buffer.Buffer.isBuffer(o3) || (import_node_util2.types.isAnyArrayBuffer(o3) ? o3 = import_node_buffer.Buffer.from(o3) : ArrayBuffer.isView(o3) ? o3 = import_node_buffer.Buffer.from(o3.buffer, o3.byteOffset, o3.byteLength) : o3 instanceof import_node_stream3.default || (o3 instanceof br ? (o3 = Zs(o3), f2 = o3.type.split("=")[1]) : o3 = import_node_buffer.Buffer.from(String(o3))));
+        o3 === null ? o3 = null : wi(o3) ? o3 = import_node_buffer.Buffer.from(o3.toString()) : yr(o3) || import_node_buffer.Buffer.isBuffer(o3) || (import_node_util3.types.isAnyArrayBuffer(o3) ? o3 = import_node_buffer.Buffer.from(o3) : ArrayBuffer.isView(o3) ? o3 = import_node_buffer.Buffer.from(o3.buffer, o3.byteOffset, o3.byteLength) : o3 instanceof import_node_stream3.default || (o3 instanceof br ? (o3 = Zs(o3), f2 = o3.type.split("=")[1]) : o3 = import_node_buffer.Buffer.from(String(o3))));
         let l = o3;
         import_node_buffer.Buffer.isBuffer(o3) ? l = import_node_stream3.default.Readable.from(o3) : yr(o3) && (l = import_node_stream3.default.Readable.from(o3.stream())), this[H] = { body: o3, stream: l, boundary: f2, disturbed: false, error: null }, this.size = a, o3 instanceof import_node_stream3.default && o3.on("error", (p2) => {
           const h2 = p2 instanceof ft ? p2 : new G(`Invalid response body while trying to fetch ${this.url}: ${p2.message}`, "system", p2);
@@ -11596,7 +11596,7 @@ var init_node = __esm({
     };
     n2(Nn, "Body");
     xe = Nn;
-    xe.prototype.buffer = (0, import_node_util2.deprecate)(xe.prototype.buffer, "Please use 'response.arrayBuffer()' instead of 'response.buffer()'", "node-fetch#buffer"), Object.defineProperties(xe.prototype, { body: { enumerable: true }, bodyUsed: { enumerable: true }, arrayBuffer: { enumerable: true }, blob: { enumerable: true }, json: { enumerable: true }, text: { enumerable: true }, data: { get: (0, import_node_util2.deprecate)(() => {
+    xe.prototype.buffer = (0, import_node_util3.deprecate)(xe.prototype.buffer, "Please use 'response.arrayBuffer()' instead of 'response.buffer()'", "node-fetch#buffer"), Object.defineProperties(xe.prototype, { body: { enumerable: true }, bodyUsed: { enumerable: true }, arrayBuffer: { enumerable: true }, blob: { enumerable: true }, json: { enumerable: true }, text: { enumerable: true }, data: { get: (0, import_node_util3.deprecate)(() => {
     }, "data doesn't exist, use json(), text(), arrayBuffer(), or body instead", "https://github.com/node-fetch/node-fetch/issues/1000 (response)") } });
     n2(zn, "consumeBody");
     In = n2((i, o3) => {
@@ -11604,8 +11604,8 @@ var init_node = __esm({
       if (i.bodyUsed) throw new Error("cannot clone body after it is used");
       return l instanceof import_node_stream3.default && typeof l.getBoundary != "function" && (a = new import_node_stream3.PassThrough({ highWaterMark: o3 }), f2 = new import_node_stream3.PassThrough({ highWaterMark: o3 }), l.pipe(a), l.pipe(f2), i[H].stream = a, l = f2), l;
     }, "clone");
-    tl = (0, import_node_util2.deprecate)((i) => i.getBoundary(), "form-data doesn't follow the spec and requires special treatment. Use alternative package", "https://github.com/node-fetch/node-fetch/issues/1167");
-    Ri = n2((i, o3) => i === null ? null : typeof i == "string" ? "text/plain;charset=UTF-8" : wi(i) ? "application/x-www-form-urlencoded;charset=UTF-8" : yr(i) ? i.type || null : import_node_buffer.Buffer.isBuffer(i) || import_node_util2.types.isAnyArrayBuffer(i) || ArrayBuffer.isView(i) ? null : i instanceof br ? `multipart/form-data; boundary=${o3[H].boundary}` : i && typeof i.getBoundary == "function" ? `multipart/form-data;boundary=${tl(i)}` : i instanceof import_node_stream3.default ? null : "text/plain;charset=UTF-8", "extractContentType");
+    tl = (0, import_node_util3.deprecate)((i) => i.getBoundary(), "form-data doesn't follow the spec and requires special treatment. Use alternative package", "https://github.com/node-fetch/node-fetch/issues/1167");
+    Ri = n2((i, o3) => i === null ? null : typeof i == "string" ? "text/plain;charset=UTF-8" : wi(i) ? "application/x-www-form-urlencoded;charset=UTF-8" : yr(i) ? i.type || null : import_node_buffer.Buffer.isBuffer(i) || import_node_util3.types.isAnyArrayBuffer(i) || ArrayBuffer.isView(i) ? null : i instanceof br ? `multipart/form-data; boundary=${o3[H].boundary}` : i && typeof i.getBoundary == "function" ? `multipart/form-data;boundary=${tl(i)}` : i instanceof import_node_stream3.default ? null : "text/plain;charset=UTF-8", "extractContentType");
     rl = n2((i) => {
       const { body: o3 } = i[H];
       return o3 === null ? 0 : yr(o3) ? o3.size : import_node_buffer.Buffer.isBuffer(o3) ? o3.length : o3 && typeof o3.getLengthSync == "function" && o3.hasKnownLength && o3.hasKnownLength() ? o3.getLengthSync() : null;
@@ -11631,13 +11631,13 @@ var init_node = __esm({
         if (o3 instanceof Pr2) {
           const f2 = o3.raw();
           for (const [l, p2] of Object.entries(f2)) a.push(...p2.map((h2) => [l, h2]));
-        } else if (o3 != null) if (typeof o3 == "object" && !import_node_util2.types.isBoxedPrimitive(o3)) {
+        } else if (o3 != null) if (typeof o3 == "object" && !import_node_util3.types.isBoxedPrimitive(o3)) {
           const f2 = o3[Symbol.iterator];
           if (f2 == null) a.push(...Object.entries(o3));
           else {
             if (typeof f2 != "function") throw new TypeError("Header pairs must be iterable");
             a = [...o3].map((l) => {
-              if (typeof l != "object" || import_node_util2.types.isBoxedPrimitive(l)) throw new TypeError("Each header pair must be an iterable object");
+              if (typeof l != "object" || import_node_util3.types.isBoxedPrimitive(l)) throw new TypeError("Each header pair must be an iterable object");
               return [...l];
             }).map((l) => {
               if (l.length !== 2) throw new TypeError("Each header pair must be a name/value tuple");
@@ -11775,7 +11775,7 @@ var init_node = __esm({
     n2(cl, "parseReferrerPolicyFromHeader");
     $2 = Symbol("Request internals");
     qt = n2((i) => typeof i == "object" && typeof i[$2] == "object", "isRequest");
-    dl = (0, import_node_util2.deprecate)(() => {
+    dl = (0, import_node_util3.deprecate)(() => {
     }, ".data is not a valid RequestInit property, use .body instead", "https://github.com/node-fetch/node-fetch/issues/1000 (request)");
     vr = class vr2 extends xe {
       constructor(o3, a = {}) {
@@ -11866,7 +11866,7 @@ var init_node = __esm({
     _l = n2((i, o3) => $n(i).then((a) => Ei(a, i, o3)), "fileFrom");
     Sl = n2((i, o3) => Ei((0, import_node_fs4.statSync)(i), i, o3), "fileFromSync");
     vi = n2((i, o3, a = "") => new ut([new Sr({ path: o3, size: i.size, lastModified: i.mtimeMs, start: 0 })], { type: a }), "fromBlob");
-    Ei = n2((i, o3, a = "") => new qn([new Sr({ path: o3, size: i.size, lastModified: i.mtimeMs, start: 0 })], (0, import_node_path3.basename)(o3), { type: a, lastModified: i.mtimeMs }), "fromFile");
+    Ei = n2((i, o3, a = "") => new qn([new Sr({ path: o3, size: i.size, lastModified: i.mtimeMs, start: 0 })], (0, import_node_path5.basename)(o3), { type: a, lastModified: i.mtimeMs }), "fromFile");
     Er = class Er2 {
       constructor(o3) {
         be(this, He);
@@ -12288,7 +12288,7 @@ module.exports = __toCommonJS(vendor_extra_exports);
 // node_modules/globby/index.js
 var import_node_process2 = __toESM(require("process"), 1);
 var import_node_fs3 = __toESM(require("fs"), 1);
-var import_node_path2 = __toESM(require("path"), 1);
+var import_node_path4 = __toESM(require("path"), 1);
 var import_node_stream2 = require("stream");
 
 // node_modules/@sindresorhus/merge-streams/index.js
@@ -12536,45 +12536,6 @@ var PASSTHROUGH_LISTENERS_PER_STREAM = 1;
 // node_modules/globby/index.js
 var import_fast_glob2 = __toESM(require_out4(), 1);
 
-// node_modules/path-type/index.js
-var import_node_fs = __toESM(require("fs"), 1);
-var import_promises2 = __toESM(require("fs").promises, 1);
-function isType(fsStatType, statsMethodName, filePath) {
-  return __async(this, null, function* () {
-    if (typeof filePath !== "string") {
-      throw new TypeError(`Expected a string, got ${typeof filePath}`);
-    }
-    try {
-      const stats = yield import_promises2.default[fsStatType](filePath);
-      return stats[statsMethodName]();
-    } catch (error) {
-      if (error.code === "ENOENT") {
-        return false;
-      }
-      throw error;
-    }
-  });
-}
-function isTypeSync(fsStatType, statsMethodName, filePath) {
-  if (typeof filePath !== "string") {
-    throw new TypeError(`Expected a string, got ${typeof filePath}`);
-  }
-  try {
-    return import_node_fs.default[fsStatType](filePath)[statsMethodName]();
-  } catch (error) {
-    if (error.code === "ENOENT") {
-      return false;
-    }
-    throw error;
-  }
-}
-var isFile = isType.bind(void 0, "stat", "isFile");
-var isDirectory = isType.bind(void 0, "stat", "isDirectory");
-var isSymlink = isType.bind(void 0, "lstat", "isSymbolicLink");
-var isFileSync = isTypeSync.bind(void 0, "statSync", "isFile");
-var isDirectorySync = isTypeSync.bind(void 0, "statSync", "isDirectory");
-var isSymlinkSync = isTypeSync.bind(void 0, "lstatSync", "isSymbolicLink");
-
 // node_modules/unicorn-magic/node.js
 var import_node_util = require("util");
 var import_node_child_process = require("child_process");
@@ -12588,22 +12549,207 @@ var TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;
 // node_modules/globby/ignore.js
 var import_node_process = __toESM(require("process"), 1);
 var import_node_fs2 = __toESM(require("fs"), 1);
-var import_promises3 = __toESM(require("fs").promises, 1);
-var import_node_path = __toESM(require("path"), 1);
+var import_promises2 = __toESM(require("fs").promises, 1);
+var import_node_path3 = __toESM(require("path"), 1);
 var import_fast_glob = __toESM(require_out4(), 1);
 var import_ignore = __toESM(require_ignore(), 1);
 
+// node_modules/is-path-inside/index.js
+var import_node_path = __toESM(require("path"), 1);
+function isPathInside(childPath, parentPath) {
+  const relation = import_node_path.default.relative(parentPath, childPath);
+  return Boolean(
+    relation && relation !== ".." && !relation.startsWith(`..${import_node_path.default.sep}`) && relation !== import_node_path.default.resolve(childPath)
+  );
+}
+
 // node_modules/slash/index.js
-function slash(path3) {
-  const isExtendedLengthPath = path3.startsWith("\\\\?\\");
+function slash(path5) {
+  const isExtendedLengthPath = path5.startsWith("\\\\?\\");
   if (isExtendedLengthPath) {
-    return path3;
+    return path5;
   }
-  return path3.replace(/\\/g, "/");
+  return path5.replace(/\\/g, "/");
 }
 
 // node_modules/globby/utilities.js
+var import_node_fs = __toESM(require("fs"), 1);
+var import_node_path2 = __toESM(require("path"), 1);
+var import_node_util2 = require("util");
 var isNegativePattern = (pattern) => pattern[0] === "!";
+var bindFsMethod = (object, methodName) => {
+  const method = object == null ? void 0 : object[methodName];
+  return typeof method === "function" ? method.bind(object) : void 0;
+};
+var promisifyFsMethod = (object, methodName) => {
+  const method = object == null ? void 0 : object[methodName];
+  if (typeof method !== "function") {
+    return void 0;
+  }
+  return (0, import_node_util2.promisify)(method.bind(object));
+};
+var normalizeDirectoryPatternForFastGlob = (pattern) => {
+  if (!pattern.endsWith("/")) {
+    return pattern;
+  }
+  const trimmedPattern = pattern.replace(/\/+$/u, "");
+  if (!trimmedPattern) {
+    return "/**";
+  }
+  if (trimmedPattern === "**") {
+    return "**/**";
+  }
+  const hasLeadingSlash = trimmedPattern.startsWith("/");
+  const patternBody = hasLeadingSlash ? trimmedPattern.slice(1) : trimmedPattern;
+  const hasInnerSlash = patternBody.includes("/");
+  const needsRecursivePrefix = !hasLeadingSlash && !hasInnerSlash && !trimmedPattern.startsWith("**/");
+  const recursivePrefix = needsRecursivePrefix ? "**/" : "";
+  return `${recursivePrefix}${trimmedPattern}/**`;
+};
+var getParentDirectoryPrefix = (pattern) => {
+  const normalizedPattern = isNegativePattern(pattern) ? pattern.slice(1) : pattern;
+  const match = normalizedPattern.match(/^(\.\.\/)+/);
+  return match ? match[0] : "";
+};
+var adjustIgnorePatternsForParentDirectories = (patterns, ignorePatterns) => {
+  if (patterns.length === 0 || ignorePatterns.length === 0) {
+    return ignorePatterns;
+  }
+  const parentPrefixes = patterns.map((pattern) => getParentDirectoryPrefix(pattern));
+  const firstPrefix = parentPrefixes[0];
+  if (!firstPrefix) {
+    return ignorePatterns;
+  }
+  const allSamePrefix = parentPrefixes.every((prefix) => prefix === firstPrefix);
+  if (!allSamePrefix) {
+    return ignorePatterns;
+  }
+  return ignorePatterns.map((pattern) => {
+    if (pattern.startsWith("**/") && !pattern.startsWith("../")) {
+      return firstPrefix + pattern;
+    }
+    return pattern;
+  });
+};
+var getAsyncStatMethod = (fsImplementation) => {
+  var _a2;
+  return (_a2 = bindFsMethod(fsImplementation == null ? void 0 : fsImplementation.promises, "stat")) != null ? _a2 : bindFsMethod(import_node_fs.default.promises, "stat");
+};
+var getStatSyncMethod = (fsImplementation) => {
+  if (fsImplementation) {
+    return bindFsMethod(fsImplementation, "statSync");
+  }
+  return bindFsMethod(import_node_fs.default, "statSync");
+};
+var pathHasGitDirectory = (stats) => {
+  var _a2, _b2;
+  return Boolean(((_a2 = stats == null ? void 0 : stats.isDirectory) == null ? void 0 : _a2.call(stats)) || ((_b2 = stats == null ? void 0 : stats.isFile) == null ? void 0 : _b2.call(stats)));
+};
+var buildPathChain = (startPath, rootPath) => {
+  const chain = [];
+  let currentPath = startPath;
+  chain.push(currentPath);
+  while (currentPath !== rootPath) {
+    const parentPath = import_node_path2.default.dirname(currentPath);
+    if (parentPath === currentPath) {
+      break;
+    }
+    currentPath = parentPath;
+    chain.push(currentPath);
+  }
+  return chain;
+};
+var findGitRootInChain = (paths, statMethod) => __async(null, null, function* () {
+  for (const directory of paths) {
+    const gitPath = import_node_path2.default.join(directory, ".git");
+    try {
+      const stats = yield statMethod(gitPath);
+      if (pathHasGitDirectory(stats)) {
+        return directory;
+      }
+    } catch (e) {
+    }
+  }
+  return void 0;
+});
+var findGitRootSyncUncached = (cwd, fsImplementation) => {
+  const statSyncMethod = getStatSyncMethod(fsImplementation);
+  if (!statSyncMethod) {
+    return void 0;
+  }
+  const currentPath = import_node_path2.default.resolve(cwd);
+  const { root } = import_node_path2.default.parse(currentPath);
+  const chain = buildPathChain(currentPath, root);
+  for (const directory of chain) {
+    const gitPath = import_node_path2.default.join(directory, ".git");
+    try {
+      const stats = statSyncMethod(gitPath);
+      if (pathHasGitDirectory(stats)) {
+        return directory;
+      }
+    } catch (e) {
+    }
+  }
+  return void 0;
+};
+var findGitRootSync = (cwd, fsImplementation) => {
+  if (typeof cwd !== "string") {
+    throw new TypeError("cwd must be a string");
+  }
+  return findGitRootSyncUncached(cwd, fsImplementation);
+};
+var findGitRootAsyncUncached = (cwd, fsImplementation) => __async(null, null, function* () {
+  const statMethod = getAsyncStatMethod(fsImplementation);
+  if (!statMethod) {
+    return findGitRootSync(cwd, fsImplementation);
+  }
+  const currentPath = import_node_path2.default.resolve(cwd);
+  const { root } = import_node_path2.default.parse(currentPath);
+  const chain = buildPathChain(currentPath, root);
+  return findGitRootInChain(chain, statMethod);
+});
+var findGitRoot = (cwd, fsImplementation) => __async(null, null, function* () {
+  if (typeof cwd !== "string") {
+    throw new TypeError("cwd must be a string");
+  }
+  return findGitRootAsyncUncached(cwd, fsImplementation);
+});
+var isWithinGitRoot = (gitRoot, cwd) => {
+  const resolvedGitRoot = import_node_path2.default.resolve(gitRoot);
+  const resolvedCwd = import_node_path2.default.resolve(cwd);
+  return resolvedCwd === resolvedGitRoot || isPathInside(resolvedCwd, resolvedGitRoot);
+};
+var getParentGitignorePaths = (gitRoot, cwd) => {
+  if (gitRoot && typeof gitRoot !== "string") {
+    throw new TypeError("gitRoot must be a string or undefined");
+  }
+  if (typeof cwd !== "string") {
+    throw new TypeError("cwd must be a string");
+  }
+  if (!gitRoot) {
+    return [];
+  }
+  if (!isWithinGitRoot(gitRoot, cwd)) {
+    return [];
+  }
+  const chain = buildPathChain(import_node_path2.default.resolve(cwd), import_node_path2.default.resolve(gitRoot));
+  return [...chain].reverse().map((directory) => import_node_path2.default.join(directory, ".gitignore"));
+};
+var convertPatternsForFastGlob = (patterns, usingGitRoot, normalizeDirectoryPatternForFastGlob2) => {
+  if (usingGitRoot) {
+    return [];
+  }
+  const result = [];
+  let hasNegations = false;
+  for (const pattern of patterns) {
+    if (isNegativePattern(pattern)) {
+      hasNegations = true;
+      break;
+    }
+    result.push(normalizeDirectoryPatternForFastGlob2(pattern));
+  }
+  return hasNegations ? [] : result;
+};
 
 // node_modules/globby/ignore.js
 var defaultIgnoredDirectories = [
@@ -12617,6 +12763,81 @@ var ignoreFilesGlobOptions = {
   dot: true
 };
 var GITIGNORE_FILES_PATTERN = "**/.gitignore";
+var getReadFileMethod = (fsImplementation) => {
+  var _a2, _b2;
+  return (_b2 = (_a2 = bindFsMethod(fsImplementation == null ? void 0 : fsImplementation.promises, "readFile")) != null ? _a2 : bindFsMethod(import_promises2.default, "readFile")) != null ? _b2 : promisifyFsMethod(fsImplementation, "readFile");
+};
+var getReadFileSyncMethod = (fsImplementation) => {
+  var _a2;
+  return (_a2 = bindFsMethod(fsImplementation, "readFileSync")) != null ? _a2 : bindFsMethod(import_node_fs2.default, "readFileSync");
+};
+var shouldSkipIgnoreFileError = (error, suppressErrors) => {
+  if (!error) {
+    return Boolean(suppressErrors);
+  }
+  if (error.code === "ENOENT" || error.code === "ENOTDIR") {
+    return true;
+  }
+  return Boolean(suppressErrors);
+};
+var createIgnoreFileReadError = (filePath, error) => {
+  if (error instanceof Error) {
+    error.message = `Failed to read ignore file at ${filePath}: ${error.message}`;
+    return error;
+  }
+  return new Error(`Failed to read ignore file at ${filePath}: ${String(error)}`);
+};
+var processIgnoreFileCore = (filePath, readMethod, suppressErrors) => {
+  try {
+    const content = readMethod(filePath, "utf8");
+    return { filePath, content };
+  } catch (error) {
+    if (shouldSkipIgnoreFileError(error, suppressErrors)) {
+      return void 0;
+    }
+    throw createIgnoreFileReadError(filePath, error);
+  }
+};
+var readIgnoreFilesSafely = (paths, readFileMethod, suppressErrors) => __async(null, null, function* () {
+  const fileResults = yield Promise.all(paths.map((filePath) => __async(null, null, function* () {
+    try {
+      const content = yield readFileMethod(filePath, "utf8");
+      return { filePath, content };
+    } catch (error) {
+      if (shouldSkipIgnoreFileError(error, suppressErrors)) {
+        return void 0;
+      }
+      throw createIgnoreFileReadError(filePath, error);
+    }
+  })));
+  return fileResults.filter(Boolean);
+});
+var readIgnoreFilesSafelySync = (paths, readFileSyncMethod, suppressErrors) => paths.map((filePath) => processIgnoreFileCore(filePath, readFileSyncMethod, suppressErrors)).filter(Boolean);
+var dedupePaths = (paths) => {
+  const seen = /* @__PURE__ */ new Set();
+  return paths.filter((filePath) => {
+    if (seen.has(filePath)) {
+      return false;
+    }
+    seen.add(filePath);
+    return true;
+  });
+};
+var globIgnoreFiles = (globFunction, patterns, normalizedOptions) => globFunction(patterns, __spreadValues(__spreadValues({}, normalizedOptions), ignoreFilesGlobOptions));
+var getParentIgnorePaths = (gitRoot, normalizedOptions) => gitRoot ? getParentGitignorePaths(gitRoot, normalizedOptions.cwd) : [];
+var combineIgnoreFilePaths = (gitRoot, normalizedOptions, childPaths) => dedupePaths([
+  ...getParentIgnorePaths(gitRoot, normalizedOptions),
+  ...childPaths
+]);
+var buildIgnoreResult = (files, normalizedOptions, gitRoot) => {
+  const baseDir = gitRoot || normalizedOptions.cwd;
+  const patterns = getPatternsFromIgnoreFiles(files, baseDir);
+  return {
+    patterns,
+    predicate: createIgnorePredicate(patterns, normalizedOptions.cwd, baseDir),
+    usingGitRoot: Boolean(gitRoot && gitRoot !== normalizedOptions.cwd)
+  };
+};
 var applyBaseToPattern = (pattern, base) => {
   if (!base) {
     return pattern;
@@ -12627,25 +12848,25 @@ var applyBaseToPattern = (pattern, base) => {
   const hasNonTrailingSlash = slashIndex !== -1 && slashIndex !== cleanPattern.length - 1;
   let result;
   if (!hasNonTrailingSlash) {
-    result = import_node_path.default.posix.join(base, "**", cleanPattern);
+    result = import_node_path3.default.posix.join(base, "**", cleanPattern);
   } else if (cleanPattern.startsWith("/")) {
-    result = import_node_path.default.posix.join(base, cleanPattern.slice(1));
+    result = import_node_path3.default.posix.join(base, cleanPattern.slice(1));
   } else {
-    result = import_node_path.default.posix.join(base, cleanPattern);
+    result = import_node_path3.default.posix.join(base, cleanPattern);
   }
   return isNegative ? "!" + result : result;
 };
 var parseIgnoreFile = (file, cwd) => {
-  const base = slash(import_node_path.default.relative(cwd, import_node_path.default.dirname(file.filePath)));
+  const base = slash(import_node_path3.default.relative(cwd, import_node_path3.default.dirname(file.filePath)));
   return file.content.split(/\r?\n/).filter((line) => line && !line.startsWith("#")).map((pattern) => applyBaseToPattern(pattern, base));
 };
 var toRelativePath = (fileOrDirectory, cwd) => {
-  cwd = slash(cwd);
-  if (import_node_path.default.isAbsolute(fileOrDirectory)) {
-    if (slash(fileOrDirectory).startsWith(cwd)) {
-      return import_node_path.default.relative(cwd, fileOrDirectory);
+  if (import_node_path3.default.isAbsolute(fileOrDirectory)) {
+    const relativePath = import_node_path3.default.relative(cwd, fileOrDirectory);
+    if (relativePath && !isPathInside(fileOrDirectory, cwd)) {
+      return void 0;
     }
-    throw new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);
+    return relativePath;
   }
   if (fileOrDirectory.startsWith("./")) {
     return fileOrDirectory.slice(2);
@@ -12655,56 +12876,81 @@ var toRelativePath = (fileOrDirectory, cwd) => {
   }
   return fileOrDirectory;
 };
-var getIsIgnoredPredicate = (files, cwd) => {
-  const patterns = files.flatMap((file) => parseIgnoreFile(file, cwd));
+var createIgnorePredicate = (patterns, cwd, baseDir) => {
   const ignores = (0, import_ignore.default)().add(patterns);
+  const resolvedCwd = import_node_path3.default.normalize(import_node_path3.default.resolve(cwd));
+  const resolvedBaseDir = import_node_path3.default.normalize(import_node_path3.default.resolve(baseDir));
   return (fileOrDirectory) => {
     fileOrDirectory = toPath(fileOrDirectory);
-    fileOrDirectory = toRelativePath(fileOrDirectory, cwd);
-    if (fileOrDirectory === void 0) {
+    const normalizedPath = import_node_path3.default.normalize(import_node_path3.default.resolve(fileOrDirectory));
+    if (normalizedPath === resolvedCwd) {
       return false;
     }
-    return fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false;
+    const relativePath = toRelativePath(fileOrDirectory, resolvedBaseDir);
+    if (relativePath === void 0) {
+      return false;
+    }
+    return relativePath ? ignores.ignores(slash(relativePath)) : false;
   };
 };
 var normalizeOptions = (options = {}) => {
-  var _a2, _b2;
+  var _a2, _b2, _c, _d;
+  const ignoreOption = options.ignore ? Array.isArray(options.ignore) ? options.ignore : [options.ignore] : [];
+  const cwd = (_a2 = toPath(options.cwd)) != null ? _a2 : import_node_process.default.cwd();
+  const deep = typeof options.deep === "number" ? Math.max(0, options.deep) + 1 : Number.POSITIVE_INFINITY;
   return {
-    cwd: (_a2 = toPath(options.cwd)) != null ? _a2 : import_node_process.default.cwd(),
-    suppressErrors: Boolean(options.suppressErrors),
-    deep: typeof options.deep === "number" ? options.deep : Number.POSITIVE_INFINITY,
-    ignore: [...(_b2 = options.ignore) != null ? _b2 : [], ...defaultIgnoredDirectories]
+    cwd,
+    suppressErrors: (_b2 = options.suppressErrors) != null ? _b2 : false,
+    deep,
+    ignore: [...ignoreOption, ...defaultIgnoredDirectories],
+    followSymbolicLinks: (_c = options.followSymbolicLinks) != null ? _c : true,
+    concurrency: options.concurrency,
+    throwErrorOnBrokenSymbolicLink: (_d = options.throwErrorOnBrokenSymbolicLink) != null ? _d : false,
+    fs: options.fs
   };
 };
+var collectIgnoreFileArtifactsAsync = (patterns, options, includeParentIgnoreFiles) => __async(null, null, function* () {
+  const normalizedOptions = normalizeOptions(options);
+  const childPaths = yield globIgnoreFiles(import_fast_glob.default, patterns, normalizedOptions);
+  const gitRoot = includeParentIgnoreFiles ? yield findGitRoot(normalizedOptions.cwd, normalizedOptions.fs) : void 0;
+  const allPaths = combineIgnoreFilePaths(gitRoot, normalizedOptions, childPaths);
+  const readFileMethod = getReadFileMethod(normalizedOptions.fs);
+  const files = yield readIgnoreFilesSafely(allPaths, readFileMethod, normalizedOptions.suppressErrors);
+  return { files, normalizedOptions, gitRoot };
+});
+var collectIgnoreFileArtifactsSync = (patterns, options, includeParentIgnoreFiles) => {
+  const normalizedOptions = normalizeOptions(options);
+  const childPaths = globIgnoreFiles(import_fast_glob.default.sync, patterns, normalizedOptions);
+  const gitRoot = includeParentIgnoreFiles ? findGitRootSync(normalizedOptions.cwd, normalizedOptions.fs) : void 0;
+  const allPaths = combineIgnoreFilePaths(gitRoot, normalizedOptions, childPaths);
+  const readFileSyncMethod = getReadFileSyncMethod(normalizedOptions.fs);
+  const files = readIgnoreFilesSafelySync(allPaths, readFileSyncMethod, normalizedOptions.suppressErrors);
+  return { files, normalizedOptions, gitRoot };
+};
 var isIgnoredByIgnoreFiles = (patterns, options) => __async(null, null, function* () {
-  const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options);
-  const paths = yield (0, import_fast_glob.default)(patterns, __spreadValues({
-    cwd,
-    suppressErrors,
-    deep,
-    ignore
-  }, ignoreFilesGlobOptions));
-  const files = yield Promise.all(paths.map((filePath) => __async(null, null, function* () {
-    return {
-      filePath,
-      content: yield import_promises3.default.readFile(filePath, "utf8")
-    };
-  })));
-  return getIsIgnoredPredicate(files, cwd);
+  const { files, normalizedOptions, gitRoot } = yield collectIgnoreFileArtifactsAsync(patterns, options, false);
+  return buildIgnoreResult(files, normalizedOptions, gitRoot).predicate;
 });
 var isIgnoredByIgnoreFilesSync = (patterns, options) => {
-  const { cwd, suppressErrors, deep, ignore } = normalizeOptions(options);
-  const paths = import_fast_glob.default.sync(patterns, __spreadValues({
-    cwd,
-    suppressErrors,
-    deep,
-    ignore
-  }, ignoreFilesGlobOptions));
-  const files = paths.map((filePath) => ({
-    filePath,
-    content: import_node_fs2.default.readFileSync(filePath, "utf8")
-  }));
-  return getIsIgnoredPredicate(files, cwd);
+  const { files, normalizedOptions, gitRoot } = collectIgnoreFileArtifactsSync(patterns, options, false);
+  return buildIgnoreResult(files, normalizedOptions, gitRoot).predicate;
+};
+var getPatternsFromIgnoreFiles = (files, baseDir) => files.flatMap((file) => parseIgnoreFile(file, baseDir));
+var getIgnorePatternsAndPredicate = (patterns, options, includeParentIgnoreFiles = false) => __async(null, null, function* () {
+  const { files, normalizedOptions, gitRoot } = yield collectIgnoreFileArtifactsAsync(
+    patterns,
+    options,
+    includeParentIgnoreFiles
+  );
+  return buildIgnoreResult(files, normalizedOptions, gitRoot);
+});
+var getIgnorePatternsAndPredicateSync = (patterns, options, includeParentIgnoreFiles = false) => {
+  const { files, normalizedOptions, gitRoot } = collectIgnoreFileArtifactsSync(
+    patterns,
+    options,
+    includeParentIgnoreFiles
+  );
+  return buildIgnoreResult(files, normalizedOptions, gitRoot);
 };
 var isGitIgnored = (options) => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);
 var isGitIgnoredSync = (options) => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);
@@ -12715,9 +12961,33 @@ var assertPatternsInput = (patterns) => {
     throw new TypeError("Patterns must be a string or an array of strings");
   }
 };
+var getStatMethod = (fsImplementation) => {
+  var _a2, _b2;
+  return (_b2 = (_a2 = bindFsMethod(fsImplementation == null ? void 0 : fsImplementation.promises, "stat")) != null ? _a2 : bindFsMethod(import_node_fs3.default.promises, "stat")) != null ? _b2 : promisifyFsMethod(fsImplementation, "stat");
+};
+var getStatSyncMethod2 = (fsImplementation) => {
+  var _a2;
+  return (_a2 = bindFsMethod(fsImplementation, "statSync")) != null ? _a2 : bindFsMethod(import_node_fs3.default, "statSync");
+};
+var isDirectory = (path5, fsImplementation) => __async(null, null, function* () {
+  try {
+    const stats = yield getStatMethod(fsImplementation)(path5);
+    return stats.isDirectory();
+  } catch (e) {
+    return false;
+  }
+});
+var isDirectorySync = (path5, fsImplementation) => {
+  try {
+    const stats = getStatSyncMethod2(fsImplementation)(path5);
+    return stats.isDirectory();
+  } catch (e) {
+    return false;
+  }
+};
 var normalizePathForDirectoryGlob = (filePath, cwd) => {
-  const path3 = isNegativePattern(filePath) ? filePath.slice(1) : filePath;
-  return import_node_path2.default.isAbsolute(path3) ? path3 : import_node_path2.default.join(cwd, path3);
+  const path5 = isNegativePattern(filePath) ? filePath.slice(1) : filePath;
+  return import_node_path4.default.isAbsolute(path5) ? path5 : import_node_path4.default.join(cwd, path5);
 };
 var shouldExpandGlobstarDirectory = (pattern) => {
   const match = pattern == null ? void 0 : pattern.match(/\*\*\/([^/]+)$/);
@@ -12726,17 +12996,18 @@ var shouldExpandGlobstarDirectory = (pattern) => {
   }
   const dirname = match[1];
   const hasWildcards = /[*?[\]{}]/.test(dirname);
-  const hasExtension = import_node_path2.default.extname(dirname) && !dirname.startsWith(".");
+  const hasExtension = import_node_path4.default.extname(dirname) && !dirname.startsWith(".");
   return !hasWildcards && !hasExtension;
 };
 var getDirectoryGlob = ({ directoryPath, files, extensions }) => {
   const extensionGlob = (extensions == null ? void 0 : extensions.length) > 0 ? `.${extensions.length > 1 ? `{${extensions.join(",")}}` : extensions[0]}` : "";
-  return files ? files.map((file) => import_node_path2.default.posix.join(directoryPath, `**/${import_node_path2.default.extname(file) ? file : `${file}${extensionGlob}`}`)) : [import_node_path2.default.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ""}`)];
+  return files ? files.map((file) => import_node_path4.default.posix.join(directoryPath, `**/${import_node_path4.default.extname(file) ? file : `${file}${extensionGlob}`}`)) : [import_node_path4.default.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ""}`)];
 };
 var directoryToGlob = (_0, ..._1) => __async(null, [_0, ..._1], function* (directoryPaths, {
   cwd = import_node_process2.default.cwd(),
   files,
-  extensions
+  extensions,
+  fs: fsImplementation
 } = {}) {
   const globs = yield Promise.all(directoryPaths.map((directoryPath) => __async(null, null, function* () {
     const checkPattern = isNegativePattern(directoryPath) ? directoryPath.slice(1) : directoryPath;
@@ -12744,49 +13015,51 @@ var directoryToGlob = (_0, ..._1) => __async(null, [_0, ..._1], function* (direc
       return getDirectoryGlob({ directoryPath, files, extensions });
     }
     const pathToCheck = normalizePathForDirectoryGlob(directoryPath, cwd);
-    return (yield isDirectory(pathToCheck)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath;
+    return (yield isDirectory(pathToCheck, fsImplementation)) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath;
   })));
   return globs.flat();
 });
 var directoryToGlobSync = (directoryPaths, {
   cwd = import_node_process2.default.cwd(),
   files,
-  extensions
+  extensions,
+  fs: fsImplementation
 } = {}) => directoryPaths.flatMap((directoryPath) => {
   const checkPattern = isNegativePattern(directoryPath) ? directoryPath.slice(1) : directoryPath;
   if (shouldExpandGlobstarDirectory(checkPattern)) {
     return getDirectoryGlob({ directoryPath, files, extensions });
   }
   const pathToCheck = normalizePathForDirectoryGlob(directoryPath, cwd);
-  return isDirectorySync(pathToCheck) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath;
+  return isDirectorySync(pathToCheck, fsImplementation) ? getDirectoryGlob({ directoryPath, files, extensions }) : directoryPath;
 });
 var toPatternsArray = (patterns) => {
   patterns = [...new Set([patterns].flat())];
   assertPatternsInput(patterns);
   return patterns;
 };
-var checkCwdOption = (cwd) => {
-  if (!cwd) {
+var checkCwdOption = (cwd, fsImplementation = import_node_fs3.default) => {
+  if (!cwd || !fsImplementation.statSync) {
     return;
   }
-  let stat;
+  let stats;
   try {
-    stat = import_node_fs3.default.statSync(cwd);
+    stats = fsImplementation.statSync(cwd);
   } catch (e) {
     return;
   }
-  if (!stat.isDirectory()) {
-    throw new Error("The `cwd` option must be a path to a directory");
+  if (!stats.isDirectory()) {
+    throw new Error(`The \`cwd\` option must be a path to a directory, got: ${cwd}`);
   }
 };
 var normalizeOptions2 = (options = {}) => {
-  var _a2, _b2;
+  var _a2;
+  const ignore = options.ignore ? Array.isArray(options.ignore) ? options.ignore : [options.ignore] : [];
   options = __spreadProps(__spreadValues({}, options), {
-    ignore: (_a2 = options.ignore) != null ? _a2 : [],
-    expandDirectories: (_b2 = options.expandDirectories) != null ? _b2 : true,
+    ignore,
+    expandDirectories: (_a2 = options.expandDirectories) != null ? _a2 : true,
     cwd: toPath(options.cwd)
   });
-  checkCwdOption(options.cwd);
+  checkCwdOption(options.cwd, options.fs);
   return options;
 };
 var normalizeArguments = (function_) => (patterns, options) => __async(null, null, function* () {
@@ -12801,28 +13074,76 @@ var getIgnoreFilesPatterns = (options) => {
   }
   return patterns;
 };
-var getFilter = (options) => __async(null, null, function* () {
+var applyIgnoreFilesAndGetFilter = (options) => __async(null, null, function* () {
   const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
-  return createFilterFunction(ignoreFilesPatterns.length > 0 && (yield isIgnoredByIgnoreFiles(ignoreFilesPatterns, options)));
+  if (ignoreFilesPatterns.length === 0) {
+    return {
+      options,
+      filter: createFilterFunction(false, options.cwd)
+    };
+  }
+  const includeParentIgnoreFiles = options.gitignore === true;
+  const { patterns, predicate, usingGitRoot } = yield getIgnorePatternsAndPredicate(ignoreFilesPatterns, options, includeParentIgnoreFiles);
+  const patternsForFastGlob = convertPatternsForFastGlob(patterns, usingGitRoot, normalizeDirectoryPatternForFastGlob);
+  const modifiedOptions = __spreadProps(__spreadValues({}, options), {
+    ignore: [...options.ignore, ...patternsForFastGlob]
+  });
+  return {
+    options: modifiedOptions,
+    filter: createFilterFunction(predicate, options.cwd)
+  };
 });
-var getFilterSync = (options) => {
+var applyIgnoreFilesAndGetFilterSync = (options) => {
   const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
-  return createFilterFunction(ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options));
+  if (ignoreFilesPatterns.length === 0) {
+    return {
+      options,
+      filter: createFilterFunction(false, options.cwd)
+    };
+  }
+  const includeParentIgnoreFiles = options.gitignore === true;
+  const { patterns, predicate, usingGitRoot } = getIgnorePatternsAndPredicateSync(ignoreFilesPatterns, options, includeParentIgnoreFiles);
+  const patternsForFastGlob = convertPatternsForFastGlob(patterns, usingGitRoot, normalizeDirectoryPatternForFastGlob);
+  const modifiedOptions = __spreadProps(__spreadValues({}, options), {
+    ignore: [...options.ignore, ...patternsForFastGlob]
+  });
+  return {
+    options: modifiedOptions,
+    filter: createFilterFunction(predicate, options.cwd)
+  };
 };
-var createFilterFunction = (isIgnored) => {
+var createFilterFunction = (isIgnored, cwd) => {
   const seen = /* @__PURE__ */ new Set();
+  const basePath = cwd || import_node_process2.default.cwd();
+  const pathCache = /* @__PURE__ */ new Map();
   return (fastGlobResult) => {
     var _a2;
-    const pathKey = import_node_path2.default.normalize((_a2 = fastGlobResult.path) != null ? _a2 : fastGlobResult);
-    if (seen.has(pathKey) || isIgnored && isIgnored(pathKey)) {
+    const pathKey = import_node_path4.default.normalize((_a2 = fastGlobResult.path) != null ? _a2 : fastGlobResult);
+    if (seen.has(pathKey)) {
       return false;
     }
+    if (isIgnored) {
+      let absolutePath = pathCache.get(pathKey);
+      if (absolutePath === void 0) {
+        absolutePath = import_node_path4.default.isAbsolute(pathKey) ? pathKey : import_node_path4.default.resolve(basePath, pathKey);
+        pathCache.set(pathKey, absolutePath);
+        if (pathCache.size > 1e4) {
+          pathCache.clear();
+        }
+      }
+      if (isIgnored(absolutePath)) {
+        return false;
+      }
+    }
     seen.add(pathKey);
     return true;
   };
 };
 var unionFastGlobResults = (results, filter) => results.flat().filter((fastGlobResult) => filter(fastGlobResult));
 var convertNegativePatterns = (patterns, options) => {
+  if (patterns.length > 0 && patterns.every((pattern) => isNegativePattern(pattern))) {
+    patterns = ["**/*", ...patterns];
+  }
   const tasks = [];
   while (patterns.length > 0) {
     const index = patterns.findIndex((pattern) => isNegativePattern(pattern));
@@ -12849,14 +13170,22 @@ var convertNegativePatterns = (patterns, options) => {
   }
   return tasks;
 };
+var applyParentDirectoryIgnoreAdjustments = (tasks) => tasks.map((task) => ({
+  patterns: task.patterns,
+  options: __spreadProps(__spreadValues({}, task.options), {
+    ignore: adjustIgnorePatternsForParentDirectories(task.patterns, task.options.ignore)
+  })
+}));
 var normalizeExpandDirectoriesOption = (options, cwd) => __spreadValues(__spreadValues({}, cwd ? { cwd } : {}), Array.isArray(options) ? { files: options } : options);
 var generateTasks = (patterns, options) => __async(null, null, function* () {
   const globTasks = convertNegativePatterns(patterns, options);
-  const { cwd, expandDirectories } = options;
+  const { cwd, expandDirectories, fs: fsImplementation } = options;
   if (!expandDirectories) {
-    return globTasks;
+    return applyParentDirectoryIgnoreAdjustments(globTasks);
   }
-  const directoryToGlobOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);
+  const directoryToGlobOptions = __spreadProps(__spreadValues({}, normalizeExpandDirectoriesOption(expandDirectories, cwd)), {
+    fs: fsImplementation
+  });
   return Promise.all(globTasks.map((task) => __async(null, null, function* () {
     let { patterns: patterns2, options: options2 } = task;
     [
@@ -12864,45 +13193,44 @@ var generateTasks = (patterns, options) => __async(null, null, function* () {
       options2.ignore
     ] = yield Promise.all([
       directoryToGlob(patterns2, directoryToGlobOptions),
-      directoryToGlob(options2.ignore, { cwd })
+      directoryToGlob(options2.ignore, { cwd, fs: fsImplementation })
     ]);
+    options2.ignore = adjustIgnorePatternsForParentDirectories(patterns2, options2.ignore);
     return { patterns: patterns2, options: options2 };
   })));
 });
 var generateTasksSync = (patterns, options) => {
   const globTasks = convertNegativePatterns(patterns, options);
-  const { cwd, expandDirectories } = options;
+  const { cwd, expandDirectories, fs: fsImplementation } = options;
   if (!expandDirectories) {
-    return globTasks;
+    return applyParentDirectoryIgnoreAdjustments(globTasks);
   }
-  const directoryToGlobSyncOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);
+  const directoryToGlobSyncOptions = __spreadProps(__spreadValues({}, normalizeExpandDirectoriesOption(expandDirectories, cwd)), {
+    fs: fsImplementation
+  });
   return globTasks.map((task) => {
     let { patterns: patterns2, options: options2 } = task;
     patterns2 = directoryToGlobSync(patterns2, directoryToGlobSyncOptions);
-    options2.ignore = directoryToGlobSync(options2.ignore, { cwd });
+    options2.ignore = directoryToGlobSync(options2.ignore, { cwd, fs: fsImplementation });
+    options2.ignore = adjustIgnorePatternsForParentDirectories(patterns2, options2.ignore);
     return { patterns: patterns2, options: options2 };
   });
 };
 var globby = normalizeArguments((patterns, options) => __async(null, null, function* () {
-  const [
-    tasks,
-    filter
-  ] = yield Promise.all([
-    generateTasks(patterns, options),
-    getFilter(options)
-  ]);
+  const { options: modifiedOptions, filter } = yield applyIgnoreFilesAndGetFilter(options);
+  const tasks = yield generateTasks(patterns, modifiedOptions);
   const results = yield Promise.all(tasks.map((task) => (0, import_fast_glob2.default)(task.patterns, task.options)));
   return unionFastGlobResults(results, filter);
 }));
 var globbySync = normalizeArgumentsSync((patterns, options) => {
-  const tasks = generateTasksSync(patterns, options);
-  const filter = getFilterSync(options);
+  const { options: modifiedOptions, filter } = applyIgnoreFilesAndGetFilterSync(options);
+  const tasks = generateTasksSync(patterns, modifiedOptions);
   const results = tasks.map((task) => import_fast_glob2.default.sync(task.patterns, task.options));
   return unionFastGlobResults(results, filter);
 });
 var globbyStream = normalizeArgumentsSync((patterns, options) => {
-  const tasks = generateTasksSync(patterns, options);
-  const filter = getFilterSync(options);
+  const { options: modifiedOptions, filter } = applyIgnoreFilesAndGetFilterSync(options);
+  const tasks = generateTasksSync(patterns, modifiedOptions);
   const streams = tasks.map((task) => import_fast_glob2.default.stream(task.patterns, task.options));
   if (streams.length === 0) {
     return import_node_stream2.Readable.from([]);
@@ -13036,17 +13364,17 @@ function visit(node, visitor) {
 visit.BREAK = BREAK;
 visit.SKIP = SKIP;
 visit.REMOVE = REMOVE;
-function visit_(key, node, visitor, path3) {
-  const ctrl = callVisitor(key, node, visitor, path3);
+function visit_(key, node, visitor, path5) {
+  const ctrl = callVisitor(key, node, visitor, path5);
   if (isNode(ctrl) || isPair(ctrl)) {
-    replaceNode(key, path3, ctrl);
-    return visit_(key, ctrl, visitor, path3);
+    replaceNode(key, path5, ctrl);
+    return visit_(key, ctrl, visitor, path5);
   }
   if (typeof ctrl !== "symbol") {
     if (isCollection(node)) {
-      path3 = Object.freeze(path3.concat(node));
+      path5 = Object.freeze(path5.concat(node));
       for (let i = 0; i < node.items.length; ++i) {
-        const ci2 = visit_(i, node.items[i], visitor, path3);
+        const ci2 = visit_(i, node.items[i], visitor, path5);
         if (typeof ci2 === "number")
           i = ci2 - 1;
         else if (ci2 === BREAK)
@@ -13057,13 +13385,13 @@ function visit_(key, node, visitor, path3) {
         }
       }
     } else if (isPair(node)) {
-      path3 = Object.freeze(path3.concat(node));
-      const ck = visit_("key", node.key, visitor, path3);
+      path5 = Object.freeze(path5.concat(node));
+      const ck = visit_("key", node.key, visitor, path5);
       if (ck === BREAK)
         return BREAK;
       else if (ck === REMOVE)
         node.key = null;
-      const cv = visit_("value", node.value, visitor, path3);
+      const cv = visit_("value", node.value, visitor, path5);
       if (cv === BREAK)
         return BREAK;
       else if (cv === REMOVE)
@@ -13086,18 +13414,18 @@ function visitAsync(node, visitor) {
 visitAsync.BREAK = BREAK;
 visitAsync.SKIP = SKIP;
 visitAsync.REMOVE = REMOVE;
-function visitAsync_(key, node, visitor, path3) {
+function visitAsync_(key, node, visitor, path5) {
   return __async(this, null, function* () {
-    const ctrl = yield callVisitor(key, node, visitor, path3);
+    const ctrl = yield callVisitor(key, node, visitor, path5);
     if (isNode(ctrl) || isPair(ctrl)) {
-      replaceNode(key, path3, ctrl);
-      return visitAsync_(key, ctrl, visitor, path3);
+      replaceNode(key, path5, ctrl);
+      return visitAsync_(key, ctrl, visitor, path5);
     }
     if (typeof ctrl !== "symbol") {
       if (isCollection(node)) {
-        path3 = Object.freeze(path3.concat(node));
+        path5 = Object.freeze(path5.concat(node));
         for (let i = 0; i < node.items.length; ++i) {
-          const ci2 = yield visitAsync_(i, node.items[i], visitor, path3);
+          const ci2 = yield visitAsync_(i, node.items[i], visitor, path5);
           if (typeof ci2 === "number")
             i = ci2 - 1;
           else if (ci2 === BREAK)
@@ -13108,13 +13436,13 @@ function visitAsync_(key, node, visitor, path3) {
           }
         }
       } else if (isPair(node)) {
-        path3 = Object.freeze(path3.concat(node));
-        const ck = yield visitAsync_("key", node.key, visitor, path3);
+        path5 = Object.freeze(path5.concat(node));
+        const ck = yield visitAsync_("key", node.key, visitor, path5);
         if (ck === BREAK)
           return BREAK;
         else if (ck === REMOVE)
           node.key = null;
-        const cv = yield visitAsync_("value", node.value, visitor, path3);
+        const cv = yield visitAsync_("value", node.value, visitor, path5);
         if (cv === BREAK)
           return BREAK;
         else if (cv === REMOVE)
@@ -13142,24 +13470,24 @@ function initVisitor(visitor) {
   }
   return visitor;
 }
-function callVisitor(key, node, visitor, path3) {
+function callVisitor(key, node, visitor, path5) {
   var _a2, _b2, _c, _d, _e;
   if (typeof visitor === "function")
-    return visitor(key, node, path3);
+    return visitor(key, node, path5);
   if (isMap(node))
-    return (_a2 = visitor.Map) == null ? void 0 : _a2.call(visitor, key, node, path3);
+    return (_a2 = visitor.Map) == null ? void 0 : _a2.call(visitor, key, node, path5);
   if (isSeq(node))
-    return (_b2 = visitor.Seq) == null ? void 0 : _b2.call(visitor, key, node, path3);
+    return (_b2 = visitor.Seq) == null ? void 0 : _b2.call(visitor, key, node, path5);
   if (isPair(node))
-    return (_c = visitor.Pair) == null ? void 0 : _c.call(visitor, key, node, path3);
+    return (_c = visitor.Pair) == null ? void 0 : _c.call(visitor, key, node, path5);
   if (isScalar(node))
-    return (_d = visitor.Scalar) == null ? void 0 : _d.call(visitor, key, node, path3);
+    return (_d = visitor.Scalar) == null ? void 0 : _d.call(visitor, key, node, path5);
   if (isAlias(node))
-    return (_e = visitor.Alias) == null ? void 0 : _e.call(visitor, key, node, path3);
+    return (_e = visitor.Alias) == null ? void 0 : _e.call(visitor, key, node, path5);
   return void 0;
 }
-function replaceNode(key, path3, node) {
-  const parent = path3[path3.length - 1];
+function replaceNode(key, path5, node) {
+  const parent = path5[path5.length - 1];
   if (isCollection(parent)) {
     parent.items[key] = node;
   } else if (isPair(parent)) {
@@ -13691,10 +14019,10 @@ function createNode(value, tagName, ctx) {
 }
 
 // node_modules/yaml/browser/dist/nodes/Collection.js
-function collectionFromPath(schema4, path3, value) {
+function collectionFromPath(schema4, path5, value) {
   let v2 = value;
-  for (let i = path3.length - 1; i >= 0; --i) {
-    const k2 = path3[i];
+  for (let i = path5.length - 1; i >= 0; --i) {
+    const k2 = path5[i];
     if (typeof k2 === "number" && Number.isInteger(k2) && k2 >= 0) {
       const a = [];
       a[k2] = v2;
@@ -13713,7 +14041,7 @@ function collectionFromPath(schema4, path3, value) {
     sourceObjects: /* @__PURE__ */ new Map()
   });
 }
-var isEmptyPath = (path3) => path3 == null || typeof path3 === "object" && !!path3[Symbol.iterator]().next().done;
+var isEmptyPath = (path5) => path5 == null || typeof path5 === "object" && !!path5[Symbol.iterator]().next().done;
 var Collection = class extends NodeBase {
   constructor(type, schema4) {
     super(type);
@@ -13743,11 +14071,11 @@ var Collection = class extends NodeBase {
    * be a Pair instance or a `{ key, value }` object, which may not have a key
    * that already exists in the map.
    */
-  addIn(path3, value) {
-    if (isEmptyPath(path3))
+  addIn(path5, value) {
+    if (isEmptyPath(path5))
       this.add(value);
     else {
-      const [key, ...rest] = path3;
+      const [key, ...rest] = path5;
       const node = this.get(key, true);
       if (isCollection(node))
         node.addIn(rest, value);
@@ -13761,8 +14089,8 @@ var Collection = class extends NodeBase {
    * Removes a value from the collection.
    * @returns `true` if the item was found and removed.
    */
-  deleteIn(path3) {
-    const [key, ...rest] = path3;
+  deleteIn(path5) {
+    const [key, ...rest] = path5;
     if (rest.length === 0)
       return this.delete(key);
     const node = this.get(key, true);
@@ -13776,8 +14104,8 @@ var Collection = class extends NodeBase {
    * scalar values from their surrounding node; to disable set `keepScalar` to
    * `true` (collections are always returned intact).
    */
-  getIn(path3, keepScalar) {
-    const [key, ...rest] = path3;
+  getIn(path5, keepScalar) {
+    const [key, ...rest] = path5;
     const node = this.get(key, true);
     if (rest.length === 0)
       return !keepScalar && isScalar(node) ? node.value : node;
@@ -13795,8 +14123,8 @@ var Collection = class extends NodeBase {
   /**
    * Checks if the collection includes a value with the key `key`.
    */
-  hasIn(path3) {
-    const [key, ...rest] = path3;
+  hasIn(path5) {
+    const [key, ...rest] = path5;
     if (rest.length === 0)
       return this.has(key);
     const node = this.get(key, true);
@@ -13806,8 +14134,8 @@ var Collection = class extends NodeBase {
    * Sets a value in this collection. For `!!set`, `value` needs to be a
    * boolean to add/remove the item from the set.
    */
-  setIn(path3, value) {
-    const [key, ...rest] = path3;
+  setIn(path5, value) {
+    const [key, ...rest] = path5;
     if (rest.length === 0) {
       this.set(key, value);
     } else {
@@ -15953,9 +16281,9 @@ var Document = class _Document {
       this.contents.add(value);
   }
   /** Adds a value to the document. */
-  addIn(path3, value) {
+  addIn(path5, value) {
     if (assertCollection(this.contents))
-      this.contents.addIn(path3, value);
+      this.contents.addIn(path5, value);
   }
   /**
    * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
@@ -16030,14 +16358,14 @@ var Document = class _Document {
    * Removes a value from the document.
    * @returns `true` if the item was found and removed.
    */
-  deleteIn(path3) {
-    if (isEmptyPath(path3)) {
+  deleteIn(path5) {
+    if (isEmptyPath(path5)) {
       if (this.contents == null)
         return false;
       this.contents = null;
       return true;
     }
-    return assertCollection(this.contents) ? this.contents.deleteIn(path3) : false;
+    return assertCollection(this.contents) ? this.contents.deleteIn(path5) : false;
   }
   /**
    * Returns item at `key`, or `undefined` if not found. By default unwraps
@@ -16052,10 +16380,10 @@ var Document = class _Document {
    * scalar values from their surrounding node; to disable set `keepScalar` to
    * `true` (collections are always returned intact).
    */
-  getIn(path3, keepScalar) {
-    if (isEmptyPath(path3))
+  getIn(path5, keepScalar) {
+    if (isEmptyPath(path5))
       return !keepScalar && isScalar(this.contents) ? this.contents.value : this.contents;
-    return isCollection(this.contents) ? this.contents.getIn(path3, keepScalar) : void 0;
+    return isCollection(this.contents) ? this.contents.getIn(path5, keepScalar) : void 0;
   }
   /**
    * Checks if the document includes a value with the key `key`.
@@ -16066,10 +16394,10 @@ var Document = class _Document {
   /**
    * Checks if the document includes a value at `path`.
    */
-  hasIn(path3) {
-    if (isEmptyPath(path3))
+  hasIn(path5) {
+    if (isEmptyPath(path5))
       return this.contents !== void 0;
-    return isCollection(this.contents) ? this.contents.hasIn(path3) : false;
+    return isCollection(this.contents) ? this.contents.hasIn(path5) : false;
   }
   /**
    * Sets a value in this document. For `!!set`, `value` needs to be a
@@ -16086,13 +16414,13 @@ var Document = class _Document {
    * Sets a value in this document. For `!!set`, `value` needs to be a
    * boolean to add/remove the item from the set.
    */
-  setIn(path3, value) {
-    if (isEmptyPath(path3)) {
+  setIn(path5, value) {
+    if (isEmptyPath(path5)) {
       this.contents = value;
     } else if (this.contents == null) {
-      this.contents = collectionFromPath(this.schema, Array.from(path3), value);
+      this.contents = collectionFromPath(this.schema, Array.from(path5), value);
     } else if (assertCollection(this.contents)) {
-      this.contents.setIn(path3, value);
+      this.contents.setIn(path5, value);
     }
   }
   /**
@@ -17895,9 +18223,9 @@ function visit2(cst, visitor) {
 visit2.BREAK = BREAK2;
 visit2.SKIP = SKIP2;
 visit2.REMOVE = REMOVE2;
-visit2.itemAtPath = (cst, path3) => {
+visit2.itemAtPath = (cst, path5) => {
   let item = cst;
-  for (const [field, index] of path3) {
+  for (const [field, index] of path5) {
     const tok = item == null ? void 0 : item[field];
     if (tok && "items" in tok) {
       item = tok.items[index];
@@ -17906,23 +18234,23 @@ visit2.itemAtPath = (cst, path3) => {
   }
   return item;
 };
-visit2.parentCollection = (cst, path3) => {
-  const parent = visit2.itemAtPath(cst, path3.slice(0, -1));
-  const field = path3[path3.length - 1][0];
+visit2.parentCollection = (cst, path5) => {
+  const parent = visit2.itemAtPath(cst, path5.slice(0, -1));
+  const field = path5[path5.length - 1][0];
   const coll = parent == null ? void 0 : parent[field];
   if (coll && "items" in coll)
     return coll;
   throw new Error("Parent collection not found");
 };
-function _visit(path3, item, visitor) {
-  let ctrl = visitor(item, path3);
+function _visit(path5, item, visitor) {
+  let ctrl = visitor(item, path5);
   if (typeof ctrl === "symbol")
     return ctrl;
   for (const field of ["key", "value"]) {
     const token = item[field];
     if (token && "items" in token) {
       for (let i = 0; i < token.items.length; ++i) {
-        const ci2 = _visit(Object.freeze(path3.concat([[field, i]])), token.items[i], visitor);
+        const ci2 = _visit(Object.freeze(path5.concat([[field, i]])), token.items[i], visitor);
         if (typeof ci2 === "number")
           i = ci2 - 1;
         else if (ci2 === BREAK2)
@@ -17933,10 +18261,10 @@ function _visit(path3, item, visitor) {
         }
       }
       if (typeof ctrl === "function" && field === "key")
-        ctrl = ctrl(item, path3);
+        ctrl = ctrl(item, path5);
     }
   }
-  return typeof ctrl === "function" ? ctrl(item, path3) : ctrl;
+  return typeof ctrl === "function" ? ctrl(item, path5) : ctrl;
 }
 
 // node_modules/yaml/browser/dist/parse/cst.js
@@ -20063,15 +20391,15 @@ var import_minimist = __toESM(require_minimist(), 1);
 
 // node_modules/envapi/target/esm/index.mjs
 var import_node_fs5 = __toESM(require("fs"), 1);
-var import_node_path4 = __toESM(require("path"), 1);
-var import_node_util3 = require("util");
+var import_node_path6 = __toESM(require("path"), 1);
+var import_node_util4 = require("util");
 var DOTENV = ".env";
 var Q1 = '"';
 var Q2 = "'";
 var Q3 = "`";
 var KR = /^[a-zA-Z_]\w*$/;
 var SR = /\s/;
-var decoder = new import_node_util3.TextDecoder();
+var decoder = new import_node_util4.TextDecoder();
 var parse3 = (content) => {
   const e = {};
   let k2 = "";
@@ -20140,7 +20468,7 @@ var formatValue = (v2) => {
   return `${Q3}${v2}${Q3}`;
 };
 var stringify5 = (env) => Object.entries(env).map(([k2, v2]) => `${k2}=${formatValue(v2 || "")}`).join("\n");
-var _load = (read, ...files) => files.reverse().reduce((m2, f2) => Object.assign(m2, parse3(read(import_node_path4.default.resolve(f2)))), {});
+var _load = (read, ...files) => files.reverse().reduce((m2, f2) => Object.assign(m2, parse3(read(import_node_path6.default.resolve(f2)))), {});
 var load = (...files) => _load((file) => import_node_fs5.default.readFileSync(file, "utf8"), ...files);
 var loadSafe = (...files) => _load(
   (file) => import_node_fs5.default.existsSync(file) ? import_node_fs5.default.readFileSync(file, "utf8") : "",
build/vendor-extra.d.ts
@@ -266,7 +266,11 @@ type Options$1 = {
 	/**
 	Respect ignore patterns in `.gitignore` files that apply to the globbed files.
 
-	Performance note: This option searches for all `.gitignore` files in the entire directory tree before globbing, which can be slow. For better performance, use `ignoreFiles: '.gitignore'` to only respect the root `.gitignore` file.
+	When enabled, globby searches for `.gitignore` files from the current working directory downward, and if a Git repository is detected (by finding a `.git` directory), it also respects `.gitignore` files in parent directories up to the repository root. This matches Git's actual behavior where patterns from parent `.gitignore` files apply to subdirectories.
+
+	Gitignore patterns take priority over user patterns, matching Git's behavior. To include gitignored files, set this to `false`.
+
+	Performance: Globby reads `.gitignore` files before globbing. When there are no negation patterns (like `!important.log`) and no parent `.gitignore` files are found, it passes ignore patterns to fast-glob to skip traversing ignored directories entirely, which significantly improves performance for large `node_modules` or build directories. When negation patterns or parent `.gitignore` files are present, all filtering is done after traversal to ensure correct Git-compatible behavior. For optimal performance, prefer specific `.gitignore` patterns without negations, or use `ignoreFiles: '.gitignore'` to target only the root ignore file.
 
 	@default false
 	*/
@@ -289,7 +293,56 @@ type Options$1 = {
 	readonly cwd?: URL | string;
 } & FastGlobOptionsWithoutCwd;
 type GitignoreOptions = {
+	/**
+	The current working directory in which to search.
+
+	@default process.cwd()
+	*/
 	readonly cwd?: URL | string;
+	/**
+	Suppress errors when encountering directories or files without read permissions.
+
+	By default, fast-glob only suppresses `ENOENT` errors. Set to `true` to suppress any error.
+
+	@default false
+	*/
+	readonly suppressErrors?: boolean;
+	/**
+	Specifies the maximum depth of ignore file search relative to the start directory.
+
+	@default Infinity
+	*/
+	readonly deep?: number;
+	/**
+	Glob patterns to exclude from ignore file search.
+
+	@default []
+	*/
+	readonly ignore?: string | readonly string[];
+	/**
+	Indicates whether to traverse descendants of symbolic link directories.
+
+	@default true
+	*/
+	readonly followSymbolicLinks?: boolean;
+	/**
+	Specifies the maximum number of concurrent requests from a reader to read directories.
+
+	@default os.cpus().length
+	*/
+	readonly concurrency?: number;
+	/**
+	Throw an error when symbolic link is broken if `true` or safely return `lstat` call if `false`.
+
+	@default false
+	*/
+	readonly throwErrorOnBrokenSymbolicLink?: boolean;
+	/**
+	Custom file system implementation (useful for testing or virtual file systems).
+
+	@default undefined
+	*/
+	readonly fs?: FastGlob.Options["fs"];
 };
 type GlobbyFilterFunction = (path: URL | string) => boolean;
 type AsyncIterableReadable<Value> = Omit<NodeJS.ReadableStream, typeof Symbol.asyncIterator> & {
@@ -297,17 +350,23 @@ type AsyncIterableReadable<Value> = Omit<NodeJS.ReadableStream, typeof Symbol.as
 };
 type GlobbyStream = AsyncIterableReadable<string>;
 type GlobbyEntryStream = AsyncIterableReadable<GlobEntry>;
-declare function globby(patterns: string | readonly string[], options: Options$1 & {
+declare function globby(patterns: string | readonly string[], options: Options$1 & ({
 	objectMode: true;
-}): Promise<GlobEntry[]>;
+} | {
+	stats: true;
+})): Promise<GlobEntry[]>;
 declare function globby(patterns: string | readonly string[], options?: Options$1): Promise<string[]>;
-declare function globbySync(patterns: string | readonly string[], options: Options$1 & {
+declare function globbySync(patterns: string | readonly string[], options: Options$1 & ({
 	objectMode: true;
-}): GlobEntry[];
+} | {
+	stats: true;
+})): GlobEntry[];
 declare function globbySync(patterns: string | readonly string[], options?: Options$1): string[];
-declare function globbyStream(patterns: string | readonly string[], options: Options$1 & {
+declare function globbyStream(patterns: string | readonly string[], options: Options$1 & ({
 	objectMode: true;
-}): GlobbyEntryStream;
+} | {
+	stats: true;
+})): GlobbyEntryStream;
 declare function globbyStream(patterns: string | readonly string[], options?: Options$1): GlobbyStream;
 declare function generateGlobTasks(patterns: string | readonly string[], options?: Options$1): Promise<GlobTask[]>;
 declare function generateGlobTasksSync(patterns: string | readonly string[], options?: Options$1): GlobTask[];
src/versions.ts
@@ -19,9 +19,9 @@ export const versions: Record<string, string> = {
   dotenv: '0.2.3',
   fetch: '1.6.7',
   fs: '11.3.2',
-  glob: '15.0.0',
+  glob: '16.0.0',
   minimist: '1.2.8',
   ps: '1.0.0',
-  which: '5.0.0',
+  which: '6.0.0',
   yaml: '2.8.1',
 }
test/export.test.js
@@ -245,6 +245,7 @@ describe('index', () => {
     assert.equal(typeof index.fs.FileWriteStream, 'function', 'index.fs.FileWriteStream')
     assert.equal(typeof index.fs.ReadStream, 'function', 'index.fs.ReadStream')
     assert.equal(typeof index.fs.Stats, 'function', 'index.fs.Stats')
+    assert.equal(typeof index.fs.Utf8Stream, 'function', 'index.fs.Utf8Stream')
     assert.equal(typeof index.fs.WriteStream, 'function', 'index.fs.WriteStream')
     assert.equal(typeof index.fs._toUnixTimestamp, 'function', 'index.fs._toUnixTimestamp')
     assert.equal(typeof index.fs.access, 'function', 'index.fs.access')
@@ -321,6 +322,7 @@ describe('index', () => {
     assert.equal(typeof index.fs.mkdirs, 'function', 'index.fs.mkdirs')
     assert.equal(typeof index.fs.mkdirsSync, 'function', 'index.fs.mkdirsSync')
     assert.equal(typeof index.fs.mkdtemp, 'function', 'index.fs.mkdtemp')
+    assert.equal(typeof index.fs.mkdtempDisposableSync, 'function', 'index.fs.mkdtempDisposableSync')
     assert.equal(typeof index.fs.mkdtempSync, 'function', 'index.fs.mkdtempSync')
     assert.equal(typeof index.fs.move, 'function', 'index.fs.move')
     assert.equal(typeof index.fs.moveSync, 'function', 'index.fs.moveSync')
.size-limit.json
@@ -19,7 +19,7 @@
       "README.md",
       "LICENSE"
     ],
-    "limit": "128.901 kB",
+    "limit": "128.95 kB",
     "brotli": false,
     "gzip": false
   },
@@ -33,21 +33,21 @@
       "build/globals.js",
       "build/deno.js"
     ],
-    "limit": "831.105 kB",
+    "limit": "845.85 kB",
     "brotli": false,
     "gzip": false
   },
   {
     "name": "libdefs",
     "path": "build/*.d.ts",
-    "limit": "41.56 kB",
+    "limit": "43.75 kB",
     "brotli": false,
     "gzip": false
   },
   {
     "name": "vendor",
     "path": "build/vendor-*.{cjs,d.ts}",
-    "limit": "783.35 kB",
+    "limit": "799.35 kB",
     "brotli": false,
     "gzip": false
   },
@@ -66,7 +66,7 @@
       "README.md",
       "LICENSE"
     ],
-    "limit": "889.66 kB",
+    "limit": "906.55 kB",
     "brotli": false,
     "gzip": false
   }
package-lock.json
@@ -17,7 +17,7 @@
         "@size-limit/file": "11.2.0",
         "@types/fs-extra": "11.0.4",
         "@types/minimist": "1.2.5",
-        "@types/node": "24.10.0",
+        "@types/node": "24.10.1",
         "@types/which": "3.0.4",
         "@webpod/ingrid": "1.1.1",
         "@webpod/ps": "1.0.0",
@@ -28,8 +28,8 @@
         "depseek": "0.4.3",
         "dts-bundle-generator": "9.5.1",
         "envapi": "0.2.3",
-        "esbuild": "0.25.12",
-        "esbuild-node-externals": "1.18.0",
+        "esbuild": "0.27.0",
+        "esbuild-node-externals": "1.20.1",
         "esbuild-plugin-entry-chunks": "0.1.17",
         "esbuild-plugin-extract-helpers": "0.0.6",
         "esbuild-plugin-hybrid-export": "0.3.1",
@@ -38,9 +38,9 @@
         "esbuild-plugin-utils": "0.1.0",
         "fs-extra": "11.3.2",
         "get-port": "7.1.0",
-        "globby": "15.0.0",
+        "globby": "16.0.0",
         "jsr": "0.13.5",
-        "lefthook": "2.0.2",
+        "lefthook": "2.0.4",
         "madge": "8.0.0",
         "maml.js": "^0.0.3",
         "minimist": "1.2.8",
@@ -52,7 +52,7 @@
         "tsx": "4.20.6",
         "typescript": "5.9.3",
         "vitepress": "1.6.4",
-        "which": "5.0.0",
+        "which": "6.0.0",
         "yaml": "2.8.1",
         "zurk": "0.11.10"
       },
@@ -205,6 +205,7 @@
       "integrity": "sha512-cZ0Iq3OzFUPpgszzDr1G1aJV5UMIZ4VygJ2Az252q4Rdf5cQMhYEIKArWY/oUjMhQmosM8ygOovNq7gvA9CdCg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@algolia/client-common": "5.29.0",
         "@algolia/requester-browser-xhr": "5.29.0",
@@ -822,9 +823,9 @@
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
-      "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz",
+      "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==",
       "cpu": [
         "ppc64"
       ],
@@ -839,9 +840,9 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
-      "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz",
+      "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==",
       "cpu": [
         "arm"
       ],
@@ -856,9 +857,9 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
-      "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz",
+      "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==",
       "cpu": [
         "arm64"
       ],
@@ -873,9 +874,9 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
-      "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz",
+      "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==",
       "cpu": [
         "x64"
       ],
@@ -890,9 +891,9 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
-      "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz",
+      "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==",
       "cpu": [
         "arm64"
       ],
@@ -907,9 +908,9 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
-      "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz",
+      "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==",
       "cpu": [
         "x64"
       ],
@@ -924,9 +925,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
-      "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz",
+      "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==",
       "cpu": [
         "arm64"
       ],
@@ -941,9 +942,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
-      "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz",
+      "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==",
       "cpu": [
         "x64"
       ],
@@ -958,9 +959,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
-      "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz",
+      "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==",
       "cpu": [
         "arm"
       ],
@@ -975,9 +976,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
-      "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz",
+      "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==",
       "cpu": [
         "arm64"
       ],
@@ -992,9 +993,9 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
-      "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz",
+      "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==",
       "cpu": [
         "ia32"
       ],
@@ -1009,9 +1010,9 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
-      "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz",
+      "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==",
       "cpu": [
         "loong64"
       ],
@@ -1026,9 +1027,9 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
-      "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz",
+      "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==",
       "cpu": [
         "mips64el"
       ],
@@ -1043,9 +1044,9 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
-      "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz",
+      "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==",
       "cpu": [
         "ppc64"
       ],
@@ -1060,9 +1061,9 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
-      "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz",
+      "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==",
       "cpu": [
         "riscv64"
       ],
@@ -1077,9 +1078,9 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
-      "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz",
+      "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==",
       "cpu": [
         "s390x"
       ],
@@ -1094,9 +1095,9 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
-      "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz",
+      "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==",
       "cpu": [
         "x64"
       ],
@@ -1111,9 +1112,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
-      "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz",
+      "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==",
       "cpu": [
         "arm64"
       ],
@@ -1128,9 +1129,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
-      "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz",
+      "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==",
       "cpu": [
         "x64"
       ],
@@ -1145,9 +1146,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
-      "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz",
+      "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==",
       "cpu": [
         "arm64"
       ],
@@ -1162,9 +1163,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
-      "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz",
+      "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==",
       "cpu": [
         "x64"
       ],
@@ -1179,9 +1180,9 @@
       }
     },
     "node_modules/@esbuild/openharmony-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
-      "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz",
+      "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==",
       "cpu": [
         "arm64"
       ],
@@ -1196,9 +1197,9 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
-      "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz",
+      "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==",
       "cpu": [
         "x64"
       ],
@@ -1213,9 +1214,9 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
-      "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz",
+      "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==",
       "cpu": [
         "arm64"
       ],
@@ -1230,9 +1231,9 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
-      "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz",
+      "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==",
       "cpu": [
         "ia32"
       ],
@@ -1247,9 +1248,9 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
-      "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz",
+      "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==",
       "cpu": [
         "x64"
       ],
@@ -2127,11 +2128,12 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "24.10.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.0.tgz",
-      "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==",
+      "version": "24.10.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
+      "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "undici-types": "~7.16.0"
       }
@@ -2545,6 +2547,7 @@
       "integrity": "sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@algolia/client-abtesting": "5.29.0",
         "@algolia/client-analytics": "5.29.0",
@@ -3128,6 +3131,7 @@
       "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "env-paths": "^2.2.1",
         "import-fresh": "^3.3.0",
@@ -3779,12 +3783,13 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.25.12",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
-      "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz",
+      "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
+      "peer": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
@@ -3792,38 +3797,38 @@
         "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.12",
-        "@esbuild/android-arm": "0.25.12",
-        "@esbuild/android-arm64": "0.25.12",
-        "@esbuild/android-x64": "0.25.12",
-        "@esbuild/darwin-arm64": "0.25.12",
-        "@esbuild/darwin-x64": "0.25.12",
-        "@esbuild/freebsd-arm64": "0.25.12",
-        "@esbuild/freebsd-x64": "0.25.12",
-        "@esbuild/linux-arm": "0.25.12",
-        "@esbuild/linux-arm64": "0.25.12",
-        "@esbuild/linux-ia32": "0.25.12",
-        "@esbuild/linux-loong64": "0.25.12",
-        "@esbuild/linux-mips64el": "0.25.12",
-        "@esbuild/linux-ppc64": "0.25.12",
-        "@esbuild/linux-riscv64": "0.25.12",
-        "@esbuild/linux-s390x": "0.25.12",
-        "@esbuild/linux-x64": "0.25.12",
-        "@esbuild/netbsd-arm64": "0.25.12",
-        "@esbuild/netbsd-x64": "0.25.12",
-        "@esbuild/openbsd-arm64": "0.25.12",
-        "@esbuild/openbsd-x64": "0.25.12",
-        "@esbuild/openharmony-arm64": "0.25.12",
-        "@esbuild/sunos-x64": "0.25.12",
-        "@esbuild/win32-arm64": "0.25.12",
-        "@esbuild/win32-ia32": "0.25.12",
-        "@esbuild/win32-x64": "0.25.12"
+        "@esbuild/aix-ppc64": "0.27.0",
+        "@esbuild/android-arm": "0.27.0",
+        "@esbuild/android-arm64": "0.27.0",
+        "@esbuild/android-x64": "0.27.0",
+        "@esbuild/darwin-arm64": "0.27.0",
+        "@esbuild/darwin-x64": "0.27.0",
+        "@esbuild/freebsd-arm64": "0.27.0",
+        "@esbuild/freebsd-x64": "0.27.0",
+        "@esbuild/linux-arm": "0.27.0",
+        "@esbuild/linux-arm64": "0.27.0",
+        "@esbuild/linux-ia32": "0.27.0",
+        "@esbuild/linux-loong64": "0.27.0",
+        "@esbuild/linux-mips64el": "0.27.0",
+        "@esbuild/linux-ppc64": "0.27.0",
+        "@esbuild/linux-riscv64": "0.27.0",
+        "@esbuild/linux-s390x": "0.27.0",
+        "@esbuild/linux-x64": "0.27.0",
+        "@esbuild/netbsd-arm64": "0.27.0",
+        "@esbuild/netbsd-x64": "0.27.0",
+        "@esbuild/openbsd-arm64": "0.27.0",
+        "@esbuild/openbsd-x64": "0.27.0",
+        "@esbuild/openharmony-arm64": "0.27.0",
+        "@esbuild/sunos-x64": "0.27.0",
+        "@esbuild/win32-arm64": "0.27.0",
+        "@esbuild/win32-ia32": "0.27.0",
+        "@esbuild/win32-x64": "0.27.0"
       }
     },
     "node_modules/esbuild-node-externals": {
-      "version": "1.18.0",
-      "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.18.0.tgz",
-      "integrity": "sha512-suFVX3SzZlXrGIS9Yqx+ZaHL4w1p0e/j7dQbOM9zk8SfFpnAGnDplHUKXIf9kcPEAfZRL66JuYeVSVlsSEQ5Eg==",
+      "version": "1.20.1",
+      "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.20.1.tgz",
+      "integrity": "sha512-uVs+TC+PBiav2LoTz8WZT/ootINw9Rns5JJyVznlfZH1qOyZxWCPzeXklY04UtZut5qUeFFaEWtcH7XoMwiTTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3833,7 +3838,7 @@
         "node": ">=12"
       },
       "peerDependencies": {
-        "esbuild": "0.12 - 0.25"
+        "esbuild": "0.12 - 0.27"
       }
     },
     "node_modules/esbuild-plugin-entry-chunks": {
@@ -4162,6 +4167,7 @@
       "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "tabbable": "^6.2.0"
       }
@@ -4380,18 +4386,18 @@
       }
     },
     "node_modules/globby": {
-      "version": "15.0.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-15.0.0.tgz",
-      "integrity": "sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-16.0.0.tgz",
+      "integrity": "sha512-ejy4TJFga99yW6Q0uhM3pFawKWZmtZzZD/v/GwI5+9bCV5Ew+D2pSND6W7fUes5UykqSsJkUfxFVdRh7Q1+P3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@sindresorhus/merge-streams": "^4.0.0",
         "fast-glob": "^3.3.3",
         "ignore": "^7.0.5",
-        "path-type": "^6.0.0",
+        "is-path-inside": "^4.0.0",
         "slash": "^5.1.0",
-        "unicorn-magic": "^0.3.0"
+        "unicorn-magic": "^0.4.0"
       },
       "engines": {
         "node": ">=20"
@@ -4748,6 +4754,19 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-path-inside": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+      "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-plain-obj": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
@@ -5057,9 +5076,9 @@
       }
     },
     "node_modules/lefthook": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.0.2.tgz",
-      "integrity": "sha512-2lrSva53G604ZWjK5kHYvDdwb5GzbhciIPWhebv0A8ceveqSsnG2JgVEt+DnhOPZ4VfNcXvt3/ohFBPNpuAlVw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.0.4.tgz",
+      "integrity": "sha512-GNCU2vQWM/UWjiEF23601aILi1aMbPke6viortH7wIO/oVGOCW0H6FdLez4XZDyqnHL9XkTnd0BBVrBbYVMLpA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -5067,22 +5086,22 @@
         "lefthook": "bin/index.js"
       },
       "optionalDependencies": {
-        "lefthook-darwin-arm64": "2.0.2",
-        "lefthook-darwin-x64": "2.0.2",
-        "lefthook-freebsd-arm64": "2.0.2",
-        "lefthook-freebsd-x64": "2.0.2",
-        "lefthook-linux-arm64": "2.0.2",
-        "lefthook-linux-x64": "2.0.2",
-        "lefthook-openbsd-arm64": "2.0.2",
-        "lefthook-openbsd-x64": "2.0.2",
-        "lefthook-windows-arm64": "2.0.2",
-        "lefthook-windows-x64": "2.0.2"
+        "lefthook-darwin-arm64": "2.0.4",
+        "lefthook-darwin-x64": "2.0.4",
+        "lefthook-freebsd-arm64": "2.0.4",
+        "lefthook-freebsd-x64": "2.0.4",
+        "lefthook-linux-arm64": "2.0.4",
+        "lefthook-linux-x64": "2.0.4",
+        "lefthook-openbsd-arm64": "2.0.4",
+        "lefthook-openbsd-x64": "2.0.4",
+        "lefthook-windows-arm64": "2.0.4",
+        "lefthook-windows-x64": "2.0.4"
       }
     },
     "node_modules/lefthook-darwin-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.0.2.tgz",
-      "integrity": "sha512-x/4AOinpMS2abZyA/krDd50cRPZit/6P670Z1mJjfS0+fPZkFw7AXpjxroiN0rgglg78vD7BwcA5331z4YZa5g==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.0.4.tgz",
+      "integrity": "sha512-AR63/O5UkM7Sc6x5PhP4vTuztTYRBeBroXApeWGM/8e5uZyoQug/7KTh7xhbCMDf8WJv6vdFeXAQCPSmDyPU3Q==",
       "cpu": [
         "arm64"
       ],
@@ -5094,9 +5113,9 @@
       ]
     },
     "node_modules/lefthook-darwin-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.0.2.tgz",
-      "integrity": "sha512-MSb8XZBfmlNvCpuLiQqrJS+sPiSEAyuoHOMZOHjlceYqO0leVVw9YfePVcb4Vi/PqOYngTdJk83MmYvqhsSNTQ==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.0.4.tgz",
+      "integrity": "sha512-618DVUttSzV9egQiqTQoxGfnR240JoPWYmqRVHhiegnQKZ2lp5XJ+7NMxeRk/ih93VVOLzFO5ky3PbpxTmJgjQ==",
       "cpu": [
         "x64"
       ],
@@ -5108,9 +5127,9 @@
       ]
     },
     "node_modules/lefthook-freebsd-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.0.2.tgz",
-      "integrity": "sha512-gewPsUPc3J/n2/RrhHLS9jtL3qK4HcTED25vfExhvFRW3eT1SDYaBbXnUUmB8SE0zE8Bl6AfEdT2zzZcPbOFuA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.0.4.tgz",
+      "integrity": "sha512-mTAQym1BK38fKglHBQ/0GXPznVC4LoStHO5lAI3ZxaEC0FQetqGHYFzhWbIH5sde9JhztE2rL/aBzMHDoAtzSw==",
       "cpu": [
         "arm64"
       ],
@@ -5122,9 +5141,9 @@
       ]
     },
     "node_modules/lefthook-freebsd-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.0.2.tgz",
-      "integrity": "sha512-fsLlaChiKAWiSavQO2LXPR8Z9OcBnyMDvmkIlXC0lG3SjBb9xbVdBdDVlcrsUyDCs5YstmGYHuzw6DfJYpAE1g==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.0.4.tgz",
+      "integrity": "sha512-sy02aSxd8UMd6XmiPFVl/Em0b78jdZcDSsLwg+bweJQQk0l+vJhOfqFiG11mbnpo+EBIZmRe6OH5LkxeSU36+w==",
       "cpu": [
         "x64"
       ],
@@ -5136,9 +5155,9 @@
       ]
     },
     "node_modules/lefthook-linux-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.0.2.tgz",
-      "integrity": "sha512-vNl3HiZud9T2nGHMngvLw3hSJgutjlN/Lzf5/5jKt/2IIuyd9L3UYktWC9HLUb03Zukr7jeaxG3+VxdAohQwAw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.0.4.tgz",
+      "integrity": "sha512-W0Nlr/Cz2QTH9n4k5zNrk3LSsg1C4wHiJi8hrAiQVTaAV/N1XrKqd0DevqQuouuapG6pw/6B1xCgiNPebv9oyw==",
       "cpu": [
         "arm64"
       ],
@@ -5150,9 +5169,9 @@
       ]
     },
     "node_modules/lefthook-linux-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.0.2.tgz",
-      "integrity": "sha512-0ghHMPu4fixIieS8V2k2yZHvcFd9pP0q+sIAIaWo8x7ce/AOQIXFCPHGPAOc8/wi5uVtfyEvCnhxIDKf+lHA2A==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.0.4.tgz",
+      "integrity": "sha512-N6ySVCtB/DrOZ1ZgPL8WBZTgtoVHvcPKI+LV5wbcGrvA/dzDZFvniadrbDWZg7Tm705efiQzyENjwhhqNkwiww==",
       "cpu": [
         "x64"
       ],
@@ -5164,9 +5183,9 @@
       ]
     },
     "node_modules/lefthook-openbsd-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.0.2.tgz",
-      "integrity": "sha512-qfXnDM8jffut9rylvi3T+HOqlNRkFYqIDUXeVXlY7dmwCW4u2K46p0W4M3BmAVUeL/MRxBRnjze//Yy6aCbGQw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.0.4.tgz",
+      "integrity": "sha512-VmOhJO3pYzZ/1C2WFXtL/n5pq4/eYOroqJJpwTJfmCHyw4ceLACu8MDyU5AMJhGMkbL8mPxGInJKxg5xhYgGRw==",
       "cpu": [
         "arm64"
       ],
@@ -5178,9 +5197,9 @@
       ]
     },
     "node_modules/lefthook-openbsd-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.0.2.tgz",
-      "integrity": "sha512-RXqR0FiDTwsQv1X3QVsuBFneWeNXS+tmPFIX8F6Wz9yDPHF8+vBnkWCju6HdkTVTY71Ba5HbYGKEVDvscJkU7Q==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.0.4.tgz",
+      "integrity": "sha512-U8MZz1xlHUdflkQQ2hkMQsei6fSZbs8tuE4EjCIHWnNdnAF4V8sZ6n1KbxsJcoZXPyBZqxZSMu1o/Ye8IAMVKg==",
       "cpu": [
         "x64"
       ],
@@ -5192,9 +5211,9 @@
       ]
     },
     "node_modules/lefthook-windows-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.0.2.tgz",
-      "integrity": "sha512-KfLKhiUPHP9Aea+9D7or2hgL9wtKEV+GHpx7LBg82ZhCXkAml6rop7mWsBgL80xPYLqMahKolZGO+8z5H6W4HQ==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.0.4.tgz",
+      "integrity": "sha512-543H3y2JAwNdvwUQ6nlNBG7rdKgoOUgzAa6pYcl6EoqicCRrjRmGhkJu7vUudkkrD2Wjm7tr9hU9poP2g5fRFQ==",
       "cpu": [
         "arm64"
       ],
@@ -5206,9 +5225,9 @@
       ]
     },
     "node_modules/lefthook-windows-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.0.2.tgz",
-      "integrity": "sha512-TdysWxGRNtuRg5bN6Uj00tZJIsHTrF/7FavoR5rp1sq21QJhJi36M4I3UVlmOKAUCKhibAIAauZWmX7yaW3eHA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.0.4.tgz",
+      "integrity": "sha512-UDEPK9RWKm60xsNOdS/DQOdFba0SFa4w3tpFMXK1AJzmRHhosoKrorXGhtTr6kcM0MGKOtYi8GHsm++ArZ9wvQ==",
       "cpu": [
         "x64"
       ],
@@ -6130,19 +6149,6 @@
       "dev": true,
       "license": "ISC"
     },
-    "node_modules/path-type": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
-      "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/perfect-debounce": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
@@ -6216,6 +6222,7 @@
         }
       ],
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "nanoid": "^3.3.11",
         "picocolors": "^1.1.1",
@@ -6976,6 +6983,7 @@
       "integrity": "sha512-2kpQq2DD/pRpx3Tal/qRW1SYwcIeQ0iq8li5CJHQgOC+FtPn2BVmuDtzUCgNnpCrbgtfEHqh+iWzxK+Tq6C+RQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "bytes-iec": "^3.1.1",
         "chokidar": "^4.0.3",
@@ -7391,9 +7399,9 @@
       }
     },
     "node_modules/test-exclude/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "version": "10.5.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+      "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -7492,6 +7500,7 @@
       "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=12"
       },
@@ -7733,6 +7742,7 @@
       "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
       "dev": true,
       "license": "Apache-2.0",
+      "peer": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -7749,13 +7759,13 @@
       "license": "MIT"
     },
     "node_modules/unicorn-magic": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
-      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz",
+      "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=18"
+        "node": ">=20"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -7931,6 +7941,7 @@
       "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.43",
@@ -8033,6 +8044,7 @@
       "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@vue/compiler-dom": "3.5.17",
         "@vue/compiler-sfc": "3.5.17",
@@ -8070,9 +8082,9 @@
       }
     },
     "node_modules/which": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
-      "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz",
+      "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -8082,7 +8094,7 @@
         "node-which": "bin/which.js"
       },
       "engines": {
-        "node": "^18.17.0 || >=20.5.0"
+        "node": "^20.17.0 || >=22.9.0"
       }
     },
     "node_modules/wrap-ansi": {
package.json
@@ -114,7 +114,7 @@
     "@size-limit/file": "11.2.0",
     "@types/fs-extra": "11.0.4",
     "@types/minimist": "1.2.5",
-    "@types/node": "24.10.0",
+    "@types/node": "24.10.1",
     "@types/which": "3.0.4",
     "@webpod/ingrid": "1.1.1",
     "@webpod/ps": "1.0.0",
@@ -125,8 +125,8 @@
     "depseek": "0.4.3",
     "dts-bundle-generator": "9.5.1",
     "envapi": "0.2.3",
-    "esbuild": "0.25.12",
-    "esbuild-node-externals": "1.18.0",
+    "esbuild": "0.27.0",
+    "esbuild-node-externals": "1.20.1",
     "esbuild-plugin-entry-chunks": "0.1.17",
     "esbuild-plugin-extract-helpers": "0.0.6",
     "esbuild-plugin-hybrid-export": "0.3.1",
@@ -135,9 +135,9 @@
     "esbuild-plugin-utils": "0.1.0",
     "fs-extra": "11.3.2",
     "get-port": "7.1.0",
-    "globby": "15.0.0",
+    "globby": "16.0.0",
     "jsr": "0.13.5",
-    "lefthook": "2.0.2",
+    "lefthook": "2.0.4",
     "madge": "8.0.0",
     "maml.js": "^0.0.3",
     "minimist": "1.2.8",
@@ -149,7 +149,7 @@
     "tsx": "4.20.6",
     "typescript": "5.9.3",
     "vitepress": "1.6.4",
-    "which": "5.0.0",
+    "which": "6.0.0",
     "yaml": "2.8.1",
     "zurk": "0.11.10"
   },