@storybook/core-common 7.0.0-alpha.8 → 7.0.0-beta.0

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,391 +1,6 @@
1
- import { Options as Options$3 } from 'telejson';
2
- import { TransformOptions } from '@babel/core';
3
- import { Router } from 'express';
4
- import { Server } from 'http';
5
- import { Parameters } from '@storybook/csf';
6
-
7
- interface Options$2 {
8
- basePath?: string;
9
- ns?: string | string[];
10
- extension?: string;
11
- }
12
- declare class FileSystemCache {
13
- constructor(options: Options$2);
14
- private internal;
15
- path(key: string): string;
16
- fileExists(key: string): Promise<boolean>;
17
- ensureBasePath(): Promise<void>;
18
- get(key: string, defaultValue?: any): Promise<any | typeof defaultValue>;
19
- getSync(key: string, defaultValue?: any): any | typeof defaultValue;
20
- set(key: string, value: any): Promise<{
21
- path: string;
22
- }>;
23
- setSync(key: string, value: any): this;
24
- remove(key: string): Promise<void>;
25
- clear(): Promise<void>;
26
- save(): Promise<{
27
- paths: string[];
28
- }>;
29
- load(): Promise<{
30
- files: Array<{
31
- path: string;
32
- value: any;
33
- }>;
34
- }>;
35
- }
36
- declare function createFileSystemCache(options: Options$2): FileSystemCache;
37
-
38
- /**
39
- * ⚠️ This file contains internal WIP types they MUST NOT be exported outside this package for now!
40
- */
41
- declare type BuilderName = 'webpack5' | '@storybook/builder-webpack5' | string;
42
- interface CoreConfig {
43
- builder?: BuilderName | {
44
- name: BuilderName;
45
- options?: Record<string, any>;
46
- };
47
- disableWebpackDefaults?: boolean;
48
- channelOptions?: Partial<Options$3>;
49
- /**
50
- * Disables the generation of project.json, a file containing Storybook metadata
51
- */
52
- disableProjectJson?: boolean;
53
- /**
54
- * Disables Storybook telemetry
55
- * @see https://storybook.js.org/telemetry
56
- */
57
- disableTelemetry?: boolean;
58
- /**
59
- * Enable crash reports to be sent to Storybook telemetry
60
- * @see https://storybook.js.org/telemetry
61
- */
62
- enableCrashReports?: boolean;
63
- /**
64
- * enable CORS headings to run document in a "secure context"
65
- * see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements
66
- * This enables these headers in development-mode:
67
- * Cross-Origin-Opener-Policy: same-origin
68
- * Cross-Origin-Embedder-Policy: require-corp
69
- */
70
- crossOriginIsolated?: boolean;
71
- }
72
- interface DirectoryMapping {
73
- from: string;
74
- to: string;
75
- }
76
- interface Presets {
77
- apply(extension: 'typescript', config: TypescriptOptions, args?: Options$1): Promise<TypescriptOptions>;
78
- apply(extension: 'framework', config: {}, args: any): Promise<Preset>;
79
- apply(extension: 'babel', config: {}, args: any): Promise<TransformOptions>;
80
- apply(extension: 'entries', config: [], args: any): Promise<unknown>;
81
- apply(extension: 'stories', config: [], args: any): Promise<StoriesEntry[]>;
82
- apply(extension: 'managerEntries', config: [], args: any): Promise<string[]>;
83
- apply(extension: 'refs', config: [], args: any): Promise<unknown>;
84
- apply(extension: 'core', config: {}, args: any): Promise<CoreConfig>;
85
- apply<T>(extension: string, config?: T, args?: unknown): Promise<T>;
86
- }
87
- interface LoadedPreset {
88
- name: string;
89
- preset: any;
90
- options: any;
91
- }
92
- declare type PresetConfig = string | {
93
- name: string;
94
- options?: unknown;
95
- };
96
- interface Ref {
97
- id: string;
98
- url: string;
99
- title: string;
100
- version: string;
101
- type?: string;
102
- }
103
- interface VersionCheck {
104
- success: boolean;
105
- data?: any;
106
- error?: any;
107
- time: number;
108
- }
109
- interface ReleaseNotesData {
110
- success: boolean;
111
- currentVersion: string;
112
- showOnFirstLaunch: boolean;
113
- }
114
- interface Stats {
115
- toJson: () => any;
116
- }
117
- interface BuilderResult {
118
- totalTime?: ReturnType<typeof process.hrtime>;
119
- stats?: Stats;
120
- }
121
- interface PackageJson {
122
- name: string;
123
- version: string;
124
- dependencies?: Record<string, string>;
125
- devDependencies?: Record<string, string>;
126
- peerDependencies?: Record<string, string>;
127
- scripts?: Record<string, string>;
128
- eslintConfig?: Record<string, any>;
129
- type?: 'module';
130
- [key: string]: any;
131
- }
132
- interface LoadOptions {
133
- packageJson: PackageJson;
134
- outputDir?: string;
135
- configDir?: string;
136
- ignorePreview?: boolean;
137
- extendServer?: (server: Server) => void;
138
- }
139
- interface ManagerWebpackOptions {
140
- entries: string[];
141
- refs: Record<string, Ref>;
142
- }
143
- interface CLIOptions {
144
- port?: number;
145
- ignorePreview?: boolean;
146
- previewUrl?: string;
147
- forceBuildPreview?: boolean;
148
- disableTelemetry?: boolean;
149
- enableCrashReports?: boolean;
150
- host?: string;
151
- /**
152
- * @deprecated Use 'staticDirs' Storybook Configuration option instead
153
- */
154
- staticDir?: string[];
155
- configDir?: string;
156
- https?: boolean;
157
- sslCa?: string[];
158
- sslCert?: string;
159
- sslKey?: string;
160
- smokeTest?: boolean;
161
- managerCache?: boolean;
162
- open?: boolean;
163
- ci?: boolean;
164
- loglevel?: string;
165
- quiet?: boolean;
166
- versionUpdates?: boolean;
167
- releaseNotes?: boolean;
168
- dll?: boolean;
169
- docs?: boolean;
170
- docsDll?: boolean;
171
- uiDll?: boolean;
172
- debugWebpack?: boolean;
173
- webpackStatsJson?: string | boolean;
174
- outputDir?: string;
175
- }
176
- interface BuilderOptions {
177
- configType?: 'DEVELOPMENT' | 'PRODUCTION';
178
- ignorePreview: boolean;
179
- cache: FileSystemCache;
180
- configDir: string;
181
- docsMode: boolean;
182
- features?: StorybookConfig['features'];
183
- versionCheck?: VersionCheck;
184
- releaseNotesData?: ReleaseNotesData;
185
- disableWebpackDefaults?: boolean;
186
- serverChannelUrl?: string;
187
- }
188
- interface StorybookConfigOptions {
189
- presets: Presets;
190
- presetsList?: LoadedPreset[];
191
- }
192
- declare type Options$1 = LoadOptions & StorybookConfigOptions & CLIOptions & BuilderOptions;
193
- interface Builder<Config, Stats> {
194
- getConfig: (options: Options$1) => Promise<Config>;
195
- start: (args: {
196
- options: Options$1;
197
- startTime: ReturnType<typeof process.hrtime>;
198
- router: Router;
199
- server: Server;
200
- }) => Promise<void | {
201
- stats: Stats;
202
- totalTime: ReturnType<typeof process.hrtime>;
203
- bail: (e?: Error) => Promise<void>;
204
- }>;
205
- build: (arg: {
206
- options: Options$1;
207
- startTime: ReturnType<typeof process.hrtime>;
208
- }) => Promise<void | Stats>;
209
- bail: (e?: Error) => Promise<void>;
210
- corePresets?: string[];
211
- overridePresets?: string[];
212
- }
213
- interface IndexerOptions {
214
- makeTitle: (userTitle?: string) => string;
215
- }
216
- interface IndexedStory {
217
- id: string;
218
- name: string;
219
- parameters?: Parameters;
220
- }
221
- interface StoryIndex {
222
- meta: {
223
- title?: string;
224
- };
225
- stories: IndexedStory[];
226
- }
227
- interface StoryIndexer {
228
- test: RegExp;
229
- indexer: (fileName: string, options: IndexerOptions) => Promise<StoryIndex>;
230
- }
231
- /**
232
- * Options for TypeScript usage within Storybook.
233
- */
234
- interface TypescriptOptions {
235
- /**
236
- * Enables type checking within Storybook.
237
- *
238
- * @default `false`
239
- */
240
- check: boolean;
241
- /**
242
- * Disable parsing typescript files through babel.
243
- *
244
- * @default `false`
245
- */
246
- skipBabel: boolean;
247
- }
248
- interface StoriesSpecifier {
249
- /**
250
- * When auto-titling, what to prefix all generated titles with (default: '')
251
- */
252
- titlePrefix?: string;
253
- /**
254
- * Where to start looking for story files
255
- */
256
- directory: string;
257
- /**
258
- * What does the filename of a story file look like?
259
- * (a glob, relative to directory, no leading `./`)
260
- * If unset, we use `** / *.stories.@(mdx|tsx|ts|jsx|js)` (no spaces)
261
- */
262
- files?: string;
263
- }
264
- declare type StoriesEntry = string | StoriesSpecifier;
265
- declare type NormalizedStoriesSpecifier = Required<StoriesSpecifier> & {
266
- importPathMatcher: RegExp;
267
- };
268
- declare type Preset = string | {
269
- name: string;
270
- options?: any;
271
- };
272
- /**
273
- * An additional script that gets injected into the
274
- * preview or the manager,
275
- */
276
- declare type Entry = string;
277
- declare type StorybookRefs = Record<string, {
278
- title: string;
279
- url: string;
280
- } | {
281
- disable: boolean;
282
- }>;
283
- /**
284
- * The interface for Storybook configuration in `main.ts` files.
285
- */
286
- interface StorybookConfig {
287
- /**
288
- * Sets the addons you want to use with Storybook.
289
- *
290
- * @example `['@storybook/addon-essentials']` or `[{ name: '@storybook/addon-essentials', options: { backgrounds: false } }]`
291
- */
292
- addons?: Preset[];
293
- core?: CoreConfig;
294
- /**
295
- * Sets a list of directories of static files to be loaded by Storybook server
296
- *
297
- * @example `['./public']` or `[{from: './public', 'to': '/assets'}]`
298
- */
299
- staticDirs?: (DirectoryMapping | string)[];
300
- logLevel?: string;
301
- features?: {
302
- /**
303
- * Allows to disable deprecated implicit PostCSS loader. (will be removed in 7.0)
304
- */
305
- postcss?: boolean;
306
- /**
307
- * Build stories.json automatically on start/build
308
- */
309
- buildStoriesJson?: boolean;
310
- /**
311
- * Activate preview of CSF v3.0
312
- *
313
- * @deprecated This is always on now from 6.4 regardless of the setting
314
- */
315
- previewCsfV3?: boolean;
316
- /**
317
- * Activate on demand story store
318
- */
319
- storyStoreV7?: boolean;
320
- /**
321
- * Enable a set of planned breaking changes for SB7.0
322
- */
323
- breakingChangesV7?: boolean;
324
- /**
325
- * Enable the step debugger functionality in Addon-interactions.
326
- */
327
- interactionsDebugger?: boolean;
328
- /**
329
- * Use Storybook 7.0 babel config scheme
330
- */
331
- babelModeV7?: boolean;
332
- /**
333
- * Filter args with a "target" on the type from the render function (EXPERIMENTAL)
334
- */
335
- argTypeTargetsV7?: boolean;
336
- /**
337
- * Warn when there is a pre-6.0 hierarchy separator ('.' / '|') in the story title.
338
- * Will be removed in 7.0.
339
- */
340
- warnOnLegacyHierarchySeparator?: boolean;
341
- /**
342
- * Preview MDX2 support, will become default in 7.0
343
- */
344
- previewMdx2?: boolean;
345
- };
346
- /**
347
- * Tells Storybook where to find stories.
348
- *
349
- * @example `['./src/*.stories.@(j|t)sx?']`
350
- */
351
- stories: StoriesEntry[];
352
- /**
353
- * Framework, e.g. '@storybook/react', required in v7
354
- */
355
- framework?: Preset;
356
- /**
357
- * Controls how Storybook handles TypeScript files.
358
- */
359
- typescript?: Partial<TypescriptOptions>;
360
- /**
361
- * References external Storybooks
362
- */
363
- refs?: StorybookRefs | ((config: any, options: Options$1) => StorybookRefs);
364
- /**
365
- * Modify or return babel config.
366
- */
367
- babel?: (config: TransformOptions, options: Options$1) => TransformOptions | Promise<TransformOptions>;
368
- /**
369
- * Modify or return babel config.
370
- */
371
- babelDefault?: (config: TransformOptions, options: Options$1) => TransformOptions | Promise<TransformOptions>;
372
- /**
373
- * Add additional scripts to run in the preview a la `.storybook/preview.js`
374
- *
375
- * @deprecated use `previewAnnotations` or `/preview.js` file instead
376
- */
377
- config?: (entries: Entry[], options: Options$1) => Entry[];
378
- /**
379
- * Add additional scripts to run in the preview a la `.storybook/preview.js`
380
- */
381
- previewAnnotations?: (entries: Entry[], options: Options$1) => Entry[];
382
- /**
383
- * Process CSF files for the story index.
384
- */
385
- storyIndexers?: (indexers: StoryIndexer[], options: Options$1) => StoryIndexer[];
386
- }
387
- declare type PresetProperty<K, TStorybookConfig = StorybookConfig> = TStorybookConfig[K extends keyof TStorybookConfig ? K : never] | PresetPropertyFn<K, TStorybookConfig>;
388
- declare type PresetPropertyFn<K, TStorybookConfig = StorybookConfig, TOptions = {}> = (config: TStorybookConfig[K extends keyof TStorybookConfig ? K : never], options: Options$1 & TOptions) => TStorybookConfig[K extends keyof TStorybookConfig ? K : never] | Promise<TStorybookConfig[K extends keyof TStorybookConfig ? K : never]>;
1
+ import { PresetConfig, CoreCommon_ResolvedAddonPreset, CoreCommon_ResolvedAddonVirtual, LoadedPreset, CLIOptions, LoadOptions, BuilderOptions, Presets, CoreCommon_AddonInfo, Options as Options$2, PackageJson, CoreCommon_StorybookInfo, Ref, StorybookConfig, StoriesEntry, NormalizedStoriesSpecifier } from '@storybook/types';
2
+ import * as Cache from 'file-system-cache';
3
+ import Cache__default from 'file-system-cache';
389
4
 
