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
@@ -1,90 +1,44 @@
|
|
1
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
2
|
-
|
3
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
4
|
-
|
5
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
6
|
-
|
7
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
8
|
-
|
9
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
10
|
-
|
11
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
12
|
-
|
13
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
14
|
-
|
15
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
16
|
-
|
17
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
18
|
-
|
19
|
-
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; }
|
20
|
-
|
21
|
-
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); } }
|
22
|
-
|
23
|
-
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); }); }; }
|
24
|
-
|
25
|
-
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); }
|
26
|
-
|
27
1
|
import * as Events from '@storybook/core-events';
|
28
2
|
import * as polyfill from 'event-source-polyfill';
|
29
|
-
import { buildQueries, within } from '@storybook/testing-library';
|
3
|
+
// import { buildQueries, within } from '@storybook/testing-library';
|
30
4
|
import { addons, makeDecorator } from '@storybook/addons';
|
31
5
|
import { isObject, noop } from '../../types';
|
32
6
|
import { denormalizeStoryParameters, serializeRawStories } from '../../shared';
|
33
|
-
import { getConnectionUrl } from '../shared/helpers';
|
7
|
+
import { getConnectionUrl } from '../shared/helpers'; // import { isInternetExplorer } from './utils';
|
34
8
|
|
35
|
-
if (
|
9
|
+
if (typeof process != 'object' || typeof process.version != 'string') {
|
36
10
|
// NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11
|
37
11
|
// You don't get hot reload in IE11. So put polyfill for that to better UX
|
38
12
|
// Don't load in nodejs environment
|
39
13
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
40
|
-
|
41
|
-
|
14
|
+
const {
|
15
|
+
NativeEventSource,
|
16
|
+
EventSourcePolyfill
|
17
|
+
} = polyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
42
18
|
|
43
19
|
window.EventSource = NativeEventSource || EventSourcePolyfill;
|
44
20
|
}
|
45
21
|
|
46
|
-
|
47
|
-
|
48
|
-
function resetCurrentStory(_x) {
|
49
|
-
return _resetCurrentStory.apply(this, arguments);
|
50
|
-
}
|
22
|
+
const disableAnimationsStyles = "\n*,\n*:hover,\n*::before,\n*::after {\n animation-delay: -0.0001ms !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n cursor: none !important;\n caret-color: transparent !important;\n transition: 0s !important;\n}\n";
|
51
23
|
|
52
|
-
function
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
return channel.emit(Events.SET_CURRENT_STORY, {
|
60
|
-
storyId: true,
|
61
|
-
name: '',
|
62
|
-
kind: ''
|
63
|
-
});
|
64
|
-
}, 0);
|
65
|
-
return _context4.abrupt("return", new Promise(function (resolve) {
|
66
|
-
return channel.once(Events.STORY_MISSING, resolve);
|
67
|
-
}));
|
68
|
-
|
69
|
-
case 2:
|
70
|
-
case "end":
|
71
|
-
return _context4.stop();
|
72
|
-
}
|
73
|
-
}
|
74
|
-
}, _callee4);
|
75
|
-
}));
|
76
|
-
return _resetCurrentStory.apply(this, arguments);
|
24
|
+
async function resetCurrentStory(channel) {
|
25
|
+
setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
|
26
|
+
storyId: true,
|
27
|
+
name: '',
|
28
|
+
kind: ''
|
29
|
+
}), 0);
|
30
|
+
return new Promise(resolve => channel.once(Events.STORY_MISSING, resolve));
|
77
31
|
}
|
78
32
|
|
79
33
|
function catchRenderError(channel) {
|
80
|
-
|
81
|
-
|
82
|
-
return rejectCallback = reject;
|
83
|
-
});
|
34
|
+
let rejectCallback;
|
35
|
+
const promise = new Promise((_resolve, reject) => rejectCallback = reject);
|
84
36
|
|
85
37
|
function errorHandler(_ref) {
|
86
|
-
|
87
|
-
|
38
|
+
let {
|
39
|
+
title,
|
40
|
+
description
|
41
|
+
} = _ref;
|
88
42
|
rejectCallback({
|
89
43
|
message: title,
|
90
44
|
stack: description
|
@@ -108,10 +62,8 @@ function catchRenderError(channel) {
|
|
108
62
|
}
|
109
63
|
|
110
64
|
function waitForStoryRendered(channel) {
|
111
|
-
|
112
|
-
|
113
|
-
return resolveCallback = resolve;
|
114
|
-
});
|
65
|
+
let resolveCallback;
|
66
|
+
const promise = new Promise(resolve => resolveCallback = resolve);
|
115
67
|
|
116
68
|
function renderHandler() {
|
117
69
|
resolveCallback();
|
@@ -129,13 +81,11 @@ function waitForStoryRendered(channel) {
|
|
129
81
|
|
130
82
|
function waitForFontsLoaded() {
|
131
83
|
if (!document.fonts) return;
|
132
|
-
|
133
|
-
return font.status == 'loading';
|
134
|
-
});
|
84
|
+
const areFontsLoading = Array.from(document.fonts).some(font => font.status == 'loading');
|
135
85
|
|
136
86
|
if (areFontsLoading) {
|
137
|
-
return new Promise(
|
138
|
-
|
87
|
+
return new Promise(resolve => {
|
88
|
+
const fontsLoadedHandler = () => {
|
139
89
|
document.fonts.removeEventListener('loadingdone', fontsLoadedHandler);
|
140
90
|
resolve();
|
141
91
|
};
|
@@ -146,244 +96,128 @@ function waitForFontsLoaded() {
|
|
146
96
|
}
|
147
97
|
|
148
98
|
function waitForCaptureCall() {
|
149
|
-
return new Promise(
|
150
|
-
return captureResolver = resolve;
|
151
|
-
});
|
99
|
+
return new Promise(resolve => captureResolver = resolve);
|
152
100
|
}
|
153
101
|
|
154
102
|
function initCreeveyState() {
|
155
103
|
var _window$localStorage$;
|
156
104
|
|
157
|
-
|
105
|
+
const prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
|
158
106
|
if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
|
159
107
|
if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
|
160
108
|
if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
|
161
109
|
if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
|
162
|
-
window.addEventListener('beforeunload',
|
110
|
+
window.addEventListener('beforeunload', () => {
|
163
111
|
window.localStorage.setItem('Creevey_Tests', JSON.stringify({
|
164
112
|
creeveyHost: window.__CREEVEY_SERVER_HOST__,
|
165
113
|
creeveyPort: window.__CREEVEY_SERVER_PORT__,
|
166
|
-
setStoriesCounter
|
167
|
-
isTestBrowser
|
114
|
+
setStoriesCounter,
|
115
|
+
isTestBrowser
|
168
116
|
}));
|
169
117
|
});
|
170
118
|
}
|
171
119
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
120
|
+
let isTestBrowser = false;
|
121
|
+
let captureResolver;
|
122
|
+
let waitForCreevey;
|
123
|
+
let creeveyReady;
|
124
|
+
let setStoriesCounter = 0;
|
177
125
|
export function withCreevey() {
|
178
|
-
|
179
|
-
|
126
|
+
let currentStory = '';
|
127
|
+
let isAnimationDisabled = false;
|
180
128
|
initCreeveyState();
|
181
129
|
|
182
130
|
function disableAnimation() {
|
183
131
|
isAnimationDisabled = true;
|
184
|
-
|
185
|
-
|
132
|
+
const style = document.createElement('style');
|
133
|
+
const textNode = document.createTextNode(disableAnimationsStyles);
|
186
134
|
style.setAttribute('type', 'text/css');
|
187
135
|
style.appendChild(textNode);
|
188
136
|
document.head.appendChild(style);
|
189
137
|
}
|
190
138
|
|
191
|
-
function getStories() {
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
_context.next = 12;
|
225
|
-
break;
|
226
|
-
}
|
227
|
-
|
228
|
-
_context.next = 9;
|
229
|
-
return store.cacheAllCSFFiles();
|
230
|
-
|
231
|
-
case 9:
|
232
|
-
addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
|
233
|
-
_context.next = 13;
|
234
|
-
break;
|
235
|
-
|
236
|
-
case 12:
|
237
|
-
return _context.abrupt("return");
|
238
|
-
|
239
|
-
case 13:
|
240
|
-
addons.getChannel().on(Events.SET_STORIES, function (data) {
|
241
|
-
// TODO Figure out how to get only updated stories
|
242
|
-
// TODO Subscribe on hmr? like use dummy-hmr
|
243
|
-
setStoriesCounter += 1;
|
244
|
-
var stories = serializeRawStories(denormalizeStoryParameters(data));
|
245
|
-
var storiesByFiles = new Map();
|
246
|
-
Object.values(stories).forEach(function (story) {
|
247
|
-
var storiesFromFile = storiesByFiles.get(story.parameters.fileName);
|
248
|
-
if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
|
249
|
-
});
|
250
|
-
void fetch("http://".concat(getConnectionUrl(), "/stories"), {
|
251
|
-
method: 'POST',
|
252
|
-
headers: {
|
253
|
-
'Content-Type': 'application/json'
|
254
|
-
},
|
255
|
-
body: JSON.stringify({
|
256
|
-
setStoriesCounter: setStoriesCounter,
|
257
|
-
stories: _toConsumableArray(storiesByFiles.entries())
|
258
|
-
})
|
259
|
-
});
|
260
|
-
});
|
261
|
-
return _context.abrupt("return", storiesPromise);
|
262
|
-
|
263
|
-
case 15:
|
264
|
-
case "end":
|
265
|
-
return _context.stop();
|
266
|
-
}
|
267
|
-
}
|
268
|
-
}, _callee);
|
269
|
-
}));
|
270
|
-
return _getStories.apply(this, arguments);
|
271
|
-
}
|
272
|
-
|
273
|
-
function selectStory(_x2, _x3, _x4, _x5, _x6) {
|
274
|
-
return _selectStory.apply(this, arguments);
|
139
|
+
async function getStories() {
|
140
|
+
var _window$__STORYBOOK_S;
|
141
|
+
|
142
|
+
const storiesPromise = new Promise(resolve => addons.getChannel().once(Events.SET_STORIES, data => resolve(serializeRawStories(denormalizeStoryParameters(data)))));
|
143
|
+
const store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {};
|
144
|
+
|
145
|
+
if (store.cacheAllCSFFiles) {
|
146
|
+
await store.cacheAllCSFFiles();
|
147
|
+
addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
|
148
|
+
} else return;
|
149
|
+
|
150
|
+
addons.getChannel().on(Events.SET_STORIES, data => {
|
151
|
+
// TODO Figure out how to get only updated stories
|
152
|
+
// TODO Subscribe on hmr? like use dummy-hmr
|
153
|
+
setStoriesCounter += 1;
|
154
|
+
const stories = serializeRawStories(denormalizeStoryParameters(data));
|
155
|
+
const storiesByFiles = new Map();
|
156
|
+
Object.values(stories).forEach(story => {
|
157
|
+
const storiesFromFile = storiesByFiles.get(story.parameters.fileName);
|
158
|
+
if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
|
159
|
+
});
|
160
|
+
void fetch("http://".concat(getConnectionUrl(), "/stories"), {
|
161
|
+
method: 'POST',
|
162
|
+
headers: {
|
163
|
+
'Content-Type': 'application/json'
|
164
|
+
},
|
165
|
+
body: JSON.stringify({
|
166
|
+
setStoriesCounter,
|
167
|
+
stories: [...storiesByFiles.entries()]
|
168
|
+
})
|
169
|
+
});
|
170
|
+
});
|
171
|
+
return storiesPromise;
|
275
172
|
}
|
276
173
|
|
277
|
-
function
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
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
|
-
capturePromise = waitForCaptureCall().then(function () {
|
312
|
-
return isCaptureCalled = true;
|
313
|
-
});
|
314
|
-
setTimeout(function () {
|
315
|
-
return channel.emit(Events.SET_CURRENT_STORY, {
|
316
|
-
storyId: storyId,
|
317
|
-
name: name,
|
318
|
-
kind: kind
|
319
|
-
});
|
320
|
-
}, 0);
|
321
|
-
_context3.prev = 15;
|
322
|
-
_context3.next = 18;
|
323
|
-
return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
324
|
-
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
325
|
-
while (1) {
|
326
|
-
switch (_context2.prev = _context2.next) {
|
327
|
-
case 0:
|
328
|
-
_context2.next = 2;
|
329
|
-
return Promise.race([renderPromise, capturePromise]);
|
330
|
-
|
331
|
-
case 2:
|
332
|
-
_context2.next = 4;
|
333
|
-
return waitForFontsLoaded();
|
334
|
-
|
335
|
-
case 4:
|
336
|
-
_context2.next = 6;
|
337
|
-
return waitForReady;
|
338
|
-
|
339
|
-
case 6:
|
340
|
-
case "end":
|
341
|
-
return _context2.stop();
|
342
|
-
}
|
343
|
-
}
|
344
|
-
}, _callee2);
|
345
|
-
}))(), errorPromise]);
|
346
|
-
|
347
|
-
case 18:
|
348
|
-
callback([null, isCaptureCalled]);
|
349
|
-
_context3.next = 25;
|
350
|
-
break;
|
351
|
-
|
352
|
-
case 21:
|
353
|
-
_context3.prev = 21;
|
354
|
-
_context3.t0 = _context3["catch"](15);
|
355
|
-
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
356
|
-
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
357
|
-
errorMessage = _context3.t0 instanceof Error ? (_reason$stack = _context3.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context3.t0.message : isObject(_context3.t0) ? "".concat(_context3.t0.message, "\n ").concat(_context3.t0.stack) : _context3.t0;
|
358
|
-
callback([errorMessage]);
|
359
|
-
|
360
|
-
case 25:
|
361
|
-
_context3.prev = 25;
|
362
|
-
renderPromise.cancel();
|
363
|
-
errorPromise.cancel();
|
364
|
-
return _context3.finish(25);
|
365
|
-
|
366
|
-
case 29:
|
367
|
-
case "end":
|
368
|
-
return _context3.stop();
|
369
|
-
}
|
370
|
-
}
|
371
|
-
}, _callee3, null, [[15, 21, 25, 29]]);
|
372
|
-
}));
|
373
|
-
return _selectStory.apply(this, arguments);
|
174
|
+
async function selectStory(storyId, kind, name, shouldWaitForReady, callback) {
|
175
|
+
if (!isAnimationDisabled) disableAnimation();
|
176
|
+
isTestBrowser = true;
|
177
|
+
const channel = addons.getChannel();
|
178
|
+
const waitForReady = shouldWaitForReady ? new Promise(resolve => window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve) : Promise.resolve();
|
179
|
+
if (storyId == currentStory) await resetCurrentStory(channel);else currentStory = storyId;
|
180
|
+
let isCaptureCalled = false;
|
181
|
+
const renderPromise = waitForStoryRendered(channel);
|
182
|
+
const errorPromise = catchRenderError(channel);
|
183
|
+
const capturePromise = waitForCaptureCall().then(() => isCaptureCalled = true);
|
184
|
+
setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
|
185
|
+
storyId,
|
186
|
+
name,
|
187
|
+
kind
|
188
|
+
}), 0);
|
189
|
+
|
190
|
+
try {
|
191
|
+
await Promise.race([(async () => {
|
192
|
+
await Promise.race([renderPromise, capturePromise]);
|
193
|
+
await waitForFontsLoaded();
|
194
|
+
await waitForReady;
|
195
|
+
})(), errorPromise]);
|
196
|
+
callback([null, isCaptureCalled]);
|
197
|
+
} catch (reason) {
|
198
|
+
var _reason$stack;
|
199
|
+
|
200
|
+
// NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
|
201
|
+
// NOTE Event `STORY_ERRORED` return error-like object without `name` field
|
202
|
+
const errorMessage = reason instanceof Error ? (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message : isObject(reason) ? "".concat(reason.message, "\n ").concat(reason.stack) : reason;
|
203
|
+
callback([errorMessage]);
|
204
|
+
} finally {
|
205
|
+
renderPromise.cancel();
|
206
|
+
errorPromise.cancel();
|
207
|
+
}
|
374
208
|
}
|
375
209
|
|
376
210
|
function updateGlobals(globals) {
|
377
211
|
addons.getChannel().emit(Events.UPDATE_GLOBALS, {
|
378
|
-
globals
|
212
|
+
globals
|
379
213
|
});
|
380
214
|
}
|
381
215
|
|
382
216
|
function insertIgnoreStyles(ignoreSelectors) {
|
383
|
-
|
217
|
+
const stylesElement = document.createElement('style');
|
384
218
|
stylesElement.setAttribute('type', 'text/css');
|
385
219
|
document.head.appendChild(stylesElement);
|
386
|
-
ignoreSelectors.forEach(
|
220
|
+
ignoreSelectors.forEach(selector => {
|
387
221
|
stylesElement.innerHTML += "\n ".concat(selector, " {\n background: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n outline: 0 !important;\n color: rgba(0,0,0,0) !important;\n }\n ").concat(selector, " *, ").concat(selector, "::before, ").concat(selector, "::after {\n visibility: hidden !important;\n }\n ");
|
388
222
|
});
|
389
223
|
return stylesElement;
|
@@ -397,15 +231,15 @@ export function withCreevey() {
|
|
397
231
|
|
398
232
|
function hasPlayCompletedYet(callback) {
|
399
233
|
creeveyReady();
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
void waitForStoryRendered(channel).then(
|
234
|
+
let isCaptureCalled = false;
|
235
|
+
let isPlayCompleted = false;
|
236
|
+
const channel = addons.getChannel();
|
237
|
+
void waitForStoryRendered(channel).then(() => {
|
404
238
|
if (isCaptureCalled) return;
|
405
239
|
isPlayCompleted = true;
|
406
240
|
callback(true);
|
407
241
|
});
|
408
|
-
void waitForCaptureCall().then(
|
242
|
+
void waitForCaptureCall().then(() => {
|
409
243
|
if (isPlayCompleted) return;
|
410
244
|
isCaptureCalled = true;
|
411
245
|
callback(false);
|
@@ -418,49 +252,35 @@ export function withCreevey() {
|
|
418
252
|
window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
|
419
253
|
window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
|
420
254
|
window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
|
421
|
-
window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop;
|
255
|
+
window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop; // const queryAllByQuery = (container: HTMLElement, query: string): HTMLElement[] =>
|
256
|
+
// [...container.querySelectorAll(query)].filter((e) => e instanceof HTMLElement) as HTMLElement[];
|
257
|
+
// const getMultipleError = (_: Element | null, query: string): string => `Found multiple elements by query: ${query}`;
|
258
|
+
// const getMissingError = (_: Element | null, query: string): string => `Unable to find an element by query: ${query}`;
|
259
|
+
// const [queryByQuery, getAllByQuery, getByQuery, findAllByQuery, findByQuery] = buildQueries(
|
260
|
+
// queryAllByQuery,
|
261
|
+
// getMultipleError,
|
262
|
+
// getMissingError,
|
263
|
+
// );
|
264
|
+
// const queries = {
|
265
|
+
// queryByQuery,
|
266
|
+
// getAllByQuery,
|
267
|
+
// getByQuery,
|
268
|
+
// findAllByQuery,
|
269
|
+
// findByQuery,
|
270
|
+
// };
|
422
271
|
|
423
|
-
var queryAllByQuery = function queryAllByQuery(container, query) {
|
424
|
-
return _toConsumableArray(container.querySelectorAll(query)).filter(function (e) {
|
425
|
-
return e instanceof HTMLElement;
|
426
|
-
});
|
427
|
-
};
|
428
|
-
|
429
|
-
var getMultipleError = function getMultipleError(_, query) {
|
430
|
-
return "Found multiple elements by query: ".concat(query);
|
431
|
-
};
|
432
|
-
|
433
|
-
var getMissingError = function getMissingError(_, query) {
|
434
|
-
return "Unable to find an element by query: ".concat(query);
|
435
|
-
};
|
436
|
-
|
437
|
-
var _buildQueries = buildQueries(queryAllByQuery, getMultipleError, getMissingError),
|
438
|
-
_buildQueries2 = _slicedToArray(_buildQueries, 5),
|
439
|
-
queryByQuery = _buildQueries2[0],
|
440
|
-
getAllByQuery = _buildQueries2[1],
|
441
|
-
getByQuery = _buildQueries2[2],
|
442
|
-
findAllByQuery = _buildQueries2[3],
|
443
|
-
findByQuery = _buildQueries2[4];
|
444
|
-
|
445
|
-
var queries = {
|
446
|
-
queryByQuery: queryByQuery,
|
447
|
-
getAllByQuery: getAllByQuery,
|
448
|
-
getByQuery: getByQuery,
|
449
|
-
findAllByQuery: findAllByQuery,
|
450
|
-
findByQuery: findByQuery
|
451
|
-
};
|
452
272
|
return makeDecorator({
|
453
273
|
name: 'withCreevey',
|
454
274
|
parameterName: 'creevey',
|
455
|
-
wrapper:
|
275
|
+
wrapper: (getStory, context) => {
|
456
276
|
var _ref2;
|
457
277
|
|
458
278
|
// TODO Define proper types, like captureElement is a promise
|
459
|
-
|
460
|
-
|
461
|
-
|
279
|
+
const {
|
280
|
+
captureElement
|
281
|
+
} = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {};
|
462
282
|
Object.defineProperty(context.parameters.creevey, 'captureElement', {
|
463
|
-
get
|
283
|
+
get() {
|
464
284
|
switch (true) {
|
465
285
|
case captureElement === undefined:
|
466
286
|
return Promise.resolve(context.canvasElement);
|
@@ -469,13 +289,17 @@ export function withCreevey() {
|
|
469
289
|
return Promise.resolve(document.documentElement);
|
470
290
|
|
471
291
|
case typeof captureElement == 'string':
|
472
|
-
return
|
292
|
+
return Promise.resolve(context.canvasElement.querySelector(captureElement));
|
293
|
+
// return isInternetExplorer // some code from testing-library makes IE hang
|
294
|
+
// ? Promise.resolve(context.canvasElement.querySelector(captureElement as string))
|
295
|
+
// : within<typeof queries>(context.canvasElement, queries).findByQuery(captureElement as string);
|
473
296
|
|
474
297
|
case typeof captureElement == 'function':
|
475
298
|
// TODO Define type for it
|
476
299
|
return Promise.resolve(captureElement(context));
|
477
300
|
}
|
478
301
|
},
|
302
|
+
|
479
303
|
enumerable: true,
|
480
304
|
configurable: true
|
481
305
|
});
|
@@ -483,50 +307,19 @@ export function withCreevey() {
|
|
483
307
|
}
|
484
308
|
});
|
485
309
|
}
|
486
|
-
export function capture(
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
return _context5.abrupt("return");
|
502
|
-
|
503
|
-
case 2:
|
504
|
-
captureResolver();
|
505
|
-
waitForCreevey = new Promise(function (resolve) {
|
506
|
-
return creeveyReady = resolve;
|
507
|
-
});
|
508
|
-
_context5.next = 6;
|
509
|
-
return fetch("http://".concat(getConnectionUrl(), "/capture"), {
|
510
|
-
method: 'POST',
|
511
|
-
headers: {
|
512
|
-
'Content-Type': 'application/json'
|
513
|
-
},
|
514
|
-
body: JSON.stringify({
|
515
|
-
workerId: window.__CREEVEY_WORKER_ID__,
|
516
|
-
options: options
|
517
|
-
})
|
518
|
-
});
|
519
|
-
|
520
|
-
case 6:
|
521
|
-
_context5.next = 8;
|
522
|
-
return waitForCreevey;
|
523
|
-
|
524
|
-
case 8:
|
525
|
-
case "end":
|
526
|
-
return _context5.stop();
|
527
|
-
}
|
528
|
-
}
|
529
|
-
}, _callee5);
|
530
|
-
}));
|
531
|
-
return _capture.apply(this, arguments);
|
310
|
+
export async function capture(options) {
|
311
|
+
if (!isTestBrowser) return;
|
312
|
+
captureResolver();
|
313
|
+
waitForCreevey = new Promise(resolve => creeveyReady = resolve);
|
314
|
+
await fetch("http://".concat(getConnectionUrl(), "/capture"), {
|
315
|
+
method: 'POST',
|
316
|
+
headers: {
|
317
|
+
'Content-Type': 'application/json'
|
318
|
+
},
|
319
|
+
body: JSON.stringify({
|
320
|
+
workerId: window.__CREEVEY_WORKER_ID__,
|
321
|
+
options
|
322
|
+
})
|
323
|
+
});
|
324
|
+
await waitForCreevey;
|
532
325
|
}
|