@storybook/core-server 6.5.0-beta.1 → 6.5.0-beta.4

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 (40) hide show
  1. package/dist/cjs/build-dev.js +67 -10
  2. package/dist/cjs/build-static.js +71 -16
  3. package/dist/cjs/cli/dev.js +2 -1
  4. package/dist/cjs/cli/prod.js +2 -1
  5. package/dist/cjs/dev-server.js +75 -7
  6. package/dist/cjs/presets/common-preset.js +46 -2
  7. package/dist/cjs/utils/get-preview-builder.js +1 -1
  8. package/dist/cjs/utils/metadata.js +28 -0
  9. package/dist/cjs/utils/stories-json.js +23 -47
  10. package/dist/cjs/utils/update-check.js +1 -1
  11. package/dist/esm/build-dev.js +65 -9
  12. package/dist/esm/build-static.js +69 -17
  13. package/dist/esm/cli/dev.js +2 -1
  14. package/dist/esm/cli/prod.js +2 -1
  15. package/dist/esm/dev-server.js +72 -8
  16. package/dist/esm/presets/common-preset.js +43 -1
  17. package/dist/esm/utils/get-preview-builder.js +1 -1
  18. package/dist/esm/utils/metadata.js +14 -0
  19. package/dist/esm/utils/stories-json.js +22 -44
  20. package/dist/esm/utils/update-check.js +1 -1
  21. package/dist/modern/build-dev.js +65 -9
  22. package/dist/modern/build-static.js +69 -17
  23. package/dist/modern/cli/dev.js +2 -1
  24. package/dist/modern/cli/prod.js +2 -1
  25. package/dist/modern/dev-server.js +72 -8
  26. package/dist/modern/presets/common-preset.js +43 -1
  27. package/dist/modern/utils/get-preview-builder.js +1 -1
  28. package/dist/modern/utils/metadata.js +14 -0
  29. package/dist/modern/utils/stories-json.js +22 -44
  30. package/dist/modern/utils/update-check.js +1 -1
  31. package/dist/ts3.4/dev-server.d.ts +1 -0
  32. package/dist/ts3.4/presets/common-preset.d.ts +9 -5
  33. package/dist/ts3.4/utils/metadata.d.ts +3 -0
  34. package/dist/ts3.4/utils/stories-json.d.ts +10 -8
  35. package/dist/ts3.9/build-dev.d.ts +1 -1
  36. package/dist/ts3.9/dev-server.d.ts +2 -1
  37. package/dist/ts3.9/presets/common-preset.d.ts +9 -5
  38. package/dist/ts3.9/utils/metadata.d.ts +3 -0
  39. package/dist/ts3.9/utils/stories-json.d.ts +10 -8
  40. package/package.json +12 -11
@@ -12,11 +12,13 @@ require("core-js/modules/es.promise.js");
12
12
 
13
13
  var _nodeLogger = require("@storybook/node-logger");
14
14
 
15
+ var _prompts = _interopRequireDefault(require("prompts"));
16
+
15
17
  var _coreCommon = require("@storybook/core-common");
16
18
 
17
- var _tsDedent = _interopRequireDefault(require("ts-dedent"));
19
+ var _telemetry = require("@storybook/telemetry");
18
20
 
19
- var _prompts = _interopRequireDefault(require("prompts"));
21
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
20
22
 
21
23
  var _global = _interopRequireDefault(require("global"));
22
24
 