390
5
  declare function filterPresetsConfig(presetsConfig: PresetConfig[]): PresetConfig[];
391
6
  /**
@@ -404,44 +19,24 @@ declare function filterPresetsConfig(presetsConfig: PresetConfig[]): PresetConfi
404
19
  * - { name: '@storybook/addon-docs(/preset)?', options: { ... } }
405
20
  * => { type: 'presets', item: { name: '@storybook/addon-docs/preset', options } }
406
21
  */
407
- interface ResolvedAddonPreset {
408
- type: 'presets';
409
- name: string;
410
- }
411
- interface ResolvedAddonVirtual {
412
- type: 'virtual';
413
- name: string;
414
- managerEntries?: string[];
415
- previewAnnotations?: string[];
416
- presets?: (string | {
417
- name: string;
418
- options?: any;
419
- })[];
420
- }
421
- declare const resolveAddonName: (configDir: string, name: string, options: any) => ResolvedAddonPreset | ResolvedAddonVirtual | undefined;
422
- declare function loadPreset(input: PresetConfig, level: number, storybookOptions: InterPresetOptions): LoadedPreset[];
423
- declare type InterPresetOptions = Omit<CLIOptions & LoadOptions & BuilderOptions, 'frameworkPresets'>;
424
- declare function getPresets(presets: PresetConfig[], storybookOptions: InterPresetOptions): Presets;
22
+ declare const resolveAddonName: (configDir: string, name: string, options: any) => CoreCommon_ResolvedAddonPreset | CoreCommon_ResolvedAddonVirtual | undefined;
23
+ declare function loadPreset(input: PresetConfig, level: number, storybookOptions: InterPresetOptions): Promise<LoadedPreset[]>;
24
+ type InterPresetOptions = Omit<CLIOptions & LoadOptions & BuilderOptions, 'frameworkPresets'>;
25
+ declare function getPresets(presets: PresetConfig[], storybookOptions: InterPresetOptions): Promise<Presets>;
425
26
  declare function loadAllPresets(options: CLIOptions & LoadOptions & BuilderOptions & {
426
- corePresets: string[];
427
- overridePresets: string[];
428
- }): Presets;
27
+ corePresets: PresetConfig[];
28
+ overridePresets: PresetConfig[];
29
+ }): Promise<Presets>;
429
30
 
