@storybook/core-server 6.4.0-beta.3 → 6.4.0-beta.33

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.
Files changed (114) hide show
  1. package/dist/cjs/build-dev.js +1 -0
  2. package/dist/cjs/build-static.js +28 -4
  3. package/dist/cjs/cli/prod.js +1 -1
  4. package/dist/cjs/cli/utils.js +21 -3
  5. package/dist/cjs/dev-server.js +4 -1
  6. package/dist/cjs/presets/common-preset.js +2 -1
  7. package/dist/cjs/utils/StoryIndexGenerator.js +117 -41
  8. package/dist/cjs/utils/__mockdata__/E.stories.js +13 -0
  9. package/dist/cjs/utils/__mockdata__/deeply/nested/single/File.stories.js +12 -0
  10. package/dist/cjs/utils/__mockdata__/preview.js +8 -0
  11. package/dist/cjs/utils/__mockdata__/src/A.stories.js +13 -0
  12. package/dist/cjs/utils/__mockdata__/src/B.stories.js +13 -0
  13. package/dist/cjs/utils/__mockdata__/src/C.js +8 -0
  14. package/dist/cjs/utils/__mockdata__/src/D.stories.js +13 -0
  15. package/dist/cjs/utils/__mockdata__/src/NoMeta.stories.js +12 -0
  16. package/dist/cjs/utils/__mockdata__/src/nested/Button.js +8 -0
  17. package/dist/cjs/utils/__mockdata__/src/nested/Button.stories.js +13 -0
  18. package/dist/cjs/utils/__mockdata__/src/nested/Page.mdx +1 -0
  19. package/dist/cjs/utils/__mockdata__/src/nested/Page.stories.mdx +5 -0
  20. package/dist/cjs/utils/__mockdata__/src/second-nested/F.stories.js +13 -0
  21. package/dist/cjs/utils/copy-all-static-files.js +33 -0
  22. package/dist/cjs/utils/get-server-channel.js +56 -0
  23. package/dist/cjs/utils/server-address.js +10 -2
  24. package/dist/cjs/utils/server-statics.js +37 -4
  25. package/dist/cjs/utils/stories-json.js +46 -9
  26. package/dist/cjs/utils/watch-story-specifiers.js +112 -0
  27. package/dist/esm/build-dev.js +2 -1
  28. package/dist/esm/build-static.js +28 -5
  29. package/dist/esm/cli/prod.js +1 -1
  30. package/dist/esm/cli/utils.js +22 -3
  31. package/dist/esm/dev-server.js +3 -1
  32. package/dist/esm/presets/common-preset.js +2 -1
  33. package/dist/esm/utils/StoryIndexGenerator.js +112 -39
  34. package/dist/esm/utils/__mockdata__/E.stories.js +5 -0
  35. package/dist/esm/utils/__mockdata__/deeply/nested/single/File.stories.js +4 -0
  36. package/dist/esm/utils/__mockdata__/preview.js +1 -0
  37. package/dist/esm/utils/__mockdata__/src/A.stories.js +5 -0
  38. package/dist/esm/utils/__mockdata__/src/B.stories.js +5 -0
  39. package/dist/esm/utils/__mockdata__/src/C.js +1 -0
  40. package/dist/esm/utils/__mockdata__/src/D.stories.js +5 -0
  41. package/dist/esm/utils/__mockdata__/src/NoMeta.stories.js +4 -0
  42. package/dist/esm/utils/__mockdata__/src/nested/Button.js +1 -0
  43. package/dist/esm/utils/__mockdata__/src/nested/Button.stories.js +5 -0
  44. package/dist/esm/utils/__mockdata__/src/nested/Page.mdx +1 -0
  45. package/dist/esm/utils/__mockdata__/src/nested/Page.stories.mdx +5 -0
  46. package/dist/esm/utils/__mockdata__/src/second-nested/F.stories.js +5 -0
  47. package/dist/esm/utils/copy-all-static-files.js +27 -0
  48. package/dist/esm/utils/get-server-channel.js +39 -0
  49. package/dist/esm/utils/server-address.js +5 -0
  50. package/dist/esm/utils/server-statics.js +35 -4
  51. package/dist/esm/utils/stories-json.js +40 -9
  52. package/dist/esm/utils/watch-story-specifiers.js +97 -0
  53. package/dist/modern/build-dev.js +2 -1
  54. package/dist/modern/build-static.js +28 -5
  55. package/dist/modern/cli/prod.js +1 -1
  56. package/dist/modern/cli/utils.js +22 -3
  57. package/dist/modern/dev-server.js +3 -1
  58. package/dist/modern/presets/common-preset.js +2 -1
  59. package/dist/modern/utils/StoryIndexGenerator.js +112 -39
  60. package/dist/modern/utils/__mockdata__/E.stories.js +5 -0
  61. package/dist/modern/utils/__mockdata__/deeply/nested/single/File.stories.js +4 -0
  62. package/dist/modern/utils/__mockdata__/preview.js +1 -0
  63. package/dist/modern/utils/__mockdata__/src/A.stories.js +5 -0
  64. package/dist/modern/utils/__mockdata__/src/B.stories.js +5 -0
  65. package/dist/modern/utils/__mockdata__/src/C.js +1 -0
  66. package/dist/modern/utils/__mockdata__/src/D.stories.js +5 -0
  67. package/dist/modern/utils/__mockdata__/src/NoMeta.stories.js +4 -0
  68. package/dist/modern/utils/__mockdata__/src/nested/Button.js +1 -0
  69. package/dist/modern/utils/__mockdata__/src/nested/Button.stories.js +5 -0
  70. package/dist/modern/utils/__mockdata__/src/nested/Page.mdx +1 -0
  71. package/dist/modern/utils/__mockdata__/src/nested/Page.stories.mdx +5 -0
  72. package/dist/modern/utils/__mockdata__/src/second-nested/F.stories.js +5 -0
  73. package/dist/modern/utils/copy-all-static-files.js +27 -0
  74. package/dist/modern/utils/get-server-channel.js +39 -0
  75. package/dist/modern/utils/server-address.js +5 -0
  76. package/dist/modern/utils/server-statics.js +35 -4
  77. package/dist/modern/utils/stories-json.js +40 -9
  78. package/dist/modern/utils/watch-story-specifiers.js +97 -0
  79. package/dist/ts3.4/cli/prod.d.ts +2 -16
  80. package/dist/ts3.4/cli/utils.d.ts +3 -5
  81. package/dist/ts3.4/presets/common-preset.d.ts +1 -0
  82. package/dist/ts3.4/utils/StoryIndexGenerator.d.ts +17 -9
  83. package/dist/ts3.4/utils/__mockdata__/E.stories.d.ts +5 -0
  84. package/dist/ts3.4/utils/__mockdata__/deeply/nested/single/File.stories.d.ts +5 -0
  85. package/dist/ts3.4/utils/__mockdata__/src/B.stories.d.ts +5 -0
  86. package/dist/ts3.4/utils/__mockdata__/src/NoMeta.stories.d.ts +1 -0
  87. package/dist/ts3.4/utils/__mockdata__/src/nested/Button.d.ts +1 -0
  88. package/dist/ts3.4/utils/__mockdata__/src/nested/Button.stories.d.ts +5 -0
  89. package/dist/ts3.4/utils/__mockdata__/src/second-nested/F.stories.d.ts +5 -0
  90. package/dist/ts3.4/utils/copy-all-static-files.d.ts +1 -0
  91. package/dist/ts3.4/utils/get-server-channel.d.ts +9 -0
  92. package/dist/ts3.4/utils/server-address.d.ts +3 -0
  93. package/dist/ts3.4/utils/server-statics.d.ts +2 -3
  94. package/dist/ts3.4/utils/stories-json.d.ts +9 -2
  95. package/dist/ts3.4/utils/watch-story-specifiers.d.ts +5 -0
  96. package/dist/ts3.9/cli/prod.d.ts +2 -16
  97. package/dist/ts3.9/cli/utils.d.ts +3 -5
  98. package/dist/ts3.9/presets/common-preset.d.ts +1 -0
  99. package/dist/ts3.9/utils/StoryIndexGenerator.d.ts +17 -9
  100. package/dist/ts3.9/utils/__mockdata__/E.stories.d.ts +5 -0
  101. package/dist/ts3.9/utils/__mockdata__/deeply/nested/single/File.stories.d.ts +5 -0
  102. package/dist/ts3.9/utils/__mockdata__/src/B.stories.d.ts +5 -0
  103. package/dist/ts3.9/utils/__mockdata__/src/NoMeta.stories.d.ts +1 -0
  104. package/dist/ts3.9/utils/__mockdata__/src/nested/Button.d.ts +1 -0
  105. package/dist/ts3.9/utils/__mockdata__/src/nested/Button.stories.d.ts +5 -0
  106. package/dist/ts3.9/utils/__mockdata__/src/second-nested/F.stories.d.ts +5 -0
  107. package/dist/ts3.9/utils/copy-all-static-files.d.ts +1 -0
  108. package/dist/ts3.9/utils/get-server-channel.d.ts +9 -0
  109. package/dist/ts3.9/utils/server-address.d.ts +3 -0
  110. package/dist/ts3.9/utils/server-statics.d.ts +2 -3
  111. package/dist/ts3.9/utils/stories-json.d.ts +9 -2
  112. package/dist/ts3.9/utils/watch-story-specifiers.d.ts +5 -0
  113. package/package.json +21 -13
  114. package/typings.d.ts +1 -0