@@ -160,14 +162,16 @@ async function buildDevStandalone(options) {
160
162
  async function buildDev(loadOptions) {
161
163
  var cliOptions = await (0, _cli.getDevCli)(loadOptions.packageJson);
162
164
 
165
+ var options = _objectSpread(_objectSpread(_objectSpread({}, cliOptions), loadOptions), {}, {
166
+ configDir: loadOptions.configDir || cliOptions.configDir || './.storybook',
167
+ configType: 'DEVELOPMENT',
168
+ ignorePreview: !!cliOptions.previewUrl && !cliOptions.forceBuildPreview,
169
+ docsMode: !!cliOptions.docs,
170
+ cache: _coreCommon.cache
171
+ });
172
+
163
173
  try {
164
- await buildDevStandalone(_objectSpread(_objectSpread(_objectSpread({}, cliOptions), loadOptions), {}, {
165
- configDir: loadOptions.configDir || cliOptions.configDir || './.storybook',
166
- configType: 'DEVELOPMENT',
167
- ignorePreview: !!cliOptions.previewUrl && !cliOptions.forceBuildPreview,
168
- docsMode: !!cliOptions.docs,
169
- cache: _coreCommon.cache
170
- }));
174
+ await buildDevStandalone(options);
171
175
  } catch (error) {
172
176
  var _error$compilation;
173
177
 
@@ -202,6 +206,59 @@ async function buildDev(loadOptions) {
202
206
 
203
207
  _nodeLogger.logger.line();
204
208
 
209
+ var presets = (0, _coreCommon.loadAllPresets)(_objectSpread({
210
+ corePresets: [require.resolve('./presets/common-preset')],
211
+ overridePresets: []
212
+ }, options));
213
+ var core = await presets.apply('core');
214
+
215
+ if (!(core !== null && core !== void 0 && core.disableTelemetry)) {
216
+ var enableCrashReports;
217
+
218
+ if (core.enableCrashReports !== undefined) {
219
+ enableCrashReports = core.enableCrashReports;
220
+ } else {
221
+ var valueFromCache = await _coreCommon.cache.get('enableCrashreports');
222
+
223
+ if (valueFromCache !== undefined) {
224
+ enableCrashReports = valueFromCache;
225
+ } else {
226
+ var valueFromPrompt = await promptCrashReports(options);
227
+
228
+ if (valueFromPrompt !== undefined) {
229
+ enableCrashReports = valueFromPrompt;
230
+ }
231
+ }
232
+ }
233
+
234
+ await (0, _telemetry.telemetry)('error-dev', {
235
+ error: error
236
+ }, {
237
+ immediate: true,
238
+ configDir: options.configDir,
239
+ enableCrashReports: enableCrashReports
240
+ });
241
+ }
242
+
205
243
  process.exit(1);
206
244
  }
207
- }
245
+ }
246
+
247
+ var promptCrashReports = async function ({
248
+ packageJson: packageJson
249
+ }) {
250
+ if (process.env.CI) {
251
+ return undefined;
252
+ }
253
+
254
+ var _await$prompts2 = await (0, _prompts.default)({
255
+ type: 'confirm',
256
+ name: 'enableCrashReports',
257
+ message: `Would you like to send crash reports to Storybook?`,
258
+ initial: true
259
+ }),
260
+ enableCrashReports = _await$prompts2.enableCrashReports;
261
+
262
+ await _coreCommon.cache.set('enableCrashreports', enableCrashReports);
263
+ return enableCrashReports;
264
+ };
@@ -24,6 +24,8 @@ var _global = _interopRequireDefault(require("global"));
24
24
 
25
25
  var _nodeLogger = require("@storybook/node-logger");
26
26
 
27
+ var _telemetry = require("@storybook/telemetry");
28
+
27
29
  var _coreCommon = require("@storybook/core-common");
28
30
 
29
31
  var _cli = require("./cli");
@@ -38,6 +40,10 @@ var _getManagerBuilder = require("./utils/get-manager-builder");
38
40
 
39
41
  var _storiesJson = require("./utils/stories-json");
40
42
 
43
+ var _metadata = require("./utils/metadata");
44
+
45
+ var _StoryIndexGenerator = require("./utils/StoryIndexGenerator");
46
+
41
47
  var _excluded = ["packageJson"];
42
48
 
43
49
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -124,17 +130,49 @@ async function buildStaticStandalone(options) {
124
130
 
125
131
  var features = await presets.apply('features');
126
132
  _global.default.FEATURES = features;
133
+ var extractTasks = [];
134
+ var initializedStoryIndexGenerator = Promise.resolve(undefined);
127
135
 
128
136
  if (features !== null && features !== void 0 && features.buildStoriesJson || features !== null && features !== void 0 && features.storyStoreV7) {
137
+ var workingDir = process.cwd();
129
138
  var directories = {
130
139
  configDir: options.configDir,
131
- workingDir: process.cwd()
140
+ workingDir: workingDir
132
141
  };
133
- var stories = (0, _coreCommon.normalizeStories)(await presets.apply('stories'), directories);
134
- await (0, _storiesJson.extractStoriesJson)(_path.default.join(options.outputDir, 'stories.json'), stories, _objectSpread(_objectSpread({}, directories), {}, {
142
+ var normalizedStories = (0, _coreCommon.normalizeStories)(await presets.apply('stories'), directories);
143
+ var generator = new _StoryIndexGenerator.StoryIndexGenerator(normalizedStories, _objectSpread(_objectSpread({}, directories), {}, {
135
144
  storiesV2Compatibility: !(features !== null && features !== void 0 && features.breakingChangesV7) && !(features !== null && features !== void 0 && features.storyStoreV7),
136
145
  storyStoreV7: features === null || features === void 0 ? void 0 : features.storyStoreV7
137
146
  }));
147
+ initializedStoryIndexGenerator = generator.initialize().then(function () {
148
+ return generator;
149
+ });
150
+ extractTasks.push((0, _storiesJson.extractStoriesJson)(_path.default.join(options.outputDir, 'stories.json'), initializedStoryIndexGenerator));
151
+ }
152
+
153
+ var core = await presets.apply('core');
154
+
155
+ if (!(core !== null && core !== void 0 && core.disableTelemetry)) {
156
+ initializedStoryIndexGenerator.then(async function (generator) {
157
+ if (!generator) {
158
+ return;
159
+ }
160
+
161
+ var storyIndex = await generator.getIndex();
162
+ var payload = storyIndex ? {
163
+ storyIndex: {
164
+ storyCount: Object.keys(storyIndex.stories).length,
165
+ version: storyIndex.v
166
+ }
167
+ } : undefined;
168
+ (0, _telemetry.telemetry)('build', payload, {
169
+ configDir: options.configDir
170
+ });
171
+ });
172
+ }
173
+
174
+ if (!(core !== null && core !== void 0 && core.disableProjectJson)) {
175
+ extractTasks.push((0, _metadata.extractStorybookMetadata)(_path.default.join(options.outputDir, 'project.json'), options.configDir));
138
176
  }
139
177
 
140
178
  var fullOptions = _objectSpread(_objectSpread({}, options), {}, {
@@ -147,7 +185,6 @@ async function buildStaticStandalone(options) {
147
185
  (0, _coreCommon.logConfig)('Manager webpack config', await managerBuilder.getConfig(fullOptions));
148
186
  }
149
187
 
150
- var core = await presets.apply('core');
151
188
  var builderName = typeof (core === null || core === void 0 ? void 0 : core.builder) === 'string' ? core.builder : core === null || core === void 0 ? void 0 : (_core$builder = core.builder) === null || _core$builder === void 0 ? void 0 : _core$builder.name;
152
189
 
153
190
  var _ref = builderName === 'webpack5' ? // eslint-disable-next-line import/no-extraneous-dependencies
@@ -184,7 +221,7 @@ async function buildStaticStandalone(options) {
184
221
  }), preview.catch(async function (err) {
185
222
  await managerBuilder.bail();
186
223
  throw err;
187
- })]),
224
+ }), ...extractTasks]),
188
225
  _await$Promise$all2 = _slicedToArray(_await$Promise$all, 2),
