creevey 0.10.0-beta.3 → 0.10.0-beta.31
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/dist/client/addon/components/Addon.js +17 -7
- package/dist/client/addon/components/Addon.js.map +1 -1
- package/dist/client/addon/components/Panel.js +2 -2
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/components/Tools.js +17 -7
- package/dist/client/addon/components/Tools.js.map +1 -1
- package/dist/client/addon/withCreevey.d.ts +1 -0
- package/dist/client/addon/withCreevey.js +10 -1
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/BlendView.js +17 -7
- package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SideBySideView.js +17 -7
- package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SlideView.js +17 -7
- package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.js +29 -7
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -0
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/PageHeader/PageHeader.js +20 -8
- package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.js +43 -13
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/shared/creeveyClientApi.js +8 -1
- package/dist/client/shared/creeveyClientApi.js.map +1 -1
- package/dist/client/shared/helpers.d.ts +1 -3
- package/dist/client/shared/helpers.js +4 -19
- package/dist/client/shared/helpers.js.map +1 -1
- package/dist/client/web/CreeveyApp.js +41 -14
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyContext.d.ts +5 -0
- package/dist/client/web/CreeveyContext.js +20 -7
- package/dist/client/web/CreeveyContext.js.map +1 -1
- package/dist/client/web/CreeveyLoader.js +2 -2
- package/dist/client/web/CreeveyLoader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.js +19 -9
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +18 -7
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +60 -7
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +17 -7
- package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +18 -10
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +18 -10
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
- package/dist/client/web/KeyboardEventsContext.js +79 -64
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/index-Cs8IUTQs.js +595 -0
- package/dist/client/web/index.html +1 -1
- package/dist/client/web/index.js +17 -7
- package/dist/client/web/index.js.map +1 -1
- package/dist/client/web/themes.d.ts +2 -0
- package/dist/client/web/themes.js +22 -0
- package/dist/client/web/themes.js.map +1 -0
- package/dist/creevey.js +16 -9
- package/dist/creevey.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/server/config.d.ts +1 -1
- package/dist/server/config.js +29 -7
- package/dist/server/config.js.map +1 -1
- package/dist/server/connection.d.ts +3 -0
- package/dist/server/connection.js +28 -0
- package/dist/server/connection.js.map +1 -0
- package/dist/server/docker.js +38 -21
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +63 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/logger.d.ts +2 -1
- package/dist/server/logger.js +7 -3
- package/dist/server/logger.js.map +1 -1
- package/dist/server/master/api.js +1 -1
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/pool.d.ts +4 -3
- package/dist/server/master/pool.js +12 -63
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +13 -0
- package/dist/server/master/queue.js +71 -0
- package/dist/server/master/queue.js.map +1 -0
- package/dist/server/master/runner.d.ts +1 -0
- package/dist/server/master/runner.js +4 -1
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.js +1 -1
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.js +13 -11
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/playwright/docker-file.d.ts +2 -1
- package/dist/server/playwright/docker-file.js +7 -5
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/internal.d.ts +5 -4
- package/dist/server/playwright/internal.js +91 -71
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.d.ts +1 -1
- package/dist/server/playwright/webdriver.js +1 -1
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/providers/browser.js +6 -4
- package/dist/server/providers/browser.js.map +1 -1
- package/dist/server/providers/hybrid.js +1 -1
- package/dist/server/providers/hybrid.js.map +1 -1
- package/dist/server/reporter.js +13 -9
- package/dist/server/reporter.js.map +1 -1
- package/dist/server/selenium/internal.d.ts +3 -4
- package/dist/server/selenium/internal.js +127 -99
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +9 -6
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.d.ts +1 -1
- package/dist/server/selenium/webdriver.js +1 -1
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/telemetry.js +7 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/testsFiles/parser.js +44 -2
- package/dist/server/testsFiles/parser.js.map +1 -1
- package/dist/server/utils.d.ts +20 -1
- package/dist/server/utils.js +82 -7
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +3 -4
- package/dist/server/webdriver.js +10 -9
- package/dist/server/webdriver.js.map +1 -1
- package/dist/server/worker/chai-image.d.ts +1 -2
- package/dist/server/worker/chai-image.js +4 -3
- package/dist/server/worker/chai-image.js.map +1 -1
- package/dist/server/worker/match-image.d.ts +4 -4
- package/dist/server/worker/match-image.js +7 -4
- package/dist/server/worker/match-image.js.map +1 -1
- package/dist/server/worker/start.js +24 -14
- package/dist/server/worker/start.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/types.d.ts +38 -13
- package/dist/types.js.map +1 -1
- package/docs/config.md +3 -0
- package/package.json +65 -63
- package/src/client/addon/components/Panel.tsx +2 -2
- package/src/client/addon/withCreevey.ts +8 -1
- package/src/client/shared/components/ImagesView/SwapView.tsx +18 -0
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -0
- package/src/client/shared/components/PageHeader/PageHeader.tsx +4 -2
- package/src/client/shared/components/ResultsPage.tsx +31 -8
- package/src/client/shared/creeveyClientApi.ts +9 -1
- package/src/client/shared/helpers.ts +4 -24
- package/src/client/web/CreeveyApp.tsx +26 -8
- package/src/client/web/CreeveyContext.tsx +9 -0
- package/src/client/web/CreeveyLoader.tsx +1 -1
- package/src/client/web/CreeveyView/SideBar/Search.tsx +3 -3
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +1 -0
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +37 -6
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +3 -5
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +2 -4
- package/src/client/web/KeyboardEventsContext.tsx +61 -73
- package/src/client/web/themes.ts +24 -0
- package/src/creevey.ts +16 -10
- package/src/server/config.ts +30 -8
- package/src/server/connection.ts +26 -0
- package/src/server/docker.ts +42 -24
- package/src/server/index.ts +73 -14
- package/src/server/logger.ts +6 -2
- package/src/server/master/api.ts +1 -1
- package/src/server/master/pool.ts +22 -56
- package/src/server/master/queue.ts +77 -0
- package/src/server/master/runner.ts +4 -1
- package/src/server/master/server.ts +1 -1
- package/src/server/master/start.ts +16 -11
- package/src/server/playwright/docker-file.ts +8 -5
- package/src/server/playwright/internal.ts +91 -78
- package/src/server/playwright/webdriver.ts +2 -2
- package/src/server/providers/browser.ts +6 -4
- package/src/server/providers/hybrid.ts +1 -1
- package/src/server/reporter.ts +15 -9
- package/src/server/selenium/internal.ts +131 -107
- package/src/server/selenium/selenoid.ts +9 -7
- package/src/server/selenium/webdriver.ts +2 -2
- package/src/server/telemetry.ts +7 -3
- package/src/server/testsFiles/parser.ts +51 -1
- package/src/server/utils.ts +87 -8
- package/src/server/webdriver.ts +11 -16
- package/src/server/worker/chai-image.ts +4 -4
- package/src/server/worker/match-image.ts +12 -8
- package/src/server/worker/start.ts +25 -16
- package/src/shared/index.ts +1 -1
- package/src/types.ts +40 -15
- package/types/global.d.ts +1 -0
- package/.yarnrc.yml +0 -1
- package/chromatic.config.json +0 -5
- package/dist/client/web/assets/index-DkmZfG9C.js +0 -591
package/dist/client/web/index.js
CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
15
15
|
}) : function(o, v) {
|
16
16
|
o["default"] = v;
|
17
17
|
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
};
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
36
|
const react_1 = __importStar(require("react"));
|
27
37
|
const client_1 = require("react-dom/client");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/web/index.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/web/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAwC;AACxC,6CAA8C;AAC9C,mDAA6C;AAE7C,uEAAuF;AACvF,6CAAqD;AACrD,qDAAoD;AACpD,yDAAmD;AAMnD,MAAM,CAAC,iCAAiC,GAAG,eAAI,CAAC;AAEhD,SAAS,eAAe;IACtB,OAAO,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,eAAe,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;IAC5C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,aAA4B,CAAC;IACjC,IAAI,UAAwC,CAAC;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAA,0CAAoB,GAAE,CAAC;YAC1C,aAAa,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,mDAAmD;YACnD,QAAQ,GAAG,IAAI,CAAC;YAChB,aAAa,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC;QAChB,aAAa,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACrF,CAAC;IAED,OAAO;QACL,OAAO;YACL,OAAO,CACL,8BAAC,0BAAU,IACT,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAA,yBAAY,EAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GACxG,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC,CAAC;AAC1D,IAAI,CAAC,MAAM,CACT,8BAAC,gBAAQ,IAAC,QAAQ,EAAE,8BAAC,gCAAa,OAAG;IACnC,8BAAC,eAAe,OAAG,CACV,CACZ,CAAC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useTheme = useTheme;
|
4
|
+
const react_1 = require("react");
|
5
|
+
const theming_1 = require("@storybook/theming");
|
6
|
+
const types_js_1 = require("../../types.js");
|
7
|
+
const CREEVEY_THEME = 'Creevey_theme';
|
8
|
+
function isTheme(theme) {
|
9
|
+
return (0, types_js_1.isDefined)(theme) && Object.prototype.hasOwnProperty.call(theming_1.themes, theme);
|
10
|
+
}
|
11
|
+
function initialTheme() {
|
12
|
+
const theme = localStorage.getItem(CREEVEY_THEME);
|
13
|
+
return isTheme(theme) ? theme : 'light';
|
14
|
+
}
|
15
|
+
function useTheme() {
|
16
|
+
const [theme, setTheme] = (0, react_1.useState)(initialTheme());
|
17
|
+
(0, react_1.useEffect)(() => {
|
18
|
+
localStorage.setItem(CREEVEY_THEME, theme);
|
19
|
+
}, [theme]);
|
20
|
+
return [theme, setTheme];
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=themes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../../src/client/web/themes.ts"],"names":[],"mappings":";;AAeA,4BAQC;AAvBD,iCAA4C;AAC5C,gDAAuD;AACvD,6CAA2C;AAE3C,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC,SAAS,OAAO,CAAC,KAAqB;IACpC,OAAO,IAAA,oBAAS,EAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAM,EAAE,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAoB,YAAY,EAAE,CAAC,CAAC;IAEtE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/creevey.js
CHANGED
@@ -14,7 +14,7 @@ function shutdownOnException(reason) {
|
|
14
14
|
if (utils_js_1.isShuttingDown.current)
|
15
15
|
return;
|
16
16
|
const error = reason instanceof Error ? (reason.stack ?? reason.message) : reason;
|
17
|
-
logger_js_1.logger.error(error);
|
17
|
+
(0, logger_js_1.logger)().error(error);
|
18
18
|
process.exitCode = -1;
|
19
19
|
if (cluster_1.default.isWorker)
|
20
20
|
(0, messages_js_1.emitWorkerMessage)({ type: 'error', payload: { subtype: 'unknown', error } });
|
@@ -25,17 +25,24 @@ process.on('uncaughtException', shutdownOnException);
|
|
25
25
|
process.on('unhandledRejection', shutdownOnException);
|
26
26
|
// TODO SIGINT Stuck with selenium
|
27
27
|
process.on('SIGINT', () => {
|
28
|
+
if (utils_js_1.isShuttingDown.current) {
|
29
|
+
process.exit(-1);
|
30
|
+
}
|
28
31
|
utils_js_1.isShuttingDown.current = true;
|
29
32
|
});
|
30
33
|
const argv = (0, minimist_1.default)(process.argv.slice(2), {
|
31
|
-
string: ['browser', 'config', 'reporter', 'reportDir', 'screenDir', 'gridUrl', 'storybookUrl'],
|
32
|
-
boolean: ['debug', 'trace', 'ui', 'odiff'],
|
33
|
-
default: { port: 3000 },
|
34
|
-
alias: { port: 'p', config: 'c', debug: 'd', update: 'u' },
|
34
|
+
string: ['browser', 'config', 'reporter', 'reportDir', 'screenDir', 'gridUrl', 'storybookUrl', 'storybookPort'],
|
35
|
+
boolean: ['debug', 'trace', 'ui', 'odiff', 'noDocker'],
|
36
|
+
default: { port: '3000' },
|
37
|
+
alias: { port: 'p', config: 'c', debug: 'd', update: 'u', storybookStart: 's' },
|
35
38
|
});
|
39
|
+
if ('port' in argv && !isNaN(argv.port))
|
40
|
+
argv.port = Number(argv.port);
|
41
|
+
if ('browser' in argv && argv.browser)
|
42
|
+
(0, logger_js_1.setRootName)(argv.browser);
|
36
43
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
37
44
|
if (cluster_1.default.isPrimary && argv.reporter) {
|
38
|
-
logger_js_1.logger.warn(`--reporter option has been removed please describe reporter in config file:
|
45
|
+
(0, logger_js_1.logger)().warn(`--reporter option has been removed please describe reporter in config file:
|
39
46
|
import { reporters } from 'mocha';
|
40
47
|
|
41
48
|
const config = {
|
@@ -50,15 +57,15 @@ if (cluster_1.default.isPrimary && argv.reporter) {
|
|
50
57
|
// @ts-expect-error: define log level for storybook
|
51
58
|
global.LOGLEVEL = argv.trace ? 'trace' : argv.debug ? 'debug' : 'warn';
|
52
59
|
if (argv.trace) {
|
53
|
-
logger_js_1.logger.setDefaultLevel(loglevel_1.default.levels.TRACE);
|
60
|
+
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.TRACE);
|
54
61
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.TRACE);
|
55
62
|
}
|
56
63
|
else if (argv.debug) {
|
57
|
-
logger_js_1.logger.setDefaultLevel(loglevel_1.default.levels.DEBUG);
|
64
|
+
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.DEBUG);
|
58
65
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.DEBUG);
|
59
66
|
}
|
60
67
|
else {
|
61
|
-
logger_js_1.logger.setDefaultLevel(loglevel_1.default.levels.INFO);
|
68
|
+
(0, logger_js_1.logger)().setDefaultLevel(loglevel_1.default.levels.INFO);
|
62
69
|
loglevel_1.default.setDefaultLevel(loglevel_1.default.levels.INFO);
|
63
70
|
}
|
64
71
|
void (0, index_js_1.default)(argv);
|
package/dist/creevey.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"creevey.js","sourceRoot":"","sources":["../src/creevey.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,wDAAgC;AAChC,iEAAwC;AAExC,sDAAyD;AACzD,gDAAoE;AACpE,wDAA8B;AAC9B,
|
1
|
+
{"version":3,"file":"creevey.js","sourceRoot":"","sources":["../src/creevey.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
/// <reference types="../types/chai" />
|
2
|
+
/// <reference types="../types/global" />
|
2
3
|
export * from './types.js';
|
3
4
|
export { loadStories as browserStoriesProvider } from './server/storybook/providers/browser.js';
|
4
5
|
export { loadStories as hybridStoriesProvider } from './server/storybook/providers/hybrid.js';
|
package/dist/server/config.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
import { Config, Options } from '../types.js';
|
2
2
|
export declare const defaultBrowser = "chrome";
|
3
|
-
export declare const defaultConfig: Omit<Config, 'gridUrl' | '
|
3
|
+
export declare const defaultConfig: Omit<Config, 'gridUrl' | 'tsConfig' | 'webdriver'>;
|
4
4
|
export declare function readConfig(options: Options): Promise<Config>;
|
package/dist/server/config.js
CHANGED
@@ -7,8 +7,9 @@ exports.defaultConfig = exports.defaultBrowser = void 0;
|
|
7
7
|
exports.readConfig = readConfig;
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
9
9
|
const path_1 = __importDefault(require("path"));
|
10
|
+
const cluster_1 = __importDefault(require("cluster"));
|
10
11
|
const url_1 = require("url");
|
11
|
-
const
|
12
|
+
const hybrid_js_1 = require("./providers/hybrid.js");
|
12
13
|
const types_js_1 = require("../types.js");
|
13
14
|
const utils_js_1 = require("./utils.js");
|
14
15
|
const reporter_js_1 = require("./reporter.js");
|
@@ -16,23 +17,25 @@ const logger_js_1 = require("./logger.js");
|
|
16
17
|
exports.defaultBrowser = 'chrome';
|
17
18
|
exports.defaultConfig = {
|
18
19
|
disableTelemetry: false,
|
20
|
+
useWorkerQueue: false,
|
19
21
|
useDocker: true,
|
20
|
-
dockerImage: 'aerokube/selenoid:latest-release',
|
22
|
+
dockerImage: 'aerokube/selenoid:latest-release', // TODO What about playwright?
|
21
23
|
dockerImagePlatform: '',
|
22
24
|
pullImages: true,
|
23
25
|
failFast: false,
|
24
26
|
storybookUrl: 'http://localhost:6006',
|
25
27
|
screenDir: path_1.default.resolve('images'),
|
26
28
|
reportDir: path_1.default.resolve('report'),
|
29
|
+
testsDir: path_1.default.resolve('src'),
|
27
30
|
reporter: process.env.TEAMCITY_VERSION ? reporter_js_1.TeamcityReporter : reporter_js_1.CreeveyReporter,
|
28
|
-
storiesProvider:
|
31
|
+
storiesProvider: hybrid_js_1.loadStories,
|
29
32
|
maxRetries: 0,
|
30
33
|
testTimeout: 30000,
|
31
|
-
diffOptions: { threshold: 0.
|
32
|
-
odiffOptions: { threshold: 0.
|
34
|
+
diffOptions: { threshold: 0.1, includeAA: false },
|
35
|
+
odiffOptions: { threshold: 0.1, antialiasing: true },
|
33
36
|
browsers: { [exports.defaultBrowser]: true },
|
34
37
|
hooks: {},
|
35
|
-
testsRegex: /\.creevey\.(t|j)s$/,
|
38
|
+
testsRegex: /\.creevey\.(m|c)?(t|j)s$/,
|
36
39
|
};
|
37
40
|
function normalizeBrowserConfig(name, config) {
|
38
41
|
if (typeof config == 'boolean')
|
@@ -75,11 +78,16 @@ async function readConfig(options) {
|
|
75
78
|
configData = 'default' in configData ? configData.default : configData;
|
76
79
|
if (!configData.webdriver) {
|
77
80
|
const { SeleniumWebdriver } = await import('./selenium/webdriver.js');
|
78
|
-
logger_js_1.logger.warn("Creevey supports `Selenium` and `Playwright` webdrivers. For backward compatibility `Selenium` is used by default, but it might changed in the future. Please explicitly specify one of webdrivers in your Creevey's config");
|
81
|
+
(0, logger_js_1.logger)().warn("Creevey supports `Selenium` and `Playwright` webdrivers. For backward compatibility `Selenium` is used by default, but it might changed in the future. Please explicitly specify one of webdrivers in your Creevey's config");
|
79
82
|
configData.webdriver = SeleniumWebdriver;
|
80
83
|
}
|
81
84
|
Object.assign(userConfig, configData);
|
82
85
|
}
|
86
|
+
if (userConfig.resolveStorybookUrl && !options.storybookUrl) {
|
87
|
+
userConfig.storybookUrl = await userConfig.resolveStorybookUrl();
|
88
|
+
}
|
89
|
+
if (options.noDocker)
|
90
|
+
userConfig.useDocker = false;
|
83
91
|
if (options.failFast != undefined)
|
84
92
|
userConfig.failFast = Boolean(options.failFast);
|
85
93
|
if (options.reportDir)
|
@@ -88,6 +96,20 @@ async function readConfig(options) {
|
|
88
96
|
userConfig.screenDir = path_1.default.resolve(options.screenDir);
|
89
97
|
if (options.storybookUrl)
|
90
98
|
userConfig.storybookUrl = options.storybookUrl;
|
99
|
+
if (options.storybookPort && cluster_1.default.isPrimary) {
|
100
|
+
const url = new URL(userConfig.storybookUrl);
|
101
|
+
url.port = options.storybookPort;
|
102
|
+
userConfig.storybookUrl = url.toString();
|
103
|
+
}
|
104
|
+
if (typeof options.storybookStart === 'string')
|
105
|
+
userConfig.storybookAutorunCmd = options.storybookStart;
|
106
|
+
if (options.storybookStart && cluster_1.default.isPrimary) {
|
107
|
+
const { default: getPort } = await import('get-port');
|
108
|
+
const url = new URL(userConfig.storybookUrl);
|
109
|
+
const port = await getPort({ port: Number(url.port) });
|
110
|
+
url.port = `${port}`;
|
111
|
+
userConfig.storybookUrl = url.toString();
|
112
|
+
}
|
91
113
|
// NOTE: Hack to pass typescript checking
|
92
114
|
const config = userConfig;
|
93
115
|
Object.entries(config.browsers).forEach(([browser, browserConfig]) => (config.browsers[browser] = normalizeBrowserConfig(browser, browserConfig)));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":";;;;;;
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getStorybookUrl = getStorybookUrl;
|
4
|
+
exports.checkIsStorybookConnected = checkIsStorybookConnected;
|
5
|
+
const utils_js_1 = require("./utils.js");
|
6
|
+
const logger_js_1 = require("./logger.js");
|
7
|
+
const RESPONSE_CHECK_TIMEOUT_MS = 10000;
|
8
|
+
const RESPONSE_CHECK_INTERVAL_MS = 200;
|
9
|
+
function getStorybookUrl({ storybookUrl }, { storybookStart }) {
|
10
|
+
if (storybookStart) {
|
11
|
+
const url = new URL(storybookUrl);
|
12
|
+
url.hostname = 'localhost';
|
13
|
+
return [url.toString(), storybookUrl];
|
14
|
+
}
|
15
|
+
return [storybookUrl, undefined];
|
16
|
+
}
|
17
|
+
async function checkIsStorybookConnected(url) {
|
18
|
+
try {
|
19
|
+
await (0, utils_js_1.waitOnUrl)(url, RESPONSE_CHECK_TIMEOUT_MS, RESPONSE_CHECK_INTERVAL_MS);
|
20
|
+
return true;
|
21
|
+
}
|
22
|
+
catch (reason) {
|
23
|
+
const error = reason instanceof Error ? (reason.stack ?? reason.message) : reason;
|
24
|
+
(0, logger_js_1.logger)().error(error);
|
25
|
+
return false;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
//# sourceMappingURL=connection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/server/connection.ts"],"names":[],"mappings":";;AAOA,0CAOC;AAED,8DASC;AAxBD,yCAAuC;AACvC,2CAAqC;AAErC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC,SAAgB,eAAe,CAAC,EAAE,YAAY,EAAU,EAAE,EAAE,cAAc,EAAW;IACnF,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAClC,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAAC,GAAW;IACzD,IAAI,CAAC;QACH,MAAM,IAAA,oBAAS,EAAC,GAAG,EAAE,yBAAyB,EAAE,0BAA0B,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,MAAe,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,MAAiB,CAAC;QAC9F,IAAA,kBAAM,GAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/server/docker.js
CHANGED
@@ -7,6 +7,7 @@ exports.pullImages = pullImages;
|
|
7
7
|
exports.buildImage = buildImage;
|
8
8
|
exports.runImage = runImage;
|
9
9
|
const tar_stream_1 = __importDefault(require("tar-stream"));
|
10
|
+
const loglevel_1 = __importDefault(require("loglevel"));
|
10
11
|
const stream_1 = require("stream");
|
11
12
|
const dockerode_1 = __importDefault(require("dockerode"));
|
12
13
|
const messages_js_1 = require("./messages.js");
|
@@ -23,7 +24,7 @@ async function pullImages(images, { auth, platform } = {}) {
|
|
23
24
|
args.authconfig = auth;
|
24
25
|
if (platform)
|
25
26
|
args.platform = platform;
|
26
|
-
logger_js_1.logger.info('Pull docker images');
|
27
|
+
(0, logger_js_1.logger)().info('Pull docker images');
|
27
28
|
// TODO Replace with `import from`
|
28
29
|
const { default: yoctoSpinner } = await import('yocto-spinner');
|
29
30
|
for (const image of images) {
|
@@ -48,7 +49,7 @@ async function pullImages(images, { auth, platform } = {}) {
|
|
48
49
|
function onProgress(event) {
|
49
50
|
if (!/^[a-z0-9]{12}$/i.test(event.id))
|
50
51
|
return;
|
51
|
-
spinner.text = `${image}: [${event.id}] ${event.status} ${event.progress
|
52
|
+
spinner.text = `${image}: [${event.id}] ${event.status} ${event.progress ?? ''}`;
|
52
53
|
}
|
53
54
|
});
|
54
55
|
});
|
@@ -57,25 +58,42 @@ async function pullImages(images, { auth, platform } = {}) {
|
|
57
58
|
async function buildImage(imageName, dockerfile) {
|
58
59
|
const images = await docker.listImages({ filters: { label: [`creevey=${imageName}`] } });
|
59
60
|
if (images.at(0)) {
|
60
|
-
|
61
|
+
await Promise.all((await docker.listContainers({ all: true, filters: { label: [`creevey=${imageName}`] } })).map(async (info) => {
|
62
|
+
const container = docker.getContainer(info.Id);
|
63
|
+
try {
|
64
|
+
await container.remove({ force: true });
|
65
|
+
}
|
66
|
+
catch {
|
67
|
+
/* noop */
|
68
|
+
}
|
69
|
+
}));
|
70
|
+
(0, logger_js_1.logger)().info(`Image ${imageName} already exists`);
|
61
71
|
return;
|
62
72
|
}
|
63
73
|
const pack = tar_stream_1.default.pack();
|
64
74
|
pack.entry({ name: 'Dockerfile' }, dockerfile);
|
65
75
|
pack.finalize();
|
66
76
|
const { default: yoctoSpinner } = await import('yocto-spinner');
|
67
|
-
const spinner = yoctoSpinner({ text: `${imageName}: Build start` })
|
77
|
+
const spinner = yoctoSpinner({ text: `${imageName}: Build start` });
|
78
|
+
if ((0, logger_js_1.logger)().getLevel() > loglevel_1.default.levels.DEBUG) {
|
79
|
+
spinner.start();
|
80
|
+
}
|
81
|
+
let isFailed = false;
|
68
82
|
await new Promise((resolve, reject) => {
|
69
83
|
void docker.buildImage(
|
70
84
|
// @ts-expect-error Type incompatibility AsyncIterator and AsyncIterableIterator
|
71
|
-
pack,
|
85
|
+
pack,
|
86
|
+
// TODO Support buildkit decode grpc (version: '2')
|
87
|
+
{ t: imageName, labels: { creevey: imageName }, version: '1' }, (buildError, stream) => {
|
72
88
|
if (buildError || !stream) {
|
73
|
-
spinner.error(buildError?.message);
|
89
|
+
// spinner.error(buildError?.message);
|
74
90
|
reject(buildError ?? new Error('Unknown error'));
|
75
91
|
return;
|
76
92
|
}
|
77
93
|
docker.modem.followProgress(stream, onFinished, onProgress);
|
78
94
|
function onFinished(error) {
|
95
|
+
if (isFailed)
|
96
|
+
return;
|
79
97
|
if (error) {
|
80
98
|
spinner.error(error.message);
|
81
99
|
reject(error);
|
@@ -85,24 +103,24 @@ async function buildImage(imageName, dockerfile) {
|
|
85
103
|
resolve();
|
86
104
|
}
|
87
105
|
function onProgress(event) {
|
88
|
-
if (
|
89
|
-
|
90
|
-
|
106
|
+
if ('stream' in event) {
|
107
|
+
if ((0, logger_js_1.logger)().getLevel() <= loglevel_1.default.levels.DEBUG) {
|
108
|
+
(0, logger_js_1.logger)().debug(event.stream.trim());
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
spinner.text = `${imageName}: [Build] - ${event.stream}`;
|
112
|
+
}
|
113
|
+
}
|
114
|
+
else if ('errorDetail' in event) {
|
115
|
+
isFailed = true;
|
116
|
+
spinner.error(event.error);
|
117
|
+
reject(new Error(event.error));
|
118
|
+
}
|
91
119
|
}
|
92
120
|
});
|
93
121
|
});
|
94
122
|
}
|
95
123
|
async function runImage(image, args, options, debug) {
|
96
|
-
await Promise.all((await docker.listContainers({ all: true, filters: { ancestor: [image] } })).map(async (info) => {
|
97
|
-
const container = docker.getContainer(info.Id);
|
98
|
-
try {
|
99
|
-
await container.stop();
|
100
|
-
}
|
101
|
-
catch {
|
102
|
-
/* noop */
|
103
|
-
}
|
104
|
-
await container.remove();
|
105
|
-
}));
|
106
124
|
const hub = docker.run(image, args, debug ? process.stdout : new DevNull(), options, (error) => {
|
107
125
|
if (error)
|
108
126
|
throw error;
|
@@ -112,8 +130,7 @@ async function runImage(image, args, options, debug) {
|
|
112
130
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
113
131
|
(0, messages_js_1.subscribeOn)('shutdown', async () => {
|
114
132
|
try {
|
115
|
-
await container.
|
116
|
-
await container.remove();
|
133
|
+
await container.remove({ force: true });
|
117
134
|
}
|
118
135
|
catch {
|
119
136
|
/* noop */
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/server/docker.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/server/docker.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
@@ -5,6 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.default = default_1;
|
7
7
|
const cluster_1 = __importDefault(require("cluster"));
|
8
|
+
const path_1 = __importDefault(require("path"));
|
9
|
+
const shelljs_1 = require("shelljs");
|
10
|
+
const detect_1 = require("package-manager-detector/detect");
|
11
|
+
const commands_1 = require("package-manager-detector/commands");
|
8
12
|
const config_js_1 = require("./config.js");
|
9
13
|
const types_js_1 = require("../types.js");
|
10
14
|
const logger_js_1 = require("./logger.js");
|
@@ -12,8 +16,10 @@ const webdriver_js_1 = require("./selenium/webdriver.js");
|
|
12
16
|
const webdriver_js_2 = require("./webdriver.js");
|
13
17
|
const utils_js_1 = require("./utils.js");
|
14
18
|
const messages_js_1 = require("./messages.js");
|
15
|
-
const docker_file_js_1 = require("./playwright/docker-file.js");
|
16
19
|
const docker_js_1 = require("./docker.js");
|
20
|
+
const promises_1 = require("fs/promises");
|
21
|
+
const connection_js_1 = require("./connection.js");
|
22
|
+
const assert_1 = __importDefault(require("assert"));
|
17
23
|
async function startWebdriverServer(browser, config, options) {
|
18
24
|
if (config.webdriver === webdriver_js_1.SeleniumWebdriver) {
|
19
25
|
if (cluster_1.default.isPrimary) {
|
@@ -31,12 +37,15 @@ async function startWebdriverServer(browser, config, options) {
|
|
31
37
|
else {
|
32
38
|
if (config.gridUrl)
|
33
39
|
return undefined;
|
34
|
-
|
40
|
+
if (!config.useDocker) {
|
41
|
+
if (cluster_1.default.isPrimary)
|
42
|
+
return undefined;
|
43
|
+
const { browserName } = config.browsers[browser];
|
44
|
+
return `creevey://${(0, utils_js_1.resolvePlaywrightBrowserType)(browserName)}.playwright`;
|
45
|
+
}
|
35
46
|
const { default: { version }, } = await import('playwright-core/package.json', { with: { type: 'json' } });
|
36
47
|
if (cluster_1.default.isWorker) {
|
37
48
|
// TODO Re-use dockerImage
|
38
|
-
// TODO Use https://hub.docker.com/r/playwright/chrome
|
39
|
-
// NOTE It will be possible to use `chrome` browserName
|
40
49
|
const { startPlaywrightContainer } = await import('./playwright/docker.js');
|
41
50
|
const { browserName } = config.browsers[browser];
|
42
51
|
const imageName = `creevey/${browserName}:v${version}`;
|
@@ -44,10 +53,13 @@ async function startWebdriverServer(browser, config, options) {
|
|
44
53
|
return host;
|
45
54
|
}
|
46
55
|
else {
|
47
|
-
const
|
48
|
-
|
56
|
+
const { playwrightDockerFile } = await import('./playwright/docker-file.js');
|
57
|
+
const browsers = [
|
58
|
+
...new Set(Object.values(config.browsers).map((c) => [c.browserName, c.playwrightOptions])),
|
59
|
+
];
|
60
|
+
await Promise.all(browsers.map(async ([browserName, launchOptions]) => {
|
49
61
|
const imageName = `creevey/${browserName}:v${version}`;
|
50
|
-
const dockerfile =
|
62
|
+
const dockerfile = playwrightDockerFile(browserName, version, launchOptions);
|
51
63
|
await (0, docker_js_1.buildImage)(imageName, dockerfile);
|
52
64
|
}));
|
53
65
|
const { default: getPort } = await import('get-port');
|
@@ -73,11 +85,51 @@ async function default_1(options) {
|
|
73
85
|
const config = await (0, config_js_1.readConfig)(options);
|
74
86
|
const { browser = config_js_1.defaultBrowser, update, ui, port } = options;
|
75
87
|
let gridUrl = cluster_1.default.isPrimary ? config.gridUrl : options.gridUrl;
|
88
|
+
// TODO Add package.json with `"type": "commonjs"` as workaround for esm packages to load `data.js`
|
89
|
+
await (0, promises_1.mkdir)(config.reportDir, { recursive: true });
|
90
|
+
await (0, promises_1.writeFile)(path_1.default.join(config.reportDir, 'package.json'), '{"type": "commonjs"}');
|
76
91
|
// NOTE: We don't need docker nor selenoid for update option
|
77
92
|
if (!(gridUrl || Object.values(config.browsers).every(({ gridUrl }) => gridUrl)) &&
|
78
93
|
!update) {
|
79
94
|
gridUrl = await startWebdriverServer(browser, config, options);
|
80
95
|
}
|
96
|
+
if (cluster_1.default.isPrimary) {
|
97
|
+
const [localUrl, remoteUrl] = (0, connection_js_1.getStorybookUrl)(config, options);
|
98
|
+
const pm = (0, detect_1.getUserAgent)();
|
99
|
+
(0, assert_1.default)(pm, new Error('Failed to detect current package manager'));
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
101
|
+
const { command, args } = (0, commands_1.resolveCommand)(pm, 'run', ['storybook', 'dev']);
|
102
|
+
if (options.storybookStart) {
|
103
|
+
const storybookPort = new URL(localUrl).port;
|
104
|
+
const storybookCommand = `${config.storybookAutorunCmd ?? [command, ...args, '--ci'].join(' ')} -p ${storybookPort}`;
|
105
|
+
(0, logger_js_1.logger)().info(`Start Storybook via \`${storybookCommand}\`, it should be accessible at:`);
|
106
|
+
(0, logger_js_1.logger)().info(`Local - ${localUrl}`);
|
107
|
+
if (remoteUrl && localUrl != remoteUrl)
|
108
|
+
(0, logger_js_1.logger)().info(`On your network - ${remoteUrl}`);
|
109
|
+
(0, logger_js_1.logger)().info('Waiting Storybook...');
|
110
|
+
const storybook = (0, shelljs_1.exec)(storybookCommand, { async: true });
|
111
|
+
(0, messages_js_1.subscribeOn)('shutdown', () => {
|
112
|
+
if (storybook.pid)
|
113
|
+
void (0, utils_js_1.killTree)(storybook.pid);
|
114
|
+
});
|
115
|
+
}
|
116
|
+
else {
|
117
|
+
(0, logger_js_1.logger)().info('Storybook should be started and be accessible at:');
|
118
|
+
(0, logger_js_1.logger)().info(`Local - ${localUrl}`);
|
119
|
+
if (remoteUrl && localUrl != remoteUrl)
|
120
|
+
(0, logger_js_1.logger)().info(`On your network - ${remoteUrl}`);
|
121
|
+
(0, logger_js_1.logger)().info('Tip: Creevey can start Storybook automatically by using `-s` option at the command line. (e.g., yarn/npm run creevey -s)');
|
122
|
+
(0, logger_js_1.logger)().info('Waiting Storybook...');
|
123
|
+
}
|
124
|
+
const isConnected = await (0, connection_js_1.checkIsStorybookConnected)(localUrl);
|
125
|
+
if (isConnected) {
|
126
|
+
(0, logger_js_1.logger)().info('Storybook connected!\n');
|
127
|
+
}
|
128
|
+
else {
|
129
|
+
(0, logger_js_1.logger)().error('Storybook is not responding. Please start Storybook and restart Creevey');
|
130
|
+
(0, utils_js_1.shutdownWithError)();
|
131
|
+
}
|
132
|
+
}
|
81
133
|
switch (true) {
|
82
134
|
case Boolean(update): {
|
83
135
|
(await import('./update.js')).update(config, typeof update == 'string' ? update : undefined);
|
@@ -89,7 +141,7 @@ async function default_1(options) {
|
|
89
141
|
await import('selenium-webdriver');
|
90
142
|
}
|
91
143
|
catch {
|
92
|
-
logger_js_1.logger.error('Failed to start Creevey, missing required dependency: "selenium-webdriver"');
|
144
|
+
(0, logger_js_1.logger)().error('Failed to start Creevey, missing required dependency: "selenium-webdriver"');
|
93
145
|
process.exit(-1);
|
94
146
|
}
|
95
147
|
}
|
@@ -98,16 +150,16 @@ async function default_1(options) {
|
|
98
150
|
await import('playwright-core');
|
99
151
|
}
|
100
152
|
catch {
|
101
|
-
logger_js_1.logger.error('Failed to start Creevey, missing required dependency: "playwright-core"');
|
153
|
+
(0, logger_js_1.logger)().error('Failed to start Creevey, missing required dependency: "playwright-core"');
|
102
154
|
process.exit(-1);
|
103
155
|
}
|
104
156
|
}
|
105
|
-
logger_js_1.logger.info('Starting Master Process');
|
157
|
+
(0, logger_js_1.logger)().info('Starting Master Process');
|
106
158
|
const resolveApi = (await import('./master/server.js')).start(config.reportDir, port, ui);
|
107
159
|
return (await import('./master/start.js')).start(gridUrl, config, options, resolveApi);
|
108
160
|
}
|
109
161
|
default: {
|
110
|
-
logger_js_1.logger.info(`Starting Worker for ${browser}`);
|
162
|
+
(0, logger_js_1.logger)().info(`Starting Worker for ${browser}`);
|
111
163
|
// NOTE: We assume that we pass `gridUrl` to worker CLI options
|
112
164
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
113
165
|
return (await import('./worker/start.js')).start(browser, gridUrl, config, options);
|