@storybook/core-common 8.0.0-alpha.9 → 8.0.0-beta.1

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/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
- import { PresetConfig, CoreCommon_ResolvedAddonPreset, CoreCommon_ResolvedAddonVirtual, LoadedPreset, Presets, CLIOptions, LoadOptions, BuilderOptions, StorybookConfigRaw, CoreCommon_AddonInfo, Options as Options$2, PackageJson, CoreCommon_StorybookInfo, Ref, StorybookConfig, StoriesEntry, NormalizedStoriesSpecifier } from '@storybook/types';
1
+ import { PresetConfig, CoreCommon_ResolvedAddonPreset, CoreCommon_ResolvedAddonVirtual, LoadedPreset, Presets, CLIOptions, LoadOptions, BuilderOptions, StorybookConfigRaw, PackageJson, CoreCommon_AddonInfo, Options as Options$2, CoreCommon_StorybookInfo, Ref, StorybookConfig, StoriesEntry, NormalizedStoriesSpecifier } from '@storybook/types';
2
+ export { PackageJson } from '@storybook/types';
2
3
  import * as Cache from 'file-system-cache';
3
4
  import Cache__default from 'file-system-cache';
5
+ import { WriteStream } from 'fs-extra';
6
+ import { CommonOptions } from 'execa';
4
7
 