189
226
  managerStats = _await$Promise$all2[0],
190
227
  previewStats = _await$Promise$all2[1];
@@ -203,18 +240,36 @@ async function buildStatic(_ref2) {
203
240
 
204
241
  var cliOptions = (0, _cli.getProdCli)(packageJson);
205
242
 
243
+ var options = _objectSpread(_objectSpread(_objectSpread({}, cliOptions), loadOptions), {}, {
244
+ packageJson: packageJson,
245
+ configDir: loadOptions.configDir || cliOptions.configDir || './.storybook',
246
+ outputDir: loadOptions.outputDir || cliOptions.outputDir || './storybook-static',
247
+ ignorePreview: (!!loadOptions.ignorePreview || !!cliOptions.previewUrl) && !cliOptions.forceBuildPreview,
248
+ docsMode: !!cliOptions.docs,
249
+ configType: 'PRODUCTION',
250
+ cache: _coreCommon.cache
251
+ });
252
+
206
253
  try {
207
- await buildStaticStandalone(_objectSpread(_objectSpread(_objectSpread({}, cliOptions), loadOptions), {}, {
208
- packageJson: packageJson,
209
- configDir: loadOptions.configDir || cliOptions.configDir || './.storybook',
210
- outputDir: loadOptions.outputDir || cliOptions.outputDir || './storybook-static',
211
- ignorePreview: (!!loadOptions.ignorePreview || !!cliOptions.previewUrl) && !cliOptions.forceBuildPreview,
212
- docsMode: !!cliOptions.docs,
213
- configType: 'PRODUCTION',
214
- cache: _coreCommon.cache
215
- }));
216
- } catch (e) {
217
- _nodeLogger.logger.error(e);
254
+ await buildStaticStandalone(options);
255
+ } catch (error) {
256
+ _nodeLogger.logger.error(error);
257
+
258
+ var presets = (0, _coreCommon.loadAllPresets)(_objectSpread({
259
+ corePresets: [require.resolve('./presets/common-preset')],
260
+ overridePresets: []
261
+ }, options));
262
+ var core = await presets.apply('core');
263
+
264
+ if (!(core !== null && core !== void 0 && core.disableTelemetry)) {
265
+ await (0, _telemetry.telemetry)('error-build', {
266
+ error: error
267
+ }, {
268
+ immediate: true,
269
+ configDir: options.configDir,
270
+ enableCrashReports: options.enableCrashReports
271
+ });
272
+ }
218
273
 
219
274
  process.exit(1);
220
275
  }
@@ -28,7 +28,8 @@ async function getDevCli(packageJson) {
28
28
 
29
29
  _commander.default.version(packageJson.version).option('-p, --port <number>', 'Port to run Storybook', function (str) {
30
30
  return parseInt(str, 10);
31
- }).option('-h, --host <string>', 'Host to run Storybook').option('-s, --static-dir <dir-names>', 'Directory where to load static files from', _utils.parseList).option('-c, --config-dir <dir-name>', 'Directory where to load Storybook configurations from').option('--https', 'Serve Storybook over HTTPS. Note: You must provide your own certificate information.').option('--ssl-ca <ca>', 'Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)', _utils.parseList).option('--ssl-cert <cert>', 'Provide an SSL certificate. (Required with --https)').option('--ssl-key <key>', 'Provide an SSL key. (Required with --https)').option('--smoke-test', 'Exit after successful start').option('--ci', "CI mode (skip interactive prompts, don't open browser)").option('--no-open', 'Do not open Storybook automatically in the browser').option('--loglevel <level>', 'Control level of logging during build').option('--quiet', 'Suppress verbose build output').option('--no-version-updates', 'Suppress update check', true).option('--no-release-notes', 'Suppress automatic redirects to the release notes after upgrading', true).option('--no-manager-cache', 'Do not cache the manager UI').option('--no-dll', 'Do not use dll references (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);
31
+ }).option('-h, --host <string>', 'Host to run Storybook').option('-s, --static-dir <dir-names>', 'Directory where to load static files from', _utils.parseList).option('-c, --config-dir <dir-name>', 'Directory where to load Storybook configurations from').option('--https', 'Serve Storybook over HTTPS. Note: You must provide your own certificate information.').option('--ssl-ca <ca>', 'Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)', _utils.parseList).option('--ssl-cert <cert>', 'Provide an SSL certificate. (Required with --https)').option('--ssl-key <key>', 'Provide an SSL key. (Required with --https)').option('--smoke-test', 'Exit after successful start').option('--ci', "CI mode (skip interactive prompts, don't open browser)").option('--no-open', 'Do not open Storybook automatically in the browser').option('--loglevel <level>', 'Control level of logging during build').option('--quiet', 'Suppress verbose build output').option('--no-version-updates', 'Suppress update check', true).option('--disable-telemetry', 'Disable sending telemetry', // default value is false, but if the user sets STORYBOOK_DISABLE_TELEMETRY, it can be true
32
+ process.env.STORYBOOK_DISABLE_TELEMETRY && process.env.STORYBOOK_DISABLE_TELEMETRY !== 'false').option('--enable-crash-reports', 'enable sending crash reports to telemetry data').option('--no-release-notes', 'Suppress automatic redirects to the release notes after upgrading', true).option('--no-manager-cache', 'Do not cache the manager UI').option('--no-dll', 'Do not use dll references (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);
32
33
 
33
34
  _nodeLogger.logger.setLevel(_commander.default.loglevel); // Workaround the `-h` shorthand conflict.
34
35
  // Output the help if `-h` is called without any value.
@@ -24,7 +24,8 @@ 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('--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').option('--no-manager-cache', 'Do not cache the manager UI').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').option('--no-manager-cache', 'Do not cache the manager UI').option('--disable-telemetry', 'Disable sending telemetry', // default value is false, but if the user sets STORYBOOK_DISABLE_TELEMETRY, it can be true
28
+ process.env.STORYBOOK_DISABLE_TELEMETRY && process.env.STORYBOOK_DISABLE_TELEMETRY !== 'false').option('--enable-crash-reports', 'enable sending crash reports to telemetry data').parse(process.argv);
28
29
 
29
30
  _nodeLogger.logger.setLevel(_commander.default.loglevel);
30
31
 
@@ -5,7 +5,7 @@ require("core-js/modules/es.symbol.description.js");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.router = void 0;
8
+ exports.router = exports.DEBOUNCE = void 0;
9
9
  exports.storybookDevServer = storybookDevServer;
10
10
 
11
11
  require("core-js/modules/es.promise.js");
@@ -16,6 +16,8 @@ var _compression = _interopRequireDefault(require("compression"));
16
16
 
17
17
  var _coreCommon = require("@storybook/core-common");
18
18
 
19
+ var _telemetry = require("@storybook/telemetry");
20
+
19
21
  var _middleware = require("./utils/middleware");
20
22
 
21
23
  var _serverAddress = require("./utils/server-address");
@@ -26,6 +28,8 @@ var _serverStatics = require("./utils/server-statics");
26
28
 
27
29
  var _storiesJson = require("./utils/stories-json");
28
30
 
31
+ var _metadata = require("./utils/metadata");
32
+
29
33
  var _getServerChannel = require("./utils/get-server-channel");
30
34
 
31
35
  var _openInBrowser = require("./utils/open-in-browser");
@@ -34,6 +38,8 @@ var _getPreviewBuilder = require("./utils/get-preview-builder");
34
38
 
35
39
  var _getManagerBuilder = require("./utils/get-manager-builder");
36
40
 
41
+ var _StoryIndexGenerator = require("./utils/StoryIndexGenerator");
42
+
37
43
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
44
 
39
45
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -52,20 +58,86 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
52
58
 
53
59
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
54
60
 
61
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
62
+
63
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
64
+
65
+ 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; }
66
+
55
67
  // @ts-ignore
