creevey 0.7.39 → 0.9.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 +12 -2
- 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 -2
- package/lib/cjs/client/addon/preset.js +1 -0
- package/lib/cjs/client/addon/readyForCapture.js +12 -0
- package/lib/cjs/client/addon/utils.js +1 -41
- package/lib/cjs/client/addon/withCreevey.js +313 -41
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +3 -3
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +3 -3
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +4 -3
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +3 -3
- package/lib/cjs/client/shared/helpers.js +1 -1
- 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 +27 -9
- package/lib/cjs/server/config.js +7 -3
- package/lib/cjs/server/extract.js +11 -4
- package/lib/cjs/server/index.js +2 -4
- package/lib/cjs/server/loaders/babel/register.js +2 -1
- package/lib/cjs/server/master/index.js +3 -9
- package/lib/cjs/server/master/master.js +1 -0
- package/lib/cjs/server/master/pool.js +29 -29
- package/lib/cjs/server/master/server.js +75 -3
- package/lib/cjs/server/messages.js +124 -12
- package/lib/cjs/server/parser.js +85 -0
- package/lib/cjs/server/selenium/browser.js +119 -21
- package/lib/cjs/server/selenium/selenoid.js +1 -1
- package/lib/cjs/server/stories.js +49 -58
- package/lib/cjs/server/storybook/entry.js +5 -4
- package/lib/cjs/server/storybook/helpers.js +11 -3
- package/lib/cjs/server/storybook/providers/browser.js +78 -0
- package/lib/cjs/server/storybook/providers/hybrid.js +79 -0
- package/lib/cjs/server/storybook/{nodejs-provider.js → providers/nodejs.js} +42 -18
- package/lib/cjs/server/utils.js +32 -2
- package/lib/cjs/server/worker/helpers.js +2 -6
- package/lib/cjs/server/worker/worker.js +15 -3
- package/lib/cjs/shared.js +107 -0
- package/lib/cjs/types.js +5 -0
- package/lib/esm/client/addon/Manager.js +3 -3
- package/lib/esm/client/addon/preset.js +1 -0
- package/lib/esm/client/addon/readyForCapture.js +5 -0
- package/lib/esm/client/addon/utils.js +1 -33
- package/lib/esm/client/addon/withCreevey.js +303 -41
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +2 -3
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +2 -3
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +3 -3
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +2 -3
- package/lib/esm/client/shared/helpers.js +1 -1
- package/lib/esm/index.js +6 -3
- package/lib/esm/server/config.js +7 -5
- package/lib/esm/server/extract.js +8 -4
- package/lib/esm/server/index.js +2 -3
- package/lib/esm/server/loaders/babel/register.js +3 -2
- package/lib/esm/server/master/index.js +4 -10
- package/lib/esm/server/master/master.js +1 -0
- package/lib/esm/server/master/pool.js +31 -31
- package/lib/esm/server/master/server.js +73 -5
- package/lib/esm/server/messages.js +118 -12
- package/lib/esm/server/parser.js +63 -0
- package/lib/esm/server/selenium/browser.js +116 -23
- package/lib/esm/server/selenium/selenoid.js +1 -1
- package/lib/esm/server/stories.js +51 -58
- package/lib/esm/server/storybook/entry.js +4 -4
- package/lib/esm/server/storybook/helpers.js +9 -3
- package/lib/esm/server/storybook/providers/browser.js +61 -0
- package/lib/esm/server/storybook/providers/hybrid.js +63 -0
- package/lib/esm/server/storybook/{nodejs-provider.js → providers/nodejs.js} +40 -18
- package/lib/esm/server/utils.js +29 -2
- package/lib/esm/server/worker/helpers.js +2 -6
- package/lib/esm/server/worker/worker.js +16 -4
- package/lib/esm/shared.js +76 -0
- package/lib/esm/types.js +3 -0
- package/lib/types/client/addon/preset.d.ts +2 -0
- package/lib/types/client/addon/readyForCapture.d.ts +6 -0
- package/lib/types/client/addon/utils.d.ts +1 -5
- package/lib/types/client/addon/withCreevey.d.ts +13 -2
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +2 -2
- package/lib/types/index.d.ts +2 -1
- package/lib/types/server/config.d.ts +1 -1
- package/lib/types/server/master/master.d.ts +1 -0
- package/lib/types/server/master/pool.d.ts +1 -0
- package/lib/types/server/master/server.d.ts +1 -1
- package/lib/types/server/messages.d.ts +12 -2
- package/lib/types/server/parser.d.ts +12 -0
- package/lib/types/server/selenium/browser.d.ts +5 -2
- package/lib/types/server/stories.d.ts +1 -2
- package/lib/types/server/storybook/entry.d.ts +13 -9
- package/lib/types/server/storybook/helpers.d.ts +1 -0
- package/lib/types/server/storybook/providers/browser.d.ts +4 -0
- package/lib/types/server/storybook/providers/hybrid.d.ts +4 -0
- package/lib/types/server/storybook/providers/nodejs.d.ts +9 -0
- package/lib/types/server/utils.d.ts +2 -0
- package/lib/types/server/worker/helpers.d.ts +2 -1
- package/lib/types/shared.d.ts +16 -0
- package/lib/types/types.d.ts +33 -4
- package/package.json +28 -18
- package/storybook-static/stories.json +4 -513
- package/types/mocha.d.ts +1 -0
- package/lib/types/server/storybook/nodejs-provider.d.ts +0 -5
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.loadStories = loadStories;
|
7
|
+
exports.extractStoriesData = extractStoriesData;
|
7
8
|
|
8
9
|
var _path = _interopRequireDefault(require("path"));
|
9
10
|
|
@@ -11,17 +12,17 @@ var _cluster = require("cluster");
|
|
11
12
|
|
12
13
|
var _chokidar = _interopRequireDefault(require("chokidar"));
|
13
14
|
|
14
|
-
var _types = require("
|
15
|
+
var _types = require("../../../types");
|
15
16
|
|
16
|
-
var _utils = require("
|
17
|
+
var _utils = require("../../utils");
|
17
18
|
|
18
|
-
var _messages = require("
|
19
|
+
var _messages = require("../../messages");
|
19
20
|
|
20
|
-
var _helpers = require("
|
21
|
+
var _helpers = require("../helpers");
|
21
22
|
|
22
|
-
var _logger = require("
|
23
|
+
var _logger = require("../../logger");
|
23
24
|
|
24
|
-
var
|
25
|
+
var _shared = require("../../../shared");
|
25
26
|
|
26
27
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
27
28
|
|
@@ -30,7 +31,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
30
31
|
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; }
|
31
32
|
|
32
33
|
async function initStorybookEnvironment() {
|
33
|
-
// @ts-
|
34
|
+
// @ts-expect-error There is no @types/global-jsdom package
|
34
35
|
(await Promise.resolve().then(() => _interopRequireWildcard(require('global-jsdom')))).default(undefined, {
|
35
36
|
url: 'http://localhost'
|
36
37
|
}); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
|
@@ -48,7 +49,7 @@ async function initStorybookEnvironment() {
|
|
48
49
|
if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
49
50
|
|
50
51
|
logger.debug = _types.noop;
|
51
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require('
|
52
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
52
53
|
}
|
53
54
|
|
54
55
|
function watchStories(channel, watcher, initialFiles) {
|
@@ -59,7 +60,7 @@ function watchStories(channel, watcher, initialFiles) {
|
|
59
60
|
watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
60
61
|
watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
61
62
|
return data => {
|
62
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) ? data.stories : (0,
|
63
|
+
const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
|
63
64
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
64
65
|
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
65
66
|
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
@@ -104,13 +105,14 @@ async function loadStoriesDirectly(config, {
|
|
104
105
|
debug
|
105
106
|
}) {
|
106
107
|
const {
|
107
|
-
toRequireContext
|
108
|
+
toRequireContext,
|
109
|
+
normalizeStoriesEntry
|
108
110
|
} = await (0, _helpers.importStorybookCoreCommon)();
|
109
111
|
const {
|
110
112
|
addParameters,
|
111
113
|
configure
|
112
|
-
} = await Promise.resolve().then(() => _interopRequireWildcard(require('
|
113
|
-
const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('
|
114
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
115
|
+
const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../loaders/babel/register')))).default(config, debug);
|
114
116
|
|
115
117
|
const preview = (() => {
|
116
118
|
try {
|
@@ -123,12 +125,16 @@ async function loadStoriesDirectly(config, {
|
|
123
125
|
const {
|
124
126
|
stories
|
125
127
|
} = await (0, _helpers.importStorybookConfig)();
|
126
|
-
const contexts = stories.map(
|
128
|
+
const contexts = stories.map(entry => {
|
129
|
+
const normalizedEntry = (0, _helpers.isStorybookVersionLessThan)(6, 4) ? entry : normalizeStoriesEntry(entry, {
|
130
|
+
configDir: config.storybookDir,
|
131
|
+
workingDir: process.cwd()
|
132
|
+
});
|
127
133
|
const {
|
128
134
|
path: storiesPath,
|
129
135
|
recursive,
|
130
136
|
match
|
131
|
-
} = toRequireContext(
|
137
|
+
} = toRequireContext(normalizedEntry);
|
132
138
|
watcher === null || watcher === void 0 ? void 0 : watcher.add(_path.default.resolve(config.storybookDir, storiesPath));
|
133
139
|
return () => requireContext(storiesPath, recursive, new RegExp(match));
|
134
140
|
});
|
@@ -182,7 +188,8 @@ async function loadStoriesDirectly(config, {
|
|
182
188
|
void startStorybook();
|
183
189
|
});
|
184
190
|
void startStorybook();
|
185
|
-
}
|
191
|
+
} // TODO Do we need to support multiple storybooks here?
|
192
|
+
|
186
193
|
|
187
194
|
async function loadStories(config, {
|
188
195
|
watch,
|
@@ -195,16 +202,16 @@ async function loadStories(config, {
|
|
195
202
|
} = storybookApi;
|
196
203
|
channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
|
197
204
|
channel.on('storiesUpdated', storiesListener);
|
198
|
-
let watcher
|
205
|
+
let watcher;
|
199
206
|
if (watch) watcher = _chokidar.default.watch([], {
|
200
207
|
ignoreInitial: true
|
201
208
|
});
|
202
209
|
const loadPromise = new Promise(resolve => {
|
203
210
|
channel.once(Events.SET_STORIES, data => {
|
204
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) ? data.stories : (0,
|
211
|
+
const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
|
205
212
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
206
213
|
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
207
|
-
resolve(
|
214
|
+
resolve(stories);
|
208
215
|
});
|
209
216
|
});
|
210
217
|
if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
|
@@ -212,4 +219,21 @@ async function loadStories(config, {
|
|
212
219
|
debug
|
213
220
|
});
|
214
221
|
return loadPromise;
|
222
|
+
}
|
223
|
+
|
224
|
+
async function extractStoriesData(config, {
|
225
|
+
watch,
|
226
|
+
debug
|
227
|
+
}) {
|
228
|
+
const storybookApi = await initStorybookEnvironment();
|
229
|
+
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
230
|
+
const {
|
231
|
+
channel
|
232
|
+
} = storybookApi;
|
233
|
+
channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
|
234
|
+
const loadPromise = new Promise(resolve => channel.once(Events.SET_STORIES, resolve));
|
235
|
+
if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
|
236
|
+
debug
|
237
|
+
});
|
238
|
+
return loadPromise;
|
215
239
|
}
|
package/lib/cjs/server/utils.js
CHANGED
@@ -10,7 +10,8 @@ exports.getCreeveyCache = getCreeveyCache;
|
|
10
10
|
exports.runSequence = runSequence;
|
11
11
|
exports.testsToImages = testsToImages;
|
12
12
|
exports.removeProps = removeProps;
|
13
|
-
exports.
|
13
|
+
exports.readDirRecursive = readDirRecursive;
|
14
|
+
exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
|
14
15
|
|
15
16
|
var _fs = require("fs");
|
16
17
|
|
@@ -34,6 +35,8 @@ const LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
|
|
34
35
|
exports.LOCALHOST_REGEXP = LOCALHOST_REGEXP;
|
35
36
|
const extensions = ['.js', '.jsx', '.ts', '.tsx'];
|
36
37
|
exports.extensions = extensions;
|
38
|
+
const skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
|
39
|
+
exports.skipOptionKeys = skipOptionKeys;
|
37
40
|
|
38
41
|
function matchBy(pattern, value) {
|
39
42
|
return typeof pattern == 'string' && pattern == value || Array.isArray(pattern) && pattern.includes(value) || pattern instanceof RegExp && pattern.test(value) || !(0, _types.isDefined)(pattern);
|
@@ -45,9 +48,30 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
45
48
|
}
|
46
49
|
|
47
50
|
if (Array.isArray(skipOptions)) {
|
48
|
-
|
51
|
+
for (const skip of skipOptions) {
|
52
|
+
const reason = shouldSkip(browser, meta, skip, test);
|
53
|
+
if (reason) return reason;
|
54
|
+
}
|
55
|
+
|
56
|
+
return false;
|
49
57
|
}
|
50
58
|
|
59
|
+
let hasSkipOptionKeys = false;
|
60
|
+
|
61
|
+
for (const skipKey in skipOptions) {
|
62
|
+
if (skipOptionKeys.includes(skipKey)) {
|
63
|
+
hasSkipOptionKeys = true;
|
64
|
+
continue;
|
65
|
+
}
|
66
|
+
|
67
|
+
const reason = shouldSkip(browser, meta, {
|
68
|
+
reason: skipKey,
|
69
|
+
...skipOptions[skipKey]
|
70
|
+
}, test);
|
71
|
+
if (reason) return reason;
|
72
|
+
}
|
73
|
+
|
74
|
+
if (!hasSkipOptionKeys) return false;
|
51
75
|
const {
|
52
76
|
in: browsers,
|
53
77
|
kinds,
|
@@ -152,4 +176,10 @@ function removeProps(obj, propPath) {
|
|
152
176
|
if (typeof prop == 'string') delete obj[prop];
|
153
177
|
if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => delete obj[key]);
|
154
178
|
}
|
179
|
+
}
|
180
|
+
|
181
|
+
function readDirRecursive(dirPath) {
|
182
|
+
return [].concat(...(0, _fs.readdirSync)(dirPath, {
|
183
|
+
withFileTypes: true
|
184
|
+
}).map(dirent => dirent.isDirectory() ? readDirRecursive(`${dirPath}/${dirent.name}`) : [`${dirPath}/${dirent.name}`]));
|
155
185
|
}
|
@@ -56,14 +56,10 @@ function removeTestOrSuite(testOrSuite) {
|
|
56
56
|
|
57
57
|
async function addTestsFromStories(rootSuite, config, {
|
58
58
|
browser,
|
59
|
-
|
60
|
-
debug
|
59
|
+
...options
|
61
60
|
}) {
|
62
61
|
const mochaTestsById = new Map();
|
63
|
-
const tests = await (0, _stories.loadTestsFromStories)([browser], listener => config.storiesProvider(config, {
|
64
|
-
watch,
|
65
|
-
debug
|
66
|
-
}, listener), testsDiff => Object.entries(testsDiff).forEach(([id, newTest]) => {
|
62
|
+
const tests = await (0, _stories.loadTestsFromStories)([browser], listener => config.storiesProvider(config, options, listener), testsDiff => Object.entries(testsDiff).forEach(([id, newTest]) => {
|
67
63
|
const oldTest = mochaTestsById.get(id);
|
68
64
|
mochaTestsById.delete(id);
|
69
65
|
if (oldTest) removeTestOrSuite(oldTest);
|
@@ -72,6 +72,7 @@ async function worker(config, options) {
|
|
72
72
|
let retries = 0;
|
73
73
|
let images = {};
|
74
74
|
let error = undefined;
|
75
|
+
const screenshots = [];
|
75
76
|
const testScope = [];
|
76
77
|
|
77
78
|
function runHandler(failures) {
|
@@ -201,13 +202,23 @@ async function worker(config, options) {
|
|
201
202
|
|
202
203
|
_chai.default.use((0, _chaiImage.default)(getExpected, config.diffOptions));
|
203
204
|
|
205
|
+
if ((await (0, _selenium.getBrowser)(config, options.browser)) == null) return;
|
204
206
|
await (0, _helpers.addTestsFromStories)(mocha.suite, config, {
|
205
207
|
browser: options.browser,
|
206
208
|
watch: options.ui,
|
207
|
-
debug: options.debug
|
209
|
+
debug: options.debug,
|
210
|
+
port: options.port
|
208
211
|
});
|
209
|
-
|
210
|
-
|
212
|
+
|
213
|
+
try {
|
214
|
+
var _await$getBrowser;
|
215
|
+
|
216
|
+
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options.browser)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
|
217
|
+
} catch (_) {
|
218
|
+
await (0, _selenium.closeBrowser)();
|
219
|
+
}
|
220
|
+
|
221
|
+
const browser = await (0, _selenium.getBrowser)(config, options.browser);
|
211
222
|
const sessionId = (_await$browser$getSes = await (browser === null || browser === void 0 ? void 0 : browser.getSession())) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
|
212
223
|
if (browser == null) return;
|
213
224
|
const interval = setInterval(() => void browser.getCurrentUrl().then(url => {
|
@@ -222,6 +233,7 @@ async function worker(config, options) {
|
|
222
233
|
this.expect = _chai.default.expect;
|
223
234
|
this.browserName = options.browser;
|
224
235
|
this.testScope = testScope;
|
236
|
+
this.screenshots = screenshots;
|
225
237
|
});
|
226
238
|
mocha.suite.beforeEach(_selenium.switchStory);
|
227
239
|
(0, _messages.subscribeOn)('test', message => {
|
@@ -0,0 +1,107 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.deserializeStory = exports.deserializeRawStories = exports.serializeRawStories = exports.deserializeRegExp = exports.serializeRegExp = exports.isSerializedRegExp = exports.denormalizeStoryParameters = exports.combineParameters = void 0;
|
7
|
+
|
8
|
+
var _lodash = require("lodash");
|
9
|
+
|
10
|
+
// NOTE: Copy-paste from storybook/api
|
11
|
+
const combineParameters = (...parameterSets) => // eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
12
|
+
(0, _lodash.mergeWith)({}, ...parameterSets, (_, srcValue) => {
|
13
|
+
// Treat arrays as scalars:
|
14
|
+
if (Array.isArray(srcValue)) return srcValue;
|
15
|
+
return undefined;
|
16
|
+
}); // NOTE: Copy-paste from storybook/api
|
17
|
+
|
18
|
+
|
19
|
+
exports.combineParameters = combineParameters;
|
20
|
+
|
21
|
+
const denormalizeStoryParameters = ({
|
22
|
+
globalParameters,
|
23
|
+
kindParameters,
|
24
|
+
stories
|
25
|
+
}) => {
|
26
|
+
return (0, _lodash.mapValues)(stories, storyData => {
|
27
|
+
var _globalParameters$cre, _kindParameters$story, _kindParameters$story2;
|
28
|
+
|
29
|
+
storyData.parameters.creevey = combineParameters((_globalParameters$cre = globalParameters.creevey) !== null && _globalParameters$cre !== void 0 ? _globalParameters$cre : {}, (_kindParameters$story = (_kindParameters$story2 = kindParameters[storyData.kind]) === null || _kindParameters$story2 === void 0 ? void 0 : _kindParameters$story2.creevey) !== null && _kindParameters$story !== void 0 ? _kindParameters$story : {}, storyData.parameters.creevey);
|
30
|
+
return storyData;
|
31
|
+
});
|
32
|
+
};
|
33
|
+
|
34
|
+
exports.denormalizeStoryParameters = denormalizeStoryParameters;
|
35
|
+
|
36
|
+
const isSerializedRegExp = exp => {
|
37
|
+
return typeof exp === 'object' && exp !== null && Reflect.get(exp, '__regexp') === true;
|
38
|
+
};
|
39
|
+
|
40
|
+
exports.isSerializedRegExp = isSerializedRegExp;
|
41
|
+
|
42
|
+
const serializeRegExp = exp => {
|
43
|
+
const {
|
44
|
+
source,
|
45
|
+
flags
|
46
|
+
} = exp;
|
47
|
+
return {
|
48
|
+
__regexp: true,
|
49
|
+
source,
|
50
|
+
flags
|
51
|
+
};
|
52
|
+
};
|
53
|
+
|
54
|
+
exports.serializeRegExp = serializeRegExp;
|
55
|
+
|
56
|
+
const deserializeRegExp = ({
|
57
|
+
source,
|
58
|
+
flags
|
59
|
+
}) => {
|
60
|
+
return new RegExp(source, flags);
|
61
|
+
};
|
62
|
+
|
63
|
+
exports.deserializeRegExp = deserializeRegExp;
|
64
|
+
|
65
|
+
const serializeRawStories = stories => {
|
66
|
+
return (0, _lodash.mapValues)(stories, storyData => {
|
67
|
+
const creevey = storyData.parameters.creevey;
|
68
|
+
|
69
|
+
if ((creevey === null || creevey === void 0 ? void 0 : creevey.skip) !== undefined) {
|
70
|
+
creevey.skip = (0, _lodash.cloneDeepWith)(creevey.skip, value => {
|
71
|
+
if (value instanceof RegExp) {
|
72
|
+
return serializeRegExp(value);
|
73
|
+
}
|
74
|
+
|
75
|
+
return undefined;
|
76
|
+
});
|
77
|
+
}
|
78
|
+
|
79
|
+
return storyData;
|
80
|
+
});
|
81
|
+
};
|
82
|
+
|
83
|
+
exports.serializeRawStories = serializeRawStories;
|
84
|
+
|
85
|
+
const deserializeRawStories = stories => {
|
86
|
+
return (0, _lodash.mapValues)(stories, deserializeStory);
|
87
|
+
};
|
88
|
+
|
89
|
+
exports.deserializeRawStories = deserializeRawStories;
|
90
|
+
|
91
|
+
const deserializeStory = story => {
|
92
|
+
const creevey = story.parameters.creevey;
|
93
|
+
|
94
|
+
if ((creevey === null || creevey === void 0 ? void 0 : creevey.skip) !== undefined) {
|
95
|
+
creevey.skip = (0, _lodash.cloneDeepWith)(creevey.skip, value => {
|
96
|
+
if (isSerializedRegExp(value)) {
|
97
|
+
return deserializeRegExp(value);
|
98
|
+
}
|
99
|
+
|
100
|
+
return undefined;
|
101
|
+
});
|
102
|
+
}
|
103
|
+
|
104
|
+
return story;
|
105
|
+
};
|
106
|
+
|
107
|
+
exports.deserializeStory = deserializeStory;
|
package/lib/cjs/types.js
CHANGED
@@ -12,6 +12,7 @@ exports.isFunction = isFunction;
|
|
12
12
|
exports.isImageError = isImageError;
|
13
13
|
exports.isProcessMessage = isProcessMessage;
|
14
14
|
exports.isWorkerMessage = isWorkerMessage;
|
15
|
+
exports.isStoriesMessage = isStoriesMessage;
|
15
16
|
exports.isTestMessage = isTestMessage;
|
16
17
|
exports.isWebpackMessage = isWebpackMessage;
|
17
18
|
exports.isDockerMessage = isDockerMessage;
|
@@ -56,6 +57,10 @@ function isWorkerMessage(message) {
|
|
56
57
|
return isProcessMessage(message) && message.scope == 'worker';
|
57
58
|
}
|
58
59
|
|
60
|
+
function isStoriesMessage(message) {
|
61
|
+
return isProcessMessage(message) && message.scope == 'stories';
|
62
|
+
}
|
63
|
+
|
59
64
|
function isTestMessage(message) {
|
60
65
|
return isProcessMessage(message) && message.scope == 'test';
|
61
66
|
}
|
@@ -31,11 +31,12 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
31
31
|
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; }
|
32
32
|
|
33
33
|
import { SET_STORIES, STORY_RENDERED } from '@storybook/core-events';
|
34
|
+
import { denormalizeStoryParameters } from '../../shared';
|
34
35
|
import { isDefined } from '../../types';
|
35
36
|
import { initCreeveyClientApi } from '../shared/creeveyClientApi';
|
36
37
|
import { calcStatus } from '../shared/helpers';
|
37
38
|
import { ADDON_ID } from './register';
|
38
|
-
import { getEmojiByTestStatus
|
39
|
+
import { getEmojiByTestStatus } from './utils';
|
39
40
|
export var CreeveyManager = /*#__PURE__*/function () {
|
40
41
|
function CreeveyManager(storybookApi) {
|
41
42
|
var _this = this;
|
@@ -229,8 +230,7 @@ export var CreeveyManager = /*#__PURE__*/function () {
|
|
229
230
|
});
|
230
231
|
|
231
232
|
_defineProperty(this, "onSetStories", function (data) {
|
232
|
-
|
233
|
-
var stories = data.v ? denormalizeStoryParameters(data) : data;
|
233
|
+
var stories = data.v ? denormalizeStoryParameters(data) : data.stories;
|
234
234
|
_this.stories = stories;
|
235
235
|
});
|
236
236
|
|
@@ -47,6 +47,7 @@ export function managerWebpack(config, options) {
|
|
47
47
|
DefinePlugin = _ref$DefinePlugin === void 0 ? FallbackDefinePlugin : _ref$DefinePlugin;
|
48
48
|
|
49
49
|
(_config$plugins = config.plugins) === null || _config$plugins === void 0 ? void 0 : _config$plugins.push(new DefinePlugin({
|
50
|
+
__CREEVEY_SERVER_HOST__: options.creeveyHost,
|
50
51
|
__CREEVEY_SERVER_PORT__: (_options$creeveyPort = options.creeveyPort) !== null && _options$creeveyPort !== void 0 ? _options$creeveyPort : 3000,
|
51
52
|
__CREEVEY_CLIENT_PORT__: options.clientPort
|
52
53
|
}));
|
@@ -1,10 +1,3 @@
|
|
1
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
2
|
-
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
4
|
-
|
5
|
-
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; }
|
6
|
-
|
7
|
-
import { mapValues, mergeWith } from 'lodash';
|
8
1
|
export function getEmojiByTestStatus(status) {
|
9
2
|
var skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
10
3
|
|
@@ -35,29 +28,4 @@ export function getEmojiByTestStatus(status) {
|
|
35
28
|
return '';
|
36
29
|
}
|
37
30
|
}
|
38
|
-
}
|
39
|
-
|
40
|
-
export var combineParameters = function combineParameters() {
|
41
|
-
for (var _len = arguments.length, parameterSets = new Array(_len), _key = 0; _key < _len; _key++) {
|
42
|
-
parameterSets[_key] = arguments[_key];
|
43
|
-
}
|
44
|
-
|
45
|
-
return (// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
46
|
-
mergeWith.apply(void 0, [{}].concat(parameterSets, [function (_, srcValue) {
|
47
|
-
// Treat arrays as scalars:
|
48
|
-
if (Array.isArray(srcValue)) return srcValue;
|
49
|
-
return undefined;
|
50
|
-
}]))
|
51
|
-
);
|
52
|
-
}; // NOTE: Copy-paste from storybook/api
|
53
|
-
|
54
|
-
export var denormalizeStoryParameters = function denormalizeStoryParameters(_ref) {
|
55
|
-
var globalParameters = _ref.globalParameters,
|
56
|
-
kindParameters = _ref.kindParameters,
|
57
|
-
stories = _ref.stories;
|
58
|
-
return mapValues(stories, function (storyData) {
|
59
|
-
return _objectSpread(_objectSpread({}, storyData), {}, {
|
60
|
-
parameters: combineParameters(globalParameters, kindParameters[storyData.kind], storyData.parameters)
|
61
|
-
});
|
62
|
-
});
|
63
|
-
};
|
31
|
+
}
|