@@ -96,6 +96,7 @@ async function buildDevStandalone(options) {
96
96
  options.configType = 'DEVELOPMENT';
97
97
  options.configDir = _path.default.resolve(options.configDir);
98
98
  options.outputDir = options.smokeTest ? (0, _coreCommon.resolvePathInStorybookCache)('public') : _path.default.resolve(options.outputDir || (0, _coreCommon.resolvePathInStorybookCache)('public'));
99
+ options.serverChannelUrl = (0, _serverAddress.getServerChannelUrl)(port, options);
99
100
  /* eslint-enable no-param-reassign */
100
101
 
101
102
  var previewBuilder = await (0, _getPreviewBuilder.getPreviewBuilder)(options.configDir);
@@ -18,6 +18,8 @@ var _fsExtra = _interopRequireDefault(require("fs-extra"));
18
18
 
19
19
  var _path = _interopRequireDefault(require("path"));
20
20
 
21
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
22
+
21
23
  var _nodeLogger = require("@storybook/node-logger");
22
24
 
23
25
  var _coreCommon = require("@storybook/core-common");
@@ -90,21 +92,43 @@ async function buildStaticStandalone(options) {
90
92
 
91
93
  await _fsExtra.default.emptyDir(options.outputDir);
92
94
  await (0, _cpy.default)(defaultFavIcon, options.outputDir);
93
- await (0, _copyAllStaticFiles.copyAllStaticFiles)(options.staticDir, options.outputDir);
94
95
  var previewBuilder = await (0, _getPreviewBuilder.getPreviewBuilder)(options.configDir);
95
96
  var managerBuilder = await (0, _getManagerBuilder.getManagerBuilder)(options.configDir);
96
97
  var presets = (0, _coreCommon.loadAllPresets)(_objectSpread({
97
98
  corePresets: [require.resolve('./presets/common-preset'), ...managerBuilder.corePresets, ...previewBuilder.corePresets, require.resolve('./presets/babel-cache-preset')],
98
99
  overridePresets: previewBuilder.overridePresets
99
100
  }, options));
101
+ var staticDirs = await presets.apply('staticDirs');
102
+
103
+ if (staticDirs && options.staticDir) {
104
+ throw new Error((0, _tsDedent.default)`
105
+ Conflict when trying to read staticDirs:
106
+ * Storybook's configuration option: 'staticDirs'
107
+ * Storybook's CLI flag: '--staticDir' or '-s'
108
+
109
+ Choose one of them, but not both.
110
+ `);
111
+ }
112
+
113
+ if (staticDirs) {
114
+ await (0, _copyAllStaticFiles.copyAllStaticFilesRelativeToMain)(staticDirs, options.outputDir, options.configDir);
115
+ }
116
+
117
+ if (options.staticDir) {
118
+ await (0, _copyAllStaticFiles.copyAllStaticFiles)(options.staticDir, options.outputDir);
119
+ }
120
+
100
121
  var features = await presets.apply('features');
101
122
 
102
123
  if (features !== null && features !== void 0 && features.buildStoriesJson || features !== null && features !== void 0 && features.storyStoreV7) {
103
- var stories = (0, _coreCommon.normalizeStories)(await presets.apply('stories'), {
124
+ var directories = {
104
125
  configDir: options.configDir,
105
126
  workingDir: process.cwd()
106
- });
107
- await (0, _storiesJson.extractStoriesJson)(_path.default.join(options.outputDir, 'stories.json'), stories, options.configDir);
127
+ };
128
+ var stories = (0, _coreCommon.normalizeStories)(await presets.apply('stories'), directories);
129
+ await (0, _storiesJson.extractStoriesJson)(_path.default.join(options.outputDir, 'stories.json'), stories, _objectSpread(_objectSpread({}, directories), {}, {
130
+ storiesV2Compatibility: !(features !== null && features !== void 0 && features.breakingChangesV7) && !(features !== null && features !== void 0 && features.storyStoreV7)
131
+ }));
108
132
  }
109
133
 
110
134
  var fullOptions = _objectSpread(_objectSpread({}, options), {}, {
@@ -24,7 +24,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
24
24
  function getProdCli(packageJson) {
25
25
  process.env.NODE_ENV = process.env.NODE_ENV || 'production';
26
26
 
27
- _commander.default.version(packageJson.version).option('-s, --static-dir <dir-names>', 'Directory where to load static files from', _utils.parseList).option('-o, --output-dir <dir-name>', 'Directory where to store built files').option('-c, --config-dir <dir-name>', 'Directory where to load Storybook configurations from').option('-w, --watch', 'Enable watch mode').option('--quiet', 'Suppress verbose build output').option('--loglevel <level>', 'Control level of logging during build').option('--no-dll', 'Do not use dll reference (no-op)').option('--docs-dll', 'Use Docs dll reference (legacy)').option('--ui-dll', 'Use UI dll reference (legacy)').option('--debug-webpack', 'Display final webpack configurations for debugging purposes').option('--webpack-stats-json [directory]', 'Write Webpack Stats JSON to disk').option('--preview-url <string>', 'Disables the default storybook preview and lets your use your own').option('--force-build-preview', 'Build the preview iframe even if you are using --preview-url').option('--docs', 'Build a documentation-only site using addon-docs').option('--modern', 'Use modern browser modules').parse(process.argv);
27
+ _commander.default.version(packageJson.version).option('-s, --static-dir <dir-names>', 'Directory where to load static files from', _utils.parseList).option('-o, --output-dir <dir-name>', 'Directory where to store built files').option('-c, --config-dir <dir-name>', 'Directory where to load Storybook configurations from').option('--quiet', 'Suppress verbose build output').option('--loglevel <level>', 'Control level of logging during build').option('--no-dll', 'Do not use dll reference (no-op)').option('--docs-dll', 'Use Docs dll reference (legacy)').option('--ui-dll', 'Use UI dll reference (legacy)').option('--debug-webpack', 'Display final webpack configurations for debugging purposes').option('--webpack-stats-json [directory]', 'Write Webpack Stats JSON to disk').option('--preview-url <string>', 'Disables the default storybook preview and lets your use your own').option('--force-build-preview', 'Build the preview iframe even if you are using --preview-url').option('--docs', 'Build a documentation-only site using addon-docs').option('--modern', 'Use modern browser modules').parse(process.argv);
28
28
 
29
29
  _nodeLogger.logger.setLevel(_commander.default.loglevel);
30
30
 
@@ -32,14 +32,32 @@ function getEnvConfig(program, configEnv) {
32
32
  });
33
33
  }
34
34
 
35
- var warnDLLsDeprecated = (0, _utilDeprecate.default)(function () {}, (0, _tsDedent.default)`
35
+ var warnDeprecatedFlag = function (message) {
36
+ return (0, _utilDeprecate.default)(function () {}, (0, _tsDedent.default)(message));
37
+ };
38
+
39
+ var warnDLLsDeprecated = warnDeprecatedFlag(`
36
40
  DLL-related CLI flags are deprecated, see:
37
41
 
38
42
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-dll-flags
39
43
  `);
44
+ var warnStaticDirDeprecated = warnDeprecatedFlag(`
45
+ --static-dir CLI flag is deprecated, see:
46
+
47
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-static-dir-flag
48
+ `);
40
49
 
41
- function checkDeprecatedFlags(options) {
42
- if (!options.dll || options.uiDll || options.docsDll) {
50
+ function checkDeprecatedFlags({
51
+ dll: dll,
52
+ uiDll: uiDll,
53
+ docsDll: docsDll,
54
+ staticDir: staticDir
55
+ }) {
56
+ if (!dll || uiDll || docsDll) {
43
57
  warnDLLsDeprecated();
44
58
  }
59
+
60
+ if (staticDir) {
61
+ warnStaticDirDeprecated();
62
+ }
45
63
  }
@@ -26,6 +26,8 @@ var _serverStatics = require("./utils/server-statics");
26
26
 
27
27
  var _storiesJson = require("./utils/stories-json");
28
28
 
29
+ var _getServerChannel = require("./utils/get-server-channel");
30
+
29
31
  var _openInBrowser = require("./utils/open-in-browser");
30
32
 
31
33
  var _getPreviewBuilder = require("./utils/get-preview-builder");
@@ -58,6 +60,7 @@ async function storybookDevServer(options) {
58
60
  var startTime = process.hrtime();
59
61
  var app = (0, _express.default)();
60
62
  var server = await (0, _serverInit.getServer)(app, options);
63
+ var serverChannel = (0, _getServerChannel.getServerChannel)(server);
61
64
  app.use((0, _compression.default)({
62
65
  level: 1
63
66
  }));
@@ -76,7 +79,7 @@ async function storybookDevServer(options) {
76
79
  var features = await options.presets.apply('features');
77
80
 
78
81
  if (features !== null && features !== void 0 && features.buildStoriesJson || features !== null && features !== void 0 && features.storyStoreV7) {
79
- await (0, _storiesJson.useStoriesJson)(router, options);
82
+ await (0, _storiesJson.useStoriesJson)(router, serverChannel, options);
80
83
  }
81
84
 
82
85
  (0, _middleware.getMiddleware)(options.configDir)(router);
@@ -107,7 +107,8 @@ exports.typescript = typescript;
107
107
 
108
108
  var features = async function (existing) {
109
109
  return _objectSpread(_objectSpread({}, existing), {}, {
110
- postcss: true
110
+ postcss: true,
111
+ emotionAlias: true
111
112
  });
112
113
  };
113
114
 
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.symbol.description.js");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -17,6 +19,8 @@ var _fsExtra = _interopRequireDefault(require("fs-extra"));
17
19
 
18
20
  var _globby = _interopRequireDefault(require("globby"));
19
21
 
22
+ var _slash = _interopRequireDefault(require("slash"));
23
+
20
24
  var _store = require("@storybook/store");
21
25
 
22
26
  var _nodeLogger = require("@storybook/node-logger");
@@ -25,6 +29,24 @@ var _csfTools = require("@storybook/csf-tools");
25
29
 
26
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
31
 
32
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
33
+
34
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
35
+
36
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
37
+
38
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
39
+
40
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
41
+
42
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
43
+
44
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
45
+
46
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
47
+
48
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
49
+
28
50
  function sortExtractedStories(stories, storySortParameter, fileNameOrder) {
29
51
  var sortableStories = Object.values(stories);
30
52
  (0, _store.sortStoriesV7)(sortableStories, storySortParameter, fileNameOrder);
@@ -37,10 +59,14 @@ function sortExtractedStories(stories, storySortParameter, fileNameOrder) {
37
59
  class StoryIndexGenerator {
38
60
  // An internal cache mapping specifiers to a set of path=><set of stories>
39
61
  // Later, we'll combine each of these subsets together to form the full index
40
- constructor(specifiers, configDir) {
62
+ // Cache the last value of `getStoryIndex`. We invalidate (by unsetting) when:
63
+ // - any file changes, including deletions
64
+ // - the preview changes [not yet implemented]
65
+ constructor(specifiers, options) {
41
66
  this.specifiers = specifiers;
42
- this.configDir = configDir;
67
+ this.options = options;
43
68
  this.storyIndexEntries = void 0;
69
+ this.lastIndex = void 0;
44
70
  this.storyIndexEntries = new Map();
45
71
  }
46
72
 
@@ -50,9 +76,20 @@ class StoryIndexGenerator {
50
76
  // Find all matching paths for each specifier
51
77
  await Promise.all(this.specifiers.map(async function (specifier) {
52
78
  var pathToSubIndex = {};
53
- var files = await (0, _globby.default)(_path.default.join(_this.configDir, specifier.glob));
54
- files.forEach(function (fileName) {
55
- pathToSubIndex[fileName] = false;
79
+ var fullGlob = (0, _slash.default)(_path.default.join(_this.options.workingDir, specifier.directory, specifier.files));
80
+ var files = await (0, _globby.default)(fullGlob);
81
+ files.forEach(function (absolutePath) {
82
+ var ext = _path.default.extname(absolutePath);
83
+
84
+ var relativePath = _path.default.relative(_this.options.workingDir, absolutePath);
85
+
86
+ if (!['.js', '.jsx', '.ts', '.tsx', '.mdx'].includes(ext)) {
87
+ _nodeLogger.logger.info(`Skipping ${ext} file ${relativePath}`);
88
+
89
+ return;
90
+ }
91
+
92
+ pathToSubIndex[absolutePath] = false;
56
93
  });
57
94
 
58
95
  _this.storyIndexEntries.set(specifier, pathToSubIndex);
@@ -64,30 +101,23 @@ class StoryIndexGenerator {
64
101
  async ensureExtracted() {
65
102
  var _this2 = this;
66
103
 
67
- await Promise.all(this.specifiers.map(async function (specifier) {
104
+ return (await Promise.all(this.specifiers.map(async function (specifier) {
68
105
  var entry = _this2.storyIndexEntries.get(specifier);
69
106
 
70
- await Promise.all(Object.keys(entry).map(async function (fileName) {
71
- if (!entry[fileName]) await _this2.extractStories(specifier, fileName);
107
+ return Promise.all(Object.keys(entry).map(async function (absolutePath) {
108
+ return entry[absolutePath] || _this2.extractStories(specifier, absolutePath);
72
109
  }));
73
- }));
110
+ }))).flat();
74
111
  }
75
112
 
76
113
  async extractStories(specifier, absolutePath) {
77
- var ext = _path.default.extname(absolutePath);
78
-
79
- var relativePath = _path.default.relative(this.configDir, absolutePath);
114
+ var relativePath = _path.default.relative(this.options.workingDir, absolutePath);
80
115
 
81
- if (!['.js', '.jsx', '.ts', '.tsx', '.mdx'].includes(ext)) {
82
- _nodeLogger.logger.info(`Skipping ${ext} file ${relativePath}`);
83
-
84
- return;
85
- }
116
+ var fileStories = {};
117
+ var entry = this.storyIndexEntries.get(specifier);
86
118
 
87
119
  try {
88
- var entry = this.storyIndexEntries.get(specifier);
89
- var fileStories = {};
90
- var importPath = relativePath[0] === '.' ? relativePath : `./${relativePath}`;
120
+ var importPath = (0, _slash.default)(relativePath[0] === '.' ? relativePath : `./${relativePath}`);
91
121
  var defaultTitle = (0, _store.autoTitleFromSpecifier)(importPath, specifier);
92
122
  var csf = (await (0, _csfTools.readCsfOrMdx)(absolutePath, {
93
123
  defaultTitle: defaultTitle
@@ -103,41 +133,87 @@ class StoryIndexGenerator {
103
133
  importPath: importPath
104
134
  };
105
135
  });
106
- entry[absolutePath] = fileStories;
107
136
  } catch (err) {
108
- _nodeLogger.logger.warn(`🚨 Extraction error on ${relativePath}: ${err}`);
109
-
110
- _nodeLogger.logger.warn(`🚨 ${err.stack}`);
137
+ if (err.name === 'NoMetaError') {
138
+ _nodeLogger.logger.info(`💡 Skipping ${relativePath}: ${err}`);
139
+ } else {
140
+ _nodeLogger.logger.warn(`🚨 Extraction error on ${relativePath}: ${err}`);
111
141
 
112
- throw err;
142
+ throw err;
143
+ }
113
144
  }
114
- }
115
145
 
116
- async getIndex() {
117
- var _this3 = this;
118
-
119
- // Extract any entries that are currently missing
120
- await this.ensureExtracted();
121
- var stories = {}; // Check each entry and compose into stories, extracting if needed
146
+ entry[absolutePath] = fileStories;
147
+ return fileStories;
148
+ }
122
149
 
123
- this.specifiers.map(async function (specifier) {
124
- Object.values(_this3.storyIndexEntries.get(specifier)).map(function (subStories) {
125
- return Object.assign(stories, subStories);
126
- });
150
+ async sortStories(storiesList) {
151
+ var stories = {};
152
+ storiesList.forEach(function (subStories) {
153
+ Object.assign(stories, subStories);
127
154
  });
128
155
  var storySortParameter = await this.getStorySortParameter();
129
- var sorted = sortExtractedStories(stories, storySortParameter, this.storyFileNames());
130
- return {
156
+ return sortExtractedStories(stories, storySortParameter, this.storyFileNames());
157
+ }
158
+
159
+ async getIndex() {
160
+ if (this.lastIndex) return this.lastIndex; // Extract any entries that are currently missing
161
+ // Pull out each file's stories into a list of stories, to be composed and sorted
162
+
163
+ var storiesList = await this.ensureExtracted();
164
+ var sorted = await this.sortStories(storiesList);
165
+ var compat = sorted;
166
+
167
+ if (this.options.storiesV2Compatibility) {
168
+ var titleToStoryCount = Object.values(sorted).reduce(function (acc, story) {
169
+ acc[story.title] = (acc[story.title] || 0) + 1;
170
+ return acc;
171
+ }, {});
172
+ compat = Object.entries(sorted).reduce(function (acc, entry) {
173
+ var _entry = _slicedToArray(entry, 2),
174
+ id = _entry[0],
175
+ story = _entry[1];
176
+
177
+ acc[id] = _objectSpread(_objectSpread({}, story), {}, {
178
+ id: id,
179
+ kind: story.title,
180
+ story: story.name,
181
+ parameters: {
182
+ __id: story.id,
183
+ docsOnly: titleToStoryCount[story.title] === 1 && story.name === 'Page',
184
+ fileName: story.importPath
185
+ }
186
+ });
187
+ return acc;
188
+ }, {});
189
+ }
190
+
191
+ this.lastIndex = {
131
192
  v: 3,
132
- stories: sorted
193
+ stories: compat
133
194
  };
195
+ return this.lastIndex;
196
+ }
197
+
198
+ invalidate(specifier, importPath, removed) {
199
+ var absolutePath = _path.default.resolve(this.options.workingDir, importPath);
200
+
201
+ var pathToEntries = this.storyIndexEntries.get(specifier);
202
+
203
+ if (removed) {
204
+ delete pathToEntries[absolutePath];
205
+ } else {
206
+ pathToEntries[absolutePath] = false;
207
+ }
208
+
209
+ this.lastIndex = null;
134
210
  }
135
211
 
136
212
  async getStorySortParameter() {
137
- var _this4 = this;
213
+ var _this3 = this;
138
214
 
139
215
  var previewFile = ['js', 'jsx', 'ts', 'tsx'].map(function (ext) {
140
- return _path.default.join(_this4.configDir, `preview.${ext}`);
216
+ return _path.default.join(_this3.options.configDir, `preview.${ext}`);
141
217
  }).find(function (fname) {
142
218
  return _fsExtra.default.existsSync(fname);
143
219
  });
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var _default = {
8
+ component: {}
9
+ };
10
+ exports.default = _default;
11
+ var StoryOne = {};
12
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parameters = void 0;
7
+ var parameters = {};
8
+ exports.parameters = parameters;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.C = void 0;
7
+ var C = {};
8
+ exports.C = C;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = void 0;
7
+
8
+ /* eslint-disable storybook/default-exports */
9
+ // no default export
10
+ // e.g. https://github.com/storybookjs/storybook/issues/16421
11
+ var StoryOne = {};
12
+ exports.StoryOne = StoryOne;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Button = void 0;
7
+ var Button = {};
8
+ exports.Button = Button;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -0,0 +1 @@
1
+ <h1>Some MDX</h1>
@@ -0,0 +1,5 @@
1
+ import { Meta, Story } from '@storybook/addon-docs';
2
+
3
+ <Meta component={{}} />;
4
+
5
+ <Story name="StoryOne" />
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StoryOne = exports.default = void 0;
7
+ var component = {};
8
+ var _default = {
9
+ component: component
10
+ };
11
+ exports.default = _default;
12
+ var StoryOne = {};
13
+ exports.StoryOne = StoryOne;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.copyAllStaticFiles = copyAllStaticFiles;
7
+ exports.copyAllStaticFilesRelativeToMain = copyAllStaticFilesRelativeToMain;
7
8
 
8
9
  require("core-js/modules/es.promise.js");
9
10
 
@@ -15,6 +16,8 @@ var _path = _interopRequireDefault(require("path"));
15
16
 
16
17
  var _nodeLogger = require("@storybook/node-logger");
17
18
 
19
+ var _coreCommon = require("@storybook/core-common");
20
+
18
21
  var _serverStatics = require("./server-statics");
19
22
 
20
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -50,4 +53,34 @@ async function copyAllStaticFiles(staticDirs, outputDir) {
50
53
  }
51
54
  }));
52
55
  }
56
+ }
57
+
58
+ async function copyAllStaticFilesRelativeToMain(staticDirs, outputDir, configDir) {
59
+ staticDirs.forEach(async function (dir) {
60
+ var staticDirAndTarget = typeof dir === 'string' ? dir : `${dir.from}:${dir.to}`;
61
+
62
+ var _await$parseStaticDir2 = await (0, _serverStatics.parseStaticDir)((0, _coreCommon.getDirectoryFromWorkingDir)({
63
+ configDir: configDir,
64
+ workingDir: process.cwd(),
65
+ directory: staticDirAndTarget
66
+ })),
67
+ from = _await$parseStaticDir2.staticPath,
68
+ to = _await$parseStaticDir2.targetEndpoint;
69
+
70
+ var targetPath = _path.default.join(outputDir, to);
71
+
72
+ var skipPaths = ['index.html', 'iframe.html'].map(function (f) {
73
+ return _path.default.join(targetPath, f);
74
+ });
75
+
76
+ _nodeLogger.logger.info((0, _chalk.default)`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`);
77
+
78
+ await _fsExtra.default.copy(from, targetPath, {
79
+ dereference: true,
80
+ preserveTimestamps: true,
81
+ filter: function (_, dest) {
82
+ return !skipPaths.includes(dest);
83
+ }
84
+ });
85
+ });
53
86
  }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getServerChannel = getServerChannel;
7
+ exports.ServerChannel = void 0;
8
+
9
+ var _ws = _interopRequireWildcard(require("ws"));
10
+
11
+ var _telejson = require("telejson");
12
+
13
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
14
+
15
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+
17
+ class ServerChannel {
18
+ constructor(server) {
19
+ var _this = this;
20
+
21
+ this.webSocketServer = void 0;
22
+ this.webSocketServer = new _ws.WebSocketServer({
23
+ noServer: true
24
+ });
25
+ server.on('upgrade', function (request, socket, head) {
26
+ if (request.url === '/storybook-server-channel') {
27
+ _this.webSocketServer.handleUpgrade(request, socket, head, function (ws) {
28
+ _this.webSocketServer.emit('connection', ws, request);
29
+ });
30
+ }
31
+ });
32
+ }
33
+
34
+ emit(type, args = []) {
35
+ var event = {
36
+ type: type,
37
+ args: args
38
+ };
39
+ var data = (0, _telejson.stringify)(event, {
40
+ maxDepth: 15,
41
+ allowFunction: true
42
+ });
43
+ Array.from(this.webSocketServer.clients).filter(function (c) {
44
+ return c.readyState === _ws.default.OPEN;
45
+ }).forEach(function (client) {
46
+ return client.send(data);
47
+ });
48
+ }
49
+
50
+ }
51
+
52
+ exports.ServerChannel = ServerChannel;
53
+
54
+ function getServerChannel(server) {
55
+ return new ServerChannel(server);
56
+ }