@storybook/cli 10.5.0-alpha.6 → 10.5.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/_node-chunks/{block-dependencies-versions-KNOD2BWP.js → block-dependencies-versions-7OYN4OJ6.js} +11 -11
  2. package/dist/_node-chunks/{block-experimental-addon-test-I3NQZ67T.js → block-experimental-addon-test-2YUVRX5Y.js} +9 -9
  3. package/dist/_node-chunks/{block-major-version-DMTKXUJW.js → block-major-version-SNHXUXIT.js} +9 -9
  4. package/dist/_node-chunks/{block-node-version-SYSCMPRY.js → block-node-version-NPHJGOFN.js} +9 -9
  5. package/dist/_node-chunks/{block-webpack5-frameworks-DT3SZDJW.js → block-webpack5-frameworks-GZA34OZU.js} +11 -11
  6. package/dist/_node-chunks/{chunk-DN3UQRPJ.js → chunk-3OLDFVDH.js} +8 -8
  7. package/dist/_node-chunks/{chunk-4S7L4PUE.js → chunk-46TO6QSJ.js} +32 -109
  8. package/dist/_node-chunks/{chunk-5EYTFADV.js → chunk-7UM5AIIV.js} +11 -7
  9. package/dist/_node-chunks/{chunk-7T5TVMZN.js → chunk-QXN4FHHX.js} +10 -10
  10. package/dist/_node-chunks/chunk-RSLATG3U.js +11 -0
  11. package/dist/_node-chunks/{globby-N7FUCNB3.js → globby-SCRW7ORA.js} +8 -8
  12. package/dist/_node-chunks/{p-limit-T5KZSKYN.js → p-limit-EE6XMDEK.js} +7 -7
  13. package/dist/_node-chunks/{run-MGTW4EFF.js → run-XZO7FX4L.js} +115 -510
  14. package/dist/bin/index.js +7 -7
  15. package/package.json +7 -5
  16. package/dist/_node-chunks/chunk-C7NSVZ7N.js +0 -115
  17. package/dist/_node-chunks/chunk-DUE3AZ4P.js +0 -23
  18. package/dist/_node-chunks/chunk-EOXTAHPM.js +0 -11
  19. package/dist/_node-chunks/chunk-LRDUNZP3.js +0 -638
  20. package/dist/_node-chunks/chunk-MSLRLTEZ.js +0 -20
  21. package/dist/_node-chunks/monorepo-3AUONKTW.js +0 -119
  22. package/dist/_node-chunks/monorepo-optimized-tests-relaxed-limits-no-story-deletion-UJ6Z3SDQ.js +0 -119
  23. package/dist/_node-chunks/optimized-tests-ZFPEYEWX.js +0 -20
  24. package/dist/_node-chunks/pattern-copy-play-4RLZSOFB.js +0 -810
  25. package/dist/_node-chunks/relaxed-limits-RJIY3AVP.js +0 -115
  26. package/dist/_node-chunks/setup-YM2FCT2N.js +0 -281
@@ -1,19 +1,14 @@
1
- import CJS_COMPAT_NODE_URL_mdwh1fp8wrg from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mdwh1fp8wrg from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mdwh1fp8wrg from "node:module";
1
+ import CJS_COMPAT_NODE_URL_h4vun2izro9 from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_h4vun2izro9 from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_h4vun2izro9 from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mdwh1fp8wrg.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mdwh1fp8wrg.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mdwh1fp8wrg.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_h4vun2izro9.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_h4vun2izro9.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_h4vun2izro9.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
- import {
13
- instructions
14
- } from "./chunk-C7NSVZ7N.js";
15
- import "./chunk-LRDUNZP3.js";
16
- import "./chunk-DUE3AZ4P.js";
17
12
  import {
18
13
  bannerComment,
19
14
  containsDirnameUsage,
@@ -28,21 +23,20 @@ import {
28
23
  processAutoblockerResults,
29
24
  require_picocolors,
30
25
  shortenPath,
31
- up,
32
26
  updateMainConfig,
33
27
  upgradeStorybookDependencies
34
- } from "./chunk-4S7L4PUE.js";
28
+ } from "./chunk-46TO6QSJ.js";
35
29
  import {
36
30
  slash
37
- } from "./chunk-7T5TVMZN.js";
31
+ } from "./chunk-QXN4FHHX.js";
38
32
  import {
39
33
  require_semver
40
- } from "./chunk-DN3UQRPJ.js";
34
+ } from "./chunk-3OLDFVDH.js";
41
35
  import {
42
36
  __commonJS,
43
37
  __require,
44
38
  __toESM
45
- } from "./chunk-5EYTFADV.js";
39
+ } from "./chunk-7UM5AIIV.js";
46
40
 
47
41
  // ../../../node_modules/envinfo/dist/envinfo.js
