creevey 0.9.0-beta.2 → 0.9.0-beta.20
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/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- 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/cli.js +1 -0
- package/lib/cjs/client/addon/Manager.js +170 -390
- package/lib/cjs/client/addon/components/Addon.js +17 -45
- package/lib/cjs/client/addon/components/Icons.js +12 -14
- package/lib/cjs/client/addon/components/Panel.js +21 -30
- package/lib/cjs/client/addon/components/TestSelect.js +20 -31
- package/lib/cjs/client/addon/components/Tools.js +35 -65
- package/lib/cjs/client/addon/decorator.js +1 -4
- package/lib/cjs/client/addon/index.js +27 -0
- package/lib/cjs/client/addon/preset.js +3 -76
- package/lib/cjs/client/addon/preview.js +11 -0
- package/lib/cjs/client/addon/readyForCapture.js +1 -4
- package/lib/cjs/client/addon/register.js +43 -82
- package/lib/cjs/client/addon/utils.js +4 -8
- package/lib/cjs/client/addon/withCreevey.js +145 -404
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +25 -35
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +29 -41
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +46 -83
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +39 -67
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +26 -57
- package/lib/cjs/client/shared/components/ImagesView/index.js +9 -14
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +13 -16
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +16 -37
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +42 -34
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +40 -84
- package/lib/cjs/client/shared/components/ResultsPage.js +42 -99
- package/lib/cjs/client/shared/creeveyClientApi.js +56 -93
- package/lib/cjs/client/shared/helpers.js +149 -274
- package/lib/cjs/client/shared/viewMode.js +5 -9
- package/lib/cjs/client/web/192.js +1 -0
- package/lib/cjs/client/web/632.js +43 -0
- package/lib/cjs/client/web/794.js +1 -0
- package/lib/cjs/client/web/main.js +79 -38
- package/lib/cjs/client/web/main.js.LICENSE.txt +34 -0
- package/lib/cjs/creevey.js +15 -30
- package/lib/cjs/index.js +0 -15
- package/lib/cjs/server/config.js +16 -36
- package/lib/cjs/server/docker.js +8 -34
- package/lib/cjs/server/index.js +9 -34
- package/lib/cjs/server/logger.js +7 -20
- package/lib/cjs/server/master/api.js +1 -14
- package/lib/cjs/server/master/index.js +25 -49
- package/lib/cjs/server/master/master.js +6 -21
- package/lib/cjs/server/master/pool.js +10 -53
- package/lib/cjs/server/master/runner.js +65 -105
- package/lib/cjs/server/master/server.js +10 -29
- package/lib/cjs/server/messages.js +14 -62
- package/lib/cjs/server/selenium/browser.js +149 -185
- package/lib/cjs/server/selenium/index.js +0 -4
- package/lib/cjs/server/selenium/selenoid.js +18 -44
- package/lib/cjs/server/stories.js +35 -57
- package/lib/cjs/server/storybook/providers/browser.js +15 -29
- package/lib/cjs/server/storybook/providers/hybrid.js +16 -37
- package/lib/cjs/server/telemetry.js +167 -0
- package/lib/cjs/server/testsFiles/parser.js +3 -19
- package/lib/cjs/server/testsFiles/register.js +8 -14
- package/lib/cjs/server/update.js +4 -25
- package/lib/cjs/server/utils.js +35 -76
- package/lib/cjs/server/worker/chai-image.js +1 -27
- package/lib/cjs/server/worker/helpers.js +2 -12
- package/lib/cjs/server/worker/index.js +1 -3
- package/lib/cjs/server/worker/reporter.js +16 -43
- package/lib/cjs/server/worker/worker.js +32 -72
- package/lib/cjs/shared/index.js +87 -0
- package/lib/cjs/shared/serializeRegExp.js +34 -0
- package/lib/cjs/types.js +11 -20
- package/lib/esm/cli.js +1 -1
- package/lib/esm/client/addon/Manager.js +170 -381
- 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 +20 -18
- package/lib/esm/client/addon/components/TestSelect.js +19 -23
- package/lib/esm/client/addon/components/Tools.js +33 -49
- package/lib/esm/client/addon/decorator.js +1 -1
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.js +2 -56
- package/lib/esm/client/addon/preview.js +5 -0
- package/lib/esm/client/addon/readyForCapture.js +1 -3
- package/lib/esm/client/addon/register.js +41 -67
- package/lib/esm/client/addon/utils.js +3 -7
- package/lib/esm/client/addon/withCreevey.js +142 -388
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +22 -18
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +27 -25
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +43 -63
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +36 -47
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +23 -40
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/esm/client/shared/components/PageFooter/Paging.js +15 -29
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +40 -25
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +38 -66
- package/lib/esm/client/shared/components/ResultsPage.js +39 -75
- package/lib/esm/client/shared/creeveyClientApi.js +56 -90
- package/lib/esm/client/shared/helpers.js +133 -230
- package/lib/esm/client/shared/viewMode.js +4 -4
- package/lib/esm/client/web/192.js +1 -0
- package/lib/esm/client/web/632.js +43 -0
- package/lib/esm/client/web/794.js +1 -0
- package/lib/esm/client/web/index.html +19 -0
- package/lib/esm/client/web/main.js +79 -0
- package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
- package/lib/esm/creevey.js +13 -16
- package/lib/esm/index.js +1 -4
- package/lib/esm/server/config.js +9 -16
- package/lib/esm/server/docker.js +6 -14
- package/lib/esm/server/index.js +8 -22
- package/lib/esm/server/logger.js +0 -1
- package/lib/esm/server/master/api.js +0 -9
- package/lib/esm/server/master/index.js +25 -35
- package/lib/esm/server/master/master.js +2 -7
- package/lib/esm/server/master/pool.js +8 -41
- package/lib/esm/server/master/runner.js +64 -90
- package/lib/esm/server/master/server.js +9 -11
- package/lib/esm/server/messages.js +8 -42
- package/lib/esm/server/selenium/browser.js +147 -163
- package/lib/esm/server/selenium/selenoid.js +16 -27
- package/lib/esm/server/stories.js +34 -46
- package/lib/esm/server/storybook/providers/browser.js +12 -17
- package/lib/esm/server/storybook/providers/hybrid.js +11 -22
- package/lib/esm/server/telemetry.js +160 -0
- package/lib/esm/server/testsFiles/parser.js +0 -6
- package/lib/esm/server/testsFiles/register.js +6 -7
- package/lib/esm/server/update.js +1 -13
- package/lib/esm/server/utils.js +20 -41
- package/lib/esm/server/worker/chai-image.js +0 -21
- package/lib/esm/server/worker/helpers.js +2 -9
- package/lib/esm/server/worker/reporter.js +15 -29
- package/lib/esm/server/worker/worker.js +31 -48
- package/lib/esm/shared/index.js +77 -0
- package/lib/esm/shared/serializeRegExp.js +24 -0
- package/lib/esm/types.js +5 -1
- package/lib/types/client/addon/Manager.d.ts +3 -3
- package/lib/types/client/addon/components/Addon.d.ts +1 -0
- package/lib/types/client/addon/components/Icons.d.ts +1 -0
- package/lib/types/client/addon/components/Panel.d.ts +1 -0
- package/lib/types/client/addon/components/Tools.d.ts +1 -0
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/index.d.ts +2 -0
- package/lib/types/client/addon/preset.d.ts +2 -24
- 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 +4 -3
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
- package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
- package/lib/types/client/web/CreeveyLoader.d.ts +1 -1
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +6 -3
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
- package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
- package/lib/types/client/web/KeyboardEventsContext.d.ts +4 -2
- package/lib/types/index.d.ts +4 -1
- package/lib/types/server/logger.d.ts +6 -2
- package/lib/types/server/messages.d.ts +14 -12
- package/lib/types/server/selenium/browser.d.ts +5 -3
- 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/telemetry.d.ts +2 -0
- package/lib/types/server/utils.d.ts +5 -1
- package/lib/types/shared/index.d.ts +7 -0
- package/lib/types/shared/serializeRegExp.d.ts +9 -0
- package/lib/types/types.d.ts +29 -36
- package/package.json +132 -133
- package/types/global.d.ts +5 -0
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/lib/cjs/server/extract.js +0 -50
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
- package/lib/cjs/server/loaders/babel/helpers.js +0 -479
- package/lib/cjs/server/loaders/babel/register.js +0 -126
- package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
- package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
- package/lib/cjs/server/loaders/webpack/compile.js +0 -286
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
- package/lib/cjs/server/loaders/webpack/start.js +0 -41
- package/lib/cjs/server/storybook/entry.js +0 -68
- package/lib/cjs/server/storybook/helpers.js +0 -165
- package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
- package/lib/cjs/shared.js +0 -124
- package/lib/esm/server/extract.js +0 -34
- package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
- package/lib/esm/server/loaders/babel/helpers.js +0 -462
- package/lib/esm/server/loaders/babel/register.js +0 -105
- package/lib/esm/server/loaders/hooks/mdx.js +0 -15
- package/lib/esm/server/loaders/hooks/svelte.js +0 -49
- package/lib/esm/server/loaders/webpack/compile.js +0 -263
- package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
- package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
- package/lib/esm/server/loaders/webpack/start.js +0 -27
- package/lib/esm/server/storybook/entry.js +0 -44
- package/lib/esm/server/storybook/helpers.js +0 -106
- package/lib/esm/server/storybook/providers/nodejs.js +0 -217
- package/lib/esm/shared.js +0 -93
- package/lib/types/server/extract.d.ts +0 -2
- package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
- package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
- package/lib/types/server/loaders/babel/register.d.ts +0 -5
- package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
- package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
- package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -2
- package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
- package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
- package/lib/types/server/loaders/webpack/start.d.ts +0 -1
- package/lib/types/server/storybook/entry.d.ts +0 -18
- package/lib/types/server/storybook/helpers.d.ts +0 -24
- package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
- package/lib/types/shared.d.ts +0 -16
- package/preset.js +0 -9
- package/storybook-static/stories.json +0 -21
- package/types/mdx.d.ts +0 -6
@@ -3,472 +3,245 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.withCreevey = withCreevey;
|
7
6
|
exports.capture = capture;
|
8
|
-
|
7
|
+
exports.withCreevey = withCreevey;
|
9
8
|
var Events = _interopRequireWildcard(require("@storybook/core-events"));
|
10
|
-
|
11
|
-
var polyfill = _interopRequireWildcard(require("event-source-polyfill"));
|
12
|
-
|
13
|
-
var _addons = require("@storybook/addons");
|
14
|
-
|
9
|
+
var _previewApi = require("@storybook/preview-api");
|
15
10
|
var _types = require("../../types");
|
16
|
-
|
17
11
|
var _shared = require("../../shared");
|
18
|
-
|
19
12
|
var _helpers = require("../shared/helpers");
|
20
|
-
|
21
|
-
function
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
34
|
-
|
35
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
36
|
-
|
37
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
38
|
-
|
39
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
40
|
-
|
41
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
42
|
-
|
43
|
-
if ((typeof process === "undefined" ? "undefined" : _typeof(process)) != 'object' || typeof process.version != 'string') {
|
44
|
-
// NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11
|
45
|
-
// You don't get hot reload in IE11. So put polyfill for that to better UX
|
46
|
-
// Don't load in nodejs environment
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
48
|
-
var NativeEventSource = polyfill.NativeEventSource,
|
49
|
-
EventSourcePolyfill = polyfill.EventSourcePolyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
50
|
-
|
51
|
-
window.EventSource = NativeEventSource || EventSourcePolyfill;
|
13
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
15
|
+
const disableAnimationsStyles = `
|
16
|
+
*,
|
17
|
+
*:hover,
|
18
|
+
*::before,
|
19
|
+
*::after {
|
20
|
+
animation-delay: -0.0001ms !important;
|
21
|
+
animation-duration: 0s !important;
|
22
|
+
animation-play-state: paused !important;
|
23
|
+
cursor: none !important;
|
24
|
+
caret-color: transparent !important;
|
25
|
+
transition: 0s !important;
|
52
26
|
}
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
27
|
+
`;
|
28
|
+
async function resetCurrentStory(channel) {
|
29
|
+
setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
|
30
|
+
storyId: true,
|
31
|
+
name: '',
|
32
|
+
kind: ''
|
33
|
+
}), 0);
|
34
|
+
return new Promise(resolve => channel.once(Events.STORY_MISSING, resolve));
|
58
35
|
}
|
59
|
-
|
60
|
-
function _resetCurrentStory() {
|
61
|
-
_resetCurrentStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(channel) {
|
62
|
-
return regeneratorRuntime.wrap(function _callee4$(_context4) {
|
63
|
-
while (1) {
|
64
|
-
switch (_context4.prev = _context4.next) {
|
65
|
-
case 0:
|
66
|
-
setTimeout(function () {
|
67
|
-
return channel.emit(Events.SET_CURRENT_STORY, {
|
68
|
-
storyId: true,
|
69
|
-
name: '',
|
70
|
-
kind: ''
|
71
|
-
});
|
72
|
-
}, 0);
|
73
|
-
return _context4.abrupt("return", new Promise(function (resolve) {
|
74
|
-
return channel.once(Events.STORY_MISSING, resolve);
|
75
|
-
}));
|
76
|
-
|
77
|
-
case 2:
|
78
|
-
case "end":
|
79
|
-
return _context4.stop();
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}, _callee4);
|
83
|
-
}));
|
84
|
-
return _resetCurrentStory.apply(this, arguments);
|
85
|
-
}
|
86
|
-
|
87
36
|
function catchRenderError(channel) {
|
88
|
-
|
89
|
-
|
90
|
-
return rejectCallback = reject;
|
91
|
-
});
|
92
|
-
|
37
|
+
let rejectCallback;
|
38
|
+
const promise = new Promise((_resolve, reject) => rejectCallback = reject);
|
93
39
|
function errorHandler(_ref) {
|
94
|
-
|
95
|
-
|
40
|
+
let {
|
41
|
+
title,
|
42
|
+
description
|
43
|
+
} = _ref;
|
96
44
|
rejectCallback({
|
97
45
|
message: title,
|
98
46
|
stack: description
|
99
47
|
});
|
100
48
|
}
|
101
|
-
|
102
49
|
function exceptionHandler(exception) {
|
103
50
|
rejectCallback(exception);
|
104
51
|
}
|
105
|
-
|
106
52
|
function removeHandlers() {
|
107
53
|
channel.off(Events.STORY_ERRORED, errorHandler);
|
108
54
|
channel.off(Events.STORY_THREW_EXCEPTION, errorHandler);
|
109
55
|
}
|
110
|
-
|
111
56
|
channel.once(Events.STORY_ERRORED, errorHandler);
|
112
57
|
channel.once(Events.STORY_THREW_EXCEPTION, exceptionHandler);
|
113
58
|
return Object.assign(promise, {
|
114
59
|
cancel: removeHandlers
|
115
60
|
});
|
116
61
|
}
|
117
|
-
|
118
62
|
function waitForStoryRendered(channel) {
|
119
|
-
|
120
|
-
|
121
|
-
return resolveCallback = resolve;
|
122
|
-
});
|
123
|
-
|
63
|
+
let resolveCallback;
|
64
|
+
const promise = new Promise(resolve => resolveCallback = resolve);
|
124
65
|
function renderHandler() {
|
125
66
|
resolveCallback();
|
126
67
|
}
|
127
|
-
|
128
68
|
function removeHandlers() {
|
129
69
|
channel.off(Events.STORY_RENDERED, renderHandler);
|
130
70
|
}
|
131
|
-
|
132
71
|
channel.once(Events.STORY_RENDERED, renderHandler);
|
133
72
|
return Object.assign(promise, {
|
134
73
|
cancel: removeHandlers
|
135
74
|
});
|
136
75
|
}
|
137
|
-
|
138
76
|
function waitForFontsLoaded() {
|
139
77
|
if (!document.fonts) return;
|
140
|
-
|
141
|
-
return font.status == 'loading';
|
142
|
-
});
|
143
|
-
|
78
|
+
const areFontsLoading = Array.from(document.fonts).some(font => font.status == 'loading');
|
144
79
|
if (areFontsLoading) {
|
145
|
-
return new Promise(
|
146
|
-
|
80
|
+
return new Promise(resolve => {
|
81
|
+
const fontsLoadedHandler = () => {
|
147
82
|
document.fonts.removeEventListener('loadingdone', fontsLoadedHandler);
|
148
83
|
resolve();
|
149
84
|
};
|
150
|
-
|
151
85
|
document.fonts.addEventListener('loadingdone', fontsLoadedHandler);
|
152
86
|
});
|
153
87
|
}
|
154
88
|
}
|
155
|
-
|
156
89
|
function waitForCaptureCall() {
|
157
|
-
return new Promise(
|
158
|
-
return captureResolver = resolve;
|
159
|
-
});
|
90
|
+
return new Promise(resolve => captureResolver = resolve);
|
160
91
|
}
|
161
|
-
|
162
92
|
function initCreeveyState() {
|
163
|
-
|
164
|
-
|
165
|
-
var prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
|
93
|
+
const prevState = JSON.parse(window.localStorage.getItem('Creevey_Tests') ?? '{}');
|
166
94
|
if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
|
167
95
|
if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
|
168
96
|
if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
|
169
97
|
if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
|
170
|
-
window.addEventListener('beforeunload',
|
98
|
+
window.addEventListener('beforeunload', () => {
|
171
99
|
window.localStorage.setItem('Creevey_Tests', JSON.stringify({
|
172
100
|
creeveyHost: window.__CREEVEY_SERVER_HOST__,
|
173
101
|
creeveyPort: window.__CREEVEY_SERVER_PORT__,
|
174
|
-
setStoriesCounter
|
175
|
-
isTestBrowser
|
102
|
+
setStoriesCounter,
|
103
|
+
isTestBrowser
|
176
104
|
}));
|
177
105
|
});
|
178
106
|
}
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
var setStoriesCounter = 0;
|
185
|
-
|
107
|
+
let isTestBrowser = false;
|
108
|
+
let captureResolver;
|
109
|
+
let waitForCreevey;
|
110
|
+
let creeveyReady;
|
111
|
+
let setStoriesCounter = 0;
|
186
112
|
function withCreevey() {
|
187
|
-
|
188
|
-
|
113
|
+
const addonsChannel = () => window.__STORYBOOK_ADDONS_CHANNEL__;
|
114
|
+
let currentStory = '';
|
115
|
+
let isAnimationDisabled = false;
|
189
116
|
initCreeveyState();
|
190
|
-
|
191
117
|
function disableAnimation() {
|
192
118
|
isAnimationDisabled = true;
|
193
|
-
|
194
|
-
|
119
|
+
const style = document.createElement('style');
|
120
|
+
const textNode = document.createTextNode(disableAnimationsStyles);
|
195
121
|
style.setAttribute('type', 'text/css');
|
196
122
|
style.appendChild(textNode);
|
197
123
|
document.head.appendChild(style);
|
198
124
|
}
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {}; // @ts-expect-error `pushToManager` exists only in Storybook 6.0 - 6.3
|
219
|
-
|
220
|
-
if (!store.pushToManager) {
|
221
|
-
_context.next = 6;
|
222
|
-
break;
|
223
|
-
}
|
224
|
-
|
225
|
-
// @ts-expect-error `pushToManager` exists only in Storybook 6.0 - 6.3
|
226
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
227
|
-
store.pushToManager();
|
228
|
-
_context.next = 13;
|
229
|
-
break;
|
230
|
-
|
231
|
-
case 6:
|
232
|
-
if (!store.cacheAllCSFFiles) {
|
233
|
-
_context.next = 12;
|
234
|
-
break;
|
235
|
-
}
|
236
|
-
|
237
|
-
_context.next = 9;
|
238
|
-
return store.cacheAllCSFFiles();
|
239
|
-
|
240
|
-
case 9:
|
241
|
-
_addons.addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
|
242
|
-
|
243
|
-
_context.next = 13;
|
244
|
-
break;
|
245
|
-
|
246
|
-
case 12:
|
247
|
-
return _context.abrupt("return");
|
248
|
-
|
249
|
-
case 13:
|
250
|
-
_addons.addons.getChannel().on(Events.SET_STORIES, function (data) {
|
251
|
-
// TODO Figure out how to get only updated stories
|
252
|
-
// TODO Subscribe on hmr? like use dummy-hmr
|
253
|
-
setStoriesCounter += 1;
|
254
|
-
var stories = (0, _shared.serializeRawStories)((0, _shared.denormalizeStoryParameters)(data));
|
255
|
-
var storiesByFiles = new Map();
|
256
|
-
Object.values(stories).forEach(function (story) {
|
257
|
-
var storiesFromFile = storiesByFiles.get(story.parameters.fileName);
|
258
|
-
if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
|
259
|
-
});
|
260
|
-
void fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/stories"), {
|
261
|
-
method: 'POST',
|
262
|
-
headers: {
|
263
|
-
'Content-Type': 'application/json'
|
264
|
-
},
|
265
|
-
body: JSON.stringify({
|
266
|
-
setStoriesCounter: setStoriesCounter,
|
267
|
-
stories: _toConsumableArray(storiesByFiles.entries())
|
268
|
-
})
|
269
|
-
});
|
270
|
-
});
|
271
|
-
|
272
|
-
return _context.abrupt("return", storiesPromise);
|
273
|
-
|
274
|
-
case 15:
|
275
|
-
case "end":
|
276
|
-
return _context.stop();
|
277
|
-
}
|
278
|
-
}
|
279
|
-
}, _callee);
|
280
|
-
}));
|
281
|
-
return _getStories.apply(this, arguments);
|
282
|
-
}
|
283
|
-
|
284
|
-
function selectStory(_x2, _x3, _x4, _x5, _x6) {
|
285
|
-
return _selectStory.apply(this, arguments);
|
125
|
+
async function getStories() {
|
126
|
+
const stories = (0, _shared.serializeRawStories)(await window.__STORYBOOK_PREVIEW__.extract());
|
127
|
+
const storiesByFiles = new Map();
|
128
|
+
Object.values(stories).forEach(story => {
|
129
|
+
const fileName = story.parameters.fileName;
|
130
|
+
const storiesFromFile = storiesByFiles.get(fileName);
|
131
|
+
if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(fileName, [story]);
|
132
|
+
});
|
133
|
+
void fetch(`http://${(0, _helpers.getConnectionUrl)()}/stories`, {
|
134
|
+
method: 'POST',
|
135
|
+
headers: {
|
136
|
+
'Content-Type': 'application/json'
|
137
|
+
},
|
138
|
+
body: JSON.stringify({
|
139
|
+
setStoriesCounter,
|
140
|
+
stories: [...storiesByFiles.entries()]
|
141
|
+
})
|
142
|
+
});
|
143
|
+
return stories;
|
286
144
|
}
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
case 10:
|
319
|
-
isCaptureCalled = false;
|
320
|
-
renderPromise = waitForStoryRendered(channel);
|
321
|
-
errorPromise = catchRenderError(channel);
|
322
|
-
capturePromise = waitForCaptureCall().then(function () {
|
323
|
-
return isCaptureCalled = true;
|
324
|
-
});
|
325
|
-
setTimeout(function () {
|
326
|
-
return channel.emit(Events.SET_CURRENT_STORY, {
|
327
|
-
storyId: storyId,
|
328
|
-
name: name,
|
329
|
-
kind: kind
|
330
|
-
});
|
331
|
-
}, 0);
|
332
|
-
_context3.prev = 15;
|
333
|
-
_context3.next = 18;
|
334
|
-
return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
335
|
-
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
336
|
-
while (1) {
|
337
|
-
switch (_context2.prev = _context2.next) {
|
338
|
-
case 0:
|
339
|
-
_context2.next = 2;
|
340
|
-
return Promise.race([renderPromise, capturePromise]);
|
341
|
-
|
342
|
-
case 2:
|
343
|
-
_context2.next = 4;
|
344
|
-
return waitForFontsLoaded();
|
345
|
-
|
346
|
-
case 4:
|
347
|
-
_context2.next = 6;
|
348
|
-
return waitForReady;
|
349
|
-
|
350
|
-
case 6:
|
351
|
-
case "end":
|
352
|
-
return _context2.stop();
|
353
|
-
}
|
354
|
-
}
|
355
|
-
}, _callee2);
|
356
|
-
}))(), errorPromise]);
|
357
|
-
|
358
|
-
case 18:
|
359
|
-
callback([null, isCaptureCalled]);
|
360
|
-
_context3.next = 25;
|
361
|
-
break;
|
362
|
-
|
363
|
-
case 21:
|
364
|
-
_context3.prev = 21;
|
365
|
-
_context3.t0 = _context3["catch"](15);
|
366
|
-
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
367
|
-
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
368
|
-
errorMessage = _context3.t0 instanceof Error ? (_reason$stack = _context3.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context3.t0.message : (0, _types.isObject)(_context3.t0) ? "".concat(_context3.t0.message, "\n ").concat(_context3.t0.stack) : _context3.t0;
|
369
|
-
callback([errorMessage]);
|
370
|
-
|
371
|
-
case 25:
|
372
|
-
_context3.prev = 25;
|
373
|
-
renderPromise.cancel();
|
374
|
-
errorPromise.cancel();
|
375
|
-
return _context3.finish(25);
|
376
|
-
|
377
|
-
case 29:
|
378
|
-
case "end":
|
379
|
-
return _context3.stop();
|
380
|
-
}
|
381
|
-
}
|
382
|
-
}, _callee3, null, [[15, 21, 25, 29]]);
|
383
|
-
}));
|
384
|
-
return _selectStory.apply(this, arguments);
|
145
|
+
async function selectStory(storyId, kind, name, shouldWaitForReady, callback) {
|
146
|
+
if (!isAnimationDisabled) disableAnimation();
|
147
|
+
isTestBrowser = true;
|
148
|
+
const channel = addonsChannel();
|
149
|
+
const waitForReady = shouldWaitForReady ? new Promise(resolve => window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve) : Promise.resolve();
|
150
|
+
if (storyId == currentStory) await resetCurrentStory(channel);else currentStory = storyId;
|
151
|
+
let isCaptureCalled = false;
|
152
|
+
const renderPromise = waitForStoryRendered(channel);
|
153
|
+
const errorPromise = catchRenderError(channel);
|
154
|
+
const capturePromise = waitForCaptureCall().then(() => isCaptureCalled = true);
|
155
|
+
setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
|
156
|
+
storyId,
|
157
|
+
name,
|
158
|
+
kind
|
159
|
+
}), 0);
|
160
|
+
try {
|
161
|
+
await Promise.race([(async () => {
|
162
|
+
await Promise.race([renderPromise, capturePromise]);
|
163
|
+
await waitForFontsLoaded();
|
164
|
+
await waitForReady;
|
165
|
+
})(), errorPromise]);
|
166
|
+
callback([null, isCaptureCalled]);
|
167
|
+
} catch (reason) {
|
168
|
+
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
169
|
+
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
170
|
+
const errorMessage = reason instanceof Error ? reason.stack ?? reason.message : (0, _types.isObject)(reason) ? `${reason.message}\n ${reason.stack}` : reason;
|
171
|
+
callback([errorMessage]);
|
172
|
+
} finally {
|
173
|
+
renderPromise.cancel();
|
174
|
+
errorPromise.cancel();
|
175
|
+
}
|
385
176
|
}
|
386
|
-
|
387
177
|
function updateGlobals(globals) {
|
388
|
-
|
389
|
-
globals
|
178
|
+
addonsChannel().emit(Events.UPDATE_GLOBALS, {
|
179
|
+
globals
|
390
180
|
});
|
391
181
|
}
|
392
|
-
|
393
182
|
function insertIgnoreStyles(ignoreSelectors) {
|
394
|
-
|
183
|
+
const stylesElement = document.createElement('style');
|
395
184
|
stylesElement.setAttribute('type', 'text/css');
|
396
185
|
document.head.appendChild(stylesElement);
|
397
|
-
ignoreSelectors.forEach(
|
398
|
-
stylesElement.innerHTML +=
|
186
|
+
ignoreSelectors.forEach(selector => {
|
187
|
+
stylesElement.innerHTML += `
|
188
|
+
${selector} {
|
189
|
+
background: #000 !important;
|
190
|
+
box-shadow: none !important;
|
191
|
+
text-shadow: none !important;
|
192
|
+
outline: 0 !important;
|
193
|
+
color: rgba(0,0,0,0) !important;
|
194
|
+
}
|
195
|
+
${selector} *, ${selector}::before, ${selector}::after {
|
196
|
+
visibility: hidden !important;
|
197
|
+
}
|
198
|
+
`;
|
399
199
|
});
|
400
200
|
return stylesElement;
|
401
201
|
}
|
402
|
-
|
403
202
|
function removeIgnoreStyles(ignoreStyles) {
|
404
|
-
|
405
|
-
|
406
|
-
(_ignoreStyles$parentN = ignoreStyles.parentNode) === null || _ignoreStyles$parentN === void 0 ? void 0 : _ignoreStyles$parentN.removeChild(ignoreStyles);
|
203
|
+
ignoreStyles.parentNode?.removeChild(ignoreStyles);
|
407
204
|
}
|
408
|
-
|
409
205
|
function hasPlayCompletedYet(callback) {
|
410
206
|
creeveyReady();
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
void waitForStoryRendered(channel).then(function () {
|
207
|
+
let isCaptureCalled = false;
|
208
|
+
let isPlayCompleted = false;
|
209
|
+
const channel = addonsChannel();
|
210
|
+
void waitForStoryRendered(channel).then(() => {
|
417
211
|
if (isCaptureCalled) return;
|
418
212
|
isPlayCompleted = true;
|
419
213
|
callback(true);
|
420
214
|
});
|
421
|
-
void waitForCaptureCall().then(
|
215
|
+
void waitForCaptureCall().then(() => {
|
422
216
|
if (isPlayCompleted) return;
|
423
217
|
isCaptureCalled = true;
|
424
218
|
callback(false);
|
425
219
|
});
|
426
220
|
}
|
427
|
-
|
428
221
|
window.__CREEVEY_GET_STORIES__ = getStories;
|
429
222
|
window.__CREEVEY_SELECT_STORY__ = selectStory;
|
430
223
|
window.__CREEVEY_UPDATE_GLOBALS__ = updateGlobals;
|
431
224
|
window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
|
432
225
|
window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
|
433
226
|
window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
|
434
|
-
window.__CREEVEY_SET_READY_FOR_CAPTURE__ = _types.noop;
|
435
|
-
|
436
|
-
// const getMultipleError = (_: Element | null, query: string): string => `Found multiple elements by query: ${query}`;
|
437
|
-
// const getMissingError = (_: Element | null, query: string): string => `Unable to find an element by query: ${query}`;
|
438
|
-
// const [queryByQuery, getAllByQuery, getByQuery, findAllByQuery, findByQuery] = buildQueries(
|
439
|
-
// queryAllByQuery,
|
440
|
-
// getMultipleError,
|
441
|
-
// getMissingError,
|
442
|
-
// );
|
443
|
-
// const queries = {
|
444
|
-
// queryByQuery,
|
445
|
-
// getAllByQuery,
|
446
|
-
// getByQuery,
|
447
|
-
// findAllByQuery,
|
448
|
-
// findByQuery,
|
449
|
-
// };
|
450
|
-
|
451
|
-
return (0, _addons.makeDecorator)({
|
227
|
+
window.__CREEVEY_SET_READY_FOR_CAPTURE__ = _types.noop;
|
228
|
+
return (0, _previewApi.makeDecorator)({
|
452
229
|
name: 'withCreevey',
|
453
230
|
parameterName: 'creevey',
|
454
|
-
wrapper:
|
455
|
-
var _ref2;
|
456
|
-
|
231
|
+
wrapper: (getStory, context) => {
|
457
232
|
// TODO Define proper types, like captureElement is a promise
|
458
|
-
|
459
|
-
|
460
|
-
|
233
|
+
const {
|
234
|
+
captureElement
|
235
|
+
} = context.parameters.creevey = context.parameters.creevey ?? {};
|
461
236
|
Object.defineProperty(context.parameters.creevey, 'captureElement', {
|
462
|
-
get
|
237
|
+
get() {
|
463
238
|
switch (true) {
|
464
239
|
case captureElement === undefined:
|
465
240
|
return Promise.resolve(context.canvasElement);
|
466
|
-
|
467
241
|
case captureElement === null:
|
468
242
|
return Promise.resolve(document.documentElement);
|
469
|
-
|
470
|
-
|
471
|
-
|
243
|
+
case typeof captureElement == 'string':
|
244
|
+
return Promise.resolve(context.canvasElement.querySelector(captureElement));
|
472
245
|
case typeof captureElement == 'function':
|
473
246
|
// TODO Define type for it
|
474
247
|
return Promise.resolve(captureElement(context));
|
@@ -481,51 +254,19 @@ function withCreevey() {
|
|
481
254
|
}
|
482
255
|
});
|
483
256
|
}
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
return _context5.abrupt("return");
|
501
|
-
|
502
|
-
case 2:
|
503
|
-
captureResolver();
|
504
|
-
waitForCreevey = new Promise(function (resolve) {
|
505
|
-
return creeveyReady = resolve;
|
506
|
-
});
|
507
|
-
_context5.next = 6;
|
508
|
-
return fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/capture"), {
|
509
|
-
method: 'POST',
|
510
|
-
headers: {
|
511
|
-
'Content-Type': 'application/json'
|
512
|
-
},
|
513
|
-
body: JSON.stringify({
|
514
|
-
workerId: window.__CREEVEY_WORKER_ID__,
|
515
|
-
options: options
|
516
|
-
})
|
517
|
-
});
|
518
|
-
|
519
|
-
case 6:
|
520
|
-
_context5.next = 8;
|
521
|
-
return waitForCreevey;
|
522
|
-
|
523
|
-
case 8:
|
524
|
-
case "end":
|
525
|
-
return _context5.stop();
|
526
|
-
}
|
527
|
-
}
|
528
|
-
}, _callee5);
|
529
|
-
}));
|
530
|
-
return _capture.apply(this, arguments);
|
257
|
+
async function capture(options) {
|
258
|
+
if (!isTestBrowser) return;
|
259
|
+
captureResolver();
|
260
|
+
waitForCreevey = new Promise(resolve => creeveyReady = resolve);
|
261
|
+
await fetch(`http://${(0, _helpers.getConnectionUrl)()}/capture`, {
|
262
|
+
method: 'POST',
|
263
|
+
headers: {
|
264
|
+
'Content-Type': 'application/json'
|
265
|
+
},
|
266
|
+
body: JSON.stringify({
|
267
|
+
workerId: window.__CREEVEY_WORKER_ID__,
|
268
|
+
options
|
269
|
+
})
|
270
|
+
});
|
271
|
+
await waitForCreevey;
|
531
272
|
}
|