creevey 0.8.0-beta.0 → 0.8.0-beta.1

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.
Files changed (196) hide show
  1. package/CHANGELOG.md +25 -8
  2. package/README.md +8 -0
  3. package/addon/README.md +3 -0
  4. package/addon/package.json +4 -0
  5. package/jest.config.js +6 -0
  6. package/lib/cjs/client/addon/Manager.js +122 -271
  7. package/lib/cjs/client/addon/components/Addon.js +17 -38
  8. package/lib/cjs/client/addon/components/Icons.js +11 -7
  9. package/lib/cjs/client/addon/components/Panel.js +17 -13
  10. package/lib/cjs/client/addon/components/TestSelect.js +11 -9
  11. package/lib/cjs/client/addon/components/Tools.js +21 -40
  12. package/lib/cjs/client/addon/decorator.js +1 -1
  13. package/lib/cjs/client/addon/index.js +31 -0
  14. package/lib/cjs/client/addon/preset.ie11.js +74 -0
  15. package/lib/cjs/client/addon/preset.js +13 -31
  16. package/lib/cjs/client/addon/readyForCapture.js +12 -0
  17. package/lib/cjs/client/addon/register.js +46 -70
  18. package/lib/cjs/client/addon/utils.js +6 -2
  19. package/lib/cjs/client/addon/withCreevey.js +221 -155
  20. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +26 -24
  21. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
  22. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +44 -66
  23. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +38 -50
  24. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +26 -45
  25. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
  26. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
  27. package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
  28. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
  29. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
  30. package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
  31. package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
  32. package/lib/cjs/client/shared/helpers.js +140 -211
  33. package/lib/cjs/client/shared/viewMode.js +5 -5
  34. package/lib/cjs/client/web/142.js +2 -0
  35. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  36. package/lib/cjs/client/web/32.js +1 -0
  37. package/lib/cjs/client/web/551.js +1 -0
  38. package/lib/cjs/client/web/566.js +2 -0
  39. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  40. package/lib/cjs/client/web/691.js +2 -0
  41. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  42. package/lib/cjs/client/web/725.js +1 -0
  43. package/lib/cjs/client/web/main.js +2 -38
  44. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  45. package/lib/cjs/creevey.js +3 -5
  46. package/lib/cjs/index.js +10 -15
  47. package/lib/cjs/server/config.js +5 -4
  48. package/lib/cjs/server/docker.js +3 -7
  49. package/lib/cjs/server/extract.js +7 -4
  50. package/lib/cjs/server/index.js +3 -5
  51. package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
  52. package/lib/cjs/server/loaders/babel/helpers.js +13 -23
  53. package/lib/cjs/server/loaders/babel/register.js +2 -4
  54. package/lib/cjs/server/loaders/webpack/compile.js +33 -50
  55. package/lib/cjs/server/loaders/webpack/creevey-loader.js +20 -22
  56. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
  57. package/lib/cjs/server/loaders/webpack/mdx-loader.js +2 -2
  58. package/lib/cjs/server/loaders/webpack/start.js +1 -1
  59. package/lib/cjs/server/logger.js +2 -1
  60. package/lib/cjs/server/master/index.js +4 -4
  61. package/lib/cjs/server/master/master.js +1 -0
  62. package/lib/cjs/server/master/pool.js +38 -47
  63. package/lib/cjs/server/master/runner.js +53 -66
  64. package/lib/cjs/server/master/server.js +78 -4
  65. package/lib/cjs/server/messages.js +128 -18
  66. package/lib/cjs/server/selenium/browser.js +129 -55
  67. package/lib/cjs/server/selenium/selenoid.js +5 -7
  68. package/lib/cjs/server/stories.js +58 -72
  69. package/lib/cjs/server/storybook/entry.js +7 -22
  70. package/lib/cjs/server/storybook/helpers.js +18 -25
  71. package/lib/cjs/server/storybook/providers/browser.js +74 -0
  72. package/lib/cjs/server/storybook/{nodejs-provider.js → providers/nodejs.js} +37 -20
  73. package/lib/cjs/server/update.js +1 -5
  74. package/lib/cjs/server/utils.js +12 -14
  75. package/lib/cjs/server/worker/helpers.js +2 -6
  76. package/lib/cjs/server/worker/reporter.js +8 -20
  77. package/lib/cjs/server/worker/worker.js +21 -19
  78. package/lib/cjs/shared/index.js +101 -0
  79. package/lib/cjs/shared/serializeRegExp.js +42 -0
  80. package/lib/cjs/types.js +11 -6
  81. package/lib/esm/client/addon/Manager.js +122 -271
  82. package/lib/esm/client/addon/components/Addon.js +15 -34
  83. package/lib/esm/client/addon/components/Icons.js +10 -6
  84. package/lib/esm/client/addon/components/Panel.js +17 -13
  85. package/lib/esm/client/addon/components/TestSelect.js +11 -9
  86. package/lib/esm/client/addon/components/Tools.js +19 -36
  87. package/lib/esm/client/addon/decorator.js +1 -1
  88. package/lib/esm/client/addon/index.js +2 -0
  89. package/lib/esm/client/addon/preset.ie11.js +59 -0
  90. package/lib/esm/client/addon/preset.js +12 -26
  91. package/lib/esm/client/addon/readyForCapture.js +5 -0
  92. package/lib/esm/client/addon/register.js +42 -66
  93. package/lib/esm/client/addon/utils.js +3 -2
  94. package/lib/esm/client/addon/withCreevey.js +209 -156
  95. package/lib/esm/client/shared/components/ImagesView/BlendView.js +23 -20
  96. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
  97. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +42 -63
  98. package/lib/esm/client/shared/components/ImagesView/SlideView.js +36 -47
  99. package/lib/esm/client/shared/components/ImagesView/SwapView.js +24 -42
  100. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  101. package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
  102. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
  103. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
  104. package/lib/esm/client/shared/components/ResultsPage.js +36 -64
  105. package/lib/esm/client/shared/creeveyClientApi.js +57 -84
  106. package/lib/esm/client/shared/helpers.js +124 -195
  107. package/lib/esm/client/shared/viewMode.js +4 -4
  108. package/lib/esm/creevey.js +3 -5
  109. package/lib/esm/index.js +2 -3
  110. package/lib/esm/server/config.js +4 -5
  111. package/lib/esm/server/docker.js +2 -2
  112. package/lib/esm/server/extract.js +6 -4
  113. package/lib/esm/server/index.js +3 -4
  114. package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
  115. package/lib/esm/server/loaders/babel/helpers.js +12 -22
  116. package/lib/esm/server/loaders/babel/register.js +3 -5
  117. package/lib/esm/server/loaders/webpack/compile.js +34 -51
  118. package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -10
  119. package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
  120. package/lib/esm/server/loaders/webpack/mdx-loader.js +2 -2
  121. package/lib/esm/server/loaders/webpack/start.js +1 -1
  122. package/lib/esm/server/master/index.js +4 -4
  123. package/lib/esm/server/master/master.js +1 -0
  124. package/lib/esm/server/master/pool.js +38 -49
  125. package/lib/esm/server/master/runner.js +53 -66
  126. package/lib/esm/server/master/server.js +76 -6
  127. package/lib/esm/server/messages.js +118 -14
  128. package/lib/esm/server/selenium/browser.js +126 -57
  129. package/lib/esm/server/selenium/selenoid.js +4 -6
  130. package/lib/esm/server/stories.js +58 -70
  131. package/lib/esm/server/storybook/entry.js +5 -22
  132. package/lib/esm/server/storybook/helpers.js +10 -19
  133. package/lib/esm/server/storybook/providers/browser.js +60 -0
  134. package/lib/esm/server/storybook/{nodejs-provider.js → providers/nodejs.js} +35 -19
  135. package/lib/esm/server/update.js +1 -5
  136. package/lib/esm/server/utils.js +5 -9
  137. package/lib/esm/server/worker/helpers.js +2 -6
  138. package/lib/esm/server/worker/reporter.js +8 -20
  139. package/lib/esm/server/worker/worker.js +22 -20
  140. package/lib/esm/shared/index.js +78 -0
  141. package/lib/esm/shared/serializeRegExp.js +24 -0
  142. package/lib/esm/types.js +3 -0
  143. package/lib/types/client/addon/Manager.d.ts +2 -2
  144. package/lib/types/client/addon/components/TestSelect.d.ts +0 -1
  145. package/lib/types/client/addon/index.d.ts +2 -0
  146. package/lib/types/client/addon/preset.d.ts +2 -1
  147. package/lib/types/client/addon/preset.ie11.d.ts +10 -0
  148. package/lib/types/client/addon/readyForCapture.d.ts +6 -0
  149. package/lib/types/client/addon/utils.d.ts +1 -0
  150. package/lib/types/client/addon/withCreevey.d.ts +13 -2
  151. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +1 -1
  152. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +0 -1
  153. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +1 -1
  154. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +1 -1
  155. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +1 -1
  156. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +0 -1
  157. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +0 -1
  158. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +1 -1
  159. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +0 -1
  160. package/lib/types/client/shared/components/ResultsPage.d.ts +1 -1
  161. package/lib/types/client/web/CreeveyApp.d.ts +0 -1
  162. package/lib/types/client/web/CreeveyLoader.d.ts +1 -2
  163. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +1 -1
  164. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +0 -1
  165. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
  166. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +0 -1
  167. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +1 -1
  168. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +1 -1
  169. package/lib/types/index.d.ts +0 -1
  170. package/lib/types/server/loaders/babel/register.d.ts +1 -1
  171. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  172. package/lib/types/server/logger.d.ts +6 -2
  173. package/lib/types/server/master/master.d.ts +1 -0
  174. package/lib/types/server/master/pool.d.ts +1 -0
  175. package/lib/types/server/master/server.d.ts +1 -1
  176. package/lib/types/server/messages.d.ts +17 -6
  177. package/lib/types/server/selenium/browser.d.ts +5 -2
  178. package/lib/types/server/stories.d.ts +2 -2
  179. package/lib/types/server/storybook/entry.d.ts +1 -2
  180. package/lib/types/server/storybook/providers/browser.d.ts +4 -0
  181. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -0
  182. package/lib/types/server/worker/helpers.d.ts +2 -1
  183. package/lib/types/shared/index.d.ts +7 -0
  184. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  185. package/lib/types/types.d.ts +31 -3
  186. package/package.json +121 -103
  187. package/preset/ie11.js +5 -0
  188. package/{preset.js → preset/index.js} +2 -2
  189. package/types/mdx.d.ts +3 -2
  190. package/types/mocha.d.ts +1 -0
  191. package/lib/cjs/client/web/1.js +0 -13
  192. package/lib/cjs/client/web/2.js +0 -1
  193. package/lib/cjs/shared.js +0 -35
  194. package/lib/esm/shared.js +0 -22
  195. package/lib/types/server/storybook/nodejs-provider.d.ts +0 -5
  196. package/lib/types/shared.d.ts +0 -4
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.registerCreeveyPanels = registerCreeveyPanels;
7
6
  exports.ADDON_ID = void 0;