56
68
  var router = new _express.Router();
57
69
  exports.router = router;
70
+ var DEBOUNCE = 100;
71
+ exports.DEBOUNCE = DEBOUNCE;
58
72
 
59
73
  async function storybookDevServer(options) {
60
74
  var startTime = process.hrtime();
61
75
  var app = (0, _express.default)();
62
76
  var server = await (0, _serverInit.getServer)(app, options);
63
77
  var serverChannel = (0, _getServerChannel.getServerChannel)(server);
78
+ var features = await options.presets.apply('features');
79
+ var core = await options.presets.apply('core'); // try get index generator, if failed, send telemetry without storyCount, then rethrow the error
80
+
81
+ var initializedStoryIndexGenerator = Promise.resolve(undefined);
82
+
83
+ if (features !== null && features !== void 0 && features.buildStoriesJson || features !== null && features !== void 0 && features.storyStoreV7) {
84
+ try {
85
+ var workingDir = process.cwd();
86
+ var directories = {
87
+ configDir: options.configDir,
88
+ workingDir: workingDir
89
+ };
90
+ var normalizedStories = (0, _coreCommon.normalizeStories)(await options.presets.apply('stories'), directories);
91
+ var generator = new _StoryIndexGenerator.StoryIndexGenerator(normalizedStories, _objectSpread(_objectSpread({}, directories), {}, {
92
+ workingDir: workingDir,
93
+ storiesV2Compatibility: !(features !== null && features !== void 0 && features.breakingChangesV7) && !(features !== null && features !== void 0 && features.storyStoreV7),
94
+ storyStoreV7: features === null || features === void 0 ? void 0 : features.storyStoreV7
95
+ }));
96
+ initializedStoryIndexGenerator = generator.initialize().then(function () {
97
+ return generator;
98
+ });
99
+ (0, _storiesJson.useStoriesJson)({
100
+ router: router,
101
+ initializedStoryIndexGenerator: initializedStoryIndexGenerator,
102
+ normalizedStories: normalizedStories,
103
+ serverChannel: serverChannel,
104
+ workingDir: workingDir
105
+ });
106
+ } catch (err) {
107
+ if (!(core !== null && core !== void 0 && core.disableTelemetry)) {
108
+ (0, _telemetry.telemetry)('start');
109
+ }
110
+
111
+ throw err;
112
+ }
113
+ }
114
+
115
+ if (!(core !== null && core !== void 0 && core.disableTelemetry)) {
116
+ initializedStoryIndexGenerator.then(async function (generator) {
117
+ if (!generator) {
118
+ return;
119
+ }
120
+
121
+ var storyIndex = await generator.getIndex();
122
+ var payload = storyIndex ? {
123
+ storyIndex: {
124
+ storyCount: Object.keys(storyIndex.stories).length,
125
+ version: storyIndex.v
126
+ }
127
+ } : undefined;
128
+ (0, _telemetry.telemetry)('start', payload, {
129
+ configDir: options.configDir
130
+ });
131
+ });
132
+ }
133
+
134
+ if (!(core !== null && core !== void 0 && core.disableProjectJson)) {
135
+ (0, _metadata.useStorybookMetadata)(router, options.configDir);
136
+ }
137
+
64
138
  app.use((0, _compression.default)({
65
139
  level: 1
66
140
  }));
67
- var features = await options.presets.apply('features');
68
- var core = await options.presets.apply('core');
69
141
 
70
142
  if (typeof options.extendServer === 'function') {
71
143
  options.extendServer(server);
@@ -87,10 +159,6 @@ async function storybookDevServer(options) {
87
159
  res.header('Cross-Origin-Embedder-Policy', 'require-corp');
88
160
  next();
89
161
  });
90
- }
91
-
92
- if (features !== null && features !== void 0 && features.buildStoriesJson || features !== null && features !== void 0 && features.storyStoreV7) {
93
- await (0, _storiesJson.useStoriesJson)(router, serverChannel, options);
94
162
  } // User's own static files
