@storybook/core-common 6.5.0-alpha.50 → 6.5.0-alpha.53

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.
@@ -17,12 +17,12 @@ var _path = require("path");
17
17
 
18
18
  var _nodeLogger = require("@storybook/node-logger");
19
19
 
20
- var _resolveFrom = _interopRequireDefault(require("resolve-from"));
21
-
22
20
  var _loadCustomPresets = require("./utils/load-custom-presets");
23
21
 
24
22
  var _interpretRequire = require("./utils/interpret-require");
25
23
 
24
+ var _safeResolve = require("./utils/safeResolve");
25
+
26
26
  var _excluded = ["type", "name"],
27
27
  _excluded2 = ["addons", "presets", "framework"],
28
28
  _excluded3 = ["corePresets", "frameworkPresets", "overridePresets"];
@@ -71,8 +71,8 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
71
71
  * Parse an addon into either a managerEntries or a preset. Throw on invalid input.
72
72
  *
73
73
  * Valid inputs:
74
- * - '@storybook/addon-actions/register'
75
- * => { type: 'managerEntries', item }
74
+ * - '@storybook/addon-actions/manager'
75
+ * => { type: 'virtual', item }
76
76
  *
77
77
  * - '@storybook/addon-docs/preset'
78
78
  * => { type: 'presets', item }
@@ -85,43 +85,69 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
85
85
  */
86
86
 
87
87
 