7
+ exports.registerCreeveyPanels = registerCreeveyPanels;
8
8
 
9
9
  var _addons = require("@storybook/addons");
10
10
 
@@ -18,79 +18,55 @@ var _Manager = require("./Manager");
18
18
 
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
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
- var ADDON_ID = 'creevey';
21
+ const ADDON_ID = 'creevey';
26
22
  exports.ADDON_ID = ADDON_ID;
27
23
 
28
- _addons.addons.register(ADDON_ID, function (api) {
24
+ _addons.addons.register(ADDON_ID, api => {
29
25
  void registerCreeveyPanels(api);
30
26
  });
31
27
 
32
- function registerCreeveyPanels(_x) {
33
- return _registerCreeveyPanels.apply(this, arguments);
34
- }
35
-
36
- function _registerCreeveyPanels() {
37
- _registerCreeveyPanels = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(storybookApi) {
38
- var manager, browsers;
39
- return regeneratorRuntime.wrap(function _callee$(_context) {
40
- while (1) {
41
- switch (_context.prev = _context.next) {
42
- case 0:
43
- manager = new _Manager.CreeveyManager(storybookApi);
44
-
45
- _addons.addons.addPanel("".concat(ADDON_ID, "/panel/run"), {
46
- title: "Creevey/Run",
47
- match: function match(_ref) {
48
- var viewMode = _ref.viewMode;
49
- return !!(viewMode && /^story$/.exec(viewMode));
50
- },
51
- type: _addons.types.TOOL,
52
- // eslint-disable-next-line react/display-name
53
- render: function render() {
54
- return /*#__PURE__*/_react.default.createElement(_Tools.Tools, {
55
- manager: manager
56
- });
57
- }
58
- });
59
-
60
- _context.next = 4;
61
- return manager.initAll();
62
-
63
- case 4:
64
- browsers = manager.getBrowsers();
65
- browsers.forEach(function (browser) {
66
- var panelId = "".concat(ADDON_ID, "/panel/").concat(browser);
67
- var title = manager.getTabTitle(browser);
68
-
69
- _addons.addons.addPanel(panelId, {
70
- title: title,
71
- type: _addons.types.PANEL,
72
- paramKey: browser,
73
- // NOTE key = PANEL_ID needs to correct render button in addons panel
74
- // eslint-disable-next-line react/display-name
75
- render: function render(_ref2) {
76
- var active = _ref2.active,
77
- key = _ref2.key;
78
- return /*#__PURE__*/_react.default.createElement(_Addon.Addon, {
79
- active: active,
80
- key: key,
81
- manager: manager,
82
- browser: browser
83
- });
84
- }
85
- });
86
- });
87
-
88
- case 6:
89
- case "end":
90
- return _context.stop();
91
- }
28
+ async function registerCreeveyPanels(storybookApi) {
29
+ const manager = new _Manager.CreeveyManager(storybookApi);
30
+
31
+ _addons.addons.addPanel("".concat(ADDON_ID, "/panel/run"), {
32
+ title: "Creevey/Run",
33
+ match: _ref => {
34
+ let {
35
+ viewMode
36
+ } = _ref;
37
+ return !!(viewMode && /^story$/.exec(viewMode));
38
+ },
39
+ type: _addons.types.TOOL,
40
+ // eslint-disable-next-line react/display-name
41
+ render: () => /*#__PURE__*/_react.default.createElement(_Tools.Tools, {
42
+ manager
43
+ })
44
+ });
45
+
46
+ await manager.initAll();
47
+ const browsers = manager.getBrowsers();
48
+ browsers.forEach(browser => {
49
+ const panelId = "".concat(ADDON_ID, "/panel/").concat(browser);
50
+ const title = manager.getTabTitle(browser);
51
+
52
+ _addons.addons.addPanel(panelId, {
53
+ title,
54
+ type: _addons.types.PANEL,
55
+ paramKey: browser,
56
+ // NOTE key = PANEL_ID needs to correct render button in addons panel
57
+ // eslint-disable-next-line react/display-name
58
+ render: _ref2 => {
59
+ let {
60
+ active,
61
+ key
62
+ } = _ref2;
63
+ return /*#__PURE__*/_react.default.createElement(_Addon.Addon, {
64
+ active,
65
+ key,
66
+ manager,
67
+ browser
68
+ });
92
69
  }
93
- }, _callee);
94
- }));
95
- return _registerCreeveyPanels.apply(this, arguments);
70
+ });
71
+ });
96
72
  }
@@ -4,9 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getEmojiByTestStatus = getEmojiByTestStatus;
7
+ exports.isInternetExplorer = void 0;
7
8
 
8
9
  function getEmojiByTestStatus(status) {
9
- var skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
10
+ let skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
10
11
 
11
12
  switch (status) {
12
13
  case 'failed':
@@ -35,4 +36,7 @@ function getEmojiByTestStatus(status) {
35
36
  return '';
36
37
  }
37
38
  }
38
- }
39
+ }
40
+
41
+ const isInternetExplorer = navigator.userAgent.includes('Trident/');
42
+ exports.isInternetExplorer = isInternetExplorer;
@@ -3,79 +3,62 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.capture = capture;
6
7
  exports.withCreevey = withCreevey;
7
8
 
8
9
  var Events = _interopRequireWildcard(require("@storybook/core-events"));
9
10
 
10
11
  var polyfill = _interopRequireWildcard(require("event-source-polyfill"));
11
12
 
13
+ var _testingLibrary = require("@storybook/testing-library");
14
+
12
15
  var _addons = require("@storybook/addons");
13
16
 
14
17
  var _types = require("../../types");
15
18
 
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ var _shared = require("../../shared");
17
20
 
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+ var _helpers = require("../shared/helpers");
19
22
 
20
- 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); } }
23
+ var _utils = require("./utils");
21
24
 
