@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.
- package/dist/_node-chunks/{block-dependencies-versions-KNOD2BWP.js → block-dependencies-versions-7OYN4OJ6.js} +11 -11
- package/dist/_node-chunks/{block-experimental-addon-test-I3NQZ67T.js → block-experimental-addon-test-2YUVRX5Y.js} +9 -9
- package/dist/_node-chunks/{block-major-version-DMTKXUJW.js → block-major-version-SNHXUXIT.js} +9 -9
- package/dist/_node-chunks/{block-node-version-SYSCMPRY.js → block-node-version-NPHJGOFN.js} +9 -9
- package/dist/_node-chunks/{block-webpack5-frameworks-DT3SZDJW.js → block-webpack5-frameworks-GZA34OZU.js} +11 -11
- package/dist/_node-chunks/{chunk-DN3UQRPJ.js → chunk-3OLDFVDH.js} +8 -8
- package/dist/_node-chunks/{chunk-4S7L4PUE.js → chunk-46TO6QSJ.js} +32 -109
- package/dist/_node-chunks/{chunk-5EYTFADV.js → chunk-7UM5AIIV.js} +11 -7
- package/dist/_node-chunks/{chunk-7T5TVMZN.js → chunk-QXN4FHHX.js} +10 -10
- package/dist/_node-chunks/chunk-RSLATG3U.js +11 -0
- package/dist/_node-chunks/{globby-N7FUCNB3.js → globby-SCRW7ORA.js} +8 -8
- package/dist/_node-chunks/{p-limit-T5KZSKYN.js → p-limit-EE6XMDEK.js} +7 -7
- package/dist/_node-chunks/{run-MGTW4EFF.js → run-XZO7FX4L.js} +115 -510
- package/dist/bin/index.js +7 -7
- package/package.json +7 -5
- package/dist/_node-chunks/chunk-C7NSVZ7N.js +0 -115
- package/dist/_node-chunks/chunk-DUE3AZ4P.js +0 -23
- package/dist/_node-chunks/chunk-EOXTAHPM.js +0 -11
- package/dist/_node-chunks/chunk-LRDUNZP3.js +0 -638
- package/dist/_node-chunks/chunk-MSLRLTEZ.js +0 -20
- package/dist/_node-chunks/monorepo-3AUONKTW.js +0 -119
- package/dist/_node-chunks/monorepo-optimized-tests-relaxed-limits-no-story-deletion-UJ6Z3SDQ.js +0 -119
- package/dist/_node-chunks/optimized-tests-ZFPEYEWX.js +0 -20
- package/dist/_node-chunks/pattern-copy-play-4RLZSOFB.js +0 -810
- package/dist/_node-chunks/relaxed-limits-RJIY3AVP.js +0 -115
- package/dist/_node-chunks/setup-YM2FCT2N.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-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-
|
|
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() {
|
|
@@ -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),
|
|
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
|
|
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
|
|
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
|
|
9991
|
-
import { dedent as
|
|
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
|
|
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
|
-
|
|
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}...`),
|
|
9642
|
+
taskLog.message(`Checking automigrations for ${projectName}...`), logger22.debug(`Processing project: ${projectName}`);
|
|
10021
9643
|
for (let fix of fixes)
|
|
10022
9644
|
try {
|
|
10023
|
-
|
|
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"),
|
|
9658
|
+
collectResult(fix, project, "check_failed"), logger22.debug(
|
|
10037
9659
|
`Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`
|
|
10038
|
-
),
|
|
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(`${
|
|
9674
|
+
taskLog.message(`${CLI_COLORS3.success(`${logger22.SYMBOLS.success} ${fixId}`)}`);
|
|
10053
9675
|
}), failedAutomigrations.forEach((fixId) => {
|
|
10054
|
-
taskLog.message(`${CLI_COLORS3.error(`${
|
|
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
|
|
10073
|
-
|
|
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
|
|
10077
|
-
|
|
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
|
-
|
|
9748
|
+
logger22.debug(`${message}`);
|
|
10127
9749
|
},
|
|
10128
9750
|
error: (message) => {
|
|
10129
|
-
|
|
9751
|
+
logger22.debug(`${message}`);
|
|
10130
9752
|
},
|
|
10131
9753
|
success: (message) => {
|
|
10132
|
-
|
|
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(`${
|
|
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(`${
|
|
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(),
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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") ?
|
|
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
|
-
|
|
9937
|
+
logger23.log(automigrationLinksMessage);
|
|
10316
9938
|
}
|
|
10317
|
-
|
|
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
|
|
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
|
-
|
|
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 ?
|
|
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
|
-
`)}`) :
|
|
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
|
|
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
|
|
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
|
-
|
|
9998
|
+
logger23.error(dedent17`Blockers detected\n\n${message}`);
|
|
10377
9999
|
}))
|
|
10378
|
-
throw new
|
|
10000
|
+
throw new HandledError("Blockers detected");
|
|
10379
10001
|
if (storybookProjects.some((project) => {
|
|
10380
|
-
if (!project.isCanary && (0,
|
|
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
|
-
|
|
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
|
-
|
|
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 ?
|
|
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() && (
|
|
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() :
|
|
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
|
-
|
|
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
|
|
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
|
|
10104
|
+
error instanceof HandledError2 || logger24.error(String(error));
|
|
10483
10105
|
try {
|
|
10484
10106
|
let logFile = await logTracker4.writeToFile(logFilePath);
|
|
10485
|
-
|
|
10107
|
+
logger24.log(`Debug logs are written to: ${logFile}`);
|
|
10486
10108
|
} catch {
|
|
10487
10109
|
}
|
|
10488
|
-
|
|
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 &&
|
|
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
|
-
|
|
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
|
-
|
|
10131
|
+
logger24.log(`Debug logs are written to: ${logFile}`);
|
|
10510
10132
|
} catch {
|
|
10511
10133
|
}
|
|
10512
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
10599
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)}?`),
|
|
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);
|