creevey 0.9.0-beta.0 → 0.9.0-beta.10
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 +51 -0
- package/README.md +9 -1
- package/addon/README.md +3 -0
- package/addon/package.json +5 -0
- package/docs/config.md +29 -26
- package/jest.config.js +6 -0
- package/lib/cjs/client/addon/Manager.js +122 -270
- package/lib/cjs/client/addon/components/Addon.js +17 -38
- package/lib/cjs/client/addon/components/Icons.js +11 -7
- package/lib/cjs/client/addon/components/Panel.js +17 -13
- package/lib/cjs/client/addon/components/TestSelect.js +11 -9
- package/lib/cjs/client/addon/components/Tools.js +22 -41
- package/lib/cjs/client/addon/decorator.js +1 -1
- package/lib/cjs/client/addon/index.js +31 -0
- package/lib/cjs/client/addon/preset.ie11.js +74 -0
- package/lib/cjs/client/addon/preset.js +4 -68
- package/lib/cjs/client/addon/preset.sb7.js +19 -0
- package/lib/cjs/client/addon/preview.js +14 -0
- package/lib/cjs/client/addon/register.js +46 -70
- package/lib/cjs/client/addon/utils.js +6 -2
- package/lib/cjs/client/addon/withCreevey.js +161 -366
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
- package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
- package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
- package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
- package/lib/cjs/client/shared/helpers.js +139 -210
- package/lib/cjs/client/shared/viewMode.js +5 -5
- package/lib/cjs/client/web/142.js +2 -0
- package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
- package/lib/cjs/client/web/32.js +1 -0
- package/lib/cjs/client/web/551.js +1 -0
- package/lib/cjs/client/web/566.js +2 -0
- package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
- package/lib/cjs/client/web/691.js +2 -0
- package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
- package/lib/cjs/client/web/725.js +1 -0
- package/lib/cjs/client/web/main.js +2 -38
- package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
- package/lib/cjs/creevey.js +3 -5
- package/lib/cjs/index.js +5 -5
- package/lib/cjs/server/config.js +3 -5
- package/lib/cjs/server/docker.js +3 -7
- package/lib/cjs/server/extract.js +1 -5
- package/lib/cjs/server/index.js +1 -1
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/cjs/server/loaders/babel/helpers.js +13 -23
- package/lib/cjs/server/loaders/babel/register.js +2 -4
- package/lib/cjs/server/loaders/webpack/compile.js +34 -51
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +20 -22
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +2 -2
- package/lib/cjs/server/loaders/webpack/start.js +1 -1
- package/lib/cjs/server/logger.js +2 -1
- package/lib/cjs/server/master/index.js +2 -2
- package/lib/cjs/server/master/pool.js +9 -18
- package/lib/cjs/server/master/runner.js +53 -66
- package/lib/cjs/server/master/server.js +5 -3
- package/lib/cjs/server/messages.js +8 -10
- package/lib/cjs/server/selenium/browser.js +58 -70
- package/lib/cjs/server/selenium/selenoid.js +5 -7
- package/lib/cjs/server/stories.js +16 -33
- package/lib/cjs/server/storybook/entry.js +7 -22
- package/lib/cjs/server/storybook/helpers.js +21 -28
- package/lib/cjs/server/storybook/providers/browser.js +10 -14
- package/lib/cjs/server/storybook/providers/hybrid.js +17 -14
- package/lib/cjs/server/storybook/providers/nodejs.js +12 -12
- package/lib/cjs/server/{parser.js → testsFiles/parser.js} +1 -14
- package/lib/cjs/server/testsFiles/register.js +44 -0
- package/lib/cjs/server/update.js +1 -5
- package/lib/cjs/server/utils.js +27 -36
- package/lib/cjs/server/worker/reporter.js +8 -20
- package/lib/cjs/server/worker/worker.js +9 -19
- package/lib/cjs/shared/index.js +101 -0
- package/lib/cjs/shared/serializeRegExp.js +42 -0
- package/lib/cjs/types.js +7 -6
- package/lib/esm/client/addon/Manager.js +122 -270
- package/lib/esm/client/addon/components/Addon.js +15 -34
- package/lib/esm/client/addon/components/Icons.js +10 -6
- package/lib/esm/client/addon/components/Panel.js +17 -13
- package/lib/esm/client/addon/components/TestSelect.js +11 -9
- package/lib/esm/client/addon/components/Tools.js +20 -37
- package/lib/esm/client/addon/decorator.js +1 -1
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.ie11.js +59 -0
- package/lib/esm/client/addon/preset.js +4 -52
- package/lib/esm/client/addon/preset.sb7.js +8 -0
- package/lib/esm/client/addon/preview.js +5 -0
- package/lib/esm/client/addon/register.js +42 -66
- package/lib/esm/client/addon/utils.js +3 -2
- package/lib/esm/client/addon/withCreevey.js +156 -363
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
- package/lib/esm/client/shared/components/ResultsPage.js +36 -64
- package/lib/esm/client/shared/creeveyClientApi.js +57 -84
- package/lib/esm/client/shared/helpers.js +123 -194
- package/lib/esm/client/shared/viewMode.js +4 -4
- package/lib/esm/creevey.js +3 -5
- package/lib/esm/index.js +2 -4
- package/lib/esm/server/config.js +3 -5
- package/lib/esm/server/docker.js +2 -2
- package/lib/esm/server/extract.js +1 -3
- package/lib/esm/server/index.js +1 -1
- package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
- package/lib/esm/server/loaders/babel/helpers.js +12 -22
- package/lib/esm/server/loaders/babel/register.js +3 -5
- package/lib/esm/server/loaders/webpack/compile.js +35 -52
- package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -10
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
- package/lib/esm/server/loaders/webpack/mdx-loader.js +2 -2
- package/lib/esm/server/loaders/webpack/start.js +1 -1
- package/lib/esm/server/master/index.js +2 -2
- package/lib/esm/server/master/pool.js +7 -18
- package/lib/esm/server/master/runner.js +53 -66
- package/lib/esm/server/master/server.js +5 -3
- package/lib/esm/server/messages.js +3 -5
- package/lib/esm/server/selenium/browser.js +54 -66
- package/lib/esm/server/selenium/selenoid.js +4 -6
- package/lib/esm/server/stories.js +16 -32
- package/lib/esm/server/storybook/entry.js +5 -22
- package/lib/esm/server/storybook/helpers.js +12 -21
- package/lib/esm/server/storybook/providers/browser.js +6 -9
- package/lib/esm/server/storybook/providers/hybrid.js +10 -13
- package/lib/esm/server/storybook/providers/nodejs.js +10 -11
- package/lib/esm/server/{parser.js → testsFiles/parser.js} +1 -14
- package/lib/esm/server/testsFiles/register.js +31 -0
- package/lib/esm/server/update.js +1 -5
- package/lib/esm/server/utils.js +18 -31
- package/lib/esm/server/worker/reporter.js +8 -20
- package/lib/esm/server/worker/worker.js +9 -19
- package/lib/esm/shared/index.js +78 -0
- package/lib/esm/shared/serializeRegExp.js +24 -0
- package/lib/esm/types.js +1 -0
- package/lib/types/client/addon/Manager.d.ts +2 -2
- package/lib/types/client/addon/components/TestSelect.d.ts +0 -1
- package/lib/types/client/addon/index.d.ts +2 -0
- package/lib/types/client/addon/preset.d.ts +0 -22
- package/lib/types/client/addon/preset.ie11.d.ts +10 -0
- package/lib/types/client/addon/preset.sb7.d.ts +2 -0
- package/lib/types/client/addon/preview.d.ts +4 -0
- package/lib/types/client/addon/utils.d.ts +1 -0
- package/lib/types/client/addon/withCreevey.d.ts +1 -1
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +1 -1
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +0 -1
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +1 -1
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +1 -1
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +1 -1
- package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +0 -1
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +0 -1
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +1 -1
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +0 -1
- package/lib/types/client/shared/components/ResultsPage.d.ts +1 -1
- package/lib/types/client/web/CreeveyApp.d.ts +0 -1
- package/lib/types/client/web/CreeveyLoader.d.ts +1 -2
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +1 -1
- package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +0 -1
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +4 -4
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +0 -1
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +1 -1
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +1 -1
- package/lib/types/index.d.ts +4 -2
- package/lib/types/server/config.d.ts +1 -1
- package/lib/types/server/loaders/babel/register.d.ts +1 -1
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
- package/lib/types/server/logger.d.ts +6 -2
- package/lib/types/server/messages.d.ts +13 -12
- package/lib/types/server/selenium/browser.d.ts +5 -3
- package/lib/types/server/storybook/entry.d.ts +2 -3
- package/lib/types/server/storybook/helpers.d.ts +1 -1
- package/lib/types/server/storybook/providers/browser.d.ts +2 -4
- package/lib/types/server/storybook/providers/hybrid.d.ts +2 -4
- package/lib/types/server/storybook/providers/nodejs.d.ts +3 -3
- 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/server/utils.d.ts +5 -1
- package/lib/types/{shared.d.ts → shared/index.d.ts} +1 -10
- package/lib/types/shared/serializeRegExp.d.ts +9 -0
- package/lib/types/types.d.ts +7 -9
- package/package.json +119 -102
- package/preset/ie11.js +5 -0
- package/{preset.js → preset/index.js} +2 -2
- package/preset/sb7.js +5 -0
- package/types/global.d.ts +5 -0
- package/types/mdx.d.ts +3 -2
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/lib/cjs/shared.js +0 -107
- package/lib/esm/shared.js +0 -76
- package/storybook-static/stories.json +0 -21
@@ -3,30 +3,24 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.loadStories =
|
6
|
+
exports.loadStories = void 0;
|
7
7
|
|
8
|
-
var _cluster =
|
8
|
+
var _cluster = _interopRequireDefault(require("cluster"));
|
9
9
|
|
10
10
|
var _selenium = require("../../selenium");
|
11
11
|
|
12
12
|
var _messages = require("../../messages");
|
13
13
|
|
14
|
-
var _shared = require("../../../shared");
|
15
|
-
|
16
14
|
var _types = require("../../../types");
|
17
15
|
|
18
16
|
var _logger = require("../../logger");
|
19
17
|
|
20
|
-
function
|
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; }
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23
19
|
|
24
|
-
async
|
25
|
-
|
26
|
-
}, storiesListener) {
|
27
|
-
if (_cluster.isMaster) {
|
20
|
+
const loadStories = async (_config, _options, storiesListener) => {
|
21
|
+
if (_cluster.default.isPrimary) {
|
28
22
|
return new Promise(resolve => {
|
29
|
-
const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
|
23
|
+
const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
|
30
24
|
|
31
25
|
if (worker) {
|
32
26
|
const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
|
@@ -61,7 +55,7 @@ async function loadStories(_config, {
|
|
61
55
|
});
|
62
56
|
if (message.type == 'update') storiesListener(new Map(message.payload));
|
63
57
|
});
|
64
|
-
const stories =
|
58
|
+
const stories = await (0, _selenium.loadStoriesFromBrowser)();
|
65
59
|
const storiesWithOldTests = [];
|
66
60
|
Object.values(stories).forEach(story => {
|
67
61
|
var _parameters, _parameters$creevey;
|
@@ -75,4 +69,6 @@ async function loadStories(_config, {
|
|
75
69
|
});
|
76
70
|
return stories;
|
77
71
|
}
|
78
|
-
}
|
72
|
+
};
|
73
|
+
|
74
|
+
exports.loadStories = loadStories;
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.loadStories =
|
6
|
+
exports.loadStories = void 0;
|
7
7
|
|
8
8
|
var _chokidar = _interopRequireDefault(require("chokidar"));
|
9
9
|
|
@@ -11,7 +11,7 @@ var _browser = require("./browser");
|
|
11
11
|
|
12
12
|
var _logger = require("../../logger");
|
13
13
|
|
14
|
-
var _parser = _interopRequireDefault(require("../../parser"));
|
14
|
+
var _parser = _interopRequireDefault(require("../../testsFiles/parser"));
|
15
15
|
|
16
16
|
var _utils = require("../../../server/utils");
|
17
17
|
|
@@ -19,9 +19,11 @@ var _shared = require("../../../shared");
|
|
19
19
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
},
|
22
|
+
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); }
|
23
|
+
|
24
|
+
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; }
|
25
|
+
|
26
|
+
const loadStories = async (_config, _options, storiesListener) => {
|
25
27
|
let creeveyParamsByStoryId = {};
|
26
28
|
|
27
29
|
const mergeParamsFromTestsToStory = (story, creeveyParams) => {
|
@@ -30,9 +32,7 @@ async function loadStories(_config, {
|
|
30
32
|
}
|
31
33
|
};
|
32
34
|
|
33
|
-
const stories = await (0, _browser.loadStories)(_config, {
|
34
|
-
port
|
35
|
-
}, updatedStoriesByFiles => {
|
35
|
+
const stories = await (0, _browser.loadStories)(_config, {}, updatedStoriesByFiles => {
|
36
36
|
Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
|
37
37
|
storiesArray.forEach(story => {
|
38
38
|
const creeveyParams = creeveyParamsByStoryId[story.id];
|
@@ -52,18 +52,21 @@ async function loadStories(_config, {
|
|
52
52
|
mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
|
53
53
|
});
|
54
54
|
return stories;
|
55
|
-
}
|
55
|
+
};
|
56
|
+
|
57
|
+
exports.loadStories = loadStories;
|
56
58
|
|
57
|
-
function parseParams(config, listener) {
|
58
|
-
if (!config.
|
59
|
+
async function parseParams(config, listener) {
|
60
|
+
if (!config.testsDir) {
|
59
61
|
return Promise.resolve({});
|
60
62
|
}
|
61
63
|
|
62
|
-
const testFiles = (0, _utils.readDirRecursive)(config.
|
63
|
-
var _config$
|
64
|
+
const testFiles = (0, _utils.readDirRecursive)(config.testsDir).filter(file => {
|
65
|
+
var _config$testsRegex;
|
64
66
|
|
65
|
-
return (_config$
|
67
|
+
return (_config$testsRegex = config.testsRegex) === null || _config$testsRegex === void 0 ? void 0 : _config$testsRegex.test(file);
|
66
68
|
});
|
69
|
+
await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../testsFiles/register')))).default(config);
|
67
70
|
|
68
71
|
if (listener) {
|
69
72
|
_chokidar.default.watch(testFiles).on('change', filePath => {
|
@@ -3,12 +3,12 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.loadStories = loadStories;
|
7
6
|
exports.extractStoriesData = extractStoriesData;
|
7
|
+
exports.loadStories = void 0;
|
8
8
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
10
10
|
|
11
|
-
var _cluster = require("cluster");
|
11
|
+
var _cluster = _interopRequireDefault(require("cluster"));
|
12
12
|
|
13
13
|
var _chokidar = _interopRequireDefault(require("chokidar"));
|
14
14
|
|
@@ -22,8 +22,6 @@ var _helpers = require("../helpers");
|
|
22
22
|
|
23
23
|
var _logger = require("../../logger");
|
24
24
|
|
25
|
-
var _shared = require("../../../shared");
|
26
|
-
|
27
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28
26
|
|
29
27
|
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); }
|
@@ -46,7 +44,7 @@ async function initStorybookEnvironment() {
|
|
46
44
|
logger
|
47
45
|
} = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
|
48
46
|
|
49
|
-
if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
47
|
+
if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
|
50
48
|
|
51
49
|
logger.debug = _types.noop;
|
52
50
|
return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
|
@@ -60,7 +58,7 @@ function watchStories(channel, watcher, initialFiles) {
|
|
60
58
|
watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
61
59
|
watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
|
62
60
|
return data => {
|
63
|
-
const stories =
|
61
|
+
const stories = data.stories;
|
64
62
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
65
63
|
const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
|
66
64
|
const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
|
@@ -126,7 +124,7 @@ async function loadStoriesDirectly(config, {
|
|
126
124
|
stories
|
127
125
|
} = await (0, _helpers.importStorybookConfig)();
|
128
126
|
const contexts = stories.map(entry => {
|
129
|
-
const normalizedEntry =
|
127
|
+
const normalizedEntry = normalizeStoriesEntry(entry, {
|
130
128
|
configDir: config.storybookDir,
|
131
129
|
workingDir: process.cwd()
|
132
130
|
});
|
@@ -175,7 +173,7 @@ async function loadStoriesDirectly(config, {
|
|
175
173
|
try {
|
176
174
|
configure(contexts.map(ctx => ctx()), module, false);
|
177
175
|
} catch (error) {
|
178
|
-
if (_cluster.
|
176
|
+
if (_cluster.default.isPrimary) _logger.logger.error(error);
|
179
177
|
}
|
180
178
|
}
|
181
179
|
|
@@ -191,10 +189,10 @@ async function loadStoriesDirectly(config, {
|
|
191
189
|
} // TODO Do we need to support multiple storybooks here?
|
192
190
|
|
193
191
|
|
194
|
-
async
|
192
|
+
const loadStories = async (config, {
|
195
193
|
watch,
|
196
194
|
debug
|
197
|
-
}, storiesListener) {
|
195
|
+
}, storiesListener) => {
|
198
196
|
const storybookApi = await initStorybookEnvironment();
|
199
197
|
const Events = await (0, _helpers.importStorybookCoreEvents)();
|
200
198
|
const {
|
@@ -208,7 +206,7 @@ async function loadStories(config, {
|
|
208
206
|
});
|
209
207
|
const loadPromise = new Promise(resolve => {
|
210
208
|
channel.once(Events.SET_STORIES, data => {
|
211
|
-
const stories =
|
209
|
+
const stories = data.stories;
|
212
210
|
const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
|
213
211
|
if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
|
214
212
|
resolve(stories);
|
@@ -219,7 +217,9 @@ async function loadStories(config, {
|
|
219
217
|
debug
|
220
218
|
});
|
221
219
|
return loadPromise;
|
222
|
-
}
|
220
|
+
};
|
221
|
+
|
222
|
+
exports.loadStories = loadStories;
|
223
223
|
|
224
224
|
async function extractStoriesData(config, {
|
225
225
|
watch,
|
@@ -13,20 +13,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
13
13
|
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; }
|
14
14
|
|
15
15
|
async function parse(files) {
|
16
|
-
result = {};
|
17
|
-
|
18
|
-
(await Promise.resolve().then(() => _interopRequireWildcard(require('@babel/register')))).default({
|
19
|
-
babelrc: false,
|
20
|
-
rootMode: 'upward-optional',
|
21
|
-
ignore: [/node_modules/],
|
22
|
-
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
23
|
-
plugins: [['@babel/plugin-transform-runtime']],
|
24
|
-
presets: ['@babel/preset-typescript', ['@babel/preset-env', {
|
25
|
-
targets: {
|
26
|
-
node: '10'
|
27
|
-
}
|
28
|
-
}]]
|
29
|
-
});
|
16
|
+
result = {};
|
30
17
|
await Promise.all(files.map(async file => Promise.resolve(`${file}`).then(s => _interopRequireWildcard(require(s)))));
|
31
18
|
return result;
|
32
19
|
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = register;
|
7
|
+
|
8
|
+
var _pirates = require("pirates");
|
9
|
+
|
10
|
+
var _getTsconfig = require("get-tsconfig");
|
11
|
+
|
12
|
+
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); }
|
13
|
+
|
14
|
+
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; }
|
15
|
+
|
16
|
+
async function register(config) {
|
17
|
+
(0, _pirates.addHook)(() => '', {
|
18
|
+
exts: ['.jpg', '.jpeg', '.png', '.gif', '.eot', '.otf', '.svg', '.ttf', '.woff', '.woff2', '.css', '.less', '.scss', '.styl'],
|
19
|
+
ignoreNodeModules: false
|
20
|
+
});
|
21
|
+
const {
|
22
|
+
path: tsConfigPath
|
23
|
+
} = (0, _getTsconfig.getTsconfig)(config.tsConfig) || {}; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
24
|
+
|
25
|
+
(await Promise.resolve().then(() => _interopRequireWildcard(require('@babel/register')))).default(config.babelOptions({
|
26
|
+
babelrc: false,
|
27
|
+
rootMode: 'upward-optional',
|
28
|
+
ignore: [/node_modules/],
|
29
|
+
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
30
|
+
parserOpts: {
|
31
|
+
sourceType: 'module',
|
32
|
+
plugins: ['jsx', 'typescript']
|
33
|
+
},
|
34
|
+
presets: ['@babel/preset-typescript', ['@babel/preset-env', {
|
35
|
+
targets: {
|
36
|
+
node: '10'
|
37
|
+
},
|
38
|
+
modules: 'commonjs'
|
39
|
+
}]],
|
40
|
+
plugins: [['@babel/plugin-transform-runtime'], ...(tsConfigPath ? [['babel-plugin-tsconfig-paths', {
|
41
|
+
tsconfig: tsConfigPath
|
42
|
+
}]] : [])]
|
43
|
+
})); // (await import('ts-node')).register({ project: tsConfigPath, transpileOnly: true });
|
44
|
+
}
|
package/lib/cjs/server/update.js
CHANGED
@@ -31,11 +31,7 @@ function tryToLoadTestsData(filename) {
|
|
31
31
|
const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
|
32
32
|
|
33
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) => {
|
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]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
|
39
35
|
(0, _fs.mkdirSync)(dstPath, {
|
40
36
|
recursive: true
|
41
37
|
});
|
package/lib/cjs/server/utils.js
CHANGED
@@ -3,15 +3,18 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
exports.shutdownWorkers = shutdownWorkers;
|
8
|
-
exports.shutdown = shutdown;
|
6
|
+
exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
|
9
7
|
exports.getCreeveyCache = getCreeveyCache;
|
8
|
+
exports.isShuttingDown = exports.isInsideDocker = void 0;
|
9
|
+
exports.readDirRecursive = readDirRecursive;
|
10
|
+
exports.removeProps = removeProps;
|
10
11
|
exports.runSequence = runSequence;
|
12
|
+
exports.shouldSkip = shouldSkip;
|
13
|
+
exports.shouldSkipByOption = shouldSkipByOption;
|
14
|
+
exports.shutdown = shutdown;
|
15
|
+
exports.shutdownWorkers = shutdownWorkers;
|
16
|
+
exports.skipOptionKeys = void 0;
|
11
17
|
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
18
|
|
16
19
|
var _fs = require("fs");
|
17
20
|
|
@@ -47,38 +50,30 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
47
50
|
return skipOptions;
|
48
51
|
}
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
if (reason) return reason;
|
54
|
-
}
|
55
|
-
|
56
|
-
return false;
|
53
|
+
for (const skipKey in skipOptions) {
|
54
|
+
const reason = shouldSkipByOption(browser, meta, skipOptions[skipKey], skipKey, test);
|
55
|
+
if (reason) return reason;
|
57
56
|
}
|
58
57
|
|
59
|
-
|
58
|
+
return false;
|
59
|
+
}
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
function shouldSkipByOption(browser, meta, skipOption, reason, test) {
|
62
|
+
if (Array.isArray(skipOption)) {
|
63
|
+
for (const skip of skipOption) {
|
64
|
+
const result = shouldSkipByOption(browser, meta, skip, reason, test);
|
65
|
+
if (result) return result;
|
65
66
|
}
|
66
67
|
|
67
|
-
|
68
|
-
reason: skipKey,
|
69
|
-
...skipOptions[skipKey]
|
70
|
-
}, test);
|
71
|
-
if (reason) return reason;
|
68
|
+
return false;
|
72
69
|
}
|
73
70
|
|
74
|
-
if (!hasSkipOptionKeys) return false;
|
75
71
|
const {
|
76
72
|
in: browsers,
|
77
73
|
kinds,
|
78
74
|
stories,
|
79
|
-
tests
|
80
|
-
|
81
|
-
} = skipOptions;
|
75
|
+
tests
|
76
|
+
} = skipOption;
|
82
77
|
const {
|
83
78
|
kind,
|
84
79
|
story
|
@@ -92,7 +87,7 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
92
87
|
|
93
88
|
async function shutdownWorkers() {
|
94
89
|
isShuttingDown.current = true;
|
95
|
-
await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
90
|
+
await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
96
91
|
const timeout = setTimeout(() => worker.kill(), 10000);
|
97
92
|
worker.on('exit', () => {
|
98
93
|
clearTimeout(timeout);
|
@@ -128,9 +123,9 @@ function testsToImages(tests) {
|
|
128
123
|
storyPath,
|
129
124
|
results
|
130
125
|
}) => {
|
131
|
-
var _results$slice
|
126
|
+
var _results$slice$;
|
132
127
|
|
133
|
-
return Object.keys((
|
128
|
+
return Object.keys((results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
|
134
129
|
})));
|
135
130
|
} // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
|
136
131
|
|
@@ -139,19 +134,15 @@ const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0
|
|
139
134
|
exports.isInsideDocker = isInsideDocker;
|
140
135
|
|
141
136
|
const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
|
142
|
-
var _response$statusCode2;
|
143
|
-
|
144
137
|
if (response.statusCode == 302) {
|
145
|
-
var _response$statusCode;
|
146
|
-
|
147
138
|
const {
|
148
139
|
location
|
149
140
|
} = response.headers;
|
150
|
-
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${
|
141
|
+
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
151
142
|
return resolve(downloadBinary(location, destination));
|
152
143
|
}
|
153
144
|
|
154
|
-
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${
|
145
|
+
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
155
146
|
const fileStream = (0, _fs.createWriteStream)(destination);
|
156
147
|
response.pipe(fileStream);
|
157
148
|
fileStream.on('finish', () => {
|
@@ -17,8 +17,6 @@ var _logger = require("../logger");
|
|
17
17
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19
19
|
|
20
|
-
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; }
|
21
|
-
|
22
20
|
const testLevels = {
|
23
21
|
INFO: _chalk.default.green('PASS'),
|
24
22
|
WARN: _chalk.default.yellow('START'),
|
@@ -43,11 +41,7 @@ class CreeveyReporter extends _mocha.reporters.Base {
|
|
43
41
|
|
44
42
|
runner.on('test', test => testLogger.warn(_chalk.default.cyan(test.titlePath().join('/'))));
|
45
43
|
runner.on('pass', test => testLogger.info(_chalk.default.cyan(test.titlePath().join('/'))));
|
46
|
-
runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName
|
47
|
-
var _error$stack;
|
48
|
-
|
49
|
-
return `${(_error$stack = error.stack) !== null && _error$stack !== void 0 ? _error$stack : error.message}`;
|
50
|
-
}).join('\n ')));
|
44
|
+
runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName ?? topLevelSuite)}:${error}`, error => `${error.stack ?? error.message}`).join('\n ')));
|
51
45
|
}
|
52
46
|
|
53
47
|
}
|
@@ -57,20 +51,11 @@ exports.CreeveyReporter = CreeveyReporter;
|
|
57
51
|
class TeamcityReporter extends _mocha.reporters.Base {
|
58
52
|
constructor(runner, options) {
|
59
53
|
super(runner);
|
60
|
-
|
61
|
-
_defineProperty(this, "escape", str => {
|
62
|
-
if (!str) return '';
|
63
|
-
return str.toString() // eslint-disable-next-line no-control-regex
|
64
|
-
.replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
|
65
|
-
});
|
66
|
-
|
67
54
|
const topLevelSuite = this.escape(options.reporterOptions.topLevelSuite);
|
68
55
|
const reporterOptions = options.reporterOptions;
|
69
56
|
runner.on('suite', suite => suite.root ? console.log(`##teamcity[testSuiteStarted name='${topLevelSuite}' flowId='${process.pid}']`) : console.log(`##teamcity[testSuiteStarted name='${this.escape(suite.title)}' flowId='${process.pid}']`));
|
70
57
|
runner.on('test', test => console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`));
|
71
58
|
runner.on('fail', (test, error) => {
|
72
|
-
var _error$stack2;
|
73
|
-
|
74
59
|
Object.entries(reporterOptions.images).forEach(([name, image]) => {
|
75
60
|
if (!image) return;
|
76
61
|
const filePath = test.titlePath().concat(name == topLevelSuite ? [] : [topLevelSuite]).map(this.escape).join('/'); // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
@@ -86,7 +71,7 @@ class TeamcityReporter extends _mocha.reporters.Base {
|
|
86
71
|
}); // Output failed test as passed due TC don't support retry mechanic
|
87
72
|
// https://teamcity-support.jetbrains.com/hc/en-us/community/posts/207216829-Count-test-as-successful-if-at-least-one-try-is-successful?page=1#community_comment_207394125
|
88
73
|
|
89
|
-
reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(
|
74
|
+
reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(error.stack ?? '')}' flowId='${process.pid}']`);
|
90
75
|
});
|
91
76
|
runner.on('pending', test => console.log(`##teamcity[testIgnored name='${this.escape(test.title)}' message='${this.escape(typeof test.skipReason == 'boolean' ? test.title : test.skipReason)}' flowId='${process.pid}']`));
|
92
77
|
runner.on('test end', test => console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`));
|
@@ -94,6 +79,11 @@ class TeamcityReporter extends _mocha.reporters.Base {
|
|
94
79
|
runner.on('end', () => console.log(`##teamcity[testSuiteFinished name='${topLevelSuite}' flowId='${process.pid}']`));
|
95
80
|
}
|
96
81
|
|
82
|
+
escape = str => {
|
83
|
+
if (!str) return '';
|
84
|
+
return str.toString() // eslint-disable-next-line no-control-regex
|
85
|
+
.replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
|
86
|
+
};
|
97
87
|
}
|
98
88
|
|
99
89
|
exports.TeamcityReporter = TeamcityReporter;
|
@@ -110,9 +100,7 @@ function getErrors(error, imageErrorToString, errorToString) {
|
|
110
100
|
} else {
|
111
101
|
const imageErrors = error.images;
|
112
102
|
Object.keys(imageErrors).forEach(imageName => {
|
113
|
-
|
114
|
-
|
115
|
-
errors.push(imageErrorToString((_imageErrors$imageNam = imageErrors[imageName]) !== null && _imageErrors$imageNam !== void 0 ? _imageErrors$imageNam : '', imageName));
|
103
|
+
errors.push(imageErrorToString(imageErrors[imageName] ?? '', imageName));
|
116
104
|
});
|
117
105
|
}
|
118
106
|
|
@@ -57,9 +57,7 @@ async function getLastImageNumber(imageDir, imageName) {
|
|
57
57
|
const actualImagesRegexp = new RegExp(`${imageName}-actual-(\\d+)\\.png`);
|
58
58
|
|
59
59
|
try {
|
60
|
-
|
61
|
-
|
62
|
-
return (_await$readdirAsync$m = (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0]) !== null && _await$readdirAsync$m !== void 0 ? _await$readdirAsync$m : 0;
|
60
|
+
return (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0] ?? 0;
|
63
61
|
} catch (_error) {
|
64
62
|
return 0;
|
65
63
|
}
|
@@ -77,8 +75,6 @@ async function worker(config, options) {
|
|
77
75
|
|
78
76
|
function runHandler(failures) {
|
79
77
|
if (failures > 0 && (error || Object.values(images).some(image => (image === null || image === void 0 ? void 0 : image.error) != null))) {
|
80
|
-
var _error2;
|
81
|
-
|
82
78
|
const isTimeout = hasTimeout(error) || Object.values(images).some(image => hasTimeout(image === null || image === void 0 ? void 0 : image.error));
|
83
79
|
const payload = {
|
84
80
|
status: 'failed',
|
@@ -88,7 +84,7 @@ async function worker(config, options) {
|
|
88
84
|
isTimeout ? (0, _messages.emitWorkerMessage)({
|
89
85
|
type: 'error',
|
90
86
|
payload: {
|
91
|
-
error:
|
87
|
+
error: error ?? 'Unknown error'
|
92
88
|
}
|
93
89
|
}) : (0, _messages.emitTestMessage)({
|
94
90
|
type: 'end',
|
@@ -119,20 +115,18 @@ async function worker(config, options) {
|
|
119
115
|
}
|
120
116
|
|
121
117
|
async function getExpected(assertImageName) {
|
122
|
-
var _images$imageName;
|
123
|
-
|
124
118
|
// context => [kind, story, test, browser]
|
125
119
|
// rootSuite -> kindSuite -> storyTest -> [browsers.png]
|
126
120
|
// rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
|
127
121
|
const testPath = [...testScope];
|
128
|
-
const imageName = assertImageName
|
122
|
+
const imageName = assertImageName ?? testPath.pop();
|
129
123
|
const imagesMeta = [];
|
130
124
|
|
131
125
|
const reportImageDir = _path.default.join(config.reportDir, ...testPath);
|
132
126
|
|
133
127
|
const imageNumber = (await getLastImageNumber(reportImageDir, imageName)) + 1;
|
134
128
|
const actualImageName = `${imageName}-actual-${imageNumber}.png`;
|
135
|
-
const image = images[imageName] =
|
129
|
+
const image = images[imageName] = images[imageName] ?? {
|
136
130
|
actual: actualImageName
|
137
131
|
};
|
138
132
|
|
@@ -195,14 +189,12 @@ async function worker(config, options) {
|
|
195
189
|
|
196
190
|
}
|
197
191
|
};
|
198
|
-
const mocha = new _mocha.default(mochaOptions);
|
199
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
200
|
-
|
192
|
+
const mocha = new _mocha.default(mochaOptions);
|
201
193
|
mocha.cleanReferencesAfterRun(false);
|
202
194
|
|
203
195
|
_chai.default.use((0, _chaiImage.default)(getExpected, config.diffOptions));
|
204
196
|
|
205
|
-
if ((await (0, _selenium.getBrowser)(config, options
|
197
|
+
if ((await (0, _selenium.getBrowser)(config, options)) == null) return;
|
206
198
|
await (0, _helpers.addTestsFromStories)(mocha.suite, config, {
|
207
199
|
browser: options.browser,
|
208
200
|
watch: options.ui,
|
@@ -213,12 +205,12 @@ async function worker(config, options) {
|
|
213
205
|
try {
|
214
206
|
var _await$getBrowser;
|
215
207
|
|
216
|
-
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options
|
208
|
+
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
|
217
209
|
} catch (_) {
|
218
210
|
await (0, _selenium.closeBrowser)();
|
219
211
|
}
|
220
212
|
|
221
|
-
const browser = await (0, _selenium.getBrowser)(config, options
|
213
|
+
const browser = await (0, _selenium.getBrowser)(config, options);
|
222
214
|
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();
|
223
215
|
if (browser == null) return;
|
224
216
|
const interval = setInterval(() => void browser.getCurrentUrl().then(url => {
|
@@ -250,9 +242,7 @@ async function worker(config, options) {
|
|
250
242
|
if (!(reason instanceof Error)) {
|
251
243
|
error = reason;
|
252
244
|
} else if (!(0, _types.isImageError)(reason)) {
|
253
|
-
|
254
|
-
|
255
|
-
error = (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message;
|
245
|
+
error = reason.stack ?? reason.message;
|
256
246
|
} else if (typeof reason.images == 'string') {
|
257
247
|
const image = images[testScope.slice(-1)[0]];
|
258
248
|
if (image) image.error = reason.images;
|