22
- 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); }); }; }
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
26
 
24
- 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); }
27
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
28
 
26
- if ((typeof process === "undefined" ? "undefined" : _typeof(process)) != 'object' || typeof process.version != 'string') {
29
+ if (typeof process != 'object' || typeof process.version != 'string') {
27
30
  // NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11
28
31
  // You don't get hot reload in IE11. So put polyfill for that to better UX
29
32
  // Don't load in nodejs environment
30
33
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
31
- var NativeEventSource = polyfill.NativeEventSource,
32
- EventSourcePolyfill = polyfill.EventSourcePolyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
34
+ const {
35
+ NativeEventSource,
36
+ EventSourcePolyfill
37
+ } = polyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
33
38
 
34
39
  window.EventSource = NativeEventSource || EventSourcePolyfill;
35
40
  }
36
41
 
37
- var 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";
38
-
39
- function resetCurrentStory(_x) {
40
- return _resetCurrentStory.apply(this, arguments);
41
- }
42
+ 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";
42
43
 
43
- function _resetCurrentStory() {
44
- _resetCurrentStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(channel) {
45
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
46
- while (1) {
47
- switch (_context3.prev = _context3.next) {
48
- case 0:
49
- setTimeout(function () {
50
- return channel.emit(Events.SET_CURRENT_STORY, {
51
- storyId: true,
52
- name: '',
53
- kind: ''
54
- });
55
- }, 0);
56
- return _context3.abrupt("return", new Promise(function (resolve) {
57
- return channel.once(Events.STORY_MISSING, resolve);
58
- }));
59
-
60
- case 2:
61
- case "end":
62
- return _context3.stop();
63
- }
64
- }
65
- }, _callee3);
66
- }));
67
- return _resetCurrentStory.apply(this, arguments);
44
+ async function resetCurrentStory(channel) {
45
+ setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
46
+ storyId: true,
47
+ name: '',
48
+ kind: ''
49
+ }), 0);
50
+ return new Promise(resolve => channel.once(Events.STORY_MISSING, resolve));
68
51
  }