430
- declare type OptionsEntry = {
431
- name: string;
432
- };
433
- declare type AddonEntry = string | OptionsEntry;
434
- declare type AddonInfo = {
435
- name: string;
436
- inEssentials: boolean;
437
- };
438
- interface Options {
439
- before: AddonInfo;
440
- after: AddonInfo;
31
+ declare const cache: Cache.FileSystemCache;
32
+
33
+ interface Options$1 {
34
+ before: CoreCommon_AddonInfo;
35
+ after: CoreCommon_AddonInfo;
441
36
  configFile: string;
442
37
  getConfig: (path: string) => any;
443
38
  }
444
- declare const checkAddonOrder: ({ before, after, configFile, getConfig }: Options) => Promise<void>;
39
+ declare const checkAddonOrder: ({ before, after, configFile, getConfig }: Options$1) => Promise<void>;
445
40
 
446
41
  declare function loadEnvs(options?: {
447
42
  production?: boolean;
@@ -452,8 +47,39 @@ declare function loadEnvs(options?: {
452
47
  declare const stringifyEnvs: (raw: Record<string, string>) => Record<string, string>;
453
48
  declare const stringifyProcessEnvs: (raw: Record<string, string>) => Record<string, string>;
454
49
 
50
+ declare const findDistEsm: (cwd: string, relativePath: string) => string;
51
+
52
+ /**
53
+ * Framework can be a string or an object. This utility always returns the string name.
54
+ */
55
+ declare function getFrameworkName(options: Options$2): Promise<string>;
56
+
57
+ /**
58
+ * Render is set as a string on core. It must be set by the framework
59
+ */
60
+ declare function getRendererName(options: Options$2): Promise<string>;
61
+
62
+ declare function getStorybookConfiguration(storybookScript: string, shortName: string, longName: string): string | null;
63
+
64
+ declare const getStorybookInfo: (packageJson: PackageJson) => CoreCommon_StorybookInfo;
65
+
66
+ declare const getAutoRefs: (options: Options$2) => Promise<Record<string, Ref>>;
67
+ declare function getRefs(options: Options$2): Promise<Record<string, Ref>>;
68
+
69
+ declare function globToRegexp(glob: string): RegExp;
70
+
455
71
  declare function handlebars(source: string, data: any): string;
456
72
 
73
+ /**
74
+ * Return a string corresponding to template filled with bindings using following pattern:
75
+ * For each (key, value) of `bindings` replace, in template, `{{key}}` by escaped version of `value`
76
+ *
77
+ * @param template {String} Template with `{{binding}}`
78
+ * @param bindings {Object} key-value object use to fill the template, `{{key}}` will be replaced by `escaped(value)`
79
+ * @returns {String} Filled template
80
+ */
81
+ declare const interpolate: (template: string, bindings: Record<string, string>) => string;
82
+
457
83
  declare const boost: Set<string>;
458
84
  declare function getInterpretedFile(pathToFile: string): string | undefined;
459
85
  declare function getInterpretedFileWithExt(pathToFile: string): {
@@ -461,6 +87,7 @@ declare function getInterpretedFileWithExt(pathToFile: string): {
461
87
  ext: string;
462
88
  } | undefined;
463
89
 
90
+ declare function interopRequireDefault(filePath: string): any;
464
91
  declare function serverRequire(filePath: string | string[]): any;
465
92
  declare function serverResolve(filePath: string | string[]): string | null;
466
93
 
@@ -472,19 +99,6 @@ declare function loadMainConfig({ configDir }: {
472
99
  configDir: string;
473
100
  }): StorybookConfig;
474
101
 
475
- declare function getStorybookConfiguration(storybookScript: string, shortName: string, longName: string): string | null;
476
-
477
- interface StorybookInfo {
478
- framework: string;
479
- version: string;
480
- frameworkPackage: string;
481
- configDir?: string;
482
- mainConfig?: string;
483
- previewConfig?: string;
484
- managerConfig?: string;
485
- }
486
- declare const getStorybookInfo: (packageJson: PackageJson) => StorybookInfo;
487
-
488
102
  declare function loadManagerOrAddonsFile({ configDir }: {
489
103
  configDir: string;
490
104
  }): string | undefined;
@@ -495,6 +109,16 @@ declare function loadPreviewOrConfigFile({ configDir }: {
495
109
 
496
110
  declare function logConfig(caption: unknown, config: unknown): void;
497
111
 
112
+ declare const getDirectoryFromWorkingDir: ({ configDir, workingDir, directory, }: NormalizeOptions & {
113
+ directory: string;
114
+ }) => string;
115
+ declare const normalizeStoriesEntry: (entry: StoriesEntry, { configDir, workingDir }: NormalizeOptions) => NormalizedStoriesSpecifier;
116
+ interface NormalizeOptions {
117
+ configDir: string;
118
+ workingDir: string;
119
+ }
120
+ declare const normalizeStories: (entries: StoriesEntry[], options: NormalizeOptions) => NormalizedStoriesSpecifier[];
121
+
498
122
  declare const getProjectRoot: () => string;
499
123
  declare const nodePathsToArray: (nodePath: string) => string[];
500
124
  /**
@@ -502,10 +126,7 @@ declare const nodePathsToArray: (nodePath: string) => string[];
502
126
  */
503
127
  declare function normalizeStoryPath(filename: string): string;
504
128
 
505
- declare const useProgressReporting: (router: Router, startTime: [number, number], options: any) => Promise<{
506
- handler: any;
507
- modulesCount: number;
508
- }>;
129
+ declare function readTemplate(filename: string): Promise<string>;
509
130
 
510
131
  /**
511
132
  * Get the path of the file or directory with input name inside the Storybook cache directory:
@@ -517,40 +138,22 @@ declare const useProgressReporting: (router: Router, startTime: [number, number]
517
138
  */
518
139
  declare function resolvePathInStorybookCache(fileOrDirectoryName: string): string;
519
140
 
520
- declare const cache: FileSystemCache;
141
+ declare function isPreservingSymlinks(): boolean | undefined;
521
142
 
522
143
  declare function getPreviewBodyTemplate(configDirPath: string, interpolations?: Record<string, string>): string;
523
144
  declare function getPreviewHeadTemplate(configDirPath: string, interpolations?: Record<string, string>): string;
524
- declare function getManagerHeadTemplate(configDirPath: string, interpolations: Record<string, string>): string;
525
- declare function getManagerMainTemplate(): string;
526
- declare function getPreviewMainTemplate(): string;
527
145
 
528
- /**
529
- * Return a string corresponding to template filled with bindings using following pattern:
530
- * For each (key, value) of `bindings` replace, in template, `{{key}}` by escaped version of `value`
531
- *
532
- * @param template {String} Template with `{{binding}}`
533
- * @param bindings {Object} key-value object use to fill the template, `{{key}}` will be replaced by `escaped(value)`
534
- * @returns {String} Filled template
535
- */
536
- declare const interpolate: (template: string, bindings: Record<string, string>) => string;
146
+ declare function validateFrameworkName(frameworkName: string): void;
537
147
 
538
148
  declare function validateConfigurationFiles(configDir: string): void;
539
149
 
540
- declare function globToRegexp(glob: string): RegExp;
541
-
542
- declare const getDirectoryFromWorkingDir: ({ configDir, workingDir, directory, }: NormalizeOptions & {
543
- directory: string;
544
- }) => string;
545
- declare const normalizeStoriesEntry: (entry: StoriesEntry, { configDir, workingDir }: NormalizeOptions) => NormalizedStoriesSpecifier;
546
- interface NormalizeOptions {
547
- configDir: string;
548
- workingDir: string;
549
- }
550
- declare const normalizeStories: (entries: StoriesEntry[], options: NormalizeOptions) => NormalizedStoriesSpecifier[];
551
-
552
- declare function readTemplate(filename: string): Promise<string>;
150
+ /**
151
+ * Mimicking the satisfies operator until we can upgrade to TS4.9
152
+ */
153
+ declare function satisfies<A>(): <T extends A>(x: T) => T;
553
154
 
554
- declare const findDistEsm: (cwd: string, relativePath: string) => string;
155
+ type Options = Parameters<typeof Cache__default>['0'];
156
+ type FileSystemCache = ReturnType<typeof Cache__default>;
157
+ declare function createFileSystemCache(options: Options): FileSystemCache;
555
158
 
556
- export { AddonEntry, AddonInfo, Builder, BuilderName, BuilderOptions, BuilderResult, CLIOptions, CoreConfig, Entry, IndexedStory, IndexerOptions, LoadOptions, LoadedPreset, ManagerWebpackOptions, NormalizedStoriesSpecifier, Options$1 as Options, OptionsEntry, PackageJson, Preset, PresetConfig, PresetProperty, PresetPropertyFn, Presets, Ref, ReleaseNotesData, Stats, StoriesEntry, StoryIndex, StoryIndexer, StorybookConfig, StorybookConfigOptions, TypescriptOptions, VersionCheck, boost, cache, checkAddonOrder, createFileSystemCache, filterPresetsConfig, findDistEsm, getDirectoryFromWorkingDir, getInterpretedFile, getInterpretedFileWithExt, getManagerHeadTemplate, getManagerMainTemplate, getPresets, getPreviewBodyTemplate, getPreviewHeadTemplate, getPreviewMainTemplate, getProjectRoot, getStorybookConfiguration, getStorybookInfo, globToRegexp, handlebars, interpolate, loadAllPresets, loadCustomPresets, loadEnvs, loadMainConfig, loadManagerOrAddonsFile, loadPreset, loadPreviewOrConfigFile, logConfig, nodePathsToArray, normalizeStories, normalizeStoriesEntry, normalizeStoryPath, readTemplate, resolveAddonName, resolvePathInStorybookCache, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, useProgressReporting, validateConfigurationFiles };
159
+ export { boost, cache, checkAddonOrder, createFileSystemCache, filterPresetsConfig, findDistEsm, getAutoRefs, 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, resolveAddonName, resolvePathInStorybookCache, satisfies, serverRequire, serverResolve, stringifyEnvs, stringifyProcessEnvs, validateConfigurationFiles, validateFrameworkName };
package/dist/index.js CHANGED
@@ -1,23 +1,25 @@
1
- var rt=Object.create;var b=Object.defineProperty,ot=Object.defineProperties,nt=Object.getOwnPropertyDescriptor,st=Object.getOwnPropertyDescriptors,it=Object.getOwnPropertyNames,R=Object.getOwnPropertySymbols,at=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var pe=(e,t,r)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,d=(e,t)=>{for(var r in t||(t={}))J.call(t,r)&&pe(e,r,t[r]);if(R)for(var r of R(t))me.call(t,r)&&pe(e,r,t[r]);return e},I=(e,t)=>ot(e,st(t)),n=(e,t)=>b(e,"name",{value:t,configurable:!0});var N=(e,t)=>{var r={};for(var o in e)J.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&R)for(var o of R(e))t.indexOf(o)<0&&me.call(e,o)&&(r[o]=e[o]);return r};var ct=(e,t)=>{for(var r in t)b(e,r,{get:t[r],enumerable:!0})},de=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of it(t))!J.call(e,s)&&s!==r&&b(e,s,{get:()=>t[s],enumerable:!(o=nt(t,s))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?rt(at(e)):{},de(t||!e||!e.__esModule?b(r,"default",{value:e,enumerable:!0}):r,e)),ft=e=>de(b({},"__esModule",{value:!0}),e);var Vt={};ct(Vt,{boost:()=>k,cache:()=>Mt,checkAddonOrder:()=>bt,createFileSystemCache:()=>W,filterPresetsConfig:()=>je,findDistEsm:()=>Kt,getDirectoryFromWorkingDir:()=>Qe,getInterpretedFile:()=>v,getInterpretedFileWithExt:()=>K,getManagerHeadTemplate:()=>Bt,getManagerMainTemplate:()=>Dt,getPresets:()=>Ae,getPreviewBodyTemplate:()=>Ht,getPreviewHeadTemplate:()=>qt,getPreviewMainTemplate:()=>Lt,getProjectRoot:()=>wt,getStorybookConfiguration:()=>ne,getStorybookInfo:()=>Rt,globToRegexp:()=>ce,handlebars:()=>jt,interpolate:()=>Wt,loadAllPresets:()=>xt,loadCustomPresets:()=>Q,loadEnvs:()=>Et,loadMainConfig:()=>St,loadManagerOrAddonsFile:()=>It,loadPreset:()=>Ce,loadPreviewOrConfigFile:()=>Nt,logConfig:()=>Tt,nodePathsToArray:()=>re,normalizeStories:()=>Jt,normalizeStoriesEntry:()=>Ze,normalizeStoryPath:()=>oe,readTemplate:()=>zt,resolveAddonName:()=>Se,resolvePathInStorybookCache:()=>ie,serverRequire:()=>w,serverResolve:()=>_,stringifyEnvs:()=>Pt,stringifyProcessEnvs:()=>kt,useProgressReporting:()=>_t,validateConfigurationFiles:()=>S});module.exports=ft(Vt);var ke=c(require("ts-dedent")),C=require("@storybook/node-logger");var M=c(require("path"));var he=c(require("interpret")),ye=c(require("path")),V=require("@storybook/node-logger");var z=c(require("fs")),ue=require("interpret"),k=new Set([".js",".jsx",".ts",".tsx",".cjs",".mjs"]);function lt(){return[...Array.from(k),...Object.keys(ue.extensions).filter(e=>!k.has(e)).sort((e,t)=>e.length-t.length)]}n(lt,"sortExtensions");var ge=lt();function v(e){return ge.map(t=>e.endsWith(t)?e:`${e}${t}`).find(t=>z.default.existsSync(t))}n(v,"getInterpretedFile");function K(e){return ge.map(t=>({path:e.endsWith(t)?e:`${e}${t}`,ext:t})).find(t=>z.default.existsSync(t.path))}n(K,"getInterpretedFileWithExt");var T=new Map;function xe(e){if(!e)return 0;let t=T.get(e);if(t!==void 0)return t;if(typeof e=="string")return require(e),T.set(e,1),1;if(!Array.isArray(e))return e.register(require(e.module)),T.set(e,1),1;let r=0;for(let o=0;o<e.length;o+=1)try{r+=xe(e[o]);break}catch{}return T.set(e,r),r}n(xe,"registerCompiler");function pt(e){let t=require(e);return typeof t=="object"&&t!==null&&typeof t.default<"u"?t.default:t}n(pt,"interopRequireDefault");function mt(e){for(let t=0;t<e.length;t+=1){let r=K(e[t]);if(r)return r}}n(mt,"getCandidate");function w(e){let t=_(e);if(!t)return null;let r=ye.default.extname(t),o=he.default.extensions[r];return o&&xe(o)===0?(V.logger.warn(`=> File ${t} is detected`),V.logger.warn(` but impossible to import loader for ${r}`),null):pt(t)}n(w,"serverRequire");function _(e){let t=Array.isArray(e)?e:[e],r=mt(t);return r?r.path:null}n(_,"serverResolve");var j=c(require("ts-dedent")),ve=c(require("util-deprecate")),be=c(require("glob")),$=c(require("path"));var dt=(0,ve.default)(()=>{},j.default`
2
- Configuration files such as "config", "presets" and "addons" are deprecated and will be removed in Storybook 7.0.
3
- Read more about it in the migration guide: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#to-mainjs-configuration
4
- `),X=n((e,t,r)=>{let o=$.default.resolve(r,e),s=$.default.resolve(r,t);throw new Error(j.default`
5
- You have mixing configuration files:
6
- ${o}
7
- ${s}
8
- "${e}" and "${t}" cannot coexist.
9
- Please check the documentation for migration steps: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#to-mainjs-configuration
10
- `)},"errorMixingConfigFiles");function S(e){let t=`{${Array.from(k).join(",")}}`,r=n(l=>!!be.default.sync($.default.resolve(e,`${l}${t}`)).length,"exists"),o=r("main"),s=r("config");if(!o&&!s)throw new Error(j.default`
11
- No configuration files have been found in your configDir (${$.default.resolve(e)}).
1
+ "use strict";var He=Object.create;var O=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Ke=Object.getPrototypeOf,Ge=Object.prototype.hasOwnProperty;var Xe=(e,r)=>{for(var t in r)O(e,t,{get:r[t],enumerable:!0})},te=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Ve(r))!Ge.call(e,n)&&n!==t&&O(e,n,{get:()=>r[n],enumerable:!(o=Ye(r,n))||o.enumerable});return e};var c=(e,r,t)=>(t=e!=null?He(Ke(e)):{},te(r||!e||!e.__esModule?O(t,"default",{value:e,enumerable:!0}):t,e)),Ze=e=>te(O({},"__esModule",{value:!0}),e);var Lr={};Xe(Lr,{boost:()=>E,cache:()=>sr,checkAddonOrder:()=>ar,createFileSystemCache:()=>A,filterPresetsConfig:()=>de,findDistEsm:()=>lr,getAutoRefs:()=>Se,getDirectoryFromWorkingDir:()=>Ue,getFrameworkName:()=>V,getInterpretedFile:()=>y,getInterpretedFileWithExt:()=>z,getPresets:()=>ye,getPreviewBodyTemplate:()=>Fr,getPreviewHeadTemplate:()=>_r,getProjectRoot:()=>cr,getRefs:()=>Pr,getRendererName:()=>gr,getStorybookConfiguration:()=>K,getStorybookInfo:()=>hr,globToRegexp:()=>Z,handlebars:()=>wr,interopRequireDefault:()=>R,interpolate:()=>Cr,isPreservingSymlinks:()=>Ir,loadAllPresets:()=>nr,loadCustomPresets:()=>U,loadEnvs:()=>pr,loadMainConfig:()=>Or,loadManagerOrAddonsFile:()=>Er,loadPreset:()=>ge,loadPreviewOrConfigFile:()=>Rr,logConfig:()=>$r,nodePathsToArray:()=>q,normalizeStories:()=>jr,normalizeStoriesEntry:()=>Je,normalizeStoryPath:()=>H,readTemplate:()=>Ar,resolveAddonName:()=>le,resolvePathInStorybookCache:()=>J,satisfies:()=>Dr,serverRequire:()=>x,serverResolve:()=>$,stringifyEnvs:()=>mr,stringifyProcessEnvs:()=>dr,validateConfigurationFiles:()=>k,validateFrameworkName:()=>Tr});module.exports=Ze(Lr);var me=require("ts-dedent"),P=require("@storybook/node-logger"),g=require("path");var S=c(require("path"));var L=c(require("fs")),E=new Set([".js",".jsx",".ts",".tsx",".cjs",".mjs"]);function Qe(){return[...Array.from(E)]}var oe=Qe();function y(e){return oe.map(r=>e.endsWith(r)?e:`${e}${r}`).find(r=>L.default.existsSync(r))}function z(e){return oe.map(r=>({path:e.endsWith(r)?e:`${e}${r}`,ext:r})).find(r=>L.default.existsSync(r.path))}var ne=!1;function R(e){let r=!!require("module")._extensions[".ts"];if(ne===!1&&!r){let{register:n}=require("esbuild-register/dist/node");ne=!0,n({target:`node${process.version.slice(1)}`,format:"cjs",hookIgnoreNodeModules:!1,tsconfigRaw:`{
2
+ "compilerOptions": {
3
+ "strict": false,
4
+ "skipLibCheck": true,
5
+ },
6
+ }`})}let t=require(e);return typeof t=="object"&&t!==null&&typeof t.default<"u"?t.default:t}function er(e){for(let r=0;r<e.length;r+=1){let t=z(e[r]);if(t)return t}}function x(e){let r=$(e);return r?R(r):null}function $(e){let r=Array.isArray(e)?e:[e],t=er(r);return t?t.path:null}var se=require("ts-dedent"),ie=c(require("glob")),B=c(require("path"));function k(e){let r=`{${Array.from(E).join(",")}}`;if(!(n=>!!ie.default.sync(B.default.resolve(e,`${n}${r}`)).length)("main"))throw new Error(se.dedent`
7
+ No configuration files have been found in your configDir (${B.default.resolve(e)}).
12
8
  Storybook needs either a "main" or "config" file.
13
- `);if(o&&s)throw new Error(j.default`
14
- You have both a "main" and a "config". Please remove the "config" file from your configDir (${$.default.resolve(e,"config")})`);let i=r("presets");o&&i&&X("main","presets",e),r("preview")&&s&&X("preview","config",e);let m=r("addons");r("manager")&&m&&X("manager","addons",e),(i||s||m)&&dt()}n(S,"validateConfigurationFiles");function Q({configDir:e}){S(e);let t=w(M.default.resolve(e,"presets"));if(w(M.default.resolve(e,"main"))){let o=_(M.default.resolve(e,"main"));if(o)return[o]}return t||[]}n(Q,"loadCustomPresets");var we=c(require("resolve-from")),$e=n((e,t)=>{try{return(0,we.default)(e,t)}catch{return}},"safeResolveFrom"),Ee=n(e=>{try{return require.resolve(e)}catch{return}},"safeResolve");var O=n(e=>e!=null&&typeof e=="object"&&Array.isArray(e)===!1,"isObject"),ut=n(e=>typeof e=="function","isFunction");function je(e){return e.filter(t=>{let r=typeof t=="string"?t:t.name;return!/@storybook[\\\\/]preset-typescript/.test(r)})}n(je,"filterPresetsConfig");function Pe(e,t,r){return ut(e)?[...e(d(d({},r),t))]:Array.isArray(e)?[...e]:[]}n(Pe,"resolvePresetFunction");var Se=n((e,t,r)=>{let o=t.startsWith("/")?Ee:$e.bind(null,e),s=o(t);if(s){if(t.match(/\/(manager|register(-panel)?)(\.(js|ts|tsx|jsx))?$/))return{type:"virtual",name:t,managerEntries:[s]};if(t.match(/\/(preset)(\.(js|ts|tsx|jsx))?$/))return{type:"presets",name:s}}let i=t,a=o(`${i}/manager`),m=o(`${i}/register`)||o(`${i}/register-panel`),u=o(`${i}/preview`),l=o(`${i}/preset`);if(!(a||u)&&l)return{type:"presets",name:l};if(a||m||u||l){let f=[];return a&&f.push(a),!a&&m&&!l&&f.push(m),d(d(d({type:"virtual",name:i},f.length?{managerEntries:f}:{}),u?{previewAnnotations:[u]}:{}),l?{presets:[{name:l,options:r}]}:{})}if(s)return{type:"presets",name:s}},"resolveAddonName"),gt=n(({configDir:e})=>t=>{let r=O(t)&&t.options||void 0,o=O(t)?t.name:t;try{let s=Se(e,o,r);return d(d({},r?{options:r}:{}),s)}catch{C.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/
15
- ${t}`)}},"map");function ht(e){let t=require(e);return typeof t=="object"&&t!==null&&typeof t.default<"u"?t.default:t}n(ht,"interopRequireDefault");function yt(e){if(e.type==="virtual"){let r=e,{type:o,name:s}=r;return N(r,["type","name"])}let t=e.name?e.name:e;return ht(t)}n(yt,"getContent");function Ce(e,t,r){try{let s=e.name?e.name:e,i=e.options?e.options:{},a=yt(e);if(typeof a=="function"&&(a=a(r,i)),Array.isArray(a))return H(a,t+1,r);if(O(a)){let o=a,{addons:m,presets:u}=o,l=N(o,["addons","presets"]),f=Pe(u,i,r),g=Pe(m,i,r);return[...H([...f],t+1,r),...H([...g.map(gt(r))].filter(Boolean),t+1,r),{name:s,preset:l,options:i}]}throw new Error(ke.default`
9
+ `)}function U({configDir:e}){k(e);let r=x(S.default.resolve(e,"presets"));if(x(S.default.resolve(e,"main"))){let o=$(S.default.resolve(e,"main"));if(o)return[o]}return r||[]}var ae=c(require("resolve-from")),ce=(e,r)=>{try{return(0,ae.default)(e,r)}catch{return}},fe=e=>{try{return require.resolve(e)}catch{return}};var w=e=>e!=null&&typeof e=="object"&&Array.isArray(e)===!1,rr=e=>typeof e=="function";function de(e){return e.filter(r=>{let t=typeof r=="string"?r:r.name;return!/@storybook[\\\\/]preset-typescript/.test(t)})}function pe(e,r,t){return rr(e)?[...e({...t,...r})]:Array.isArray(e)?[...e]:[]}var le=(e,r,t)=>{let o=r.startsWith("/")?fe:ce.bind(null,e),n=o(r);if(n){let{dir:d,name:u}=(0,g.parse)(n);if(r.match(/\/(manager|register(-panel)?)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"virtual",name:r,managerEntries:[(0,g.join)(d,u)]};if(r.match(/\/(preset)(\.(js|mjs|ts|tsx|jsx))?$/))return{type:"presets",name:n}}let s=d=>{if(o(`${r}${d}`))return`${r}${d}`},a=d=>o(`${r}${d}`),i=a("/manager"),p=a("/register")||a("/register-panel"),f=s("/preview"),m=a("/preview"),l=a("/preset");if(!(i||f)&&l)return{type:"presets",name:l};if(i||p||f||l){let d=[];if(i){let{dir:u,name:v}=(0,g.parse)(i);d.push((0,g.join)(u,v))}if(!i&&p&&!l){let{dir:u,name:v}=(0,g.parse)(p);d.push((0,g.join)(u,v))}return{type:"virtual",name:r,...d.length?{managerEntries:d}:{},...f?{previewAnnotations:[m?{bare:f,absolute:m}:f]}:{},...l?{presets:[{name:l,options:t}]}:{}}}if(n)return{type:"presets",name:n}},tr=({configDir:e})=>r=>{let t=w(r)&&r.options||void 0,o=w(r)?r.name:r;try{let n=le(e,o,t);return{...t?{options:t}:{},...n}}catch{P.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/
10
+ ${r}`)}};async function or(e){if(e.type==="virtual"){let{type:t,name:o,...n}=e;return n}let r=e.name?e.name:e;return R(r)}async function ge(e,r,t){try{let o=e.name?e.name:e,n=e.options?e.options:{},s=await or(e);if(typeof s=="function"&&(s=s(t,n)),Array.isArray(s))return await j(s,r+1,t);if(w(s)){let{addons:a,presets:i,...p}=s,f=pe(i,n,t),m=pe(a,n,t);return[...await j([...f],r+1,t),...await j([...m.map(tr(t))].filter(Boolean),r+1,t),{name:o,preset:p,options:n}]}throw new Error(me.dedent`
16
11
  ${e} is not a valid preset
17
- `)}catch(s){let i=t>0?` Failed to load preset: ${JSON.stringify(e)} on level ${t}`:` Failed to load preset: ${JSON.stringify(e)}`;return C.logger.warn(i),C.logger.error(s),[]}}n(Ce,"loadPreset");function H(e,t,r){return!e||!Array.isArray(e)||!e.length?[]:e.reduce((o,s)=>{let i=Ce(s,t,r);return o.concat(i)},[])}n(H,"loadPresets");function Oe(e,t,r,o,s){let i=new Promise(a=>a(r));return e.length?e.reduce((a,{preset:m,options:u})=>{let l=m[t];if(!l)return a;if(typeof l=="function"){let f=l,g={preset:m,combinedOptions:I(d(d(d({},s),o),u),{presetsList:e,presets:{apply:async(h,x,F={})=>Oe(e,h,x,F,s)}})};return a.then(h=>f.call(g.preset,h,g.combinedOptions))}return a.then(f=>Array.isArray(f)&&Array.isArray(l)?[...f,...l]:O(f)&&O(l)?d(d({},f),l):l)},i):i}n(Oe,"applyPresets");function Ae(e,t){let r=H(e,0,t);return{apply:async(o,s,i={})=>Oe(r,o,s,i,t)}}n(Ae,"getPresets");function xt(e){let a=e,{corePresets:t=[],overridePresets:r=[]}=a,o=N(a,["corePresets","overridePresets"]),s=[...t,...Q(e),...r],i=je(s);return i.length<s.length&&C.logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),Ae(i,o)}n(xt,"loadAllPresets");var{logger:Z}=require("@storybook/node-logger"),ee=n(e=>t=>{let r=t.name||t;return r&&r.includes(e)},"predicateFor"),vt=n((e,t,r)=>{let o=e.findIndex(ee("@storybook/addon-essentials")),s=e.findIndex(ee(t.name)),i=e.findIndex(ee(r.name));return s===-1&&t.inEssentials&&(s=o),i===-1&&r.inEssentials&&(i=o),s!==-1&&i!==-1&&s<=i},"isCorrectOrder"),bt=n(async({before:e,after:t,configFile:r,getConfig:o})=>{try{let s=await o(r);if(!(s!=null&&s.addons)){Z.warn("Unable to find 'addons' config in main Storybook config");return}if(!vt(s.addons,e,t)){let i=" (or '@storybook/addon-essentials')",a=`'${e.name}'${e.inEssentials?i:""}`,m=`'${t.name}'${t.inEssentials?i:""}`;Z.warn(`Expected ${a} to be listed before ${m} in main Storybook config.`)}}catch{Z.warn(`Unable to load config file: ${r}`)}},"checkAddonOrder");var Fe=require("lazy-universal-dotenv");var A=c(require("path")),te=c(require("find-up")),wt=n(()=>{let e;try{let t=te.default.sync(".git",{type:"directory"});t&&(e=e||A.default.join(t,".."))}catch{}try{let t=te.default.sync(".svn",{type:"directory"});t&&(e=e||A.default.join(t,".."))}catch{}try{e=e||__dirname.split("node_modules")[0]}catch{}return e||process.cwd()},"getProjectRoot"),re=n(e=>e.split(process.platform==="win32"?";":":").filter(Boolean).map(t=>A.default.resolve("./",t)),"nodePathsToArray"),$t=/^\.{1,2}([/\\]|$)/;function oe(e){return $t.test(e)?e:`.${A.default.sep}${e}`}n(oe,"normalizeStoryPath");function Et(e={}){let t=e.production?"production":"development",r={NODE_ENV:process.env.NODE_ENV||t,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:e.production?".":""};Object.keys(process.env).filter(m=>/^STORYBOOK_/.test(m)).forEach(m=>{r[m]=process.env[m]});let o=Object.entries(r).reduce((m,[u,l])=>Object.assign(m,{[u]:JSON.stringify(l)}),{}),{stringified:s,raw:i}=(0,Fe.getEnvironment)({nodeEnv:r.NODE_ENV}),a=d(d({},r),i);return a.NODE_PATH=re(a.NODE_PATH||""),{stringified:d(d({},o),s),raw:a}}n(Et,"loadEnvs");var Pt=n(e=>Object.entries(e).reduce((t,[r,o])=>(t[r]=JSON.stringify(o),t),{}),"stringifyEnvs"),kt=n(e=>Object.entries(e).reduce((r,[o,s])=>(r[`process.env.${o}`]=JSON.stringify(s),r),{"process.env.XSTORYBOOK_EXAMPLE_APP":'""'}),"stringifyProcessEnvs");var Re=c(require("handlebars"));function jt(e,t){return Re.default.compile(e)(t)}n(jt,"handlebars");var Ie=c(require("path"));function St({configDir:e}){return S(e),w(Ie.default.resolve(e,"main"))}n(St,"loadMainConfig");function ne(e,t,r){if(!e)return null;let o=e.split(/[\s='"]+/),s=o.indexOf(r);return s===-1&&(s=o.indexOf(t)),s===-1?null:o[s+1]}n(ne,"getStorybookConfiguration");var _e=c(require("path")),Me=c(require("fs-extra"));var Ne={"@storybook/react":"react","@storybook/vue":"vue","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/marko":"marko","@storybook/mithril":"mithril","@storybook/riot":"riot","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/rax":"rax","@storybook/server":"server"},Te=console,Ct=n(({dependencies:e,devDependencies:t,peerDependencies:r},o)=>[Object.entries(e||{}).find(o),Object.entries(t||{}).find(o),Object.entries(r||{}).find(o)],"findDependency"),Ot=n(e=>{let[t,r,o]=Ct(e,([m])=>Ne[m]),[s,i]=t||r||o||[],a=s?Ne[s]:void 0;return t&&r&&t[0]===r[0]&&Te.warn(`Found "${t[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),t&&o&&t[0]===o[0]&&Te.warn(`Found "${t[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{framework:a,version:i,frameworkPackage:s}},"getFrameworkInfo"),At=["ts","js","tsx","jsx","mjs","cjs"],se=n((e,t)=>{let r=_e.default.join(t,e),o=At.find(s=>Me.default.existsSync(`${r}.${s}`));return o?`${r}.${o}`:null},"findConfigFile"),Ft=n(e=>{var o;let t=".storybook",r=(o=e.scripts)==null?void 0:o.storybook;if(r){let s=ne(r,"-c","--config-dir");s&&(t=s)}return{configDir:t,mainConfig:se("main",t),previewConfig:se("preview",t),managerConfig:se("manager",t)}},"getConfigInfo"),Rt=n(e=>{let t=Ot(e),r=Ft(e);return d(d({},t),r)},"getStorybookInfo");var q=c(require("path")),He=require("@storybook/node-logger"),qe=c(require("ts-dedent"));function It({configDir:e}){let t=v(q.default.resolve(e,"addons")),r=v(q.default.resolve(e,"manager"));if((t||r)&&He.logger.info("=> Loading custom manager config"),t&&r)throw new Error(qe.default`
18
- You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${q.default.resolve(e,"addons")})`);return r||t}n(It,"loadManagerOrAddonsFile");var B=c(require("path")),Be=c(require("ts-dedent"));function Nt({configDir:e}){let t=v(B.default.resolve(e,"config")),r=v(B.default.resolve(e,"preview"));if(t&&r)throw new Error(Be.default`
19
- You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${B.default.resolve(e,"config")})`);return r||t}n(Nt,"loadPreviewOrConfigFile");var De=c(require("chalk"));function Tt(e,t){console.log(De.default.cyan(e)),console.dir(t,{depth:null})}n(Tt,"logConfig");var Le=c(require("pretty-hrtime")),We=n(e=>(0,Le.default)(process.hrtime(e)).replace(" ms"," milliseconds").replace(" s"," seconds").replace(" m"," minutes"),"printDuration");var _t=n(async(e,t,r)=>{var u;let o=0,s,i=n(()=>{},"reportProgress");e.get("/progress",(l,f)=>{let g=!1,h=n(()=>{g=!0,f.end()},"close");f.on("close",h),!(g||f.writableEnded)&&(f.setHeader("Cache-Control","no-cache"),f.setHeader("Content-Type","text/event-stream"),f.setHeader("Connection","keep-alive"),f.flushHeaders(),i=n(x=>{g||f.writableEnded||(f.write(`data: ${JSON.stringify(x)}
12
+ `)}catch(o){let n=r>0?` Failed to load preset: ${JSON.stringify(e)} on level ${r}`:` Failed to load preset: ${JSON.stringify(e)}`;return P.logger.warn(n),P.logger.error(o),[]}}async function j(e,r,t){return!e||!Array.isArray(e)||!e.length?[]:(await Promise.all(e.map(async o=>ge(o,r,t)))).reduce((o,n)=>o.concat(n),[])}function ue(e,r,t,o,n){let s=new Promise(a=>a(t));return e.length?e.reduce((a,{preset:i,options:p})=>{let f=i[r];if(!f)return a;if(typeof f=="function"){let m=f,l={preset:i,combinedOptions:{...n,...o,...p,presetsList:e,presets:{apply:async(d,u,v={})=>ue(e,d,u,v,n)}}};return a.then(d=>m.call(l.preset,d,l.combinedOptions))}return a.then(m=>Array.isArray(m)&&Array.isArray(f)?[...m,...f]:w(m)&&w(f)?{...m,...f}:f)},s):s}async function ye(e,r){let t=await j(e,0,r);return{apply:async(o,n,s={})=>ue(t,o,n,s,r)}}async function nr(e){let{corePresets:r=[],overridePresets:t=[],...o}=e,n=[...r,...U(e),...t],s=de(n);return s.length<n.length&&P.logger.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),ye(s,o)}var be=c(require("file-system-cache"));function A(e){return(0,be.default)(e)}var I=c(require("path")),xe=c(require("pkg-dir"));function J(e){let r=process.cwd(),t=xe.default.sync(r),o;return t?o=I.default.resolve(t,"node_modules/.cache/storybook"):o=I.default.resolve(r,".cache/storybook"),I.default.join(o,e)}var sr=A({basePath:J("dev-server"),ns:"storybook"});var F=require("@storybook/node-logger"),M=e=>r=>{let t=r.name||r;return t&&t.includes(e)},ir=(e,r,t)=>{let o=e.findIndex(M("@storybook/addon-essentials")),n=e.findIndex(M(r.name)),s=e.findIndex(M(t.name));return n===-1&&r.inEssentials&&(n=o),s===-1&&t.inEssentials&&(s=o),n!==-1&&s!==-1&&n<=s},ar=async({before:e,after:r,configFile:t,getConfig:o})=>{try{let n=await o(t);if(!(n!=null&&n.addons)){F.logger.warn("Unable to find 'addons' config in main Storybook config");return}if(!ir(n.addons,e,r)){let s=" (or '@storybook/addon-essentials')",a=`'${e.name}'${e.inEssentials?s:""}`,i=`'${r.name}'${r.inEssentials?s:""}`;F.logger.warn(`Expected ${a} to be listed before ${i} in main Storybook config.`)}}catch{F.logger.warn(`Unable to load config file: ${t}`)}};var he=require("lazy-universal-dotenv");var C=c(require("path")),W=c(require("find-up")),cr=()=>{let e;try{let r=W.default.sync(".git",{type:"directory"});r&&(e=e||C.default.join(r,".."))}catch{}try{let r=W.default.sync(".svn",{type:"directory"});r&&(e=e||C.default.join(r,".."))}catch{}try{e=e||__dirname.split("node_modules")[0]}catch{}return e||process.cwd()},q=e=>e.split(process.platform==="win32"?";":":").filter(Boolean).map(r=>C.default.resolve("./",r)),fr=/^\.{1,2}([/\\]|$)/;function H(e){return fr.test(e)?e:`.${C.default.sep}${e}`}function pr(e={}){let r=e.production?"production":"development",t={NODE_ENV:process.env.NODE_ENV||r,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:e.production?".":""};Object.keys(process.env).filter(i=>/^STORYBOOK_/.test(i)).forEach(i=>{t[i]=process.env[i]});let o=Object.entries(t).reduce((i,[p,f])=>Object.assign(i,{[p]:JSON.stringify(f)}),{}),{stringified:n,raw:s}=(0,he.getEnvironment)({nodeEnv:t.NODE_ENV}),a={...t,...s};return a.NODE_PATH=q(a.NODE_PATH||""),{stringified:{...o,...n},raw:a}}var mr=e=>Object.entries(e).reduce((r,[t,o])=>(r[t]=JSON.stringify(o),r),{}),dr=e=>Object.entries(e).reduce((t,[o,n])=>(t[`process.env.${o}`]=JSON.stringify(n),t),{});var Y=c(require("path")),ve=require("find-up"),lr=(e,r)=>{let t=(0,ve.sync)("package.json",{cwd:e});if(!t)throw new Error(`Could not find package.json in: ${e}`);let o=Y.default.dirname(t);return Y.default.join(o,"dist","esm",r)};var ke=require("ts-dedent");async function V(e){let r=await e.presets.apply("framework","",e);if(!r)throw new Error(ke.dedent`
13
+ You must specify a framework in '.storybook/main.js' config.
20
14
 
21
- `),f.flush(),x.value===1&&h())},"reportProgress"))});let a=n((l,f,g)=>{o=Math.max(l,o);let h={value:o,message:f.charAt(0).toUpperCase()+f.slice(1)};if(f==="building"){let x=g&&g.match(/(\d+)\/(\d+)/)||[],F=parseInt(x[1],10),G=parseInt(x[2],10);!Number.isNaN(F)&&!Number.isNaN(G)&&(h.modules={complete:F,total:G},s=G)}o===1&&(r.cache&&r.cache.set("modulesCount",s),h.message||(h.message=`Completed in ${We(t)}.`)),i(h)},"handler"),m=await((u=r.cache)==null?void 0:u.get("modulesCount").catch(()=>{}))||1e3;return{handler:a,modulesCount:m}},"useProgressReporting");var D=c(require("path")),Ye=c(require("pkg-dir"));function ie(e){let t=process.cwd(),r=Ye.default.sync(t),o;return r?o=D.default.resolve(r,"node_modules/.cache/storybook"):o=D.default.resolve(t,".cache/storybook"),D.default.join(o,e)}n(ie,"resolvePathInStorybookCache");var Ue=c(require("file-system-cache")),L=class{constructor(t){this.internal=(0,Ue.default)(t)}path(t){return this.internal.path(t)}fileExists(t){return this.internal.fileExists(t)}ensureBasePath(){return this.internal.ensureBasePath()}get(t,r){return this.internal.get(t,r)}getSync(t,r){return this.internal.getSync(t,r)}set(t,r){return this.internal.set(t,r)}setSync(t,r){return this.internal.setSync(t,r),this}remove(t){return this.internal.remove(t)}clear(){return this.internal.clear()}save(){return this.internal.save()}load(){return this.internal.load()}};n(L,"FileSystemCache");function W(e){return new L(e)}n(W,"createFileSystemCache");var Mt=W({basePath:ie("dev-server"),ns:"storybook"});var Y=c(require("path")),E=require("pkg-dir"),y=c(require("fs")),ae=n((e,t={})=>Object.entries(t).reduce((r,[o,s])=>r.replace(new RegExp(`%${o}%`,"g"),s),e),"interpolate");function Ht(e,t){let r=y.default.readFileSync(`${(0,E.sync)(__dirname)}/templates/base-preview-body.html`,"utf8"),o=Y.default.resolve(e,"preview-body.html"),s=r;return y.default.existsSync(o)&&(s=y.default.readFileSync(o,"utf8")+s),ae(s,t)}n(Ht,"getPreviewBodyTemplate");function qt(e,t){let r=y.default.readFileSync(`${(0,E.sync)(__dirname)}/templates/base-preview-head.html`,"utf8"),o=Y.default.resolve(e,"preview-head.html"),s=r;return y.default.existsSync(o)&&(s+=y.default.readFileSync(o,"utf8")),ae(s,t)}n(qt,"getPreviewHeadTemplate");function Bt(e,t){let r=y.default.readFileSync(`${(0,E.sync)(__dirname)}/templates/base-manager-head.html`,"utf8"),o=Y.default.resolve(e,"manager-head.html"),s=r;return y.default.existsSync(o)&&(s+=y.default.readFileSync(o,"utf8")),ae(s,t)}n(Bt,"getManagerHeadTemplate");function Dt(){return`${(0,E.sync)(__dirname)}/templates/index.ejs`}n(Dt,"getManagerMainTemplate");function Lt(){return`${(0,E.sync)(__dirname)}/templates/index.ejs`}n(Lt,"getPreviewMainTemplate");var Wt=n((e,t)=>Object.entries(t).reduce((r,[o,s])=>{let i=s.replace(/\\/g,"/").replace(/\$/g,"$$$");return r.replace(new RegExp(`{{${o}}}`,"g"),i)},e),"interpolate");var Ge=require("picomatch");function ce(e){let t=(0,Ge.makeRe)(e,{fastpaths:!1,noglobstar:!1,bash:!1});if(!t.source.startsWith("^"))throw new Error(`Invalid glob: >> ${e} >> ${t}`);return e.startsWith("./")?new RegExp(["^\\.",e.startsWith("./**")?"":"[\\\\/]",t.source.substring(1)].join("")):t}n(ce,"globToRegexp");var ze=c(require("fs")),P=c(require("path")),Ke=c(require("util-deprecate")),Ve=c(require("ts-dedent")),Xe=require("picomatch"),fe=c(require("slash"));var U="",Je="**/*.(stories|docs).@(mdx|tsx|ts|jsx|js)",Yt=(0,Ke.default)(e=>e.input.replace(e[1],`@${e[1]}`),Ve.default`
22
- You have specified an invalid glob, we've attempted to fix it, please ensure that the glob you specify is valid. See: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#correct-globs-in-mainjs
23
- `),Ut=n(e=>{let t=e.match(/\.(\([^)]+\))/);return t?Yt(t):e},"detectBadGlob"),Gt=n((e,t)=>{try{return ze.default.lstatSync(P.default.resolve(e,t)).isDirectory()}catch{return!1}},"isDirectory"),Qe=n(({configDir:e,workingDir:t,directory:r})=>{let o=P.default.resolve(e,r),s=P.default.relative(t,o);return oe(s)},"getDirectoryFromWorkingDir"),Ze=n((e,{configDir:t,workingDir:r})=>{let o;if(typeof e=="string"){let u=Ut(e),l=(0,Xe.scan)(u);if(l.isGlob){let f=l.prefix+l.base,g=l.glob;o={titlePrefix:U,directory:f,files:g}}else Gt(t,e)?o={titlePrefix:U,directory:e,files:Je}:o={titlePrefix:U,directory:P.default.dirname(e),files:P.default.basename(e)}}else o=d({titlePrefix:U,files:Je},e);let s=(0,fe.default)(o.files),{directory:i}=o,a=(0,fe.default)(Qe({configDir:t,workingDir:r,directory:i})).replace(/\/$/,""),m=ce(`${a}/${s}`);return I(d({},o),{directory:a,importPathMatcher:m})},"normalizeStoriesEntry"),Jt=n((e,t)=>e.map(r=>Ze(r,t)),"normalizeStories");var et=c(require("fs-extra"));async function zt(e){return et.default.readFile(e,{encoding:"utf8"})}n(zt,"readTemplate");var le=c(require("path")),tt=require("find-up"),Kt=n((e,t)=>{let r=(0,tt.sync)("package.json",{cwd:e});if(!r)throw new Error(`Could not find package.json in: ${e}`);let o=le.default.dirname(r);return le.default.join(o,"dist","esm",t)},"findDistEsm");0&&(module.exports={boost,cache,checkAddonOrder,createFileSystemCache,filterPresetsConfig,findDistEsm,getDirectoryFromWorkingDir,getInterpretedFile,getInterpretedFileWithExt,getManagerHeadTemplate,getManagerMainTemplate,getPresets,getPreviewBodyTemplate,getPreviewHeadTemplate,getPreviewMainTemplate,getProjectRoot,getStorybookConfiguration,getStorybookInfo,globToRegexp,handlebars,interpolate,loadAllPresets,loadCustomPresets,loadEnvs,loadMainConfig,loadManagerOrAddonsFile,loadPreset,loadPreviewOrConfigFile,logConfig,nodePathsToArray,normalizeStories,normalizeStoriesEntry,normalizeStoryPath,readTemplate,resolveAddonName,resolvePathInStorybookCache,serverRequire,serverResolve,stringifyEnvs,stringifyProcessEnvs,useProgressReporting,validateConfigurationFiles});
15
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
16
+ `);return typeof r=="object"?r.name:r}async function gr(e){let{renderer:r}=await e.presets.apply("core",{},e);return r||V(e)}function K(e,r,t){if(!e)return null;let o=e.split(/[\s='"]+/),n=o.indexOf(t);return n===-1&&(n=o.indexOf(r)),n===-1?null:o[n+1]}var Ce=c(require("path")),Oe=c(require("fs-extra"));var Pe={"@storybook/react":"react","@storybook/vue":"vue","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/marko":"marko","@storybook/mithril":"mithril","@storybook/riot":"riot","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/rax":"rax","@storybook/server":"server"},we=console,ur=({dependencies:e,devDependencies:r,peerDependencies:t},o)=>[Object.entries(e||{}).find(o),Object.entries(r||{}).find(o),Object.entries(t||{}).find(o)],yr=e=>{let[r,t,o]=ur(e,([i])=>Pe[i]),[n,s]=r||t||o||[],a=n?Pe[n]:void 0;return r&&t&&r[0]===t[0]&&we.warn(`Found "${r[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),r&&o&&r[0]===o[0]&&we.warn(`Found "${r[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{version:s,framework:a,frameworkPackage:n,renderer:a,rendererPackage:n}},br=["ts","js","tsx","jsx","mjs","cjs"],G=(e,r)=>{let t=Ce.default.join(r,e),o=br.find(n=>Oe.default.existsSync(`${t}.${n}`));return o?`${t}.${o}`:null},xr=e=>{var o;let r=".storybook",t=(o=e.scripts)==null?void 0:o.storybook;if(t){let n=K(t,"-c","--config-dir");n&&(r=n)}return{configDir:r,mainConfig:G("main",r),previewConfig:G("preview",r),managerConfig:G("manager",r)}},hr=e=>{let r=yr(e),t=xr(e);return{...r,...t}};var X=require("fs-extra"),_=require("path"),Ee=c(require("find-up")),Re=c(require("resolve-from")),$e=require("@storybook/node-logger"),Se=async e=>{let r=await(0,Ee.default)("package.json",{cwd:e.configDir});if(!r)return{};let t=(0,_.dirname)(r),{dependencies:o=[],devDependencies:n=[]}=await(0,X.readJSON)(r)||{},s=Object.keys({...o,...n});return(await Promise.all(s.map(async i=>{try{let p=(0,Re.default)(t,(0,_.join)(i,"package.json")),{storybook:f,name:m,version:l}=await(0,X.readJSON)(p)||{};if(f!=null&&f.url)return{id:m,...f,version:l}}catch(p){if(p.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return;$e.logger.warn(`unable to find package.json for ${i}`);return}}))).filter(Boolean).reduce((i,p)=>({...i,[p.id]:{id:p.id.toLowerCase(),url:je(p.url),title:p.title,version:p.version}}),{})},vr=e=>fetch(`${e}/iframe.html`).then(async({ok:r,status:t})=>{if(r){if(t!==200)return!1;let o=await fetch(`${e}/iframe.html`,{headers:{Accept:"application/json"}});if(o.ok&&(await o.json().catch(n=>({}))).loginUrl)return!1}return r},()=>!1),je=e=>e.replace(/\/$/,""),kr=e=>{let r=e.replace(/[A-Z]/g,t=>` ${t}`).replace(/[-_][A-Z]/gi,t=>` ${t.toUpperCase()}`).replace(/-/g," ").replace(/_/g," ");return`${r.substring(0,1).toUpperCase()}${r.substring(1)}`.trim()};async function Pr(e){let r=await e.presets.apply("refs",await Se(e));return Object.entries(r).forEach(([t,o])=>{if(o.disable){delete r[t];return}r[t.toLowerCase()]={...o,id:t.toLowerCase(),title:o.title||kr(o.id||t),url:je(o.url)}}),await Promise.all(Object.entries(r).map(async([t,o])=>{let n=await vr(o.url);r[t]={...o,type:n?"server-checked":"unknown"}})),r}var Ae=require("picomatch");function Z(e){let r=(0,Ae.makeRe)(e,{fastpaths:!1,noglobstar:!1,bash:!1});if(!r.source.startsWith("^"))throw new Error(`Invalid glob: >> ${e} >> ${r}`);return e.startsWith("./")?new RegExp(["^\\.",e.startsWith("./**")?"":"[\\\\/]",r.source.substring(1)].join("")):r}var Ie=c(require("handlebars"));function wr(e,r){return Ie.default.compile(e)(r)}var Cr=(e,r)=>Object.entries(r).reduce((t,[o,n])=>{let s=n.replace(/\\/g,"/").replace(/\$/g,"$$$");return t.replace(new RegExp(`{{${o}}}`,"g"),s)},e);var Fe=c(require("path"));function Or({configDir:e}){return k(e),x(Fe.default.resolve(e,"main"))}var N=c(require("path")),_e=require("@storybook/node-logger"),Ne=require("ts-dedent");function Er({configDir:e}){let r=y(N.default.resolve(e,"addons")),t=y(N.default.resolve(e,"manager"));if((r||t)&&_e.logger.info("=> Loading custom manager config"),r&&t)throw new Error(Ne.dedent`
17
+ You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${N.default.resolve(e,"addons")})`);return t||r}var T=c(require("path")),Te=require("ts-dedent");function Rr({configDir:e}){let r=y(T.default.resolve(e,"config")),t=y(T.default.resolve(e,"preview"));if(r&&t)throw new Error(Te.dedent`
18
+ You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${T.default.resolve(e,"config")})`);return t||r}var De=c(require("chalk"));function $r(e,r){console.log(De.default.cyan(e)),console.dir(r,{depth:null})}var ze=c(require("fs")),h=c(require("path")),Be=require("picomatch"),Q=c(require("slash"));var D="",Le="**/*.@(mdx|stories.@(tsx|ts|jsx|js))",Sr=(e,r)=>{try{return ze.default.lstatSync(h.default.resolve(e,r)).isDirectory()}catch{return!1}},Ue=({configDir:e,workingDir:r,directory:t})=>{let o=h.default.resolve(e,t),n=h.default.relative(r,o);return H(n)},Je=(e,{configDir:r,workingDir:t})=>{let o;if(typeof e=="string"){let p=(0,Be.scan)(e);if(p.isGlob){let f=p.prefix+p.base,m=p.glob;o={titlePrefix:D,directory:f,files:m}}else Sr(r,e)?o={titlePrefix:D,directory:e,files:Le}:o={titlePrefix:D,directory:h.default.dirname(e),files:h.default.basename(e)}}else o={titlePrefix:D,files:Le,...e};let n=(0,Q.default)(o.files),{directory:s}=o,a=(0,Q.default)(Ue({configDir:r,workingDir:t,directory:s})).replace(/\/$/,""),i=Z(`${a}/${n}`);return{...o,directory:a,importPathMatcher:i}},jr=(e,r)=>e.map(t=>Je(t,r));var Me=c(require("fs-extra"));async function Ar(e){return Me.default.readFile(e,{encoding:"utf8"})}function Ir(){let{NODE_OPTIONS:e,NODE_PRESERVE_SYMLINKS:r}=process.env;return!!r||(e==null?void 0:e.includes("--preserve-symlinks"))}var ee=c(require("path")),re=require("pkg-dir"),b=c(require("fs")),We=(e,r={})=>Object.entries(r).reduce((t,[o,n])=>t.replace(new RegExp(`%${o}%`,"g"),n),e);function Fr(e,r){let t=b.default.readFileSync(`${(0,re.sync)(__dirname)}/templates/base-preview-body.html`,"utf8"),o=ee.default.resolve(e,"preview-body.html"),n=t;return b.default.existsSync(o)&&(n=b.default.readFileSync(o,"utf8")+n),We(n,r)}function _r(e,r){let t=b.default.readFileSync(`${(0,re.sync)(__dirname)}/templates/base-preview-head.html`,"utf8"),o=ee.default.resolve(e,"preview-head.html"),n=t;return b.default.existsSync(o)&&(n+=b.default.readFileSync(o,"utf8")),We(n,r)}var qe=require("ts-dedent"),Nr=["@storybook/html","@storybook/preact","@storybook/react","@storybook/server","@storybook/svelte","@storybook/vue","@storybook/vue3","@storybook/web-components"];function Tr(e){if(Nr.includes(e))throw new Error(qe.dedent`
19
+ Invalid value of ${e} in the 'framework' field of Storybook config.
20
+
21
+ Please run 'npx sb@next automigrate'
22
+
23
+ See the v7 Migration guide for more information:
24
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
25
+ `)}function Dr(){return e=>e}0&&(module.exports={boost,cache,checkAddonOrder,createFileSystemCache,filterPresetsConfig,findDistEsm,getAutoRefs,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,resolveAddonName,resolvePathInStorybookCache,satisfies,serverRequire,serverResolve,stringifyEnvs,stringifyProcessEnvs,validateConfigurationFiles,validateFrameworkName});
package/dist/index.mjs CHANGED
@@ -1,23 +1,25 @@
1
- var Z=Object.defineProperty,Pe=Object.defineProperties;var ke=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var ee=Object.prototype.hasOwnProperty,te=Object.prototype.propertyIsEnumerable;var Q=(e,t,r)=>t in e?Z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,d=(e,t)=>{for(var r in t||(t={}))ee.call(t,r)&&Q(e,r,t[r]);if(S)for(var r of S(t))te.call(t,r)&&Q(e,r,t[r]);return e},C=(e,t)=>Pe(e,ke(t)),n=(e,t)=>Z(e,"name",{value:t,configurable:!0}),y=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var O=(e,t)=>{var r={};for(var o in e)ee.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&S)for(var o of S(e))t.indexOf(o)<0&&te.call(e,o)&&(r[o]=e[o]);return r};import{fileURLToPath as je}from"url";import Se from"path";var Ce=n(()=>je(import.meta.url),"getFilename"),Oe=n(()=>Se.dirname(Ce()),"getDirname"),c=Oe();import Be from"ts-dedent";import{logger as N}from"@storybook/node-logger";import L from"path";import Re from"interpret";import Ie from"path";import{logger as se}from"@storybook/node-logger";import re from"fs";import{extensions as Fe}from"interpret";var F=new Set([".js",".jsx",".ts",".tsx",".cjs",".mjs"]);function Ae(){return[...Array.from(F),...Object.keys(Fe).filter(e=>!F.has(e)).sort((e,t)=>e.length-t.length)]}n(Ae,"sortExtensions");var oe=Ae();function b(e){return oe.map(t=>e.endsWith(t)?e:`${e}${t}`).find(t=>re.existsSync(t))}n(b,"getInterpretedFile");function ne(e){return oe.map(t=>({path:e.endsWith(t)?e:`${e}${t}`,ext:t})).find(t=>re.existsSync(t.path))}n(ne,"getInterpretedFileWithExt");var A=new Map;function ie(e){if(!e)return 0;let t=A.get(e);if(t!==void 0)return t;if(typeof e=="string")return y(e),A.set(e,1),1;if(!Array.isArray(e))return e.register(y(e.module)),A.set(e,1),1;let r=0;for(let o=0;o<e.length;o+=1)try{r+=ie(e[o]);break}catch{}return A.set(e,r),r}n(ie,"registerCompiler");function Te(e){let t=y(e);return typeof t=="object"&&t!==null&&typeof t.default<"u"?t.default:t}n(Te,"interopRequireDefault");function Ne(e){for(let t=0;t<e.length;t+=1){let r=ne(e[t]);if(r)return r}}n(Ne,"getCandidate");function w(e){let t=B(e);if(!t)return null;let r=Ie.extname(t),o=Re.extensions[r];return o&&ie(o)===0?(se.warn(`=> File ${t} is detected`),se.warn(` but impossible to import loader for ${r}`),null):Te(t)}n(w,"serverRequire");function B(e){let t=Array.isArray(e)?e:[e],r=Ne(t);return r?r.path:null}n(B,"serverResolve");import R from"ts-dedent";import _e from"util-deprecate";import Me from"glob";import $ from"path";var He=_e(()=>{},R`
2
- Configuration files such as "config", "presets" and "addons" are deprecated and will be removed in Storybook 7.0.
3
- Read more about it in the migration guide: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#to-mainjs-configuration
4
- `),D=n((e,t,r)=>{let o=$.resolve(r,e),s=$.resolve(r,t);throw new Error(R`
5
- You have mixing configuration files:
6
- ${o}
7
- ${s}
8
- "${e}" and "${t}" cannot coexist.
9
- Please check the documentation for migration steps: https://github.com/storybookjs/storybook/blob/master/MIGRATION.md#to-mainjs-configuration
10
- `)},"errorMixingConfigFiles");function I(e){let t=`{${Array.from(F).join(",")}}`,r=n(l=>!!Me.sync($.resolve(e,`${l}${t}`)).length,"exists"),o=r("main"),s=r("config");if(!o&&!s)throw new Error(R`
11
- No configuration files have been found in your configDir (${$.resolve(e)}).
1
+ var __require=(x=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(x,{get:(a,b)=>(typeof require!="undefined"?require:a)[b]}):x)(function(x){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+x+'" is not supported')});import{dedent as dedent2}from"ts-dedent";import{logger}from"@storybook/node-logger";import{join,parse}from"path";import path2 from"path";import fs from"fs";var boost=new Set([".js",".jsx",".ts",".tsx",".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=>fs.existsSync(candidate))}function getInterpretedFileWithExt(pathToFile){return possibleExtensions.map(ext=>({path:pathToFile.endsWith(ext)?pathToFile:`${pathToFile}${ext}`,ext})).find(candidate=>fs.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:!1,tsconfigRaw:`{
2
+ "compilerOptions": {
3
+ "strict": false,
4
+ "skipLibCheck": true,
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}import{dedent}from"ts-dedent";import glob from"glob";import path from"path";function validateConfigurationFiles(configDir){let extensionsPattern=`{${Array.from(boost).join(",")}}`;if(!(file=>!!glob.sync(path.resolve(configDir,`${file}${extensionsPattern}`)).length)("main"))throw new Error(dedent`
7
+ No configuration files have been found in your configDir (${path.resolve(configDir)}).
12
8
  Storybook needs either a "main" or "config" file.
13
- `);if(o&&s)throw new Error(R`
14
- You have both a "main" and a "config". Please remove the "config" file from your configDir (${$.resolve(e,"config")})`);let i=r("presets");o&&i&&D("main","presets",e),r("preview")&&s&&D("preview","config",e);let m=r("addons");r("manager")&&m&&D("manager","addons",e),(i||s||m)&&He()}n(I,"validateConfigurationFiles");function ae({configDir:e}){I(e);let t=w(L.resolve(e,"presets"));if(w(L.resolve(e,"main"))){let o=B(L.resolve(e,"main"));if(o)return[o]}return t||[]}n(ae,"loadCustomPresets");import qe from"resolve-from";var ce=n((e,t)=>{try{return qe(e,t)}catch{return}},"safeResolveFrom"),fe=n(e=>{try{return y.resolve(e)}catch{return}},"safeResolve");var E=n(e=>e!=null&&typeof e=="object"&&Array.isArray(e)===!1,"isObject"),De=n(e=>typeof e=="function","isFunction");function Le(e){return e.filter(t=>{let r=typeof t=="string"?t:t.name;return!/@storybook[\\\\/]preset-typescript/.test(r)})}n(Le,"filterPresetsConfig");function le(e,t,r){return De(e)?[...e(d(d({},r),t))]:Array.isArray(e)?[...e]:[]}n(le,"resolvePresetFunction");var We=n((e,t,r)=>{let o=t.startsWith("/")?fe:ce.bind(null,e),s=o(t);if(s){if(t.match(/\/(manager|register(-panel)?)(\.(js|ts|tsx|jsx))?$/))return{type:"virtual",name:t,managerEntries:[s]};if(t.match(/\/(preset)(\.(js|ts|tsx|jsx))?$/))return{type:"presets",name:s}}let i=t,a=o(`${i}/manager`),m=o(`${i}/register`)||o(`${i}/register-panel`),u=o(`${i}/preview`),l=o(`${i}/preset`);if(!(a||u)&&l)return{type:"presets",name:l};if(a||m||u||l){let f=[];return a&&f.push(a),!a&&m&&!l&&f.push(m),d(d(d({type:"virtual",name:i},f.length?{managerEntries:f}:{}),u?{previewAnnotations:[u]}:{}),l?{presets:[{name:l,options:r}]}:{})}if(s)return{type:"presets",name:s}},"resolveAddonName"),Ue=n(({configDir:e})=>t=>{let r=E(t)&&t.options||void 0,o=E(t)?t.name:t;try{let s=We(e,o,r);return d(d({},r?{options:r}:{}),s)}catch{N.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/
15
- ${t}`)}},"map");function Ye(e){let t=y(e);return typeof t=="object"&&t!==null&&typeof t.default<"u"?t.default:t}n(Ye,"interopRequireDefault");function Ge(e){if(e.type==="virtual"){let r=e,{type:o,name:s}=r;return O(r,["type","name"])}let t=e.name?e.name:e;return Ye(t)}n(Ge,"getContent");function Je(e,t,r){try{let s=e.name?e.name:e,i=e.options?e.options:{},a=Ge(e);if(typeof a=="function"&&(a=a(r,i)),Array.isArray(a))return T(a,t+1,r);if(E(a)){let o=a,{addons:m,presets:u}=o,l=O(o,["addons","presets"]),f=le(u,i,r),g=le(m,i,r);return[...T([...f],t+1,r),...T([...g.map(Ue(r))].filter(Boolean),t+1,r),{name:s,preset:l,options:i}]}throw new Error(Be`
16
- ${e} is not a valid preset
17
- `)}catch(s){let i=t>0?` Failed to load preset: ${JSON.stringify(e)} on level ${t}`:` Failed to load preset: ${JSON.stringify(e)}`;return N.warn(i),N.error(s),[]}}n(Je,"loadPreset");function T(e,t,r){return!e||!Array.isArray(e)||!e.length?[]:e.reduce((o,s)=>{let i=Je(s,t,r);return o.concat(i)},[])}n(T,"loadPresets");function pe(e,t,r,o,s){let i=new Promise(a=>a(r));return e.length?e.reduce((a,{preset:m,options:u})=>{let l=m[t];if(!l)return a;if(typeof l=="function"){let f=l,g={preset:m,combinedOptions:C(d(d(d({},s),o),u),{presetsList:e,presets:{apply:async(h,v,j={})=>pe(e,h,v,j,s)}})};return a.then(h=>f.call(g.preset,h,g.combinedOptions))}return a.then(f=>Array.isArray(f)&&Array.isArray(l)?[...f,...l]:E(f)&&E(l)?d(d({},f),l):l)},i):i}n(pe,"applyPresets");function ze(e,t){let r=T(e,0,t);return{apply:async(o,s,i={})=>pe(r,o,s,i,t)}}n(ze,"getPresets");function Zt(e){let a=e,{corePresets:t=[],overridePresets:r=[]}=a,o=O(a,["corePresets","overridePresets"]),s=[...t,...ae(e),...r],i=Le(s);return i.length<s.length&&N.warn("Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."),ze(i,o)}n(Zt,"loadAllPresets");var{logger:W}=y("@storybook/node-logger"),U=n(e=>t=>{let r=t.name||t;return r&&r.includes(e)},"predicateFor"),Ke=n((e,t,r)=>{let o=e.findIndex(U("@storybook/addon-essentials")),s=e.findIndex(U(t.name)),i=e.findIndex(U(r.name));return s===-1&&t.inEssentials&&(s=o),i===-1&&r.inEssentials&&(i=o),s!==-1&&i!==-1&&s<=i},"isCorrectOrder"),tr=n(async({before:e,after:t,configFile:r,getConfig:o})=>{try{let s=await o(r);if(!(s!=null&&s.addons)){W.warn("Unable to find 'addons' config in main Storybook config");return}if(!Ke(s.addons,e,t)){let i=" (or '@storybook/addon-essentials')",a=`'${e.name}'${e.inEssentials?i:""}`,m=`'${t.name}'${t.inEssentials?i:""}`;W.warn(`Expected ${a} to be listed before ${m} in main Storybook config.`)}}catch{W.warn(`Unable to load config file: ${r}`)}},"checkAddonOrder");import{getEnvironment as Xe}from"lazy-universal-dotenv";import _ from"path";import me from"find-up";var sr=n(()=>{let e;try{let t=me.sync(".git",{type:"directory"});t&&(e=e||_.join(t,".."))}catch{}try{let t=me.sync(".svn",{type:"directory"});t&&(e=e||_.join(t,".."))}catch{}try{e=e||c.split("node_modules")[0]}catch{}return e||process.cwd()},"getProjectRoot"),de=n(e=>e.split(process.platform==="win32"?";":":").filter(Boolean).map(t=>_.resolve("./",t)),"nodePathsToArray"),Ve=/^\.{1,2}([/\\]|$)/;function ue(e){return Ve.test(e)?e:`.${_.sep}${e}`}n(ue,"normalizeStoryPath");function fr(e={}){let t=e.production?"production":"development",r={NODE_ENV:process.env.NODE_ENV||t,NODE_PATH:process.env.NODE_PATH||"",STORYBOOK:process.env.STORYBOOK||"true",PUBLIC_URL:e.production?".":""};Object.keys(process.env).filter(m=>/^STORYBOOK_/.test(m)).forEach(m=>{r[m]=process.env[m]});let o=Object.entries(r).reduce((m,[u,l])=>Object.assign(m,{[u]:JSON.stringify(l)}),{}),{stringified:s,raw:i}=Xe({nodeEnv:r.NODE_ENV}),a=d(d({},r),i);return a.NODE_PATH=de(a.NODE_PATH||""),{stringified:d(d({},o),s),raw:a}}n(fr,"loadEnvs");var lr=n(e=>Object.entries(e).reduce((t,[r,o])=>(t[r]=JSON.stringify(o),t),{}),"stringifyEnvs"),pr=n(e=>Object.entries(e).reduce((r,[o,s])=>(r[`process.env.${o}`]=JSON.stringify(s),r),{"process.env.XSTORYBOOK_EXAMPLE_APP":'""'}),"stringifyProcessEnvs");import Qe from"handlebars";function ur(e,t){return Qe.compile(e)(t)}n(ur,"handlebars");import Ze from"path";function vr({configDir:e}){return I(e),w(Ze.resolve(e,"main"))}n(vr,"loadMainConfig");function ge(e,t,r){if(!e)return null;let o=e.split(/[\s='"]+/),s=o.indexOf(r);return s===-1&&(s=o.indexOf(t)),s===-1?null:o[s+1]}n(ge,"getStorybookConfiguration");import et from"path";import tt from"fs-extra";var he={"@storybook/react":"react","@storybook/vue":"vue","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/marko":"marko","@storybook/mithril":"mithril","@storybook/riot":"riot","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/rax":"rax","@storybook/server":"server"},ye=console,rt=n(({dependencies:e,devDependencies:t,peerDependencies:r},o)=>[Object.entries(e||{}).find(o),Object.entries(t||{}).find(o),Object.entries(r||{}).find(o)],"findDependency"),ot=n(e=>{let[t,r,o]=rt(e,([m])=>he[m]),[s,i]=t||r||o||[],a=s?he[s]:void 0;return t&&r&&t[0]===r[0]&&ye.warn(`Found "${t[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`),t&&o&&t[0]===o[0]&&ye.warn(`Found "${t[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`),{framework:a,version:i,frameworkPackage:s}},"getFrameworkInfo"),nt=["ts","js","tsx","jsx","mjs","cjs"],Y=n((e,t)=>{let r=et.join(t,e),o=nt.find(s=>tt.existsSync(`${r}.${s}`));return o?`${r}.${o}`:null},"findConfigFile"),st=n(e=>{var o;let t=".storybook",r=(o=e.scripts)==null?void 0:o.storybook;if(r){let s=ge(r,"-c","--config-dir");s&&(t=s)}return{configDir:t,mainConfig:Y("main",t),previewConfig:Y("preview",t),managerConfig:Y("manager",t)}},"getConfigInfo"),kr=n(e=>{let t=ot(e),r=st(e);return d(d({},t),r)},"getStorybookInfo");import G from"path";import{logger as it}from"@storybook/node-logger";import at from"ts-dedent";function Ar({configDir:e}){let t=b(G.resolve(e,"addons")),r=b(G.resolve(e,"manager"));if((t||r)&&it.info("=> Loading custom manager config"),t&&r)throw new Error(at`
18
- You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${G.resolve(e,"addons")})`);return r||t}n(Ar,"loadManagerOrAddonsFile");import J from"path";import ct from"ts-dedent";function _r({configDir:e}){let t=b(J.resolve(e,"config")),r=b(J.resolve(e,"preview"));if(t&&r)throw new Error(ct`
19
- You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${J.resolve(e,"config")})`);return r||t}n(_r,"loadPreviewOrConfigFile");import ft from"chalk";function qr(e,t){console.log(ft.cyan(e)),console.dir(t,{depth:null})}n(qr,"logConfig");import lt from"pretty-hrtime";var xe=n(e=>lt(process.hrtime(e)).replace(" ms"," milliseconds").replace(" s"," seconds").replace(" m"," minutes"),"printDuration");var Ur=n(async(e,t,r)=>{var u;let o=0,s,i=n(()=>{},"reportProgress");e.get("/progress",(l,f)=>{let g=!1,h=n(()=>{g=!0,f.end()},"close");f.on("close",h),!(g||f.writableEnded)&&(f.setHeader("Cache-Control","no-cache"),f.setHeader("Content-Type","text/event-stream"),f.setHeader("Connection","keep-alive"),f.flushHeaders(),i=n(v=>{g||f.writableEnded||(f.write(`data: ${JSON.stringify(v)}
9
+ `)}function loadCustomPresets({configDir}){validateConfigurationFiles(configDir);let presets=serverRequire(path2.resolve(configDir,"presets"));if(serverRequire(path2.resolve(configDir,"main"))){let resolved=serverResolve(path2.resolve(configDir,"main"));if(resolved)return[resolved]}return presets||[]}import resolveFrom from"resolve-from";var safeResolveFrom=(path12,file)=>{try{return resolveFrom(path12,file)}catch{return}},safeResolve=file=>{try{return __require.resolve(file)}catch{return}};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 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:[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=>resolve(`${name}${exportName}`),managerFile=absolutizeExport("/manager"),registerFile=absolutizeExport("/register")||absolutizeExport("/register-panel"),previewFile=checkExists("/preview"),previewFileAbsolute=absolutizeExport("/preview"),presetFile=absolutizeExport("/preset");if(!(managerFile||previewFile)&&presetFile)return{type:"presets",name:presetFile};if(managerFile||registerFile||previewFile||presetFile){let managerEntries=[];if(managerFile){let{dir:fdir,name:fname}=parse(managerFile);managerEntries.push(join(fdir,fname))}if(!managerFile&&registerFile&&!presetFile){let{dir:fdir,name:fname}=parse(registerFile);managerEntries.push(join(fdir,fname))}return{type:"virtual",name,...managerEntries.length?{managerEntries}:{},...previewFile?{previewAnnotations:[previewFileAbsolute?{bare: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;try{let resolved=resolveAddonName(configDir,name,options);return{...options?{options}:{},...resolved}}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/
10
+ ${item}`)}};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){try{let name=input.name?input.name:input,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,subPresets=resolvePresetFunction(presetsInput,presetOptions,storybookOptions),subAddons=resolvePresetFunction(addonsInput,presetOptions,storybookOptions);return[...await loadPresets([...subPresets],level+1,storybookOptions),...await loadPresets([...subAddons.map(map(storybookOptions))].filter(Boolean),level+1,storybookOptions),{name,preset:rest,options:presetOptions}]}throw new Error(dedent2`
11
+ ${input} is not a valid preset
12
+ `)}catch(e){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(e),[]}}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)}import Cache from"file-system-cache";function createFileSystemCache(options){return Cache(options)}import path3 from"path";import pkgDir from"pkg-dir";function resolvePathInStorybookCache(fileOrDirectoryName){let cwd=process.cwd(),projectDir=pkgDir.sync(cwd),cacheDirectory;return projectDir?cacheDirectory=path3.resolve(projectDir,"node_modules/.cache/storybook"):cacheDirectory=path3.resolve(cwd,".cache/storybook"),path3.join(cacheDirectory,fileOrDirectoryName)}var cache=createFileSystemCache({basePath:resolvePathInStorybookCache("dev-server"),ns:"storybook"});import{logger as logger2}from"@storybook/node-logger";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){logger2.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:""}`;logger2.warn(`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`)}}catch{logger2.warn(`Unable to load config file: ${configFile}`)}};import{getEnvironment}from"lazy-universal-dotenv";import path4 from"path";import findUp from"find-up";var getProjectRoot=()=>{let result;try{let found=findUp.sync(".git",{type:"directory"});found&&(result=result||path4.join(found,".."))}catch{}try{let found=findUp.sync(".svn",{type:"directory"});found&&(result=result||path4.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=>path4.resolve("./",p)),relativePattern=/^\.{1,2}([/\\]|$)/;function normalizeStoryPath(filename){return relativePattern.test(filename)?filename:`.${path4.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),{});import path5 from"path";import{sync as findUpSync}from"find-up";var findDistEsm=(cwd,relativePath)=>{let nearestPackageJson=findUpSync("package.json",{cwd});if(!nearestPackageJson)throw new Error(`Could not find package.json in: ${cwd}`);let packageDir=path5.dirname(nearestPackageJson);return path5.join(packageDir,"dist","esm",relativePath)};import{dedent as dedent3}from"ts-dedent";async function getFrameworkName(options){let framework=await options.presets.apply("framework","",options);if(!framework)throw new Error(dedent3`
13
+ You must specify a framework in '.storybook/main.js' config.
20
14
 
21
- `),f.flush(),v.value===1&&h())},"reportProgress"))});let a=n((l,f,g)=>{o=Math.max(l,o);let h={value:o,message:f.charAt(0).toUpperCase()+f.slice(1)};if(f==="building"){let v=g&&g.match(/(\d+)\/(\d+)/)||[],j=parseInt(v[1],10),q=parseInt(v[2],10);!Number.isNaN(j)&&!Number.isNaN(q)&&(h.modules={complete:j,total:q},s=q)}o===1&&(r.cache&&r.cache.set("modulesCount",s),h.message||(h.message=`Completed in ${xe(t)}.`)),i(h)},"handler"),m=await((u=r.cache)==null?void 0:u.get("modulesCount").catch(()=>{}))||1e3;return{handler:a,modulesCount:m}},"useProgressReporting");import z from"path";import pt from"pkg-dir";function ve(e){let t=process.cwd(),r=pt.sync(t),o;return r?o=z.resolve(r,"node_modules/.cache/storybook"):o=z.resolve(t,".cache/storybook"),z.join(o,e)}n(ve,"resolvePathInStorybookCache");import mt from"file-system-cache";var M=class{constructor(t){this.internal=mt(t)}path(t){return this.internal.path(t)}fileExists(t){return this.internal.fileExists(t)}ensureBasePath(){return this.internal.ensureBasePath()}get(t,r){return this.internal.get(t,r)}getSync(t,r){return this.internal.getSync(t,r)}set(t,r){return this.internal.set(t,r)}setSync(t,r){return this.internal.setSync(t,r),this}remove(t){return this.internal.remove(t)}clear(){return this.internal.clear()}save(){return this.internal.save()}load(){return this.internal.load()}};n(M,"FileSystemCache");function K(e){return new M(e)}n(K,"createFileSystemCache");var Zr=K({basePath:ve("dev-server"),ns:"storybook"});import V from"path";import{sync as P}from"pkg-dir";import x from"fs";var X=n((e,t={})=>Object.entries(t).reduce((r,[o,s])=>r.replace(new RegExp(`%${o}%`,"g"),s),e),"interpolate");function no(e,t){let r=x.readFileSync(`${P(c)}/templates/base-preview-body.html`,"utf8"),o=V.resolve(e,"preview-body.html"),s=r;return x.existsSync(o)&&(s=x.readFileSync(o,"utf8")+s),X(s,t)}n(no,"getPreviewBodyTemplate");function so(e,t){let r=x.readFileSync(`${P(c)}/templates/base-preview-head.html`,"utf8"),o=V.resolve(e,"preview-head.html"),s=r;return x.existsSync(o)&&(s+=x.readFileSync(o,"utf8")),X(s,t)}n(so,"getPreviewHeadTemplate");function io(e,t){let r=x.readFileSync(`${P(c)}/templates/base-manager-head.html`,"utf8"),o=V.resolve(e,"manager-head.html"),s=r;return x.existsSync(o)&&(s+=x.readFileSync(o,"utf8")),X(s,t)}n(io,"getManagerHeadTemplate");function ao(){return`${P(c)}/templates/index.ejs`}n(ao,"getManagerMainTemplate");function co(){return`${P(c)}/templates/index.ejs`}n(co,"getPreviewMainTemplate");var lo=n((e,t)=>Object.entries(t).reduce((r,[o,s])=>{let i=s.replace(/\\/g,"/").replace(/\$/g,"$$$");return r.replace(new RegExp(`{{${o}}}`,"g"),i)},e),"interpolate");import{makeRe as dt}from"picomatch";function be(e){let t=dt(e,{fastpaths:!1,noglobstar:!1,bash:!1});if(!t.source.startsWith("^"))throw new Error(`Invalid glob: >> ${e} >> ${t}`);return e.startsWith("./")?new RegExp(["^\\.",e.startsWith("./**")?"":"[\\\\/]",t.source.substring(1)].join("")):t}n(be,"globToRegexp");import ut from"fs";import k from"path";import gt from"util-deprecate";import ht from"ts-dedent";import{scan as yt}from"picomatch";import we from"slash";var H="",$e="**/*.(stories|docs).@(mdx|tsx|ts|jsx|js)",xt=gt(e=>e.input.replace(e[1],`@${e[1]}`),ht`
22
- You have specified an invalid glob, we've attempted to fix it, please ensure that the glob you specify is valid. See: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#correct-globs-in-mainjs
23
- `),vt=n(e=>{let t=e.match(/\.(\([^)]+\))/);return t?xt(t):e},"detectBadGlob"),bt=n((e,t)=>{try{return ut.lstatSync(k.resolve(e,t)).isDirectory()}catch{return!1}},"isDirectory"),wt=n(({configDir:e,workingDir:t,directory:r})=>{let o=k.resolve(e,r),s=k.relative(t,o);return ue(s)},"getDirectoryFromWorkingDir"),$t=n((e,{configDir:t,workingDir:r})=>{let o;if(typeof e=="string"){let u=vt(e),l=yt(u);if(l.isGlob){let f=l.prefix+l.base,g=l.glob;o={titlePrefix:H,directory:f,files:g}}else bt(t,e)?o={titlePrefix:H,directory:e,files:$e}:o={titlePrefix:H,directory:k.dirname(e),files:k.basename(e)}}else o=d({titlePrefix:H,files:$e},e);let s=we(o.files),{directory:i}=o,a=we(wt({configDir:t,workingDir:r,directory:i})).replace(/\/$/,""),m=be(`${a}/${s}`);return C(d({},o),{directory:a,importPathMatcher:m})},"normalizeStoriesEntry"),Eo=n((e,t)=>e.map(r=>$t(r,t)),"normalizeStories");import Et from"fs-extra";async function jo(e){return Et.readFile(e,{encoding:"utf8"})}n(jo,"readTemplate");import Ee from"path";import{sync as Pt}from"find-up";var Fo=n((e,t)=>{let r=Pt("package.json",{cwd:e});if(!r)throw new Error(`Could not find package.json in: ${e}`);let o=Ee.dirname(r);return Ee.join(o,"dist","esm",t)},"findDistEsm");export{F as boost,Zr as cache,tr as checkAddonOrder,K as createFileSystemCache,Le as filterPresetsConfig,Fo as findDistEsm,wt as getDirectoryFromWorkingDir,b as getInterpretedFile,ne as getInterpretedFileWithExt,io as getManagerHeadTemplate,ao as getManagerMainTemplate,ze as getPresets,no as getPreviewBodyTemplate,so as getPreviewHeadTemplate,co as getPreviewMainTemplate,sr as getProjectRoot,ge as getStorybookConfiguration,kr as getStorybookInfo,be as globToRegexp,ur as handlebars,lo as interpolate,Zt as loadAllPresets,ae as loadCustomPresets,fr as loadEnvs,vr as loadMainConfig,Ar as loadManagerOrAddonsFile,Je as loadPreset,_r as loadPreviewOrConfigFile,qr as logConfig,de as nodePathsToArray,Eo as normalizeStories,$t as normalizeStoriesEntry,ue as normalizeStoryPath,jo as readTemplate,We as resolveAddonName,ve as resolvePathInStorybookCache,w as serverRequire,B as serverResolve,lr as stringifyEnvs,pr as stringifyProcessEnvs,Ur as useProgressReporting,I as validateConfigurationFiles};
15
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
16
+ `);return typeof framework=="object"?framework.name:framework}async function getRendererName(options){let{renderer}=await options.presets.apply("core",{},options);return renderer||getFrameworkName(options)}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]}import path6 from"path";import fse from"fs-extra";var rendererPackages={"@storybook/react":"react","@storybook/vue":"vue","@storybook/vue3":"vue3","@storybook/angular":"angular","@storybook/html":"html","@storybook/web-components":"web-components","@storybook/polymer":"polymer","@storybook/ember":"ember","@storybook/marko":"marko","@storybook/mithril":"mithril","@storybook/riot":"riot","@storybook/svelte":"svelte","@storybook/preact":"preact","@storybook/rax":"rax","@storybook/server":"server"},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||[],renderer=pkg?rendererPackages[pkg]:void 0;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,framework:renderer,frameworkPackage:pkg,renderer,rendererPackage: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=>{let configDir=".storybook",storybookScript=packageJson.scripts?.storybook;if(storybookScript){let configParam=getStorybookConfiguration(storybookScript,"-c","--config-dir");configParam&&(configDir=configParam)}return{configDir,mainConfig:findConfigFile("main",configDir),previewConfig:findConfigFile("preview",configDir),managerConfig:findConfigFile("manager",configDir)}},getStorybookInfo=packageJson=>{let rendererInfo=getRendererInfo(packageJson),configInfo=getConfigInfo(packageJson);return{...rendererInfo,...configInfo}};import{readJSON}from"fs-extra";import{dirname,join as join2}from"path";import findUp2 from"find-up";import resolveFrom2 from"resolve-from";import{logger as logger4}from"@storybook/node-logger";var getAutoRefs=async options=>{let location=await findUp2("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=resolveFrom2(directory,join2(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;logger4.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){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}import{makeRe}from"picomatch";function globToRegexp(glob2){let regex=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}import Handlebars from"handlebars";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);import path7 from"path";function loadMainConfig({configDir}){return validateConfigurationFiles(configDir),serverRequire(path7.resolve(configDir,"main"))}import path8 from"path";import{logger as logger5}from"@storybook/node-logger";import{dedent as dedent4}from"ts-dedent";function loadManagerOrAddonsFile({configDir}){let storybookCustomAddonsPath=getInterpretedFile(path8.resolve(configDir,"addons")),storybookCustomManagerPath=getInterpretedFile(path8.resolve(configDir,"manager"));if((storybookCustomAddonsPath||storybookCustomManagerPath)&&logger5.info("=> Loading custom manager config"),storybookCustomAddonsPath&&storybookCustomManagerPath)throw new Error(dedent4`
17
+ You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${path8.resolve(configDir,"addons")})`);return storybookCustomManagerPath||storybookCustomAddonsPath}import path9 from"path";import{dedent as dedent5}from"ts-dedent";function loadPreviewOrConfigFile({configDir}){let storybookConfigPath=getInterpretedFile(path9.resolve(configDir,"config")),storybookPreviewPath=getInterpretedFile(path9.resolve(configDir,"preview"));if(storybookConfigPath&&storybookPreviewPath)throw new Error(dedent5`
18
+ You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${path9.resolve(configDir,"config")})`);return storybookPreviewPath||storybookConfigPath}import chalk from"chalk";function logConfig(caption,config){console.log(chalk.cyan(caption)),console.dir(config,{depth:null})}import fs2 from"fs";import path10 from"path";import{scan}from"picomatch";import slash from"slash";var DEFAULT_TITLE_PREFIX="",DEFAULT_FILES="**/*.@(mdx|stories.@(tsx|ts|jsx|js))",isDirectory=(configDir,entry)=>{try{return fs2.lstatSync(path10.resolve(configDir,entry)).isDirectory()}catch{return!1}},getDirectoryFromWorkingDir=({configDir,workingDir,directory})=>{let directoryFromConfig=path10.resolve(configDir,directory),directoryFromWorking=path10.relative(workingDir,directoryFromConfig);return normalizeStoryPath(directoryFromWorking)},normalizeStoriesEntry=(entry,{configDir,workingDir})=>{let specifierWithoutMatcher;if(typeof entry=="string"){let globResult=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:DEFAULT_FILES}:specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,directory:path10.dirname(entry),files:path10.basename(entry)}}else specifierWithoutMatcher={titlePrefix:DEFAULT_TITLE_PREFIX,files:DEFAULT_FILES,...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)=>entries.map(entry=>normalizeStoriesEntry(entry,options));import fse2 from"fs-extra";async function readTemplate(filename){return fse2.readFile(filename,{encoding:"utf8"})}function isPreservingSymlinks(){let{NODE_OPTIONS,NODE_PRESERVE_SYMLINKS}=process.env;return!!NODE_PRESERVE_SYMLINKS||NODE_OPTIONS?.includes("--preserve-symlinks")}import path11 from"path";import{sync}from"pkg-dir";import fs3 from"fs";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.readFileSync(`${sync(__dirname)}/templates/base-preview-body.html`,"utf8"),bodyHtmlPath=path11.resolve(configDirPath,"preview-body.html"),result=base;return fs3.existsSync(bodyHtmlPath)&&(result=fs3.readFileSync(bodyHtmlPath,"utf8")+result),interpolate2(result,interpolations)}function getPreviewHeadTemplate(configDirPath,interpolations){let base=fs3.readFileSync(`${sync(__dirname)}/templates/base-preview-head.html`,"utf8"),headHtmlPath=path11.resolve(configDirPath,"preview-head.html"),result=base;return fs3.existsSync(headHtmlPath)&&(result+=fs3.readFileSync(headHtmlPath,"utf8")),interpolate2(result,interpolations)}import{dedent as dedent6}from"ts-dedent";var rendererNames=["@storybook/html","@storybook/preact","@storybook/react","@storybook/server","@storybook/svelte","@storybook/vue","@storybook/vue3","@storybook/web-components"];function validateFrameworkName(frameworkName){if(rendererNames.includes(frameworkName))throw new Error(dedent6`
19
+ Invalid value of ${frameworkName} in the 'framework' field of Storybook config.
20
+
21
+ Please run 'npx sb@next automigrate'
22
+
23
+ See the v7 Migration guide for more information:
24
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
25
+ `)}function satisfies(){return x=>x}export{boost,cache,checkAddonOrder,createFileSystemCache,filterPresetsConfig,findDistEsm,getAutoRefs,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,resolveAddonName,resolvePathInStorybookCache,satisfies,serverRequire,serverResolve,stringifyEnvs,stringifyProcessEnvs,validateConfigurationFiles,validateFrameworkName};
package/jest.config.js ADDED
@@ -0,0 +1,7 @@
1
+ const path = require('path');
2
+ const baseConfig = require('../../jest.config.node');
3
+
4
+ module.exports = {
5
+ ...baseConfig,
6
+ displayName: __dirname.split(path.sep).slice(-2).join(path.posix.sep),
7
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/core-common",
3
- "version": "7.0.0-alpha.8",
3
+ "version": "7.0.0-beta.0",
4
4
  "description": "Storybook framework-agnostic API",
5
5
  "keywords": [
6
6
  "storybook"
@@ -42,72 +42,40 @@
42
42
  "*.d.ts"
43
43
  ],
44
44
  "scripts": {
45
- "prepare": "esrun ../../scripts/prepare/bundle.ts"
45
+ "check": "../../../scripts/node_modules/.bin/tsc --noEmit",
46
+ "prep": "../../../scripts/prepare/bundle.ts"
46
47
  },
47
48
  "dependencies": {
48
- "@babel/core": "^7.12.10",
49
- "@babel/plugin-proposal-class-properties": "^7.12.1",
50
- "@babel/plugin-proposal-decorators": "^7.12.12",
51
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
52
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
53
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
54
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
55
- "@babel/plugin-proposal-private-methods": "^7.12.1",
56
- "@babel/plugin-proposal-private-property-in-object": "^7.12.1",
57
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
58
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
59
- "@babel/plugin-transform-block-scoping": "^7.12.12",
60
- "@babel/plugin-transform-classes": "^7.12.1",
61
- "@babel/plugin-transform-destructuring": "^7.12.1",
62
- "@babel/plugin-transform-for-of": "^7.12.1",
63
- "@babel/plugin-transform-parameters": "^7.12.1",
64
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
65
- "@babel/plugin-transform-spread": "^7.12.1",
66
- "@babel/preset-env": "^7.12.11",
67
- "@babel/preset-react": "^7.12.10",
68
- "@babel/preset-typescript": "^7.12.7",
69
- "@babel/register": "^7.12.1",
70
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
71
- "@storybook/node-logger": "7.0.0-alpha.8",
72
- "@storybook/semver": "^7.3.2",
73
- "@types/babel__core": "^7.0.0",
49
+ "@babel/core": "^7.20.2",
50
+ "@storybook/node-logger": "7.0.0-beta.0",
51
+ "@storybook/types": "7.0.0-beta.0",
52
+ "@types/babel__core": "^7.1.20",
74
53
  "@types/express": "^4.7.0",
75
- "@types/node": "^14.0.10 || ^16.0.0",
54
+ "@types/node": "^16.0.0",
76
55
  "@types/pretty-hrtime": "^1.0.0",
77
- "babel-loader": "^8.2.5",
78
- "babel-plugin-macros": "^3.0.1",
79
- "babel-plugin-polyfill-corejs3": "^0.1.0",
80
56
  "chalk": "^4.1.0",
81
- "core-js": "^3.8.2",
57
+ "esbuild": "^0.14.48",
58
+ "esbuild-register": "^3.3.3",
82
59
  "express": "^4.17.1",
83
- "file-system-cache": "^1.0.5",
60
+ "file-system-cache": "^2.0.0",
84
61
  "find-up": "^5.0.0",
85
62
  "fs-extra": "^9.0.1",
86
63
  "glob": "^7.1.6",
87
64
  "handlebars": "^4.7.7",
88
- "interpret": "^2.2.0",
89
- "json5": "^2.1.3",
90
65
  "lazy-universal-dotenv": "^3.0.1",
91
66
  "picomatch": "^2.3.0",
92
67
  "pkg-dir": "^5.0.0",
93
68
  "pretty-hrtime": "^1.0.3",
94
69
  "resolve-from": "^5.0.0",
95
70
  "slash": "^3.0.0",
96
- "telejson": "^6.0.8",
97
- "ts-dedent": "^2.0.0",
98
- "util-deprecate": "^1.0.2"
71
+ "ts-dedent": "^2.0.0"
99
72
  },
100
73
  "devDependencies": {
101
- "@digitak/esrun": "^3.2.2",
102
- "@types/compression": "^1.7.0",
103
- "@types/interpret": "^1.1.1",
104
- "@types/mock-fs": "^4.13.0",
74
+ "@types/mock-fs": "^4.13.1",
105
75
  "@types/picomatch": "^2.3.0",
106
- "mock-fs": "^4.13.0"
107
- },
108
- "peerDependencies": {
109
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
110
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
76
+ "mock-fs": "^5.2.0",
77
+ "type-fest": "^2.19.0",
78
+ "typescript": "~4.9.3"
111
79
  },
112
80
  "peerDependenciesMeta": {
113
81
  "typescript": {
@@ -117,8 +85,11 @@
117
85
  "publishConfig": {
118
86
  "access": "public"
119
87
  },
120
- "bundlerEntrypoint": [
121
- "./src/index.ts"
122
- ],
123
- "gitHead": "24725501c32a073cebc6bf2674a47357136fbe3a"
88
+ "bundler": {
89
+ "entries": [
90
+ "./src/index.ts"
91
+ ],
92
+ "platform": "node"
93
+ },
94
+ "gitHead": "2e4ddde6a0a291266d91fe6a5ecda767bf119e70"
124
95
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  <style>
4
4
  /* While we aren't showing the main block yet, but still preparing, we want everything the user
5
- has rendered, which may or may not be in #root, to be display none */
5
+ has rendered, which may or may not be in #storybook-root, to be display none */
6
6
  .sb-show-preparing-story:not(.sb-show-main) > :not(.sb-preparing-story) {
7
7
  display: none;
8
8
  }
@@ -26,7 +26,7 @@
26
26
  min-height: 100vh;
27
27
  }
28
28
 
29
- .sb-show-main.sb-main-centered #root {
29
+ .sb-show-main.sb-main-centered #storybook-root {
30
30
  box-sizing: border-box;
31
31
  margin: auto;
32
32
  padding: 1rem;
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2017 Kadira Inc. <hello@kadira.io>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
@@ -1,46 +0,0 @@
1
- <style>
2
- html, body {
3
- overflow: hidden;
4
- height: 100%;
5
- width: 100%;
6
- margin: 0;
7
- padding: 0;
8
- }
9
-
10
- * {
11
- box-sizing: border-box;
12
- }
13
- </style>
14
-
15
- <script>
16
- /* globals window */
17
- /* eslint-disable no-underscore-dangle */
18
- try {
19
- if (window.top !== window) {
20
- window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.top.__REACT_DEVTOOLS_GLOBAL_HOOK__;
21
- }
22
- } catch (e) {
23
- // eslint-disable-next-line no-console
24
- console.warn('unable to connect to top frame for connecting dev tools');
25
- }
26
-
27
- window.onerror = function onerror(message, source, line, column, err) {
28
- if (window.CONFIG_TYPE !== 'DEVELOPMENT') return;
29
- // eslint-disable-next-line no-var, vars-on-top
30
- var xhr = new window.XMLHttpRequest();
31
- xhr.open('POST', '/runtime-error');
32
- xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
33
- xhr.send(
34
- JSON.stringify({
35
- /* eslint-disable object-shorthand */
36
- message: message,
37
- source: source,
38
- line: line,
39
- column: column,
40
- error: err && { message: err.message, name: err.name, stack: err.stack },
41
- origin: 'manager',
42
- /* eslint-enable object-shorthand */
43
- })
44
- );
45
- };
46
- </script>
@@ -1,43 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title><%= htmlWebpackPlugin.options.title || 'Storybook'%></title>
6
-
7
- <% if (htmlWebpackPlugin.files.favicon) { %>
8
- <link rel="shortcut icon" href="<%= htmlWebpackPlugin.files.favicon%>" />
9
- <% } %>
10
-
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
-
13
- <% if (typeof headHtmlSnippet !== 'undefined') { %> <%= headHtmlSnippet %> <% } %> <%
14
- htmlWebpackPlugin.files.css.forEach(file => { %>
15
- <link href="<%= file %>" rel="stylesheet" />
16
- <% }); %>
17
-
18
- <style>
19
- #root[hidden],
20
- #docs-root[hidden] {
21
- display: none !important;
22
- }
23
- </style>
24
- </head>
25
- <body>
26
- <% if (typeof bodyHtmlSnippet !== 'undefined') { %> <%= bodyHtmlSnippet %> <% } %>
27
-
28
- <div id="root"></div>
29
- <div id="docs-root"></div>
30
-
31
- <% if (typeof globals !== 'undefined' && Object.keys(globals).length) { %>
32
- <script>
33
- <% for (var varName in globals) { %>
34
- <% if (globals[varName] != undefined) { %>
35
- window['<%=varName%>'] = <%= JSON.stringify(globals[varName]) %>;
36
- <% } %>
37
- <% } %>
38
- </script>
39
- <% } %> <% htmlWebpackPlugin.files.js.forEach(file => { %>
40
- <script src="<%= file %>"></script>
41
- <% }); %>
42
- </body>
43
- </html>