88
- var resolveAddonName = function (configDir, name) {
89
- var path;
90
-
91
- if (name.startsWith('.')) {
92
- path = (0, _resolveFrom.default)(configDir, name);
93
- } else if (name.startsWith('/')) {
94
- path = name;
95
- } else if (name.match(/\/(preset|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
96
- path = name;
97
- } // when user provides full path, we don't need to do anything
98
-
88
+ var resolveAddonName = function (configDir, name, options) {
89
+ var r = name.startsWith('/') ? _safeResolve.safeResolve : _safeResolve.safeResolveFrom.bind(null, configDir);
90
+ var resolved = r(name);
99
91
 
100
- if (path) {
92
+ if (name.match(/\/(manager|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
101
93
  return {
102
- name: path,
103
- // Accept `register`, `register.js`, `require.resolve('foo/register'), `register-panel`
104
- type: path.match(/register(-panel)?(\.(js|ts|tsx|jsx))?$/) ? 'managerEntries' : 'presets'
94
+ type: 'virtual',
95
+ name: name,
96
+ managerEntries: [resolved]
105
97
  };
106
98
  }
107
99
 
108
- try {
100
+ if (name.match(/\/(preset)(\.(js|ts|tsx|jsx))?$/)) {
109
101
  return {
110
- name: (0, _resolveFrom.default)(configDir, `${name}/preset`),
111
- type: 'presets'
112
- }; // eslint-disable-next-line no-empty
113
- } catch (err) {}
102
+ type: 'presets',
103
+ name: resolved
104
+ };
105
+ }
114
106
 
115
- try {
107
+ var path = name; // when user provides full path, we don't need to do anything!
108
+
109
+ var managerFile = (0, _safeResolve.safeResolve)(`${path}/manager`);
110
+ var registerFile = (0, _safeResolve.safeResolve)(`${path}/register`) || (0, _safeResolve.safeResolve)(`${path}/register-panel`);
111
+ var previewFile = (0, _safeResolve.safeResolve)(`${path}/preview`);
112
+ var presetFile = (0, _safeResolve.safeResolve)(`${path}/preset`);
113
+
114
+ if (!(managerFile || previewFile) && presetFile) {
116
115
  return {
117
- name: (0, _resolveFrom.default)(configDir, `${name}/register`),
118
- type: 'managerEntries'
119
- }; // eslint-disable-next-line no-empty
120
- } catch (err) {}
116
+ type: 'presets',
117
+ name: presetFile
118
+ };
119
+ }
120
+
121
+ if (managerFile || registerFile || previewFile || presetFile) {
122
+ var managerEntries = [];
123
+
124
+ if (managerFile) {
125
+ managerEntries.push(managerFile);
126
+ } // register file is the old way of registering addons
127
+
128
+
129
+ if (!managerFile && registerFile && !presetFile) {
130
+ managerEntries.push(registerFile);
131
+ }
132
+
133
+ return _objectSpread(_objectSpread(_objectSpread({
134
+ type: 'virtual',
135
+ name: path
136
+ }, managerEntries.length ? {
137
+ managerEntries: managerEntries
138
+ } : {}), previewFile ? {
139
+ previewAnnotations: [previewFile]
140
+ } : {}), presetFile ? {
141
+ presets: [{
142
+ name: presetFile,
143
+ options: options
144
+ }]
145
+ } : {});
146
+ }
121
147
 
122
148
  return {
123
- name: (0, _resolveFrom.default)(configDir, name),
124
- type: 'presets'
149
+ type: 'presets',
150
+ name: resolved
125
151
  };
126
152
  };
127
153
 
@@ -131,31 +157,16 @@ var map = function ({
131
157
  configDir: configDir
132
158
  }) {
133
159
  return function (item) {
134
- try {
135
- if (isObject(item)) {
136
- var _resolveAddonName = resolveAddonName(configDir, item.name),
137
- _name = _resolveAddonName.name;
160
+ var options = isObject(item) ? item.options || undefined : undefined;
161
+ var name = isObject(item) ? item.name : item;
138
162
 
139
- return _objectSpread(_objectSpread({}, item), {}, {
140
- name: _name
141
- });
142
- }
143
-
144
- var _resolveAddonName2 = resolveAddonName(configDir, item),
145
- name = _resolveAddonName2.name,
146
- type = _resolveAddonName2.type;
147
-
148
- if (type === 'managerEntries') {
149
- return {
150
- name: `${name}_additionalManagerEntries`,
151
- type: type,
152
- managerEntries: [name]
153
- };
154
- }
155
-
156
- return resolveAddonName(configDir, name);
163
+ try {
164
+ var resolved = resolveAddonName(configDir, name, options);
165
+ return _objectSpread(_objectSpread({}, options ? {
166
+ options: options
167
+ } : {}), resolved);
157
168
  } catch (err) {
158
- _nodeLogger.logger.error(`Addon value should end in /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/\n${item}`);
169
+ _nodeLogger.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/\n${item}`);
159
170
  }
160
171
 
161
172
  return undefined;
@@ -171,9 +182,9 @@ function interopRequireDefault(filePath) {
171
182
  }
172
183
 
173
184
  function getContent(input) {
174
- if (input.type === 'managerEntries') {
185
+ if (input.type === 'virtual') {
175
186
  var type = input.type,
176
- _name2 = input.name,
187
+ _name = input.name,
177
188
  rest = _objectWithoutProperties(input, _excluded);
178
189
 
179
190
  return rest;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.safeResolveFrom = exports.safeResolve = void 0;
7
+
8
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ var safeResolveFrom = function (path, file) {
13
+ try {
14
+ return (0, _resolveFrom.default)(path, file);
15
+ } catch (e) {
16
+ return undefined;
17
+ }
18
+ };
19
+
20
+ exports.safeResolveFrom = safeResolveFrom;
21
+
22
+ var safeResolve = function (file) {
23
+ try {
24
+ return require.resolve(file);
25
+ } catch (e) {
26
+ return undefined;
27
+ }
28
+ };
29
+
30
+ exports.safeResolve = safeResolve;
@@ -16,9 +16,9 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
16
16
  import dedent from 'ts-dedent';
17
17
  import { resolve } from 'path';
18
18
  import { logger } from '@storybook/node-logger';
19
- import resolveFrom from 'resolve-from';
20
19
  import { loadCustomPresets } from './utils/load-custom-presets';
21
20
  import { serverRequire } from './utils/interpret-require';
21
+ import { safeResolve, safeResolveFrom } from './utils/safeResolve';
22
22
 
23
23
  var isObject = function (val) {
24
24
  return val != null && typeof val === 'object' && Array.isArray(val) === false;
@@ -52,8 +52,8 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
52
52
  * Parse an addon into either a managerEntries or a preset. Throw on invalid input.
53
53
  *
54
54
  * Valid inputs:
55
- * - '@storybook/addon-actions/register'
56
- * => { type: 'managerEntries', item }
55
+ * - '@storybook/addon-actions/manager'
56
+ * => { type: 'virtual', item }
57
57
  *
58
58
  * - '@storybook/addon-docs/preset'
59
59
  * => { type: 'presets', item }
@@ -66,43 +66,69 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
66
66
  */
67
67
 
68
68
 
69
- export var resolveAddonName = function (configDir, name) {
70
- var path;
69
+ export var resolveAddonName = function (configDir, name, options) {
70
+ var r = name.startsWith('/') ? safeResolve : safeResolveFrom.bind(null, configDir);
71
+ var resolved = r(name);
71
72
 
72
- if (name.startsWith('.')) {
73
- path = resolveFrom(configDir, name);
74
- } else if (name.startsWith('/')) {
75
- path = name;
76
- } else if (name.match(/\/(preset|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
77
- path = name;
78
- } // when user provides full path, we don't need to do anything
79
-
80
-
81
- if (path) {
73
+ if (name.match(/\/(manager|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
82
74
  return {
83
- name: path,
84
- // Accept `register`, `register.js`, `require.resolve('foo/register'), `register-panel`
85
- type: path.match(/register(-panel)?(\.(js|ts|tsx|jsx))?$/) ? 'managerEntries' : 'presets'
75
+ type: 'virtual',
76
+ name: name,
77
+ managerEntries: [resolved]
86
78
  };
87
79
  }
88
80
 
89
- try {
81
+ if (name.match(/\/(preset)(\.(js|ts|tsx|jsx))?$/)) {
90
82
  return {
91
- name: resolveFrom(configDir, `${name}/preset`),
92
- type: 'presets'
93
- }; // eslint-disable-next-line no-empty
94
- } catch (err) {}
83
+ type: 'presets',
84
+ name: resolved
85
+ };
86
+ }
95
87
 
96
- try {
88
+ var path = name; // when user provides full path, we don't need to do anything!
89
+
90
+ var managerFile = safeResolve(`${path}/manager`);
91
+ var registerFile = safeResolve(`${path}/register`) || safeResolve(`${path}/register-panel`);
92
+ var previewFile = safeResolve(`${path}/preview`);
93
+ var presetFile = safeResolve(`${path}/preset`);
94
+
95
+ if (!(managerFile || previewFile) && presetFile) {
97
96
  return {
98
- name: resolveFrom(configDir, `${name}/register`),
99
- type: 'managerEntries'
100
- }; // eslint-disable-next-line no-empty
101
- } catch (err) {}
97
+ type: 'presets',
98
+ name: presetFile
99
+ };
100
+ }
101
+
102
+ if (managerFile || registerFile || previewFile || presetFile) {
103
+ var managerEntries = [];
104
+
105
+ if (managerFile) {
106
+ managerEntries.push(managerFile);
107
+ } // register file is the old way of registering addons
108
+
109
+
110
+ if (!managerFile && registerFile && !presetFile) {
111
+ managerEntries.push(registerFile);
112
+ }
113
+
114
+ return _objectSpread(_objectSpread(_objectSpread({
115
+ type: 'virtual',
116
+ name: path
117
+ }, managerEntries.length ? {
118
+ managerEntries: managerEntries
119
+ } : {}), previewFile ? {
120
+ previewAnnotations: [previewFile]
121
+ } : {}), presetFile ? {
122
+ presets: [{
123
+ name: presetFile,
124
+ options: options
125
+ }]
126
+ } : {});
127
+ }
102
128
 
103
129
  return {
104
- name: resolveFrom(configDir, name),
105
- type: 'presets'
130
+ type: 'presets',
131
+ name: resolved
106
132
  };
107
133
  };
108
134
 
@@ -110,31 +136,16 @@ var map = function ({
110
136
  configDir: configDir
111
137
  }) {
112
138
  return function (item) {
113
- try {
114
- if (isObject(item)) {
115
- var _resolveAddonName = resolveAddonName(configDir, item.name),
116
- _name = _resolveAddonName.name;
139
+ var options = isObject(item) ? item.options || undefined : undefined;
140
+ var name = isObject(item) ? item.name : item;
117
141
 
118
- return _objectSpread(_objectSpread({}, item), {}, {
119
- name: _name
120
- });
121
- }
122
-
123
- var _resolveAddonName2 = resolveAddonName(configDir, item),
124
- name = _resolveAddonName2.name,
125
- type = _resolveAddonName2.type;
126
-
127
- if (type === 'managerEntries') {
128
- return {
129
- name: `${name}_additionalManagerEntries`,
130
- type: type,
131
- managerEntries: [name]
132
- };
133
- }
134
-
135
- return resolveAddonName(configDir, name);
142
+ try {
143
+ var resolved = resolveAddonName(configDir, name, options);
144
+ return _objectSpread(_objectSpread({}, options ? {
145
+ options: options
146
+ } : {}), resolved);
136
147
  } catch (err) {
137
- logger.error(`Addon value should end in /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/\n${item}`);
148
+ 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/\n${item}`);
138
149
  }
139
150
 
140
151
  return undefined;
@@ -150,9 +161,9 @@ function interopRequireDefault(filePath) {
150
161
  }
151
162
 
152
163
  function getContent(input) {
153
- if (input.type === 'managerEntries') {
164
+ if (input.type === 'virtual') {
154
165
  var type = input.type,
155
- _name2 = input.name,
166
+ _name = input.name,
156
167
  rest = _objectWithoutProperties(input, _excluded);
157
168
 
158
169
  return rest;
@@ -0,0 +1,15 @@
1
+ import resolveFrom from 'resolve-from';
2
+ export var safeResolveFrom = function (path, file) {
3
+ try {
4
+ return resolveFrom(path, file);
5
+ } catch (e) {
6
+ return undefined;
7
+ }
8
+ };
9
+ export var safeResolve = function (file) {
10
+ try {
11
+ return require.resolve(file);
12
+ } catch (e) {
13
+ return undefined;
14
+ }
15
+ };
@@ -16,9 +16,9 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
16
16
  import dedent from 'ts-dedent';
17
17
  import { resolve } from 'path';
18
18
  import { logger } from '@storybook/node-logger';
19
- import resolveFrom from 'resolve-from';
20
19
  import { loadCustomPresets } from './utils/load-custom-presets';
21
20
  import { serverRequire } from './utils/interpret-require';
21
+ import { safeResolve, safeResolveFrom } from './utils/safeResolve';
22
22
 
23
23
  var isObject = function (val) {
24
24
  return val != null && typeof val === 'object' && Array.isArray(val) === false;
@@ -52,8 +52,8 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
52
52
  * Parse an addon into either a managerEntries or a preset. Throw on invalid input.
53
53
  *
54
54
  * Valid inputs:
55
- * - '@storybook/addon-actions/register'
56
- * => { type: 'managerEntries', item }
55
+ * - '@storybook/addon-actions/manager'
56
+ * => { type: 'virtual', item }
57
57
  *
58
58
  * - '@storybook/addon-docs/preset'
59
59
  * => { type: 'presets', item }
@@ -66,43 +66,69 @@ function resolvePresetFunction(input, presetOptions, framework, storybookOptions
66
66
  */
67
67
 
68
68
 
69
- export var resolveAddonName = function (configDir, name) {
70
- var path;
69
+ export var resolveAddonName = function (configDir, name, options) {
70
+ var r = name.startsWith('/') ? safeResolve : safeResolveFrom.bind(null, configDir);
71
+ var resolved = r(name);
71
72
 
72
- if (name.startsWith('.')) {
73
- path = resolveFrom(configDir, name);
74
- } else if (name.startsWith('/')) {
75
- path = name;
76
- } else if (name.match(/\/(preset|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
77
- path = name;
78
- } // when user provides full path, we don't need to do anything
79
-
80
-
81
- if (path) {
73
+ if (name.match(/\/(manager|register(-panel)?)(\.(js|ts|tsx|jsx))?$/)) {
82
74
  return {
83
- name: path,
84
- // Accept `register`, `register.js`, `require.resolve('foo/register'), `register-panel`
85
- type: path.match(/register(-panel)?(\.(js|ts|tsx|jsx))?$/) ? 'managerEntries' : 'presets'
75
+ type: 'virtual',
76
+ name: name,
77
+ managerEntries: [resolved]
86
78
  };
87
79
  }
88
80
 
89
- try {
81
+ if (name.match(/\/(preset)(\.(js|ts|tsx|jsx))?$/)) {
90
82
  return {
91
- name: resolveFrom(configDir, `${name}/preset`),
92
- type: 'presets'
93
- }; // eslint-disable-next-line no-empty
94
- } catch (err) {}
83
+ type: 'presets',
84
+ name: resolved
85
+ };
86
+ }
95
87
 
96
- try {
88
+ var path = name; // when user provides full path, we don't need to do anything!
89
+
90
+ var managerFile = safeResolve(`${path}/manager`);
91
+ var registerFile = safeResolve(`${path}/register`) || safeResolve(`${path}/register-panel`);
92
+ var previewFile = safeResolve(`${path}/preview`);
93
+ var presetFile = safeResolve(`${path}/preset`);
94
+
95
+ if (!(managerFile || previewFile) && presetFile) {
97
96
  return {
98
- name: resolveFrom(configDir, `${name}/register`),
99
- type: 'managerEntries'
100
- }; // eslint-disable-next-line no-empty
101
- } catch (err) {}
97
+ type: 'presets',
98
+ name: presetFile
99
+ };
100
+ }
101
+
102
+ if (managerFile || registerFile || previewFile || presetFile) {
103
+ var managerEntries = [];
104
+
105
+ if (managerFile) {
106
+ managerEntries.push(managerFile);
107
+ } // register file is the old way of registering addons
108
+
109
+
110
+ if (!managerFile && registerFile && !presetFile) {
111
+ managerEntries.push(registerFile);
112
+ }
113
+
114
+ return _objectSpread(_objectSpread(_objectSpread({
115
+ type: 'virtual',
116
+ name: path
117
+ }, managerEntries.length ? {
118
+ managerEntries: managerEntries
119
+ } : {}), previewFile ? {
120
+ previewAnnotations: [previewFile]
121
+ } : {}), presetFile ? {
122
+ presets: [{
123
+ name: presetFile,
124
+ options: options
125
+ }]
126
+ } : {});
127
+ }
102
128
 
103
129
  return {
104
- name: resolveFrom(configDir, name),
105
- type: 'presets'
130
+ type: 'presets',
131
+ name: resolved
106
132
  };
107
133
  };
108
134
 
@@ -110,31 +136,16 @@ var map = function ({
110
136
  configDir: configDir
111
137
  }) {
112
138
  return function (item) {
113
- try {
114
- if (isObject(item)) {
115
- var _resolveAddonName = resolveAddonName(configDir, item.name),
116
- _name = _resolveAddonName.name;
139
+ var options = isObject(item) ? item.options || undefined : undefined;
140
+ var name = isObject(item) ? item.name : item;
117
141
 
118
- return _objectSpread(_objectSpread({}, item), {}, {
119
- name: _name
120
- });
121
- }
122
-
123
- var _resolveAddonName2 = resolveAddonName(configDir, item),
124
- name = _resolveAddonName2.name,
125
- type = _resolveAddonName2.type;
126
-
127
- if (type === 'managerEntries') {
128
- return {
129
- name: `${name}_additionalManagerEntries`,
130
- type: type,
131
- managerEntries: [name]
132
- };
133
- }
134
-
135
- return resolveAddonName(configDir, name);
142
+ try {
143
+ var resolved = resolveAddonName(configDir, name, options);
144
+ return _objectSpread(_objectSpread({}, options ? {
145
+ options: options
146
+ } : {}), resolved);
136
147
  } catch (err) {
137
- logger.error(`Addon value should end in /register OR it should be a valid preset https://storybook.js.org/docs/react/addons/writing-presets/\n${item}`);
148
+ 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/\n${item}`);
138
149
  }
139
150
 
140
151
  return undefined;
@@ -150,9 +161,9 @@ function interopRequireDefault(filePath) {
150
161
  }
151
162
 
152
163
  function getContent(input) {
153
- if (input.type === 'managerEntries') {
164
+ if (input.type === 'virtual') {
154
165
  var type = input.type,
155
- _name2 = input.name,
166
+ _name = input.name,
156
167
  rest = _objectWithoutProperties(input, _excluded);
157
168
 
158
169
  return rest;
@@ -0,0 +1,15 @@
1
+ import resolveFrom from 'resolve-from';
2
+ export var safeResolveFrom = function (path, file) {
3
+ try {
4
+ return resolveFrom(path, file);
5
+ } catch (e) {
6
+ return undefined;
7
+ }
8
+ };
9
+ export var safeResolve = function (file) {
10
+ try {
11
+ return require.resolve(file);
12
+ } catch (e) {
13
+ return undefined;
14
+ }
15
+ };
@@ -4,8 +4,8 @@ export declare function filterPresetsConfig(presetsConfig: PresetConfig[]): Pres
4
4
  * Parse an addon into either a managerEntries or a preset. Throw on invalid input.
5
5
  *
6
6
  * Valid inputs:
7
- * - '@storybook/addon-actions/register'
8
- * => { type: 'managerEntries', item }
7
+ * - '@storybook/addon-actions/manager'
8
+ * => { type: 'virtual', item }
9
9
  *
10
10
  * - '@storybook/addon-docs/preset'
11
11
  * => { type: 'presets', item }
@@ -16,10 +16,21 @@ export declare function filterPresetsConfig(presetsConfig: PresetConfig[]): Pres
16
16
  * - { name: '@storybook/addon-docs(/preset)?', options: { ... } }
17
17
  * => { type: 'presets', item: { name: '@storybook/addon-docs/preset', options } }
18
18
  */
19
- export declare const resolveAddonName: (configDir: string, name: string) => {
19
+ interface ResolvedAddonPreset {
20
+ type: 'presets';
20
21
  name: string;
21
- type: string;
22
- };
22
+ }
23
+ interface ResolvedAddonVirtual {
24
+ type: 'virtual';
25
+ name: string;
26
+ managerEntries?: string[];
27
+ previewAnnotations?: string[];
28
+ presets?: (string | {
29
+ name: string;
30
+ options?: any;
31
+ })[];
32
+ }
33
+ export declare const resolveAddonName: (configDir: string, name: string, options: any) => ResolvedAddonPreset | ResolvedAddonVirtual;
23
34
  export declare function loadPreset(input: PresetConfig, level: number, storybookOptions: InterPresetOptions): LoadedPreset[];
24
35
  declare type InterPresetOptions = Pick<CLIOptions & LoadOptions & BuilderOptions, Exclude<keyof (CLIOptions & LoadOptions & BuilderOptions), 'frameworkPresets'>>;
25
36
  export declare function getPresets(presets: PresetConfig[], storybookOptions: InterPresetOptions): Presets;
@@ -39,6 +39,14 @@ export interface CoreConfig {
39
39
  builder: BuilderConfig;
40
40
  disableWebpackDefaults?: boolean;
41
41
  channelOptions?: Partial<TelejsonOptions>;
42
+ /**
43
+ * enable CORS headings to run document in a "secure context"
44
+ * see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements
45
+ * This enables these headers in development-mode:
46
+ * Cross-Origin-Opener-Policy: same-origin
47
+ * Cross-Origin-Embedder-Policy: require-corp
48
+ */
49
+ crossOriginIsolated?: boolean;
42
50
  }
43
51
  interface DirectoryMapping {
44
52
  from: string;
@@ -346,7 +354,13 @@ export interface StorybookConfig {
346
354
  webpackFinal?: (config: Configuration, options: Options) => Configuration | Promise<Configuration>;
347
355
  /**
348
356
  * Add additional scripts to run in the preview a la `.storybook/preview.js`
357
+ *
358
+ * @deprecated use `previewAnnotations` or `/preview.js` file instead
349
359
  */
350
360
  config?: (entries: Entry[], options: Options) => Entry[];
361
+ /**
362
+ * Add additional scripts to run in the preview a la `.storybook/preview.js`
363
+ */
364
+ previewAnnotations?: (entries: Entry[], options: Options) => Entry[];
351
365
  }
352
366
  export {};
@@ -0,0 +1,2 @@
1
+ export declare const safeResolveFrom: (path: string, file: string) => string;
2
+ export declare const safeResolve: (file: string) => string;
@@ -4,8 +4,8 @@ export declare function filterPresetsConfig(presetsConfig: PresetConfig[]): Pres
4
4
  * Parse an addon into either a managerEntries or a preset. Throw on invalid input.
5
5
  *
6
6
  * Valid inputs:
7
- * - '@storybook/addon-actions/register'
8
- * => { type: 'managerEntries', item }
7
+ * - '@storybook/addon-actions/manager'
8
+ * => { type: 'virtual', item }
9
9
  *
10
10
  * - '@storybook/addon-docs/preset'
11
11
  * => { type: 'presets', item }
@@ -16,10 +16,21 @@ export declare function filterPresetsConfig(presetsConfig: PresetConfig[]): Pres
16
16
  * - { name: '@storybook/addon-docs(/preset)?', options: { ... } }
17
17
  * => { type: 'presets', item: { name: '@storybook/addon-docs/preset', options } }
18
18
  */
19
- export declare const resolveAddonName: (configDir: string, name: string) => {
19
+ interface ResolvedAddonPreset {
20
+ type: 'presets';
20
21
  name: string;
21
- type: string;
22
- };
22
+ }
23
+ interface ResolvedAddonVirtual {
24
+ type: 'virtual';
25
+ name: string;
26
+ managerEntries?: string[];
27
+ previewAnnotations?: string[];
28
+ presets?: (string | {
29
+ name: string;
30
+ options?: any;
31
+ })[];
32
+ }
33
+ export declare const resolveAddonName: (configDir: string, name: string, options: any) => ResolvedAddonPreset | ResolvedAddonVirtual;
23
34
  export declare function loadPreset(input: PresetConfig, level: number, storybookOptions: InterPresetOptions): LoadedPreset[];
24
35
  declare type InterPresetOptions = Omit<CLIOptions & LoadOptions & BuilderOptions, 'frameworkPresets'>;
25
36
  export declare function getPresets(presets: PresetConfig[], storybookOptions: InterPresetOptions): Presets;
@@ -39,6 +39,14 @@ export interface CoreConfig {
39
39
  builder: BuilderConfig;
40
40
  disableWebpackDefaults?: boolean;
41
41
  channelOptions?: Partial<TelejsonOptions>;
42
+ /**
43
+ * enable CORS headings to run document in a "secure context"
44
+ * see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements
45
+ * This enables these headers in development-mode:
46
+ * Cross-Origin-Opener-Policy: same-origin
47
+ * Cross-Origin-Embedder-Policy: require-corp
48
+ */
49
+ crossOriginIsolated?: boolean;
42
50
  }
43
51
  interface DirectoryMapping {
44
52
  from: string;
@@ -342,7 +350,13 @@ export interface StorybookConfig {
342
350
  webpackFinal?: (config: Configuration, options: Options) => Configuration | Promise<Configuration>;
343
351
  /**
344
352
  * Add additional scripts to run in the preview a la `.storybook/preview.js`
353
+ *
354
+ * @deprecated use `previewAnnotations` or `/preview.js` file instead
345
355
  */
346
356
  config?: (entries: Entry[], options: Options) => Entry[];
357
+ /**
358
+ * Add additional scripts to run in the preview a la `.storybook/preview.js`
359
+ */
360
+ previewAnnotations?: (entries: Entry[], options: Options) => Entry[];
347
361
  }
348
362
  export {};
@@ -0,0 +1,2 @@
1
+ export declare const safeResolveFrom: (path: string, file: string) => string;
2
+ export declare const safeResolve: (file: string) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/core-common",
3
- "version": "6.5.0-alpha.50",
3
+ "version": "6.5.0-alpha.53",
4
4
  "description": "Storybook framework-agnostic API",
5
5
  "keywords": [
6
6
  "storybook"
@@ -62,7 +62,7 @@
62
62
  "@babel/preset-react": "^7.12.10",
63
63
  "@babel/preset-typescript": "^7.12.7",
64
64
  "@babel/register": "^7.12.1",
65
- "@storybook/node-logger": "6.5.0-alpha.50",
65
+ "@storybook/node-logger": "6.5.0-alpha.53",
66
66
  "@storybook/semver": "^7.3.2",
67
67
  "@types/node": "^14.0.10 || ^16.0.0",
68
68
  "@types/pretty-hrtime": "^1.0.0",
@@ -111,6 +111,6 @@
111
111
  "publishConfig": {
112
112
  "access": "public"
113
113
  },
114
- "gitHead": "6cf4571e5a1200613de94aa066fe93f75aec6ad1",
114
+ "gitHead": "652768b3ff83a355651d5636ccc4d78bee2cdbf9",
115
115
  "sbmodern": "dist/modern/index.js"
116
116
  }
@@ -1,6 +1,17 @@
1
1
  <base target="_parent" />
2
2
 
3
3
  <style>
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 */
6
+ .sb-show-preparing-story:not(.sb-show-main) > :not(.sb-preparing-story) {
7
+ display: none;
8
+ }
9
+
10
+ .sb-show-preparing-docs:not(.sb-show-main) > :not(.sb-preparing-docs) {
11
+ display: none;
12
+ }
13
+
14
+ /* Hide our own blocks when we aren't supposed to be showing them */
4
15
  :not(.sb-show-preparing-story) > .sb-preparing-story,
5
16
  :not(.sb-show-preparing-docs) > .sb-preparing-docs,
6
17
  :not(.sb-show-nopreview) > .sb-nopreview,
@@ -140,6 +151,9 @@
140
151
  .sb-preparing-story,
141
152
  .sb-preparing-docs {
142
153
  background-color: white;
154
+ /* Maximum possible z-index. It would be better to use stacking contexts to ensure it's always
155
+ on top, but this isn't possible as it would require making CSS changes that could affect user code */
156
+ z-index: 2147483647;
143
157
  }
144
158
 
145
159
  .sb-loader {