@storybook/addon-vitest 10.1.0-alpha.11 → 10.1.0-alpha.13
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/{chunk-FD2MOKYY.js → chunk-25N73QA4.js} +6 -31
- package/dist/_node-chunks/{chunk-FCFZB5YS.js → chunk-6K4PB6ZM.js} +6 -6
- package/dist/_node-chunks/{chunk-CHRIX3Z2.js → chunk-CWEKNW53.js} +7 -7
- package/dist/_node-chunks/{chunk-L7WYCUSW.js → chunk-F3U6JEPX.js} +6 -6
- package/dist/_node-chunks/{chunk-TCQNKRGF.js → chunk-FJKQJ53U.js} +7 -19
- package/dist/_node-chunks/chunk-HKZ24UC3.js +158 -0
- package/dist/_node-chunks/chunk-IZMDFVYT.js +61 -0
- package/dist/_node-chunks/{chunk-XN666246.js → chunk-NT7JGKSQ.js} +7 -7
- package/dist/_node-chunks/chunk-XHF2DJDH.js +38 -0
- package/dist/manager.js +1 -1
- package/dist/node/coverage-reporter.js +8 -8
- package/dist/node/vitest.js +24 -14
- package/dist/postinstall.js +152 -290
- package/dist/preset.js +30 -25
- package/dist/vitest-plugin/global-setup.js +8 -9
- package/dist/vitest-plugin/index.js +14 -12
- package/dist/vitest-plugin/setup-file.js +1 -1
- package/package.json +3 -7
- package/dist/_node-chunks/chunk-2WX72TIY.js +0 -35
- package/dist/_node-chunks/chunk-BEGZGAUW.js +0 -1697
- /package/dist/_browser-chunks/{chunk-ULSHVN74.js → chunk-TYJENCK5.js} +0 -0
package/dist/postinstall.js
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import CJS_COMPAT_NODE_URL_4nt6o51r4ah from 'node:url';
|
|
2
|
+
import CJS_COMPAT_NODE_PATH_4nt6o51r4ah from 'node:path';
|
|
3
|
+
import CJS_COMPAT_NODE_MODULE_4nt6o51r4ah from "node:module";
|
|
4
4
|
|
|
5
|
-
var __filename =
|
|
6
|
-
var __dirname =
|
|
7
|
-
var require =
|
|
5
|
+
var __filename = CJS_COMPAT_NODE_URL_4nt6o51r4ah.fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = CJS_COMPAT_NODE_PATH_4nt6o51r4ah.dirname(__filename);
|
|
7
|
+
var require = CJS_COMPAT_NODE_MODULE_4nt6o51r4ah.createRequire(import.meta.url);
|
|
8
8
|
|
|
9
9
|
// ------------------------------------------------------------
|
|
10
10
|
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
|
|
11
11
|
// ------------------------------------------------------------
|
|
12
12
|
import {
|
|
13
|
-
execa,
|
|
14
13
|
resolvePackageDir
|
|
15
|
-
} from "./_node-chunks/chunk-
|
|
14
|
+
} from "./_node-chunks/chunk-HKZ24UC3.js";
|
|
16
15
|
import {
|
|
17
|
-
any
|
|
18
|
-
|
|
19
|
-
up
|
|
20
|
-
} from "./_node-chunks/chunk-FD2MOKYY.js";
|
|
16
|
+
any
|
|
17
|
+
} from "./_node-chunks/chunk-25N73QA4.js";
|
|
21
18
|
import {
|
|
22
|
-
DOCUMENTATION_LINK
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
DOCUMENTATION_LINK
|
|
20
|
+
} from "./_node-chunks/chunk-FJKQJ53U.js";
|
|
21
|
+
import {
|
|
22
|
+
require_dist
|
|
23
|
+
} from "./_node-chunks/chunk-IZMDFVYT.js";
|
|
25
24
|
import {
|
|
26
25
|
dirname,
|
|
27
26
|
join,
|
|
28
27
|
relative,
|
|
29
28
|
resolve
|
|
30
|
-
} from "./_node-chunks/chunk-
|
|
29
|
+
} from "./_node-chunks/chunk-F3U6JEPX.js";
|
|
31
30
|
import {
|
|
32
31
|
require_compare,
|
|
33
32
|
require_constants,
|
|
@@ -37,11 +36,11 @@ import {
|
|
|
37
36
|
require_parse_options,
|
|
38
37
|
require_re,
|
|
39
38
|
require_semver
|
|
40
|
-
} from "./_node-chunks/chunk-
|
|
39
|
+
} from "./_node-chunks/chunk-CWEKNW53.js";
|
|
41
40
|
import {
|
|
42
41
|
__commonJS,
|
|
43
42
|
__toESM
|
|
44
|
-
} from "./_node-chunks/chunk-
|
|
43
|
+
} from "./_node-chunks/chunk-6K4PB6ZM.js";
|
|
45
44
|
|
|
46
45
|
// ../../node_modules/semver/functions/parse.js
|
|
47
46
|
var require_parse = __commonJS({
|
|
@@ -295,7 +294,7 @@ var require_cmp = __commonJS({
|
|
|
295
294
|
var require_coerce = __commonJS({
|
|
296
295
|
"../../node_modules/semver/functions/coerce.js"(exports, module) {
|
|
297
296
|
"use strict";
|
|
298
|
-
var SemVer = require_semver(), parse = require_parse(), { safeRe: re, t } = require_re(),
|
|
297
|
+
var SemVer = require_semver(), parse = require_parse(), { safeRe: re, t } = require_re(), coerce = (version, options) => {
|
|
299
298
|
if (version instanceof SemVer)
|
|
300
299
|
return version;
|
|
301
300
|
if (typeof version == "number" && (version = String(version)), typeof version != "string")
|
|
@@ -315,7 +314,7 @@ var require_coerce = __commonJS({
|
|
|
315
314
|
let major = match[2], minor = match[3] || "0", patch = match[4] || "0", prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : "", build = options.includePrerelease && match[6] ? `+${match[6]}` : "";
|
|
316
315
|
return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options);
|
|
317
316
|
};
|
|
318
|
-
module.exports =
|
|
317
|
+
module.exports = coerce;
|
|
319
318
|
}
|
|
320
319
|
});
|
|
321
320
|
|
|
@@ -820,7 +819,7 @@ var require_subset = __commonJS({
|
|
|
820
819
|
var require_semver2 = __commonJS({
|
|
821
820
|
"../../node_modules/semver/index.js"(exports, module) {
|
|
822
821
|
"use strict";
|
|
823
|
-
var internalRe = require_re(), constants = require_constants(), SemVer = require_semver(), identifiers = require_identifiers(), parse = require_parse(), valid = require_valid(), clean = require_clean(), inc = require_inc(), diff = require_diff(), major = require_major(), minor = require_minor(), patch = require_patch(), prerelease = require_prerelease(), compare = require_compare(), rcompare = require_rcompare(), compareLoose = require_compare_loose(), compareBuild = require_compare_build(), sort = require_sort(), rsort = require_rsort(), gt = require_gt(), lt = require_lt(), eq = require_eq(), neq = require_neq(), gte = require_gte(), lte = require_lte(), cmp = require_cmp(),
|
|
822
|
+
var internalRe = require_re(), constants = require_constants(), SemVer = require_semver(), identifiers = require_identifiers(), parse = require_parse(), valid = require_valid(), clean = require_clean(), inc = require_inc(), diff = require_diff(), major = require_major(), minor = require_minor(), patch = require_patch(), prerelease = require_prerelease(), compare = require_compare(), rcompare = require_rcompare(), compareLoose = require_compare_loose(), compareBuild = require_compare_build(), sort = require_sort(), rsort = require_rsort(), gt = require_gt(), lt = require_lt(), eq = require_eq(), neq = require_neq(), gte = require_gte(), lte = require_lte(), cmp = require_cmp(), coerce = require_coerce(), Comparator = require_comparator(), Range = require_range(), satisfies2 = require_satisfies(), toComparators = require_to_comparators(), maxSatisfying = require_max_satisfying(), minSatisfying = require_min_satisfying(), minVersion = require_min_version(), validRange = require_valid2(), outside = require_outside(), gtr = require_gtr(), ltr = require_ltr(), intersects = require_intersects(), simplifyRange = require_simplify(), subset = require_subset();
|
|
824
823
|
module.exports = {
|
|
825
824
|
parse,
|
|
826
825
|
valid,
|
|
@@ -844,7 +843,7 @@ var require_semver2 = __commonJS({
|
|
|
844
843
|
gte,
|
|
845
844
|
lte,
|
|
846
845
|
cmp,
|
|
847
|
-
coerce
|
|
846
|
+
coerce,
|
|
848
847
|
Comparator,
|
|
849
848
|
Range,
|
|
850
849
|
satisfies: satisfies2,
|
|
@@ -875,42 +874,21 @@ var require_semver2 = __commonJS({
|
|
|
875
874
|
import { existsSync } from "node:fs";
|
|
876
875
|
import * as fs2 from "node:fs/promises";
|
|
877
876
|
import { writeFile } from "node:fs/promises";
|
|
878
|
-
import {
|
|
879
|
-
import {
|
|
880
|
-
import { babelParse, generate, traverse } from "storybook/internal/babel";
|
|
877
|
+
import { babelParse, generate } from "storybook/internal/babel";
|
|
878
|
+
import { AddonVitestService } from "storybook/internal/cli";
|
|
881
879
|
import {
|
|
882
880
|
JsPackageManagerFactory,
|
|
883
881
|
formatFileContent,
|
|
884
|
-
getInterpretedFile,
|
|
885
882
|
getProjectRoot,
|
|
886
|
-
|
|
887
|
-
loadMainConfig,
|
|
888
|
-
scanAndTransformFiles,
|
|
889
|
-
transformImportFiles
|
|
883
|
+
getStorybookInfo
|
|
890
884
|
} from "storybook/internal/common";
|
|
891
|
-
import {
|
|
892
|
-
import {
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
// src/postinstall.ts
|
|
901
|
-
var import_semver = __toESM(require_semver2(), 1);
|
|
902
|
-
import prompts from "prompts";
|
|
903
|
-
import { dedent } from "ts-dedent";
|
|
904
|
-
|
|
905
|
-
// src/postinstall-logger.ts
|
|
906
|
-
import { isCI } from "storybook/internal/common";
|
|
907
|
-
import { colors, logger } from "storybook/internal/node-logger";
|
|
908
|
-
var fancy = process.platform !== "win32" || isCI() || process.env.TERM === "xterm-256color", step = colors.gray("\u203A"), info = colors.blue(fancy ? "\u2139" : "i"), success = colors.green(fancy ? "\u2714" : "\u221A"), warning = colors.orange(fancy ? "\u26A0" : "\u203C"), error = colors.red(fancy ? "\u2716" : "\xD7"), baseOptions = {
|
|
909
|
-
borderStyle: "round",
|
|
910
|
-
padding: 1
|
|
911
|
-
}, print = (message, options) => {
|
|
912
|
-
logger.line(1), logger.logBox(message, { ...baseOptions, ...options });
|
|
913
|
-
}, printInfo = (title, message, options) => print(message, { borderColor: "blue", title, ...options }), printWarning = (title, message, options) => print(message, { borderColor: "yellow", title, ...options }), printError = (title, message, options) => print(message, { borderColor: "red", title, ...options }), printSuccess = (title, message, options) => print(message, { borderColor: "green", title, ...options });
|
|
885
|
+
import { CLI_COLORS } from "storybook/internal/node-logger";
|
|
886
|
+
import {
|
|
887
|
+
AddonVitestPostinstallError,
|
|
888
|
+
AddonVitestPostinstallPrerequisiteCheckError
|
|
889
|
+
} from "storybook/internal/server-errors";
|
|
890
|
+
import { SupportedFramework } from "storybook/internal/types";
|
|
891
|
+
var import_semver = __toESM(require_semver2(), 1), import_ts_dedent = __toESM(require_dist(), 1);
|
|
914
892
|
|
|
915
893
|
// src/updateVitestFile.ts
|
|
916
894
|
import * as fs from "node:fs/promises";
|
|
@@ -1060,167 +1038,91 @@ var loadTemplate = async (name, replacements) => {
|
|
|
1060
1038
|
};
|
|
1061
1039
|
|
|
1062
1040
|
// src/postinstall.ts
|
|
1063
|
-
var ADDON_NAME = "@storybook/addon-vitest", EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".cts", ".mts", ".cjs", ".mjs"], addonA11yName = "@storybook/addon-a11y"
|
|
1064
|
-
function nameMatches(name, pattern) {
|
|
1065
|
-
return !!(name === pattern || name.includes(`${pattern}${sep}`) || name.includes(`${pattern}${posix.sep}`));
|
|
1066
|
-
}
|
|
1067
|
-
var logErrors = (...args) => {
|
|
1068
|
-
hasErrors = !0, printError(...args);
|
|
1069
|
-
}, findFile = (basename, extensions = EXTENSIONS) => any(
|
|
1070
|
-
extensions.map((ext) => basename + ext),
|
|
1071
|
-
{ last: getProjectRoot() }
|
|
1072
|
-
);
|
|
1041
|
+
var ADDON_NAME = "@storybook/addon-vitest", EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".cts", ".mts", ".cjs", ".mjs"], addonA11yName = "@storybook/addon-a11y";
|
|
1073
1042
|
async function postInstall(options) {
|
|
1074
|
-
|
|
1075
|
-
"\u{1F44B} Howdy!",
|
|
1076
|
-
dedent`
|
|
1077
|
-
I'm the installation helper for ${ADDON_NAME}
|
|
1078
|
-
|
|
1079
|
-
Hold on for a moment while I look at your project and get it set up...
|
|
1080
|
-
`
|
|
1081
|
-
);
|
|
1082
|
-
let packageManager = JsPackageManagerFactory.getPackageManager({
|
|
1043
|
+
let errors = [], { logger, prompt } = options, packageManager = JsPackageManagerFactory.getPackageManager({
|
|
1083
1044
|
force: options.packageManager
|
|
1084
|
-
}),
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1045
|
+
}), findFile = (basename, extensions = EXTENSIONS) => any(
|
|
1046
|
+
extensions.map((ext) => basename + ext),
|
|
1047
|
+
{ last: getProjectRoot(), cwd: options.configDir }
|
|
1048
|
+
), vitestVersionSpecifier = await packageManager.getInstalledVersion("vitest");
|
|
1049
|
+
logger.debug(`Vitest version specifier: ${vitestVersionSpecifier}`);
|
|
1050
|
+
let isVitest3_2To4 = vitestVersionSpecifier ? (0, import_semver.satisfies)(vitestVersionSpecifier, ">=3.2.0 <4.0.0") : !1, isVitest4OrNewer = vitestVersionSpecifier ? (0, import_semver.satisfies)(vitestVersionSpecifier, ">=4.0.0") : !0, info = await getStorybookInfo(options.configDir), allDeps = packageManager.getAllDependencies(), addonVitestService = new AddonVitestService(), compatibilityResult = await addonVitestService.validateCompatibility({
|
|
1051
|
+
packageManager,
|
|
1052
|
+
framework: info.framework,
|
|
1053
|
+
builder: info.builder
|
|
1054
|
+
}), result = null;
|
|
1055
|
+
if (!compatibilityResult.compatible && compatibilityResult.reasons) {
|
|
1056
|
+
let reasons = compatibilityResult.reasons.map((r) => `\u2022 ${CLI_COLORS.error(r)}`);
|
|
1057
|
+
reasons.unshift(import_ts_dedent.dedent`
|
|
1058
|
+
Automated setup failed
|
|
1059
|
+
The following packages have incompatibilities that prevent automated setup:
|
|
1060
|
+
`), reasons.push(
|
|
1061
|
+
import_ts_dedent.dedent`
|
|
1062
|
+
You can fix these issues and rerun the command to reinstall. If you wish to roll back the installation, remove ${ADDON_NAME} from the "addons" array
|
|
1063
|
+
in your main Storybook config file and remove the dependency from your package.json file.
|
|
1095
1064
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
"@storybook/nextjs-vite"
|
|
1101
|
-
]), await packageManager.removeDependencies(["@storybook/nextjs"]), traverse(config._ast, {
|
|
1102
|
-
StringLiteral(path) {
|
|
1103
|
-
path.node.value === "@storybook/nextjs" && (path.node.value = "@storybook/nextjs-vite");
|
|
1104
|
-
}
|
|
1105
|
-
}), await writeConfig(config, mainJsPath), info2.frameworkPackageName = "@storybook/nextjs-vite", info2.builderPackageName = "@storybook/builder-vite", await scanAndTransformFiles({
|
|
1106
|
-
promptMessage: "Enter a glob to scan for all @storybook/nextjs imports to substitute with @storybook/nextjs-vite:",
|
|
1107
|
-
force: options.yes,
|
|
1108
|
-
dryRun: !1,
|
|
1109
|
-
transformFn: (files, options2, dryRun) => transformImportFiles(files, options2, dryRun),
|
|
1110
|
-
transformOptions: {
|
|
1111
|
-
"@storybook/nextjs": "@storybook/nextjs-vite"
|
|
1112
|
-
}
|
|
1113
|
-
}));
|
|
1114
|
-
let annotationsImport = SUPPORTED_FRAMEWORKS.find(
|
|
1115
|
-
(f) => nameMatches(info2.frameworkPackageName, f)
|
|
1116
|
-
) ? info2.frameworkPackageName === "@storybook/nextjs" ? "@storybook/nextjs-vite" : info2.frameworkPackageName : null, isRendererSupported = !!annotationsImport, result = await (async () => {
|
|
1117
|
-
let reasons = [];
|
|
1118
|
-
hasCustomWebpackConfig && reasons.push("\u2022 The addon can not be used with a custom Webpack configuration."), !nameMatches(info2.frameworkPackageName, "@storybook/nextjs") && !nameMatches(info2.builderPackageName, "@storybook/builder-vite") && reasons.push(
|
|
1119
|
-
"\u2022 The addon can only be used with a Vite-based Storybook framework or Next.js."
|
|
1120
|
-
), isRendererSupported || reasons.push(dedent`
|
|
1121
|
-
• The addon cannot yet be used with ${info2.frameworkPackageName}
|
|
1122
|
-
`), coercedVitestVersion && !(0, import_semver.satisfies)(coercedVitestVersion, ">=3.0.0") && reasons.push(dedent`
|
|
1123
|
-
• The addon requires Vitest 3.0.0 or higher. You are currently using ${vitestVersionSpecifier}.
|
|
1124
|
-
Please update all of your Vitest dependencies and try again.
|
|
1125
|
-
`);
|
|
1126
|
-
let mswVersionSpecifier = await packageManager.getInstalledVersion("msw"), coercedMswVersion = mswVersionSpecifier ? (0, import_semver.coerce)(mswVersionSpecifier) : null;
|
|
1127
|
-
return coercedMswVersion && !(0, import_semver.satisfies)(coercedMswVersion, ">=2.0.0") && reasons.push(dedent`
|
|
1128
|
-
• The addon uses Vitest behind the scenes, which supports only version 2 and above of MSW. However, we have detected version ${coercedMswVersion.version} in this project.
|
|
1129
|
-
Please update the 'msw' package and try again.
|
|
1130
|
-
`), nameMatches(info2.frameworkPackageName, "@storybook/nextjs") && (await packageManager.getInstalledVersion("next") || reasons.push(dedent`
|
|
1131
|
-
• You are using @storybook/nextjs without having "next" installed.
|
|
1132
|
-
Please install "next" or use a different Storybook framework integration and try again.
|
|
1133
|
-
`)), reasons.length > 0 ? (reasons.unshift(
|
|
1134
|
-
"@storybook/addon-vitest's automated setup failed due to the following package incompatibilities:"
|
|
1135
|
-
), reasons.push("--------------------------------"), reasons.push(
|
|
1136
|
-
dedent`
|
|
1137
|
-
You can fix these issues and rerun the command to reinstall. If you wish to roll back the installation, remove ${ADDON_NAME} from the "addons" array
|
|
1138
|
-
in your main Storybook config file and remove the dependency from your package.json file.
|
|
1139
|
-
`
|
|
1140
|
-
), isRendererSupported ? reasons.push(
|
|
1141
|
-
dedent`
|
|
1142
|
-
Fear not, however, you can follow the manual installation process instead at:
|
|
1143
|
-
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}#manual-setup
|
|
1144
|
-
`
|
|
1145
|
-
) : reasons.push(
|
|
1146
|
-
dedent`
|
|
1147
|
-
Please check the documentation for more information about its requirements and installation:
|
|
1148
|
-
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}
|
|
1149
|
-
`
|
|
1150
|
-
), reasons.map((r) => r.trim()).join(`
|
|
1065
|
+
Please check the documentation for more information about its requirements and installation:
|
|
1066
|
+
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}
|
|
1067
|
+
`
|
|
1068
|
+
), result = reasons.map((r) => r.trim()).join(`
|
|
1151
1069
|
|
|
1152
|
-
`)
|
|
1153
|
-
})();
|
|
1154
|
-
if (result) {
|
|
1155
|
-
logErrors("\u26D4\uFE0F Sorry!", result), logger2.line(1);
|
|
1156
|
-
return;
|
|
1070
|
+
`);
|
|
1157
1071
|
}
|
|
1158
|
-
if (
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1072
|
+
if (result)
|
|
1073
|
+
throw logger.error(result), new AddonVitestPostinstallPrerequisiteCheckError({
|
|
1074
|
+
reasons: compatibilityResult.reasons
|
|
1075
|
+
});
|
|
1076
|
+
if (!options.skipDependencyManagement) {
|
|
1077
|
+
let versionedDependencies = await addonVitestService.collectDependencies(packageManager);
|
|
1078
|
+
info.framework === SupportedFramework.NEXTJS && packageManager.getAllDependencies()["@storybook/nextjs-vite"];
|
|
1079
|
+
let v8Version = await packageManager.getInstalledVersion("@vitest/coverage-v8"), istanbulVersion = await packageManager.getInstalledVersion("@vitest/coverage-istanbul");
|
|
1080
|
+
!v8Version && !istanbulVersion && logger.step(
|
|
1081
|
+
import_ts_dedent.dedent`
|
|
1082
|
+
You don't seem to have a coverage reporter installed. Vitest needs either V8 or Istanbul to generate coverage reports.
|
|
1165
1083
|
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
console.error("Failed to install @storybook/nextjs-vite. Please install it manually");
|
|
1174
|
-
}
|
|
1084
|
+
Adding "@vitest/coverage-v8" to enable coverage reporting.
|
|
1085
|
+
Read more about Vitest coverage providers at https://vitest.dev/guide/coverage.html#coverage-providers
|
|
1086
|
+
`
|
|
1087
|
+
), versionedDependencies.length > 0 && (logger.step("Adding dependencies to your package.json"), logger.log(" " + versionedDependencies.join(", ")), await packageManager.addDependencies(
|
|
1088
|
+
{ type: "devDependencies", skipInstall: !0 },
|
|
1089
|
+
versionedDependencies
|
|
1090
|
+
)), options.skipInstall || await packageManager.installDependencies();
|
|
1175
1091
|
}
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
), logger2.line(1), logger2.plain(`${step} Installing dependencies:`), logger2.plain(" " + versionedDependencies.join(", "))), await packageManager.installDependencies(), logger2.line(1), options.skipInstall)
|
|
1191
|
-
logger2.plain("Skipping Playwright installation, please run this command manually:"), logger2.plain(" npx playwright install chromium --with-deps");
|
|
1192
|
-
else {
|
|
1193
|
-
logger2.plain(`${step} Configuring Playwright with Chromium (this might take some time):`), logger2.plain(" npx playwright install chromium --with-deps");
|
|
1194
|
-
try {
|
|
1195
|
-
await packageManager.executeCommand({
|
|
1196
|
-
command: "npx",
|
|
1197
|
-
args: ["playwright", "install", "chromium", "--with-deps"]
|
|
1198
|
-
});
|
|
1199
|
-
} catch {
|
|
1200
|
-
console.error("Failed to install Playwright. Please install it manually");
|
|
1092
|
+
if (!options.skipDependencyManagement)
|
|
1093
|
+
if (options.skipInstall)
|
|
1094
|
+
logger.warn(import_ts_dedent.dedent`
|
|
1095
|
+
Playwright browser binaries installation skipped. Please run the following command manually later:
|
|
1096
|
+
${CLI_COLORS.cta("npx playwright install chromium --with-deps")}
|
|
1097
|
+
`);
|
|
1098
|
+
else {
|
|
1099
|
+
let { errors: playwrightErrors } = await addonVitestService.installPlaywright(
|
|
1100
|
+
packageManager,
|
|
1101
|
+
{
|
|
1102
|
+
yes: options.yes
|
|
1103
|
+
}
|
|
1104
|
+
);
|
|
1105
|
+
errors.push(...playwrightErrors);
|
|
1201
1106
|
}
|
|
1202
|
-
}
|
|
1203
1107
|
let fileExtension = allDeps.typescript || findFile("tsconfig", [...EXTENSIONS, ".json"]) ? "ts" : "js", vitestSetupFile = resolve(options.configDir, `vitest.setup.${fileExtension}`);
|
|
1204
1108
|
if (existsSync(vitestSetupFile)) {
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
),
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
vitestSetupFile,
|
|
1223
|
-
dedent`
|
|
1109
|
+
let errorMessage = import_ts_dedent.dedent`
|
|
1110
|
+
Found an existing Vitest setup file:
|
|
1111
|
+
${vitestSetupFile}
|
|
1112
|
+
Please refer to the documentation to complete the setup manually:
|
|
1113
|
+
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}#manual-setup
|
|
1114
|
+
`;
|
|
1115
|
+
logger.line(), logger.error(`${errorMessage}
|
|
1116
|
+
`), errors.push("Found existing Vitest setup file");
|
|
1117
|
+
} else {
|
|
1118
|
+
logger.step("Creating a Vitest setup file for Storybook:"), logger.log(`${vitestSetupFile}
|
|
1119
|
+
`);
|
|
1120
|
+
let previewExists = EXTENSIONS.map((ext) => resolve(options.configDir, `preview${ext}`)).some(
|
|
1121
|
+
existsSync
|
|
1122
|
+
), imports = [`import { setProjectAnnotations } from '${info.frameworkPackage}';`], projectAnnotations = [];
|
|
1123
|
+
previewExists && (imports.push("import * as projectAnnotations from './preview';"), projectAnnotations.push("projectAnnotations")), await writeFile(
|
|
1124
|
+
vitestSetupFile,
|
|
1125
|
+
import_ts_dedent.dedent`
|
|
1224
1126
|
${imports.join(`
|
|
1225
1127
|
`)}
|
|
1226
1128
|
|
|
@@ -1228,7 +1130,8 @@ async function postInstall(options) {
|
|
|
1228
1130
|
// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
|
|
1229
1131
|
setProjectAnnotations([${projectAnnotations.join(", ")}]);
|
|
1230
1132
|
`
|
|
1231
|
-
|
|
1133
|
+
);
|
|
1134
|
+
}
|
|
1232
1135
|
let vitestWorkspaceFile = findFile("vitest.workspace", [".ts", ".js", ".json"]), viteConfigFile = findFile("vite.config"), vitestConfigFile = findFile("vitest.config"), vitestShimFile = findFile("vitest.shims.d"), rootConfig = vitestConfigFile || viteConfigFile;
|
|
1233
1136
|
fileExtension === "ts" && !vitestShimFile && await writeFile(
|
|
1234
1137
|
"vitest.shims.d.ts",
|
|
@@ -1243,13 +1146,12 @@ async function postInstall(options) {
|
|
|
1243
1146
|
}).then((t) => t.replace(`
|
|
1244
1147
|
'ROOT_CONFIG',`, "").replace(/\s+extends: '',/, "")), workspaceFile = await fs2.readFile(vitestWorkspaceFile, "utf8"), source = babelParse(workspaceTemplate), target = babelParse(workspaceFile);
|
|
1245
1148
|
if (updateWorkspaceFile(source, target)) {
|
|
1246
|
-
|
|
1149
|
+
logger.step("Updating your Vitest workspace file..."), logger.log(`${vitestWorkspaceFile}`);
|
|
1247
1150
|
let formattedContent = await formatFileContent(vitestWorkspaceFile, generate(target).code);
|
|
1248
1151
|
await writeFile(vitestWorkspaceFile, formattedContent);
|
|
1249
|
-
} else
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
dedent`
|
|
1152
|
+
} else
|
|
1153
|
+
logger.error(
|
|
1154
|
+
import_ts_dedent.dedent`
|
|
1253
1155
|
Could not update existing Vitest workspace file:
|
|
1254
1156
|
${vitestWorkspaceFile}
|
|
1255
1157
|
|
|
@@ -1259,9 +1161,7 @@ async function postInstall(options) {
|
|
|
1259
1161
|
Please refer to the documentation to complete the setup manually:
|
|
1260
1162
|
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}#manual-setup
|
|
1261
1163
|
`
|
|
1262
|
-
),
|
|
1263
|
-
return;
|
|
1264
|
-
}
|
|
1164
|
+
), errors.push("Unable to update existing Vitest workspace file");
|
|
1265
1165
|
} else if (rootConfig) {
|
|
1266
1166
|
let target, updated, configFile = await fs2.readFile(rootConfig, "utf8"), configFileHasTypeReference = configFile.match(
|
|
1267
1167
|
/\/\/\/\s*<reference\s+types=["']vitest\/config["']\s*\/>/
|
|
@@ -1274,7 +1174,7 @@ async function postInstall(options) {
|
|
|
1274
1174
|
target = babelParse(configFile), updated = updateConfigFile(source, target);
|
|
1275
1175
|
}
|
|
1276
1176
|
if (target && updated) {
|
|
1277
|
-
|
|
1177
|
+
logger.step(`Updating your ${vitestConfigFile ? "Vitest" : "Vite"} config file:`), logger.log(` ${rootConfig}`);
|
|
1278
1178
|
let formattedContent = await formatFileContent(rootConfig, generate(target).code);
|
|
1279
1179
|
await writeFile(
|
|
1280
1180
|
rootConfig,
|
|
@@ -1282,108 +1182,70 @@ async function postInstall(options) {
|
|
|
1282
1182
|
` + formattedContent : formattedContent
|
|
1283
1183
|
);
|
|
1284
1184
|
} else
|
|
1285
|
-
|
|
1286
|
-
"\u{1F6A8} Oh no!",
|
|
1287
|
-
dedent`
|
|
1185
|
+
logger.error(import_ts_dedent.dedent`
|
|
1288
1186
|
We were unable to update your existing ${vitestConfigFile ? "Vitest" : "Vite"} config file.
|
|
1289
1187
|
|
|
1290
1188
|
Please refer to the documentation to complete the setup manually:
|
|
1291
1189
|
https://storybook.js.org/docs/writing-tests/integrations/vitest-addon#manual-setup
|
|
1292
|
-
`
|
|
1293
|
-
);
|
|
1190
|
+
`), errors.push("Unable to update existing Vitest config file");
|
|
1294
1191
|
} else {
|
|
1295
|
-
let newConfigFile = resolve(`vitest.config.${fileExtension}`), configTemplate = await loadTemplate(getTemplateName(), {
|
|
1192
|
+
let parentDir = dirname(options.configDir), newConfigFile = resolve(parentDir, `vitest.config.${fileExtension}`), configTemplate = await loadTemplate(getTemplateName(), {
|
|
1296
1193
|
CONFIG_DIR: options.configDir,
|
|
1297
1194
|
SETUP_FILE: relative(dirname(newConfigFile), vitestSetupFile)
|
|
1298
1195
|
});
|
|
1299
|
-
|
|
1196
|
+
logger.step("Creating a Vitest config file:"), logger.log(`${newConfigFile}`);
|
|
1300
1197
|
let formattedContent = await formatFileContent(newConfigFile, configTemplate);
|
|
1301
1198
|
await writeFile(newConfigFile, formattedContent);
|
|
1302
1199
|
}
|
|
1303
|
-
if (
|
|
1200
|
+
if (info.addons.find((addon) => addon.includes(addonA11yName)))
|
|
1304
1201
|
try {
|
|
1305
|
-
|
|
1202
|
+
let command = [
|
|
1306
1203
|
"storybook",
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
],
|
|
1204
|
+
"automigrate",
|
|
1205
|
+
"addon-a11y-addon-test",
|
|
1206
|
+
"--loglevel",
|
|
1207
|
+
"silent",
|
|
1208
|
+
"--yes",
|
|
1209
|
+
"--skip-doctor"
|
|
1210
|
+
];
|
|
1211
|
+
options.packageManager && command.push("--package-manager", options.packageManager), options.skipInstall && command.push("--skip-install"), options.configDir !== ".storybook" && command.push("--config-dir", options.configDir), await prompt.executeTask(
|
|
1212
|
+
// TODO: Remove stdio: 'ignore' once we have a way to log the output of the command properly
|
|
1213
|
+
() => packageManager.runPackageCommand({ args: command, stdio: "ignore" }),
|
|
1318
1214
|
{
|
|
1319
|
-
|
|
1215
|
+
intro: "Setting up a11y addon for @storybook/addon-vitest",
|
|
1216
|
+
error: "Failed to setup a11y addon for @storybook/addon-vitest",
|
|
1217
|
+
success: "a11y addon setup successfully"
|
|
1320
1218
|
}
|
|
1321
1219
|
);
|
|
1322
1220
|
} catch (e) {
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
dedent`
|
|
1326
|
-
We have detected that you have ${addonA11yName} installed but could not automatically set it up for @storybook/addon-vitest:
|
|
1327
|
-
|
|
1328
|
-
${e instanceof Error ? e.message : String(e)}
|
|
1329
|
-
|
|
1221
|
+
logger.error(import_ts_dedent.dedent`
|
|
1222
|
+
Could not automatically set up ${addonA11yName} for @storybook/addon-vitest.
|
|
1330
1223
|
Please refer to the documentation to complete the setup manually:
|
|
1331
1224
|
https://storybook.js.org/docs/writing-tests/accessibility-testing#test-addon-integration
|
|
1332
|
-
`
|
|
1225
|
+
`), errors.push(
|
|
1226
|
+
"The @storybook/addon-a11y couldn't be set up for the Vitest addon" + (e instanceof Error ? e.stack : String(e))
|
|
1333
1227
|
);
|
|
1334
1228
|
}
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
dedent`
|
|
1338
|
-
@storybook/addon-vitest was installed successfully, but there were some errors during the setup process.
|
|
1339
|
-
|
|
1340
|
-
Please refer to the documentation to complete the setup manually and check the errors above:
|
|
1341
|
-
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}#manual-setup
|
|
1342
|
-
`
|
|
1343
|
-
) : printSuccess(
|
|
1344
|
-
"\u{1F389} All done!",
|
|
1345
|
-
dedent`
|
|
1229
|
+
let runCommand = rootConfig ? "npx vitest --project=storybook" : "npx vitest";
|
|
1230
|
+
if (errors.length === 0)
|
|
1231
|
+
logger.step(CLI_COLORS.success("@storybook/addon-vitest setup completed successfully")), logger.log(import_ts_dedent.dedent`
|
|
1346
1232
|
@storybook/addon-vitest is now configured and you're ready to run your tests!
|
|
1347
|
-
|
|
1348
1233
|
Here are a couple of tips to get you started:
|
|
1349
|
-
|
|
1350
|
-
•
|
|
1351
|
-
|
|
1234
|
+
|
|
1235
|
+
• You can run tests with "${CLI_COLORS.cta(runCommand)}"
|
|
1236
|
+
• Vitest IDE extension shows all stories as tests in your editor!
|
|
1237
|
+
|
|
1352
1238
|
Check the documentation for more information about its features and options at:
|
|
1353
1239
|
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}
|
|
1240
|
+
`);
|
|
1241
|
+
else
|
|
1242
|
+
throw logger.warn(
|
|
1243
|
+
import_ts_dedent.dedent`
|
|
1244
|
+
Done, but with errors!
|
|
1245
|
+
@storybook/addon-vitest was installed successfully, but there were some errors during the setup process. Please refer to the documentation to complete the setup manually and check the errors above:
|
|
1246
|
+
https://storybook.js.org/docs/next/${DOCUMENTATION_LINK}#manual-setup
|
|
1354
1247
|
`
|
|
1355
|
-
|
|
1356
|
-
}
|
|
1357
|
-
async function getPackageNameFromPath(input) {
|
|
1358
|
-
let path = input.startsWith("file://") ? fileURLToPath(input) : input;
|
|
1359
|
-
if (!isAbsolute(path))
|
|
1360
|
-
return path;
|
|
1361
|
-
let packageJsonPath = up2({ cwd: path });
|
|
1362
|
-
if (!packageJsonPath)
|
|
1363
|
-
throw new Error(`Could not find package.json in path: ${path}`);
|
|
1364
|
-
let { default: packageJson } = await import(pathToFileURL(packageJsonPath).href, {
|
|
1365
|
-
with: { type: "json" }
|
|
1366
|
-
});
|
|
1367
|
-
return packageJson.name;
|
|
1368
|
-
}
|
|
1369
|
-
async function getStorybookInfo({ configDir, packageManager: pkgMgr }) {
|
|
1370
|
-
let packageManager = JsPackageManagerFactory.getPackageManager({ force: pkgMgr, configDir }), { packageJson } = packageManager.primaryPackageJson, config = await loadMainConfig({ configDir }), { presets } = await experimental_loadStorybook({
|
|
1371
|
-
configDir,
|
|
1372
|
-
packageJson
|
|
1373
|
-
}), framework = await presets.apply("framework", {}), core = await presets.apply("core", {}), { builder, renderer } = core;
|
|
1374
|
-
if (!builder)
|
|
1375
|
-
throw new Error("Could not detect your Storybook builder.");
|
|
1376
|
-
let frameworkPackageName = await getPackageNameFromPath(
|
|
1377
|
-
typeof framework == "string" ? framework : framework.name
|
|
1378
|
-
), builderPackageName = await getPackageNameFromPath(
|
|
1379
|
-
typeof builder == "string" ? builder : builder.name
|
|
1380
|
-
), rendererPackageName;
|
|
1381
|
-
return renderer && (rendererPackageName = await getPackageNameFromPath(renderer)), {
|
|
1382
|
-
frameworkPackageName,
|
|
1383
|
-
builderPackageName,
|
|
1384
|
-
rendererPackageName,
|
|
1385
|
-
addons: getAddonNames(config)
|
|
1386
|
-
};
|
|
1248
|
+
), new AddonVitestPostinstallError({ errors });
|
|
1387
1249
|
}
|
|
1388
1250
|
export {
|
|
1389
1251
|
postInstall as default
|