UNPKG

@storybook/cli

Version:

Storybook CLI: Develop, document, and test UI components in isolation

11,521 lines 566 kB
import CJS_COMPAT_NODE_URL_x1v2iifawbj from 'node:url';
import CJS_COMPAT_NODE_PATH_x1v2iifawbj from 'node:path';
import CJS_COMPAT_NODE_MODULE_x1v2iifawbj from "node:module";

var __filename = CJS_COMPAT_NODE_URL_x1v2iifawbj.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_x1v2iifawbj.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_x1v2iifawbj.createRequire(import.meta.url);

// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
  bannerComment,
  containsDirnameUsage,
  containsESMUsage,
  containsFilenameUsage,
  containsRequireUsage,
  findFilesUp,
  getFrameworkPackageName,
  getProjects,
  getRendererName,
  getStorybookData,
  hasRequireBanner,
  processAutoblockerResults,
  require_picocolors,
  shortenPath,
  up,
  updateMainConfig,
  upgradeStorybookDependencies
} from "./chunk-XHLSDV7U.js";
import {
  slash
} from "./chunk-WVM4UMKT.js";
import {
  require_semver
} from "./chunk-TTWWVBGV.js";
import {
  __commonJS,
  __require,
  __toESM
} from "./chunk-VRUXLMRE.js";

// ../../../node_modules/envinfo/dist/envinfo.js
var require_envinfo = __commonJS({
  "../../../node_modules/envinfo/dist/envinfo.js"(exports, module) {
    (() => {
      var e = { 2980: (e2, t13, n2) => {
        "use strict";
        n2(7360), n2(5888), n2(8412), n2(3852), n2(5584);
        var r = n2(9892), o = n2(5008), i = n2(5088), s = n2(224);
        function a(e3, t14) {
          (t14 = t14 || {}).clipboard && console.log(`
*** Clipboard option removed - use clipboardy or clipboard-cli directly ***
`);
          var n3 = Object.keys(e3).length > 0 ? e3 : i.defaults, s2 = Object.entries(n3).reduce((function(e4, n4) {
            var o2 = n4[0], i2 = n4[1], s3 = r[`get${o2}`];
            return s3 ? (i2 && e4.push(s3(i2, t14)), e4) : e4 = e4.concat((i2 || []).map((function(e5) {
              var t15 = r[`get${e5.replace(/\s/g, "")}Info`];
              return t15 ? t15() : Promise.resolve(["Unknown"]);
            })));
          }), []);
          return Promise.all(s2).then((function(e4) {
            var n4 = e4.reduce((function(e5, t15) {
              return t15 && t15[0] && Object.assign(e5, { [t15[0]]: t15 }), e5;
            }), {});
            return (function(e5, t15) {
              var n5 = t15.json ? o.json : t15.markdown ? o.markdown : o.yaml;
              if (t15.console) {
                var r2 = !1;
                process.stdout.isTTY && (r2 = !0), console.log(n5(e5, Object.assign({}, t15, { console: r2 })));
              }
              return n5(e5, Object.assign({}, t15, { console: !1 }));
            })(Object.entries(i.defaults).reduce((function(e5, t15) {
              var r2 = t15[0], o2 = t15[1];
              return n4[r2] ? Object.assign(e5, { [r2]: n4[r2][1] }) : Object.assign(e5, { [r2]: (o2 || []).reduce((function(e6, t16) {
                return n4[t16] ? (n4[t16].shift(), n4[t16].length === 1 ? Object.assign(e6, { [t16]: n4[t16][0] }) : Object.assign(e6, { [t16]: { version: n4[t16][0], path: n4[t16][1] } })) : e6;
              }), {}) });
            }), {}), t14);
          }));
        }
        e2.exports = { cli: function(e3) {
          if (e3.all) return a(Object.assign({}, i.defaults, { npmPackages: !0, npmGlobalPackages: !0, pnpmGlobalPackages: !0 }), e3);
          if (e3.raw) return a(JSON.parse(e3.raw), e3);
          if (e3.helper) {
            var t14 = r[`get${e3.helper}`] || r[`get${e3.helper}Info`] || r[e3.helper];
            return t14 ? t14().then(console.log) : console.error("Not Found");
          }
          var n3 = function(e4, t15) {
            return e4.toLowerCase().includes(t15.toLowerCase());
          }, o2 = Object.keys(e3).filter((function(e4) {
            return Object.keys(i.defaults).some((function(t15) {
              return n3(t15, e4);
            }));
          })), c = Object.entries(i.defaults).reduce((function(t15, r2) {
            return o2.some((function(e4) {
              return n3(e4, r2[0]);
            })) ? Object.assign(t15, { [r2[0]]: r2[1] || e3[r2[0]] }) : t15;
          }), {});
          return e3.preset ? i[e3.preset] ? a(Object.assign({}, s.omit(i[e3.preset], ["options"]), c), Object.assign({}, i[e3.preset].options, s.pick(e3, ["duplicates", "fullTree", "json", "markdown", "console"]))) : console.error(`
No "${e3.preset}" preset found.`) : a(c, e3);
        }, helpers: r, main: a, run: function(e3, t14) {
          return typeof e3.preset == "string" ? a(i[e3.preset], t14) : a(e3, t14);
        } };
      }, 5008: (e2, t13, n2) => {
        "use strict";
        n2(223), n2(3852), n2(4880), n2(3708), n2(5584), n2(5308);
        var r = n2(6232), o = n2(224);
        function i(e3, t14) {
          return o.log("trace", "clean", e3), Object.keys(e3).reduce((function(n3, r2) {
            return !t14.showNotFound && e3[r2] === "Not Found" || e3[r2] === "N/A" || e3[r2] === void 0 || Object.keys(e3[r2]).length === 0 ? n3 : o.isObject(e3[r2]) ? Object.values(e3[r2]).every((function(e4) {
              return e4 === "N/A" || !t14.showNotFound && e4 === "Not Found";
            })) ? n3 : Object.assign(n3, { [r2]: i(e3[r2], t14) }) : Object.assign(n3, { [r2]: e3[r2] });
          }), {});
        }
        function s(e3, t14) {
          o.log("trace", "formatHeaders"), t14 || (t14 = { type: "underline" });
          var n3 = { underline: ["\x1B[4m", "\x1B[0m"] };
          return e3.slice().split(`
`).map((function(e4) {
            if (e4.slice("-1") === ":") {
              var r2 = e4.match(/^[\s]*/g)[0];
              return `${r2}${n3[t14.type][0]}${e4.slice(r2.length)}${n3[t14.type][1]}`;
            }
            return e4;
          })).join(`
`);
        }
        function a(e3) {
          return o.log("trace", "formatPackages"), e3.npmPackages ? Object.assign(e3, { npmPackages: Object.entries(e3.npmPackages || {}).reduce((function(e4, t14) {
            var n3 = t14[0], r2 = t14[1];
            if (r2 === "Not Found") return Object.assign(e4, { [n3]: r2 });
            var o2 = r2.wanted ? `${r2.wanted} =>` : "", i2 = Array.isArray(r2.installed) ? r2.installed.join(", ") : r2.installed, s2 = r2.duplicates ? `(${r2.duplicates.join(", ")})` : "";
            return Object.assign(e4, { [n3]: `${o2} ${i2} ${s2}` });
          }), {}) }) : e3;
        }
        function c(e3, t14, n3) {
          return n3 || (n3 = { emptyMessage: "None" }), Array.isArray(t14) && (t14 = t14.length > 0 ? t14.join(", ") : n3.emptyMessage), { [e3]: t14 };
        }
        function u(e3, t14) {
          return Object.entries(e3).reduce((function(e4, n3) {
            var r2 = n3[0], i2 = n3[1];
            return o.isObject(i2) ? Object.assign(e4, { [r2]: u(i2, t14) }) : Object.assign(e4, t14(r2, i2));
          }), {});
        }
        function l(e3) {
          return o.log("trace", "serializeArrays"), u(e3, c);
        }
        function f(e3) {
          return o.log("trace", "serializeVersionsAndPaths"), Object.entries(e3).reduce((function(e4, t14) {
            return Object.assign(e4, { [t14[0]]: Object.entries(t14[1]).reduce((function(e5, t15) {
              var n3 = t15[0], r2 = t15[1];
              return r2.version ? Object.assign(e5, { [n3]: [r2.version, r2.path].filter(Boolean).join(" - ") }) : Object.assign(e5, { [n3]: [r2][0] });
            }), {}) }, {});
          }), {});
        }
        function p(e3) {
          return r(e3, { indent: "  ", prefix: `
`, postfix: `
` });
        }
        function h(e3) {
          return e3.slice().split(`
`).map((function(e4) {
            if (e4 !== "") {
              var t14 = e4.slice("-1") === ":", n3 = e4.search(/\S|$/);
              return t14 ? `${"#".repeat(n3 / 2 + 1)} ` + e4.slice(n3) : " - " + e4.slice(n3);
            }
            return "";
          })).join(`
`);
        }
        function d(e3, t14) {
          return t14 || (t14 = { indent: "  " }), JSON.stringify(e3, null, t14.indent);
        }
        e2.exports = { json: function(e3, t14) {
          return o.log("trace", "formatToJson"), t14 || (t14 = {}), e3 = o.pipe([function() {
            return i(e3, t14);
          }, t14.title ? function(e4) {
            return { [t14.title]: e4 };
          } : o.noop, d])(e3), e3 = t14.console ? `
${e3}
` : e3;
        }, markdown: function(e3, t14) {
          return o.log("trace", "formatToMarkdown"), o.pipe([function() {
            return i(e3, t14);
          }, a, l, f, p, h, t14.title ? function(e4) {
            return `
# ${t14.title}${e4}`;
          } : o.noop])(e3, t14);
        }, yaml: function(e3, t14) {
          return o.log("trace", "formatToYaml", t14), o.pipe([function() {
            return i(e3, t14);
          }, a, l, f, t14.title ? function(e4) {
            return { [t14.title]: e4 };
          } : o.noop, p, t14.console ? s : o.noop])(e3, t14);
        } };
      }, 6732: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getNodeInfo: function() {
          return r.log("trace", "getNodeInfo"), Promise.all([r.isWindows ? r.run("node -v").then(r.findVersion) : r.which("node").then((function(e3) {
            return e3 ? r.run(e3 + " -v") : Promise.resolve("");
          })).then(r.findVersion), r.which("node")]).then((function(e3) {
            return r.determineFound("Node", e3[0], e3[1]);
          }));
        }, getnpmInfo: function() {
          return r.log("trace", "getnpmInfo"), Promise.all([r.run("npm -v"), r.which("npm")]).then((function(e3) {
            return r.determineFound("npm", e3[0], e3[1]);
          }));
        }, getWatchmanInfo: function() {
          return r.log("trace", "getWatchmanInfo"), Promise.all([r.which("watchman").then((function(e3) {
            return e3 ? r.run(e3 + " -v") : void 0;
          })), r.which("watchman")]).then((function(e3) {
            return r.determineFound("Watchman", e3[0], e3[1]);
          }));
        }, getYarnInfo: function() {
          return r.log("trace", "getYarnInfo"), Promise.all([r.run("yarn -v"), r.which("yarn")]).then((function(e3) {
            return r.determineFound("Yarn", e3[0], e3[1]);
          }));
        }, getpnpmInfo: function() {
          return r.log("trace", "getpnpmInfo"), Promise.all([r.run("pnpm -v"), r.which("pnpm")]).then((function(e3) {
            return r.determineFound("pnpm", e3[0], e3[1]);
          }));
        }, getbunInfo: function() {
          return r.log("trace", "getbunInfo"), Promise.all([r.run("bun -v"), r.which("bun")]).then((function(e3) {
            return r.determineFound("bun", e3[0], e3[1]);
          }));
        }, getDenoInfo: function() {
          return r.log("trace", "getDenoInfo"), Promise.all([r.isWindows ? r.run("deno --version").then(r.findVersion) : r.which("deno").then((function(e3) {
            return e3 ? r.run(e3 + " --version") : Promise.resolve("");
          })).then(r.findVersion), r.which("deno")]).then((function(e3) {
            return r.determineFound("Deno", e3[0], e3[1]);
          }));
        } };
      }, 2524: (e2, t13, n2) => {
        "use strict";
        n2(3708), n2(5888), n2(8412);
        var r = n2(2058), o = n2(8558), i = n2(224), s = n2(7072);
        function a(e3, t14, n3) {
          var r2;
          return (i.isLinux ? i.run("firefox --version").then((function(e4) {
            return e4.replace(/^.* ([^ ]*)/g, "$1");
          })) : i.isMacOS && typeof t14 == "string" && t14 ? i.getDarwinApplicationVersion(t14) : i.isWindows && typeof n3 == "string" && n3 ? i.windowsExeExists(n3).then((function(e4) {
            return r2 = e4, e4 ? i.run(`powershell "& '${e4}' -v | Write-Output"`).then((function(e5) {
              return i.findVersion(e5);
            })) : i.NA;
          })) : Promise.resolve(i.NA)).then((function(t15) {
            return i.determineFound(e3, t15, r2 || i.NA);
          }));
        }
        e2.exports = { getBraveBrowserInfo: function() {
          return i.log("trace", "getBraveBrowser"), (i.isLinux ? i.run("brave --version || brave-browser --version").then((function(e3) {
            return e3.replace(/^.* ([^ ]*)/g, "$1");
          })) : i.isMacOS ? i.getDarwinApplicationVersion(i.browserBundleIdentifiers["Brave Browser"]).then(i.findVersion) : Promise.resolve("N/A")).then((function(e3) {
            return i.determineFound("Brave Browser", e3, "N/A");
          }));
        }, getChromeInfo: function() {
          var e3;
          if (i.log("trace", "getChromeInfo"), i.isLinux) e3 = i.run("google-chrome --version").then((function(e4) {
            return e4.replace(" dev", "").replace(/^.* ([^ ]*)/g, "$1");
          }));
          else if (i.isMacOS) e3 = i.getDarwinApplicationVersion(i.browserBundleIdentifiers.Chrome).then(i.findVersion);
          else if (i.isWindows) {
            var t14;
            try {
              var n3 = [process.env.ProgramFiles, process.env["ProgramFiles(x86)"]].filter(Boolean).map((function(e4) {
                try {
                  return r.readdirSync(s.join(e4, "Google/Chrome/Application"));
                } catch {
                  return [];
                }
              })).reduce((function(e4, t15) {
                return e4.concat(t15);
              }), []);
              t14 = n3.length ? i.findVersion(n3.join(`
`)) : i.NotFound;
            } catch {
              t14 = i.NotFound;
            }
            e3 = Promise.resolve(t14);
          } else e3 = Promise.resolve("N/A");
          return e3.then((function(e4) {
            return i.determineFound("Chrome", e4, "N/A");
          }));
        }, getChromeCanaryInfo: function() {
          return i.log("trace", "getChromeCanaryInfo"), i.getDarwinApplicationVersion(i.browserBundleIdentifiers["Chrome Canary"]).then((function(e3) {
            return i.determineFound("Chrome Canary", e3, "N/A");
          }));
        }, getChromiumInfo: function() {
          return i.log("trace", "getChromiumInfo"), (i.isLinux ? i.run("chromium --version").then(i.findVersion) : Promise.resolve("N/A")).then((function(e3) {
            return i.determineFound("Chromium", e3, "N/A");
          }));
        }, getEdgeInfo: function() {
          var e3;
          if (i.log("trace", "getEdgeInfo"), i.isWindows && o.release().split(".")[0] === "10") {
            var t14 = { Spartan: "Microsoft.MicrosoftEdge", Chromium: "Microsoft.MicrosoftEdge.Stable", ChromiumDev: "Microsoft.MicrosoftEdge.Dev" };
            e3 = Promise.all(Object.keys(t14).map((function(e4) {
              return (function(e5, t15) {
                return i.run(`powershell get-appxpackage ${e5}`).then((function(e6) {
                  if (i.findVersion(e6) !== "") return `${t15} (${i.findVersion(e6)})`;
                }));
              })(t14[e4], e4);
            })).filter((function(e4) {
              return e4 !== void 0;
            })));
          } else {
            if (!i.isMacOS) return Promise.resolve("N/A");
            e3 = i.getDarwinApplicationVersion(i.browserBundleIdentifiers["Microsoft Edge"]);
          }
          return e3.then((function(e4) {
            return i.determineFound("Edge", Array.isArray(e4) ? e4.filter((function(e5) {
              return e5 !== void 0;
            })) : e4, i.NA);
          }));
        }, getFirefoxInfo: function() {
          return i.log("trace", "getFirefoxInfo"), a("Firefox", i.browserBundleIdentifiers.Firefox, "Mozilla Firefox/firefox.exe");
        }, getFirefoxDeveloperEditionInfo: function() {
          return i.log("trace", "getFirefoxDeveloperEditionInfo"), a("Firefox Developer Edition", i.browserBundleIdentifiers["Firefox Developer Edition"], "Firefox Developer Edition/firefox.exe");
        }, getFirefoxNightlyInfo: function() {
          return i.log("trace", "getFirefoxNightlyInfo"), (i.isLinux ? i.run("firefox-trunk --version").then((function(e3) {
            return e3.replace(/^.* ([^ ]*)/g, "$1");
          })) : i.isMacOS ? i.getDarwinApplicationVersion(i.browserBundleIdentifiers["Firefox Nightly"]) : Promise.resolve("N/A")).then((function(e3) {
            return i.determineFound("Firefox Nightly", e3, "N/A");
          }));
        }, getInternetExplorerInfo: function() {
          var e3;
          if (i.log("trace", "getInternetExplorerInfo"), i.isWindows) {
            var t14 = [process.env.SYSTEMDRIVE || "C:", "Program Files", "Internet Explorer", "iexplore.exe"].join("\\\\");
            e3 = i.run(`wmic datafile where "name='${t14}'" get Version`).then(i.findVersion);
          } else e3 = Promise.resolve("N/A");
          return e3.then((function(e4) {
            return i.determineFound("Internet Explorer", e4, "N/A");
          }));
        }, getSafariTechnologyPreviewInfo: function() {
          return i.log("trace", "getSafariTechnologyPreviewInfo"), i.getDarwinApplicationVersion(i.browserBundleIdentifiers["Safari Technology Preview"]).then((function(e3) {
            return i.determineFound("Safari Technology Preview", e3, "N/A");
          }));
        }, getSafariInfo: function() {
          return i.log("trace", "getSafariInfo"), i.getDarwinApplicationVersion(i.browserBundleIdentifiers.Safari).then((function(e3) {
            return i.determineFound("Safari", e3, "N/A");
          }));
        } };
      }, 6620: (e2, t13, n2) => {
        "use strict";
        n2(7360), n2(5888);
        var r = n2(224);
        e2.exports = { getMongoDBInfo: function() {
          return r.log("trace", "getMongoDBInfo"), Promise.all([r.run("mongo --version").then(r.findVersion), r.which("mongo")]).then((function(e3) {
            return r.determineFound("MongoDB", e3[0], e3[1]);
          }));
        }, getMySQLInfo: function() {
          return r.log("trace", "getMySQLInfo"), Promise.all([r.run("mysql --version").then((function(e3) {
            return `${r.findVersion(e3, null, 1)}${e3.includes("MariaDB") ? " (MariaDB)" : ""}`;
          })), r.which("mysql")]).then((function(e3) {
            return r.determineFound("MySQL", e3[0], e3[1]);
          }));
        }, getPostgreSQLInfo: function() {
          return r.log("trace", "getPostgreSQLInfo"), Promise.all([r.run("postgres --version").then(r.findVersion), r.which("postgres")]).then((function(e3) {
            return r.determineFound("PostgreSQL", e3[0], e3[1]);
          }));
        }, getSQLiteInfo: function() {
          return r.log("trace", "getSQLiteInfo"), Promise.all([r.run("sqlite3 --version").then(r.findVersion), r.which("sqlite3")]).then((function(e3) {
            return r.determineFound("SQLite", e3[0], e3[1]);
          }));
        } };
      }, 3224: (e2, t13, n2) => {
        "use strict";
        n2(3708), n2(8412), n2(5888);
        var r = n2(7072), o = n2(224);
        e2.exports = { getAndroidStudioInfo: function() {
          var e3 = Promise.resolve("N/A");
          if (o.isMacOS) {
            var t14 = [r.join("/", "Applications", "Android Studio.app", "Contents", "Info.plist"), r.join(process.env.HOME, "Applications", "Android Studio.app", "Contents", "Info.plist"), r.join("/", "Applications", "JetBrains Toolbox", "Android Studio.app", "Contents", "Info.plist"), r.join(process.env.HOME, "Applications", "JetBrains Toolbox", "Android Studio.app", "Contents", "Info.plist")];
            e3 = Promise.all(t14.map((function(e4) {
              return o.fileExists(e4).then((function(t15) {
                if (!t15) return null;
                var n3 = o.generatePlistBuddyCommand(e4.replace(/ /g, "\\ "), ["CFBundleShortVersionString", "CFBundleVersion"]);
                return o.run(n3).then((function(e5) {
                  return e5.split(`
`).join(" ");
                }));
              }));
            }))).then((function(e4) {
              return e4.find((function(e5) {
                return e5 !== null;
              })) || o.NotFound;
            }));
          } else o.isLinux ? e3 = Promise.all([o.run('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1').then(o.findVersion), o.run("cat /opt/android-studio/build.txt")]).then((function(e4) {
            return `${e4[0]} ${e4[1]}`.trim() || o.NotFound;
          })) : o.isWindows && (e3 = Promise.all([o.run('wmic datafile where name="C:\\\\Program Files\\\\Android\\\\Android Studio\\\\bin\\\\studio.exe" get Version').then((function(e4) {
            return e4.replace(/(\r\n|\n|\r)/gm, "");
          })), o.run('type "C:\\\\Program Files\\\\Android\\\\Android Studio\\\\build.txt"').then((function(e4) {
            return e4.replace(/(\r\n|\n|\r)/gm, "");
          }))]).then((function(e4) {
            return `${e4[0]} ${e4[1]}`.trim() || o.NotFound;
          })));
          return e3.then((function(e4) {
            return o.determineFound("Android Studio", e4);
          }));
        }, getAtomInfo: function() {
          return o.log("trace", "getAtomInfo"), Promise.all([o.getDarwinApplicationVersion(o.ideBundleIdentifiers.Atom), "N/A"]).then((function(e3) {
            return o.determineFound("Atom", e3[0], e3[1]);
          }));
        }, getEmacsInfo: function() {
          return o.log("trace", "getEmacsInfo"), o.isMacOS || o.isLinux ? Promise.all([o.run("emacs --version").then(o.findVersion), o.which("emacs")]).then((function(e3) {
            return o.determineFound("Emacs", e3[0], e3[1]);
          })) : Promise.resolve(["Emacs", "N/A"]);
        }, getIntelliJInfo: function() {
          return o.log("trace", "getIntelliJInfo"), o.getDarwinApplicationVersion(o.ideBundleIdentifiers.IntelliJ).then((function(e3) {
            return o.determineFound("IntelliJ", e3);
          }));
        }, getNanoInfo: function() {
          return o.log("trace", "getNanoInfo"), o.isLinux ? Promise.all([o.run("nano --version").then(o.findVersion), o.which("nano")]).then((function(e3) {
            return o.determineFound("Nano", e3[0], e3[1]);
          })) : Promise.resolve(["Nano", "N/A"]);
        }, getNvimInfo: function() {
          return o.log("trace", "getNvimInfo"), o.isMacOS || o.isLinux ? Promise.all([o.run("nvim --version").then(o.findVersion), o.which("nvim")]).then((function(e3) {
            return o.determineFound("Nvim", e3[0], e3[1]);
          })) : Promise.resolve(["Vim", "N/A"]);
        }, getPhpStormInfo: function() {
          return o.log("trace", "getPhpStormInfo"), o.getDarwinApplicationVersion(o.ideBundleIdentifiers.PhpStorm).then((function(e3) {
            return o.determineFound("PhpStorm", e3);
          }));
        }, getSublimeTextInfo: function() {
          return o.log("trace", "getSublimeTextInfo"), Promise.all([o.run("subl --version").then((function(e3) {
            return o.findVersion(e3, /\d+/);
          })), o.which("subl")]).then((function(e3) {
            return e3[0] === "" && o.isMacOS ? (o.log("trace", "getSublimeTextInfo using plist"), Promise.all([o.getDarwinApplicationVersion(o.ideBundleIdentifiers["Sublime Text"]), "N/A"])) : e3;
          })).then((function(e3) {
            return o.determineFound("Sublime Text", e3[0], e3[1]);
          }));
        }, getVimInfo: function() {
          return o.log("trace", "getVimInfo"), o.isMacOS || o.isLinux ? Promise.all([o.run("vim --version").then(o.findVersion), o.which("vim")]).then((function(e3) {
            return o.determineFound("Vim", e3[0], e3[1]);
          })) : Promise.resolve(["Vim", "N/A"]);
        }, getVSCodeInfo: function() {
          return o.log("trace", "getVSCodeInfo"), Promise.all([o.run("code --version").then(o.findVersion), o.which("code")]).then((function(e3) {
            return o.determineFound("VSCode", e3[0], e3[1]);
          }));
        }, getCursorInfo: function() {
          return o.log("trace", "getCursorInfo"), Promise.all([o.run("cursor --version").then(o.findVersion), o.which("cursor")]).then((function(e3) {
            return o.determineFound("Cursor", e3[0], e3[1]);
          }));
        }, getClaudeCodeInfo: function() {
          return o.log("trace", "getClaudeCodeInfo"), Promise.all([o.run("claude --version").then(o.findVersion), o.which("claude")]).then((function(e3) {
            return o.determineFound("Claude Code", e3[0], e3[1]);
          }));
        }, getopencodeInfo: function() {
          return o.log("trace", "getopencodeInfo"), Promise.all([o.run("opencode --version").then(o.findVersion), o.which("opencode")]).then((function(e3) {
            return o.determineFound("opencode", e3[0], e3[1]);
          }));
        }, getCodexInfo: function() {
          return o.log("trace", "getCodexInfo"), Promise.all([o.run("codex --version").then(o.findVersion), o.which("codex")]).then((function(e3) {
            return o.determineFound("Codex", e3[0], e3[1]);
          }));
        }, getVisualStudioInfo: function() {
          return o.log("trace", "getVisualStudioInfo"), o.isWindows ? o.run(`"${process.env["ProgramFiles(x86)"]}/Microsoft Visual Studio/Installer/vswhere.exe" -format json -prerelease`).then((function(e3) {
            var t14 = JSON.parse(e3).map((function(e4) {
              return { Version: e4.installationVersion, DisplayName: e4.displayName };
            }));
            return o.determineFound("Visual Studio", t14.map((function(e4) {
              return `${e4.Version} (${e4.DisplayName})`;
            })));
          })).catch((function() {
            return Promise.resolve(["Visual Studio", o.NotFound]);
          })) : Promise.resolve(["Visual Studio", o.NA]);
        }, getWebStormInfo: function() {
          return o.log("trace", "getWebStormInfo"), o.getDarwinApplicationVersion(o.ideBundleIdentifiers.WebStorm).then((function(e3) {
            return o.determineFound("WebStorm", e3);
          }));
        }, getXcodeInfo: function() {
          return o.log("trace", "getXcodeInfo"), o.isMacOS ? Promise.all([o.which("xcodebuild").then((function(e3) {
            return o.run(e3 + " -version");
          })).then((function(e3) {
            return `${o.findVersion(e3)}/${e3.split("Build version ")[1]}`;
          })), o.which("xcodebuild")]).then((function(e3) {
            return o.determineFound("Xcode", e3[0], e3[1]);
          })) : Promise.resolve(["Xcode", "N/A"]);
        } };
      }, 9892: (e2, t13, n2) => {
        "use strict";
        function r(e3, t14, n3) {
          return t14 in e3 ? Object.defineProperty(e3, t14, { value: n3, enumerable: !0, configurable: !0, writable: !0 }) : e3[t14] = n3, e3;
        }
        n2(5584);
        var o = n2(6304), i = n2(224), s = n2(6732), a = n2(2524), c = n2(6620), u = n2(3224), l = n2(6436), f = n2(760), p = n2(2060), h = n2(7508), d = n2(9284), m = n2(8144), g = n2(5882), v = n2(9676);
        e2.exports = Object.assign({}, i, o, (function(e3) {
          for (var t14 = 1; t14 < arguments.length; t14++) {
            var n3 = arguments[t14] != null ? arguments[t14] : {}, o2 = Object.keys(n3);
            typeof Object.getOwnPropertySymbols == "function" && (o2 = o2.concat(Object.getOwnPropertySymbols(n3).filter((function(e4) {
              return Object.getOwnPropertyDescriptor(n3, e4).enumerable;
            })))), o2.forEach((function(t15) {
              r(e3, t15, n3[t15]);
            }));
          }
          return e3;
        })({}, s, a, c, u, l, f, p, h, d, m, g, v));
      }, 6436: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getBashInfo: function() {
          return r.log("trace", "getBashInfo"), Promise.all([r.run("bash --version").then(r.findVersion), r.which("bash")]).then((function(e3) {
            return r.determineFound("Bash", e3[0], e3[1]);
          }));
        }, getElixirInfo: function() {
          return r.log("trace", "getElixirInfo"), Promise.all([r.run("elixir --version").then((function(e3) {
            return r.findVersion(e3, /[Elixir]+\s([\d+.[\d+|.]+)/, 1);
          })), r.which("elixir")]).then((function(e3) {
            return Promise.resolve(r.determineFound("Elixir", e3[0], e3[1]));
          }));
        }, getErlangInfo: function() {
          return r.log("trace", "getErlangInfo"), Promise.all([r.run(`erl -eval "{ok, Version} = file:read_file(filename:join([code:root_dir(), 'releases', erlang:system_info(otp_release), 'OTP_VERSION'])), io:fwrite(Version), halt()." -noshell`).then(r.findVersion), r.which("erl")]).then((function(e3) {
            return Promise.resolve(r.determineFound("Erlang", e3[0], e3[1]));
          }));
        }, getGoInfo: function() {
          return r.log("trace", "getGoInfo"), Promise.all([r.run("go version").then(r.findVersion), r.which("go")]).then((function(e3) {
            return r.determineFound("Go", e3[0], e3[1]);
          }));
        }, getJavaInfo: function() {
          return r.log("trace", "getJavaInfo"), Promise.all([r.run("javac -version", { unify: !0 }).then((function(e3) {
            return r.findVersion(e3, /\d+\.[\w+|.|_|-]+/);
          })), r.which("javac")]).then((function(e3) {
            return r.determineFound("Java", e3[0], e3[1]);
          }));
        }, getPerlInfo: function() {
          return r.log("trace", "getPerlInfo"), Promise.all([r.run("perl -v").then(r.findVersion), r.which("perl")]).then((function(e3) {
            return r.determineFound("Perl", e3[0], e3[1]);
          }));
        }, getPHPInfo: function() {
          return r.log("trace", "getPHPInfo"), Promise.all([r.run("php -v").then(r.findVersion), r.which("php")]).then((function(e3) {
            return r.determineFound("PHP", e3[0], e3[1]);
          }));
        }, getProtocInfo: function() {
          return r.log("trace", "getProtocInfo"), Promise.all([r.run("protoc --version").then(r.findVersion), r.which("protoc")]).then((function(e3) {
            return r.determineFound("Protoc", e3[0], e3[1]);
          }));
        }, getPythonInfo: function() {
          return r.log("trace", "getPythonInfo"), Promise.all([r.run("python -V 2>&1").then(r.findVersion), r.which("python")]).then((function(e3) {
            return r.determineFound("Python", e3[0], e3[1]);
          }));
        }, getPython3Info: function() {
          return r.log("trace", "getPython3Info"), Promise.all([r.run("python3 -V 2>&1").then(r.findVersion), r.which("python3")]).then((function(e3) {
            return r.determineFound("Python3", e3[0], e3[1]);
          }));
        }, getRInfo: function() {
          return r.log("trace", "getRInfo"), Promise.all([r.run("R --version", { unify: !0 }).then(r.findVersion), r.which("R")]).then((function(e3) {
            return r.determineFound("R", e3[0], e3[1]);
          }));
        }, getRubyInfo: function() {
          return r.log("trace", "getRubyInfo"), Promise.all([r.run("ruby -v").then(r.findVersion), r.which("ruby")]).then((function(e3) {
            return r.determineFound("Ruby", e3[0], e3[1]);
          }));
        }, getRustInfo: function() {
          return r.log("trace", "getRustInfo"), Promise.all([r.run("rustc --version").then(r.findVersion), r.which("rustc")]).then((function(e3) {
            return r.determineFound("Rust", e3[0], e3[1]);
          }));
        }, getZigInfo: function() {
          return r.log("trace", "getZigInfo"), Promise.all([r.run("zig version").then(r.findVersion), r.which("zig")]).then((function(e3) {
            return r.determineFound("Zig", e3[0], e3[1]);
          }));
        }, getScalaInfo: function() {
          return r.log("trace", "getScalaInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("scalac -version").then(r.findVersion), r.which("scalac")]).then((function(e3) {
            return r.determineFound("Scala", e3[0], e3[1]);
          })) : Promise.resolve(["Scala", "N/A"]);
        } };
      }, 760: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getAptInfo: function() {
          return r.log("trace", "getAptInfo"), r.isLinux ? Promise.all([r.run("apt --version").then(r.findVersion), r.which("apt")]).then((function(e3) {
            return r.determineFound("Apt", e3[0], e3[1]);
          })) : Promise.all(["Apt", "N/A"]);
        }, getCargoInfo: function() {
          return r.log("trace", "getCargoInfo"), Promise.all([r.run("cargo --version").then(r.findVersion), r.which("cargo")]).then((function(e3) {
            return r.determineFound("Cargo", e3[0], e3[1]);
          }));
        }, getCocoaPodsInfo: function() {
          return r.log("trace", "getCocoaPodsInfo"), r.isMacOS ? Promise.all([r.run("pod --version").then(r.findVersion), r.which("pod")]).then((function(e3) {
            return r.determineFound("CocoaPods", e3[0], e3[1]);
          })) : Promise.all(["CocoaPods", "N/A"]);
        }, getComposerInfo: function() {
          return r.log("trace", "getComposerInfo"), Promise.all([r.run("composer --version").then(r.findVersion), r.which("composer").then(r.condensePath)]).then((function(e3) {
            return r.determineFound("Composer", e3[0], e3[1]);
          }));
        }, getGradleInfo: function() {
          return r.log("trace", "getGradleInfo"), Promise.all([r.run("gradle --version").then(r.findVersion), r.which("gradle").then(r.condensePath)]).then((function(e3) {
            return r.determineFound("Gradle", e3[0], e3[1]);
          }));
        }, getHomebrewInfo: function() {
          return r.log("trace", "getHomebrewInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("brew --version").then(r.findVersion), r.which("brew")]).then((function(e3) {
            return r.determineFound("Homebrew", e3[0], e3[1]);
          })) : Promise.all(["Homebrew", "N/A"]);
        }, getMavenInfo: function() {
          return r.log("trace", "getMavenInfo"), Promise.all([r.run("mvn --version").then(r.findVersion), r.which("mvn").then(r.condensePath)]).then((function(e3) {
            return r.determineFound("Maven", e3[0], e3[1]);
          }));
        }, getpip2Info: function() {
          return r.log("trace", "getpip2Info"), Promise.all([r.run("pip2 --version").then(r.findVersion), r.which("pip2").then(r.condensePath)]).then((function(e3) {
            return r.determineFound("pip2", e3[0], e3[1]);
          }));
        }, getpip3Info: function() {
          return r.log("trace", "getpip3Info"), Promise.all([r.run("pip3 --version").then(r.findVersion), r.which("pip3").then(r.condensePath)]).then((function(e3) {
            return r.determineFound("pip3", e3[0], e3[1]);
          }));
        }, getRubyGemsInfo: function() {
          return r.log("trace", "getRubyGemsInfo"), Promise.all([r.run("gem --version").then(r.findVersion), r.which("gem")]).then((function(e3) {
            return r.determineFound("RubyGems", e3[0], e3[1]);
          }));
        }, getYumInfo: function() {
          return r.log("trace", "getYumInfo"), r.isLinux ? Promise.all([r.run("yum --version").then(r.findVersion), r.which("yum")]).then((function(e3) {
            return r.determineFound("Yum", e3[0], e3[1]);
          })) : Promise.all(["Yum", "N/A"]);
        } };
      }, 2060: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224), o = n2(7072);
        e2.exports = { getYarnWorkspacesInfo: function() {
          return r.log("trace", "getYarnWorkspacesInfo"), Promise.all([r.run("yarn -v"), r.getPackageJsonByPath("package.json").then((function(e3) {
            return e3 && "workspaces" in e3;
          }))]).then((function(e3) {
            var t14 = "Yarn Workspaces";
            return e3[0] && e3[1] ? Promise.resolve([t14, e3[0]]) : Promise.resolve([t14, "Not Found"]);
          }));
        }, getLernaInfo: function() {
          return r.log("trace", "getLernaInfo"), Promise.all([r.getPackageJsonByName("lerna").then((function(e3) {
            return e3 && e3.version;
          })), r.fileExists(o.join(process.cwd(), "lerna.json"))]).then((function(e3) {
            var t14 = "Lerna";
            return e3[0] && e3[1] ? Promise.resolve([t14, e3[0]]) : Promise.resolve([t14, "Not Found"]);
          }));
        } };
      }, 7508: (e2, t13, n2) => {
        "use strict";
        n2(4880), n2(5888), n2(3708);
        var r = n2(8558), o = n2(2058), i = n2(7072), s = n2(224);
        e2.exports = { getAndroidSDKInfo: function() {
          return s.run("sdkmanager --list").then((function(e3) {
            return !e3 && process.env.ANDROID_HOME ? s.run(`${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list`) : e3;
          })).then((function(e3) {
            return !e3 && process.env.ANDROID_HOME ? s.run(`${process.env.ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --list`) : e3;
          })).then((function(e3) {
            return !e3 && s.isMacOS ? s.run("~/Library/Android/sdk/cmdline-tools/latest/bin/sdkmanager --list") : e3;
          })).then((function(e3) {
            return !e3 && s.isMacOS ? s.run("~/Library/Android/sdk/tools/bin/sdkmanager --list") : e3;
          })).then((function(e3) {
            if (!e3 && s.isWindows) {
              var t14 = i.join(r.homedir(), "AppData/Local/Android/Sdk/cmdline-tools/latest/bin/sdkmanager");
              return s.run(`${t14} --list`);
            }
            return e3;
          })).then((function(e3) {
            var t14 = s.parseSDKManagerOutput(e3), n3 = function(e4) {
              var t15, n4 = i.join(e4, "source.properties");
              try {
                t15 = o.readFileSync(n4, "utf8");
              } catch (e5) {
                if (e5.code === "ENOENT") return;
                throw e5;
              }
              for (var r3 = t15.split(`
`), s2 = 0; s2 < r3.length; s2 += 1) {
                var a = r3[s2].split("=");
                if (a.length === 2 && a[0].trim() === "Pkg.Revision") return a[1].trim();
              }
            }, r2 = process.env.ANDROID_NDK ? n3(process.env.ANDROID_NDK) : process.env.ANDROID_NDK_HOME ? n3(process.env.ANDROID_NDK_HOME) : process.env.ANDROID_HOME ? n3(i.join(process.env.ANDROID_HOME, "ndk-bundle")) : void 0;
            return t14.buildTools.length || t14.apiLevels.length || t14.systemImages.length || r2 ? Promise.resolve(["Android SDK", { "API Levels": t14.apiLevels || s.NotFound, "Build Tools": t14.buildTools || s.NotFound, "System Images": t14.systemImages || s.NotFound, "Android NDK": r2 || s.NotFound }]) : Promise.resolve(["Android SDK", s.NotFound]);
          }));
        }, getiOSSDKInfo: function() {
          return s.isMacOS ? s.run("xcodebuild -showsdks").then((function(e3) {
            return e3.match(/[\w]+\s[\d|.]+/g);
          })).then(s.uniq).then((function(e3) {
            return e3.length ? ["iOS SDK", { Platforms: e3 }] : ["iOS SDK", s.NotFound];
          })) : Promise.resolve(["iOS SDK", "N/A"]);
        }, getWindowsSDKInfo: function() {
          if (s.log("trace", "getWindowsSDKInfo"), s.isWindows) {
            var e3 = s.NotFound;
            return s.run("reg query HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock").then((function(t14) {
              e3 = t14.split(/[\r\n]/g).slice(1).filter((function(e4) {
                return e4 !== "";
              })).reduce((function(e4, t15) {
                var n4 = t15.match(/[^\s]+/g);
                return n4[2] !== "0x0" && n4[2] !== "0x1" || (n4[2] = n4[2] === "0x1" ? "Enabled" : "Disabled"), e4[n4[0]] = n4[2], e4;
              }), {}), Object.keys(e3).length === 0 && (e3 = s.NotFound);
              try {
                var n3 = o.readdirSync(`${process.env["ProgramFiles(x86)"]}/Windows Kits/10/Platforms/UAP`);
                e3.Versions = n3;
              } catch {
              }
              return Promise.resolve(["Windows SDK", e3]);
            }));
          }
          return Promise.resolve(["Windows SDK", s.NA]);
        } };
      }, 9284: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getApacheInfo: function() {
          return r.log("trace", "getApacheInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("apachectl -v").then(r.findVersion), r.which("apachectl")]).then((function(e3) {
            return r.determineFound("Apache", e3[0], e3[1]);
          })) : Promise.resolve(["Apache", "N/A"]);
        }, getNginxInfo: function() {
          return r.log("trace", "getNginxInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("nginx -v 2>&1").then(r.findVersion), r.which("nginx")]).then((function(e3) {
            return r.determineFound("Nginx", e3[0], e3[1]);
          })) : Promise.resolve(["Nginx", "N/A"]);
        } };
      }, 8144: (e2, t13, n2) => {
        "use strict";
        n2(3708), n2(4880), n2(5888);
        var r = n2(2288), o = n2(224), i = n2(8558);
        e2.exports = { getContainerInfo: function() {
          return o.log("trace", "getContainerInfo"), o.isLinux ? Promise.all([o.fileExists("/.dockerenv"), o.readFile("/proc/self/cgroup")]).then((function(e3) {
            return o.log("trace", "getContainerInfoThen", e3), Promise.resolve(["Container", e3[0] || e3[1] ? "Yes" : "N/A"]);
          })).catch((function(e3) {
            return o.log("trace", "getContainerInfoCatch", e3);
          })) : Promise.resolve(["Container", "N/A"]);
        }, getCPUInfo: function() {
          var e3;
          o.log("trace", "getCPUInfo");
          try {
            var t14 = i.cpus();
            e3 = "(" + t14.length + ") " + i.arch() + " " + t14[0].model;
          } catch {
            e3 = "Unknown";
          }
          return Promise.all(["CPU", e3]);
        }, getMemoryInfo: function() {
          return o.log("trace", "getMemoryInfo"), Promise.all(["Memory", `${o.toReadableBytes(i.freemem())} / ${o.toReadableBytes(i.totalmem())}`]);
        }, getOSInfo: function() {
          var e3, t14;
          if (o.log("trace", "getOSInfo"), o.isMacOS) e3 = o.run("sw_vers -productVersion ");
          else if (o.isLinux) e3 = o.run("cat /etc/os-release").then((function(e4) {
            var t15 = (e4 || "").match(/NAME="(.+)"/) || "", n4 = (e4 || "").match(/VERSION="(.+)"/) || ["", ""], r2 = n4 !== null ? n4[1] : "";
            return `${t15[1]} ${r2}`.trim() || "";
          }));
          else if (o.isWindows) {
            e3 = Promise.resolve(i.release());
            var n3 = i.release().split(".");
            n3[0] === "10" && n3[1] === "0" && n3[2] >= 22e3 && (t14 = "Windows 11");
          } else e3 = Promise.resolve();
          return e3.then((function(e4) {
            return t14 = t14 || r(i.platform(), i.release()), e4 && (t14 += ` ${e4}`), ["OS", t14];
          }));
        }, getShellInfo: function() {
          if (o.log("trace", "getShellInfo", process.env), o.isMacOS || o.isLinux) {
            var e3 = process.env.SHELL || o.runSync("getent passwd $LOGNAME | cut -d: -f7 | head -1"), t14 = `${e3} --version 2>&1`;
            return e3.match("/bin/ash") && (t14 = `${e3} --help 2>&1`), Promise.all([o.run(t14).then(o.findVersion), o.which(e3)]).then((function(e4) {
              return o.determineFound("Shell", e4[0] || "Unknown", e4[1]);
            }));
          }
          return Promise.resolve(["Shell", "N/A"]);
        }, getGLibcInfo: function() {
          return o.log("trace", "getGLibc"), o.isLinux ? Promise.all([o.run("ldd --version").then(o.findVersion)]).then((function(e3) {
            return o.determineFound("GLibc", e3[0] || "Unknown");
          })) : Promise.resolve(["GLibc", "N/A"]);
        } };
      }, 5882: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getBazelInfo: function() {
          return r.log("trace", "getBazelInfo"), Promise.all([r.run("bazel --version").then(r.findVersion), r.which("bazel")]).then((function(e3) {
            return r.determineFound("Bazel", e3[0], e3[1]);
          }));
        }, getCMakeInfo: function() {
          return r.log("trace", "getCMakeInfo"), Promise.all([r.run("cmake --version").then(r.findVersion), r.which("cmake")]).then((function(e3) {
            return r.determineFound("CMake", e3[0], e3[1]);
          }));
        }, getGCCInfo: function() {
          return r.log("trace", "getGCCInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("gcc -v 2>&1").then(r.findVersion), r.which("gcc")]).then((function(e3) {
            return r.determineFound("GCC", e3[0], e3[1]);
          })) : Promise.resolve(["GCC", "N/A"]);
        }, getClangInfo: function() {
          return r.log("trace", "getClangInfo"), Promise.all([r.run("clang --version").then(r.findVersion), r.which("clang")]).then((function(e3) {
            return r.determineFound("Clang", e3[0], e3[1]);
          }));
        }, getGitInfo: function() {
          return r.log("trace", "getGitInfo"), Promise.all([r.run("git --version").then(r.findVersion), r.which("git")]).then((function(e3) {
            return r.determineFound("Git", e3[0], e3[1]);
          }));
        }, getGitLFSInfo: function() {
          return r.log("trace", "getGitLFSInfo"), Promise.all([r.run("git lfs version").then(r.findVersion), r.which("git-lfs")]).then((function(e3) {
            return r.determineFound("Git LFS", e3[0], e3[1]);
          }));
        }, getMakeInfo: function() {
          return r.log("trace", "getMakeInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("make --version").then(r.findVersion), r.which("make")]).then((function(e3) {
            return r.determineFound("Make", e3[0], e3[1]);
          })) : Promise.resolve(["Make", "N/A"]);
        }, getNinjaInfo: function() {
          return r.log("trace", "getNinjaInfo"), Promise.all([r.run("ninja --version").then(r.findVersion), r.which("ninja")]).then((function(e3) {
            return r.determineFound("Ninja", e3[0], e3[1]);
          }));
        }, getMercurialInfo: function() {
          return r.log("trace", "getMercurialInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("hg --version").then(r.findVersion), r.which("hg")]).then((function(e3) {
            return r.determineFound("Mercurial", e3[0], e3[1]);
          })) : Promise.resolve(["Mercurial", "N/A"]);
        }, getSubversionInfo: function() {
          return r.log("trace", "getSubversionInfo"), r.isMacOS || r.isLinux ? Promise.all([r.run("svn --version").then(r.findVersion), r.which("svn")]).then((function(e3) {
            return r.determineFound("Subversion", e3[0], e3[1]);
          })) : Promise.resolve(["Subversion", "N/A"]);
        }, getFFmpegInfo: function() {
          return r.log("trace", "getFFmpegInfo"), Promise.all([r.run("ffmpeg -version").then(r.findVersion), r.which("ffmpeg")]).then((function(e3) {
            return r.determineFound("FFmpeg", e3[0], e3[1]);
          }));
        }, getCurlInfo: function() {
          return r.log("trace", "getCurlInfo"), Promise.all([r.run("curl --version").then(r.findVersion), r.which("curl")]).then((function(e3) {
            return r.determineFound("Curl", e3[0], e3[1]);
          }));
        }, getOpenSSLInfo: function() {
          return r.log("trace", "getOpenSSLInfo"), Promise.all([r.run("openssl version").then(r.findVersion), r.which("openssl")]).then((function(e3) {
            return r.determineFound("OpenSSL", e3[0], e3[1]);
          }));
        }, getccacheInfo: function() {
          return r.log("trace", "getccacheInfo"), Promise.all([r.run("ccache -V").then(r.findVersion), r.which("ccache")]).then((function(e3) {
            return r.determineFound("ccache", e3[0], e3[1]);
          }));
        }, get7zInfo: function() {
          r.log("trace", "get7zInfo");
          var e3 = ["7z", "7zz"], t14 = function() {
            return Promise.all(e3.map((function(e4) {
              return r.which(e4);
            }))).then((function(t15) {
              var n3 = t15.findIndex(Boolean);
              return n3 >= 0 ? { bin: e3[n3], path: t15[n3] } : null;
            }));
          };
          return r.isWindows ? r.windowsExeExists("7-Zip/7z.exe").then((function(e4) {
            return e4 ? Promise.all([r.run(`powershell "& '${e4}' i | Write-Output"`).then(r.findVersion), Promise.resolve(e4)]).then((function(e5) {
              return r.determineFound("7z", e5[0], e5[1]);
            })) : t14().then((function(e5) {
              return e5 ? Promise.all([r.run(`${e5.bin} i`).then(r.findVersion), Promise.resolve(e5.path)]).then((function(e6) {
                return r.determineFound("7z", e6[0], e6[1]);
              })) : r.determineFound("7z", "", void 0);
            }));
          })) : t14().then((function(e4) {
            return e4 ? Promise.all([r.run(`${e4.bin} i`).then(r.findVersion), Promise.resolve(e4.path)]).then((function(e5) {
              return r.determineFound("7z", e5[0], e5[1]);
            })) : r.determineFound("7z", "", void 0);
          }));
        }, getClashMetaInfo: function() {
          r.log("trace", "getClashMetaInfo");
          var e3 = ["mihomo"];
          return Promise.all(e3.map((function(e4) {
            return r.which(e4);
          }))).then((function(t14) {
            var n3 = t14.findIndex(Boolean);
            return n3 >= 0 ? { bin: e3[n3], path: t14[n3] } : null;
          })).then((function(e4) {
            return e4 ? Promise.all([r.run(`${e4.bin} -v`).then(r.findVersion), Promise.resolve(e4.path)]).then((function(e5) {
              return r.determineFound("Clash Meta", e5[0], e5[1]);
            })) : r.determineFound("Clash Meta", "", void 0);
          }));
        } };
      }, 9676: (e2, t13, n2) => {
        "use strict";
        n2(5888);
        var r = n2(224);
        e2.exports = { getDockerInfo: function() {
          return r.log("trace", "getDockerInfo"), Promise.all([r.run("docker --version").then(r.findVersion), r.which("docker")]).then((function(e3) {
            return r.determineFound("Docker", e3[0], e3[1]);
          }));
        }, getDockerComposeInfo: function() {
          return r.log("trace", "getDockerComposeInfo"), Promise.all([r.run("docker-compose --version").then(r.findVersion), r.which("docker-compose")]).then((function(e3) {
            return r.determineFound("Docker Compose", e3[0], e3[1]);
          }));
        }, getParallelsInfo: function() {
          return r.log("trace", "getParallelsInfo"), Promise.all([r.run("prlctl --version").then(r.findVersion), r.which("prlctl")]).then((function(e3) {
            return r.determineFound("Parallels", e3[0], e3[1]);
          }));
        }, getPodmanInfo: function() {
          return r.log("trace", "getPodmanInfo"), Promise.all([r.run("podman --version").then(r.findVersion), r.which("podman")]).then((function(e3) {
            return r.determineFound("Podman", e3[0], e3[1]);
          }));
        }, getVirtualBoxInfo: function() {
          return r.log("trace", "getVirtualBoxInfo"), Promise.all([r.run("vboxmanage --version").then(r.findVersion), r.which("vboxmanage")]).then((function(e3) {
            return r.determineFound("VirtualBox", e3[0], e3[1]);
          }));
        }, getVMwareFusionInfo: function() {
          return r.log("trace", "getVMwareFusionInfo"), r.getDarwinApplicationVersion("com.vmware.fusion").then((function(e3) {
            return r.determineFound("VMWare Fusion", e3, "N/A");
          }));
        } };
      }, 6032: (e2) => {
        "use strict";
        e2.exports = { androidSystemImages: /system-images;([\S \t]+)/g, androidAPILevels: /platforms;android-(\d+)[\S\s]/g, androidBuildTools: /build-tools;([\d|.]+)[\S\s]/g };
      }, 6304: (e2, t13, n2) => {
        "use strict";
        n2(8412), n2(9224), n2(4880), n2(5584), n2(5888), n2(7360), n2(3708);
        var r = n2(808), o = n2(7072), i = n2(224), s = function(e3) {
          var t14 = e3.split("node_modules" + o.sep), n3 = t14[t14.length - 1];
          return n3.charAt(0) === "@" ? [n3.split(o.sep)[0], n3.split(o.sep)[1]].join("/") : n3.split(o.sep)[0];
        };
        e2.exports = { getnpmPackages: function(e3, t14) {
          i.log("trace", "getnpmPackages"), t14 || (t14 = {});
          var n3 = null, r2 = null;
          return typeof e3 == "string" && (e3.includes("*") || e3.includes("?") || e3.includes("+") || e3.includes("!") ? n3 = e3 : e3 = e3.split(",")), Promise.all(["npmPackages", i.getPackageJsonByPath("package.json").then((function(e4) {
            return Object.assign({}, (e4 || {}).devDependencies || {}, (e4 || {}).dependencies || {});
          })).then((function(e4) {
            return r2 = e4, t14.fullTree || t14.duplicates || n3 ? i.getAllPackageJsonPaths(n3) : Promise.resolve(Object.keys(e4 || []).map((function(e5) {
              return o.join("node_modules", e5, "package.json");
            })));
          })).then((function(o2) {
            return !n3 && typeof e3 != "boolean" || t14.fullTree ? Array.isArray(e3) ? Promise.resolve((o2 || []).filter((function(t15) {
              return e3.includes(s(t15));
            }))) : Promise.resolve(o2) : Promise.resolve((o2 || []).filter((function(e4) {
              return Object.keys(r2 || []).includes(s(e4));
            })));
          })).then((function(e4) {
            return Promise.all([e4, Promise.all(e4.map((function(e5) {
              return i.getPackageJsonByPath(e5);
            })))]);
          })).then((function(e4) {
            var n4 = e4[0], o2 = e4[1].reduce((function(e5, r3, o3) {
              return r3 && r3.name && (e5[r3.name] || (e5[r3.name] = {}), t14.duplicates && (e5[r3.name].duplicates = i.uniq((e5[r3.name].duplicates || []).concat(r3.version))), (n4[o3].match(/node_modules/g) || []).length === 1 && (e5[r3.name].installed = r3.version)), e5;
            }), {});
            return Object.keys(o2).forEach((function(e5) {
              o2[e5].duplicates && o2[e5].installed && (o2[e5].duplicates = o2[e5].duplicates.filter((function(t15) {
                return t15 !== o2[e5].installed;
              }))), r2[e5] && (o2[e5].wanted = r2[e5]);
            })), o2;
          })).then((function(n4) {
            return t14.showNotFound && Array.isArray(e3) && e3.forEach((function(e4) {
              n4[e4] || (n4[e4] = "Not Found");
            })), n4;
          })).then((function(e4) {
            return i.sortObject(e4);
          }))]);
        }, getnpmGlobalPackages: function(e3, t14) {
          i.log("trace", "getnpmGlobalPackages", e3);
          var n3 = null;
          return typeof e3 == "string" ? e3.includes("*") || e3.includes("?") || e3.includes("+") || e3.includes("!") ? n3 = e3 : e3 = e3.split(",") : Array.isArray(e3) || (e3 = !0), Promise.all(["npmGlobalPackages", i.run("npm get prefix --global").then((function(e4) {
            return new Promise((function(t15, s2) {
              return r(o.join(e4, i.isWindows ? "" : "lib", "node_modules", n3 || "{*,@*/*}", "package.json"), (function(e5, n4) {
                e5 || t15(n4), s2(e5);
              }));
            }));
          })).then((function(t15) {
            return Promise.all(t15.filter((function(t16) {
              return typeof e3 == "boolean" || n3 !== null || e3.includes(s(t16));
            })).map((function(e4) {
              return i.getPackageJsonByFullPath(e4);
            })));
          })).then((function(e4) {
            return e4.reduce((function(e5, t15) {
              return t15 ? Object.assign(e5, { [t15.name]: t15.version }) : e5;
            }), {});
          })).then((function(n4) {
            return t14.showNotFound && Array.isArray(e3) && e3.forEach((function(e4) {
              n4[e4] || (n4[e4] = "Not Found");
            })), n4;
          }))]);
        }, getpnpmGlobalPackages: function(e3, t14) {
          i.log("trace", "getpnpmGlobalPackages", e3);
          var n3 = null;
          return typeof e3 == "string" ? e3.includes("*") || e3.includes("?") || e3.includes("+") || e3.includes("!") ? n3 = e3 : e3 = e3.split(",") : Array.isArray(e3) || (e3 = !0), Promise.all(["pnpmGlobalPackages", i.run("pnpm list --global --depth=0 --json").then((function(e4) {
            var t15 = {};
            try {
              var n4 = JSON.parse(e4 || "[]");
              (Array.isArray(n4) ? n4 : [n4]).forEach((function(e5) {
                if (e5) {
                  var n5 = e5.dependencies || {};
                  Object.keys(n5).forEach((function(e6) {
                    var r2 = n5[e6];
                    r2 && typeof r2 == "object" && r2.version ? t15[e6] = r2.version : typeof r2 == "string" && (t15[e6] = r2);
                  })), e5.name && e5.version && (t15[e5.name] = e5.version);
                }
              }));
            } catch (e5) {
              i.log("trace", "pnpm parseJson error", e5 && e5.message || String(e5));
            }
            return t15;
          })).then((function(r2) {
            var o2 = r2 || {};
            if (n3 !== null) {
              var s2 = new RegExp("^" + n3.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".") + "$");
              o2 = Object.keys(o2).filter((function(e4) {
                return s2.test(e4);
              })).reduce((function(e4, t15) {
                return Object.assign(e4, { [t15]: o2[t15] });
              }), {});
            } else Array.isArray(e3) && (o2 = Object.keys(o2).filter((function(t15) {
              return e3.includes(t15);
            })).reduce((function(e4, t15) {
              return Object.assign(e4, { [t15]: o2[t15] });
            }), {}));
            return t14 && t14.showNotFound && Array.isArray(e3) && e3.forEach((function(e4) {
              o2[e4] || (o2[e4] = "Not Found");
            })), i.sortObject(o2);
          }))]);
        } };
      }, 5088: (e2) => {
        "use strict";
        e2.exports = { defaults: { System: ["OS", "CPU", "Memory", "Container", "Shell"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno", "Watchman"], Managers: ["Apt", "Cargo", "CocoaPods", "Composer", "Gradle", "Homebrew", "Maven", "pip2", "pip3", "RubyGems", "Yum"], Utilities: ["7z", "Bazel", "CMake", "Make", "GCC", "Git", "Git LFS", "Clang", "Ninja", "Mercurial", "Subversion", "FFmpeg", "Curl", "OpenSSL", "ccache", "Clash Meta"], Servers: ["Apache", "Nginx"], Virtualization: ["Docker", "Docker Compose", "Parallels", "VirtualBox", "VMware Fusion"], SDKs: ["iOS SDK", "Android SDK", "Windows SDK"], IDEs: ["Android Studio", "Atom", "Emacs", "IntelliJ", "NVim", "Nano", "PhpStorm", "Sublime Text", "VSCode", "Cursor", "Claude Code", "Codex", "opencode", "Visual Studio", "Vim", "WebStorm", "Xcode"], Languages: ["Bash", "Go", "Elixir", "Erlang", "Java", "Perl", "PHP", "Protoc", "Python", "Python3", "R", "Ruby", "Rust", "Scala", "Zig"], Databases: ["MongoDB", "MySQL", "PostgreSQL", "SQLite"], Browsers: ["Brave Browser", "Chrome", "Chrome Canary", "Chromium", "Edge", "Firefox", "Firefox Developer Edition", "Firefox Nightly", "Internet Explorer", "Safari", "Safari Technology Preview"], Monorepos: ["Yarn Workspaces", "Lerna"], npmPackages: null, npmGlobalPackages: null, pnpmGlobalPackages: null }, cssnano: { System: ["OS", "CPU"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], npmPackages: ["cssnano", "postcss"], options: { duplicates: !0 } }, jest: { System: ["OS", "CPU"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], npmPackages: ["jest"] }, "react-native": { System: ["OS", "CPU"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Watchman"], SDKs: ["iOS SDK", "Android SDK", "Windows SDK"], IDEs: ["Android Studio", "Xcode", "Visual Studio"], npmPackages: ["react", "react-native"], npmGlobalPackages: ["react-native-cli"] }, nyc: { System: ["OS", "CPU", "Memory"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], npmPackages: "/**/{*babel*,@babel/*/,*istanbul*,nyc,source-map-support,typescript,ts-node}" }, webpack: { System: ["OS", "CPU"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], npmPackages: "*webpack*", npmGlobalPackages: ["webpack", "webpack-cli"] }, "styled-components": { System: ["OS", "CPU"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], Browsers: ["Chrome", "Firefox", "Safari"], npmPackages: "*styled-components*" }, "create-react-app": { System: ["OS", "CPU"], Binaries: ["Node", "npm", "Yarn", "pnpm", "bun"], Browsers: ["Chrome", "Edge", "Internet Explorer", "Firefox", "Safari"], npmPackages: ["react", "react-dom", "react-scripts"], npmGlobalPackages: ["create-react-app"], options: { duplicates: !0, showNotFound: !0 } }, apollo: { System: ["OS"], Binaries: ["Node", "npm", "Yarn", "pnpm", "bun"], Browsers: ["Chrome", "Edge", "Firefox", "Safari"], npmPackages: "{*apollo*,@apollo/*}", npmGlobalPackages: "{*apollo*,@apollo/*}" }, "react-native-web": { System: ["OS", "CPU"], Binaries: ["Node", "npm", "Yarn", "pnpm", "bun"], Browsers: ["Chrome", "Edge", "Internet Explorer", "Firefox", "Safari"], npmPackages: ["react", "react-native-web"], options: { showNotFound: !0 } }, babel: { System: ["OS"], Binaries: ["Node", "npm", "Yarn", "pnpm", "bun"], Monorepos: ["Yarn Workspaces", "Lerna"], npmPackages: "{*babel*,@babel/*,eslint,webpack,create-react-app,react-native,lerna,jest,next,rollup}" }, playwright: { System: ["OS", "CPU", "Memory", "Container"], Binaries: ["Node", "Yarn", "npm", "pnpm", "bun", "Deno"], Languages: ["Bash"], IDEs: ["VSCode", "Cursor", "Claude Code", "Codex", "opencode"], npmPackages: "{playwright*,@playwright/*}" } };
      }, 224: (e2, t13, n2) => {
        "use strict";
        n2(4880), n2(4260), n2(5584), n2(7276), n2(4228), n2(3708), n2(8412), n2(5308), n2(6568), n2(5888);
        var r = n2(7072), o = n2(2058), i = n2(8558), s = n2(4368), a = n2(8460), c = n2(808), u = n2(6032), l = function(e3) {
          var t14 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).unify, n3 = t14 !== void 0 && t14;
          return new Promise((function(t15) {
            s.exec(e3, { stdio: [0, "pipe", "ignore"] }, (function(e4, r2, o2) {
              var i2;
              i2 = n3 ? r2.toString() + o2.toString() : r2.toString(), t15((e4 ? "" : i2).trim());
            }));
          }));
        }, f = function(e3) {
          var t14 = Object.values(Array.prototype.slice.call(arguments).slice(1));
          (process.env.ENVINFO_DEBUG || "").toLowerCase() === e3 && console.log(e3, JSON.stringify(t14));
        }, p = function(e3) {
          return new Promise((function(t14) {
            o.readFile(e3, "utf8", (function(e4, n3) {
              return t14(n3 || null);
            }));
          }));
        }, h = function(e3) {
          return p(e3).then((function(e4) {
            return e4 ? JSON.parse(e4) : null;
          }));
        }, d = /\d+\.[\d+|.]+/g, m = function(e3) {
          f("trace", "findDarwinApplication", e3);
          var t14 = `mdfind "kMDItemCFBundleIdentifier=='${e3}'"`;
          return f("trace", t14), l(t14).then((function(e4) {
            return e4.replace(/(\s)/g, "\\ ");
          }));
        }, g = function(e3, t14) {
          var n3 = (t14 || ["CFBundleShortVersionString"]).map((function(e4) {
            return "-c Print:" + e4;
          }));
          return ["/usr/libexec/PlistBuddy"].concat(n3).concat([e3]).join(" ");
        }, v = function(e3, t14) {
          for (var n3 = [], r2 = null; (r2 = e3.exec(t14)) !== null; ) n3.push(r2);
          return n3;
        };
        e2.exports = { run: l, log: f, fileExists: function(e3) {
          return new Promise((function(t14) {
            o.stat(e3, (function(n3) {
              return t14(n3 ? null : e3);
            }));
          }));
        }, windowsExeExists: function(e3) {
          return new Promise((function(t14) {
            var n3;
            o.access(n3 = r.join(process.env.ProgramFiles, `${e3}`), o.constants.R_OK, (function(i2) {
              i2 ? o.access(n3 = r.join(process.env["ProgramFiles(x86)"], `${e3}`), o.constants.X_OK, (function(e4) {
                t14(e4 ? null : n3);
              })) : t14(n3);
            }));
          }));
        }, readFile: p, requireJson: h, versionRegex: d, findDarwinApplication: m, generatePlistBuddyCommand: g, matchAll: v, parseSDKManagerOutput: function(e3) {
          var t14 = e3.split("Available")[0];
          return { apiLevels: v(u.androidAPILevels, t14).map((function(e4) {
            return e4[1];
          })), buildTools: v(u.androidBuildTools, t14).map((function(e4) {
            return e4[1];
          })), systemImages: v(u.androidSystemImages, t14).map((function(e4) {
            return e4[1].split("|").map((function(e5) {
              return e5.trim();
            }));
          })).map((function(e4) {
            return e4[0].split(";")[0] + " | " + e4[2].split(" System Image")[0];
          })) };
        }, isLinux: process.platform === "linux", isMacOS: process.platform === "darwin", NA: "N/A", NotFound: "Not Found", isWindows: process.platform.startsWith("win"), isObject: function(e3) {
          return typeof e3 == "object" && !Array.isArray(e3);
        }, noop: function(e3) {
          return e3;
        }, pipe: function(e3) {
          return function(t14) {
            return e3.reduce((function(e4, t15) {
              return t15(e4);
            }), t14);
          };
        }, browserBundleIdentifiers: { "Brave Browser": "com.brave.Browser", Chrome: "com.google.Chrome", "Chrome Canary": "com.google.Chrome.canary", Firefox: "org.mozilla.firefox", "Firefox Developer Edition": "org.mozilla.firefoxdeveloperedition", "Firefox Nightly": "org.mozilla.nightly", "Microsoft Edge": "com.microsoft.edgemac", Safari: "com.apple.Safari", "Safari Technology Preview": "com.apple.SafariTechnologyPreview" }, ideBundleIdentifiers: { Atom: "com.github.atom", IntelliJ: "com.jetbrains.intellij", PhpStorm: "com.jetbrains.PhpStorm", "Sublime Text": "com.sublimetext.3", WebStorm: "com.jetbrains.WebStorm" }, runSync: function(e3) {
          return (s.execSync(e3, { stdio: [0, "pipe", "ignore"] }).toString() || "").trim();
        }, which: function(e3) {
          return new Promise((function(t14) {
            return a(e3, (function(e4, n3) {
              return t14(n3);
            }));
          }));
        }, getDarwinApplicationVersion: function(e3) {
          var t14;
          return f("trace", "getDarwinApplicationVersion", e3), t14 = process.platform !== "darwin" ? "N/A" : m(e3).then((function(e4) {
            return l(g(r.join(e4, "Contents", "Info.plist"), ["CFBundleShortVersionString"]));
          })), Promise.resolve(t14);
        }, uniq: function(e3) {
          return Array.from(new Set(e3));
        }, toReadableBytes: function(e3) {
          var t14 = Math.floor(Math.log(e3) / Math.log(1024));
          return e3 ? (e3 / Math.pow(1024, t14)).toFixed(2) + " " + ["B", "KB", "MB", "GB", "TB", "PB"][t14] : "0 Bytes";
        }, omit: function(e3, t14) {
          return Object.keys(e3).filter((function(e4) {
            return t14.indexOf(e4) < 0;
          })).reduce((function(t15, n3) {
            return Object.assign(t15, { [n3]: e3[n3] });
          }), {});
        }, pick: function(e3, t14) {
          return Object.keys(e3).filter((function(e4) {
            return t14.indexOf(e4) >= 0;
          })).reduce((function(t15, n3) {
            return Object.assign(t15, { [n3]: e3[n3] });
          }), {});
        }, getPackageJsonByName: function(e3) {
          return h(r.join(process.cwd(), "node_modules", e3, "package.json"));
        }, getPackageJsonByPath: function(e3) {
          return h(r.join(process.cwd(), e3));
        }, getPackageJsonByFullPath: function(e3) {
          return f("trace", "getPackageJsonByFullPath", e3), h(e3);
        }, getAllPackageJsonPaths: function(e3) {
          return f("trace", "getAllPackageJsonPaths", e3), new Promise((function(t14) {
            return c(e3 ? r.join("node_modules", e3, "package.json") : r.join("node_modules", "**", "package.json"), (function(e4, n3) {
              return t14(n3.map(r.normalize) || []);
            }));
          }));
        }, sortObject: function(e3) {
          return Object.keys(e3).sort().reduce((function(t14, n3) {
            return t14[n3] = e3[n3], t14;
          }), {});
        }, findVersion: function(e3, t14, n3) {
          f("trace", "findVersion", e3, t14, n3);
          var r2 = n3 || 0, o2 = t14 || d, i2 = e3.match(o2);
          return i2 ? i2[r2] : e3;
        }, condensePath: function(e3) {
          return (e3 || "").replace(i.homedir(), "~");
        }, determineFound: function(e3, t14, n3) {
          return f("trace", "determineFound", e3, t14, n3), t14 === "N/A" ? Promise.resolve([e3, "N/A"]) : t14 && Object.keys(t14).length !== 0 ? n3 ? Promise.resolve([e3, t14, n3]) : Promise.resolve([e3, t14]) : Promise.resolve([e3, "Not Found"]);
        } };
      }, 9016: (e2) => {
        "use strict";
        function t13(e3, t14, o) {
          e3 instanceof RegExp && (e3 = n2(e3, o)), t14 instanceof RegExp && (t14 = n2(t14, o));
          var i = r(e3, t14, o);
          return i && { start: i[0], end: i[1], pre: o.slice(0, i[0]), body: o.slice(i[0] + e3.length, i[1]), post: o.slice(i[1] + t14.length) };
        }
        function n2(e3, t14) {
          var n3 = t14.match(e3);
          return n3 ? n3[0] : null;
        }
        function r(e3, t14, n3) {
          var r2, o, i, s, a, c = n3.indexOf(e3), u = n3.indexOf(t14, c + 1), l = c;
          if (c >= 0 && u > 0) {
            for (r2 = [], i = n3.length; l >= 0 && !a; ) l == c ? (r2.push(l), c = n3.indexOf(e3, l + 1)) : r2.length == 1 ? a = [r2.pop(), u] : ((o = r2.pop()) < i && (i = o, s = u), u = n3.indexOf(t14, l + 1)), l = c < u && c >= 0 ? c : u;
            r2.length && (a = [i, s]);
          }
          return a;
        }
        e2.exports = t13, t13.range = r;
      }, 1620: (e2, t13, n2) => {
        var r = n2(6596), o = n2(9016);
        e2.exports = function(e3) {
          return e3 ? (e3.substr(0, 2) === "{}" && (e3 = "\\{\\}" + e3.substr(2)), v((function(e4) {
            return e4.split("\\\\").join(i).split("\\{").join(s).split("\\}").join(a).split("\\,").join(c).split("\\.").join(u);
          })(e3), !0).map(f)) : [];
        };
        var i = "\0SLASH" + Math.random() + "\0", s = "\0OPEN" + Math.random() + "\0", a = "\0CLOSE" + Math.random() + "\0", c = "\0COMMA" + Math.random() + "\0", u = "\0PERIOD" + Math.random() + "\0";
        function l(e3) {
          return parseInt(e3, 10) == e3 ? parseInt(e3, 10) : e3.charCodeAt(0);
        }
        function f(e3) {
          return e3.split(i).join("\\").split(s).join("{").split(a).join("}").split(c).join(",").split(u).join(".");
        }
        function p(e3) {
          if (!e3) return [""];
          var t14 = [], n3 = o("{", "}", e3);
          if (!n3) return e3.split(",");
          var r2 = n3.pre, i2 = n3.body, s2 = n3.post, a2 = r2.split(",");
          a2[a2.length - 1] += "{" + i2 + "}";
          var c2 = p(s2);
          return s2.length && (a2[a2.length - 1] += c2.shift(), a2.push.apply(a2, c2)), t14.push.apply(t14, a2), t14;
        }
        function h(e3) {
          return "{" + e3 + "}";
        }
        function d(e3) {
          return /^-?0\d/.test(e3);
        }
        function m(e3, t14) {
          return e3 <= t14;
        }
        function g(e3, t14) {
          return e3 >= t14;
        }
        function v(e3, t14) {
          var n3 = [], i2 = o("{", "}", e3);
          if (!i2 || /\$$/.test(i2.pre)) return [e3];
          var s2, c2 = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i2.body), u2 = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i2.body), f2 = c2 || u2, y = i2.body.indexOf(",") >= 0;
          if (!f2 && !y) return i2.post.match(/,.*\}/) ? v(e3 = i2.pre + "{" + i2.body + a + i2.post) : [e3];
          if (f2) s2 = i2.body.split(/\.\./);
          else if ((s2 = p(i2.body)).length === 1 && (s2 = v(s2[0], !1).map(h)).length === 1) return (x = i2.post.length ? v(i2.post, !1) : [""]).map((function(e4) {
            return i2.pre + s2[0] + e4;
          }));
          var b, w = i2.pre, x = i2.post.length ? v(i2.post, !1) : [""];
          if (f2) {
            var S = l(s2[0]), P = l(s2[1]), I = Math.max(s2[0].length, s2[1].length), O = s2.length == 3 ? Math.abs(l(s2[2])) : 1, E = m;
            P < S && (O *= -1, E = g);
            var j = s2.some(d);
            b = [];
            for (var _ = S; E(_, P); _ += O) {
              var A;
              if (u2) (A = String.fromCharCode(_)) === "\\" && (A = "");
              else if (A = String(_), j) {
                var k = I - A.length;
                if (k > 0) {
                  var F = new Array(k + 1).join("0");
                  A = _ < 0 ? "-" + F + A.slice(1) : F + A;
                }
              }
              b.push(A);
            }
          } else b = r(s2, (function(e4) {
            return v(e4, !1);
          }));
          for (var N = 0; N < b.length; N++) for (var C = 0; C < x.length; C++) {
            var M = w + b[N] + x[C];
            (!t14 || f2 || M) && n3.push(M);
          }
          return n3;
        }
      }, 6596: (e2) => {
        e2.exports = function(e3, n2) {
          for (var r = [], o = 0; o < e3.length; o++) {
            var i = n2(e3[o], o);
            t13(i) ? r.push.apply(r, i) : r.push(i);
          }
          return r;
        };
        var t13 = Array.isArray || function(e3) {
          return Object.prototype.toString.call(e3) === "[object Array]";
        };
      }, 2016: (e2) => {
        e2.exports = function(e3) {
          if (typeof e3 != "function") throw TypeError(e3 + " is not a function!");
          return e3;
        };
      }, 7384: (e2, t13, n2) => {
        var r = n2(7096)("unscopables"), o = Array.prototype;
        o[r] == null && n2(2336)(o, r, {}), e2.exports = function(e3) {
          o[r][e3] = !0;
        };
      }, 2388: (e2) => {
        e2.exports = function(e3, t13, n2, r) {
          if (!(e3 instanceof t13) || r !== void 0 && r in e3) throw TypeError(n2 + ": incorrect invocation!");
          return e3;
        };
      }, 3504: (e2, t13, n2) => {
        var r = n2(3888);
        e2.exports = function(e3) {
          if (!r(e3)) throw TypeError(e3 + " is not an object!");
          return e3;
        };
      }, 7504: (e2, t13, n2) => {
        var r = n2(2780), o = n2(3528), i = n2(8508);
        e2.exports = function(e3) {
          return function(t14, n3, s) {
            var a, c = r(t14), u = o(c.length), l = i(s, u);
            if (e3 && n3 != n3) {
              for (; u > l; ) if ((a = c[l++]) != a) return !0;
            } else for (; u > l; l++) if ((e3 || l in c) && c[l] === n3) return e3 || l || 0;
            return !e3 && -1;
          };
        };
      }, 5848: (e2, t13, n2) => {
        var r = n2(6924), o = n2(7096)("toStringTag"), i = r(/* @__PURE__ */ (function() {
          return arguments;
        })()) == "Arguments";
        e2.exports = function(e3) {
          var t14, n3, s;
          return e3 === void 0 ? "Undefined" : e3 === null ? "Null" : typeof (n3 = (function(e4, t15) {
            try {
              return e4[t15];
            } catch {
            }
          })(t14 = Object(e3), o)) == "string" ? n3 : i ? r(t14) : (s = r(t14)) == "Object" && typeof t14.callee == "function" ? "Arguments" : s;
        };
      }, 6924: (e2) => {
        var t13 = {}.toString;
        e2.exports = function(e3) {
          return t13.call(e3).slice(8, -1);
        };
      }, 148: (e2, t13, n2) => {
        "use strict";
        var r = n2(8520).f, o = n2(3472), i = n2(7704), s = n2(800), a = n2(2388), c = n2(7228), u = n2(6952), l = n2(172), f = n2(3384), p = n2(1668), h = n2(2020).fastKey, d = n2(2772), m = p ? "_s" : "size", g = function(e3, t14) {
          var n3, r2 = h(t14);
          if (r2 !== "F") return e3._i[r2];
          for (n3 = e3._f; n3; n3 = n3.n) if (n3.k == t14) return n3;
        };
        e2.exports = { getConstructor: function(e3, t14, n3, u2) {
          var l2 = e3((function(e4, r2) {
            a(e4, l2, t14, "_i"), e4._t = t14, e4._i = o(null), e4._f = void 0, e4._l = void 0, e4[m] = 0, r2 != null && c(r2, n3, e4[u2], e4);
          }));
          return i(l2.prototype, { clear: function() {
            for (var e4 = d(this, t14), n4 = e4._i, r2 = e4._f; r2; r2 = r2.n) r2.r = !0, r2.p && (r2.p = r2.p.n = void 0), delete n4[r2.i];
            e4._f = e4._l = void 0, e4[m] = 0;
          }, delete: function(e4) {
            var n4 = d(this, t14), r2 = g(n4, e4);
            if (r2) {
              var o2 = r2.n, i2 = r2.p;
              delete n4._i[r2.i], r2.r = !0, i2 && (i2.n = o2), o2 && (o2.p = i2), n4._f == r2 && (n4._f = o2), n4._l == r2 && (n4._l = i2), n4[m]--;
            }
            return !!r2;
          }, forEach: function(e4) {
            d(this, t14);
            for (var n4, r2 = s(e4, arguments.length > 1 ? arguments[1] : void 0, 3); n4 = n4 ? n4.n : this._f; ) for (r2(n4.v, n4.k, this); n4 && n4.r; ) n4 = n4.p;
          }, has: function(e4) {
            return !!g(d(this, t14), e4);
          } }), p && r(l2.prototype, "size", { get: function() {
            return d(this, t14)[m];
          } }), l2;
        }, def: function(e3, t14, n3) {
          var r2, o2, i2 = g(e3, t14);
          return i2 ? i2.v = n3 : (e3._l = i2 = { i: o2 = h(t14, !0), k: t14, v: n3, p: r2 = e3._l, n: void 0, r: !1 }, e3._f || (e3._f = i2), r2 && (r2.n = i2), e3[m]++, o2 !== "F" && (e3._i[o2] = i2)), e3;
        }, getEntry: g, setStrong: function(e3, t14, n3) {
          u(e3, t14, (function(e4, n4) {
            this._t = d(e4, t14), this._k = n4, this._l = void 0;
          }), (function() {
            for (var e4 = this, t15 = e4._k, n4 = e4._l; n4 && n4.r; ) n4 = n4.p;
            return e4._t && (e4._l = n4 = n4 ? n4.n : e4._t._f) ? l(0, t15 == "keys" ? n4.k : t15 == "values" ? n4.v : [n4.k, n4.v]) : (e4._t = void 0, l(1));
          }), n3 ? "entries" : "values", !n3, !0), f(t14);
        } };
      }, 9412: (e2, t13, n2) => {
        "use strict";
        var r = n2(2804), o = n2(7076), i = n2(8868), s = n2(7704), a = n2(2020), c = n2(7228), u = n2(2388), l = n2(3888), f = n2(9316), p = n2(8380), h = n2(6256), d = n2(2672);
        e2.exports = function(e3, t14, n3, m, g, v) {
          var y = r[e3], b = y, w = g ? "set" : "add", x = b && b.prototype, S = {}, P = function(e4) {
            var t15 = x[e4];
            i(x, e4, e4 == "delete" || e4 == "has" ? function(e5) {
              return !(v && !l(e5)) && t15.call(this, e5 === 0 ? 0 : e5);
            } : e4 == "get" ? function(e5) {
              return v && !l(e5) ? void 0 : t15.call(this, e5 === 0 ? 0 : e5);
            } : e4 == "add" ? function(e5) {
              return t15.call(this, e5 === 0 ? 0 : e5), this;
            } : function(e5, n4) {
              return t15.call(this, e5 === 0 ? 0 : e5, n4), this;
            });
          };
          if (typeof b == "function" && (v || x.forEach && !f((function() {
            new b().entries().next();
          })))) {
            var I = new b(), O = I[w](v ? {} : -0, 1) != I, E = f((function() {
              I.has(1);
            })), j = p((function(e4) {
              new b(e4);
            })), _ = !v && f((function() {
              for (var e4 = new b(), t15 = 5; t15--; ) e4[w](t15, t15);
              return !e4.has(-0);
            }));
            j || ((b = t14((function(t15, n4) {
              u(t15, b, e3);
              var r2 = d(new y(), t15, b);
              return n4 != null && c(n4, g, r2[w], r2), r2;
            }))).prototype = x, x.constructor = b), (E || _) && (P("delete"), P("has"), g && P("get")), (_ || O) && P(w), v && x.clear && delete x.clear;
          } else b = m.getConstructor(t14, e3, g, w), s(b.prototype, n3), a.NEED = !0;
          return h(b, e3), S[e3] = b, o(o.G + o.W + o.F * (b != y), S), v || m.setStrong(b, e3, g), b;
        };
      }, 8432: (e2) => {
        var t13 = e2.exports = { version: "2.5.7" };
        typeof __e == "number" && (__e = t13);
      }, 2340: (e2, t13, n2) => {
        "use strict";
        var r = n2(8520), o = n2(8164);
        e2.exports = function(e3, t14, n3) {
          t14 in e3 ? r.f(e3, t14, o(0, n3)) : e3[t14] = n3;
        };
      }, 800: (e2, t13, n2) => {
        var r = n2(2016);
        e2.exports = function(e3, t14, n3) {
          if (r(e3), t14 === void 0) return e3;
          switch (n3) {
            case 1:
              return function(n4) {
                return e3.call(t14, n4);
              };
            case 2:
              return function(n4, r2) {
                return e3.call(t14, n4, r2);
              };
            case 3:
              return function(n4, r2, o) {
                return e3.call(t14, n4, r2, o);
              };
          }
          return function() {
            return e3.apply(t14, arguments);
          };
        };
      }, 24: (e2) => {
        e2.exports = function(e3) {
          if (e3 == null) throw TypeError("Can't call method on  " + e3);
          return e3;
        };
      }, 1668: (e2, t13, n2) => {
        e2.exports = !n2(9316)((function() {
          return Object.defineProperty({}, "a", { get: function() {
            return 7;
          } }).a != 7;
        }));
      }, 1300: (e2, t13, n2) => {
        var r = n2(3888), o = n2(2804).document, i = r(o) && r(o.createElement);
        e2.exports = function(e3) {
          return i ? o.createElement(e3) : {};
        };
      }, 444: (e2) => {
        e2.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
      }, 7076: (e2, t13, n2) => {
        var r = n2(2804), o = n2(8432), i = n2(2336), s = n2(8868), a = n2(800), c = "prototype", u = function(e3, t14, n3) {
          var l, f, p, h, d = e3 & u.F, m = e3 & u.G, g = e3 & u.S, v = e3 & u.P, y = e3 & u.B, b = m ? r : g ? r[t14] || (r[t14] = {}) : (r[t14] || {})[c], w = m ? o : o[t14] || (o[t14] = {}), x = w[c] || (w[c] = {});
          for (l in m && (n3 = t14), n3) p = ((f = !d && b && b[l] !== void 0) ? b : n3)[l], h = y && f ? a(p, r) : v && typeof p == "function" ? a(Function.call, p) : p, b && s(b, l, p, e3 & u.U), w[l] != p && i(w, l, h), v && x[l] != p && (x[l] = p);
        };
        r.core = o, u.F = 1, u.G = 2, u.S = 4, u.P = 8, u.B = 16, u.W = 32, u.U = 64, u.R = 128, e2.exports = u;
      }, 9316: (e2) => {
        e2.exports = function(e3) {
          try {
            return !!e3();
          } catch {
            return !0;
          }
        };
      }, 4448: (e2, t13, n2) => {
        "use strict";
        var r = n2(2336), o = n2(8868), i = n2(9316), s = n2(24), a = n2(7096);
        e2.exports = function(e3, t14, n3) {
          var c = a(e3), u = n3(s, c, ""[e3]), l = u[0], f = u[1];
          i((function() {
            var t15 = {};
            return t15[c] = function() {
              return 7;
            }, ""[e3](t15) != 7;
          })) && (o(String.prototype, e3, l), r(RegExp.prototype, c, t14 == 2 ? function(e4, t15) {
            return f.call(e4, this, t15);
          } : function(e4) {
            return f.call(e4, this);
          }));
        };
      }, 8068: (e2, t13, n2) => {
        "use strict";
        var r = n2(3504);
        e2.exports = function() {
          var e3 = r(this), t14 = "";
          return e3.global && (t14 += "g"), e3.ignoreCase && (t14 += "i"), e3.multiline && (t14 += "m"), e3.unicode && (t14 += "u"), e3.sticky && (t14 += "y"), t14;
        };
      }, 7228: (e2, t13, n2) => {
        var r = n2(800), o = n2(2372), i = n2(3164), s = n2(3504), a = n2(3528), c = n2(2800), u = {}, l = {}, f = e2.exports = function(e3, t14, n3, f2, p) {
          var h, d, m, g, v = p ? function() {
            return e3;
          } : c(e3), y = r(n3, f2, t14 ? 2 : 1), b = 0;
          if (typeof v != "function") throw TypeError(e3 + " is not iterable!");
          if (i(v)) {
            for (h = a(e3.length); h > b; b++) if ((g = t14 ? y(s(d = e3[b])[0], d[1]) : y(e3[b])) === u || g === l) return g;
          } else for (m = v.call(e3); !(d = m.next()).done; ) if ((g = o(m, y, d.value, t14)) === u || g === l) return g;
        };
        f.BREAK = u, f.RETURN = l;
      }, 2804: (e2) => {
        var t13 = e2.exports = typeof window < "u" && window.Math == Math ? window : typeof self < "u" && self.Math == Math ? self : Function("return this")();
        typeof __g == "number" && (__g = t13);
      }, 9080: (e2) => {
        var t13 = {}.hasOwnProperty;
        e2.exports = function(e3, n2) {
          return t13.call(e3, n2);
        };
      }, 2336: (e2, t13, n2) => {
        var r = n2(8520), o = n2(8164);
        e2.exports = n2(1668) ? function(e3, t14, n3) {
          return r.f(e3, t14, o(1, n3));
        } : function(e3, t14, n3) {
          return e3[t14] = n3, e3;
        };
      }, 4016: (e2, t13, n2) => {
        var r = n2(2804).document;
        e2.exports = r && r.documentElement;
      }, 5516: (e2, t13, n2) => {
        e2.exports = !n2(1668) && !n2(9316)((function() {
          return Object.defineProperty(n2(1300)("div"), "a", { get: function() {
            return 7;
          } }).a != 7;
        }));
      }, 2672: (e2, t13, n2) => {
        var r = n2(3888), o = n2(5076).set;
        e2.exports = function(e3, t14, n3) {
          var i, s = t14.constructor;
          return s !== n3 && typeof s == "function" && (i = s.prototype) !== n3.prototype && r(i) && o && o(e3, i), e3;
        };
      }, 5628: (e2) => {
        e2.exports = function(e3, t13, n2) {
          var r = n2 === void 0;
          switch (t13.length) {
            case 0:
              return r ? e3() : e3.call(n2);
            case 1:
              return r ? e3(t13[0]) : e3.call(n2, t13[0]);
            case 2:
              return r ? e3(t13[0], t13[1]) : e3.call(n2, t13[0], t13[1]);
            case 3:
              return r ? e3(t13[0], t13[1], t13[2]) : e3.call(n2, t13[0], t13[1], t13[2]);
            case 4:
              return r ? e3(t13[0], t13[1], t13[2], t13[3]) : e3.call(n2, t13[0], t13[1], t13[2], t13[3]);
          }
          return e3.apply(n2, t13);
        };
      }, 2936: (e2, t13, n2) => {
        var r = n2(6924);
        e2.exports = Object("z").propertyIsEnumerable(0) ? Object : function(e3) {
          return r(e3) == "String" ? e3.split("") : Object(e3);
        };
      }, 3164: (e2, t13, n2) => {
        var r = n2(2488), o = n2(7096)("iterator"), i = Array.prototype;
        e2.exports = function(e3) {
          return e3 !== void 0 && (r.Array === e3 || i[o] === e3);
        };
      }, 3888: (e2) => {
        e2.exports = function(e3) {
          return typeof e3 == "object" ? e3 !== null : typeof e3 == "function";
        };
      }, 7760: (e2, t13, n2) => {
        var r = n2(3888), o = n2(6924), i = n2(7096)("match");
        e2.exports = function(e3) {
          var t14;
          return r(e3) && ((t14 = e3[i]) !== void 0 ? !!t14 : o(e3) == "RegExp");
        };
      }, 2372: (e2, t13, n2) => {
        var r = n2(3504);
        e2.exports = function(e3, t14, n3, o) {
          try {
            return o ? t14(r(n3)[0], n3[1]) : t14(n3);
          } catch (t15) {
            var i = e3.return;
            throw i !== void 0 && r(i.call(e3)), t15;
          }
        };
      }, 128: (e2, t13, n2) => {
        "use strict";
        var r = n2(3472), o = n2(8164), i = n2(6256), s = {};
        n2(2336)(s, n2(7096)("iterator"), (function() {
          return this;
        })), e2.exports = function(e3, t14, n3) {
          e3.prototype = r(s, { next: o(1, n3) }), i(e3, t14 + " Iterator");
        };
      }, 6952: (e2, t13, n2) => {
        "use strict";
        var r = n2(4440), o = n2(7076), i = n2(8868), s = n2(2336), a = n2(2488), c = n2(128), u = n2(6256), l = n2(9556), f = n2(7096)("iterator"), p = !([].keys && "next" in [].keys()), h = "keys", d = "values", m = function() {
          return this;
        };
        e2.exports = function(e3, t14, n3, g, v, y, b) {
          c(n3, t14, g);
          var w, x, S, P = function(e4) {
            if (!p && e4 in j) return j[e4];
            switch (e4) {
              case h:
              case d:
                return function() {
                  return new n3(this, e4);
                };
            }
            return function() {
              return new n3(this, e4);
            };
          }, I = t14 + " Iterator", O = v == d, E = !1, j = e3.prototype, _ = j[f] || j["@@iterator"] || v && j[v], A = _ || P(v), k = v ? O ? P("entries") : A : void 0, F = t14 == "Array" && j.entries || _;
          if (F && (S = l(F.call(new e3()))) !== Object.prototype && S.next && (u(S, I, !0), r || typeof S[f] == "function" || s(S, f, m)), O && _ && _.name !== d && (E = !0, A = function() {
            return _.call(this);
          }), r && !b || !p && !E && j[f] || s(j, f, A), a[t14] = A, a[I] = m, v) if (w = { values: O ? A : P(d), keys: y ? A : P(h), entries: k }, b) for (x in w) x in j || i(j, x, w[x]);
          else o(o.P + o.F * (p || E), t14, w);
          return w;
        };
      }, 8380: (e2, t13, n2) => {
        var r = n2(7096)("iterator"), o = !1;
        try {
          var i = [7][r]();
          i.return = function() {
            o = !0;
          }, Array.from(i, (function() {
            throw 2;
          }));
        } catch {
        }
        e2.exports = function(e3, t14) {
          if (!t14 && !o) return !1;
          var n3 = !1;
          try {
            var i2 = [7], s = i2[r]();
            s.next = function() {
              return { done: n3 = !0 };
            }, i2[r] = function() {
              return s;
            }, e3(i2);
          } catch {
          }
          return n3;
        };
      }, 172: (e2) => {
        e2.exports = function(e3, t13) {
          return { value: t13, done: !!e3 };
        };
      }, 2488: (e2) => {
        e2.exports = {};
      }, 4440: (e2) => {
        e2.exports = !1;
      }, 2020: (e2, t13, n2) => {
        var r = n2(9664)("meta"), o = n2(3888), i = n2(9080), s = n2(8520).f, a = 0, c = Object.isExtensible || function() {
          return !0;
        }, u = !n2(9316)((function() {
          return c(Object.preventExtensions({}));
        })), l = function(e3) {
          s(e3, r, { value: { i: "O" + ++a, w: {} } });
        }, f = e2.exports = { KEY: r, NEED: !1, fastKey: function(e3, t14) {
          if (!o(e3)) return typeof e3 == "symbol" ? e3 : (typeof e3 == "string" ? "S" : "P") + e3;
          if (!i(e3, r)) {
            if (!c(e3)) return "F";
            if (!t14) return "E";
            l(e3);
          }
          return e3[r].i;
        }, getWeak: function(e3, t14) {
          if (!i(e3, r)) {
            if (!c(e3)) return !0;
            if (!t14) return !1;
            l(e3);
          }
          return e3[r].w;
        }, onFreeze: function(e3) {
          return u && f.NEED && c(e3) && !i(e3, r) && l(e3), e3;
        } };
      }, 448: (e2, t13, n2) => {
        var r = n2(2804), o = n2(2280).set, i = r.MutationObserver || r.WebKitMutationObserver, s = r.process, a = r.Promise, c = n2(6924)(s) == "process";
        e2.exports = function() {
          var e3, t14, n3, u = function() {
            var r2, o2;
            for (c && (r2 = s.domain) && r2.exit(); e3; ) {
              o2 = e3.fn, e3 = e3.next;
              try {
                o2();
              } catch (r3) {
                throw e3 ? n3() : t14 = void 0, r3;
              }
            }
            t14 = void 0, r2 && r2.enter();
          };
          if (c) n3 = function() {
            s.nextTick(u);
          };
          else if (!i || r.navigator && r.navigator.standalone) if (a && a.resolve) {
            var l = a.resolve(void 0);
            n3 = function() {
              l.then(u);
            };
          } else n3 = function() {
            o.call(r, u);
          };
          else {
            var f = !0, p = document.createTextNode("");
            new i(u).observe(p, { characterData: !0 }), n3 = function() {
              p.data = f = !f;
            };
          }
          return function(r2) {
            var o2 = { fn: r2, next: void 0 };
            t14 && (t14.next = o2), e3 || (e3 = o2, n3()), t14 = o2;
          };
        };
      }, 8024: (e2, t13, n2) => {
        "use strict";
        var r = n2(2016);
        function o(e3) {
          var t14, n3;
          this.promise = new e3((function(e4, r2) {
            if (t14 !== void 0 || n3 !== void 0) throw TypeError("Bad Promise constructor");
            t14 = e4, n3 = r2;
          })), this.resolve = r(t14), this.reject = r(n3);
        }
        e2.exports.f = function(e3) {
          return new o(e3);
        };
      }, 6472: (e2, t13, n2) => {
        "use strict";
        var r = n2(5444), o = n2(5364), i = n2(3875), s = n2(1164), a = n2(2936), c = Object.assign;
        e2.exports = !c || n2(9316)((function() {
          var e3 = {}, t14 = {}, n3 = /* @__PURE__ */ Symbol(), r2 = "abcdefghijklmnopqrst";
          return e3[n3] = 7, r2.split("").forEach((function(e4) {
            t14[e4] = e4;
          })), c({}, e3)[n3] != 7 || Object.keys(c({}, t14)).join("") != r2;
        })) ? function(e3, t14) {
          for (var n3 = s(e3), c2 = arguments.length, u = 1, l = o.f, f = i.f; c2 > u; ) for (var p, h = a(arguments[u++]), d = l ? r(h).concat(l(h)) : r(h), m = d.length, g = 0; m > g; ) f.call(h, p = d[g++]) && (n3[p] = h[p]);
          return n3;
        } : c;
      }, 3472: (e2, t13, n2) => {
        var r = n2(3504), o = n2(1176), i = n2(444), s = n2(4588)("IE_PROTO"), a = function() {
        }, c = "prototype", u = function() {
          var e3, t14 = n2(1300)("iframe"), r2 = i.length;
          for (t14.style.display = "none", n2(4016).appendChild(t14), t14.src = "javascript:", (e3 = t14.contentWindow.document).open(), e3.write("<script>document.F=Object</script>"), e3.close(), u = e3.F; r2--; ) delete u[c][i[r2]];
          return u();
        };
        e2.exports = Object.create || function(e3, t14) {
          var n3;
          return e3 !== null ? (a[c] = r(e3), n3 = new a(), a[c] = null, n3[s] = e3) : n3 = u(), t14 === void 0 ? n3 : o(n3, t14);
        };
      }, 8520: (e2, t13, n2) => {
        var r = n2(3504), o = n2(5516), i = n2(1896), s = Object.defineProperty;
        t13.f = n2(1668) ? Object.defineProperty : function(e3, t14, n3) {
          if (r(e3), t14 = i(t14, !0), r(n3), o) try {
            return s(e3, t14, n3);
          } catch {
          }
          if ("get" in n3 || "set" in n3) throw TypeError("Accessors not supported!");
          return "value" in n3 && (e3[t14] = n3.value), e3;
        };
      }, 1176: (e2, t13, n2) => {
        var r = n2(8520), o = n2(3504), i = n2(5444);
        e2.exports = n2(1668) ? Object.defineProperties : function(e3, t14) {
          o(e3);
          for (var n3, s = i(t14), a = s.length, c = 0; a > c; ) r.f(e3, n3 = s[c++], t14[n3]);
          return e3;
        };
      }, 6524: (e2, t13, n2) => {
        var r = n2(3875), o = n2(8164), i = n2(2780), s = n2(1896), a = n2(9080), c = n2(5516), u = Object.getOwnPropertyDescriptor;
        t13.f = n2(1668) ? u : function(e3, t14) {
          if (e3 = i(e3), t14 = s(t14, !0), c) try {
            return u(e3, t14);
          } catch {
          }
          if (a(e3, t14)) return o(!r.f.call(e3, t14), e3[t14]);
        };
      }, 7732: (e2, t13, n2) => {
        var r = n2(3816), o = n2(444).concat("length", "prototype");
        t13.f = Object.getOwnPropertyNames || function(e3) {
          return r(e3, o);
        };
      }, 5364: (e2, t13) => {
        t13.f = Object.getOwnPropertySymbols;
      }, 9556: (e2, t13, n2) => {
        var r = n2(9080), o = n2(1164), i = n2(4588)("IE_PROTO"), s = Object.prototype;
        e2.exports = Object.getPrototypeOf || function(e3) {
          return e3 = o(e3), r(e3, i) ? e3[i] : typeof e3.constructor == "function" && e3 instanceof e3.constructor ? e3.constructor.prototype : e3 instanceof Object ? s : null;
        };
      }, 3816: (e2, t13, n2) => {
        var r = n2(9080), o = n2(2780), i = n2(7504)(!1), s = n2(4588)("IE_PROTO");
        e2.exports = function(e3, t14) {
          var n3, a = o(e3), c = 0, u = [];
          for (n3 in a) n3 != s && r(a, n3) && u.push(n3);
          for (; t14.length > c; ) r(a, n3 = t14[c++]) && (~i(u, n3) || u.push(n3));
          return u;
        };
      }, 5444: (e2, t13, n2) => {
        var r = n2(3816), o = n2(444);
        e2.exports = Object.keys || function(e3) {
          return r(e3, o);
        };
      }, 3875: (e2, t13) => {
        t13.f = {}.propertyIsEnumerable;
      }, 2504: (e2, t13, n2) => {
        var r = n2(5444), o = n2(2780), i = n2(3875).f;
        e2.exports = function(e3) {
          return function(t14) {
            for (var n3, s = o(t14), a = r(s), c = a.length, u = 0, l = []; c > u; ) i.call(s, n3 = a[u++]) && l.push(e3 ? [n3, s[n3]] : s[n3]);
            return l;
          };
        };
      }, 7904: (e2) => {
        e2.exports = function(e3) {
          try {
            return { e: !1, v: e3() };
          } catch (e4) {
            return { e: !0, v: e4 };
          }
        };
      }, 0: (e2, t13, n2) => {
        var r = n2(3504), o = n2(3888), i = n2(8024);
        e2.exports = function(e3, t14) {
          if (r(e3), o(t14) && t14.constructor === e3) return t14;
          var n3 = i.f(e3);
          return (0, n3.resolve)(t14), n3.promise;
        };
      }, 8164: (e2) => {
        e2.exports = function(e3, t13) {
          return { enumerable: !(1 & e3), configurable: !(2 & e3), writable: !(4 & e3), value: t13 };
        };
      }, 7704: (e2, t13, n2) => {
        var r = n2(8868);
        e2.exports = function(e3, t14, n3) {
          for (var o in t14) r(e3, o, t14[o], n3);
          return e3;
        };
      }, 8868: (e2, t13, n2) => {
        var r = n2(2804), o = n2(2336), i = n2(9080), s = n2(9664)("src"), a = "toString", c = Function[a], u = ("" + c).split(a);
        n2(8432).inspectSource = function(e3) {
          return c.call(e3);
        }, (e2.exports = function(e3, t14, n3, a2) {
          var c2 = typeof n3 == "function";
          c2 && (i(n3, "name") || o(n3, "name", t14)), e3[t14] !== n3 && (c2 && (i(n3, s) || o(n3, s, e3[t14] ? "" + e3[t14] : u.join(String(t14)))), e3 === r ? e3[t14] = n3 : a2 ? e3[t14] ? e3[t14] = n3 : o(e3, t14, n3) : (delete e3[t14], o(e3, t14, n3)));
        })(Function.prototype, a, (function() {
          return typeof this == "function" && this[s] || c.call(this);
        }));
      }, 5076: (e2, t13, n2) => {
        var r = n2(3888), o = n2(3504), i = function(e3, t14) {
          if (o(e3), !r(t14) && t14 !== null) throw TypeError(t14 + ": can't set as prototype!");
        };
        e2.exports = { set: Object.setPrototypeOf || ("__proto__" in {} ? (function(e3, t14, r2) {
          try {
            (r2 = n2(800)(Function.call, n2(6524).f(Object.prototype, "__proto__").set, 2))(e3, []), t14 = !(e3 instanceof Array);
          } catch {
            t14 = !0;
          }
          return function(e4, n3) {
            return i(e4, n3), t14 ? e4.__proto__ = n3 : r2(e4, n3), e4;
          };
        })({}, !1) : void 0), check: i };
      }, 3384: (e2, t13, n2) => {
        "use strict";
        var r = n2(2804), o = n2(8520), i = n2(1668), s = n2(7096)("species");
        e2.exports = function(e3) {
          var t14 = r[e3];
          i && t14 && !t14[s] && o.f(t14, s, { configurable: !0, get: function() {
            return this;
          } });
        };
      }, 6256: (e2, t13, n2) => {
        var r = n2(8520).f, o = n2(9080), i = n2(7096)("toStringTag");
        e2.exports = function(e3, t14, n3) {
          e3 && !o(e3 = n3 ? e3 : e3.prototype, i) && r(e3, i, { configurable: !0, value: t14 });
        };
      }, 4588: (e2, t13, n2) => {
        var r = n2(5432)("keys"), o = n2(9664);
        e2.exports = function(e3) {
          return r[e3] || (r[e3] = o(e3));
        };
      }, 5432: (e2, t13, n2) => {
        var r = n2(8432), o = n2(2804), i = "__core-js_shared__", s = o[i] || (o[i] = {});
        (e2.exports = function(e3, t14) {
          return s[e3] || (s[e3] = t14 !== void 0 ? t14 : {});
        })("versions", []).push({ version: r.version, mode: n2(4440) ? "pure" : "global", copyright: "\xA9 2018 Denis Pushkarev (zloirock.ru)" });
      }, 6776: (e2, t13, n2) => {
        var r = n2(3504), o = n2(2016), i = n2(7096)("species");
        e2.exports = function(e3, t14) {
          var n3, s = r(e3).constructor;
          return s === void 0 || (n3 = r(s)[i]) == null ? t14 : o(n3);
        };
      }, 6712: (e2, t13, n2) => {
        "use strict";
        var r = n2(9316);
        e2.exports = function(e3, t14) {
          return !!e3 && r((function() {
            t14 ? e3.call(null, (function() {
            }), 1) : e3.call(null);
          }));
        };
      }, 2280: (e2, t13, n2) => {
        var r, o, i, s = n2(800), a = n2(5628), c = n2(4016), u = n2(1300), l = n2(2804), f = l.process, p = l.setImmediate, h = l.clearImmediate, d = l.MessageChannel, m = l.Dispatch, g = 0, v = {}, y = "onreadystatechange", b = function() {
          var e3 = +this;
          if (v.hasOwnProperty(e3)) {
            var t14 = v[e3];
            delete v[e3], t14();
          }
        }, w = function(e3) {
          b.call(e3.data);
        };
        p && h || (p = function(e3) {
          for (var t14 = [], n3 = 1; arguments.length > n3; ) t14.push(arguments[n3++]);
          return v[++g] = function() {
            a(typeof e3 == "function" ? e3 : Function(e3), t14);
          }, r(g), g;
        }, h = function(e3) {
          delete v[e3];
        }, n2(6924)(f) == "process" ? r = function(e3) {
          f.nextTick(s(b, e3, 1));
        } : m && m.now ? r = function(e3) {
          m.now(s(b, e3, 1));
        } : d ? (i = (o = new d()).port2, o.port1.onmessage = w, r = s(i.postMessage, i, 1)) : l.addEventListener && typeof postMessage == "function" && !l.importScripts ? (r = function(e3) {
          l.postMessage(e3 + "", "*");
        }, l.addEventListener("message", w, !1)) : r = y in u("script") ? function(e3) {
          c.appendChild(u("script"))[y] = function() {
            c.removeChild(this), b.call(e3);
          };
        } : function(e3) {
          setTimeout(s(b, e3, 1), 0);
        }), e2.exports = { set: p, clear: h };
      }, 8508: (e2, t13, n2) => {
        var r = n2(8236), o = Math.max, i = Math.min;
        e2.exports = function(e3, t14) {
          return (e3 = r(e3)) < 0 ? o(e3 + t14, 0) : i(e3, t14);
        };
      }, 8236: (e2) => {
        var t13 = Math.ceil, n2 = Math.floor;
        e2.exports = function(e3) {
          return isNaN(e3 = +e3) ? 0 : (e3 > 0 ? n2 : t13)(e3);
        };
      }, 2780: (e2, t13, n2) => {
        var r = n2(2936), o = n2(24);
        e2.exports = function(e3) {
          return r(o(e3));
        };
      }, 3528: (e2, t13, n2) => {
        var r = n2(8236), o = Math.min;
        e2.exports = function(e3) {
          return e3 > 0 ? o(r(e3), 9007199254740991) : 0;
        };
      }, 1164: (e2, t13, n2) => {
        var r = n2(24);
        e2.exports = function(e3) {
          return Object(r(e3));
        };
      }, 1896: (e2, t13, n2) => {
        var r = n2(3888);
        e2.exports = function(e3, t14) {
          if (!r(e3)) return e3;
          var n3, o;
          if (t14 && typeof (n3 = e3.toString) == "function" && !r(o = n3.call(e3)) || typeof (n3 = e3.valueOf) == "function" && !r(o = n3.call(e3)) || !t14 && typeof (n3 = e3.toString) == "function" && !r(o = n3.call(e3))) return o;
          throw TypeError("Can't convert object to primitive value");
        };
      }, 9664: (e2) => {
        var t13 = 0, n2 = Math.random();
        e2.exports = function(e3) {
          return "Symbol(".concat(e3 === void 0 ? "" : e3, ")_", (++t13 + n2).toString(36));
        };
      }, 1168: (e2, t13, n2) => {
        var r = n2(2804).navigator;
        e2.exports = r && r.userAgent || "";
      }, 2772: (e2, t13, n2) => {
        var r = n2(3888);
        e2.exports = function(e3, t14) {
          if (!r(e3) || e3._t !== t14) throw TypeError("Incompatible receiver, " + t14 + " required!");
          return e3;
        };
      }, 7096: (e2, t13, n2) => {
        var r = n2(5432)("wks"), o = n2(9664), i = n2(2804).Symbol, s = typeof i == "function";
        (e2.exports = function(e3) {
          return r[e3] || (r[e3] = s && i[e3] || (s ? i : o)("Symbol." + e3));
        }).store = r;
      }, 2800: (e2, t13, n2) => {
        var r = n2(5848), o = n2(7096)("iterator"), i = n2(2488);
        e2.exports = n2(8432).getIteratorMethod = function(e3) {
          if (e3 != null) return e3[o] || e3["@@iterator"] || i[r(e3)];
        };
      }, 4228: (e2, t13, n2) => {
        "use strict";
        var r = n2(800), o = n2(7076), i = n2(1164), s = n2(2372), a = n2(3164), c = n2(3528), u = n2(2340), l = n2(2800);
        o(o.S + o.F * !n2(8380)((function(e3) {
          Array.from(e3);
        })), "Array", { from: function(e3) {
          var t14, n3, o2, f, p = i(e3), h = typeof this == "function" ? this : Array, d = arguments.length, m = d > 1 ? arguments[1] : void 0, g = m !== void 0, v = 0, y = l(p);
          if (g && (m = r(m, d > 2 ? arguments[2] : void 0, 2)), y == null || h == Array && a(y)) for (n3 = new h(t14 = c(p.length)); t14 > v; v++) u(n3, v, g ? m(p[v], v) : p[v]);
          else for (f = y.call(p), n3 = new h(); !(o2 = f.next()).done; v++) u(n3, v, g ? s(f, m, [o2.value, v], !0) : o2.value);
          return n3.length = v, n3;
        } });
      }, 4260: (e2, t13, n2) => {
        "use strict";
        var r = n2(7076), o = n2(2016), i = n2(1164), s = n2(9316), a = [].sort, c = [1, 2, 3];
        r(r.P + r.F * (s((function() {
          c.sort(void 0);
        })) || !s((function() {
          c.sort(null);
        })) || !n2(6712)(a)), "Array", { sort: function(e3) {
          return e3 === void 0 ? a.call(i(this)) : a.call(i(this), o(e3));
        } });
      }, 5584: (e2, t13, n2) => {
        var r = n2(7076);
        r(r.S + r.F, "Object", { assign: n2(6472) });
      }, 5888: (e2, t13, n2) => {
        "use strict";
        var r, o, i, s, a = n2(4440), c = n2(2804), u = n2(800), l = n2(5848), f = n2(7076), p = n2(3888), h = n2(2016), d = n2(2388), m = n2(7228), g = n2(6776), v = n2(2280).set, y = n2(448)(), b = n2(8024), w = n2(7904), x = n2(1168), S = n2(0), P = "Promise", I = c.TypeError, O = c.process, E = O && O.versions, j = E && E.v8 || "", _ = c[P], A = l(O) == "process", k = function() {
        }, F = o = b.f, N = !!(function() {
          try {
            var e3 = _.resolve(1), t14 = (e3.constructor = {})[n2(7096)("species")] = function(e4) {
              e4(k, k);
            };
            return (A || typeof PromiseRejectionEvent == "function") && e3.then(k) instanceof t14 && j.indexOf("6.6") !== 0 && x.indexOf("Chrome/66") === -1;
          } catch {
          }
        })(), C = function(e3) {
          var t14;
          return !(!p(e3) || typeof (t14 = e3.then) != "function") && t14;
        }, M = function(e3, t14) {
          if (!e3._n) {
            e3._n = !0;
            var n3 = e3._c;
            y((function() {
              for (var r2 = e3._v, o2 = e3._s == 1, i2 = 0, s2 = function(t15) {
                var n4, i3, s3, a2 = o2 ? t15.ok : t15.fail, c2 = t15.resolve, u2 = t15.reject, l2 = t15.domain;
                try {
                  a2 ? (o2 || (e3._h == 2 && $(e3), e3._h = 1), a2 === !0 ? n4 = r2 : (l2 && l2.enter(), n4 = a2(r2), l2 && (l2.exit(), s3 = !0)), n4 === t15.promise ? u2(I("Promise-chain cycle")) : (i3 = C(n4)) ? i3.call(n4, c2, u2) : c2(n4)) : u2(r2);
                } catch (e4) {
                  l2 && !s3 && l2.exit(), u2(e4);
                }
              }; n3.length > i2; ) s2(n3[i2++]);
              e3._c = [], e3._n = !1, t14 && !e3._h && V(e3);
            }));
          }
        }, V = function(e3) {
          v.call(c, (function() {
            var t14, n3, r2, o2 = e3._v, i2 = D(e3);
            if (i2 && (t14 = w((function() {
              A ? O.emit("unhandledRejection", o2, e3) : (n3 = c.onunhandledrejection) ? n3({ promise: e3, reason: o2 }) : (r2 = c.console) && r2.error && r2.error("Unhandled promise rejection", o2);
            })), e3._h = A || D(e3) ? 2 : 1), e3._a = void 0, i2 && t14.e) throw t14.v;
          }));
        }, D = function(e3) {
          return e3._h !== 1 && (e3._a || e3._c).length === 0;
        }, $ = function(e3) {
          v.call(c, (function() {
            var t14;
            A ? O.emit("rejectionHandled", e3) : (t14 = c.onrejectionhandled) && t14({ promise: e3, reason: e3._v });
          }));
        }, L = function(e3) {
          var t14 = this;
          t14._d || (t14._d = !0, (t14 = t14._w || t14)._v = e3, t14._s = 2, t14._a || (t14._a = t14._c.slice()), M(t14, !0));
        }, T = function(e3) {
          var t14, n3 = this;
          if (!n3._d) {
            n3._d = !0, n3 = n3._w || n3;
            try {
              if (n3 === e3) throw I("Promise can't be resolved itself");
              (t14 = C(e3)) ? y((function() {
                var r2 = { _w: n3, _d: !1 };
                try {
                  t14.call(e3, u(T, r2, 1), u(L, r2, 1));
                } catch (e4) {
                  L.call(r2, e4);
                }
              })) : (n3._v = e3, n3._s = 1, M(n3, !1));
            } catch (e4) {
              L.call({ _w: n3, _d: !1 }, e4);
            }
          }
        };
        N || (_ = function(e3) {
          d(this, _, P, "_h"), h(e3), r.call(this);
          try {
            e3(u(T, this, 1), u(L, this, 1));
          } catch (e4) {
            L.call(this, e4);
          }
        }, (r = function(e3) {
          this._c = [], this._a = void 0, this._s = 0, this._d = !1, this._v = void 0, this._h = 0, this._n = !1;
        }).prototype = n2(7704)(_.prototype, { then: function(e3, t14) {
          var n3 = F(g(this, _));
          return n3.ok = typeof e3 != "function" || e3, n3.fail = typeof t14 == "function" && t14, n3.domain = A ? O.domain : void 0, this._c.push(n3), this._a && this._a.push(n3), this._s && M(this, !1), n3.promise;
        }, catch: function(e3) {
          return this.then(void 0, e3);
        } }), i = function() {
          var e3 = new r();
          this.promise = e3, this.resolve = u(T, e3, 1), this.reject = u(L, e3, 1);
        }, b.f = F = function(e3) {
          return e3 === _ || e3 === s ? new i(e3) : o(e3);
        }), f(f.G + f.W + f.F * !N, { Promise: _ }), n2(6256)(_, P), n2(3384)(P), s = n2(8432)[P], f(f.S + f.F * !N, P, { reject: function(e3) {
          var t14 = F(this);
          return (0, t14.reject)(e3), t14.promise;
        } }), f(f.S + f.F * (a || !N), P, { resolve: function(e3) {
          return S(a && this === s ? _ : this, e3);
        } }), f(f.S + f.F * !(N && n2(8380)((function(e3) {
          _.all(e3).catch(k);
        }))), P, { all: function(e3) {
          var t14 = this, n3 = F(t14), r2 = n3.resolve, o2 = n3.reject, i2 = w((function() {
            var n4 = [], i3 = 0, s2 = 1;
            m(e3, !1, (function(e4) {
              var a2 = i3++, c2 = !1;
              n4.push(void 0), s2++, t14.resolve(e4).then((function(e5) {
                c2 || (c2 = !0, n4[a2] = e5, --s2 || r2(n4));
              }), o2);
            })), --s2 || r2(n4);
          }));
          return i2.e && o2(i2.v), n3.promise;
        }, race: function(e3) {
          var t14 = this, n3 = F(t14), r2 = n3.reject, o2 = w((function() {
            m(e3, !1, (function(e4) {
              t14.resolve(e4).then(n3.resolve, r2);
            }));
          }));
          return o2.e && r2(o2.v), n3.promise;
        } });
      }, 9224: (e2, t13, n2) => {
        var r = n2(2804), o = n2(2672), i = n2(8520).f, s = n2(7732).f, a = n2(7760), c = n2(8068), u = r.RegExp, l = u, f = u.prototype, p = /a/g, h = /a/g, d = new u(p) !== p;
        if (n2(1668) && (!d || n2(9316)((function() {
          return h[n2(7096)("match")] = !1, u(p) != p || u(h) == h || u(p, "i") != "/a/i";
        })))) {
          u = function(e3, t14) {
            var n3 = this instanceof u, r2 = a(e3), i2 = t14 === void 0;
            return !n3 && r2 && e3.constructor === u && i2 ? e3 : o(d ? new l(r2 && !i2 ? e3.source : e3, t14) : l((r2 = e3 instanceof u) ? e3.source : e3, r2 && i2 ? c.call(e3) : t14), n3 ? this : f, u);
          };
          for (var m = function(e3) {
            e3 in u || i(u, e3, { configurable: !0, get: function() {
              return l[e3];
            }, set: function(t14) {
              l[e3] = t14;
            } });
          }, g = s(l), v = 0; g.length > v; ) m(g[v++]);
          f.constructor = u, u.prototype = f, n2(8868)(r, "RegExp", u);
        }
        n2(3384)("RegExp");
      }, 7320: (e2, t13, n2) => {
        n2(1668) && /./g.flags != "g" && n2(8520).f(RegExp.prototype, "flags", { configurable: !0, get: n2(8068) });
      }, 4880: (e2, t13, n2) => {
        n2(4448)("match", 1, (function(e3, t14, n3) {
          return [function(n4) {
            "use strict";
            var r = e3(this), o = n4?.[t14];
            return o !== void 0 ? o.call(n4, r) : new RegExp(n4)[t14](String(r));
          }, n3];
        }));
      }, 8412: (e2, t13, n2) => {
        n2(4448)("replace", 2, (function(e3, t14, n3) {
          return [function(r, o) {
            "use strict";
            var i = e3(this), s = r?.[t14];
            return s !== void 0 ? s.call(r, i, o) : n3.call(String(i), r, o);
          }, n3];
        }));
      }, 223: (e2, t13, n2) => {
        n2(4448)("search", 1, (function(e3, t14, n3) {
          return [function(n4) {
            "use strict";
            var r = e3(this), o = n4?.[t14];
            return o !== void 0 ? o.call(n4, r) : new RegExp(n4)[t14](String(r));
          }, n3];
        }));
      }, 3708: (e2, t13, n2) => {
        n2(4448)("split", 2, (function(e3, t14, r) {
          "use strict";
          var o = n2(7760), i = r, s = [].push, a = "split", c = "length", u = "lastIndex";
          if ("abbc"[a](/(b)*/)[1] == "c" || "test"[a](/(?:)/, -1)[c] != 4 || "ab"[a](/(?:ab)*/)[c] != 2 || "."[a](/(.?)(.?)/)[c] != 4 || "."[a](/()()/)[c] > 1 || ""[a](/.?/)[c]) {
            var l = /()??/.exec("")[1] === void 0;
            r = function(e4, t15) {
              var n3 = String(this);
              if (e4 === void 0 && t15 === 0) return [];
              if (!o(e4)) return i.call(n3, e4, t15);
              var r2, a2, f, p, h, d = [], m = (e4.ignoreCase ? "i" : "") + (e4.multiline ? "m" : "") + (e4.unicode ? "u" : "") + (e4.sticky ? "y" : ""), g = 0, v = t15 === void 0 ? 4294967295 : t15 >>> 0, y = new RegExp(e4.source, m + "g");
              for (l || (r2 = new RegExp("^" + y.source + "$(?!\\s)", m)); (a2 = y.exec(n3)) && !((f = a2.index + a2[0][c]) > g && (d.push(n3.slice(g, a2.index)), !l && a2[c] > 1 && a2[0].replace(r2, (function() {
                for (h = 1; h < arguments[c] - 2; h++) arguments[h] === void 0 && (a2[h] = void 0);
              })), a2[c] > 1 && a2.index < n3[c] && s.apply(d, a2.slice(1)), p = a2[0][c], g = f, d[c] >= v)); ) y[u] === a2.index && y[u]++;
              return g === n3[c] ? !p && y.test("") || d.push("") : d.push(n3.slice(g)), d[c] > v ? d.slice(0, v) : d;
            };
          } else "0"[a](void 0, 0)[c] && (r = function(e4, t15) {
            return e4 === void 0 && t15 === 0 ? [] : i.call(this, e4, t15);
          });
          return [function(n3, o2) {
            var i2 = e3(this), s2 = n3?.[t14];
            return s2 !== void 0 ? s2.call(n3, i2, o2) : r.call(String(i2), n3, o2);
          }, r];
        }));
      }, 6568: (e2, t13, n2) => {
        "use strict";
        n2(7320);
        var r = n2(3504), o = n2(8068), i = n2(1668), s = "toString", a = /./[s], c = function(e3) {
          n2(8868)(RegExp.prototype, s, e3, !0);
        };
        n2(9316)((function() {
          return a.call({ source: "a", flags: "b" }) != "/a/b";
        })) ? c((function() {
          var e3 = r(this);
          return "/".concat(e3.source, "/", "flags" in e3 ? e3.flags : !i && e3 instanceof RegExp ? o.call(e3) : void 0);
        })) : a.name != s && c((function() {
          return a.call(this);
        }));
      }, 7276: (e2, t13, n2) => {
        "use strict";
        var r = n2(148), o = n2(2772);
        e2.exports = n2(9412)("Set", (function(e3) {
          return function() {
            return e3(this, arguments.length > 0 ? arguments[0] : void 0);
          };
        }), { add: function(e3) {
          return r.def(o(this, "Set"), e3 = e3 === 0 ? 0 : e3, e3);
        } }, r);
      }, 7360: (e2, t13, n2) => {
        "use strict";
        var r = n2(7076), o = n2(7504)(!0);
        r(r.P, "Array", { includes: function(e3) {
          return o(this, e3, arguments.length > 1 ? arguments[1] : void 0);
        } }), n2(7384)("includes");
      }, 3852: (e2, t13, n2) => {
        var r = n2(7076), o = n2(2504)(!0);
        r(r.S, "Object", { entries: function(e3) {
          return o(e3);
        } });
      }, 5308: (e2, t13, n2) => {
        var r = n2(7076), o = n2(2504)(!1);
        r(r.S, "Object", { values: function(e3) {
          return o(e3);
        } });
      }, 7468: (e2, t13, n2) => {
        "use strict";
        let r = n2(4368), o = n2(9624), i = n2(1846);
        function s(e3, t14, n3) {
          let s2 = o(e3, t14, n3), a = r.spawn(s2.command, s2.args, s2.options);
          return i.hookChildProcess(a, s2), a;
        }
        e2.exports = s, e2.exports.spawn = s, e2.exports.sync = function(e3, t14, n3) {
          let s2 = o(e3, t14, n3), a = r.spawnSync(s2.command, s2.args, s2.options);
          return a.error = a.error || i.verifyENOENTSync(a.status, s2), a;
        }, e2.exports._parse = o, e2.exports._enoent = i;
      }, 1846: (e2) => {
        "use strict";
        let t13 = process.platform === "win32";
        function n2(e3, t14) {
          return Object.assign(new Error(`${t14} ${e3.command} ENOENT`), { code: "ENOENT", errno: "ENOENT", syscall: `${t14} ${e3.command}`, path: e3.command, spawnargs: e3.args });
        }
        function r(e3, r2) {
          return t13 && e3 === 1 && !r2.file ? n2(r2.original, "spawn") : null;
        }
        e2.exports = { hookChildProcess: function(e3, n3) {
          if (!t13) return;
          let o = e3.emit;
          e3.emit = function(t14, i) {
            if (t14 === "exit") {
              let t15 = r(i, n3);
              if (t15) return o.call(e3, "error", t15);
            }
            return o.apply(e3, arguments);
          };
        }, verifyENOENT: r, verifyENOENTSync: function(e3, r2) {
          return t13 && e3 === 1 && !r2.file ? n2(r2.original, "spawnSync") : null;
        }, notFoundError: n2 };
      }, 9624: (e2, t13, n2) => {
        "use strict";
        let r = n2(7072), o = n2(9480), i = n2(8372), s = n2(824), a = n2(7780), c = n2(1716), u = process.platform === "win32", l = /\.(?:com|exe)$/i, f = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i, p = o((() => c.satisfies(process.version, "^4.8.0 || ^5.7.0 || >= 6.0.0", !0))) || !1;
        e2.exports = function(e3, t14, n3) {
          t14 && !Array.isArray(t14) && (n3 = t14, t14 = null);
          let o2 = { command: e3, args: t14 = t14 ? t14.slice(0) : [], options: n3 = Object.assign({}, n3), file: void 0, original: { command: e3, args: t14 } };
          return n3.shell ? (function(e4) {
            if (p) return e4;
            let t15 = [e4.command].concat(e4.args).join(" ");
            return u ? (e4.command = typeof e4.options.shell == "string" ? e4.options.shell : process.env.comspec || "cmd.exe", e4.args = ["/d", "/s", "/c", `"${t15}"`], e4.options.windowsVerbatimArguments = !0) : (typeof e4.options.shell == "string" ? e4.command = e4.options.shell : process.platform === "android" ? e4.command = "/system/bin/sh" : e4.command = "/bin/sh", e4.args = ["-c", t15]), e4;
          })(o2) : (function(e4) {
            if (!u) return e4;
            let t15 = (function(e5) {
              e5.file = i(e5);
              let t16 = e5.file && a(e5.file);
              return t16 ? (e5.args.unshift(e5.file), e5.command = t16, i(e5)) : e5.file;
            })(e4), n4 = !l.test(t15);
            if (e4.options.forceShell || n4) {
              let n5 = f.test(t15);
              e4.command = r.normalize(e4.command), e4.command = s.command(e4.command), e4.args = e4.args.map(((e5) => s.argument(e5, n5)));
              let o3 = [e4.command].concat(e4.args).join(" ");
              e4.args = ["/d", "/s", "/c", `"${o3}"`], e4.command = process.env.comspec || "cmd.exe", e4.options.windowsVerbatimArguments = !0;
            }
            return e4;
          })(o2);
        };
      }, 824: (e2) => {
        "use strict";
        let t13 = /([()\][%!^"`<>&|;, *?])/g;
        e2.exports.command = function(e3) {
          return e3.replace(t13, "^$1");
        }, e2.exports.argument = function(e3, n2) {
          return e3 = (e3 = `"${e3 = (e3 = (e3 = `${e3}`).replace(/(\\*)"/g, '$1$1\\"')).replace(/(\\*)$/, "$1$1")}"`).replace(t13, "^$1"), n2 && (e3 = e3.replace(t13, "^$1")), e3;
        };
      }, 7780: (e2, t13, n2) => {
        "use strict";
        let r = n2(2058), o = n2(6176);
        e2.exports = function(e3) {
          let t14, n3;
          Buffer.alloc ? t14 = Buffer.alloc(150) : (t14 = new Buffer(150), t14.fill(0));
          try {
            n3 = r.openSync(e3, "r"), r.readSync(n3, t14, 0, 150, 0), r.closeSync(n3);
          } catch {
          }
          return o(t14.toString());
        };
      }, 8372: (e2, t13, n2) => {
        "use strict";
        let r = n2(7072), o = n2(8460), i = n2(3032)();
        function s(e3, t14) {
          let n3 = process.cwd(), s2 = e3.options.cwd != null;
          if (s2) try {
            process.chdir(e3.options.cwd);
          } catch {
          }
          let a;
          try {
            a = o.sync(e3.command, { path: (e3.options.env || process.env)[i], pathExt: t14 ? r.delimiter : void 0 });
          } catch {
          } finally {
            process.chdir(n3);
          }
          return a && (a = r.resolve(s2 ? e3.options.cwd : "", a)), a;
        }
        e2.exports = function(e3) {
          return s(e3) || s(e3, !0);
        };
      }, 9988: (e2, t13, n2) => {
        var r = n2(4640), o = function() {
        }, i = function(e3, t14, n3) {
          if (typeof t14 == "function") return i(e3, null, t14);
          t14 || (t14 = {}), n3 = r(n3 || o);
          var s = e3._writableState, a = e3._readableState, c = t14.readable || t14.readable !== !1 && e3.readable, u = t14.writable || t14.writable !== !1 && e3.writable, l = function() {
            e3.writable || f();
          }, f = function() {
            u = !1, c || n3.call(e3);
          }, p = function() {
            c = !1, u || n3.call(e3);
          }, h = function(t15) {
            n3.call(e3, t15 ? new Error("exited with error code: " + t15) : null);
          }, d = function(t15) {
            n3.call(e3, t15);
          }, m = function() {
            return (!c || a && a.ended) && (!u || s && s.ended) ? void 0 : n3.call(e3, new Error("premature close"));
          }, g = function() {
            e3.req.on("finish", f);
          };
          return (function(e4) {
            return e4.setHeader && typeof e4.abort == "function";
          })(e3) ? (e3.on("complete", f), e3.on("abort", m), e3.req ? g() : e3.on("request", g)) : u && !s && (e3.on("end", l), e3.on("close", l)), (function(e4) {
            return e4.stdio && Array.isArray(e4.stdio) && e4.stdio.length === 3;
          })(e3) && e3.on("exit", h), e3.on("end", p), e3.on("finish", f), t14.error !== !1 && e3.on("error", d), e3.on("close", m), function() {
            e3.removeListener("complete", f), e3.removeListener("abort", m), e3.removeListener("request", g), e3.req && e3.req.removeListener("finish", f), e3.removeListener("end", l), e3.removeListener("close", l), e3.removeListener("finish", f), e3.removeListener("exit", h), e3.removeListener("end", p), e3.removeListener("error", d), e3.removeListener("close", m);
          };
        };
        e2.exports = i;
      }, 84: (e2, t13, n2) => {
        e2.exports = l, l.realpath = l, l.sync = f, l.realpathSync = f, l.monkeypatch = function() {
          r.realpath = l, r.realpathSync = f;
        }, l.unmonkeypatch = function() {
          r.realpath = o, r.realpathSync = i;
        };
        var r = n2(2058), o = r.realpath, i = r.realpathSync, s = process.version, a = /^v[0-5]\./.test(s), c = n2(7192);
        function u(e3) {
          return e3 && e3.syscall === "realpath" && (e3.code === "ELOOP" || e3.code === "ENOMEM" || e3.code === "ENAMETOOLONG");
        }
        function l(e3, t14, n3) {
          if (a) return o(e3, t14, n3);
          typeof t14 == "function" && (n3 = t14, t14 = null), o(e3, t14, (function(r2, o2) {
            u(r2) ? c.realpath(e3, t14, n3) : n3(r2, o2);
          }));
        }
        function f(e3, t14) {
          if (a) return i(e3, t14);
          try {
            return i(e3, t14);
          } catch (n3) {
            if (u(n3)) return c.realpathSync(e3, t14);
            throw n3;
          }
        }
      }, 7192: (e2, t13, n2) => {
        var r = n2(7072), o = process.platform === "win32", i = n2(2058), s = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
        if (r.normalize, o) var a = /(.*?)(?:[\/\\]+|$)/g;
        else a = /(.*?)(?:[\/]+|$)/g;
        if (o) var c = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
        else c = /^[\/]*/;
        t13.realpathSync = function(e3, t14) {
          if (e3 = r.resolve(e3), t14 && Object.prototype.hasOwnProperty.call(t14, e3)) return t14[e3];
          var n3, s2, u, l, f = e3, p = {}, h = {};
          function d() {
            var t15 = c.exec(e3);
            n3 = t15[0].length, s2 = t15[0], u = t15[0], l = "", o && !h[u] && (i.lstatSync(u), h[u] = !0);
          }
          for (d(); n3 < e3.length; ) {
            a.lastIndex = n3;
            var m = a.exec(e3);
            if (l = s2, s2 += m[0], u = l + m[1], n3 = a.lastIndex, !(h[u] || t14 && t14[u] === u)) {
              var g;
              if (t14 && Object.prototype.hasOwnProperty.call(t14, u)) g = t14[u];
              else {
                var v = i.lstatSync(u);
                if (!v.isSymbolicLink()) {
                  h[u] = !0, t14 && (t14[u] = u);
                  continue;
                }
                var y = null;
                if (!o) {
                  var b = v.dev.toString(32) + ":" + v.ino.toString(32);
                  p.hasOwnProperty(b) && (y = p[b]);
                }
                y === null && (i.statSync(u), y = i.readlinkSync(u)), g = r.resolve(l, y), t14 && (t14[u] = g), o || (p[b] = y);
              }
              e3 = r.resolve(g, e3.slice(n3)), d();
            }
          }
          return t14 && (t14[f] = e3), e3;
        }, t13.realpath = function(e3, t14, n3) {
          if (typeof n3 != "function" && (n3 = (function(e4) {
            return typeof e4 == "function" ? e4 : (function() {
              var e5;
              if (s) {
                var t15 = new Error();
                e5 = function(e6) {
                  e6 && (t15.message = e6.message, n4(e6 = t15));
                };
              } else e5 = n4;
              return e5;
              function n4(e6) {
                if (e6) {
                  if (process.throwDeprecation) throw e6;
                  if (!process.noDeprecation) {
                    var t16 = "fs: missing callback " + (e6.stack || e6.message);
                    process.traceDeprecation ? console.trace(t16) : console.error(t16);
                  }
                }
              }
            })();
          })(t14), t14 = null), e3 = r.resolve(e3), t14 && Object.prototype.hasOwnProperty.call(t14, e3)) return process.nextTick(n3.bind(null, null, t14[e3]));
          var u, l, f, p, h = e3, d = {}, m = {};
          function g() {
            var t15 = c.exec(e3);
            u = t15[0].length, l = t15[0], f = t15[0], p = "", o && !m[f] ? i.lstat(f, (function(e4) {
              if (e4) return n3(e4);
              m[f] = !0, v();
            })) : process.nextTick(v);
          }
          function v() {
            if (u >= e3.length) return t14 && (t14[h] = e3), n3(null, e3);
            a.lastIndex = u;
            var r2 = a.exec(e3);
            return p = l, l += r2[0], f = p + r2[1], u = a.lastIndex, m[f] || t14 && t14[f] === f ? process.nextTick(v) : t14 && Object.prototype.hasOwnProperty.call(t14, f) ? w(t14[f]) : i.lstat(f, y);
          }
          function y(e4, r2) {
            if (e4) return n3(e4);
            if (!r2.isSymbolicLink()) return m[f] = !0, t14 && (t14[f] = f), process.nextTick(v);
            if (!o) {
              var s2 = r2.dev.toString(32) + ":" + r2.ino.toString(32);
              if (d.hasOwnProperty(s2)) return b(null, d[s2], f);
            }
            i.stat(f, (function(e5) {
              if (e5) return n3(e5);
              i.readlink(f, (function(e6, t15) {
                o || (d[s2] = t15), b(e6, t15);
              }));
            }));
          }
          function b(e4, o2, i2) {
            if (e4) return n3(e4);
            var s2 = r.resolve(p, o2);
            t14 && (t14[i2] = s2), w(s2);
          }
          function w(t15) {
            e3 = r.resolve(t15, e3.slice(u)), g();
          }
          g();
        };
      }, 9712: (e2, t13, n2) => {
        function r(e3, t14) {
          return Object.prototype.hasOwnProperty.call(e3, t14);
        }
        t13.alphasort = u, t13.alphasorti = c, t13.setopts = function(e3, t14, n3) {
          if (n3 || (n3 = {}), n3.matchBase && t14.indexOf("/") === -1) {
            if (n3.noglobstar) throw new Error("base matching requires globstar");
            t14 = "**/" + t14;
          }
          e3.silent = !!n3.silent, e3.pattern = t14, e3.strict = n3.strict !== !1, e3.realpath = !!n3.realpath, e3.realpathCache = n3.realpathCache || /* @__PURE__ */ Object.create(null), e3.follow = !!n3.follow, e3.dot = !!n3.dot, e3.mark = !!n3.mark, e3.nodir = !!n3.nodir, e3.nodir && (e3.mark = !0), e3.sync = !!n3.sync, e3.nounique = !!n3.nounique, e3.nonull = !!n3.nonull, e3.nosort = !!n3.nosort, e3.nocase = !!n3.nocase, e3.stat = !!n3.stat, e3.noprocess = !!n3.noprocess, e3.absolute = !!n3.absolute, e3.maxLength = n3.maxLength || 1 / 0, e3.cache = n3.cache || /* @__PURE__ */ Object.create(null), e3.statCache = n3.statCache || /* @__PURE__ */ Object.create(null), e3.symlinks = n3.symlinks || /* @__PURE__ */ Object.create(null), (function(e4, t15) {
            e4.ignore = t15.ignore || [], Array.isArray(e4.ignore) || (e4.ignore = [e4.ignore]), e4.ignore.length && (e4.ignore = e4.ignore.map(l));
          })(e3, n3), e3.changedCwd = !1;
          var i2 = process.cwd();
          r(n3, "cwd") ? (e3.cwd = o.resolve(n3.cwd), e3.changedCwd = e3.cwd !== i2) : e3.cwd = i2, e3.root = n3.root || o.resolve(e3.cwd, "/"), e3.root = o.resolve(e3.root), process.platform === "win32" && (e3.root = e3.root.replace(/\\/g, "/")), e3.cwdAbs = s(e3.cwd) ? e3.cwd : f(e3, e3.cwd), process.platform === "win32" && (e3.cwdAbs = e3.cwdAbs.replace(/\\/g, "/")), e3.nomount = !!n3.nomount, n3.nonegate = !0, n3.nocomment = !0, e3.minimatch = new a(t14, n3), e3.options = e3.minimatch.options;
        }, t13.ownProp = r, t13.makeAbs = f, t13.finish = function(e3) {
          for (var t14 = e3.nounique, n3 = t14 ? [] : /* @__PURE__ */ Object.create(null), r2 = 0, o2 = e3.matches.length; r2 < o2; r2++) {
            var i2 = e3.matches[r2];
            if (i2 && Object.keys(i2).length !== 0) {
              var s2 = Object.keys(i2);
              t14 ? n3.push.apply(n3, s2) : s2.forEach((function(e4) {
                n3[e4] = !0;
              }));
            } else if (e3.nonull) {
              var a2 = e3.minimatch.globSet[r2];
              t14 ? n3.push(a2) : n3[a2] = !0;
            }
          }
          if (t14 || (n3 = Object.keys(n3)), e3.nosort || (n3 = n3.sort(e3.nocase ? c : u)), e3.mark) {
            for (r2 = 0; r2 < n3.length; r2++) n3[r2] = e3._mark(n3[r2]);
            e3.nodir && (n3 = n3.filter((function(t15) {
              var n4 = !/\/$/.test(t15), r3 = e3.cache[t15] || e3.cache[f(e3, t15)];
              return n4 && r3 && (n4 = r3 !== "DIR" && !Array.isArray(r3)), n4;
            })));
          }
          e3.ignore.length && (n3 = n3.filter((function(t15) {
            return !p(e3, t15);
          }))), e3.found = n3;
        }, t13.mark = function(e3, t14) {
          var n3 = f(e3, t14), r2 = e3.cache[n3], o2 = t14;
          if (r2) {
            var i2 = r2 === "DIR" || Array.isArray(r2), s2 = t14.slice(-1) === "/";
            if (i2 && !s2 ? o2 += "/" : !i2 && s2 && (o2 = o2.slice(0, -1)), o2 !== t14) {
              var a2 = f(e3, o2);
              e3.statCache[a2] = e3.statCache[n3], e3.cache[a2] = e3.cache[n3];
            }
          }
          return o2;
        }, t13.isIgnored = p, t13.childrenIgnored = function(e3, t14) {
          return !!e3.ignore.length && e3.ignore.some((function(e4) {
            return !(!e4.gmatcher || !e4.gmatcher.match(t14));
          }));
        };
        var o = n2(7072), i = n2(836), s = n2(4832), a = i.Minimatch;
        function c(e3, t14) {
          return e3.toLowerCase().localeCompare(t14.toLowerCase());
        }
        function u(e3, t14) {
          return e3.localeCompare(t14);
        }
        function l(e3) {
          var t14 = null;
          if (e3.slice(-3) === "/**") {
            var n3 = e3.replace(/(\/\*\*)+$/, "");
            t14 = new a(n3, { dot: !0 });
          }
          return { matcher: new a(e3, { dot: !0 }), gmatcher: t14 };
        }
        function f(e3, t14) {
          var n3 = t14;
          return n3 = t14.charAt(0) === "/" ? o.join(e3.root, t14) : s(t14) || t14 === "" ? t14 : e3.changedCwd ? o.resolve(e3.cwd, t14) : o.resolve(t14), process.platform === "win32" && (n3 = n3.replace(/\\/g, "/")), n3;
        }
        function p(e3, t14) {
          return !!e3.ignore.length && e3.ignore.some((function(e4) {
            return e4.matcher.match(t14) || !(!e4.gmatcher || !e4.gmatcher.match(t14));
          }));
        }
      }, 808: (e2, t13, n2) => {
        e2.exports = b;
        var r = n2(2058), o = n2(84), i = n2(836), s = (i.Minimatch, n2(3352)), a = n2(467).EventEmitter, c = n2(7072), u = n2(6608), l = n2(4832), f = n2(4548), p = n2(9712), h = (p.alphasort, p.alphasorti, p.setopts), d = p.ownProp, m = n2(363), g = (n2(970), p.childrenIgnored), v = p.isIgnored, y = n2(4640);
        function b(e3, t14, n3) {
          if (typeof t14 == "function" && (n3 = t14, t14 = {}), t14 || (t14 = {}), t14.sync) {
            if (n3) throw new TypeError("callback provided to sync glob");
            return f(e3, t14);
          }
          return new x(e3, t14, n3);
        }
        b.sync = f;
        var w = b.GlobSync = f.GlobSync;
        function x(e3, t14, n3) {
          if (typeof t14 == "function" && (n3 = t14, t14 = null), t14 && t14.sync) {
            if (n3) throw new TypeError("callback provided to sync glob");
            return new w(e3, t14);
          }
          if (!(this instanceof x)) return new x(e3, t14, n3);
          h(this, e3, t14), this._didRealPath = !1;
          var r2 = this.minimatch.set.length;
          this.matches = new Array(r2), typeof n3 == "function" && (n3 = y(n3), this.on("error", n3), this.on("end", (function(e4) {
            n3(null, e4);
          })));
          var o2 = this;
          if (this._processing = 0, this._emitQueue = [], this._processQueue = [], this.paused = !1, this.noprocess) return this;
          if (r2 === 0) return a2();
          for (var i2 = !0, s2 = 0; s2 < r2; s2++) this._process(this.minimatch.set[s2], s2, !1, a2);
          function a2() {
            --o2._processing, o2._processing <= 0 && (i2 ? process.nextTick((function() {
              o2._finish();
            })) : o2._finish());
          }
          i2 = !1;
        }
        b.glob = b, b.hasMagic = function(e3, t14) {
          var n3 = (function(e4, t15) {
            if (t15 === null || typeof t15 != "object") return e4;
            for (var n4 = Object.keys(t15), r3 = n4.length; r3--; ) e4[n4[r3]] = t15[n4[r3]];
            return e4;
          })({}, t14);
          n3.noprocess = !0;
          var r2 = new x(e3, n3).minimatch.set;
          if (!e3) return !1;
          if (r2.length > 1) return !0;
          for (var o2 = 0; o2 < r2[0].length; o2++) if (typeof r2[0][o2] != "string") return !0;
          return !1;
        }, b.Glob = x, s(x, a), x.prototype._finish = function() {
          if (u(this instanceof x), !this.aborted) {
            if (this.realpath && !this._didRealpath) return this._realpath();
            p.finish(this), this.emit("end", this.found);
          }
        }, x.prototype._realpath = function() {
          if (!this._didRealpath) {
            this._didRealpath = !0;
            var e3 = this.matches.length;
            if (e3 === 0) return this._finish();
            for (var t14 = this, n3 = 0; n3 < this.matches.length; n3++) this._realpathSet(n3, r2);
          }
          function r2() {
            --e3 == 0 && t14._finish();
          }
        }, x.prototype._realpathSet = function(e3, t14) {
          var n3 = this.matches[e3];
          if (!n3) return t14();
          var r2 = Object.keys(n3), i2 = this, s2 = r2.length;
          if (s2 === 0) return t14();
          var a2 = this.matches[e3] = /* @__PURE__ */ Object.create(null);
          r2.forEach((function(n4, r3) {
            n4 = i2._makeAbs(n4), o.realpath(n4, i2.realpathCache, (function(r4, o2) {
              r4 ? r4.syscall === "stat" ? a2[n4] = !0 : i2.emit("error", r4) : a2[o2] = !0, --s2 == 0 && (i2.matches[e3] = a2, t14());
            }));
          }));
        }, x.prototype._mark = function(e3) {
          return p.mark(this, e3);
        }, x.prototype._makeAbs = function(e3) {
          return p.makeAbs(this, e3);
        }, x.prototype.abort = function() {
          this.aborted = !0, this.emit("abort");
        }, x.prototype.pause = function() {
          this.paused || (this.paused = !0, this.emit("pause"));
        }, x.prototype.resume = function() {
          if (this.paused) {
            if (this.emit("resume"), this.paused = !1, this._emitQueue.length) {
              var e3 = this._emitQueue.slice(0);
              this._emitQueue.length = 0;
              for (var t14 = 0; t14 < e3.length; t14++) {
                var n3 = e3[t14];
                this._emitMatch(n3[0], n3[1]);
              }
            }
            if (this._processQueue.length) {
              var r2 = this._processQueue.slice(0);
              for (this._processQueue.length = 0, t14 = 0; t14 < r2.length; t14++) {
                var o2 = r2[t14];
                this._processing--, this._process(o2[0], o2[1], o2[2], o2[3]);
              }
            }
          }
        }, x.prototype._process = function(e3, t14, n3, r2) {
          if (u(this instanceof x), u(typeof r2 == "function"), !this.aborted) if (this._processing++, this.paused) this._processQueue.push([e3, t14, n3, r2]);
          else {
            for (var o2, s2 = 0; typeof e3[s2] == "string"; ) s2++;
            switch (s2) {
              case e3.length:
                return void this._processSimple(e3.join("/"), t14, r2);
              case 0:
                o2 = null;
                break;
              default:
                o2 = e3.slice(0, s2).join("/");
            }
            var a2, c2 = e3.slice(s2);
            o2 === null ? a2 = "." : ((l(o2) || l(e3.join("/"))) && (o2 && l(o2) || (o2 = "/" + o2)), a2 = o2);
            var f2 = this._makeAbs(a2);
            if (g(this, a2)) return r2();
            c2[0] === i.GLOBSTAR ? this._processGlobStar(o2, a2, f2, c2, t14, n3, r2) : this._processReaddir(o2, a2, f2, c2, t14, n3, r2);
          }
        }, x.prototype._processReaddir = function(e3, t14, n3, r2, o2, i2, s2) {
          var a2 = this;
          this._readdir(n3, i2, (function(c2, u2) {
            return a2._processReaddir2(e3, t14, n3, r2, o2, i2, u2, s2);
          }));
        }, x.prototype._processReaddir2 = function(e3, t14, n3, r2, o2, i2, s2, a2) {
          if (!s2) return a2();
          for (var u2 = r2[0], l2 = !!this.minimatch.negate, f2 = u2._glob, p2 = this.dot || f2.charAt(0) === ".", h2 = [], d2 = 0; d2 < s2.length; d2++) ((g2 = s2[d2]).charAt(0) !== "." || p2) && (l2 && !e3 ? !g2.match(u2) : g2.match(u2)) && h2.push(g2);
          var m2 = h2.length;
          if (m2 === 0) return a2();
          if (r2.length === 1 && !this.mark && !this.stat) {
            for (this.matches[o2] || (this.matches[o2] = /* @__PURE__ */ Object.create(null)), d2 = 0; d2 < m2; d2++) {
              var g2 = h2[d2];
              e3 && (g2 = e3 !== "/" ? e3 + "/" + g2 : e3 + g2), g2.charAt(0) !== "/" || this.nomount || (g2 = c.join(this.root, g2)), this._emitMatch(o2, g2);
            }
            return a2();
          }
          for (r2.shift(), d2 = 0; d2 < m2; d2++) g2 = h2[d2], e3 && (g2 = e3 !== "/" ? e3 + "/" + g2 : e3 + g2), this._process([g2].concat(r2), o2, i2, a2);
          a2();
        }, x.prototype._emitMatch = function(e3, t14) {
          if (!this.aborted && !v(this, t14)) if (this.paused) this._emitQueue.push([e3, t14]);
          else {
            var n3 = l(t14) ? t14 : this._makeAbs(t14);
            if (this.mark && (t14 = this._mark(t14)), this.absolute && (t14 = n3), !this.matches[e3][t14]) {
              if (this.nodir) {
                var r2 = this.cache[n3];
                if (r2 === "DIR" || Array.isArray(r2)) return;
              }
              this.matches[e3][t14] = !0;
              var o2 = this.statCache[n3];
              o2 && this.emit("stat", t14, o2), this.emit("match", t14);
            }
          }
        }, x.prototype._readdirInGlobStar = function(e3, t14) {
          if (!this.aborted) {
            if (this.follow) return this._readdir(e3, !1, t14);
            var n3 = this, o2 = m("lstat\0" + e3, (function(r2, o3) {
              if (r2 && r2.code === "ENOENT") return t14();
              var i2 = o3 && o3.isSymbolicLink();
              n3.symlinks[e3] = i2, i2 || !o3 || o3.isDirectory() ? n3._readdir(e3, !1, t14) : (n3.cache[e3] = "FILE", t14());
            }));
            o2 && r.lstat(e3, o2);
          }
        }, x.prototype._readdir = function(e3, t14, n3) {
          if (!this.aborted && (n3 = m("readdir\0" + e3 + "\0" + t14, n3))) {
            if (t14 && !d(this.symlinks, e3)) return this._readdirInGlobStar(e3, n3);
            if (d(this.cache, e3)) {
              var o2 = this.cache[e3];
              if (!o2 || o2 === "FILE") return n3();
              if (Array.isArray(o2)) return n3(null, o2);
            }
            r.readdir(e3, /* @__PURE__ */ (function(e4, t15, n4) {
              return function(r2, o3) {
                r2 ? e4._readdirError(t15, r2, n4) : e4._readdirEntries(t15, o3, n4);
              };
            })(this, e3, n3));
          }
        }, x.prototype._readdirEntries = function(e3, t14, n3) {
          if (!this.aborted) {
            if (!this.mark && !this.stat) for (var r2 = 0; r2 < t14.length; r2++) {
              var o2 = t14[r2];
              o2 = e3 === "/" ? e3 + o2 : e3 + "/" + o2, this.cache[o2] = !0;
            }
            return this.cache[e3] = t14, n3(null, t14);
          }
        }, x.prototype._readdirError = function(e3, t14, n3) {
          if (!this.aborted) {
            switch (t14.code) {
              case "ENOTSUP":
              case "ENOTDIR":
                var r2 = this._makeAbs(e3);
                if (this.cache[r2] = "FILE", r2 === this.cwdAbs) {
                  var o2 = new Error(t14.code + " invalid cwd " + this.cwd);
                  o2.path = this.cwd, o2.code = t14.code, this.emit("error", o2), this.abort();
                }
                break;
              case "ENOENT":
              case "ELOOP":
              case "ENAMETOOLONG":
              case "UNKNOWN":
                this.cache[this._makeAbs(e3)] = !1;
                break;
              default:
                this.cache[this._makeAbs(e3)] = !1, this.strict && (this.emit("error", t14), this.abort()), this.silent || console.error("glob error", t14);
            }
            return n3();
          }
        }, x.prototype._processGlobStar = function(e3, t14, n3, r2, o2, i2, s2) {
          var a2 = this;
          this._readdir(n3, i2, (function(c2, u2) {
            a2._processGlobStar2(e3, t14, n3, r2, o2, i2, u2, s2);
          }));
        }, x.prototype._processGlobStar2 = function(e3, t14, n3, r2, o2, i2, s2, a2) {
          if (!s2) return a2();
          var c2 = r2.slice(1), u2 = e3 ? [e3] : [], l2 = u2.concat(c2);
          this._process(l2, o2, !1, a2);
          var f2 = this.symlinks[n3], p2 = s2.length;
          if (f2 && i2) return a2();
          for (var h2 = 0; h2 < p2; h2++) if (s2[h2].charAt(0) !== "." || this.dot) {
            var d2 = u2.concat(s2[h2], c2);
            this._process(d2, o2, !0, a2);
            var m2 = u2.concat(s2[h2], r2);
            this._process(m2, o2, !0, a2);
          }
          a2();
        }, x.prototype._processSimple = function(e3, t14, n3) {
          var r2 = this;
          this._stat(e3, (function(o2, i2) {
            r2._processSimple2(e3, t14, o2, i2, n3);
          }));
        }, x.prototype._processSimple2 = function(e3, t14, n3, r2, o2) {
          if (this.matches[t14] || (this.matches[t14] = /* @__PURE__ */ Object.create(null)), !r2) return o2();
          if (e3 && l(e3) && !this.nomount) {
            var i2 = /[\/\\]$/.test(e3);
            e3.charAt(0) === "/" ? e3 = c.join(this.root, e3) : (e3 = c.resolve(this.root, e3), i2 && (e3 += "/"));
          }
          process.platform === "win32" && (e3 = e3.replace(/\\/g, "/")), this._emitMatch(t14, e3), o2();
        }, x.prototype._stat = function(e3, t14) {
          var n3 = this._makeAbs(e3), o2 = e3.slice(-1) === "/";
          if (e3.length > this.maxLength) return t14();
          if (!this.stat && d(this.cache, n3)) {
            var i2 = this.cache[n3];
            if (Array.isArray(i2) && (i2 = "DIR"), !o2 || i2 === "DIR") return t14(null, i2);
            if (o2 && i2 === "FILE") return t14();
          }
          var s2 = this.statCache[n3];
          if (s2 !== void 0) {
            if (s2 === !1) return t14(null, s2);
            var a2 = s2.isDirectory() ? "DIR" : "FILE";
            return o2 && a2 === "FILE" ? t14() : t14(null, a2, s2);
          }
          var c2 = this, u2 = m("stat\0" + n3, (function(o3, i3) {
            if (i3 && i3.isSymbolicLink()) return r.stat(n3, (function(r2, o4) {
              r2 ? c2._stat2(e3, n3, null, i3, t14) : c2._stat2(e3, n3, r2, o4, t14);
            }));
            c2._stat2(e3, n3, o3, i3, t14);
          }));
          u2 && r.lstat(n3, u2);
        }, x.prototype._stat2 = function(e3, t14, n3, r2, o2) {
          if (n3 && (n3.code === "ENOENT" || n3.code === "ENOTDIR")) return this.statCache[t14] = !1, o2();
          var i2 = e3.slice(-1) === "/";
          if (this.statCache[t14] = r2, t14.slice(-1) === "/" && r2 && !r2.isDirectory()) return o2(null, !1, r2);
          var s2 = !0;
          return r2 && (s2 = r2.isDirectory() ? "DIR" : "FILE"), this.cache[t14] = this.cache[t14] || s2, i2 && s2 === "FILE" ? o2() : o2(null, s2, r2);
        };
      }, 4548: (e2, t13, n2) => {
        e2.exports = d, d.GlobSync = m;
        var r = n2(2058), o = n2(84), i = n2(836), s = (i.Minimatch, n2(808).Glob, n2(970), n2(7072)), a = n2(6608), c = n2(4832), u = n2(9712), l = (u.alphasort, u.alphasorti, u.setopts), f = u.ownProp, p = u.childrenIgnored, h = u.isIgnored;
        function d(e3, t14) {
          if (typeof t14 == "function" || arguments.length === 3) throw new TypeError(`callback provided to sync glob
See: https://github.com/isaacs/node-glob/issues/167`);
          return new m(e3, t14).found;
        }
        function m(e3, t14) {
          if (!e3) throw new Error("must provide pattern");
          if (typeof t14 == "function" || arguments.length === 3) throw new TypeError(`callback provided to sync glob
See: https://github.com/isaacs/node-glob/issues/167`);
          if (!(this instanceof m)) return new m(e3, t14);
          if (l(this, e3, t14), this.noprocess) return this;
          var n3 = this.minimatch.set.length;
          this.matches = new Array(n3);
          for (var r2 = 0; r2 < n3; r2++) this._process(this.minimatch.set[r2], r2, !1);
          this._finish();
        }
        m.prototype._finish = function() {
          if (a(this instanceof m), this.realpath) {
            var e3 = this;
            this.matches.forEach((function(t14, n3) {
              var r2 = e3.matches[n3] = /* @__PURE__ */ Object.create(null);
              for (var i2 in t14) try {
                i2 = e3._makeAbs(i2), r2[o.realpathSync(i2, e3.realpathCache)] = !0;
              } catch (t15) {
                if (t15.syscall !== "stat") throw t15;
                r2[e3._makeAbs(i2)] = !0;
              }
            }));
          }
          u.finish(this);
        }, m.prototype._process = function(e3, t14, n3) {
          a(this instanceof m);
          for (var r2, o2 = 0; typeof e3[o2] == "string"; ) o2++;
          switch (o2) {
            case e3.length:
              return void this._processSimple(e3.join("/"), t14);
            case 0:
              r2 = null;
              break;
            default:
              r2 = e3.slice(0, o2).join("/");
          }
          var s2, u2 = e3.slice(o2);
          r2 === null ? s2 = "." : ((c(r2) || c(e3.join("/"))) && (r2 && c(r2) || (r2 = "/" + r2)), s2 = r2);
          var l2 = this._makeAbs(s2);
          p(this, s2) || (u2[0] === i.GLOBSTAR ? this._processGlobStar(r2, s2, l2, u2, t14, n3) : this._processReaddir(r2, s2, l2, u2, t14, n3));
        }, m.prototype._processReaddir = function(e3, t14, n3, r2, o2, i2) {
          var a2 = this._readdir(n3, i2);
          if (a2) {
            for (var c2 = r2[0], u2 = !!this.minimatch.negate, l2 = c2._glob, f2 = this.dot || l2.charAt(0) === ".", p2 = [], h2 = 0; h2 < a2.length; h2++) ((g = a2[h2]).charAt(0) !== "." || f2) && (u2 && !e3 ? !g.match(c2) : g.match(c2)) && p2.push(g);
            var d2 = p2.length;
            if (d2 !== 0) if (r2.length !== 1 || this.mark || this.stat) for (r2.shift(), h2 = 0; h2 < d2; h2++) {
              var m2;
              g = p2[h2], m2 = e3 ? [e3, g] : [g], this._process(m2.concat(r2), o2, i2);
            }
            else
              for (this.matches[o2] || (this.matches[o2] = /* @__PURE__ */ Object.create(null)), h2 = 0; h2 < d2; h2++) {
                var g = p2[h2];
                e3 && (g = e3.slice(-1) !== "/" ? e3 + "/" + g : e3 + g), g.charAt(0) !== "/" || this.nomount || (g = s.join(this.root, g)), this._emitMatch(o2, g);
              }
          }
        }, m.prototype._emitMatch = function(e3, t14) {
          if (!h(this, t14)) {
            var n3 = this._makeAbs(t14);
            if (this.mark && (t14 = this._mark(t14)), this.absolute && (t14 = n3), !this.matches[e3][t14]) {
              if (this.nodir) {
                var r2 = this.cache[n3];
                if (r2 === "DIR" || Array.isArray(r2)) return;
              }
              this.matches[e3][t14] = !0, this.stat && this._stat(t14);
            }
          }
        }, m.prototype._readdirInGlobStar = function(e3) {
          if (this.follow) return this._readdir(e3, !1);
          var t14, n3;
          try {
            n3 = r.lstatSync(e3);
          } catch (e4) {
            if (e4.code === "ENOENT") return null;
          }
          var o2 = n3 && n3.isSymbolicLink();
          return this.symlinks[e3] = o2, o2 || !n3 || n3.isDirectory() ? t14 = this._readdir(e3, !1) : this.cache[e3] = "FILE", t14;
        }, m.prototype._readdir = function(e3, t14) {
          if (t14 && !f(this.symlinks, e3)) return this._readdirInGlobStar(e3);
          if (f(this.cache, e3)) {
            var n3 = this.cache[e3];
            if (!n3 || n3 === "FILE") return null;
            if (Array.isArray(n3)) return n3;
          }
          try {
            return this._readdirEntries(e3, r.readdirSync(e3));
          } catch (t15) {
            return this._readdirError(e3, t15), null;
          }
        }, m.prototype._readdirEntries = function(e3, t14) {
          if (!this.mark && !this.stat) for (var n3 = 0; n3 < t14.length; n3++) {
            var r2 = t14[n3];
            r2 = e3 === "/" ? e3 + r2 : e3 + "/" + r2, this.cache[r2] = !0;
          }
          return this.cache[e3] = t14, t14;
        }, m.prototype._readdirError = function(e3, t14) {
          switch (t14.code) {
            case "ENOTSUP":
            case "ENOTDIR":
              var n3 = this._makeAbs(e3);
              if (this.cache[n3] = "FILE", n3 === this.cwdAbs) {
                var r2 = new Error(t14.code + " invalid cwd " + this.cwd);
                throw r2.path = this.cwd, r2.code = t14.code, r2;
              }
              break;
            case "ENOENT":
            case "ELOOP":
            case "ENAMETOOLONG":
            case "UNKNOWN":
              this.cache[this._makeAbs(e3)] = !1;
              break;
            default:
              if (this.cache[this._makeAbs(e3)] = !1, this.strict) throw t14;
              this.silent || console.error("glob error", t14);
          }
        }, m.prototype._processGlobStar = function(e3, t14, n3, r2, o2, i2) {
          var s2 = this._readdir(n3, i2);
          if (s2) {
            var a2 = r2.slice(1), c2 = e3 ? [e3] : [], u2 = c2.concat(a2);
            this._process(u2, o2, !1);
            var l2 = s2.length;
            if (!this.symlinks[n3] || !i2) {
              for (var f2 = 0; f2 < l2; f2++) if (s2[f2].charAt(0) !== "." || this.dot) {
                var p2 = c2.concat(s2[f2], a2);
                this._process(p2, o2, !0);
                var h2 = c2.concat(s2[f2], r2);
                this._process(h2, o2, !0);
              }
            }
          }
        }, m.prototype._processSimple = function(e3, t14) {
          var n3 = this._stat(e3);
          if (this.matches[t14] || (this.matches[t14] = /* @__PURE__ */ Object.create(null)), n3) {
            if (e3 && c(e3) && !this.nomount) {
              var r2 = /[\/\\]$/.test(e3);
              e3.charAt(0) === "/" ? e3 = s.join(this.root, e3) : (e3 = s.resolve(this.root, e3), r2 && (e3 += "/"));
            }
            process.platform === "win32" && (e3 = e3.replace(/\\/g, "/")), this._emitMatch(t14, e3);
          }
        }, m.prototype._stat = function(e3) {
          var t14 = this._makeAbs(e3), n3 = e3.slice(-1) === "/";
          if (e3.length > this.maxLength) return !1;
          if (!this.stat && f(this.cache, t14)) {
            var o2 = this.cache[t14];
            if (Array.isArray(o2) && (o2 = "DIR"), !n3 || o2 === "DIR") return o2;
            if (n3 && o2 === "FILE") return !1;
          }
          var i2 = this.statCache[t14];
          if (!i2) {
            var s2;
            try {
              s2 = r.lstatSync(t14);
            } catch (e4) {
              if (e4 && (e4.code === "ENOENT" || e4.code === "ENOTDIR")) return this.statCache[t14] = !1, !1;
            }
            if (s2 && s2.isSymbolicLink()) try {
              i2 = r.statSync(t14);
            } catch {
              i2 = s2;
            }
            else i2 = s2;
          }
          return this.statCache[t14] = i2, o2 = !0, i2 && (o2 = i2.isDirectory() ? "DIR" : "FILE"), this.cache[t14] = this.cache[t14] || o2, (!n3 || o2 !== "FILE") && o2;
        }, m.prototype._mark = function(e3) {
          return u.mark(this, e3);
        }, m.prototype._makeAbs = function(e3) {
          return u.makeAbs(this, e3);
        };
      }, 363: (e2, t13, n2) => {
        var r = n2(2680), o = /* @__PURE__ */ Object.create(null), i = n2(4640);
        e2.exports = r((function(e3, t14) {
          return o[e3] ? (o[e3].push(t14), null) : (o[e3] = [t14], (function(e4) {
            return i((function t15() {
              var n3 = o[e4], r2 = n3.length, i2 = (function(e5) {
                for (var t16 = e5.length, n4 = [], r3 = 0; r3 < t16; r3++) n4[r3] = e5[r3];
                return n4;
              })(arguments);
              try {
                for (var s = 0; s < r2; s++) n3[s].apply(null, i2);
              } finally {
                n3.length > r2 ? (n3.splice(0, r2), process.nextTick((function() {
                  t15.apply(null, i2);
                }))) : delete o[e4];
              }
            }));
          })(e3));
        }));
      }, 3352: (e2, t13, n2) => {
        try {
          var r = n2(970);
          if (typeof r.inherits != "function") throw "";
          e2.exports = r.inherits;
        } catch {
          e2.exports = n2(8248);
        }
      }, 8248: (e2) => {
        typeof Object.create == "function" ? e2.exports = function(e3, t13) {
          e3.super_ = t13, e3.prototype = Object.create(t13.prototype, { constructor: { value: e3, enumerable: !1, writable: !0, configurable: !0 } });
        } : e2.exports = function(e3, t13) {
          e3.super_ = t13;
          var n2 = function() {
          };
          n2.prototype = t13.prototype, e3.prototype = new n2(), e3.prototype.constructor = e3;
        };
      }, 1392: (e2) => {
        "use strict";
        var t13 = e2.exports = function(e3) {
          return e3 !== null && typeof e3 == "object" && typeof e3.pipe == "function";
        };
        t13.writable = function(e3) {
          return t13(e3) && e3.writable !== !1 && typeof e3._write == "function" && typeof e3._writableState == "object";
        }, t13.readable = function(e3) {
          return t13(e3) && e3.readable !== !1 && typeof e3._read == "function" && typeof e3._readableState == "object";
        }, t13.duplex = function(e3) {
          return t13.writable(e3) && t13.readable(e3);
        }, t13.transform = function(e3) {
          return t13.duplex(e3) && typeof e3._transform == "function" && typeof e3._transformState == "object";
        };
      }, 9268: (e2, t13, n2) => {
        var r;
        function o(e3, t14, n3) {
          if (typeof t14 == "function" && (n3 = t14, t14 = {}), !n3) {
            if (typeof Promise != "function") throw new TypeError("callback not provided");
            return new Promise((function(n4, r2) {
              o(e3, t14 || {}, (function(e4, t15) {
                e4 ? r2(e4) : n4(t15);
              }));
            }));
          }
          r(e3, t14 || {}, (function(e4, r2) {
            e4 && (e4.code === "EACCES" || t14 && t14.ignoreErrors) && (e4 = null, r2 = !1), n3(e4, r2);
          }));
        }
        n2(2058), r = process.platform === "win32" || global.TESTING_WINDOWS ? n2(8340) : n2(8692), e2.exports = o, o.sync = function(e3, t14) {
          try {
            return r.sync(e3, t14 || {});
          } catch (e4) {
            if (t14 && t14.ignoreErrors || e4.code === "EACCES") return !1;
            throw e4;
          }
        };
      }, 8692: (e2, t13, n2) => {
        e2.exports = o, o.sync = function(e3, t14) {
          return i(r.statSync(e3), t14);
        };
        var r = n2(2058);
        function o(e3, t14, n3) {
          r.stat(e3, (function(e4, r2) {
            n3(e4, !e4 && i(r2, t14));
          }));
        }
        function i(e3, t14) {
          return e3.isFile() && (function(e4, t15) {
            var n3 = e4.mode, r2 = e4.uid, o2 = e4.gid, i2 = t15.uid !== void 0 ? t15.uid : process.getuid && process.getuid(), s = t15.gid !== void 0 ? t15.gid : process.getgid && process.getgid(), a = parseInt("100", 8), c = parseInt("010", 8);
            return n3 & parseInt("001", 8) || n3 & c && o2 === s || n3 & a && r2 === i2 || n3 & (a | c) && i2 === 0;
          })(e3, t14);
        }
      }, 8340: (e2, t13, n2) => {
        e2.exports = i, i.sync = function(e3, t14) {
          return o(r.statSync(e3), e3, t14);
        };
        var r = n2(2058);
        function o(e3, t14, n3) {
          return !(!e3.isSymbolicLink() && !e3.isFile()) && (function(e4, t15) {
            var n4 = t15.pathExt !== void 0 ? t15.pathExt : process.env.PATHEXT;
            if (!n4 || (n4 = n4.split(";")).indexOf("") !== -1) return !0;
            for (var r2 = 0; r2 < n4.length; r2++) {
              var o2 = n4[r2].toLowerCase();
              if (o2 && e4.substr(-o2.length).toLowerCase() === o2) return !0;
            }
            return !1;
          })(t14, n3);
        }
        function i(e3, t14, n3) {
          r.stat(e3, (function(r2, i2) {
            n3(r2, !r2 && o(i2, e3, t14));
          }));
        }
      }, 2941: (e2, t13, n2) => {
        "use strict";
        let r = n2(8558), o = /* @__PURE__ */ new Map([[18, "Mojave"], [17, "High Sierra"], [16, "Sierra"], [15, "El Capitan"], [14, "Yosemite"], [13, "Mavericks"], [12, "Mountain Lion"], [11, "Lion"], [10, "Snow Leopard"], [9, "Leopard"], [8, "Tiger"], [7, "Panther"], [6, "Jaguar"], [5, "Puma"]]), i = (e3) => (e3 = Number((e3 || r.release()).split(".")[0]), { name: o.get(e3), version: "10." + (e3 - 4) });
        e2.exports = i, e2.exports.default = i;
      }, 836: (e2, t13, n2) => {
        e2.exports = p, p.Minimatch = h;
        var r = { sep: "/" };
        try {
          r = n2(7072);
        } catch {
        }
        var o = p.GLOBSTAR = h.GLOBSTAR = {}, i = n2(1620), s = { "!": { open: "(?:(?!(?:", close: "))[^/]*?)" }, "?": { open: "(?:", close: ")?" }, "+": { open: "(?:", close: ")+" }, "*": { open: "(?:", close: ")*" }, "@": { open: "(?:", close: ")" } }, a = "[^/]", c = a + "*?", u = "().*{}+?[]^$\\!".split("").reduce((function(e3, t14) {
          return e3[t14] = !0, e3;
        }), {}), l = /\/+/;
        function f(e3, t14) {
          e3 = e3 || {}, t14 = t14 || {};
          var n3 = {};
          return Object.keys(t14).forEach((function(e4) {
            n3[e4] = t14[e4];
          })), Object.keys(e3).forEach((function(t15) {
            n3[t15] = e3[t15];
          })), n3;
        }
        function p(e3, t14, n3) {
          if (typeof t14 != "string") throw new TypeError("glob pattern string required");
          return n3 || (n3 = {}), !(!n3.nocomment && t14.charAt(0) === "#") && (t14.trim() === "" ? e3 === "" : new h(t14, n3).match(e3));
        }
        function h(e3, t14) {
          if (!(this instanceof h)) return new h(e3, t14);
          if (typeof e3 != "string") throw new TypeError("glob pattern string required");
          t14 || (t14 = {}), e3 = e3.trim(), r.sep !== "/" && (e3 = e3.split(r.sep).join("/")), this.options = t14, this.set = [], this.pattern = e3, this.regexp = null, this.negate = !1, this.comment = !1, this.empty = !1, this.make();
        }
        function d(e3, t14) {
          if (t14 || (t14 = this instanceof h ? this.options : {}), (e3 = e3 === void 0 ? this.pattern : e3) === void 0) throw new TypeError("undefined pattern");
          return t14.nobrace || !e3.match(/\{.*\}/) ? [e3] : i(e3);
        }
        p.filter = function(e3, t14) {
          return t14 = t14 || {}, function(n3, r2, o2) {
            return p(n3, e3, t14);
          };
        }, p.defaults = function(e3) {
          if (!e3 || !Object.keys(e3).length) return p;
          var t14 = p, n3 = function(n4, r2, o2) {
            return t14.minimatch(n4, r2, f(e3, o2));
          };
          return n3.Minimatch = function(n4, r2) {
            return new t14.Minimatch(n4, f(e3, r2));
          }, n3;
        }, h.defaults = function(e3) {
          return e3 && Object.keys(e3).length ? p.defaults(e3).Minimatch : h;
        }, h.prototype.debug = function() {
        }, h.prototype.make = function() {
          if (!this._made) {
            var e3 = this.pattern, t14 = this.options;
            if (t14.nocomment || e3.charAt(0) !== "#") if (e3) {
              this.parseNegate();
              var n3 = this.globSet = this.braceExpand();
              t14.debug && (this.debug = console.error), this.debug(this.pattern, n3), n3 = this.globParts = n3.map((function(e4) {
                return e4.split(l);
              })), this.debug(this.pattern, n3), n3 = n3.map((function(e4, t15, n4) {
                return e4.map(this.parse, this);
              }), this), this.debug(this.pattern, n3), n3 = n3.filter((function(e4) {
                return e4.indexOf(!1) === -1;
              })), this.debug(this.pattern, n3), this.set = n3;
            } else this.empty = !0;
            else this.comment = !0;
          }
        }, h.prototype.parseNegate = function() {
          var e3 = this.pattern, t14 = !1, n3 = 0;
          if (!this.options.nonegate) {
            for (var r2 = 0, o2 = e3.length; r2 < o2 && e3.charAt(r2) === "!"; r2++) t14 = !t14, n3++;
            n3 && (this.pattern = e3.substr(n3)), this.negate = t14;
          }
        }, p.braceExpand = function(e3, t14) {
          return d(e3, t14);
        }, h.prototype.braceExpand = d, h.prototype.parse = function(e3, t14) {
          if (e3.length > 65536) throw new TypeError("pattern is too long");
          var n3 = this.options;
          if (!n3.noglobstar && e3 === "**") return o;
          if (e3 === "") return "";
          var r2, i2 = "", l2 = !!n3.nocase, f2 = !1, p2 = [], h2 = [], d2 = !1, g = -1, v = -1, y = e3.charAt(0) === "." ? "" : n3.dot ? "(?!(?:^|\\/)\\.{1,2}(?:$|\\/))" : "(?!\\.)", b = this;
          function w() {
            if (r2) {
              switch (r2) {
                case "*":
                  i2 += c, l2 = !0;
                  break;
                case "?":
                  i2 += a, l2 = !0;
                  break;
                default:
                  i2 += "\\" + r2;
              }
              b.debug("clearStateChar %j %j", r2, i2), r2 = !1;
            }
          }
          for (var x, S = 0, P = e3.length; S < P && (x = e3.charAt(S)); S++) if (this.debug("%s	%s %s %j", e3, S, i2, x), f2 && u[x]) i2 += "\\" + x, f2 = !1;
          else switch (x) {
            case "/":
              return !1;
            case "\\":
              w(), f2 = !0;
              continue;
            case "?":
            case "*":
            case "+":
            case "@":
            case "!":
              if (this.debug("%s	%s %s %j <-- stateChar", e3, S, i2, x), d2) {
                this.debug("  in class"), x === "!" && S === v + 1 && (x = "^"), i2 += x;
                continue;
              }
              b.debug("call clearStateChar %j", r2), w(), r2 = x, n3.noext && w();
              continue;
            case "(":
              if (d2) {
                i2 += "(";
                continue;
              }
              if (!r2) {
                i2 += "\\(";
                continue;
              }
              p2.push({ type: r2, start: S - 1, reStart: i2.length, open: s[r2].open, close: s[r2].close }), i2 += r2 === "!" ? "(?:(?!(?:" : "(?:", this.debug("plType %j %j", r2, i2), r2 = !1;
              continue;
            case ")":
              if (d2 || !p2.length) {
                i2 += "\\)";
                continue;
              }
              w(), l2 = !0;
              var I = p2.pop();
              i2 += I.close, I.type === "!" && h2.push(I), I.reEnd = i2.length;
              continue;
            case "|":
              if (d2 || !p2.length || f2) {
                i2 += "\\|", f2 = !1;
                continue;
              }
              w(), i2 += "|";
              continue;
            case "[":
              if (w(), d2) {
                i2 += "\\" + x;
                continue;
              }
              d2 = !0, v = S, g = i2.length, i2 += x;
              continue;
            case "]":
              if (S === v + 1 || !d2) {
                i2 += "\\" + x, f2 = !1;
                continue;
              }
              if (d2) {
                var O = e3.substring(v + 1, S);
                try {
                  RegExp("[" + O + "]");
                } catch {
                  var E = this.parse(O, m);
                  i2 = i2.substr(0, g) + "\\[" + E[0] + "\\]", l2 = l2 || E[1], d2 = !1;
                  continue;
                }
              }
              l2 = !0, d2 = !1, i2 += x;
              continue;
            default:
              w(), f2 ? f2 = !1 : !u[x] || x === "^" && d2 || (i2 += "\\"), i2 += x;
          }
          for (d2 && (O = e3.substr(v + 1), E = this.parse(O, m), i2 = i2.substr(0, g) + "\\[" + E[0], l2 = l2 || E[1]), I = p2.pop(); I; I = p2.pop()) {
            var j = i2.slice(I.reStart + I.open.length);
            this.debug("setting tail", i2, I), j = j.replace(/((?:\\{2}){0,64})(\\?)\|/g, (function(e4, t15, n4) {
              return n4 || (n4 = "\\"), t15 + t15 + n4 + "|";
            })), this.debug(`tail=%j
   %s`, j, j, I, i2);
            var _ = I.type === "*" ? c : I.type === "?" ? a : "\\" + I.type;
            l2 = !0, i2 = i2.slice(0, I.reStart) + _ + "\\(" + j;
          }
          w(), f2 && (i2 += "\\\\");
          var A = !1;
          switch (i2.charAt(0)) {
            case ".":
            case "[":
            case "(":
              A = !0;
          }
          for (var k = h2.length - 1; k > -1; k--) {
            var F = h2[k], N = i2.slice(0, F.reStart), C = i2.slice(F.reStart, F.reEnd - 8), M = i2.slice(F.reEnd - 8, F.reEnd), V = i2.slice(F.reEnd);
            M += V;
            var D = N.split("(").length - 1, $ = V;
            for (S = 0; S < D; S++) $ = $.replace(/\)[+*?]?/, "");
            var L = "";
            (V = $) === "" && t14 !== m && (L = "$"), i2 = N + C + V + L + M;
          }
          if (i2 !== "" && l2 && (i2 = "(?=.)" + i2), A && (i2 = y + i2), t14 === m) return [i2, l2];
          if (!l2) return e3.replace(/\\(.)/g, "$1");
          var T = n3.nocase ? "i" : "";
          try {
            var B = new RegExp("^" + i2 + "$", T);
          } catch {
            return new RegExp("$.");
          }
          return B._glob = e3, B._src = i2, B;
        };
        var m = {};
        p.makeRe = function(e3, t14) {
          return new h(e3, t14 || {}).makeRe();
        }, h.prototype.makeRe = function() {
          if (this.regexp || this.regexp === !1) return this.regexp;
          var e3 = this.set;
          if (!e3.length) return this.regexp = !1, this.regexp;
          var t14 = this.options, n3 = t14.noglobstar ? c : t14.dot ? "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?" : "(?:(?!(?:\\/|^)\\.).)*?", r2 = t14.nocase ? "i" : "", i2 = e3.map((function(e4) {
            return e4.map((function(e5) {
              return e5 === o ? n3 : typeof e5 == "string" ? e5.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") : e5._src;
            })).join("\\/");
          })).join("|");
          i2 = "^(?:" + i2 + ")$", this.negate && (i2 = "^(?!" + i2 + ").*$");
          try {
            this.regexp = new RegExp(i2, r2);
          } catch {
            this.regexp = !1;
          }
          return this.regexp;
        }, p.match = function(e3, t14, n3) {
          var r2 = new h(t14, n3 = n3 || {});
          return e3 = e3.filter((function(e4) {
            return r2.match(e4);
          })), r2.options.nonull && !e3.length && e3.push(t14), e3;
        }, h.prototype.match = function(e3, t14) {
          if (this.debug("match", e3, this.pattern), this.comment) return !1;
          if (this.empty) return e3 === "";
          if (e3 === "/" && t14) return !0;
          var n3 = this.options;
          r.sep !== "/" && (e3 = e3.split(r.sep).join("/")), e3 = e3.split(l), this.debug(this.pattern, "split", e3);
          var o2, i2, s2 = this.set;
          for (this.debug(this.pattern, "set", s2), i2 = e3.length - 1; i2 >= 0 && !(o2 = e3[i2]); i2--) ;
          for (i2 = 0; i2 < s2.length; i2++) {
            var a2 = s2[i2], c2 = e3;
            if (n3.matchBase && a2.length === 1 && (c2 = [o2]), this.matchOne(c2, a2, t14)) return !!n3.flipNegate || !this.negate;
          }
          return !n3.flipNegate && this.negate;
        }, h.prototype.matchOne = function(e3, t14, n3) {
          var r2 = this.options;
          this.debug("matchOne", { this: this, file: e3, pattern: t14 }), this.debug("matchOne", e3.length, t14.length);
          for (var i2 = 0, s2 = 0, a2 = e3.length, c2 = t14.length; i2 < a2 && s2 < c2; i2++, s2++) {
            this.debug("matchOne loop");
            var u2, l2 = t14[s2], f2 = e3[i2];
            if (this.debug(t14, l2, f2), l2 === !1) return !1;
            if (l2 === o) {
              this.debug("GLOBSTAR", [t14, l2, f2]);
              var p2 = i2, h2 = s2 + 1;
              if (h2 === c2) {
                for (this.debug("** at the end"); i2 < a2; i2++) if (e3[i2] === "." || e3[i2] === ".." || !r2.dot && e3[i2].charAt(0) === ".") return !1;
                return !0;
              }
              for (; p2 < a2; ) {
                var d2 = e3[p2];
                if (this.debug(`
globstar while`, e3, p2, t14, h2, d2), this.matchOne(e3.slice(p2), t14.slice(h2), n3)) return this.debug("globstar found match!", p2, a2, d2), !0;
                if (d2 === "." || d2 === ".." || !r2.dot && d2.charAt(0) === ".") {
                  this.debug("dot detected!", e3, p2, t14, h2);
                  break;
                }
                this.debug("globstar swallow a segment, and continue"), p2++;
              }
              return !(!n3 || (this.debug(`
>>> no match, partial?`, e3, p2, t14, h2), p2 !== a2));
            }
            if (typeof l2 == "string" ? (u2 = r2.nocase ? f2.toLowerCase() === l2.toLowerCase() : f2 === l2, this.debug("string match", l2, f2, u2)) : (u2 = f2.match(l2), this.debug("pattern match", l2, f2, u2)), !u2) return !1;
          }
          if (i2 === a2 && s2 === c2) return !0;
          if (i2 === a2) return n3;
          if (s2 === c2) return i2 === a2 - 1 && e3[i2] === "";
          throw new Error("wtf?");
        };
      }, 9480: (e2) => {
        "use strict";
        e2.exports = function(e3) {
          try {
            return e3();
          } catch {
          }
        };
      }, 9584: (e2, t13, n2) => {
        "use strict";
        let r = n2(7072), o = n2(3032);
        e2.exports = (e3) => {
          let t14;
          e3 = Object.assign({ cwd: process.cwd(), path: process.env[o()] }, e3);
          let n3 = r.resolve(e3.cwd), i = [];
          for (; t14 !== n3; ) i.push(r.join(n3, "node_modules/.bin")), t14 = n3, n3 = r.resolve(n3, "..");
          return i.push(r.dirname(process.execPath)), i.concat(e3.path).join(r.delimiter);
        }, e2.exports.env = (t14) => {
          t14 = Object.assign({ env: process.env }, t14);
          let n3 = Object.assign({}, t14.env), r2 = o({ env: n3 });
          return t14.path = n3[r2], n3[r2] = e2.exports(t14), n3;
        };
      }, 4640: (e2, t13, n2) => {
        var r = n2(2680);
        function o(e3) {
          var t14 = function() {
            return t14.called ? t14.value : (t14.called = !0, t14.value = e3.apply(this, arguments));
          };
          return t14.called = !1, t14;
        }
        function i(e3) {
          var t14 = function() {
            if (t14.called) throw new Error(t14.onceError);
            return t14.called = !0, t14.value = e3.apply(this, arguments);
          }, n3 = e3.name || "Function wrapped with `once`";
          return t14.onceError = n3 + " shouldn't be called more than once", t14.called = !1, t14;
        }
        e2.exports = r(o), e2.exports.strict = r(i), o.proto = o((function() {
          Object.defineProperty(Function.prototype, "once", { value: function() {
            return o(this);
          }, configurable: !0 }), Object.defineProperty(Function.prototype, "onceStrict", { value: function() {
            return i(this);
          }, configurable: !0 });
        }));
      }, 2288: (e2, t13, n2) => {
        "use strict";
        let r = n2(8558), o = n2(2941), i = n2(6468);
        e2.exports = (e3, t14) => {
          if (!e3 && t14) throw new Error("You can't specify a `release` without specifying `platform`");
          let n3;
          if ((e3 = e3 || r.platform()) === "darwin") {
            t14 || r.platform() !== "darwin" || (t14 = r.release());
            let e4 = t14 ? Number(t14.split(".")[0]) > 15 ? "macOS" : "OS X" : "macOS";
            return n3 = t14 ? o(t14).name : "", e4 + (n3 ? " " + n3 : "");
          }
          return e3 === "linux" ? (t14 || r.platform() !== "linux" || (t14 = r.release()), n3 = t14 ? t14.replace(/^(\d+\.\d+).*/, "$1") : "", "Linux" + (n3 ? " " + n3 : "")) : e3 === "win32" ? (t14 || r.platform() !== "win32" || (t14 = r.release()), n3 = t14 ? i(t14) : "", "Windows" + (n3 ? " " + n3 : "")) : e3;
        };
      }, 1548: (e2) => {
        "use strict";
        e2.exports = (e3, t13) => (t13 = t13 || (() => {
        }), e3.then(((e4) => new Promise(((e5) => {
          e5(t13());
        })).then((() => e4))), ((e4) => new Promise(((e5) => {
          e5(t13());
        })).then((() => {
          throw e4;
        })))));
      }, 4832: (e2) => {
        "use strict";
        function t13(e3) {
          return e3.charAt(0) === "/";
        }
        function n2(e3) {
          var t14 = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(e3), n3 = t14[1] || "", r = !!(n3 && n3.charAt(1) !== ":");
          return !!(t14[2] || r);
        }
        e2.exports = process.platform === "win32" ? n2 : t13, e2.exports.posix = t13, e2.exports.win32 = n2;
      }, 3032: (e2) => {
        "use strict";
        e2.exports = (e3) => {
          let t13 = (e3 = e3 || {}).env || process.env;
          return (e3.platform || process.platform) !== "win32" ? "PATH" : Object.keys(t13).find(((e4) => e4.toUpperCase() === "PATH")) || "Path";
        };
      }, 8984: (e2, t13, n2) => {
        var r = n2(4640), o = n2(9988), i = n2(2058), s = function() {
        }, a = /^v?\.0/.test(process.version), c = function(e3) {
          return typeof e3 == "function";
        }, u = function(e3) {
          e3();
        }, l = function(e3, t14) {
          return e3.pipe(t14);
        };
        e2.exports = function() {
          var e3, t14 = Array.prototype.slice.call(arguments), n3 = c(t14[t14.length - 1] || s) && t14.pop() || s;
          if (Array.isArray(t14[0]) && (t14 = t14[0]), t14.length < 2) throw new Error("pump requires two streams per minimum");
          var f = t14.map((function(l2, p) {
            var h = p < t14.length - 1;
            return (function(e4, t15, n4, u2) {
              u2 = r(u2);
              var l3 = !1;
              e4.on("close", (function() {
                l3 = !0;
              })), o(e4, { readable: t15, writable: n4 }, (function(e5) {
                if (e5) return u2(e5);
                l3 = !0, u2();
              }));
              var f2 = !1;
              return function(t16) {
                if (!l3 && !f2) return f2 = !0, (function(e5) {
                  return !!a && !!i && (e5 instanceof (i.ReadStream || s) || e5 instanceof (i.WriteStream || s)) && c(e5.close);
                })(e4) ? e4.close(s) : (function(e5) {
                  return e5.setHeader && c(e5.abort);
                })(e4) ? e4.abort() : c(e4.destroy) ? e4.destroy() : void u2(t16 || new Error("stream was destroyed"));
              };
            })(l2, h, p > 0, (function(t15) {
              e3 || (e3 = t15), t15 && f.forEach(u), h || (f.forEach(u), n3(e3));
            }));
          }));
          return t14.reduce(l);
        };
      }, 1716: (e2, t13) => {
        var n2;
        t13 = e2.exports = q, n2 = typeof process == "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? function() {
          var e3 = Array.prototype.slice.call(arguments, 0);
          e3.unshift("SEMVER"), console.log.apply(console, e3);
        } : function() {
        }, t13.SEMVER_SPEC_VERSION = "2.0.0";
        var r = 256, o = Number.MAX_SAFE_INTEGER || 9007199254740991, i = t13.re = [], s = t13.src = [], a = 0, c = a++;
        s[c] = "0|[1-9]\\d*";
        var u = a++;
        s[u] = "[0-9]+";
        var l = a++;
        s[l] = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
        var f = a++;
        s[f] = "(" + s[c] + ")\\.(" + s[c] + ")\\.(" + s[c] + ")";
        var p = a++;
        s[p] = "(" + s[u] + ")\\.(" + s[u] + ")\\.(" + s[u] + ")";
        var h = a++;
        s[h] = "(?:" + s[c] + "|" + s[l] + ")";
        var d = a++;
        s[d] = "(?:" + s[u] + "|" + s[l] + ")";
        var m = a++;
        s[m] = "(?:-(" + s[h] + "(?:\\." + s[h] + ")*))";
        var g = a++;
        s[g] = "(?:-?(" + s[d] + "(?:\\." + s[d] + ")*))";
        var v = a++;
        s[v] = "[0-9A-Za-z-]+";
        var y = a++;
        s[y] = "(?:\\+(" + s[v] + "(?:\\." + s[v] + ")*))";
        var b = a++, w = "v?" + s[f] + s[m] + "?" + s[y] + "?";
        s[b] = "^" + w + "$";
        var x = "[v=\\s]*" + s[p] + s[g] + "?" + s[y] + "?", S = a++;
        s[S] = "^" + x + "$";
        var P = a++;
        s[P] = "((?:<|>)?=?)";
        var I = a++;
        s[I] = s[u] + "|x|X|\\*";
        var O = a++;
        s[O] = s[c] + "|x|X|\\*";
        var E = a++;
        s[E] = "[v=\\s]*(" + s[O] + ")(?:\\.(" + s[O] + ")(?:\\.(" + s[O] + ")(?:" + s[m] + ")?" + s[y] + "?)?)?";
        var j = a++;
        s[j] = "[v=\\s]*(" + s[I] + ")(?:\\.(" + s[I] + ")(?:\\.(" + s[I] + ")(?:" + s[g] + ")?" + s[y] + "?)?)?";
        var _ = a++;
        s[_] = "^" + s[P] + "\\s*" + s[E] + "$";
        var A = a++;
        s[A] = "^" + s[P] + "\\s*" + s[j] + "$";
        var k = a++;
        s[k] = "(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";
        var F = a++;
        s[F] = "(?:~>?)";
        var N = a++;
        s[N] = "(\\s*)" + s[F] + "\\s+", i[N] = new RegExp(s[N], "g");
        var C = a++;
        s[C] = "^" + s[F] + s[E] + "$";
        var M = a++;
        s[M] = "^" + s[F] + s[j] + "$";
        var V = a++;
        s[V] = "(?:\\^)";
        var D = a++;
        s[D] = "(\\s*)" + s[V] + "\\s+", i[D] = new RegExp(s[D], "g");
        var $ = a++;
        s[$] = "^" + s[V] + s[E] + "$";
        var L = a++;
        s[L] = "^" + s[V] + s[j] + "$";
        var T = a++;
        s[T] = "^" + s[P] + "\\s*(" + x + ")$|^$";
        var B = a++;
        s[B] = "^" + s[P] + "\\s*(" + w + ")$|^$";
        var R = a++;
        s[R] = "(\\s*)" + s[P] + "\\s*(" + x + "|" + s[E] + ")", i[R] = new RegExp(s[R], "g");
        var G = a++;
        s[G] = "^\\s*(" + s[E] + ")\\s+-\\s+(" + s[E] + ")\\s*$";
        var W = a++;
        s[W] = "^\\s*(" + s[j] + ")\\s+-\\s+(" + s[j] + ")\\s*$";
        var z = a++;
        s[z] = "(<|>)?=?\\s*\\*";
        for (var U = 0; U < 35; U++) n2(U, s[U]), i[U] || (i[U] = new RegExp(s[U]));
        function K(e3, t14) {
          if (t14 && typeof t14 == "object" || (t14 = { loose: !!t14, includePrerelease: !1 }), e3 instanceof q) return e3;
          if (typeof e3 != "string" || e3.length > r || !(t14.loose ? i[S] : i[b]).test(e3)) return null;
          try {
            return new q(e3, t14);
          } catch {
            return null;
          }
        }
        function q(e3, t14) {
          if (t14 && typeof t14 == "object" || (t14 = { loose: !!t14, includePrerelease: !1 }), e3 instanceof q) {
            if (e3.loose === t14.loose) return e3;
            e3 = e3.version;
          } else if (typeof e3 != "string") throw new TypeError("Invalid Version: " + e3);
          if (e3.length > r) throw new TypeError("version is longer than " + r + " characters");
          if (!(this instanceof q)) return new q(e3, t14);
          n2("SemVer", e3, t14), this.options = t14, this.loose = !!t14.loose;
          var s2 = e3.trim().match(t14.loose ? i[S] : i[b]);
          if (!s2) throw new TypeError("Invalid Version: " + e3);
          if (this.raw = e3, this.major = +s2[1], this.minor = +s2[2], this.patch = +s2[3], this.major > o || this.major < 0) throw new TypeError("Invalid major version");
          if (this.minor > o || this.minor < 0) throw new TypeError("Invalid minor version");
          if (this.patch > o || this.patch < 0) throw new TypeError("Invalid patch version");
          s2[4] ? this.prerelease = s2[4].split(".").map((function(e4) {
            if (/^[0-9]+$/.test(e4)) {
              var t15 = +e4;
              if (t15 >= 0 && t15 < o) return t15;
            }
            return e4;
          })) : this.prerelease = [], this.build = s2[5] ? s2[5].split(".") : [], this.format();
        }
        t13.parse = K, t13.valid = function(e3, t14) {
          var n3 = K(e3, t14);
          return n3 ? n3.version : null;
        }, t13.clean = function(e3, t14) {
          var n3 = K(e3.trim().replace(/^[=v]+/, ""), t14);
          return n3 ? n3.version : null;
        }, t13.SemVer = q, q.prototype.format = function() {
          return this.version = this.major + "." + this.minor + "." + this.patch, this.prerelease.length && (this.version += "-" + this.prerelease.join(".")), this.version;
        }, q.prototype.toString = function() {
          return this.version;
        }, q.prototype.compare = function(e3) {
          return n2("SemVer.compare", this.version, this.options, e3), e3 instanceof q || (e3 = new q(e3, this.options)), this.compareMain(e3) || this.comparePre(e3);
        }, q.prototype.compareMain = function(e3) {
          return e3 instanceof q || (e3 = new q(e3, this.options)), H(this.major, e3.major) || H(this.minor, e3.minor) || H(this.patch, e3.patch);
        }, q.prototype.comparePre = function(e3) {
          if (e3 instanceof q || (e3 = new q(e3, this.options)), this.prerelease.length && !e3.prerelease.length) return -1;
          if (!this.prerelease.length && e3.prerelease.length) return 1;
          if (!this.prerelease.length && !e3.prerelease.length) return 0;
          var t14 = 0;
          do {
            var r2 = this.prerelease[t14], o2 = e3.prerelease[t14];
            if (n2("prerelease compare", t14, r2, o2), r2 === void 0 && o2 === void 0) return 0;
            if (o2 === void 0) return 1;
            if (r2 === void 0) return -1;
            if (r2 !== o2) return H(r2, o2);
          } while (++t14);
        }, q.prototype.inc = function(e3, t14) {
          switch (e3) {
            case "premajor":
              this.prerelease.length = 0, this.patch = 0, this.minor = 0, this.major++, this.inc("pre", t14);
              break;
            case "preminor":
              this.prerelease.length = 0, this.patch = 0, this.minor++, this.inc("pre", t14);
              break;
            case "prepatch":
              this.prerelease.length = 0, this.inc("patch", t14), this.inc("pre", t14);
              break;
            case "prerelease":
              this.prerelease.length === 0 && this.inc("patch", t14), this.inc("pre", t14);
              break;
            case "major":
              this.minor === 0 && this.patch === 0 && this.prerelease.length !== 0 || this.major++, this.minor = 0, this.patch = 0, this.prerelease = [];
              break;
            case "minor":
              this.patch === 0 && this.prerelease.length !== 0 || this.minor++, this.patch = 0, this.prerelease = [];
              break;
            case "patch":
              this.prerelease.length === 0 && this.patch++, this.prerelease = [];
              break;
            case "pre":
              if (this.prerelease.length === 0) this.prerelease = [0];
              else {
                for (var n3 = this.prerelease.length; --n3 >= 0; ) typeof this.prerelease[n3] == "number" && (this.prerelease[n3]++, n3 = -2);
                n3 === -1 && this.prerelease.push(0);
              }
              t14 && (this.prerelease[0] === t14 ? isNaN(this.prerelease[1]) && (this.prerelease = [t14, 0]) : this.prerelease = [t14, 0]);
              break;
            default:
              throw new Error("invalid increment argument: " + e3);
          }
          return this.format(), this.raw = this.version, this;
        }, t13.inc = function(e3, t14, n3, r2) {
          typeof n3 == "string" && (r2 = n3, n3 = void 0);
          try {
            return new q(e3, n3).inc(t14, r2).version;
          } catch {
            return null;
          }
        }, t13.diff = function(e3, t14) {
          if (Z(e3, t14)) return null;
          var n3 = K(e3), r2 = K(t14);
          if (n3.prerelease.length || r2.prerelease.length) {
            for (var o2 in n3) if ((o2 === "major" || o2 === "minor" || o2 === "patch") && n3[o2] !== r2[o2]) return "pre" + o2;
            return "prerelease";
          }
          for (var o2 in n3) if ((o2 === "major" || o2 === "minor" || o2 === "patch") && n3[o2] !== r2[o2]) return o2;
        }, t13.compareIdentifiers = H;
        var Y = /^[0-9]+$/;
        function H(e3, t14) {
          var n3 = Y.test(e3), r2 = Y.test(t14);
          return n3 && r2 && (e3 = +e3, t14 = +t14), n3 && !r2 ? -1 : r2 && !n3 ? 1 : e3 < t14 ? -1 : e3 > t14 ? 1 : 0;
        }
        function J(e3, t14, n3) {
          return new q(e3, n3).compare(new q(t14, n3));
        }
        function Q(e3, t14, n3) {
          return J(e3, t14, n3) > 0;
        }
        function X(e3, t14, n3) {
          return J(e3, t14, n3) < 0;
        }
        function Z(e3, t14, n3) {
          return J(e3, t14, n3) === 0;
        }
        function ee(e3, t14, n3) {
          return J(e3, t14, n3) !== 0;
        }
        function te(e3, t14, n3) {
          return J(e3, t14, n3) >= 0;
        }
        function ne(e3, t14, n3) {
          return J(e3, t14, n3) <= 0;
        }
        function re(e3, t14, n3, r2) {
          var o2;
          switch (t14) {
            case "===":
              typeof e3 == "object" && (e3 = e3.version), typeof n3 == "object" && (n3 = n3.version), o2 = e3 === n3;
              break;
            case "!==":
              typeof e3 == "object" && (e3 = e3.version), typeof n3 == "object" && (n3 = n3.version), o2 = e3 !== n3;
              break;
            case "":
            case "=":
            case "==":
              o2 = Z(e3, n3, r2);
              break;
            case "!=":
              o2 = ee(e3, n3, r2);
              break;
            case ">":
              o2 = Q(e3, n3, r2);
              break;
            case ">=":
              o2 = te(e3, n3, r2);
              break;
            case "<":
              o2 = X(e3, n3, r2);
              break;
            case "<=":
              o2 = ne(e3, n3, r2);
              break;
            default:
              throw new TypeError("Invalid operator: " + t14);
          }
          return o2;
        }
        function oe(e3, t14) {
          if (t14 && typeof t14 == "object" || (t14 = { loose: !!t14, includePrerelease: !1 }), e3 instanceof oe) {
            if (e3.loose === !!t14.loose) return e3;
            e3 = e3.value;
          }
          if (!(this instanceof oe)) return new oe(e3, t14);
          n2("comparator", e3, t14), this.options = t14, this.loose = !!t14.loose, this.parse(e3), this.semver === ie ? this.value = "" : this.value = this.operator + this.semver.version, n2("comp", this);
        }
        t13.rcompareIdentifiers = function(e3, t14) {
          return H(t14, e3);
        }, t13.major = function(e3, t14) {
          return new q(e3, t14).major;
        }, t13.minor = function(e3, t14) {
          return new q(e3, t14).minor;
        }, t13.patch = function(e3, t14) {
          return new q(e3, t14).patch;
        }, t13.compare = J, t13.compareLoose = function(e3, t14) {
          return J(e3, t14, !0);
        }, t13.rcompare = function(e3, t14, n3) {
          return J(t14, e3, n3);
        }, t13.sort = function(e3, n3) {
          return e3.sort((function(e4, r2) {
            return t13.compare(e4, r2, n3);
          }));
        }, t13.rsort = function(e3, n3) {
          return e3.sort((function(e4, r2) {
            return t13.rcompare(e4, r2, n3);
          }));
        }, t13.gt = Q, t13.lt = X, t13.eq = Z, t13.neq = ee, t13.gte = te, t13.lte = ne, t13.cmp = re, t13.Comparator = oe;
        var ie = {};
        function se(e3, t14) {
          if (t14 && typeof t14 == "object" || (t14 = { loose: !!t14, includePrerelease: !1 }), e3 instanceof se) return e3.loose === !!t14.loose && e3.includePrerelease === !!t14.includePrerelease ? e3 : new se(e3.raw, t14);
          if (e3 instanceof oe) return new se(e3.value, t14);
          if (!(this instanceof se)) return new se(e3, t14);
          if (this.options = t14, this.loose = !!t14.loose, this.includePrerelease = !!t14.includePrerelease, this.raw = e3, this.set = e3.split(/\s*\|\|\s*/).map((function(e4) {
            return this.parseRange(e4.trim());
          }), this).filter((function(e4) {
            return e4.length;
          })), !this.set.length) throw new TypeError("Invalid SemVer Range: " + e3);
          this.format();
        }
        function ae(e3) {
          return !e3 || e3.toLowerCase() === "x" || e3 === "*";
        }
        function ce(e3, t14, n3, r2, o2, i2, s2, a2, c2, u2, l2, f2, p2) {
          return ((t14 = ae(n3) ? "" : ae(r2) ? ">=" + n3 + ".0.0" : ae(o2) ? ">=" + n3 + "." + r2 + ".0" : ">=" + t14) + " " + (a2 = ae(c2) ? "" : ae(u2) ? "<" + (+c2 + 1) + ".0.0" : ae(l2) ? "<" + c2 + "." + (+u2 + 1) + ".0" : f2 ? "<=" + c2 + "." + u2 + "." + l2 + "-" + f2 : "<=" + a2)).trim();
        }
        function ue(e3, t14, r2) {
          for (var o2 = 0; o2 < e3.length; o2++) if (!e3[o2].test(t14)) return !1;
          if (r2 || (r2 = {}), t14.prerelease.length && !r2.includePrerelease) {
            for (o2 = 0; o2 < e3.length; o2++) if (n2(e3[o2].semver), e3[o2].semver !== ie && e3[o2].semver.prerelease.length > 0) {
              var i2 = e3[o2].semver;
              if (i2.major === t14.major && i2.minor === t14.minor && i2.patch === t14.patch) return !0;
            }
            return !1;
          }
          return !0;
        }
        function le(e3, t14, n3) {
          try {
            t14 = new se(t14, n3);
          } catch {
            return !1;
          }
          return t14.test(e3);
        }
        function fe(e3, t14, n3, r2) {
          var o2, i2, s2, a2, c2;
          switch (e3 = new q(e3, r2), t14 = new se(t14, r2), n3) {
            case ">":
              o2 = Q, i2 = ne, s2 = X, a2 = ">", c2 = ">=";
              break;
            case "<":
              o2 = X, i2 = te, s2 = Q, a2 = "<", c2 = "<=";
              break;
            default:
              throw new TypeError('Must provide a hilo val of "<" or ">"');
          }
          if (le(e3, t14, r2)) return !1;
          for (var u2 = 0; u2 < t14.set.length; ++u2) {
            var l2 = t14.set[u2], f2 = null, p2 = null;
            if (l2.forEach((function(e4) {
              e4.semver === ie && (e4 = new oe(">=0.0.0")), f2 = f2 || e4, p2 = p2 || e4, o2(e4.semver, f2.semver, r2) ? f2 = e4 : s2(e4.semver, p2.semver, r2) && (p2 = e4);
            })), f2.operator === a2 || f2.operator === c2 || (!p2.operator || p2.operator === a2) && i2(e3, p2.semver) || p2.operator === c2 && s2(e3, p2.semver)) return !1;
          }
          return !0;
        }
        oe.prototype.parse = function(e3) {
          var t14 = this.options.loose ? i[T] : i[B], n3 = e3.match(t14);
          if (!n3) throw new TypeError("Invalid comparator: " + e3);
          this.operator = n3[1], this.operator === "=" && (this.operator = ""), n3[2] ? this.semver = new q(n3[2], this.options.loose) : this.semver = ie;
        }, oe.prototype.toString = function() {
          return this.value;
        }, oe.prototype.test = function(e3) {
          return n2("Comparator.test", e3, this.options.loose), this.semver === ie || (typeof e3 == "string" && (e3 = new q(e3, this.options)), re(e3, this.operator, this.semver, this.options));
        }, oe.prototype.intersects = function(e3, t14) {
          if (!(e3 instanceof oe)) throw new TypeError("a Comparator is required");
          var n3;
          if (t14 && typeof t14 == "object" || (t14 = { loose: !!t14, includePrerelease: !1 }), this.operator === "") return n3 = new se(e3.value, t14), le(this.value, n3, t14);
          if (e3.operator === "") return n3 = new se(this.value, t14), le(e3.semver, n3, t14);
          var r2 = !(this.operator !== ">=" && this.operator !== ">" || e3.operator !== ">=" && e3.operator !== ">"), o2 = !(this.operator !== "<=" && this.operator !== "<" || e3.operator !== "<=" && e3.operator !== "<"), i2 = this.semver.version === e3.semver.version, s2 = !(this.operator !== ">=" && this.operator !== "<=" || e3.operator !== ">=" && e3.operator !== "<="), a2 = re(this.semver, "<", e3.semver, t14) && (this.operator === ">=" || this.operator === ">") && (e3.operator === "<=" || e3.operator === "<"), c2 = re(this.semver, ">", e3.semver, t14) && (this.operator === "<=" || this.operator === "<") && (e3.operator === ">=" || e3.operator === ">");
          return r2 || o2 || i2 && s2 || a2 || c2;
        }, t13.Range = se, se.prototype.format = function() {
          return this.range = this.set.map((function(e3) {
            return e3.join(" ").trim();
          })).join("||").trim(), this.range;
        }, se.prototype.toString = function() {
          return this.range;
        }, se.prototype.parseRange = function(e3) {
          var t14 = this.options.loose;
          e3 = e3.trim();
          var r2 = t14 ? i[W] : i[G];
          e3 = e3.replace(r2, ce), n2("hyphen replace", e3), e3 = e3.replace(i[R], "$1$2$3"), n2("comparator trim", e3, i[R]), e3 = (e3 = (e3 = e3.replace(i[N], "$1~")).replace(i[D], "$1^")).split(/\s+/).join(" ");
          var o2 = t14 ? i[T] : i[B], s2 = e3.split(" ").map((function(e4) {
            return (function(e5, t15) {
              return n2("comp", e5, t15), e5 = (function(e6, t16) {
                return e6.trim().split(/\s+/).map((function(e7) {
                  return (function(e8, t17) {
                    n2("caret", e8, t17), t17 && typeof t17 == "object" || (t17 = { loose: !!t17, includePrerelease: !1 });
                    var r3 = t17.loose ? i[L] : i[$];
                    return e8.replace(r3, (function(t18, r4, o3, i2, s3) {
                      var a2;
                      return n2("caret", e8, t18, r4, o3, i2, s3), ae(r4) ? a2 = "" : ae(o3) ? a2 = ">=" + r4 + ".0.0 <" + (+r4 + 1) + ".0.0" : ae(i2) ? a2 = r4 === "0" ? ">=" + r4 + "." + o3 + ".0 <" + r4 + "." + (+o3 + 1) + ".0" : ">=" + r4 + "." + o3 + ".0 <" + (+r4 + 1) + ".0.0" : s3 ? (n2("replaceCaret pr", s3), s3.charAt(0) !== "-" && (s3 = "-" + s3), a2 = r4 === "0" ? o3 === "0" ? ">=" + r4 + "." + o3 + "." + i2 + s3 + " <" + r4 + "." + o3 + "." + (+i2 + 1) : ">=" + r4 + "." + o3 + "." + i2 + s3 + " <" + r4 + "." + (+o3 + 1) + ".0" : ">=" + r4 + "." + o3 + "." + i2 + s3 + " <" + (+r4 + 1) + ".0.0") : (n2("no pr"), a2 = r4 === "0" ? o3 === "0" ? ">=" + r4 + "." + o3 + "." + i2 + " <" + r4 + "." + o3 + "." + (+i2 + 1) : ">=" + r4 + "." + o3 + "." + i2 + " <" + r4 + "." + (+o3 + 1) + ".0" : ">=" + r4 + "." + o3 + "." + i2 + " <" + (+r4 + 1) + ".0.0"), n2("caret return", a2), a2;
                    }));
                  })(e7, t16);
                })).join(" ");
              })(e5, t15), n2("caret", e5), e5 = (function(e6, t16) {
                return e6.trim().split(/\s+/).map((function(e7) {
                  return (function(e8, t17) {
                    t17 && typeof t17 == "object" || (t17 = { loose: !!t17, includePrerelease: !1 });
                    var r3 = t17.loose ? i[M] : i[C];
                    return e8.replace(r3, (function(t18, r4, o3, i2, s3) {
                      var a2;
                      return n2("tilde", e8, t18, r4, o3, i2, s3), ae(r4) ? a2 = "" : ae(o3) ? a2 = ">=" + r4 + ".0.0 <" + (+r4 + 1) + ".0.0" : ae(i2) ? a2 = ">=" + r4 + "." + o3 + ".0 <" + r4 + "." + (+o3 + 1) + ".0" : s3 ? (n2("replaceTilde pr", s3), s3.charAt(0) !== "-" && (s3 = "-" + s3), a2 = ">=" + r4 + "." + o3 + "." + i2 + s3 + " <" + r4 + "." + (+o3 + 1) + ".0") : a2 = ">=" + r4 + "." + o3 + "." + i2 + " <" + r4 + "." + (+o3 + 1) + ".0", n2("tilde return", a2), a2;
                    }));
                  })(e7, t16);
                })).join(" ");
              })(e5, t15), n2("tildes", e5), e5 = (function(e6, t16) {
                return n2("replaceXRanges", e6, t16), e6.split(/\s+/).map((function(e7) {
                  return (function(e8, t17) {
                    e8 = e8.trim(), t17 && typeof t17 == "object" || (t17 = { loose: !!t17, includePrerelease: !1 });
                    var r3 = t17.loose ? i[A] : i[_];
                    return e8.replace(r3, (function(t18, r4, o3, i2, s3, a2) {
                      n2("xRange", e8, t18, r4, o3, i2, s3, a2);
                      var c2 = ae(o3), u2 = c2 || ae(i2), l2 = u2 || ae(s3);
                      return r4 === "=" && l2 && (r4 = ""), c2 ? t18 = r4 === ">" || r4 === "<" ? "<0.0.0" : "*" : r4 && l2 ? (u2 && (i2 = 0), l2 && (s3 = 0), r4 === ">" ? (r4 = ">=", u2 ? (o3 = +o3 + 1, i2 = 0, s3 = 0) : l2 && (i2 = +i2 + 1, s3 = 0)) : r4 === "<=" && (r4 = "<", u2 ? o3 = +o3 + 1 : i2 = +i2 + 1), t18 = r4 + o3 + "." + i2 + "." + s3) : u2 ? t18 = ">=" + o3 + ".0.0 <" + (+o3 + 1) + ".0.0" : l2 && (t18 = ">=" + o3 + "." + i2 + ".0 <" + o3 + "." + (+i2 + 1) + ".0"), n2("xRange return", t18), t18;
                    }));
                  })(e7, t16);
                })).join(" ");
              })(e5, t15), n2("xrange", e5), e5 = (function(e6, t16) {
                return n2("replaceStars", e6, t16), e6.trim().replace(i[z], "");
              })(e5, t15), n2("stars", e5), e5;
            })(e4, this.options);
          }), this).join(" ").split(/\s+/);
          return this.options.loose && (s2 = s2.filter((function(e4) {
            return !!e4.match(o2);
          }))), s2.map((function(e4) {
            return new oe(e4, this.options);
          }), this);
        }, se.prototype.intersects = function(e3, t14) {
          if (!(e3 instanceof se)) throw new TypeError("a Range is required");
          return this.set.some((function(n3) {
            return n3.every((function(n4) {
              return e3.set.some((function(e4) {
                return e4.every((function(e5) {
                  return n4.intersects(e5, t14);
                }));
              }));
            }));
          }));
        }, t13.toComparators = function(e3, t14) {
          return new se(e3, t14).set.map((function(e4) {
            return e4.map((function(e5) {
              return e5.value;
            })).join(" ").trim().split(" ");
          }));
        }, se.prototype.test = function(e3) {
          if (!e3) return !1;
          typeof e3 == "string" && (e3 = new q(e3, this.options));
          for (var t14 = 0; t14 < this.set.length; t14++) if (ue(this.set[t14], e3, this.options)) return !0;
          return !1;
        }, t13.satisfies = le, t13.maxSatisfying = function(e3, t14, n3) {
          var r2 = null, o2 = null;
          try {
            var i2 = new se(t14, n3);
          } catch {
            return null;
          }
          return e3.forEach((function(e4) {
            i2.test(e4) && (r2 && o2.compare(e4) !== -1 || (o2 = new q(r2 = e4, n3)));
          })), r2;
        }, t13.minSatisfying = function(e3, t14, n3) {
          var r2 = null, o2 = null;
          try {
            var i2 = new se(t14, n3);
          } catch {
            return null;
          }
          return e3.forEach((function(e4) {
            i2.test(e4) && (r2 && o2.compare(e4) !== 1 || (o2 = new q(r2 = e4, n3)));
          })), r2;
        }, t13.validRange = function(e3, t14) {
          try {
            return new se(e3, t14).range || "*";
          } catch {
            return null;
          }
        }, t13.ltr = function(e3, t14, n3) {
          return fe(e3, t14, "<", n3);
        }, t13.gtr = function(e3, t14, n3) {
          return fe(e3, t14, ">", n3);
        }, t13.outside = fe, t13.prerelease = function(e3, t14) {
          var n3 = K(e3, t14);
          return n3 && n3.prerelease.length ? n3.prerelease : null;
        }, t13.intersects = function(e3, t14, n3) {
          return e3 = new se(e3, n3), t14 = new se(t14, n3), e3.intersects(t14);
        }, t13.coerce = function(e3) {
          if (e3 instanceof q) return e3;
          if (typeof e3 != "string") return null;
          var t14 = e3.match(i[k]);
          return t14 == null ? null : K((t14[1] || "0") + "." + (t14[2] || "0") + "." + (t14[3] || "0"));
        };
      }, 6176: (e2, t13, n2) => {
        "use strict";
        var r = n2(184);
        e2.exports = function(e3) {
          var t14 = e3.match(r);
          if (!t14) return null;
          var n3 = t14[0].replace(/#! ?/, "").split(" "), o = n3[0].split("/").pop(), i = n3[1];
          return o === "env" ? i : o + (i ? " " + i : "");
        };
      }, 184: (e2) => {
        "use strict";
        e2.exports = /^#!.*/;
      }, 200: (e2, t13, n2) => {
        var r, o = n2(6608), i = n2(6132), s = n2(467);
        function a() {
          l && (l = !1, i.forEach((function(e3) {
            try {
              process.removeListener(e3, u[e3]);
            } catch {
            }
          })), process.emit = d, process.reallyExit = p, r.count -= 1);
        }
        function c(e3, t14, n3) {
          r.emitted[e3] || (r.emitted[e3] = !0, r.emit(e3, t14, n3));
        }
        typeof s != "function" && (s = s.EventEmitter), process.__signal_exit_emitter__ ? r = process.__signal_exit_emitter__ : ((r = process.__signal_exit_emitter__ = new s()).count = 0, r.emitted = {}), r.infinite || (r.setMaxListeners(1 / 0), r.infinite = !0), e2.exports = function(e3, t14) {
          o.equal(typeof e3, "function", "a callback must be provided for exit handler"), l === !1 && f();
          var n3 = "exit";
          return t14 && t14.alwaysLast && (n3 = "afterexit"), r.on(n3, e3), function() {
            r.removeListener(n3, e3), r.listeners("exit").length === 0 && r.listeners("afterexit").length === 0 && a();
          };
        }, e2.exports.unload = a;
        var u = {};
        i.forEach((function(e3) {
          u[e3] = function() {
            process.listeners(e3).length === r.count && (a(), c("exit", null, e3), c("afterexit", null, e3), process.kill(process.pid, e3));
          };
        })), e2.exports.signals = function() {
          return i;
        }, e2.exports.load = f;
        var l = !1;
        function f() {
          l || (l = !0, r.count += 1, i = i.filter((function(e3) {
            try {
              return process.on(e3, u[e3]), !0;
            } catch {
              return !1;
            }
          })), process.emit = m, process.reallyExit = h);
        }
        var p = process.reallyExit;
        function h(e3) {
          process.exitCode = e3 || 0, c("exit", process.exitCode, null), c("afterexit", process.exitCode, null), p.call(process, process.exitCode);
        }
        var d = process.emit;
        function m(e3, t14) {
          if (e3 === "exit") {
            t14 !== void 0 && (process.exitCode = t14);
            var n3 = d.apply(this, arguments);
            return c("exit", process.exitCode, null), c("afterexit", process.exitCode, null), n3;
          }
          return d.apply(this, arguments);
        }
      }, 6132: (e2) => {
        e2.exports = ["SIGABRT", "SIGALRM", "SIGHUP", "SIGINT", "SIGTERM"], process.platform !== "win32" && e2.exports.push("SIGVTALRM", "SIGXCPU", "SIGXFSZ", "SIGUSR2", "SIGTRAP", "SIGSYS", "SIGQUIT", "SIGIOT"), process.platform === "linux" && e2.exports.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT", "SIGUNUSED");
      }, 9860: (e2) => {
        "use strict";
        e2.exports = function(e3) {
          var t13 = typeof e3 == "string" ? `
` : 10, n2 = typeof e3 == "string" ? "\r" : 13;
          return e3[e3.length - 1] === t13 && (e3 = e3.slice(0, e3.length - 1)), e3[e3.length - 1] === n2 && (e3 = e3.slice(0, e3.length - 1)), e3;
        };
      }, 8460: (e2, t13, n2) => {
        e2.exports = u, u.sync = function(e3, t14) {
          for (var n3 = c(e3, t14 = t14 || {}), r2 = n3.env, i2 = n3.ext, u2 = n3.extExe, l = [], f = 0, p = r2.length; f < p; f++) {
            var h = r2[f];
            h.charAt(0) === '"' && h.slice(-1) === '"' && (h = h.slice(1, -1));
            var d = o.join(h, e3);
            !h && /^\.[\\\/]/.test(e3) && (d = e3.slice(0, 2) + d);
            for (var m = 0, g = i2.length; m < g; m++) {
              var v = d + i2[m];
              try {
                if (s.sync(v, { pathExt: u2 })) {
                  if (!t14.all) return v;
                  l.push(v);
                }
              } catch {
              }
            }
          }
          if (t14.all && l.length) return l;
          if (t14.nothrow) return null;
          throw a(e3);
        };
        var r = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys", o = n2(7072), i = r ? ";" : ":", s = n2(9268);
        function a(e3) {
          var t14 = new Error("not found: " + e3);
          return t14.code = "ENOENT", t14;
        }
        function c(e3, t14) {
          var n3 = t14.colon || i, o2 = t14.path || process.env.PATH || "", s2 = [""];
          o2 = o2.split(n3);
          var a2 = "";
          return r && (o2.unshift(process.cwd()), s2 = (a2 = t14.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM").split(n3), e3.indexOf(".") !== -1 && s2[0] !== "" && s2.unshift("")), (e3.match(/\//) || r && e3.match(/\\/)) && (o2 = [""]), { env: o2, ext: s2, extExe: a2 };
        }
        function u(e3, t14, n3) {
          typeof t14 == "function" && (n3 = t14, t14 = {});
          var r2 = c(e3, t14), i2 = r2.env, u2 = r2.ext, l = r2.extExe, f = [];
          (function r3(c2, p) {
            if (c2 === p) return t14.all && f.length ? n3(null, f) : n3(a(e3));
            var h = i2[c2];
            h.charAt(0) === '"' && h.slice(-1) === '"' && (h = h.slice(1, -1));
            var d = o.join(h, e3);
            !h && /^\.[\\\/]/.test(e3) && (d = e3.slice(0, 2) + d), (function e4(o2, i3) {
              if (o2 === i3) return r3(c2 + 1, p);
              var a2 = u2[o2];
              s(d + a2, { pathExt: l }, (function(r4, s2) {
                if (!r4 && s2) {
                  if (!t14.all) return n3(null, d + a2);
                  f.push(d + a2);
                }
                return e4(o2 + 1, i3);
              }));
            })(0, u2.length);
          })(0, i2.length);
        }
      }, 6468: (e2, t13, n2) => {
        "use strict";
        let r = n2(8558), o = n2(8636), i = /* @__PURE__ */ new Map([["10.0", "10"], ["6.3", "8.1"], ["6.2", "8"], ["6.1", "7"], ["6.0", "Vista"], ["5.2", "Server 2003"], ["5.1", "XP"], ["5.0", "2000"], ["4.9", "ME"], ["4.1", "98"], ["4.0", "95"]]);
        e2.exports = (e3) => {
          let t14 = /\d+\.\d/.exec(e3 || r.release());
          if (e3 && !t14) throw new Error("`release` argument doesn't match `n.n`");
          let n3 = (t14 || [])[0];
          if ((!e3 || e3 === r.release()) && ["6.1", "6.2", "6.3", "10.0"].includes(n3)) {
            let e4 = ((o.sync("wmic", ["os", "get", "Caption"]).stdout || "").match(/2008|2012|2016/) || [])[0];
            if (e4) return `Server ${e4}`;
          }
          return i.get(n3);
        };
      }, 8636: (e2, t13, n2) => {
        "use strict";
        let r = n2(7072), o = n2(4368), i = n2(7468), s = n2(9860), a = n2(9584), c = n2(1392), u = n2(9068), l = n2(1548), f = n2(200), p = n2(7688), h = n2(6174);
        function d(e3, t14, n3) {
          let o2;
          return (n3 = Object.assign({ extendEnv: !0, env: {} }, n3)).extendEnv && (n3.env = Object.assign({}, process.env, n3.env)), n3.__winShell === !0 ? (delete n3.__winShell, o2 = { command: e3, args: t14, options: n3, file: e3, original: { cmd: e3, args: t14 } }) : o2 = i._parse(e3, t14, n3), (n3 = Object.assign({ maxBuffer: 1e7, buffer: !0, stripEof: !0, preferLocal: !0, localDir: o2.options.cwd || process.cwd(), encoding: "utf8", reject: !0, cleanup: !0 }, o2.options)).stdio = h(n3), n3.preferLocal && (n3.env = a.env(Object.assign({}, n3, { cwd: n3.localDir }))), n3.detached && (n3.cleanup = !1), process.platform === "win32" && r.basename(o2.command) === "cmd.exe" && o2.args.unshift("/q"), { cmd: o2.command, args: o2.args, opts: n3, parsed: o2 };
        }
        function m(e3, t14) {
          return t14 && e3.stripEof && (t14 = s(t14)), t14;
        }
        function g(e3, t14, n3) {
          let r2 = "/bin/sh", o2 = ["-c", t14];
          return n3 = Object.assign({}, n3), process.platform === "win32" && (n3.__winShell = !0, r2 = process.env.comspec || "cmd.exe", o2 = ["/s", "/c", `"${t14}"`], n3.windowsVerbatimArguments = !0), n3.shell && (r2 = n3.shell, delete n3.shell), e3(r2, o2, n3);
        }
        function v(e3, t14, { encoding: n3, buffer: r2, maxBuffer: o2 }) {
          if (!e3[t14]) return null;
          let i2;
          return i2 = r2 ? n3 ? u(e3[t14], { encoding: n3, maxBuffer: o2 }) : u.buffer(e3[t14], { maxBuffer: o2 }) : new Promise(((n4, r3) => {
            e3[t14].once("end", n4).once("error", r3);
          })), i2.catch(((e4) => {
            throw e4.stream = t14, e4.message = `${t14} ${e4.message}`, e4;
          }));
        }
        function y(e3, t14) {
          let { stdout: n3, stderr: r2 } = e3, o2 = e3.error, { code: i2, signal: s2 } = e3, { parsed: a2, joinedCmd: c2 } = t14, u2 = t14.timedOut || !1;
          if (!o2) {
            let e4 = "";
            Array.isArray(a2.opts.stdio) ? (a2.opts.stdio[2] !== "inherit" && (e4 += e4.length > 0 ? r2 : `
${r2}`), a2.opts.stdio[1] !== "inherit" && (e4 += `
${n3}`)) : a2.opts.stdio !== "inherit" && (e4 = `
${r2}${n3}`), o2 = new Error(`Command failed: ${c2}${e4}`), o2.code = i2 < 0 ? p(i2) : i2;
          }
          return o2.stdout = n3, o2.stderr = r2, o2.failed = !0, o2.signal = s2 || null, o2.cmd = c2, o2.timedOut = u2, o2;
        }
        function b(e3, t14) {
          let n3 = e3;
          return Array.isArray(t14) && t14.length > 0 && (n3 += " " + t14.join(" ")), n3;
        }
        e2.exports = (e3, t14, n3) => {
          let r2 = d(e3, t14, n3), { encoding: s2, buffer: a2, maxBuffer: u2 } = r2.opts, p2 = b(e3, t14), h2, g2;
          try {
            h2 = o.spawn(r2.cmd, r2.args, r2.opts);
          } catch (e4) {
            return Promise.reject(e4);
          }
          r2.opts.cleanup && (g2 = f((() => {
            h2.kill();
          })));
          let w = null, x = !1, S = () => {
            w && (clearTimeout(w), w = null), g2 && g2();
          };
          r2.opts.timeout > 0 && (w = setTimeout((() => {
            w = null, x = !0, h2.kill(r2.opts.killSignal);
          }), r2.opts.timeout));
          let P = new Promise(((e4) => {
            h2.on("exit", ((t15, n4) => {
              S(), e4({ code: t15, signal: n4 });
            })), h2.on("error", ((t15) => {
              S(), e4({ error: t15 });
            })), h2.stdin && h2.stdin.on("error", ((t15) => {
              S(), e4({ error: t15 });
            }));
          }));
          function I() {
            h2.stdout && h2.stdout.destroy(), h2.stderr && h2.stderr.destroy();
          }
          let O = () => l(Promise.all([P, v(h2, "stdout", { encoding: s2, buffer: a2, maxBuffer: u2 }), v(h2, "stderr", { encoding: s2, buffer: a2, maxBuffer: u2 })]).then(((e4) => {
            let t15 = e4[0];
            if (t15.stdout = e4[1], t15.stderr = e4[2], t15.error || t15.code !== 0 || t15.signal !== null) {
              let e5 = y(t15, { joinedCmd: p2, parsed: r2, timedOut: x });
              if (e5.killed = e5.killed || h2.killed, !r2.opts.reject) return e5;
              throw e5;
            }
            return { stdout: m(r2.opts, t15.stdout), stderr: m(r2.opts, t15.stderr), code: 0, failed: !1, killed: !1, signal: null, cmd: p2, timedOut: !1 };
          })), I);
          return i._enoent.hookChildProcess(h2, r2.parsed), (function(e4, t15) {
            t15 != null && (c(t15) ? t15.pipe(e4.stdin) : e4.stdin.end(t15));
          })(h2, r2.opts.input), h2.then = (e4, t15) => O().then(e4, t15), h2.catch = (e4) => O().catch(e4), h2;
        }, e2.exports.stdout = (...t14) => e2.exports(...t14).then(((e3) => e3.stdout)), e2.exports.stderr = (...t14) => e2.exports(...t14).then(((e3) => e3.stderr)), e2.exports.shell = (t14, n3) => g(e2.exports, t14, n3), e2.exports.sync = (e3, t14, n3) => {
          let r2 = d(e3, t14, n3), i2 = b(e3, t14);
          if (c(r2.opts.input)) throw new TypeError("The `input` option cannot be a stream in sync mode");
          let s2 = o.spawnSync(r2.cmd, r2.args, r2.opts);
          if (s2.code = s2.status, s2.error || s2.status !== 0 || s2.signal !== null) {
            let e4 = y(s2, { joinedCmd: i2, parsed: r2 });
            if (!r2.opts.reject) return e4;
            throw e4;
          }
          return { stdout: m(r2.opts, s2.stdout), stderr: m(r2.opts, s2.stderr), code: 0, failed: !1, signal: null, cmd: i2, timedOut: !1 };
        }, e2.exports.shellSync = (t14, n3) => g(e2.exports.sync, t14, n3);
      }, 7688: (e2, t13, n2) => {
        "use strict";
        let r = n2(970), o;
        if (typeof r.getSystemErrorName == "function") e2.exports = r.getSystemErrorName;
        else {
          try {
            if (o = process.binding("uv"), typeof o.errname != "function") throw new TypeError("uv.errname is not a function");
          } catch (e3) {
            console.error("execa/lib/errname: unable to establish process.binding('uv')", e3), o = null;
          }
          e2.exports = (e3) => i(o, e3);
        }
        function i(e3, t14) {
          if (e3) return e3.errname(t14);
          if (!(t14 < 0)) throw new Error("err >= 0");
          return `Unknown system error ${t14}`;
        }
        e2.exports.__test__ = i;
      }, 6174: (e2) => {
        "use strict";
        let t13 = ["stdin", "stdout", "stderr"];
        e2.exports = (e3) => {
          if (!e3) return null;
          if (e3.stdio && ((e4) => t13.some(((t14) => !!e4[t14])))(e3)) throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${t13.map(((e4) => `\`${e4}\``)).join(", ")}`);
          if (typeof e3.stdio == "string") return e3.stdio;
          let n2 = e3.stdio || [];
          if (!Array.isArray(n2)) throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof n2}\``);
          let r = [], o = Math.max(n2.length, t13.length);
          for (let i = 0; i < o; i++) {
            let o2 = null;
            n2[i] !== void 0 ? o2 = n2[i] : e3[t13[i]] !== void 0 && (o2 = e3[t13[i]]), r[i] = o2;
          }
          return r;
        };
      }, 656: (e2, t13, n2) => {
        "use strict";
        let { PassThrough: r } = n2(8378);
        e2.exports = (e3) => {
          e3 = Object.assign({}, e3);
          let { array: t14 } = e3, { encoding: n3 } = e3, o = n3 === "buffer", i = !1;
          t14 ? i = !(n3 || o) : n3 = n3 || "utf8", o && (n3 = null);
          let s = 0, a = [], c = new r({ objectMode: i });
          return n3 && c.setEncoding(n3), c.on("data", ((e4) => {
            a.push(e4), i ? s = a.length : s += e4.length;
          })), c.getBufferedValue = () => t14 ? a : o ? Buffer.concat(a, s) : a.join(""), c.getBufferedLength = () => s, c;
        };
      }, 9068: (e2, t13, n2) => {
        "use strict";
        let r = n2(8984), o = n2(656);
        class i extends Error {
          constructor() {
            super("maxBuffer exceeded"), this.name = "MaxBufferError";
          }
        }
        function s(e3, t14) {
          if (!e3) return Promise.reject(new Error("Expected a stream"));
          t14 = Object.assign({ maxBuffer: 1 / 0 }, t14);
          let { maxBuffer: n3 } = t14, s2;
          return new Promise(((a, c) => {
            let u = (e4) => {
              e4 && (e4.bufferedData = s2.getBufferedValue()), c(e4);
            };
            s2 = r(e3, o(t14), ((e4) => {
              e4 ? u(e4) : a();
            })), s2.on("data", (() => {
              s2.getBufferedLength() > n3 && u(new i());
            }));
          })).then((() => s2.getBufferedValue()));
        }
        e2.exports = s, e2.exports.buffer = (e3, t14) => s(e3, Object.assign({}, t14, { encoding: "buffer" })), e2.exports.array = (e3, t14) => s(e3, Object.assign({}, t14, { array: !0 })), e2.exports.MaxBufferError = i;
      }, 2680: (e2) => {
        e2.exports = function e3(t13, n2) {
          if (t13 && n2) return e3(t13)(n2);
          if (typeof t13 != "function") throw new TypeError("need wrapper function");
          return Object.keys(t13).forEach((function(e4) {
            r[e4] = t13[e4];
          })), r;
          function r() {
            for (var e4 = new Array(arguments.length), n3 = 0; n3 < e4.length; n3++) e4[n3] = arguments[n3];
            var r2 = t13.apply(this, e4), o = e4[e4.length - 1];
            return typeof r2 == "function" && r2 !== o && Object.keys(o).forEach((function(e5) {
              r2[e5] = o[e5];
            })), r2;
          }
        };
      }, 4824: (e2) => {
        "use strict";
        function t13(e3) {
          return e3;
        }
        e2.exports = { date: t13, error: t13, symbol: t13, string: t13, number: t13, boolean: t13, null: t13, undefined: t13 };
      }, 324: (e2, t13, n2) => {
        "use strict";
        var r = n2(3648), o = n2(4616), i = n2(4824);
        function s(e3, t14) {
          return e3 === void 0 ? t14 : e3;
        }
        e2.exports = function() {
          var e3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
          return { indent: s(e3.indent, " "), prefix: s(e3.prefix, `
`), postfix: s(e3.postfix, ""), errorToString: e3.errorToString || r, dateToString: e3.dateToString || o, colors: Object.assign({}, i, e3.colors) };
        };
      }, 4616: (e2) => {
        "use strict";
        e2.exports = function(e3) {
          return `new Date(${Date.prototype.toISOString.call(e3)})`;
        };
      }, 3648: (e2) => {
        "use strict";
        e2.exports = function(e3) {
          return Error.prototype.toString.call(e3);
        };
      }, 9411: (e2) => {
        "use strict";
        e2.exports = function() {
          for (var e3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1, t13 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "  ", n2 = "", r = 0; r < e3; r += 1) n2 += t13;
          return n2;
        };
      }, 6232: (e2, t13, n2) => {
        "use strict";
        var r = n2(7344), o = n2(324), i = n2(9411), s = ["object", "array"];
        e2.exports = function(e3, t14) {
          var n3 = o(t14), a = n3.colors, c = n3.prefix, u = n3.postfix, l = n3.dateToString, f = n3.errorToString, p = n3.indent, h = /* @__PURE__ */ new Map();
          function d(e4) {
            var t15 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1, n4 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
            if (Object.keys(e4).length === 0) return " {}";
            var o2 = `
`, a2 = i(t15, p);
            return Object.keys(e4).forEach((function(c2) {
              var u2 = e4[c2], l2 = r(u2), f2 = i(n4, "  "), p2 = s.indexOf(l2) !== -1 ? "" : " ", h2 = v(u2) ? " [Circular]" : g(l2, u2, t15 + 1, n4);
              o2 += `${f2}${a2}${c2}:${p2}${h2}
`;
            })), o2.substring(0, o2.length - 1);
          }
          function m(e4) {
            var t15 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1, n4 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
            if (e4.length === 0) return " []";
            var o2 = `
`, s2 = i(t15, p);
            return e4.forEach((function(e5) {
              var a2 = r(e5), c2 = i(n4, "  "), u2 = v(e5) ? "[Circular]" : g(a2, e5, t15, n4 + 1).toString().trimLeft();
              o2 += `${c2}${s2}- ${u2}
`;
            })), o2.substring(0, o2.length - 1);
          }
          function g(e4, t15, n4, r2) {
            switch (e4) {
              case "array":
                return m(t15, n4, r2);
              case "object":
                return d(t15, n4, r2);
              case "string":
                return a.string(t15);
              case "symbol":
                return a.symbol(t15.toString());
              case "number":
                return a.number(t15);
              case "boolean":
                return a.boolean(t15);
              case "null":
                return a.null("null");
              case "undefined":
                return a.undefined("undefined");
              case "date":
                return a.date(l(t15));
              case "error":
                return a.error(f(t15));
              default:
                return t15 && t15.toString ? t15.toString() : Object.prototype.toString.call(t15);
            }
          }
          function v(e4) {
            return !(["object", "array"].indexOf(r(e4)) === -1 || !h.has(e4) && (h.set(e4), 1));
          }
          var y = "";
          return h.set(e3), r(e3) === "object" && Object.keys(e3).length > 0 ? y = d(e3) : r(e3) === "array" && e3.length > 0 && (y = m(e3)), y.length === 0 ? "" : `${c}${y.slice(1)}${u}`;
        };
      }, 7344: (e2) => {
        "use strict";
        e2.exports = function(e3) {
          return Array.isArray(e3) ? "array" : e3 instanceof Date ? "date" : e3 instanceof Error ? "error" : e3 === null ? "null" : typeof e3 == "object" && Object.prototype.toString.call(e3) === "[object Object]" ? "object" : typeof e3;
        };
      }, 6608: (e2) => {
        "use strict";
        e2.exports = __require("assert");
      }, 4368: (e2) => {
        "use strict";
        e2.exports = __require("child_process");
      }, 467: (e2) => {
        "use strict";
        e2.exports = __require("events");
      }, 2058: (e2) => {
        "use strict";
        e2.exports = __require("fs");
      }, 8558: (e2) => {
        "use strict";
        e2.exports = __require("os");
      }, 7072: (e2) => {
        "use strict";
        e2.exports = __require("path");
      }, 8378: (e2) => {
        "use strict";
        e2.exports = __require("stream");
      }, 970: (e2) => {
        "use strict";
        e2.exports = __require("util");
      } }, t12 = {}, n = (function n2(r) {
        var o = t12[r];
        if (o !== void 0) return o.exports;
        var i = t12[r] = { exports: {} };
        return e[r](i, i.exports, n2), i.exports;
      })(2980);
      module.exports = n;
    })();
  }
});

// ../../../node_modules/isexe/windows.js
var require_windows = __commonJS({
  "../../../node_modules/isexe/windows.js"(exports, module) {
    module.exports = isexe;
    isexe.sync = sync;
    var fs2 = __require("fs");
    function checkPathExt(path4, options) {
      var pathext = options.pathExt !== void 0 ? options.pathExt : process.env.PATHEXT;
      if (!pathext || (pathext = pathext.split(";"), pathext.indexOf("") !== -1))
        return !0;
      for (var i = 0; i < pathext.length; i++) {
        var p = pathext[i].toLowerCase();
        if (p && path4.substr(-p.length).toLowerCase() === p)
          return !0;
      }
      return !1;
    }
    function checkStat(stat, path4, options) {
      return !stat.isSymbolicLink() && !stat.isFile() ? !1 : checkPathExt(path4, options);
    }
    function isexe(path4, options, cb) {
      fs2.stat(path4, function(er, stat) {
        cb(er, er ? !1 : checkStat(stat, path4, options));
      });
    }
    function sync(path4, options) {
      return checkStat(fs2.statSync(path4), path4, options);
    }
  }
});

// ../../../node_modules/isexe/mode.js
var require_mode = __commonJS({
  "../../../node_modules/isexe/mode.js"(exports, module) {
    module.exports = isexe;
    isexe.sync = sync;
    var fs2 = __require("fs");
    function isexe(path4, options, cb) {
      fs2.stat(path4, function(er, stat) {
        cb(er, er ? !1 : checkStat(stat, options));
      });
    }
    function sync(path4, options) {
      return checkStat(fs2.statSync(path4), options);
    }
    function checkStat(stat, options) {
      return stat.isFile() && checkMode(stat, options);
    }
    function checkMode(stat, options) {
      var mod = stat.mode, uid = stat.uid, gid = stat.gid, myUid = options.uid !== void 0 ? options.uid : process.getuid && process.getuid(), myGid = options.gid !== void 0 ? options.gid : process.getgid && process.getgid(), u = parseInt("100", 8), g = parseInt("010", 8), o = parseInt("001", 8), ug = u | g, ret = mod & o || mod & g && gid === myGid || mod & u && uid === myUid || mod & ug && myUid === 0;
      return ret;
    }
  }
});

// ../../../node_modules/isexe/index.js
var require_isexe = __commonJS({
  "../../../node_modules/isexe/index.js"(exports, module) {
    var fs2 = __require("fs"), core;
    process.platform === "win32" || global.TESTING_WINDOWS ? core = require_windows() : core = require_mode();
    module.exports = isexe;
    isexe.sync = sync;
    function isexe(path4, options, cb) {
      if (typeof options == "function" && (cb = options, options = {}), !cb) {
        if (typeof Promise != "function")
          throw new TypeError("callback not provided");
        return new Promise(function(resolve4, reject) {
          isexe(path4, options || {}, function(er, is) {
            er ? reject(er) : resolve4(is);
          });
        });
      }
      core(path4, options || {}, function(er, is) {
        er && (er.code === "EACCES" || options && options.ignoreErrors) && (er = null, is = !1), cb(er, is);
      });
    }
    function sync(path4, options) {
      try {
        return core.sync(path4, options || {});
      } catch (er) {
        if (options && options.ignoreErrors || er.code === "EACCES")
          return !1;
        throw er;
      }
    }
  }
});

// ../../../node_modules/which/which.js
var require_which = __commonJS({
  "../../../node_modules/which/which.js"(exports, module) {
    var isWindows2 = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys", path4 = __require("path"), COLON = isWindows2 ? ";" : ":", isexe = require_isexe(), getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), getPathInfo = (cmd, opt) => {
      let colon = opt.colon || COLON, pathEnv = cmd.match(/\//) || isWindows2 && cmd.match(/\\/) ? [""] : [
        // windows always checks the cwd first
        ...isWindows2 ? [process.cwd()] : [],
        ...(opt.path || process.env.PATH || /* istanbul ignore next: very unusual */
        "").split(colon)
      ], pathExtExe = isWindows2 ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : "", pathExt = isWindows2 ? pathExtExe.split(colon) : [""];
      return isWindows2 && cmd.indexOf(".") !== -1 && pathExt[0] !== "" && pathExt.unshift(""), {
        pathEnv,
        pathExt,
        pathExtExe
      };
    }, which = (cmd, opt, cb) => {
      typeof opt == "function" && (cb = opt, opt = {}), opt || (opt = {});
      let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [], step = (i) => new Promise((resolve4, reject) => {
        if (i === pathEnv.length)
          return opt.all && found.length ? resolve4(found) : reject(getNotFoundError(cmd));
        let ppRaw = pathEnv[i], pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw, pCmd = path4.join(pathPart, cmd), p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
        resolve4(subStep(p, i, 0));
      }), subStep = (p, i, ii) => new Promise((resolve4, reject) => {
        if (ii === pathExt.length)
          return resolve4(step(i + 1));
        let ext = pathExt[ii];
        isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
          if (!er && is)
            if (opt.all)
              found.push(p + ext);
            else
              return resolve4(p + ext);
          return resolve4(subStep(p, i, ii + 1));
        });
      });
      return cb ? step(0).then((res) => cb(null, res), cb) : step(0);
    }, whichSync = (cmd, opt) => {
      opt = opt || {};
      let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [];
      for (let i = 0; i < pathEnv.length; i++) {
        let ppRaw = pathEnv[i], pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw, pCmd = path4.join(pathPart, cmd), p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
        for (let j = 0; j < pathExt.length; j++) {
          let cur = p + pathExt[j];
          try {
            if (isexe.sync(cur, { pathExt: pathExtExe }))
              if (opt.all)
                found.push(cur);
              else
                return cur;
          } catch {
          }
        }
      }
      if (opt.all && found.length)
        return found;
      if (opt.nothrow)
        return null;
      throw getNotFoundError(cmd);
    };
    module.exports = which;
    which.sync = whichSync;
  }
});

// ../../../node_modules/path-key/index.js
var require_path_key = __commonJS({
  "../../../node_modules/path-key/index.js"(exports, module) {
    "use strict";
    var pathKey = (options = {}) => {
      let environment = options.env || process.env;
      return (options.platform || process.platform) !== "win32" ? "PATH" : Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path";
    };
    module.exports = pathKey;
    module.exports.default = pathKey;
  }
});

// ../../../node_modules/cross-spawn/lib/util/resolveCommand.js
var require_resolveCommand = __commonJS({
  "../../../node_modules/cross-spawn/lib/util/resolveCommand.js"(exports, module) {
    "use strict";
    var path4 = __require("path"), which = require_which(), getPathKey = require_path_key();
    function resolveCommandAttempt(parsed, withoutPathExt) {
      let env = parsed.options.env || process.env, cwd2 = process.cwd(), hasCustomCwd = parsed.options.cwd != null, shouldSwitchCwd = hasCustomCwd && process.chdir !== void 0 && !process.chdir.disabled;
      if (shouldSwitchCwd)
        try {
          process.chdir(parsed.options.cwd);
        } catch {
        }
      let resolved;
      try {
        resolved = which.sync(parsed.command, {
          path: env[getPathKey({ env })],
          pathExt: withoutPathExt ? path4.delimiter : void 0
        });
      } catch {
      } finally {
        shouldSwitchCwd && process.chdir(cwd2);
      }
      return resolved && (resolved = path4.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved)), resolved;
    }
    function resolveCommand(parsed) {
      return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, !0);
    }
    module.exports = resolveCommand;
  }
});

// ../../../node_modules/cross-spawn/lib/util/escape.js
var require_escape = __commonJS({
  "../../../node_modules/cross-spawn/lib/util/escape.js"(exports, module) {
    "use strict";
    var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
    function escapeCommand(arg) {
      return arg = arg.replace(metaCharsRegExp, "^$1"), arg;
    }
    function escapeArgument(arg, doubleEscapeMetaChars) {
      return arg = `${arg}`, arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'), arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1"), arg = `"${arg}"`, arg = arg.replace(metaCharsRegExp, "^$1"), doubleEscapeMetaChars && (arg = arg.replace(metaCharsRegExp, "^$1")), arg;
    }
    module.exports.command = escapeCommand;
    module.exports.argument = escapeArgument;
  }
});

// ../../../node_modules/shebang-regex/index.js
var require_shebang_regex = __commonJS({
  "../../../node_modules/shebang-regex/index.js"(exports, module) {
    "use strict";
    module.exports = /^#!(.*)/;
  }
});

// ../../../node_modules/shebang-command/index.js
var require_shebang_command = __commonJS({
  "../../../node_modules/shebang-command/index.js"(exports, module) {
    "use strict";
    var shebangRegex = require_shebang_regex();
    module.exports = (string = "") => {
      let match = string.match(shebangRegex);
      if (!match)
        return null;
      let [path4, argument] = match[0].replace(/#! ?/, "").split(" "), binary = path4.split("/").pop();
      return binary === "env" ? argument : argument ? `${binary} ${argument}` : binary;
    };
  }
});

// ../../../node_modules/cross-spawn/lib/util/readShebang.js
var require_readShebang = __commonJS({
  "../../../node_modules/cross-spawn/lib/util/readShebang.js"(exports, module) {
    "use strict";
    var fs2 = __require("fs"), shebangCommand = require_shebang_command();
    function readShebang(command2) {
      let buffer = Buffer.alloc(150), fd;
      try {
        fd = fs2.openSync(command2, "r"), fs2.readSync(fd, buffer, 0, 150, 0), fs2.closeSync(fd);
      } catch {
      }
      return shebangCommand(buffer.toString());
    }
    module.exports = readShebang;
  }
});

// ../../../node_modules/cross-spawn/lib/parse.js
var require_parse = __commonJS({
  "../../../node_modules/cross-spawn/lib/parse.js"(exports, module) {
    "use strict";
    var path4 = __require("path"), resolveCommand = require_resolveCommand(), escape = require_escape(), readShebang = require_readShebang(), isWin = process.platform === "win32", isExecutableRegExp = /\.(?:com|exe)$/i, isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
    function detectShebang(parsed) {
      parsed.file = resolveCommand(parsed);
      let shebang = parsed.file && readShebang(parsed.file);
      return shebang ? (parsed.args.unshift(parsed.file), parsed.command = shebang, resolveCommand(parsed)) : parsed.file;
    }
    function parseNonShell(parsed) {
      if (!isWin)
        return parsed;
      let commandFile = detectShebang(parsed), needsShell = !isExecutableRegExp.test(commandFile);
      if (parsed.options.forceShell || needsShell) {
        let needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
        parsed.command = path4.normalize(parsed.command), parsed.command = escape.command(parsed.command), parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
        let shellCommand = [parsed.command].concat(parsed.args).join(" ");
        parsed.args = ["/d", "/s", "/c", `"${shellCommand}"`], parsed.command = process.env.comspec || "cmd.exe", parsed.options.windowsVerbatimArguments = !0;
      }
      return parsed;
    }
    function parse3(command2, args, options) {
      args && !Array.isArray(args) && (options = args, args = null), args = args ? args.slice(0) : [], options = Object.assign({}, options);
      let parsed = {
        command: command2,
        args,
        options,
        file: void 0,
        original: {
          command: command2,
          args
        }
      };
      return options.shell ? parsed : parseNonShell(parsed);
    }
    module.exports = parse3;
  }
});

// ../../../node_modules/cross-spawn/lib/enoent.js
var require_enoent = __commonJS({
  "../../../node_modules/cross-spawn/lib/enoent.js"(exports, module) {
    "use strict";
    var isWin = process.platform === "win32";
    function notFoundError(original, syscall) {
      return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
        code: "ENOENT",
        errno: "ENOENT",
        syscall: `${syscall} ${original.command}`,
        path: original.command,
        spawnargs: original.args
      });
    }
    function hookChildProcess(cp, parsed) {
      if (!isWin)
        return;
      let originalEmit = cp.emit;
      cp.emit = function(name, arg1) {
        if (name === "exit") {
          let err = verifyENOENT(arg1, parsed);
          if (err)
            return originalEmit.call(cp, "error", err);
        }
        return originalEmit.apply(cp, arguments);
      };
    }
    function verifyENOENT(status, parsed) {
      return isWin && status === 1 && !parsed.file ? notFoundError(parsed.original, "spawn") : null;
    }
    function verifyENOENTSync(status, parsed) {
      return isWin && status === 1 && !parsed.file ? notFoundError(parsed.original, "spawnSync") : null;
    }
    module.exports = {
      hookChildProcess,
      verifyENOENT,
      verifyENOENTSync,
      notFoundError
    };
  }
});

// ../../../node_modules/cross-spawn/index.js
var require_cross_spawn = __commonJS({
  "../../../node_modules/cross-spawn/index.js"(exports, module) {
    "use strict";
    var cp = __require("child_process"), parse3 = require_parse(), enoent = require_enoent();
    function spawn2(command2, args, options) {
      let parsed = parse3(command2, args, options), spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
      return enoent.hookChildProcess(spawned, parsed), spawned;
    }
    function spawnSync5(command2, args, options) {
      let parsed = parse3(command2, args, options), result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
      return result.error = result.error || enoent.verifyENOENTSync(result.status, parsed), result;
    }
    module.exports = spawn2;
    module.exports.spawn = spawn2;
    module.exports.sync = spawnSync5;
    module.exports._parse = parse3;
    module.exports._enoent = enoent;
  }
});

// src/bin/run.ts
var import_envinfo = __toESM(require_envinfo(), 1);
import { globalSettings } from "storybook/internal/cli";
import {
  HandledError as HandledError2,
  JsPackageManagerFactory as JsPackageManagerFactory3,
  PackageManagerName as PackageManagerName3,
  optionalEnvToBoolean as optionalEnvToBoolean3,
  removeAddon as remove,
  versions as versions5
} from "storybook/internal/common";
import { withTelemetry } from "storybook/internal/core-server";
import { CLI_COLORS as CLI_COLORS5, logTracker as logTracker4, logger as logger27 } from "storybook/internal/node-logger";
import { addToGlobalContext, telemetry as telemetry2 } from "storybook/internal/telemetry";
import { InvalidArgumentError, Option, program } from "commander";

// ../../../node_modules/leven/index.js
var array = [], characterCodeCache = [];
function leven(first, second, options) {
  if (first === second)
    return 0;
  let maxDistance = options?.maxDistance, swap = first;
  first.length > second.length && (first = second, second = swap);
  let firstLength = first.length, secondLength = second.length;
  for (; firstLength > 0 && first.charCodeAt(~-firstLength) === second.charCodeAt(~-secondLength); )
    firstLength--, secondLength--;
  let start = 0;
  for (; start < firstLength && first.charCodeAt(start) === second.charCodeAt(start); )
    start++;
  if (firstLength -= start, secondLength -= start, maxDistance !== void 0 && secondLength - firstLength > maxDistance)
    return maxDistance;
  if (firstLength === 0)
    return maxDistance !== void 0 && secondLength > maxDistance ? maxDistance : secondLength;
  let bCharacterCode, result, temporary, temporary2, index = 0, index2 = 0;
  for (; index < firstLength; )
    characterCodeCache[index] = first.charCodeAt(start + index), array[index] = ++index;
  for (; index2 < secondLength; ) {
    for (bCharacterCode = second.charCodeAt(start + index2), temporary = index2++, result = index2, index = 0; index < firstLength; index++)
      temporary2 = bCharacterCode === characterCodeCache[index] ? temporary : temporary + 1, temporary = array[index], result = array[index] = temporary > result ? temporary2 > result ? result + 1 : temporary2 : temporary2 > temporary ? temporary + 1 : temporary2;
    if (maxDistance !== void 0) {
      let rowMinimum = result;
      for (index = 0; index < firstLength; index++)
        array[index] < rowMinimum && (rowMinimum = array[index]);
      if (rowMinimum > maxDistance)
        return maxDistance;
    }
  }
  return array.length = firstLength, characterCodeCache.length = firstLength, maxDistance !== void 0 && result > maxDistance ? maxDistance : result;
}

// src/bin/run.ts
var import_picocolors19 = __toESM(require_picocolors(), 1);

// package.json
var version = "10.6.0";

// src/add.ts
var import_semver = __toESM(require_semver(), 1);
import { setupAddonInConfig, versions } from "storybook/internal/common";
import { readConfig } from "storybook/internal/csf-tools";
import { logger as nodeLogger, prompt } from "storybook/internal/node-logger";
import { dedent } from "ts-dedent";

// src/postinstallAddon.ts
import { spawnSync } from "node:child_process";
import { createRequire as createRequire2 } from "node:module";
import { join as join2 } from "node:path";
import { fileURLToPath as fileURLToPath2, pathToFileURL as pathToFileURL2 } from "node:url";

// ../../core/src/shared/utils/module.ts
import { createRequire, register } from "node:module";
import { win32 } from "node:path/win32";
import { fileURLToPath, pathToFileURL } from "node:url";

// ../../../node_modules/exsolve/dist/index.mjs
import assert from "node:assert";
import v8 from "node:v8";
import { format, inspect } from "node:util";
var own$1 = {}.hasOwnProperty, classRegExp = /^([A-Z][a-z\d]*)+$/, kTypes = /* @__PURE__ */ new Set([
  "string",
  "function",
  "number",
  "object",
  "Function",
  "Object",
  "boolean",
  "bigint",
  "symbol"
]), messages = /* @__PURE__ */ new Map(), nodeInternalPrefix = "__node_internal_", userStackTraceLimit;
function formatList(array2, type = "and") {
  return array2.length < 3 ? array2.join(` ${type} `) : `${array2.slice(0, -1).join(", ")}, ${type} ${array2.at(-1)}`;
}
function createError(sym, value, constructor) {
  return messages.set(sym, value), makeNodeErrorWithCode(constructor, sym);
}
function makeNodeErrorWithCode(Base, key) {
  return function(...parameters) {
    let limit = Error.stackTraceLimit;
    isErrorStackTraceLimitWritable() && (Error.stackTraceLimit = 0);
    let error = new Base();
    isErrorStackTraceLimitWritable() && (Error.stackTraceLimit = limit);
    let message = getMessage(key, parameters, error);
    return Object.defineProperties(error, {
      message: {
        value: message,
        enumerable: !1,
        writable: !0,
        configurable: !0
      },
      toString: {
        value() {
          return `${this.name} [${key}]: ${this.message}`;
        },
        enumerable: !1,
        writable: !0,
        configurable: !0
      }
    }), captureLargerStackTrace(error), error.code = key, error;
  };
}
function isErrorStackTraceLimitWritable() {
  try {
    if (v8.startupSnapshot.isBuildingSnapshot()) return !1;
  } catch {
  }
  let desc = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit");
  return desc === void 0 ? Object.isExtensible(Error) : own$1.call(desc, "writable") && desc.writable !== void 0 ? desc.writable : desc.set !== void 0;
}
function hideStackFrames(wrappedFunction) {
  let hidden = nodeInternalPrefix + wrappedFunction.name;
  return Object.defineProperty(wrappedFunction, "name", { value: hidden }), wrappedFunction;
}
var captureLargerStackTrace = hideStackFrames(function(error) {
  let stackTraceLimitIsWritable = isErrorStackTraceLimitWritable();
  return stackTraceLimitIsWritable && (userStackTraceLimit = Error.stackTraceLimit, Error.stackTraceLimit = Number.POSITIVE_INFINITY), Error.captureStackTrace(error), stackTraceLimitIsWritable && (Error.stackTraceLimit = userStackTraceLimit), error;
});
function getMessage(key, parameters, self2) {
  let message = messages.get(key);
  if (assert.ok(message !== void 0, "expected `message` to be found"), typeof message == "function")
    return assert.ok(message.length <= parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not match the required ones (${message.length}).`), Reflect.apply(message, self2, parameters);
  let regex = /%[dfijoOs]/g, expectedLength = 0;
  for (; regex.exec(message) !== null; ) expectedLength++;
  return assert.ok(expectedLength === parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not match the required ones (${expectedLength}).`), parameters.length === 0 ? message : (parameters.unshift(message), Reflect.apply(format, null, parameters));
}
function determineSpecificType(value) {
  if (value == null) return String(value);
  if (typeof value == "function" && value.name) return `function ${value.name}`;
  if (typeof value == "object")
    return value.constructor && value.constructor.name ? `an instance of ${value.constructor.name}` : `${inspect(value, { depth: -1 })}`;
  let inspected = inspect(value, { colors: !1 });
  return inspected.length > 28 && (inspected = `${inspected.slice(0, 25)}...`), `type ${typeof value} (${inspected})`;
}
var ERR_INVALID_ARG_TYPE = createError("ERR_INVALID_ARG_TYPE", (name, expected, actual) => {
  assert.ok(typeof name == "string", "'name' must be a string"), Array.isArray(expected) || (expected = [expected]);
  let message = "The ";
  if (name.endsWith(" argument")) message += `${name} `;
  else {
    let type = name.includes(".") ? "property" : "argument";
    message += `"${name}" ${type} `;
  }
  message += "must be ";
  let types = [], instances = [], other = [];
  for (let value of expected)
    assert.ok(typeof value == "string", "All expected entries have to be of type string"), kTypes.has(value) ? types.push(value.toLowerCase()) : classRegExp.exec(value) === null ? (assert.ok(value !== "object", 'The value "object" should be written as "Object"'), other.push(value)) : instances.push(value);
  if (instances.length > 0) {
    let pos = types.indexOf("object");
    pos !== -1 && (types.slice(pos, 1), instances.push("Object"));
  }
  return types.length > 0 && (message += `${types.length > 1 ? "one of type" : "of type"} ${formatList(types, "or")}`, (instances.length > 0 || other.length > 0) && (message += " or ")), instances.length > 0 && (message += `an instance of ${formatList(instances, "or")}`, other.length > 0 && (message += " or ")), other.length > 0 && (other.length > 1 ? message += `one of ${formatList(other, "or")}` : (other[0]?.toLowerCase() !== other[0] && (message += "an "), message += `${other[0]}`)), message += `. Received ${determineSpecificType(actual)}`, message;
}, TypeError), ERR_INVALID_MODULE_SPECIFIER = createError(
  "ERR_INVALID_MODULE_SPECIFIER",
  /**
  * @param {string} request
  * @param {string} reason
  * @param {string} [base]
  */
  (request, reason, base) => `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ""}`,
  TypeError
), ERR_INVALID_PACKAGE_CONFIG = createError("ERR_INVALID_PACKAGE_CONFIG", (path$1, base, message) => `Invalid package config ${path$1}${base ? ` while importing ${base}` : ""}${message ? `. ${message}` : ""}`, Error), ERR_INVALID_PACKAGE_TARGET = createError("ERR_INVALID_PACKAGE_TARGET", (packagePath, key, target, isImport = !1, base) => {
  let relatedError = typeof target == "string" && !isImport && target.length > 0 && !target.startsWith("./");
  return key === "." ? (assert.ok(isImport === !1), `Invalid "exports" main target ${JSON.stringify(target)} defined in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ""}${relatedError ? '; targets must start with "./"' : ""}`) : `Invalid "${isImport ? "imports" : "exports"}" target ${JSON.stringify(target)} defined for '${key}' in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ""}${relatedError ? '; targets must start with "./"' : ""}`;
}, Error), ERR_MODULE_NOT_FOUND = createError("ERR_MODULE_NOT_FOUND", (path$1, base, exactUrl = !1) => `Cannot find ${exactUrl ? "module" : "package"} '${path$1}' imported from ${base}`, Error), ERR_NETWORK_IMPORT_DISALLOWED = createError("ERR_NETWORK_IMPORT_DISALLOWED", "import of '%s' by %s is not supported: %s", Error), ERR_PACKAGE_IMPORT_NOT_DEFINED = createError("ERR_PACKAGE_IMPORT_NOT_DEFINED", (specifier, packagePath, base) => `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath || ""}package.json` : ""} imported from ${base}`, TypeError), ERR_PACKAGE_PATH_NOT_EXPORTED = createError(
  "ERR_PACKAGE_PATH_NOT_EXPORTED",
  /**
  * @param {string} packagePath
  * @param {string} subpath
  * @param {string} [base]
  */
  (packagePath, subpath, base) => subpath === "." ? `No "exports" main defined in ${packagePath}package.json${base ? ` imported from ${base}` : ""}` : `Package subpath '${subpath}' is not defined by "exports" in ${packagePath}package.json${base ? ` imported from ${base}` : ""}`,
  Error
), ERR_UNSUPPORTED_DIR_IMPORT = createError("ERR_UNSUPPORTED_DIR_IMPORT", "Directory import '%s' is not supported resolving ES modules imported from %s", Error), ERR_UNSUPPORTED_RESOLVE_REQUEST = createError("ERR_UNSUPPORTED_RESOLVE_REQUEST", 'Failed to resolve module specifier "%s" from "%s": Invalid relative URL or base scheme is not hierarchical.', TypeError), ERR_UNKNOWN_FILE_EXTENSION = createError("ERR_UNKNOWN_FILE_EXTENSION", (extension, path$1) => `Unknown file extension "${extension}" for ${path$1}`, TypeError), ERR_INVALID_ARG_VALUE = createError("ERR_INVALID_ARG_VALUE", (name, value, reason = "is invalid") => {
  let inspected = inspect(value);
  return inspected.length > 128 && (inspected = `${inspected.slice(0, 128)}...`), `The ${name.includes(".") ? "property" : "argument"} '${name}' ${reason}. Received ${inspected}`;
}, TypeError), hasOwnProperty$1 = {}.hasOwnProperty;
var hasOwnProperty = {}.hasOwnProperty;
var RegExpPrototypeSymbolReplace = RegExp.prototype[Symbol.replace], own = {}.hasOwnProperty;
var isWindows = process.platform === "win32", globalCache = globalThis.__EXSOLVE_CACHE__ ||= /* @__PURE__ */ new Map();

// ../../core/src/shared/utils/module.ts
var importMetaResolve = (...args) => typeof import.meta.resolve != "function" && process.env.VITEST === "true" ? (console.warn(
  "importMetaResolve from within Storybook is being used in a Vitest test, but it shouldn't be. Please report this at https://github.com/storybookjs/storybook/issues/new?template=bug_report.yml"
), pathToFileURL(args[0]).href) : import.meta.resolve(...args);
var isTypescriptLoaderRegistered = !1;
async function importModule(path4, { skipCache = !1 } = {}) {
  if (!isTypescriptLoaderRegistered) {
    let typescriptLoaderUrl = importMetaResolve("storybook/internal/bin/loader");
    register(typescriptLoaderUrl, import.meta.url), isTypescriptLoaderRegistered = !0;
  }
  let mod;
  try {
    let resolvedPath = win32.isAbsolute(path4) ? pathToFileURL(path4).href : path4;
    mod = await import(skipCache ? `${resolvedPath}?${Date.now()}` : resolvedPath);
  } catch (importError) {
    try {
      let require3 = createRequire(import.meta.url);
      skipCache && delete require3.cache[require3.resolve(path4)], mod = require3(path4);
    } catch {
      throw importError;
    }
  }
  return mod.default ?? mod;
}

// src/postinstallAddon.ts
var DIR_CWD = process.cwd(), require2 = createRequire2(join2(DIR_CWD, "package.json")), postinstallAddon = async (addonName, options) => {
  let hookPath = `${addonName}/postinstall`, logger28 = options.logger, modulePath;
  try {
    modulePath = require2.resolve(hookPath, { paths: [DIR_CWD] });
  } catch {
    let result = spawnSync(
      process.execPath,
      ["-p", `require.resolve(${JSON.stringify(hookPath)}, { paths: [process.cwd()] })`],
      { cwd: DIR_CWD, encoding: "utf8", timeout: 3e4 }
    );
    result.status === 0 && result.stdout.trim() && (modulePath = result.stdout.trim());
  }
  if (!modulePath)
    try {
      modulePath = import.meta.resolve(hookPath);
    } catch {
      logger28.warn(
        `Could not resolve the postinstall hook of ${addonName}, skipping its configuration. Run \`npx storybook add ${addonName}\` to set it up manually.`
      );
      return;
    }
  let moduleFilePath = modulePath.startsWith("file:") ? fileURLToPath2(modulePath) : modulePath, moduledLoaded;
  try {
    moduledLoaded = await import(pathToFileURL2(moduleFilePath).href).catch(() => importModule(moduleFilePath)).catch(() => require2(moduleFilePath)).catch(() => import(hookPath)).catch(() => importModule(hookPath)).catch(() => require2(hookPath));
  } catch (e) {
    logger28.warn(
      `Could not load the postinstall hook of ${addonName} (${String(
        e
      )}), skipping its configuration. Run \`npx storybook add ${addonName}\` to set it up manually.`
    );
    return;
  }
  let postinstall = moduledLoaded?.default || moduledLoaded?.postinstall || moduledLoaded;
  if (!postinstall || typeof postinstall != "function") {
    logger28.error(`Error finding postinstall function for ${addonName}`);
    return;
  }
  try {
    await postinstall(options);
  } catch (e) {
    throw e;
  }
}, configureDeferredAddons = async (addons, options) => {
  for (let addon of addons)
    try {
      await postinstallAddon(addon, options);
    } catch (e) {
      options.logger.warn(
        `Could not configure ${addon}: ${e}. Run \`npx storybook add ${addon}\` to set it up manually.`
      );
    }
};

// src/add.ts
var getVersionSpecifier = (addon) => {
  let groups = /^(@{0,1}[^@]+)(?:@(.+))?$/.exec(addon);
  return groups ? [groups[1], groups[2]] : [addon, void 0];
}, checkInstalled = (addonName, main) => !!main.addons?.find((entry) => (typeof entry == "string" ? entry : entry.name)?.endsWith(addonName)), isCoreAddon = (addonName) => Object.hasOwn(versions, addonName);
async function add(addon, {
  packageManager: pkgMgr,
  skipPostinstall,
  configDir: userSpecifiedConfigDir,
  yes,
  skipInstall
}, logger28 = nodeLogger) {
  let [addonName, inputVersion] = getVersionSpecifier(addon), { mainConfig, mainConfigPath, configDir, previewConfigPath, packageManager } = await getStorybookData({
    configDir: userSpecifiedConfigDir,
    packageManagerName: pkgMgr,
    skipCache: !0
  });
  if (typeof configDir > "u")
    throw new Error(dedent`
      Unable to find storybook config directory. Please specify your Storybook config directory with the --config-dir flag.
    `);
  if (!mainConfigPath) {
    logger28.error("Unable to find Storybook main.js config");
    return;
  }
  let shouldAddToMain = !0;
  if (checkInstalled(addonName, mainConfig) && (shouldAddToMain = !1, !yes && (logger28.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`), !await prompt.confirm({
    message: "Do you wish to install it again?"
  }))))
    return;
  let main = await readConfig(mainConfigPath);
  logger28.log(`Verifying ${addonName}`);
  let version2 = inputVersion;
  if (!version2 && isCoreAddon(addonName) && (version2 = versions.storybook), !version2) {
    let latestVersion = await packageManager.latestVersion(addonName);
    if (!latestVersion)
      throw new Error(`No version found for ${addonName}`);
    version2 = latestVersion;
  }
  let storybookVersion = versions.storybook, versionIsStorybook = version2 === versions.storybook;
  isCoreAddon(addonName) && !versionIsStorybook && logger28.warn(
    `The version of ${addonName} (${version2}) you are installing is not the same as the version of Storybook you are using (${storybookVersion}). This may lead to unexpected behavior.`
  );
  let versionRange = packageManager.getDependencyVersion("storybook")?.match(/^[~^]/)?.[0] ?? "", addonWithVersion = versionIsStorybook ? `${addonName}@${versionRange}${storybookVersion}` : isValidVersion(version2) && !version2.includes("-pr-") ? `${addonName}@^${version2}` : `${addonName}@${version2}`;
  logger28.log(`Installing ${addonWithVersion}`), await packageManager.addDependencies(
    { type: "devDependencies", writeOutputToFile: !1, skipInstall },
    [addonWithVersion]
  ), shouldAddToMain && (logger28.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`), await setupAddonInConfig({
    addonName,
    mainConfigCSFFile: main,
    previewConfigPath,
    configDir
  })), !skipPostinstall && isCoreAddon(addonName) && await postinstallAddon(addonName, {
    packageManager: packageManager.type,
    configDir,
    yes,
    logger: logger28,
    prompt,
    skipInstall
  });
}
function isValidVersion(version2) {
  return import_semver.default.valid(version2) || version2.match(/^\d+$/);
}

// src/automigrate/index.ts
var import_picocolors16 = __toESM(require_picocolors(), 1);
import { versions as versions3 } from "storybook/internal/common";
import { logTracker as logTracker2, logger as logger21, prompt as prompt5 } from "storybook/internal/node-logger";
import { AutomigrateError } from "storybook/internal/server-errors";

// ../../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js
var isProduction = process.env.NODE_ENV === "production", prefix = "Invariant failed";
function invariant(condition, message) {
  if (!condition) {
    if (isProduction)
      throw new Error(prefix);
    var provided = typeof message == "function" ? message() : message, value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
    throw new Error(value);
  }
}

// src/automigrate/index.ts
import { dedent as dedent18 } from "ts-dedent";

// src/doctor/index.ts
var import_picocolors4 = __toESM(require_picocolors(), 1);
import { JsPackageManager } from "storybook/internal/common";
import { CLI_COLORS, logTracker, logger as logger2 } from "storybook/internal/node-logger";
import { dedent as dedent2 } from "ts-dedent";

// src/doctor/getDuplicatedDepsWarnings.ts
var import_picocolors = __toESM(require_picocolors(), 1);
import { frameworkPackages, rendererPackages } from "storybook/internal/common";

// src/doctor/hasMultipleVersions.ts
var import_semver2 = __toESM(require_semver(), 1);
function hasMultipleVersions(versions6) {
  return versions6.find((v) => {
    let major = import_semver2.default.major(v);
    if (major === 0) {
      let minor = import_semver2.default.minor(v);
      if (minor === 0) {
        let patch = import_semver2.default.patch(v);
        return versions6.some((v2) => import_semver2.default.patch(v2) !== patch);
      }
      return versions6.some((v2) => import_semver2.default.minor(v2) !== minor);
    }
    return versions6.some((v2) => import_semver2.default.major(v2) !== major);
  });
}

// src/doctor/getDuplicatedDepsWarnings.ts
var messageDivider = `

`, allowList = [
  "@storybook/csf",
  // see this file for more info: code/lib/preview/src/globals/types.ts
  "@storybook/addons",
  "@storybook/channel-postmessage",
  "@storybook/channel-websocket",
  "@storybook/client-api",
  "@storybook/core-client",
  "@storybook/preview-web",
  "@storybook/store",
  // see this file for more info: code/ui/manager/src/globals/types.ts
  "@storybook/components",
  "@storybook/router",
  "@storybook/theming",
  "@storybook/api",
  "@storybook/manager-api"
], disallowList = [
  Object.keys(rendererPackages),
  Object.keys(frameworkPackages),
  "storybook",
  "@storybook/instrumenter",
  "@storybook/core-server",
  "@storybook/manager",
  "@storybook/preview"
];
function getDuplicatedDepsWarnings(installationMetadata) {
  try {
    if (!installationMetadata || !installationMetadata?.duplicatedDependencies || Object.keys(installationMetadata.duplicatedDependencies).length === 0)
      return;
    let messages2 = [], { critical, trivial } = Object.entries(
      installationMetadata?.duplicatedDependencies
    ).reduce(
      (acc, [dep, packageVersions]) => {
        if (allowList.includes(dep))
          return acc;
        let hasMultipleMajorVersions = hasMultipleVersions(packageVersions);
        return disallowList.includes(dep) && hasMultipleMajorVersions ? acc.critical.push(
          `${import_picocolors.default.bold(import_picocolors.default.red(dep))}:
${packageVersions.join(", ")}`
        ) : acc.trivial.push(`${import_picocolors.default.yellow(dep)}:
${packageVersions.join(", ")}`), acc;
      },
      { critical: [], trivial: [] }
    );
    return critical.length === 0 && trivial.length === 0 || (critical.length > 0 && (messages2.push(
      `${import_picocolors.default.bold(
        "Critical:"
      )} The following dependencies are duplicated and WILL cause unexpected behavior:`
    ), messages2.push(critical.join(messageDivider), `
`)), trivial.length > 0 && (messages2.push(
      `${import_picocolors.default.bold(
        "Attention:"
      )} The following dependencies are duplicated which might cause unexpected behavior:`
    ), messages2.push(trivial.join(messageDivider))), messages2.push(
      `
`,
      `Please try de-duplicating these dependencies by running ${import_picocolors.default.cyan(
        `${installationMetadata.dedupeCommand}`
      )}`
    ), messages2.push(
      `
`,
      `You can find more information for a given dependency by running ${import_picocolors.default.cyan(
        `${installationMetadata.infoCommand} <package-name>`
      )}`
    )), messages2;
  } catch {
    return;
  }
}

// src/doctor/getIncompatibleStorybookPackages.ts
var import_picocolors2 = __toESM(require_picocolors(), 1), import_semver3 = __toESM(require_semver(), 1);
import { versions as storybookCorePackages } from "storybook/internal/common";
import { logger } from "storybook/internal/node-logger";

// src/automigrate/helpers/consolidated-packages.ts
var consolidatedPackages = {
  "@storybook/channels": "storybook/internal/channels",
  "@storybook/client-logger": "storybook/internal/client-logger",
  "@storybook/core-common": "storybook/internal/common",
  "@storybook/core-events": "storybook/internal/core-events",
  "@storybook/csf": "storybook/internal/csf",
  "@storybook/csf-tools": "storybook/internal/csf-tools",
  "@storybook/docs-tools": "storybook/internal/docs-tools",
  "@storybook/node-logger": "storybook/internal/node-logger",
  "@storybook/preview-api": "storybook/preview-api",
  "@storybook/router": "storybook/internal/router",
  "@storybook/telemetry": "storybook/internal/telemetry",
  "@storybook/theming": "storybook/theming",
  "@storybook/types": "storybook/internal/types",
  "@storybook/manager-api": "storybook/manager-api",
  "@storybook/manager": "storybook/internal/manager",
  "@storybook/preview": "storybook/internal/preview",
  "@storybook/core-server": "storybook/internal/core-server",
  "@storybook/builder-manager": "storybook/internal/builder-manager",
  "@storybook/components": "storybook/internal/components",
  "@storybook/test": "storybook/test",
  "@storybook/experimental-nextjs-vite": "@storybook/nextjs-vite",
  "@storybook/instrumenter": "storybook/internal/instrumenter",
  "@storybook/blocks": "@storybook/addon-docs/blocks"
};

// src/doctor/getIncompatibleStorybookPackages.ts
var checkPackageCompatibility = async (dependency, context) => {
  let { currentStorybookVersion, skipErrors, packageManager } = context;
  try {
    let dependencyPackageJson = await packageManager.getModulePackageJSON(dependency);
    if (dependencyPackageJson === null)
      return { packageName: dependency };
    let {
      version: packageVersion,
      name = dependency,
      dependencies,
      peerDependencies,
      homepage
    } = dependencyPackageJson, packageStorybookVersion = Object.entries({
      ...dependencies,
      ...peerDependencies
    }).filter(
      ([dep]) => storybookCorePackages[dep] || consolidatedPackages[dep]
    ).map(([_, versionRange]) => versionRange).find((versionRange) => versionRange && // We can't check compatibility for 0.x packages, so we skip them
    !/^[~^]?0\./.test(versionRange) && import_semver3.default.validRange(versionRange) && !import_semver3.default.satisfies(currentStorybookVersion, versionRange)), isCorePackage3 = storybookCorePackages[name], availableUpdate, availableCoreUpdate;
    return isCorePackage3 && packageVersion && import_semver3.default.gt(currentStorybookVersion, packageVersion) && (availableUpdate = currentStorybookVersion), isCorePackage3 && packageVersion && import_semver3.default.gt(packageVersion, currentStorybookVersion) && (availableCoreUpdate = packageVersion), {
      packageName: name,
      packageVersion,
      homepage,
      hasIncompatibleDependencies: packageStorybookVersion != null,
      packageStorybookVersion,
      availableUpdate,
      availableCoreUpdate
    };
  } catch (err) {
    return skipErrors || logger.log(
      `Error checking compatibility for ${dependency}, please report an issue:
` + String(err)
    ), { packageName: dependency };
  }
}, getIncompatibleStorybookPackages = async (context) => {
  if (context.currentStorybookVersion.includes("0.0.0"))
    return [];
  let allDeps = context.packageManager.getAllDependencies(), storybookLikeDeps = Object.keys(allDeps).filter((dep) => dep.includes("storybook"));
  if (storybookLikeDeps.length === 0 && !context.skipErrors)
    throw new Error("No Storybook dependencies found in the package.json");
  return Promise.all(
    storybookLikeDeps.filter((dep) => !storybookCorePackages[dep]).map((dep) => checkPackageCompatibility(dep, context))
  );
}, getIncompatiblePackagesSummary = (dependencyAnalysis, currentStorybookVersion) => {
  let summaryMessage = [], incompatiblePackages = dependencyAnalysis.filter(
    (dep) => dep.hasIncompatibleDependencies
  );
  return incompatiblePackages.length > 0 && (summaryMessage.push(
    `You are currently using Storybook ${import_picocolors2.default.bold(
      currentStorybookVersion
    )} but you have packages which are incompatible with it:
`
  ), incompatiblePackages.forEach(
    ({
      packageName: addonName,
      packageVersion: addonVersion,
      homepage,
      availableUpdate,
      packageStorybookVersion
    }) => {
      let packageDescription = `${addonName}@${addonVersion}`, updateMessage = availableUpdate ? ` (${availableUpdate} available!)` : "", dependsOnStorybook = packageStorybookVersion != null ? ` which depends on ${packageStorybookVersion}` : "", packageRepo = homepage ? `
 Repo: ${homepage}` : "";
      summaryMessage.push(
        `- ${packageDescription}${updateMessage}${dependsOnStorybook}${packageRepo}`
      );
    }
  ), summaryMessage.push(
    `
Please consider updating your packages or contacting the maintainers for compatibility details.`,
    `
For more details on compatibility guidance, see:`,
    "https://github.com/storybookjs/storybook/issues/32836"
  ), incompatiblePackages.some((dep) => dep.availableCoreUpdate) && summaryMessage.push(
    `
`,
    `The version of ${import_picocolors2.default.blue(`storybook@${currentStorybookVersion}`)} is behind the following core packages:`,
    `${incompatiblePackages.filter((dep) => dep.availableCoreUpdate).map(
      ({ packageName, packageVersion }) => `- ${import_picocolors2.default.blue(`${packageName}@${packageVersion}`)}`
    ).join(`
`)}`,
    `
`,
    "Upgrade Storybook with:",
    import_picocolors2.default.blue("npx storybook@latest upgrade")
  )), summaryMessage.join(`
`);
};

// src/doctor/getMismatchingVersionsWarning.ts
var import_picocolors3 = __toESM(require_picocolors(), 1), import_semver4 = __toESM(require_semver(), 1);
import { frameworkPackages as frameworkPackages2, versions as storybookCorePackages2 } from "storybook/internal/common";
function getPrimaryVersion(name, installationMetadata) {
  if (!name)
    return;
  let packageMetadata = installationMetadata?.dependencies[name];
  if (packageMetadata)
    return packageMetadata[0]?.version;
}
function getMismatchingVersionsWarnings(installationMetadata) {
  if (!installationMetadata)
    return;
  let messages2 = [];
  try {
    let frameworkPackageName = Object.keys(installationMetadata?.dependencies || []).find(
      (packageName) => Object.keys(frameworkPackages2).includes(packageName)
    ), cliVersion = getPrimaryVersion("storybook", installationMetadata), frameworkVersion = getPrimaryVersion(frameworkPackageName, installationMetadata);
    if (!cliVersion || !frameworkVersion || import_semver4.default.eq(cliVersion, frameworkVersion))
      return;
    messages2.push(
      `${import_picocolors3.default.bold(
        "Attention:"
      )} There seems to be a mismatch between your Storybook package versions. This can result in a broken Storybook installation.`
    );
    let versionToCompare, packageToDisplay;
    import_semver4.default.lt(cliVersion, frameworkVersion) ? (versionToCompare = frameworkVersion, packageToDisplay = frameworkPackageName) : (versionToCompare = cliVersion, packageToDisplay = "storybook"), messages2.push(
      `The version of your storybook core packages should align with ${import_picocolors3.default.yellow(
        versionToCompare
      )} (from the ${import_picocolors3.default.cyan(packageToDisplay)} package) or higher.`
    );
    let filteredDependencies = Object.entries(installationMetadata?.dependencies || []).filter(
      ([name, packages]) => Object.keys(storybookCorePackages2).includes(name) ? packages[0].version !== versionToCompare : !1
    );
    return filteredDependencies.length > 0 && messages2.push(
      "Based on your lockfile, these dependencies should be aligned:",
      filteredDependencies.map(([name, dep]) => `${import_picocolors3.default.yellow(name)}: ${dep[0].version}`).join(`
`)
    ), messages2.push(
      `You can run ${import_picocolors3.default.cyan("npx storybook@latest upgrade")} to upgrade all of your Storybook packages to the latest version.

Alternatively you can try manually changing the versions to match in your package.json. We also recommend regenerating your lockfile, or running the following command to possibly deduplicate your Storybook package versions: ${import_picocolors3.default.cyan(installationMetadata?.dedupeCommand)}`
    ), messages2.join(`

`);
  } catch {
    return;
  }
}

// src/doctor/types.ts
var DiagnosticType = /* @__PURE__ */ ((DiagnosticType2) => (DiagnosticType2.MISSING_STORYBOOK_DEPENDENCY = "missing_storybook_dependency", DiagnosticType2.INCOMPATIBLE_PACKAGES = "incompatible_packages", DiagnosticType2.MISMATCHING_VERSIONS = "mismatching_versions", DiagnosticType2.DUPLICATED_DEPENDENCIES = "duplicated_dependencies", DiagnosticType2.CONFIGURATION_ERROR = "configuration_error", DiagnosticType2))(DiagnosticType || {});

// src/doctor/index.ts
function collectDeduplicatedDiagnostics(projectResults) {
  let diagnosticMap = /* @__PURE__ */ new Map();
  return Object.entries(projectResults).forEach(([configDir, result]) => {
    Object.entries(result.diagnostics).forEach(([type, status]) => {
      if (status !== "passed" /* PASSED */) {
        let diagnosticType = type, message = result.messages[diagnosticType];
        if (message) {
          let existing = diagnosticMap.get(diagnosticType);
          existing ? existing.projects.push({ configDir }) : diagnosticMap.set(diagnosticType, {
            type: diagnosticType,
            title: type.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
            message,
            projects: [{ configDir }]
          });
        }
      }
    });
  }), Array.from(diagnosticMap.values());
}
function displayDoctorResults(projectResults) {
  let projectCount = Object.keys(projectResults).length;
  if (projectCount === 0)
    return !1;
  if (!Object.values(projectResults).some((result) => result.status !== "healthy"))
    return projectCount === 1 ? logger2.log("Your Storybook project looks good!") : logger2.log(`All ${projectCount} Storybook projects look good!`), !1;
  if (projectCount === 1) {
    let [configDir, result] = Object.entries(projectResults)[0], projectName = shortenPath(configDir) || ".";
    if (result.status === "healthy")
      logger2.log(`\u2705 ${projectName}: No issues found`);
    else {
      let issueCount = Object.values(result.diagnostics).filter(
        (status) => status !== "passed" /* PASSED */
      ).length;
      result.status === "check_error" ? logger2.error(
        `${projectName}: ${issueCount} ${issueCount === 1 ? "problem" : "problems"} found`
      ) : logger2.warn(`${projectName}: ${issueCount} ${issueCount === 1 ? "issue" : "issues"} found`), Object.entries(result.diagnostics).forEach(([type, status]) => {
        if (status !== "passed" /* PASSED */) {
          let message = result.messages[type];
          if (message) {
            let title = type.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase());
            logger2.logBox(message, {
              title: status === "check_error" /* CHECK_ERROR */ ? CLI_COLORS.error(title) : CLI_COLORS.warning(title)
            });
          }
        }
      });
    }
  } else {
    let deduplicatedDiagnostics = collectDeduplicatedDiagnostics(projectResults), totalIssues = deduplicatedDiagnostics.length;
    Object.values(projectResults).filter(
      (result) => result.status === "check_error"
    ).length > 0 ? logger2.error(
      `Found ${totalIssues} ${totalIssues === 1 ? "issue" : "issues"} across ${projectCount} projects`
    ) : logger2.warn(
      `Found ${totalIssues} ${totalIssues === 1 ? "issue" : "issues"} across ${projectCount} projects`
    ), deduplicatedDiagnostics.forEach((diagnostic) => {
      let messageWithProjects = diagnostic.message;
      if (diagnostic.projects.length > 1) {
        let projectNames = diagnostic.projects.map((p) => shortenPath(p.configDir) || ".").join(", ");
        messageWithProjects += `

Affected projects: ${projectNames}`;
      } else {
        let projectName = shortenPath(diagnostic.projects[0].configDir) || ".";
        messageWithProjects += `

Affected project: ${projectName}`;
      }
      logger2.logBox(messageWithProjects, {
        title: CLI_COLORS.warning(diagnostic.title)
      });
    });
  }
  logger2.step("Storybook doctor is complete!");
  let commandMessage = `You can always recheck the health of your project(s) by running:
${import_picocolors4.default.cyan(
    "npx storybook doctor"
  )}`;
  return logger2.log(commandMessage), !0;
}
async function runMultiProjectDoctor(projects) {
  if (projects.length === 0)
    return {};
  let projectOptions = projects.map((project) => ({
    configDir: project.configDir,
    packageManager: project.packageManager,
    storybookVersion: project.storybookVersion,
    mainConfig: project.mainConfig
  }));
  return await collectDoctorResultsByProject(projectOptions);
}
var doctor = async ({
  configDir: userSpecifiedConfigDir,
  packageManager: packageManagerName
}) => {
  logger2.step("Checking the health of your Storybook..");
  let diagnosticResults = [], packageManager, configDir, versionInstalled, mainConfig;
  try {
    ({ packageManager, configDir, versionInstalled, mainConfig } = await getStorybookData({
      configDir: userSpecifiedConfigDir,
      packageManagerName
    }));
  } catch (err) {
    let title = "Configuration Error", message;
    err.message.includes("No configuration files have been found") ? message = dedent2`
          Could not find or evaluate your Storybook main.js config directory at ${import_picocolors4.default.blue(
      configDir || ".storybook"
    )} so the doctor command cannot proceed. You might be running this command in a monorepo or a non-standard project structure. If that is the case, please rerun this command by specifying the path to your Storybook config directory via the --config-dir option.
        ` : message = `\u274C ${err.message}`, diagnosticResults.push({
      type: "configuration_error" /* CONFIGURATION_ERROR */,
      title,
      message,
      projects: [{ configDir }]
    });
  }
  let doctorResults = await collectDoctorResultsByProject([
    {
      configDir,
      packageManager,
      storybookVersion: versionInstalled,
      mainConfig
    }
  ]);
  displayDoctorResults(doctorResults) && logTracker.enableLogWriting();
};
async function getDoctorDiagnostics({
  configDir,
  packageManager,
  storybookVersion,
  mainConfig
}) {
  let results = [];
  if (!storybookVersion)
    return results.push({
      type: "configuration_error" /* CONFIGURATION_ERROR */,
      title: "Version Detection Failed",
      message: dedent2`
        ❌ Unable to determine Storybook version so the command will not proceed.
        🤔 Are you running storybook doctor from your project directory? Please specify your Storybook config directory with the --config-dir flag.
      `,
      project: { configDir }
    }), results;
  if (!mainConfig)
    return results.push({
      type: "configuration_error" /* CONFIGURATION_ERROR */,
      title: "Main Config Error",
      message: "mainConfig is undefined",
      project: { configDir }
    }), results;
  packageManager.packageJsonPaths.some(
    JsPackageManager.hasStorybookDependency
  ) || results.push({
    type: "missing_storybook_dependency" /* MISSING_STORYBOOK_DEPENDENCY */,
    title: 'Package "storybook" not found',
    message: dedent2`
        The "storybook" package was not found in your package.json.
        Installing "storybook" as a direct dev dependency in your package.json is required.
      `,
    project: { configDir }
  });
  let incompatibleStorybookPackagesList = await getIncompatibleStorybookPackages({
    currentStorybookVersion: storybookVersion,
    packageManager
  }), incompatiblePackagesMessage = getIncompatiblePackagesSummary(
    incompatibleStorybookPackagesList,
    storybookVersion
  );
  incompatiblePackagesMessage && results.push({
    type: "incompatible_packages" /* INCOMPATIBLE_PACKAGES */,
    title: "Incompatible packages found",
    message: incompatiblePackagesMessage,
    project: { configDir }
  });
  let installationMetadata = await packageManager.findInstallations([
    "@storybook/*",
    "storybook"
  ]);
  if (!incompatiblePackagesMessage) {
    let mismatchingVersionMessage = getMismatchingVersionsWarnings(installationMetadata);
    if (mismatchingVersionMessage)
      results.push({
        type: "mismatching_versions" /* MISMATCHING_VERSIONS */,
        title: "Diagnostics",
        message: mismatchingVersionMessage,
        project: { configDir }
      });
    else {
      let list = installationMetadata ? getDuplicatedDepsWarnings(installationMetadata) : getDuplicatedDepsWarnings();
      Array.isArray(list) && list.length > 0 && results.push({
        type: "duplicated_dependencies" /* DUPLICATED_DEPENDENCIES */,
        title: "Duplicated dependencies found",
        message: list.join(`
`),
        project: { configDir }
      });
    }
  }
  return results;
}
async function collectDoctorResultsByProject(projectOptions) {
  let projectResults = {};
  for (let options of projectOptions) {
    let { configDir } = options;
    try {
      let checkResults = await getDoctorDiagnostics(options), diagnostics = {}, messages2 = {};
      Object.values(DiagnosticType).forEach((type) => {
        diagnostics[type] = "passed" /* PASSED */;
      });
      let hasIssues = !1, hasErrors = !1;
      for (let checkResult of checkResults)
        checkResult.type === "configuration_error" /* CONFIGURATION_ERROR */ ? (diagnostics[checkResult.type] = "check_error" /* CHECK_ERROR */, hasErrors = !0) : (diagnostics[checkResult.type] = "has_issues" /* HAS_ISSUES */, hasIssues = !0), messages2[checkResult.type] = checkResult.message;
      let status = hasErrors ? "check_error" : hasIssues ? "has_issues" : "healthy";
      projectResults[configDir] = {
        configDir,
        status,
        diagnostics,
        messages: messages2
      };
    } catch (error) {
      logger2.error(`Failed to run doctor checks for project ${configDir}:
${error}`);
      let diagnostics = {}, messages2 = {};
      Object.values(DiagnosticType).forEach((type) => {
        diagnostics[type] = "passed" /* PASSED */;
      }), diagnostics.configuration_error = "check_error" /* CHECK_ERROR */, messages2.configuration_error = `Failed to run doctor checks: ${error instanceof Error ? error.message : String(error)}`, projectResults[configDir] = {
        configDir,
        status: "check_error",
        diagnostics,
        messages: messages2
      };
    }
  }
  return projectResults;
}

// src/codemod/csf-factories.ts
var import_picocolors7 = __toESM(require_picocolors(), 1);
import {
  optionalEnvToBoolean,
  syncStorybookAddons
} from "storybook/internal/common";
import { logger as logger6, prompt as prompt2 } from "storybook/internal/node-logger";
import { dedent as dedent3 } from "ts-dedent";

// src/automigrate/codemod.ts
var import_picocolors5 = __toESM(require_picocolors(), 1);
import os from "node:os";
import { formatFileContent } from "storybook/internal/common";
import { logger as logger3 } from "storybook/internal/node-logger";
import { promises as fs } from "fs";
var maxConcurrentTasks = Math.max(1, os.cpus().length - 1);
async function runCodemod(globPattern = "**/*.{stories,story}.{js,jsx,ts,tsx,mjs,mjsx,mts,mtsx}", transform, { dryRun = !1, skipFormatting = !1 } = {}) {
  let modifiedCount = 0, unmodifiedCount = 0, errorCount = 0, { globby } = await import("./globby-VIFFPMQ3.js"), files = await globby(slash(globPattern), {
    followSymbolicLinks: !0,
    ignore: ["**/node_modules/**", "**/dist/**", "**/storybook-static/**", "**/build/**"]
  });
  if (!files.length)
    throw logger3.error(
      `No files found for glob pattern "${globPattern}".
Please try a different pattern.
`
    ), new Error("No files matched");
  try {
    let pLimit = (await import("./p-limit-NHYXITBY.js")).default, limit = pLimit(maxConcurrentTasks);
    await Promise.all(
      files.map(
        (file) => limit(async () => {
          try {
            let filePath = file;
            try {
              filePath = await fs.realpath(file);
            } catch {
            }
            let source = await fs.readFile(filePath, "utf-8"), transformedSource = await transform({ path: filePath, source });
            if (transformedSource !== source) {
              if (!dryRun) {
                let fileContent = skipFormatting ? transformedSource : await formatFileContent(file, transformedSource);
                await fs.writeFile(file, fileContent, "utf-8");
              }
              modifiedCount++;
            } else
              unmodifiedCount++;
          } catch (fileError) {
            logger3.error(`Error processing file ${file}: ${String(fileError)}`), errorCount++;
          }
        })
      )
    );
  } catch (error) {
    logger3.error(`Error applying transform: ${String(error)}`), errorCount++;
  }
  logger3.log(
    `Summary: ${import_picocolors5.default.green(`${modifiedCount} transformed`)}, ${import_picocolors5.default.yellow(`${unmodifiedCount} unmodified`)}, ${import_picocolors5.default.red(`${errorCount} errors`)}`
  ), dryRun && logger3.log(
    import_picocolors5.default.bold(
      `This was a dry run. Run without --dry-run to apply the transformation to ${modifiedCount} files.`
    )
  );
}

// src/codemod/helpers/config-to-csf-factory.ts
var import_picocolors6 = __toESM(require_picocolors(), 1);
import { types as t2 } from "storybook/internal/babel";
import { formatFileContent as formatFileContent2 } from "storybook/internal/common";
import { loadConfig, printConfig } from "storybook/internal/csf-tools";
import { logger as logger4 } from "storybook/internal/node-logger";

// src/codemod/helpers/csf-factories-utils.ts
import { types as t, traverse } from "storybook/internal/babel";
var projectAnnotationNames = [
  "decorators",
  "parameters",
  "args",
  "argTypes",
  "loaders",
  "beforeEach",
  "afterEach",
  "render",
  "tags",
  "mount",
  "argsEnhancers",
  "argTypesEnhancers",
  "beforeAll",
  "initialGlobals",
  "globalTypes",
  "applyDecorators",
  "runStep"
];
function cleanupTypeImports(programNode, disallowList2) {
  let usedIdentifiers = /* @__PURE__ */ new Set();
  try {
    traverse(programNode, {
      Identifier(path4) {
        path4.findParent((p) => p.isImportDeclaration()) || usedIdentifiers.add(path4.node.name);
      },
      noScope: !0
    });
  } catch {
  }
  return programNode.body.filter((node) => {
    if (t.isImportDeclaration(node)) {
      let { source, specifiers } = node;
      if (source.value.startsWith("@storybook/")) {
        let allowedSpecifiers = specifiers.filter((specifier) => {
          if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {
            let name = specifier.imported.name;
            return !disallowList2.includes(name) || usedIdentifiers.has(name);
          }
          return !0;
        });
        return allowedSpecifiers.length > 0 ? (node.specifiers = allowedSpecifiers, !0) : !1;
      }
    }
    return !0;
  });
}
function removeExportDeclarations(programNode, exportDecls) {
  return programNode.body.filter((node) => {
    if (t.isExportNamedDeclaration(node) && node.declaration) {
      if (t.isVariableDeclaration(node.declaration))
        return node.declaration.declarations = node.declaration.declarations.filter(
          (decl) => t.isIdentifier(decl.id) && !exportDecls[decl.id.name]
        ), node.declaration.declarations.length > 0;
      if (t.isFunctionDeclaration(node.declaration)) {
        let funcDecl = node.declaration;
        return t.isIdentifier(funcDecl.id) && !exportDecls[funcDecl.id.name];
      }
    }
    return !0;
  });
}
function getConfigProperties(exportDecls, options) {
  let properties = [];
  for (let [name, decl] of Object.entries(exportDecls))
    options.configType === "preview" && !projectAnnotationNames.includes(name) || (t.isVariableDeclarator(decl) && decl.init ? properties.push(t.objectProperty(t.identifier(name), decl.init)) : t.isFunctionDeclaration(decl) && properties.push(
      t.objectProperty(t.identifier(name), t.arrowFunctionExpression([], decl.body))
    ));
  return properties;
}
function addImportToTop(programNode, importDecl) {
  let firstNode = programNode.body[0];
  firstNode && firstNode.leadingComments && firstNode.leadingComments.length > 0 && (importDecl.comments = firstNode.leadingComments, firstNode.leadingComments = [], firstNode.comments = []), programNode.body.unshift(importDecl);
}

// src/codemod/helpers/config-to-csf-factory.ts
async function configToCsfFactory(info, { configType, frameworkPackage }, { dryRun = !1, skipFormatting = !1 } = {}) {
  let config = loadConfig(info.source);
  try {
    config.parse();
  } catch (err) {
    return logger4.log(`Error when parsing ${info.path}, skipping:
${err}`), info.source;
  }
  let methodName = configType === "main" ? "defineMain" : "definePreview", programNode = config._ast.program, exportDecls = config._exportDecls, defineConfigProps = getConfigProperties(exportDecls, { configType }), hasNamedExports = defineConfigProps.length > 0, isAlreadyTransformed = programNode.body.some((node) => {
    if (!t2.isExportDefaultDeclaration(node)) return !1;
    let declaration = typeof config._unwrap == "function" ? config._unwrap(node.declaration) : node.declaration;
    return t2.isCallExpression(declaration) && t2.isIdentifier(declaration.callee) && declaration.callee.name === methodName;
  }), expectedImportSource = frameworkPackage + (configType === "main" ? "/node" : ""), hasCorrectImport = programNode.body.some(
    (node) => t2.isImportDeclaration(node) && node.importKind !== "type" && node.source.value === expectedImportSource && node.specifiers.some(
      (spec) => t2.isImportSpecifier(spec) && t2.isIdentifier(spec.imported) && spec.imported.name === methodName
    )
  ), shouldSkipTransform = configType === "main" ? isAlreadyTransformed : isAlreadyTransformed && !hasNamedExports;
  if (shouldSkipTransform && hasCorrectImport)
    return info.source;
  function findDeclarationNodeIndex(declarationName) {
    return programNode.body.findIndex(
      (n) => t2.isVariableDeclaration(n) && n.declarations.some((d) => {
        let declaration = d.init;
        return (t2.isTSAsExpression(declaration) || t2.isTSSatisfiesExpression(declaration)) && (declaration = declaration.expression), t2.isIdentifier(d.id) && d.id.name === declarationName && t2.isObjectExpression(declaration);
      })
    );
  }
  if (!shouldSkipTransform) {
    if (config._exportsObject && hasNamedExports) {
      config._exportsObject.properties = [...defineConfigProps, ...config._exportsObject.properties], programNode.body = removeExportDeclarations(programNode, exportDecls);
      let defineConfigCall = t2.callExpression(t2.identifier(methodName), [config._exportsObject]), exportDefaultNode = null, declarationNodeIndex = -1;
      programNode.body.forEach((node) => {
        if (t2.isExportDefaultDeclaration(node) && t2.isIdentifier(node.declaration)) {
          let declarationName = node.declaration.name;
          if (declarationNodeIndex = findDeclarationNodeIndex(declarationName), declarationNodeIndex !== -1) {
            exportDefaultNode = node;
            let declarationNode = programNode.body[declarationNodeIndex];
            if (t2.isVariableDeclaration(declarationNode)) {
              let id = declarationNode.declarations[0].id;
              t2.isIdentifier(id) && id.name && programNode.body.splice(declarationNodeIndex, 1);
            }
          }
        } else t2.isExportDefaultDeclaration(node) && t2.isObjectExpression(node.declaration) && (exportDefaultNode = node);
      }), exportDefaultNode !== null && (exportDefaultNode.declaration = defineConfigCall);
    } else if (config._exportsObject) {
      let defineConfigCall = t2.callExpression(t2.identifier(methodName), [config._exportsObject]), exportDefaultNode = null, declarationNodeIndex = -1;
      programNode.body.forEach((node) => {
        let declaration = t2.isExportDefaultDeclaration(node) && config._unwrap(node.declaration);
        if (t2.isExportDefaultDeclaration(node) && t2.isIdentifier(declaration)) {
          let declarationName = declaration.name;
          if (declarationNodeIndex = findDeclarationNodeIndex(declarationName), declarationNodeIndex !== -1) {
            exportDefaultNode = node;
            let declarationNode = programNode.body[declarationNodeIndex];
            if (t2.isVariableDeclaration(declarationNode)) {
              let id = declarationNode.declarations[0].id;
              t2.isIdentifier(id) && id.name && programNode.body.splice(declarationNodeIndex, 1);
            }
          }
        } else t2.isExportDefaultDeclaration(node) && t2.isObjectExpression(node.declaration) && (exportDefaultNode = node);
      }), exportDefaultNode !== null && (exportDefaultNode.declaration = defineConfigCall);
    } else if (hasNamedExports) {
      let defineConfigCall = t2.callExpression(t2.identifier(methodName), [
        t2.objectExpression(defineConfigProps)
      ]);
      programNode.body = removeExportDeclarations(programNode, exportDecls), programNode.body.push(t2.exportDefaultDeclaration(defineConfigCall));
    } else if (configType === "preview") {
      let defineConfigCall = t2.callExpression(t2.identifier(methodName), [t2.objectExpression([])]);
      programNode.body.push(t2.exportDefaultDeclaration(defineConfigCall));
    }
  }
  let configImport = t2.importDeclaration(
    [t2.importSpecifier(t2.identifier(methodName), t2.identifier(methodName))],
    t2.stringLiteral(frameworkPackage + `${configType === "main" ? "/node" : ""}`)
  ), existingImport = programNode.body.find(
    (node) => t2.isImportDeclaration(node) && node.importKind !== "type" && node.source.value === configImport.source.value
  );
  existingImport && t2.isImportDeclaration(existingImport) ? existingImport.specifiers.some(
    (specifier) => t2.isImportSpecifier(specifier) && t2.isIdentifier(specifier.imported) && specifier.imported.name === methodName
  ) || existingImport.specifiers.push(
    t2.importSpecifier(t2.identifier(methodName), t2.identifier(methodName))
  ) : addImportToTop(programNode, configImport);
  let disallowList2 = ["StorybookConfig", "Preview"];
  programNode.body = cleanupTypeImports(programNode, disallowList2);
  let output = printConfig(config).code;
  return dryRun ? (logger4.log(`Would write to ${import_picocolors6.default.yellow(info.path)}:
${import_picocolors6.default.green(output)}`), info.source) : skipFormatting ? output : formatFileContent2(info.path, output);
}

// src/codemod/helpers/story-to-csf-factory.ts
import { types as t4, traverse as traverse3 } from "storybook/internal/babel";
import { isValidPreviewPath, loadCsf, printCsf } from "storybook/internal/csf-tools";
import { logger as logger5 } from "storybook/internal/node-logger";
import path2 from "path";

// src/codemod/helpers/remove-unused-types.ts
import { types as t3, traverse as traverse2 } from "storybook/internal/babel";
var typesDisallowList = [
  "Story",
  "StoryFn",
  "StoryObj",
  "Meta",
  "MetaObj",
  "ComponentStory",
  "ComponentMeta"
], disallowedTypesSet = new Set(typesDisallowList);
function removeUnusedTypes(programNode, ast) {
  let declaredTypes = /* @__PURE__ */ new Set(), referencedTypes = /* @__PURE__ */ new Set(), pendingIdentifierNames = /* @__PURE__ */ new Set(), typeDeclReferencesDisallowed = /* @__PURE__ */ new Set();
  traverse2(ast, {
    enter(path4) {
      let node = path4.node;
      if (path4.isTSTypeAliasDeclaration() || path4.isTSInterfaceDeclaration()) {
        let idNode = node.id, name = idNode && t3.isIdentifier(idNode) ? idNode.name : void 0;
        name && (declaredTypes.add(name), pendingIdentifierNames.has(name) && referencedTypes.add(name));
        return;
      }
      if (path4.isIdentifier()) {
        let name = node.name, parentPath = path4.parentPath;
        if (parentPath && (parentPath.isTSTypeAliasDeclaration() || parentPath.isTSInterfaceDeclaration()) && parentPath.node.id === node)
          return;
        declaredTypes.has(name) ? referencedTypes.add(name) : pendingIdentifierNames.add(name);
        return;
      }
      if (path4.isTSTypeReference()) {
        let typeNameNode = node.typeName;
        if (t3.isIdentifier(typeNameNode) && disallowedTypesSet.has(typeNameNode.name)) {
          let owner = path4.findParent(
            (p) => p.isTSTypeAliasDeclaration() || p.isTSInterfaceDeclaration()
          );
          if (owner && (owner.isTSTypeAliasDeclaration() || owner.isTSInterfaceDeclaration())) {
            let ownerId = owner.node.id, ownerName = t3.isIdentifier(ownerId) ? ownerId.name : void 0;
            ownerName && typeDeclReferencesDisallowed.add(ownerName);
          }
        }
        return;
      }
      if (path4.isTSExpressionWithTypeArguments()) {
        let expr = node.expression;
        if (t3.isIdentifier(expr) && disallowedTypesSet.has(expr.name)) {
          let owner = path4.findParent(
            (p) => p.isTSTypeAliasDeclaration() || p.isTSInterfaceDeclaration()
          );
          if (owner && (owner.isTSTypeAliasDeclaration() || owner.isTSInterfaceDeclaration())) {
            let ownerId = owner.node.id, ownerName = t3.isIdentifier(ownerId) ? ownerId.name : void 0;
            ownerName && typeDeclReferencesDisallowed.add(ownerName);
          }
        }
        return;
      }
    }
  }), programNode.body = programNode.body.filter((node) => {
    if (t3.isTSTypeAliasDeclaration(node) || t3.isTSInterfaceDeclaration(node)) {
      let name = node.id.name;
      if (declaredTypes.has(name) && !referencedTypes.has(name) && typeDeclReferencesDisallowed.has(name))
        return !1;
    }
    return !0;
  }), programNode.body = cleanupTypeImports(programNode, typesDisallowList);
}

// src/codemod/helpers/story-to-csf-factory.ts
var reuseDisallowList = ["play", "run", "extends", "story"];
async function storyToCsfFactory(info, { previewConfigPath, useSubPathImports }) {
  let csf = loadCsf(info.source, { makeTitle: () => "FIXME" });
  try {
    csf.parse();
  } catch (err) {
    return logger5.log(`Error when parsing ${info.path}, skipping:
${err}`), info.source;
  }
  let detectedStoryNames = csf.stories.map((story) => story.name), transformedStoryExports = /* @__PURE__ */ new Set(), metaVariableName = csf._metaVariableName ?? "meta", programNode = csf._ast.program, previewImport, hasRootLevelConfig = programNode.body.some(
    (n) => t4.isVariableDeclaration(n) && n.declarations.some((declaration) => t4.isIdentifier(declaration.id, { name: "preview" }))
  ), previewPath = "#.storybook/preview";
  if (!useSubPathImports) {
    let relativePath = path2.relative(path2.dirname(info.path), previewConfigPath), { dir, name } = path2.parse(relativePath);
    previewPath = `${dir ? `${dir}/` : ""}${name}`, previewPath.startsWith(".") || (previewPath = `./${previewPath}`), previewPath = previewPath.replace(/\\/g, "/");
  }
  let sbConfigImportName = hasRootLevelConfig ? "storybookPreview" : "preview", sbConfigImportSpecifier = t4.importDefaultSpecifier(t4.identifier(sbConfigImportName)), namespaceStoryImports = /* @__PURE__ */ new Set(), namedStoryImports = /* @__PURE__ */ new Set();
  programNode.body.forEach((node) => {
    if (t4.isImportDeclaration(node)) {
      let importPath = node.source.value;
      /\.stories(\.(ts|tsx|js|jsx|mjs|mts))?$/.test(importPath) && node.specifiers.forEach((specifier) => {
        t4.isImportNamespaceSpecifier(specifier) ? namespaceStoryImports.add(specifier.local.name) : t4.isImportSpecifier(specifier) ? namedStoryImports.add(specifier.local.name) : t4.isImportDefaultSpecifier(specifier) && namespaceStoryImports.add(specifier.local.name);
      });
    }
    if (t4.isImportDeclaration(node) && isValidPreviewPath(node.source.value)) {
      let defaultImportSpecifier = node.specifiers.find(
        (specifier) => t4.isImportDefaultSpecifier(specifier)
      );
      defaultImportSpecifier ? defaultImportSpecifier.local.name !== sbConfigImportName && (sbConfigImportName = defaultImportSpecifier.local.name) : node.specifiers.push(sbConfigImportSpecifier), previewImport = node;
    }
  });
  let hasMeta = !!csf._meta, storyFileImports = /* @__PURE__ */ new Set([...namespaceStoryImports, ...namedStoryImports]);
  Object.entries(csf._storyExports).forEach(([exportName, decl]) => {
    let id = decl.id, declarator = decl, init = t4.isVariableDeclarator(declarator) ? declarator.init : void 0;
    t4.isIdentifier(id) && init && (id.typeAnnotation && (id.typeAnnotation = null), (t4.isTSSatisfiesExpression(init) || t4.isTSAsExpression(init)) && (init = init.expression), t4.isObjectExpression(init) ? (declarator.init = t4.callExpression(
      t4.memberExpression(t4.identifier(metaVariableName), t4.identifier("story")),
      init.properties.length === 0 ? [] : [init]
    ), t4.isIdentifier(id) && transformedStoryExports.add(exportName)) : t4.isArrowFunctionExpression(init) && (declarator.init = t4.callExpression(
      t4.memberExpression(t4.identifier(metaVariableName), t4.identifier("story")),
      [init]
    ), t4.isIdentifier(id) && transformedStoryExports.add(exportName)));
  }), Object.entries(csf._storyExports).forEach(([exportName, decl]) => {
    if (t4.isFunctionDeclaration(decl) && decl.id) {
      let arrowFn = t4.arrowFunctionExpression(decl.params, decl.body);
      arrowFn.async = !!decl.async;
      let wrappedCall = t4.callExpression(
        t4.memberExpression(t4.identifier(metaVariableName), t4.identifier("story")),
        [arrowFn]
      ), replacement = t4.exportNamedDeclaration(
        t4.variableDeclaration("const", [
          t4.variableDeclarator(t4.identifier(exportName), wrappedCall)
        ])
      ), pathForExport = csf._storyPaths?.[exportName];
      pathForExport && pathForExport.replaceWith && (pathForExport.replaceWith(replacement), transformedStoryExports.add(exportName));
    }
  });
  let storyExportDecls = new Map(
    Object.entries(csf._storyExports).filter(
      (entry) => !t4.isFunctionDeclaration(entry[1])
    )
  );
  if (traverse3(csf._ast, {
    /**
     * Handle SAME-FILE story references.
     *
     * Examples: Primary.args → Primary.input.args meta.args → meta.input.args
     */
    Identifier(nodePath) {
      let identifierName = nodePath.node.name, binding = nodePath.scope.getBinding(identifierName);
      if (binding && storyExportDecls.has(binding.identifier.name) || identifierName === metaVariableName) {
        let parent = nodePath.parent;
        if (t4.isVariableDeclarator(parent) && parent.id === nodePath.node || t4.isImportSpecifier(parent) || t4.isExportSpecifier(parent) || t4.isExportDefaultDeclaration(parent) || t4.isMemberExpression(parent) && t4.isIdentifier(parent.property, { name: "input" }) || t4.isMemberExpression(parent) && t4.isIdentifier(parent.property) && reuseDisallowList.includes(parent.property.name))
          return;
        try {
          nodePath.replaceWith(
            t4.memberExpression(t4.identifier(identifierName), t4.identifier("input"))
          );
        } catch (err) {
          if (err.message.includes('instead got "MemberExpression"'))
            return;
          throw err;
        }
      }
    },
    /**
     * Handle CROSS-FILE story references.
     *
     * When we import stories from another file: import * as BaseStories from './Button.stories';
     *
     * And use them like: BaseStories.Primary.args
     *
     * We need to transform to: BaseStories.Primary.input.args
     *
     * Why? Because the imported file will ALSO be transformed to CSF4, where story properties are
     * accessed via `.input`.
     */
    MemberExpression(nodePath) {
      let node = nodePath.node, innerObject = node.object;
      if (t4.isMemberExpression(innerObject)) {
        let importName = innerObject.object, storyName = innerObject.property, accessedProperty = node.property;
        if (t4.isIdentifier(importName) && storyFileImports.has(importName.name) && t4.isIdentifier(storyName)) {
          if (t4.isIdentifier(storyName, { name: "input" }) || !t4.isIdentifier(accessedProperty) || accessedProperty.name === "input" || reuseDisallowList.includes(accessedProperty.name))
            return;
          nodePath.node.object = t4.memberExpression(innerObject, t4.identifier("input")), nodePath.skip();
        }
      }
      if (t4.isIdentifier(innerObject) && namedStoryImports.has(innerObject.name)) {
        let accessedProperty = node.property;
        if (!t4.isIdentifier(accessedProperty) || accessedProperty.name === "input" || reuseDisallowList.includes(accessedProperty.name))
          return;
        nodePath.replaceWith(
          t4.memberExpression(
            t4.memberExpression(innerObject, t4.identifier("input")),
            accessedProperty
          )
        ), nodePath.skip();
        return;
      }
      if (t4.isIdentifier(innerObject) && namespaceStoryImports.has(innerObject.name)) {
        let storyName = node.property;
        if (t4.isIdentifier(storyName, { name: "input" }))
          return;
        let parent = nodePath.parent;
        t4.isSpreadElement(parent) && (nodePath.replaceWith(t4.memberExpression(node, t4.identifier("input"))), nodePath.skip());
      }
    }
  }), transformedStoryExports.size === 0)
    return logger5.warn(
      `Skipping codemod for ${info.path}: no stories were transformed. Either there are no stories, file has been already transformed or some stories are written in an unsupported format.`
    ), info.source;
  if (detectedStoryNames.length > 0 && transformedStoryExports.size !== detectedStoryNames.length)
    return logger5.warn(
      `Skipping codemod for ${info.path}:
Some of the detected stories [${detectedStoryNames.map((name) => `"${name}"`).join(", ")}] would not be transformed because they are written in an unsupported format.`
    ), info.source;
  if (csf._metaPath) {
    let declaration = csf._metaPath.node.declaration;
    if ((t4.isTSSatisfiesExpression(declaration) || t4.isTSAsExpression(declaration)) && (declaration = declaration.expression), t4.isObjectExpression(declaration)) {
      let metaVariable = t4.variableDeclaration("const", [
        t4.variableDeclarator(
          t4.identifier(metaVariableName),
          t4.callExpression(
            t4.memberExpression(t4.identifier(sbConfigImportName), t4.identifier("meta")),
            [declaration]
          )
        )
      ]);
      csf._metaPath.replaceWith(metaVariable);
    } else if (t4.isIdentifier(declaration)) {
      let binding = csf._metaPath.scope.getBinding(declaration.name);
      if (binding && binding.path.isVariableDeclarator()) {
        let originalName = declaration.name;
        binding.path.node.id = t4.identifier(metaVariableName);
        let init = binding.path.node.init;
        (t4.isTSSatisfiesExpression(init) || t4.isTSAsExpression(init)) && (init = init.expression), t4.isObjectExpression(init) && (binding.path.node.init = t4.callExpression(
          t4.memberExpression(t4.identifier(sbConfigImportName), t4.identifier("meta")),
          [init]
        )), csf._metaPath.scope.rename(originalName, metaVariableName);
      }
      csf._metaPath.remove();
    }
  }
  if (previewImport)
    previewImport.source.value !== previewPath && (previewImport.source = t4.stringLiteral(previewPath));
  else if (hasMeta) {
    let configImport = t4.importDeclaration(
      [t4.importDefaultSpecifier(t4.identifier(sbConfigImportName))],
      t4.stringLiteral(previewPath)
    );
    addImportToTop(programNode, configImport);
  }
  return removeUnusedTypes(programNode, csf._ast), printCsf(csf).code;
}

// src/codemod/csf-factories.ts
async function runStoriesCodemod(options) {
  let { dryRun, packageManager, yes, glob, ...codemodOptions } = options;
  try {
    let inSandbox = optionalEnvToBoolean(process.env.IN_STORYBOOK_SANDBOX) ?? !1, globString = glob ?? "**/*.{stories,story}.{js,jsx,ts,tsx,mjs,mjsx,mts,mtsx}";
    !glob && inSandbox ? globString = "{stories,src}/**/{Button,Header,Page,button,header,page}.stories.*" : !glob && !yes && (logger6.log("Please enter the glob for your stories to migrate"), globString = await prompt2.text({
      message: "glob",
      initialValue: globString
    })), logger6.step("Applying codemod on your stories, this might take some time..."), await packageManager.runPackageCommand({
      args: ["storybook", "migrate", "csf-2-to-3", `--glob="${globString}"`]
    }), await runCodemod(globString, (info) => storyToCsfFactory(info, codemodOptions), {
      dryRun
    });
  } catch (err) {
    if (err.message === "No files matched")
      await runStoriesCodemod(options);
    else
      throw err;
  }
}
var csfFactories = {
  id: "csf-factories",
  promptType: "command",
  async run({
    dryRun,
    mainConfig,
    mainConfigPath,
    previewConfigPath,
    packageManager,
    configDir,
    yes,
    glob
  }) {
    let inSandbox = optionalEnvToBoolean(process.env.IN_STORYBOOK_SANDBOX) ?? !1, useSubPathImports = inSandbox;
    !yes && !inSandbox && (logger6.logBox(dedent3`
        The CSF Factories format can benefit from using absolute imports of your ${import_picocolors7.default.cyan(previewConfigPath)} file. We can configure that for you, using subpath imports (a node standard), by adjusting the imports property of your package.json.
        
        However, we cannot broadly recommend it for all projects, because it might not work in some monorepo setups or if you have an outdated tsconfig, use custom paths, or have type alias plugins configured in your project. You can always rerun this codemod and select another option to update your code later.
        
        More info: ${import_picocolors7.default.yellow("https://storybook.js.org/docs/api/csf/csf-next?ref=upgrade#previewmeta")}
      `), useSubPathImports = await prompt2.select({
      message: "Which import type would you like to use for your story files?",
      options: [
        {
          label: "Relative imports (import preview from '../../.storybook/preview')",
          value: !1
        },
        { label: "Subpath imports (import preview from '#.storybook/preview')", value: !0 }
      ]
    }));
    let { packageJson } = packageManager.primaryPackageJson;
    useSubPathImports && !packageJson.imports?.["#*"] && (logger6.step(
      `Adding imports map in ${import_picocolors7.default.cyan(packageManager.primaryPackageJson.packageJsonPath)}`
    ), packageJson.imports = {
      ...packageJson.imports,
      "#*": ["./*", "./*.ts", "./*.tsx", "./*.js", "./*.jsx"]
    }, packageManager.writePackageJson(packageJson)), await runStoriesCodemod({
      dryRun,
      packageManager,
      useSubPathImports,
      previewConfigPath,
      yes,
      glob
    }), logger6.step("Applying codemod on your main config...");
    let frameworkPackage = getFrameworkPackageName(mainConfig) || "@storybook/your-framework-here";
    await runCodemod(
      mainConfigPath,
      (fileInfo) => configToCsfFactory(fileInfo, { configType: "main", frameworkPackage }, { dryRun })
    ), logger6.step("Applying codemod on your preview config..."), await runCodemod(
      previewConfigPath,
      (fileInfo) => configToCsfFactory(fileInfo, { configType: "preview", frameworkPackage }, { dryRun })
    ), await syncStorybookAddons(mainConfig, previewConfigPath, configDir), logger6.logBox(
      dedent3`
          You can now run Storybook with the new CSF factories format.
          
          For more info, check out the docs:
          ${import_picocolors7.default.yellow("https://storybook.js.org/docs/api/csf/csf-next?ref=upgrade")}
        `
    );
  }
};

// src/automigrate/fixes/addon-a11y-addon-test.ts
var import_picocolors8 = __toESM(require_picocolors(), 1);
import { formatFileContent as formatFileContent3, frameworkPackages as frameworkPackages3, getAddonNames } from "storybook/internal/common";
import { formatConfig, loadConfig as loadConfig2 } from "storybook/internal/csf-tools";
import { existsSync, readFileSync, writeFileSync } from "fs";
import jscodeshift from "jscodeshift";
import path3 from "path";
import { dedent as dedent4 } from "ts-dedent";
var fileExtensions = [
  ".js",
  ".ts",
  ".cts",
  ".mts",
  ".cjs",
  ".mjs",
  ".jsx",
  ".tsx"
], addonA11yAddonTest = {
  id: "addon-a11y-addon-test",
  link: "https://storybook.js.org/docs/writing-tests/accessibility-testing#with-the-vitest-addon",
  promptType: "auto",
  async check({ mainConfig, configDir, hasCsfFactoryPreview }) {
    let addons = getAddonNames(mainConfig), frameworkPackageName = getFrameworkPackageName(mainConfig), hasA11yAddon = !!addons.find((addon) => addon.includes("@storybook/addon-a11y")), hasTestAddon = !!addons.find((addon) => addon.includes("@storybook/addon-vitest"));
    if (!Object.keys(frameworkPackages3).find((framework) => frameworkPackageName?.includes(framework)) || !hasA11yAddon || !hasTestAddon || !configDir)
      return null;
    let vitestSetupFile = fileExtensions.map((ext) => path3.join(configDir, `vitest.setup${ext}`)).find((filePath) => existsSync(filePath)) ?? null, previewFile = fileExtensions.map((ext) => path3.join(configDir, `preview${ext}`)).find((filePath) => existsSync(filePath)) ?? null, skipVitestSetupTransformation = hasCsfFactoryPreview || !vitestSetupFile, skipPreviewTransformation = !1;
    if (vitestSetupFile && !skipVitestSetupTransformation)
      try {
        skipVitestSetupTransformation = readFileSync(vitestSetupFile, "utf8").includes("@storybook/addon-a11y");
      } catch {
      }
    if (previewFile)
      try {
        let previewSetupSource = readFileSync(previewFile, "utf8");
        skipPreviewTransformation = !shouldPreviewFileBeTransformed(previewSetupSource);
      } catch {
      }
    if (skipVitestSetupTransformation && skipPreviewTransformation)
      return null;
    let getTransformedSetupCode = () => {
      if (!vitestSetupFile || skipVitestSetupTransformation)
        return null;
      try {
        let vitestSetupSource = readFileSync(vitestSetupFile, "utf8");
        return transformSetupFile(vitestSetupSource);
      } catch {
        return null;
      }
    }, getTransformedPreviewCode = () => {
      if (!previewFile || skipPreviewTransformation)
        return null;
      try {
        let previewSetupSource = readFileSync(previewFile, "utf8");
        return transformPreviewFile(previewSetupSource, previewFile);
      } catch {
        return null;
      }
    };
    return {
      setupFile: vitestSetupFile,
      previewFile,
      transformedSetupCode: getTransformedSetupCode(),
      transformedPreviewCode: await getTransformedPreviewCode(),
      skipVitestSetupTransformation,
      skipPreviewTransformation
    };
  },
  prompt() {
    return "We have detected that you have @storybook/addon-a11y and @storybook/addon-vitest installed. The automigration will configure both for the new testing experience";
  },
  async run({ result }) {
    let counter = 1, {
      transformedSetupCode,
      skipPreviewTransformation,
      skipVitestSetupTransformation,
      setupFile,
      previewFile,
      transformedPreviewCode
    } = result, errorMessage = [];
    if (skipVitestSetupTransformation || transformedSetupCode === null && setupFile && errorMessage.push(dedent4`
          ${counter++}) We couldn't find or automatically update ${import_picocolors8.default.cyan(".storybook/vitest.setup.<ts|js>")} in your project to smoothly set up project annotations from ${import_picocolors8.default.magenta("@storybook/addon-a11y")}. 
          Please manually update your ${import_picocolors8.default.cyan("vitest.setup.ts")} file to include the following:

          ${import_picocolors8.default.gray("...")}   
          ${import_picocolors8.default.green('+ import * as a11yAddonAnnotations from "@storybook/addon-a11y/preview";')}

          ${import_picocolors8.default.gray("setProjectAnnotations([")}
          ${import_picocolors8.default.gray("  ...")}
          ${import_picocolors8.default.green("+ a11yAddonAnnotations,")}
          ${import_picocolors8.default.gray("]);")}
        `), skipPreviewTransformation || transformedPreviewCode === null && errorMessage.push(dedent4`
          ${counter++}) We couldn't find or automatically update your .storybook/preview.<ts|js> in your project to smoothly set up ${import_picocolors8.default.cyan("parameters.a11y.test")} from @storybook/addon-a11y. Please manually update your .storybook/preview.<ts|js> file to include the following:

          ${import_picocolors8.default.gray("export default {")}
          ${import_picocolors8.default.gray("  ...")}
          ${import_picocolors8.default.gray("  parameters: {")}
          ${import_picocolors8.default.green("+   a11y: {")}
          ${import_picocolors8.default.gray('+      test: "todo"')}
          ${import_picocolors8.default.green("+   }")}
          ${import_picocolors8.default.gray("  }")}
          ${import_picocolors8.default.gray("}")}
        `), errorMessage.length > 0)
      throw new Error(
        dedent4`The ${this.id} automigration couldn't make the changes but here are instructions for doing them yourself:\n${errorMessage.join(`
`)}`
      );
    transformedSetupCode && setupFile && writeFileSync(setupFile, transformedSetupCode, "utf8"), transformedPreviewCode && previewFile && writeFileSync(previewFile, transformedPreviewCode, "utf8");
  }
};
function transformSetupFile(source) {
  let j = jscodeshift.withParser("ts"), root = j(source), importDeclaration = j.importDeclaration(
    [j.importNamespaceSpecifier(j.identifier("a11yAddonAnnotations"))],
    j.literal("@storybook/addon-a11y/preview")
  ), setProjectAnnotationsCall = root.find(j.CallExpression, {
    callee: {
      type: "Identifier",
      name: "setProjectAnnotations"
    }
  });
  if (setProjectAnnotationsCall.length === 0)
    throw new Error("Could not find setProjectAnnotations call in vitest.setup file");
  return setProjectAnnotationsCall.forEach((p) => {
    if (p.value.arguments.length === 1 && p.value.arguments[0].type === "ArrayExpression")
      p.value.arguments[0].elements.unshift(j.identifier("a11yAddonAnnotations"));
    else if (p.value.arguments.length === 1 && p.value.arguments[0].type === "Identifier") {
      let arg = p.value.arguments[0];
      p.value.arguments[0] = j.arrayExpression([j.identifier("a11yAddonAnnotations"), arg]);
    }
  }), root.get().node.program.body.unshift(importDeclaration), root.toSource();
}
function transformPreviewFile(source, filePath) {
  if (!shouldPreviewFileBeTransformed(source))
    return source;
  let previewConfig = loadConfig2(source).parse();
  previewConfig.setFieldValue(["parameters", "a11y", "test"], "todo");
  let formattedPreviewConfig = formatConfig(previewConfig), lines = formattedPreviewConfig.split(`
`), parametersLineIndex = lines.findIndex(
    (line) => line.includes('test: "todo"') || line.includes("test: 'todo'")
  );
  if (parametersLineIndex === -1)
    return formattedPreviewConfig;
  let indentation = lines[parametersLineIndex]?.match(/^\s*/)?.[0], comment = `${indentation}// 'todo' - show a11y violations in the test UI only
${indentation}// 'error' - fail CI on a11y violations
${indentation}// 'off' - skip a11y checks entirely`;
  return lines.splice(parametersLineIndex, 0, comment), formatFileContent3(filePath, lines.join(`
`));
}
function shouldPreviewFileBeTransformed(source) {
  return !loadConfig2(source).parse().getFieldNode(["parameters", "a11y", "test"]);
}

// src/automigrate/fixes/angular-to-angular-vite.ts
import { readFile, writeFile as writeFile2 } from "node:fs/promises";
import { types as t6 } from "storybook/internal/babel";
import {
  ANALOG_VITE_PLUGIN_ANGULAR_VERSION,
  AngularJSON,
  editJsonText as editJsonText2,
  isStorybookTarget as isStorybookTarget2,
  toDevkitVersion
} from "storybook/internal/cli";
import { formatFileContent as formatFileContent5, getProjectRoot as getProjectRoot2, transformImportFiles } from "storybook/internal/common";
import { formatConfig as formatConfig3, readConfig as readConfig3 } from "storybook/internal/csf-tools";
import { logger as logger8, prompt as prompt3 } from "storybook/internal/node-logger";

// ../../../node_modules/empathic/find.mjs
import { join as join3 } from "node:path";
import { existsSync as existsSync2, statSync } from "node:fs";
function any(names, options) {
  let dir, start = options && options.cwd || "", j = 0, len = names.length, tmp;
  for (dir of up(start, options))
    for (j = 0; j < len; j++)
      if (tmp = join3(dir, names[j]), existsSync2(tmp)) return tmp;
}

// ../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
var _lazyMatch = () => {
  var __lib__ = (() => {
    var m = Object.defineProperty, V = Object.getOwnPropertyDescriptor, G = Object.getOwnPropertyNames, T = Object.prototype.hasOwnProperty, q = (r, e) => {
      for (var n in e) m(r, n, { get: e[n], enumerable: !0 });
    }, H = (r, e, n, a) => {
      if (e && typeof e == "object" || typeof e == "function") for (let t12 of G(e)) !T.call(r, t12) && t12 !== n && m(r, t12, { get: () => e[t12], enumerable: !(a = V(e, t12)) || a.enumerable });
      return r;
    }, J = (r) => H(m({}, "__esModule", { value: !0 }), r), w = {};
    q(w, { default: () => re });
    var A = (r) => Array.isArray(r), d = (r) => typeof r == "function", Q = (r) => r.length === 0, W = (r) => typeof r == "number", K = (r) => typeof r == "object" && r !== null, X = (r) => r instanceof RegExp, b = (r) => typeof r == "string", h = (r) => r === void 0, Y = (r) => {
      let e = /* @__PURE__ */ new Map();
      return (n) => {
        let a = e.get(n);
        if (a) return a;
        let t12 = r(n);
        return e.set(n, t12), t12;
      };
    }, rr = (r, e, n = {}) => {
      let a = { cache: {}, input: r, index: 0, indexMax: 0, options: n, output: [] };
      if (v(e)(a) && a.index === r.length) return a.output;
      throw new Error(`Failed to parse at index ${a.indexMax}`);
    }, i = (r, e) => A(r) ? er(r, e) : b(r) ? ar(r, e) : nr(r, e), er = (r, e) => {
      let n = {};
      for (let a of r) {
        if (a.length !== 1) throw new Error(`Invalid character: "${a}"`);
        let t12 = a.charCodeAt(0);
        n[t12] = !0;
      }
      return (a) => {
        let t12 = a.index, o = a.input;
        for (; a.index < o.length && o.charCodeAt(a.index) in n; ) a.index += 1;
        let u = a.index;
        if (u > t12) {
          if (!h(e) && !a.options.silent) {
            let s = a.input.slice(t12, u), c = d(e) ? e(s, o, String(t12)) : e;
            h(c) || a.output.push(c);
          }
          a.indexMax = Math.max(a.indexMax, a.index);
        }
        return !0;
      };
    }, nr = (r, e) => {
      let n = r.source, a = r.flags.replace(/y|$/, "y"), t12 = new RegExp(n, a);
      return g((o) => {
        t12.lastIndex = o.index;
        let u = t12.exec(o.input);
        if (u) {
          if (!h(e) && !o.options.silent) {
            let s = d(e) ? e(...u, o.input, String(o.index)) : e;
            h(s) || o.output.push(s);
          }
          return o.index += u[0].length, o.indexMax = Math.max(o.indexMax, o.index), !0;
        } else return !1;
      });
    }, ar = (r, e) => (n) => {
      if (n.input.startsWith(r, n.index)) {
        if (!h(e) && !n.options.silent) {
          let t12 = d(e) ? e(r, n.input, String(n.index)) : e;
          h(t12) || n.output.push(t12);
        }
        return n.index += r.length, n.indexMax = Math.max(n.indexMax, n.index), !0;
      } else return !1;
    }, C = (r, e, n, a) => {
      let t12 = v(r);
      return g(_(M((o) => {
        let u = 0;
        for (; u < n; ) {
          let s = o.index;
          if (!t12(o) || (u += 1, o.index === s)) break;
        }
        return u >= e;
      })));
    }, tr = (r, e) => C(r, 0, 1), f = (r, e) => C(r, 0, 1 / 0), x = (r, e) => {
      let n = r.map(v);
      return g(_(M((a) => {
        for (let t12 = 0, o = n.length; t12 < o; t12++) if (!n[t12](a)) return !1;
        return !0;
      })));
    }, l = (r, e) => {
      let n = r.map(v);
      return g(_((a) => {
        for (let t12 = 0, o = n.length; t12 < o; t12++) if (n[t12](a)) return !0;
        return !1;
      }));
    }, M = (r, e = !1) => {
      let n = v(r);
      return (a) => {
        let t12 = a.index, o = a.output.length, u = n(a);
        return (!u || e) && (a.index = t12, a.output.length !== o && (a.output.length = o)), u;
      };
    }, _ = (r, e) => v(r), g = /* @__PURE__ */ (() => {
      let r = 0;
      return (e) => {
        let n = v(e), a = r += 1;
        return (t12) => {
          var o;
          if (t12.options.memoization === !1) return n(t12);
          let u = t12.index, s = (o = t12.cache)[a] || (o[a] = /* @__PURE__ */ new Map()), c = s.get(u);
          if (c === !1) return !1;
          if (W(c)) return t12.index = c, !0;
          if (c) return t12.index = c.index, c.output?.length && t12.output.push(...c.output), !0;
          {
            let Z = t12.output.length;
            if (n(t12)) {
              let D = t12.index, U = t12.output.length;
              if (U > Z) {
                let ee = t12.output.slice(Z, U);
                s.set(u, { index: D, output: ee });
              } else s.set(u, D);
              return !0;
            } else return s.set(u, !1), !1;
          }
        };
      };
    })(), E = (r) => {
      let e;
      return (n) => (e || (e = v(r())), e(n));
    }, v = Y((r) => {
      if (d(r)) return Q(r) ? E(r) : r;
      if (b(r) || X(r)) return i(r);
      if (A(r)) return x(r);
      if (K(r)) return l(Object.values(r));
      throw new Error("Invalid rule");
    }), P = "abcdefghijklmnopqrstuvwxyz", ir = (r) => {
      let e = "";
      for (; r > 0; ) {
        let n = (r - 1) % 26;
        e = P[n] + e, r = Math.floor((r - 1) / 26);
      }
      return e;
    }, O = (r) => {
      let e = 0;
      for (let n = 0, a = r.length; n < a; n++) e = e * 26 + P.indexOf(r[n]) + 1;
      return e;
    }, S = (r, e) => {
      if (e < r) return S(e, r);
      let n = [];
      for (; r <= e; ) n.push(r++);
      return n;
    }, or = (r, e, n) => S(r, e).map((a) => String(a).padStart(n, "0")), R = (r, e) => S(O(r), O(e)).map(ir), p = (r) => r, z = (r) => ur((e) => rr(e, r, { memoization: !1 }).join("")), ur = (r) => {
      let e = {};
      return (n) => e[n] ?? (e[n] = r(n));
    }, sr = i(/^\*\*\/\*$/, ".*"), cr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]+)$/, (r, e, n) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}`), lr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]*)\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\}$/, (r, e, n, a) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}(?:${a.replaceAll(",", "|").replaceAll(".", "\\.")})`), y = i(/\\./, p), pr = i(/[$.*+?^(){}[\]\|]/, (r) => `\\${r}`), vr = i(/./, p), hr = i(/^(?:!!)*!(.*)$/, (r, e) => `(?!^${L(e)}$).*?`), dr = i(/^(!!)+/, ""), fr = l([hr, dr]), xr = i(/\/(\*\*\/)+/, "(?:/.+/|/)"), gr = i(/^(\*\*\/)+/, "(?:^|.*/)"), mr = i(/\/(\*\*)$/, "(?:/.*|$)"), _r = i(/\*\*/, ".*"), j = l([xr, gr, mr, _r]), Sr = i(/\*\/(?!\*\*\/)/, "[^/]*/"), yr = i(/\*/, "[^/]*"), N = l([Sr, yr]), k = i("?", "[^/]"), $r = i("[", p), wr = i("]", p), Ar = i(/[!^]/, "^/"), br = i(/[a-z]-[a-z]|[0-9]-[0-9]/i, p), Cr = i(/[$.*+?^(){}[\|]/, (r) => `\\${r}`), Mr = i(/[^\]]/, p), Er = l([y, Cr, br, Mr]), B = x([$r, tr(Ar), f(Er), wr]), Pr = i("{", "(?:"), Or = i("}", ")"), Rr = i(/(\d+)\.\.(\d+)/, (r, e, n) => or(+e, +n, Math.min(e.length, n.length)).join("|")), zr = i(/([a-z]+)\.\.([a-z]+)/, (r, e, n) => R(e, n).join("|")), jr = i(/([A-Z]+)\.\.([A-Z]+)/, (r, e, n) => R(e.toLowerCase(), n.toLowerCase()).join("|").toUpperCase()), Nr = l([Rr, zr, jr]), I = x([Pr, Nr, Or]), kr = i("{", "(?:"), Br = i("}", ")"), Ir = i(",", "|"), Fr = i(/[$.*+?^(){[\]\|]/, (r) => `\\${r}`), Lr = i(/[^}]/, p), Zr = E(() => F), Dr = l([j, N, k, B, I, Zr, y, Fr, Ir, Lr]), F = x([kr, f(Dr), Br]), Ur = f(l([sr, cr, lr, fr, j, N, k, B, I, F, y, pr, vr])), Vr = Ur, Gr = z(Vr), L = Gr, Tr = i(/\\./, p), qr = i(/./, p), Hr = i(/\*\*\*+/, "*"), Jr = i(/([^/{[(!])\*\*/, (r, e) => `${e}*`), Qr = i(/(^|.)\*\*(?=[^*/)\]}])/, (r, e) => `${e}*`), Wr = f(l([Tr, Hr, Jr, Qr, qr])), Kr = Wr, Xr = z(Kr), Yr = Xr, $ = (r, e) => {
      let n = Array.isArray(r) ? r : [r];
      if (!n.length) return !1;
      let a = n.map($.compile), t12 = n.every((s) => /(\/(?:\*\*)?|\[\/\])$/.test(s)), o = e.replace(/[\\\/]+/g, "/").replace(/\/$/, t12 ? "/" : "");
      return a.some((s) => s.test(o));
    };
    $.compile = (r) => new RegExp(`^${L(Yr(r))}$`, "s");
    var re = $;
    return J(w);
  })();
  return __lib__.default || __lib__;
}, _match, zeptomatch = (path4, pattern) => (_match || (_match = _lazyMatch(), _lazyMatch = null), _match(path4, pattern)), _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
function normalizeWindowsPath(input = "") {
  return input && input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
}
var _UNC_REGEX = /^[/\\]{2}/, _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/, _DRIVE_LETTER_RE = /^[A-Za-z]:$/, _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/, _EXTNAME_RE = /.(\.[^./]+|\.)$/, _PATH_ROOT_RE = /^[/\\]|^[a-zA-Z]:[/\\]/, sep2 = "/", normalize2 = function(path4) {
  if (path4.length === 0)
    return ".";
  path4 = normalizeWindowsPath(path4);
  let isUNCPath = path4.match(_UNC_REGEX), isPathAbsolute = isAbsolute2(path4), trailingSeparator = path4[path4.length - 1] === "/";
  return path4 = normalizeString2(path4, !isPathAbsolute), path4.length === 0 ? isPathAbsolute ? "/" : trailingSeparator ? "./" : "." : (trailingSeparator && (path4 += "/"), _DRIVE_LETTER_RE.test(path4) && (path4 += "/"), isUNCPath ? isPathAbsolute ? `//${path4}` : `//./${path4}` : isPathAbsolute && !isAbsolute2(path4) ? `/${path4}` : path4);
}, join4 = function(...segments) {
  let path4 = "";
  for (let seg of segments)
    if (seg)
      if (path4.length > 0) {
        let pathTrailing = path4[path4.length - 1] === "/", segLeading = seg[0] === "/";
        pathTrailing && segLeading ? path4 += seg.slice(1) : path4 += pathTrailing || segLeading ? seg : `/${seg}`;
      } else
        path4 += seg;
  return normalize2(path4);
};
function cwd() {
  return typeof process < "u" && typeof process.cwd == "function" ? process.cwd().replace(/\\/g, "/") : "/";
}
var resolve2 = function(...arguments_) {
  arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
  let resolvedPath = "", resolvedAbsolute = !1;
  for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
    let path4 = index >= 0 ? arguments_[index] : cwd();
    !path4 || path4.length === 0 || (resolvedPath = `${path4}/${resolvedPath}`, resolvedAbsolute = isAbsolute2(path4));
  }
  return resolvedPath = normalizeString2(resolvedPath, !resolvedAbsolute), resolvedAbsolute && !isAbsolute2(resolvedPath) ? `/${resolvedPath}` : resolvedPath.length > 0 ? resolvedPath : ".";
};
function normalizeString2(path4, allowAboveRoot) {
  let res = "", lastSegmentLength = 0, lastSlash = -1, dots = 0, char = null;
  for (let index = 0; index <= path4.length; ++index) {
    if (index < path4.length)
      char = path4[index];
    else {
      if (char === "/")
        break;
      char = "/";
    }
    if (char === "/") {
      if (!(lastSlash === index - 1 || dots === 1)) if (dots === 2) {
        if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
          if (res.length > 2) {
            let lastSlashIndex = res.lastIndexOf("/");
            lastSlashIndex === -1 ? (res = "", lastSegmentLength = 0) : (res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf("/")), lastSlash = index, dots = 0;
            continue;
          } else if (res.length > 0) {
            res = "", lastSegmentLength = 0, lastSlash = index, dots = 0;
            continue;
          }
        }
        allowAboveRoot && (res += res.length > 0 ? "/.." : "..", lastSegmentLength = 2);
      } else
        res.length > 0 ? res += `/${path4.slice(lastSlash + 1, index)}` : res = path4.slice(lastSlash + 1, index), lastSegmentLength = index - lastSlash - 1;
      lastSlash = index, dots = 0;
    } else char === "." && dots !== -1 ? ++dots : dots = -1;
  }
  return res;
}
var isAbsolute2 = function(p) {
  return _IS_ABSOLUTE_RE.test(p);
}, toNamespacedPath2 = function(p) {
  return normalizeWindowsPath(p);
}, extname2 = function(p) {
  if (p === "..") return "";
  let match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
  return match && match[1] || "";
}, relative2 = function(from, to) {
  let _from = resolve2(from).replace(_ROOT_FOLDER_RE, "$1").split("/"), _to = resolve2(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
  if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0])
    return _to.join("/");
  let _fromCopy = [..._from];
  for (let segment of _fromCopy) {
    if (_to[0] !== segment)
      break;
    _from.shift(), _to.shift();
  }
  return [..._from.map(() => ".."), ..._to].join("/");
}, dirname2 = function(p) {
  let segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
  return segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0]) && (segments[0] += "/"), segments.join("/") || (isAbsolute2(p) ? "/" : ".");
}, format3 = function(p) {
  let ext = p.ext ? p.ext.startsWith(".") ? p.ext : `.${p.ext}` : "", segments = [p.root, p.dir, p.base ?? (p.name ?? "") + ext].filter(
    Boolean
  );
  return normalizeWindowsPath(
    p.root ? resolve2(...segments) : segments.join("/")
  );
}, basename2 = function(p, extension) {
  let segments = normalizeWindowsPath(p).split("/"), lastSegment = "";
  for (let i = segments.length - 1; i >= 0; i--) {
    let val = segments[i];
    if (val) {
      lastSegment = val;
      break;
    }
  }
  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
}, parse2 = function(p) {
  let root = _PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\/g, "/") || "", base = basename2(p), extension = extname2(base);
  return {
    root,
    dir: dirname2(p),
    base,
    ext: extension,
    name: base.slice(0, base.length - extension.length)
  };
}, matchesGlob = (path4, pattern) => zeptomatch(pattern, normalize2(path4)), _path = {
  __proto__: null,
  basename: basename2,
  dirname: dirname2,
  extname: extname2,
  format: format3,
  isAbsolute: isAbsolute2,
  join: join4,
  matchesGlob,
  normalize: normalize2,
  normalizeString: normalizeString2,
  parse: parse2,
  relative: relative2,
  resolve: resolve2,
  sep: sep2,
  toNamespacedPath: toNamespacedPath2
};

// ../../../node_modules/pathe/dist/index.mjs
var delimiter2 = globalThis.process?.platform === "win32" ? ";" : ":", _platforms = { posix: void 0, win32: void 0 }, mix = (del = delimiter2) => new Proxy(_path, {
  get(_, prop) {
    return prop === "delimiter" ? del : prop === "posix" ? posix : prop === "win32" ? win322 : _platforms[prop] || _path[prop];
  }
}), posix = mix(":"), win322 = mix(";");

// src/automigrate/fixes/angular-to-angular-vite.ts
var import_semver5 = __toESM(require_semver(), 1);
import { dedent as dedent6 } from "ts-dedent";

// src/automigrate/fixes/angular-workspace.ts
import { getProjectRoot } from "storybook/internal/common";
var asObject = (value) => typeof value == "object" && value !== null && !Array.isArray(value) ? value : void 0, getTargetGroups = (json) => {
  let root = asObject(json), groups = [];
  for (let [projectName, projectValue] of Object.entries(asObject(root?.projects) ?? {})) {
    let project = asObject(projectValue);
    for (let key of ["architect", "targets"]) {
      let targets2 = asObject(project?.[key]);
      targets2 && groups.push({ pathPrefix: ["projects", projectName, key], targets: targets2 });
    }
  }
  let targets = asObject(root?.targets);
  return targets && groups.push({ pathPrefix: ["targets"], targets }), groups;
}, findWorkspaceFiles = async (basename5) => {
  let { globby } = await import("./globby-VIFFPMQ3.js");
  return globby([`**/${basename5}`], {
    cwd: getProjectRoot(),
    ignore: ["**/node_modules/**", "**/dist/**", "**/storybook-static/**"],
    absolute: !0
  });
};

// src/automigrate/fixes/angular-vite-remove-compodoc.ts
import { writeFile } from "node:fs/promises";
import { babelParse, traverse as traverse4, types as t5 } from "storybook/internal/babel";
import { editJsonText, isStorybookTarget } from "storybook/internal/cli";
import { formatFileContent as formatFileContent4 } from "storybook/internal/common";
import { formatConfig as formatConfig2, readConfig as readConfig2 } from "storybook/internal/csf-tools";
import { logger as logger7 } from "storybook/internal/node-logger";
import { existsSync as existsSync3, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
import { dedent as dedent5 } from "ts-dedent";
var COMPODOC_PACKAGE = "@compodoc/compodoc", SET_COMPODOC_JSON = "setCompodocJson", ADDON_DOCS_ANGULAR = "@storybook/addon-docs/angular", ANGULAR_VITE_PACKAGE = "@storybook/angular-vite", COMPODOC_OPTIONS = ["compodoc", "compodocArgs"], optionPathsOf = (prefix2, targetName, target) => {
  let pathsIn = (containerPath, options) => options && typeof options == "object" ? COMPODOC_OPTIONS.filter((option) => option in options).map((option) => [
    ...containerPath,
    option
  ]) : [];
  return [
    ...pathsIn([...prefix2, targetName, "options"], target?.options),
    ...Object.entries(target?.configurations ?? {}).flatMap(
      ([name, options]) => pathsIn([...prefix2, targetName, "configurations", name], options)
    )
  ];
}, isOwnedBy = (target, builderPackages) => builderPackages.some((builderPackage) => isStorybookTarget(target, builderPackage)), declaredStorybookTargets = (json) => [
  ...getTargetGroups(json).flatMap(({ targets }) => Object.values(targets)),
  ...Object.entries(json?.targetDefaults ?? {}).flatMap(([targetName, target]) => [
    target,
    { executor: targetName }
  ])
], ownsTargetDefault = (targetName, target, builderPackages, everyStorybookTargetIsOwned) => {
  let keyAsRef = { executor: targetName };
  return isStorybookTarget(target) || isStorybookTarget(keyAsRef) ? isOwnedBy(target, builderPackages) || isOwnedBy(keyAsRef, builderPackages) : everyStorybookTargetIsOwned;
}, compodocOptionPaths = (json, builderPackages, everyStorybookTargetIsOwned) => {
  let fromTargets = getTargetGroups(json).flatMap(
    ({ pathPrefix, targets }) => Object.entries(targets).flatMap(
      ([targetName, target]) => isOwnedBy(target, builderPackages) ? optionPathsOf(pathPrefix, targetName, target) : []
    )
  ), targetDefaults = json?.targetDefaults, fromTargetDefaults = targetDefaults && typeof targetDefaults == "object" ? Object.entries(targetDefaults).flatMap(
    ([targetName, target]) => ownsTargetDefault(targetName, target, builderPackages, everyStorybookTargetIsOwned) ? optionPathsOf(["targetDefaults"], targetName, target) : []
  ) : [];
  return [...fromTargets, ...fromTargetDefaults];
}, readJson = (filePath) => {
  try {
    return JSON.parse(readFileSync2(filePath, "utf8"));
  } catch {
    return null;
  }
}, DOCUMENTATION_JSON = /(^|[/\\])documentation\.json$/, isModuleSource = (literal, parent) => t5.isImportDeclaration(parent) || t5.isExportNamedDeclaration(parent) || t5.isExportAllDeclaration(parent) || t5.isCallExpression(parent) && parent.arguments[0] === literal && (t5.isImport(parent.callee) || t5.isIdentifier(parent.callee, { name: "require" })), previewWiresCompodoc = (source) => {
  let wired = !1;
  try {
    traverse4(babelParse(source), {
      Identifier(path4) {
        path4.node.name === SET_COMPODOC_JSON && (wired = !0, path4.stop());
      },
      StringLiteral(path4) {
        DOCUMENTATION_JSON.test(path4.node.value) && isModuleSource(path4.node, path4.parent) && (wired = !0, path4.stop());
      }
    });
  } catch {
    return !1;
  }
  return wired;
}, SHELL_SEPARATORS = /&{1,2}|\|{1,2}|;|\n/, COMPODOC_COMMAND = /(^|[/\\])compodoc(\.[a-z]+)?$|(^|[/\\])@compodoc[/\\]compodoc(?:$|[/\\])/, COMMAND_WRAPPERS = /* @__PURE__ */ new Set([
  "npx",
  "npm",
  "pnpm",
  "yarn",
  "bun",
  "bunx",
  "exec",
  "dlx",
  "run",
  "run-s",
  "run-p",
  "cross-env",
  "concurrently",
  "npm-run-all",
  "node"
]), stripShellQuoting = (token) => token.replace(/^[('"`]+/, "").replace(/[)'"`]+$/, ""), invokesCompodoc = (script) => script.split(SHELL_SEPARATORS).some((segment) => {
  let command2 = segment.trim().split(/\s+/).map(stripShellQuoting).find(
    (token) => token && !token.startsWith("-") && !token.includes("=") && !COMMAND_WRAPPERS.has(token)
  );
  return !!command2 && COMPODOC_COMMAND.test(command2);
}), findCompodocScripts = async (packageJsonPaths) => [.../* @__PURE__ */ new Set([...packageJsonPaths, ...await findWorkspaceFiles("package.json")])].flatMap(
  (packageJsonPath) => Object.entries(readJson(packageJsonPath)?.scripts ?? {}).filter(([, script]) => typeof script == "string" && invokesCompodoc(script)).map(([scriptName]) => ({ packageJsonPath, scriptName }))
), angularViteRemoveCompodoc = {
  id: "angular-vite-remove-compodoc",
  link: "https://storybook.js.org/docs/get-started/frameworks/angular-vite",
  async check({ mainConfig, mainConfigPath, previewConfigPath, packageManager }) {
    return !mainConfigPath || getFrameworkPackageName(mainConfig) !== "@storybook/angular-vite" || mainConfig.features?.experimentalDocgenServer === !1 ? null : findCompodocSetup({ mainConfig, previewConfigPath, packageManager });
  },
  prompt: () => dedent5`
      "@storybook/angular-vite" now extracts Angular metadata on the server, so Compodoc no longer runs.
      We'll remove the Compodoc setup that has no effect anymore.
    `,
  run: async ({
    result,
    dryRun = !1,
    mainConfigPath,
    previewConfigPath,
    packageManager
  }) => removeCompodocSetup({ result, dryRun, mainConfigPath, previewConfigPath, packageManager })
}, findCompodocSetup = async ({
  mainConfig,
  previewConfigPath,
  packageManager,
  builderPackages = [ANGULAR_VITE_PACKAGE]
}) => {
  let frameworkOptions = typeof mainConfig.framework == "string" ? void 0 : mainConfig.framework?.options, hasFrameworkOptions = !!(frameworkOptions && ("compodoc" in frameworkOptions || "compodocArgs" in frameworkOptions)), hasPreviewWiring = !!previewConfigPath && existsSync3(previewConfigPath) && previewWiresCompodoc(readFileSync2(previewConfigPath, "utf8")), documents = (await workspaceJsonCandidates(packageManager.packageJsonPaths)).flatMap(
    (filePath) => {
      let json = readJson(filePath);
      return json ? [{ filePath, json }] : [];
    }
  ), declaredTargets = documents.flatMap(({ json }) => declaredStorybookTargets(json)), everyStorybookTargetIsOwned = declaredTargets.some((target) => isOwnedBy(target, builderPackages)) && !declaredTargets.some(
    (target) => isStorybookTarget(target) && !isOwnedBy(target, builderPackages)
  ), workspaceJsonEdits = documents.map(({ filePath, json }) => ({
    filePath,
    optionPaths: compodocOptionPaths(json, builderPackages, everyStorybookTargetIsOwned)
  })).filter(({ optionPaths }) => optionPaths.length > 0), hasCompodocDependency = !!await packageManager.getDependencyVersion(COMPODOC_PACKAGE);
  return !hasFrameworkOptions && !hasPreviewWiring && workspaceJsonEdits.length === 0 && !hasCompodocDependency ? null : {
    hasFrameworkOptions,
    hasPreviewWiring,
    workspaceJsonEdits,
    compodocScripts: await findCompodocScripts(packageManager.packageJsonPaths),
    hasCompodocDependency
  };
}, removeCompodocSetup = async ({
  result,
  dryRun,
  mainConfigPath,
  previewConfigPath,
  packageManager
}) => {
  let {
    hasFrameworkOptions,
    hasPreviewWiring,
    workspaceJsonEdits,
    compodocScripts,
    hasCompodocDependency
  } = result, removed = dryRun ? "Would remove" : "Removed";
  hasFrameworkOptions && (await updateMainConfig({ mainConfigPath, dryRun }, (main) => {
    main.removeField(["framework", "options", "compodoc"]), main.removeField(["framework", "options", "compodocArgs"]);
  }), logger7.step(`${removed} the Compodoc framework options from ${mainConfigPath}`)), hasPreviewWiring && previewConfigPath && await removePreviewWiring(previewConfigPath, dryRun);
  for (let { filePath, optionPaths } of workspaceJsonEdits)
    removeCompodocOptions(filePath, optionPaths, dryRun);
  if (hasCompodocDependency)
    if (compodocScripts.length > 0) {
      let scripts = compodocScripts.map(({ packageJsonPath, scriptName }) => `"${scriptName}" in ${packageJsonPath}`).join(", ");
      logger7.warn(
        `Kept ${COMPODOC_PACKAGE}: ${scripts} still run it. Storybook no longer needs Compodoc, so remove the dependency once your own scripts stop calling it.`
      );
    } else
      dryRun || await packageManager.removeDependencies([COMPODOC_PACKAGE]), logger7.step(`${removed} ${COMPODOC_PACKAGE}`), removeCompodocOverrides(packageManager, dryRun);
}, OVERRIDE_CONTAINERS = [["overrides"], ["resolutions"], ["pnpm", "overrides"]], removeCompodocOverrides = (packageManager, dryRun) => {
  for (let packageJsonPath of packageManager.packageJsonPaths)
    try {
      let json = readJson(packageJsonPath), containers = OVERRIDE_CONTAINERS.map(
        (path4) => path4.reduce((parent, key) => parent?.[key], json)
      ).filter((container) => container && COMPODOC_PACKAGE in container);
      if (containers.length === 0)
        continue;
      dryRun || (containers.forEach((container) => delete container[COMPODOC_PACKAGE]), packageManager.writePackageJson(json, dirname2(packageJsonPath))), logger7.step(
        `${dryRun ? "Would remove" : "Removed"} the dangling ${COMPODOC_PACKAGE} override from ${packageJsonPath}`
      );
    } catch (error) {
      logger7.warn(
        `Could not remove the ${COMPODOC_PACKAGE} override from ${packageJsonPath} automatically: ${error}.`
      );
    }
}, manualRemovalHint = (previewConfigPath, reason) => logger7.warn(
  `Left the Compodoc wiring in ${previewConfigPath} alone: ${reason}. Compodoc has no effect anymore, so remove what is left there by hand when convenient: a documentation.json import on its own still ships in your bundle.`
), countReferences = (program2, name) => {
  let references = 0;
  return traverse4(t5.file(program2), {
    Identifier(path4) {
      path4.node.name !== name || path4.parentPath?.isImportDefaultSpecifier() || path4.isReferencedIdentifier() && (references += 1);
    }
  }), references;
}, removePreviewWiring = async (previewConfigPath, dryRun) => {
  try {
    let preview = await readConfig2(previewConfigPath), program2 = preview._ast.program, callsToDrop = program2.body.filter(
      (node) => t5.isExpressionStatement(node) && t5.isCallExpression(node.expression) && t5.isIdentifier(node.expression.callee, { name: SET_COMPODOC_JSON })
    );
    if (callsToDrop.length === 0) {
      manualRemovalHint(
        previewConfigPath,
        countReferences(program2, SET_COMPODOC_JSON) > 0 ? `${SET_COMPODOC_JSON} is not called at the top level` : `no ${SET_COMPODOC_JSON} call is visible here, only a documentation.json import`
      );
      return;
    }
    let withoutCalls = t5.program(program2.body.filter((node) => !callsToDrop.includes(node)));
    if (countReferences(withoutCalls, SET_COMPODOC_JSON) > 0) {
      manualRemovalHint(previewConfigPath, `${SET_COMPODOC_JSON} is still used elsewhere`);
      return;
    }
    let droppableImportNames = new Set(
      callsToDrop.flatMap((node) => {
        let [argument] = node.expression.arguments;
        return t5.isIdentifier(argument) && countReferences(withoutCalls, argument.name) === 0 ? [argument.name] : [];
      })
    ), isDroppableSpecifier = (declaration, specifier) => declaration.source.value === ADDON_DOCS_ANGULAR ? specifier.local.name === SET_COMPODOC_JSON : droppableImportNames.has(specifier.local.name), remaining = [];
    for (let node of withoutCalls.body)
      t5.isImportDeclaration(node) && node.specifiers.length > 0 && (node.specifiers = node.specifiers.filter(
        (specifier) => !isDroppableSpecifier(node, specifier)
      ), node.specifiers.length === 0) || remaining.push(node);
    dryRun || (program2.body = remaining, await writeFile(
      previewConfigPath,
      await formatFileContent4(previewConfigPath, formatConfig2(preview))
    )), logger7.step(
      `${dryRun ? "Would remove" : "Removed"} the ${SET_COMPODOC_JSON} wiring from ${previewConfigPath}`
    );
  } catch (error) {
    manualRemovalHint(previewConfigPath, `it could not be rewritten automatically (${error})`);
  }
}, workspaceJsonCandidates = async (packageJsonPaths) => [...packageJsonPaths.flatMap(
  (pkgJsonPath) => ["angular.json", "nx.json"].map(
    (name) => pkgJsonPath.replace(/[/\\]package\.json$/, `/${name}`)
  )
).filter((path4) => existsSync3(path4)), ...await findWorkspaceFiles("project.json")], removeCompodocOptions = (workspaceJsonPath, optionPaths, dryRun) => {
  try {
    let original = readFileSync2(workspaceJsonPath, "utf8"), updated = optionPaths.reduce(
      (text, path4) => editJsonText(text, path4, void 0),
      original
    );
    updated !== original && (dryRun || writeFileSync2(workspaceJsonPath, updated), logger7.step(
      `${dryRun ? "Would remove" : "Removed"} the Compodoc builder options from ${workspaceJsonPath}`
    ));
  } catch (error) {
    logger7.warn(
      `Could not remove the Compodoc builder options from ${workspaceJsonPath} automatically: ${error}.`
    );
  }
};

// src/automigrate/fixes/angular-to-angular-vite.ts
var ANGULAR_PACKAGE = "@storybook/angular", ANALOG_PACKAGE = "@analogjs/storybook-angular", ANGULAR_VITE_PACKAGE2 = "@storybook/angular-vite", ANALOG_VITE_PLUGIN_PACKAGE = "@analogjs/vite-plugin-angular", ANGULAR_BUILD_PACKAGE = "@angular/build", ANGULAR_ANIMATIONS_PACKAGE = "@angular/animations", ANGULAR_DEVKIT_ARCHITECT_PACKAGE = "@angular-devkit/architect", MIGRATABLE_FRAMEWORKS = [ANGULAR_PACKAGE, ANALOG_PACKAGE], FRAMEWORK_DOC_URL = "https://storybook.js.org/docs/get-started/frameworks/angular-vite", VITE_CONFIG_DOC_URL = "https://storybook.js.org/docs/builders/vite#configure", ANGULAR_MIN_MAJOR = 21, rewriteBuilderRefs = (content) => MIGRATABLE_FRAMEWORKS.reduce(
  (acc, framework) => acc.replaceAll(`${framework}:start-storybook`, `${ANGULAR_VITE_PACKAGE2}:start-storybook`).replaceAll(`${framework}:build-storybook`, `${ANGULAR_VITE_PACKAGE2}:build-storybook`),
  content
), rewriteTestStorybookScript = (content) => content.replace(/("test-storybook"\s*:\s*)"(?:[^"\\]|\\.)*"/, '$1"vitest run"'), VITE_CONFIG_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".cts", ".mts", ".cjs", ".mjs"], findExistingViteConfig = (configDir) => {
  let search = (basename5, extensions) => any(
    extensions.map((ext) => basename5 + ext),
    { last: getProjectRoot2(), cwd: configDir }
  );
  return search("vitest.workspace", [".ts", ".js", ".json"]) || search("vite.config", VITE_CONFIG_EXTENSIONS) || search("vitest.config", VITE_CONFIG_EXTENSIONS);
}, buildAngularVitestConfig = (configDirRelative) => `import path from 'node:path';
import { fileURLToPath } from 'node:url';

import { defineConfig } from 'vitest/config';

import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
import { storybookAngularVitest } from '@storybook/angular-vite/vitest';

import { playwright } from '@vitest/browser-playwright';

const dirname =
  typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));

// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
export default defineConfig({
  test: {
    projects: [
      {
        extends: true,
        plugins: [
          // Forwards Angular build options (styles, assets, zoneless, \u2026) into standalone vitest runs
          storybookAngularVitest({}),
          // The plugin will run tests for the stories defined in your Storybook config
          // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
          storybookTest({ configDir: path.join(dirname, '${configDirRelative}') }),
        ],
        test: {
          name: 'storybook',
          browser: {
            enabled: true,
            headless: true,
            provider: playwright({}),
            instances: [{ browser: 'chromium' }],
          },
        },
      },
    ],
  },
});
`, transformMainConfig = async (mainConfigPath, dryRun, framework) => {
  try {
    let content = await readFile(mainConfigPath, "utf-8");
    if (!content.includes(framework))
      return !1;
    let transformed = framework === ANGULAR_PACKAGE ? content.replace(/@storybook\/angular(?!-vite)/g, ANGULAR_VITE_PACKAGE2) : content.replaceAll(framework, ANGULAR_VITE_PACKAGE2);
    return transformed !== content && !dryRun && await writeFile2(mainConfigPath, transformed), transformed !== content;
  } catch (error) {
    return logger8.error(`Failed to update main config at ${mainConfigPath}: ${error}`), !1;
  }
}, rewriteStorybookBuilderRef = (ref) => {
  for (let framework of MIGRATABLE_FRAMEWORKS) {
    if (ref === `${framework}:start-storybook`)
      return `${ANGULAR_VITE_PACKAGE2}:start-storybook`;
    if (ref === `${framework}:build-storybook`)
      return `${ANGULAR_VITE_PACKAGE2}:build-storybook`;
  }
  return null;
}, isMigratableStorybookTarget = (target) => MIGRATABLE_FRAMEWORKS.some((framework) => isStorybookTarget2(target, framework)), matchMigratableFramework = (frameworkPackageName) => {
  if (!frameworkPackageName)
    return;
  let normalized = frameworkPackageName.replace(/\\/g, "/");
  return MIGRATABLE_FRAMEWORKS.find(
    (framework) => normalized === framework || // `@storybook/angular` must not match a path ending in `@storybook/angular-vite`, which the
    // leading slash guarantees.
    normalized.endsWith(`/${framework}`) || normalized.includes(`/.pnpm/${framework.replace("/", "+")}@`)
  );
}, TextJsonEditor = class {
  constructor(content) {
    this.content = content;
  }
  edit(path4, value) {
    this.content = editJsonText2(this.content, path4, value);
  }
}, processStorybookTargets = (editor, targetGroups) => {
  let changed = !1, hasStorybookTarget = !1, anyZoneBasedTarget = !1;
  for (let { pathPrefix, targets } of targetGroups)
    for (let [targetName, target] of Object.entries(targets)) {
      if (!isMigratableStorybookTarget(target) && !isStorybookTarget2(target, ANGULAR_VITE_PACKAGE2))
        continue;
      hasStorybookTarget = !0;
      let currentRef = target.builder ?? target.executor ?? null, hasOldZonelessKey = !!target.options && "experimentalZoneless" in target.options, zonelessValue = target.options?.zoneless ?? target.options?.experimentalZoneless;
      if (zonelessValue === !1 && (anyZoneBasedTarget = !0), !isMigratableStorybookTarget(target))
        continue;
      let newRef = currentRef ? rewriteStorybookBuilderRef(currentRef) : null;
      if (newRef) {
        let refKey = "builder" in target ? "builder" : "executor";
        editor.edit([...pathPrefix, targetName, refKey], newRef), changed = !0;
      }
      hasOldZonelessKey && (editor.edit([...pathPrefix, targetName, "options", "zoneless"], zonelessValue), editor.edit([...pathPrefix, targetName, "options", "experimentalZoneless"], void 0), changed = !0);
    }
  return { changed, hasStorybookTarget, anyZoneBasedTarget };
}, transformAngularJson = (angularJsonPath, dryRun) => {
  let angularJSON;
  try {
    angularJSON = new AngularJSON(angularJsonPath);
  } catch {
    return {
      changed: !1,
      hasStorybookTarget: !1,
      anyZoneBasedTarget: !1
    };
  }
  let result = processStorybookTargets(angularJSON, getTargetGroups(angularJSON.json));
  return result.changed && !dryRun && angularJSON.write(), result;
}, transformProjectJson = async (projectJsonPath, dryRun) => {
  try {
    let original = await readFile(projectJsonPath, "utf-8"), json = JSON.parse(original), editor = new TextJsonEditor(original), result = processStorybookTargets(editor, getTargetGroups(json));
    return result.changed && !dryRun && await writeFile2(projectJsonPath, editor.content), result;
  } catch {
    return {
      changed: !1,
      hasStorybookTarget: !1,
      anyZoneBasedTarget: !1
    };
  }
}, addZoneJsPreviewImport = async (previewConfigPath, dryRun) => {
  try {
    let preview = await readConfig3(previewConfigPath);
    if (preview._ast.program.body.some(
      (node) => t6.isImportDeclaration(node) && typeof node.source.value == "string" && (node.source.value === "zone.js" || node.source.value.startsWith("zone.js/"))
    ) || dryRun)
      return;
    preview.setImport(null, "zone.js");
    let formatted = await formatFileContent5(previewConfigPath, formatConfig3(preview));
    await writeFile2(previewConfigPath, formatted), logger8.step(`Added a \`zone.js\` import to ${previewConfigPath}`);
  } catch (error) {
    logger8.warn(
      `Could not add a \`zone.js\` import to ${previewConfigPath} automatically: ${error}. If your app uses zone-based change detection, add \`import 'zone.js';\` at the top of your preview.`
    );
  }
}, getGuaranteedAngularMajor = (specifier) => {
  let range = specifier ? import_semver5.default.validRange(specifier) : null, major = range ? import_semver5.default.minVersion(range)?.major ?? null : null;
  return major === 0 ? null : major;
}, angularToAngularVite = {
  id: "angular-to-angular-vite",
  link: FRAMEWORK_DOC_URL,
  defaultSelected: !1,
  async check({ packageManager, mainConfig }) {
    let allDeps = packageManager.getAllDependencies();
    if (allDeps[ANGULAR_VITE_PACKAGE2] || MIGRATABLE_FRAMEWORKS.every((pkg) => !allDeps[pkg]))
      return null;
    let angularSpecifier = await packageManager.getDeclaredVersionSpecifier("@angular/core"), frameworkPackageName = getFrameworkPackageName(mainConfig), framework = matchMigratableFramework(frameworkPackageName);
    if (!framework)
      return angularSpecifier && logger8.warn(
        `Skipped ${ANGULAR_VITE_PACKAGE2} migration: this project's Storybook framework is \`${frameworkPackageName ?? "not set"}\`, and only ${MIGRATABLE_FRAMEWORKS.map((pkg) => `\`${pkg}\``).join(" and ")} projects can be migrated automatically. See ${FRAMEWORK_DOC_URL} to switch frameworks by hand.`
      ), null;
    let angularMajor = getGuaranteedAngularMajor(angularSpecifier);
    if (angularMajor !== null && angularMajor < ANGULAR_MIN_MAJOR)
      return logger8.warn(
        `Skipped ${ANGULAR_VITE_PACKAGE2} migration: it needs Angular ${ANGULAR_MIN_MAJOR}, and this project is on Angular ${angularMajor}. Run \`ng update @angular/core @angular/cli\` to upgrade, then run this migration again.`
      ), null;
    angularMajor === null && logger8.warn(
      `Could not determine the \`@angular/core\` version, so the ${ANGULAR_VITE_PACKAGE2} migration cannot confirm this project is on Angular ${ANGULAR_MIN_MAJOR} or newer. Continuing anyway. If the migrated project fails to build, upgrade Angular first.`
    );
    let hasWebpackFinal = !1;
    for (let pkgJsonPath of packageManager.packageJsonPaths) {
      let dir = pkgJsonPath.replace(/[/\\]package\.json$/, "");
      for (let mainName of [
        `${dir}/.storybook/main.ts`,
        `${dir}/.storybook/main.js`,
        `${dir}/.storybook/main.mts`,
        `${dir}/.storybook/main.mjs`
      ])
        try {
          (await readFile(mainName, "utf-8")).includes("webpackFinal") && (hasWebpackFinal = !0);
          break;
        } catch {
          continue;
        }
      if (hasWebpackFinal)
        break;
    }
    let packageJsonFiles = [];
    for (let pkgJsonPath of packageManager.packageJsonPaths)
      try {
        let raw = await readFile(pkgJsonPath, "utf-8"), pkg = JSON.parse(raw), deps = { ...pkg.dependencies ?? {}, ...pkg.devDependencies ?? {} };
        MIGRATABLE_FRAMEWORKS.some((pkg2) => pkg2 in deps) && packageJsonFiles.push(pkgJsonPath);
      } catch {
        continue;
      }
    return {
      framework,
      hasWebpackFinal,
      packageJsonFiles,
      angularVersion: angularMajor === null ? null : angularSpecifier
    };
  },
  prompt() {
    return "Migrate from @storybook/angular (Webpack) or @analogjs/storybook-angular to @storybook/angular-vite (in preview).";
  },
  async run({
    result,
    dryRun = !1,
    mainConfig,
    mainConfigPath,
    previewConfigPath,
    storiesPaths,
    configDir,
    packageManager,
    storybookVersion,
    yes,
    addonsToPostinstall
  }) {
    if (!result)
      return;
    if (result.hasWebpackFinal && (logger8.logBox(
      dedent6`
          We detected a \`webpackFinal\` hook in your Storybook main config.

          \`webpackFinal\` is a Webpack-specific API and will not carry over to Vite.
          You will need to port it to \`viteFinal\` after the migration.
          See ${VITE_CONFIG_DOC_URL} for porting guidance.
        `
    ), !(yes ? !1 : await prompt3.confirm({
      message: "I detected a webpackFinal hook. It will not carry over. Continue anyway?",
      initialValue: !1
    })))) {
      logger8.log(
        "Migration cancelled. Port your webpackFinal hook to viteFinal first, then run the automigration again."
      );
      return;
    }
    if (logger8.step(`Migrating from ${result.framework} to ${ANGULAR_VITE_PACKAGE2}...`), logger8.debug("Updating main config..."), !mainConfigPath || !await transformMainConfig(mainConfigPath, dryRun, result.framework)) {
      logger8.error(
        dedent6`
          Migration stopped: the \`framework\` field could not be rewritten in ${mainConfigPath ?? "your Storybook main config"}.
          That file names no \`${result.framework}\`, so it most likely inherits the framework from a shared config.
          Point \`framework\` at \`${ANGULAR_VITE_PACKAGE2}\` where it is declared, then run this migration again.
        `
      );
      return;
    }
    if (dryRun)
      logger8.debug("Dry run: Skipping dependency updates.");
    else {
      logger8.debug("Updating dependencies..."), await packageManager.removeDependencies(
        result.framework === ANALOG_PACKAGE ? [ANALOG_PACKAGE, ANGULAR_PACKAGE] : [ANGULAR_PACKAGE]
      );
      let allDeps = packageManager.getAllDependencies(), { angularVersion } = result, architectVersion = toDevkitVersion(angularVersion), unpinnableAngularPeers = angularVersion ? [] : [
        ANGULAR_BUILD_PACKAGE,
        ANGULAR_ANIMATIONS_PACKAGE,
        ANGULAR_DEVKIT_ARCHITECT_PACKAGE
      ].filter((pkg) => !allDeps[pkg]);
      unpinnableAngularPeers.length > 0 && logger8.warn(
        `Could not determine the \`@angular/core\` version, so ${unpinnableAngularPeers.map((pkg) => `\`${pkg}\``).join(", ")} were not added. ${ANGULAR_VITE_PACKAGE2} needs them at your Angular version, and adding them unpinned would install the next Angular major. Add them by hand before starting Storybook.`
      ), await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, [
        `${ANGULAR_VITE_PACKAGE2}@${storybookVersion}`,
        ...allDeps[ANALOG_VITE_PLUGIN_PACKAGE] ? [] : [`${ANALOG_VITE_PLUGIN_PACKAGE}@${ANALOG_VITE_PLUGIN_ANGULAR_VERSION}`],
        ...allDeps[ANGULAR_BUILD_PACKAGE] || !angularVersion ? [] : [`${ANGULAR_BUILD_PACKAGE}@${angularVersion}`],
        ...allDeps[ANGULAR_ANIMATIONS_PACKAGE] || !angularVersion ? [] : [`${ANGULAR_ANIMATIONS_PACKAGE}@${angularVersion}`],
        ...allDeps[ANGULAR_DEVKIT_ARCHITECT_PACKAGE] || !architectVersion ? [] : [`${ANGULAR_DEVKIT_ARCHITECT_PACKAGE}@${architectVersion}`]
      ]);
    }
    let anyStorybookTarget = !1, anyZoneBasedTarget = !1;
    for (let pkgJsonPath of packageManager.packageJsonPaths) {
      let angularJsonPath = `${pkgJsonPath.replace(/[/\\]package\.json$/, "")}/angular.json`, {
        changed,
        hasStorybookTarget,
        anyZoneBasedTarget: zoneBased
      } = transformAngularJson(angularJsonPath, dryRun);
      hasStorybookTarget && (anyStorybookTarget = !0, anyZoneBasedTarget = anyZoneBasedTarget || zoneBased), changed && logger8.debug(`Updated Angular CLI builder references in ${angularJsonPath}`);
    }
    let projectJsonFiles = await findWorkspaceFiles("project.json");
    for (let projectJsonPath of projectJsonFiles) {
      let {
        changed,
        hasStorybookTarget,
        anyZoneBasedTarget: zoneBased
      } = await transformProjectJson(projectJsonPath, dryRun);
      hasStorybookTarget && (anyStorybookTarget = !0, anyZoneBasedTarget = anyZoneBasedTarget || zoneBased), changed && logger8.debug(`Updated Nx builder references in ${projectJsonPath}`);
    }
    for (let pkgJsonPath of packageManager.packageJsonPaths)
      try {
        let content = await readFile(pkgJsonPath, "utf-8"), transformed = rewriteTestStorybookScript(rewriteBuilderRefs(content));
        transformed !== content && !dryRun && (packageManager.writePackageJson(JSON.parse(transformed), dirname2(pkgJsonPath)), logger8.debug(`Updated builder references and scripts in ${pkgJsonPath}`));
      } catch {
        continue;
      }
    if (mainConfigPath)
      try {
        let compodocSetup = await findCompodocSetup({
          mainConfig,
          previewConfigPath,
          packageManager,
          builderPackages: [ANGULAR_VITE_PACKAGE2, ...MIGRATABLE_FRAMEWORKS]
        });
        compodocSetup && await removeCompodocSetup({
          result: compodocSetup,
          dryRun: !!dryRun,
          mainConfigPath,
          previewConfigPath,
          packageManager
        });
      } catch (error) {
        logger8.warn(
          `Could not remove the Compodoc setup automatically: ${error}. Compodoc no longer runs, so its options and the \`setCompodocJson\` wiring can go.`
        );
      }
    let hasZoneJsDependency = packageManager.isDependencyInstalled("zone.js");
    anyStorybookTarget && anyZoneBasedTarget && !hasZoneJsDependency && logger8.warn(
      "A Storybook builder target sets `zoneless: false`, but this project does not depend on `zone.js`, so no `import 'zone.js';` was added to your preview - it could not resolve, and every story would fail to load. Install `zone.js`, or set `zoneless: true` on that target if your app uses zoneless change detection."
    );
    let needsZoneJs = anyStorybookTarget && hasZoneJsDependency;
    needsZoneJs && previewConfigPath ? await addZoneJsPreviewImport(previewConfigPath, dryRun) : needsZoneJs && !previewConfigPath && logger8.warn(
      "Could not find a Storybook preview file to add the zone.js import to. If your app uses zone-based change detection, add `import 'zone.js';` at the top of your preview file manually."
    ), logger8.debug("Scanning and updating import statements...");
    let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = configDir ? await globby([`${configDir}/**/*`]) : [], allFiles = [...storiesPaths, ...configFiles].filter(Boolean), transformErrors = await transformImportFiles(
      allFiles,
      Object.fromEntries(MIGRATABLE_FRAMEWORKS.map((pkg) => [pkg, ANGULAR_VITE_PACKAGE2])),
      !!dryRun
    );
    if (transformErrors.length > 0 && (logger8.warn(`Encountered ${transformErrors.length} error(s) during file transformation:`), transformErrors.forEach(({ file, error }) => {
      logger8.warn(`  - ${file}: ${error.message}`);
    })), !dryRun) {
      if (yes ? !0 : await prompt3.confirm({
        message: "Set up @storybook/addon-vitest? (Recommended \u2014 enables in-browser component tests with Vitest)",
        initialValue: !0
      })) {
        if (configDir && !findExistingViteConfig(configDir)) {
          let newConfigFile = resolve2(dirname2(configDir), "vitest.config.ts"), configDirRelative = relative2(dirname2(newConfigFile), configDir), formatted = await formatFileContent5(
            newConfigFile,
            buildAngularVitestConfig(configDirRelative)
          );
          await writeFile2(newConfigFile, formatted), logger8.step(`Creating a Vitest config file: ${newConfigFile}`);
        }
        try {
          await add("@storybook/addon-vitest", {
            packageManager: packageManager.type,
            configDir,
            skipInstall: !0,
            skipPostinstall: !0,
            yes: !!yes
          }), addonsToPostinstall?.push("@storybook/addon-vitest");
        } catch (err) {
          logger8.warn(`Could not set up @storybook/addon-vitest automatically: ${err}`), logger8.warn("Run `npx storybook add @storybook/addon-vitest` manually to set it up.");
        }
      }
      if (yes ? !0 : await prompt3.confirm({
        message: "Set up @storybook/addon-a11y? (Adds accessibility checks to your stories)",
        initialValue: !0
      }))
        try {
          await add("@storybook/addon-a11y", {
            packageManager: packageManager.type,
            configDir,
            skipInstall: !0,
            skipPostinstall: !0,
            yes: !!yes
          }), addonsToPostinstall?.push("@storybook/addon-a11y");
        } catch (err) {
          logger8.warn(`Could not set up @storybook/addon-a11y automatically: ${err}`), logger8.warn("Run `npx storybook add @storybook/addon-a11y` manually to set it up.");
        }
    }
    logger8.step("Migration completed successfully!"), logger8.log(`For more information, see: ${FRAMEWORK_DOC_URL}`);
  }
};

// src/automigrate/fixes/addon-a11y-parameters.ts
var import_picocolors9 = __toESM(require_picocolors(), 1);
import { readFile as readFile2 } from "node:fs/promises";
import { writeConfig, writeCsf } from "storybook/internal/csf-tools";
import { logger as logger9 } from "storybook/internal/node-logger";
import { dedent as dedent7 } from "ts-dedent";

// src/automigrate/helpers/addon-a11y-parameters.ts
import { types as t8 } from "storybook/internal/babel";
import { loadConfig as loadConfig3, loadCsf as loadCsf2 } from "storybook/internal/csf-tools";

// src/automigrate/helpers/ast-utils.ts
import { types as t7 } from "storybook/internal/babel";
function getObjectProperty(obj, propertyName) {
  return !obj || !obj.properties ? void 0 : obj.properties.find(
    (prop) => t7.isObjectProperty(prop) && (t7.isIdentifier(prop.key) && prop.key.name === propertyName || t7.isStringLiteral(prop.key) && prop.key.value === propertyName)
  )?.value;
}
function removeProperty(obj, propertyName) {
  if (!obj || !obj.properties)
    return;
  let index = obj.properties.findIndex(
    (prop) => t7.isObjectProperty(prop) && (t7.isIdentifier(prop.key) && prop.key.name === propertyName || t7.isStringLiteral(prop.key) && prop.key.value === propertyName)
  );
  index !== -1 && obj.properties.splice(index, 1);
}
function addProperty(obj, propertyName, value) {
  !obj || !obj.properties || obj.properties.push(t7.objectProperty(t7.identifier(propertyName), value));
}
function getStoryObject(declaration) {
  if (t7.isVariableDeclarator(declaration)) {
    let init = declaration.init;
    if ((t7.isTSSatisfiesExpression(init) || t7.isTSAsExpression(init)) && (init = init.expression), t7.isObjectExpression(init))
      return init;
  } else if (t7.isExportDefaultDeclaration(declaration)) {
    let init = declaration.declaration;
    if ((t7.isTSSatisfiesExpression(init) || t7.isTSAsExpression(init)) && (init = init.expression), t7.isObjectExpression(init))
      return init;
  }
}
function transformValuesToOptions(valuesArray) {
  let optionsObject = t7.objectExpression([]);
  return valuesArray && t7.isArrayExpression(valuesArray) && valuesArray.elements && valuesArray.elements.forEach((element) => {
    if (t7.isObjectExpression(element)) {
      let nameProperty = getObjectProperty(element, "name");
      if (t7.isStringLiteral(nameProperty)) {
        let key = nameProperty.value.toLowerCase().replace(/\s+/g, "_"), keyNode = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? t7.identifier(key) : t7.stringLiteral(nameProperty.value);
        optionsObject.properties.push(t7.objectProperty(keyNode, element));
      }
    }
  }), optionsObject;
}
function getKeyFromName(valuesArray, name) {
  if (valuesArray && t7.isArrayExpression(valuesArray) && valuesArray.elements) {
    for (let element of valuesArray.elements)
      if (t7.isObjectExpression(element)) {
        let nameProperty = getObjectProperty(element, "name");
        if (t7.isStringLiteral(nameProperty) && nameProperty.value === name)
          return name.toLowerCase().replace(/\s+/g, "_");
      }
  }
  return name.toLowerCase().replace(/\s+/g, "_");
}
function transformStories(csf, transformCallback, options = { includeMeta: !0, includeStories: !0 }) {
  let hasChanges = !1;
  if (options.includeStories && Object.entries(csf._storyExports).forEach(([storyName, declaration]) => {
    let storyObject = getStoryObject(declaration);
    storyObject && transformCallback(storyObject, storyName, csf) && (hasChanges = !0);
  }), options.includeMeta && csf._metaPath) {
    let storyObject = getStoryObject(csf._metaPath.node);
    storyObject && transformCallback(storyObject, "meta", csf) && (hasChanges = !0);
  }
  return hasChanges;
}
function transformStoryParameters(csf, transformParameters, options = { includeMeta: !0, includeStories: !0 }) {
  return transformStories(
    csf,
    (storyObject, storyName, csf2) => {
      let parameters = getObjectProperty(storyObject, "parameters");
      return parameters ? transformParameters(parameters, storyObject, storyName, csf2) : !1;
    },
    options
  );
}

// src/automigrate/helpers/addon-a11y-parameters.ts
var isStoryAnnotation = (stmt, objectExports) => t8.isExpressionStatement(stmt) && t8.isAssignmentExpression(stmt.expression) && t8.isMemberExpression(stmt.expression.left) && t8.isIdentifier(stmt.expression.left.object) && objectExports[stmt.expression.left.object.name];
function migrateA11yParameters(obj) {
  let parametersValue = getObjectProperty(obj, "parameters");
  if (parametersValue) {
    let a11yValue = getObjectProperty(parametersValue, "a11y");
    if (a11yValue) {
      let elementProp = a11yValue.properties.find(
        (prop) => t8.isObjectProperty(prop) && t8.isIdentifier(prop.key) && prop.key.name === "element"
      );
      if (elementProp && t8.isObjectProperty(elementProp))
        return elementProp.key = t8.identifier("context"), !0;
    }
  }
  return !1;
}
function transformStoryA11yParameters(code) {
  let parsed = loadCsf2(code, { makeTitle: (title) => title || "default" }).parse(), hasChanges = transformStories(parsed, (storyObject, storyName, csf) => migrateA11yParameters(storyObject));
  return parsed._ast.program.body.forEach((stmt) => {
    let statement = stmt;
    isStoryAnnotation(statement, parsed._storyExports) && t8.isExpressionStatement(statement) && t8.isAssignmentExpression(statement.expression) && t8.isObjectExpression(statement.expression.right) && statement.expression.right.properties.forEach((param) => {
      if (t8.isObjectProperty(param) && t8.isIdentifier(param.key) && param.key.name === "a11y") {
        let elementProp = param.value.properties.find(
          (prop) => t8.isObjectProperty(prop) && t8.isIdentifier(prop.key) && prop.key.name === "element"
        );
        elementProp && t8.isObjectProperty(elementProp) && (elementProp.key = t8.identifier("context"), hasChanges = !0);
      }
    });
  }), hasChanges ? parsed : null;
}
function transformPreviewA11yParameters(code) {
  let parsed = loadConfig3(code).parse();
  return parsed._exportsObject && t8.isObjectExpression(parsed._exportsObject) && migrateA11yParameters(parsed._exportsObject) ? parsed : null;
}

// src/automigrate/fixes/addon-a11y-parameters.ts
var addonA11yParameters = {
  id: "addon-a11y-parameters",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#a11y-addon-replace-element-parameter-with-context-parameter",
  check: async ({ mainConfig, previewConfigPath, storiesPaths }) => {
    if (!mainConfig.addons?.some(
      (addon) => typeof addon == "string" ? addon === "@storybook/addon-a11y" : addon.name === "@storybook/addon-a11y"
    ))
      return null;
    let maybeHasA11yParameter = (content) => content.includes("a11y:") && content.includes("element:"), storyFilesWithA11y = (await Promise.all(
      storiesPaths.map(async (file) => {
        let content = await readFile2(file, "utf-8");
        return maybeHasA11yParameter(content) ? file : null;
      })
    )).filter((file) => file !== null), hasA11yConfigInPreview = !1;
    if (previewConfigPath) {
      let content = await readFile2(previewConfigPath, "utf-8");
      hasA11yConfigInPreview = maybeHasA11yParameter(content);
    }
    return storyFilesWithA11y.length === 0 && !hasA11yConfigInPreview ? null : {
      storyFilesToUpdate: storyFilesWithA11y,
      previewFileToUpdate: hasA11yConfigInPreview ? previewConfigPath : void 0
    };
  },
  prompt: () => dedent7`
      The a11y addon has replaced ${import_picocolors9.default.yellow("parameters.a11y.element")} with ${import_picocolors9.default.yellow("parameters.a11y.context")} for more flexible accessibility check scoping.
    `,
  run: async (options) => {
    let { result, dryRun = !1 } = options, { storyFilesToUpdate, previewFileToUpdate } = result, errors = [];
    if (previewFileToUpdate) {
      let content = await readFile2(previewFileToUpdate, "utf-8"), code = transformPreviewA11yParameters(content);
      if (code)
        if (dryRun)
          logger9.log(`Would have updated ${code.fileName}`);
        else
          try {
            await writeConfig(code, previewFileToUpdate);
          } catch (error) {
            errors.push({ file: previewFileToUpdate, error });
          }
    }
    let { default: pLimit } = await import("./p-limit-NHYXITBY.js"), limit = pLimit(10);
    if (await Promise.all(
      storyFilesToUpdate.map(
        (file) => limit(async () => {
          try {
            let content = await readFile2(file, "utf-8"), code = transformStoryA11yParameters(content);
            code && (dryRun ? logger9.log(`Would have updated ${file}`) : await writeCsf(code, file));
          } catch (error) {
            errors.push({ file, error });
          }
        })
      )
    ), errors.length > 0)
      throw new Error(
        `Failed to process ${errors.length} files:
${errors.map(({ file, error }) => `- ${file}: ${error.message}`).join(`
`)}`
      );
  }
};

// src/automigrate/fixes/addon-experimental-test.ts
import { readFileSync as readFileSync3, writeFileSync as writeFileSync3 } from "fs";
var addonExperimentalTest = {
  id: "addon-experimental-test",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#experimental-test-addon-stabilized-and-renamed",
  promptType: "auto",
  async check({ packageManager }) {
    if (!await packageManager.isPackageInstalled(
      "@storybook/experimental-addon-test"
    ))
      return null;
    let matchingFiles = findFilesUp(
      [".storybook/**/*.*", "vitest.*.{js,ts,mjs,cjs}", "vite.config.{js,ts,mjs,cjs}"],
      packageManager.instanceDir
    ), filesWithExperimentalAddon = [];
    for (let file of matchingFiles)
      try {
        readFileSync3(file, "utf-8").includes("@storybook/experimental-addon-test") && filesWithExperimentalAddon.push(file);
      } catch {
      }
    return {
      matchingFiles: filesWithExperimentalAddon
    };
  },
  prompt() {
    return "We'll migrate @storybook/experimental-addon-test to @storybook/addon-vitest";
  },
  async run({ result: { matchingFiles }, packageManager, dryRun, storybookVersion }) {
    for (let file of matchingFiles) {
      let updatedContent = readFileSync3(file, "utf-8").replace(
        /@storybook\/experimental-addon-test/g,
        "@storybook/addon-vitest"
      );
      file.includes("vitest.setup") && (updatedContent = updatedContent.replace(/^\s*beforeAll.*\n?/gm, "")), dryRun || writeFileSync3(file, updatedContent, "utf-8");
    }
    dryRun || (await packageManager.removeDependencies(["@storybook/experimental-addon-test"]), await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, [
      `@storybook/addon-vitest@${storybookVersion}`
    ]));
  }
};

// src/automigrate/fixes/addon-globals-api.ts
import { readFile as readFile3, writeFile as writeFile3 } from "node:fs/promises";
import { types as t9 } from "storybook/internal/babel";
import { formatConfig as formatConfig4, loadConfig as loadConfig4, loadCsf as loadCsf3, writeCsf as writeCsf2 } from "storybook/internal/csf-tools";
var addonGlobalsApi = {
  id: "addon-globals-api",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#viewportbackgrounds-addon-synchronized-configuration-and-globals-usage",
  async check({ previewConfigPath }) {
    if (!previewConfigPath)
      return null;
    let previewConfig = loadConfig4((await readFile3(previewConfigPath)).toString()).parse(), getFieldNode = previewConfig.getFieldNode.bind(previewConfig), getFieldValue = previewConfig.getFieldValue.bind(previewConfig), checkAddonMigration = (addonName) => {
      let paramPath = ["parameters", addonName];
      if (!getFieldNode(paramPath))
        return { needsMigration: !1 };
      let hasOptions = getFieldNode([...paramPath, "options"]) !== void 0, fieldsToCheck = addonName === "viewport" ? ["viewports", "defaultViewport"] : ["values", "default", "disable"], needsMigration = fieldsToCheck.some(
        (field) => getFieldNode([...paramPath, field]) !== void 0
      ) && !hasOptions, options = {};
      return needsMigration && fieldsToCheck.forEach((field) => {
        let value = addonName === "viewport" && field === "viewports" || addonName === "backgrounds" && field === "values" ? getFieldNode([...paramPath, field]) : getFieldValue([...paramPath, field]);
        if (value !== void 0) {
          let optionKey = field;
          options[optionKey] = value;
        }
      }), { needsMigration, options };
    }, viewportMigration = checkAddonMigration("viewport"), backgroundsMigration = checkAddonMigration("backgrounds");
    return !viewportMigration.needsMigration && !backgroundsMigration.needsMigration ? null : {
      previewConfig,
      previewConfigPath,
      needsViewportMigration: viewportMigration.needsMigration,
      needsBackgroundsMigration: backgroundsMigration.needsMigration,
      viewportsOptions: viewportMigration.options,
      backgroundsOptions: backgroundsMigration.options
    };
  },
  prompt() {
    return "You're using a deprecated config API for viewport/backgrounds. The globals API will be used instead.";
  },
  async run({ dryRun = !1, result, storiesPaths }) {
    let {
      previewConfig,
      needsViewportMigration,
      needsBackgroundsMigration,
      viewportsOptions,
      backgroundsOptions
    } = result, getFieldNode = previewConfig.getFieldNode.bind(previewConfig);
    if (needsViewportMigration) {
      let viewports = getFieldNode(["parameters", "viewport", "viewports"]);
      if (viewportsOptions?.viewports && (previewConfig.removeField(["parameters", "viewport", "viewports"]), addProperty(
        getFieldNode(["parameters", "viewport"]),
        "options",
        viewports
      )), viewportsOptions?.defaultViewport) {
        let viewportNode = getFieldNode(["parameters", "viewport"]);
        removeProperty(viewportNode, "defaultViewport"), previewConfig.setFieldValue(
          ["initialGlobals", "viewport", "value"],
          viewportsOptions.defaultViewport
        ), previewConfig.setFieldValue(["initialGlobals", "viewport", "isRotated"], !1);
      }
    }
    if (needsBackgroundsMigration) {
      if (backgroundsOptions?.values) {
        let optionsObject = transformValuesToOptions(
          backgroundsOptions.values
        );
        previewConfig.removeField(["parameters", "backgrounds", "values"]), addProperty(
          getFieldNode(["parameters", "backgrounds"]),
          "options",
          optionsObject
        );
      }
      backgroundsOptions?.default && (removeProperty(getFieldNode(["parameters", "backgrounds"]), "default"), previewConfig.setFieldValue(
        ["initialGlobals", "backgrounds", "value"],
        getKeyFromName(backgroundsOptions.values, backgroundsOptions.default)
      )), backgroundsOptions?.disable === !0 && (removeProperty(getFieldNode(["parameters", "backgrounds"]), "disable"), addProperty(
        getFieldNode(["parameters", "backgrounds"]),
        "disabled",
        t9.booleanLiteral(!0)
      ));
    }
    dryRun || await writeFile3(result.previewConfigPath, formatConfig4(previewConfig)), (needsViewportMigration || needsBackgroundsMigration) && await transformStoryFiles(
      storiesPaths,
      {
        needsViewportMigration,
        needsBackgroundsMigration,
        viewportsOptions,
        backgroundsOptions
      },
      dryRun
    );
  }
};
async function transformStoryFiles(files, options, dryRun) {
  let errors = [], { default: pLimit } = await import("./p-limit-NHYXITBY.js"), limit = pLimit(10);
  return await Promise.all(
    files.map(
      (file) => limit(async () => {
        try {
          let content = await readFile3(file, "utf-8"), transformed = transformStoryFile(content, options);
          transformed && !dryRun && await writeCsf2(transformed, file);
        } catch (error) {
          errors.push({ file, error });
        }
      })
    )
  ), errors;
}
function transformStoryFile(source, options) {
  let { needsViewportMigration, needsBackgroundsMigration, backgroundsOptions } = options, storyConfig = loadCsf3(source, {
    makeTitle: (title) => title || "default"
  }).parse();
  return transformStoryParameters(storyConfig, (parameters, storyObject) => {
    let newGlobals, viewportParams, backgroundsParams, storyHasChanges = !1;
    if (needsViewportMigration && (viewportParams = getObjectProperty(parameters, "viewport"), viewportParams)) {
      let defaultViewport = getObjectProperty(viewportParams, "defaultViewport"), defaultOrientation = getObjectProperty(viewportParams, "defaultOrientation"), disableViewport = getObjectProperty(viewportParams, "disable"), viewportValue = null;
      if (defaultViewport && (t9.isStringLiteral(defaultViewport) || t9.isMemberExpression(defaultViewport)) && (viewportValue = defaultViewport), viewportValue) {
        newGlobals || (newGlobals = t9.objectExpression([]));
        let isRotated = !1;
        defaultOrientation && t9.isStringLiteral(defaultOrientation) && (isRotated = defaultOrientation.value === "portrait"), newGlobals.properties.push(
          t9.objectProperty(
            t9.identifier("viewport"),
            t9.objectExpression([
              t9.objectProperty(t9.identifier("value"), viewportValue),
              t9.objectProperty(t9.identifier("isRotated"), t9.booleanLiteral(isRotated))
            ])
          )
        ), removeProperty(viewportParams, "defaultViewport"), storyHasChanges = !0;
      }
      defaultOrientation && (removeProperty(viewportParams, "defaultOrientation"), storyHasChanges = !0), disableViewport && t9.isBooleanLiteral(disableViewport) && (removeProperty(viewportParams, "disable"), addProperty(viewportParams, "disabled", disableViewport), storyHasChanges = !0);
    }
    if (needsBackgroundsMigration && (backgroundsParams = getObjectProperty(parameters, "backgrounds"), backgroundsParams)) {
      let defaultBackground = getObjectProperty(backgroundsParams, "default"), disableBackground = getObjectProperty(backgroundsParams, "disable"), valuesBackground = getObjectProperty(backgroundsParams, "values");
      if (valuesBackground && t9.isArrayExpression(valuesBackground)) {
        let optionsObject = transformValuesToOptions(valuesBackground);
        removeProperty(backgroundsParams, "values"), addProperty(backgroundsParams, "options", optionsObject), storyHasChanges = !0;
      }
      if (defaultBackground && t9.isStringLiteral(defaultBackground)) {
        newGlobals || (newGlobals = t9.objectExpression([]));
        let backgroundKey = getKeyFromName(
          backgroundsOptions?.values,
          defaultBackground.value
        );
        newGlobals.properties.push(
          t9.objectProperty(
            t9.identifier("backgrounds"),
            t9.objectExpression([
              t9.objectProperty(t9.identifier("value"), t9.stringLiteral(backgroundKey))
            ])
          )
        ), removeProperty(backgroundsParams, "default"), storyHasChanges = !0;
      }
      disableBackground && t9.isBooleanLiteral(disableBackground) && (removeProperty(backgroundsParams, "disable"), addProperty(backgroundsParams, "disabled", disableBackground), storyHasChanges = !0);
    }
    if (newGlobals && newGlobals.properties.length > 0) {
      let existingGlobals = getObjectProperty(storyObject, "globals");
      existingGlobals ? newGlobals.properties.forEach((newGlobal) => {
        if (t9.isObjectProperty(newGlobal) && t9.isIdentifier(newGlobal.key)) {
          let globalName = newGlobal.key.name, existingGlobal = getObjectProperty(existingGlobals, globalName);
          existingGlobal ? t9.isObjectExpression(newGlobal.value) && t9.isObjectExpression(existingGlobal) && newGlobal.value.properties.forEach((newProp) => {
            if (t9.isObjectProperty(newProp) && t9.isIdentifier(newProp.key)) {
              let propName = newProp.key.name;
              getObjectProperty(existingGlobal, propName) || existingGlobal.properties.push(newProp);
            }
          }) : existingGlobals.properties.push(newGlobal);
        }
      }) : storyObject.properties.push(t9.objectProperty(t9.identifier("globals"), newGlobals)), storyHasChanges = !0;
    }
    return viewportParams && viewportParams.properties.length === 0 && (removeProperty(parameters, "viewport"), storyHasChanges = !0), backgroundsParams && backgroundsParams.properties.length === 0 && (removeProperty(parameters, "backgrounds"), storyHasChanges = !0), parameters.properties.length === 0 && (removeProperty(storyObject, "parameters"), storyHasChanges = !0), storyHasChanges;
  }) ? storyConfig : null;
}

// src/automigrate/fixes/addon-mcp.ts
var import_picocolors10 = __toESM(require_picocolors(), 1);
import { getAddonNames as getAddonNames2 } from "storybook/internal/common";
import { logger as logger10 } from "storybook/internal/node-logger";
import { detectAgent } from "storybook/internal/telemetry";
import { dedent as dedent8 } from "ts-dedent";
var ADDON_MCP = "@storybook/addon-mcp", addonMcp = {
  id: "addon-mcp",
  link: "https://github.com/storybookjs/storybook/tree/next/code/addons/mcp",
  async check({ mainConfig }) {
    let agent = detectAgent();
    if (!agent)
      return null;
    let isInstalled = getAddonNames2(mainConfig).some((addon) => addon.includes(ADDON_MCP));
    return { agentName: agent.name, isInstalled };
  },
  prompt() {
    return dedent8`
      We detected this upgrade is running through an AI coding agent.
      We'll add or update ${import_picocolors10.default.magenta(ADDON_MCP)} to the latest version so the agent can talk to your running Storybook over MCP for more accurate assistance.
    `;
  },
  async run({ result, packageManager, configDir, dryRun }) {
    dryRun || (logger10.log(
      `${result.isInstalled ? "Updating" : "Installing"} ${import_picocolors10.default.magenta(ADDON_MCP)} to the latest version...`
    ), await add(ADDON_MCP, {
      configDir,
      packageManager: packageManager.type,
      skipInstall: !0,
      skipPostinstall: !0,
      yes: !0
    }));
  }
};

// src/automigrate/fixes/addon-mdx-gfm-remove.ts
import { getAddonNames as getAddonNames3, removeAddon } from "storybook/internal/common";
var addonMdxGfmRemove = {
  id: "addon-mdx-gfm-remove",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mdx-gfm-addon-removed",
  async check({ mainConfigPath, mainConfig, packageManager }) {
    if (!mainConfigPath)
      return null;
    try {
      let addonName = "@storybook/addon-mdx-gfm", hasMdxGfm = getAddonNames3(mainConfig).includes(addonName), hasMdxGfmInDeps = packageManager.isDependencyInstalled(addonName);
      return !hasMdxGfm && !hasMdxGfmInDeps ? null : !0;
    } catch {
      return null;
    }
  },
  prompt() {
    return "We'll remove @storybook/addon-mdx-gfm as it's no longer needed in Storybook 9.0.";
  },
  async run({ packageManager, configDir }) {
    await removeAddon("@storybook/addon-mdx-gfm", {
      configDir,
      skipInstall: !0,
      packageManager
    });
  }
};

// src/automigrate/fixes/addon-storysource-code-panel.ts
import { getAddonNames as getAddonNames4, removeAddon as removeAddon2 } from "storybook/internal/common";
import { logger as logger11 } from "storybook/internal/node-logger";
import { dedent as dedent9 } from "ts-dedent";
var addonStorysourceCodePanel = {
  id: "addon-storysource-code-panel",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#storysource-addon-removed",
  async check({ mainConfigPath, mainConfig }) {
    if (!mainConfigPath)
      return null;
    let addonNames = getAddonNames4(mainConfig), hasStorysource = addonNames.includes("@storybook/addon-storysource"), hasDocs = addonNames.includes("@storybook/addon-docs");
    return hasStorysource ? {
      hasStorysource,
      hasDocs
    } : null;
  },
  prompt: () => dedent9`
      We'll remove @storybook/addon-storysource and enable the Code Panel instead.
    `,
  run: async (options) => {
    let { result, dryRun = !1, packageManager, configDir, previewConfigPath } = options, { hasStorysource, hasDocs } = result, errors = [];
    if (hasStorysource) {
      if (!dryRun)
        if (logger11.debug("Removing @storybook/addon-storysource..."), await removeAddon2("@storybook/addon-storysource", {
          configDir,
          skipInstall: !0,
          packageManager
        }), hasDocs || (logger11.log("Installing @storybook/addon-docs..."), await add("@storybook/addon-docs", {
          configDir,
          packageManager: packageManager.type,
          skipInstall: !0,
          skipPostinstall: !0,
          yes: !0
        })), previewConfigPath)
          try {
            await updateMainConfig({ mainConfigPath: previewConfigPath, dryRun }, (previewConfig) => {
              previewConfig.setFieldValue(["parameters", "docs", "codePanel"], !0);
            });
          } catch (error) {
            console.log(error), errors.push({ file: previewConfigPath, error });
          }
        else
          logger11.log("No preview config file found. Please manually add code panel parameters."), logger11.log(dedent9`
          Add this to your .storybook/preview.js:
          export const parameters = {
            docs: {
              codePanel: true,
            },
          };`);
      if (errors.length > 0)
        throw new Error(
          `Failed to process ${errors.length} files:
${errors.map(({ file, error }) => `- ${file}: ${error.message}`).join(`
`)}`
        );
    }
  }
};

// src/automigrate/fixes/consolidated-imports.ts
import { readFile as readFile4, writeFile as writeFile4 } from "node:fs/promises";
import { transformImportFiles as transformImportFiles2, versions as versions2 } from "storybook/internal/common";
function transformPackageJson(content) {
  let packageJson = JSON.parse(content), hasChanges = !1, packagesToAdd = /* @__PURE__ */ new Set(), depTypes = ["dependencies", "devDependencies", "peerDependencies"], storybookVersion = null, storybookDepType = null;
  for (let depType of depTypes)
    if (packageJson[depType]?.storybook) {
      storybookVersion = packageJson[depType].storybook, storybookDepType = depType;
      break;
    }
  for (let depType of depTypes)
    if (packageJson[depType]) {
      for (let [dep] of Object.entries(packageJson[depType]))
        if (dep in consolidatedPackages) {
          let newPackage = consolidatedPackages[dep];
          !newPackage.startsWith("storybook/") && !newPackage.match(/(?:.*\/){2,}/) && packagesToAdd.add(newPackage), delete packageJson[depType][dep], hasChanges = !0;
        }
    }
  if (packagesToAdd.size > 0) {
    let version2 = storybookVersion ?? versions2["@storybook/nextjs-vite"], depType = storybookDepType ?? "devDependencies";
    packageJson[depType] = packageJson[depType] || {};
    for (let pkg of packagesToAdd)
      packageJson[depType][pkg] = version2;
    hasChanges = !0;
  }
  return hasChanges ? JSON.stringify(packageJson, null, 2) : null;
}
var transformPackageJsonFiles = async (files, dryRun) => {
  let errors = [], { default: pLimit } = await import("./p-limit-NHYXITBY.js"), limit = pLimit(10);
  return await Promise.all(
    files.map(
      (file) => limit(async () => {
        try {
          let contents = await readFile4(file, "utf-8"), transformed = transformPackageJson(contents);
          !dryRun && transformed && await writeFile4(file, transformed);
        } catch (error) {
          errors.push({ file, error });
        }
      })
    )
  ), errors;
}, consolidatedImports = {
  id: "consolidated-imports",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#dropped-support-for-legacy-packages",
  check: async ({ packageManager }) => {
    let consolidatedDeps = /* @__PURE__ */ new Set(), affectedPackageJSONFiles = /* @__PURE__ */ new Set();
    return await Promise.all(
      packageManager.packageJsonPaths.map(async (packageJsonPath) => {
        let contents = await readFile4(packageJsonPath, "utf-8"), packageJson = JSON.parse(contents), allDeps = {
          ...packageJson.dependencies || {},
          ...packageJson.devDependencies || {}
        }, hasConsolidatedDeps = !1;
        Object.keys(allDeps).forEach((dep) => {
          dep in consolidatedPackages && (consolidatedDeps.add(dep), hasConsolidatedDeps = !0);
        }), hasConsolidatedDeps && affectedPackageJSONFiles.add(packageJsonPath);
      })
    ), consolidatedDeps.size === 0 ? null : {
      consolidatedDeps
    };
  },
  prompt: () => "We've detected Storybook packages that have been renamed or consolidated. We'll update these packages by scanning your codebase and updating any imports from these packages.",
  run: async ({ dryRun = !1, packageManager, storiesPaths, configDir }) => {
    let errors = [], packageJsonErrors = await transformPackageJsonFiles(
      packageManager.packageJsonPaths,
      dryRun
    );
    errors.push(...packageJsonErrors);
    let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = await globby([`${configDir}/**/*`]), importErrors = await transformImportFiles2(
      [...storiesPaths, ...configFiles].filter(Boolean),
      {
        ...consolidatedPackages,
        "storybook/internal/manager-api": "storybook/manager-api",
        "storybook/internal/preview-api": "storybook/preview-api",
        "storybook/internal/theming": "storybook/theming",
        "storybook/internal/theming/create": "storybook/theming/create",
        "storybook/internal/test": "storybook/test",
        "storybook/internal/actions": "storybook/internal/actions",
        "storybook/internal/actions/decorator": "storybook/internal/actions/decorator",
        "storybook/internal/highlight": "storybook/internal/highlight",
        "storybook/internal/viewport": "storybook/internal/viewport"
      },
      !!dryRun
    );
    if (errors.push(...importErrors), errors.length > 0)
      throw new Error(
        `Failed to process ${errors.length} files:
${errors.map(({ file, error }) => `- ${file}: ${error.message}`).join(`
`)}`
      );
  }
};

// src/automigrate/fixes/eslint-plugin.ts
import {
  SUPPORTED_ESLINT_EXTENSIONS,
  configureEslintPlugin,
  extractEslintInfo
} from "storybook/internal/cli";
import { logger as logger12 } from "storybook/internal/node-logger";
import { dedent as dedent10 } from "ts-dedent";
var eslintPlugin = {
  id: "eslintPlugin",
  link: "https://storybook.js.org/docs/configure/integration/eslint-plugin",
  async check({ packageManager }) {
    let {
      hasEslint,
      eslintConfigFile,
      isStorybookPluginInstalled,
      unsupportedExtension,
      isFlatConfig
    } = await extractEslintInfo(packageManager);
    return isStorybookPluginInstalled || !hasEslint ? null : eslintConfigFile ? { eslintConfigFile, unsupportedExtension, isFlatConfig } : (logger12.warn("Unable to find eslint config file, skipping"), null);
  },
  prompt() {
    return "We'll install and configure the Storybook ESLint plugin for you.";
  },
  async run({
    result: { eslintConfigFile, unsupportedExtension, isFlatConfig },
    packageManager,
    dryRun,
    storybookVersion
  }) {
    let deps = [`eslint-plugin-storybook@${storybookVersion}`];
    if (logger12.debug(`Adding dependencies: ${deps}`), dryRun || await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, deps), !dryRun && unsupportedExtension) {
      logger12.warn(dedent10`
          The plugin was successfully installed but failed to be configured.
          
          Found an eslint config file with an unsupported automigration format: .eslintrc.${unsupportedExtension}.
          The supported formats for this automigration are: ${SUPPORTED_ESLINT_EXTENSIONS.join(
        ", "
      )}.

          Please refer to https://storybook.js.org/docs/configure/integration/eslint-plugin#configuration-eslintrc to finish setting up the plugin manually.
      `);
      return;
    }
    dryRun || await configureEslintPlugin({ eslintConfigFile, packageManager, isFlatConfig });
  }
};

// src/automigrate/fixes/experimental-features.ts
import { SupportedRenderer } from "storybook/internal/types";

// src/automigrate/helpers/versionBoundary.ts
var import_semver6 = __toESM(require_semver(), 1), crossesVersionBoundary = (beforeVersion, targetVersion, introducedIn) => {
  let before = import_semver6.default.coerce(beforeVersion), target = import_semver6.default.coerce(targetVersion);
  return !before || !target ? !1 : import_semver6.default.lt(before, introducedIn) && import_semver6.default.gte(target, introducedIn);
}, isAtOrPastVersion = (version2, introducedIn) => {
  let coerced = import_semver6.default.coerce(version2);
  return coerced !== null && import_semver6.default.gte(coerced, introducedIn);
};

// src/automigrate/fixes/experimental-features.ts
var hasDocgenProvider = (mainConfig) => getRendererName(mainConfig) === SupportedRenderer.REACT || ["@storybook/vue3-vite", "@storybook/angular-vite"].includes(
  getFrameworkPackageName(mainConfig) ?? ""
), createExperimentalFeatureFix = ({
  id,
  name,
  introducedIn,
  link: link2,
  prompt: prompt9,
  requires,
  isSupported
}) => ({
  id,
  link: link2,
  defaultSelected: !1,
  prompt: () => prompt9,
  async check({ mainConfigPath, mainConfig, beforeVersion, storybookVersion, requested }) {
    return !mainConfigPath || isSupported && !isSupported(mainConfig) || !isAtOrPastVersion(storybookVersion, introducedIn) || !requested && !(beforeVersion && crossesVersionBoundary(beforeVersion, storybookVersion, introducedIn)) || mainConfig.features?.[name] !== void 0 || requires && mainConfig.features?.[requires] === !1 ? null : {};
  },
  run: async ({ mainConfigPath, dryRun }) => {
    await updateMainConfig({ mainConfigPath, dryRun: !!dryRun }, async (main) => {
      main.setFieldValue(["features", name], !0);
    });
  }
}), enableExperimentalReview = createExperimentalFeatureFix({
  id: "enable-experimental-review",
  name: "experimentalReview",
  introducedIn: "10.5.0",
  requires: "changeDetection",
  link: "https://storybook.js.org/docs/api/main-config/main-config-features#experimentalreview",
  prompt: "Enable experimentalReview to offer the agentic review workflow to all MCP clients, not just the storybook ai CLI."
}), enableExperimentalDocgenServer = createExperimentalFeatureFix({
  id: "enable-experimental-docgen-server",
  name: "experimentalDocgenServer",
  introducedIn: "10.5.0",
  isSupported: hasDocgenProvider,
  link: "https://storybook.js.org/docs/api/main-config/main-config-features#experimentaldocgenserver",
  prompt: "Enable experimentalDocgenServer for faster startup and more accurate Controls/ArgTypes."
}), FEATURE_FLAG_FIXES = {
  experimentalReview: enableExperimentalReview,
  experimentalDocgenServer: enableExperimentalDocgenServer
}, resolveRequestedFeatures = (features) => {
  let names = features?.split(",").map((name) => name.trim()).filter(Boolean) ?? [], unknown = names.filter((name) => !Object.hasOwn(FEATURE_FLAG_FIXES, name));
  if (unknown.length > 0)
    throw new Error(
      `Unknown feature flag(s): ${unknown.join(", ")}. Available: ${Object.keys(FEATURE_FLAG_FIXES).join(", ")}.`
    );
  return names.map((name) => ({
    name,
    fixId: FEATURE_FLAG_FIXES[name].id
  }));
};

// src/automigrate/fixes/fix-faux-esm-require.ts
import { readFile as readFile5, writeFile as writeFile5 } from "node:fs/promises";
import { types as t10 } from "storybook/internal/babel";
import { dedent as dedent11 } from "ts-dedent";
function hasExistingDeclaration(program2, identifierName) {
  return program2.body.some((node) => t10.isVariableDeclaration(node) ? node.declarations.some((decl) => t10.isVariableDeclarator(decl) && t10.isIdentifier(decl.id) ? decl.id.name === identifierName : !1) : t10.isExportNamedDeclaration(node) && node.declaration && t10.isVariableDeclaration(node.declaration) ? node.declaration.declarations.some((decl) => t10.isVariableDeclarator(decl) && t10.isIdentifier(decl.id) ? decl.id.name === identifierName : !1) : t10.isFunctionDeclaration(node) && t10.isIdentifier(node.id) ? node.id.name === identifierName : t10.isExportNamedDeclaration(node) && node.declaration && t10.isFunctionDeclaration(node.declaration) ? t10.isIdentifier(node.declaration.id) && node.declaration.id.name === identifierName : !1);
}
var fixFauxEsmRequire = {
  id: "fix-faux-esm-require",
  link: "https://storybook.js.org/docs/faq#how-do-i-fix-module-resolution-in-special-environments",
  async check({ mainConfigPath }) {
    if (!mainConfigPath)
      return null;
    let content = await readFile5(mainConfigPath, "utf-8"), isESM = containsESMUsage(content), isWithBanner = hasRequireBanner(content);
    if (!isESM || isWithBanner)
      return null;
    let hasRequireUsage = containsRequireUsage(content), hasUnderscoreFilename = containsFilenameUsage(content), hasUnderscoreDirname = containsDirnameUsage(content);
    return hasRequireUsage || hasUnderscoreFilename || hasUnderscoreDirname ? {
      hasRequireUsage,
      hasUnderscoreDirname,
      hasUnderscoreFilename
    } : null;
  },
  prompt() {
    return dedent11`Main config is ESM but uses 'require' or '__dirname'. This will break in Storybook 10; Adding compatibility banner`;
  },
  async run({ dryRun, mainConfigPath, result }) {
    if (dryRun)
      return;
    let { hasRequireUsage, hasUnderscoreDirname, hasUnderscoreFilename } = result;
    await updateMainConfig({ mainConfigPath, dryRun: !!dryRun }, (mainConfig) => {
      hasRequireUsage && mainConfig.setImport(["createRequire"], "node:module"), hasUnderscoreDirname && mainConfig.setImport(["dirname"], "node:path"), (hasUnderscoreFilename || hasUnderscoreDirname) && mainConfig.setImport(["fileURLToPath"], "node:url");
      let body = mainConfig._ast.program.body, lastImportIndex = -1;
      for (let i = 0; i < body.length; i++)
        t10.isImportDeclaration(body[i]) && (lastImportIndex = i);
      let insertIndex = lastImportIndex + 1, hasExistingFilename = hasExistingDeclaration(mainConfig._ast.program, "__filename"), hasExistingDirname = hasExistingDeclaration(mainConfig._ast.program, "__dirname"), hasExistingRequire = hasExistingDeclaration(mainConfig._ast.program, "require");
      if (hasUnderscoreFilename || hasUnderscoreDirname) {
        let declarationsToInsert = [], insertOffset = 0;
        if ((hasUnderscoreFilename || hasUnderscoreDirname) && !hasExistingFilename) {
          let filenameDeclaration = t10.variableDeclaration("const", [
            t10.variableDeclarator(
              t10.identifier("__filename"),
              t10.callExpression(t10.identifier("fileURLToPath"), [
                t10.memberExpression(
                  t10.metaProperty(t10.identifier("import"), t10.identifier("meta")),
                  t10.identifier("url")
                )
              ])
            )
          ]);
          declarationsToInsert.push(filenameDeclaration), insertOffset++;
        }
        if (hasUnderscoreDirname && !hasExistingDirname) {
          let dirnameDeclaration = t10.variableDeclaration("const", [
            t10.variableDeclarator(
              t10.identifier("__dirname"),
              t10.callExpression(t10.identifier("dirname"), [t10.identifier("__filename")])
            )
          ]);
          declarationsToInsert.push(dirnameDeclaration), insertOffset++;
        }
        declarationsToInsert.forEach((declaration, index) => {
          body.splice(insertIndex + index, 0, declaration);
        });
      }
      if (hasRequireUsage && !hasExistingRequire) {
        let requireDeclaration = t10.variableDeclaration("const", [
          t10.variableDeclarator(
            t10.identifier("require"),
            t10.callExpression(t10.identifier("createRequire"), [
              t10.memberExpression(
                t10.metaProperty(t10.identifier("import"), t10.identifier("meta")),
                t10.identifier("url")
              )
            ])
          )
        ]), declarationsAdded = ((hasUnderscoreFilename || hasUnderscoreDirname) && !hasExistingFilename ? 1 : 0) + (hasUnderscoreDirname && !hasExistingDirname ? 1 : 0), currentInsertIndex = insertIndex + declarationsAdded;
        body.splice(currentInsertIndex, 0, requireDeclaration);
      }
    });
    let content = await readFile5(mainConfigPath, "utf-8"), newContent = [bannerComment, content].join(`
`);
    await writeFile5(mainConfigPath, newContent);
  }
};

// src/automigrate/fixes/initial-globals.ts
var import_picocolors11 = __toESM(require_picocolors(), 1);
import { readFile as readFile6, writeFile as writeFile6 } from "node:fs/promises";
import { formatConfig as formatConfig5, loadConfig as loadConfig5 } from "storybook/internal/csf-tools";
var initialGlobals = {
  id: "initial-globals",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewjs-globals-renamed-to-initialglobals",
  async check({ previewConfigPath }) {
    if (!previewConfigPath)
      return null;
    let previewConfig = loadConfig5((await readFile6(previewConfigPath)).toString()).parse(), globals = previewConfig.getFieldNode(["globals"]);
    return globals ? { globals, previewConfig, previewConfigPath } : null;
  },
  prompt() {
    return `Rename ${import_picocolors11.default.cyan("globals")} to ${import_picocolors11.default.cyan("initialGlobals")} in preview.js?`;
  },
  async run({ dryRun, result }) {
    result.previewConfig.removeField(["globals"]), result.previewConfig.setFieldNode(["initialGlobals"], result.globals), dryRun || await writeFile6(result.previewConfigPath, formatConfig5(result.previewConfig));
  }
};

// src/automigrate/fixes/migrate-addon-console.ts
import { readFileSync as readFileSync4, writeFileSync as writeFileSync4 } from "node:fs";
import { types as t11 } from "storybook/internal/babel";
import { formatFileContent as formatFileContent6, getAddonNames as getAddonNames5, removeAddon as removeAddon3 } from "storybook/internal/common";
import { formatConfig as formatConfig6, loadConfig as loadConfig6 } from "storybook/internal/csf-tools";
import { logger as logger13 } from "storybook/internal/node-logger";
var migrateAddonConsole = {
  id: "migrate-addon-console",
  link: "https://github.com/storybookjs/storybook/discussions/31657",
  async check({ mainConfig, packageManager, previewConfigPath }) {
    let addons = getAddonNames5(mainConfig), consoleAddon = "@storybook/addon-console", hasConsoleAddon = addons.some((addon) => addon.includes(consoleAddon)), hasConsoleAddonInDeps = packageManager.isDependencyInstalled(consoleAddon);
    return !hasConsoleAddon && !hasConsoleAddonInDeps ? null : {
      transformedPreviewCode: previewConfigPath ? await transformPreviewFile2(readFileSync4(previewConfigPath, "utf8"), previewConfigPath) : void 0
    };
  },
  prompt() {
    return "@storybook/addon-console can now be implemented with spies on the console object.";
  },
  async run({ packageManager, dryRun, configDir, previewConfigPath, result }) {
    let { transformedPreviewCode } = result;
    if (!dryRun) {
      previewConfigPath || logger13.debug(
        "addon-console was installed but no preview file was found. Creating a preview file."
      );
      let finalPreviewPath = previewConfigPath || `${configDir}/preview.ts`, finalTransformedCode = transformedPreviewCode || await transformPreviewFile2("", finalPreviewPath);
      logger13.debug("Updating preview file to replace addon-console logic with spies."), writeFileSync4(finalPreviewPath, finalTransformedCode, "utf8"), logger13.debug("Removing @storybook/addon-console addon."), await removeAddon3("@storybook/addon-console", {
        configDir,
        skipInstall: !0,
        packageManager
      });
    }
  }
};
async function transformPreviewFile2(source, filePath) {
  let previewConfig = loadConfig6(source).parse();
  previewConfig.setImport(["spyOn"], "storybook/test"), previewConfig.removeImport(null, "@storybook/addon-console");
  let callsToInject = [];
  for (let method of [
    "log",
    "warn",
    "error",
    "info",
    "debug",
    "trace",
    "count",
    "dir",
    "assert"
  ])
    callsToInject.push(
      t11.callExpression(
        t11.memberExpression(
          t11.callExpression(t11.identifier("spyOn"), [
            t11.identifier("console"),
            t11.stringLiteral(method)
          ]),
          t11.identifier("mockName")
        ),
        [t11.stringLiteral(`console.${method}`)]
      )
    );
  let defaultExport = previewConfig.hasDefaultExport ? previewConfig._ast.program.body.find((node) => t11.isExportDefaultDeclaration(node)) : void 0, beforeEach = previewConfig.getFieldNode(["beforeEach"]);
  if (!beforeEach) {
    let beforeEachExport = previewConfig._ast.program.body.find(
      (node) => t11.isExportNamedDeclaration(node) && t11.isFunctionDeclaration(node.declaration) && node.declaration.id?.name === "beforeEach"
    );
    beforeEachExport && (beforeEach = beforeEachExport.declaration);
  }
  if (!beforeEach && defaultExport) {
    if (t11.isIdentifier(defaultExport.declaration)) {
      let identifierName = defaultExport.declaration.name, variableDeclarations = previewConfig._ast.program.body.filter(
        (node) => t11.isVariableDeclaration(node)
      );
      for (let declaration of variableDeclarations)
        for (let declarator of declaration.declarations)
          if (t11.isVariableDeclarator(declarator) && t11.isIdentifier(declarator.id, { name: identifierName }) && t11.isObjectExpression(declarator.init) && (beforeEach = declarator.init.properties.find(
            (prop) => t11.isObjectMethod(prop) && t11.isIdentifier(prop.key, { name: "beforeEach" })
          ), !beforeEach)) {
            let beforeEachProperty = declarator.init.properties.find(
              (prop) => t11.isObjectProperty(prop) && t11.isIdentifier(prop.key, { name: "beforeEach" })
            );
            if (beforeEachProperty && t11.isFunctionExpression(beforeEachProperty.value) && (beforeEach = beforeEachProperty.value), beforeEachProperty && t11.isIdentifier(beforeEachProperty.value)) {
              let identifierName2 = beforeEachProperty.value.name;
              beforeEach = previewConfig._ast.program.body.find(
                (node) => t11.isFunctionDeclaration(node) && node.id?.name === identifierName2 || t11.isVariableDeclaration(node) && node.declarations.some(
                  (decl) => t11.isVariableDeclarator(decl) && t11.isIdentifier(decl.id, { name: identifierName2 }) && (t11.isFunctionExpression(decl.init) || t11.isArrowFunctionExpression(decl.init))
                )
              );
            }
          }
    }
    t11.isObjectExpression(defaultExport.declaration) && (beforeEach = previewConfig.getFieldNode(["default", "beforeEach"]));
  }
  if (beforeEach || (beforeEach = t11.functionExpression(t11.identifier("beforeEach"), [], t11.blockStatement([])), defaultExport && t11.isObjectExpression(defaultExport.declaration) ? defaultExport.declaration.properties.push(
    t11.objectProperty(t11.identifier("beforeEach"), beforeEach)
  ) : previewConfig._ast.program.body.push(
    t11.exportNamedDeclaration(
      t11.variableDeclaration("const", [
        t11.variableDeclarator(t11.identifier("beforeEach"), beforeEach)
      ])
    )
  )), t11.isFunctionDeclaration(beforeEach) || t11.isFunctionExpression(beforeEach) || t11.isArrowFunctionExpression(beforeEach) || t11.isObjectMethod(beforeEach)) {
    let functionBody = beforeEach.body;
    t11.isBlockStatement(functionBody) ? functionBody.body.push(...callsToInject.map((call) => t11.expressionStatement(call))) : beforeEach.body = t11.blockStatement([
      ...callsToInject.map((call) => t11.expressionStatement(call)),
      t11.returnStatement(functionBody)
    ]);
  }
  return formatFileContent6(filePath, formatConfig6(previewConfig));
}

// src/automigrate/fixes/nextjs-to-nextjs-vite.ts
import { readFile as readFile7, writeFile as writeFile7 } from "node:fs/promises";
import { transformImportFiles as transformImportFiles3 } from "storybook/internal/common";
import { logger as logger14 } from "storybook/internal/node-logger";
var VITE_DEFAULT_VERSION = "^7.0.0", transformMainConfig2 = async (mainConfigPath, dryRun) => {
  try {
    let content = await readFile7(mainConfigPath, "utf-8");
    if (!content.includes("@storybook/nextjs"))
      return !1;
    let transformedContent = content.replace(
      /@storybook\/nextjs(?!-vite)/g,
      "@storybook/nextjs-vite"
    );
    return transformedContent !== content && !dryRun && await writeFile7(mainConfigPath, transformedContent), transformedContent !== content;
  } catch (error) {
    return logger14.error(`Failed to update main config at ${mainConfigPath}: ${error}`), !1;
  }
}, nextjsToNextjsVite = {
  id: "nextjs-to-nextjs-vite",
  link: "https://storybook.js.org/docs/get-started/frameworks/nextjs-vite",
  defaultSelected: !1,
  async check({ packageManager }) {
    if (!packageManager.getAllDependencies()["@storybook/nextjs"])
      return null;
    let packageJsonFiles = [];
    for (let packageJsonPath of packageManager.packageJsonPaths)
      try {
        let content = await readFile7(packageJsonPath, "utf-8"), packageJson = JSON.parse(content);
        Object.keys({
          ...packageJson.dependencies || {},
          ...packageJson.devDependencies || {}
        }).includes("@storybook/nextjs") && packageJsonFiles.push(packageJsonPath);
      } catch {
        continue;
      }
    return {
      hasNextjsPackage: !0,
      packageJsonFiles
    };
  },
  prompt() {
    return "Migrate from @storybook/nextjs to @storybook/nextjs-vite (Vite framework)";
  },
  async run({
    result,
    dryRun = !1,
    mainConfigPath,
    storiesPaths,
    configDir,
    packageManager,
    storybookVersion
  }) {
    if (!result)
      return;
    if (logger14.step("Migrating from @storybook/nextjs to @storybook/nextjs-vite..."), dryRun)
      logger14.debug("Dry run: Skipping package.json updates.");
    else {
      logger14.debug("Updating package.json files...");
      let viteVersion = packageManager.getDependencyVersion("vite");
      await packageManager.removeDependencies(["@storybook/nextjs"]), await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, [
        `@storybook/nextjs-vite@${storybookVersion}`,
        ...viteVersion ? [] : [`vite@${VITE_DEFAULT_VERSION}`]
        // Add vite if it's not installed yet
      ]);
    }
    mainConfigPath && (logger14.debug("Updating main config file..."), await transformMainConfig2(mainConfigPath, dryRun)), logger14.debug("Scanning and updating import statements...");
    let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = await globby([`${configDir}/**/*`]), allFiles = [...storiesPaths, ...configFiles].filter(Boolean), transformErrors = await transformImportFiles3(
      allFiles,
      {
        "@storybook/nextjs": "@storybook/nextjs-vite"
      },
      !!dryRun
    );
    transformErrors.length > 0 && (logger14.warn(`Encountered ${transformErrors.length} errors during file transformation:`), transformErrors.forEach(({ file, error }) => {
      logger14.warn(`  - ${file}: ${error.message}`);
    })), logger14.step("Migration completed successfully!"), logger14.log(
      "For more information, see: https://storybook.js.org/docs/get-started/frameworks/nextjs-vite"
    );
  }
};

// src/automigrate/fixes/react-vite-to-tanstack-react.ts
import { readFile as readFile8, writeFile as writeFile8 } from "node:fs/promises";
import { transformImportFiles as transformImportFiles4 } from "storybook/internal/common";
import { logger as logger15, prompt as prompt4 } from "storybook/internal/node-logger";

// ../../../node_modules/tinyclip/dist/index.js
import { spawn } from "node:child_process";
var TIMEOUT = 2e3;
function checkUnixCommandExists(command2) {
  return new Promise((resolve4) => {
    let proc = spawn("which", [command2]);
    proc.on("error", () => resolve4(!1)), proc.on("close", (code) => resolve4(code === 0));
  });
}
async function getWriteCommand() {
  switch (process.platform) {
    case "darwin":
      return ["pbcopy", []];
    case "win32":
      return ["clip", []];
    case "linux":
    case "freebsd":
    case "openbsd":
      return process.env.WSL_DISTRO_NAME ? ["clip.exe", []] : process.env.WAYLAND_DISPLAY ? ["wl-copy", []] : await checkUnixCommandExists("xsel") ? ["xsel", ["--clipboard", "--input"]] : ["xclip", ["-selection", "clipboard", "-i"]];
    case "android":
      return ["termux-clipboard-set", []];
    default:
      return;
  }
}
function writeText(text) {
  return new Promise(async (resolve4, reject) => {
    let command2 = await getWriteCommand();
    if (!command2)
      return reject(new Error("No clipboard tool found"));
    let proc = spawn(...command2, {
      stdio: ["pipe", "ignore", "ignore"],
      signal: AbortSignal.timeout(TIMEOUT)
    });
    proc.on("error", (cause) => reject(new Error("An error occurred while copying", { cause }))), proc.on("close", (code) => code === 0 ? resolve4() : reject(new Error("An unknown error occurred while copying"))), proc.stdin.write(text), proc.stdin.end();
  });
}

// src/automigrate/fixes/react-vite-to-tanstack-react.ts
var import_picocolors12 = __toESM(require_picocolors(), 1);
import { dedent as dedent12 } from "ts-dedent";
var REACT_VITE_PACKAGE = "@storybook/react-vite", TANSTACK_REACT_PACKAGE = "@storybook/tanstack-react", TANSTACK_ROUTER_DECORATOR_MARKERS = [
  "createMemoryHistory",
  "createRootRoute",
  "createRouter",
  "RouterProvider"
], TANSTACK_ROUTER_PACKAGES = [
  "@tanstack/react-router",
  "@tanstack/router-core",
  "@tanstack/start",
  "@tanstack/react-start"
], fileLooksLikeTanstackRouterDecorator = (content) => TANSTACK_ROUTER_PACKAGES.some(
  (pkg) => new RegExp(`from\\s+['"]${pkg.replace(/[.*+?^${}()|[\\]\\\\]/g, "\\$&")}['"]`).test(content)
) ? TANSTACK_ROUTER_DECORATOR_MARKERS.some((marker) => content.includes(marker)) : !1, detectTanstackRouterDecorator = async ({
  previewConfigPath,
  configDir,
  storiesPaths
}) => {
  let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
    ignore: ["**/node_modules/**", "**/dist/**"]
  }) : [], candidateFiles = Array.from(
    /* @__PURE__ */ new Set([...previewConfigPath ? [previewConfigPath] : [], ...configFiles, ...storiesPaths])
  );
  for (let file of candidateFiles)
    try {
      let content = await readFile8(file, "utf-8");
      if (fileLooksLikeTanstackRouterDecorator(content))
        return !0;
    } catch {
      continue;
    }
  return !1;
}, transformMainConfig3 = async (mainConfigPath, dryRun) => {
  try {
    let content = await readFile8(mainConfigPath, "utf-8");
    if (!content.includes(REACT_VITE_PACKAGE))
      return !1;
    let transformedContent = content.replaceAll(REACT_VITE_PACKAGE, TANSTACK_REACT_PACKAGE);
    return transformedContent !== content && !dryRun && await writeFile8(mainConfigPath, transformedContent), transformedContent !== content;
  } catch (error) {
    return logger15.error(`Failed to update main config at ${mainConfigPath}: ${error}`), !1;
  }
}, buildAiMigrationPrompt = (previewConfigPath) => dedent12`
    You are migrating a Storybook project from the "${REACT_VITE_PACKAGE}" framework to the
    "${TANSTACK_REACT_PACKAGE}" framework. The framework swap in .storybook/main.* and the
    package.json dependency change have already been performed by the Storybook automigration
    CLI — do not redo those. Your job is to clean up the user-land code that the CLI cannot
    safely transform.

    Reference documentation:
    https://storybook.js.org/docs/get-started/frameworks/tanstack-react

    # Background

    "${TANSTACK_REACT_PACKAGE}" is a TanStack Router-aware Storybook framework built on top
    of @storybook/react-vite. It mounts every story inside a TanStack Router (in-memory
    history) automatically. Manual router setup that users previously wired into a
    decorator is now redundant and must be removed — leaving it in place creates a nested
    router and breaks stories.

    Telltale signs of a manual decorator that must be removed (any of these in
    preview / decorator / story files):
      - imports from "@tanstack/react-router", "@tanstack/router-core",
        "@tanstack/start", or "@tanstack/react-start" used to construct a router
      - calls to createMemoryHistory(...), createRootRoute(...), createRouter(...)
      - JSX usage of <RouterProvider router={...} />
      - a decorator function (e.g. const withRouter = (Story) => <RouterProvider .../>)
        wired into "decorators: [...]" of a meta or preview

    # The replacement APIs from "${TANSTACK_REACT_PACKAGE}"

    All of the following are exported from "${TANSTACK_REACT_PACKAGE}" — re-exporting the
    @storybook/react primitives plus the TanStack-specific additions. Use these instead of
    a hand-rolled router decorator. Only opt in when a story actually needs a specific
    route — by default the framework's auto-router is enough.

    1) Preview-level default route (CSF factories — recommended).

       In ${previewConfigPath ?? ".storybook/preview.*"}:

         import { definePreview } from '@storybook/tanstack-react';
         import { routeTree } from '../src/routeTree.gen'; // or a custom Route

         export default definePreview({
           // optional — registers a default route for every story in the project
           route: routeTree,
           parameters: { /* ... */ },
         });

    2) Per-meta route via "parameters.tanstack.router" (works with both CSF factories
       and CSF3). Most TanStack-Router-decorator removals translate to this:

         // CSF factories style (preferred when the project already uses preview.meta):
         import preview from '#.storybook/preview';
         import { Route } from './Page';

         const meta = preview.meta({
           title: 'Example/Page',
           parameters: {
             tanstack: {
               router: {
                 route: Route,
               },
             },
           },
         });

         export const Default = meta.story();

         // CSF3 style:
         import type { Meta, StoryObj } from '@storybook/tanstack-react';
         import { Route } from './Page';

         const meta = {
           title: 'Example/Page',
           parameters: {
             tanstack: { router: { route: Route } },
           },
         } satisfies Meta<typeof Route>;

         export default meta;
         export const Default: StoryObj<typeof meta> = {};

    3) Per-story override — same shape, but on a single story's "parameters" instead of
       the meta. Useful when one story needs a different route than the others.

    4) Additional "parameters.tanstack.router" fields you can use when needed:
         - "path"           initial pathname (e.g. '/users/$id')
         - "params"         URL params object (typed against the route)
         - "query"          search params object (typed against the route)
         - "routeOverrides" map of route id -> { loader / beforeLoad / validateSearch / ... }
                            for mocking specific routes in the registered tree
         - "useRouterContext" function that returns a custom router context per story

       Do NOT introduce any of these unless the original decorator was clearly setting up
       that exact behavior. Remove the decorator first; only port over the bits that were
       actually doing work.

    5) Type imports. If the project uses CSF3 types, switch them from "@storybook/react"
       (or "@storybook/react-vite") to "@storybook/tanstack-react":

         - import type { Meta, StoryObj } from '@storybook/react';
         + import type { Meta, StoryObj } from '@storybook/tanstack-react';

       The TanStack-aware "Meta" infers TanStack parameter types from the route in
       "component" / parameters, giving type-safe params/query.

    # Tasks (perform in order, in the user's repository)

    1. Open ${previewConfigPath ?? ".storybook/preview.*"} and remove any TanStack Router
       decorator from the "decorators" array. The decorator may be:
         - defined inline in this file, or
         - imported from another module (commonly .storybook/decorators.ts,
           .storybook/withRouter.tsx, or similar) — in that case remove BOTH the
           import + usage here AND delete the decorator definition at its source.
       If the source decorator file becomes empty after removal, delete the file.

       Confirm "definePreview" is imported from "@storybook/tanstack-react" (not
       "@storybook/react" or "@storybook/react-vite"). If the project has a single
       project-wide route to register, pass it via "definePreview({ route })".

    2. Search the whole repository (not just .storybook/) for any *.stories.* file that
       declares a per-story or per-meta TanStack Router decorator and remove it. If the
       removed decorator was setting up a specific route, port that to
       "parameters.tanstack.router" using the APIs above (route / path / params / query /
       routeOverrides — whichever applies).

    3. Drop now-unused imports of: RouterProvider, createRouter, createMemoryHistory,
       createRootRoute, Outlet (from "@tanstack/react-router" / "@tanstack/router-core" /
       "@tanstack/start" / "@tanstack/react-start"). Keep imports that are still
       legitimately used elsewhere in the file (Link, useNavigate, createRoute when used
       to build a Route passed to "parameters.tanstack.router.route", etc.).

    4. Update story-type imports from "@storybook/react" / "@storybook/react-vite" to
       "@storybook/tanstack-react" wherever the story uses TanStack router parameters,
       so the types pick up the TanStack additions.

    5. Preserve CSF factories syntax. If the file uses
       "definePreview({...})" / "preview.meta({...})" / "meta.story(...)", keep that shape;
       only mutate the affected fields. Do not rewrite CSF1/CSF2/CSF3 -> CSF factories or
       vice versa.

    6. Preserve all other decorators, parameters, args, argTypes, loaders, beforeEach,
       tags, and globals exactly as they were. Only the TanStack Router decorator is
       being removed.

    7. Do not edit .storybook/main.*, package.json, or any lockfile — those are already
       handled by the automigration CLI.

    # Verification checklist before finishing

      - No remaining manual "RouterProvider", "createRouter", "createMemoryHistory",
        "createRootRoute" usage in preview, .storybook/**, or *.stories.*.
      - "decorators" arrays no longer contain the removed TanStack Router decorator.
      - All previously imported router symbols that are no longer referenced are gone.
      - Story files importing TanStack-aware types use "@storybook/tanstack-react".
      - TypeScript still compiles. Storybook still loads. Stories that don't need a
        specific route now rely on the framework's default in-memory router; stories
        that do specify a route do so via "parameters.tanstack.router".
  `, reactViteToTanstackReact = {
  id: "react-vite-to-tanstack-react",
  link: "https://storybook.js.org/docs/get-started/frameworks/tanstack-react",
  defaultSelected: !1,
  async check({
    packageManager,
    previewConfigPath,
    configDir,
    storiesPaths
  }) {
    let allDeps = packageManager.getAllDependencies(), hasReactVitePackage = !!allDeps[REACT_VITE_PACKAGE], hasTanstackRouter = TANSTACK_ROUTER_PACKAGES.some((pkg) => !!allDeps[pkg]);
    return !hasReactVitePackage || !hasTanstackRouter ? null : {
      hasTanstackRouterDecorator: await detectTanstackRouterDecorator({
        previewConfigPath,
        configDir,
        storiesPaths: storiesPaths ?? []
      })
    };
  },
  prompt() {
    return `Migrate from ${REACT_VITE_PACKAGE} to ${TANSTACK_REACT_PACKAGE} (TanStack Router-aware framework)`;
  },
  async run({
    result,
    dryRun = !1,
    mainConfigPath,
    previewConfigPath,
    storiesPaths,
    configDir,
    packageManager,
    storybookVersion,
    yes
  }) {
    if (!result)
      return;
    logger15.step(`Migrating from ${REACT_VITE_PACKAGE} to ${TANSTACK_REACT_PACKAGE}...`), dryRun ? logger15.debug("Dry run: Skipping package.json updates.") : (logger15.debug("Updating package.json files..."), await packageManager.removeDependencies([REACT_VITE_PACKAGE]), await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, [
      `${TANSTACK_REACT_PACKAGE}@${storybookVersion}`
    ])), mainConfigPath && (logger15.debug("Updating main config file..."), await transformMainConfig3(mainConfigPath, dryRun)), logger15.debug("Scanning and updating import statements...");
    let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
      ignore: ["**/node_modules/**", "**/dist/**"]
    }) : [], allFiles = [...storiesPaths, ...configFiles, previewConfigPath].filter(
      Boolean
    ), transformErrors = await transformImportFiles4(
      allFiles,
      {
        [REACT_VITE_PACKAGE]: TANSTACK_REACT_PACKAGE
      },
      !!dryRun
    );
    if (transformErrors.length > 0 && (logger15.warn(`Encountered ${transformErrors.length} errors during file transformation:`), transformErrors.forEach(({ file, error }) => {
      logger15.warn(`  - ${file}: ${error.message}`);
    })), result.hasTanstackRouterDecorator && (logger15.logBox(
      dedent12`
          We detected what looks like a manual TanStack Router decorator in
          ${import_picocolors12.default.cyan(previewConfigPath ?? ".storybook/preview")}.

          ${import_picocolors12.default.bold(TANSTACK_REACT_PACKAGE)} wraps every story in a TanStack Router
          automatically (see ${import_picocolors12.default.yellow(
        "https://storybook.js.org/docs/get-started/frameworks/tanstack-react"
      )}), so that decorator is no longer needed and should be removed.
        `
    ), yes ? !0 : await prompt4.confirm({
      message: "Would you like a ready-to-paste AI prompt to help remove the now-unused TanStack Router decorator?",
      initialValue: !0
    }))) {
      let aiPrompt = buildAiMigrationPrompt(previewConfigPath), separator = import_picocolors12.default.dim("\u2500".repeat(60)), clipboardOk = !1;
      try {
        await writeText(aiPrompt), clipboardOk = !0;
      } catch {
      }
      logger15.logBox(
        dedent12`${clipboardOk ? "AI migration prompt copied to clipboard. Full prompt below:" : "Clipboard not available in this environment. Copy the AI migration prompt below manually:"}

            ${separator}
            ${aiPrompt}
            ${separator}`
      );
    }
    logger15.step("Migration completed successfully!"), logger15.log(
      "For more information, see: https://storybook.js.org/docs/get-started/frameworks/tanstack-react"
    );
  }
};

// src/automigrate/fixes/remove-addon-interactions.ts
import { getAddonNames as getAddonNames6, removeAddon as removeAddon4 } from "storybook/internal/common";
var removeAddonInteractions = {
  id: "remove-addon-interactions",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#essentials-addon-viewport-controls-interactions-and-actions-moved-to-core",
  async check({ mainConfig, packageManager }) {
    let addons = getAddonNames6(mainConfig), interactionsAddon = "@storybook/addon-interactions", hasInteractionsAddon = addons.some((addon) => addon.includes(interactionsAddon)), hasInteractionsAddonInDeps = packageManager.isDependencyInstalled(interactionsAddon);
    return !hasInteractionsAddon && !hasInteractionsAddonInDeps ? null : !0;
  },
  prompt() {
    return "@storybook/addon-interactions has been moved to Storybook core and will be removed from your configuration.";
  },
  async run({ packageManager, dryRun, configDir }) {
    dryRun || await removeAddon4("@storybook/addon-interactions", {
      configDir,
      skipInstall: !0,
      packageManager
    });
  }
};

// src/automigrate/fixes/remove-docs-autodocs.ts
var import_picocolors13 = __toESM(require_picocolors(), 1);
import { Tag } from "storybook/internal/core-server";
import { readConfig as readConfig4 } from "storybook/internal/csf-tools";
var logger16 = {
  log: (message) => {
    process.env.NODE_ENV !== "test" && console.log(message);
  }
}, removeDocsAutodocs = {
  id: "remove-docs-autodocs",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mainjs-docsautodocs-is-deprecated",
  async check({ mainConfigPath }) {
    if (!mainConfigPath)
      return null;
    try {
      let autodocs = (await readConfig4(mainConfigPath)).getSafeFieldValue(["docs", "autodocs"]);
      return autodocs === void 0 ? null : {
        autodocs
      };
    } catch {
      return null;
    }
  },
  prompt: () => `${import_picocolors13.default.cyan("docs.autodocs")} has been removed in Storybook 9 and will be removed from your configuration.`,
  async run({ result, dryRun, mainConfigPath, previewConfigPath }) {
    let { autodocs } = result;
    logger16.log(`\u{1F504} Updating ${import_picocolors13.default.cyan("docs")} parameter in main config file...`), await updateMainConfig({ mainConfigPath, dryRun: !!dryRun }, async (main) => {
      let docs = main.getFieldValue(["docs"]) || {};
      dryRun || (delete docs.autodocs, Object.keys(docs).length === 0 ? main.removeField(["docs"]) : main.setFieldValue(["docs"], docs));
    }), autodocs === !0 && previewConfigPath && (logger16.log(`\u{1F504} Updating ${import_picocolors13.default.cyan("tags")} parameter in preview config file...`), await updateMainConfig(
      { mainConfigPath: previewConfigPath, dryRun: !!dryRun },
      async (preview) => {
        let tags = preview.getFieldValue(["tags"]) || [];
        !tags.includes(Tag.AUTODOCS) && !dryRun && preview.setFieldValue(["tags"], [...tags, Tag.AUTODOCS]);
      }
    ));
  }
};

// src/automigrate/fixes/remove-essentials.ts
import { getAddonNames as getAddonNames7, removeAddon as removeAddon5, transformImportFiles as transformImportFiles5 } from "storybook/internal/common";

// src/automigrate/fixes/remove-essentials.utils.ts
function moveEssentialOptions(dryRun, essentialsOptions) {
  return async (main) => {
    let features = main.getFieldValue(["features"]) || {};
    dryRun || main.setFieldValue(["features"], {
      ...features,
      ...essentialsOptions
    });
  };
}

// src/automigrate/fixes/remove-essentials.ts
var consolidatedAddons = {
  "@storybook/addon-actions": "storybook/actions",
  "@storybook/addon-controls": "storybook/internal/controls",
  "@storybook/addon-toolbars": "storybook/internal/toolbars",
  "@storybook/addon-highlight": "storybook/highlight",
  "@storybook/addon-measure": "storybook/measure",
  "@storybook/addon-outline": "storybook/outline",
  "@storybook/addon-backgrounds": "storybook/backgrounds",
  "@storybook/addon-viewport": "storybook/viewport"
}, removeEssentials = {
  id: "remove-essential-addons",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#essentials-addon-viewport-controls-interactions-and-actions-moved-to-core",
  async check({ mainConfigPath, mainConfig, packageManager }) {
    if (!mainConfigPath)
      return null;
    try {
      let hasEssentialsAddon = !1, hasDocsAddon = !1, hasDocsDisabled = !1, essentialsOptions, additionalAddonsToRemove = [], CORE_ADDONS = [
        "@storybook/addon-actions",
        "@storybook/addon-backgrounds",
        "@storybook/addon-controls",
        "@storybook/addon-highlight",
        "@storybook/addon-measure",
        "@storybook/addon-outline",
        "@storybook/addon-toolbars",
        "@storybook/addon-viewport"
      ], addonNames = getAddonNames7(mainConfig);
      hasEssentialsAddon = addonNames.includes("@storybook/addon-essentials"), hasDocsAddon = addonNames.includes("@storybook/addon-docs");
      let allDeps = packageManager.getAllDependencies(), installedAddons = Object.keys(allDeps);
      for (let addon of CORE_ADDONS)
        (addonNames.includes(addon) || installedAddons.includes(addon)) && additionalAddonsToRemove.push(addon);
      if (hasEssentialsAddon) {
        let essentialsEntry = mainConfig.addons?.find((addon) => typeof addon == "string" ? addon.includes("@storybook/addon-essentials") : addon.name.includes("@storybook/addon-essentials"));
        if (typeof essentialsEntry == "object") {
          let options = essentialsEntry.options || {};
          hasDocsDisabled = options.docs === !1;
          let optionsExceptDocs = Object.fromEntries(
            Object.entries(options).filter(([key]) => key !== "docs")
          );
          Object.keys(optionsExceptDocs).length > 0 && (essentialsOptions = optionsExceptDocs);
        }
      }
      if (!hasEssentialsAddon && additionalAddonsToRemove.length === 0)
        return null;
      let result = {
        hasEssentials: hasEssentialsAddon,
        hasDocsDisabled,
        hasDocsAddon,
        additionalAddonsToRemove,
        allDeps
      };
      return essentialsOptions && (result.essentialsOptions = essentialsOptions), result;
    } catch {
      return null;
    }
  },
  prompt() {
    return "In Storybook 9.0, several addons have been moved into Storybook's core and are no longer needed as separate packages. We'll remove the unnecessary addons from your configuration and dependencies, and update your code to use the new core features.";
  },
  async run({
    result,
    dryRun,
    packageManager,
    configDir,
    storiesPaths,
    mainConfigPath,
    previewConfigPath
  }) {
    let { hasEssentials, hasDocsDisabled, additionalAddonsToRemove, essentialsOptions } = result;
    if (!(!hasEssentials && additionalAddonsToRemove.length === 0) && !dryRun) {
      hasEssentials && await removeAddon5("@storybook/addon-essentials", {
        configDir,
        packageManager,
        skipInstall: !0
      });
      for (let addon of additionalAddonsToRemove)
        await removeAddon5(addon, {
          configDir,
          packageManager,
          skipInstall: !0
        });
      let errors = await transformImportFiles5(
        [...storiesPaths, mainConfigPath, previewConfigPath].filter(Boolean),
        consolidatedAddons,
        dryRun
      );
      if (errors.length > 0)
        throw new Error(
          `Failed to process ${errors.length} files:
${errors.map(({ file, error }) => `- ${file}: ${error.message}`).join(`
`)}`
        );
      essentialsOptions && await updateMainConfig(
        { mainConfigPath, dryRun: !!dryRun },
        moveEssentialOptions(dryRun, essentialsOptions)
      ), !hasDocsDisabled && hasEssentials && await add("@storybook/addon-docs", {
        configDir,
        packageManager: packageManager.type,
        skipInstall: !0,
        skipPostinstall: !0,
        yes: !0
      });
    }
  }
};

// src/automigrate/fixes/renderer-to-framework.ts
import { readFile as readFile9, writeFile as writeFile9 } from "node:fs/promises";
import {
  frameworkPackages as frameworkPackages4,
  frameworkToRenderer,
  rendererPackages as rendererPackages2
} from "storybook/internal/common";
import { logger as logger17 } from "storybook/internal/node-logger";
var getAllDependencies = (packageJson) => Object.keys({
  ...packageJson.dependencies || {},
  ...packageJson.devDependencies || {}
}), detectFrameworks = (dependencies) => Object.keys(frameworkPackages4).filter((pkg) => dependencies.includes(pkg)), detectRenderers = (dependencies) => Object.keys(rendererPackages2).filter((pkg) => dependencies.includes(pkg)).filter((pkg) => !Object.keys(frameworkPackages4).includes(pkg)), replaceImports = (source, renderer, framework) => {
  let regex = new RegExp(`(['"])${renderer}(['"])`, "g");
  return regex.test(source) ? source.replace(regex, `$1${framework}$2`) : null;
}, transformSourceFiles = async (files, renderer, framework, dryRun) => {
  let errors = [], { default: pLimit } = await import("./p-limit-NHYXITBY.js"), limit = pLimit(10);
  return await Promise.all(
    files.map(
      (file) => limit(async () => {
        try {
          let contents = await readFile9(file, "utf-8"), transformed = replaceImports(contents, renderer, framework);
          !dryRun && transformed && await writeFile9(file, transformed);
        } catch (error) {
          errors.push({ file, error });
        }
      })
    )
  ), errors;
}, removeRendererInPackageJson = async (packageJsonPath, renderer, dryRun) => {
  try {
    let content = await readFile9(packageJsonPath, "utf-8"), packageJson = JSON.parse(content), hasChanges = !1;
    return packageJson.dependencies?.[renderer] && (delete packageJson.dependencies[renderer], hasChanges = !0), packageJson.devDependencies?.[renderer] && (delete packageJson.devDependencies[renderer], hasChanges = !0), !dryRun && hasChanges && await writeFile9(packageJsonPath, JSON.stringify(packageJson, null, 2)), hasChanges;
  } catch (error) {
    throw new Error(`Failed to update package.json: ${error}`);
  }
}, checkPackageJson = async (packageJsonPath) => {
  let content = await readFile9(packageJsonPath, "utf-8"), packageJson = JSON.parse(content), dependencies = getAllDependencies(packageJson), frameworks = detectFrameworks(dependencies);
  if (frameworks.length === 0)
    return null;
  let renderers = detectRenderers(dependencies);
  return renderers.length === 0 ? null : { frameworks, renderers };
}, rendererToFramework = {
  id: "renderer-to-framework",
  promptType: "auto",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#moving-from-renderer-based-to-framework-based-configuration",
  async check({ packageManager }) {
    let validResults = (await Promise.all(
      packageManager.packageJsonPaths.map(async (file) => {
        try {
          return await checkPackageJson(file);
        } catch {
          return null;
        }
      })
    )).filter(
      (r) => r !== null && r.renderers.length > 0
    );
    return validResults.length === 0 ? null : {
      frameworks: [...new Set(validResults.flatMap((r) => r.frameworks))],
      renderers: [...new Set(validResults.flatMap((r) => r.renderers))],
      packageJsonFiles: packageManager.packageJsonPaths.filter((_, i) => validResults[i] !== null)
    };
  },
  prompt() {
    return "We're moving from renderer-based to framework-based configuration and update your imports and dependencies accordingly.";
  },
  async run(options) {
    let { result, dryRun = !1, storiesPaths, configDir } = options;
    for (let selectedFramework of result.frameworks) {
      if (!frameworkPackages4[selectedFramework]) {
        logger17.warn(`Framework name not found for ${selectedFramework}, skipping.`);
        continue;
      }
      let rendererName = frameworkToRenderer[frameworkPackages4[selectedFramework]], [rendererPackage] = Object.entries(rendererPackages2).find(([, renderer]) => renderer === rendererName) ?? [];
      if (!rendererPackage) {
        logger17.warn(`Renderer package not found for ${selectedFramework}, skipping.`);
        continue;
      }
      if (rendererPackage === selectedFramework)
        continue;
      logger17.debug(`
Migrating ${rendererPackage} to ${selectedFramework}`);
      let { globby } = await import("./globby-VIFFPMQ3.js"), configFiles = await globby([`${configDir}/**/*`]);
      await transformSourceFiles(
        [...storiesPaths, ...configFiles].filter(Boolean),
        rendererPackage,
        selectedFramework,
        dryRun
      ), logger17.debug("Updating package.json files..."), await Promise.all(
        result.packageJsonFiles.map(
          (file) => removeRendererInPackageJson(file, rendererPackage, dryRun)
        )
      );
    }
  }
};

// src/automigrate/fixes/rn-ondevice-addons-to-device-addons.ts
import { existsSync as existsSync4 } from "node:fs";
import { basename as basename3, dirname as dirname3, isAbsolute as isAbsolute3, join as join5, resolve as resolve3 } from "node:path";
import { findConfigFile, loadMainConfig } from "storybook/internal/common";
import { logger as logger18 } from "storybook/internal/node-logger";

// ../../core/src/shared/constants/config-folder.ts
var RN_STORYBOOK_DIR = ".rnstorybook";

// src/automigrate/fixes/rn-ondevice-addons-to-device-addons.ts
var resolveAbsoluteConfigDir = (configDir) => isAbsolute3(configDir) ? configDir : join5(process.cwd(), configDir), getSiblingStorybookConfigDir = (configDirAbs) => {
  let base = basename3(configDirAbs), parent = dirname3(configDirAbs);
  if (base === ".storybook") {
    let rn = join5(parent, RN_STORYBOOK_DIR);
    return existsSync4(rn) ? rn : null;
  }
  if (base === RN_STORYBOOK_DIR) {
    let web = join5(parent, ".storybook");
    return existsSync4(web) ? web : null;
  }
  return null;
}, isReactNativeMain = (mainConfigPath, mainConfig) => basename3(dirname3(mainConfigPath)) === RN_STORYBOOK_DIR ? !0 : getFrameworkPackageName(mainConfig) === "@storybook/react-native", hasAddonsToRename = (cfg) => {
  let addons = cfg.addons;
  return !(!Array.isArray(addons) || addons.length === 0 || cfg.deviceAddons !== void 0);
}, rnOndeviceAddonsToDeviceAddons = {
  id: "rn-ondevice-addons-to-device-addons",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-native-on-device-addons-moved-to-deviceaddons",
  async check({ mainConfig, packageManager, configDir, mainConfigPath }) {
    if (!packageManager.getAllDependencies()["@storybook/react-native"])
      return null;
    let candidateDirs = [];
    if (configDir) {
      let absConfigDir = resolveAbsoluteConfigDir(configDir);
      candidateDirs.push(absConfigDir);
      let siblingConfigDir = getSiblingStorybookConfigDir(absConfigDir);
      siblingConfigDir && candidateDirs.push(siblingConfigDir);
    }
    let targets = [], seenResolvedMainPaths = /* @__PURE__ */ new Set();
    if (candidateDirs.length > 0)
      for (let dir of candidateDirs) {
        let mainPath = findConfigFile("main", dir);
        if (!mainPath)
          continue;
        let resolvedMain = resolve3(mainPath);
        if (seenResolvedMainPaths.has(resolvedMain))
          continue;
        seenResolvedMainPaths.add(resolvedMain);
        let cfg;
        if (mainConfigPath && resolve3(mainConfigPath) === resolvedMain)
          cfg = mainConfig;
        else
          try {
            cfg = await loadMainConfig({ configDir: dir });
          } catch (e) {
            logger18.debug(
              `Failed to load Storybook main config at ${dir}: ${e instanceof Error ? e.message : String(e)}`
            );
            continue;
          }
        isReactNativeMain(mainPath, cfg) && hasAddonsToRename(cfg) && targets.push({ mainConfigPath: mainPath });
      }
    else mainConfigPath && isReactNativeMain(mainConfigPath, mainConfig) && hasAddonsToRename(mainConfig) && targets.push({ mainConfigPath });
    return targets.length === 0 ? null : { targets };
  },
  prompt() {
    return "Renaming `addons` to `deviceAddons` in your React Native Storybook config (on-device addons must not be evaluated as Node.js presets).";
  },
  async run({ result, dryRun }) {
    for (let { mainConfigPath } of result.targets)
      await updateMainConfig({ mainConfigPath, dryRun: !!dryRun }, (main) => {
        let node = main.getFieldNode(["addons"]);
        node && (main.setFieldNode(["deviceAddons"], node), main.removeField(["addons"]));
      });
  }
};

// src/automigrate/fixes/rnstorybook-config.ts
import { existsSync as existsSync5 } from "node:fs";
import { readFile as readFile10, rename, writeFile as writeFile10 } from "node:fs/promises";
import { join as join6 } from "node:path";
import { dedent as dedent13 } from "ts-dedent";
async function renameInFile(filePath, oldText, newText) {
  try {
    let updatedContent = (await readFile10(filePath, "utf8")).replaceAll(oldText, newText);
    await writeFile10(filePath, updatedContent, "utf8");
  } catch (error) {
    console.error(`Error updating references in ${filePath}:`, error);
  }
}
var getDotStorybookReferences = async (searchDir) => {
  try {
    let { globby } = await import("./globby-VIFFPMQ3.js"), { readFile: readFile12 } = await import("node:fs/promises"), files = await globby(`${searchDir}/**/*`, {
      onlyFiles: !0,
      gitignore: !0
    }), referencedFiles = [];
    return await Promise.all(
      files.map(async (file) => {
        try {
          (await readFile12(file, "utf8")).includes(".storybook") && referencedFiles.push(file);
        } catch {
        }
      })
    ), referencedFiles;
  } catch (fsError) {
    return console.warn("Unable to search for .storybook references:", fsError), [];
  }
}, rnstorybookConfig = {
  id: "rnstorybook-config",
  link: "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-native-config-dir-renamed",
  async check({ packageManager, mainConfigPath }) {
    if (!packageManager.getAllDependencies()["@storybook/react-native"])
      return null;
    let projectDir = mainConfigPath ? join6(mainConfigPath, "..", "..") : process.cwd(), storybookDir = join6(projectDir, ".storybook"), rnStorybookDir = join6(projectDir, RN_STORYBOOK_DIR), { globby } = await import("./globby-VIFFPMQ3.js"), requiresFiles = await globby(join6(storybookDir, "storybook.requires.*"));
    return existsSync5(storybookDir) && requiresFiles.length > 0 && !existsSync5(rnStorybookDir) ? { storybookDir, rnStorybookDir } : null;
  },
  prompt() {
    return dedent13`We'll rename your .storybook directory to .rnstorybook and update all references to it.`;
  },
  async run({ result: { storybookDir, rnStorybookDir }, dryRun, packageManager }) {
    let instanceDir = packageManager.instanceDir, dotStorybookReferences = await getDotStorybookReferences(instanceDir);
    dryRun || (await Promise.all(
      dotStorybookReferences.map(async (ref) => {
        await renameInFile(ref, ".storybook", RN_STORYBOOK_DIR);
      })
    ), await rename(storybookDir, rnStorybookDir));
  }
};

// src/automigrate/fixes/storybook-package-name-conflict.ts
var import_picocolors14 = __toESM(require_picocolors(), 1);
import { dedent as dedent14 } from "ts-dedent";
var storybookPackageNameConflict = {
  id: "storybookPackageNameConflict",
  promptType: "notification",
  link: "https://github.com/storybookjs/storybook/issues/28725",
  async check({ packageManager }) {
    let packageName = packageManager.primaryPackageJson.packageJson.name;
    return packageName === "storybook" ? { packageName } : null;
  },
  prompt() {
    return dedent14`
      Your package.json ${import_picocolors14.default.cyan('"name"')} field is set to ${import_picocolors14.default.cyan('"storybook"')}.

      In npm, pnpm, or yarn workspaces this creates a symlink at
      ${import_picocolors14.default.yellow("node_modules/storybook")} that shadows the real Storybook
      package, causing ${import_picocolors14.default.red('"Cannot find module storybook/internal/..."')} errors.

      To fix this, rename the ${import_picocolors14.default.cyan('"name"')} field in your package.json
      to something other than ${import_picocolors14.default.cyan('"storybook"')} (e.g. "my-storybook", "docs", "@myorg/storybook").
    `;
  }
};

// src/automigrate/fixes/upgrade-storybook-related-dependencies.ts
var import_semver7 = __toESM(require_semver(), 1);
import { readFileSync as readFileSync5 } from "node:fs";
import { dirname as dirname4 } from "node:path";
import { isCorePackage, isSatelliteAddon } from "storybook/internal/common";
import { logger as logger19 } from "storybook/internal/node-logger";
import { dedent as dedent15 } from "ts-dedent";
async function getLatestVersions(packageManager, packages) {
  return Promise.all(
    packages.map(async ([packageName]) => ({
      packageName,
      beforeVersion: await packageManager.getInstalledVersion(packageName),
      afterVersion: await packageManager.latestVersion(packageName)
    }))
  );
}
function isValidVersionType(packageName, specifier) {
  return specifier.startsWith("patch:") || specifier.startsWith("file:") || specifier.startsWith("link:") || specifier.startsWith("portal:") || specifier.startsWith("git:") || specifier.startsWith("git+") || specifier.startsWith("http:") || specifier.startsWith("https:") || specifier.startsWith("workspace:") ? (logger19.debug(`Skipping ${packageName} as it does not have a valid version type: ${specifier}`), !1) : !0;
}
var upgradeStorybookRelatedDependencies = {
  id: "upgrade-storybook-related-dependencies",
  promptType: "auto",
  defaultSelected: !1,
  async check({ packageManager, storybookVersion }) {
    logger19.debug("Checking for incompatible storybook packages...");
    let analyzedPackages = await getIncompatibleStorybookPackages({
      currentStorybookVersion: storybookVersion,
      packageManager,
      skipErrors: !0
    }), allDependencies = packageManager.getAllDependencies(), storybookDependencies = Object.keys(allDependencies).filter((dep) => dep.includes("storybook")).filter((dep) => !isCorePackage(dep) && !isSatelliteAddon(dep)), incompatibleDependencies = analyzedPackages.filter((pkg) => pkg.hasIncompatibleDependencies).map((pkg) => pkg.packageName), uniquePackages = Array.from(
      new Set(
        [...storybookDependencies, ...incompatibleDependencies].filter(
          (dep) => isValidVersionType(dep, allDependencies[dep])
        )
      )
    ).map((packageName) => [packageName, allDependencies[packageName]]), upgradablePackages = (await getLatestVersions(packageManager, uniquePackages)).filter(
      ({ afterVersion, beforeVersion, packageName }) => beforeVersion === null || afterVersion === null || allDependencies[packageName] === null ? !1 : (0, import_semver7.gt)(afterVersion, beforeVersion)
    );
    return upgradablePackages.length > 0 ? { upgradable: upgradablePackages } : null;
  },
  prompt() {
    return "We'll upgrade the community packages that are compatible.";
  },
  async run({ result: { upgradable }, packageManager, dryRun }) {
    if (dryRun) {
      logger19.log(dedent15`
        The following would have been upgraded:
        ${upgradable.map(
        ({ packageName, afterVersion, beforeVersion }) => `${packageName}: ${beforeVersion} => ${afterVersion}`
      ).join(`
`)}
      `);
      return;
    }
    upgradable.length > 0 && packageManager.packageJsonPaths.forEach((packageJsonPath) => {
      let packageJson = JSON.parse(readFileSync5(packageJsonPath, "utf-8"));
      upgradable.forEach((item) => {
        if (!item)
          return;
        let { packageName, afterVersion: version2 } = item, prefixed = `^${version2}`;
        packageJson.dependencies?.[packageName] && (packageJson.dependencies[packageName] = prefixed), packageJson.devDependencies?.[packageName] && (packageJson.devDependencies[packageName] = prefixed), packageJson.peerDependencies?.[packageName] && (packageJson.peerDependencies[packageName] = prefixed);
      }), packageManager.writePackageJson(packageJson, dirname4(packageJsonPath));
    });
  }
};

// src/automigrate/fixes/wrap-getAbsolutePath.ts
import { detectPnp } from "storybook/internal/cli";
import {
  getAbsolutePathWrapperAsCallExpression,
  getAbsolutePathWrapperName,
  getFieldsForGetAbsolutePathWrapper,
  isGetAbsolutePathWrapperNecessary,
  wrapValueWithGetAbsolutePathWrapper
} from "storybook/internal/common";
import { readConfig as readConfig5 } from "storybook/internal/csf-tools";
import { CommonJsConfigNotSupportedError } from "storybook/internal/server-errors";
import { dedent as dedent16 } from "ts-dedent";
var wrapGetAbsolutePath = {
  id: "wrap-getAbsolutePath",
  link: "https://storybook.js.org/docs/faq#how-do-i-fix-module-resolution-in-special-environments",
  async check({ packageManager, storybookVersion, mainConfigPath }) {
    let isStorybookInMonorepo = packageManager.isStorybookInMonorepo(), isPnp = await detectPnp();
    if (!mainConfigPath)
      return null;
    let config = await readConfig5(mainConfigPath);
    if (!isStorybookInMonorepo && !isPnp || !getFieldsForGetAbsolutePathWrapper(config).some(
      (node) => isGetAbsolutePathWrapperNecessary(node)
    ))
      return null;
    let isConfigTypescript = mainConfigPath.endsWith(".ts") || mainConfigPath.endsWith(".tsx");
    return { storybookVersion, isStorybookInMonorepo, isPnp, isConfigTypescript };
  },
  prompt() {
    return dedent16`We have detected that you're using Storybook in a monorepo or PnP project. Some fields in your main config must be updated.`;
  },
  async run({ dryRun, mainConfigPath, result }) {
    await updateMainConfig({ dryRun: !!dryRun, mainConfigPath }, (mainConfig) => {
      if (getFieldsForGetAbsolutePathWrapper(mainConfig).forEach((node) => {
        wrapValueWithGetAbsolutePathWrapper(mainConfig, node);
      }), getAbsolutePathWrapperName(mainConfig) === null) {
        if (mainConfig?.fileName?.endsWith(".cjs") || mainConfig?.fileName?.endsWith(".cts") || mainConfig?.fileName?.endsWith(".cjsx") || mainConfig?.fileName?.endsWith(".ctsx") || mainConfig._code.includes("module.exports"))
          throw new CommonJsConfigNotSupportedError();
        mainConfig.setImport(["dirname"], "node:path"), mainConfig.setImport(["fileURLToPath"], "node:url"), mainConfig.setBodyDeclaration(
          getAbsolutePathWrapperAsCallExpression(result.isConfigTypescript)
        );
      }
    });
  }
};

// src/automigrate/fixes/index.ts
var allFixes = [
  eslintPlugin,
  addonMdxGfmRemove,
  addonStorysourceCodePanel,
  upgradeStorybookRelatedDependencies,
  initialGlobals,
  addonGlobalsApi,
  addonA11yAddonTest,
  consolidatedImports,
  addonExperimentalTest,
  rnstorybookConfig,
  rnOndeviceAddonsToDeviceAddons,
  migrateAddonConsole,
  nextjsToNextjsVite,
  angularToAngularVite,
  angularViteRemoveCompodoc,
  reactViteToTanstackReact,
  removeAddonInteractions,
  addonMcp,
  rendererToFramework,
  removeEssentials,
  addonA11yParameters,
  removeDocsAutodocs,
  wrapGetAbsolutePath,
  fixFauxEsmRequire,
  storybookPackageNameConflict,
  enableExperimentalReview,
  enableExperimentalDocgenServer
];
var commandFixes = [csfFactories];

// src/automigrate/helpers/logMigrationSummary.ts
var import_picocolors15 = __toESM(require_picocolors(), 1);
import { CLI_COLORS as CLI_COLORS2, logger as logger20 } from "storybook/internal/node-logger";
import { dedent as dedent17 } from "ts-dedent";
var messageDivider2 = `

`, segmentDivider = `

\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500

`;
function getGlossaryMessages(fixSummary, fixResults) {
  let messages2 = [];
  return fixSummary.succeeded.length > 0 && (messages2.push(import_picocolors15.default.bold("Successful migrations:")), messages2.push(fixSummary.succeeded.map((m) => import_picocolors15.default.green(m)).join(", "))), Object.keys(fixSummary.failed).length > 0 && (messages2.push(import_picocolors15.default.bold("Failed migrations:")), messages2.push(
    Object.entries(fixSummary.failed).map(([id, error]) => `${import_picocolors15.default.bold(import_picocolors15.default.red(id))}:
${error}`).join(`
`)
  )), fixSummary.manual.length > 0 && (messages2.push(import_picocolors15.default.bold("Manual migrations:")), messages2.push(
    fixSummary.manual.map(
      (m) => fixResults[m] === "manual_succeeded" /* MANUAL_SUCCEEDED */ ? import_picocolors15.default.green(m) : import_picocolors15.default.blue(m)
    ).join(", ")
  )), fixSummary.skipped.length > 0 && (messages2.push(import_picocolors15.default.bold("Skipped migrations:")), messages2.push(fixSummary.skipped.map((m) => import_picocolors15.default.cyan(m)).join(", "))), messages2;
}
function logMigrationSummary({
  fixResults,
  fixSummary
}) {
  let messages2 = [];
  messages2.push(getGlossaryMessages(fixSummary, fixResults).join(messageDivider2)), messages2.push(dedent17`If you'd like to run the migrations again, you can do so by running 
    ${import_picocolors15.default.cyan("npx storybook automigrate")}
    
    The automigrations try to migrate common patterns in your project, but might not contain everything needed to migrate to the latest version of Storybook.
    
    Please check the changelog and migration guide for manual migrations and more information: 
    https://storybook.js.org/docs/releases/migration-guide?ref=upgrade
    And reach out on Discord if you need help: https://discord.gg/storybook
  `);
  let hasNoFixes = Object.values(fixResults).every((r) => r === "unnecessary" /* UNNECESSARY */), hasFailures2 = Object.values(fixResults).some(
    (r) => r === "failed" /* FAILED */ || r === "check_failed" /* CHECK_FAILED */
  );
  hasNoFixes ? logger20.warn("No migrations were applicable to your project") : hasFailures2 ? logger20.error("Migration check ran with failures") : logger20.step(CLI_COLORS2.success("Migration check ran successfully")), logger20.log(messages2.filter(Boolean).join(segmentDivider));
}

// src/automigrate/index.ts
var logAvailableMigrations = () => {
  let availableFixes = [...allFixes, ...commandFixes].map((f) => import_picocolors16.default.yellow(f.id)).map((x) => `- ${x}`).join(`
`);
  logger21.log(dedent18`
    The following migrations are available:
    ${availableFixes}
  `);
}, hasFailures = (fixResults) => Object.values(fixResults || {}).some(
  (r) => r === "failed" /* FAILED */ || r === "check_failed" /* CHECK_FAILED */
), doAutomigrate = async (options) => {
  logger21.debug("Extracting storybook data...");
  let {
    mainConfig,
    mainConfigPath,
    previewConfigPath,
    versionInstalled,
    configDir,
    packageManager,
    storiesPaths,
    hasCsfFactoryPreview
  } = await getStorybookData({
    configDir: options.configDir,
    packageManagerName: options.packageManager
  });
  if (!mainConfigPath)
    throw new Error("Could not determine main config path");
  let outcome = await automigrate({
    ...options,
    packageManager,
    storybookVersion: versionInstalled || versions3.storybook,
    mainConfigPath,
    mainConfig,
    previewConfigPath,
    configDir,
    isUpgrade: !1,
    isLatest: !1,
    storiesPaths,
    hasCsfFactoryPreview
  });
  if (Object.values(outcome?.fixResults ?? {}).some(
    (r) => r === "succeeded" /* SUCCEEDED */ || r === "manual_succeeded" /* MANUAL_SUCCEEDED */
  ) && !options.skipInstall && (await packageManager.installDependencies(), await configureDeferredAddons(outcome?.addonsToPostinstall ?? [], {
    packageManager: packageManager.type,
    configDir,
    yes: options.yes,
    logger: logger21,
    prompt: prompt5
  })), outcome && !options.skipDoctor && await doctor({ configDir, packageManager: options.packageManager }), hasFailures(outcome?.fixResults)) {
    let failedMigrations = Object.entries(outcome?.fixResults ?? {}).filter(([, status]) => status === "failed" /* FAILED */ || status === "check_failed" /* CHECK_FAILED */).map(([id, status]) => {
      let statusLabel = status === "check_failed" /* CHECK_FAILED */ ? "check failed" : "failed";
      return `${import_picocolors16.default.cyan(id)} (${statusLabel})`;
    });
    throw new AutomigrateError({ errors: failedMigrations });
  }
}, automigrate = async ({
  fixId,
  fixes: inputFixes,
  dryRun,
  yes,
  packageManager,
  list,
  configDir,
  mainConfig,
  mainConfigPath,
  previewConfigPath,
  storybookVersion,
  renderer: rendererPackage,
  skipInstall,
  hideMigrationSummary = !1,
  isUpgrade,
  isLatest,
  storiesPaths,
  hasCsfFactoryPreview,
  glob
}) => {
  if (list)
    return logAvailableMigrations(), null;
  let commandFix = commandFixes.find((f) => f.id === fixId);
  if (commandFix)
    return logger21.step(`Running migration ${import_picocolors16.default.magenta(fixId)}..`), await commandFix.run({
      mainConfigPath,
      previewConfigPath,
      packageManager,
      configDir,
      dryRun,
      mainConfig,
      result: null,
      storybookVersion,
      storiesPaths,
      yes,
      glob
    }), null;
  let selectedFixes = inputFixes || allFixes.filter((fix) => !(fix.id === upgradeStorybookRelatedDependencies.id && isLatest === !1 && fixId !== upgradeStorybookRelatedDependencies.id)), fixes = fixId ? selectedFixes.filter((f) => f.id === fixId) : selectedFixes;
  if (fixId && fixes.length === 0)
    return logger21.log(`\u{1F4ED} No migrations found for ${import_picocolors16.default.magenta(fixId)}.`), logAvailableMigrations(), null;
  logger21.step("Checking possible migrations..");
  let { fixResults, fixSummary, preCheckFailure, addonsToPostinstall } = await runFixes({
    fixes,
    fixId,
    packageManager,
    rendererPackage,
    skipInstall,
    configDir,
    previewConfigPath,
    mainConfig,
    mainConfigPath,
    storybookVersion,
    isUpgrade: !!isUpgrade,
    dryRun,
    yes,
    storiesPaths,
    hasCsfFactoryPreview
  });
  return hasFailures(fixResults) && logTracker2.enableLogWriting(), hideMigrationSummary || logMigrationSummary({
    fixResults,
    fixSummary
  }), { fixResults, preCheckFailure, addonsToPostinstall };
};
async function runFixes({
  fixes,
  fixId,
  dryRun,
  yes,
  rendererPackage,
  skipInstall,
  configDir,
  packageManager,
  mainConfig,
  mainConfigPath,
  previewConfigPath,
  storybookVersion,
  storiesPaths,
  hasCsfFactoryPreview
}) {
  let fixResults = {}, fixSummary = { succeeded: [], failed: {}, manual: [], skipped: [] }, addonsToPostinstall = [];
  for (let i = 0; i < fixes.length; i += 1) {
    let f = fixes[i], result;
    try {
      logger21.debug(`Running ${import_picocolors16.default.cyan(f.id)} migration checks`), result = await f.check({
        packageManager,
        configDir,
        rendererPackage,
        mainConfig,
        storybookVersion,
        previewConfigPath,
        mainConfigPath,
        storiesPaths,
        hasCsfFactoryPreview,
        requested: fixId === f.id
      }), logger21.debug(`End of ${import_picocolors16.default.cyan(f.id)} migration checks`);
    } catch (error) {
      logger21.warn(`\u26A0\uFE0F  failed to check fix ${import_picocolors16.default.bold(f.id)}`), error instanceof Error && (logger21.error(`
${error.stack}`), fixSummary.failed[f.id] = error.message), fixResults[f.id] = "check_failed" /* CHECK_FAILED */;
    }
    if (result) {
      let promptType = typeof f.promptType == "function" ? await f.promptType(result) : f.promptType ?? "auto";
      logger21.log(`\u{1F50E} found a '${import_picocolors16.default.cyan(f.id)}' migration:`);
      let getTitle = () => {
        switch (promptType) {
          case "auto":
            return "Automigration detected";
          case "manual":
            return "Manual migration detected";
          case "notification":
            return "Migration notification";
        }
      }, currentTaskLogger = prompt5.taskLog({
        id: `automigrate-task-${f.id}`,
        title: `${getTitle()}: ${import_picocolors16.default.cyan(f.id)}`
      });
      logger21.logBox(f.prompt());
      let runAnswer;
      try {
        if (dryRun)
          runAnswer = { fix: !1 };
        else if (yes)
          runAnswer = { fix: !0 }, promptType === "manual" && (fixResults[f.id] = "manual_succeeded" /* MANUAL_SUCCEEDED */, fixSummary.manual.push(f.id));
        else if (promptType === "manual") {
          if (fixResults[f.id] = "manual_succeeded" /* MANUAL_SUCCEEDED */, fixSummary.manual.push(f.id), !await prompt5.confirm(
            {
              message: "Select continue once you have made the required changes, or quit to exit the migration process",
              initialValue: !0,
              active: "continue",
              inactive: "quit"
            },
            {
              onCancel: () => {
                throw new Error();
              }
            }
          )) {
            fixResults[f.id] = "manual_skipped" /* MANUAL_SKIPPED */;
            break;
          }
        } else promptType === "auto" ? runAnswer = { fix: yes ? !0 : await prompt5.confirm(
          {
            message: `Do you want to run the '${import_picocolors16.default.cyan(f.id)}' migration on your project?`,
            initialValue: f.defaultSelected ?? !0
          },
          {
            onCancel: () => {
              throw new Error();
            }
          }
        ) } : promptType === "notification" && (runAnswer = { fix: await prompt5.confirm(
          {
            message: "Do you want to continue?"
          },
          {
            onCancel: () => {
              throw new Error();
            }
          }
        ) });
      } catch {
        break;
      }
      if (promptType === "auto")
        if (invariant(runAnswer, "runAnswer must be defined if not promptOnly"), runAnswer.fix)
          try {
            invariant(typeof f.run == "function", "run method should be available in fix."), invariant(mainConfigPath, "Main config path should be defined to run migration."), await f.run({
              result,
              packageManager,
              dryRun,
              mainConfigPath,
              configDir,
              previewConfigPath,
              mainConfig,
              skipInstall,
              storybookVersion,
              storiesPaths,
              yes,
              addonsToPostinstall
            }), logger21.log(`\u2705 ran ${import_picocolors16.default.cyan(f.id)} migration`), fixResults[f.id] = "succeeded" /* SUCCEEDED */, fixSummary.succeeded.push(f.id), currentTaskLogger.success(`Ran ${import_picocolors16.default.cyan(f.id)} migration`);
          } catch (error) {
            fixResults[f.id] = "failed" /* FAILED */;
            let errorMessage = error instanceof Error ? error.message : "Failed to run migration";
            fixSummary.failed[f.id] = errorMessage, currentTaskLogger.error(`Error when running ${import_picocolors16.default.cyan(f.id)} migration`);
          }
        else
          fixResults[f.id] = "skipped" /* SKIPPED */, fixSummary.skipped.push(f.id), currentTaskLogger.success(`Skipped ${import_picocolors16.default.cyan(f.id)} migration`);
    } else
      fixResults[f.id] = fixResults[f.id] || "unnecessary" /* UNNECESSARY */;
  }
  return { fixResults, fixSummary, addonsToPostinstall };
}

// src/link.ts
var import_cross_spawn = __toESM(require_cross_spawn(), 1);
import { mkdir, readFile as readFile11, writeFile as writeFile11 } from "node:fs/promises";
import { basename as basename4, extname as extname3, join as join7 } from "node:path";
import { executeCommand } from "storybook/internal/common";
import { logger as logger22 } from "storybook/internal/node-logger";
var link = async ({ target, local, start }) => {
  let storybookDir = process.cwd();
  try {
    if (JSON.parse(await readFile11("package.json", { encoding: "utf8" })).name !== "@storybook/code")
      throw new Error();
  } catch {
    throw new Error("Expected to run link from the root of the storybook monorepo");
  }
  let reproDir = target, reproName = basename4(target);
  if (!local) {
    let reprosDir = join7(storybookDir, "../storybook-repros");
    logger22.info(`Ensuring directory ${reprosDir}`), await mkdir(reprosDir, { recursive: !0 }), logger22.info(`Cloning ${target}`), await executeCommand({
      command: "git",
      args: ["clone", target],
      cwd: reprosDir
    }), reproName = basename4(target, extname3(target)), reproDir = join7(reprosDir, reproName);
  }
  let version2 = (0, import_cross_spawn.sync)("yarn", ["--version"], {
    cwd: reproDir,
    stdio: "pipe",
    shell: !0
  }).stdout.toString();
  if (!/^[2-4]\./.test(version2)) {
    logger22.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`), logger22.warn(""), logger22.warn("Please set it up with `yarn set version berry`,"), logger22.warn(`then link '${reproDir}' with the '--local' flag.`);
    return;
  }
  logger22.info(`Linking ${reproDir}`), await executeCommand({
    command: "yarn",
    args: ["link", "--all", "--relative", storybookDir],
    cwd: reproDir
  }), logger22.info(`Installing ${reproName}`);
  let reproPackageJson = JSON.parse(
    await readFile11(join7(reproDir, "package.json"), { encoding: "utf8" })
  );
  reproPackageJson.devDependencies?.vite || (reproPackageJson.devDependencies = {
    ...reproPackageJson.devDependencies,
    "webpack-hot-middleware": "*"
  }), reproPackageJson.devDependencies = {
    ...reproPackageJson.devDependencies,
    "@types/node": "^22"
  }, await writeFile11(join7(reproDir, "package.json"), JSON.stringify(reproPackageJson, null, 2)), await executeCommand({
    command: "yarn",
    args: ["install"],
    cwd: reproDir
  }), start && (logger22.info(`Running ${reproName} storybook`), await executeCommand({
    command: "yarn",
    args: ["run", "storybook"],
    cwd: reproDir
  }));
};

// src/migrate.ts
import { logger as logger23 } from "storybook/internal/node-logger";
import { listCodemods, runCodemod as runCodemod2 } from "@storybook/codemod";
async function migrate(migration, { glob, dryRun, list, rename: rename2, parser }) {
  if (list)
    listCodemods().forEach((key) => logger23.log(key));
  else if (migration)
    await runCodemod2(migration, { glob, dryRun, logger: logger23, rename: rename2, parser });
  else
    throw new Error("Migrate: please specify a migration name or --list");
}

// src/sandbox.ts
var import_cross_spawn2 = __toESM(require_cross_spawn(), 1);
import { existsSync as existsSync6 } from "node:fs";
import { mkdir as mkdir2, readdir, rm } from "node:fs/promises";
import { isAbsolute as isAbsolute4 } from "node:path";
import { PackageManagerName } from "storybook/internal/common";
import {
  JsPackageManagerFactory,
  isCI,
  optionalEnvToBoolean as optionalEnvToBoolean2,
  versions as versions4
} from "storybook/internal/common";
import { logger as logger24, prompt as prompt6 } from "storybook/internal/node-logger";
var import_picocolors17 = __toESM(require_picocolors(), 1), import_semver8 = __toESM(require_semver(), 1);
import { dedent as dedent19 } from "ts-dedent";

// src/sandbox-templates.ts
var baseTemplates = {
  "cra/default-js": {
    name: "Create React App Latest (Webpack | JavaScript)",
    script: `
      npx create-react-app {{beforeDir}} && cd {{beforeDir}} &&       jq '.browserslist.production[0] = ">0.9%"' package.json > tmp.json && mv tmp.json package.json
    `,
    expected: {
      // TODO: change this to @storybook/cra once that package is created
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"],
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: (config) => {
        let stories = config.getFieldValue(["stories"]);
        return {
          features: {
            experimentalTestSyntax: !0
          },
          stories: stories?.map((s) => typeof s == "string" ? s.replace(/\|(tsx?|ts)\b|\b(tsx?|ts)\|/g, "") : s)
        };
      }
    }
  },
  "cra/default-ts": {
    name: "Create React App Latest (Webpack | TypeScript)",
    script: `
      npx create-react-app {{beforeDir}} --template typescript && cd {{beforeDir}} &&       jq '.browserslist.production[0] = ">0.9%"' package.json > tmp.json && mv tmp.json package.json
    `,
    // Re-enable once https://github.com/storybookjs/storybook/issues/19351 is fixed.
    skipTasks: ["smoke-test", "bench", "vitest-integration"],
    expected: {
      // TODO: change this to @storybook/cra once that package is created
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        features: {
          experimentalTestSyntax: !0
        }
      }
    }
  },
  "nextjs/14-ts": {
    name: "Next.js v14.2 (Webpack | TypeScript)",
    script: 'npx create-next-app {{beforeDir}} --skip-install -e https://github.com/vercel/next.js/tree/v14.2.17/examples/hello-world && cd {{beforeDir}} && npm pkg set "dependencies.next"="^14.2.17" && yarn && git add . && git commit --amend --no-edit && cd ..',
    expected: {
      framework: "@storybook/nextjs",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      },
      extraDevDependencies: ["server-only", "prop-types"]
    },
    initOptions: {
      builder: "webpack5" /* WEBPACK5 */
    },
    skipTasks: ["e2e-tests-dev", "e2e-tests", "bench", "vitest-integration"]
  },
  "nextjs/15-ts": {
    name: "Next.js v15 (Webpack | TypeScript)",
    script: 'npx create-next-app@^15.5 {{beforeDir}} --skip-install --eslint --tailwind --app --import-alias="@/*" --src-dir',
    expected: {
      framework: "@storybook/nextjs",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      },
      extraDevDependencies: ["server-only", "prop-types"]
    },
    initOptions: {
      builder: "webpack5" /* WEBPACK5 */
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "nextjs/default-ts": {
    name: "Next.js Latest (Webpack | TypeScript)",
    script: 'npx create-next-app {{beforeDir}} --skip-install --eslint --tailwind --app --import-alias="@/*" --src-dir',
    expected: {
      framework: "@storybook/nextjs",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0,
          changeDetection: !0
        }
      },
      extraDevDependencies: ["server-only", "prop-types"]
    },
    initOptions: {
      builder: "webpack5" /* WEBPACK5 */
    },
    skipTasks: ["bench", "vitest-integration"]
  },
  "nextjs/prerelease": {
    name: "Next.js Prerelease (Webpack | TypeScript)",
    script: 'npx create-next-app@canary {{beforeDir}} --skip-install --eslint --tailwind --app --import-alias="@/*" --src-dir',
    // The point of this template is the canary line, and canaries are published
    // daily. `@next/*` covers the platform binaries, and `eslint-config-next`
    // is pinned to the same canary version by create-next-app.
    //
    // `@tailwindcss/turbopack` is not part of that line — `--tailwind` pulls it in,
    // and it is new enough that `^4` has only ever matched one release. Until it has
    // a second one, every release it makes is the sole candidate and the gate blocks
    // the whole template. Drop this entry once 4.x has some history.
    minAgeGateExemptions: ["next", "@next/*", "eslint-config-next", "@tailwindcss/turbopack"],
    expected: {
      framework: "@storybook/nextjs",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      },
      extraDevDependencies: ["server-only", "prop-types"]
    },
    initOptions: {
      builder: "webpack5" /* WEBPACK5 */
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "nextjs-vite/14-ts": {
    name: "Next.js v14 (Vite | TypeScript)",
    script: 'npx create-next-app@^14 {{beforeDir}} --skip-install --eslint --tailwind --app --import-alias="@/*" --src-dir',
    expected: {
      framework: "@storybook/nextjs-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        framework: "@storybook/nextjs-vite",
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      },
      extraDevDependencies: ["server-only", "vite", "prop-types"]
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "nextjs-vite/15-ts": {
    name: "Next.js v15 (Vite | TypeScript)",
    script: 'npx create-next-app@^15 {{beforeDir}} --skip-install --eslint --tailwind --app --import-alias="@/*" --src-dir',
    expected: {
      framework: "@storybook/nextjs-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        framework: "@storybook/nextjs-vite",
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      },
      extraDevDependencies: ["server-only", "vite", "prop-types"]
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "nextjs-vite/default-ts": {
    name: "Next.js Latest (Vite | TypeScript)",
    script: 'npx create-next-app {{beforeDir}} --skip-install --eslint --no-tailwind --app --import-alias="@/*" --src-dir',
    expected: {
      framework: "@storybook/nextjs-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      mainConfig: {
        framework: "@storybook/nextjs-vite",
        features: {
          experimentalRSC: !0,
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0,
          changeDetection: !0
        }
      },
      extraDevDependencies: ["server-only", "vite", "prop-types"]
    },
    skipTasks: ["bench"]
  },
  "react-vite/default-js": {
    name: "React Latest (Vite | JavaScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template react",
    expected: {
      framework: "@storybook/react-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        features: {
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "react-vite/default-ts": {
    name: "React Latest (Vite | TypeScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template react-ts",
    expected: {
      framework: "@storybook/react-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types", "@types/prop-types"],
      mainConfig: {
        features: {
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0,
          changeDetection: !0
        }
      }
    },
    skipTasks: ["bench"],
    typeCheck: !0
  },
  "react-vite/prerelease-ts": {
    name: "React Prerelease (Vite | TypeScript)",
    /**
     * Create a Vite project with the React template. The beta React, React-DOM and @types packages,
     * see https://react.dev/blog/2024/04/25/react-19-upgrade-guide#installing
     */
    script: "npm create vite --yes {{beforeDir}} -- --template react-ts",
    // Beta React is applied after scaffold (extraDependencies / resolutions). The allowlist
    // still has to live on before-storybook so later installs under the 7-day gate can
    // resolve those packages. `scheduler` ships in lockstep with React releases.
    minAgeGateExemptions: ["react", "react-dom", "types-react", "types-react-dom", "scheduler"],
    expected: {
      framework: "@storybook/react-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      extraDependencies: ["react@beta", "react-dom@beta"],
      extraDevDependencies: [
        "prop-types",
        "@types/react@npm:types-react@beta",
        "@types/react-dom@npm:types-react-dom@beta"
      ],
      resolutions: {
        "@types/react": "npm:types-react@beta",
        "@types/react-dom": "npm:types-react-dom@beta",
        react: "npm:react@beta",
        "react-dom": "npm:react-dom@beta"
      },
      mainConfig: {
        features: {
          developmentModeForBuild: !0,
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "react-webpack/18-ts": {
    name: "React Latest (Webpack | TypeScript)",
    script: "npx create-webpack5-react {{beforeDir}}",
    expected: {
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        swc: { swcrc: !1 },
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "react-webpack/17-ts": {
    name: "React v17 (Webpack | TypeScript)",
    script: 'npx create-webpack5-react {{beforeDir}} --version-react="17" --version-react-dom="17"',
    expected: {
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        swc: { swcrc: !1 },
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "react-webpack/prerelease-ts": {
    name: "React Prerelease (Webpack | TypeScript)",
    /**
     * Create a Webpack project with React beta versions.
     * See https://react.dev/blog/2024/04/25/react-19-upgrade-guide#installing
     */
    script: 'npx create-webpack5-react {{beforeDir}} --version-react="beta" --version-react-dom="beta"',
    // create-webpack5-react pins react@beta at scaffold time, so refresh must allow the
    // React beta family or the 7-day gate quarantines them. `types-react*` are the
    // packages behind the `@types/react@npm:types-react@beta` aliases; `scheduler`
    // ships in lockstep with React releases.
    minAgeGateExemptions: ["react", "react-dom", "types-react", "types-react-dom", "scheduler"],
    expected: {
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: [
        "prop-types",
        "@types/react@npm:types-react@beta",
        "@types/react-dom@npm:types-react-dom@beta"
      ],
      resolutions: {
        "@types/react": "npm:types-react@beta",
        "@types/react-dom": "npm:types-react-dom@beta"
      },
      mainConfig: {
        swc: { swcrc: !1 },
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "react-rsbuild/default-ts": {
    name: "React Latest (RsBuild | TypeScript)",
    script: "npx create-rsbuild -d {{beforeDir}} -t react-ts --tools eslint",
    expected: {
      framework: "storybook-react-rsbuild",
      renderer: "@storybook/react",
      builder: "storybook-builder-rsbuild"
    },
    modifications: {
      extraDevDependencies: ["prop-types"],
      useCsfFactory: !0,
      mainConfig: {
        features: {
          experimentalTestSyntax: !0
        }
      },
      skipMocking: !0
    },
    skipTasks: ["e2e-tests", "e2e-tests-dev", "bench", "vitest-integration"]
  },
  "solid-vite/default-ts": {
    name: "SolidJS Latest (Vite | TypeScript)",
    script: "npx create-solid {{beforeDir}} --vanilla --ts --template=with-vitest",
    expected: {
      framework: "storybook-solidjs-vite",
      renderer: "storybook-solidjs-vite",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["e2e-tests", "e2e-tests-dev", "bench", "vitest-integration"]
  },
  "tanstack-react-router/default-ts": {
    name: "TanStack React Router Latest (Vite | TypeScript)",
    script: "npx @tanstack/cli@latest create {{beforeDir}} --no-install --tailwind --router-only",
    expected: {
      framework: "@storybook/tanstack-react",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        framework: "@storybook/tanstack-react",
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["bench"]
  },
  "tanstack-react-start/default-ts": {
    name: "TanStack React Start Latest (Vite | TypeScript)",
    script: "npx @tanstack/cli@latest create {{beforeDir}} --no-install --tailwind",
    expected: {
      framework: "@storybook/tanstack-react",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        framework: "@storybook/tanstack-react",
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["bench"]
  },
  "vue3-vite/default-js": {
    name: "Vue v3 (Vite | JavaScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template vue",
    // vue-component-meta@^3.3.9 pins @vue/language-core; both are inside the age gate.
    minAgeGateExemptions: ["vue-component-meta", "@vue/language-core"],
    expected: {
      framework: "@storybook/vue3-vite",
      renderer: "@storybook/vue3",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "vue3-vite/default-ts": {
    name: "Vue v3 (Vite | TypeScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template vue-ts",
    minAgeGateExemptions: ["vue-component-meta", "@vue/language-core"],
    expected: {
      framework: "@storybook/vue3-vite",
      renderer: "@storybook/vue3",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0
    },
    skipTasks: ["bench"]
  },
  "vue3-vite/docgen-server-ts": {
    name: "Vue Server Docgen v3 (Vite | TypeScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template vue-ts",
    minAgeGateExemptions: ["vue-component-meta", "@vue/language-core"],
    expected: {
      framework: "@storybook/vue3-vite",
      renderer: "@storybook/vue3",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      extraDevDependencies: ["@storybook/addon-mcp"],
      editAddons: (addons) => [...addons, "@storybook/addon-mcp"],
      useCsfFactory: !0,
      storiesVariant: "vue3-vite-default-ts",
      mainConfig: {
        features: {
          experimentalDocgenServer: !0,
          componentsManifest: !0
        }
      }
    },
    skipTasks: ["bench", "chromatic", "test-runner"]
  },
  "vue3-rsbuild/default-ts": {
    name: "Vue Latest (RsBuild | TypeScript)",
    script: "npx create-rsbuild -d {{beforeDir}} -t vue-ts --tools eslint",
    expected: {
      framework: "storybook-vue3-rsbuild",
      renderer: "@storybook/vue3",
      builder: "storybook-builder-rsbuild"
    },
    modifications: {
      extraDevDependencies: ["storybook-vue3-rsbuild@^3.0.0-beta.1"],
      mainConfig: {
        features: {
          experimentalTestSyntax: !0
        }
      },
      skipMocking: !0
    },
    skipTasks: ["e2e-tests", "e2e-tests-dev", "bench", "vitest-integration"]
  },
  // 'nuxt-vite/default-ts': {
  //   name: 'Nuxt v3 (Vite | TypeScript)',
  //   script: 'npx nuxi init --packageManager yarn --gitInit false -M @nuxt/ui {{beforeDir}}',
  //   expected: {
  //     framework: '@storybook-vue/nuxt',
  //     renderer: '@storybook/vue3',
  //     builder: '@storybook/builder-vite',
  //   },
  //   skipTasks: ['e2e-tests', 'bench', 'vitest-integration'],
  // },
  "html-vite/default-js": {
    name: "HTML Latest (Vite | JavaScript)",
    script: 'npm create vite --yes {{beforeDir}} -- --template vanilla && cd {{beforeDir}} && echo "export default {}" > vite.config.js',
    expected: {
      framework: "@storybook/html-vite",
      renderer: "@storybook/html",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["e2e-tests", "bench"],
    initOptions: {
      type: "html" /* HTML */
    }
  },
  "html-vite/default-ts": {
    name: "HTML Latest (Vite | TypeScript)",
    script: 'npm create vite --yes {{beforeDir}} -- --template vanilla-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',
    expected: {
      framework: "@storybook/html-vite",
      renderer: "@storybook/html",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["e2e-tests", "bench"],
    initOptions: {
      type: "html" /* HTML */
    }
  },
  "html-rsbuild/default-ts": {
    name: "HTML Latest (RsBuild | TypeScript)",
    script: "npx create-rsbuild -d {{beforeDir}} -t vanilla-ts --tools eslint",
    expected: {
      framework: "storybook-html-rsbuild",
      renderer: "@storybook/html",
      builder: "storybook-builder-rsbuild"
    },
    modifications: {
      skipMocking: !0
    },
    skipTasks: ["e2e-tests", "e2e-tests-dev", "bench", "vitest-integration"],
    initOptions: {
      type: "html" /* HTML */
    }
  },
  "svelte-vite/default-js": {
    name: "Svelte Latest (Vite | JavaScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template svelte",
    expected: {
      framework: "@storybook/svelte-vite",
      renderer: "@storybook/svelte",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "svelte-vite/default-ts": {
    name: "Svelte Latest (Vite | TypeScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template svelte-ts",
    expected: {
      framework: "@storybook/svelte-vite",
      renderer: "@storybook/svelte",
      builder: "@storybook/builder-vite"
    },
    // Remove smoke-test from the list once https://github.com/storybookjs/storybook/issues/19351 is fixed.
    skipTasks: ["smoke-test", "bench"]
  },
  "svelte-kit/skeleton-ts": {
    name: "SvelteKit Latest (Vite | TypeScript)",
    script: "npx sv@latest create --template minimal --types ts --no-add-ons --no-install {{beforeDir}}",
    expected: {
      framework: "@storybook/sveltekit",
      renderer: "@storybook/svelte",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "angular-cli/default-ts": {
    name: "Angular CLI Latest (Webpack | TypeScript)",
    script: "npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",
    modifications: {
      // The latest CLI scaffolds Angular 22 but omits @angular/forms and @angular/animations. Match
      // the `^22` major `ng new` uses for the other @angular packages so every @angular/* aligns.
      // Also, Angular 22 needs TypeScript 6 or more recent.
      extraDependencies: ["@angular/forms@^22", "@angular/animations@^22", "typescript@^6"],
      resolutions: {
        webpack: "5.107.2"
      },
      useCsfFactory: !0
    },
    extraCiSteps: {
      ensureMinNodeVersion: !0
    },
    expected: {
      framework: "@storybook/angular",
      renderer: "@storybook/angular",
      builder: "@storybook/builder-webpack5"
    },
    skipTasks: ["bench", "vitest-integration"],
    initOptions: { builder: "webpack5" /* WEBPACK5 */ }
  },
  "angular-vite/21-ts": {
    name: "Angular CLI v21 (Vite | TypeScript)",
    script: "npx -p @angular/cli@21 ng new angular-v21 --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",
    modifications: {
      // Match the `^21.2.0` range `ng new` uses for the other @angular packages so every
      // @angular/* resolves to the same patch. An exact pin would leave forms a patch behind core.
      // See `angular-vite/default-ts` for why Compodoc is listed here.
      extraDependencies: [
        "@angular/forms@^21.2.0",
        "@angular/animations@^21.2.0",
        "@compodoc/compodoc"
      ],
      useCsfFactory: !0
    },
    extraCiSteps: {
      ensureMinNodeVersion: !0
    },
    expected: {
      framework: "@storybook/angular-vite",
      renderer: "@storybook/angular-vite",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["bench"],
    initOptions: { builder: "vite" /* VITE */ }
  },
  "angular-vite/default-ts": {
    name: "Angular CLI Latest (Vite | TypeScript)",
    script: "npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",
    modifications: {
      // The latest CLI scaffolds Angular 22 but omits @angular/forms and @angular/animations. Match
      // the `^22` major `ng new` uses for the other @angular packages so every @angular/* aligns.
      // Also, Angular 22 needs TypeScript 6 or more recent.
      // `@compodoc/compodoc` is no longer installed by `storybook init` for the Vite builder, but
      // the sandbox harness prepends its own `docs:json` Compodoc pass to every Angular sandbox
      // (see `sandbox-parts.ts`), so the sandboxes still have to carry the binary themselves.
      extraDependencies: [
        "@angular/forms@^22",
        "@angular/animations@^22",
        "typescript@^6",
        "@compodoc/compodoc"
      ],
      useCsfFactory: !0,
      // `@storybook/angular-vite` turns the docgen server on by default, so guarding the browser
      // docgen path is now an explicit opt-out rather than the absence of a flag.
      mainConfig: {
        features: {
          experimentalDocgenServer: !1
        }
      }
    },
    extraCiSteps: {
      ensureMinNodeVersion: !0
    },
    expected: {
      framework: "@storybook/angular-vite",
      renderer: "@storybook/angular-vite",
      builder: "@storybook/builder-vite"
    },
    skipTasks: ["bench"],
    initOptions: { builder: "vite" /* VITE */ }
  },
  "angular-vite/docgen-server-ts": {
    name: "Angular CLI Server Docgen Latest (Vite | TypeScript)",
    // Identical to `angular-vite/default-ts` apart from the two feature flags below. Kept as its own
    // template so the stable Angular sandbox keeps guarding today's browser docgen while the server
    // path is proven separately, rather than both riding on one configuration.
    script: "npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",
    modifications: {
      // Compodoc is unused under the flag, but the sandbox harness runs it regardless.
      extraDependencies: [
        "@angular/forms@^22",
        "@angular/animations@^22",
        "typescript@^6",
        "@compodoc/compodoc"
      ],
      // The only Angular sandbox on the docgen-server path, so it is the only one that can prove
      // what an agent reads about an Angular component.
      extraDevDependencies: ["@storybook/addon-mcp"],
      editAddons: (addons) => [...addons, "@storybook/addon-mcp"],
      useCsfFactory: !0,
      // These two flags are what brings a template into docgen baseline coverage; see
      // `docgenServerTemplates`.
      mainConfig: {
        features: {
          experimentalDocgenServer: !0,
          componentsManifest: !0
        }
      }
    },
    extraCiSteps: {
      ensureMinNodeVersion: !0
    },
    expected: {
      framework: "@storybook/angular-vite",
      renderer: "@storybook/angular-vite",
      builder: "@storybook/builder-vite"
    },
    // This sandbox exists to guard the docgen baselines, and it differs from
    // `angular-vite/default-ts` only by two feature flags. Rendering, visual output and story
    // execution are already covered there on every run, so repeating them here would double the
    // Angular cost for no extra signal. `test-runner` goes with `chromatic`: skipping only the
    // latter swaps in a test-runner job rather than dropping one.
    skipTasks: ["bench", "chromatic", "test-runner"],
    initOptions: { builder: "vite" /* VITE */ }
  },
  "lit-vite/default-js": {
    name: "Lit Latest (Vite | JavaScript)",
    script: 'npm create vite --yes {{beforeDir}} -- --template lit && cd {{beforeDir}} && echo "export default {}" > vite.config.js',
    expected: {
      framework: "@storybook/web-components-vite",
      renderer: "@storybook/web-components",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0
    },
    // Remove smoke-test from the list once https://github.com/storybookjs/storybook/issues/19351 is fixed.
    skipTasks: ["smoke-test", "e2e-tests", "bench"]
  },
  "lit-vite/default-ts": {
    name: "Lit Latest (Vite | TypeScript)",
    script: 'npm create vite --yes {{beforeDir}} -- --template lit-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',
    expected: {
      framework: "@storybook/web-components-vite",
      renderer: "@storybook/web-components",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0
    },
    // Remove smoke-test from the list once https://github.com/storybookjs/storybook/issues/19351 is fixed.
    skipTasks: ["smoke-test", "e2e-tests", "bench"]
  },
  "lit-rsbuild/default-ts": {
    name: "Web Components Latest (RsBuild | TypeScript)",
    script: "npx create-rsbuild -d {{beforeDir}} -t lit-ts --tools eslint",
    expected: {
      framework: "storybook-web-components-rsbuild",
      renderer: "@storybook/web-components",
      builder: "storybook-builder-rsbuild"
    },
    modifications: {
      skipMocking: !0
    },
    skipTasks: ["e2e-tests", "e2e-tests-dev", "bench", "vitest-integration"]
  },
  "preact-vite/default-js": {
    name: "Preact Latest (Vite | JavaScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template preact",
    expected: {
      framework: "@storybook/preact-vite",
      renderer: "@storybook/preact",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      extraDependencies: ["preact-render-to-string"]
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  "preact-vite/default-ts": {
    name: "Preact Latest (Vite | TypeScript)",
    script: "npm create vite --yes {{beforeDir}} -- --template preact-ts",
    expected: {
      framework: "@storybook/preact-vite",
      renderer: "@storybook/preact",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      extraDependencies: ["preact-render-to-string"]
    },
    skipTasks: ["e2e-tests", "bench"]
  },
  /** This is currently broken, we generate components and stories that do not work */
  // 'qwik-vite/default-ts': {
  //   name: 'Qwik CLI Latest (Vite | TypeScript)',
  //   script: 'npm create qwik playground {{beforeDir}}',
  //   // TODO: The community template does not provide standard stories, which is required for e2e tests. Reenable once it does.
  //   inDevelopment: true,
  //   expected: {
  //     framework: 'storybook-framework-qwik',
  //     renderer: 'storybook-framework-qwik',
  //     builder: 'storybook-framework-qwik',
  //   },
  //   // TODO: The community template does not provide standard stories, which is required for e2e tests.
  //   skipTasks: ['e2e-tests-dev', 'e2e-tests', 'bench', 'vitest-integration', 'chromatic'],
  // },
  "ember/3-js": {
    name: "Ember v3 (Webpack | JavaScript)",
    script: "npx --package ember-cli@3.28.1 ember new {{beforeDir}} --skip-install",
    inDevelopment: !0,
    expected: {
      framework: "@storybook/ember",
      renderer: "@storybook/ember",
      builder: "@storybook/builder-webpack5"
    }
  },
  "ember/default-js": {
    name: "Ember v4 (Webpack | JavaScript)",
    script: "npx --package ember-cli@4.12.1 ember new {{beforeDir}} --yarn && cd {{beforeDir}} && yarn add --dev @storybook/ember-cli-storybook && yarn build",
    inDevelopment: !0,
    expected: {
      framework: "@storybook/ember",
      renderer: "@storybook/ember",
      builder: "@storybook/builder-webpack5"
    }
  },
  "react-native-web-vite/expo-ts": {
    // NOTE: create-expo-app installs React 18.2.0. But yarn portal
    // expects 18.3.1 (dunno why). Therefore to run this in dev you
    // must either:
    //  - edit the sandbox package.json to depend on react 18.3.1, OR
    //  - build/run the sandbox in --no-link mode, which is fine
    //
    // Users & CI won't see this limitation because they are not using
    // yarn portals.
    name: "React Native Expo Latest (Vite | TypeScript)",
    script: "npx create-expo-app -y --no-install {{beforeDir}}",
    // create-expo-app pins the current SDK, whose packages are released
    // together and are routinely younger than the gate window.
    // `babel-preset-expo` is part of that set despite not matching `expo-*`.
    // `multitars` is pulled in transitively by the Expo CLI toolchain.
    minAgeGateExemptions: [
      "expo",
      "expo-*",
      "@expo/*",
      "babel-preset-expo",
      "multitars",
      "react-native",
      "@react-native/*"
    ],
    expected: {
      framework: "@storybook/react-native-web-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      useCsfFactory: !0,
      // The React renderer's template-stories (e.g. js-argtypes.stories.jsx) import
      // `prop-types`. Every other React-renderer sandbox declares it explicitly via
      // extraDevDependencies; this template was missing it.
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["bench", "vitest-integration"],
    initOptions: {
      type: "react_native_web" /* REACT_NATIVE_WEB */
    }
  },
  "react-native-web-vite/rn-cli-ts": {
    name: "React Native CLI Latest (Vite | TypeScript)",
    script: "npx @react-native-community/cli@latest init --skip-install --install-pods=false --directory={{beforeDir}} rnapp",
    // The CLI downloads `@react-native-community/template` during init even with
    // --skip-install; those packages ship in lockstep with each RN release.
    minAgeGateExemptions: ["@react-native-community/*", "react-native", "@react-native/*"],
    expected: {
      framework: "@storybook/react-native-web-vite",
      renderer: "@storybook/react",
      builder: "@storybook/builder-vite"
    },
    modifications: {
      // The React renderer's template-stories (e.g. js-argtypes.stories.jsx) import
      // `prop-types`. Every other React-renderer sandbox declares it explicitly via
      // extraDevDependencies; this template was missing it.
      extraDevDependencies: ["prop-types"]
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"],
    initOptions: {
      type: "react_native_web" /* REACT_NATIVE_WEB */
    }
  }
}, internalTemplates = {
  "internal/react18-webpack-babel": {
    name: "React with Babel Latest (Webpack | TypeScript)",
    script: "npx create-webpack5-react {{beforeDir}}",
    expected: {
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["@storybook/addon-webpack5-compiler-babel", "prop-types"],
      removeDependencies: ["babel-preset-react-app"],
      resolutions: {
        "@babel/core": "^7",
        "@babel/preset-env": "^7",
        "@babel/preset-react": "^7",
        "@babel/preset-typescript": "^7"
      },
      editAddons: (addons) => [...addons, "@storybook/addon-webpack5-compiler-babel"].filter(
        (a) => a !== "@storybook/addon-webpack5-compiler-swc"
      ),
      mainConfig: {
        swc: { swcrc: !1 },
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    isInternal: !0,
    skipTasks: ["e2e-tests", "bench", "vitest-integration"]
  },
  "internal/react16-webpack": {
    name: "React 16 (Webpack | TypeScript)",
    script: "npx create-webpack5-react {{beforeDir}} --version-react=16 --version-react-dom=16 --version-@types/react=16 --version-@types/react-dom=16",
    expected: {
      framework: "@storybook/react-webpack5",
      renderer: "@storybook/react",
      builder: "@storybook/builder-webpack5"
    },
    modifications: {
      useCsfFactory: !0,
      extraDevDependencies: ["prop-types"],
      mainConfig: {
        swc: { swcrc: !1 },
        features: {
          experimentalTestSyntax: !0
        }
      }
    },
    skipTasks: ["e2e-tests", "bench", "vitest-integration"],
    isInternal: !0
  },
  "internal/server-webpack5": {
    name: "Server Webpack5",
    script: 'yarn init -y && echo "module.exports = {}" > webpack.config.js',
    expected: {
      framework: "@storybook/server-webpack5",
      renderer: "@storybook/server",
      builder: "@storybook/builder-webpack5"
    },
    isInternal: !0,
    skipTasks: ["bench", "vitest-integration"],
    initOptions: {
      type: "server" /* SERVER */
    }
  }
}, benchTemplates = {
  "bench/react-vite-default-ts": {
    ...baseTemplates["react-vite/default-ts"],
    name: "Bench (react-vite/default-ts)",
    isInternal: !0,
    modifications: {
      skipTemplateStories: !0,
      skipMocking: !0
    },
    skipTasks: [
      "e2e-tests",
      "test-runner",
      "test-runner-dev",
      "e2e-tests-dev",
      "chromatic",
      "vitest-integration"
    ],
    typeCheck: !1
  },
  "bench/react-webpack-18-ts": {
    ...baseTemplates["react-webpack/18-ts"],
    name: "Bench (react-webpack/18-ts)",
    isInternal: !0,
    modifications: {
      skipTemplateStories: !0,
      skipMocking: !0
    },
    skipTasks: [
      "e2e-tests",
      "test-runner",
      "test-runner-dev",
      "e2e-tests-dev",
      "chromatic",
      "vitest-integration"
    ]
  },
  "bench/react-vite-default-ts-nodocs": {
    ...baseTemplates["react-vite/default-ts"],
    name: "Bench (react-vite/default-ts, no docs)",
    isInternal: !0,
    modifications: {
      skipTemplateStories: !0,
      disableDocs: !0,
      skipMocking: !0
    },
    skipTasks: [
      "e2e-tests",
      "test-runner",
      "test-runner-dev",
      "e2e-tests-dev",
      "chromatic",
      "vitest-integration"
    ],
    typeCheck: !1
  },
  "bench/react-vite-default-ts-test-build": {
    ...baseTemplates["react-vite/default-ts"],
    name: "Bench (react-vite/default-ts, test-build)",
    isInternal: !0,
    modifications: {
      skipTemplateStories: !0,
      testBuild: !0,
      skipMocking: !0
    },
    skipTasks: [
      "e2e-tests",
      "test-runner",
      "test-runner-dev",
      "e2e-tests-dev",
      "vitest-integration"
    ],
    typeCheck: !1
  },
  "bench/react-webpack-18-ts-test-build": {
    ...baseTemplates["react-webpack/18-ts"],
    name: "Bench (react-webpack/18-ts, test-build)",
    isInternal: !0,
    modifications: {
      skipTemplateStories: !0,
      testBuild: !0,
      skipMocking: !0
    },
    skipTasks: [
      "e2e-tests",
      "test-runner",
      "test-runner-dev",
      "e2e-tests-dev",
      "vitest-integration"
    ]
  }
}, allTemplates = {
  ...baseTemplates,
  ...internalTemplates,
  ...benchTemplates
}, normal = [
  // TODO: Add this back once we resolve the React 19 issues
  // 'cra/default-ts',
  "react-vite/default-ts",
  "angular-cli/default-ts",
  "angular-vite/default-ts",
  "vue3-vite/default-ts",
  // 'nuxt-vite/default-ts', // temporarily disabled because it's broken
  "lit-vite/default-ts",
  "svelte-vite/default-ts",
  "svelte-kit/skeleton-ts",
  "nextjs/default-ts",
  "nextjs-vite/default-ts",
  "bench/react-vite-default-ts",
  "bench/react-webpack-18-ts",
  "bench/react-vite-default-ts-nodocs",
  "bench/react-vite-default-ts-test-build",
  "bench/react-webpack-18-ts-test-build",
  // 'ember/default-js',
  "react-rsbuild/default-ts",
  "tanstack-react-router/default-ts",
  "tanstack-react-start/default-ts",
  // The sandboxes that record docgen baselines. Running them daily meant a change to the
  // extraction could merge without ever touching them, which is how the props-table visibility
  // rules landed on a stale recording.
  // TODO(11.0): remove these templates. The standard sandboxes ship the new docgen approach by
  // default from then on, so the `default-ts` templates carry the baselines and these are
  // redundant.
  "angular-vite/docgen-server-ts",
  "vue3-vite/docgen-server-ts"
], merged = [
  ...normal,
  "react-webpack/18-ts",
  "react-webpack/17-ts",
  "nextjs/15-ts",
  "nextjs-vite/15-ts",
  "preact-vite/default-ts",
  "html-vite/default-ts",
  "solid-vite/default-ts",
  "vue3-rsbuild/default-ts"
], daily = [
  ...merged,
  "angular-vite/21-ts",
  // TODO: Add this back once we resolve the React 19 issues
  // 'cra/default-js',
  "react-vite/default-js",
  "react-vite/prerelease-ts",
  "react-webpack/prerelease-ts",
  "nextjs-vite/14-ts",
  "nextjs/14-ts",
  "vue3-vite/default-js",
  "lit-vite/default-js",
  "svelte-vite/default-js",
  "nextjs/prerelease",
  // 'qwik-vite/default-ts',
  "preact-vite/default-js",
  "html-vite/default-js",
  "internal/react16-webpack",
  "internal/react18-webpack-babel",
  "react-native-web-vite/expo-ts",
  "lit-rsbuild/default-ts",
  "html-rsbuild/default-ts"
  // 'react-native-web-vite/rn-cli-ts',
];

// src/sandbox.ts
var toChoices = (c) => ({ label: allTemplates[c].name, value: c }), sandbox = async ({
  output: outputDirectory,
  filterValue,
  init,
  ...options
}) => {
  let selectedConfig = allTemplates[filterValue], templateId = selectedConfig ? filterValue : null, packageManager = JsPackageManagerFactory.getPackageManager({
    force: PackageManagerName.NPM
  }), latestVersion = await packageManager.latestVersion("storybook"), nextVersion = await packageManager.latestVersion("storybook@next") ?? "0.0.0", currentVersion = versions4.storybook, isPrerelease = (0, import_semver8.prerelease)(currentVersion), isOutdated = (0, import_semver8.lt)(currentVersion, isPrerelease ? nextVersion : latestVersion), downloadType = !isOutdated && init ? "after-storybook" : "before-storybook", branch = isPrerelease ? "next" : "main", messages2 = {
    welcome: `Creating a Storybook ${import_picocolors17.default.bold(currentVersion)} sandbox..`,
    notLatest: import_picocolors17.default.red(dedent19`
      This version is behind the latest release, which is: ${import_picocolors17.default.bold(latestVersion)}!
      You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
      ${import_picocolors17.default.bold("npx storybook@latest sandbox")}
      
      You may want to CTRL+C to stop, and run with the latest version instead.
    `),
    longInitTime: import_picocolors17.default.yellow(
      "The creation of the sandbox will take longer, because we will need to run init."
    ),
    prerelease: import_picocolors17.default.yellow("This is a pre-release version.")
  };
  if (logger24.logBox(
    [messages2.welcome].concat(isOutdated && !isPrerelease ? [messages2.notLatest] : []).concat(init && (isOutdated || isPrerelease) ? [messages2.longInitTime] : []).concat(isPrerelease ? [messages2.prerelease] : []).join(`
`),
    {
      rounded: !0
    }
  ), !selectedConfig) {
    let filterRegex = new RegExp(`^${filterValue || ""}`, "i"), keys = Object.keys(allTemplates), choices = keys.reduce((acc, group) => {
      let current = allTemplates[group];
      return (!filterValue || current.name.match(filterRegex) || group.match(filterRegex) || current.expected.builder.match(filterRegex) || current.expected.framework.match(filterRegex) || current.expected.renderer.match(filterRegex)) && acc.push(group), acc;
    }, []);
    if (choices.length === 0 && (logger24.logBox(
      dedent19`
            🔎 You filtered out all templates. 🔍

            After filtering all the templates with "${import_picocolors17.default.yellow(
        filterValue
      )}", we found no results. Please try again with a different filter.

            Available templates:
            ${keys.map((key) => import_picocolors17.default.blue(`- ${key}`)).join(`
`)}
            `.trim(),
      { borderStyle: "round", padding: 1, borderColor: "#F1618C" }
    ), process.exit(1)), choices.length === 1 ? [templateId] = choices : (logger24.logBox(
      dedent19`
            🤗 Welcome to ${import_picocolors17.default.yellow("sb sandbox")}! 🤗

            Create a ${import_picocolors17.default.green("new project")} to minimally reproduce Storybook issues.

            1. select an environment that most closely matches your project setup.
            2. select a location for the reproduction, outside of your project.

            After the reproduction is ready, we'll guide you through the next steps.
            `.trim(),
      { borderStyle: "round", padding: 1, borderColor: "#F1618C" }
    ), templateId = await promptSelectedTemplate(choices)), !!!(templateId ?? null)) {
      logger24.error("Somehow we got no templates. Please rerun this command!");
      return;
    }
    if (selectedConfig = templateId ? allTemplates[templateId] : void 0, !selectedConfig)
      throw new Error("\u{1F6A8} Sandbox: please specify a valid template type");
  }
  let selectedDirectory = outputDirectory, outputDirectoryName = outputDirectory || templateId;
  selectedDirectory && existsSync6(`${selectedDirectory}`) && (logger24.log(`\u26A0\uFE0F  ${selectedDirectory} already exists! Overwriting...`), await rm(selectedDirectory, { recursive: !0, force: !0 })), selectedDirectory || (selectedDirectory = await prompt6.text(
    {
      message: "Enter the output directory",
      initialValue: outputDirectoryName ?? void 0,
      validate: (directoryName) => directoryName && existsSync6(directoryName) ? `${directoryName} already exists. Please choose another name.` : void 0
    },
    {
      onCancel: () => {
        logger24.log("Command cancelled by the user. Exiting..."), process.exit(1);
      }
    }
  )), invariant(selectedDirectory);
  try {
    let templateDestination = isAbsolute4(selectedDirectory) ? selectedDirectory : join4(process.cwd(), selectedDirectory);
    logger24.log(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`), logger24.log(`\u{1F4E6} Downloading sandbox template (${import_picocolors17.default.bold(downloadType)})...`);
    try {
      let gitPath = `storybookjs/sandboxes/tree/${branch}/${templateId}/${downloadType}`;
      if (await mkdir2(templateDestination, { recursive: !0 }), (0, import_cross_spawn2.sync)("npx", ["gitpick@4.12.4", gitPath, templateDestination, "-o"], {
        stdio: "inherit"
      }), (await readdir(templateDestination)).length === 0) {
        let selected = import_picocolors17.default.yellow(templateId);
        throw new Error(dedent19`
          Template downloaded from ${import_picocolors17.default.blue(gitPath)} is empty.
          Are you use it exists? Or did you want to set ${selected} to inDevelopment first?
        `);
      }
      if (downloadType === "before-storybook" && init) {
        let before = process.cwd();
        process.chdir(templateDestination);
        let { initiate } = await import("create-storybook");
        await initiate({
          dev: isCI() && !optionalEnvToBoolean2(process.env.IN_STORYBOOK_SANDBOX),
          ...options,
          ...selectedConfig.initOptions || {},
          features: ["docs", "test"]
        }), process.chdir(before);
      }
    } catch (err) {
      throw logger24.error(`\u{1F6A8} Failed to download sandbox template: ${String(err)}`), err;
    }
    let initMessage = init ? import_picocolors17.default.yellow(dedent19`
          yarn install
          yarn storybook
        `) : `Recreate your setup, then ${import_picocolors17.default.yellow("npx storybook@latest init")}`;
    logger24.logBox(
      dedent19`
        🎉 Your Storybook reproduction project is ready to use! 🎉

        ${import_picocolors17.default.yellow(`cd ${selectedDirectory}`)}
        ${initMessage}

        Once you've recreated the problem you're experiencing, please:

        1. Document any additional steps in ${import_picocolors17.default.cyan("README.md")}
        2. Publish the repository to github
        3. Link to the repro repository in your issue

        Having a clean repro helps us solve your issue faster! 🙏
      `.trim(),
      { rounded: !0 }
    );
  } catch (error) {
    throw logger24.error("\u{1F6A8} Failed to create sandbox"), error;
  }
};
async function promptSelectedTemplate(choices) {
  return await prompt6.select({
    message: "Select a template",
    options: choices.map(toChoices)
  });
}

// src/upgrade.ts
var import_cross_spawn3 = __toESM(require_cross_spawn(), 1), import_picocolors18 = __toESM(require_picocolors(), 1), import_semver9 = __toESM(require_semver(), 1);
import { PackageManagerName as PackageManagerName2 } from "storybook/internal/common";
import {
  HandledError,
  JsPackageManagerFactory as JsPackageManagerFactory2,
  isCI as isCI2,
  isCorePackage as isCorePackage2
} from "storybook/internal/common";
import {
  CLI_COLORS as CLI_COLORS4,
  createHyperlink,
  logTracker as logTracker3,
  logger as logger26,
  prompt as prompt8
} from "storybook/internal/node-logger";
import {
  MinimumReleaseAgeHandledError,
  UpgradeStorybookToLowerVersionError,
  UpgradeStorybookUnknownCurrentVersionError
} from "storybook/internal/server-errors";
import { telemetry } from "storybook/internal/telemetry";
import { dedent as dedent20 } from "ts-dedent";

// src/automigrate/multi-project.ts
import { CLI_COLORS as CLI_COLORS3, logger as logger25, prompt as prompt7 } from "storybook/internal/node-logger";
import { ErrorCollector, sanitizeError } from "storybook/internal/telemetry";
async function collectAutomigrationsAcrossProjects(options) {
  let { fixes, projects, taskLog, requestedFixIds } = options, automigrationMap = /* @__PURE__ */ new Map();
  logger25.debug(
    `Starting automigration collection across ${projects.length} projects and ${fixes.length} fixes...`
  );
  function collectResult(fix, project, status, result) {
    let existing = automigrationMap.get(fix.id);
    existing ? existing.reports.push({
      project,
      result,
      status
    }) : automigrationMap.set(fix.id, {
      fix,
      reports: [
        {
          result,
          status,
          project
        }
      ]
    });
  }
  for (let project of projects) {
    let projectName = shortenPath(project.configDir);
    taskLog.message(`Checking automigrations for ${projectName}...`), logger25.debug(`Processing project: ${projectName}`);
    for (let fix of fixes)
      try {
        logger25.debug(`Checking fix ${fix.id} for project ${projectName}...`);
        let checkOptions = {
          packageManager: project.packageManager,
          configDir: project.configDir,
          mainConfig: project.mainConfig,
          storybookVersion: project.storybookVersion,
          beforeVersion: project.beforeVersion,
          requested: requestedFixIds?.includes(fix.id),
          previewConfigPath: project.previewConfigPath,
          mainConfigPath: project.mainConfigPath,
          storiesPaths: project.storiesPaths,
          hasCsfFactoryPreview: project.hasCsfFactoryPreview
        }, result = await fix.check(checkOptions);
        result !== null ? collectResult(fix, project, "check_succeeded", result) : collectResult(fix, project, "not_applicable");
      } catch (error) {
        collectResult(fix, project, "check_failed"), logger25.debug(
          `Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`
        ), logger25.debug(`${error instanceof Error ? error.stack : String(error)}`), ErrorCollector.addError(error);
      }
  }
  let allAutomigrations = Array.from(automigrationMap.values()), applicableAutomigrations = allAutomigrations.filter(
    (am) => am.reports.every((rep) => rep.status !== "not_applicable")
  ), { successAutomigrations, failedAutomigrations } = applicableAutomigrations.reduce(
    (acc, { fix, reports }) => {
      let successReports = reports.filter((report) => report.status === "check_succeeded"), failedReports = reports.filter((report) => report.status === "check_failed");
      return successReports.length > 0 && acc.successAutomigrations.push(fix.id), failedReports.length > 0 && acc.failedAutomigrations.push(fix.id), acc;
    },
    { successAutomigrations: [], failedAutomigrations: [] }
  );
  return taskLog.message(`
Automigrations detected:`), successAutomigrations.forEach((fixId) => {
    taskLog.message(`${CLI_COLORS3.success(`${logger25.SYMBOLS.success} ${fixId}`)}`);
  }), failedAutomigrations.forEach((fixId) => {
    taskLog.message(`${CLI_COLORS3.error(`${logger25.SYMBOLS.error} ${fixId}`)}`);
  }), failedAutomigrations.length > 0 ? taskLog.error(
    `${failedAutomigrations.length} automigration ${failedAutomigrations.length > 1 ? "checks" : "check"} failed`
  ) : taskLog.success(
    `${applicableAutomigrations.length === 0 ? "No automigrations detected" : `${applicableAutomigrations.length} automigration(s) detected`}`
  ), allAutomigrations;
}
var formatProjectDirs = (list) => {
  let relativeDirs = list.filter((p) => p.status === "check_succeeded").map((p) => shortenPath(p.project.configDir) || ".");
  if (relativeDirs.length <= 1)
    return relativeDirs.join(", ");
  let remaining = relativeDirs.length - 1;
  return `${relativeDirs.slice(0, 1).join(", ")}${remaining > 0 ? ` and ${remaining} more...` : ""}`;
};
async function promptForAutomigrations(automigrations, options) {
  if (automigrations.length === 0)
    return [];
  let logSelection = (title, selection) => {
    logger25.log(title), selection.forEach(({ fix, reports: list }) => {
      logger25.log(`  - ${fix.id} (${formatProjectDirs(list)})`);
    });
  }, preselectedIds = new Set(options.preselectedIds ?? []);
  if (options.dryRun)
    return logSelection("Detected automigrations (dry run - no changes will be made):", automigrations), [];
  if (options.yes) {
    let selected = automigrations.filter(
      ({ fix }) => preselectedIds.has(fix.id) || fix.defaultSelected !== !1 || fix.promptType === "auto"
    );
    return logSelection("Running all detected automigrations:", selected), selected;
  }
  let choices = automigrations.map((am) => {
    let hint = [];
    hint.push(`${am.fix.prompt()}`), am.fix.link && hint.push(`More info: ${am.fix.link}`);
    let label = am.reports.length > 1 ? `${am.fix.id} (${formatProjectDirs(am.reports)})` : am.fix.id;
    return {
      value: am.fix.id,
      label,
      hint: hint.join(`
`),
      defaultSelected: preselectedIds.has(am.fix.id) || (am.fix.defaultSelected ?? !0)
    };
  }), selectedIds = await prompt7.multiselect({
    message: "Select automigrations to run",
    options: choices,
    initialValues: choices.filter((c) => c.defaultSelected).map((c) => c.value),
    required: !1
  });
  return automigrations.filter((am) => selectedIds.includes(am.fix.id));
}
async function runAutomigrationsForProjects(selectedAutomigrations, options) {
  let { dryRun, skipInstall, automigrations, yes } = options, projectResults = {}, applicableAutomigrations = selectedAutomigrations.filter(
    (am) => am.reports.every((rep) => rep.status !== "not_applicable")
  ), projectAutomigrationResults = /* @__PURE__ */ new Map();
  for (let automigration of automigrations)
    for (let report of automigration.reports) {
      let { project, result, status } = report, existing = projectAutomigrationResults.get(project.configDir) || [];
      existing.length > 0 ? existing.push({
        fix: automigration.fix,
        project,
        result,
        status
      }) : projectAutomigrationResults.set(project.configDir, [
        {
          fix: automigration.fix,
          project,
          result,
          status
        }
      ]);
    }
  let projectIndex = 0;
  for (let [configDir, projectAutomigration] of projectAutomigrationResults) {
    let countPrefix = projectAutomigrationResults.size > 1 ? `(${++projectIndex}/${projectAutomigrationResults.size}) ` : "", { project } = projectAutomigration[0], projectName = shortenPath(project.configDir), taskLog = applicableAutomigrations.length > 0 ? prompt7.taskLog({
      id: `automigrate-${projectName}`,
      title: `${countPrefix}Running automigrations for ${projectName}`
    }) : {
      message: (message) => {
        logger25.debug(`${message}`);
      },
      error: (message) => {
        logger25.debug(`${message}`);
      },
      success: (message) => {
        logger25.debug(`${message}`);
      }
    }, fixResults = {}, fixFailures = {}, addonsToPostinstall = [];
    for (let automigration of projectAutomigration) {
      let { fix, result, project: project2, status } = automigration;
      if (status === "not_applicable") {
        fixResults[fix.id] = "unnecessary" /* UNNECESSARY */;
        continue;
      }
      if (status === "check_failed") {
        fixResults[fix.id] = "check_failed" /* CHECK_FAILED */;
        continue;
      }
      if (!selectedAutomigrations.some(
        (am) => am.fix.id === fix.id && am.reports.some((report) => report.project.configDir === project2.configDir)
      )) {
        fixResults[fix.id] = "skipped" /* SKIPPED */;
        continue;
      }
      try {
        if (typeof fix.run == "function") {
          let runOptions = {
            packageManager: project2.packageManager,
            result,
            dryRun,
            mainConfigPath: project2.mainConfigPath,
            previewConfigPath: project2.previewConfigPath,
            mainConfig: project2.mainConfig,
            configDir: project2.configDir,
            skipInstall,
            storybookVersion: project2.storybookVersion,
            storiesPaths: project2.storiesPaths,
            yes,
            addonsToPostinstall
          };
          await fix.run(runOptions), fixResults[fix.id] = "succeeded" /* SUCCEEDED */, taskLog.message(CLI_COLORS3.success(`${logger25.SYMBOLS.success} ${fix.id}`));
        }
      } catch (error) {
        let errorMessage = (error instanceof Error ? error.stack : String(error)) ?? "Unknown error";
        fixResults[fix.id] = "failed" /* FAILED */, fixFailures[fix.id] = sanitizeError(error), taskLog.message(CLI_COLORS3.error(`${logger25.SYMBOLS.error} ${automigration.fix.id}`)), logger25.debug(errorMessage), ErrorCollector.addError(error);
      }
    }
    let automigrationsWithErrors = Object.values(fixResults).filter(
      (status) => status === "failed" /* FAILED */
    );
    if (automigrationsWithErrors.length > 0) {
      let count = automigrationsWithErrors.length;
      taskLog.error(`${countPrefix}${count} automigrations failed for ${projectName}`);
    } else
      taskLog.success(`${countPrefix}Completed automigrations for ${projectName}`);
    projectResults[configDir] = {
      automigrationStatuses: fixResults,
      automigrationErrors: fixFailures,
      addonsToPostinstall
    };
  }
  return projectResults;
}
async function runAutomigrations(projects, options) {
  let requestedFeatures = resolveRequestedFeatures(options.features), requestedFixIds = requestedFeatures.map(({ fixId }) => fixId), projectAutomigrationData = projects.map((project) => ({
    configDir: project.configDir,
    packageManager: project.packageManager,
    mainConfig: project.mainConfig,
    mainConfigPath: project.mainConfigPath,
    previewConfigPath: project.previewConfigPath,
    storybookVersion: project.currentCLIVersion,
    beforeVersion: project.beforeVersion,
    storiesPaths: project.storiesPaths,
    hasCsfFactoryPreview: project.hasCsfFactoryPreview
  })), detectingAutomigrationTask = prompt7.taskLog({
    id: "detect-automigrations",
    title: projectAutomigrationData.length > 1 ? `Detecting automigrations for ${projectAutomigrationData.length} projects...` : "Detecting automigrations..."
  }), detectedAutomigrations = await collectAutomigrationsAcrossProjects({
    fixes: allFixes,
    projects: projectAutomigrationData,
    dryRun: options.dryRun,
    yes: options.yes,
    skipInstall: options.skipInstall,
    taskLog: detectingAutomigrationTask,
    requestedFixIds
  }), successfulAutomigrations = detectedAutomigrations.filter(
    (am) => am.reports.some((report) => report.status === "check_succeeded")
  );
  requestedFeatures.filter(({ fixId }) => !successfulAutomigrations.some((am) => am.fix.id === fixId)).forEach(({ name, fixId }) => {
    let checkFailed = detectedAutomigrations.find((am) => am.fix.id === fixId)?.reports.some((report) => report.status === "check_failed");
    logger25.warn(
      checkFailed ? `Skipping --features ${name}: the '${fixId}' migration check failed. Run with --debug for details.` : `Skipping --features ${name}: the '${fixId}' migration does not apply here. ${name} is either already set in your main config, unsupported by your Storybook version, or missing a prerequisite.`
    );
  });
  let selectedAutomigrations = await promptForAutomigrations(successfulAutomigrations, {
    dryRun: options.dryRun,
    yes: options.yes,
    preselectedIds: requestedFixIds
  }), automigrationResults = await runAutomigrationsForProjects(selectedAutomigrations, {
    automigrations: detectedAutomigrations,
    dryRun: options.dryRun,
    yes: options.yes,
    skipInstall: options.skipInstall
  });
  return Object.entries(automigrationResults).forEach(([configDir, resultData]) => {
    if (resultData.automigrationStatuses[rnstorybookConfig.id] === "succeeded" /* SUCCEEDED */) {
      let project = projects.find((p) => p.configDir === configDir);
      if (project) {
        let oldConfigDir = project.configDir;
        project.configDir = project.configDir.replace(".storybook", RN_STORYBOOK_DIR), automigrationResults[project.configDir] = resultData, delete automigrationResults[oldConfigDir];
      }
    }
  }), {
    detectedAutomigrations,
    automigrationResults
  };
}

// src/upgrade.ts
function getUpgradeResults(projectResults, doctorResults) {
  let successfulProjects = [], failedProjects = [], projectsWithNoFixes = [];
  return {
    allProjects: Object.entries(projectResults).map(([configDir, resultData]) => {
      let automigrationResults = Object.entries(resultData.automigrationStatuses).map(
        ([fixId, status]) => {
          let succeeded = status === "succeeded" /* SUCCEEDED */ || status === "manual_succeeded" /* MANUAL_SUCCEEDED */;
          return {
            fixId,
            status,
            succeeded
          };
        }
      ), hasFailures2 = automigrationResults.some(
        (fix) => fix.status === "failed" /* FAILED */ || fix.status === "check_failed" /* CHECK_FAILED */
      ), hasSuccessfulFixes = automigrationResults.some(
        (fix) => fix.status === "succeeded" /* SUCCEEDED */ || fix.status === "manual_succeeded" /* MANUAL_SUCCEEDED */
      ), noFixesNeeded = Object.keys(resultData.automigrationStatuses).length === 0, migratedSuccessfully = hasSuccessfulFixes && !hasFailures2, hasDoctorReport = !!doctorResults[configDir];
      return hasFailures2 ? failedProjects.push(configDir) : migratedSuccessfully ? successfulProjects.push(configDir) : noFixesNeeded && projectsWithNoFixes.push(configDir), {
        configDir,
        migratedSuccessfully,
        hasDoctorReport,
        automigrations: {
          fixes: automigrationResults,
          noFixesNeeded,
          hasFailures: hasFailures2,
          hasSuccessfulFixes
        },
        doctor: doctorResults[configDir] ? {
          status: doctorResults[configDir].status,
          isHealthy: doctorResults[configDir].status === "healthy"
        } : null
      };
    }),
    successfulProjects,
    failedProjects,
    projectsWithNoFixes
  };
}
function logUpgradeResults(projectResults, detectedAutomigrations, doctorResults) {
  let { successfulProjects, failedProjects, projectsWithNoFixes } = getUpgradeResults(
    projectResults,
    doctorResults
  );
  if (failedProjects.length > 0) {
    if (logTracker3.enableLogWriting(), logger26.step(
      "The upgrade is complete, but some projects failed to upgrade or migrate completely. Please see the debug logs for more details."
    ), successfulProjects.length > 0) {
      let successfulProjectsList = successfulProjects.map((dir) => `  \u2022 ${shortenPath(dir)}`).join(`
`);
      logger26.log(`${CLI_COLORS4.success("Successfully upgraded:")}
${successfulProjectsList}`);
    }
    let failedProjectsList = failedProjects.map((dir) => `  \u2022 ${shortenPath(dir)}`).join(`
`);
    if (logger26.log(
      `${CLI_COLORS4.error("Failed to upgrade:")}
Some automigrations failed, please check the logs in the log file for more details.
${failedProjectsList}`
    ), projectsWithNoFixes.length > 0) {
      let projectList = projectsWithNoFixes.map((dir) => `  \u2022 ${shortenPath(dir)}`).join(`
`);
      logger26.log(`${CLI_COLORS4.info("No applicable migrations:")}
${projectList}`);
    }
  } else
    Object.values(doctorResults).every((result) => result.status === "healthy") ? logger26.step(`${CLI_COLORS4.success("Your project(s) have been upgraded successfully! \u{1F389}")}`) : logger26.step(
      `${import_picocolors18.default.yellow("Your project(s) have been upgraded successfully, but some issues were found which need your attention, please check Storybook doctor logs above.")}`
    );
  let automigrationLinks = detectedAutomigrations.filter(
    (am) => Object.entries(projectResults).some(
      ([_, resultData]) => resultData.automigrationStatuses[am.fix.id] === "failed" /* FAILED */ || resultData.automigrationStatuses[am.fix.id] === "succeeded" /* SUCCEEDED */ || resultData.automigrationStatuses[am.fix.id] === "check_failed" /* CHECK_FAILED */
    )
  ).map((am) => `\u2022 ${createHyperlink(am.fix.id, am.fix.link)}`);
  if (automigrationLinks.length > 0) {
    let automigrationLinksMessage = [
      "If you want to learn more about the automigrations that executed in your project(s), please check the following links:",
      ...automigrationLinks
    ].join(`
`);
    logger26.log(automigrationLinksMessage);
  }
  logger26.log(
    `For a full list of changes, please check our migration guide: ${CLI_COLORS4.cta("https://storybook.js.org/docs/releases/migration-guide?ref=upgrade")}`
  );
}
async function sendMultiUpgradeTelemetry(options) {
  let {
    allProjects,
    selectedProjects,
    projectResults,
    doctorResults,
    hasUserInterrupted = !1
  } = options, { successfulProjects, failedProjects, projectsWithNoFixes } = getUpgradeResults(
    projectResults,
    doctorResults
  ), processedProjects = /* @__PURE__ */ new Set([
    ...Object.keys(projectResults),
    ...Object.keys(doctorResults)
  ]), incompleteProjects = selectedProjects.map((p) => p.configDir).filter((configDir) => !processedProjects.has(configDir)), projectsWithDoctorReports = Object.values(doctorResults).filter(
    (result) => result.status !== "healthy"
  ).length;
  try {
    await telemetry("multi-upgrade", {
      totalDetectedProjects: allProjects.length,
      totalSelectedProjects: selectedProjects.length,
      projectsWithSuccessfulAutomigrations: successfulProjects.length,
      projectsWithFailedAutomigrations: failedProjects.length,
      projectsWithNoAutomigrations: projectsWithNoFixes.length,
      projectsWithDoctorReports,
      incompleteProjects: incompleteProjects.length,
      hasUserInterrupted
    });
  } catch (error) {
    logger26.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`);
  }
}
async function upgrade(options) {
  if (options.features && options.skipAutomigrations)
    throw logger26.error(
      "The --features flag enables feature flags through automigrations, so it cannot be combined with --skip-automigrations."
    ), new HandledError("--features cannot be combined with --skip-automigrations");
  let projectsResult = await getProjects(options);
  if (projectsResult === void 0 || projectsResult.selectedProjects.length === 0)
    return;
  let { allProjects, selectedProjects: storybookProjects } = projectsResult;
  storybookProjects.length > 1 ? logger26.info(`Upgrading the following projects:
          ${storybookProjects.map((p) => `${import_picocolors18.default.cyan(shortenPath(p.configDir))}: ${import_picocolors18.default.bold(p.beforeVersion)} -> ${import_picocolors18.default.bold(p.currentCLIVersion)}`).join(`
`)}`) : logger26.info(
    `Upgrading from ${import_picocolors18.default.bold(storybookProjects[0].beforeVersion)} to ${import_picocolors18.default.bold(storybookProjects[0].currentCLIVersion)}`
  );
  let automigrationResults = {}, doctorResults = {}, handleInterruption = async () => {
    throw logger26.log(`

Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgradeTelemetry({
      allProjects,
      selectedProjects: storybookProjects,
      projectResults: automigrationResults,
      doctorResults,
      hasUserInterrupted: !0
    }), new HandledError("Upgrade cancelled by user");
  };
  process.on("SIGINT", handleInterruption), process.on("SIGTERM", handleInterruption);
  try {
    if (processAutoblockerResults(storybookProjects, (message) => {
      logger26.error(dedent20`Blockers detected\n\n${message}`);
    }))
      throw new HandledError("Blockers detected");
    if (storybookProjects.some((project) => {
      if (!project.isCanary && (0, import_semver9.lt)(project.currentCLIVersion, project.beforeVersion))
        throw new UpgradeStorybookToLowerVersionError({
          beforeVersion: project.beforeVersion,
          currentVersion: project.currentCLIVersion
        });
      if (!project.beforeVersion)
        throw new UpgradeStorybookUnknownCurrentVersionError();
    }), !options.dryRun) {
      for (let project of storybookProjects)
        try {
          await project.packageManager.precheckStorybookPackageInstall({
            storybookVersion: project.currentCLIVersion,
            nonInteractive: !!options.yes || !process.stdout.isTTY || !!isCI2(),
            installContext: "upgrade"
          });
        } catch (error) {
          if (error instanceof MinimumReleaseAgeHandledError)
            throw error;
          logger26.debug(
            `Skipping minimum-release-age precheck for ${project.configDir} after an unexpected failure: ${error}`
          );
        }
      let task = prompt8.taskLog({
        id: "upgrade-dependencies",
        title: "Fetching versions to update package.json files.."
      });
      try {
        let loggedPaths = [];
        for (let project of storybookProjects) {
          logger26.debug(`Updating dependencies in ${shortenPath(project.configDir)}...`);
          let newPaths = project.packageManager.packageJsonPaths.map(shortenPath).filter((path4) => !loggedPaths.includes(path4));
          newPaths.length > 0 && (task.message(newPaths.join(`
`)), loggedPaths.push(...newPaths)), await upgradeStorybookDependencies({
            packageManager: project.packageManager,
            isCanary: project.isCanary,
            isCLIOutdated: project.isCLIOutdated,
            isCLIPrerelease: project.isCLIPrerelease,
            isCLIExactLatest: project.isCLIExactLatest,
            isCLIExactPrerelease: project.isCLIExactPrerelease
          });
        }
        task.success("Updated package versions in package.json files");
      } catch (err) {
        task.error(`Failed to upgrade dependencies: ${String(err)}`);
      }
    }
    let automigrationResults2 = {}, detectedAutomigrations = [];
    options.skipAutomigrations ? logger26.log("Skipping automigrations (--skip-automigrations).") : { automigrationResults: automigrationResults2, detectedAutomigrations } = await runAutomigrations(
      storybookProjects,
      options
    );
    let rootPackageManager = storybookProjects.length > 1 ? JsPackageManagerFactory2.getPackageManager({ force: options.packageManager }) : storybookProjects[0].packageManager;
    if (rootPackageManager.type === "npm" ? await rootPackageManager.installDependencies({ force: !0 }) : await rootPackageManager.installDependencies(), rootPackageManager.type !== PackageManagerName2.YARN1 && rootPackageManager.isStorybookInMonorepo() && (logger26.warn(
      "Since you are in a monorepo, we advise you to deduplicate your dependencies. We can do this for you but it might take some time."
    ), options.yes || await prompt8.confirm({
      message: `Execute ${rootPackageManager.getRunCommand("dedupe")}?`,
      initialValue: !0
    }) ? rootPackageManager.type === "npm" ? await rootPackageManager.dedupeDependencies({ force: !0 }) : await rootPackageManager.dedupeDependencies() : logger26.log(
      `If you find any issues running Storybook, you can run ${rootPackageManager.getRunCommand("dedupe")} manually to deduplicate your dependencies and try again.`
    )), !options.dryRun && !options.skipInstall)
      for (let project of storybookProjects) {
        let addonsToPostinstall = automigrationResults2[project.configDir]?.addonsToPostinstall;
        if (addonsToPostinstall?.length) {
          logger26.step(`Configuring addons: ${addonsToPostinstall.join(", ")}..`);
          try {
            await configureDeferredAddons(addonsToPostinstall, {
              packageManager: project.packageManager.type,
              configDir: project.configDir,
              yes: options.yes,
              logger: logger26,
              prompt: prompt8
            });
          } catch (error) {
            logger26.warn(
              `Configuring ${addonsToPostinstall.join(", ")} failed: ${String(
                error
              )}. Run "npx storybook add <addon>" manually for each addon to finish the setup.`
            ), logger26.debug(error instanceof Error ? error.stack ?? error.message : String(error));
          }
        }
      }
    let doctorProjects = storybookProjects.map((project) => ({
      configDir: project.configDir,
      packageManager: project.packageManager,
      storybookVersion: project.currentCLIVersion,
      mainConfig: project.mainConfig
    }));
    logger26.step("Checking the health of your project(s).."), doctorResults = await runMultiProjectDoctor(doctorProjects), displayDoctorResults(doctorResults) && logTracker3.enableLogWriting(), logUpgradeResults(automigrationResults2, detectedAutomigrations, doctorResults);
    for (let project of storybookProjects) {
      let resultData = automigrationResults2[project.configDir] || {
        automigrationStatuses: {},
        automigrationErrors: {}
      }, doctorFailureCount = 0, doctorErrorCount = 0;
      Object.values(doctorResults[project.configDir]?.diagnostics || {}).forEach((status) => {
        status === "has_issues" && doctorFailureCount++, status === "check_error" && doctorErrorCount++;
      });
      let automigrationFailureCount = Object.keys(resultData.automigrationErrors).length, automigrationPreCheckFailure = project.autoblockerCheckResults && project.autoblockerCheckResults.length > 0 ? project.autoblockerCheckResults?.map((result) => result.result !== null ? result.blocker.id : null).filter(Boolean) : null;
      await telemetry("upgrade", {
        beforeVersion: project.beforeVersion,
        afterVersion: project.currentCLIVersion,
        automigrationResults: resultData.automigrationStatuses,
        automigrationErrors: resultData.automigrationErrors,
        automigrationFailureCount,
        automigrationPreCheckFailure,
        doctorResults: doctorResults[project.configDir]?.diagnostics || {},
        doctorFailureCount,
        doctorErrorCount
      });
    }
    await sendMultiUpgradeTelemetry({
      allProjects,
      selectedProjects: storybookProjects,
      projectResults: automigrationResults2,
      doctorResults
    });
  } finally {
    process.removeListener("SIGINT", handleInterruption), process.removeListener("SIGTERM", handleInterruption);
  }
}

// src/bin/run.ts
addToGlobalContext("cliVersion", versions5.storybook);
var handleCommandFailure = (logFilePath) => async (error) => {
  error instanceof HandledError2 || logger27.error(String(error));
  try {
    let logFile = await logTracker4.writeToFile(logFilePath);
    logger27.log(`Debug logs are written to: ${logFile}`);
  } catch {
  }
  logger27.outro(""), process.exit(1);
}, command = (name) => program.command(name).option(
  "--disable-telemetry",
  "Disable sending telemetry data",
  optionalEnvToBoolean3(process.env.STORYBOOK_DISABLE_TELEMETRY)
).option("--debug", "Get more logs in debug mode", !1).option("--enable-crash-reports", "Enable sending crash reports to telemetry data").option(
  "--logfile [path]",
  "Write all debug logs to the specified file at the end of the run. Defaults to debug-storybook.log when [path] is not provided"
).option("--loglevel <trace | debug | info | warn | error | silent>", "Define log level", "info").hook("preAction", async (self2) => {
  let options = self2.opts();
  options.debug && logger27.setLogLevel("debug"), options.loglevel && logger27.setLogLevel(options.loglevel), options.logfile && logTracker4.enableLogWriting();
  try {
    await globalSettings();
  } catch (e) {
    logger27.error(`Error loading global settings:
` + String(e));
  }
}).hook("postAction", async (command2) => {
  if (logTracker4.shouldWriteLogsToFile) {
    try {
      let logFile = await logTracker4.writeToFile(command2.getOptionValue("logfile"));
      logger27.log(`Debug logs are written to: ${logFile}`);
    } catch {
    }
    logger27.outro(CLI_COLORS5.success("Done!"));
  }
});
command("init").description("Initialize Storybook into your project").option("-f --force", "Force add Storybook").option("-s --skip-install", "Skip installing deps").addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("--use-pnp", "Enable PnP mode for Yarn 2+").option("-p --parser <babel | babylon | flow | ts | tsx>", "jscodeshift parser").option("-t --type <type>", "Add Storybook for a specific project type").option("-y --yes", "Answer yes to all prompts").option("-b --builder <webpack5 | vite>", "Builder library").option("-l --linkable", "Prepare installation for link (contributor helper)").option("--dev", "Launch the development server after completing initialization").option(
  "--no-dev",
  "Do not launch the Storybook development server after completing initialization (default)"
);
command("add <addon>").description("Add an addon to your Storybook").addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("-c, --config-dir <dir-name>", "Directory where to load Storybook configurations from").option("--skip-install", "Skip installing deps").option("-s --skip-postinstall", "Skip package specific postinstall config modifications").option("-y --yes", "Skip prompting the user").option("--skip-doctor", "Skip doctor check").action((addonName, options) => {
  withTelemetry("add", { cliOptions: options }, async () => {
    logger27.intro(`Setting up your project for ${addonName}`), await add(addonName, options), await telemetry2("add", { addon: addonName, source: "cli" }), logger27.outro("Done!");
  }).catch(handleCommandFailure);
});
command("remove <addon>").description("Remove an addon from your Storybook").addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("-c, --config-dir <dir-name>", "Directory where to load Storybook configurations from").option("-s --skip-install", "Skip installing deps").action(
  (addonName, options) => withTelemetry("remove", { cliOptions: options }, async () => {
    logger27.intro(`Removing ${addonName} from your Storybook`);
    let packageManager = JsPackageManagerFactory3.getPackageManager({
      configDir: options.configDir,
      force: options.packageManager
    });
    await remove(addonName, {
      configDir: options.configDir,
      packageManager,
      skipInstall: options.skipInstall
    }), await telemetry2("remove", { addon: addonName, source: "cli" }), logger27.outro("Done!");
  }).catch(handleCommandFailure(options.logfile))
);
command("upgrade").description(`Upgrade your Storybook packages to v${versions5.storybook}`).addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("-y --yes", "Skip prompting the user").addOption(
  new Option(
    "--features <list>",
    "Comma-separated list of experimental feature flags to enable during the upgrade"
  ).argParser((value) => {
    try {
      resolveRequestedFeatures(value);
    } catch (error) {
      throw new InvalidArgumentError(error instanceof Error ? error.message : String(error));
    }
    return value;
  })
).option("-f --force", "force the upgrade, skipping autoblockers").option("-n --dry-run", "Only check for upgrades, do not install").option("-s --skip-check", "Skip postinstall version and automigration checks").option(
  "--skip-automigrations",
  "Skip running automigrations entirely (only update package versions and install)"
).option(
  "-c, --config-dir <dir-name...>",
  "Directory(ies) where to load Storybook configurations from"
).action(async (options) => {
  await withTelemetry(
    "upgrade",
    { cliOptions: { ...options, configDir: options.configDir?.[0] } },
    async () => {
      logger27.intro(`Storybook upgrade - v${versions5.storybook}`), await upgrade(options), logger27.outro("Storybook upgrade completed!");
    }
  ).catch(handleCommandFailure(options.logfile));
});
command("info").description("Prints debugging information about the local environment").action(async () => {
  logger27.log(import_picocolors19.default.bold(`
Storybook Environment Info:`));
  let activePackageManager = JsPackageManagerFactory3.getPackageManager().type.replace(/\d/, ""), output = await import_envinfo.default.run({
    System: ["OS", "CPU", "Shell"],
    Binaries: ["Node", "Yarn", "npm", "pnpm"],
    Browsers: ["Chrome", "Edge", "Firefox", "Safari"],
    npmPackages: "{@storybook/*,*storybook*,sb,chromatic}",
    npmGlobalPackages: "{@storybook/*,*storybook*,sb,chromatic}"
  }), activePackageManagerLine = output.match(new RegExp(`${activePackageManager}:.*`, "i"));
  logger27.log(
    output.replace(
      activePackageManagerLine,
      import_picocolors19.default.bold(`${activePackageManagerLine} <----- active`)
    )
  );
});
command("migrate [migration]").description("Run a Storybook codemod migration on your source files").option("-l --list", "List available migrations").option("-g --glob <glob>", "Glob for files upon which to apply the migration", "**/*.js").option("-p --parser <babel | babylon | flow | ts | tsx>", "jscodeshift parser").option("-c, --config-dir <dir-name>", "Directory where to load Storybook configurations from").option(
  "-n --dry-run",
  "Dry run: verify the migration exists and show the files to which it will be applied"
).option(
  "-r --rename <from-to>",
  'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"'
).action((migration, options) => {
  withTelemetry("migrate", { cliOptions: options }, async () => {
    logger27.intro(`Running ${migration} migration`), await migrate(migration, options), logger27.outro("Migration completed");
  }).catch(handleCommandFailure(options.logfile));
});
command("sandbox [filterValue]").alias("repro").description("Create a sandbox from a set of possible templates").option("-o --output <outDir>", "Define an output directory").option("--no-init", "Whether to download a template without an initialized Storybook", !1).action((filterValue, options) => {
  logger27.intro("Creating a Storybook sandbox..."), sandbox({ filterValue, ...options }).catch(handleCommandFailure).finally(() => {
    logger27.outro("Done!");
  });
});
command("link <repo-url-or-directory>").description("Pull down a repro from a URL (or a local directory), link it, and run storybook").option("--local", "Link a local directory already in your file system").option("--no-start", "Start the storybook", !0).action(
  (target, { local, start, logfile }) => link({ target, local, start }).catch(handleCommandFailure(logfile))
);
command("automigrate [fixId]").description("Check storybook for incompatibilities or migrations and apply fixes").option("-y --yes", "Skip prompting the user").option("-n --dry-run", "Only check for fixes, do not actually run them").addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("-l --list", "List available migrations").option("-c, --config-dir <dir-name>", "Directory of Storybook configurations to migrate").option("-s --skip-install", "Skip installing deps").option(
  "--renderer <renderer-pkg-name>",
  "The renderer package for the framework Storybook is using."
).option("--skip-doctor", "Skip doctor check").option("--glob <pattern>", "Glob pattern for story files (for csf-factories codemod)").action(async (fixId, options) => {
  withTelemetry("automigrate", { cliOptions: options }, async () => {
    logger27.intro(fixId ? `Running ${fixId} automigration` : "Running automigrations"), await doAutomigrate({ fixId, ...options }), logger27.outro("Done");
  }).catch(handleCommandFailure(options.logfile));
});
command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").addOption(
  new Option("--package-manager <type>", "Force package manager for installing deps").choices(
    Object.values(PackageManagerName3)
  )
).option("-c, --config-dir <dir-name>", "Directory of Storybook configuration").action(async (options) => {
  withTelemetry("doctor", { cliOptions: options }, async () => {
    logger27.intro("Doctoring Storybook"), await doctor(options), logger27.outro("Done");
  }).catch(handleCommandFailure(options.logfile));
});
program.on("command:*", ([invalidCmd]) => {
  let errorMessage = ` Invalid command: ${import_picocolors19.default.bold(invalidCmd)}.
 See --help for a list of available commands.`, suggestion = program.commands.map((cmd) => cmd.name()).find((cmd) => leven(cmd, invalidCmd) < 3);
  suggestion && (errorMessage += `
 Did you mean ${import_picocolors19.default.yellow(suggestion)}?`), logger27.error(errorMessage), process.exit(1);
});
program.usage("<command> [options]").version(String(version)).parse(process.argv);