48
42
  var require_envinfo = __commonJS({
@@ -1678,7 +1672,7 @@ ${e3}
1678
1672
  "use strict";
1679
1673
  var r = n2(5444), o = n2(5364), i = n2(3875), s = n2(1164), a = n2(2936), c = Object.assign;
1680
1674
  e2.exports = !c || n2(9316)((function() {
1681
- var e3 = {}, t12 = {}, n3 = Symbol(), r2 = "abcdefghijklmnopqrst";
1675
+ var e3 = {}, t12 = {}, n3 = /* @__PURE__ */ Symbol(), r2 = "abcdefghijklmnopqrst";
1682
1676
  return e3[n3] = 7, r2.split("").forEach((function(e4) {
1683
1677
  t12[e4] = e4;
1684
1678
  })), c({}, e3)[n3] != 7 || Object.keys(c({}, t12)).join("") != r2;
@@ -4423,9 +4417,9 @@ var require_isexe = __commonJS({
4423
4417
  if (typeof options == "function" && (cb = options, options = {}), !cb) {
4424
4418
  if (typeof Promise != "function")
4425
4419
  throw new TypeError("callback not provided");
4426
- return new Promise(function(resolve5, reject) {
4420
+ return new Promise(function(resolve3, reject) {
4427
4421
  isexe(path4, options || {}, function(er, is) {
4428
- er ? reject(er) : resolve5(is);
4422
+ er ? reject(er) : resolve3(is);
4429
4423
  });
4430
4424
  });
4431
4425
  }
@@ -4462,22 +4456,22 @@ var require_which = __commonJS({
4462
4456
  };
4463
4457
  }, which = (cmd, opt, cb) => {
4464
4458
  typeof opt == "function" && (cb = opt, opt = {}), opt || (opt = {});
4465
- let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [], step = (i) => new Promise((resolve5, reject) => {
4459
+ let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [], step = (i) => new Promise((resolve3, reject) => {
4466
4460
  if (i === pathEnv.length)
4467
- return opt.all && found.length ? resolve5(found) : reject(getNotFoundError(cmd));
4461
+ return opt.all && found.length ? resolve3(found) : reject(getNotFoundError(cmd));
4468
4462
  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;
4469
- resolve5(subStep(p, i, 0));
4470
- }), subStep = (p, i, ii) => new Promise((resolve5, reject) => {
4463
+ resolve3(subStep(p, i, 0));
4464
+ }), subStep = (p, i, ii) => new Promise((resolve3, reject) => {
4471
4465
  if (ii === pathExt.length)
4472
- return resolve5(step(i + 1));
4466
+ return resolve3(step(i + 1));
4473
4467
  let ext = pathExt[ii];
4474
4468
  isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
4475
4469
  if (!er && is)
4476
4470
  if (opt.all)
4477
4471
  found.push(p + ext);
4478
4472
  else
4479
- return resolve5(p + ext);
4480
- return resolve5(subStep(p, i, ii + 1));
4473
+ return resolve3(p + ext);
4474
+ return resolve3(subStep(p, i, ii + 1));
4481
4475
  });
4482
4476
  });
4483
4477
  return cb ? step(0).then((res) => cb(null, res), cb) : step(0);
@@ -4716,7 +4710,7 @@ var require_cross_spawn = __commonJS({
4716
4710
  var import_envinfo = __toESM(require_envinfo(), 1);
4717
4711
  import { globalSettings } from "storybook/internal/cli";
4718
4712
  import {
4719
- HandledError as HandledError3,
4713
+ HandledError as HandledError2,
4720
4714
  JsPackageManagerFactory as JsPackageManagerFactory3,
4721
4715
  PackageManagerName as PackageManagerName3,
4722
4716
  optionalEnvToBoolean as optionalEnvToBoolean3,
@@ -4724,8 +4718,8 @@ import {
4724
4718
  versions as versions5
4725
4719
  } from "storybook/internal/common";
4726
4720
  import { withTelemetry } from "storybook/internal/core-server";
4727
- import { CLI_COLORS as CLI_COLORS5, logTracker as logTracker4, logger as logger26 } from "storybook/internal/node-logger";
4728
- import { addToGlobalContext, telemetry as telemetry3 } from "storybook/internal/telemetry";
4721
+ import { CLI_COLORS as CLI_COLORS5, logTracker as logTracker4, logger as logger24 } from "storybook/internal/node-logger";
4722
+ import { addToGlobalContext, telemetry as telemetry2 } from "storybook/internal/telemetry";
4729
4723
  import { Option, program } from "commander";
4730
4724
 
4731
4725
  // ../../../node_modules/leven/index.js
@@ -4766,7 +4760,7 @@ function leven(first, second, options) {
4766
4760
  var import_picocolors18 = __toESM(require_picocolors(), 1);
4767
4761
 
4768
4762
  // package.json
4769
- var version = "10.5.0-alpha.6";
4763
+ var version = "10.5.0-alpha.7";
4770
4764
 
4771
4765
  // src/add.ts
4772
4766
  var import_semver = __toESM(require_semver(), 1);
@@ -5006,9 +5000,9 @@ var DIR_CWD = process.cwd(), require2 = createRequire2(DIR_CWD), postinstallAddo
5006
5000
  } catch {
5007
5001
  return;
5008
5002
  }
5009
- let postinstall = moduledLoaded?.default || moduledLoaded?.postinstall || moduledLoaded, logger27 = options.logger;
5003
+ let postinstall = moduledLoaded?.default || moduledLoaded?.postinstall || moduledLoaded, logger25 = options.logger;
5010
5004
  if (!postinstall || typeof postinstall != "function") {
5011
- logger27.error(`Error finding postinstall function for ${addonName}`);
5005
+ logger25.error(`Error finding postinstall function for ${addonName}`);
5012
5006
  return;
5013
5007
  }
5014
5008
  try {
@@ -5029,7 +5023,7 @@ async function add(addon, {
5029
5023
  configDir: userSpecifiedConfigDir,
5030
5024
  yes,
5031
5025
  skipInstall
5032
- }, logger27 = nodeLogger) {
5026
+ }, logger25 = nodeLogger) {
5033
5027
  let [addonName, inputVersion] = getVersionSpecifier(addon), { mainConfig, mainConfigPath, configDir, previewConfigPath, packageManager } = await getStorybookData({
5034
5028
  configDir: userSpecifiedConfigDir,
5035
5029
  packageManagerName: pkgMgr
@@ -5039,16 +5033,16 @@ async function add(addon, {
5039
5033
  Unable to find storybook config directory. Please specify your Storybook config directory with the --config-dir flag.
5040
5034
  `);
5041
5035
  if (!mainConfigPath) {
5042
- logger27.error("Unable to find Storybook main.js config");
5036
+ logger25.error("Unable to find Storybook main.js config");
5043
5037
  return;
5044
5038
  }
5045
5039
  let shouldAddToMain = !0;
5046
- if (checkInstalled(addonName, mainConfig) && (shouldAddToMain = !1, !yes && (logger27.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`), !await prompt.confirm({
5040
+ if (checkInstalled(addonName, mainConfig) && (shouldAddToMain = !1, !yes && (logger25.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`), !await prompt.confirm({
5047
5041
  message: "Do you wish to install it again?"
5048
5042
  }))))
5049
5043
  return;
5050
5044
  let main = await readConfig(mainConfigPath);
5051
- logger27.log(`Verifying ${addonName}`);
5045
+ logger25.log(`Verifying ${addonName}`);
5052
5046
  let version2 = inputVersion;
5053
5047
  if (!version2 && isCoreAddon(addonName) && (version2 = versions.storybook), !version2) {
5054
5048
  let latestVersion = await packageManager.latestVersion(addonName);
@@ -5057,14 +5051,14 @@ async function add(addon, {
5057
5051
  version2 = latestVersion;
5058
5052
  }
5059
5053
  let storybookVersion = versions.storybook, versionIsStorybook = version2 === versions.storybook;
5060
- isCoreAddon(addonName) && !versionIsStorybook && logger27.warn(
5054
+ isCoreAddon(addonName) && !versionIsStorybook && logger25.warn(
5061
5055
  `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.`
5062
5056
  );
5063
5057
  let versionRange = packageManager.getDependencyVersion("storybook")?.match(/^[~^]/)?.[0] ?? "", addonWithVersion = versionIsStorybook ? `${addonName}@${versionRange}${storybookVersion}` : isValidVersion(version2) && !version2.includes("-pr-") ? `${addonName}@^${version2}` : `${addonName}@${version2}`;
5064
- logger27.log(`Installing ${addonWithVersion}`), await packageManager.addDependencies(
5058
+ logger25.log(`Installing ${addonWithVersion}`), await packageManager.addDependencies(
5065
5059
  { type: "devDependencies", writeOutputToFile: !1, skipInstall },
5066
5060
  [addonWithVersion]
5067
- ), shouldAddToMain && (logger27.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`), await setupAddonInConfig({
5061
+ ), shouldAddToMain && (logger25.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`), await setupAddonInConfig({
5068
5062
  addonName,
5069
5063
  mainConfigCSFFile: main,
5070
5064
  previewConfigPath,
@@ -5073,7 +5067,7 @@ async function add(addon, {
5073
5067
  packageManager: packageManager.type,
5074
5068
  configDir,
5075
5069
  yes,
5076
- logger: logger27,
5070
+ logger: logger25,
5077
5071
  prompt,
5078
5072
  skipInstall
5079
5073
  });
@@ -5630,7 +5624,7 @@ import { logger as logger3 } from "storybook/internal/node-logger";
5630
5624
  import { promises as fs } from "fs";
5631
5625
  var maxConcurrentTasks = Math.max(1, os.cpus().length - 1);
5632
5626
  async function runCodemod(globPattern = "**/*.{stories,story}.{js,jsx,ts,tsx,mjs,mjsx,mts,mtsx}", transform, { dryRun = !1, skipFormatting = !1 } = {}) {
5633
- let modifiedCount = 0, unmodifiedCount = 0, errorCount = 0, { globby } = await import("./globby-N7FUCNB3.js"), files = await globby(slash(globPattern), {
5627
+ let modifiedCount = 0, unmodifiedCount = 0, errorCount = 0, { globby } = await import("./globby-SCRW7ORA.js"), files = await globby(slash(globPattern), {
5634
5628
  followSymbolicLinks: !0,
5635
5629
  ignore: ["**/node_modules/**", "**/dist/**", "**/storybook-static/**", "**/build/**"]
5636
5630
  });
@@ -5641,7 +5635,7 @@ Please try a different pattern.
5641
5635
  `
5642
5636
  ), new Error("No files matched");
5643
5637
  try {
5644
- let pLimit = (await import("./p-limit-T5KZSKYN.js")).default, limit = pLimit(maxConcurrentTasks);
5638
+ let pLimit = (await import("./p-limit-EE6XMDEK.js")).default, limit = pLimit(maxConcurrentTasks);
5645
5639
  await Promise.all(
5646
5640
  files.map(
5647
5641
  (file) => limit(async () => {
@@ -6483,7 +6477,7 @@ var addonA11yParameters = {
6483
6477
  errors.push({ file: previewFileToUpdate, error });
6484
6478
  }
6485
6479
  }
6486
- let { default: pLimit } = await import("./p-limit-T5KZSKYN.js"), limit = pLimit(10);
6480
+ let { default: pLimit } = await import("./p-limit-EE6XMDEK.js"), limit = pLimit(10);
6487
6481
  if (await Promise.all(
6488
6482
  storyFilesToUpdate.map(
6489
6483
  (file) => limit(async () => {
@@ -6637,7 +6631,7 @@ var addonGlobalsApi = {
6637
6631
  }
6638
6632
  };
6639
6633
  async function transformStoryFiles(files, options, dryRun) {
6640
- let errors = [], { default: pLimit } = await import("./p-limit-T5KZSKYN.js"), limit = pLimit(10);
6634
+ let errors = [], { default: pLimit } = await import("./p-limit-EE6XMDEK.js"), limit = pLimit(10);
6641
6635
  return await Promise.all(
6642
6636
  files.map(
6643
6637
  (file) => limit(async () => {
@@ -6829,7 +6823,7 @@ function transformPackageJson(content) {
6829
6823
  return hasChanges ? JSON.stringify(packageJson, null, 2) : null;
6830
6824
  }
6831
6825
  var transformPackageJsonFiles = async (files, dryRun) => {
6832
- let errors = [], { default: pLimit } = await import("./p-limit-T5KZSKYN.js"), limit = pLimit(10);
6826
+ let errors = [], { default: pLimit } = await import("./p-limit-EE6XMDEK.js"), limit = pLimit(10);
6833
6827
  return await Promise.all(
6834
6828
  files.map(
6835
6829
  (file) => limit(async () => {
@@ -6868,7 +6862,7 @@ var transformPackageJsonFiles = async (files, dryRun) => {
6868
6862
  dryRun
6869
6863
  );
6870
6864
  errors.push(...packageJsonErrors);
6871
- let { globby } = await import("./globby-N7FUCNB3.js"), configFiles = await globby([`${configDir}/**/*`]), importErrors = await transformImportFiles(
6865
+ let { globby } = await import("./globby-SCRW7ORA.js"), configFiles = await globby([`${configDir}/**/*`]), importErrors = await transformImportFiles(
6872
6866
  [...storiesPaths, ...configFiles].filter(Boolean),
6873
6867
  {
6874
6868
  ...consolidatedPackages,
@@ -7224,7 +7218,7 @@ var VITE_DEFAULT_VERSION = "^7.0.0", transformMainConfig = async (mainConfigPath
7224
7218
  ]);
7225
7219
  }
7226
7220
  mainConfigPath && (logger11.debug("Updating main config file..."), await transformMainConfig(mainConfigPath, dryRun)), logger11.debug("Scanning and updating import statements...");
7227
- let { globby } = await import("./globby-N7FUCNB3.js"), configFiles = await globby([`${configDir}/**/*`]), allFiles = [...storiesPaths, ...configFiles].filter(Boolean), transformErrors = await transformImportFiles2(
7221
+ let { globby } = await import("./globby-SCRW7ORA.js"), configFiles = await globby([`${configDir}/**/*`]), allFiles = [...storiesPaths, ...configFiles].filter(Boolean), transformErrors = await transformImportFiles2(
7228
7222
  allFiles,
7229
7223
  {
7230
7224
  "@storybook/nextjs": "@storybook/nextjs-vite"
@@ -7248,9 +7242,9 @@ import { logger as logger12, prompt as prompt3 } from "storybook/internal/node-l
7248
7242
  import { spawn } from "node:child_process";
7249
7243
  var TIMEOUT = 2e3;
7250
7244
  function checkUnixCommandExists(command2) {
7251
- return new Promise((resolve5) => {
7245
+ return new Promise((resolve3) => {
7252
7246
  let proc = spawn("which", [command2]);
7253
- proc.on("error", () => resolve5(!1)), proc.on("close", (code) => resolve5(code === 0));
7247
+ proc.on("error", () => resolve3(!1)), proc.on("close", (code) => resolve3(code === 0));
7254
7248
  });
7255
7249
  }
7256
7250
  async function getWriteCommand() {
@@ -7270,7 +7264,7 @@ async function getWriteCommand() {
7270
7264
  }
7271
7265
  }
7272
7266
  function writeText(text) {
7273
- return new Promise(async (resolve5, reject) => {
7267
+ return new Promise(async (resolve3, reject) => {
7274
7268
  let command2 = await getWriteCommand();
7275
7269
  if (!command2)
7276
7270
  return reject(new Error("No clipboard tool found"));
@@ -7278,7 +7272,7 @@ function writeText(text) {
7278
7272
  stdio: ["pipe", "ignore", "ignore"],
7279
7273
  signal: AbortSignal.timeout(TIMEOUT)
7280
7274
  });
7281
- proc.on("error", (cause) => reject(new Error("An error occurred while copying", { cause }))), proc.on("close", (code) => code === 0 ? resolve5() : reject(new Error("An unknown error occurred while copying"))), proc.stdin.write(text), proc.stdin.end();
7275
+ proc.on("error", (cause) => reject(new Error("An error occurred while copying", { cause }))), proc.on("close", (code) => code === 0 ? resolve3() : reject(new Error("An unknown error occurred while copying"))), proc.stdin.write(text), proc.stdin.end();
7282
7276
  });
7283
7277
  }
7284
7278
 
@@ -7302,7 +7296,7 @@ var REACT_VITE_PACKAGE = "@storybook/react-vite", TANSTACK_REACT_PACKAGE = "@sto
7302
7296
  configDir,
7303
7297
  storiesPaths
7304
7298
  }) => {
7305
- let { globby } = await import("./globby-N7FUCNB3.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
7299
+ let { globby } = await import("./globby-SCRW7ORA.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
7306
7300
  ignore: ["**/node_modules/**", "**/dist/**"]
7307
7301
  }) : [], candidateFiles = Array.from(
7308
7302
  /* @__PURE__ */ new Set([...previewConfigPath ? [previewConfigPath] : [], ...configFiles, ...storiesPaths])
@@ -7521,7 +7515,7 @@ var REACT_VITE_PACKAGE = "@storybook/react-vite", TANSTACK_REACT_PACKAGE = "@sto
7521
7515
  logger12.step(`Migrating from ${REACT_VITE_PACKAGE} to ${TANSTACK_REACT_PACKAGE}...`), dryRun ? logger12.debug("Dry run: Skipping package.json updates.") : (logger12.debug("Updating package.json files..."), await packageManager.removeDependencies([REACT_VITE_PACKAGE]), await packageManager.addDependencies({ type: "devDependencies", skipInstall: !0 }, [
7522
7516
  `${TANSTACK_REACT_PACKAGE}@${storybookVersion}`
7523
7517
  ])), mainConfigPath && (logger12.debug("Updating main config file..."), await transformMainConfig2(mainConfigPath, dryRun)), logger12.debug("Scanning and updating import statements...");
7524
- let { globby } = await import("./globby-N7FUCNB3.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
7518
+ let { globby } = await import("./globby-SCRW7ORA.js"), configFiles = configDir ? await globby([`${configDir}/**/*.{ts,tsx,js,jsx,mjs,cjs}`], {
7525
7519
  ignore: ["**/node_modules/**", "**/dist/**"]
7526
7520
  }) : [], allFiles = [...storiesPaths, ...configFiles, previewConfigPath].filter(
7527
7521
  Boolean
@@ -7762,7 +7756,7 @@ var getAllDependencies = (packageJson) => Object.keys({
7762
7756
  let regex = new RegExp(`(['"])${renderer}(['"])`, "g");
7763
7757
  return regex.test(source) ? source.replace(regex, `$1${framework}$2`) : null;
7764
7758
  }, transformSourceFiles = async (files, renderer, framework, dryRun) => {
7765
- let errors = [], { default: pLimit } = await import("./p-limit-T5KZSKYN.js"), limit = pLimit(10);
7759
+ let errors = [], { default: pLimit } = await import("./p-limit-EE6XMDEK.js"), limit = pLimit(10);
7766
7760
  return await Promise.all(
7767
7761
  files.map(
7768
7762
  (file) => limit(async () => {
@@ -7829,7 +7823,7 @@ var getAllDependencies = (packageJson) => Object.keys({
7829
7823
  continue;
7830
7824
  logger14.debug(`
7831
7825
  Migrating ${rendererPackage} to ${selectedFramework}`);
7832
- let { globby } = await import("./globby-N7FUCNB3.js"), configFiles = await globby([`${configDir}/**/*`]);
7826
+ let { globby } = await import("./globby-SCRW7ORA.js"), configFiles = await globby([`${configDir}/**/*`]);
7833
7827
  await transformSourceFiles(
7834
7828
  [...storiesPaths, ...configFiles].filter(Boolean),
7835
7829
  rendererPackage,
@@ -7935,7 +7929,7 @@ async function renameInFile(filePath, oldText, newText) {
7935
7929
  }
7936
7930
  var getDotStorybookReferences = async (searchDir) => {
7937
7931
  try {
7938
- let { globby } = await import("./globby-N7FUCNB3.js"), { readFile: readFile11 } = await import("node:fs/promises"), files = await globby(`${searchDir}/**/*`, {
7932
+ let { globby } = await import("./globby-SCRW7ORA.js"), { readFile: readFile11 } = await import("node:fs/promises"), files = await globby(`${searchDir}/**/*`, {
7939
7933
  onlyFiles: !0,
7940
7934
  gitignore: !0
7941
7935
  }), referencedFiles = [];
@@ -7956,7 +7950,7 @@ var getDotStorybookReferences = async (searchDir) => {
7956
7950
  async check({ packageManager, mainConfigPath }) {
7957
7951
  if (!packageManager.getAllDependencies()["@storybook/react-native"])
7958
7952
  return null;
7959
- let projectDir = mainConfigPath ? join3(mainConfigPath, "..", "..") : process.cwd(), storybookDir = join3(projectDir, ".storybook"), rnStorybookDir = join3(projectDir, RN_STORYBOOK_DIR), { globby } = await import("./globby-N7FUCNB3.js"), requiresFiles = await globby(join3(storybookDir, "storybook.requires.*"));
7953
+ let projectDir = mainConfigPath ? join3(mainConfigPath, "..", "..") : process.cwd(), storybookDir = join3(projectDir, ".storybook"), rnStorybookDir = join3(projectDir, RN_STORYBOOK_DIR), { globby } = await import("./globby-SCRW7ORA.js"), requiresFiles = await globby(join3(storybookDir, "storybook.requires.*"));
7960
7954
  return existsSync3(storybookDir) && requiresFiles.length > 0 && !existsSync3(rnStorybookDir) ? { storybookDir, rnStorybookDir } : null;
7961
7955
  },
7962
7956
  prompt() {
@@ -9594,383 +9588,11 @@ async function promptSelectedTemplate(choices) {
9594
9588
  });
9595
9589
  }
9596
9590
 
9597
- // src/ai/index.ts
9598
- import { writeFile as writeFile10 } from "node:fs/promises";
9599
- import { resolve as resolve4 } from "node:path";
9600
- import { cache, getPrettyPackageManagerName } from "storybook/internal/common";
9601
- import { logger as logger23 } from "storybook/internal/node-logger";
9602
- import { telemetry } from "storybook/internal/telemetry";
9603
- import { SupportedLanguage as SupportedLanguage2 } from "storybook/internal/types";
9604
-
9605
- // ../create-storybook/src/services/ProjectTypeService.ts
9606
- import { existsSync as existsSync6 } from "node:fs";
9607
- import { resolve as resolve3 } from "node:path";
9608
- import { ProjectType as ProjectType2 } from "storybook/internal/cli";
9609
- import { HandledError, getProjectRoot } from "storybook/internal/common";
9610
- import { logger as logger22 } from "storybook/internal/node-logger";
9611
- import { NxProjectDetectedError } from "storybook/internal/server-errors";
9612
- import { SupportedLanguage } from "storybook/internal/types";
9613
-
9614
- // ../../../node_modules/empathic/find.mjs
9615
- import { join as join5 } from "node:path";
9616
- import { existsSync as existsSync5, statSync } from "node:fs";
9617
- function up2(name, options) {
9618
- let dir, tmp, start = options && options.cwd || "";
9619
- for (dir of up(start, options))
9620
- if (tmp = join5(dir, name), existsSync5(tmp)) return tmp;
9621
- }
9622
-
9623
- // ../create-storybook/src/services/ProjectTypeService.ts
9624
- var import_semver7 = __toESM(require_semver(), 1);
9625
- import { dedent as dedent17 } from "ts-dedent";
9626
- var ProjectTypeService = class {
9627
- constructor(jsPackageManager) {
9628
- this.jsPackageManager = jsPackageManager;
9629
- }
9630
- /** Sorted configuration to match a Storybook preset template */
9631
- getSupportedTemplates() {
9632
- return [
9633
- {
9634
- preset: ProjectType2.NUXT,
9635
- dependencies: ["nuxt"],
9636
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9637
- },
9638
- {
9639
- preset: ProjectType2.TANSTACK_REACT,
9640
- dependencies: ["@tanstack/start", "@tanstack/react-start", "@tanstack/react-router"],
9641
- matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
9642
- },
9643
- {
9644
- preset: ProjectType2.VUE3,
9645
- dependencies: {
9646
- // This Vue template works with Vue 3
9647
- vue: (versionRange) => versionRange === "next" || this.eqMajor(versionRange, 3)
9648
- },
9649
- matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
9650
- },
9651
- {
9652
- preset: ProjectType2.EMBER,
9653
- dependencies: ["ember-cli"],
9654
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9655
- },
9656
- {
9657
- preset: ProjectType2.NEXTJS,
9658
- dependencies: ["next"],
9659
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9660
- },
9661
- {
9662
- preset: ProjectType2.QWIK,
9663
- dependencies: ["@builder.io/qwik"],
9664
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9665
- },
9666
- {
9667
- preset: ProjectType2.REACT_NATIVE,
9668
- dependencies: ["react-native", "react-native-scripts", "expo"],
9669
- peerDependencies: ["react-native", "react-native-scripts", "expo"],
9670
- matcherFunction: ({ dependencies, peerDependencies }) => (dependencies?.some(Boolean) || peerDependencies?.some(Boolean)) ?? !1
9671
- },
9672
- {
9673
- preset: ProjectType2.REACT_SCRIPTS,
9674
- // For projects using a custom/forked `react-scripts` package.
9675
- files: ["/node_modules/.bin/react-scripts"],
9676
- // For standard CRA projects
9677
- dependencies: ["react-scripts"],
9678
- matcherFunction: ({ dependencies, files }) => (dependencies?.every(Boolean) || files?.every(Boolean)) ?? !1
9679
- },
9680
- {
9681
- preset: ProjectType2.ANGULAR,
9682
- dependencies: ["@angular/core"],
9683
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9684
- },
9685
- {
9686
- preset: ProjectType2.WEB_COMPONENTS,
9687
- dependencies: ["lit-element", "lit-html", "lit"],
9688
- matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
9689
- },
9690
- {
9691
- preset: ProjectType2.PREACT,
9692
- dependencies: ["preact"],
9693
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9694
- },
9695
- {
9696
- // TODO: This only works because it is before the SVELTE template. could be more explicit
9697
- preset: ProjectType2.SVELTEKIT,
9698
- dependencies: ["@sveltejs/kit"],
9699
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9700
- },
9701
- {
9702
- preset: ProjectType2.SVELTE,
9703
- dependencies: ["svelte"],
9704
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9705
- },
9706
- {
9707
- preset: ProjectType2.SOLID,
9708
- dependencies: ["solid-js"],
9709
- matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
9710
- },
9711
- // DO NOT MOVE ANY TEMPLATES BELOW THIS LINE
9712
- // React is part of every Template, after Storybook is initialized once
9713
- {
9714
- preset: ProjectType2.REACT,
9715
- dependencies: ["react"],
9716
- peerDependencies: ["react"],
9717
- matcherFunction: ({ dependencies, peerDependencies }) => (dependencies?.some(Boolean) || peerDependencies?.some(Boolean)) ?? !1
9718
- }
9719
- ];
9720
- }
9721
- isStorybookInstantiated(configDir = resolve3(process.cwd(), ".storybook")) {
9722
- return existsSync6(configDir);
9723
- }
9724
- async validateProvidedType(projectTypeProvided) {
9725
- if (Object.values(ProjectType2).filter(
9726
- (t10) => !["undetected", "unsupported", "nx"].includes(String(t10))
9727
- ).includes(projectTypeProvided))
9728
- return projectTypeProvided;
9729
- throw logger22.error(
9730
- `The provided project type ${projectTypeProvided} was not recognized by Storybook`
9731
- ), new HandledError(`Unknown project type supplied: ${projectTypeProvided}`);
9732
- }
9733
- async autoDetectProjectType(options) {
9734
- try {
9735
- let detectedType = await this.detectProjectType(options);
9736
- if (detectedType === ProjectType2.UNDETECTED || detectedType === null)
9737
- throw logger22.error(dedent17`
9738
- Unable to initialize Storybook in this directory.
9739
-
9740
- Storybook couldn't detect a supported framework or configuration for your project. Make sure you're inside a framework project (e.g., React, Vue, Svelte, Angular, Next.js) and that its dependencies are installed.
9741
-
9742
- Tips:
9743
- - Run init in an empty directory or create a new framework app first.
9744
- - If this directory contains unrelated files, try a new directory for Storybook.
9745
- `), new HandledError("Storybook failed to detect your project type");
9746
- if (detectedType === ProjectType2.NX)
9747
- throw new NxProjectDetectedError();
9748
- return detectedType;
9749
- } catch (err) {
9750
- throw err instanceof HandledError || err instanceof NxProjectDetectedError ? err : (logger22.error(String(err)), new HandledError(err instanceof Error ? err.message : String(err)));
9751
- }
9752
- }
9753
- async detectLanguage() {
9754
- let language = SupportedLanguage.JAVASCRIPT;
9755
- return existsSync6("jsconfig.json") || (!!this.jsPackageManager.getAllDependencies().typescript ? (await this.detectIncompatiblePackageVersions()).length === 0 && (language = SupportedLanguage.TYPESCRIPT) : existsSync6("tsconfig.json") && (language = SupportedLanguage.TYPESCRIPT)), language;
9756
- }
9757
- /** Check installed tooling versions for TypeScript compatibility constraints */
9758
- async detectIncompatiblePackageVersions() {
9759
- let getModulePackageJSONVersion = async (pkg) => (await this.jsPackageManager.getModulePackageJSON(pkg))?.version ?? null, [
9760
- typescriptVersion,
9761
- prettierVersion,
9762
- babelPluginTransformTypescriptVersion,
9763
- typescriptEslintParserVersion,
9764
- eslintPluginStorybookVersion
9765
- ] = await Promise.all([
9766
- getModulePackageJSONVersion("typescript"),
9767
- getModulePackageJSONVersion("prettier"),
9768
- getModulePackageJSONVersion("@babel/plugin-transform-typescript"),
9769
- getModulePackageJSONVersion("@typescript-eslint/parser"),
9770
- getModulePackageJSONVersion("eslint-plugin-storybook")
9771
- ]), satisfies = (version2, range) => version2 ? import_semver7.default.satisfies(version2, range, { includePrerelease: !0 }) : !1, incompatibleReasons = [];
9772
- return typescriptVersion && !satisfies(typescriptVersion, ">=4.9.0") && incompatibleReasons.push(`typescript ${typescriptVersion} is below 4.9.0`), prettierVersion && !import_semver7.default.gte(prettierVersion, "2.8.0") && incompatibleReasons.push(`prettier ${prettierVersion} is below 2.8.0`), babelPluginTransformTypescriptVersion && !satisfies(babelPluginTransformTypescriptVersion, ">=7.20.0") && incompatibleReasons.push(
9773
- `@babel/plugin-transform-typescript ${babelPluginTransformTypescriptVersion} is below 7.20.0`
9774
- ), typescriptEslintParserVersion && !satisfies(typescriptEslintParserVersion, ">=5.44.0") && incompatibleReasons.push(
9775
- `@typescript-eslint/parser ${typescriptEslintParserVersion} is below 5.44.0`
9776
- ), eslintPluginStorybookVersion && !eslintPluginStorybookVersion.startsWith("0.0.0-") && !satisfies(eslintPluginStorybookVersion, ">=0.6.8") && incompatibleReasons.push(
9777
- `eslint-plugin-storybook ${eslintPluginStorybookVersion} is below 0.6.8`
9778
- ), incompatibleReasons;
9779
- }
9780
- eqMajor(versionRange, major) {
9781
- return import_semver7.default.validRange(versionRange) ? import_semver7.default.minVersion(versionRange)?.major === major : !1;
9782
- }
9783
- async detectProjectType(options) {
9784
- try {
9785
- if (this.isNxProject())
9786
- return ProjectType2.NX;
9787
- if (options.html)
9788
- return ProjectType2.HTML;
9789
- let { packageJson } = this.jsPackageManager.primaryPackageJson;
9790
- return this.detectFrameworkPreset(packageJson);
9791
- } catch {
9792
- return ProjectType2.UNDETECTED;
9793
- }
9794
- }
9795
- detectFrameworkPreset(packageJson) {
9796
- let result = [...this.getSupportedTemplates(), this.getUnsupportedTemplate()].find(
9797
- (framework) => this.getProjectType(packageJson, framework) !== null
9798
- );
9799
- return result ? result.preset : ProjectType2.UNDETECTED;
9800
- }
9801
- /** Template that matches unsupported frameworks */
9802
- getUnsupportedTemplate() {
9803
- return {
9804
- preset: ProjectType2.UNSUPPORTED,
9805
- dependencies: {},
9806
- matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
9807
- };
9808
- }
9809
- getProjectType(packageJson, framework) {
9810
- let matcher = {
9811
- dependencies: [!1],
9812
- peerDependencies: [!1],
9813
- files: [!1]
9814
- }, { preset, files, dependencies, peerDependencies, matcherFunction } = framework, dependencySearches = [];
9815
- Array.isArray(dependencies) ? dependencySearches = dependencies.map((name) => [name, void 0]) : typeof dependencies == "object" && (dependencySearches = Object.entries(dependencies)), dependencySearches.length > 0 && (matcher.dependencies = dependencySearches.map(
9816
- ([name, matchFn]) => this.hasDependency(packageJson, name, matchFn)
9817
- ));
9818
- let peerDependencySearches = [];
9819
- return Array.isArray(peerDependencies) ? peerDependencySearches = peerDependencies.map((name) => [name, void 0]) : typeof peerDependencies == "object" && (peerDependencySearches = Object.entries(peerDependencies)), peerDependencySearches.length > 0 && (matcher.peerDependencies = peerDependencySearches.map(
9820
- ([name, matchFn]) => this.hasPeerDependency(packageJson, name, matchFn)
9821
- )), Array.isArray(files) && files.length > 0 && (matcher.files = files.map((name) => existsSync6(name))), matcherFunction(matcher) ? preset : null;
9822
- }
9823
- hasDependency(packageJson, name, matcher) {
9824
- let version2 = packageJson.dependencies?.[name] || packageJson.devDependencies?.[name];
9825
- return version2 && typeof matcher == "function" ? matcher(version2) : !!version2;
9826
- }
9827
- hasPeerDependency(packageJson, name, matcher) {
9828
- let version2 = packageJson.peerDependencies?.[name];
9829
- return version2 && typeof matcher == "function" ? matcher(version2) : !!version2;
9830
- }
9831
- isNxProject() {
9832
- return up2("nx.json", { last: getProjectRoot() });
9833
- }
9834
- };
9835
-
9836
- // src/ai/setup-prompts/index.ts
9837
- import { dedent as dedent18 } from "ts-dedent";
9838
-
9839
- // src/ai/utils/project-overview.ts
9840
- function getProjectOverview(projectInfo) {
9841
- let rows = [
9842
- ["Version", projectInfo.storybookVersion || "unknown"],
9843
- ["Renderer", projectInfo.rendererPackage || "unknown"],
9844
- ["Framework", projectInfo.framework || "unknown"],
9845
- ["Builder", projectInfo.builderPackage || "unknown"],
9846
- ["Config Dir", `\`${projectInfo.configDir}\``],
9847
- ["Language", projectInfo.language === "ts" ? "TypeScript" : "JavaScript"]
9848
- ];
9849
- return projectInfo.packageManager && rows.push(["Package Manager", projectInfo.packageManagerName || "unknown"]), rows.push(["Addons", projectInfo.addons.length > 0 ? projectInfo.addons.join(", ") : "none"]), ["## Project Info", "", "| Property | Value |", "|----------|-------|", rows.map(([key, value]) => `| ${key} | ${value} |`).join(`
9850
- `)].join(
9851
- `
9852
- `
9853
- );
9854
- }
9855
-
9856
- // src/ai/setup-prompts/index.ts
9857
- var DEFAULT_PROMPT_NAME = "optimized-tests", CURRENTLY_USED_PROMPT = {
9858
- [DEFAULT_PROMPT_NAME]: instructions
9859
- }, FORMERLY_USED_PROMPTS = {
9860
- monorepo: async () => (await import("./monorepo-3AUONKTW.js")).instructions,
9861
- "optimized-tests": async () => (await import("./optimized-tests-ZFPEYEWX.js")).instructions,
9862
- "relaxed-limits": async () => (await import("./relaxed-limits-RJIY3AVP.js")).instructions,
9863
- setup: async () => (await import("./setup-YM2FCT2N.js")).instructions,
9864
- "pattern-copy-play": async () => (await import("./pattern-copy-play-4RLZSOFB.js")).instructions,
9865
- "monorepo-optimized-tests-relaxed-limits-no-story-deletion": async () => (await import("./monorepo-optimized-tests-relaxed-limits-no-story-deletion-UJ6Z3SDQ.js")).instructions
9866
- }, PROMPT_NAMES = [
9867
- ...Object.keys(CURRENTLY_USED_PROMPT),
9868
- ...Object.keys(FORMERLY_USED_PROMPTS)
9869
- ], EVAL_SETUP_PROMPT_ENV = "EVAL_SETUP_PROMPT";
9870
- function resolvePromptName() {
9871
- let requested = process.env[EVAL_SETUP_PROMPT_ENV]?.trim();
9872
- return requested && (Object.hasOwn(CURRENTLY_USED_PROMPT, requested) || Object.hasOwn(FORMERLY_USED_PROMPTS, requested)) ? requested : DEFAULT_PROMPT_NAME;
9873
- }
9874
- async function getAiSetupPrompt(projectInfo) {
9875
- let name = resolvePromptName();
9876
- return { content: (CURRENTLY_USED_PROMPT[name] ?? await FORMERLY_USED_PROMPTS[name]())(projectInfo), name };
9877
- }
9878
- async function getAiSetupMarkdownOutput(projectInfo) {
9879
- let { content, name } = await getAiSetupPrompt(projectInfo);
9880
- return {
9881
- markdown: dedent18`
9882
- # Storybook Setup
9883
-
9884
- ${getProjectOverview(projectInfo)}
9885
-
9886
- ${content}
9887
- `,
9888
- prompt: name
9889
- };
9890
- }
9891
-
9892
- // src/ai/index.ts
9893
- async function aiSetup(options) {
9894
- let { configDir: userConfigDir, packageManager, output } = options, projectInfo;
9895
- try {
9896
- let data = await getStorybookData({
9897
- configDir: userConfigDir,
9898
- packageManagerName: packageManager
9899
- });
9900
- if (!data.frameworkPackage || !data.rendererPackage || !data.builderPackage) {
9901
- logger23.error(
9902
- "Could not detect framework, renderer, or builder from your Storybook config. Make sure you are running this command from your project root, or specify --config-dir."
9903
- );
9904
- return;
9905
- }
9906
- let majorVersion = data.versionInstalled ? parseMajorVersion(data.versionInstalled) : void 0, language = await new ProjectTypeService(data.packageManager).detectLanguage() === SupportedLanguage2.TYPESCRIPT ? "ts" : "js", needsUserOnboarding = await cache.get("onboarding-pending", !1);
9907
- projectInfo = {
9908
- storybookVersion: data.versionInstalled,
9909
- majorVersion,
9910
- framework: data.frameworkPackage,
9911
- rendererPackage: data.rendererPackage,
9912
- renderer: data.renderer,
9913
- builderPackage: data.builderPackage,
9914
- addons: data.addons ?? [],
9915
- configDir: data.configDir,
9916
- storiesPaths: data.storiesPaths,
9917
- packageManager: data.packageManager,
9918
- packageManagerName: getPrettyPackageManagerName(data.packageManager.type),
9919
- language,
9920
- hasCsfFactoryPreview: data.hasCsfFactoryPreview,
9921
- needsUserOnboarding
9922
- };
9923
- } catch (err) {
9924
- logger23.error(
9925
- `Failed to read Storybook configuration: ${err instanceof Error ? err.message : String(err)}`
9926
- ), logger23.log(
9927
- "Make sure you are running this command from your project root, or specify --config-dir."
9928
- );
9929
- return;
9930
- }
9931
- if (projectInfo.rendererPackage !== "@storybook/react" || projectInfo.builderPackage !== "@storybook/builder-vite") {
9932
- logger23.log(
9933
- "AI-assisted setup is currently only available for projects using the React renderer with Vite builder. Detected renderer: " + projectInfo.rendererPackage + ", builder: " + projectInfo.builderPackage
9934
- );
9935
- return;
9936
- }
9937
- let result = await getAiSetupMarkdownOutput(projectInfo), markdownOutput = result.markdown;
9938
- if (await cache.set("ai-setup-ran", {
9939
- timestamp: Date.now(),
9940
- runId: options.runId,
9941
- configDir: resolve4(projectInfo.configDir)
9942
- }).catch(() => {
9943
- }), await telemetry("ai-setup", {
9944
- cliOptions: {
9945
- output: output ? "file" : void 0,
9946
- configDir: projectInfo.configDir,
9947
- packageManager: projectInfo.packageManager.type,
9948
- prompt: result.prompt
9949
- },
9950
- project: {
9951
- framework: projectInfo.framework,
9952
- renderer: projectInfo.rendererPackage,
9953
- builder: projectInfo.builderPackage,
9954
- language: projectInfo.language
9955
- },
9956
- runId: options.runId
9957
- }), output) {
9958
- let outputPath = resolve4(output);
9959
- await writeFile10(outputPath, markdownOutput, "utf-8"), logger23.log(`Prompt written to ${outputPath}`);
9960
- } else
9961
- process.stdout.write(`${markdownOutput}
9962
- `);
9963
- }
9964
- function parseMajorVersion(version2) {
9965
- let match = version2.match(/^(\d+)/);
9966
- return match ? parseInt(match[1], 10) : void 0;
9967
- }
9968
-
9969
9591
  // src/upgrade.ts
9970
- var import_cross_spawn3 = __toESM(require_cross_spawn(), 1), import_picocolors17 = __toESM(require_picocolors(), 1), import_semver8 = __toESM(require_semver(), 1);
9592
+ var import_cross_spawn3 = __toESM(require_cross_spawn(), 1), import_picocolors17 = __toESM(require_picocolors(), 1), import_semver7 = __toESM(require_semver(), 1);
9971
9593
  import { PackageManagerName as PackageManagerName2 } from "storybook/internal/common";
9972
9594
  import {
9973
- HandledError as HandledError2,
9595
+ HandledError,
9974
9596
  JsPackageManagerFactory as JsPackageManagerFactory2,
9975
9597
  isCI as isCI2,
9976
9598
  isCorePackage as isCorePackage2
@@ -9979,7 +9601,7 @@ import {
9979
9601
  CLI_COLORS as CLI_COLORS4,
9980
9602
  createHyperlink,
9981
9603
  logTracker as logTracker3,
9982
- logger as logger25,
9604
+ logger as logger23,
9983
9605
  prompt as prompt7
9984
9606
  } from "storybook/internal/node-logger";
9985
9607
  import {
@@ -9987,15 +9609,15 @@ import {
9987
9609
  UpgradeStorybookToLowerVersionError,
9988
9610
  UpgradeStorybookUnknownCurrentVersionError
9989
9611
  } from "storybook/internal/server-errors";
9990
- import { telemetry as telemetry2 } from "storybook/internal/telemetry";
9991
- import { dedent as dedent19 } from "ts-dedent";
9612
+ import { telemetry } from "storybook/internal/telemetry";
9613
+ import { dedent as dedent17 } from "ts-dedent";
9992
9614
 
9993
9615
  // src/automigrate/multi-project.ts
9994
- import { CLI_COLORS as CLI_COLORS3, logger as logger24, prompt as prompt6 } from "storybook/internal/node-logger";
9616
+ import { CLI_COLORS as CLI_COLORS3, logger as logger22, prompt as prompt6 } from "storybook/internal/node-logger";
9995
9617
  import { ErrorCollector, sanitizeError } from "storybook/internal/telemetry";
9996
9618
  async function collectAutomigrationsAcrossProjects(options) {
9997
9619
  let { fixes, projects, taskLog } = options, automigrationMap = /* @__PURE__ */ new Map();
9998
- logger24.debug(
9620
+ logger22.debug(
9999
9621
  `Starting automigration collection across ${projects.length} projects and ${fixes.length} fixes...`
10000
9622
  );
10001
9623
  function collectResult(fix, project, status, result) {
@@ -10017,10 +9639,10 @@ async function collectAutomigrationsAcrossProjects(options) {
10017
9639
  }
10018
9640
  for (let project of projects) {
10019
9641
  let projectName = shortenPath(project.configDir);
10020
- taskLog.message(`Checking automigrations for ${projectName}...`), logger24.debug(`Processing project: ${projectName}`);
9642
+ taskLog.message(`Checking automigrations for ${projectName}...`), logger22.debug(`Processing project: ${projectName}`);
10021
9643
  for (let fix of fixes)
10022
9644
  try {
10023
- logger24.debug(`Checking fix ${fix.id} for project ${projectName}...`);
9645
+ logger22.debug(`Checking fix ${fix.id} for project ${projectName}...`);
10024
9646
  let checkOptions = {
10025
9647
  packageManager: project.packageManager,
10026
9648
  configDir: project.configDir,
@@ -10033,9 +9655,9 @@ async function collectAutomigrationsAcrossProjects(options) {
10033
9655
  }, result = await fix.check(checkOptions);
10034
9656
  result !== null ? collectResult(fix, project, "check_succeeded", result) : collectResult(fix, project, "not_applicable");
10035
9657
  } catch (error) {
10036
- collectResult(fix, project, "check_failed"), logger24.debug(
9658
+ collectResult(fix, project, "check_failed"), logger22.debug(
10037
9659
  `Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`
10038
- ), logger24.debug(`${error instanceof Error ? error.stack : String(error)}`), ErrorCollector.addError(error);
9660
+ ), logger22.debug(`${error instanceof Error ? error.stack : String(error)}`), ErrorCollector.addError(error);
10039
9661
  }
10040
9662
  }
10041
9663
  let allAutomigrations = Array.from(automigrationMap.values()), applicableAutomigrations = allAutomigrations.filter(
@@ -10049,9 +9671,9 @@ async function collectAutomigrationsAcrossProjects(options) {
10049
9671
  );
10050
9672
  return taskLog.message(`
10051
9673
  Automigrations detected:`), successAutomigrations.forEach((fixId) => {
10052
- taskLog.message(`${CLI_COLORS3.success(`${logger24.SYMBOLS.success} ${fixId}`)}`);
9674
+ taskLog.message(`${CLI_COLORS3.success(`${logger22.SYMBOLS.success} ${fixId}`)}`);
10053
9675
  }), failedAutomigrations.forEach((fixId) => {
10054
- taskLog.message(`${CLI_COLORS3.error(`${logger24.SYMBOLS.error} ${fixId}`)}`);
9676
+ taskLog.message(`${CLI_COLORS3.error(`${logger22.SYMBOLS.error} ${fixId}`)}`);
10055
9677
  }), failedAutomigrations.length > 0 ? taskLog.error(
10056
9678
  `${failedAutomigrations.length} automigration ${failedAutomigrations.length > 1 ? "checks" : "check"} failed`
10057
9679
  ) : taskLog.success(
@@ -10069,12 +9691,12 @@ async function promptForAutomigrations(automigrations, options) {
10069
9691
  if (automigrations.length === 0)
10070
9692
  return [];
10071
9693
  if (options.dryRun)
10072
- return logger24.log("Detected automigrations (dry run - no changes will be made):"), automigrations.forEach(({ fix, reports: list }) => {
10073
- logger24.log(` - ${fix.id} (${formatProjectDirs(list)})`);
9694
+ return logger22.log("Detected automigrations (dry run - no changes will be made):"), automigrations.forEach(({ fix, reports: list }) => {
9695
+ logger22.log(` - ${fix.id} (${formatProjectDirs(list)})`);
10074
9696
  }), [];
10075
9697
  if (options.yes)
10076
- return logger24.log("Running all detected automigrations:"), automigrations.forEach(({ fix, reports: list }) => {
10077
- logger24.log(` - ${fix.id} (${formatProjectDirs(list)})`);
9698
+ return logger22.log("Running all detected automigrations:"), automigrations.forEach(({ fix, reports: list }) => {
9699
+ logger22.log(` - ${fix.id} (${formatProjectDirs(list)})`);
10078
9700
  }), automigrations;
10079
9701
  let choices = automigrations.map((am) => {
10080
9702
  let hint = [];
@@ -10123,13 +9745,13 @@ async function runAutomigrationsForProjects(selectedAutomigrations, options) {
10123
9745
  title: `${countPrefix}Running automigrations for ${projectName}`
10124
9746
  }) : {
10125
9747
  message: (message) => {
10126
- logger24.debug(`${message}`);
9748
+ logger22.debug(`${message}`);
10127
9749
  },
10128
9750
  error: (message) => {
10129
- logger24.debug(`${message}`);
9751
+ logger22.debug(`${message}`);
10130
9752
  },
10131
9753
  success: (message) => {
10132
- logger24.debug(`${message}`);
9754
+ logger22.debug(`${message}`);
10133
9755
  }
10134
9756
  }, fixResults = {}, fixFailures = {};
10135
9757
  for (let automigration of projectAutomigration) {
@@ -10163,11 +9785,11 @@ async function runAutomigrationsForProjects(selectedAutomigrations, options) {
10163
9785
  storiesPaths: project2.storiesPaths,
10164
9786
  yes
10165
9787
  };
10166
- await fix.run(runOptions), fixResults[fix.id] = "succeeded" /* SUCCEEDED */, taskLog.message(CLI_COLORS3.success(`${logger24.SYMBOLS.success} ${fix.id}`));
9788
+ await fix.run(runOptions), fixResults[fix.id] = "succeeded" /* SUCCEEDED */, taskLog.message(CLI_COLORS3.success(`${logger22.SYMBOLS.success} ${fix.id}`));
10167
9789
  }
10168
9790
  } catch (error) {
10169
9791
  let errorMessage = (error instanceof Error ? error.stack : String(error)) ?? "Unknown error";
10170
- fixResults[fix.id] = "failed" /* FAILED */, fixFailures[fix.id] = sanitizeError(error), taskLog.message(CLI_COLORS3.error(`${logger24.SYMBOLS.error} ${automigration.fix.id}`)), logger24.debug(errorMessage), ErrorCollector.addError(error);
9792
+ fixResults[fix.id] = "failed" /* FAILED */, fixFailures[fix.id] = sanitizeError(error), taskLog.message(CLI_COLORS3.error(`${logger22.SYMBOLS.error} ${automigration.fix.id}`)), logger22.debug(errorMessage), ErrorCollector.addError(error);
10171
9793
  }
10172
9794
  }
10173
9795
  let automigrationsWithErrors = Object.values(fixResults).filter(
@@ -10277,28 +9899,28 @@ function logUpgradeResults(projectResults, detectedAutomigrations, doctorResults
10277
9899
  doctorResults
10278
9900
  );
10279
9901
  if (failedProjects.length > 0) {
10280
- if (logTracker3.enableLogWriting(), logger25.step(
9902
+ if (logTracker3.enableLogWriting(), logger23.step(
10281
9903
  "The upgrade is complete, but some projects failed to upgrade or migrate completely. Please see the debug logs for more details."
10282
9904
  ), successfulProjects.length > 0) {
10283
9905
  let successfulProjectsList = successfulProjects.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
10284
9906
  `);
10285
- logger25.log(`${CLI_COLORS4.success("Successfully upgraded:")}
9907
+ logger23.log(`${CLI_COLORS4.success("Successfully upgraded:")}
10286
9908
  ${successfulProjectsList}`);
10287
9909
  }
10288
9910
  let failedProjectsList = failedProjects.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
10289
9911
  `);
10290
- if (logger25.log(
9912
+ if (logger23.log(
10291
9913
  `${CLI_COLORS4.error("Failed to upgrade:")}
10292
9914
  Some automigrations failed, please check the logs in the log file for more details.
10293
9915
  ${failedProjectsList}`
10294
9916
  ), projectsWithNoFixes.length > 0) {
10295
9917
  let projectList = projectsWithNoFixes.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
10296
9918
  `);
10297
- logger25.log(`${CLI_COLORS4.info("No applicable migrations:")}
9919
+ logger23.log(`${CLI_COLORS4.info("No applicable migrations:")}
10298
9920
  ${projectList}`);
10299
9921
  }
10300
9922
  } else
10301
- Object.values(doctorResults).every((result) => result.status === "healthy") ? logger25.step(`${CLI_COLORS4.success("Your project(s) have been upgraded successfully! \u{1F389}")}`) : logger25.step(
9923
+ Object.values(doctorResults).every((result) => result.status === "healthy") ? logger23.step(`${CLI_COLORS4.success("Your project(s) have been upgraded successfully! \u{1F389}")}`) : logger23.step(
10302
9924
  `${import_picocolors17.default.yellow("Your project(s) have been upgraded successfully, but some issues were found which need your attention, please check Storybook doctor logs above.")}`
10303
9925
  );
10304
9926
  let automigrationLinks = detectedAutomigrations.filter(
@@ -10312,9 +9934,9 @@ ${projectList}`);
10312
9934
  ...automigrationLinks
10313
9935
  ].join(`
10314
9936
  `);
10315
- logger25.log(automigrationLinksMessage);
9937
+ logger23.log(automigrationLinksMessage);
10316
9938
  }
10317
- logger25.log(
9939
+ logger23.log(
10318
9940
  `For a full list of changes, please check our migration guide: ${CLI_COLORS4.cta("https://storybook.js.org/docs/releases/migration-guide?ref=upgrade")}`
10319
9941
  );
10320
9942
  }
@@ -10335,7 +9957,7 @@ async function sendMultiUpgradeTelemetry(options) {
10335
9957
  (result) => result.status !== "healthy"
10336
9958
  ).length;
10337
9959
  try {
10338
- await telemetry2("multi-upgrade", {
9960
+ await telemetry("multi-upgrade", {
10339
9961
  totalDetectedProjects: allProjects.length,
10340
9962
  totalSelectedProjects: selectedProjects.length,
10341
9963
  projectsWithSuccessfulAutomigrations: successfulProjects.length,
@@ -10346,7 +9968,7 @@ async function sendMultiUpgradeTelemetry(options) {
10346
9968
  hasUserInterrupted
10347
9969
  });
10348
9970
  } catch (error) {
10349
- logger25.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`);
9971
+ logger23.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`);
10350
9972
  }
10351
9973
  }
10352
9974
  async function upgrade(options) {
@@ -10354,13 +9976,13 @@ async function upgrade(options) {
10354
9976
  if (projectsResult === void 0 || projectsResult.selectedProjects.length === 0)
10355
9977
  return;
10356
9978
  let { allProjects, selectedProjects: storybookProjects } = projectsResult;
10357
- storybookProjects.length > 1 ? logger25.info(`Upgrading the following projects:
9979
+ storybookProjects.length > 1 ? logger23.info(`Upgrading the following projects:
10358
9980
  ${storybookProjects.map((p) => `${import_picocolors17.default.cyan(shortenPath(p.configDir))}: ${import_picocolors17.default.bold(p.beforeVersion)} -> ${import_picocolors17.default.bold(p.currentCLIVersion)}`).join(`
10359
- `)}`) : logger25.info(
9981
+ `)}`) : logger23.info(
10360
9982
  `Upgrading from ${import_picocolors17.default.bold(storybookProjects[0].beforeVersion)} to ${import_picocolors17.default.bold(storybookProjects[0].currentCLIVersion)}`
10361
9983
  );
10362
9984
  let automigrationResults = {}, doctorResults = {}, handleInterruption = async () => {
10363
- throw logger25.log(`
9985
+ throw logger23.log(`
10364
9986
 
10365
9987
  Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgradeTelemetry({
10366
9988
  allProjects,
@@ -10368,16 +9990,16 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10368
9990
  projectResults: automigrationResults,
10369
9991
  doctorResults,
10370
9992
  hasUserInterrupted: !0
10371
- }), new HandledError2("Upgrade cancelled by user");
9993
+ }), new HandledError("Upgrade cancelled by user");
10372
9994
  };
10373
9995
  process.on("SIGINT", handleInterruption), process.on("SIGTERM", handleInterruption);
10374
9996
  try {
10375
9997
  if (processAutoblockerResults(storybookProjects, (message) => {
10376
- logger25.error(dedent19`Blockers detected\n\n${message}`);
9998
+ logger23.error(dedent17`Blockers detected\n\n${message}`);
10377
9999
  }))
10378
- throw new HandledError2("Blockers detected");
10000
+ throw new HandledError("Blockers detected");
10379
10001
  if (storybookProjects.some((project) => {
10380
- if (!project.isCanary && (0, import_semver8.lt)(project.currentCLIVersion, project.beforeVersion))
10002
+ if (!project.isCanary && (0, import_semver7.lt)(project.currentCLIVersion, project.beforeVersion))
10381
10003
  throw new UpgradeStorybookToLowerVersionError({
10382
10004
  beforeVersion: project.beforeVersion,
10383
10005
  currentVersion: project.currentCLIVersion
@@ -10395,7 +10017,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10395
10017
  } catch (error) {
10396
10018
  if (error instanceof MinimumReleaseAgeHandledError)
10397
10019
  throw error;
10398
- logger25.debug(
10020
+ logger23.debug(
10399
10021
  `Skipping minimum-release-age precheck for ${project.configDir} after an unexpected failure: ${error}`
10400
10022
  );
10401
10023
  }
@@ -10406,7 +10028,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10406
10028
  try {
10407
10029
  let loggedPaths = [];
10408
10030
  for (let project of storybookProjects) {
10409
- logger25.debug(`Updating dependencies in ${shortenPath(project.configDir)}...`);
10031
+ logger23.debug(`Updating dependencies in ${shortenPath(project.configDir)}...`);
10410
10032
  let newPaths = project.packageManager.packageJsonPaths.map(shortenPath).filter((path4) => !loggedPaths.includes(path4));
10411
10033
  newPaths.length > 0 && (task.message(newPaths.join(`
10412
10034
  `)), loggedPaths.push(...newPaths)), await upgradeStorybookDependencies({
@@ -10424,17 +10046,17 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10424
10046
  }
10425
10047
  }
10426
10048
  let automigrationResults2 = {}, detectedAutomigrations = [];
10427
- options.skipAutomigrations ? logger25.log("Skipping automigrations (--skip-automigrations).") : { automigrationResults: automigrationResults2, detectedAutomigrations } = await runAutomigrations(
10049
+ options.skipAutomigrations ? logger23.log("Skipping automigrations (--skip-automigrations).") : { automigrationResults: automigrationResults2, detectedAutomigrations } = await runAutomigrations(
10428
10050
  storybookProjects,
10429
10051
  options
10430
10052
  );
10431
10053
  let rootPackageManager = storybookProjects.length > 1 ? JsPackageManagerFactory2.getPackageManager({ force: options.packageManager }) : storybookProjects[0].packageManager;
10432
- rootPackageManager.type === "npm" ? await rootPackageManager.installDependencies({ force: !0 }) : await rootPackageManager.installDependencies(), rootPackageManager.type !== PackageManagerName2.YARN1 && rootPackageManager.isStorybookInMonorepo() && (logger25.warn(
10054
+ rootPackageManager.type === "npm" ? await rootPackageManager.installDependencies({ force: !0 }) : await rootPackageManager.installDependencies(), rootPackageManager.type !== PackageManagerName2.YARN1 && rootPackageManager.isStorybookInMonorepo() && (logger23.warn(
10433
10055
  "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."
10434
10056
  ), options.yes || await prompt7.confirm({
10435
10057
  message: `Execute ${rootPackageManager.getRunCommand("dedupe")}?`,
10436
10058
  initialValue: !0
10437
- }) ? rootPackageManager.type === "npm" ? await rootPackageManager.dedupeDependencies({ force: !0 }) : await rootPackageManager.dedupeDependencies() : logger25.log(
10059
+ }) ? rootPackageManager.type === "npm" ? await rootPackageManager.dedupeDependencies({ force: !0 }) : await rootPackageManager.dedupeDependencies() : logger23.log(
10438
10060
  `If you find any issues running Storybook, you can run ${rootPackageManager.getRunCommand("dedupe")} manually to deduplicate your dependencies and try again.`
10439
10061
  ));
10440
10062
  let doctorProjects = storybookProjects.map((project) => ({
@@ -10443,7 +10065,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10443
10065
  storybookVersion: project.currentCLIVersion,
10444
10066
  mainConfig: project.mainConfig
10445
10067
  }));
10446
- logger25.step("Checking the health of your project(s).."), doctorResults = await runMultiProjectDoctor(doctorProjects), displayDoctorResults(doctorResults) && logTracker3.enableLogWriting(), logUpgradeResults(automigrationResults2, detectedAutomigrations, doctorResults);
10068
+ logger23.step("Checking the health of your project(s).."), doctorResults = await runMultiProjectDoctor(doctorProjects), displayDoctorResults(doctorResults) && logTracker3.enableLogWriting(), logUpgradeResults(automigrationResults2, detectedAutomigrations, doctorResults);
10447
10069
  for (let project of storybookProjects) {
10448
10070
  let resultData = automigrationResults2[project.configDir] || {
10449
10071
  automigrationStatuses: {},
@@ -10453,7 +10075,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10453
10075
  status === "has_issues" && doctorFailureCount++, status === "check_error" && doctorErrorCount++;
10454
10076
  });
10455
10077
  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;
10456
- await telemetry2("upgrade", {
10078
+ await telemetry("upgrade", {
10457
10079
  beforeVersion: project.beforeVersion,
10458
10080
  afterVersion: project.currentCLIVersion,
10459
10081
  automigrationResults: resultData.automigrationStatuses,
@@ -10479,13 +10101,13 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
10479
10101
  // src/bin/run.ts
10480
10102
  addToGlobalContext("cliVersion", versions5.storybook);
10481
10103
  var handleCommandFailure = (logFilePath) => async (error) => {
10482
- error instanceof HandledError3 || logger26.error(String(error));
10104
+ error instanceof HandledError2 || logger24.error(String(error));
10483
10105
  try {
10484
10106
  let logFile = await logTracker4.writeToFile(logFilePath);
10485
- logger26.log(`Debug logs are written to: ${logFile}`);
10107
+ logger24.log(`Debug logs are written to: ${logFile}`);
10486
10108
  } catch {
10487
10109
  }
10488
- logger26.outro(""), process.exit(1);
10110
+ logger24.outro(""), process.exit(1);
10489
10111
  }, command = (name) => program.command(name).option(
10490
10112
  "--disable-telemetry",
10491
10113
  "Disable sending telemetry data",
@@ -10495,21 +10117,21 @@ var handleCommandFailure = (logFilePath) => async (error) => {
10495
10117
  "Write all debug logs to the specified file at the end of the run. Defaults to debug-storybook.log when [path] is not provided"
10496
10118
  ).option("--loglevel <trace | debug | info | warn | error | silent>", "Define log level", "info").hook("preAction", async (self2) => {
10497
10119
  let options = self2.opts();
10498
- options.debug && logger26.setLogLevel("debug"), options.loglevel && logger26.setLogLevel(options.loglevel), options.logfile && logTracker4.enableLogWriting();
10120
+ options.debug && logger24.setLogLevel("debug"), options.loglevel && logger24.setLogLevel(options.loglevel), options.logfile && logTracker4.enableLogWriting();
10499
10121
  try {
10500
10122
  await globalSettings();
10501
10123
  } catch (e) {
10502
- logger26.error(`Error loading global settings:
10124
+ logger24.error(`Error loading global settings:
10503
10125
  ` + String(e));
10504
10126
  }
10505
10127
  }).hook("postAction", async (command2) => {
10506
10128
  if (logTracker4.shouldWriteLogsToFile) {
10507
10129
  try {
10508
10130
  let logFile = await logTracker4.writeToFile(command2.getOptionValue("logfile"));
10509
- logger26.log(`Debug logs are written to: ${logFile}`);
10131
+ logger24.log(`Debug logs are written to: ${logFile}`);
10510
10132
  } catch {
10511
10133
  }
10512
- logger26.outro(CLI_COLORS5.success("Done!"));
10134
+ logger24.outro(CLI_COLORS5.success("Done!"));
10513
10135
  }
10514
10136
  });
10515
10137
  command("init").description("Initialize Storybook into your project").option("-f --force", "Force add Storybook").option("-s --skip-install", "Skip installing deps").addOption(
@@ -10526,7 +10148,7 @@ command("add <addon>").description("Add an addon to your Storybook").addOption(
10526
10148
  )
10527
10149
  ).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) => {
10528
10150
  withTelemetry("add", { cliOptions: options }, async () => {
10529
- logger26.intro(`Setting up your project for ${addonName}`), await add(addonName, options), await telemetry3("add", { addon: addonName, source: "cli" }), logger26.outro("Done!");
10151
+ logger24.intro(`Setting up your project for ${addonName}`), await add(addonName, options), await telemetry2("add", { addon: addonName, source: "cli" }), logger24.outro("Done!");
10530
10152
  }).catch(handleCommandFailure);
10531
10153
  });
10532
10154
  command("remove <addon>").description("Remove an addon from your Storybook").addOption(
@@ -10535,7 +10157,7 @@ command("remove <addon>").description("Remove an addon from your Storybook").add
10535
10157
  )
10536
10158
  ).option("-c, --config-dir <dir-name>", "Directory where to load Storybook configurations from").option("-s --skip-install", "Skip installing deps").action(
10537
10159
  (addonName, options) => withTelemetry("remove", { cliOptions: options }, async () => {
10538
- logger26.intro(`Removing ${addonName} from your Storybook`);
10160
+ logger24.intro(`Removing ${addonName} from your Storybook`);
10539
10161
  let packageManager = JsPackageManagerFactory3.getPackageManager({
10540
10162
  configDir: options.configDir,
10541
10163
  force: options.packageManager
@@ -10544,7 +10166,7 @@ command("remove <addon>").description("Remove an addon from your Storybook").add
10544
10166
  configDir: options.configDir,
10545
10167
  packageManager,
10546
10168
  skipInstall: options.skipInstall
10547
- }), await telemetry3("remove", { addon: addonName, source: "cli" }), logger26.outro("Done!");
10169
+ }), await telemetry2("remove", { addon: addonName, source: "cli" }), logger24.outro("Done!");
10548
10170
  }).catch(handleCommandFailure(options.logfile))
10549
10171
  );
10550
10172
  command("upgrade").description(`Upgrade your Storybook packages to v${versions5.storybook}`).addOption(
@@ -10562,12 +10184,12 @@ command("upgrade").description(`Upgrade your Storybook packages to v${versions5.
10562
10184
  "upgrade",
10563
10185
  { cliOptions: { ...options, configDir: options.configDir?.[0] } },
10564
10186
  async () => {
10565
- logger26.intro(`Storybook upgrade - v${versions5.storybook}`), await upgrade(options), logger26.outro("Storybook upgrade completed!");
10187
+ logger24.intro(`Storybook upgrade - v${versions5.storybook}`), await upgrade(options), logger24.outro("Storybook upgrade completed!");
10566
10188
  }
10567
10189
  ).catch(handleCommandFailure(options.logfile));
10568
10190
  });
10569
10191
  command("info").description("Prints debugging information about the local environment").action(async () => {
10570
- logger26.log(import_picocolors18.default.bold(`
10192
+ logger24.log(import_picocolors18.default.bold(`
10571
10193
  Storybook Environment Info:`));
10572
10194
  let activePackageManager = JsPackageManagerFactory3.getPackageManager().type.replace(/\d/, ""), output = await import_envinfo.default.run({
10573
10195
  System: ["OS", "CPU", "Shell"],
@@ -10576,7 +10198,7 @@ Storybook Environment Info:`));
10576
10198
  npmPackages: "{@storybook/*,*storybook*,sb,chromatic}",
10577
10199
  npmGlobalPackages: "{@storybook/*,*storybook*,sb,chromatic}"
10578
10200
  }), activePackageManagerLine = output.match(new RegExp(`${activePackageManager}:.*`, "i"));
10579
- logger26.log(
10201
+ logger24.log(
10580
10202
  output.replace(
10581
10203
  activePackageManagerLine,
10582
10204
  import_picocolors18.default.bold(`${activePackageManagerLine} <----- active`)
@@ -10591,12 +10213,12 @@ command("migrate [migration]").description("Run a Storybook codemod migration on
10591
10213
  'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"'
10592
10214
  ).action((migration, options) => {
10593
10215
  withTelemetry("migrate", { cliOptions: options }, async () => {
10594
- logger26.intro(`Running ${migration} migration`), await migrate(migration, options), logger26.outro("Migration completed");
10216
+ logger24.intro(`Running ${migration} migration`), await migrate(migration, options), logger24.outro("Migration completed");
10595
10217
  }).catch(handleCommandFailure(options.logfile));
10596
10218
  });
10597
10219
  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) => {
10598
- logger26.intro("Creating a Storybook sandbox..."), sandbox({ filterValue, ...options }).catch(handleCommandFailure).finally(() => {
10599
- logger26.outro("Done!");
10220
+ logger24.intro("Creating a Storybook sandbox..."), sandbox({ filterValue, ...options }).catch(handleCommandFailure).finally(() => {
10221
+ logger24.outro("Done!");
10600
10222
  });
10601
10223
  });
10602
10224
  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(
@@ -10611,7 +10233,7 @@ command("automigrate [fixId]").description("Check storybook for incompatibilitie
10611
10233
  "The renderer package for the framework Storybook is using."
10612
10234
  ).option("--skip-doctor", "Skip doctor check").option("--glob <pattern>", "Glob pattern for story files (for csf-factories codemod)").action(async (fixId, options) => {
10613
10235
  withTelemetry("automigrate", { cliOptions: options }, async () => {
10614
- logger26.intro(fixId ? `Running ${fixId} automigration` : "Running automigrations"), await doAutomigrate({ fixId, ...options }), logger26.outro("Done");
10236
+ logger24.intro(fixId ? `Running ${fixId} automigration` : "Running automigrations"), await doAutomigrate({ fixId, ...options }), logger24.outro("Done");
10615
10237
  }).catch(handleCommandFailure(options.logfile));
10616
10238
  });
10617
10239
  command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").addOption(
@@ -10620,30 +10242,13 @@ command("doctor").description("Check Storybook for known problems and provide su
10620
10242
  )
10621
10243
  ).option("-c, --config-dir <dir-name>", "Directory of Storybook configuration").action(async (options) => {
10622
10244
  withTelemetry("doctor", { cliOptions: options }, async () => {
10623
- logger26.intro("Doctoring Storybook"), await doctor(options), logger26.outro("Done");
10245
+ logger24.intro("Doctoring Storybook"), await doctor(options), logger24.outro("Done");
10624
10246
  }).catch(handleCommandFailure(options.logfile));
10625
10247
  });
10626
- var aiCommand = command("ai").description("AI agent helpers for Storybook").option(
10627
- "-o, --output <path>",
10628
- "Write the prompt output to a file instead of printing it to stdout"
10629
- );
10630
- aiCommand.command("setup").description("Generate setup instructions to write stories for real components").addOption(
10631
- new Option("--package-manager <type>", "Force package manager for installing deps").choices(
10632
- Object.values(PackageManagerName3)
10633
- )
10634
- ).option("-c, --config-dir <dir-name>", "Directory of Storybook configuration").action(async (options, cmd) => {
10635
- let parentOptions = cmd.parent?.opts() ?? {}, runId = Math.random().toString(36), mergedOptions = { ...parentOptions, ...options, runId };
10636
- await withTelemetry("ai-setup", { cliOptions: mergedOptions }, async () => {
10637
- await aiSetup(mergedOptions);
10638
- }).catch(handleCommandFailure(mergedOptions.logfile));
10639
- });
10640
- aiCommand.action(() => {
10641
- aiCommand.outputHelp();
10642
- });
10643
10248
  program.on("command:*", ([invalidCmd]) => {
10644
10249
  let errorMessage = ` Invalid command: ${import_picocolors18.default.bold(invalidCmd)}.
10645
10250
  See --help for a list of available commands.`, suggestion = program.commands.map((cmd) => cmd.name()).find((cmd) => leven(cmd, invalidCmd) < 3);
10646
10251
  suggestion && (errorMessage += `
10647
- Did you mean ${import_picocolors18.default.yellow(suggestion)}?`), logger26.error(errorMessage), process.exit(1);
10252
+ Did you mean ${import_picocolors18.default.yellow(suggestion)}?`), logger24.error(errorMessage), process.exit(1);
10648
10253
  });
10649
10254
  program.usage("<command> [options]").version(String(version)).parse(process.argv);