69
52
 
70
53
  function catchRenderError(channel) {
71
- var rejectCallback;
72
- var promise = new Promise(function (_resolve, reject) {
73
- return rejectCallback = reject;
74
- });
54
+ let rejectCallback;
55
+ const promise = new Promise((_resolve, reject) => rejectCallback = reject);
75
56
 
76
57
  function errorHandler(_ref) {
77
- var title = _ref.title,
78
- description = _ref.description;
58
+ let {
59
+ title,
60
+ description
61
+ } = _ref;
79
62
  rejectCallback({
80
63
  message: title,
81
64
  stack: description
@@ -99,10 +82,8 @@ function catchRenderError(channel) {
99
82
  }
100
83
 
101
84
  function waitForStoryRendered(channel) {
102
- var resolveCallback;
103
- var promise = new Promise(function (resolve) {
104
- return resolveCallback = resolve;
105
- });
85
+ let resolveCallback;
86
+ const promise = new Promise(resolve => resolveCallback = resolve);
106
87
 
107
88
  function renderHandler() {
108
89
  resolveCallback();
@@ -120,13 +101,11 @@ function waitForStoryRendered(channel) {
120
101
 
121
102
  function waitForFontsLoaded() {
122
103
  if (!document.fonts) return;
123
- var areFontsLoading = Array.from(document.fonts).some(function (font) {
124
- return font.status == 'loading';
125
- });
104
+ const areFontsLoading = Array.from(document.fonts).some(font => font.status == 'loading');
126
105
 
127
106
  if (areFontsLoading) {
128
- return new Promise(function (resolve) {
129
- var fontsLoadedHandler = function fontsLoadedHandler() {
107
+ return new Promise(resolve => {
108
+ const fontsLoadedHandler = () => {
130
109
  document.fonts.removeEventListener('loadingdone', fontsLoadedHandler);
131
110
  resolve();
132
111
  };
@@ -136,128 +115,134 @@ function waitForFontsLoaded() {
136
115
  }
137
116
  }
138
117
 
118
+ function waitForCaptureCall() {
119
+ return new Promise(resolve => captureResolver = resolve);
120
+ }
121
+
122
+ function initCreeveyState() {
123
+ var _window$localStorage$;
124
+
125
+ const prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
126
+ if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
127
+ if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
128
+ if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
129
+ if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
130
+ window.addEventListener('beforeunload', () => {
131
+ window.localStorage.setItem('Creevey_Tests', JSON.stringify({
132
+ creeveyHost: window.__CREEVEY_SERVER_HOST__,
133
+ creeveyPort: window.__CREEVEY_SERVER_PORT__,
134
+ setStoriesCounter,
135
+ isTestBrowser
136
+ }));
137
+ });
138
+ }
139
+
140
+ let isTestBrowser = false;
141
+ let captureResolver;
142
+ let waitForCreevey;
143
+ let creeveyReady;
144
+ let setStoriesCounter = 0;
145
+
139
146
  function withCreevey() {
140
- var currentStory = '';
141
- var isAnimationDisabled = false;
147
+ let currentStory = '';
148
+ let isAnimationDisabled = false;
149
+ initCreeveyState();
142
150
 
143
151
  function disableAnimation() {
144
152
  isAnimationDisabled = true;
145
- var style = document.createElement('style');
146
- var textNode = document.createTextNode(disableAnimationsStyles);
153
+ const style = document.createElement('style');
154
+ const textNode = document.createTextNode(disableAnimationsStyles);
147
155
  style.setAttribute('type', 'text/css');
148
156
  style.appendChild(textNode);
149
157
  document.head.appendChild(style);
150
158
  }
151
159
 
152
- function selectStory(_x2, _x3, _x4, _x5, _x6) {
153
- return _selectStory.apply(this, arguments);
160
+ async function getStories() {
161
+ var _window$__STORYBOOK_S;
162
+
163
+ const storiesPromise = new Promise(resolve => _addons.addons.getChannel().once(Events.SET_STORIES, data => resolve((0, _shared.serializeRawStories)((0, _shared.denormalizeStoryParameters)(data)))));
164
+ const store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {};
165
+
166
+ if (store.cacheAllCSFFiles) {
167
+ await store.cacheAllCSFFiles();
168
+
169
+ _addons.addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
170
+ } else return;
171
+
172
+ _addons.addons.getChannel().on(Events.SET_STORIES, data => {
173
+ // TODO Figure out how to get only updated stories
174
+ // TODO Subscribe on hmr? like use dummy-hmr
175
+ setStoriesCounter += 1;
176
+ const stories = (0, _shared.serializeRawStories)((0, _shared.denormalizeStoryParameters)(data));
177
+ const storiesByFiles = new Map();
178
+ Object.values(stories).forEach(story => {
179
+ const storiesFromFile = storiesByFiles.get(story.parameters.fileName);
180
+ if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
181
+ });
182
+ void fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/stories"), {
183
+ method: 'POST',
184
+ headers: {
185
+ 'Content-Type': 'application/json'
186
+ },
187
+ body: JSON.stringify({
188
+ setStoriesCounter,
189
+ stories: [...storiesByFiles.entries()]
190
+ })
191
+ });
192
+ });
193
+
194
+ return storiesPromise;
154
195
  }
155
196
 
156
- function _selectStory() {
157
- _selectStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(storyId, kind, name, shouldWaitForReady, callback) {
158
- var channel, waitForReady, renderPromise, errorPromise, _reason$stack, errorMessage;
159
-
160
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
161
- while (1) {
162
- switch (_context2.prev = _context2.next) {
163
- case 0:
164
- if (!isAnimationDisabled) disableAnimation();
165
- channel = _addons.addons.getChannel();
166
- waitForReady = shouldWaitForReady ? new Promise(function (resolve) {
167
- return window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve;
168
- }) : Promise.resolve();
169
-
170
- if (!(storyId == currentStory)) {
171
- _context2.next = 8;
172
- break;
173
- }
174
-
175
- _context2.next = 6;
176
- return resetCurrentStory(channel);
177
-
178
- case 6:
179
- _context2.next = 9;
180
- break;
181
-
182
- case 8:
183
- currentStory = storyId;
184
-
185
- case 9:
186
- renderPromise = waitForStoryRendered(channel);
187
- errorPromise = catchRenderError(channel);
188
- setTimeout(function () {
189
- return channel.emit(Events.SET_CURRENT_STORY, {
190
- storyId: storyId,
191
- name: name,
192
- kind: kind
193
- });
194
- }, 0);
195
- _context2.prev = 12;
196
- _context2.next = 15;
197
- return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
198
- return regeneratorRuntime.wrap(function _callee$(_context) {
199
- while (1) {
200
- switch (_context.prev = _context.next) {
201
- case 0:
202
- _context.next = 2;
203
- return renderPromise;
204
-
205
- case 2:
206
- _context.next = 4;
207
- return waitForFontsLoaded();
208
-
209
- case 4:
210
- _context.next = 6;
211
- return waitForReady;
212
-
213
- case 6:
214
- case "end":
215
- return _context.stop();
216
- }
217
- }
218
- }, _callee);
219
- }))(), errorPromise]);
220
-
221
- case 15:
222
- callback();
223
- _context2.next = 22;
224
- break;
225
-
226
- case 18:
227
- _context2.prev = 18;
228
- _context2.t0 = _context2["catch"](12);
229
- // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
230
- // NOTE Event `STORY_ERRORED` return error-like object without `name` field
231
- errorMessage = _context2.t0 instanceof Error ? (_reason$stack = _context2.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context2.t0.message : (0, _types.isObject)(_context2.t0) ? "".concat(_context2.t0.message, "\n ").concat(_context2.t0.stack) : _context2.t0;
232
- callback(errorMessage);
233
-
234
- case 22:
235
- _context2.prev = 22;
236
- renderPromise.cancel();
237
- errorPromise.cancel();
238
- return _context2.finish(22);
239
-
240
- case 26:
241
- case "end":
242
- return _context2.stop();
243
- }
244
- }
245
- }, _callee2, null, [[12, 18, 22, 26]]);
246
- }));
247
- return _selectStory.apply(this, arguments);
197
+ async function selectStory(storyId, kind, name, shouldWaitForReady, callback) {
198
+ if (!isAnimationDisabled) disableAnimation();
199
+ isTestBrowser = true;
200
+
201
+ const channel = _addons.addons.getChannel();
202
+
203
+ const waitForReady = shouldWaitForReady ? new Promise(resolve => window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve) : Promise.resolve();
204
+ if (storyId == currentStory) await resetCurrentStory(channel);else currentStory = storyId;
205
+ let isCaptureCalled = false;
206
+ const renderPromise = waitForStoryRendered(channel);
207
+ const errorPromise = catchRenderError(channel);
208
+ const capturePromise = waitForCaptureCall().then(() => isCaptureCalled = true);
209
+ setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
210
+ storyId,
211
+ name,
212
+ kind
213
+ }), 0);
214
+
215
+ try {
216
+ await Promise.race([(async () => {
217
+ await Promise.race([renderPromise, capturePromise]);
218
+ await waitForFontsLoaded();
219
+ await waitForReady;
220
+ })(), errorPromise]);
221
+ callback([null, isCaptureCalled]);
222
+ } catch (reason) {
223
+ var _reason$stack;
224
+
225
+ // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
226
+ // NOTE Event `STORY_ERRORED` return error-like object without `name` field
227
+ const errorMessage = reason instanceof Error ? (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message : (0, _types.isObject)(reason) ? "".concat(reason.message, "\n ").concat(reason.stack) : reason;
228
+ callback([errorMessage]);
229
+ } finally {
230
+ renderPromise.cancel();
231
+ errorPromise.cancel();
232
+ }
248
233
  }
249
234
 
250
235
  function updateGlobals(globals) {
251
236
  _addons.addons.getChannel().emit(Events.UPDATE_GLOBALS, {
252
- globals: globals
237
+ globals
253
238
  });
254
239
  }
255
240
 
256
241
  function insertIgnoreStyles(ignoreSelectors) {
257
- var stylesElement = document.createElement('style');
242
+ const stylesElement = document.createElement('style');
258
243
  stylesElement.setAttribute('type', 'text/css');
259
244
  document.head.appendChild(stylesElement);
260
- ignoreSelectors.forEach(function (selector) {
245
+ ignoreSelectors.forEach(selector => {
261
246
  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 ");
262
247
  });
263
248
  return stylesElement;
@@ -269,16 +254,97 @@ function withCreevey() {
269
254
  (_ignoreStyles$parentN = ignoreStyles.parentNode) === null || _ignoreStyles$parentN === void 0 ? void 0 : _ignoreStyles$parentN.removeChild(ignoreStyles);
270
255
  }
271
256
 
257
+ function hasPlayCompletedYet(callback) {
258
+ creeveyReady();
259
+ let isCaptureCalled = false;
260
+ let isPlayCompleted = false;
261
+
262
+ const channel = _addons.addons.getChannel();
263
+
264
+ void waitForStoryRendered(channel).then(() => {
265
+ if (isCaptureCalled) return;
266
+ isPlayCompleted = true;
267
+ callback(true);
268
+ });
269
+ void waitForCaptureCall().then(() => {
270
+ if (isPlayCompleted) return;
271
+ isCaptureCalled = true;
272
+ callback(false);
273
+ });
274
+ }
275
+
276
+ window.__CREEVEY_GET_STORIES__ = getStories;
272
277
  window.__CREEVEY_SELECT_STORY__ = selectStory;
273
278
  window.__CREEVEY_UPDATE_GLOBALS__ = updateGlobals;
274
279
  window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
275
280
  window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
281
+ window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
276
282
  window.__CREEVEY_SET_READY_FOR_CAPTURE__ = _types.noop;
283
+
284
+ const queryAllByQuery = (container, query) => [...container.querySelectorAll(query)].filter(e => e instanceof HTMLElement);
285
+
286
+ const getMultipleError = (_, query) => "Found multiple elements by query: ".concat(query);
287
+
288
+ const getMissingError = (_, query) => "Unable to find an element by query: ".concat(query);
289
+
290
+ const [queryByQuery, getAllByQuery, getByQuery, findAllByQuery, findByQuery] = (0, _testingLibrary.buildQueries)(queryAllByQuery, getMultipleError, getMissingError);
291
+ const queries = {
292
+ queryByQuery,
293
+ getAllByQuery,
294
+ getByQuery,
295
+ findAllByQuery,
296
+ findByQuery
297
+ };
277
298
  return (0, _addons.makeDecorator)({
278
299
  name: 'withCreevey',
279
300
  parameterName: 'creevey',
280
- wrapper: function wrapper(getStory, context) {
301
+ wrapper: (getStory, context) => {
302
+ var _ref2;
303
+
304
+ // TODO Define proper types, like captureElement is a promise
305
+ const {
306
+ captureElement
307
+ } = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {};
308
+ Object.defineProperty(context.parameters.creevey, 'captureElement', {
309
+ get() {
310
+ switch (true) {
311
+ case captureElement === undefined:
312
+ return Promise.resolve(context.canvasElement);
313
+
314
+ case captureElement === null:
315
+ return Promise.resolve(document.documentElement);
316
+
317
+ case typeof captureElement == 'string':
318
+ return _utils.isInternetExplorer // some code from testing-library makes IE hang
319
+ ? Promise.resolve(context.canvasElement.querySelector(captureElement)) : (0, _testingLibrary.within)(context.canvasElement, queries).findByQuery(captureElement);
320
+
321
+ case typeof captureElement == 'function':
322
+ // TODO Define type for it
323
+ return Promise.resolve(captureElement(context));
324
+ }
325
+ },
326
+
327
+ enumerable: true,
328
+ configurable: true
329
+ });
281
330
  return getStory(context);
282
331
  }
283
332
  });
333
+ }
334
+
335
+ async function capture(options) {
336
+ if (!isTestBrowser) return;
337
+ captureResolver();
338
+ waitForCreevey = new Promise(resolve => creeveyReady = resolve);
339
+ await fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/capture"), {
340
+ method: 'POST',
341
+ headers: {
342
+ 'Content-Type': 'application/json'
343
+ },
344
+ body: JSON.stringify({
345
+ workerId: window.__CREEVEY_WORKER_ID__,
346
+ options
347
+ })
348
+ });
349
+ await waitForCreevey;
284
350
  }