95
163
 
96
164
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.typescript = exports.previewMainTemplate = exports.previewHead = exports.previewEntries = exports.previewBody = exports.managerMainTemplate = exports.logLevel = exports.features = exports.env = exports.config = exports.babel = void 0;
6
+ exports.typescript = exports.previewMainTemplate = exports.previewHead = exports.previewEntries = exports.previewBody = exports.managerMainTemplate = exports.logLevel = exports.features = exports.env = exports.core = exports.config = exports.babel = void 0;
7
7
 
8
8
  require("core-js/modules/es.promise.js");
9
9
 
@@ -105,6 +105,42 @@ var typescript = function () {
105
105
 
106
106
  exports.typescript = typescript;
107
107
 
108
+ var optionalEnvToBoolean = function (input) {
109
+ if (input === undefined) {
110
+ return undefined;
111
+ }
112
+
113
+ if (input.toUpperCase() === 'FALSE') {
114
+ return false;
115
+ }
116
+
117
+ if (input.toUpperCase() === 'TRUE') {
118
+ return true;
119
+ }
120
+
121
+ if (typeof input === 'string') {
122
+ return true;
123
+ }
124
+
125
+ return undefined;
126
+ };
127
+ /**
128
+ * If for some reason this config is not applied, the reason is that
129
+ * likely there is an addon that does `export core = () => ({ someConfig })`,
130
+ * instead of `export core = (existing) => ({ ...existing, someConfig })`,
131
+ * just overwriting everything and not merging with the existing values.
132
+ */
133
+
134
+
135
+ var core = async function (existing, options) {
136
+ return _objectSpread(_objectSpread({}, existing), {}, {
137
+ disableTelemetry: options.disableTelemetry === true,
138
+ enableCrashReports: options.enableCrashReports || optionalEnvToBoolean(process.env.STORYBOOK_ENABLE_CRASH_REPORTS)
139
+ });
140
+ };
141
+
142
+ exports.core = core;
143
+
108
144
  var config = async function (base, options) {
109
145
  return [...(await options.presets.apply('previewAnnotations', [], options)), ...base];
110
146
  };
@@ -116,7 +152,15 @@ var features = async function (existing) {
116
152
  postcss: true,
117
153
  emotionAlias: false,
118
154
  // TODO remove in 7.0, this no longer does anything
119
- warnOnLegacyHierarchySeparator: true
155
+ warnOnLegacyHierarchySeparator: true,
156
+ buildStoriesJson: false,
157
+ storyStoreV7: false,
158
+ modernInlineRender: false,
159
+ breakingChangesV7: false,
160
+ interactionsDebugger: false,
161
+ babelModeV7: false,
162
+ argTypeTargetsV7: false,
163
+ previewMdx2: false
120
164
  });
