creevey 0.9.0-beta.0 → 0.9.0-beta.1
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/lib/types/index.d.ts +4 -3
- package/lib/types/server/config.d.ts +1 -1
- package/lib/types/server/messages.d.ts +0 -1
- package/lib/types/server/{parser.d.ts → testsFiles/parser.d.ts} +1 -1
- package/lib/types/server/testsFiles/register.d.ts +2 -0
- package/lib/types/types.d.ts +3 -2
- package/package.json +5 -2
- package/lib/cjs/cli.js +0 -5
- package/lib/cjs/client/addon/Manager.js +0 -412
- package/lib/cjs/client/addon/components/Addon.js +0 -76
- package/lib/cjs/client/addon/components/Icons.js +0 -42
- package/lib/cjs/client/addon/components/Panel.js +0 -68
- package/lib/cjs/client/addon/components/TestSelect.js +0 -63
- package/lib/cjs/client/addon/components/Tools.js +0 -114
- package/lib/cjs/client/addon/decorator.js +0 -11
- package/lib/cjs/client/addon/preset.js +0 -81
- package/lib/cjs/client/addon/readyForCapture.js +0 -12
- package/lib/cjs/client/addon/register.js +0 -96
- package/lib/cjs/client/addon/utils.js +0 -38
- package/lib/cjs/client/addon/withCreevey.js +0 -556
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +0 -85
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +0 -88
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +0 -176
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +0 -179
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +0 -110
- package/lib/cjs/client/shared/components/ImagesView/index.js +0 -45
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +0 -46
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +0 -98
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +0 -78
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +0 -144
- package/lib/cjs/client/shared/components/ResultsPage.js +0 -173
- package/lib/cjs/client/shared/creeveyClientApi.js +0 -103
- package/lib/cjs/client/shared/helpers.js +0 -482
- package/lib/cjs/client/shared/viewMode.js +0 -17
- package/lib/cjs/client/web/index.html +0 -19
- package/lib/cjs/creevey.js +0 -71
- package/lib/cjs/index.js +0 -62
- package/lib/cjs/server/config.js +0 -96
- package/lib/cjs/server/docker.js +0 -150
- package/lib/cjs/server/extract.js +0 -50
- package/lib/cjs/server/index.js +0 -83
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
- package/lib/cjs/server/loaders/babel/helpers.js +0 -479
- package/lib/cjs/server/loaders/babel/register.js +0 -126
- package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
- package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
- package/lib/cjs/server/loaders/webpack/compile.js +0 -286
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
- package/lib/cjs/server/loaders/webpack/start.js +0 -41
- package/lib/cjs/server/logger.js +0 -47
- package/lib/cjs/server/master/api.js +0 -71
- package/lib/cjs/server/master/index.js +0 -146
- package/lib/cjs/server/master/master.js +0 -57
- package/lib/cjs/server/master/pool.js +0 -206
- package/lib/cjs/server/master/runner.js +0 -294
- package/lib/cjs/server/master/server.js +0 -129
- package/lib/cjs/server/messages.js +0 -266
- package/lib/cjs/server/parser.js +0 -85
- package/lib/cjs/server/selenium/browser.js +0 -680
- package/lib/cjs/server/selenium/index.js +0 -31
- package/lib/cjs/server/selenium/selenoid.js +0 -174
- package/lib/cjs/server/stories.js +0 -170
- package/lib/cjs/server/storybook/entry.js +0 -68
- package/lib/cjs/server/storybook/helpers.js +0 -165
- package/lib/cjs/server/storybook/providers/browser.js +0 -78
- package/lib/cjs/server/storybook/providers/hybrid.js +0 -79
- package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
- package/lib/cjs/server/update.js +0 -83
- package/lib/cjs/server/utils.js +0 -185
- package/lib/cjs/server/worker/chai-image.js +0 -142
- package/lib/cjs/server/worker/helpers.js +0 -69
- package/lib/cjs/server/worker/index.js +0 -15
- package/lib/cjs/server/worker/reporter.js +0 -120
- package/lib/cjs/server/worker/worker.js +0 -278
- package/lib/cjs/shared.js +0 -107
- package/lib/cjs/types.js +0 -74
- package/lib/esm/cli.js +0 -4
- package/lib/esm/client/addon/Manager.js +0 -396
- package/lib/esm/client/addon/components/Addon.js +0 -58
- package/lib/esm/client/addon/components/Icons.js +0 -27
- package/lib/esm/client/addon/components/Panel.js +0 -49
- package/lib/esm/client/addon/components/TestSelect.js +0 -49
- package/lib/esm/client/addon/components/Tools.js +0 -91
- package/lib/esm/client/addon/decorator.js +0 -2
- package/lib/esm/client/addon/preset.js +0 -56
- package/lib/esm/client/addon/readyForCapture.js +0 -5
- package/lib/esm/client/addon/register.js +0 -75
- package/lib/esm/client/addon/utils.js +0 -31
- package/lib/esm/client/addon/withCreevey.js +0 -532
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +0 -63
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +0 -65
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +0 -151
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +0 -154
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +0 -88
- package/lib/esm/client/shared/components/ImagesView/index.js +0 -5
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +0 -32
- package/lib/esm/client/shared/components/PageFooter/Paging.js +0 -84
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +0 -64
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +0 -120
- package/lib/esm/client/shared/components/ResultsPage.js +0 -143
- package/lib/esm/client/shared/creeveyClientApi.js +0 -94
- package/lib/esm/client/shared/helpers.js +0 -424
- package/lib/esm/client/shared/viewMode.js +0 -6
- package/lib/esm/creevey.js +0 -56
- package/lib/esm/index.js +0 -7
- package/lib/esm/server/config.js +0 -73
- package/lib/esm/server/docker.js +0 -123
- package/lib/esm/server/extract.js +0 -34
- package/lib/esm/server/index.js +0 -64
- package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
- package/lib/esm/server/loaders/babel/helpers.js +0 -462
- package/lib/esm/server/loaders/babel/register.js +0 -105
- package/lib/esm/server/loaders/hooks/mdx.js +0 -15
- package/lib/esm/server/loaders/hooks/svelte.js +0 -49
- package/lib/esm/server/loaders/webpack/compile.js +0 -263
- package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
- package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
- package/lib/esm/server/loaders/webpack/start.js +0 -27
- package/lib/esm/server/logger.js +0 -20
- package/lib/esm/server/master/api.js +0 -60
- package/lib/esm/server/master/index.js +0 -125
- package/lib/esm/server/master/master.js +0 -38
- package/lib/esm/server/master/pool.js +0 -187
- package/lib/esm/server/master/runner.js +0 -272
- package/lib/esm/server/master/server.js +0 -105
- package/lib/esm/server/messages.js +0 -234
- package/lib/esm/server/parser.js +0 -63
- package/lib/esm/server/selenium/browser.js +0 -647
- package/lib/esm/server/selenium/index.js +0 -2
- package/lib/esm/server/selenium/selenoid.js +0 -151
- package/lib/esm/server/stories.js +0 -151
- package/lib/esm/server/storybook/entry.js +0 -44
- package/lib/esm/server/storybook/helpers.js +0 -106
- package/lib/esm/server/storybook/providers/browser.js +0 -61
- package/lib/esm/server/storybook/providers/hybrid.js +0 -63
- package/lib/esm/server/storybook/providers/nodejs.js +0 -217
- package/lib/esm/server/update.js +0 -65
- package/lib/esm/server/utils.js +0 -146
- package/lib/esm/server/worker/chai-image.js +0 -130
- package/lib/esm/server/worker/helpers.js +0 -60
- package/lib/esm/server/worker/index.js +0 -1
- package/lib/esm/server/worker/reporter.js +0 -98
- package/lib/esm/server/worker/worker.js +0 -248
- package/lib/esm/shared.js +0 -76
- package/lib/esm/types.js +0 -43
@@ -1,78 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.loadStories = loadStories;
|
7
|
-
|
8
|
-
var _cluster = _interopRequireWildcard(require("cluster"));
|
9
|
-
|
10
|
-
var _selenium = require("../../selenium");
|
11
|
-
|
12
|
-
var _messages = require("../../messages");
|
13
|
-
|
14
|
-
var _shared = require("../../../shared");
|
15
|
-
|
16
|
-
var _types = require("../../../types");
|
17
|
-
|
18
|
-
var _logger = require("../../logger");
|
19
|
-
|
20
|
-
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); }
|
21
|
-
|
22
|
-
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; }
|
23
|
-
|
24
|
-
async function loadStories(_config, {
|
25
|
-
port
|
26
|
-
}, storiesListener) {
|
27
|
-
if (_cluster.isMaster) {
|
28
|
-
return new Promise(resolve => {
|
29
|
-
const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
|
30
|
-
|
31
|
-
if (worker) {
|
32
|
-
const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
|
33
|
-
if (message.type == 'set') {
|
34
|
-
const {
|
35
|
-
stories,
|
36
|
-
oldTests
|
37
|
-
} = message.payload;
|
38
|
-
if (oldTests.length > 0) _logger.logger.warn(`If you use browser stories provider of CSFv3 Storybook feature\n` + `Creevey will not load tests defined in story parameters from following stories:\n` + oldTests.join('\n'));
|
39
|
-
unsubscribe();
|
40
|
-
resolve(stories);
|
41
|
-
}
|
42
|
-
});
|
43
|
-
(0, _messages.sendStoriesMessage)(worker, {
|
44
|
-
type: 'get'
|
45
|
-
});
|
46
|
-
}
|
47
|
-
|
48
|
-
(0, _messages.subscribeOn)('stories', message => {
|
49
|
-
// TODO updates only one browser :(
|
50
|
-
if (message.type == 'update') storiesListener(new Map(message.payload));
|
51
|
-
});
|
52
|
-
});
|
53
|
-
} else {
|
54
|
-
(0, _messages.subscribeOn)('stories', message => {
|
55
|
-
if (message.type == 'get') (0, _messages.emitStoriesMessage)({
|
56
|
-
type: 'set',
|
57
|
-
payload: {
|
58
|
-
stories,
|
59
|
-
oldTests: storiesWithOldTests
|
60
|
-
}
|
61
|
-
});
|
62
|
-
if (message.type == 'update') storiesListener(new Map(message.payload));
|
63
|
-
});
|
64
|
-
const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)(port));
|
65
|
-
const storiesWithOldTests = [];
|
66
|
-
Object.values(stories).forEach(story => {
|
67
|
-
var _parameters, _parameters$creevey;
|
68
|
-
|
69
|
-
if ((_parameters = story.parameters) !== null && _parameters !== void 0 && (_parameters$creevey = _parameters.creevey) !== null && _parameters$creevey !== void 0 && _parameters$creevey.tests) {
|
70
|
-
var _parameters2, _parameters2$creevey;
|
71
|
-
|
72
|
-
(_parameters2 = story.parameters) === null || _parameters2 === void 0 ? true : (_parameters2$creevey = _parameters2.creevey) === null || _parameters2$creevey === void 0 ? true : delete _parameters2$creevey.tests;
|
73
|
-
storiesWithOldTests.push(`${story.kind}/${story.name}`);
|
74
|
-
}
|
75
|
-
});
|
76
|
-
return stories;
|
77
|
-
}
|
78
|
-
}
|
@@ -1,79 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.loadStories = loadStories;
|
7
|
-
|
8
|
-
var _chokidar = _interopRequireDefault(require("chokidar"));
|
9
|
-
|
10
|
-
var _browser = require("./browser");
|
11
|
-
|
12
|
-
var _logger = require("../../logger");
|
13
|
-
|
14
|
-
var _parser = _interopRequireDefault(require("../../parser"));
|
15
|
-
|
16
|
-
var _utils = require("../../../server/utils");
|
17
|
-
|
18
|
-
var _shared = require("../../../shared");
|
19
|
-
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
|
-
|
22
|
-
async function loadStories(_config, {
|
23
|
-
port
|
24
|
-
}, storiesListener) {
|
25
|
-
let creeveyParamsByStoryId = {};
|
26
|
-
|
27
|
-
const mergeParamsFromTestsToStory = (story, creeveyParams) => {
|
28
|
-
if (story.parameters) {
|
29
|
-
story.parameters.creevey = (0, _shared.combineParameters)(story.parameters.creevey || {}, creeveyParams);
|
30
|
-
}
|
31
|
-
};
|
32
|
-
|
33
|
-
const stories = await (0, _browser.loadStories)(_config, {
|
34
|
-
port
|
35
|
-
}, updatedStoriesByFiles => {
|
36
|
-
Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
|
37
|
-
storiesArray.forEach(story => {
|
38
|
-
const creeveyParams = creeveyParamsByStoryId[story.id];
|
39
|
-
|
40
|
-
if (creeveyParams) {
|
41
|
-
mergeParamsFromTestsToStory(story, creeveyParams);
|
42
|
-
}
|
43
|
-
});
|
44
|
-
});
|
45
|
-
storiesListener(updatedStoriesByFiles);
|
46
|
-
}); // TODO fix test files hot reloading
|
47
|
-
|
48
|
-
creeveyParamsByStoryId = await parseParams(_config
|
49
|
-
/*, (data) => console.log(data) */
|
50
|
-
);
|
51
|
-
Object.entries(stories).forEach(([storyId, story]) => {
|
52
|
-
mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
|
53
|
-
});
|
54
|
-
return stories;
|
55
|
-
}
|
56
|
-
|
57
|
-
function parseParams(config, listener) {
|
58
|
-
if (!config.testDir) {
|
59
|
-
return Promise.resolve({});
|
60
|
-
}
|
61
|
-
|
62
|
-
const testFiles = (0, _utils.readDirRecursive)(config.testDir).filter(file => {
|
63
|
-
var _config$testRegex;
|
64
|
-
|
65
|
-
return (_config$testRegex = config.testRegex) === null || _config$testRegex === void 0 ? void 0 : _config$testRegex.test(file);
|
66
|
-
});
|
67
|
-
|
68
|
-
if (listener) {
|
69
|
-
_chokidar.default.watch(testFiles).on('change', filePath => {
|
70
|
-
_logger.logger.debug(`changed: ${filePath}`); // doesn't work, always returns {} due modules caching
|
71
|
-
// see https://github.com/nodejs/modules/issues/307
|
72
|
-
|
73
|
-
|
74
|
-
void (0, _parser.default)(testFiles).then(data => listener(data));
|
75
|
-
});
|
76
|
-
}
|
77
|
-
|
78
|
-
return (0, _parser.default)(testFiles);
|
79
|
-
}
|
@@ -1,239 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.loadStories = loadStories;
|
7
|
-
exports.extractStoriesData = extractStoriesData;
|
8
|
-
|
9
|
-
var _path = _interopRequireDefault(require("path"));
|
10
|
-
|
11
|
-
var _cluster = require("cluster");
|
12
|
-
|
13
|
-
var _chokidar = _interopRequireDefault(require("chokidar"));
|
14
|
-
|
15
|
-
var _types = require("../../../types");
|
16
|
-
|
17
|
-
var _utils = require("../../utils");
|
18
|
-
|
19
|
-
var _messages = require("../../messages");
|
20
|
-
|
21
|
-
var _helpers = require("../helpers");
|
22
|
-
|
23
|
-
var _logger = require("../../logger");
|
24
|
-
|
25
|
-
var _shared = require("../../../shared");
|
26
|
-
|
27
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28
|
-
|
29
|
-
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); }
|
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; }
|
32
|
-
|
33
|
-
async function initStorybookEnvironment() {
|
34
|
-
// @ts-expect-error There is no @types/global-jsdom package
|
35
|
-
(await Promise.resolve().then(() => _interopRequireWildcard(require('global-jsdom')))).default(undefined, {
|
36
|
-
url: 'http://localhost'
|
37
|
-
}); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
|
38
|
-
// https://github.com/storybookjs/storybook/blob/v5.2.8/lib/core/src/client/preview/start.js#L98
|
39
|
-
// Example: "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/15.2.1"
|
40
|
-
|
41
|
-
Object.defineProperty(window.navigator, 'userAgent', {
|
42
|
-
value: window.navigator.userAgent.split(' ').filter(token => !token.startsWith('jsdom')).join(' ')
|
43
|
-
}); // TODO Look at creevey debug flag
|
44
|
-
|
45
|
-
const {
|
46
|
-
logger
|
47
|
-
} = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
|
48
|
-
|
49
|
-
if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
50
|
-
|
51
|
-
logger.debug = _types.noop;
|
52
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
53
|
-
}
|
54
|
-
|
55
|
-
function watchStories(channel, watcher, initialFiles) {
|
56
|
-
const watchingFiles = initialFiles;
|
57
|
-
let storiesByFiles = new Map();
|
58
|
-
(0, _messages.subscribeOn)('shutdown', () => void watcher.close());
|
59
|
-
watcher.add(Array.from(watchingFiles));
|
60
|
-
watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
61
|
-
watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
62
|
-
return data => {
|
63
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
|
64
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
65
|
-
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
66
|
-
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
67
|
-
watcher.add(addedFiles);
|
68
|
-
addedFiles.forEach(filePath => {
|
69
|
-
watchingFiles.add(filePath);
|
70
|
-
storiesByFiles.set(filePath, []);
|
71
|
-
});
|
72
|
-
removedFiles.forEach(filePath => watchingFiles.delete(filePath));
|
73
|
-
Object.values(stories).forEach(story => {
|
74
|
-
var _storiesByFiles$get;
|
75
|
-
|
76
|
-
return (_storiesByFiles$get = storiesByFiles.get(story.parameters.fileName)) === null || _storiesByFiles$get === void 0 ? void 0 : _storiesByFiles$get.push(story);
|
77
|
-
});
|
78
|
-
channel.emit('storiesUpdated', storiesByFiles);
|
79
|
-
storiesByFiles = new Map();
|
80
|
-
};
|
81
|
-
}
|
82
|
-
|
83
|
-
function loadStoriesFromBundle(watch) {
|
84
|
-
const bundlePath = _path.default.join((0, _utils.getCreeveyCache)(), 'storybook/main.js');
|
85
|
-
|
86
|
-
if (watch) {
|
87
|
-
(0, _messages.subscribeOn)('webpack', message => {
|
88
|
-
if (message.type != 'rebuild succeeded') return;
|
89
|
-
Object.values(global.__CREEVEY_HMR_DATA__).filter(({
|
90
|
-
callback
|
91
|
-
}) => callback).forEach(({
|
92
|
-
data,
|
93
|
-
callback
|
94
|
-
}) => callback(data));
|
95
|
-
delete require.cache[bundlePath];
|
96
|
-
Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
|
97
|
-
});
|
98
|
-
}
|
99
|
-
|
100
|
-
Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
|
101
|
-
}
|
102
|
-
|
103
|
-
async function loadStoriesDirectly(config, {
|
104
|
-
watcher,
|
105
|
-
debug
|
106
|
-
}) {
|
107
|
-
const {
|
108
|
-
toRequireContext,
|
109
|
-
normalizeStoriesEntry
|
110
|
-
} = await (0, _helpers.importStorybookCoreCommon)();
|
111
|
-
const {
|
112
|
-
addParameters,
|
113
|
-
configure
|
114
|
-
} = await Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
115
|
-
const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../loaders/babel/register')))).default(config, debug);
|
116
|
-
|
117
|
-
const preview = (() => {
|
118
|
-
try {
|
119
|
-
return require.resolve(`${config.storybookDir}/preview`);
|
120
|
-
} catch (_) {
|
121
|
-
/* noop */
|
122
|
-
}
|
123
|
-
})();
|
124
|
-
|
125
|
-
const {
|
126
|
-
stories
|
127
|
-
} = await (0, _helpers.importStorybookConfig)();
|
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
|
-
});
|
133
|
-
const {
|
134
|
-
path: storiesPath,
|
135
|
-
recursive,
|
136
|
-
match
|
137
|
-
} = toRequireContext(normalizedEntry);
|
138
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(_path.default.resolve(config.storybookDir, storiesPath));
|
139
|
-
return () => requireContext(storiesPath, recursive, new RegExp(match));
|
140
|
-
});
|
141
|
-
|
142
|
-
let disposeCallback = data => void data;
|
143
|
-
|
144
|
-
Object.assign(module, {
|
145
|
-
hot: {
|
146
|
-
data: {},
|
147
|
-
|
148
|
-
accept() {
|
149
|
-
/* noop */
|
150
|
-
},
|
151
|
-
|
152
|
-
dispose(callback) {
|
153
|
-
disposeCallback = callback;
|
154
|
-
}
|
155
|
-
|
156
|
-
}
|
157
|
-
});
|
158
|
-
|
159
|
-
async function startStorybook() {
|
160
|
-
if (preview) {
|
161
|
-
const {
|
162
|
-
parameters,
|
163
|
-
globals,
|
164
|
-
globalTypes
|
165
|
-
} = await Promise.resolve(`${preview}`).then(s => _interopRequireWildcard(require(s)));
|
166
|
-
if (parameters) addParameters(parameters);
|
167
|
-
if (globals) addParameters({
|
168
|
-
globals
|
169
|
-
});
|
170
|
-
if (globalTypes) addParameters({
|
171
|
-
globalTypes
|
172
|
-
});
|
173
|
-
}
|
174
|
-
|
175
|
-
try {
|
176
|
-
configure(contexts.map(ctx => ctx()), module, false);
|
177
|
-
} catch (error) {
|
178
|
-
if (_cluster.isMaster) _logger.logger.error(error);
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.add(config.storybookDir);
|
183
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.on('all', (_event, filename) => {
|
184
|
-
var _module$hot;
|
185
|
-
|
186
|
-
disposeCallback((_module$hot = module.hot) === null || _module$hot === void 0 ? void 0 : _module$hot.data);
|
187
|
-
delete require.cache[filename];
|
188
|
-
void startStorybook();
|
189
|
-
});
|
190
|
-
void startStorybook();
|
191
|
-
} // TODO Do we need to support multiple storybooks here?
|
192
|
-
|
193
|
-
|
194
|
-
async function loadStories(config, {
|
195
|
-
watch,
|
196
|
-
debug
|
197
|
-
}, storiesListener) {
|
198
|
-
const storybookApi = await initStorybookEnvironment();
|
199
|
-
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
200
|
-
const {
|
201
|
-
channel
|
202
|
-
} = storybookApi;
|
203
|
-
channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
|
204
|
-
channel.on('storiesUpdated', storiesListener);
|
205
|
-
let watcher;
|
206
|
-
if (watch) watcher = _chokidar.default.watch([], {
|
207
|
-
ignoreInitial: true
|
208
|
-
});
|
209
|
-
const loadPromise = new Promise(resolve => {
|
210
|
-
channel.once(Events.SET_STORIES, data => {
|
211
|
-
const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
|
212
|
-
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
213
|
-
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
214
|
-
resolve(stories);
|
215
|
-
});
|
216
|
-
});
|
217
|
-
if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
|
218
|
-
watcher,
|
219
|
-
debug
|
220
|
-
});
|
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;
|
239
|
-
}
|
package/lib/cjs/server/update.js
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = update;
|
7
|
-
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
9
|
-
|
10
|
-
var _fs = _interopRequireWildcard(require("fs"));
|
11
|
-
|
12
|
-
var _micromatch = _interopRequireDefault(require("micromatch"));
|
13
|
-
|
14
|
-
var _types = require("../types");
|
15
|
-
|
16
|
-
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); }
|
17
|
-
|
18
|
-
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; }
|
19
|
-
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
|
-
|
22
|
-
function tryToLoadTestsData(filename) {
|
23
|
-
try {
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
25
|
-
return require(filename);
|
26
|
-
} catch (_) {
|
27
|
-
/* noop */
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
|
32
|
-
|
33
|
-
function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
|
34
|
-
dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
|
35
|
-
var _images$get;
|
36
|
-
|
37
|
-
return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
|
38
|
-
}, new Map()).forEach((retry, imageName) => {
|
39
|
-
(0, _fs.mkdirSync)(dstPath, {
|
40
|
-
recursive: true
|
41
|
-
});
|
42
|
-
|
43
|
-
_fs.default.copyFileSync(_path.default.join(srcPath, `${imageName}-actual-${retry}.png`), _path.default.join(dstPath, `${imageName}.png`));
|
44
|
-
});
|
45
|
-
}
|
46
|
-
|
47
|
-
function traverse(srcPath, dstPath, testPaths, isMatch) {
|
48
|
-
const dirents = _fs.default.readdirSync(srcPath, {
|
49
|
-
withFileTypes: true
|
50
|
-
});
|
51
|
-
|
52
|
-
approve(dirents, srcPath, dstPath, testPaths, isMatch);
|
53
|
-
dirents.filter(dirent => dirent.isDirectory()).map(dirent => [dirent.name, testPaths === null || testPaths === void 0 ? void 0 : testPaths.map(([token, ...restPath]) => token == dirent.name ? restPath : null).filter(_types.isDefined)]).filter(([, paths]) => !paths || paths.length > 0).forEach(([dirname, paths]) => traverse(_path.default.join(srcPath, dirname), _path.default.join(dstPath, dirname), paths, isMatch));
|
54
|
-
}
|
55
|
-
|
56
|
-
function update(config, grepPattern) {
|
57
|
-
const {
|
58
|
-
reportDir,
|
59
|
-
screenDir
|
60
|
-
} = config;
|
61
|
-
const isMatch = grepPattern ? _micromatch.default.matcher(grepPattern, {
|
62
|
-
contains: true
|
63
|
-
}) : () => true;
|
64
|
-
const testsMeta = tryToLoadTestsData(`${reportDir}/tests.json`);
|
65
|
-
const testsReport = tryToLoadTestsData(`${reportDir}/data`);
|
66
|
-
let testPaths = null;
|
67
|
-
|
68
|
-
if (testsMeta && testsReport) {
|
69
|
-
testPaths = Object.values(testsMeta).filter(_types.isDefined).filter(({
|
70
|
-
id
|
71
|
-
}) => {
|
72
|
-
var _testsReport$id;
|
73
|
-
|
74
|
-
return ((_testsReport$id = testsReport[id]) === null || _testsReport$id === void 0 ? void 0 : _testsReport$id.status) == 'failed';
|
75
|
-
}).map(({
|
76
|
-
storyPath,
|
77
|
-
testName,
|
78
|
-
browser
|
79
|
-
}) => [...storyPath, ...(testName ? [testName] : []), browser]);
|
80
|
-
}
|
81
|
-
|
82
|
-
traverse(reportDir, screenDir, testPaths, value => isMatch(_path.default.relative(reportDir, value)));
|
83
|
-
}
|
package/lib/cjs/server/utils.js
DELETED
@@ -1,185 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.shouldSkip = shouldSkip;
|
7
|
-
exports.shutdownWorkers = shutdownWorkers;
|
8
|
-
exports.shutdown = shutdown;
|
9
|
-
exports.getCreeveyCache = getCreeveyCache;
|
10
|
-
exports.runSequence = runSequence;
|
11
|
-
exports.testsToImages = testsToImages;
|
12
|
-
exports.removeProps = removeProps;
|
13
|
-
exports.readDirRecursive = readDirRecursive;
|
14
|
-
exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
|
15
|
-
|
16
|
-
var _fs = require("fs");
|
17
|
-
|
18
|
-
var _cluster = _interopRequireDefault(require("cluster"));
|
19
|
-
|
20
|
-
var _types = require("../types");
|
21
|
-
|
22
|
-
var _messages = require("./messages");
|
23
|
-
|
24
|
-
var _findCacheDir = _interopRequireDefault(require("find-cache-dir"));
|
25
|
-
|
26
|
-
var _https = require("https");
|
27
|
-
|
28
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29
|
-
|
30
|
-
const isShuttingDown = {
|
31
|
-
current: false
|
32
|
-
};
|
33
|
-
exports.isShuttingDown = isShuttingDown;
|
34
|
-
const LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
|
35
|
-
exports.LOCALHOST_REGEXP = LOCALHOST_REGEXP;
|
36
|
-
const extensions = ['.js', '.jsx', '.ts', '.tsx'];
|
37
|
-
exports.extensions = extensions;
|
38
|
-
const skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
|
39
|
-
exports.skipOptionKeys = skipOptionKeys;
|
40
|
-
|
41
|
-
function matchBy(pattern, value) {
|
42
|
-
return typeof pattern == 'string' && pattern == value || Array.isArray(pattern) && pattern.includes(value) || pattern instanceof RegExp && pattern.test(value) || !(0, _types.isDefined)(pattern);
|
43
|
-
}
|
44
|
-
|
45
|
-
function shouldSkip(browser, meta, skipOptions, test) {
|
46
|
-
if (typeof skipOptions != 'object') {
|
47
|
-
return skipOptions;
|
48
|
-
}
|
49
|
-
|
50
|
-
if (Array.isArray(skipOptions)) {
|
51
|
-
for (const skip of skipOptions) {
|
52
|
-
const reason = shouldSkip(browser, meta, skip, test);
|
53
|
-
if (reason) return reason;
|
54
|
-
}
|
55
|
-
|
56
|
-
return false;
|
57
|
-
}
|
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;
|
75
|
-
const {
|
76
|
-
in: browsers,
|
77
|
-
kinds,
|
78
|
-
stories,
|
79
|
-
tests,
|
80
|
-
reason = true
|
81
|
-
} = skipOptions;
|
82
|
-
const {
|
83
|
-
kind,
|
84
|
-
story
|
85
|
-
} = meta;
|
86
|
-
const skipByBrowser = matchBy(browsers, browser);
|
87
|
-
const skipByKind = matchBy(kinds, kind);
|
88
|
-
const skipByStory = matchBy(stories, story);
|
89
|
-
const skipByTest = !(0, _types.isDefined)(test) || matchBy(tests, test);
|
90
|
-
return skipByBrowser && skipByKind && skipByStory && skipByTest && reason;
|
91
|
-
}
|
92
|
-
|
93
|
-
async function shutdownWorkers() {
|
94
|
-
isShuttingDown.current = true;
|
95
|
-
await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
96
|
-
const timeout = setTimeout(() => worker.kill(), 10000);
|
97
|
-
worker.on('exit', () => {
|
98
|
-
clearTimeout(timeout);
|
99
|
-
resolve();
|
100
|
-
});
|
101
|
-
(0, _messages.sendShutdownMessage)(worker);
|
102
|
-
})));
|
103
|
-
(0, _messages.emitShutdownMessage)();
|
104
|
-
}
|
105
|
-
|
106
|
-
function shutdown() {
|
107
|
-
// eslint-disable-next-line no-process-exit
|
108
|
-
process.exit();
|
109
|
-
}
|
110
|
-
|
111
|
-
function getCreeveyCache() {
|
112
|
-
return (0, _findCacheDir.default)({
|
113
|
-
name: 'creevey',
|
114
|
-
cwd: __dirname
|
115
|
-
});
|
116
|
-
}
|
117
|
-
|
118
|
-
async function runSequence(seq, predicate) {
|
119
|
-
for (const fn of seq) {
|
120
|
-
if (predicate()) await fn();
|
121
|
-
}
|
122
|
-
}
|
123
|
-
|
124
|
-
function testsToImages(tests) {
|
125
|
-
return new Set([].concat(...tests.filter(_types.isDefined).map(({
|
126
|
-
browser,
|
127
|
-
testName,
|
128
|
-
storyPath,
|
129
|
-
results
|
130
|
-
}) => {
|
131
|
-
var _results$slice$0$imag, _results$slice$;
|
132
|
-
|
133
|
-
return Object.keys((_results$slice$0$imag = results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) !== null && _results$slice$0$imag !== void 0 ? _results$slice$0$imag : {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
|
134
|
-
})));
|
135
|
-
} // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
|
136
|
-
|
137
|
-
|
138
|
-
const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0, _fs.readFileSync)('/proc/1/cgroup', 'utf8'));
|
139
|
-
exports.isInsideDocker = isInsideDocker;
|
140
|
-
|
141
|
-
const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
|
142
|
-
var _response$statusCode2;
|
143
|
-
|
144
|
-
if (response.statusCode == 302) {
|
145
|
-
var _response$statusCode;
|
146
|
-
|
147
|
-
const {
|
148
|
-
location
|
149
|
-
} = response.headers;
|
150
|
-
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode = response.statusCode) !== null && _response$statusCode !== void 0 ? _response$statusCode : 'UNKNOWN'}`));
|
151
|
-
return resolve(downloadBinary(location, destination));
|
152
|
-
}
|
153
|
-
|
154
|
-
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode2 = response.statusCode) !== null && _response$statusCode2 !== void 0 ? _response$statusCode2 : 'UNKNOWN'}`));
|
155
|
-
const fileStream = (0, _fs.createWriteStream)(destination);
|
156
|
-
response.pipe(fileStream);
|
157
|
-
fileStream.on('finish', () => {
|
158
|
-
fileStream.close();
|
159
|
-
resolve();
|
160
|
-
});
|
161
|
-
fileStream.on('error', error => {
|
162
|
-
(0, _fs.unlink)(destination, _types.noop);
|
163
|
-
reject(error);
|
164
|
-
});
|
165
|
-
}));
|
166
|
-
|
167
|
-
exports.downloadBinary = downloadBinary;
|
168
|
-
|
169
|
-
function removeProps(obj, propPath) {
|
170
|
-
const [prop, ...restPath] = propPath;
|
171
|
-
|
172
|
-
if (restPath.length > 0) {
|
173
|
-
if (typeof prop == 'string') obj[prop] && removeProps(obj[prop], restPath);
|
174
|
-
if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => obj[key] && removeProps(obj[key], restPath));
|
175
|
-
} else {
|
176
|
-
if (typeof prop == 'string') delete obj[prop];
|
177
|
-
if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => delete obj[key]);
|
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}`]));
|
185
|
-
}
|