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,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.default =
|
6
|
+
exports.default = loader;
|
7
7
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
9
9
|
|
@@ -19,19 +19,17 @@ var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
19
19
|
|
20
20
|
var _generator = _interopRequireDefault(require("@babel/generator"));
|
21
21
|
|
22
|
-
var _helpers = require("
|
23
|
-
|
24
|
-
var _helpers2 = require("../babel/helpers");
|
22
|
+
var _helpers = require("../babel/helpers");
|
25
23
|
|
26
24
|
var _logger = require("../../logger");
|
27
25
|
|
28
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29
27
|
|
30
28
|
function transform(ast) {
|
31
|
-
(0, _traverse.default)(ast, { ...
|
32
|
-
...(fileType ==
|
33
|
-
...(fileType ==
|
34
|
-
...(isMDX ?
|
29
|
+
(0, _traverse.default)(ast, { ..._helpers.commonVisitor,
|
30
|
+
...(fileType == _helpers.FileType.Preview ? _helpers.previewVisitor : undefined),
|
31
|
+
...(fileType == _helpers.FileType.Story ? _helpers.storyVisitor : undefined),
|
32
|
+
...(isMDX ? _helpers.mdxVisitor : undefined)
|
35
33
|
}, undefined, {
|
36
34
|
resourcePath,
|
37
35
|
fileType,
|
@@ -76,11 +74,6 @@ function isPreview(context, options) {
|
|
76
74
|
|
77
75
|
const storybookDir = typeof options.storybookDir == 'string' ? toPosix(options.storybookDir) : '';
|
78
76
|
const isConfigFile = resourceDir == storybookDir && (resourceName == 'preview' || resourceName == 'config');
|
79
|
-
|
80
|
-
if ((0, _helpers.isStorybookVersionLessThan)(6)) {
|
81
|
-
return isEntry(context) && isConfigFile;
|
82
|
-
}
|
83
|
-
|
84
77
|
const issuerResource = getIssuerResource(context);
|
85
78
|
return Boolean(issuerResource && entries.has(issuerResource) && isConfigFile);
|
86
79
|
}
|
@@ -105,39 +98,44 @@ const schema = {
|
|
105
98
|
}
|
106
99
|
}
|
107
100
|
};
|
108
|
-
let fileType =
|
101
|
+
let fileType = _helpers.FileType.Invalid;
|
109
102
|
let isMDX = false;
|
110
103
|
let previewPath = '';
|
111
104
|
let resourcePath = '';
|
112
105
|
const entries = new Set();
|
113
106
|
const stories = new Set();
|
114
107
|
const reexportedStories = new Map();
|
115
|
-
|
108
|
+
|
109
|
+
const isTest = () => process.env.__CREEVEY_ENV__ == 'test';
|
110
|
+
|
116
111
|
const defaultOptions = {
|
117
|
-
debug
|
112
|
+
get debug() {
|
113
|
+
return isTest();
|
114
|
+
},
|
115
|
+
|
118
116
|
storybookDir: process.cwd()
|
119
117
|
};
|
120
118
|
|
121
|
-
function
|
119
|
+
function loader(source) {
|
122
120
|
const options = this ? (0, _loaderUtils.getOptions)(this) || defaultOptions : defaultOptions;
|
123
121
|
(0, _schemaUtils.validate)(schema, options, {
|
124
122
|
name: 'Creevey Stories Loader'
|
125
123
|
});
|
126
|
-
fileType =
|
124
|
+
fileType = _helpers.FileType.Invalid;
|
127
125
|
|
128
126
|
if (this) {
|
129
127
|
const issuerResource = getIssuerResource(this);
|
130
128
|
resourcePath = this.resourcePath;
|
131
129
|
|
132
130
|
if (isStoryFile(this)) {
|
133
|
-
fileType =
|
131
|
+
fileType = _helpers.FileType.Story;
|
134
132
|
isMDX = _path.default.parse(resourcePath).ext == '.mdx';
|
135
133
|
stories.add(this.resourcePath);
|
136
134
|
} else if (isPreview(this, options)) {
|
137
|
-
fileType =
|
135
|
+
fileType = _helpers.FileType.Preview;
|
138
136
|
previewPath = this.resourcePath;
|
139
137
|
} else if (isEntry(this)) {
|
140
|
-
fileType =
|
138
|
+
fileType = _helpers.FileType.Entry;
|
141
139
|
entries.add(this.resourcePath);
|
142
140
|
return source;
|
143
141
|
} else if (issuerResource && stories.has(issuerResource) && options.debug) {
|
@@ -146,7 +144,7 @@ function _default(source) {
|
|
146
144
|
}
|
147
145
|
}
|
148
146
|
|
149
|
-
if (isTest && !Number.isNaN(Number(process.env.CREEVEY_LOADER_FILE_TYPE))) {
|
147
|
+
if (isTest() && !Number.isNaN(Number(process.env.CREEVEY_LOADER_FILE_TYPE))) {
|
150
148
|
fileType = Number(process.env.CREEVEY_LOADER_FILE_TYPE);
|
151
149
|
}
|
152
150
|
|
@@ -4,19 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
|
-
|
8
|
-
var _global$__CREEVEY_HMR;
|
9
|
-
|
10
|
-
global.__CREEVEY_HMR_DATA__ = (_global$__CREEVEY_HMR = global.__CREEVEY_HMR_DATA__) !== null && _global$__CREEVEY_HMR !== void 0 ? _global$__CREEVEY_HMR : {};
|
7
|
+
global.__CREEVEY_HMR_DATA__ = global.__CREEVEY_HMR_DATA__ ?? {};
|
11
8
|
Object.entries(__webpack_require__.m).forEach(([key, moduleFn]) => {
|
12
9
|
__webpack_require__.m[key] = new Proxy(moduleFn, {
|
13
10
|
apply(target, thisArg, args) {
|
14
|
-
var _global$__CREEVEY_HMR2;
|
15
|
-
|
16
11
|
const [module] = args;
|
17
12
|
const {
|
18
13
|
data
|
19
|
-
} = global.__CREEVEY_HMR_DATA__[module.i] =
|
14
|
+
} = global.__CREEVEY_HMR_DATA__[module.i] = global.__CREEVEY_HMR_DATA__[module.i] ?? {
|
20
15
|
data: {}
|
21
16
|
};
|
22
17
|
Object.assign(module, {
|
@@ -3,8 +3,8 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.webpack = webpack;
|
7
6
|
exports.mdxOptions = exports.mdxLoaders = void 0;
|
7
|
+
exports.webpack = webpack;
|
8
8
|
|
9
9
|
var _helpers = require("../../storybook/helpers");
|
10
10
|
|
@@ -58,7 +58,7 @@ function webpack(webpackConfig = {}, options = {}) {
|
|
58
58
|
configureJSX = true
|
59
59
|
} = options;
|
60
60
|
exports.mdxLoaders = mdxLoaders = [{
|
61
|
-
loader: (0, _helpers.
|
61
|
+
loader: (0, _helpers.resolveFromStorybookBuilderWebpack4)('babel-loader'),
|
62
62
|
options: createBabelOptions({
|
63
63
|
babelOptions,
|
64
64
|
mdxBabelOptions,
|
@@ -23,7 +23,7 @@ function startWebpackCompiler() {
|
|
23
23
|
|
24
24
|
webpackCompiler.on('message', message => {
|
25
25
|
if (!(0, _types.isWebpackMessage)(message)) return;
|
26
|
-
Object.values(_cluster.default.workers).filter(worker => worker != webpackCompiler).forEach(worker => worker === null || worker === void 0 ? void 0 : worker.send(message));
|
26
|
+
Object.values(_cluster.default.workers ?? {}).filter(worker => worker != webpackCompiler).forEach(worker => worker === null || worker === void 0 ? void 0 : worker.send(message));
|
27
27
|
|
28
28
|
switch (message.type) {
|
29
29
|
case 'success':
|
package/lib/cjs/server/logger.js
CHANGED
@@ -3,13 +3,14 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
+
exports.colors = void 0;
|
6
7
|
Object.defineProperty(exports, "getLogger", {
|
7
8
|
enumerable: true,
|
8
9
|
get: function () {
|
9
10
|
return _loglevel.getLogger;
|
10
11
|
}
|
11
12
|
});
|
12
|
-
exports.logger =
|
13
|
+
exports.logger = void 0;
|
13
14
|
|
14
15
|
var _chalk = _interopRequireDefault(require("chalk"));
|
15
16
|
|
@@ -126,9 +126,9 @@ async function _default(config, options, resolveApi) {
|
|
126
126
|
}
|
127
127
|
|
128
128
|
runner.once('stop', () => {
|
129
|
-
var
|
129
|
+
var _runner6;
|
130
130
|
|
131
|
-
const tests = Object.values((
|
131
|
+
const tests = Object.values(((_runner6 = runner) === null || _runner6 === void 0 ? void 0 : _runner6.status.tests) ?? {});
|
132
132
|
const isSuccess = tests.filter(_types.isDefined).filter(({
|
133
133
|
skip
|
134
134
|
}) => !skip).every(({
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
7
|
|
8
|
-
var _cluster =
|
8
|
+
var _cluster = _interopRequireWildcard(require("cluster"));
|
9
9
|
|
10
10
|
var _events = require("events");
|
11
11
|
|
@@ -15,13 +15,17 @@ var _messages = require("../messages");
|
|
15
15
|
|
16
16
|
var _utils = require("../utils");
|
17
17
|
|
18
|
-
function
|
18
|
+
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); }
|
19
19
|
|
20
|
-
function
|
20
|
+
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; }
|
21
21
|
|
22
22
|
const FORK_RETRIES = 5;
|
23
23
|
|
24
24
|
class Pool extends _events.EventEmitter {
|
25
|
+
workers = [];
|
26
|
+
queue = [];
|
27
|
+
forcedStop = false;
|
28
|
+
|
25
29
|
get isRunning() {
|
26
30
|
return this.workers.length !== this.freeWorkers.length;
|
27
31
|
}
|
@@ -29,19 +33,6 @@ class Pool extends _events.EventEmitter {
|
|
29
33
|
constructor(config, browser) {
|
30
34
|
super();
|
31
35
|
this.browser = browser;
|
32
|
-
|
33
|
-
_defineProperty(this, "maxRetries", void 0);
|
34
|
-
|
35
|
-
_defineProperty(this, "config", void 0);
|
36
|
-
|
37
|
-
_defineProperty(this, "workers", []);
|
38
|
-
|
39
|
-
_defineProperty(this, "queue", []);
|
40
|
-
|
41
|
-
_defineProperty(this, "forcedStop", false);
|
42
|
-
|
43
|
-
_defineProperty(this, "failFast", void 0);
|
44
|
-
|
45
36
|
this.failFast = config.failFast;
|
46
37
|
this.maxRetries = config.maxRetries;
|
47
38
|
this.config = config.browsers[browser];
|
@@ -51,7 +42,7 @@ class Pool extends _events.EventEmitter {
|
|
51
42
|
const poolSize = this.config.limit || 1;
|
52
43
|
this.workers = (await Promise.all(Array.from({
|
53
44
|
length: poolSize
|
54
|
-
}).map(() => this.forkWorker()))).filter(workerOrError => workerOrError instanceof _cluster.
|
45
|
+
}).map(() => this.forkWorker()))).filter(workerOrError => workerOrError instanceof _cluster.Worker);
|
55
46
|
if (this.workers.length != poolSize) throw new Error(`Can't instantiate workers for ${this.browser} due many errors`);
|
56
47
|
this.workers.forEach(worker => this.exitHandler(worker));
|
57
48
|
}
|
@@ -151,7 +142,7 @@ class Pool extends _events.EventEmitter {
|
|
151
142
|
worker.once('exit', async () => {
|
152
143
|
if (_utils.isShuttingDown.current) return;
|
153
144
|
const workerOrError = await this.forkWorker();
|
154
|
-
if (!(workerOrError instanceof _cluster.
|
145
|
+
if (!(workerOrError instanceof _cluster.Worker)) throw new Error(`Can't instantiate worker for ${this.browser} due many errors`);
|
155
146
|
this.exitHandler(workerOrError);
|
156
147
|
this.workers[this.workers.indexOf(worker)] = workerOrError;
|
157
148
|
this.process();
|
@@ -19,69 +19,44 @@ var _pool = _interopRequireDefault(require("./pool"));
|
|
19
19
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
21
|
|
22
|
-
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; }
|
23
|
-
|
24
22
|
const copyFileAsync = (0, _util.promisify)(_fs.copyFile);
|
25
23
|
const mkdirAsync = (0, _util.promisify)(_fs.mkdir);
|
26
24
|
|
27
25
|
class Runner extends _events.EventEmitter {
|
26
|
+
pools = {};
|
27
|
+
tests = {};
|
28
|
+
|
28
29
|
get isRunning() {
|
29
30
|
return Object.values(this.pools).some(pool => pool.isRunning);
|
30
31
|
}
|
31
32
|
|
32
33
|
constructor(config) {
|
33
34
|
super();
|
35
|
+
this.failFast = config.failFast;
|
36
|
+
this.screenDir = config.screenDir;
|
37
|
+
this.reportDir = config.reportDir;
|
38
|
+
this.browsers = Object.keys(config.browsers);
|
39
|
+
this.browsers.map(browser => this.pools[browser] = new _pool.default(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
|
40
|
+
}
|
34
41
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
id,
|
50
|
-
status,
|
51
|
-
result
|
52
|
-
} = message;
|
53
|
-
const test = this.tests[id];
|
54
|
-
if (!test) return;
|
55
|
-
const {
|
56
|
-
browser,
|
57
|
-
testName,
|
58
|
-
storyPath,
|
59
|
-
storyId
|
60
|
-
} = test; // TODO Handle 'retrying' status
|
61
|
-
|
62
|
-
test.status = status == 'retrying' ? 'failed' : status;
|
63
|
-
|
64
|
-
if (!result) {
|
65
|
-
this.sendUpdate({
|
66
|
-
tests: {
|
67
|
-
[id]: {
|
68
|
-
id,
|
69
|
-
browser,
|
70
|
-
testName,
|
71
|
-
storyPath,
|
72
|
-
status: test.status,
|
73
|
-
storyId
|
74
|
-
}
|
75
|
-
}
|
76
|
-
});
|
77
|
-
return;
|
78
|
-
}
|
42
|
+
handlePoolMessage = message => {
|
43
|
+
const {
|
44
|
+
id,
|
45
|
+
status,
|
46
|
+
result
|
47
|
+
} = message;
|
48
|
+
const test = this.tests[id];
|
49
|
+
if (!test) return;
|
50
|
+
const {
|
51
|
+
browser,
|
52
|
+
testName,
|
53
|
+
storyPath,
|
54
|
+
storyId
|
55
|
+
} = test; // TODO Handle 'retrying' status
|
79
56
|
|
80
|
-
|
81
|
-
test.results = [];
|
82
|
-
}
|
57
|
+
test.status = status == 'retrying' ? 'failed' : status;
|
83
58
|
|
84
|
-
|
59
|
+
if (!result) {
|
85
60
|
this.sendUpdate({
|
86
61
|
tests: {
|
87
62
|
[id]: {
|
@@ -90,29 +65,41 @@ class Runner extends _events.EventEmitter {
|
|
90
65
|
testName,
|
91
66
|
storyPath,
|
92
67
|
status: test.status,
|
93
|
-
results: [result],
|
94
68
|
storyId
|
95
69
|
}
|
96
70
|
}
|
97
71
|
});
|
98
|
-
|
99
|
-
}
|
72
|
+
return;
|
73
|
+
}
|
100
74
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
75
|
+
if (!test.results) {
|
76
|
+
test.results = [];
|
77
|
+
}
|
78
|
+
|
79
|
+
test.results.push(result);
|
80
|
+
this.sendUpdate({
|
81
|
+
tests: {
|
82
|
+
[id]: {
|
83
|
+
id,
|
84
|
+
browser,
|
85
|
+
testName,
|
86
|
+
storyPath,
|
87
|
+
status: test.status,
|
88
|
+
results: [result],
|
89
|
+
storyId
|
90
|
+
}
|
107
91
|
}
|
108
92
|
});
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
this.
|
113
|
-
|
114
|
-
|
115
|
-
|
93
|
+
if (this.failFast && status == 'failed') this.stop();
|
94
|
+
};
|
95
|
+
handlePoolStop = () => {
|
96
|
+
if (!this.isRunning) {
|
97
|
+
this.sendUpdate({
|
98
|
+
isRunning: false
|
99
|
+
});
|
100
|
+
this.emit('stop');
|
101
|
+
}
|
102
|
+
};
|
116
103
|
|
117
104
|
async init() {
|
118
105
|
await Promise.all(Object.values(this.pools).map(pool => pool.init()));
|
@@ -75,7 +75,7 @@ function server(reportDir, port, ui) {
|
|
75
75
|
type: 'update',
|
76
76
|
payload: deserializedStories
|
77
77
|
});
|
78
|
-
Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
|
78
|
+
Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
|
79
79
|
type: 'update',
|
80
80
|
payload: deserializedStories
|
81
81
|
}));
|
@@ -90,7 +90,7 @@ function server(reportDir, port, ui) {
|
|
90
90
|
workerId,
|
91
91
|
options
|
92
92
|
} = ctx.request.body;
|
93
|
-
const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.process.pid == workerId); // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
|
93
|
+
const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.process.pid == workerId); // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
|
94
94
|
|
95
95
|
if (!worker) return;
|
96
96
|
await new Promise(resolve => {
|
@@ -122,7 +122,9 @@ function server(reportDir, port, ui) {
|
|
122
122
|
void creeveyApi.then(api => {
|
123
123
|
api.subscribe(wss);
|
124
124
|
wss.on('connection', ws => {
|
125
|
-
ws.on('message', message =>
|
125
|
+
ws.on('message', (message, isBinary) => {
|
126
|
+
api.handleMessage(ws, isBinary ? message : message.toString());
|
127
|
+
});
|
126
128
|
});
|
127
129
|
});
|
128
130
|
return resolveApi;
|
@@ -3,16 +3,16 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
6
|
+
exports.emitDockerMessage = emitDockerMessage;
|
7
|
+
exports.emitShutdownMessage = emitShutdownMessage;
|
7
8
|
exports.emitStoriesMessage = emitStoriesMessage;
|
8
9
|
exports.emitTestMessage = emitTestMessage;
|
9
10
|
exports.emitWebpackMessage = emitWebpackMessage;
|
10
|
-
exports.
|
11
|
-
exports.emitShutdownMessage = emitShutdownMessage;
|
12
|
-
exports.sendStoriesMessage = sendStoriesMessage;
|
13
|
-
exports.sendTestMessage = sendTestMessage;
|
11
|
+
exports.emitWorkerMessage = emitWorkerMessage;
|
14
12
|
exports.sendDockerMessage = sendDockerMessage;
|
15
13
|
exports.sendShutdownMessage = sendShutdownMessage;
|
14
|
+
exports.sendStoriesMessage = sendStoriesMessage;
|
15
|
+
exports.sendTestMessage = sendTestMessage;
|
16
16
|
exports.subscribeOn = subscribeOn;
|
17
17
|
exports.subscribeOnWorker = subscribeOnWorker;
|
18
18
|
|
@@ -21,10 +21,10 @@ var _cluster = _interopRequireDefault(require("cluster"));
|
|
21
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
22
22
|
|
23
23
|
function emitMessage(message) {
|
24
|
-
var _process$send, _process
|
24
|
+
var _process$send, _process;
|
25
25
|
|
26
26
|
if (_cluster.default.isWorker && !process.connected) return false;
|
27
|
-
return (_process$send = (_process
|
27
|
+
return ((_process$send = (_process = process).send) === null || _process$send === void 0 ? void 0 : _process$send.call(_process, message)) ?? // @ts-expect-error: wrong typings `process.emit` return boolean
|
28
28
|
process.emit('message', message);
|
29
29
|
}
|
30
30
|
|
@@ -190,9 +190,7 @@ function subscribeOn(scope, handler) {
|
|
190
190
|
const workers = new Map();
|
191
191
|
|
192
192
|
function subscribeOnWorker(worker, scope, handler) {
|
193
|
-
|
194
|
-
|
195
|
-
const workerHandlers = (_workers$get = workers.get(worker)) !== null && _workers$get !== void 0 ? _workers$get : createHandlers();
|
193
|
+
const workerHandlers = workers.get(worker) ?? createHandlers();
|
196
194
|
|
197
195
|
if (!workers.has(worker)) {
|
198
196
|
workers.set(worker, workerHandlers);
|