121
165
  };
122
166
 
@@ -29,7 +29,7 @@ async function getPreviewBuilder(configDir) {
29
29
 
30
30
  var builderPackage;
31
31
 
32
- if (core) {
32
+ if (core !== null && core !== void 0 && core.builder) {
33
33
  var _core$builder;
34
34
 
35
35
  var builderName = typeof core.builder === 'string' ? core.builder : (_core$builder = core.builder) === null || _core$builder === void 0 ? void 0 : _core$builder.name;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.extractStorybookMetadata = extractStorybookMetadata;
7
+ exports.useStorybookMetadata = useStorybookMetadata;
8
+
9
+ require("core-js/modules/es.promise.js");
10
+
11
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
12
+
13
+ var _telemetry = require("@storybook/telemetry");
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+ async function extractStorybookMetadata(outputFile, configDir) {
18
+ var storybookMetadata = await (0, _telemetry.getStorybookMetadata)(configDir);
19
+ await _fsExtra.default.writeJson(outputFile, storybookMetadata);
20
+ }
21
+
22
+ function useStorybookMetadata(router, configDir) {
23
+ router.use('/project.json', async function (req, res) {
24
+ var storybookMetadata = await (0, _telemetry.getStorybookMetadata)(configDir);
25
+ res.header('Content-Type', 'application/json');
26
+ res.send(JSON.stringify(storybookMetadata));
27
+ });
28
+ }
@@ -11,13 +11,9 @@ require("core-js/modules/es.promise.js");
11
11
 
12
12
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
13
13
 
14
- var _coreCommon = require("@storybook/core-common");
14
+ var _lodash = require("lodash");
15
15
 
16
- var _coreEvents = _interopRequireDefault(require("@storybook/core-events"));
17
-
18
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
19
-
20
- var _StoryIndexGenerator = require("./StoryIndexGenerator");
16
+ var _coreEvents = require("@storybook/core-events");
21
17
 
22
18
  var _watchStorySpecifiers = require("./watch-story-specifiers");
23
19
 
@@ -26,54 +22,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
26
22
  var DEBOUNCE = 100;
27
23
  exports.DEBOUNCE = DEBOUNCE;
28
24
 
29
- async function extractStoriesJson(outputFile, normalizedStories, options) {
30
- var generator = new _StoryIndexGenerator.StoryIndexGenerator(normalizedStories, options);
31
- await generator.initialize();
32
- var index = await generator.getIndex();
33
- await _fsExtra.default.writeJson(outputFile, index);
25
+ async function extractStoriesJson(outputFile, initializedStoryIndexGenerator) {
26
+ var generator = await initializedStoryIndexGenerator;
27
+ var storyIndex = await generator.getIndex();
28
+ await _fsExtra.default.writeJson(outputFile, storyIndex);
34
29
  }
35
30
 
36
- async function useStoriesJson(router, serverChannel, options, workingDir = process.cwd()) {
37
- var normalizedStories = (0, _coreCommon.normalizeStories)(await options.presets.apply('stories'), {
38
- configDir: options.configDir,
39
- workingDir: workingDir
40
- });
41
- var features = await options.presets.apply('features');
42
- var generator = new _StoryIndexGenerator.StoryIndexGenerator(normalizedStories, {
43
- configDir: options.configDir,
44
- workingDir: workingDir,
45
- storiesV2Compatibility: !(features !== null && features !== void 0 && features.breakingChangesV7) && !(features !== null && features !== void 0 && features.storyStoreV7),
46
- storyStoreV7: features === null || features === void 0 ? void 0 : features.storyStoreV7
47
- }); // Wait until someone actually requests `stories.json` before we start generating/watching.
48
- // This is mainly for testing purposes.
49
-
50
- var maybeInvalidate = (0, _debounce.default)(function () {
51
- return serverChannel.emit(_coreEvents.default.STORY_INDEX_INVALIDATED);
31
+ function useStoriesJson({
32
+ router: router,
33
+ initializedStoryIndexGenerator: initializedStoryIndexGenerator,
34
+ workingDir = process.cwd(),
35
+ serverChannel: serverChannel,
36
+ normalizedStories: normalizedStories
37
+ }) {
38
+ var maybeInvalidate = (0, _lodash.debounce)(function () {
39
+ return serverChannel.emit(_coreEvents.STORY_INDEX_INVALIDATED);
52
40
  }, DEBOUNCE, {
53
41
  leading: true
54
42
  });
55
- var startedPromise;
56
-
57
- async function ensureStarted() {
58
- if (!startedPromise) {
59
- startedPromise = async function () {
60
- (0, _watchStorySpecifiers.watchStorySpecifiers)(normalizedStories, {
61
- workingDir: workingDir
62
- }, function (specifier, path, removed) {
63
- generator.invalidate(specifier, path, removed);
64
- maybeInvalidate();
65
- });
66
- await generator.initialize();
67
- }();
68
- }
69
-
70
- return startedPromise;
71
- }
72
-
43
+ (0, _watchStorySpecifiers.watchStorySpecifiers)(normalizedStories, {
44
+ workingDir: workingDir
45
+ }, async function (specifier, path, removed) {
46
+ var generator = await initializedStoryIndexGenerator;
47
+ generator.invalidate(specifier, path, removed);
48
+ maybeInvalidate();
49
+ });
73
50
  router.use('/stories.json', async function (req, res) {
74
- await ensureStarted();
75
-
76
51
  try {
52
+ var generator = await initializedStoryIndexGenerator;
77
53
  var index = await generator.getIndex();
78
54
  res.header('Content-Type', 'application/json');
79
55
  res.send(JSON.stringify(index));
@@ -76,7 +76,7 @@ function createUpdateMessage(updateInfo, version) {
76
76
 
77
77
  ${_chalk.default.gray('Upgrade now:')} ${_nodeLogger.colors.green(upgradeCommand)}
78
78
 
79
- ${_chalk.default.gray('Read full changelog:')} ${_chalk.default.gray.underline('https://git.io/fhFYe')}
79
+ ${_chalk.default.gray('Read full changelog:')} ${_chalk.default.gray.underline('https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md')}
80
80
  ` : '';
81
81
  } catch (e) {
82
82
  updateMessage = '';