creevey 0.7.37 → 0.8.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -5
- package/README.md +1 -1
- package/docs/config.md +37 -5
- package/docs/grid.md +2 -1
- package/lib/cjs/client/addon/Manager.js +3 -1
- package/lib/cjs/client/addon/utils.js +1 -41
- package/lib/cjs/client/addon/withCreevey.js +11 -13
- package/lib/cjs/client/web/1.js +2 -2
- package/lib/cjs/client/web/2.js +1 -1
- package/lib/cjs/client/web/main.js +6 -6
- package/lib/cjs/index.js +14 -1
- package/lib/cjs/server/config.js +3 -0
- package/lib/cjs/server/extract.js +7 -3
- package/lib/cjs/server/loaders/babel/register.js +2 -1
- package/lib/cjs/server/loaders/webpack/compile.js +3 -19
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +1 -1
- package/lib/cjs/server/master/master.js +3 -5
- package/lib/cjs/server/selenium/browser.js +25 -11
- package/lib/cjs/server/selenium/selenoid.js +1 -1
- package/lib/cjs/server/stories.js +20 -226
- package/lib/cjs/server/storybook/entry.js +5 -4
- package/lib/cjs/server/storybook/helpers.js +40 -4
- package/lib/cjs/server/storybook/nodejs-provider.js +220 -0
- package/lib/cjs/server/utils.js +25 -2
- package/lib/cjs/server/worker/helpers.js +8 -9
- package/lib/cjs/server/worker/worker.js +1 -2
- package/lib/cjs/shared.js +35 -0
- package/lib/esm/client/addon/Manager.js +3 -2
- package/lib/esm/client/addon/utils.js +1 -33
- package/lib/esm/client/addon/withCreevey.js +1 -1
- package/lib/esm/index.js +3 -1
- package/lib/esm/server/config.js +4 -1
- package/lib/esm/server/extract.js +7 -3
- package/lib/esm/server/loaders/babel/register.js +3 -2
- package/lib/esm/server/loaders/webpack/compile.js +4 -20
- package/lib/esm/server/loaders/webpack/creevey-loader.js +1 -1
- package/lib/esm/server/master/master.js +3 -5
- package/lib/esm/server/selenium/browser.js +22 -7
- package/lib/esm/server/selenium/selenoid.js +1 -1
- package/lib/esm/server/stories.js +23 -219
- package/lib/esm/server/storybook/entry.js +4 -4
- package/lib/esm/server/storybook/helpers.js +36 -4
- package/lib/esm/server/storybook/nodejs-provider.js +200 -0
- package/lib/esm/server/utils.js +23 -1
- package/lib/esm/server/worker/helpers.js +8 -9
- package/lib/esm/server/worker/worker.js +1 -2
- package/lib/esm/shared.js +22 -0
- package/lib/types/cli.d.ts +1 -1
- package/lib/types/client/addon/Manager.d.ts +37 -37
- package/lib/types/client/addon/components/Addon.d.ts +8 -8
- package/lib/types/client/addon/components/Icons.d.ts +7 -7
- package/lib/types/client/addon/components/Panel.d.ts +9 -9
- package/lib/types/client/addon/components/TestSelect.d.ts +9 -9
- package/lib/types/client/addon/components/Tools.d.ts +6 -6
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/preset.d.ts +22 -22
- package/lib/types/client/addon/register.d.ts +3 -3
- package/lib/types/client/addon/utils.d.ts +2 -6
- package/lib/types/client/addon/withCreevey.d.ts +13 -46
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +25 -25
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
- package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
- package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +9 -9
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +8 -8
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +17 -17
- package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
- package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
- package/lib/types/client/shared/helpers.d.ts +46 -46
- package/lib/types/client/shared/viewMode.d.ts +4 -4
- package/lib/types/client/web/CreeveyApp.d.ts +12 -12
- package/lib/types/client/web/CreeveyContext.d.ts +11 -11
- package/lib/types/client/web/CreeveyLoader.d.ts +3 -3
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
- package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +13 -13
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +8 -8
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
- package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
- package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
- package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
- package/lib/types/client/web/index.d.ts +4 -4
- package/lib/types/creevey.d.ts +1 -1
- package/lib/types/server/config.d.ts +4 -4
- package/lib/types/server/docker.d.ts +7 -7
- package/lib/types/server/extract.d.ts +2 -2
- package/lib/types/server/index.d.ts +2 -2
- package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
- package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
- package/lib/types/server/loaders/babel/register.d.ts +5 -5
- package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
- package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
- package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +2 -2
- package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
- package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
- package/lib/types/server/loaders/webpack/start.d.ts +1 -1
- package/lib/types/server/logger.d.ts +6 -6
- package/lib/types/server/master/api.d.ts +7 -7
- package/lib/types/server/master/index.d.ts +3 -3
- package/lib/types/server/master/master.d.ts +6 -6
- package/lib/types/server/master/pool.d.ts +30 -30
- package/lib/types/server/master/runner.d.ts +26 -26
- package/lib/types/server/master/server.d.ts +2 -2
- package/lib/types/server/messages.d.ts +18 -18
- package/lib/types/server/selenium/browser.d.ts +14 -14
- package/lib/types/server/selenium/index.d.ts +2 -2
- package/lib/types/server/selenium/selenoid.d.ts +3 -3
- package/lib/types/server/stories.d.ts +8 -13
- package/lib/types/server/storybook/entry.d.ts +18 -14
- package/lib/types/server/storybook/helpers.d.ts +24 -22
- package/lib/types/server/storybook/nodejs-provider.d.ts +5 -0
- package/lib/types/server/update.d.ts +2 -2
- package/lib/types/server/utils.d.ts +19 -18
- package/lib/types/server/worker/chai-image.d.ts +6 -6
- package/lib/types/server/worker/helpers.d.ts +7 -7
- package/lib/types/server/worker/index.d.ts +1 -1
- package/lib/types/server/worker/reporter.d.ts +8 -8
- package/lib/types/server/worker/worker.d.ts +4 -4
- package/lib/types/shared.d.ts +4 -0
- package/lib/types/types.d.ts +459 -431
- package/package.json +53 -48
- package/types/mocha.d.ts +1 -0
- package/storybook-static/stories.json +0 -530
package/lib/cjs/index.js
CHANGED
@@ -3,11 +3,21 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
+
var _exportNames = {
|
7
|
+
nodejsStoriesProvider: true
|
8
|
+
};
|
9
|
+
Object.defineProperty(exports, "nodejsStoriesProvider", {
|
10
|
+
enumerable: true,
|
11
|
+
get: function () {
|
12
|
+
return _nodejsProvider.loadStories;
|
13
|
+
}
|
14
|
+
});
|
6
15
|
|
7
16
|
var _types = require("./types");
|
8
17
|
|
9
18
|
Object.keys(_types).forEach(function (key) {
|
10
19
|
if (key === "default" || key === "__esModule") return;
|
20
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
11
21
|
if (key in exports && exports[key] === _types[key]) return;
|
12
22
|
Object.defineProperty(exports, key, {
|
13
23
|
enumerable: true,
|
@@ -21,6 +31,7 @@ var _withCreevey = require("./client/addon/withCreevey");
|
|
21
31
|
|
22
32
|
Object.keys(_withCreevey).forEach(function (key) {
|
23
33
|
if (key === "default" || key === "__esModule") return;
|
34
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
24
35
|
if (key in exports && exports[key] === _withCreevey[key]) return;
|
25
36
|
Object.defineProperty(exports, key, {
|
26
37
|
enumerable: true,
|
@@ -28,4 +39,6 @@ Object.keys(_withCreevey).forEach(function (key) {
|
|
28
39
|
return _withCreevey[key];
|
29
40
|
}
|
30
41
|
});
|
31
|
-
});
|
42
|
+
});
|
43
|
+
|
44
|
+
var _nodejsProvider = require("./server/storybook/nodejs-provider");
|
package/lib/cjs/server/config.js
CHANGED
@@ -12,6 +12,8 @@ var _path = _interopRequireDefault(require("path"));
|
|
12
12
|
|
13
13
|
var _helpers = require("./storybook/helpers");
|
14
14
|
|
15
|
+
var _nodejsProvider = require("./storybook/nodejs-provider");
|
16
|
+
|
15
17
|
var _types = require("../types");
|
16
18
|
|
17
19
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
@@ -79,6 +81,7 @@ async function readConfig(options) {
|
|
79
81
|
if ((0, _types.isDefined)(configPath)) Object.assign(userConfig, (await Promise.resolve(`${configPath}`).then(s => _interopRequireWildcard(require(s)))).default);
|
80
82
|
_helpers.storybookDirRef.current = userConfig.storybookDir;
|
81
83
|
if ((0, _helpers.isStorybookVersionLessThan)(6, 2)) userConfig.useWebpackToExtractTests = true;
|
84
|
+
if (!userConfig.storiesProvider) userConfig.storiesProvider = (await (0, _helpers.isCSFv3Enabled)()) ? _nodejsProvider.loadStories : _nodejsProvider.loadStories;
|
82
85
|
if (options.failFast != undefined) userConfig.failFast = Boolean(options.failFast);
|
83
86
|
if (options.reportDir) userConfig.reportDir = _path.default.resolve(options.reportDir);
|
84
87
|
if (options.screenDir) userConfig.screenDir = _path.default.resolve(options.screenDir); // NOTE: Hack to pass typescript checking
|
@@ -29,10 +29,14 @@ async function extract(config, options) {
|
|
29
29
|
});
|
30
30
|
}
|
31
31
|
|
32
|
-
const tests = await (0, _stories.loadTestsFromStories)(
|
33
|
-
|
32
|
+
const tests = await (0, _stories.loadTestsFromStories)(Object.keys(config.browsers), async listener => {
|
33
|
+
const stories = await config.storiesProvider(config, {
|
34
|
+
watch: false,
|
35
|
+
debug: options.debug
|
36
|
+
}, listener);
|
37
|
+
if (options.extract) (0, _stories.saveStoriesJson)(stories, options.extract);
|
38
|
+
return stories;
|
34
39
|
});
|
35
|
-
if (options.extract) (0, _stories.saveStoriesJson)(options.extract);
|
36
40
|
if (options.tests) (0, _stories.saveTestsJson)(tests); // eslint-disable-next-line no-process-exit
|
37
41
|
|
38
42
|
process.exit(0);
|
@@ -90,7 +90,8 @@ function getRequireContext(rootDir) {
|
|
90
90
|
}
|
91
91
|
|
92
92
|
async function register(config, debug = false) {
|
93
|
-
const
|
93
|
+
const rootDir = (0, _helpers.isStorybookVersionLessThan)(6, 4) ? config.storybookDir : process.cwd();
|
94
|
+
const requireContext = getRequireContext(rootDir);
|
94
95
|
const preview = (0, _path.resolve)(config.storybookDir, 'preview');
|
95
96
|
if ((0, _helpers.hasDocsAddon)()) await (await Promise.resolve().then(() => _interopRequireWildcard(require('../hooks/mdx')))).addMDXHook(() => story);
|
96
97
|
if ((0, _helpers.hasSvelteCSFAddon)()) await (await Promise.resolve().then(() => _interopRequireWildcard(require('../hooks/svelte')))).addSvelteHook(() => story); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
@@ -179,27 +179,11 @@ async function getWebpackConfigForStorybook_6_2(framework, configDir, outputDir)
|
|
179
179
|
});
|
180
180
|
}
|
181
181
|
|
182
|
-
async function removeAddons(
|
183
|
-
const storybookUtilsPath = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? '@storybook/core/dist/server/utils' : '@storybook/core-common/dist/cjs/utils';
|
184
|
-
const serverRequireModule = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? 'server-require' : 'interpret-require';
|
185
|
-
|
182
|
+
async function removeAddons() {
|
186
183
|
try {
|
187
184
|
var _config$core;
|
188
185
|
|
189
|
-
|
190
|
-
const {
|
191
|
-
getInterpretedFile
|
192
|
-
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)(`${storybookUtilsPath}/interpret-files`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
193
|
-
|
194
|
-
const {
|
195
|
-
default: serverRequireFallback,
|
196
|
-
serverRequire = serverRequireFallback
|
197
|
-
} = await Promise.resolve(`${(0, _helpers.resolveFromStorybook)(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
198
|
-
|
199
|
-
const mainConfigFile = (0, _helpers.isStorybookVersionLessThan)(6, 1) ? _path.default.join(configDir, 'main') : // eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
200
|
-
getInterpretedFile(_path.default.join(configDir, 'main')); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
201
|
-
|
202
|
-
const config = serverRequire(mainConfigFile);
|
186
|
+
const config = await (0, _helpers.importStorybookConfig)();
|
203
187
|
|
204
188
|
if (((_config$core = config.core) === null || _config$core === void 0 ? void 0 : _config$core.builder) == 'webpack5') {
|
205
189
|
_logger.logger.warn("Be aware Creevey doesn't fully support webpack@5, some feature might not work well");
|
@@ -243,7 +227,7 @@ async function compile(config, {
|
|
243
227
|
};
|
244
228
|
process.env.NODE_ENV = 'production'; // NOTE Remove addons by monkey patching, only for new config file (main.js)
|
245
229
|
|
246
|
-
const areAddonsRemoved = await removeAddons(
|
230
|
+
const areAddonsRemoved = await removeAddons();
|
247
231
|
const getWebpackConfig = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? getWebpackConfigForStorybook_pre6_2 : getWebpackConfigForStorybook_6_2;
|
248
232
|
const storybookWebpackConfig = await getWebpackConfig(storybookFramework, config.storybookDir, outputDir);
|
249
233
|
const extensions = (_storybookWebpackConf = (_storybookWebpackConf2 = storybookWebpackConfig.resolve) === null || _storybookWebpackConf2 === void 0 ? void 0 : _storybookWebpackConf2.extensions) !== null && _storybookWebpackConf !== void 0 ? _storybookWebpackConf : _utils.extensions;
|
@@ -159,7 +159,7 @@ function _default(source) {
|
|
159
159
|
} catch (error) {
|
160
160
|
this && _logger.logger.warn('Failed to transform file', this.resourcePath);
|
161
161
|
|
162
|
-
if ('loc' in error) {
|
162
|
+
if (typeof error == 'object' && error && 'loc' in error) {
|
163
163
|
_logger.logger.warn((0, _codeFrame.codeFrameColumns)(source, {
|
164
164
|
start: error.loc
|
165
165
|
}, {
|
@@ -46,11 +46,9 @@ async function master(config, options) {
|
|
46
46
|
} catch (error) {// Ignore error
|
47
47
|
}
|
48
48
|
|
49
|
-
const tests = await (0, _stories.loadTestsFromStories)(
|
50
|
-
|
51
|
-
|
52
|
-
(0, _stories.saveTestsJson)(runner.tests, config.reportDir);
|
53
|
-
}
|
49
|
+
const tests = await (0, _stories.loadTestsFromStories)(Object.keys(config.browsers), listener => config.storiesProvider(config, options, listener), testsDiff => {
|
50
|
+
runner.updateTests(testsDiff);
|
51
|
+
(0, _stories.saveTestsJson)(runner.tests, config.reportDir);
|
54
52
|
});
|
55
53
|
runner.tests = mergeTests(testsFromReport, tests);
|
56
54
|
(0, _stories.saveTestsJson)(runner.tests, config.reportDir);
|
@@ -7,33 +7,33 @@ exports.updateStorybookGlobals = updateStorybookGlobals;
|
|
7
7
|
exports.getBrowser = getBrowser;
|
8
8
|
exports.switchStory = switchStory;
|
9
9
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
11
|
+
|
10
12
|
var _http = _interopRequireDefault(require("http"));
|
11
13
|
|
12
14
|
var _https = _interopRequireDefault(require("https"));
|
13
15
|
|
14
|
-
var _pngjs = require("pngjs");
|
15
|
-
|
16
16
|
var _loglevel = require("loglevel");
|
17
17
|
|
18
18
|
var _loglevelPluginPrefix = _interopRequireDefault(require("loglevel-plugin-prefix"));
|
19
19
|
|
20
|
-
var _seleniumWebdriver = require("selenium-webdriver");
|
21
|
-
|
22
|
-
var _types = require("../../types");
|
23
|
-
|
24
|
-
var _messages = require("../messages");
|
25
|
-
|
26
20
|
var _os = require("os");
|
27
21
|
|
28
|
-
var
|
22
|
+
var _pngjs = require("pngjs");
|
23
|
+
|
24
|
+
var _seleniumWebdriver = require("selenium-webdriver");
|
29
25
|
|
30
26
|
var _capabilities = require("selenium-webdriver/lib/capabilities");
|
31
27
|
|
32
|
-
var
|
28
|
+
var _types = require("../../types");
|
33
29
|
|
34
30
|
var _logger = require("../logger");
|
35
31
|
|
36
|
-
var
|
32
|
+
var _messages = require("../messages");
|
33
|
+
|
34
|
+
var _helpers = require("../storybook/helpers");
|
35
|
+
|
36
|
+
var _utils = require("../utils");
|
37
37
|
|
38
38
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
39
39
|
|
@@ -502,6 +502,18 @@ async function getBrowser(config, browserConfig) {
|
|
502
502
|
return browser;
|
503
503
|
}
|
504
504
|
|
505
|
+
async function updateStoryArgs(browser, story, updatedArgs) {
|
506
|
+
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
507
|
+
await browser.executeAsyncScript(function (storyId, updatedArgs, UPDATE_STORY_ARGS, STORY_RENDERED, callback) {
|
508
|
+
window.__STORYBOOK_ADDONS_CHANNEL__.once(STORY_RENDERED, callback);
|
509
|
+
|
510
|
+
window.__STORYBOOK_ADDONS_CHANNEL__.emit(UPDATE_STORY_ARGS, {
|
511
|
+
storyId,
|
512
|
+
updatedArgs
|
513
|
+
});
|
514
|
+
}, story.id, updatedArgs, Events.UPDATE_STORY_ARGS, Events.STORY_RENDERED);
|
515
|
+
}
|
516
|
+
|
505
517
|
async function switchStory() {
|
506
518
|
var _this$currentTest, _this$currentTest$ctx, _parameters$creevey;
|
507
519
|
|
@@ -546,6 +558,8 @@ async function switchStory() {
|
|
546
558
|
|
547
559
|
this.takeScreenshot = () => takeScreenshot(this.browser, captureElement, ignoreElements);
|
548
560
|
|
561
|
+
this.updateStoryArgs = updatedArgs => updateStoryArgs(this.browser, story, updatedArgs);
|
562
|
+
|
549
563
|
this.testScope.reverse();
|
550
564
|
}
|
551
565
|
|
@@ -51,7 +51,7 @@ async function createSelenoidConfig(browsers, {
|
|
51
51
|
selenoidConfig[browserName].versions[version] = {
|
52
52
|
image: useDocker ? dockerImage : webdriverCommand,
|
53
53
|
port: '4444',
|
54
|
-
path: !useDocker || ['chrome', 'opera', 'webkit'].includes(browserName) ? '/' : '/wd/hub'
|
54
|
+
path: !useDocker || ['chrome', 'opera', 'webkit', 'MicrosoftEdge'].includes(browserName) ? '/' : '/wd/hub'
|
55
55
|
};
|
56
56
|
});
|
57
57
|
await mkdirAsync(selenoidConfigDir, {
|
@@ -6,39 +6,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
exports.loadTestsFromStories = loadTestsFromStories;
|
7
7
|
exports.saveStoriesJson = saveStoriesJson;
|
8
8
|
exports.saveTestsJson = saveTestsJson;
|
9
|
-
exports.storybookApi = void 0;
|
10
9
|
|
11
10
|
var _path = _interopRequireDefault(require("path"));
|
12
11
|
|
13
12
|
var _fs = require("fs");
|
14
13
|
|
15
|
-
var _cluster = require("cluster");
|
16
|
-
|
17
14
|
var _crypto = require("crypto");
|
18
15
|
|
19
|
-
var
|
16
|
+
var _lodash = require("lodash");
|
20
17
|
|
21
18
|
var _types = require("../types");
|
22
19
|
|
23
20
|
var _utils = require("./utils");
|
24
21
|
|
25
|
-
var _lodash = require("lodash");
|
26
|
-
|
27
|
-
var _messages = require("./messages");
|
28
|
-
|
29
22
|
var _helpers = require("./storybook/helpers");
|
30
23
|
|
31
|
-
var
|
24
|
+
var _shared = require("../shared");
|
32
25
|
|
33
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
34
27
|
|
35
|
-
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); }
|
36
|
-
|
37
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
|
38
|
-
|
39
|
-
let storybookApi = null;
|
40
|
-
exports.storybookApi = storybookApi;
|
41
|
-
|
42
28
|
function storyTestFabric(delay, testFn) {
|
43
29
|
return async function storyTest() {
|
44
30
|
var _testFn$call;
|
@@ -111,214 +97,9 @@ function convertStories(browsers, stories) {
|
|
111
97
|
return tests;
|
112
98
|
}
|
113
99
|
|
114
|
-
async function
|
115
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
116
|
-
(await Promise.resolve().then(() => _interopRequireWildcard(require('jsdom-global')))).default(undefined, {
|
117
|
-
url: 'http://localhost'
|
118
|
-
}); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
|
119
|
-
// https://github.com/storybookjs/storybook/blob/v5.2.8/lib/core/src/client/preview/start.js#L98
|
120
|
-
// Example: "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/15.2.1"
|
121
|
-
|
122
|
-
Object.defineProperty(window.navigator, 'userAgent', {
|
123
|
-
value: window.navigator.userAgent.split(' ').filter(token => !token.startsWith('jsdom')).join(' ')
|
124
|
-
}); // TODO Look at creevey debug flag
|
125
|
-
|
126
|
-
const {
|
127
|
-
logger
|
128
|
-
} = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
|
129
|
-
|
130
|
-
if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
131
|
-
|
132
|
-
logger.debug = _types.noop;
|
133
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require('./storybook/entry')));
|
134
|
-
}
|
135
|
-
|
136
|
-
function watchStories(channel, watcher, initialFiles) {
|
137
|
-
const watchingFiles = initialFiles;
|
138
|
-
let storiesByFiles = new Map();
|
139
|
-
(0, _messages.subscribeOn)('shutdown', () => void watcher.close());
|
140
|
-
watcher.add(Array.from(watchingFiles));
|
141
|
-
watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
142
|
-
watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
143
|
-
return data => {
|
144
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) ? data.stories : flatStories(data);
|
145
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
146
|
-
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
147
|
-
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
148
|
-
watcher.add(addedFiles);
|
149
|
-
addedFiles.forEach(filePath => {
|
150
|
-
watchingFiles.add(filePath);
|
151
|
-
storiesByFiles.set(filePath, []);
|
152
|
-
});
|
153
|
-
removedFiles.forEach(filePath => watchingFiles.delete(filePath));
|
154
|
-
Object.values(stories).forEach(story => {
|
155
|
-
var _storiesByFiles$get;
|
156
|
-
|
157
|
-
return (_storiesByFiles$get = storiesByFiles.get(story.parameters.fileName)) === null || _storiesByFiles$get === void 0 ? void 0 : _storiesByFiles$get.push(story);
|
158
|
-
});
|
159
|
-
channel.emit('storiesUpdated', storiesByFiles);
|
160
|
-
storiesByFiles = new Map();
|
161
|
-
};
|
162
|
-
} // TODO use the storybook version, after the fix of skip option API
|
163
|
-
|
164
|
-
|
165
|
-
function flatStories({
|
166
|
-
globalParameters,
|
167
|
-
kindParameters,
|
168
|
-
stories
|
169
|
-
}) {
|
170
|
-
Object.values(stories).forEach(story => {
|
171
|
-
// NOTE: Copy-paste merge parameters from storybook
|
172
|
-
story.parameters = (0, _lodash.mergeWith)({}, globalParameters, kindParameters[story.kind], story.parameters, (objValue, srcValue) => Array.isArray(objValue) ? objValue.concat(srcValue) : undefined);
|
173
|
-
});
|
174
|
-
return stories;
|
175
|
-
}
|
176
|
-
|
177
|
-
function loadStoriesFromBundle(watch) {
|
178
|
-
const bundlePath = _path.default.join((0, _utils.getCreeveyCache)(), 'storybook/main.js');
|
179
|
-
|
180
|
-
if (watch) {
|
181
|
-
(0, _messages.subscribeOn)('webpack', message => {
|
182
|
-
if (message.type != 'rebuild succeeded') return;
|
183
|
-
Object.values(global.__CREEVEY_HMR_DATA__).filter(({
|
184
|
-
callback
|
185
|
-
}) => callback).forEach(({
|
186
|
-
data,
|
187
|
-
callback
|
188
|
-
}) => callback(data));
|
189
|
-
delete require.cache[bundlePath];
|
190
|
-
Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
|
191
|
-
});
|
192
|
-
}
|
193
|
-
|
194
|
-
Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
|
195
|
-
}
|
196
|
-
|
197
|
-
async function loadStoriesDirectly(config, {
|
198
|
-
watcher,
|
199
|
-
debug
|
200
|
-
}) {
|
201
|
-
const {
|
202
|
-
toRequireContext
|
203
|
-
} = await (0, _helpers.importStorybookCoreCommon)();
|
204
|
-
const {
|
205
|
-
addParameters,
|
206
|
-
configure
|
207
|
-
} = await Promise.resolve().then(() => _interopRequireWildcard(require('./storybook/entry')));
|
208
|
-
const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('./loaders/babel/register')))).default(config, debug);
|
209
|
-
|
210
|
-
const preview = (() => {
|
211
|
-
try {
|
212
|
-
return require.resolve(`${config.storybookDir}/preview`);
|
213
|
-
} catch (_) {
|
214
|
-
/* noop */
|
215
|
-
}
|
216
|
-
})();
|
217
|
-
|
218
|
-
const {
|
219
|
-
stories
|
220
|
-
} = await (0, _helpers.importStorybookConfig)();
|
221
|
-
const contexts = stories.map(input => {
|
222
|
-
const {
|
223
|
-
path: storiesPath,
|
224
|
-
recursive,
|
225
|
-
match
|
226
|
-
} = toRequireContext(input);
|
227
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(_path.default.resolve(config.storybookDir, storiesPath));
|
228
|
-
return () => requireContext(storiesPath, recursive, new RegExp(match));
|
229
|
-
});
|
230
|
-
|
231
|
-
let disposeCallback = data => void data;
|
232
|
-
|
233
|
-
Object.assign(module, {
|
234
|
-
hot: {
|
235
|
-
data: {},
|
236
|
-
|
237
|
-
accept() {
|
238
|
-
/* noop */
|
239
|
-
},
|
240
|
-
|
241
|
-
dispose(callback) {
|
242
|
-
disposeCallback = callback;
|
243
|
-
}
|
244
|
-
|
245
|
-
}
|
246
|
-
});
|
247
|
-
|
248
|
-
async function startStorybook() {
|
249
|
-
if (preview) {
|
250
|
-
const {
|
251
|
-
parameters,
|
252
|
-
globals,
|
253
|
-
globalTypes
|
254
|
-
} = await Promise.resolve(`${preview}`).then(s => _interopRequireWildcard(require(s)));
|
255
|
-
if (parameters) addParameters(parameters);
|
256
|
-
if (globals) addParameters({
|
257
|
-
globals
|
258
|
-
});
|
259
|
-
if (globalTypes) addParameters({
|
260
|
-
globalTypes
|
261
|
-
});
|
262
|
-
}
|
263
|
-
|
264
|
-
try {
|
265
|
-
configure(contexts.map(ctx => ctx()), module, false);
|
266
|
-
} catch (error) {
|
267
|
-
if (_cluster.isMaster) _logger.logger.error(error);
|
268
|
-
}
|
269
|
-
}
|
270
|
-
|
271
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(config.storybookDir);
|
272
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.on('all', (_event, filename) => {
|
273
|
-
var _module$hot;
|
274
|
-
|
275
|
-
disposeCallback((_module$hot = module.hot) === null || _module$hot === void 0 ? void 0 : _module$hot.data);
|
276
|
-
delete require.cache[filename];
|
277
|
-
void startStorybook();
|
278
|
-
});
|
279
|
-
void startStorybook();
|
280
|
-
}
|
281
|
-
|
282
|
-
async function loadStorybook(config, {
|
283
|
-
watch,
|
284
|
-
debug
|
285
|
-
}, storiesListener) {
|
286
|
-
exports.storybookApi = storybookApi = await initStorybookEnvironment();
|
287
|
-
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
288
|
-
const {
|
289
|
-
channel
|
290
|
-
} = storybookApi;
|
291
|
-
channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
|
292
|
-
channel.on('storiesUpdated', storiesListener);
|
293
|
-
let watcher = null;
|
294
|
-
if (watch) watcher = _chokidar.default.watch([], {
|
295
|
-
ignoreInitial: true
|
296
|
-
});
|
297
|
-
const loadPromise = new Promise(resolve => {
|
298
|
-
channel.once(Events.SET_STORIES, data => {
|
299
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) ? data.stories : flatStories(data);
|
300
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
301
|
-
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
302
|
-
resolve(stories);
|
303
|
-
});
|
304
|
-
});
|
305
|
-
if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
|
306
|
-
watcher,
|
307
|
-
debug
|
308
|
-
});
|
309
|
-
return loadPromise;
|
310
|
-
}
|
311
|
-
|
312
|
-
async function loadTestsFromStories(config, browsers, {
|
313
|
-
watch = false,
|
314
|
-
debug = false,
|
315
|
-
update
|
316
|
-
}) {
|
100
|
+
async function loadTestsFromStories(browsers, provider, update) {
|
317
101
|
const testIdsByFiles = new Map();
|
318
|
-
const
|
319
|
-
debug,
|
320
|
-
watch
|
321
|
-
}, storiesByFiles => {
|
102
|
+
const data = await provider(storiesByFiles => {
|
322
103
|
const testsDiff = {};
|
323
104
|
Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
|
324
105
|
var _testIdsByFiles$get$f, _testIdsByFiles$get;
|
@@ -332,6 +113,7 @@ async function loadTestsFromStories(config, browsers, {
|
|
332
113
|
});
|
333
114
|
update === null || update === void 0 ? void 0 : update(testsDiff);
|
334
115
|
});
|
116
|
+
const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
|
335
117
|
const tests = convertStories(browsers, stories);
|
336
118
|
Object.values(tests).filter(_types.isDefined).forEach(({
|
337
119
|
id,
|
@@ -350,11 +132,23 @@ async function loadTestsFromStories(config, browsers, {
|
|
350
132
|
return tests;
|
351
133
|
}
|
352
134
|
|
353
|
-
function saveStoriesJson(extract) {
|
354
|
-
var
|
135
|
+
function saveStoriesJson(storiesData, extract) {
|
136
|
+
var _storiesData$stories;
|
355
137
|
|
356
138
|
const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
|
357
|
-
|
139
|
+
|
140
|
+
if (!(0, _helpers.isStorybookVersionLessThan)(6)) {
|
141
|
+
// NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
|
142
|
+
const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
|
143
|
+
storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
|
144
|
+
|
145
|
+
storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed)); // @ts-expect-error ignore error
|
146
|
+
|
147
|
+
storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
|
148
|
+
parameters: (0, _lodash.pick)(v.parameters, allowed)
|
149
|
+
}));
|
150
|
+
} // TODO Fix args stories
|
151
|
+
|
358
152
|
|
359
153
|
(0, _utils.removeProps)(storiesData !== null && storiesData !== void 0 ? storiesData : {}, ['stories', () => true, 'parameters', '__isArgsStory']);
|
360
154
|
Object.values((_storiesData$stories = storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) !== null && _storiesData$stories !== void 0 ? _storiesData$stories : {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.raw = exports.getStorybook = exports.setAddon = exports.clearDecorators = exports.addParameters = exports.addDecorator = exports.configure = exports.storiesOf = exports.forceReRender = exports.clientApi = exports.channel = void 0;
|
7
7
|
|
8
|
+
var _addons = require("@storybook/addons");
|
9
|
+
|
8
10
|
var _helpers = require("./helpers");
|
9
11
|
|
10
12
|
var _api$channel, _api$context;
|
@@ -16,10 +18,8 @@ const core = require((0, _helpers.resolveFromStorybook)('@storybook/core')); //@
|
|
16
18
|
|
17
19
|
|
18
20
|
const start = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? core.default.start : core.start;
|
19
|
-
const api = start(() => void 0);
|
20
|
-
|
21
|
-
|
22
|
-
const channel = (_api$channel = api.channel) !== null && _api$channel !== void 0 ? _api$channel : (_api$context = api.context) === null || _api$context === void 0 ? void 0 : _api$context.channel;
|
21
|
+
const api = start(() => void 0);
|
22
|
+
const channel = (0, _helpers.isStorybookVersionLessThan)(6, 4) ? (_api$channel = api.channel) !== null && _api$channel !== void 0 ? _api$channel : (_api$context = api.context) === null || _api$context === void 0 ? void 0 : _api$context.channel : _addons.addons.getChannel();
|
23
23
|
exports.channel = channel;
|
24
24
|
const clientApi = api.clientApi;
|
25
25
|
exports.clientApi = clientApi;
|
@@ -38,6 +38,7 @@ const configure = (...args) => {
|
|
38
38
|
if ((0, _helpers.isStorybookVersionLessThan)(5, 2)) {
|
39
39
|
//NOTE: Storybook <= 5.1 pass args as is
|
40
40
|
//@ts-expect-error: ignore it
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
41
42
|
return api.configApi.configure(...args);
|
42
43
|
}
|
43
44
|
|
@@ -7,9 +7,11 @@ exports.hasDocsAddon = hasDocsAddon;
|
|
7
7
|
exports.hasSvelteCSFAddon = hasSvelteCSFAddon;
|
8
8
|
exports.getStorybookVersion = getStorybookVersion;
|
9
9
|
exports.isStorybookVersionLessThan = isStorybookVersionLessThan;
|
10
|
+
exports.isStorybookVersionGreaterThan = isStorybookVersionGreaterThan;
|
10
11
|
exports.isStorybookVersion = isStorybookVersion;
|
11
12
|
exports.getStorybookFramework = getStorybookFramework;
|
12
13
|
exports.importStorybookConfig = importStorybookConfig;
|
14
|
+
exports.isCSFv3Enabled = isCSFv3Enabled;
|
13
15
|
exports.storybookConfigRef = exports.importStorybookCoreEvents = exports.importStorybookCoreCommon = exports.importStorybookClientLogger = exports.resolveFromStorybookCoreServer = exports.resolveFromStorybookCore = exports.resolveFromStorybookBuilderWebpack4 = exports.resolveFromStorybookAddonDocs = exports.resolveFromStorybook = exports.storybookDirRef = void 0;
|
14
16
|
|
15
17
|
var _path = _interopRequireDefault(require("path"));
|
@@ -96,17 +98,24 @@ function isStorybookVersionLessThan(major, minor) {
|
|
96
98
|
return Number(sbMajor) < major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) < minor;
|
97
99
|
}
|
98
100
|
|
99
|
-
function
|
101
|
+
function isStorybookVersionGreaterThan(major, minor) {
|
100
102
|
var _process$env$__CREEVE2;
|
101
103
|
|
102
104
|
const [sbMajor, sbMinor] = ((_process$env$__CREEVE2 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE2 !== void 0 ? _process$env$__CREEVE2 : getStorybookVersion()).split('.');
|
105
|
+
return Number(sbMajor) > major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) > minor;
|
106
|
+
}
|
107
|
+
|
108
|
+
function isStorybookVersion(major, minor) {
|
109
|
+
var _process$env$__CREEVE3;
|
110
|
+
|
111
|
+
const [sbMajor, sbMinor] = ((_process$env$__CREEVE3 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE3 !== void 0 ? _process$env$__CREEVE3 : getStorybookVersion()).split('.');
|
103
112
|
return Number(sbMajor) == major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) == minor;
|
104
113
|
}
|
105
114
|
|
106
115
|
function getStorybookFramework() {
|
107
|
-
var _process$env$
|
116
|
+
var _process$env$__CREEVE4;
|
108
117
|
|
109
|
-
const framework = (_process$env$
|
118
|
+
const framework = (_process$env$__CREEVE4 = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__) !== null && _process$env$__CREEVE4 !== void 0 ? _process$env$__CREEVE4 : supportedFrameworks.find(framework => {
|
110
119
|
try {
|
111
120
|
return require.resolve(resolveFromStorybook(`@storybook/${framework}`));
|
112
121
|
} catch (_) {
|
@@ -125,5 +134,32 @@ const storybookConfigRef = {
|
|
125
134
|
exports.storybookConfigRef = storybookConfigRef;
|
126
135
|
|
127
136
|
async function importStorybookConfig() {
|
128
|
-
|
137
|
+
const configPath = `${storybookDirRef.current}/main`;
|
138
|
+
|
139
|
+
try {
|
140
|
+
return storybookConfigRef.current = (await Promise.resolve(`${require.resolve(configPath)}`).then(s => _interopRequireWildcard(require(s)))).default;
|
141
|
+
} catch (_) {
|
142
|
+
const storybookUtilsPath = isStorybookVersionLessThan(6, 2) ? '@storybook/core/dist/server/utils' : '@storybook/core-common/dist/cjs/utils';
|
143
|
+
const serverRequireModule = isStorybookVersionLessThan(6, 2) ? 'server-require' : 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
144
|
+
|
145
|
+
const {
|
146
|
+
getInterpretedFile
|
147
|
+
} = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/interpret-files`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
148
|
+
|
149
|
+
const {
|
150
|
+
default: serverRequireFallback,
|
151
|
+
serverRequire = serverRequireFallback
|
152
|
+
} = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
153
|
+
|
154
|
+
const mainConfigFile = isStorybookVersionLessThan(6, 1) ? configPath : // eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
155
|
+
getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
156
|
+
|
157
|
+
return storybookConfigRef.current = serverRequire(mainConfigFile);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
async function isCSFv3Enabled() {
|
162
|
+
var _await$importStoryboo, _await$importStoryboo2, _await$importStoryboo3;
|
163
|
+
|
164
|
+
return (_await$importStoryboo = (_await$importStoryboo2 = await importStorybookConfig()) === null || _await$importStoryboo2 === void 0 ? void 0 : (_await$importStoryboo3 = _await$importStoryboo2.features) === null || _await$importStoryboo3 === void 0 ? void 0 : _await$importStoryboo3.previewCsfV3) !== null && _await$importStoryboo !== void 0 ? _await$importStoryboo : false;
|
129
165
|
}
|