5
8
  type InterPresetOptions = Omit<CLIOptions & LoadOptions & BuilderOptions & {
6
9
  isCritical?: boolean;
@@ -36,6 +39,233 @@ declare function loadAllPresets(options: CLIOptions & LoadOptions & BuilderOptio
36
39
 
37
40
  declare const cache: Cache.FileSystemCache;
38
41
 
42
+ type PackageJsonWithDepsAndDevDeps = PackageJson & Required<Pick<PackageJson, 'dependencies' | 'devDependencies'>>;
43
+ type PackageJsonWithMaybeDeps = Partial<Pick<PackageJson, 'dependencies' | 'devDependencies' | 'peerDependencies' | 'files'>>;
44
+
45
+ type PackageMetadata = {
46
+ version: string;
47
+ location?: string;
48
+ reasons?: string[];
49
+ };
50
+ type InstallationMetadata = {
51
+ dependencies: Record<string, PackageMetadata[]>;
52
+ duplicatedDependencies: Record<string, string[]>;
53
+ infoCommand: string;
54
+ dedupeCommand: string;
55
+ };
56
+
57
+ type PackageManagerName = 'npm' | 'yarn1' | 'yarn2' | 'pnpm';
58
+ /**
59
+ * Extract package name and version from input
60
+ *
61
+ * @param pkg A string like `@storybook/cli`, `react` or `react@^16`
62
+ * @return A tuple of 2 elements: [packageName, packageVersion]
63
+ */
64
+ declare function getPackageDetails(pkg: string): [string, string?];
65
+ interface JsPackageManagerOptions {
66
+ cwd?: string;
67
+ }
68
+ declare abstract class JsPackageManager {
69
+ abstract readonly type: PackageManagerName;
70
+ abstract initPackageJson(): Promise<void>;
71
+ abstract getRunStorybookCommand(): string;
72
+ abstract getRunCommand(command: string): string;
73
+ readonly cwd?: string;
74
+ abstract getPackageJSON(packageName: string, basePath?: string): Promise<PackageJson | null>;
75
+ getPackageVersion(packageName: string, basePath?: string | undefined): Promise<string | null>;
76
+ setRegistryURL(url: string): Promise<void>;
77
+ getRegistryURL(): Promise<string | undefined>;
78
+ constructor(options?: JsPackageManagerOptions);
79
+ /** Detect whether Storybook gets initialized in a monorepository/workspace environment
80
+ * The cwd doesn't have to be the root of the monorepo, it can be a subdirectory
81
+ * @returns true, if Storybook is initialized inside a monorepository/workspace
82
+ */
83
+ isStorybookInMonorepo(): boolean;
84
+ /**
85
+ * Install dependencies listed in `package.json`
86
+ */
87
+ installDependencies(): Promise<void>;
88
+ packageJsonPath(): string;
89
+ readPackageJson(): Promise<PackageJson>;
90
+ writePackageJson(packageJson: PackageJson): Promise<void>;
91
+ /**
92
+ * Read the `package.json` file available in the directory the command was call from
93
+ * If there is no `package.json` it will create one.
94
+ */
95
+ retrievePackageJson(): Promise<PackageJsonWithDepsAndDevDeps>;
96
+ getAllDependencies(): Promise<Partial<Record<string, string>>>;
97
+ /**
98
+ * Add dependencies to a project using `yarn add` or `npm install`.
99
+ *
100
+ * @param {Object} options contains `skipInstall`, `packageJson` and `installAsDevDependencies` which we use to determine how we install packages.
101
+ * @param {Array} dependencies contains a list of packages to add.
102
+ * @example
103
+ * addDependencies(options, [
104
+ * `@storybook/react@${storybookVersion}`,
105
+ * `@storybook/addon-actions@${actionsVersion}`,
106
+ * `@storybook/addon-links@${linksVersion}`,
107
+ * `@storybook/preview-api@${addonsVersion}`,
108
+ * ]);
109
+ */
110
+ addDependencies(options: {
111
+ skipInstall?: boolean;
112
+ installAsDevDependencies?: boolean;
113
+ packageJson?: PackageJson;
114
+ }, dependencies: string[]): Promise<void>;
115
+ /**
116
+ * Remove dependencies from a project using `yarn remove` or `npm uninstall`.
117
+ *
118
+ * @param {Object} options contains `skipInstall`, `packageJson` and `installAsDevDependencies` which we use to determine how we install packages.
119
+ * @param {Array} dependencies contains a list of packages to remove.
120
+ * @example
121
+ * removeDependencies(options, [
122
+ * `@storybook/react`,
123
+ * `@storybook/addon-actions`,
124
+ * ]);
125
+ */
126
+ removeDependencies(options: {
127
+ skipInstall?: boolean;
128
+ packageJson?: PackageJson;
129
+ }, dependencies: string[]): Promise<void>;
130
+ /**
131
+ * Return an array of strings matching following format: `<package_name>@<package_latest_version>`
132
+ *
133
+ * For packages in the storybook monorepo, when the latest version is equal to the version of the current CLI
134
+ * the version is not added to the string.
135
+ *
136
+ * When a package is in the monorepo, and the version is not equal to the CLI version, the version is taken from the versions.ts file and added to the string.
137
+ *
138
+ * @param packages
139
+ */
140
+ getVersionedPackages(packages: string[]): Promise<string[]>;
141
+ /**
142
+ * Return an array of string standing for the latest version of the input packages.
143
+ * To be able to identify which version goes with which package the order of the input array is keep.
144
+ *
145
+ * @param packageNames
146
+ */
147
+ getVersions(...packageNames: string[]): Promise<string[]>;
148
+ /**
149
+ * Return the latest version of the input package available on npmjs registry.
150
+ * If constraint are provided it return the latest version matching the constraints.
151
+ *
152
+ * For `@storybook/*` packages the latest version is retrieved from `cli/src/versions.json` file directly
153
+ *
154
+ * @param packageName The name of the package
155
+ * @param constraint A valid semver constraint, example: '1.x || >=2.5.0 || 5.0.0 - 7.2.3'
156
+ */
157
+ getVersion(packageName: string, constraint?: string): Promise<string>;
158
+ /**
159
+ * Get the latest version of the package available on npmjs.com.
160
+ * If constraint is set then it returns a version satisfying it, otherwise the latest version available is returned.
161
+ *
162
+ * @param packageName Name of the package
163
+ * @param constraint Version range to use to constraint the returned version
164
+ */
165
+ latestVersion(packageName: string, constraint?: string): Promise<string>;
166
+ addStorybookCommandInScripts(options?: {
167
+ port: number;
168
+ preCommand?: string;
169
+ }): Promise<void>;
170
+ addScripts(scripts: Record<string, string>): Promise<void>;
171
+ addPackageResolutions(versions: Record<string, string>): Promise<void>;
172
+ protected abstract runInstall(): Promise<void>;
173
+ protected abstract runAddDeps(dependencies: string[], installAsDevDependencies: boolean): Promise<void>;
174
+ protected abstract runRemoveDeps(dependencies: string[]): Promise<void>;
175
+ protected abstract getResolutions(packageJson: PackageJson, versions: Record<string, string>): Record<string, any>;
176
+ /**
177
+ * Get the latest or all versions of the input package available on npmjs.com
178
+ *
179
+ * @param packageName Name of the package
180
+ * @param fetchAllVersions Should return
181
+ */
182
+ protected abstract runGetVersions<T extends boolean>(packageName: string, fetchAllVersions: T): Promise<T extends true ? string[] : string>;
183
+ abstract runPackageCommand(command: string, args: string[], cwd?: string, stdio?: string): Promise<string>;
184
+ abstract runPackageCommandSync(command: string, args: string[], cwd?: string, stdio?: 'inherit' | 'pipe'): string;
185
+ abstract findInstallations(pattern?: string[]): Promise<InstallationMetadata | undefined>;
186
+ abstract parseErrorFromLogs(logs?: string): string;
187
+ executeCommandSync({ command, args, stdio, cwd, ignoreError, env, ...execaOptions }: CommonOptions<string> & {
188
+ command: string;
189
+ args: string[];
190
+ cwd?: string;
191
+ ignoreError?: boolean;
192
+ }): string;
193
+ executeCommand({ command, args, stdio, cwd, ignoreError, env, ...execaOptions }: CommonOptions<string> & {
194
+ command: string;
195
+ args: string[];
196
+ cwd?: string;
197
+ ignoreError?: boolean;
198
+ }): Promise<string>;
199
+ }
200
+
201
+ declare class JsPackageManagerFactory {
202
+ static getPackageManager({ force }?: {
203
+ force?: PackageManagerName;
204
+ }, cwd?: string): JsPackageManager;
205
+ /**
206
+ * Look up map of package manager proxies by name
207
+ */
208
+ private static PROXY_MAP;
209
+ /**
210
+ * Infer the package manager based on the command the user is running.
211
+ * Each package manager sets the `npm_config_user_agent` environment variable with its name and version e.g. "npm/7.24.0"
212
+ * Which is really useful when invoking commands via npx/pnpx/yarn create/etc.
213
+ */
214
+ private static inferPackageManagerFromUserAgent;
215
+ }
216
+
217
+ declare function parseList(str: string): string[];
218
+ /**
219
+ * Given a package manager, returns the coerced version of Storybook.
220
+ * It tries to find renderer packages in the project and returns the coerced version of the first one found.
221
+ * Example:
222
+ * If @storybook/react version 8.0.0-alpha.14 is installed, it returns the coerced version 8.0.0
223
+ */
224
+ declare function getCoercedStorybookVersion(packageManager: JsPackageManager): Promise<string | null>;
225
+ declare function getEnvConfig(program: Record<string, any>, configEnv: Record<string, any>): void;
226
+ /**
227
+ * Given a file name, creates an object with utilities to manage a log file.
228
+ * It creates a temporary log file which you can manage with the returned functions.
229
+ * You can then decide whether to move the log file to the users project, or remove it.
230
+ *
231
+ * @example
232
+ * ```
233
+ * const { logStream, moveLogFile, removeLogFile, clearLogFile, readLogFile } = await createLogStream('my-log-file.log');
234
+ *
235
+ * // SCENARIO 1:
236
+ * // you can write custom messages to generate a log file
237
+ * logStream.write('my log message');
238
+ * await moveLogFile();
239
+ *
240
+ * // SCENARIO 2:
241
+ * // or you can pass it to stdio and capture the output of that command
242
+ * try {
243
+ * await this.executeCommand({
244
+ * command: 'pnpm',
245
+ * args: ['info', packageName, ...args],
246
+ * // do not output to the user, and send stdio and stderr to log file
247
+ * stdio: ['ignore', logStream, logStream]
248
+ * });
249
+ * } catch (err) {
250
+ * // do something with the log file content
251
+ * const output = await readLogFile();
252
+ * // move the log file to the users project
253
+ * await moveLogFile();
254
+ * }
255
+ * // success, no need to keep the log file
256
+ * await removeLogFile();
257
+ *
258
+ * ```
259
+ */
260
+ declare const createLogStream: (logFileName?: string) => Promise<{
261
+ moveLogFile: () => Promise<void>;
262
+ removeLogFile: () => Promise<void>;
263
+ clearLogFile: () => Promise<void>;
264
+ readLogFile: () => Promise<string>;
265
+ logStream: WriteStream;
266
+ }>;
267
+ declare const isCorePackage: (pkg: string) => boolean;
268
+
39
269
  interface Options$1 {
40
270
  before: CoreCommon_AddonInfo;
41
271
  after: CoreCommon_AddonInfo;
@@ -88,6 +318,11 @@ declare function getRefs(options: Options$2): Promise<Record<string, Ref>>;
88
318
 
89
319
  declare function globToRegexp(glob: string): RegExp;
90
320
 
321
+ declare class HandledError extends Error {
322
+ handled: boolean;
323
+ constructor(error: unknown);
324
+ }
325
+
91
326
  declare function handlebars(source: string, data: any): string;
92
327
 
93
328
  /**
@@ -128,6 +363,11 @@ declare function loadPreviewOrConfigFile({ configDir }: {
128
363
  configDir: string;
129
364
  }): string | undefined;
130
365
 
366
+ declare const commandLog: (message: string) => (errorMessage?: string | void | undefined, errorInfo?: string) => void;
367
+ declare function paddedLog(message: string): void;
368
+ declare function getChars(char: string, amount: number): string;
369
+ declare function codeLog(codeLines: string[], leftPadAmount?: number): void;
370
+
131
371
  declare function logConfig(caption: unknown, config: unknown): void;
132
372
 
133
373
  declare const getDirectoryFromWorkingDir: ({ configDir, workingDir, directory, }: NormalizeOptions & {
@@ -150,6 +390,16 @@ declare function normalizeStoryPath(filename: string): string;
150
390
 
151
391
  declare function readTemplate(filename: string): Promise<string>;
152
392
 
393
+ /**
394
+ * Remove the given addon package and remove it from main.js
395
+ *
396
+ * Usage:
397
+ * - sb remove @storybook/addon-links
398
+ */
399
+ declare function removeAddon(addon: string, options?: {
400
+ packageManager?: PackageManagerName;
401
+ }): Promise<void>;
402
+
153
403
  /**
154
404
  * Get the path of the file or directory with input name inside the Storybook cache directory:
155
405
  * - `node_modules/.cache/storybook/{directoryName}` in a Node.js project or npm package
@@ -176,8 +426,90 @@ declare function satisfies<A>(): <T extends A>(x: T) => T;
176
426
 
177
427
  declare function stripAbsNodeModulesPath(absPath: string): string;
178
428
 
429
+ declare const _default: {
430
+ '@storybook/addon-a11y': string;
431
+ '@storybook/addon-actions': string;
432
+ '@storybook/addon-backgrounds': string;
433
+ '@storybook/addon-controls': string;
434
+ '@storybook/addon-docs': string;
435
+ '@storybook/addon-essentials': string;
436
+ '@storybook/addon-highlight': string;
437
+ '@storybook/addon-interactions': string;
438
+ '@storybook/addon-jest': string;
439
+ '@storybook/addon-links': string;
440
+ '@storybook/addon-mdx-gfm': string;
441
+ '@storybook/addon-measure': string;
442
+ '@storybook/addon-outline': string;
443
+ '@storybook/addon-storysource': string;
444
+ '@storybook/addon-themes': string;
445
+ '@storybook/addon-toolbars': string;
446
+ '@storybook/addon-viewport': string;
447
+ '@storybook/angular': string;
448
+ '@storybook/blocks': string;
449
+ '@storybook/builder-manager': string;
450
+ '@storybook/builder-vite': string;
451
+ '@storybook/builder-webpack5': string;
452
+ '@storybook/channels': string;
453
+ '@storybook/cli': string;
454
+ '@storybook/client-logger': string;
455
+ '@storybook/codemod': string;
456
+ '@storybook/components': string;
457
+ '@storybook/core-common': string;
458
+ '@storybook/core-events': string;
459
+ '@storybook/core-server': string;
460
+ '@storybook/core-webpack': string;
461
+ '@storybook/csf-plugin': string;
462
+ '@storybook/csf-tools': string;
463
+ '@storybook/docs-tools': string;
464
+ '@storybook/ember': string;
465
+ '@storybook/html': string;
466
+ '@storybook/html-vite': string;
467
+ '@storybook/html-webpack5': string;
468
+ '@storybook/instrumenter': string;
469
+ '@storybook/manager': string;
470
+ '@storybook/manager-api': string;
471
+ '@storybook/nextjs': string;
472
+ '@storybook/node-logger': string;
473
+ '@storybook/preact': string;
474
+ '@storybook/preact-vite': string;
475
+ '@storybook/preact-webpack5': string;
476
+ '@storybook/preset-create-react-app': string;
477
+ '@storybook/preset-html-webpack': string;
478
+ '@storybook/preset-preact-webpack': string;
479
+ '@storybook/preset-react-webpack': string;
480
+ '@storybook/preset-server-webpack': string;
481
+ '@storybook/preset-svelte-webpack': string;
482
+ '@storybook/preset-vue3-webpack': string;
483
+ '@storybook/preview': string;
484
+ '@storybook/preview-api': string;
485
+ '@storybook/react': string;
486
+ '@storybook/react-dom-shim': string;
487
+ '@storybook/react-vite': string;
488
+ '@storybook/react-webpack5': string;
489
+ '@storybook/router': string;
490
+ '@storybook/server': string;
491
+ '@storybook/server-webpack5': string;
492
+ '@storybook/source-loader': string;
493
+ '@storybook/svelte': string;
494
+ '@storybook/svelte-vite': string;
495
+ '@storybook/svelte-webpack5': string;
496
+ '@storybook/sveltekit': string;
497
+ '@storybook/telemetry': string;
498
+ '@storybook/test': string;
499
+ '@storybook/theming': string;
500
+ '@storybook/types': string;
501
+ '@storybook/vue3': string;
502
+ '@storybook/vue3-vite': string;
503
+ '@storybook/vue3-webpack5': string;
504
+ '@storybook/web-components': string;
505
+ '@storybook/web-components-vite': string;
506
+ '@storybook/web-components-webpack5': string;
507
+ sb: string;
508
+ storybook: string;
509
+ };
510
+
179
511
  type Options = Parameters<typeof Cache__default>['0'];
180
512
  type FileSystemCache = ReturnType<typeof Cache__default>;
181
513
  declare function createFileSystemCache(options: Options): FileSystemCache;
182
514
 
183
- export { boost, builderPackages, cache, checkAddonOrder, commonGlobOptions, createFileSystemCache, filterPresetsConfig, findConfigFile, frameworkPackages, getAutoRefs, getBuilderOptions, getDirectoryFromWorkingDir, getFrameworkName, getInterpretedFile, getInterpretedFileWithExt, getPresets, getPreviewBodyTemplate, getPreviewHeadTemplate, getProjectRoot, getRefs, getRendererName, getStorybookConfiguration, getStorybookInfo, globToRegexp, handlebars, interopRequireDefault, interpolate, isPreservingSymlinks, loadAllPresets, loadCustomPresets, loadEnvs, loadMainConfig, loadManagerOrAddonsFile, loadPreset, loadPreviewOrConfigFile, logConfig, nodePathsToArray, normalizeStories, normalizeStoriesEntry, normalizeStoryPath, readTemplate, rendererPackages, resolveAddonName, resolvePathInStorybookCache, satisfies, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, stripAbsNodeModulesPath, validateConfigurationFiles, validateFrameworkName };
515
+ export { HandledError, InstallationMetadata, JsPackageManager, JsPackageManagerFactory, PackageJsonWithDepsAndDevDeps, PackageJsonWithMaybeDeps, PackageManagerName, PackageMetadata, boost, builderPackages, cache, checkAddonOrder, codeLog, commandLog, commonGlobOptions, createFileSystemCache, createLogStream, filterPresetsConfig, findConfigFile, frameworkPackages, getAutoRefs, getBuilderOptions, getChars, getCoercedStorybookVersion, getDirectoryFromWorkingDir, getEnvConfig, getFrameworkName, getInterpretedFile, getInterpretedFileWithExt, getPackageDetails, getPresets, getPreviewBodyTemplate, getPreviewHeadTemplate, getProjectRoot, getRefs, getRendererName, getStorybookConfiguration, getStorybookInfo, globToRegexp, handlebars, interopRequireDefault, interpolate, isCorePackage, isPreservingSymlinks, loadAllPresets, loadCustomPresets, loadEnvs, loadMainConfig, loadManagerOrAddonsFile, loadPreset, loadPreviewOrConfigFile, logConfig, nodePathsToArray, normalizeStories, normalizeStoriesEntry, normalizeStoryPath, paddedLog, parseList, readTemplate, removeAddon, rendererPackages, resolveAddonName, resolvePathInStorybookCache, satisfies, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, stripAbsNodeModulesPath, validateConfigurationFiles, validateFrameworkName, _default as versions };
package/dist/index.js CHANGED
@@ -1,21 +1,48 @@
1
- "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var src_exports={};__export(src_exports,{boost:()=>boost,builderPackages:()=>builderPackages,cache:()=>cache,checkAddonOrder:()=>checkAddonOrder,commonGlobOptions:()=>commonGlobOptions,createFileSystemCache:()=>createFileSystemCache,filterPresetsConfig:()=>filterPresetsConfig,findConfigFile:()=>findConfigFile,frameworkPackages:()=>frameworkPackages,getAutoRefs:()=>getAutoRefs,getBuilderOptions:()=>getBuilderOptions,getDirectoryFromWorkingDir:()=>getDirectoryFromWorkingDir,getFrameworkName:()=>getFrameworkName,getInterpretedFile:()=>getInterpretedFile,getInterpretedFileWithExt:()=>getInterpretedFileWithExt,getPresets:()=>getPresets,getPreviewBodyTemplate:()=>getPreviewBodyTemplate,getPreviewHeadTemplate:()=>getPreviewHeadTemplate,getProjectRoot:()=>getProjectRoot,getRefs:()=>getRefs,getRendererName:()=>getRendererName,getStorybookConfiguration:()=>getStorybookConfiguration,getStorybookInfo:()=>getStorybookInfo,globToRegexp:()=>globToRegexp,handlebars:()=>handlebars,interopRequireDefault:()=>interopRequireDefault,interpolate:()=>interpolate,isPreservingSymlinks:()=>isPreservingSymlinks,loadAllPresets:()=>loadAllPresets,loadCustomPresets:()=>loadCustomPresets,loadEnvs:()=>loadEnvs,loadMainConfig:()=>loadMainConfig,loadManagerOrAddonsFile:()=>loadManagerOrAddonsFile,loadPreset:()=>loadPreset,loadPreviewOrConfigFile:()=>loadPreviewOrConfigFile,logConfig:()=>logConfig,nodePathsToArray:()=>nodePathsToArray,normalizeStories:()=>normalizeStories,normalizeStoriesEntry:()=>normalizeStoriesEntry,normalizeStoryPath:()=>normalizeStoryPath,readTemplate:()=>readTemplate,rendererPackages:()=>rendererPackages,resolveAddonName:()=>resolveAddonName,resolvePathInStorybookCache:()=>resolvePathInStorybookCache,satisfies:()=>satisfies,serverRequire:()=>serverRequire,serverResolve:()=>serverResolve,stringifyEnvs:()=>stringifyEnvs,stringifyProcessEnvs:()=>stringifyProcessEnvs,stripAbsNodeModulesPath:()=>stripAbsNodeModulesPath,validateConfigurationFiles:()=>validateConfigurationFiles,validateFrameworkName:()=>validateFrameworkName});module.exports=__toCommonJS(src_exports);var import_ts_dedent2=require("ts-dedent"),import_node_logger2=require("@storybook/node-logger"),import_path4=require("path"),import_server_errors=require("@storybook/core-events/server-errors");var import_path2=__toESM(require("path"));var import_fs=__toESM(require("fs")),boost=new Set([".js",".jsx",".ts",".tsx",".cts",".mts",".cjs",".mjs"]);function sortExtensions(){return[...Array.from(boost)]}var possibleExtensions=sortExtensions();function getInterpretedFile(pathToFile){return possibleExtensions.map(ext=>pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`).find(candidate=>import_fs.default.existsSync(candidate))}function getInterpretedFileWithExt(pathToFile){return possibleExtensions.map(ext=>({path:pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`,ext})).find(candidate=>import_fs.default.existsSync(candidate.path))}var registered=!1;function interopRequireDefault(filePath){let hasEsbuildBeenRegistered=!!require("module")._extensions[".ts"];if(registered===!1&&!hasEsbuildBeenRegistered){let{register}=require("esbuild-register/dist/node");registered=!0,register({target:`node${process.version.slice(1)}`,format:"cjs",hookIgnoreNodeModules:!0,keepNames:!0,tsconfigRaw:`{
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var src_exports={};__export(src_exports,{HandledError:()=>HandledError,JsPackageManager:()=>JsPackageManager,JsPackageManagerFactory:()=>JsPackageManagerFactory,boost:()=>boost,builderPackages:()=>builderPackages,cache:()=>cache,checkAddonOrder:()=>checkAddonOrder,codeLog:()=>codeLog,commandLog:()=>commandLog,commonGlobOptions:()=>commonGlobOptions,createFileSystemCache:()=>createFileSystemCache,createLogStream:()=>createLogStream,filterPresetsConfig:()=>filterPresetsConfig,findConfigFile:()=>findConfigFile,frameworkPackages:()=>frameworkPackages,getAutoRefs:()=>getAutoRefs,getBuilderOptions:()=>getBuilderOptions,getChars:()=>getChars,getCoercedStorybookVersion:()=>getCoercedStorybookVersion,getDirectoryFromWorkingDir:()=>getDirectoryFromWorkingDir,getEnvConfig:()=>getEnvConfig,getFrameworkName:()=>getFrameworkName,getInterpretedFile:()=>getInterpretedFile,getInterpretedFileWithExt:()=>getInterpretedFileWithExt,getPackageDetails:()=>getPackageDetails,getPresets:()=>getPresets,getPreviewBodyTemplate:()=>getPreviewBodyTemplate,getPreviewHeadTemplate:()=>getPreviewHeadTemplate,getProjectRoot:()=>getProjectRoot,getRefs:()=>getRefs,getRendererName:()=>getRendererName,getStorybookConfiguration:()=>getStorybookConfiguration,getStorybookInfo:()=>getStorybookInfo,globToRegexp:()=>globToRegexp,handlebars:()=>handlebars,interopRequireDefault:()=>interopRequireDefault,interpolate:()=>interpolate,isCorePackage:()=>isCorePackage,isPreservingSymlinks:()=>isPreservingSymlinks,loadAllPresets:()=>loadAllPresets,loadCustomPresets:()=>loadCustomPresets,loadEnvs:()=>loadEnvs,loadMainConfig:()=>loadMainConfig,loadManagerOrAddonsFile:()=>loadManagerOrAddonsFile,loadPreset:()=>loadPreset,loadPreviewOrConfigFile:()=>loadPreviewOrConfigFile,logConfig:()=>logConfig,nodePathsToArray:()=>nodePathsToArray,normalizeStories:()=>normalizeStories,normalizeStoriesEntry:()=>normalizeStoriesEntry,normalizeStoryPath:()=>normalizeStoryPath,paddedLog:()=>paddedLog,parseList:()=>parseList,readTemplate:()=>readTemplate,removeAddon:()=>removeAddon,rendererPackages:()=>rendererPackages,resolveAddonName:()=>resolveAddonName,resolvePathInStorybookCache:()=>resolvePathInStorybookCache,satisfies:()=>satisfies2,serverRequire:()=>serverRequire,serverResolve:()=>serverResolve,stringifyEnvs:()=>stringifyEnvs,stringifyProcessEnvs:()=>stringifyProcessEnvs,stripAbsNodeModulesPath:()=>stripAbsNodeModulesPath,validateConfigurationFiles:()=>validateConfigurationFiles,validateFrameworkName:()=>validateFrameworkName,versions:()=>versions_default});module.exports=__toCommonJS(src_exports);var import_ts_dedent2=require("ts-dedent"),import_node_logger2=require("@storybook/node-logger"),import_path4=require("path"),import_server_errors=require("@storybook/core-events/server-errors");var import_path2=__toESM(require("path"));var import_fs=__toESM(require("fs")),boost=new Set([".js",".jsx",".ts",".tsx",".cts",".mts",".cjs",".mjs"]);function sortExtensions(){return[...Array.from(boost)]}var possibleExtensions=sortExtensions();function getInterpretedFile(pathToFile){return possibleExtensions.map(ext=>pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`).find(candidate=>import_fs.default.existsSync(candidate))}function getInterpretedFileWithExt(pathToFile){return possibleExtensions.map(ext=>({path:pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`,ext})).find(candidate=>import_fs.default.existsSync(candidate.path))}var registered=!1;function interopRequireDefault(filePath){let hasEsbuildBeenRegistered=!!require("module")._extensions[".ts"];if(registered===!1&&!hasEsbuildBeenRegistered){let{register}=require("esbuild-register/dist/node");registered=!0,register({target:`node${process.version.slice(1)}`,format:"cjs",hookIgnoreNodeModules:!0,keepNames:!0,tsconfigRaw:`{
2
2
  "compilerOptions": {
3
3
  "strict": false,
4
4
  "skipLibCheck": true,
5
5
  },
6
- }`})}let result=require(filePath);return typeof result=="object"&&result!==null&&typeof result.default<"u"?result.default:result}function getCandidate(paths){for(let i=0;i<paths.length;i+=1){let candidate=getInterpretedFileWithExt(paths[i]);if(candidate)return candidate}}function serverRequire(filePath){let candidatePath=serverResolve(filePath);return candidatePath?interopRequireDefault(candidatePath):null}function serverResolve(filePath){let paths=Array.isArray(filePath)?filePath:[filePath],existingCandidate=getCandidate(paths);return existingCandidate?existingCandidate.path:null}var import_ts_dedent=require("ts-dedent"),import_glob=require("glob"),import_path=__toESM(require("path"));function slash(path12){return path12.startsWith("\\\\?\\")?path12:path12.replace(/\\/g,"/")}var import_node_logger=require("@storybook/node-logger");async function validateConfigurationFiles(configDir){let extensionsPattern=`{${Array.from(boost).join(",")}}`,mainConfigMatches=await(0,import_glob.glob)(slash(import_path.default.resolve(configDir,`main${extensionsPattern}`))),[mainConfigPath]=mainConfigMatches;if(mainConfigMatches.length>1&&import_node_logger.once.warn(import_ts_dedent.dedent`
6
+ }`})}let result=require(filePath);return typeof result=="object"&&result!==null&&typeof result.default<"u"?result.default:result}function getCandidate(paths){for(let i=0;i<paths.length;i+=1){let candidate=getInterpretedFileWithExt(paths[i]);if(candidate)return candidate}}function serverRequire(filePath){let candidatePath=serverResolve(filePath);return candidatePath?interopRequireDefault(candidatePath):null}function serverResolve(filePath){let paths=Array.isArray(filePath)?filePath:[filePath],existingCandidate=getCandidate(paths);return existingCandidate?existingCandidate.path:null}var import_ts_dedent=require("ts-dedent"),import_glob=require("glob"),import_path=__toESM(require("path"));function slash(path18){return path18.startsWith("\\\\?\\")?path18:path18.replace(/\\/g,"/")}var import_node_logger=require("@storybook/node-logger");async function validateConfigurationFiles(configDir){let extensionsPattern=`{${Array.from(boost).join(",")}}`,mainConfigMatches=await(0,import_glob.glob)(slash(import_path.default.resolve(configDir,`main${extensionsPattern}`))),[mainConfigPath]=mainConfigMatches;if(mainConfigMatches.length>1&&import_node_logger.once.warn(import_ts_dedent.dedent`
7
7
  Multiple main files found in your configDir (${import_path.default.resolve(configDir)}).
8
8
  Storybook will use the first one found and ignore the others. Please remove the extra files.
9
9
  `),!mainConfigPath)throw new Error(import_ts_dedent.dedent`
10
10
  No configuration files have been found in your configDir (${import_path.default.resolve(configDir)}).
11
11
  Storybook needs "main.js" file, please add it (or pass a custom config dir flag to Storybook to tell where your main.js file is located at).
12
- `)}function loadCustomPresets({configDir}){validateConfigurationFiles(configDir);let presets=serverRequire(import_path2.default.resolve(configDir,"presets"));if(serverRequire(import_path2.default.resolve(configDir,"main"))){let resolved=serverResolve(import_path2.default.resolve(configDir,"main"));if(resolved)return[resolved]}return presets||[]}var import_resolve_from=__toESM(require("resolve-from")),safeResolveFrom=(path12,file)=>{try{return(0,import_resolve_from.default)(path12,file)}catch{return}},safeResolve=file=>{try{return require.resolve(file)}catch{return}};var import_path3=__toESM(require("path"));function normalizePath(id){return import_path3.default.posix.normalize(slash(id))}function stripAbsNodeModulesPath(absPath){let splits=absPath.split(`node_modules${import_path3.default.sep}`);return normalizePath(splits[splits.length-1])}var isObject=val=>val!=null&&typeof val=="object"&&Array.isArray(val)===!1,isFunction=val=>typeof val=="function";function filterPresetsConfig(presetsConfig){return presetsConfig.filter(preset=>{let presetName=typeof preset=="string"?preset:preset.name;return!/@storybook[\\\\/]preset-typescript/.test(presetName)})}function resolvePathToMjs(filePath){let{dir,name}=(0,import_path4.parse)(filePath),mjsPath=(0,import_path4.join)(dir,`${name}.mjs`);return safeResolve(mjsPath)?mjsPath:filePath}function resolvePresetFunction(input,presetOptions,storybookOptions){return isFunction(input)?[...input({...storybookOptions,...presetOptions})]:Array.isArray(input)?[...input]:[]}var resolveAddonName=(configDir,name,options)=>{let resolve=name.startsWith("/")?safeResolve:safeResolveFrom.bind(null,configDir),resolved=resolve(name);if(resolved){let{dir:fdir,name:fname}=(0,import_path4.parse)(resolved);if(name.match(/\/(manager|register(-panel)?)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"virtual",name,managerEntries:[resolvePathToMjs((0,import_path4.join)(fdir,fname))]};if(name.match(/\/(preset)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"presets",name:resolved}}let checkExists=exportName=>{if(resolve(`${name}${exportName}`))return`${name}${exportName}`},absolutizeExport=(exportName,preferMJS)=>{let found=resolve(`${name}${exportName}`);if(found)return preferMJS?resolvePathToMjs(found):found},managerFile=absolutizeExport("/manager",!0),registerFile=absolutizeExport("/register",!0)||absolutizeExport("/register-panel",!0),previewFile=checkExists("/preview"),previewFileAbsolute=absolutizeExport("/preview",!0),presetFile=absolutizeExport("/preset",!1);if(!(managerFile||previewFile)&&presetFile)return{type:"presets",name:presetFile};if(managerFile||registerFile||previewFile||presetFile){let managerEntries=[];return managerFile&&managerEntries.push(managerFile),!managerFile&&registerFile&&!presetFile&&managerEntries.push(registerFile),{type:"virtual",name,...managerEntries.length?{managerEntries}:{},...previewFile?{previewAnnotations:[previewFileAbsolute?{bare:previewFile.includes("node_modules")?stripAbsNodeModulesPath(previewFile):previewFile,absolute:previewFileAbsolute}:previewFile]}:{},...presetFile?{presets:[{name:presetFile,options}]}:{}}}if(resolved)return{type:"presets",name:resolved}},map=({configDir})=>item=>{let options=isObject(item)&&item.options||void 0,name=isObject(item)?item.name:item,resolved;try{resolved=resolveAddonName(configDir,name,options)}catch{import_node_logger2.logger.error(`Addon value should end in /manager or /preview or /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/
12
+ `)}function loadCustomPresets({configDir}){validateConfigurationFiles(configDir);let presets=serverRequire(import_path2.default.resolve(configDir,"presets"));if(serverRequire(import_path2.default.resolve(configDir,"main"))){let resolved=serverResolve(import_path2.default.resolve(configDir,"main"));if(resolved)return[resolved]}return presets||[]}var import_resolve_from=__toESM(require("resolve-from")),safeResolveFrom=(path18,file)=>{try{return(0,import_resolve_from.default)(path18,file)}catch{return}},safeResolve=file=>{try{return require.resolve(file)}catch{return}};var import_path3=__toESM(require("path"));function normalizePath(id){return import_path3.default.posix.normalize(slash(id))}function stripAbsNodeModulesPath(absPath){let splits=absPath.split(`node_modules${import_path3.default.sep}`);return normalizePath(splits[splits.length-1])}var isObject=val=>val!=null&&typeof val=="object"&&Array.isArray(val)===!1,isFunction=val=>typeof val=="function";function filterPresetsConfig(presetsConfig){return presetsConfig.filter(preset=>{let presetName=typeof preset=="string"?preset:preset.name;return!/@storybook[\\\\/]preset-typescript/.test(presetName)})}function resolvePathToMjs(filePath){let{dir,name}=(0,import_path4.parse)(filePath),mjsPath=(0,import_path4.join)(dir,`${name}.mjs`);return safeResolve(mjsPath)?mjsPath:filePath}function resolvePresetFunction(input,presetOptions,storybookOptions){return isFunction(input)?[...input({...storybookOptions,...presetOptions})]:Array.isArray(input)?[...input]:[]}var resolveAddonName=(configDir,name,options)=>{let resolve=name.startsWith("/")?safeResolve:safeResolveFrom.bind(null,configDir),resolved=resolve(name);if(resolved){let{dir:fdir,name:fname}=(0,import_path4.parse)(resolved);if(name.match(/\/(manager|register(-panel)?)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"virtual",name,managerEntries:[resolvePathToMjs((0,import_path4.join)(fdir,fname))]};if(name.match(/\/(preset)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"presets",name:resolved}}let checkExists=exportName=>{if(resolve(`${name}${exportName}`))return`${name}${exportName}`},absolutizeExport=(exportName,preferMJS)=>{let found=resolve(`${name}${exportName}`);if(found)return preferMJS?resolvePathToMjs(found):found},managerFile=absolutizeExport("/manager",!0),registerFile=absolutizeExport("/register",!0)||absolutizeExport("/register-panel",!0),previewFile=checkExists("/preview"),previewFileAbsolute=absolutizeExport("/preview",!0),presetFile=absolutizeExport("/preset",!1);if(!(managerFile||previewFile)&&presetFile)return{type:"presets",name:presetFile};if(managerFile||registerFile||previewFile||presetFile){let managerEntries=[];return managerFile&&managerEntries.push(managerFile),!managerFile&&registerFile&&!presetFile&&managerEntries.push(registerFile),{type:"virtual",name,...managerEntries.length?{managerEntries}:{},...previewFile?{previewAnnotations:[previewFileAbsolute?{bare:previewFile.includes("node_modules")?stripAbsNodeModulesPath(previewFile):previewFile,absolute:previewFileAbsolute}:previewFile]}:{},...presetFile?{presets:[{name:presetFile,options}]}:{}}}if(resolved)return{type:"presets",name:resolved}},map=({configDir})=>item=>{let options=isObject(item)&&item.options||void 0,name=isObject(item)?item.name:item,resolved;try{resolved=resolveAddonName(configDir,name,options)}catch{import_node_logger2.logger.error(`Addon value should end in /manager or /preview or /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/
13
13
  ${item}`);return}if(!resolved){import_node_logger2.logger.warn(`Could not resolve addon "${name}", skipping. Is it installed?`);return}return{...options?{options}:{},...resolved}};async function getContent(input){if(input.type==="virtual"){let{type,name:name2,...rest}=input;return rest}let name=input.name?input.name:input;return interopRequireDefault(name)}async function loadPreset(input,level,storybookOptions){let presetName=input.name?input.name:input;try{let presetOptions=input.options?input.options:{},contents=await getContent(input);if(typeof contents=="function"&&(contents=contents(storybookOptions,presetOptions)),Array.isArray(contents))return await loadPresets(contents,level+1,storybookOptions);if(isObject(contents)){let{addons:addonsInput=[],presets:presetsInput=[],...rest}=contents,filter=i=>!0;storybookOptions.isCritical!==!0&&(storybookOptions.build?.test?.disabledAddons?.length||0)>0&&(filter=i=>{let name=i.name?i.name:i;return!storybookOptions.build?.test?.disabledAddons?.find(n=>name.includes(n))});let subPresets=resolvePresetFunction(presetsInput,presetOptions,storybookOptions).filter(filter),subAddons=resolvePresetFunction(addonsInput,presetOptions,storybookOptions).filter(filter);return[...await loadPresets([...subPresets],level+1,storybookOptions),...await loadPresets([...subAddons.map(map(storybookOptions))].filter(Boolean),level+1,storybookOptions),{name:presetName,preset:rest,options:presetOptions}]}throw new Error(import_ts_dedent2.dedent`
14
14
  ${input} is not a valid preset
15
- `)}catch(error){if(storybookOptions?.isCritical)throw new import_server_errors.CriticalPresetLoadError({error,presetName});let warning=level>0?` Failed to load preset: ${JSON.stringify(input)} on level ${level}`:` Failed to load preset: ${JSON.stringify(input)}`;return import_node_logger2.logger.warn(warning),import_node_logger2.logger.error(error),[]}}async function loadPresets(presets,level,storybookOptions){return!presets||!Array.isArray(presets)||!presets.length?[]:(await Promise.all(presets.map(async preset=>loadPreset(preset,level,storybookOptions)))).reduce((acc,loaded)=>acc.concat(loaded),[])}function applyPresets(presets,extension,config,args,storybookOptions){let presetResult=new Promise(res=>res(config));return presets.length?presets.reduce((accumulationPromise,{preset,options})=>{let change=preset[extension];if(!change)return accumulationPromise;if(typeof change=="function"){let extensionFn=change,context={preset,combinedOptions:{...storybookOptions,...args,...options,presetsList:presets,presets:{apply:async(ext,c,a={})=>applyPresets(presets,ext,c,a,storybookOptions)}}};return accumulationPromise.then(newConfig=>extensionFn.call(context.preset,newConfig,context.combinedOptions))}return accumulationPromise.then(newConfig=>Array.isArray(newConfig)&&Array.isArray(change)?[...newConfig,...change]:isObject(newConfig)&&isObject(change)?{...newConfig,...change}:change)},presetResult):presetResult}async function getPresets(presets,storybookOptions){let loadedPresets=await loadPresets(presets,0,storybookOptions);return{apply:async(extension,config,args={})=>applyPresets(loadedPresets,extension,config,args,storybookOptions)}}async function loadAllPresets(options){let{corePresets=[],overridePresets=[],...restOptions}=options,presetsConfig=[...corePresets,...loadCustomPresets(options),...overridePresets],filteredPresetConfig=filterPresetsConfig(presetsConfig);return filteredPresetConfig.length<presetsConfig.length&&import_node_logger2.logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),getPresets(filteredPresetConfig,restOptions)}var import_file_system_cache=__toESM(require("file-system-cache"));function createFileSystemCache(options){return(0,import_file_system_cache.default)(options)}var import_path5=__toESM(require("path")),import_find_cache_dir=__toESM(require("find-cache-dir"));function resolvePathInStorybookCache(fileOrDirectoryName,sub="default"){let cacheDirectory=(0,import_find_cache_dir.default)({name:"storybook"});return cacheDirectory||=import_path5.default.join(process.cwd(),".cache","storybook"),import_path5.default.join(cacheDirectory,sub,fileOrDirectoryName)}var cache=createFileSystemCache({basePath:resolvePathInStorybookCache("dev-server"),ns:"storybook"});var import_node_logger3=require("@storybook/node-logger"),predicateFor=addon=>entry=>{let name=entry.name||entry;return name&&name.includes(addon)},isCorrectOrder=(addons,before,after)=>{let essentialsIndex=addons.findIndex(predicateFor("@storybook/addon-essentials")),beforeIndex=addons.findIndex(predicateFor(before.name)),afterIndex=addons.findIndex(predicateFor(after.name));return beforeIndex===-1&&before.inEssentials&&(beforeIndex=essentialsIndex),afterIndex===-1&&after.inEssentials&&(afterIndex=essentialsIndex),beforeIndex!==-1&&afterIndex!==-1&&beforeIndex<=afterIndex},checkAddonOrder=async({before,after,configFile,getConfig})=>{try{let config=await getConfig(configFile);if(!config?.addons){import_node_logger3.logger.warn("Unable to find 'addons' config in main Storybook config");return}if(!isCorrectOrder(config.addons,before,after)){let orEssentials=" (or '@storybook/addon-essentials')",beforeText=`'${before.name}'${before.inEssentials?orEssentials:""}`,afterText=`'${after.name}'${after.inEssentials?orEssentials:""}`;import_node_logger3.logger.warn(`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`)}}catch{import_node_logger3.logger.warn(`Unable to load config file: ${configFile}`)}};var import_lazy_universal_dotenv=require("lazy-universal-dotenv");var import_path6=__toESM(require("path")),import_find_up=__toESM(require("find-up")),getProjectRoot=()=>{let result;if(process.env.STORYBOOK_PROJECT_ROOT)return process.env.STORYBOOK_PROJECT_ROOT;try{let found=import_find_up.default.sync(".git",{type:"directory"});found&&(result=import_path6.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".svn",{type:"directory"});found&&(result=result||import_path6.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".hg",{type:"directory"});found&&(result=result||import_path6.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".yarn",{type:"directory"});found&&(result=result||import_path6.default.join(found,".."))}catch{}try{result=result||__dirname.split("node_modules")[0]}catch{}return result||process.cwd()},nodePathsToArray=nodePath=>nodePath.split(process.platform==="win32"?";":":").filter(Boolean).map(p=>import_path6.default.resolve("./",p)),relativePattern=/^\.{1,2}([/\\]|$)/;function normalizeStoryPath(filename){return relativePattern.test(filename)?filename:`.${import_path6.default.sep}${filename}`}function loadEnvs(options={}){let defaultNodeEnv=options.production?"production":"development",env={NODE_ENV:process.env.NODE_ENV||defaultNodeEnv,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:options.production?".":""};Object.keys(process.env).filter(name=>/^STORYBOOK_/.test(name)).forEach(name=>{env[name]=process.env[name]});let base=Object.entries(env).reduce((acc,[k,v])=>Object.assign(acc,{[k]:JSON.stringify(v)}),{}),{stringified,raw}=(0,import_lazy_universal_dotenv.getEnvironment)({nodeEnv:env.NODE_ENV}),fullRaw={...env,...raw};return fullRaw.NODE_PATH=nodePathsToArray(fullRaw.NODE_PATH||""),{stringified:{...base,...stringified},raw:fullRaw}}var stringifyEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[key]=JSON.stringify(value),acc),{}),stringifyProcessEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[`process.env.${key}`]=JSON.stringify(value),acc),{});var NODE_MODULES_RE=/node_modules/,commonGlobOptions=glob2=>NODE_MODULES_RE.test(glob2)?{}:{ignore:["**/node_modules/**"]};async function getBuilderOptions(options){let framework=await options.presets.apply("framework",{},options);if(typeof framework!="string"&&framework?.options?.builder)return framework.options.builder;let{builder}=await options.presets.apply("core",{},options);return typeof builder!="string"&&builder?.options?builder.options:{}}var import_ts_dedent3=require("ts-dedent");async function getFrameworkName(options){let framework=await options.presets.apply("framework","",options);if(!framework)throw new Error(import_ts_dedent3.dedent`
15
+ `)}catch(error){if(storybookOptions?.isCritical)throw new import_server_errors.CriticalPresetLoadError({error,presetName});let warning=level>0?` Failed to load preset: ${JSON.stringify(input)} on level ${level}`:` Failed to load preset: ${JSON.stringify(input)}`;return import_node_logger2.logger.warn(warning),import_node_logger2.logger.error(error),[]}}async function loadPresets(presets,level,storybookOptions){return!presets||!Array.isArray(presets)||!presets.length?[]:(await Promise.all(presets.map(async preset=>loadPreset(preset,level,storybookOptions)))).reduce((acc,loaded)=>acc.concat(loaded),[])}function applyPresets(presets,extension,config,args,storybookOptions){let presetResult=new Promise(res=>res(config));return presets.length?presets.reduce((accumulationPromise,{preset,options})=>{let change=preset[extension];if(!change)return accumulationPromise;if(typeof change=="function"){let extensionFn=change,context={preset,combinedOptions:{...storybookOptions,...args,...options,presetsList:presets,presets:{apply:async(ext,c,a={})=>applyPresets(presets,ext,c,a,storybookOptions)}}};return accumulationPromise.then(newConfig=>extensionFn.call(context.preset,newConfig,context.combinedOptions))}return accumulationPromise.then(newConfig=>Array.isArray(newConfig)&&Array.isArray(change)?[...newConfig,...change]:isObject(newConfig)&&isObject(change)?{...newConfig,...change}:change)},presetResult):presetResult}async function getPresets(presets,storybookOptions){let loadedPresets=await loadPresets(presets,0,storybookOptions);return{apply:async(extension,config,args={})=>applyPresets(loadedPresets,extension,config,args,storybookOptions)}}async function loadAllPresets(options){let{corePresets=[],overridePresets=[],...restOptions}=options,presetsConfig=[...corePresets,...loadCustomPresets(options),...overridePresets],filteredPresetConfig=filterPresetsConfig(presetsConfig);return filteredPresetConfig.length<presetsConfig.length&&import_node_logger2.logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),getPresets(filteredPresetConfig,restOptions)}var import_file_system_cache=__toESM(require("file-system-cache"));function createFileSystemCache(options){return(0,import_file_system_cache.default)(options)}var import_path5=__toESM(require("path")),import_find_cache_dir=__toESM(require("find-cache-dir"));function resolvePathInStorybookCache(fileOrDirectoryName,sub="default"){let cacheDirectory=(0,import_find_cache_dir.default)({name:"storybook"});return cacheDirectory||=import_path5.default.join(process.cwd(),".cache","storybook"),import_path5.default.join(cacheDirectory,sub,fileOrDirectoryName)}var cache=createFileSystemCache({basePath:resolvePathInStorybookCache("dev-server"),ns:"storybook"});var import_fs_extra2=require("fs-extra"),import_path7=require("path"),import_tempy=__toESM(require("tempy"));var import_path6=__toESM(require("path")),import_fs_extra=__toESM(require("fs-extra"));function getStorybookConfiguration(storybookScript,shortName,longName){if(!storybookScript)return null;let parts=storybookScript.split(/[\s='"]+/),index=parts.indexOf(longName);return index===-1&&(index=parts.indexOf(shortName)),index===-1?null:parts[index+1]}var rendererPackages={"@storybook/react":"react","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/server":"server","storybook-framework-qwik":"qwik","storybook-solidjs":"solid"},frameworkPackages={"@storybook/angular":"angular","@storybook/ember":"ember","@storybook/html-vite":"html-vite","@storybook/html-webpack5":"html-webpack5","@storybook/nextjs":"nextjs","@storybook/preact-vite":"preact-vite","@storybook/preact-webpack5":"preact-webpack5","@storybook/react-vite":"react-vite","@storybook/react-webpack5":"react-webpack5","@storybook/server-webpack5":"server-webpack5","@storybook/svelte-vite":"svelte-vite","@storybook/svelte-webpack5":"svelte-webpack5","@storybook/sveltekit":"sveltekit","@storybook/vue3-vite":"vue3-vite","@storybook/vue3-webpack5":"vue3-webpack5","@storybook/web-components-vite":"web-components-vite","@storybook/web-components-webpack5":"web-components-webpack5","storybook-framework-qwik":"qwik","storybook-solidjs-vite":"solid"},builderPackages=["@storybook/builder-webpack5","@storybook/builder-vite"],logger2=console,findDependency=({dependencies,devDependencies,peerDependencies},predicate)=>[Object.entries(dependencies||{}).find(predicate),Object.entries(devDependencies||{}).find(predicate),Object.entries(peerDependencies||{}).find(predicate)],getRendererInfo=packageJson=>{let[dep,devDep,peerDep]=findDependency(packageJson,([key])=>rendererPackages[key]),[pkg,version]=dep||devDep||peerDep||[];return dep&&devDep&&dep[0]===devDep[0]&&logger2.warn(`Found "${dep[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),dep&&peerDep&&dep[0]===peerDep[0]&&logger2.warn(`Found "${dep[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{version,frameworkPackage:pkg}},validConfigExtensions=["ts","js","tsx","jsx","mjs","cjs"],findConfigFile=(prefix,configDir)=>{let filePrefix=import_path6.default.join(configDir,prefix),extension=validConfigExtensions.find(ext=>import_fs_extra.default.existsSync(`${filePrefix}.${ext}`));return extension?`${filePrefix}.${extension}`:null},getConfigInfo=(packageJson,configDir)=>{let storybookConfigDir=configDir??".storybook",storybookScript=packageJson.scripts?.storybook;if(storybookScript&&!configDir){let configParam=getStorybookConfiguration(storybookScript,"-c","--config-dir");configParam&&(storybookConfigDir=configParam)}return{configDir:storybookConfigDir,mainConfig:findConfigFile("main",storybookConfigDir),previewConfig:findConfigFile("preview",storybookConfigDir),managerConfig:findConfigFile("manager",storybookConfigDir)}},getStorybookInfo=(packageJson,configDir)=>{let rendererInfo=getRendererInfo(packageJson),configInfo=getConfigInfo(packageJson,configDir);return{...rendererInfo,...configInfo}};var versions_default={"@storybook/addon-a11y":"8.0.0-beta.1","@storybook/addon-actions":"8.0.0-beta.1","@storybook/addon-backgrounds":"8.0.0-beta.1","@storybook/addon-controls":"8.0.0-beta.1","@storybook/addon-docs":"8.0.0-beta.1","@storybook/addon-essentials":"8.0.0-beta.1","@storybook/addon-highlight":"8.0.0-beta.1","@storybook/addon-interactions":"8.0.0-beta.1","@storybook/addon-jest":"8.0.0-beta.1","@storybook/addon-links":"8.0.0-beta.1","@storybook/addon-mdx-gfm":"8.0.0-beta.1","@storybook/addon-measure":"8.0.0-beta.1","@storybook/addon-outline":"8.0.0-beta.1","@storybook/addon-storysource":"8.0.0-beta.1","@storybook/addon-themes":"8.0.0-beta.1","@storybook/addon-toolbars":"8.0.0-beta.1","@storybook/addon-viewport":"8.0.0-beta.1","@storybook/angular":"8.0.0-beta.1","@storybook/blocks":"8.0.0-beta.1","@storybook/builder-manager":"8.0.0-beta.1","@storybook/builder-vite":"8.0.0-beta.1","@storybook/builder-webpack5":"8.0.0-beta.1","@storybook/channels":"8.0.0-beta.1","@storybook/cli":"8.0.0-beta.1","@storybook/client-logger":"8.0.0-beta.1","@storybook/codemod":"8.0.0-beta.1","@storybook/components":"8.0.0-beta.1","@storybook/core-common":"8.0.0-beta.1","@storybook/core-events":"8.0.0-beta.1","@storybook/core-server":"8.0.0-beta.1","@storybook/core-webpack":"8.0.0-beta.1","@storybook/csf-plugin":"8.0.0-beta.1","@storybook/csf-tools":"8.0.0-beta.1","@storybook/docs-tools":"8.0.0-beta.1","@storybook/ember":"8.0.0-beta.1","@storybook/html":"8.0.0-beta.1","@storybook/html-vite":"8.0.0-beta.1","@storybook/html-webpack5":"8.0.0-beta.1","@storybook/instrumenter":"8.0.0-beta.1","@storybook/manager":"8.0.0-beta.1","@storybook/manager-api":"8.0.0-beta.1","@storybook/nextjs":"8.0.0-beta.1","@storybook/node-logger":"8.0.0-beta.1","@storybook/preact":"8.0.0-beta.1","@storybook/preact-vite":"8.0.0-beta.1","@storybook/preact-webpack5":"8.0.0-beta.1","@storybook/preset-create-react-app":"8.0.0-beta.1","@storybook/preset-html-webpack":"8.0.0-beta.1","@storybook/preset-preact-webpack":"8.0.0-beta.1","@storybook/preset-react-webpack":"8.0.0-beta.1","@storybook/preset-server-webpack":"8.0.0-beta.1","@storybook/preset-svelte-webpack":"8.0.0-beta.1","@storybook/preset-vue3-webpack":"8.0.0-beta.1","@storybook/preview":"8.0.0-beta.1","@storybook/preview-api":"8.0.0-beta.1","@storybook/react":"8.0.0-beta.1","@storybook/react-dom-shim":"8.0.0-beta.1","@storybook/react-vite":"8.0.0-beta.1","@storybook/react-webpack5":"8.0.0-beta.1","@storybook/router":"8.0.0-beta.1","@storybook/server":"8.0.0-beta.1","@storybook/server-webpack5":"8.0.0-beta.1","@storybook/source-loader":"8.0.0-beta.1","@storybook/svelte":"8.0.0-beta.1","@storybook/svelte-vite":"8.0.0-beta.1","@storybook/svelte-webpack5":"8.0.0-beta.1","@storybook/sveltekit":"8.0.0-beta.1","@storybook/telemetry":"8.0.0-beta.1","@storybook/test":"8.0.0-beta.1","@storybook/theming":"8.0.0-beta.1","@storybook/types":"8.0.0-beta.1","@storybook/vue3":"8.0.0-beta.1","@storybook/vue3-vite":"8.0.0-beta.1","@storybook/vue3-webpack5":"8.0.0-beta.1","@storybook/web-components":"8.0.0-beta.1","@storybook/web-components-vite":"8.0.0-beta.1","@storybook/web-components-webpack5":"8.0.0-beta.1",sb:"8.0.0-beta.1",storybook:"8.0.0-beta.1"};function parseList(str){return str.split(",").map(item=>item.trim()).filter(item=>item.length>0)}async function getCoercedStorybookVersion(packageManager){return(await Promise.all(Object.keys(rendererPackages).map(async pkg=>({name:pkg,version:await packageManager.getPackageVersion(pkg)})))).filter(({version})=>!!version)[0]?.version}function getEnvConfig(program,configEnv){Object.keys(configEnv).forEach(fieldName=>{let envVarName=configEnv[fieldName],envVarValue=process.env[envVarName];envVarValue&&(program[fieldName]=envVarValue)})}var createLogStream=async(logFileName="storybook.log")=>{let finalLogPath=(0,import_path7.join)(process.cwd(),logFileName),temporaryLogPath=import_tempy.default.file({name:logFileName}),logStream=(0,import_fs_extra2.createWriteStream)(temporaryLogPath,{encoding:"utf8"});return new Promise((resolve,reject)=>{logStream.once("open",()=>{resolve({logStream,moveLogFile:async()=>(0,import_fs_extra2.move)(temporaryLogPath,finalLogPath,{overwrite:!0}),clearLogFile:async()=>(0,import_fs_extra2.writeFile)(temporaryLogPath,""),removeLogFile:async()=>(0,import_fs_extra2.remove)(temporaryLogPath),readLogFile:async()=>(0,import_fs_extra2.readFile)(temporaryLogPath,"utf8")})}),logStream.once("error",reject)})},isCorePackage=pkg=>Object.keys(versions_default).includes(pkg);var import_node_logger3=require("@storybook/node-logger"),predicateFor=addon=>entry=>{let name=entry.name||entry;return name&&name.includes(addon)},isCorrectOrder=(addons,before,after)=>{let essentialsIndex=addons.findIndex(predicateFor("@storybook/addon-essentials")),beforeIndex=addons.findIndex(predicateFor(before.name)),afterIndex=addons.findIndex(predicateFor(after.name));return beforeIndex===-1&&before.inEssentials&&(beforeIndex=essentialsIndex),afterIndex===-1&&after.inEssentials&&(afterIndex=essentialsIndex),beforeIndex!==-1&&afterIndex!==-1&&beforeIndex<=afterIndex},checkAddonOrder=async({before,after,configFile,getConfig})=>{try{let config=await getConfig(configFile);if(!config?.addons){import_node_logger3.logger.warn("Unable to find 'addons' config in main Storybook config");return}if(!isCorrectOrder(config.addons,before,after)){let orEssentials=" (or '@storybook/addon-essentials')",beforeText=`'${before.name}'${before.inEssentials?orEssentials:""}`,afterText=`'${after.name}'${after.inEssentials?orEssentials:""}`;import_node_logger3.logger.warn(`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`)}}catch{import_node_logger3.logger.warn(`Unable to load config file: ${configFile}`)}};var import_lazy_universal_dotenv=require("lazy-universal-dotenv");var import_path8=__toESM(require("path")),import_find_up=__toESM(require("find-up")),getProjectRoot=()=>{let result;if(process.env.STORYBOOK_PROJECT_ROOT)return process.env.STORYBOOK_PROJECT_ROOT;try{let found=import_find_up.default.sync(".git",{type:"directory"});found&&(result=import_path8.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".svn",{type:"directory"});found&&(result=result||import_path8.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".hg",{type:"directory"});found&&(result=result||import_path8.default.join(found,".."))}catch{}try{let found=import_find_up.default.sync(".yarn",{type:"directory"});found&&(result=result||import_path8.default.join(found,".."))}catch{}try{result=result||__dirname.split("node_modules")[0]}catch{}return result||process.cwd()},nodePathsToArray=nodePath=>nodePath.split(process.platform==="win32"?";":":").filter(Boolean).map(p=>import_path8.default.resolve("./",p)),relativePattern=/^\.{1,2}([/\\]|$)/;function normalizeStoryPath(filename){return relativePattern.test(filename)?filename:`.${import_path8.default.sep}${filename}`}function loadEnvs(options={}){let defaultNodeEnv=options.production?"production":"development",env={NODE_ENV:process.env.NODE_ENV||defaultNodeEnv,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:options.production?".":""};Object.keys(process.env).filter(name=>/^STORYBOOK_/.test(name)).forEach(name=>{env[name]=process.env[name]});let base=Object.entries(env).reduce((acc,[k,v])=>Object.assign(acc,{[k]:JSON.stringify(v)}),{}),{stringified,raw}=(0,import_lazy_universal_dotenv.getEnvironment)({nodeEnv:env.NODE_ENV}),fullRaw={...env,...raw};return fullRaw.NODE_PATH=nodePathsToArray(fullRaw.NODE_PATH||""),{stringified:{...base,...stringified},raw:fullRaw}}var stringifyEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[key]=JSON.stringify(value),acc),{}),stringifyProcessEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[`process.env.${key}`]=JSON.stringify(value),acc),{});var NODE_MODULES_RE=/node_modules/,commonGlobOptions=glob2=>NODE_MODULES_RE.test(glob2)?{}:{ignore:["**/node_modules/**"]};async function getBuilderOptions(options){let framework=await options.presets.apply("framework",{},options);if(typeof framework!="string"&&framework?.options?.builder)return framework.options.builder;let{builder}=await options.presets.apply("core",{},options);return typeof builder!="string"&&builder?.options?builder.options:{}}var import_ts_dedent3=require("ts-dedent");async function getFrameworkName(options){let framework=await options.presets.apply("framework","",options);if(!framework)throw new Error(import_ts_dedent3.dedent`
16
16
  You must specify a framework in '.storybook/main.js' config.
17
17
 
18
18
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
19
- `);return typeof framework=="object"?framework.name:framework}async function getRendererName(options){let core=await options.presets.apply("core",{},options);return!core||!core.renderer?getFrameworkName(options):core.renderer}function getStorybookConfiguration(storybookScript,shortName,longName){if(!storybookScript)return null;let parts=storybookScript.split(/[\s='"]+/),index=parts.indexOf(longName);return index===-1&&(index=parts.indexOf(shortName)),index===-1?null:parts[index+1]}var import_path7=__toESM(require("path")),import_fs_extra=__toESM(require("fs-extra"));var rendererPackages={"@storybook/react":"react","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/server":"server","storybook-framework-qwik":"qwik","storybook-solidjs":"solid"},frameworkPackages={"@storybook/angular":"angular","@storybook/ember":"ember","@storybook/html-vite":"html-vite","@storybook/html-webpack5":"html-webpack5","@storybook/nextjs":"nextjs","@storybook/preact-vite":"preact-vite","@storybook/preact-webpack5":"preact-webpack5","@storybook/react-vite":"react-vite","@storybook/react-webpack5":"react-webpack5","@storybook/server-webpack5":"server-webpack5","@storybook/svelte-vite":"svelte-vite","@storybook/svelte-webpack5":"svelte-webpack5","@storybook/sveltekit":"sveltekit","@storybook/vue3-vite":"vue3-vite","@storybook/vue3-webpack5":"vue3-webpack5","@storybook/web-components-vite":"web-components-vite","@storybook/web-components-webpack5":"web-components-webpack5","storybook-framework-qwik":"qwik","storybook-solidjs-vite":"solid"},builderPackages=["@storybook/builder-webpack5","@storybook/builder-vite"],logger3=console,findDependency=({dependencies,devDependencies,peerDependencies},predicate)=>[Object.entries(dependencies||{}).find(predicate),Object.entries(devDependencies||{}).find(predicate),Object.entries(peerDependencies||{}).find(predicate)],getRendererInfo=packageJson=>{let[dep,devDep,peerDep]=findDependency(packageJson,([key])=>rendererPackages[key]),[pkg,version]=dep||devDep||peerDep||[];return dep&&devDep&&dep[0]===devDep[0]&&logger3.warn(`Found "${dep[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),dep&&peerDep&&dep[0]===peerDep[0]&&logger3.warn(`Found "${dep[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{version,frameworkPackage:pkg}},validConfigExtensions=["ts","js","tsx","jsx","mjs","cjs"],findConfigFile=(prefix,configDir)=>{let filePrefix=import_path7.default.join(configDir,prefix),extension=validConfigExtensions.find(ext=>import_fs_extra.default.existsSync(`${filePrefix}.${ext}`));return extension?`${filePrefix}.${extension}`:null},getConfigInfo=(packageJson,configDir)=>{let storybookConfigDir=configDir??".storybook",storybookScript=packageJson.scripts?.storybook;if(storybookScript&&!configDir){let configParam=getStorybookConfiguration(storybookScript,"-c","--config-dir");configParam&&(storybookConfigDir=configParam)}return{configDir:storybookConfigDir,mainConfig:findConfigFile("main",storybookConfigDir),previewConfig:findConfigFile("preview",storybookConfigDir),managerConfig:findConfigFile("manager",storybookConfigDir)}},getStorybookInfo=(packageJson,configDir)=>{let rendererInfo=getRendererInfo(packageJson),configInfo=getConfigInfo(packageJson,configDir);return{...rendererInfo,...configInfo}};var import_fs_extra2=require("fs-extra"),import_path8=require("path"),import_find_up2=__toESM(require("find-up")),import_node_fetch=__toESM(require("node-fetch")),import_resolve_from2=__toESM(require("resolve-from")),import_node_logger4=require("@storybook/node-logger"),getAutoRefs=async options=>{let location=await(0,import_find_up2.default)("package.json",{cwd:options.configDir});if(!location)return{};let directory=(0,import_path8.dirname)(location),{dependencies=[],devDependencies=[]}=await(0,import_fs_extra2.readJSON)(location)||{},deps=Object.keys({...dependencies,...devDependencies});return(await Promise.all(deps.map(async d=>{try{let l=(0,import_resolve_from2.default)(directory,(0,import_path8.join)(d,"package.json")),{storybook,name,version}=await(0,import_fs_extra2.readJSON)(l)||{};if(storybook?.url)return{id:name,...storybook,version}}catch(error){if(error.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return;import_node_logger4.logger.warn(`unable to find package.json for ${d}`);return}}))).filter(Boolean).reduce((acc,cur)=>({...acc,[cur.id]:{id:cur.id.toLowerCase(),url:stripTrailingSlash(cur.url),title:cur.title,version:cur.version}}),{})},checkRef=url=>(0,import_node_fetch.default)(`${url}/iframe.html`).then(async({ok,status})=>{if(ok){if(status!==200)return!1;let data=await(0,import_node_fetch.default)(`${url}/iframe.html`,{headers:{Accept:"application/json"}});if(data.ok&&(await data.json().catch(e=>({}))).loginUrl)return!1}return ok},()=>!1),stripTrailingSlash=url=>url.replace(/\/$/,""),toTitle=input=>{let result=input.replace(/[A-Z]/g,f=>` ${f}`).replace(/[-_][A-Z]/gi,f=>` ${f.toUpperCase()}`).replace(/-/g," ").replace(/_/g," ");return`${result.substring(0,1).toUpperCase()}${result.substring(1)}`.trim()};async function getRefs(options){if(options.test)return{};let refs=await options.presets.apply("refs",await getAutoRefs(options));return Object.entries(refs).forEach(([key,value])=>{if(value.disable){delete refs[key];return}refs[key.toLowerCase()]={...value,id:key.toLowerCase(),title:value.title||toTitle(value.id||key),url:stripTrailingSlash(value.url)}}),await Promise.all(Object.entries(refs).map(async([k,value])=>{let ok=await checkRef(value.url);refs[k]={...value,type:ok?"server-checked":"unknown"}})),refs}var pico=__toESM(require("picomatch"));function globToRegexp(glob2){let regex=pico.makeRe(glob2,{fastpaths:!1,noglobstar:!1,bash:!1});if(!regex.source.startsWith("^"))throw new Error(`Invalid glob: >> ${glob2} >> ${regex}`);return glob2.startsWith("./")?new RegExp(["^\\.",glob2.startsWith("./**")?"":"[\\\\/]",regex.source.substring(1)].join("")):regex}var import_handlebars=__toESM(require("handlebars"));function handlebars(source,data){return import_handlebars.default.compile(source)(data)}var interpolate=(template,bindings)=>Object.entries(bindings).reduce((acc,[k,v])=>{let escapedString=v.replace(/\\/g,"/").replace(/\$/g,"$$$");return acc.replace(new RegExp(`{{${k}}}`,"g"),escapedString)},template);var import_path9=__toESM(require("path"));async function loadMainConfig({configDir=".storybook",noCache=!1}){await validateConfigurationFiles(configDir);let mainJsPath=serverResolve(import_path9.default.resolve(configDir,"main"));return noCache&&mainJsPath&&require.cache[mainJsPath]&&delete require.cache[mainJsPath],serverRequire(mainJsPath)}var import_path10=__toESM(require("path")),import_node_logger5=require("@storybook/node-logger"),import_ts_dedent4=require("ts-dedent");function loadManagerOrAddonsFile({configDir}){let storybookCustomAddonsPath=getInterpretedFile(import_path10.default.resolve(configDir,"addons")),storybookCustomManagerPath=getInterpretedFile(import_path10.default.resolve(configDir,"manager"));if((storybookCustomAddonsPath||storybookCustomManagerPath)&&import_node_logger5.logger.info("=> Loading custom manager config"),storybookCustomAddonsPath&&storybookCustomManagerPath)throw new Error(import_ts_dedent4.dedent`
20
- You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${import_path10.default.resolve(configDir,"addons")})`);return storybookCustomManagerPath||storybookCustomAddonsPath}var import_path11=__toESM(require("path")),import_ts_dedent5=require("ts-dedent");function loadPreviewOrConfigFile({configDir}){let storybookConfigPath=getInterpretedFile(import_path11.default.resolve(configDir,"config")),storybookPreviewPath=getInterpretedFile(import_path11.default.resolve(configDir,"preview"));if(storybookConfigPath&&storybookPreviewPath)throw new Error(import_ts_dedent5.dedent`
21
- You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${import_path11.default.resolve(configDir,"config")})`);return storybookPreviewPath||storybookConfigPath}var import_chalk=__toESM(require("chalk"));function logConfig(caption,config){console.log(import_chalk.default.cyan(caption)),console.dir(config,{depth:null})}var fs2=__toESM(require("fs")),import_path12=__toESM(require("path")),pico2=__toESM(require("picomatch"));var import_server_errors2=require("@storybook/core-events/server-errors");var DEFAULT_TITLE_PREFIX="",DEFAULT_FILES_PATTERN="**/*.@(mdx|stories.@(js|jsx|mjs|ts|tsx))",isDirectory=(configDir,entry)=>{try{return fs2.lstatSync(import_path12.default.resolve(configDir,entry)).isDirectory()}catch{return!1}},getDirectoryFromWorkingDir=({configDir,workingDir,directory})=>{let directoryFromConfig=import_path12.default.resolve(configDir,directory),directoryFromWorking=import_path12.default.relative(workingDir,directoryFromConfig);return normalizeStoryPath(directoryFromWorking)},normalizeStoriesEntry=(entry,{configDir,workingDir,defaultFilesPattern=DEFAULT_FILES_PATTERN})=>{let specifierWithoutMatcher;if(typeof entry=="string"){let globResult=pico2.scan(entry);if(globResult.isGlob){let directory2=globResult.prefix+globResult.base,files2=globResult.glob;specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:directory2,files:files2}}else isDirectory(configDir,entry)?specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:entry,files:defaultFilesPattern}:specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:import_path12.default.dirname(entry),files:import_path12.default.basename(entry)}}else specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,files:defaultFilesPattern,...entry};let files=slash(specifierWithoutMatcher.files),{directory:directoryRelativeToConfig}=specifierWithoutMatcher,directory=slash(getDirectoryFromWorkingDir({configDir,workingDir,directory:directoryRelativeToConfig})).replace(/\/$/,""),importPathMatcher=globToRegexp(`${directory}/${files}`);return{...specifierWithoutMatcher,directory,importPathMatcher}},normalizeStories=(entries,options)=>{if(!entries||Array.isArray(entries)&&entries.length===0)throw new import_server_errors2.InvalidStoriesEntryError;return entries.map(entry=>normalizeStoriesEntry(entry,options))};var import_fs_extra3=__toESM(require("fs-extra"));async function readTemplate(filename){return import_fs_extra3.default.readFile(filename,{encoding:"utf8"})}function isPreservingSymlinks(){let{NODE_OPTIONS,NODE_PRESERVE_SYMLINKS}=process.env;return!!NODE_PRESERVE_SYMLINKS||NODE_OPTIONS?.includes("--preserve-symlinks")}var import_path13=__toESM(require("path")),import_pkg_dir=require("pkg-dir"),import_fs2=__toESM(require("fs")),interpolate2=(string,data={})=>Object.entries(data).reduce((acc,[k,v])=>acc.replace(new RegExp(`%${k}%`,"g"),v),string);function getPreviewBodyTemplate(configDirPath,interpolations){let base=import_fs2.default.readFileSync(`${(0,import_pkg_dir.sync)(__dirname)}/templates/base-preview-body.html`,"utf8"),bodyHtmlPath=import_path13.default.resolve(configDirPath,"preview-body.html"),result=base;return import_fs2.default.existsSync(bodyHtmlPath)&&(result=import_fs2.default.readFileSync(bodyHtmlPath,"utf8")+result),interpolate2(result,interpolations)}function getPreviewHeadTemplate(configDirPath,interpolations){let base=import_fs2.default.readFileSync(`${(0,import_pkg_dir.sync)(__dirname)}/templates/base-preview-head.html`,"utf8"),headHtmlPath=import_path13.default.resolve(configDirPath,"preview-head.html"),result=base;return import_fs2.default.existsSync(headHtmlPath)&&(result+=import_fs2.default.readFileSync(headHtmlPath,"utf8")),interpolate2(result,interpolations)}var import_path14=require("path"),import_server_errors3=require("@storybook/core-events/server-errors");var renderers=["html","preact","react","server","svelte","vue","vue3","web-components"],rendererNames=[...renderers,...renderers.map(renderer=>`@storybook/${renderer}`)];function validateFrameworkName(frameworkName){if(!frameworkName)throw new import_server_errors3.MissingFrameworkFieldError;if(rendererNames.includes(frameworkName))throw new import_server_errors3.InvalidFrameworkNameError({frameworkName});if(!Object.keys(frameworkPackages).includes(frameworkName))try{require.resolve((0,import_path14.join)(frameworkName,"preset"))}catch{throw new import_server_errors3.CouldNotEvaluateFrameworkError({frameworkName})}}function satisfies(){return x=>x}0&&(module.exports={boost,builderPackages,cache,checkAddonOrder,commonGlobOptions,createFileSystemCache,filterPresetsConfig,findConfigFile,frameworkPackages,getAutoRefs,getBuilderOptions,getDirectoryFromWorkingDir,getFrameworkName,getInterpretedFile,getInterpretedFileWithExt,getPresets,getPreviewBodyTemplate,getPreviewHeadTemplate,getProjectRoot,getRefs,getRendererName,getStorybookConfiguration,getStorybookInfo,globToRegexp,handlebars,interopRequireDefault,interpolate,isPreservingSymlinks,loadAllPresets,loadCustomPresets,loadEnvs,loadMainConfig,loadManagerOrAddonsFile,loadPreset,loadPreviewOrConfigFile,logConfig,nodePathsToArray,normalizeStories,normalizeStoriesEntry,normalizeStoryPath,readTemplate,rendererPackages,resolveAddonName,resolvePathInStorybookCache,satisfies,serverRequire,serverResolve,stringifyEnvs,stringifyProcessEnvs,stripAbsNodeModulesPath,validateConfigurationFiles,validateFrameworkName});
19
+ `);return typeof framework=="object"?framework.name:framework}async function getRendererName(options){let core=await options.presets.apply("core",{},options);return!core||!core.renderer?getFrameworkName(options):core.renderer}var import_fs_extra3=require("fs-extra"),import_path9=require("path"),import_find_up2=__toESM(require("find-up")),import_node_fetch=__toESM(require("node-fetch")),import_resolve_from2=__toESM(require("resolve-from")),import_node_logger4=require("@storybook/node-logger"),getAutoRefs=async options=>{let location=await(0,import_find_up2.default)("package.json",{cwd:options.configDir});if(!location)return{};let directory=(0,import_path9.dirname)(location),{dependencies=[],devDependencies=[]}=await(0,import_fs_extra3.readJSON)(location)||{},deps=Object.keys({...dependencies,...devDependencies});return(await Promise.all(deps.map(async d=>{try{let l=(0,import_resolve_from2.default)(directory,(0,import_path9.join)(d,"package.json")),{storybook,name,version}=await(0,import_fs_extra3.readJSON)(l)||{};if(storybook?.url)return{id:name,...storybook,version}}catch(error){if(error.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return;import_node_logger4.logger.warn(`unable to find package.json for ${d}`);return}}))).filter(Boolean).reduce((acc,cur)=>({...acc,[cur.id]:{id:cur.id.toLowerCase(),url:stripTrailingSlash(cur.url),title:cur.title,version:cur.version}}),{})},checkRef=url=>(0,import_node_fetch.default)(`${url}/iframe.html`).then(async({ok,status})=>{if(ok){if(status!==200)return!1;let data=await(0,import_node_fetch.default)(`${url}/iframe.html`,{headers:{Accept:"application/json"}});if(data.ok&&(await data.json().catch(e=>({}))).loginUrl)return!1}return ok},()=>!1),stripTrailingSlash=url=>url.replace(/\/$/,""),toTitle=input=>{let result=input.replace(/[A-Z]/g,f=>` ${f}`).replace(/[-_][A-Z]/gi,f=>` ${f.toUpperCase()}`).replace(/-/g," ").replace(/_/g," ");return`${result.substring(0,1).toUpperCase()}${result.substring(1)}`.trim()};async function getRefs(options){if(options.test)return{};let refs=await options.presets.apply("refs",await getAutoRefs(options));return Object.entries(refs).forEach(([key,value])=>{if(value.disable){delete refs[key];return}refs[key.toLowerCase()]={...value,id:key.toLowerCase(),title:value.title||toTitle(value.id||key),url:stripTrailingSlash(value.url)}}),await Promise.all(Object.entries(refs).map(async([k,value])=>{let ok=await checkRef(value.url);refs[k]={...value,type:ok?"server-checked":"unknown"}})),refs}var pico=__toESM(require("picomatch"));function globToRegexp(glob2){let regex=pico.makeRe(glob2,{fastpaths:!1,noglobstar:!1,bash:!1});if(!regex.source.startsWith("^"))throw new Error(`Invalid glob: >> ${glob2} >> ${regex}`);return glob2.startsWith("./")?new RegExp(["^\\.",glob2.startsWith("./**")?"":"[\\\\/]",regex.source.substring(1)].join("")):regex}var HandledError=class extends Error{constructor(error){super(String(error));this.handled=!0;typeof error!="string"&&(this.cause=error)}};var import_handlebars=__toESM(require("handlebars"));function handlebars(source,data){return import_handlebars.default.compile(source)(data)}var interpolate=(template,bindings)=>Object.entries(bindings).reduce((acc,[k,v])=>{let escapedString=v.replace(/\\/g,"/").replace(/\$/g,"$$$");return acc.replace(new RegExp(`{{${k}}}`,"g"),escapedString)},template);var import_path10=__toESM(require("path"));async function loadMainConfig({configDir=".storybook",noCache=!1}){await validateConfigurationFiles(configDir);let mainJsPath=serverResolve(import_path10.default.resolve(configDir,"main"));return noCache&&mainJsPath&&require.cache[mainJsPath]&&delete require.cache[mainJsPath],serverRequire(mainJsPath)}var import_path11=__toESM(require("path")),import_node_logger5=require("@storybook/node-logger"),import_ts_dedent4=require("ts-dedent");function loadManagerOrAddonsFile({configDir}){let storybookCustomAddonsPath=getInterpretedFile(import_path11.default.resolve(configDir,"addons")),storybookCustomManagerPath=getInterpretedFile(import_path11.default.resolve(configDir,"manager"));if((storybookCustomAddonsPath||storybookCustomManagerPath)&&import_node_logger5.logger.info("=> Loading custom manager config"),storybookCustomAddonsPath&&storybookCustomManagerPath)throw new Error(import_ts_dedent4.dedent`
20
+ You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${import_path11.default.resolve(configDir,"addons")})`);return storybookCustomManagerPath||storybookCustomAddonsPath}var import_path12=__toESM(require("path")),import_ts_dedent5=require("ts-dedent");function loadPreviewOrConfigFile({configDir}){let storybookConfigPath=getInterpretedFile(import_path12.default.resolve(configDir,"config")),storybookPreviewPath=getInterpretedFile(import_path12.default.resolve(configDir,"preview"));if(storybookConfigPath&&storybookPreviewPath)throw new Error(import_ts_dedent5.dedent`
21
+ You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${import_path12.default.resolve(configDir,"config")})`);return storybookPreviewPath||storybookConfigPath}var import_chalk=__toESM(require("chalk")),logger6=console,commandLog=message=>(process.stdout.write(import_chalk.default.cyan(" \u2022 ")+message),(errorMessage,errorInfo)=>{if(errorMessage){if(process.stdout.write(`. ${import_chalk.default.red("\u2716")}
22
+ `),logger6.error(`
23
+ ${import_chalk.default.red(errorMessage)}`),!errorInfo)return;let newErrorInfo=errorInfo.split(`
24
+ `).map(line=>` ${import_chalk.default.dim(line)}`).join(`
25
+ `);logger6.error(`${newErrorInfo}
26
+ `);return}process.stdout.write(`. ${import_chalk.default.green("\u2713")}
27
+ `)});function paddedLog(message){let newMessage=message.split(`
28
+ `).map(line=>` ${line}`).join(`
29
+ `);logger6.log(newMessage)}function getChars(char,amount){let line="";for(let lc=0;lc<amount;lc+=1)line+=char;return line}function codeLog(codeLines,leftPadAmount){let maxLength=0,finalResult=codeLines.map(line=>(maxLength=line.length>maxLength?line.length:maxLength,line)).map(line=>{let rightPadAmount=maxLength-line.length,newLine=line+getChars(" ",rightPadAmount);return newLine=getChars(" ",leftPadAmount||2)+import_chalk.default.inverse(` ${newLine} `),newLine}).join(`
30
+ `);logger6.log(finalResult)}var import_chalk2=__toESM(require("chalk"));function logConfig(caption,config){console.log(import_chalk2.default.cyan(caption)),console.dir(config,{depth:null})}var fs2=__toESM(require("fs")),import_path13=__toESM(require("path")),pico2=__toESM(require("picomatch"));var import_server_errors2=require("@storybook/core-events/server-errors");var DEFAULT_TITLE_PREFIX="",DEFAULT_FILES_PATTERN="**/*.@(mdx|stories.@(js|jsx|mjs|ts|tsx))",isDirectory=(configDir,entry)=>{try{return fs2.lstatSync(import_path13.default.resolve(configDir,entry)).isDirectory()}catch{return!1}},getDirectoryFromWorkingDir=({configDir,workingDir,directory})=>{let directoryFromConfig=import_path13.default.resolve(configDir,directory),directoryFromWorking=import_path13.default.relative(workingDir,directoryFromConfig);return normalizeStoryPath(directoryFromWorking)},normalizeStoriesEntry=(entry,{configDir,workingDir,defaultFilesPattern=DEFAULT_FILES_PATTERN})=>{let specifierWithoutMatcher;if(typeof entry=="string"){let globResult=pico2.scan(entry);if(globResult.isGlob){let directory2=globResult.prefix+globResult.base,files2=globResult.glob;specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:directory2,files:files2}}else isDirectory(configDir,entry)?specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:entry,files:defaultFilesPattern}:specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:import_path13.default.dirname(entry),files:import_path13.default.basename(entry)}}else specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,files:defaultFilesPattern,...entry};let files=slash(specifierWithoutMatcher.files),{directory:directoryRelativeToConfig}=specifierWithoutMatcher,directory=slash(getDirectoryFromWorkingDir({configDir,workingDir,directory:directoryRelativeToConfig})).replace(/\/$/,""),importPathMatcher=globToRegexp(`${directory}/${files}`);return{...specifierWithoutMatcher,directory,importPathMatcher}},normalizeStories=(entries,options)=>{if(!entries||Array.isArray(entries)&&entries.length===0)throw new import_server_errors2.InvalidStoriesEntryError;return entries.map(entry=>normalizeStoriesEntry(entry,options))};var import_fs_extra4=__toESM(require("fs-extra"));async function readTemplate(filename){return import_fs_extra4.default.readFile(filename,{encoding:"utf8"})}var import_ts_dedent11=__toESM(require("ts-dedent")),import_csf_tools=require("@storybook/csf-tools");var import_node_path=__toESM(require("path")),import_cross_spawn=require("cross-spawn"),import_find_up7=require("find-up");var import_sort=__toESM(require("semver/functions/sort")),import_os=require("os"),import_ts_dedent7=__toESM(require("ts-dedent")),import_find_up3=require("find-up"),import_fs3=require("fs"),import_path15=__toESM(require("path")),import_node_logger6=require("@storybook/node-logger");var import_chalk3=__toESM(require("chalk")),import_semver=require("semver"),import_execa=require("execa"),import_path14=__toESM(require("path")),import_fs2=__toESM(require("fs")),import_ts_dedent6=__toESM(require("ts-dedent")),import_fs_extra5=require("fs-extra"),import_tiny_invariant=__toESM(require("tiny-invariant"));var logger7=console;function getPackageDetails(pkg){let idx=pkg.lastIndexOf("@");if(idx<=0)return[pkg,void 0];let packageName=pkg.slice(0,idx),packageVersion=pkg.slice(idx+1);return[packageName,packageVersion]}var JsPackageManager=class{async getPackageVersion(packageName,basePath=this.cwd){let packageJSON=await this.getPackageJSON(packageName,basePath);return packageJSON?packageJSON.version??null:null}async setRegistryURL(url){url?await this.executeCommand({command:"npm",args:["config","set","registry",url]}):await this.executeCommand({command:"npm",args:["config","delete","registry"]})}async getRegistryURL(){let url=(await this.executeCommand({command:"npm",args:["config","get","registry"]})).trim();return url==="undefined"?void 0:url}constructor(options){this.cwd=options?.cwd||process.cwd()}isStorybookInMonorepo(){let cwd=process.cwd();for(;;){try{let turboJsonPath=`${cwd}/turbo.json`,rushJsonPath=`${cwd}/rush.json`;if(import_fs2.default.existsSync(turboJsonPath)||import_fs2.default.existsSync(rushJsonPath))return!0;let packageJsonPath=require.resolve(`${cwd}/package.json`),packageJsonFile=(0,import_fs_extra5.readFileSync)(packageJsonPath,"utf8");if(JSON.parse(packageJsonFile).workspaces)return!0}catch{}let parentDir=import_path14.default.dirname(cwd);if(parentDir===cwd)break;cwd=parentDir}return!1}async installDependencies(){let done=commandLog("Preparing to install dependencies");done(),logger7.log(),logger7.log(),done=commandLog("Installing dependencies"),logger7.log();try{await this.runInstall(),done()}catch(e){throw done("An error occurred while installing dependencies."),new HandledError(e)}}packageJsonPath(){if(!this.cwd)throw new Error("Missing cwd");return import_path14.default.resolve(this.cwd,"package.json")}async readPackageJson(){let packageJsonPath=this.packageJsonPath();if(!import_fs2.default.existsSync(packageJsonPath))throw new Error(`Could not read package.json file at ${packageJsonPath}`);let jsonContent=await(0,import_fs_extra5.readFile)(packageJsonPath,"utf8");return JSON.parse(jsonContent)}async writePackageJson(packageJson){let packageJsonToWrite={...packageJson};packageJsonToWrite.dependencies&&Object.keys(packageJsonToWrite.dependencies).length===0&&delete packageJsonToWrite.dependencies,packageJsonToWrite.devDependencies&&Object.keys(packageJsonToWrite.devDependencies).length===0&&delete packageJsonToWrite.devDependencies,packageJsonToWrite.peerDependencies&&Object.keys(packageJsonToWrite.peerDependencies).length===0&&delete packageJsonToWrite.peerDependencies;let content=`${JSON.stringify(packageJsonToWrite,null,2)}
31
+ `;await(0,import_fs_extra5.writeFile)(this.packageJsonPath(),content,"utf8")}async retrievePackageJson(){let packageJson;try{packageJson=await this.readPackageJson()}catch(err){let errMessage=String(err);if(errMessage.includes("Could not read package.json"))await this.initPackageJson(),packageJson=await this.readPackageJson();else throw new Error(import_ts_dedent6.default`
32
+ There was an error while reading the package.json file at ${this.packageJsonPath()}: ${errMessage}
33
+ Please fix the error and try again.
34
+ `)}return{...packageJson,dependencies:{...packageJson.dependencies},devDependencies:{...packageJson.devDependencies},peerDependencies:{...packageJson.peerDependencies}}}async getAllDependencies(){let{dependencies,devDependencies,peerDependencies}=await this.retrievePackageJson();return{...dependencies,...devDependencies,...peerDependencies}}async addDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;(0,import_tiny_invariant.default)(packageJson,"Missing packageJson.");let dependenciesMap=dependencies.reduce((acc,dep)=>{let[packageName,packageVersion]=getPackageDetails(dep);return{...acc,[packageName]:packageVersion}},{});options.installAsDevDependencies?packageJson.devDependencies={...packageJson.devDependencies,...dependenciesMap}:packageJson.dependencies={...packageJson.dependencies,...dependenciesMap},await this.writePackageJson(packageJson)}else try{await this.runAddDeps(dependencies,!!options.installAsDevDependencies)}catch(e){throw logger7.error(`
35
+ An error occurred while installing dependencies:`),logger7.log(e.message),new HandledError(e)}}async removeDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;(0,import_tiny_invariant.default)(packageJson,"Missing packageJson."),dependencies.forEach(dep=>{packageJson.devDependencies&&delete packageJson.devDependencies[dep],packageJson.dependencies&&delete packageJson.dependencies[dep]}),await this.writePackageJson(packageJson)}else try{await this.runRemoveDeps(dependencies)}catch(e){throw logger7.error("An error occurred while removing dependencies."),logger7.log(String(e)),new HandledError(e)}}getVersionedPackages(packages){return Promise.all(packages.map(async pkg=>{let[packageName,packageVersion]=getPackageDetails(pkg),latestInRange=await this.latestVersion(packageName,packageVersion),currentVersion=versions_default[packageName];return currentVersion===latestInRange?`${packageName}`:currentVersion?`${packageName}@${currentVersion}`:`${packageName}@^${latestInRange}`}))}getVersions(...packageNames){return Promise.all(packageNames.map(packageName=>this.getVersion(packageName)))}async getVersion(packageName,constraint){let current;/(@storybook|^sb$|^storybook$)/.test(packageName)&&(current=versions_default[packageName]);let latest;try{latest=await this.latestVersion(packageName,constraint)}catch(e){if(current)return logger7.warn(`
36
+ ${import_chalk3.default.yellow(String(e))}`),current;throw logger7.error(`
37
+ ${import_chalk3.default.red(String(e))}`),new HandledError(e)}return`^${current&&(!constraint||(0,import_semver.satisfies)(current,constraint))&&(0,import_semver.gt)(current,latest)?current:latest}`}async latestVersion(packageName,constraint){if(!constraint)return this.runGetVersions(packageName,!1);let latestVersionSatisfyingTheConstraint=(await this.runGetVersions(packageName,!0)).reverse().find(version=>(0,import_semver.satisfies)(version,constraint));return(0,import_tiny_invariant.default)(latestVersionSatisfyingTheConstraint!=null,"No version satisfying the constraint."),latestVersionSatisfyingTheConstraint}async addStorybookCommandInScripts(options){let storybookCmd=`storybook dev -p ${options?.port??6006}`,buildStorybookCmd="storybook build",preCommand=options?.preCommand?this.getRunCommand(options.preCommand):void 0;await this.addScripts({storybook:[preCommand,storybookCmd].filter(Boolean).join(" && "),"build-storybook":[preCommand,buildStorybookCmd].filter(Boolean).join(" && ")})}async addScripts(scripts){let packageJson=await this.retrievePackageJson();await this.writePackageJson({...packageJson,scripts:{...packageJson.scripts,...scripts}})}async addPackageResolutions(versions){let packageJson=await this.retrievePackageJson(),resolutions=this.getResolutions(packageJson,versions);this.writePackageJson({...packageJson,...resolutions})}executeCommandSync({command,args=[],stdio,cwd,ignoreError=!1,env,...execaOptions}){try{return(0,import_execa.sync)(command,args,{cwd:cwd??this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0,cleanup:!0,env,...execaOptions}).stdout??""}catch(err){if(ignoreError!==!0)throw err;return""}}async executeCommand({command,args=[],stdio,cwd,ignoreError=!1,env,...execaOptions}){try{return(await(0,import_execa.command)([command,...args].join(" "),{cwd:cwd??this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0,cleanup:!0,env,...execaOptions})).stdout??""}catch(err){if(ignoreError!==!0)throw err;return""}}};var NPM_ERROR_REGEX=/npm ERR! code (\w+)/,NPM_ERROR_CODES={E401:"Authentication failed or is required.",E403:"Access to the resource is forbidden.",E404:"Requested resource not found.",EACCES:"Permission issue.",EAI_FAIL:"DNS lookup failed.",EBADENGINE:"Engine compatibility check failed.",EBADPLATFORM:"Platform not supported.",ECONNREFUSED:"Connection refused.",ECONNRESET:"Connection reset.",EEXIST:"File or directory already exists.",EINVALIDTYPE:"Invalid type encountered.",EISGIT:"Git operation failed or conflicts with an existing file.",EJSONPARSE:"Error parsing JSON data.",EMISSINGARG:"Required argument missing.",ENEEDAUTH:"Authentication needed.",ENOAUDIT:"No audit available.",ENOENT:"File or directory does not exist.",ENOGIT:"Git not found or failed to run.",ENOLOCK:"Lockfile missing.",ENOSPC:"Insufficient disk space.",ENOTFOUND:"Resource not found.",EOTP:"One-time password required.",EPERM:"Permission error.",EPUBLISHCONFLICT:"Conflict during package publishing.",ERESOLVE:"Dependency resolution error.",EROFS:"File system is read-only.",ERR_SOCKET_TIMEOUT:"Socket timed out.",ETARGET:"Package target not found.",ETIMEDOUT:"Operation timed out.",ETOOMANYARGS:"Too many arguments provided.",EUNKNOWNTYPE:"Unknown type encountered."},NPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="npm"}async initPackageJson(){await this.executeCommand({command:"npm",args:["init","-y"]})}getRunStorybookCommand(){return"npm run storybook"}getRunCommand(command){return`npm run ${command}`}async getNpmVersion(){return this.executeCommand({command:"npm",args:["--version"]})}async getPackageJSON(packageName,basePath=this.cwd){let packageJsonPath=await(0,import_find_up3.sync)(dir=>{let possiblePath=import_path15.default.join(dir,"node_modules",packageName,"package.json");return(0,import_fs3.existsSync)(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse((0,import_fs3.readFileSync)(packageJsonPath,"utf-8")):null}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"npm",args:["exec","--",command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"npm",args:["exec","--",command,...args],cwd})}async findInstallations(){let exec=async({depth})=>{let pipeToNull=(0,import_os.platform)()==="win32"?"2>NUL":"2>/dev/null";return this.executeCommand({command:"npm",args:["ls","--json",`--depth=${depth}`,pipeToNull],env:{FORCE_COLOR:"false"}})};try{let commandResult=await exec({depth:99}),parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{try{let commandResult=await exec({depth:0}),parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{import_node_logger6.logger.warn("An issue occurred while trying to find dependencies metadata using npm.");return}}}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}async runInstall(){await this.executeCommand({command:"npm",args:["install",...this.getInstallArgs()],stdio:"inherit"})}async runAddDeps(dependencies,installAsDevDependencies){let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream(),args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);try{await this.executeCommand({command:"npm",args:["install",...args,...this.getInstallArgs()],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]})}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(import_ts_dedent7.default`${errorMessage}
38
+
39
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile()}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"npm",args:["uninstall",...this.getInstallArgs(),...args],stdio:"inherit"})}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"npm",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using npm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=(0,import_sort.default)([...existingVersions[name]||[],value.version]),existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse)};return Object.entries(input.dependencies).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"npm ls --depth=1",dedupeCommand:"npm dedupe"}}parseErrorFromLogs(logs){let finalMessage="NPM error",match=logs.match(NPM_ERROR_REGEX);if(match){let errorCode=match[1];errorCode&&(finalMessage=`${finalMessage} ${errorCode}`);let errorMessage=NPM_ERROR_CODES[errorCode];errorMessage&&(finalMessage=`${finalMessage} - ${errorMessage}`)}return finalMessage.trim()}};var import_fs_extra6=require("fs-extra"),import_ts_dedent8=__toESM(require("ts-dedent")),import_find_up4=require("find-up"),import_path16=__toESM(require("path")),import_fs4=__toESM(require("fs"));var PNPM_ERROR_REGEX=/(ELIFECYCLE|ERR_PNPM_[A-Z_]+)\s+(.*)/i,PNPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="pnpm"}detectWorkspaceRoot(){let pnpmWorkspaceYaml=`${process.cwd()}/pnpm-workspace.yaml`;return(0,import_fs_extra6.pathExistsSync)(pnpmWorkspaceYaml)}async initPackageJson(){await this.executeCommand({command:"pnpm",args:["init"]})}getRunStorybookCommand(){return"pnpm run storybook"}getRunCommand(command){return`pnpm run ${command}`}async getPnpmVersion(){return this.executeCommand({command:"pnpm",args:["--version"]})}getInstallArgs(){return this.installArgs||(this.installArgs=[],this.detectWorkspaceRoot()&&this.installArgs.push("-w")),this.installArgs}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"pnpm",args:["exec",command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"pnpm",args:["exec",command,...args],cwd})}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"pnpm",args:["list",pattern.map(p=>`"${p}"`).join(" "),"--json","--depth=99"],env:{FORCE_COLOR:"false"}});try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}async getPackageJSON(packageName,basePath=this.cwd){let pnpapiPath=(0,import_find_up4.sync)([".pnp.js",".pnp.cjs"],{cwd:basePath});if(pnpapiPath)try{let pnpApi=require(pnpapiPath),resolvedPath=await pnpApi.resolveToUnqualified(packageName,basePath,{considerBuiltins:!1}),pkgLocator=pnpApi.findPackageLocator(resolvedPath),pkg=pnpApi.getPackageInformation(pkgLocator);return JSON.parse(import_fs4.default.readFileSync(import_path16.default.join(pkg.packageLocation,"package.json"),"utf-8"))}catch(error){return error.code!=="MODULE_NOT_FOUND"&&console.error("Error while fetching package version in PNPM PnP mode:",error),null}let packageJsonPath=await(0,import_find_up4.sync)(dir=>{let possiblePath=import_path16.default.join(dir,"node_modules",packageName,"package.json");return import_fs4.default.existsSync(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse(import_fs4.default.readFileSync(packageJsonPath,"utf-8")):null}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}async runInstall(){await this.executeCommand({command:"pnpm",args:["install",...this.getInstallArgs()],stdio:"inherit"})}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"pnpm",args:["add",...args,...this.getInstallArgs()],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]})}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(import_ts_dedent8.default`${errorMessage}
40
+
41
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile()}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"pnpm",args:["remove",...args,...this.getInstallArgs()],stdio:"inherit"})}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"pnpm",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using pnpm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},items=input.reduce((curr,item)=>{let{devDependencies,dependencies,peerDependencies}=item,allDependencies={...devDependencies,...dependencies,...peerDependencies};return Object.assign(curr,allDependencies)},{}),recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse)};return Object.entries(items).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"pnpm list --depth=1",dedupeCommand:"pnpm dedupe"}}parseErrorFromLogs(logs){let finalMessage="PNPM error",match=logs.match(PNPM_ERROR_REGEX);if(match){let[errorCode]=match;errorCode&&(finalMessage=`${finalMessage} ${errorCode}`)}return finalMessage.trim()}};var import_ts_dedent9=__toESM(require("ts-dedent")),import_find_up5=require("find-up"),import_fs5=require("fs"),import_path17=__toESM(require("path")),import_fslib=require("@yarnpkg/fslib"),import_libzip=require("@yarnpkg/libzip");var parsePackageData=(packageName="")=>{let[first,second,third]=packageName.replace(/[└─├]+/g,"").trim().split("@"),version=(third||second).replace("npm:","");return{name:third?`@${second}`:first,value:{version,location:""}}};var YARN2_ERROR_REGEX=/(YN\d{4}):.*?Error:\s+(.*)/i,YARN2_ERROR_CODES={YN0000:"UNNAMED",YN0001:"EXCEPTION",YN0002:"MISSING_PEER_DEPENDENCY",YN0003:"CYCLIC_DEPENDENCIES",YN0004:"DISABLED_BUILD_SCRIPTS",YN0005:"BUILD_DISABLED",YN0006:"SOFT_LINK_BUILD",YN0007:"MUST_BUILD",YN0008:"MUST_REBUILD",YN0009:"BUILD_FAILED",YN0010:"RESOLVER_NOT_FOUND",YN0011:"FETCHER_NOT_FOUND",YN0012:"LINKER_NOT_FOUND",YN0013:"FETCH_NOT_CACHED",YN0014:"YARN_IMPORT_FAILED",YN0015:"REMOTE_INVALID",YN0016:"REMOTE_NOT_FOUND",YN0017:"RESOLUTION_PACK",YN0018:"CACHE_CHECKSUM_MISMATCH",YN0019:"UNUSED_CACHE_ENTRY",YN0020:"MISSING_LOCKFILE_ENTRY",YN0021:"WORKSPACE_NOT_FOUND",YN0022:"TOO_MANY_MATCHING_WORKSPACES",YN0023:"CONSTRAINTS_MISSING_DEPENDENCY",YN0024:"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",YN0025:"CONSTRAINTS_EXTRANEOUS_DEPENDENCY",YN0026:"CONSTRAINTS_INVALID_DEPENDENCY",YN0027:"CANT_SUGGEST_RESOLUTIONS",YN0028:"FROZEN_LOCKFILE_EXCEPTION",YN0029:"CROSS_DRIVE_VIRTUAL_LOCAL",YN0030:"FETCH_FAILED",YN0031:"DANGEROUS_NODE_MODULES",YN0032:"NODE_GYP_INJECTED",YN0046:"AUTOMERGE_FAILED_TO_PARSE",YN0047:"AUTOMERGE_IMMUTABLE",YN0048:"AUTOMERGE_SUCCESS",YN0049:"AUTOMERGE_REQUIRED",YN0050:"DEPRECATED_CLI_SETTINGS",YN0059:"INVALID_RANGE_PEER_DEPENDENCY",YN0060:"INCOMPATIBLE_PEER_DEPENDENCY",YN0061:"DEPRECATED_PACKAGE",YN0062:"INCOMPATIBLE_OS",YN0063:"INCOMPATIBLE_CPU",YN0068:"UNUSED_PACKAGE_EXTENSION",YN0069:"REDUNDANT_PACKAGE_EXTENSION",YN0071:"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",YN0072:"NM_PRESERVE_SYMLINKS_REQUIRED",YN0074:"NM_HARDLINKS_MODE_DOWNGRADED",YN0075:"PROLOG_INSTANTIATION_ERROR",YN0076:"INCOMPATIBLE_ARCHITECTURE",YN0077:"GHOST_ARCHITECTURE"},Yarn2Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn2"}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}async initPackageJson(){await this.executeCommand({command:"yarn",args:["init"]})}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command){return`yarn ${command}`}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"yarn",args:[command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"yarn",args:[command,...args],cwd})}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"yarn",args:["info","--name-only","--recursive",pattern.map(p=>`"${p}"`).join(" "),`"${pattern}"`],env:{FORCE_COLOR:"false"}});try{return this.mapDependencies(commandResult)}catch{return}}async getPackageJSON(packageName,basePath=this.cwd){let pnpapiPath=(0,import_find_up5.sync)([".pnp.js",".pnp.cjs"],{cwd:basePath});if(pnpapiPath)try{let pnpApi=require(pnpapiPath),resolvedPath=await pnpApi.resolveToUnqualified(packageName,basePath,{considerBuiltins:!1}),pkgLocator=pnpApi.findPackageLocator(resolvedPath),pkg=pnpApi.getPackageInformation(pkgLocator),zipOpenFs=new import_fslib.ZipOpenFS({libzip:(0,import_libzip.getLibzipSync)()}),virtualFs=new import_fslib.VirtualFS({baseFs:zipOpenFs}),crossFs=new import_fslib.PosixFS(virtualFs),virtualPath=import_path17.default.join(pkg.packageLocation,"package.json");return crossFs.readJsonSync(virtualPath)}catch(error){return error.code!=="MODULE_NOT_FOUND"&&console.error("Error while fetching package version in Yarn PnP mode:",error),null}let packageJsonPath=await(0,import_find_up5.sync)(dir=>{let possiblePath=import_path17.default.join(dir,"node_modules",packageName,"package.json");return(0,import_fs5.existsSync)(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse((0,import_fs5.readFileSync)(packageJsonPath,"utf-8")):null}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}async runInstall(){await this.executeCommand({command:"yarn",args:["install",...this.getInstallArgs()],stdio:"inherit"})}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"yarn",args:["add",...this.getInstallArgs(),...args],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]})}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(import_ts_dedent9.default`${errorMessage}
42
+
43
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile()}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"yarn",args:["remove",...this.getInstallArgs(),...args],stdio:"inherit"})}async runGetVersions(packageName,fetchAllVersions){let field=fetchAllVersions?"versions":"version",args=["--fields",field,"--json"],commandResult=await this.executeCommand({command:"yarn",args:["npm","info",packageName,...args]});try{return JSON.parse(commandResult)[field]}catch{throw new Error(`Unable to find versions of ${packageName} using yarn 2`)}}mapDependencies(input){let lines=input.split(`
44
+ `),acc={},existingVersions={},duplicatedDependencies={};return lines.forEach(packageName=>{if(!packageName||!packageName.includes("storybook"))return;let{name,value}=parsePackageData(packageName.replaceAll('"',""));existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name]))}),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why",dedupeCommand:"yarn dedupe"}}parseErrorFromLogs(logs){let finalMessage="YARN2 error",match=logs.match(YARN2_ERROR_REGEX);if(match){let errorCode=match[1];errorCode&&(finalMessage=`${finalMessage} ${errorCode}`);let errorType=YARN2_ERROR_CODES[errorCode];errorType&&(finalMessage=`${finalMessage} - ${errorType}`);let errorMessage=match[2];errorMessage&&(finalMessage=`${finalMessage}: ${errorMessage}`)}return finalMessage.trim()}};var import_ts_dedent10=__toESM(require("ts-dedent")),import_find_up6=require("find-up"),import_fs6=require("fs"),import_path18=__toESM(require("path"));var YARN1_ERROR_REGEX=/^error\s(.*)$/gm,Yarn1Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn1"}getInstallArgs(){return this.installArgs||(this.installArgs=["--ignore-workspace-root-check"]),this.installArgs}async initPackageJson(){await this.executeCommand({command:"yarn",args:["init","-y"]})}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command){return`yarn ${command}`}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"yarn",args:[command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"yarn",args:[command,...args],cwd})}async getPackageJSON(packageName,basePath=this.cwd){let packageJsonPath=await(0,import_find_up6.sync)(dir=>{let possiblePath=import_path18.default.join(dir,"node_modules",packageName,"package.json");return(0,import_fs6.existsSync)(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse((0,import_fs6.readFileSync)(packageJsonPath,"utf-8")):null}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"yarn",args:["list","--pattern",pattern.map(p=>`"${p}"`).join(" "),"--recursive","--json"],env:{FORCE_COLOR:"false"}});try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}async runInstall(){await this.executeCommand({command:"yarn",args:["install",...this.getInstallArgs()],stdio:"inherit"})}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"yarn",args:["add",...this.getInstallArgs(),...args],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]})}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(import_ts_dedent10.default`${errorMessage}
45
+
46
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile()}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"yarn",args:["remove",...this.getInstallArgs(),...args],stdio:"inherit"})}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"yarn",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.type==="inspect")return parsedOutput.data;throw new Error(`Unable to find versions of ${packageName} using yarn`)}catch{throw new Error(`Unable to find versions of ${packageName} using yarn`)}}mapDependencies(input){if(input.type==="tree"){let{trees}=input.data,acc={},existingVersions={},duplicatedDependencies={},recurse=tree=>{let{children}=tree,{name,value}=parsePackageData(tree.name);!name||!name.includes("storybook")||(existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),children.forEach(recurse))};return trees.forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why",dedupeCommand:"yarn dedupe"}}throw new Error("Something went wrong while parsing yarn output")}parseErrorFromLogs(logs){let finalMessage="YARN1 error",match=logs.match(YARN1_ERROR_REGEX);if(match){let errorMessage=match[0]?.replace(/^error\s(.*)$/,"$1");errorMessage&&(finalMessage=`${finalMessage}: ${errorMessage}`)}return finalMessage.trim()}};var NPM_LOCKFILE="package-lock.json",PNPM_LOCKFILE="pnpm-lock.yaml",YARN_LOCKFILE="yarn.lock",JsPackageManagerFactory=class{static getPackageManager({force}={},cwd){if(force&&force in this.PROXY_MAP)return new this.PROXY_MAP[force]({cwd});let closestLockfilePath=(0,import_find_up7.sync)([YARN_LOCKFILE,PNPM_LOCKFILE,NPM_LOCKFILE],{cwd}),closestLockfile=closestLockfilePath&&import_node_path.default.basename(closestLockfilePath),hasNPMCommand=hasNPM(cwd),hasPNPMCommand=hasPNPM(cwd),yarnVersion=getYarnVersion(cwd);if(yarnVersion&&(closestLockfile===YARN_LOCKFILE||!hasNPMCommand&&!hasPNPMCommand))return yarnVersion===1?new Yarn1Proxy({cwd}):new Yarn2Proxy({cwd});if(hasPNPMCommand&&closestLockfile===PNPM_LOCKFILE)return new PNPMProxy({cwd});if(hasNPMCommand&&closestLockfile===NPM_LOCKFILE)return new NPMProxy({cwd});let inferredPackageManager=this.inferPackageManagerFromUserAgent();if(inferredPackageManager&&inferredPackageManager in this.PROXY_MAP)return new this.PROXY_MAP[inferredPackageManager]({cwd});if(hasNPMCommand)return new NPMProxy({cwd});throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2")}static{this.PROXY_MAP={npm:NPMProxy,pnpm:PNPMProxy,yarn1:Yarn1Proxy,yarn2:Yarn2Proxy}}static inferPackageManagerFromUserAgent(){let userAgent=process.env.npm_config_user_agent;if(userAgent){let packageSpec=userAgent.split(" ")[0],[pkgMgrName,pkgMgrVersion]=packageSpec.split("/");if(pkgMgrName==="pnpm")return"pnpm";if(pkgMgrName==="npm")return"npm";if(pkgMgrName==="yarn")return`yarn${pkgMgrVersion?.startsWith("1.")?"1":"2"}`}}};function hasNPM(cwd){return(0,import_cross_spawn.sync)("npm",["--version"],{cwd,shell:!0}).status===0}function hasPNPM(cwd){return(0,import_cross_spawn.sync)("pnpm",["--version"],{cwd,shell:!0}).status===0}function getYarnVersion(cwd){let yarnVersionCommand=(0,import_cross_spawn.sync)("yarn",["--version"],{cwd,shell:!0});if(yarnVersionCommand.status!==0)return;let yarnVersion=yarnVersionCommand.output.toString().replace(/,/g,"").replace(/"/g,"");return/^1\.+/.test(yarnVersion)?1:2}var logger9=console;async function removeAddon(addon,options={}){let{packageManager:pkgMgr}=options,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=await packageManager.retrievePackageJson(),{mainConfig,configDir}=getStorybookInfo(packageJson);if(typeof configDir>"u")throw new Error(import_ts_dedent11.default`
47
+ Unable to find storybook config directory
48
+ `);if(!mainConfig){logger9.error("Unable to find storybook main.js config");return}let main=await(0,import_csf_tools.readConfig)(mainConfig);logger9.log(`Uninstalling ${addon}`),await packageManager.removeDependencies({packageJson},[addon]),logger9.log(`Removing '${addon}' from main.js addons field.`);try{main.removeEntryFromArray(["addons"],addon),await(0,import_csf_tools.writeConfig)(main)}catch{logger9.warn(`Failed to remove '${addon}' from main.js addons field.`)}}function isPreservingSymlinks(){let{NODE_OPTIONS,NODE_PRESERVE_SYMLINKS}=process.env;return!!NODE_PRESERVE_SYMLINKS||NODE_OPTIONS?.includes("--preserve-symlinks")}var import_path19=__toESM(require("path")),import_pkg_dir=require("pkg-dir"),import_fs7=__toESM(require("fs")),interpolate2=(string,data={})=>Object.entries(data).reduce((acc,[k,v])=>acc.replace(new RegExp(`%${k}%`,"g"),v),string);function getPreviewBodyTemplate(configDirPath,interpolations){let base=import_fs7.default.readFileSync(`${(0,import_pkg_dir.sync)(__dirname)}/templates/base-preview-body.html`,"utf8"),bodyHtmlPath=import_path19.default.resolve(configDirPath,"preview-body.html"),result=base;return import_fs7.default.existsSync(bodyHtmlPath)&&(result=import_fs7.default.readFileSync(bodyHtmlPath,"utf8")+result),interpolate2(result,interpolations)}function getPreviewHeadTemplate(configDirPath,interpolations){let base=import_fs7.default.readFileSync(`${(0,import_pkg_dir.sync)(__dirname)}/templates/base-preview-head.html`,"utf8"),headHtmlPath=import_path19.default.resolve(configDirPath,"preview-head.html"),result=base;return import_fs7.default.existsSync(headHtmlPath)&&(result+=import_fs7.default.readFileSync(headHtmlPath,"utf8")),interpolate2(result,interpolations)}var import_path20=require("path"),import_server_errors3=require("@storybook/core-events/server-errors");var renderers=["html","preact","react","server","svelte","vue","vue3","web-components"],rendererNames=[...renderers,...renderers.map(renderer=>`@storybook/${renderer}`)];function validateFrameworkName(frameworkName){if(!frameworkName)throw new import_server_errors3.MissingFrameworkFieldError;if(rendererNames.includes(frameworkName))throw new import_server_errors3.InvalidFrameworkNameError({frameworkName});if(!Object.keys(frameworkPackages).includes(frameworkName))try{require.resolve((0,import_path20.join)(frameworkName,"preset"))}catch{throw new import_server_errors3.CouldNotEvaluateFrameworkError({frameworkName})}}function satisfies2(){return x=>x}0&&(module.exports={HandledError,JsPackageManager,JsPackageManagerFactory,boost,builderPackages,cache,checkAddonOrder,codeLog,commandLog,commonGlobOptions,createFileSystemCache,createLogStream,filterPresetsConfig,findConfigFile,frameworkPackages,getAutoRefs,getBuilderOptions,getChars,getCoercedStorybookVersion,getDirectoryFromWorkingDir,getEnvConfig,getFrameworkName,getInterpretedFile,getInterpretedFileWithExt,getPackageDetails,getPresets,getPreviewBodyTemplate,getPreviewHeadTemplate,getProjectRoot,getRefs,getRendererName,getStorybookConfiguration,getStorybookInfo,globToRegexp,handlebars,interopRequireDefault,interpolate,isCorePackage,isPreservingSymlinks,loadAllPresets,loadCustomPresets,loadEnvs,loadMainConfig,loadManagerOrAddonsFile,loadPreset,loadPreviewOrConfigFile,logConfig,nodePathsToArray,normalizeStories,normalizeStoriesEntry,normalizeStoryPath,paddedLog,parseList,readTemplate,removeAddon,rendererPackages,resolveAddonName,resolvePathInStorybookCache,satisfies,serverRequire,serverResolve,stringifyEnvs,stringifyProcessEnvs,stripAbsNodeModulesPath,validateConfigurationFiles,validateFrameworkName,versions});
package/dist/index.mjs CHANGED
@@ -1,42 +1,79 @@
1
- import { dedent } from 'ts-dedent';
1
+ import dedent6, { dedent } from 'ts-dedent';
2
2
  import { once, logger } from '@storybook/node-logger';
3
- import path5, { parse, join, dirname } from 'path';
3
+ import path6, { parse, join, dirname } from 'path';
4
4
  import { CriticalPresetLoadError, InvalidStoriesEntryError, MissingFrameworkFieldError, InvalidFrameworkNameError, CouldNotEvaluateFrameworkError } from '@storybook/core-events/server-errors';
5
- import * as fs3 from 'fs';
6
- import fs3__default from 'fs';
5
+ import * as fs5 from 'fs';
6
+ import fs5__default, { existsSync, readFileSync as readFileSync$1 } from 'fs';
7
7
  import { glob } from 'glob';
8
8
  import resolveFrom from 'resolve-from';
9
9
  import Cache from 'file-system-cache';
10
10
  import findCacheDirectory from 'find-cache-dir';
11
+ import fse, { createWriteStream, move, writeFile, remove, readFile, readJSON, readFileSync, pathExistsSync } from 'fs-extra';
12
+ import tempy from 'tempy';
11
13
  import { getEnvironment } from 'lazy-universal-dotenv';
12
- import findUp from 'find-up';
13
- import fse, { readJSON } from 'fs-extra';
14
+ import findUp, { sync as sync$1 } from 'find-up';
14
15
  import fetch from 'node-fetch';
15
16
  import * as pico from 'picomatch';
16
17
  import Handlebars from 'handlebars';
17
18
  import chalk from 'chalk';
18
- import { sync } from 'pkg-dir';
19
+ import { readConfig, writeConfig } from '@storybook/csf-tools';
20
+ import { sync as sync$2 } from 'cross-spawn';
21
+ import sort from 'semver/functions/sort';
22
+ import { platform } from 'os';
23
+ import { satisfies, gt } from 'semver';
24
+ import { sync, command } from 'execa';
25
+ import invariant from 'tiny-invariant';
26
+ import { ZipOpenFS, VirtualFS, PosixFS } from '@yarnpkg/fslib';
27
+ import { getLibzipSync } from '@yarnpkg/libzip';
28
+ import { sync as sync$3 } from 'pkg-dir';
19
29
 
20
- var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var boost=new Set([".js",".jsx",".ts",".tsx",".cts",".mts",".cjs",".mjs"]);function sortExtensions(){return [...Array.from(boost)]}var possibleExtensions=sortExtensions();function getInterpretedFile(pathToFile){return possibleExtensions.map(ext=>pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`).find(candidate=>fs3__default.existsSync(candidate))}function getInterpretedFileWithExt(pathToFile){return possibleExtensions.map(ext=>({path:pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`,ext})).find(candidate=>fs3__default.existsSync(candidate.path))}var registered=!1;function interopRequireDefault(filePath){let hasEsbuildBeenRegistered=!!__require("module")._extensions[".ts"];if(registered===!1&&!hasEsbuildBeenRegistered){let{register}=__require("esbuild-register/dist/node");registered=!0,register({target:`node${process.version.slice(1)}`,format:"cjs",hookIgnoreNodeModules:!0,keepNames:!0,tsconfigRaw:`{
30
+ var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var boost=new Set([".js",".jsx",".ts",".tsx",".cts",".mts",".cjs",".mjs"]);function sortExtensions(){return [...Array.from(boost)]}var possibleExtensions=sortExtensions();function getInterpretedFile(pathToFile){return possibleExtensions.map(ext=>pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`).find(candidate=>fs5__default.existsSync(candidate))}function getInterpretedFileWithExt(pathToFile){return possibleExtensions.map(ext=>({path:pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`,ext})).find(candidate=>fs5__default.existsSync(candidate.path))}var registered=!1;function interopRequireDefault(filePath){let hasEsbuildBeenRegistered=!!__require("module")._extensions[".ts"];if(registered===!1&&!hasEsbuildBeenRegistered){let{register}=__require("esbuild-register/dist/node");registered=!0,register({target:`node${process.version.slice(1)}`,format:"cjs",hookIgnoreNodeModules:!0,keepNames:!0,tsconfigRaw:`{
21
31
  "compilerOptions": {
22
32
  "strict": false,
23
33
  "skipLibCheck": true,
24
34
  },
25
- }`});}let result=__require(filePath);return typeof result=="object"&&result!==null&&typeof result.default<"u"?result.default:result}function getCandidate(paths){for(let i=0;i<paths.length;i+=1){let candidate=getInterpretedFileWithExt(paths[i]);if(candidate)return candidate}}function serverRequire(filePath){let candidatePath=serverResolve(filePath);return candidatePath?interopRequireDefault(candidatePath):null}function serverResolve(filePath){let paths=Array.isArray(filePath)?filePath:[filePath],existingCandidate=getCandidate(paths);return existingCandidate?existingCandidate.path:null}function slash(path12){return path12.startsWith("\\\\?\\")?path12:path12.replace(/\\/g,"/")}async function validateConfigurationFiles(configDir){let extensionsPattern=`{${Array.from(boost).join(",")}}`,mainConfigMatches=await glob(slash(path5.resolve(configDir,`main${extensionsPattern}`))),[mainConfigPath]=mainConfigMatches;if(mainConfigMatches.length>1&&once.warn(dedent`
26
- Multiple main files found in your configDir (${path5.resolve(configDir)}).
35
+ }`});}let result=__require(filePath);return typeof result=="object"&&result!==null&&typeof result.default<"u"?result.default:result}function getCandidate(paths){for(let i=0;i<paths.length;i+=1){let candidate=getInterpretedFileWithExt(paths[i]);if(candidate)return candidate}}function serverRequire(filePath){let candidatePath=serverResolve(filePath);return candidatePath?interopRequireDefault(candidatePath):null}function serverResolve(filePath){let paths=Array.isArray(filePath)?filePath:[filePath],existingCandidate=getCandidate(paths);return existingCandidate?existingCandidate.path:null}function slash(path18){return path18.startsWith("\\\\?\\")?path18:path18.replace(/\\/g,"/")}async function validateConfigurationFiles(configDir){let extensionsPattern=`{${Array.from(boost).join(",")}}`,mainConfigMatches=await glob(slash(path6.resolve(configDir,`main${extensionsPattern}`))),[mainConfigPath]=mainConfigMatches;if(mainConfigMatches.length>1&&once.warn(dedent`
36
+ Multiple main files found in your configDir (${path6.resolve(configDir)}).
27
37
  Storybook will use the first one found and ignore the others. Please remove the extra files.
28
38
  `),!mainConfigPath)throw new Error(dedent`
29
- No configuration files have been found in your configDir (${path5.resolve(configDir)}).
39
+ No configuration files have been found in your configDir (${path6.resolve(configDir)}).
30
40
  Storybook needs "main.js" file, please add it (or pass a custom config dir flag to Storybook to tell where your main.js file is located at).
31
- `)}function loadCustomPresets({configDir}){validateConfigurationFiles(configDir);let presets=serverRequire(path5.resolve(configDir,"presets"));if(serverRequire(path5.resolve(configDir,"main"))){let resolved=serverResolve(path5.resolve(configDir,"main"));if(resolved)return [resolved]}return presets||[]}var safeResolveFrom=(path12,file)=>{try{return resolveFrom(path12,file)}catch{return}},safeResolve=file=>{try{return __require.resolve(file)}catch{return}};function normalizePath(id){return path5.posix.normalize(slash(id))}function stripAbsNodeModulesPath(absPath){let splits=absPath.split(`node_modules${path5.sep}`);return normalizePath(splits[splits.length-1])}var isObject=val=>val!=null&&typeof val=="object"&&Array.isArray(val)===!1,isFunction=val=>typeof val=="function";function filterPresetsConfig(presetsConfig){return presetsConfig.filter(preset=>{let presetName=typeof preset=="string"?preset:preset.name;return !/@storybook[\\\\/]preset-typescript/.test(presetName)})}function resolvePathToMjs(filePath){let{dir,name}=parse(filePath),mjsPath=join(dir,`${name}.mjs`);return safeResolve(mjsPath)?mjsPath:filePath}function resolvePresetFunction(input,presetOptions,storybookOptions){return isFunction(input)?[...input({...storybookOptions,...presetOptions})]:Array.isArray(input)?[...input]:[]}var resolveAddonName=(configDir,name,options)=>{let resolve=name.startsWith("/")?safeResolve:safeResolveFrom.bind(null,configDir),resolved=resolve(name);if(resolved){let{dir:fdir,name:fname}=parse(resolved);if(name.match(/\/(manager|register(-panel)?)(\.(js|mjs|ts|tsx|jsx))?$/))return {type:"virtual",name,managerEntries:[resolvePathToMjs(join(fdir,fname))]};if(name.match(/\/(preset)(\.(js|mjs|ts|tsx|jsx))?$/))return {type:"presets",name:resolved}}let checkExists=exportName=>{if(resolve(`${name}${exportName}`))return `${name}${exportName}`},absolutizeExport=(exportName,preferMJS)=>{let found=resolve(`${name}${exportName}`);if(found)return preferMJS?resolvePathToMjs(found):found},managerFile=absolutizeExport("/manager",!0),registerFile=absolutizeExport("/register",!0)||absolutizeExport("/register-panel",!0),previewFile=checkExists("/preview"),previewFileAbsolute=absolutizeExport("/preview",!0),presetFile=absolutizeExport("/preset",!1);if(!(managerFile||previewFile)&&presetFile)return {type:"presets",name:presetFile};if(managerFile||registerFile||previewFile||presetFile){let managerEntries=[];return managerFile&&managerEntries.push(managerFile),!managerFile&&registerFile&&!presetFile&&managerEntries.push(registerFile),{type:"virtual",name,...managerEntries.length?{managerEntries}:{},...previewFile?{previewAnnotations:[previewFileAbsolute?{bare:previewFile.includes("node_modules")?stripAbsNodeModulesPath(previewFile):previewFile,absolute:previewFileAbsolute}:previewFile]}:{},...presetFile?{presets:[{name:presetFile,options}]}:{}}}if(resolved)return {type:"presets",name:resolved}},map=({configDir})=>item=>{let options=isObject(item)&&item.options||void 0,name=isObject(item)?item.name:item,resolved;try{resolved=resolveAddonName(configDir,name,options);}catch{logger.error(`Addon value should end in /manager or /preview or /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/
41
+ `)}function loadCustomPresets({configDir}){validateConfigurationFiles(configDir);let presets=serverRequire(path6.resolve(configDir,"presets"));if(serverRequire(path6.resolve(configDir,"main"))){let resolved=serverResolve(path6.resolve(configDir,"main"));if(resolved)return [resolved]}return presets||[]}var safeResolveFrom=(path18,file)=>{try{return resolveFrom(path18,file)}catch{return}},safeResolve=file=>{try{return __require.resolve(file)}catch{return}};function normalizePath(id){return path6.posix.normalize(slash(id))}function stripAbsNodeModulesPath(absPath){let splits=absPath.split(`node_modules${path6.sep}`);return normalizePath(splits[splits.length-1])}var isObject=val=>val!=null&&typeof val=="object"&&Array.isArray(val)===!1,isFunction=val=>typeof val=="function";function filterPresetsConfig(presetsConfig){return presetsConfig.filter(preset=>{let presetName=typeof preset=="string"?preset:preset.name;return !/@storybook[\\\\/]preset-typescript/.test(presetName)})}function resolvePathToMjs(filePath){let{dir,name}=parse(filePath),mjsPath=join(dir,`${name}.mjs`);return safeResolve(mjsPath)?mjsPath:filePath}function resolvePresetFunction(input,presetOptions,storybookOptions){return isFunction(input)?[...input({...storybookOptions,...presetOptions})]:Array.isArray(input)?[...input]:[]}var resolveAddonName=(configDir,name,options)=>{let resolve=name.startsWith("/")?safeResolve:safeResolveFrom.bind(null,configDir),resolved=resolve(name);if(resolved){let{dir:fdir,name:fname}=parse(resolved);if(name.match(/\/(manager|register(-panel)?)(\.(js|mjs|ts|tsx|jsx))?$/))return {type:"virtual",name,managerEntries:[resolvePathToMjs(join(fdir,fname))]};if(name.match(/\/(preset)(\.(js|mjs|ts|tsx|jsx))?$/))return {type:"presets",name:resolved}}let checkExists=exportName=>{if(resolve(`${name}${exportName}`))return `${name}${exportName}`},absolutizeExport=(exportName,preferMJS)=>{let found=resolve(`${name}${exportName}`);if(found)return preferMJS?resolvePathToMjs(found):found},managerFile=absolutizeExport("/manager",!0),registerFile=absolutizeExport("/register",!0)||absolutizeExport("/register-panel",!0),previewFile=checkExists("/preview"),previewFileAbsolute=absolutizeExport("/preview",!0),presetFile=absolutizeExport("/preset",!1);if(!(managerFile||previewFile)&&presetFile)return {type:"presets",name:presetFile};if(managerFile||registerFile||previewFile||presetFile){let managerEntries=[];return managerFile&&managerEntries.push(managerFile),!managerFile&&registerFile&&!presetFile&&managerEntries.push(registerFile),{type:"virtual",name,...managerEntries.length?{managerEntries}:{},...previewFile?{previewAnnotations:[previewFileAbsolute?{bare:previewFile.includes("node_modules")?stripAbsNodeModulesPath(previewFile):previewFile,absolute:previewFileAbsolute}:previewFile]}:{},...presetFile?{presets:[{name:presetFile,options}]}:{}}}if(resolved)return {type:"presets",name:resolved}},map=({configDir})=>item=>{let options=isObject(item)&&item.options||void 0,name=isObject(item)?item.name:item,resolved;try{resolved=resolveAddonName(configDir,name,options);}catch{logger.error(`Addon value should end in /manager or /preview or /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/
32
42
  ${item}`);return}if(!resolved){logger.warn(`Could not resolve addon "${name}", skipping. Is it installed?`);return}return {...options?{options}:{},...resolved}};async function getContent(input){if(input.type==="virtual"){let{type,name:name2,...rest}=input;return rest}let name=input.name?input.name:input;return interopRequireDefault(name)}async function loadPreset(input,level,storybookOptions){let presetName=input.name?input.name:input;try{let presetOptions=input.options?input.options:{},contents=await getContent(input);if(typeof contents=="function"&&(contents=contents(storybookOptions,presetOptions)),Array.isArray(contents))return await loadPresets(contents,level+1,storybookOptions);if(isObject(contents)){let{addons:addonsInput=[],presets:presetsInput=[],...rest}=contents,filter=i=>!0;storybookOptions.isCritical!==!0&&(storybookOptions.build?.test?.disabledAddons?.length||0)>0&&(filter=i=>{let name=i.name?i.name:i;return !storybookOptions.build?.test?.disabledAddons?.find(n=>name.includes(n))});let subPresets=resolvePresetFunction(presetsInput,presetOptions,storybookOptions).filter(filter),subAddons=resolvePresetFunction(addonsInput,presetOptions,storybookOptions).filter(filter);return [...await loadPresets([...subPresets],level+1,storybookOptions),...await loadPresets([...subAddons.map(map(storybookOptions))].filter(Boolean),level+1,storybookOptions),{name:presetName,preset:rest,options:presetOptions}]}throw new Error(dedent`
33
43
  ${input} is not a valid preset
34
- `)}catch(error){if(storybookOptions?.isCritical)throw new CriticalPresetLoadError({error,presetName});let warning=level>0?` Failed to load preset: ${JSON.stringify(input)} on level ${level}`:` Failed to load preset: ${JSON.stringify(input)}`;return logger.warn(warning),logger.error(error),[]}}async function loadPresets(presets,level,storybookOptions){return !presets||!Array.isArray(presets)||!presets.length?[]:(await Promise.all(presets.map(async preset=>loadPreset(preset,level,storybookOptions)))).reduce((acc,loaded)=>acc.concat(loaded),[])}function applyPresets(presets,extension,config,args,storybookOptions){let presetResult=new Promise(res=>res(config));return presets.length?presets.reduce((accumulationPromise,{preset,options})=>{let change=preset[extension];if(!change)return accumulationPromise;if(typeof change=="function"){let extensionFn=change,context={preset,combinedOptions:{...storybookOptions,...args,...options,presetsList:presets,presets:{apply:async(ext,c,a={})=>applyPresets(presets,ext,c,a,storybookOptions)}}};return accumulationPromise.then(newConfig=>extensionFn.call(context.preset,newConfig,context.combinedOptions))}return accumulationPromise.then(newConfig=>Array.isArray(newConfig)&&Array.isArray(change)?[...newConfig,...change]:isObject(newConfig)&&isObject(change)?{...newConfig,...change}:change)},presetResult):presetResult}async function getPresets(presets,storybookOptions){let loadedPresets=await loadPresets(presets,0,storybookOptions);return {apply:async(extension,config,args={})=>applyPresets(loadedPresets,extension,config,args,storybookOptions)}}async function loadAllPresets(options){let{corePresets=[],overridePresets=[],...restOptions}=options,presetsConfig=[...corePresets,...loadCustomPresets(options),...overridePresets],filteredPresetConfig=filterPresetsConfig(presetsConfig);return filteredPresetConfig.length<presetsConfig.length&&logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),getPresets(filteredPresetConfig,restOptions)}function createFileSystemCache(options){return Cache(options)}function resolvePathInStorybookCache(fileOrDirectoryName,sub="default"){let cacheDirectory=findCacheDirectory({name:"storybook"});return cacheDirectory||=path5.join(process.cwd(),".cache","storybook"),path5.join(cacheDirectory,sub,fileOrDirectoryName)}var cache=createFileSystemCache({basePath:resolvePathInStorybookCache("dev-server"),ns:"storybook"});var predicateFor=addon=>entry=>{let name=entry.name||entry;return name&&name.includes(addon)},isCorrectOrder=(addons,before,after)=>{let essentialsIndex=addons.findIndex(predicateFor("@storybook/addon-essentials")),beforeIndex=addons.findIndex(predicateFor(before.name)),afterIndex=addons.findIndex(predicateFor(after.name));return beforeIndex===-1&&before.inEssentials&&(beforeIndex=essentialsIndex),afterIndex===-1&&after.inEssentials&&(afterIndex=essentialsIndex),beforeIndex!==-1&&afterIndex!==-1&&beforeIndex<=afterIndex},checkAddonOrder=async({before,after,configFile,getConfig})=>{try{let config=await getConfig(configFile);if(!config?.addons){logger.warn("Unable to find 'addons' config in main Storybook config");return}if(!isCorrectOrder(config.addons,before,after)){let orEssentials=" (or '@storybook/addon-essentials')",beforeText=`'${before.name}'${before.inEssentials?orEssentials:""}`,afterText=`'${after.name}'${after.inEssentials?orEssentials:""}`;logger.warn(`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`);}}catch{logger.warn(`Unable to load config file: ${configFile}`);}};var getProjectRoot=()=>{let result;if(process.env.STORYBOOK_PROJECT_ROOT)return process.env.STORYBOOK_PROJECT_ROOT;try{let found=findUp.sync(".git",{type:"directory"});found&&(result=path5.join(found,".."));}catch{}try{let found=findUp.sync(".svn",{type:"directory"});found&&(result=result||path5.join(found,".."));}catch{}try{let found=findUp.sync(".hg",{type:"directory"});found&&(result=result||path5.join(found,".."));}catch{}try{let found=findUp.sync(".yarn",{type:"directory"});found&&(result=result||path5.join(found,".."));}catch{}try{result=result||__dirname.split("node_modules")[0];}catch{}return result||process.cwd()},nodePathsToArray=nodePath=>nodePath.split(process.platform==="win32"?";":":").filter(Boolean).map(p=>path5.resolve("./",p)),relativePattern=/^\.{1,2}([/\\]|$)/;function normalizeStoryPath(filename){return relativePattern.test(filename)?filename:`.${path5.sep}${filename}`}function loadEnvs(options={}){let defaultNodeEnv=options.production?"production":"development",env={NODE_ENV:process.env.NODE_ENV||defaultNodeEnv,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:options.production?".":""};Object.keys(process.env).filter(name=>/^STORYBOOK_/.test(name)).forEach(name=>{env[name]=process.env[name];});let base=Object.entries(env).reduce((acc,[k,v])=>Object.assign(acc,{[k]:JSON.stringify(v)}),{}),{stringified,raw}=getEnvironment({nodeEnv:env.NODE_ENV}),fullRaw={...env,...raw};return fullRaw.NODE_PATH=nodePathsToArray(fullRaw.NODE_PATH||""),{stringified:{...base,...stringified},raw:fullRaw}}var stringifyEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[key]=JSON.stringify(value),acc),{}),stringifyProcessEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[`process.env.${key}`]=JSON.stringify(value),acc),{});var NODE_MODULES_RE=/node_modules/,commonGlobOptions=glob2=>NODE_MODULES_RE.test(glob2)?{}:{ignore:["**/node_modules/**"]};async function getBuilderOptions(options){let framework=await options.presets.apply("framework",{},options);if(typeof framework!="string"&&framework?.options?.builder)return framework.options.builder;let{builder}=await options.presets.apply("core",{},options);return typeof builder!="string"&&builder?.options?builder.options:{}}async function getFrameworkName(options){let framework=await options.presets.apply("framework","",options);if(!framework)throw new Error(dedent`
44
+ `)}catch(error){if(storybookOptions?.isCritical)throw new CriticalPresetLoadError({error,presetName});let warning=level>0?` Failed to load preset: ${JSON.stringify(input)} on level ${level}`:` Failed to load preset: ${JSON.stringify(input)}`;return logger.warn(warning),logger.error(error),[]}}async function loadPresets(presets,level,storybookOptions){return !presets||!Array.isArray(presets)||!presets.length?[]:(await Promise.all(presets.map(async preset=>loadPreset(preset,level,storybookOptions)))).reduce((acc,loaded)=>acc.concat(loaded),[])}function applyPresets(presets,extension,config,args,storybookOptions){let presetResult=new Promise(res=>res(config));return presets.length?presets.reduce((accumulationPromise,{preset,options})=>{let change=preset[extension];if(!change)return accumulationPromise;if(typeof change=="function"){let extensionFn=change,context={preset,combinedOptions:{...storybookOptions,...args,...options,presetsList:presets,presets:{apply:async(ext,c,a={})=>applyPresets(presets,ext,c,a,storybookOptions)}}};return accumulationPromise.then(newConfig=>extensionFn.call(context.preset,newConfig,context.combinedOptions))}return accumulationPromise.then(newConfig=>Array.isArray(newConfig)&&Array.isArray(change)?[...newConfig,...change]:isObject(newConfig)&&isObject(change)?{...newConfig,...change}:change)},presetResult):presetResult}async function getPresets(presets,storybookOptions){let loadedPresets=await loadPresets(presets,0,storybookOptions);return {apply:async(extension,config,args={})=>applyPresets(loadedPresets,extension,config,args,storybookOptions)}}async function loadAllPresets(options){let{corePresets=[],overridePresets=[],...restOptions}=options,presetsConfig=[...corePresets,...loadCustomPresets(options),...overridePresets],filteredPresetConfig=filterPresetsConfig(presetsConfig);return filteredPresetConfig.length<presetsConfig.length&&logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),getPresets(filteredPresetConfig,restOptions)}function createFileSystemCache(options){return Cache(options)}function resolvePathInStorybookCache(fileOrDirectoryName,sub="default"){let cacheDirectory=findCacheDirectory({name:"storybook"});return cacheDirectory||=path6.join(process.cwd(),".cache","storybook"),path6.join(cacheDirectory,sub,fileOrDirectoryName)}var cache=createFileSystemCache({basePath:resolvePathInStorybookCache("dev-server"),ns:"storybook"});function getStorybookConfiguration(storybookScript,shortName,longName){if(!storybookScript)return null;let parts=storybookScript.split(/[\s='"]+/),index=parts.indexOf(longName);return index===-1&&(index=parts.indexOf(shortName)),index===-1?null:parts[index+1]}var rendererPackages={"@storybook/react":"react","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/server":"server","storybook-framework-qwik":"qwik","storybook-solidjs":"solid"},frameworkPackages={"@storybook/angular":"angular","@storybook/ember":"ember","@storybook/html-vite":"html-vite","@storybook/html-webpack5":"html-webpack5","@storybook/nextjs":"nextjs","@storybook/preact-vite":"preact-vite","@storybook/preact-webpack5":"preact-webpack5","@storybook/react-vite":"react-vite","@storybook/react-webpack5":"react-webpack5","@storybook/server-webpack5":"server-webpack5","@storybook/svelte-vite":"svelte-vite","@storybook/svelte-webpack5":"svelte-webpack5","@storybook/sveltekit":"sveltekit","@storybook/vue3-vite":"vue3-vite","@storybook/vue3-webpack5":"vue3-webpack5","@storybook/web-components-vite":"web-components-vite","@storybook/web-components-webpack5":"web-components-webpack5","storybook-framework-qwik":"qwik","storybook-solidjs-vite":"solid"},builderPackages=["@storybook/builder-webpack5","@storybook/builder-vite"],logger2=console,findDependency=({dependencies,devDependencies,peerDependencies},predicate)=>[Object.entries(dependencies||{}).find(predicate),Object.entries(devDependencies||{}).find(predicate),Object.entries(peerDependencies||{}).find(predicate)],getRendererInfo=packageJson=>{let[dep,devDep,peerDep]=findDependency(packageJson,([key])=>rendererPackages[key]),[pkg,version]=dep||devDep||peerDep||[];return dep&&devDep&&dep[0]===devDep[0]&&logger2.warn(`Found "${dep[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),dep&&peerDep&&dep[0]===peerDep[0]&&logger2.warn(`Found "${dep[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{version,frameworkPackage:pkg}},validConfigExtensions=["ts","js","tsx","jsx","mjs","cjs"],findConfigFile=(prefix,configDir)=>{let filePrefix=path6.join(configDir,prefix),extension=validConfigExtensions.find(ext=>fse.existsSync(`${filePrefix}.${ext}`));return extension?`${filePrefix}.${extension}`:null},getConfigInfo=(packageJson,configDir)=>{let storybookConfigDir=configDir??".storybook",storybookScript=packageJson.scripts?.storybook;if(storybookScript&&!configDir){let configParam=getStorybookConfiguration(storybookScript,"-c","--config-dir");configParam&&(storybookConfigDir=configParam);}return {configDir:storybookConfigDir,mainConfig:findConfigFile("main",storybookConfigDir),previewConfig:findConfigFile("preview",storybookConfigDir),managerConfig:findConfigFile("manager",storybookConfigDir)}},getStorybookInfo=(packageJson,configDir)=>{let rendererInfo=getRendererInfo(packageJson),configInfo=getConfigInfo(packageJson,configDir);return {...rendererInfo,...configInfo}};var versions_default={"@storybook/addon-a11y":"8.0.0-beta.1","@storybook/addon-actions":"8.0.0-beta.1","@storybook/addon-backgrounds":"8.0.0-beta.1","@storybook/addon-controls":"8.0.0-beta.1","@storybook/addon-docs":"8.0.0-beta.1","@storybook/addon-essentials":"8.0.0-beta.1","@storybook/addon-highlight":"8.0.0-beta.1","@storybook/addon-interactions":"8.0.0-beta.1","@storybook/addon-jest":"8.0.0-beta.1","@storybook/addon-links":"8.0.0-beta.1","@storybook/addon-mdx-gfm":"8.0.0-beta.1","@storybook/addon-measure":"8.0.0-beta.1","@storybook/addon-outline":"8.0.0-beta.1","@storybook/addon-storysource":"8.0.0-beta.1","@storybook/addon-themes":"8.0.0-beta.1","@storybook/addon-toolbars":"8.0.0-beta.1","@storybook/addon-viewport":"8.0.0-beta.1","@storybook/angular":"8.0.0-beta.1","@storybook/blocks":"8.0.0-beta.1","@storybook/builder-manager":"8.0.0-beta.1","@storybook/builder-vite":"8.0.0-beta.1","@storybook/builder-webpack5":"8.0.0-beta.1","@storybook/channels":"8.0.0-beta.1","@storybook/cli":"8.0.0-beta.1","@storybook/client-logger":"8.0.0-beta.1","@storybook/codemod":"8.0.0-beta.1","@storybook/components":"8.0.0-beta.1","@storybook/core-common":"8.0.0-beta.1","@storybook/core-events":"8.0.0-beta.1","@storybook/core-server":"8.0.0-beta.1","@storybook/core-webpack":"8.0.0-beta.1","@storybook/csf-plugin":"8.0.0-beta.1","@storybook/csf-tools":"8.0.0-beta.1","@storybook/docs-tools":"8.0.0-beta.1","@storybook/ember":"8.0.0-beta.1","@storybook/html":"8.0.0-beta.1","@storybook/html-vite":"8.0.0-beta.1","@storybook/html-webpack5":"8.0.0-beta.1","@storybook/instrumenter":"8.0.0-beta.1","@storybook/manager":"8.0.0-beta.1","@storybook/manager-api":"8.0.0-beta.1","@storybook/nextjs":"8.0.0-beta.1","@storybook/node-logger":"8.0.0-beta.1","@storybook/preact":"8.0.0-beta.1","@storybook/preact-vite":"8.0.0-beta.1","@storybook/preact-webpack5":"8.0.0-beta.1","@storybook/preset-create-react-app":"8.0.0-beta.1","@storybook/preset-html-webpack":"8.0.0-beta.1","@storybook/preset-preact-webpack":"8.0.0-beta.1","@storybook/preset-react-webpack":"8.0.0-beta.1","@storybook/preset-server-webpack":"8.0.0-beta.1","@storybook/preset-svelte-webpack":"8.0.0-beta.1","@storybook/preset-vue3-webpack":"8.0.0-beta.1","@storybook/preview":"8.0.0-beta.1","@storybook/preview-api":"8.0.0-beta.1","@storybook/react":"8.0.0-beta.1","@storybook/react-dom-shim":"8.0.0-beta.1","@storybook/react-vite":"8.0.0-beta.1","@storybook/react-webpack5":"8.0.0-beta.1","@storybook/router":"8.0.0-beta.1","@storybook/server":"8.0.0-beta.1","@storybook/server-webpack5":"8.0.0-beta.1","@storybook/source-loader":"8.0.0-beta.1","@storybook/svelte":"8.0.0-beta.1","@storybook/svelte-vite":"8.0.0-beta.1","@storybook/svelte-webpack5":"8.0.0-beta.1","@storybook/sveltekit":"8.0.0-beta.1","@storybook/telemetry":"8.0.0-beta.1","@storybook/test":"8.0.0-beta.1","@storybook/theming":"8.0.0-beta.1","@storybook/types":"8.0.0-beta.1","@storybook/vue3":"8.0.0-beta.1","@storybook/vue3-vite":"8.0.0-beta.1","@storybook/vue3-webpack5":"8.0.0-beta.1","@storybook/web-components":"8.0.0-beta.1","@storybook/web-components-vite":"8.0.0-beta.1","@storybook/web-components-webpack5":"8.0.0-beta.1",sb:"8.0.0-beta.1",storybook:"8.0.0-beta.1"};function parseList(str){return str.split(",").map(item=>item.trim()).filter(item=>item.length>0)}async function getCoercedStorybookVersion(packageManager){return (await Promise.all(Object.keys(rendererPackages).map(async pkg=>({name:pkg,version:await packageManager.getPackageVersion(pkg)})))).filter(({version})=>!!version)[0]?.version}function getEnvConfig(program,configEnv){Object.keys(configEnv).forEach(fieldName=>{let envVarName=configEnv[fieldName],envVarValue=process.env[envVarName];envVarValue&&(program[fieldName]=envVarValue);});}var createLogStream=async(logFileName="storybook.log")=>{let finalLogPath=join(process.cwd(),logFileName),temporaryLogPath=tempy.file({name:logFileName}),logStream=createWriteStream(temporaryLogPath,{encoding:"utf8"});return new Promise((resolve,reject)=>{logStream.once("open",()=>{resolve({logStream,moveLogFile:async()=>move(temporaryLogPath,finalLogPath,{overwrite:!0}),clearLogFile:async()=>writeFile(temporaryLogPath,""),removeLogFile:async()=>remove(temporaryLogPath),readLogFile:async()=>readFile(temporaryLogPath,"utf8")});}),logStream.once("error",reject);})},isCorePackage=pkg=>Object.keys(versions_default).includes(pkg);var predicateFor=addon=>entry=>{let name=entry.name||entry;return name&&name.includes(addon)},isCorrectOrder=(addons,before,after)=>{let essentialsIndex=addons.findIndex(predicateFor("@storybook/addon-essentials")),beforeIndex=addons.findIndex(predicateFor(before.name)),afterIndex=addons.findIndex(predicateFor(after.name));return beforeIndex===-1&&before.inEssentials&&(beforeIndex=essentialsIndex),afterIndex===-1&&after.inEssentials&&(afterIndex=essentialsIndex),beforeIndex!==-1&&afterIndex!==-1&&beforeIndex<=afterIndex},checkAddonOrder=async({before,after,configFile,getConfig})=>{try{let config=await getConfig(configFile);if(!config?.addons){logger.warn("Unable to find 'addons' config in main Storybook config");return}if(!isCorrectOrder(config.addons,before,after)){let orEssentials=" (or '@storybook/addon-essentials')",beforeText=`'${before.name}'${before.inEssentials?orEssentials:""}`,afterText=`'${after.name}'${after.inEssentials?orEssentials:""}`;logger.warn(`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`);}}catch{logger.warn(`Unable to load config file: ${configFile}`);}};var getProjectRoot=()=>{let result;if(process.env.STORYBOOK_PROJECT_ROOT)return process.env.STORYBOOK_PROJECT_ROOT;try{let found=findUp.sync(".git",{type:"directory"});found&&(result=path6.join(found,".."));}catch{}try{let found=findUp.sync(".svn",{type:"directory"});found&&(result=result||path6.join(found,".."));}catch{}try{let found=findUp.sync(".hg",{type:"directory"});found&&(result=result||path6.join(found,".."));}catch{}try{let found=findUp.sync(".yarn",{type:"directory"});found&&(result=result||path6.join(found,".."));}catch{}try{result=result||__dirname.split("node_modules")[0];}catch{}return result||process.cwd()},nodePathsToArray=nodePath=>nodePath.split(process.platform==="win32"?";":":").filter(Boolean).map(p=>path6.resolve("./",p)),relativePattern=/^\.{1,2}([/\\]|$)/;function normalizeStoryPath(filename){return relativePattern.test(filename)?filename:`.${path6.sep}${filename}`}function loadEnvs(options={}){let defaultNodeEnv=options.production?"production":"development",env={NODE_ENV:process.env.NODE_ENV||defaultNodeEnv,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:options.production?".":""};Object.keys(process.env).filter(name=>/^STORYBOOK_/.test(name)).forEach(name=>{env[name]=process.env[name];});let base=Object.entries(env).reduce((acc,[k,v])=>Object.assign(acc,{[k]:JSON.stringify(v)}),{}),{stringified,raw}=getEnvironment({nodeEnv:env.NODE_ENV}),fullRaw={...env,...raw};return fullRaw.NODE_PATH=nodePathsToArray(fullRaw.NODE_PATH||""),{stringified:{...base,...stringified},raw:fullRaw}}var stringifyEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[key]=JSON.stringify(value),acc),{}),stringifyProcessEnvs=raw=>Object.entries(raw).reduce((acc,[key,value])=>(acc[`process.env.${key}`]=JSON.stringify(value),acc),{});var NODE_MODULES_RE=/node_modules/,commonGlobOptions=glob2=>NODE_MODULES_RE.test(glob2)?{}:{ignore:["**/node_modules/**"]};async function getBuilderOptions(options){let framework=await options.presets.apply("framework",{},options);if(typeof framework!="string"&&framework?.options?.builder)return framework.options.builder;let{builder}=await options.presets.apply("core",{},options);return typeof builder!="string"&&builder?.options?builder.options:{}}async function getFrameworkName(options){let framework=await options.presets.apply("framework","",options);if(!framework)throw new Error(dedent`
35
45
  You must specify a framework in '.storybook/main.js' config.
36
46
 
37
47
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
38
- `);return typeof framework=="object"?framework.name:framework}async function getRendererName(options){let core=await options.presets.apply("core",{},options);return !core||!core.renderer?getFrameworkName(options):core.renderer}function getStorybookConfiguration(storybookScript,shortName,longName){if(!storybookScript)return null;let parts=storybookScript.split(/[\s='"]+/),index=parts.indexOf(longName);return index===-1&&(index=parts.indexOf(shortName)),index===-1?null:parts[index+1]}var rendererPackages={"@storybook/react":"react","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/server":"server","storybook-framework-qwik":"qwik","storybook-solidjs":"solid"},frameworkPackages={"@storybook/angular":"angular","@storybook/ember":"ember","@storybook/html-vite":"html-vite","@storybook/html-webpack5":"html-webpack5","@storybook/nextjs":"nextjs","@storybook/preact-vite":"preact-vite","@storybook/preact-webpack5":"preact-webpack5","@storybook/react-vite":"react-vite","@storybook/react-webpack5":"react-webpack5","@storybook/server-webpack5":"server-webpack5","@storybook/svelte-vite":"svelte-vite","@storybook/svelte-webpack5":"svelte-webpack5","@storybook/sveltekit":"sveltekit","@storybook/vue3-vite":"vue3-vite","@storybook/vue3-webpack5":"vue3-webpack5","@storybook/web-components-vite":"web-components-vite","@storybook/web-components-webpack5":"web-components-webpack5","storybook-framework-qwik":"qwik","storybook-solidjs-vite":"solid"},builderPackages=["@storybook/builder-webpack5","@storybook/builder-vite"],logger3=console,findDependency=({dependencies,devDependencies,peerDependencies},predicate)=>[Object.entries(dependencies||{}).find(predicate),Object.entries(devDependencies||{}).find(predicate),Object.entries(peerDependencies||{}).find(predicate)],getRendererInfo=packageJson=>{let[dep,devDep,peerDep]=findDependency(packageJson,([key])=>rendererPackages[key]),[pkg,version]=dep||devDep||peerDep||[];return dep&&devDep&&dep[0]===devDep[0]&&logger3.warn(`Found "${dep[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),dep&&peerDep&&dep[0]===peerDep[0]&&logger3.warn(`Found "${dep[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{version,frameworkPackage:pkg}},validConfigExtensions=["ts","js","tsx","jsx","mjs","cjs"],findConfigFile=(prefix,configDir)=>{let filePrefix=path5.join(configDir,prefix),extension=validConfigExtensions.find(ext=>fse.existsSync(`${filePrefix}.${ext}`));return extension?`${filePrefix}.${extension}`:null},getConfigInfo=(packageJson,configDir)=>{let storybookConfigDir=configDir??".storybook",storybookScript=packageJson.scripts?.storybook;if(storybookScript&&!configDir){let configParam=getStorybookConfiguration(storybookScript,"-c","--config-dir");configParam&&(storybookConfigDir=configParam);}return {configDir:storybookConfigDir,mainConfig:findConfigFile("main",storybookConfigDir),previewConfig:findConfigFile("preview",storybookConfigDir),managerConfig:findConfigFile("manager",storybookConfigDir)}},getStorybookInfo=(packageJson,configDir)=>{let rendererInfo=getRendererInfo(packageJson),configInfo=getConfigInfo(packageJson,configDir);return {...rendererInfo,...configInfo}};var getAutoRefs=async options=>{let location=await findUp("package.json",{cwd:options.configDir});if(!location)return {};let directory=dirname(location),{dependencies=[],devDependencies=[]}=await readJSON(location)||{},deps=Object.keys({...dependencies,...devDependencies});return (await Promise.all(deps.map(async d=>{try{let l=resolveFrom(directory,join(d,"package.json")),{storybook,name,version}=await readJSON(l)||{};if(storybook?.url)return {id:name,...storybook,version}}catch(error){if(error.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return;logger.warn(`unable to find package.json for ${d}`);return}}))).filter(Boolean).reduce((acc,cur)=>({...acc,[cur.id]:{id:cur.id.toLowerCase(),url:stripTrailingSlash(cur.url),title:cur.title,version:cur.version}}),{})},checkRef=url=>fetch(`${url}/iframe.html`).then(async({ok,status})=>{if(ok){if(status!==200)return !1;let data=await fetch(`${url}/iframe.html`,{headers:{Accept:"application/json"}});if(data.ok&&(await data.json().catch(e=>({}))).loginUrl)return !1}return ok},()=>!1),stripTrailingSlash=url=>url.replace(/\/$/,""),toTitle=input=>{let result=input.replace(/[A-Z]/g,f=>` ${f}`).replace(/[-_][A-Z]/gi,f=>` ${f.toUpperCase()}`).replace(/-/g," ").replace(/_/g," ");return `${result.substring(0,1).toUpperCase()}${result.substring(1)}`.trim()};async function getRefs(options){if(options.test)return {};let refs=await options.presets.apply("refs",await getAutoRefs(options));return Object.entries(refs).forEach(([key,value])=>{if(value.disable){delete refs[key];return}refs[key.toLowerCase()]={...value,id:key.toLowerCase(),title:value.title||toTitle(value.id||key),url:stripTrailingSlash(value.url)};}),await Promise.all(Object.entries(refs).map(async([k,value])=>{let ok=await checkRef(value.url);refs[k]={...value,type:ok?"server-checked":"unknown"};})),refs}function globToRegexp(glob2){let regex=pico.makeRe(glob2,{fastpaths:!1,noglobstar:!1,bash:!1});if(!regex.source.startsWith("^"))throw new Error(`Invalid glob: >> ${glob2} >> ${regex}`);return glob2.startsWith("./")?new RegExp(["^\\.",glob2.startsWith("./**")?"":"[\\\\/]",regex.source.substring(1)].join("")):regex}function handlebars(source,data){return Handlebars.compile(source)(data)}var interpolate=(template,bindings)=>Object.entries(bindings).reduce((acc,[k,v])=>{let escapedString=v.replace(/\\/g,"/").replace(/\$/g,"$$$");return acc.replace(new RegExp(`{{${k}}}`,"g"),escapedString)},template);async function loadMainConfig({configDir=".storybook",noCache=!1}){await validateConfigurationFiles(configDir);let mainJsPath=serverResolve(path5.resolve(configDir,"main"));return noCache&&mainJsPath&&__require.cache[mainJsPath]&&delete __require.cache[mainJsPath],serverRequire(mainJsPath)}function loadManagerOrAddonsFile({configDir}){let storybookCustomAddonsPath=getInterpretedFile(path5.resolve(configDir,"addons")),storybookCustomManagerPath=getInterpretedFile(path5.resolve(configDir,"manager"));if((storybookCustomAddonsPath||storybookCustomManagerPath)&&logger.info("=> Loading custom manager config"),storybookCustomAddonsPath&&storybookCustomManagerPath)throw new Error(dedent`
39
- You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${path5.resolve(configDir,"addons")})`);return storybookCustomManagerPath||storybookCustomAddonsPath}function loadPreviewOrConfigFile({configDir}){let storybookConfigPath=getInterpretedFile(path5.resolve(configDir,"config")),storybookPreviewPath=getInterpretedFile(path5.resolve(configDir,"preview"));if(storybookConfigPath&&storybookPreviewPath)throw new Error(dedent`
40
- You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${path5.resolve(configDir,"config")})`);return storybookPreviewPath||storybookConfigPath}function logConfig(caption,config){console.log(chalk.cyan(caption)),console.dir(config,{depth:null});}var DEFAULT_TITLE_PREFIX="",DEFAULT_FILES_PATTERN="**/*.@(mdx|stories.@(js|jsx|mjs|ts|tsx))",isDirectory=(configDir,entry)=>{try{return fs3.lstatSync(path5.resolve(configDir,entry)).isDirectory()}catch{return !1}},getDirectoryFromWorkingDir=({configDir,workingDir,directory})=>{let directoryFromConfig=path5.resolve(configDir,directory),directoryFromWorking=path5.relative(workingDir,directoryFromConfig);return normalizeStoryPath(directoryFromWorking)},normalizeStoriesEntry=(entry,{configDir,workingDir,defaultFilesPattern=DEFAULT_FILES_PATTERN})=>{let specifierWithoutMatcher;if(typeof entry=="string"){let globResult=pico.scan(entry);if(globResult.isGlob){let directory2=globResult.prefix+globResult.base,files2=globResult.glob;specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:directory2,files:files2};}else isDirectory(configDir,entry)?specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:entry,files:defaultFilesPattern}:specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:path5.dirname(entry),files:path5.basename(entry)};}else specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,files:defaultFilesPattern,...entry};let files=slash(specifierWithoutMatcher.files),{directory:directoryRelativeToConfig}=specifierWithoutMatcher,directory=slash(getDirectoryFromWorkingDir({configDir,workingDir,directory:directoryRelativeToConfig})).replace(/\/$/,""),importPathMatcher=globToRegexp(`${directory}/${files}`);return {...specifierWithoutMatcher,directory,importPathMatcher}},normalizeStories=(entries,options)=>{if(!entries||Array.isArray(entries)&&entries.length===0)throw new InvalidStoriesEntryError;return entries.map(entry=>normalizeStoriesEntry(entry,options))};async function readTemplate(filename){return fse.readFile(filename,{encoding:"utf8"})}function isPreservingSymlinks(){let{NODE_OPTIONS,NODE_PRESERVE_SYMLINKS}=process.env;return !!NODE_PRESERVE_SYMLINKS||NODE_OPTIONS?.includes("--preserve-symlinks")}var interpolate2=(string,data={})=>Object.entries(data).reduce((acc,[k,v])=>acc.replace(new RegExp(`%${k}%`,"g"),v),string);function getPreviewBodyTemplate(configDirPath,interpolations){let base=fs3__default.readFileSync(`${sync(__dirname)}/templates/base-preview-body.html`,"utf8"),bodyHtmlPath=path5.resolve(configDirPath,"preview-body.html"),result=base;return fs3__default.existsSync(bodyHtmlPath)&&(result=fs3__default.readFileSync(bodyHtmlPath,"utf8")+result),interpolate2(result,interpolations)}function getPreviewHeadTemplate(configDirPath,interpolations){let base=fs3__default.readFileSync(`${sync(__dirname)}/templates/base-preview-head.html`,"utf8"),headHtmlPath=path5.resolve(configDirPath,"preview-head.html"),result=base;return fs3__default.existsSync(headHtmlPath)&&(result+=fs3__default.readFileSync(headHtmlPath,"utf8")),interpolate2(result,interpolations)}var renderers=["html","preact","react","server","svelte","vue","vue3","web-components"],rendererNames=[...renderers,...renderers.map(renderer=>`@storybook/${renderer}`)];function validateFrameworkName(frameworkName){if(!frameworkName)throw new MissingFrameworkFieldError;if(rendererNames.includes(frameworkName))throw new InvalidFrameworkNameError({frameworkName});if(!Object.keys(frameworkPackages).includes(frameworkName))try{__require.resolve(join(frameworkName,"preset"));}catch{throw new CouldNotEvaluateFrameworkError({frameworkName})}}function satisfies(){return x=>x}
48
+ `);return typeof framework=="object"?framework.name:framework}async function getRendererName(options){let core=await options.presets.apply("core",{},options);return !core||!core.renderer?getFrameworkName(options):core.renderer}var getAutoRefs=async options=>{let location=await findUp("package.json",{cwd:options.configDir});if(!location)return {};let directory=dirname(location),{dependencies=[],devDependencies=[]}=await readJSON(location)||{},deps=Object.keys({...dependencies,...devDependencies});return (await Promise.all(deps.map(async d=>{try{let l=resolveFrom(directory,join(d,"package.json")),{storybook,name,version}=await readJSON(l)||{};if(storybook?.url)return {id:name,...storybook,version}}catch(error){if(error.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return;logger.warn(`unable to find package.json for ${d}`);return}}))).filter(Boolean).reduce((acc,cur)=>({...acc,[cur.id]:{id:cur.id.toLowerCase(),url:stripTrailingSlash(cur.url),title:cur.title,version:cur.version}}),{})},checkRef=url=>fetch(`${url}/iframe.html`).then(async({ok,status})=>{if(ok){if(status!==200)return !1;let data=await fetch(`${url}/iframe.html`,{headers:{Accept:"application/json"}});if(data.ok&&(await data.json().catch(e=>({}))).loginUrl)return !1}return ok},()=>!1),stripTrailingSlash=url=>url.replace(/\/$/,""),toTitle=input=>{let result=input.replace(/[A-Z]/g,f=>` ${f}`).replace(/[-_][A-Z]/gi,f=>` ${f.toUpperCase()}`).replace(/-/g," ").replace(/_/g," ");return `${result.substring(0,1).toUpperCase()}${result.substring(1)}`.trim()};async function getRefs(options){if(options.test)return {};let refs=await options.presets.apply("refs",await getAutoRefs(options));return Object.entries(refs).forEach(([key,value])=>{if(value.disable){delete refs[key];return}refs[key.toLowerCase()]={...value,id:key.toLowerCase(),title:value.title||toTitle(value.id||key),url:stripTrailingSlash(value.url)};}),await Promise.all(Object.entries(refs).map(async([k,value])=>{let ok=await checkRef(value.url);refs[k]={...value,type:ok?"server-checked":"unknown"};})),refs}function globToRegexp(glob2){let regex=pico.makeRe(glob2,{fastpaths:!1,noglobstar:!1,bash:!1});if(!regex.source.startsWith("^"))throw new Error(`Invalid glob: >> ${glob2} >> ${regex}`);return glob2.startsWith("./")?new RegExp(["^\\.",glob2.startsWith("./**")?"":"[\\\\/]",regex.source.substring(1)].join("")):regex}var HandledError=class extends Error{constructor(error){super(String(error));this.handled=!0;typeof error!="string"&&(this.cause=error);}};function handlebars(source,data){return Handlebars.compile(source)(data)}var interpolate=(template,bindings)=>Object.entries(bindings).reduce((acc,[k,v])=>{let escapedString=v.replace(/\\/g,"/").replace(/\$/g,"$$$");return acc.replace(new RegExp(`{{${k}}}`,"g"),escapedString)},template);async function loadMainConfig({configDir=".storybook",noCache=!1}){await validateConfigurationFiles(configDir);let mainJsPath=serverResolve(path6.resolve(configDir,"main"));return noCache&&mainJsPath&&__require.cache[mainJsPath]&&delete __require.cache[mainJsPath],serverRequire(mainJsPath)}function loadManagerOrAddonsFile({configDir}){let storybookCustomAddonsPath=getInterpretedFile(path6.resolve(configDir,"addons")),storybookCustomManagerPath=getInterpretedFile(path6.resolve(configDir,"manager"));if((storybookCustomAddonsPath||storybookCustomManagerPath)&&logger.info("=> Loading custom manager config"),storybookCustomAddonsPath&&storybookCustomManagerPath)throw new Error(dedent`
49
+ You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${path6.resolve(configDir,"addons")})`);return storybookCustomManagerPath||storybookCustomAddonsPath}function loadPreviewOrConfigFile({configDir}){let storybookConfigPath=getInterpretedFile(path6.resolve(configDir,"config")),storybookPreviewPath=getInterpretedFile(path6.resolve(configDir,"preview"));if(storybookConfigPath&&storybookPreviewPath)throw new Error(dedent`
50
+ You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${path6.resolve(configDir,"config")})`);return storybookPreviewPath||storybookConfigPath}var logger6=console,commandLog=message=>(process.stdout.write(chalk.cyan(" \u2022 ")+message),(errorMessage,errorInfo)=>{if(errorMessage){if(process.stdout.write(`. ${chalk.red("\u2716")}
51
+ `),logger6.error(`
52
+ ${chalk.red(errorMessage)}`),!errorInfo)return;let newErrorInfo=errorInfo.split(`
53
+ `).map(line=>` ${chalk.dim(line)}`).join(`
54
+ `);logger6.error(`${newErrorInfo}
55
+ `);return}process.stdout.write(`. ${chalk.green("\u2713")}
56
+ `);});function paddedLog(message){let newMessage=message.split(`
57
+ `).map(line=>` ${line}`).join(`
58
+ `);logger6.log(newMessage);}function getChars(char,amount){let line="";for(let lc=0;lc<amount;lc+=1)line+=char;return line}function codeLog(codeLines,leftPadAmount){let maxLength=0,finalResult=codeLines.map(line=>(maxLength=line.length>maxLength?line.length:maxLength,line)).map(line=>{let rightPadAmount=maxLength-line.length,newLine=line+getChars(" ",rightPadAmount);return newLine=getChars(" ",leftPadAmount||2)+chalk.inverse(` ${newLine} `),newLine}).join(`
59
+ `);logger6.log(finalResult);}function logConfig(caption,config){console.log(chalk.cyan(caption)),console.dir(config,{depth:null});}var DEFAULT_TITLE_PREFIX="",DEFAULT_FILES_PATTERN="**/*.@(mdx|stories.@(js|jsx|mjs|ts|tsx))",isDirectory=(configDir,entry)=>{try{return fs5.lstatSync(path6.resolve(configDir,entry)).isDirectory()}catch{return !1}},getDirectoryFromWorkingDir=({configDir,workingDir,directory})=>{let directoryFromConfig=path6.resolve(configDir,directory),directoryFromWorking=path6.relative(workingDir,directoryFromConfig);return normalizeStoryPath(directoryFromWorking)},normalizeStoriesEntry=(entry,{configDir,workingDir,defaultFilesPattern=DEFAULT_FILES_PATTERN})=>{let specifierWithoutMatcher;if(typeof entry=="string"){let globResult=pico.scan(entry);if(globResult.isGlob){let directory2=globResult.prefix+globResult.base,files2=globResult.glob;specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:directory2,files:files2};}else isDirectory(configDir,entry)?specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:entry,files:defaultFilesPattern}:specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:path6.dirname(entry),files:path6.basename(entry)};}else specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,files:defaultFilesPattern,...entry};let files=slash(specifierWithoutMatcher.files),{directory:directoryRelativeToConfig}=specifierWithoutMatcher,directory=slash(getDirectoryFromWorkingDir({configDir,workingDir,directory:directoryRelativeToConfig})).replace(/\/$/,""),importPathMatcher=globToRegexp(`${directory}/${files}`);return {...specifierWithoutMatcher,directory,importPathMatcher}},normalizeStories=(entries,options)=>{if(!entries||Array.isArray(entries)&&entries.length===0)throw new InvalidStoriesEntryError;return entries.map(entry=>normalizeStoriesEntry(entry,options))};async function readTemplate(filename){return fse.readFile(filename,{encoding:"utf8"})}var logger7=console;function getPackageDetails(pkg){let idx=pkg.lastIndexOf("@");if(idx<=0)return [pkg,void 0];let packageName=pkg.slice(0,idx),packageVersion=pkg.slice(idx+1);return [packageName,packageVersion]}var JsPackageManager=class{async getPackageVersion(packageName,basePath=this.cwd){let packageJSON=await this.getPackageJSON(packageName,basePath);return packageJSON?packageJSON.version??null:null}async setRegistryURL(url){url?await this.executeCommand({command:"npm",args:["config","set","registry",url]}):await this.executeCommand({command:"npm",args:["config","delete","registry"]});}async getRegistryURL(){let url=(await this.executeCommand({command:"npm",args:["config","get","registry"]})).trim();return url==="undefined"?void 0:url}constructor(options){this.cwd=options?.cwd||process.cwd();}isStorybookInMonorepo(){let cwd=process.cwd();for(;;){try{let turboJsonPath=`${cwd}/turbo.json`,rushJsonPath=`${cwd}/rush.json`;if(fs5__default.existsSync(turboJsonPath)||fs5__default.existsSync(rushJsonPath))return !0;let packageJsonPath=__require.resolve(`${cwd}/package.json`),packageJsonFile=readFileSync(packageJsonPath,"utf8");if(JSON.parse(packageJsonFile).workspaces)return !0}catch{}let parentDir=path6.dirname(cwd);if(parentDir===cwd)break;cwd=parentDir;}return !1}async installDependencies(){let done=commandLog("Preparing to install dependencies");done(),logger7.log(),logger7.log(),done=commandLog("Installing dependencies"),logger7.log();try{await this.runInstall(),done();}catch(e){throw done("An error occurred while installing dependencies."),new HandledError(e)}}packageJsonPath(){if(!this.cwd)throw new Error("Missing cwd");return path6.resolve(this.cwd,"package.json")}async readPackageJson(){let packageJsonPath=this.packageJsonPath();if(!fs5__default.existsSync(packageJsonPath))throw new Error(`Could not read package.json file at ${packageJsonPath}`);let jsonContent=await readFile(packageJsonPath,"utf8");return JSON.parse(jsonContent)}async writePackageJson(packageJson){let packageJsonToWrite={...packageJson};packageJsonToWrite.dependencies&&Object.keys(packageJsonToWrite.dependencies).length===0&&delete packageJsonToWrite.dependencies,packageJsonToWrite.devDependencies&&Object.keys(packageJsonToWrite.devDependencies).length===0&&delete packageJsonToWrite.devDependencies,packageJsonToWrite.peerDependencies&&Object.keys(packageJsonToWrite.peerDependencies).length===0&&delete packageJsonToWrite.peerDependencies;let content=`${JSON.stringify(packageJsonToWrite,null,2)}
60
+ `;await writeFile(this.packageJsonPath(),content,"utf8");}async retrievePackageJson(){let packageJson;try{packageJson=await this.readPackageJson();}catch(err){let errMessage=String(err);if(errMessage.includes("Could not read package.json"))await this.initPackageJson(),packageJson=await this.readPackageJson();else throw new Error(dedent6`
61
+ There was an error while reading the package.json file at ${this.packageJsonPath()}: ${errMessage}
62
+ Please fix the error and try again.
63
+ `)}return {...packageJson,dependencies:{...packageJson.dependencies},devDependencies:{...packageJson.devDependencies},peerDependencies:{...packageJson.peerDependencies}}}async getAllDependencies(){let{dependencies,devDependencies,peerDependencies}=await this.retrievePackageJson();return {...dependencies,...devDependencies,...peerDependencies}}async addDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;invariant(packageJson,"Missing packageJson.");let dependenciesMap=dependencies.reduce((acc,dep)=>{let[packageName,packageVersion]=getPackageDetails(dep);return {...acc,[packageName]:packageVersion}},{});options.installAsDevDependencies?packageJson.devDependencies={...packageJson.devDependencies,...dependenciesMap}:packageJson.dependencies={...packageJson.dependencies,...dependenciesMap},await this.writePackageJson(packageJson);}else try{await this.runAddDeps(dependencies,!!options.installAsDevDependencies);}catch(e){throw logger7.error(`
64
+ An error occurred while installing dependencies:`),logger7.log(e.message),new HandledError(e)}}async removeDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;invariant(packageJson,"Missing packageJson."),dependencies.forEach(dep=>{packageJson.devDependencies&&delete packageJson.devDependencies[dep],packageJson.dependencies&&delete packageJson.dependencies[dep];}),await this.writePackageJson(packageJson);}else try{await this.runRemoveDeps(dependencies);}catch(e){throw logger7.error("An error occurred while removing dependencies."),logger7.log(String(e)),new HandledError(e)}}getVersionedPackages(packages){return Promise.all(packages.map(async pkg=>{let[packageName,packageVersion]=getPackageDetails(pkg),latestInRange=await this.latestVersion(packageName,packageVersion),currentVersion=versions_default[packageName];return currentVersion===latestInRange?`${packageName}`:currentVersion?`${packageName}@${currentVersion}`:`${packageName}@^${latestInRange}`}))}getVersions(...packageNames){return Promise.all(packageNames.map(packageName=>this.getVersion(packageName)))}async getVersion(packageName,constraint){let current;/(@storybook|^sb$|^storybook$)/.test(packageName)&&(current=versions_default[packageName]);let latest;try{latest=await this.latestVersion(packageName,constraint);}catch(e){if(current)return logger7.warn(`
65
+ ${chalk.yellow(String(e))}`),current;throw logger7.error(`
66
+ ${chalk.red(String(e))}`),new HandledError(e)}return `^${current&&(!constraint||satisfies(current,constraint))&&gt(current,latest)?current:latest}`}async latestVersion(packageName,constraint){if(!constraint)return this.runGetVersions(packageName,!1);let latestVersionSatisfyingTheConstraint=(await this.runGetVersions(packageName,!0)).reverse().find(version=>satisfies(version,constraint));return invariant(latestVersionSatisfyingTheConstraint!=null,"No version satisfying the constraint."),latestVersionSatisfyingTheConstraint}async addStorybookCommandInScripts(options){let storybookCmd=`storybook dev -p ${options?.port??6006}`,buildStorybookCmd="storybook build",preCommand=options?.preCommand?this.getRunCommand(options.preCommand):void 0;await this.addScripts({storybook:[preCommand,storybookCmd].filter(Boolean).join(" && "),"build-storybook":[preCommand,buildStorybookCmd].filter(Boolean).join(" && ")});}async addScripts(scripts){let packageJson=await this.retrievePackageJson();await this.writePackageJson({...packageJson,scripts:{...packageJson.scripts,...scripts}});}async addPackageResolutions(versions){let packageJson=await this.retrievePackageJson(),resolutions=this.getResolutions(packageJson,versions);this.writePackageJson({...packageJson,...resolutions});}executeCommandSync({command,args=[],stdio,cwd,ignoreError=!1,env,...execaOptions}){try{return sync(command,args,{cwd:cwd??this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0,cleanup:!0,env,...execaOptions}).stdout??""}catch(err){if(ignoreError!==!0)throw err;return ""}}async executeCommand({command: command$1,args=[],stdio,cwd,ignoreError=!1,env,...execaOptions}){try{return (await command([command$1,...args].join(" "),{cwd:cwd??this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0,cleanup:!0,env,...execaOptions})).stdout??""}catch(err){if(ignoreError!==!0)throw err;return ""}}};var NPM_ERROR_REGEX=/npm ERR! code (\w+)/,NPM_ERROR_CODES={E401:"Authentication failed or is required.",E403:"Access to the resource is forbidden.",E404:"Requested resource not found.",EACCES:"Permission issue.",EAI_FAIL:"DNS lookup failed.",EBADENGINE:"Engine compatibility check failed.",EBADPLATFORM:"Platform not supported.",ECONNREFUSED:"Connection refused.",ECONNRESET:"Connection reset.",EEXIST:"File or directory already exists.",EINVALIDTYPE:"Invalid type encountered.",EISGIT:"Git operation failed or conflicts with an existing file.",EJSONPARSE:"Error parsing JSON data.",EMISSINGARG:"Required argument missing.",ENEEDAUTH:"Authentication needed.",ENOAUDIT:"No audit available.",ENOENT:"File or directory does not exist.",ENOGIT:"Git not found or failed to run.",ENOLOCK:"Lockfile missing.",ENOSPC:"Insufficient disk space.",ENOTFOUND:"Resource not found.",EOTP:"One-time password required.",EPERM:"Permission error.",EPUBLISHCONFLICT:"Conflict during package publishing.",ERESOLVE:"Dependency resolution error.",EROFS:"File system is read-only.",ERR_SOCKET_TIMEOUT:"Socket timed out.",ETARGET:"Package target not found.",ETIMEDOUT:"Operation timed out.",ETOOMANYARGS:"Too many arguments provided.",EUNKNOWNTYPE:"Unknown type encountered."},NPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="npm";}async initPackageJson(){await this.executeCommand({command:"npm",args:["init","-y"]});}getRunStorybookCommand(){return "npm run storybook"}getRunCommand(command){return `npm run ${command}`}async getNpmVersion(){return this.executeCommand({command:"npm",args:["--version"]})}async getPackageJSON(packageName,basePath=this.cwd){let packageJsonPath=await sync$1(dir=>{let possiblePath=path6.join(dir,"node_modules",packageName,"package.json");return existsSync(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse(readFileSync$1(packageJsonPath,"utf-8")):null}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"npm",args:["exec","--",command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"npm",args:["exec","--",command,...args],cwd})}async findInstallations(){let exec=async({depth})=>{let pipeToNull=platform()==="win32"?"2>NUL":"2>/dev/null";return this.executeCommand({command:"npm",args:["ls","--json",`--depth=${depth}`,pipeToNull],env:{FORCE_COLOR:"false"}})};try{let commandResult=await exec({depth:99}),parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{try{let commandResult=await exec({depth:0}),parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{logger.warn("An issue occurred while trying to find dependencies metadata using npm.");return}}}getResolutions(packageJson,versions){return {overrides:{...packageJson.overrides,...versions}}}async runInstall(){await this.executeCommand({command:"npm",args:["install",...this.getInstallArgs()],stdio:"inherit"});}async runAddDeps(dependencies,installAsDevDependencies){let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream(),args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);try{await this.executeCommand({command:"npm",args:["install",...args,...this.getInstallArgs()],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]});}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(dedent6`${errorMessage}
67
+
68
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile();}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"npm",args:["uninstall",...this.getInstallArgs(),...args],stdio:"inherit"});}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"npm",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using npm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=sort([...existingVersions[name]||[],value.version]),existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse);};return Object.entries(input.dependencies).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"npm ls --depth=1",dedupeCommand:"npm dedupe"}}parseErrorFromLogs(logs){let finalMessage="NPM error",match=logs.match(NPM_ERROR_REGEX);if(match){let errorCode=match[1];errorCode&&(finalMessage=`${finalMessage} ${errorCode}`);let errorMessage=NPM_ERROR_CODES[errorCode];errorMessage&&(finalMessage=`${finalMessage} - ${errorMessage}`);}return finalMessage.trim()}};var PNPM_ERROR_REGEX=/(ELIFECYCLE|ERR_PNPM_[A-Z_]+)\s+(.*)/i,PNPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="pnpm";}detectWorkspaceRoot(){let pnpmWorkspaceYaml=`${process.cwd()}/pnpm-workspace.yaml`;return pathExistsSync(pnpmWorkspaceYaml)}async initPackageJson(){await this.executeCommand({command:"pnpm",args:["init"]});}getRunStorybookCommand(){return "pnpm run storybook"}getRunCommand(command){return `pnpm run ${command}`}async getPnpmVersion(){return this.executeCommand({command:"pnpm",args:["--version"]})}getInstallArgs(){return this.installArgs||(this.installArgs=[],this.detectWorkspaceRoot()&&this.installArgs.push("-w")),this.installArgs}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"pnpm",args:["exec",command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"pnpm",args:["exec",command,...args],cwd})}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"pnpm",args:["list",pattern.map(p=>`"${p}"`).join(" "),"--json","--depth=99"],env:{FORCE_COLOR:"false"}});try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}async getPackageJSON(packageName,basePath=this.cwd){let pnpapiPath=sync$1([".pnp.js",".pnp.cjs"],{cwd:basePath});if(pnpapiPath)try{let pnpApi=__require(pnpapiPath),resolvedPath=await pnpApi.resolveToUnqualified(packageName,basePath,{considerBuiltins:!1}),pkgLocator=pnpApi.findPackageLocator(resolvedPath),pkg=pnpApi.getPackageInformation(pkgLocator);return JSON.parse(fs5__default.readFileSync(path6.join(pkg.packageLocation,"package.json"),"utf-8"))}catch(error){return error.code!=="MODULE_NOT_FOUND"&&console.error("Error while fetching package version in PNPM PnP mode:",error),null}let packageJsonPath=await sync$1(dir=>{let possiblePath=path6.join(dir,"node_modules",packageName,"package.json");return fs5__default.existsSync(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse(fs5__default.readFileSync(packageJsonPath,"utf-8")):null}getResolutions(packageJson,versions){return {overrides:{...packageJson.overrides,...versions}}}async runInstall(){await this.executeCommand({command:"pnpm",args:["install",...this.getInstallArgs()],stdio:"inherit"});}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"pnpm",args:["add",...args,...this.getInstallArgs()],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]});}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(dedent6`${errorMessage}
69
+
70
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile();}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"pnpm",args:["remove",...args,...this.getInstallArgs()],stdio:"inherit"});}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"pnpm",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using pnpm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},items=input.reduce((curr,item)=>{let{devDependencies,dependencies,peerDependencies}=item,allDependencies={...devDependencies,...dependencies,...peerDependencies};return Object.assign(curr,allDependencies)},{}),recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse);};return Object.entries(items).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"pnpm list --depth=1",dedupeCommand:"pnpm dedupe"}}parseErrorFromLogs(logs){let finalMessage="PNPM error",match=logs.match(PNPM_ERROR_REGEX);if(match){let[errorCode]=match;errorCode&&(finalMessage=`${finalMessage} ${errorCode}`);}return finalMessage.trim()}};var parsePackageData=(packageName="")=>{let[first,second,third]=packageName.replace(/[└─├]+/g,"").trim().split("@"),version=(third||second).replace("npm:","");return {name:third?`@${second}`:first,value:{version,location:""}}};var YARN2_ERROR_REGEX=/(YN\d{4}):.*?Error:\s+(.*)/i,YARN2_ERROR_CODES={YN0000:"UNNAMED",YN0001:"EXCEPTION",YN0002:"MISSING_PEER_DEPENDENCY",YN0003:"CYCLIC_DEPENDENCIES",YN0004:"DISABLED_BUILD_SCRIPTS",YN0005:"BUILD_DISABLED",YN0006:"SOFT_LINK_BUILD",YN0007:"MUST_BUILD",YN0008:"MUST_REBUILD",YN0009:"BUILD_FAILED",YN0010:"RESOLVER_NOT_FOUND",YN0011:"FETCHER_NOT_FOUND",YN0012:"LINKER_NOT_FOUND",YN0013:"FETCH_NOT_CACHED",YN0014:"YARN_IMPORT_FAILED",YN0015:"REMOTE_INVALID",YN0016:"REMOTE_NOT_FOUND",YN0017:"RESOLUTION_PACK",YN0018:"CACHE_CHECKSUM_MISMATCH",YN0019:"UNUSED_CACHE_ENTRY",YN0020:"MISSING_LOCKFILE_ENTRY",YN0021:"WORKSPACE_NOT_FOUND",YN0022:"TOO_MANY_MATCHING_WORKSPACES",YN0023:"CONSTRAINTS_MISSING_DEPENDENCY",YN0024:"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",YN0025:"CONSTRAINTS_EXTRANEOUS_DEPENDENCY",YN0026:"CONSTRAINTS_INVALID_DEPENDENCY",YN0027:"CANT_SUGGEST_RESOLUTIONS",YN0028:"FROZEN_LOCKFILE_EXCEPTION",YN0029:"CROSS_DRIVE_VIRTUAL_LOCAL",YN0030:"FETCH_FAILED",YN0031:"DANGEROUS_NODE_MODULES",YN0032:"NODE_GYP_INJECTED",YN0046:"AUTOMERGE_FAILED_TO_PARSE",YN0047:"AUTOMERGE_IMMUTABLE",YN0048:"AUTOMERGE_SUCCESS",YN0049:"AUTOMERGE_REQUIRED",YN0050:"DEPRECATED_CLI_SETTINGS",YN0059:"INVALID_RANGE_PEER_DEPENDENCY",YN0060:"INCOMPATIBLE_PEER_DEPENDENCY",YN0061:"DEPRECATED_PACKAGE",YN0062:"INCOMPATIBLE_OS",YN0063:"INCOMPATIBLE_CPU",YN0068:"UNUSED_PACKAGE_EXTENSION",YN0069:"REDUNDANT_PACKAGE_EXTENSION",YN0071:"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",YN0072:"NM_PRESERVE_SYMLINKS_REQUIRED",YN0074:"NM_HARDLINKS_MODE_DOWNGRADED",YN0075:"PROLOG_INSTANTIATION_ERROR",YN0076:"INCOMPATIBLE_ARCHITECTURE",YN0077:"GHOST_ARCHITECTURE"},Yarn2Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn2";}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}async initPackageJson(){await this.executeCommand({command:"yarn",args:["init"]});}getRunStorybookCommand(){return "yarn storybook"}getRunCommand(command){return `yarn ${command}`}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"yarn",args:[command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"yarn",args:[command,...args],cwd})}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"yarn",args:["info","--name-only","--recursive",pattern.map(p=>`"${p}"`).join(" "),`"${pattern}"`],env:{FORCE_COLOR:"false"}});try{return this.mapDependencies(commandResult)}catch{return}}async getPackageJSON(packageName,basePath=this.cwd){let pnpapiPath=sync$1([".pnp.js",".pnp.cjs"],{cwd:basePath});if(pnpapiPath)try{let pnpApi=__require(pnpapiPath),resolvedPath=await pnpApi.resolveToUnqualified(packageName,basePath,{considerBuiltins:!1}),pkgLocator=pnpApi.findPackageLocator(resolvedPath),pkg=pnpApi.getPackageInformation(pkgLocator),zipOpenFs=new ZipOpenFS({libzip:getLibzipSync()}),virtualFs=new VirtualFS({baseFs:zipOpenFs}),crossFs=new PosixFS(virtualFs),virtualPath=path6.join(pkg.packageLocation,"package.json");return crossFs.readJsonSync(virtualPath)}catch(error){return error.code!=="MODULE_NOT_FOUND"&&console.error("Error while fetching package version in Yarn PnP mode:",error),null}let packageJsonPath=await sync$1(dir=>{let possiblePath=path6.join(dir,"node_modules",packageName,"package.json");return existsSync(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse(readFileSync$1(packageJsonPath,"utf-8")):null}getResolutions(packageJson,versions){return {resolutions:{...packageJson.resolutions,...versions}}}async runInstall(){await this.executeCommand({command:"yarn",args:["install",...this.getInstallArgs()],stdio:"inherit"});}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"yarn",args:["add",...this.getInstallArgs(),...args],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]});}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(dedent6`${errorMessage}
71
+
72
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile();}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"yarn",args:["remove",...this.getInstallArgs(),...args],stdio:"inherit"});}async runGetVersions(packageName,fetchAllVersions){let field=fetchAllVersions?"versions":"version",args=["--fields",field,"--json"],commandResult=await this.executeCommand({command:"yarn",args:["npm","info",packageName,...args]});try{return JSON.parse(commandResult)[field]}catch{throw new Error(`Unable to find versions of ${packageName} using yarn 2`)}}mapDependencies(input){let lines=input.split(`
73
+ `),acc={},existingVersions={},duplicatedDependencies={};return lines.forEach(packageName=>{if(!packageName||!packageName.includes("storybook"))return;let{name,value}=parsePackageData(packageName.replaceAll('"',""));existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name]));}),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why",dedupeCommand:"yarn dedupe"}}parseErrorFromLogs(logs){let finalMessage="YARN2 error",match=logs.match(YARN2_ERROR_REGEX);if(match){let errorCode=match[1];errorCode&&(finalMessage=`${finalMessage} ${errorCode}`);let errorType=YARN2_ERROR_CODES[errorCode];errorType&&(finalMessage=`${finalMessage} - ${errorType}`);let errorMessage=match[2];errorMessage&&(finalMessage=`${finalMessage}: ${errorMessage}`);}return finalMessage.trim()}};var YARN1_ERROR_REGEX=/^error\s(.*)$/gm,Yarn1Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn1";}getInstallArgs(){return this.installArgs||(this.installArgs=["--ignore-workspace-root-check"]),this.installArgs}async initPackageJson(){await this.executeCommand({command:"yarn",args:["init","-y"]});}getRunStorybookCommand(){return "yarn storybook"}getRunCommand(command){return `yarn ${command}`}runPackageCommandSync(command,args,cwd,stdio){return this.executeCommandSync({command:"yarn",args:[command,...args],cwd,stdio})}async runPackageCommand(command,args,cwd){return this.executeCommand({command:"yarn",args:[command,...args],cwd})}async getPackageJSON(packageName,basePath=this.cwd){let packageJsonPath=await sync$1(dir=>{let possiblePath=path6.join(dir,"node_modules",packageName,"package.json");return existsSync(possiblePath)?possiblePath:void 0},{cwd:basePath});return packageJsonPath?JSON.parse(readFileSync$1(packageJsonPath,"utf-8")):null}async findInstallations(pattern){let commandResult=await this.executeCommand({command:"yarn",args:["list","--pattern",pattern.map(p=>`"${p}"`).join(" "),"--recursive","--json"],env:{FORCE_COLOR:"false"}});try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}getResolutions(packageJson,versions){return {resolutions:{...packageJson.resolutions,...versions}}}async runInstall(){await this.executeCommand({command:"yarn",args:["install",...this.getInstallArgs()],stdio:"inherit"});}async runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]);let{logStream,readLogFile,moveLogFile,removeLogFile}=await createLogStream();try{await this.executeCommand({command:"yarn",args:["add",...this.getInstallArgs(),...args],stdio:process.env.CI?"inherit":["ignore",logStream,logStream]});}catch{let stdout=await readLogFile(),errorMessage=this.parseErrorFromLogs(stdout);throw await moveLogFile(),new Error(dedent6`${errorMessage}
74
+
75
+ Please check the logfile generated at ./storybook.log for troubleshooting and try again.`)}await removeLogFile();}async runRemoveDeps(dependencies){let args=[...dependencies];await this.executeCommand({command:"yarn",args:["remove",...this.getInstallArgs(),...args],stdio:"inherit"});}async runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=await this.executeCommand({command:"yarn",args:["info",packageName,...args]});try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.type==="inspect")return parsedOutput.data;throw new Error(`Unable to find versions of ${packageName} using yarn`)}catch{throw new Error(`Unable to find versions of ${packageName} using yarn`)}}mapDependencies(input){if(input.type==="tree"){let{trees}=input.data,acc={},existingVersions={},duplicatedDependencies={},recurse=tree=>{let{children}=tree,{name,value}=parsePackageData(tree.name);!name||!name.includes("storybook")||(existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),children.forEach(recurse));};return trees.forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why",dedupeCommand:"yarn dedupe"}}throw new Error("Something went wrong while parsing yarn output")}parseErrorFromLogs(logs){let finalMessage="YARN1 error",match=logs.match(YARN1_ERROR_REGEX);if(match){let errorMessage=match[0]?.replace(/^error\s(.*)$/,"$1");errorMessage&&(finalMessage=`${finalMessage}: ${errorMessage}`);}return finalMessage.trim()}};var NPM_LOCKFILE="package-lock.json",PNPM_LOCKFILE="pnpm-lock.yaml",YARN_LOCKFILE="yarn.lock",JsPackageManagerFactory=class{static getPackageManager({force}={},cwd){if(force&&force in this.PROXY_MAP)return new this.PROXY_MAP[force]({cwd});let closestLockfilePath=sync$1([YARN_LOCKFILE,PNPM_LOCKFILE,NPM_LOCKFILE],{cwd}),closestLockfile=closestLockfilePath&&path6.basename(closestLockfilePath),hasNPMCommand=hasNPM(cwd),hasPNPMCommand=hasPNPM(cwd),yarnVersion=getYarnVersion(cwd);if(yarnVersion&&(closestLockfile===YARN_LOCKFILE||!hasNPMCommand&&!hasPNPMCommand))return yarnVersion===1?new Yarn1Proxy({cwd}):new Yarn2Proxy({cwd});if(hasPNPMCommand&&closestLockfile===PNPM_LOCKFILE)return new PNPMProxy({cwd});if(hasNPMCommand&&closestLockfile===NPM_LOCKFILE)return new NPMProxy({cwd});let inferredPackageManager=this.inferPackageManagerFromUserAgent();if(inferredPackageManager&&inferredPackageManager in this.PROXY_MAP)return new this.PROXY_MAP[inferredPackageManager]({cwd});if(hasNPMCommand)return new NPMProxy({cwd});throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2")}static inferPackageManagerFromUserAgent(){let userAgent=process.env.npm_config_user_agent;if(userAgent){let packageSpec=userAgent.split(" ")[0],[pkgMgrName,pkgMgrVersion]=packageSpec.split("/");if(pkgMgrName==="pnpm")return "pnpm";if(pkgMgrName==="npm")return "npm";if(pkgMgrName==="yarn")return `yarn${pkgMgrVersion?.startsWith("1.")?"1":"2"}`}}};JsPackageManagerFactory.PROXY_MAP={npm:NPMProxy,pnpm:PNPMProxy,yarn1:Yarn1Proxy,yarn2:Yarn2Proxy};function hasNPM(cwd){return sync$2("npm",["--version"],{cwd,shell:!0}).status===0}function hasPNPM(cwd){return sync$2("pnpm",["--version"],{cwd,shell:!0}).status===0}function getYarnVersion(cwd){let yarnVersionCommand=sync$2("yarn",["--version"],{cwd,shell:!0});if(yarnVersionCommand.status!==0)return;let yarnVersion=yarnVersionCommand.output.toString().replace(/,/g,"").replace(/"/g,"");return /^1\.+/.test(yarnVersion)?1:2}var logger9=console;async function removeAddon(addon,options={}){let{packageManager:pkgMgr}=options,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=await packageManager.retrievePackageJson(),{mainConfig,configDir}=getStorybookInfo(packageJson);if(typeof configDir>"u")throw new Error(dedent6`
76
+ Unable to find storybook config directory
77
+ `);if(!mainConfig){logger9.error("Unable to find storybook main.js config");return}let main=await readConfig(mainConfig);logger9.log(`Uninstalling ${addon}`),await packageManager.removeDependencies({packageJson},[addon]),logger9.log(`Removing '${addon}' from main.js addons field.`);try{main.removeEntryFromArray(["addons"],addon),await writeConfig(main);}catch{logger9.warn(`Failed to remove '${addon}' from main.js addons field.`);}}function isPreservingSymlinks(){let{NODE_OPTIONS,NODE_PRESERVE_SYMLINKS}=process.env;return !!NODE_PRESERVE_SYMLINKS||NODE_OPTIONS?.includes("--preserve-symlinks")}var interpolate2=(string,data={})=>Object.entries(data).reduce((acc,[k,v])=>acc.replace(new RegExp(`%${k}%`,"g"),v),string);function getPreviewBodyTemplate(configDirPath,interpolations){let base=fs5__default.readFileSync(`${sync$3(__dirname)}/templates/base-preview-body.html`,"utf8"),bodyHtmlPath=path6.resolve(configDirPath,"preview-body.html"),result=base;return fs5__default.existsSync(bodyHtmlPath)&&(result=fs5__default.readFileSync(bodyHtmlPath,"utf8")+result),interpolate2(result,interpolations)}function getPreviewHeadTemplate(configDirPath,interpolations){let base=fs5__default.readFileSync(`${sync$3(__dirname)}/templates/base-preview-head.html`,"utf8"),headHtmlPath=path6.resolve(configDirPath,"preview-head.html"),result=base;return fs5__default.existsSync(headHtmlPath)&&(result+=fs5__default.readFileSync(headHtmlPath,"utf8")),interpolate2(result,interpolations)}var renderers=["html","preact","react","server","svelte","vue","vue3","web-components"],rendererNames=[...renderers,...renderers.map(renderer=>`@storybook/${renderer}`)];function validateFrameworkName(frameworkName){if(!frameworkName)throw new MissingFrameworkFieldError;if(rendererNames.includes(frameworkName))throw new InvalidFrameworkNameError({frameworkName});if(!Object.keys(frameworkPackages).includes(frameworkName))try{__require.resolve(join(frameworkName,"preset"));}catch{throw new CouldNotEvaluateFrameworkError({frameworkName})}}function satisfies2(){return x=>x}
41
78
 
42
- export { boost, builderPackages, cache, checkAddonOrder, commonGlobOptions, createFileSystemCache, filterPresetsConfig, findConfigFile, frameworkPackages, getAutoRefs, getBuilderOptions, getDirectoryFromWorkingDir, getFrameworkName, getInterpretedFile, getInterpretedFileWithExt, getPresets, getPreviewBodyTemplate, getPreviewHeadTemplate, getProjectRoot, getRefs, getRendererName, getStorybookConfiguration, getStorybookInfo, globToRegexp, handlebars, interopRequireDefault, interpolate, isPreservingSymlinks, loadAllPresets, loadCustomPresets, loadEnvs, loadMainConfig, loadManagerOrAddonsFile, loadPreset, loadPreviewOrConfigFile, logConfig, nodePathsToArray, normalizeStories, normalizeStoriesEntry, normalizeStoryPath, readTemplate, rendererPackages, resolveAddonName, resolvePathInStorybookCache, satisfies, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, stripAbsNodeModulesPath, validateConfigurationFiles, validateFrameworkName };
79
+ export { HandledError, JsPackageManager, JsPackageManagerFactory, boost, builderPackages, cache, checkAddonOrder, codeLog, commandLog, commonGlobOptions, createFileSystemCache, createLogStream, filterPresetsConfig, findConfigFile, frameworkPackages, getAutoRefs, getBuilderOptions, getChars, getCoercedStorybookVersion, getDirectoryFromWorkingDir, getEnvConfig, getFrameworkName, getInterpretedFile, getInterpretedFileWithExt, getPackageDetails, getPresets, getPreviewBodyTemplate, getPreviewHeadTemplate, getProjectRoot, getRefs, getRendererName, getStorybookConfiguration, getStorybookInfo, globToRegexp, handlebars, interopRequireDefault, interpolate, isCorePackage, isPreservingSymlinks, loadAllPresets, loadCustomPresets, loadEnvs, loadMainConfig, loadManagerOrAddonsFile, loadPreset, loadPreviewOrConfigFile, logConfig, nodePathsToArray, normalizeStories, normalizeStoriesEntry, normalizeStoryPath, paddedLog, parseList, readTemplate, removeAddon, rendererPackages, resolveAddonName, resolvePathInStorybookCache, satisfies2 as satisfies, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, stripAbsNodeModulesPath, validateConfigurationFiles, validateFrameworkName, versions_default as versions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/core-common",
3
- "version": "8.0.0-alpha.9",
3
+ "version": "8.0.0-beta.1",
4
4
  "description": "Storybook framework-agnostic API",
5
5
  "keywords": [
6
6
  "storybook"
@@ -44,16 +44,21 @@
44
44
  "prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts"
45
45
  },
46
46
  "dependencies": {
47
- "@storybook/core-events": "8.0.0-alpha.9",
48
- "@storybook/node-logger": "8.0.0-alpha.9",
49
- "@storybook/types": "8.0.0-alpha.9",
47
+ "@storybook/core-events": "8.0.0-beta.1",
48
+ "@storybook/csf-tools": "8.0.0-beta.1",
49
+ "@storybook/node-logger": "8.0.0-beta.1",
50
+ "@storybook/types": "8.0.0-beta.1",
50
51
  "@types/find-cache-dir": "^3.2.1",
51
52
  "@types/node": "^18.0.0",
52
53
  "@types/node-fetch": "^2.6.4",
53
54
  "@types/pretty-hrtime": "^1.0.0",
55
+ "@yarnpkg/fslib": "2.10.3",
56
+ "@yarnpkg/libzip": "2.3.0",
54
57
  "chalk": "^4.1.0",
58
+ "cross-spawn": "^7.0.3",
55
59
  "esbuild": "^0.18.0",
56
60
  "esbuild-register": "^3.5.0",
61
+ "execa": "^5.0.0",
57
62
  "file-system-cache": "2.3.0",
58
63
  "find-cache-dir": "^3.0.0",
59
64
  "find-up": "^5.0.0",
@@ -66,7 +71,11 @@
66
71
  "pkg-dir": "^5.0.0",
67
72
  "pretty-hrtime": "^1.0.3",
68
73
  "resolve-from": "^5.0.0",
69
- "ts-dedent": "^2.0.0"
74
+ "semver": "^7.3.7",
75
+ "tempy": "^1.0.1",
76
+ "tiny-invariant": "^1.3.1",
77
+ "ts-dedent": "^2.0.0",
78
+ "util": "^0.12.4"
70
79
  },
71
80
  "devDependencies": {
72
81
  "@types/fs-extra": "^11.0.1",
@@ -81,6 +90,7 @@
81
90
  "access": "public"
82
91
  },
83
92
  "bundler": {
93
+ "pre": "./scripts/generate-sb-packages-versions.js",
84
94
  "entries": [
85
95
  "./src/index.ts"
86
96
  ],
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { promisify } = require('util');
4
+ const { readJson, writeFile } = require('fs-extra');
5
+ const { exec } = require('child_process');
6
+ const path = require('path');
7
+ const semver = require('semver');
8
+ const { default: dedent } = require('ts-dedent');
9
+
10
+ const rootDirectory = path.join(__dirname, '..', '..', '..');
11
+
12
+ const logger = console;
13
+
14
+ const getMonorepoPackages = async () => {
15
+ const process = promisify(exec);
16
+ const contents = await process('yarn workspaces list --json --no-private', {
17
+ cwd: rootDirectory,
18
+ });
19
+
20
+ return JSON.parse(`[${contents.stdout.trim().split('\n').join(',')}]`).map((w) => w.location);
21
+ };
22
+
23
+ const run = async () => {
24
+ let updatedVersion = process.argv[process.argv.length - 1];
25
+
26
+ if (!semver.valid(updatedVersion)) {
27
+ updatedVersion = (await readJson(path.join(rootDirectory, 'package.json'))).version;
28
+ }
29
+
30
+ const storybookPackages = await getMonorepoPackages();
31
+
32
+ const packageToVersionMap = (
33
+ await Promise.all(
34
+ storybookPackages.map(async (location) => {
35
+ const { name, version } = await readJson(
36
+ path.join(rootDirectory, location, 'package.json')
37
+ );
38
+
39
+ return {
40
+ name,
41
+ version,
42
+ };
43
+ })
44
+ )
45
+ )
46
+ .filter(({ name }) => /^(@storybook|sb$|storybook$)/.test(name))
47
+ // As some previous steps are asynchronous order is not always the same so sort them to avoid that
48
+ .sort((package1, package2) => package1.name.localeCompare(package2.name))
49
+ .reduce((acc, { name }) => ({ ...acc, [name]: updatedVersion }), {});
50
+
51
+ const versionsPath = path.join(__dirname, '..', 'src', 'versions.ts');
52
+
53
+ await writeFile(
54
+ versionsPath,
55
+ dedent`
56
+ // auto generated file, do not edit
57
+ export default ${JSON.stringify(packageToVersionMap, null, 2)}
58
+ `
59
+ );
60
+
61
+ logger.log(`Updating versions and formatting results at: ${versionsPath}`);
62
+
63
+ const prettierBin = path.join(rootDirectory, '..', 'scripts', 'node_modules', '.bin', 'prettier');
64
+ exec(`${prettierBin} --write ${versionsPath}`, {
65
+ cwd: path.join(rootDirectory),
66
+ });
67
+ };
68
+
69
+ run().catch((e) => {
70
+ logger.error(e);
71
+ process.exit(1);
72
+ });
@@ -62,8 +62,17 @@
62
62
  left: 0;
63
63
  right: 0;
64
64
  padding: 20px;
65
- font-family: 'Nunito Sans', -apple-system, '.SFNSText-Regular', 'San Francisco',
66
- BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif;
65
+ font-family:
66
+ 'Nunito Sans',
67
+ -apple-system,
68
+ '.SFNSText-Regular',
69
+ 'San Francisco',
70
+ BlinkMacSystemFont,
71
+ 'Segoe UI',
72
+ 'Helvetica Neue',
73
+ Helvetica,
74
+ Arial,
75
+ sans-serif;
67
76
  -webkit-font-smoothing: antialiased;
68
77
  overflow: auto;
69
78
  }
@@ -257,7 +266,9 @@
257
266
 
258
267
  .sb-argstableBlock-body {
259
268
  border-radius: 4px;
260
- box-shadow: rgba(0, 0, 0, 0.1) 0 1px 3px 1px, rgba(0, 0, 0, 0.065) 0 0 0 1px;
269
+ box-shadow:
270
+ rgba(0, 0, 0, 0.1) 0 1px 3px 1px,
271
+ rgba(0, 0, 0, 0.065) 0 0 0 1px;
261
272
  }
262
273
  .sb-argstableBlock-body tr {
263
274
  background: transparent;
package/vitest.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /* eslint-disable @typescript-eslint/no-empty-interface */
2
1
  import 'vitest';
3
2
 
4
3
  interface CustomMatchers<R = unknown> {