@storybook/cli 10.5.0-alpha.5 → 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.
- package/dist/_node-chunks/{block-dependencies-versions-7PHMHVXX.js → block-dependencies-versions-7OYN4OJ6.js} +11 -11
- package/dist/_node-chunks/{block-experimental-addon-test-5ZWFTYFW.js → block-experimental-addon-test-2YUVRX5Y.js} +9 -9
- package/dist/_node-chunks/{block-major-version-T3HRJYBN.js → block-major-version-SNHXUXIT.js} +9 -9
- package/dist/_node-chunks/{block-node-version-B3ZGAGEP.js → block-node-version-NPHJGOFN.js} +9 -9
- package/dist/_node-chunks/{block-webpack5-frameworks-RRJ6VM3Z.js → block-webpack5-frameworks-GZA34OZU.js} +11 -11
- package/dist/_node-chunks/{chunk-5XVO34EZ.js → chunk-3OLDFVDH.js} +8 -8
- package/dist/_node-chunks/{chunk-BI5HNNLJ.js → chunk-46TO6QSJ.js} +32 -109
- package/dist/_node-chunks/{chunk-QRVM2GVO.js → chunk-7UM5AIIV.js} +11 -7
- package/dist/_node-chunks/{chunk-6SN7AHUJ.js → chunk-QXN4FHHX.js} +10 -10
- package/dist/_node-chunks/chunk-RSLATG3U.js +11 -0
- package/dist/_node-chunks/{globby-AQ4UZZDP.js → globby-SCRW7ORA.js} +8 -8
- package/dist/_node-chunks/{p-limit-GYUOENIU.js → p-limit-EE6XMDEK.js} +7 -7
- package/dist/_node-chunks/{run-JKQ2KCEN.js → run-XZO7FX4L.js} +117 -511
- package/dist/bin/index.js +7 -7
- package/package.json +7 -5
- package/dist/_node-chunks/chunk-54YXNYHO.js +0 -638
- package/dist/_node-chunks/chunk-C5TVJBMC.js +0 -23
- package/dist/_node-chunks/chunk-KBY5G3BQ.js +0 -115
- package/dist/_node-chunks/chunk-TBHPG2HE.js +0 -20
- package/dist/_node-chunks/chunk-WEYGGWE4.js +0 -11
- package/dist/_node-chunks/monorepo-VOS454YG.js +0 -119
- package/dist/_node-chunks/monorepo-optimized-tests-relaxed-limits-no-story-deletion-G565RUXG.js +0 -119
- package/dist/_node-chunks/optimized-tests-RCEVPQBB.js +0 -20
- package/dist/_node-chunks/pattern-copy-play-YCEXHQK5.js +0 -810
- package/dist/_node-chunks/relaxed-limits-YPUP4H5P.js +0 -115
- package/dist/_node-chunks/setup-VMKKTPA5.js +0 -281
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
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 =
|
|
6
|
-
var __dirname =
|
|
7
|
-
var require =
|
|
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-KBY5G3BQ.js";
|
|
15
|
-
import "./chunk-54YXNYHO.js";
|
|
16
|
-
import "./chunk-C5TVJBMC.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-
|
|
28
|
+
} from "./chunk-46TO6QSJ.js";
|
|
35
29
|
import {
|
|
36
30
|
slash
|
|
37
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-QXN4FHHX.js";
|
|
38
32
|
import {
|
|
39
33
|
require_semver
|
|
40
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-3OLDFVDH.js";
|
|
41
35
|
import {
|
|
42
36
|
__commonJS,
|
|
43
37
|
__require,
|
|
44
38
|
__toESM
|
|
45
|
-
} from "./chunk-
|
|
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(
|
|
4420
|
+
return new Promise(function(resolve3, reject) {
|
|
4427
4421
|
isexe(path4, options || {}, function(er, is) {
|
|
4428
|
-
er ? reject(er) :
|
|
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((
|
|
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 ?
|
|
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
|
-
|
|
4470
|
-
}), subStep = (p, i, ii) => new Promise((
|
|
4463
|
+
resolve3(subStep(p, i, 0));
|
|
4464
|
+
}), subStep = (p, i, ii) => new Promise((resolve3, reject) => {
|
|
4471
4465
|
if (ii === pathExt.length)
|
|
4472
|
-
return
|
|
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
|
|
4480
|
-
return
|
|
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
|
|
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
|
|
4728
|
-
import { addToGlobalContext, telemetry as
|
|
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.
|
|
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,
|
|
5003
|
+
let postinstall = moduledLoaded?.default || moduledLoaded?.postinstall || moduledLoaded, logger25 = options.logger;
|
|
5010
5004
|
if (!postinstall || typeof postinstall != "function") {
|
|
5011
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
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 && (
|
|
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
|
-
|
|
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 &&
|
|
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
|
-
|
|
5058
|
+
logger25.log(`Installing ${addonWithVersion}`), await packageManager.addDependencies(
|
|
5065
5059
|
{ type: "devDependencies", writeOutputToFile: !1, skipInstall },
|
|
5066
5060
|
[addonWithVersion]
|
|
5067
|
-
), shouldAddToMain && (
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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((
|
|
7245
|
+
return new Promise((resolve3) => {
|
|
7252
7246
|
let proc = spawn("which", [command2]);
|
|
7253
|
-
proc.on("error", () =>
|
|
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 (
|
|
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 ?
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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() {
|
|
@@ -9072,7 +9066,8 @@ var baseTemplates = {
|
|
|
9072
9066
|
name: "Angular CLI Latest (Webpack | TypeScript)",
|
|
9073
9067
|
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",
|
|
9074
9068
|
modifications: {
|
|
9075
|
-
extraDependencies: ["@angular/forms@
|
|
9069
|
+
extraDependencies: ["@angular/forms@21.2.16"],
|
|
9070
|
+
// Move this to latest or 22 once ng new creates v22 projects
|
|
9076
9071
|
useCsfFactory: !0
|
|
9077
9072
|
},
|
|
9078
9073
|
extraCiSteps: {
|
|
@@ -9593,383 +9588,11 @@ async function promptSelectedTemplate(choices) {
|
|
|
9593
9588
|
});
|
|
9594
9589
|
}
|
|
9595
9590
|
|
|
9596
|
-
// src/ai/index.ts
|
|
9597
|
-
import { writeFile as writeFile10 } from "node:fs/promises";
|
|
9598
|
-
import { resolve as resolve4 } from "node:path";
|
|
9599
|
-
import { cache, getPrettyPackageManagerName } from "storybook/internal/common";
|
|
9600
|
-
import { logger as logger23 } from "storybook/internal/node-logger";
|
|
9601
|
-
import { telemetry } from "storybook/internal/telemetry";
|
|
9602
|
-
import { SupportedLanguage as SupportedLanguage2 } from "storybook/internal/types";
|
|
9603
|
-
|
|
9604
|
-
// ../create-storybook/src/services/ProjectTypeService.ts
|
|
9605
|
-
import { existsSync as existsSync6 } from "node:fs";
|
|
9606
|
-
import { resolve as resolve3 } from "node:path";
|
|
9607
|
-
import { ProjectType as ProjectType2 } from "storybook/internal/cli";
|
|
9608
|
-
import { HandledError, getProjectRoot } from "storybook/internal/common";
|
|
9609
|
-
import { logger as logger22 } from "storybook/internal/node-logger";
|
|
9610
|
-
import { NxProjectDetectedError } from "storybook/internal/server-errors";
|
|
9611
|
-
import { SupportedLanguage } from "storybook/internal/types";
|
|
9612
|
-
|
|
9613
|
-
// ../../../node_modules/empathic/find.mjs
|
|
9614
|
-
import { join as join5 } from "node:path";
|
|
9615
|
-
import { existsSync as existsSync5, statSync } from "node:fs";
|
|
9616
|
-
function up2(name, options) {
|
|
9617
|
-
let dir, tmp, start = options && options.cwd || "";
|
|
9618
|
-
for (dir of up(start, options))
|
|
9619
|
-
if (tmp = join5(dir, name), existsSync5(tmp)) return tmp;
|
|
9620
|
-
}
|
|
9621
|
-
|
|
9622
|
-
// ../create-storybook/src/services/ProjectTypeService.ts
|
|
9623
|
-
var import_semver7 = __toESM(require_semver(), 1);
|
|
9624
|
-
import { dedent as dedent17 } from "ts-dedent";
|
|
9625
|
-
var ProjectTypeService = class {
|
|
9626
|
-
constructor(jsPackageManager) {
|
|
9627
|
-
this.jsPackageManager = jsPackageManager;
|
|
9628
|
-
}
|
|
9629
|
-
/** Sorted configuration to match a Storybook preset template */
|
|
9630
|
-
getSupportedTemplates() {
|
|
9631
|
-
return [
|
|
9632
|
-
{
|
|
9633
|
-
preset: ProjectType2.NUXT,
|
|
9634
|
-
dependencies: ["nuxt"],
|
|
9635
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9636
|
-
},
|
|
9637
|
-
{
|
|
9638
|
-
preset: ProjectType2.TANSTACK_REACT,
|
|
9639
|
-
dependencies: ["@tanstack/start", "@tanstack/react-start", "@tanstack/react-router"],
|
|
9640
|
-
matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
|
|
9641
|
-
},
|
|
9642
|
-
{
|
|
9643
|
-
preset: ProjectType2.VUE3,
|
|
9644
|
-
dependencies: {
|
|
9645
|
-
// This Vue template works with Vue 3
|
|
9646
|
-
vue: (versionRange) => versionRange === "next" || this.eqMajor(versionRange, 3)
|
|
9647
|
-
},
|
|
9648
|
-
matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
|
|
9649
|
-
},
|
|
9650
|
-
{
|
|
9651
|
-
preset: ProjectType2.EMBER,
|
|
9652
|
-
dependencies: ["ember-cli"],
|
|
9653
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9654
|
-
},
|
|
9655
|
-
{
|
|
9656
|
-
preset: ProjectType2.NEXTJS,
|
|
9657
|
-
dependencies: ["next"],
|
|
9658
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9659
|
-
},
|
|
9660
|
-
{
|
|
9661
|
-
preset: ProjectType2.QWIK,
|
|
9662
|
-
dependencies: ["@builder.io/qwik"],
|
|
9663
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9664
|
-
},
|
|
9665
|
-
{
|
|
9666
|
-
preset: ProjectType2.REACT_NATIVE,
|
|
9667
|
-
dependencies: ["react-native", "react-native-scripts", "expo"],
|
|
9668
|
-
peerDependencies: ["react-native", "react-native-scripts", "expo"],
|
|
9669
|
-
matcherFunction: ({ dependencies, peerDependencies }) => (dependencies?.some(Boolean) || peerDependencies?.some(Boolean)) ?? !1
|
|
9670
|
-
},
|
|
9671
|
-
{
|
|
9672
|
-
preset: ProjectType2.REACT_SCRIPTS,
|
|
9673
|
-
// For projects using a custom/forked `react-scripts` package.
|
|
9674
|
-
files: ["/node_modules/.bin/react-scripts"],
|
|
9675
|
-
// For standard CRA projects
|
|
9676
|
-
dependencies: ["react-scripts"],
|
|
9677
|
-
matcherFunction: ({ dependencies, files }) => (dependencies?.every(Boolean) || files?.every(Boolean)) ?? !1
|
|
9678
|
-
},
|
|
9679
|
-
{
|
|
9680
|
-
preset: ProjectType2.ANGULAR,
|
|
9681
|
-
dependencies: ["@angular/core"],
|
|
9682
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9683
|
-
},
|
|
9684
|
-
{
|
|
9685
|
-
preset: ProjectType2.WEB_COMPONENTS,
|
|
9686
|
-
dependencies: ["lit-element", "lit-html", "lit"],
|
|
9687
|
-
matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
|
|
9688
|
-
},
|
|
9689
|
-
{
|
|
9690
|
-
preset: ProjectType2.PREACT,
|
|
9691
|
-
dependencies: ["preact"],
|
|
9692
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9693
|
-
},
|
|
9694
|
-
{
|
|
9695
|
-
// TODO: This only works because it is before the SVELTE template. could be more explicit
|
|
9696
|
-
preset: ProjectType2.SVELTEKIT,
|
|
9697
|
-
dependencies: ["@sveltejs/kit"],
|
|
9698
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9699
|
-
},
|
|
9700
|
-
{
|
|
9701
|
-
preset: ProjectType2.SVELTE,
|
|
9702
|
-
dependencies: ["svelte"],
|
|
9703
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9704
|
-
},
|
|
9705
|
-
{
|
|
9706
|
-
preset: ProjectType2.SOLID,
|
|
9707
|
-
dependencies: ["solid-js"],
|
|
9708
|
-
matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
|
|
9709
|
-
},
|
|
9710
|
-
// DO NOT MOVE ANY TEMPLATES BELOW THIS LINE
|
|
9711
|
-
// React is part of every Template, after Storybook is initialized once
|
|
9712
|
-
{
|
|
9713
|
-
preset: ProjectType2.REACT,
|
|
9714
|
-
dependencies: ["react"],
|
|
9715
|
-
peerDependencies: ["react"],
|
|
9716
|
-
matcherFunction: ({ dependencies, peerDependencies }) => (dependencies?.some(Boolean) || peerDependencies?.some(Boolean)) ?? !1
|
|
9717
|
-
}
|
|
9718
|
-
];
|
|
9719
|
-
}
|
|
9720
|
-
isStorybookInstantiated(configDir = resolve3(process.cwd(), ".storybook")) {
|
|
9721
|
-
return existsSync6(configDir);
|
|
9722
|
-
}
|
|
9723
|
-
async validateProvidedType(projectTypeProvided) {
|
|
9724
|
-
if (Object.values(ProjectType2).filter(
|
|
9725
|
-
(t10) => !["undetected", "unsupported", "nx"].includes(String(t10))
|
|
9726
|
-
).includes(projectTypeProvided))
|
|
9727
|
-
return projectTypeProvided;
|
|
9728
|
-
throw logger22.error(
|
|
9729
|
-
`The provided project type ${projectTypeProvided} was not recognized by Storybook`
|
|
9730
|
-
), new HandledError(`Unknown project type supplied: ${projectTypeProvided}`);
|
|
9731
|
-
}
|
|
9732
|
-
async autoDetectProjectType(options) {
|
|
9733
|
-
try {
|
|
9734
|
-
let detectedType = await this.detectProjectType(options);
|
|
9735
|
-
if (detectedType === ProjectType2.UNDETECTED || detectedType === null)
|
|
9736
|
-
throw logger22.error(dedent17`
|
|
9737
|
-
Unable to initialize Storybook in this directory.
|
|
9738
|
-
|
|
9739
|
-
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.
|
|
9740
|
-
|
|
9741
|
-
Tips:
|
|
9742
|
-
- Run init in an empty directory or create a new framework app first.
|
|
9743
|
-
- If this directory contains unrelated files, try a new directory for Storybook.
|
|
9744
|
-
`), new HandledError("Storybook failed to detect your project type");
|
|
9745
|
-
if (detectedType === ProjectType2.NX)
|
|
9746
|
-
throw new NxProjectDetectedError();
|
|
9747
|
-
return detectedType;
|
|
9748
|
-
} catch (err) {
|
|
9749
|
-
throw err instanceof HandledError || err instanceof NxProjectDetectedError ? err : (logger22.error(String(err)), new HandledError(err instanceof Error ? err.message : String(err)));
|
|
9750
|
-
}
|
|
9751
|
-
}
|
|
9752
|
-
async detectLanguage() {
|
|
9753
|
-
let language = SupportedLanguage.JAVASCRIPT;
|
|
9754
|
-
return existsSync6("jsconfig.json") || (!!this.jsPackageManager.getAllDependencies().typescript ? (await this.detectIncompatiblePackageVersions()).length === 0 && (language = SupportedLanguage.TYPESCRIPT) : existsSync6("tsconfig.json") && (language = SupportedLanguage.TYPESCRIPT)), language;
|
|
9755
|
-
}
|
|
9756
|
-
/** Check installed tooling versions for TypeScript compatibility constraints */
|
|
9757
|
-
async detectIncompatiblePackageVersions() {
|
|
9758
|
-
let getModulePackageJSONVersion = async (pkg) => (await this.jsPackageManager.getModulePackageJSON(pkg))?.version ?? null, [
|
|
9759
|
-
typescriptVersion,
|
|
9760
|
-
prettierVersion,
|
|
9761
|
-
babelPluginTransformTypescriptVersion,
|
|
9762
|
-
typescriptEslintParserVersion,
|
|
9763
|
-
eslintPluginStorybookVersion
|
|
9764
|
-
] = await Promise.all([
|
|
9765
|
-
getModulePackageJSONVersion("typescript"),
|
|
9766
|
-
getModulePackageJSONVersion("prettier"),
|
|
9767
|
-
getModulePackageJSONVersion("@babel/plugin-transform-typescript"),
|
|
9768
|
-
getModulePackageJSONVersion("@typescript-eslint/parser"),
|
|
9769
|
-
getModulePackageJSONVersion("eslint-plugin-storybook")
|
|
9770
|
-
]), satisfies = (version2, range) => version2 ? import_semver7.default.satisfies(version2, range, { includePrerelease: !0 }) : !1, incompatibleReasons = [];
|
|
9771
|
-
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(
|
|
9772
|
-
`@babel/plugin-transform-typescript ${babelPluginTransformTypescriptVersion} is below 7.20.0`
|
|
9773
|
-
), typescriptEslintParserVersion && !satisfies(typescriptEslintParserVersion, ">=5.44.0") && incompatibleReasons.push(
|
|
9774
|
-
`@typescript-eslint/parser ${typescriptEslintParserVersion} is below 5.44.0`
|
|
9775
|
-
), eslintPluginStorybookVersion && !eslintPluginStorybookVersion.startsWith("0.0.0-") && !satisfies(eslintPluginStorybookVersion, ">=0.6.8") && incompatibleReasons.push(
|
|
9776
|
-
`eslint-plugin-storybook ${eslintPluginStorybookVersion} is below 0.6.8`
|
|
9777
|
-
), incompatibleReasons;
|
|
9778
|
-
}
|
|
9779
|
-
eqMajor(versionRange, major) {
|
|
9780
|
-
return import_semver7.default.validRange(versionRange) ? import_semver7.default.minVersion(versionRange)?.major === major : !1;
|
|
9781
|
-
}
|
|
9782
|
-
async detectProjectType(options) {
|
|
9783
|
-
try {
|
|
9784
|
-
if (this.isNxProject())
|
|
9785
|
-
return ProjectType2.NX;
|
|
9786
|
-
if (options.html)
|
|
9787
|
-
return ProjectType2.HTML;
|
|
9788
|
-
let { packageJson } = this.jsPackageManager.primaryPackageJson;
|
|
9789
|
-
return this.detectFrameworkPreset(packageJson);
|
|
9790
|
-
} catch {
|
|
9791
|
-
return ProjectType2.UNDETECTED;
|
|
9792
|
-
}
|
|
9793
|
-
}
|
|
9794
|
-
detectFrameworkPreset(packageJson) {
|
|
9795
|
-
let result = [...this.getSupportedTemplates(), this.getUnsupportedTemplate()].find(
|
|
9796
|
-
(framework) => this.getProjectType(packageJson, framework) !== null
|
|
9797
|
-
);
|
|
9798
|
-
return result ? result.preset : ProjectType2.UNDETECTED;
|
|
9799
|
-
}
|
|
9800
|
-
/** Template that matches unsupported frameworks */
|
|
9801
|
-
getUnsupportedTemplate() {
|
|
9802
|
-
return {
|
|
9803
|
-
preset: ProjectType2.UNSUPPORTED,
|
|
9804
|
-
dependencies: {},
|
|
9805
|
-
matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
|
|
9806
|
-
};
|
|
9807
|
-
}
|
|
9808
|
-
getProjectType(packageJson, framework) {
|
|
9809
|
-
let matcher = {
|
|
9810
|
-
dependencies: [!1],
|
|
9811
|
-
peerDependencies: [!1],
|
|
9812
|
-
files: [!1]
|
|
9813
|
-
}, { preset, files, dependencies, peerDependencies, matcherFunction } = framework, dependencySearches = [];
|
|
9814
|
-
Array.isArray(dependencies) ? dependencySearches = dependencies.map((name) => [name, void 0]) : typeof dependencies == "object" && (dependencySearches = Object.entries(dependencies)), dependencySearches.length > 0 && (matcher.dependencies = dependencySearches.map(
|
|
9815
|
-
([name, matchFn]) => this.hasDependency(packageJson, name, matchFn)
|
|
9816
|
-
));
|
|
9817
|
-
let peerDependencySearches = [];
|
|
9818
|
-
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(
|
|
9819
|
-
([name, matchFn]) => this.hasPeerDependency(packageJson, name, matchFn)
|
|
9820
|
-
)), Array.isArray(files) && files.length > 0 && (matcher.files = files.map((name) => existsSync6(name))), matcherFunction(matcher) ? preset : null;
|
|
9821
|
-
}
|
|
9822
|
-
hasDependency(packageJson, name, matcher) {
|
|
9823
|
-
let version2 = packageJson.dependencies?.[name] || packageJson.devDependencies?.[name];
|
|
9824
|
-
return version2 && typeof matcher == "function" ? matcher(version2) : !!version2;
|
|
9825
|
-
}
|
|
9826
|
-
hasPeerDependency(packageJson, name, matcher) {
|
|
9827
|
-
let version2 = packageJson.peerDependencies?.[name];
|
|
9828
|
-
return version2 && typeof matcher == "function" ? matcher(version2) : !!version2;
|
|
9829
|
-
}
|
|
9830
|
-
isNxProject() {
|
|
9831
|
-
return up2("nx.json", { last: getProjectRoot() });
|
|
9832
|
-
}
|
|
9833
|
-
};
|
|
9834
|
-
|
|
9835
|
-
// src/ai/setup-prompts/index.ts
|
|
9836
|
-
import { dedent as dedent18 } from "ts-dedent";
|
|
9837
|
-
|
|
9838
|
-
// src/ai/utils/project-overview.ts
|
|
9839
|
-
function getProjectOverview(projectInfo) {
|
|
9840
|
-
let rows = [
|
|
9841
|
-
["Version", projectInfo.storybookVersion || "unknown"],
|
|
9842
|
-
["Renderer", projectInfo.rendererPackage || "unknown"],
|
|
9843
|
-
["Framework", projectInfo.framework || "unknown"],
|
|
9844
|
-
["Builder", projectInfo.builderPackage || "unknown"],
|
|
9845
|
-
["Config Dir", `\`${projectInfo.configDir}\``],
|
|
9846
|
-
["Language", projectInfo.language === "ts" ? "TypeScript" : "JavaScript"]
|
|
9847
|
-
];
|
|
9848
|
-
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(`
|
|
9849
|
-
`)].join(
|
|
9850
|
-
`
|
|
9851
|
-
`
|
|
9852
|
-
);
|
|
9853
|
-
}
|
|
9854
|
-
|
|
9855
|
-
// src/ai/setup-prompts/index.ts
|
|
9856
|
-
var DEFAULT_PROMPT_NAME = "optimized-tests", CURRENTLY_USED_PROMPT = {
|
|
9857
|
-
[DEFAULT_PROMPT_NAME]: instructions
|
|
9858
|
-
}, FORMERLY_USED_PROMPTS = {
|
|
9859
|
-
monorepo: async () => (await import("./monorepo-VOS454YG.js")).instructions,
|
|
9860
|
-
"optimized-tests": async () => (await import("./optimized-tests-RCEVPQBB.js")).instructions,
|
|
9861
|
-
"relaxed-limits": async () => (await import("./relaxed-limits-YPUP4H5P.js")).instructions,
|
|
9862
|
-
setup: async () => (await import("./setup-VMKKTPA5.js")).instructions,
|
|
9863
|
-
"pattern-copy-play": async () => (await import("./pattern-copy-play-YCEXHQK5.js")).instructions,
|
|
9864
|
-
"monorepo-optimized-tests-relaxed-limits-no-story-deletion": async () => (await import("./monorepo-optimized-tests-relaxed-limits-no-story-deletion-G565RUXG.js")).instructions
|
|
9865
|
-
}, PROMPT_NAMES = [
|
|
9866
|
-
...Object.keys(CURRENTLY_USED_PROMPT),
|
|
9867
|
-
...Object.keys(FORMERLY_USED_PROMPTS)
|
|
9868
|
-
], EVAL_SETUP_PROMPT_ENV = "EVAL_SETUP_PROMPT";
|
|
9869
|
-
function resolvePromptName() {
|
|
9870
|
-
let requested = process.env[EVAL_SETUP_PROMPT_ENV]?.trim();
|
|
9871
|
-
return requested && (Object.hasOwn(CURRENTLY_USED_PROMPT, requested) || Object.hasOwn(FORMERLY_USED_PROMPTS, requested)) ? requested : DEFAULT_PROMPT_NAME;
|
|
9872
|
-
}
|
|
9873
|
-
async function getAiSetupPrompt(projectInfo) {
|
|
9874
|
-
let name = resolvePromptName();
|
|
9875
|
-
return { content: (CURRENTLY_USED_PROMPT[name] ?? await FORMERLY_USED_PROMPTS[name]())(projectInfo), name };
|
|
9876
|
-
}
|
|
9877
|
-
async function getAiSetupMarkdownOutput(projectInfo) {
|
|
9878
|
-
let { content, name } = await getAiSetupPrompt(projectInfo);
|
|
9879
|
-
return {
|
|
9880
|
-
markdown: dedent18`
|
|
9881
|
-
# Storybook Setup
|
|
9882
|
-
|
|
9883
|
-
${getProjectOverview(projectInfo)}
|
|
9884
|
-
|
|
9885
|
-
${content}
|
|
9886
|
-
`,
|
|
9887
|
-
prompt: name
|
|
9888
|
-
};
|
|
9889
|
-
}
|
|
9890
|
-
|
|
9891
|
-
// src/ai/index.ts
|
|
9892
|
-
async function aiSetup(options) {
|
|
9893
|
-
let { configDir: userConfigDir, packageManager, output } = options, projectInfo;
|
|
9894
|
-
try {
|
|
9895
|
-
let data = await getStorybookData({
|
|
9896
|
-
configDir: userConfigDir,
|
|
9897
|
-
packageManagerName: packageManager
|
|
9898
|
-
});
|
|
9899
|
-
if (!data.frameworkPackage || !data.rendererPackage || !data.builderPackage) {
|
|
9900
|
-
logger23.error(
|
|
9901
|
-
"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."
|
|
9902
|
-
);
|
|
9903
|
-
return;
|
|
9904
|
-
}
|
|
9905
|
-
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);
|
|
9906
|
-
projectInfo = {
|
|
9907
|
-
storybookVersion: data.versionInstalled,
|
|
9908
|
-
majorVersion,
|
|
9909
|
-
framework: data.frameworkPackage,
|
|
9910
|
-
rendererPackage: data.rendererPackage,
|
|
9911
|
-
renderer: data.renderer,
|
|
9912
|
-
builderPackage: data.builderPackage,
|
|
9913
|
-
addons: data.addons ?? [],
|
|
9914
|
-
configDir: data.configDir,
|
|
9915
|
-
storiesPaths: data.storiesPaths,
|
|
9916
|
-
packageManager: data.packageManager,
|
|
9917
|
-
packageManagerName: getPrettyPackageManagerName(data.packageManager.type),
|
|
9918
|
-
language,
|
|
9919
|
-
hasCsfFactoryPreview: data.hasCsfFactoryPreview,
|
|
9920
|
-
needsUserOnboarding
|
|
9921
|
-
};
|
|
9922
|
-
} catch (err) {
|
|
9923
|
-
logger23.error(
|
|
9924
|
-
`Failed to read Storybook configuration: ${err instanceof Error ? err.message : String(err)}`
|
|
9925
|
-
), logger23.log(
|
|
9926
|
-
"Make sure you are running this command from your project root, or specify --config-dir."
|
|
9927
|
-
);
|
|
9928
|
-
return;
|
|
9929
|
-
}
|
|
9930
|
-
if (projectInfo.rendererPackage !== "@storybook/react" || projectInfo.builderPackage !== "@storybook/builder-vite") {
|
|
9931
|
-
logger23.log(
|
|
9932
|
-
"AI-assisted setup is currently only available for projects using the React renderer with Vite builder. Detected renderer: " + projectInfo.rendererPackage + ", builder: " + projectInfo.builderPackage
|
|
9933
|
-
);
|
|
9934
|
-
return;
|
|
9935
|
-
}
|
|
9936
|
-
let result = await getAiSetupMarkdownOutput(projectInfo), markdownOutput = result.markdown;
|
|
9937
|
-
if (await cache.set("ai-setup-ran", {
|
|
9938
|
-
timestamp: Date.now(),
|
|
9939
|
-
runId: options.runId,
|
|
9940
|
-
configDir: resolve4(projectInfo.configDir)
|
|
9941
|
-
}).catch(() => {
|
|
9942
|
-
}), await telemetry("ai-setup", {
|
|
9943
|
-
cliOptions: {
|
|
9944
|
-
output: output ? "file" : void 0,
|
|
9945
|
-
configDir: projectInfo.configDir,
|
|
9946
|
-
packageManager: projectInfo.packageManager.type,
|
|
9947
|
-
prompt: result.prompt
|
|
9948
|
-
},
|
|
9949
|
-
project: {
|
|
9950
|
-
framework: projectInfo.framework,
|
|
9951
|
-
renderer: projectInfo.rendererPackage,
|
|
9952
|
-
builder: projectInfo.builderPackage,
|
|
9953
|
-
language: projectInfo.language
|
|
9954
|
-
},
|
|
9955
|
-
runId: options.runId
|
|
9956
|
-
}), output) {
|
|
9957
|
-
let outputPath = resolve4(output);
|
|
9958
|
-
await writeFile10(outputPath, markdownOutput, "utf-8"), logger23.log(`Prompt written to ${outputPath}`);
|
|
9959
|
-
} else
|
|
9960
|
-
process.stdout.write(`${markdownOutput}
|
|
9961
|
-
`);
|
|
9962
|
-
}
|
|
9963
|
-
function parseMajorVersion(version2) {
|
|
9964
|
-
let match = version2.match(/^(\d+)/);
|
|
9965
|
-
return match ? parseInt(match[1], 10) : void 0;
|
|
9966
|
-
}
|
|
9967
|
-
|
|
9968
9591
|
// src/upgrade.ts
|
|
9969
|
-
var import_cross_spawn3 = __toESM(require_cross_spawn(), 1), import_picocolors17 = __toESM(require_picocolors(), 1),
|
|
9592
|
+
var import_cross_spawn3 = __toESM(require_cross_spawn(), 1), import_picocolors17 = __toESM(require_picocolors(), 1), import_semver7 = __toESM(require_semver(), 1);
|
|
9970
9593
|
import { PackageManagerName as PackageManagerName2 } from "storybook/internal/common";
|
|
9971
9594
|
import {
|
|
9972
|
-
HandledError
|
|
9595
|
+
HandledError,
|
|
9973
9596
|
JsPackageManagerFactory as JsPackageManagerFactory2,
|
|
9974
9597
|
isCI as isCI2,
|
|
9975
9598
|
isCorePackage as isCorePackage2
|
|
@@ -9978,7 +9601,7 @@ import {
|
|
|
9978
9601
|
CLI_COLORS as CLI_COLORS4,
|
|
9979
9602
|
createHyperlink,
|
|
9980
9603
|
logTracker as logTracker3,
|
|
9981
|
-
logger as
|
|
9604
|
+
logger as logger23,
|
|
9982
9605
|
prompt as prompt7
|
|
9983
9606
|
} from "storybook/internal/node-logger";
|
|
9984
9607
|
import {
|
|
@@ -9986,15 +9609,15 @@ import {
|
|
|
9986
9609
|
UpgradeStorybookToLowerVersionError,
|
|
9987
9610
|
UpgradeStorybookUnknownCurrentVersionError
|
|
9988
9611
|
} from "storybook/internal/server-errors";
|
|
9989
|
-
import { telemetry
|
|
9990
|
-
import { dedent as
|
|
9612
|
+
import { telemetry } from "storybook/internal/telemetry";
|
|
9613
|
+
import { dedent as dedent17 } from "ts-dedent";
|
|
9991
9614
|
|
|
9992
9615
|
// src/automigrate/multi-project.ts
|
|
9993
|
-
import { CLI_COLORS as CLI_COLORS3, logger as
|
|
9616
|
+
import { CLI_COLORS as CLI_COLORS3, logger as logger22, prompt as prompt6 } from "storybook/internal/node-logger";
|
|
9994
9617
|
import { ErrorCollector, sanitizeError } from "storybook/internal/telemetry";
|
|
9995
9618
|
async function collectAutomigrationsAcrossProjects(options) {
|
|
9996
9619
|
let { fixes, projects, taskLog } = options, automigrationMap = /* @__PURE__ */ new Map();
|
|
9997
|
-
|
|
9620
|
+
logger22.debug(
|
|
9998
9621
|
`Starting automigration collection across ${projects.length} projects and ${fixes.length} fixes...`
|
|
9999
9622
|
);
|
|
10000
9623
|
function collectResult(fix, project, status, result) {
|
|
@@ -10016,10 +9639,10 @@ async function collectAutomigrationsAcrossProjects(options) {
|
|
|
10016
9639
|
}
|
|
10017
9640
|
for (let project of projects) {
|
|
10018
9641
|
let projectName = shortenPath(project.configDir);
|
|
10019
|
-
taskLog.message(`Checking automigrations for ${projectName}...`),
|
|
9642
|
+
taskLog.message(`Checking automigrations for ${projectName}...`), logger22.debug(`Processing project: ${projectName}`);
|
|
10020
9643
|
for (let fix of fixes)
|
|
10021
9644
|
try {
|
|
10022
|
-
|
|
9645
|
+
logger22.debug(`Checking fix ${fix.id} for project ${projectName}...`);
|
|
10023
9646
|
let checkOptions = {
|
|
10024
9647
|
packageManager: project.packageManager,
|
|
10025
9648
|
configDir: project.configDir,
|
|
@@ -10032,9 +9655,9 @@ async function collectAutomigrationsAcrossProjects(options) {
|
|
|
10032
9655
|
}, result = await fix.check(checkOptions);
|
|
10033
9656
|
result !== null ? collectResult(fix, project, "check_succeeded", result) : collectResult(fix, project, "not_applicable");
|
|
10034
9657
|
} catch (error) {
|
|
10035
|
-
collectResult(fix, project, "check_failed"),
|
|
9658
|
+
collectResult(fix, project, "check_failed"), logger22.debug(
|
|
10036
9659
|
`Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`
|
|
10037
|
-
),
|
|
9660
|
+
), logger22.debug(`${error instanceof Error ? error.stack : String(error)}`), ErrorCollector.addError(error);
|
|
10038
9661
|
}
|
|
10039
9662
|
}
|
|
10040
9663
|
let allAutomigrations = Array.from(automigrationMap.values()), applicableAutomigrations = allAutomigrations.filter(
|
|
@@ -10048,9 +9671,9 @@ async function collectAutomigrationsAcrossProjects(options) {
|
|
|
10048
9671
|
);
|
|
10049
9672
|
return taskLog.message(`
|
|
10050
9673
|
Automigrations detected:`), successAutomigrations.forEach((fixId) => {
|
|
10051
|
-
taskLog.message(`${CLI_COLORS3.success(`${
|
|
9674
|
+
taskLog.message(`${CLI_COLORS3.success(`${logger22.SYMBOLS.success} ${fixId}`)}`);
|
|
10052
9675
|
}), failedAutomigrations.forEach((fixId) => {
|
|
10053
|
-
taskLog.message(`${CLI_COLORS3.error(`${
|
|
9676
|
+
taskLog.message(`${CLI_COLORS3.error(`${logger22.SYMBOLS.error} ${fixId}`)}`);
|
|
10054
9677
|
}), failedAutomigrations.length > 0 ? taskLog.error(
|
|
10055
9678
|
`${failedAutomigrations.length} automigration ${failedAutomigrations.length > 1 ? "checks" : "check"} failed`
|
|
10056
9679
|
) : taskLog.success(
|
|
@@ -10068,12 +9691,12 @@ async function promptForAutomigrations(automigrations, options) {
|
|
|
10068
9691
|
if (automigrations.length === 0)
|
|
10069
9692
|
return [];
|
|
10070
9693
|
if (options.dryRun)
|
|
10071
|
-
return
|
|
10072
|
-
|
|
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)})`);
|
|
10073
9696
|
}), [];
|
|
10074
9697
|
if (options.yes)
|
|
10075
|
-
return
|
|
10076
|
-
|
|
9698
|
+
return logger22.log("Running all detected automigrations:"), automigrations.forEach(({ fix, reports: list }) => {
|
|
9699
|
+
logger22.log(` - ${fix.id} (${formatProjectDirs(list)})`);
|
|
10077
9700
|
}), automigrations;
|
|
10078
9701
|
let choices = automigrations.map((am) => {
|
|
10079
9702
|
let hint = [];
|
|
@@ -10122,13 +9745,13 @@ async function runAutomigrationsForProjects(selectedAutomigrations, options) {
|
|
|
10122
9745
|
title: `${countPrefix}Running automigrations for ${projectName}`
|
|
10123
9746
|
}) : {
|
|
10124
9747
|
message: (message) => {
|
|
10125
|
-
|
|
9748
|
+
logger22.debug(`${message}`);
|
|
10126
9749
|
},
|
|
10127
9750
|
error: (message) => {
|
|
10128
|
-
|
|
9751
|
+
logger22.debug(`${message}`);
|
|
10129
9752
|
},
|
|
10130
9753
|
success: (message) => {
|
|
10131
|
-
|
|
9754
|
+
logger22.debug(`${message}`);
|
|
10132
9755
|
}
|
|
10133
9756
|
}, fixResults = {}, fixFailures = {};
|
|
10134
9757
|
for (let automigration of projectAutomigration) {
|
|
@@ -10162,11 +9785,11 @@ async function runAutomigrationsForProjects(selectedAutomigrations, options) {
|
|
|
10162
9785
|
storiesPaths: project2.storiesPaths,
|
|
10163
9786
|
yes
|
|
10164
9787
|
};
|
|
10165
|
-
await fix.run(runOptions), fixResults[fix.id] = "succeeded" /* SUCCEEDED */, taskLog.message(CLI_COLORS3.success(`${
|
|
9788
|
+
await fix.run(runOptions), fixResults[fix.id] = "succeeded" /* SUCCEEDED */, taskLog.message(CLI_COLORS3.success(`${logger22.SYMBOLS.success} ${fix.id}`));
|
|
10166
9789
|
}
|
|
10167
9790
|
} catch (error) {
|
|
10168
9791
|
let errorMessage = (error instanceof Error ? error.stack : String(error)) ?? "Unknown error";
|
|
10169
|
-
fixResults[fix.id] = "failed" /* FAILED */, fixFailures[fix.id] = sanitizeError(error), taskLog.message(CLI_COLORS3.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);
|
|
10170
9793
|
}
|
|
10171
9794
|
}
|
|
10172
9795
|
let automigrationsWithErrors = Object.values(fixResults).filter(
|
|
@@ -10276,28 +9899,28 @@ function logUpgradeResults(projectResults, detectedAutomigrations, doctorResults
|
|
|
10276
9899
|
doctorResults
|
|
10277
9900
|
);
|
|
10278
9901
|
if (failedProjects.length > 0) {
|
|
10279
|
-
if (logTracker3.enableLogWriting(),
|
|
9902
|
+
if (logTracker3.enableLogWriting(), logger23.step(
|
|
10280
9903
|
"The upgrade is complete, but some projects failed to upgrade or migrate completely. Please see the debug logs for more details."
|
|
10281
9904
|
), successfulProjects.length > 0) {
|
|
10282
9905
|
let successfulProjectsList = successfulProjects.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
|
|
10283
9906
|
`);
|
|
10284
|
-
|
|
9907
|
+
logger23.log(`${CLI_COLORS4.success("Successfully upgraded:")}
|
|
10285
9908
|
${successfulProjectsList}`);
|
|
10286
9909
|
}
|
|
10287
9910
|
let failedProjectsList = failedProjects.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
|
|
10288
9911
|
`);
|
|
10289
|
-
if (
|
|
9912
|
+
if (logger23.log(
|
|
10290
9913
|
`${CLI_COLORS4.error("Failed to upgrade:")}
|
|
10291
9914
|
Some automigrations failed, please check the logs in the log file for more details.
|
|
10292
9915
|
${failedProjectsList}`
|
|
10293
9916
|
), projectsWithNoFixes.length > 0) {
|
|
10294
9917
|
let projectList = projectsWithNoFixes.map((dir) => ` \u2022 ${shortenPath(dir)}`).join(`
|
|
10295
9918
|
`);
|
|
10296
|
-
|
|
9919
|
+
logger23.log(`${CLI_COLORS4.info("No applicable migrations:")}
|
|
10297
9920
|
${projectList}`);
|
|
10298
9921
|
}
|
|
10299
9922
|
} else
|
|
10300
|
-
Object.values(doctorResults).every((result) => result.status === "healthy") ?
|
|
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(
|
|
10301
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.")}`
|
|
10302
9925
|
);
|
|
10303
9926
|
let automigrationLinks = detectedAutomigrations.filter(
|
|
@@ -10311,9 +9934,9 @@ ${projectList}`);
|
|
|
10311
9934
|
...automigrationLinks
|
|
10312
9935
|
].join(`
|
|
10313
9936
|
`);
|
|
10314
|
-
|
|
9937
|
+
logger23.log(automigrationLinksMessage);
|
|
10315
9938
|
}
|
|
10316
|
-
|
|
9939
|
+
logger23.log(
|
|
10317
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")}`
|
|
10318
9941
|
);
|
|
10319
9942
|
}
|
|
@@ -10334,7 +9957,7 @@ async function sendMultiUpgradeTelemetry(options) {
|
|
|
10334
9957
|
(result) => result.status !== "healthy"
|
|
10335
9958
|
).length;
|
|
10336
9959
|
try {
|
|
10337
|
-
await
|
|
9960
|
+
await telemetry("multi-upgrade", {
|
|
10338
9961
|
totalDetectedProjects: allProjects.length,
|
|
10339
9962
|
totalSelectedProjects: selectedProjects.length,
|
|
10340
9963
|
projectsWithSuccessfulAutomigrations: successfulProjects.length,
|
|
@@ -10345,7 +9968,7 @@ async function sendMultiUpgradeTelemetry(options) {
|
|
|
10345
9968
|
hasUserInterrupted
|
|
10346
9969
|
});
|
|
10347
9970
|
} catch (error) {
|
|
10348
|
-
|
|
9971
|
+
logger23.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`);
|
|
10349
9972
|
}
|
|
10350
9973
|
}
|
|
10351
9974
|
async function upgrade(options) {
|
|
@@ -10353,13 +9976,13 @@ async function upgrade(options) {
|
|
|
10353
9976
|
if (projectsResult === void 0 || projectsResult.selectedProjects.length === 0)
|
|
10354
9977
|
return;
|
|
10355
9978
|
let { allProjects, selectedProjects: storybookProjects } = projectsResult;
|
|
10356
|
-
storybookProjects.length > 1 ?
|
|
9979
|
+
storybookProjects.length > 1 ? logger23.info(`Upgrading the following projects:
|
|
10357
9980
|
${storybookProjects.map((p) => `${import_picocolors17.default.cyan(shortenPath(p.configDir))}: ${import_picocolors17.default.bold(p.beforeVersion)} -> ${import_picocolors17.default.bold(p.currentCLIVersion)}`).join(`
|
|
10358
|
-
`)}`) :
|
|
9981
|
+
`)}`) : logger23.info(
|
|
10359
9982
|
`Upgrading from ${import_picocolors17.default.bold(storybookProjects[0].beforeVersion)} to ${import_picocolors17.default.bold(storybookProjects[0].currentCLIVersion)}`
|
|
10360
9983
|
);
|
|
10361
9984
|
let automigrationResults = {}, doctorResults = {}, handleInterruption = async () => {
|
|
10362
|
-
throw
|
|
9985
|
+
throw logger23.log(`
|
|
10363
9986
|
|
|
10364
9987
|
Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgradeTelemetry({
|
|
10365
9988
|
allProjects,
|
|
@@ -10367,16 +9990,16 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10367
9990
|
projectResults: automigrationResults,
|
|
10368
9991
|
doctorResults,
|
|
10369
9992
|
hasUserInterrupted: !0
|
|
10370
|
-
}), new
|
|
9993
|
+
}), new HandledError("Upgrade cancelled by user");
|
|
10371
9994
|
};
|
|
10372
9995
|
process.on("SIGINT", handleInterruption), process.on("SIGTERM", handleInterruption);
|
|
10373
9996
|
try {
|
|
10374
9997
|
if (processAutoblockerResults(storybookProjects, (message) => {
|
|
10375
|
-
|
|
9998
|
+
logger23.error(dedent17`Blockers detected\n\n${message}`);
|
|
10376
9999
|
}))
|
|
10377
|
-
throw new
|
|
10000
|
+
throw new HandledError("Blockers detected");
|
|
10378
10001
|
if (storybookProjects.some((project) => {
|
|
10379
|
-
if (!project.isCanary && (0,
|
|
10002
|
+
if (!project.isCanary && (0, import_semver7.lt)(project.currentCLIVersion, project.beforeVersion))
|
|
10380
10003
|
throw new UpgradeStorybookToLowerVersionError({
|
|
10381
10004
|
beforeVersion: project.beforeVersion,
|
|
10382
10005
|
currentVersion: project.currentCLIVersion
|
|
@@ -10394,7 +10017,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10394
10017
|
} catch (error) {
|
|
10395
10018
|
if (error instanceof MinimumReleaseAgeHandledError)
|
|
10396
10019
|
throw error;
|
|
10397
|
-
|
|
10020
|
+
logger23.debug(
|
|
10398
10021
|
`Skipping minimum-release-age precheck for ${project.configDir} after an unexpected failure: ${error}`
|
|
10399
10022
|
);
|
|
10400
10023
|
}
|
|
@@ -10405,7 +10028,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10405
10028
|
try {
|
|
10406
10029
|
let loggedPaths = [];
|
|
10407
10030
|
for (let project of storybookProjects) {
|
|
10408
|
-
|
|
10031
|
+
logger23.debug(`Updating dependencies in ${shortenPath(project.configDir)}...`);
|
|
10409
10032
|
let newPaths = project.packageManager.packageJsonPaths.map(shortenPath).filter((path4) => !loggedPaths.includes(path4));
|
|
10410
10033
|
newPaths.length > 0 && (task.message(newPaths.join(`
|
|
10411
10034
|
`)), loggedPaths.push(...newPaths)), await upgradeStorybookDependencies({
|
|
@@ -10423,17 +10046,17 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10423
10046
|
}
|
|
10424
10047
|
}
|
|
10425
10048
|
let automigrationResults2 = {}, detectedAutomigrations = [];
|
|
10426
|
-
options.skipAutomigrations ?
|
|
10049
|
+
options.skipAutomigrations ? logger23.log("Skipping automigrations (--skip-automigrations).") : { automigrationResults: automigrationResults2, detectedAutomigrations } = await runAutomigrations(
|
|
10427
10050
|
storybookProjects,
|
|
10428
10051
|
options
|
|
10429
10052
|
);
|
|
10430
10053
|
let rootPackageManager = storybookProjects.length > 1 ? JsPackageManagerFactory2.getPackageManager({ force: options.packageManager }) : storybookProjects[0].packageManager;
|
|
10431
|
-
rootPackageManager.type === "npm" ? await rootPackageManager.installDependencies({ force: !0 }) : await rootPackageManager.installDependencies(), rootPackageManager.type !== PackageManagerName2.YARN1 && rootPackageManager.isStorybookInMonorepo() && (
|
|
10054
|
+
rootPackageManager.type === "npm" ? await rootPackageManager.installDependencies({ force: !0 }) : await rootPackageManager.installDependencies(), rootPackageManager.type !== PackageManagerName2.YARN1 && rootPackageManager.isStorybookInMonorepo() && (logger23.warn(
|
|
10432
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."
|
|
10433
10056
|
), options.yes || await prompt7.confirm({
|
|
10434
10057
|
message: `Execute ${rootPackageManager.getRunCommand("dedupe")}?`,
|
|
10435
10058
|
initialValue: !0
|
|
10436
|
-
}) ? rootPackageManager.type === "npm" ? await rootPackageManager.dedupeDependencies({ force: !0 }) : await rootPackageManager.dedupeDependencies() :
|
|
10059
|
+
}) ? rootPackageManager.type === "npm" ? await rootPackageManager.dedupeDependencies({ force: !0 }) : await rootPackageManager.dedupeDependencies() : logger23.log(
|
|
10437
10060
|
`If you find any issues running Storybook, you can run ${rootPackageManager.getRunCommand("dedupe")} manually to deduplicate your dependencies and try again.`
|
|
10438
10061
|
));
|
|
10439
10062
|
let doctorProjects = storybookProjects.map((project) => ({
|
|
@@ -10442,7 +10065,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10442
10065
|
storybookVersion: project.currentCLIVersion,
|
|
10443
10066
|
mainConfig: project.mainConfig
|
|
10444
10067
|
}));
|
|
10445
|
-
|
|
10068
|
+
logger23.step("Checking the health of your project(s).."), doctorResults = await runMultiProjectDoctor(doctorProjects), displayDoctorResults(doctorResults) && logTracker3.enableLogWriting(), logUpgradeResults(automigrationResults2, detectedAutomigrations, doctorResults);
|
|
10446
10069
|
for (let project of storybookProjects) {
|
|
10447
10070
|
let resultData = automigrationResults2[project.configDir] || {
|
|
10448
10071
|
automigrationStatuses: {},
|
|
@@ -10452,7 +10075,7 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10452
10075
|
status === "has_issues" && doctorFailureCount++, status === "check_error" && doctorErrorCount++;
|
|
10453
10076
|
});
|
|
10454
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;
|
|
10455
|
-
await
|
|
10078
|
+
await telemetry("upgrade", {
|
|
10456
10079
|
beforeVersion: project.beforeVersion,
|
|
10457
10080
|
afterVersion: project.currentCLIVersion,
|
|
10458
10081
|
automigrationResults: resultData.automigrationStatuses,
|
|
@@ -10478,13 +10101,13 @@ Upgrade interrupted by user.`), allProjects.length > 1 && await sendMultiUpgrade
|
|
|
10478
10101
|
// src/bin/run.ts
|
|
10479
10102
|
addToGlobalContext("cliVersion", versions5.storybook);
|
|
10480
10103
|
var handleCommandFailure = (logFilePath) => async (error) => {
|
|
10481
|
-
error instanceof
|
|
10104
|
+
error instanceof HandledError2 || logger24.error(String(error));
|
|
10482
10105
|
try {
|
|
10483
10106
|
let logFile = await logTracker4.writeToFile(logFilePath);
|
|
10484
|
-
|
|
10107
|
+
logger24.log(`Debug logs are written to: ${logFile}`);
|
|
10485
10108
|
} catch {
|
|
10486
10109
|
}
|
|
10487
|
-
|
|
10110
|
+
logger24.outro(""), process.exit(1);
|
|
10488
10111
|
}, command = (name) => program.command(name).option(
|
|
10489
10112
|
"--disable-telemetry",
|
|
10490
10113
|
"Disable sending telemetry data",
|
|
@@ -10494,21 +10117,21 @@ var handleCommandFailure = (logFilePath) => async (error) => {
|
|
|
10494
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"
|
|
10495
10118
|
).option("--loglevel <trace | debug | info | warn | error | silent>", "Define log level", "info").hook("preAction", async (self2) => {
|
|
10496
10119
|
let options = self2.opts();
|
|
10497
|
-
options.debug &&
|
|
10120
|
+
options.debug && logger24.setLogLevel("debug"), options.loglevel && logger24.setLogLevel(options.loglevel), options.logfile && logTracker4.enableLogWriting();
|
|
10498
10121
|
try {
|
|
10499
10122
|
await globalSettings();
|
|
10500
10123
|
} catch (e) {
|
|
10501
|
-
|
|
10124
|
+
logger24.error(`Error loading global settings:
|
|
10502
10125
|
` + String(e));
|
|
10503
10126
|
}
|
|
10504
10127
|
}).hook("postAction", async (command2) => {
|
|
10505
10128
|
if (logTracker4.shouldWriteLogsToFile) {
|
|
10506
10129
|
try {
|
|
10507
10130
|
let logFile = await logTracker4.writeToFile(command2.getOptionValue("logfile"));
|
|
10508
|
-
|
|
10131
|
+
logger24.log(`Debug logs are written to: ${logFile}`);
|
|
10509
10132
|
} catch {
|
|
10510
10133
|
}
|
|
10511
|
-
|
|
10134
|
+
logger24.outro(CLI_COLORS5.success("Done!"));
|
|
10512
10135
|
}
|
|
10513
10136
|
});
|
|
10514
10137
|
command("init").description("Initialize Storybook into your project").option("-f --force", "Force add Storybook").option("-s --skip-install", "Skip installing deps").addOption(
|
|
@@ -10525,7 +10148,7 @@ command("add <addon>").description("Add an addon to your Storybook").addOption(
|
|
|
10525
10148
|
)
|
|
10526
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) => {
|
|
10527
10150
|
withTelemetry("add", { cliOptions: options }, async () => {
|
|
10528
|
-
|
|
10151
|
+
logger24.intro(`Setting up your project for ${addonName}`), await add(addonName, options), await telemetry2("add", { addon: addonName, source: "cli" }), logger24.outro("Done!");
|
|
10529
10152
|
}).catch(handleCommandFailure);
|
|
10530
10153
|
});
|
|
10531
10154
|
command("remove <addon>").description("Remove an addon from your Storybook").addOption(
|
|
@@ -10534,7 +10157,7 @@ command("remove <addon>").description("Remove an addon from your Storybook").add
|
|
|
10534
10157
|
)
|
|
10535
10158
|
).option("-c, --config-dir <dir-name>", "Directory where to load Storybook configurations from").option("-s --skip-install", "Skip installing deps").action(
|
|
10536
10159
|
(addonName, options) => withTelemetry("remove", { cliOptions: options }, async () => {
|
|
10537
|
-
|
|
10160
|
+
logger24.intro(`Removing ${addonName} from your Storybook`);
|
|
10538
10161
|
let packageManager = JsPackageManagerFactory3.getPackageManager({
|
|
10539
10162
|
configDir: options.configDir,
|
|
10540
10163
|
force: options.packageManager
|
|
@@ -10543,7 +10166,7 @@ command("remove <addon>").description("Remove an addon from your Storybook").add
|
|
|
10543
10166
|
configDir: options.configDir,
|
|
10544
10167
|
packageManager,
|
|
10545
10168
|
skipInstall: options.skipInstall
|
|
10546
|
-
}), await
|
|
10169
|
+
}), await telemetry2("remove", { addon: addonName, source: "cli" }), logger24.outro("Done!");
|
|
10547
10170
|
}).catch(handleCommandFailure(options.logfile))
|
|
10548
10171
|
);
|
|
10549
10172
|
command("upgrade").description(`Upgrade your Storybook packages to v${versions5.storybook}`).addOption(
|
|
@@ -10561,12 +10184,12 @@ command("upgrade").description(`Upgrade your Storybook packages to v${versions5.
|
|
|
10561
10184
|
"upgrade",
|
|
10562
10185
|
{ cliOptions: { ...options, configDir: options.configDir?.[0] } },
|
|
10563
10186
|
async () => {
|
|
10564
|
-
|
|
10187
|
+
logger24.intro(`Storybook upgrade - v${versions5.storybook}`), await upgrade(options), logger24.outro("Storybook upgrade completed!");
|
|
10565
10188
|
}
|
|
10566
10189
|
).catch(handleCommandFailure(options.logfile));
|
|
10567
10190
|
});
|
|
10568
10191
|
command("info").description("Prints debugging information about the local environment").action(async () => {
|
|
10569
|
-
|
|
10192
|
+
logger24.log(import_picocolors18.default.bold(`
|
|
10570
10193
|
Storybook Environment Info:`));
|
|
10571
10194
|
let activePackageManager = JsPackageManagerFactory3.getPackageManager().type.replace(/\d/, ""), output = await import_envinfo.default.run({
|
|
10572
10195
|
System: ["OS", "CPU", "Shell"],
|
|
@@ -10575,7 +10198,7 @@ Storybook Environment Info:`));
|
|
|
10575
10198
|
npmPackages: "{@storybook/*,*storybook*,sb,chromatic}",
|
|
10576
10199
|
npmGlobalPackages: "{@storybook/*,*storybook*,sb,chromatic}"
|
|
10577
10200
|
}), activePackageManagerLine = output.match(new RegExp(`${activePackageManager}:.*`, "i"));
|
|
10578
|
-
|
|
10201
|
+
logger24.log(
|
|
10579
10202
|
output.replace(
|
|
10580
10203
|
activePackageManagerLine,
|
|
10581
10204
|
import_picocolors18.default.bold(`${activePackageManagerLine} <----- active`)
|
|
@@ -10590,12 +10213,12 @@ command("migrate [migration]").description("Run a Storybook codemod migration on
|
|
|
10590
10213
|
'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"'
|
|
10591
10214
|
).action((migration, options) => {
|
|
10592
10215
|
withTelemetry("migrate", { cliOptions: options }, async () => {
|
|
10593
|
-
|
|
10216
|
+
logger24.intro(`Running ${migration} migration`), await migrate(migration, options), logger24.outro("Migration completed");
|
|
10594
10217
|
}).catch(handleCommandFailure(options.logfile));
|
|
10595
10218
|
});
|
|
10596
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) => {
|
|
10597
|
-
|
|
10598
|
-
|
|
10220
|
+
logger24.intro("Creating a Storybook sandbox..."), sandbox({ filterValue, ...options }).catch(handleCommandFailure).finally(() => {
|
|
10221
|
+
logger24.outro("Done!");
|
|
10599
10222
|
});
|
|
10600
10223
|
});
|
|
10601
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(
|
|
@@ -10610,7 +10233,7 @@ command("automigrate [fixId]").description("Check storybook for incompatibilitie
|
|
|
10610
10233
|
"The renderer package for the framework Storybook is using."
|
|
10611
10234
|
).option("--skip-doctor", "Skip doctor check").option("--glob <pattern>", "Glob pattern for story files (for csf-factories codemod)").action(async (fixId, options) => {
|
|
10612
10235
|
withTelemetry("automigrate", { cliOptions: options }, async () => {
|
|
10613
|
-
|
|
10236
|
+
logger24.intro(fixId ? `Running ${fixId} automigration` : "Running automigrations"), await doAutomigrate({ fixId, ...options }), logger24.outro("Done");
|
|
10614
10237
|
}).catch(handleCommandFailure(options.logfile));
|
|
10615
10238
|
});
|
|
10616
10239
|
command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").addOption(
|
|
@@ -10619,30 +10242,13 @@ command("doctor").description("Check Storybook for known problems and provide su
|
|
|
10619
10242
|
)
|
|
10620
10243
|
).option("-c, --config-dir <dir-name>", "Directory of Storybook configuration").action(async (options) => {
|
|
10621
10244
|
withTelemetry("doctor", { cliOptions: options }, async () => {
|
|
10622
|
-
|
|
10245
|
+
logger24.intro("Doctoring Storybook"), await doctor(options), logger24.outro("Done");
|
|
10623
10246
|
}).catch(handleCommandFailure(options.logfile));
|
|
10624
10247
|
});
|
|
10625
|
-
var aiCommand = command("ai").description("AI agent helpers for Storybook").option(
|
|
10626
|
-
"-o, --output <path>",
|
|
10627
|
-
"Write the prompt output to a file instead of printing it to stdout"
|
|
10628
|
-
);
|
|
10629
|
-
aiCommand.command("setup").description("Generate setup instructions to write stories for real components").addOption(
|
|
10630
|
-
new Option("--package-manager <type>", "Force package manager for installing deps").choices(
|
|
10631
|
-
Object.values(PackageManagerName3)
|
|
10632
|
-
)
|
|
10633
|
-
).option("-c, --config-dir <dir-name>", "Directory of Storybook configuration").action(async (options, cmd) => {
|
|
10634
|
-
let parentOptions = cmd.parent?.opts() ?? {}, runId = Math.random().toString(36), mergedOptions = { ...parentOptions, ...options, runId };
|
|
10635
|
-
await withTelemetry("ai-setup", { cliOptions: mergedOptions }, async () => {
|
|
10636
|
-
await aiSetup(mergedOptions);
|
|
10637
|
-
}).catch(handleCommandFailure(mergedOptions.logfile));
|
|
10638
|
-
});
|
|
10639
|
-
aiCommand.action(() => {
|
|
10640
|
-
aiCommand.outputHelp();
|
|
10641
|
-
});
|
|
10642
10248
|
program.on("command:*", ([invalidCmd]) => {
|
|
10643
10249
|
let errorMessage = ` Invalid command: ${import_picocolors18.default.bold(invalidCmd)}.
|
|
10644
10250
|
See --help for a list of available commands.`, suggestion = program.commands.map((cmd) => cmd.name()).find((cmd) => leven(cmd, invalidCmd) < 3);
|
|
10645
10251
|
suggestion && (errorMessage += `
|
|
10646
|
-
Did you mean ${import_picocolors18.default.yellow(suggestion)}?`),
|
|
10252
|
+
Did you mean ${import_picocolors18.default.yellow(suggestion)}?`), logger24.error(errorMessage), process.exit(1);
|
|
10647
10253
|
});
|
|
10648
10254
|
program.usage("<command> [options]").version(String(version)).parse(process.argv);
|