creevey 0.8.1-beta.0 → 0.8.1-sb7.0

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 (242) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +22 -19
  3. package/lib/cjs/cli.js +0 -5
  4. package/lib/cjs/client/addon/Manager.js +0 -264
  5. package/lib/cjs/client/addon/components/Addon.js +0 -55
  6. package/lib/cjs/client/addon/components/Icons.js +0 -46
  7. package/lib/cjs/client/addon/components/Panel.js +0 -72
  8. package/lib/cjs/client/addon/components/TestSelect.js +0 -65
  9. package/lib/cjs/client/addon/components/Tools.js +0 -95
  10. package/lib/cjs/client/addon/decorator.js +0 -11
  11. package/lib/cjs/client/addon/index.js +0 -31
  12. package/lib/cjs/client/addon/preset.ie11.js +0 -74
  13. package/lib/cjs/client/addon/preset.js +0 -62
  14. package/lib/cjs/client/addon/readyForCapture.js +0 -12
  15. package/lib/cjs/client/addon/register.js +0 -72
  16. package/lib/cjs/client/addon/utils.js +0 -42
  17. package/lib/cjs/client/addon/withCreevey.js +0 -350
  18. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +0 -87
  19. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +0 -92
  20. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +0 -154
  21. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +0 -166
  22. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +0 -91
  23. package/lib/cjs/client/shared/components/ImagesView/index.js +0 -45
  24. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +0 -50
  25. package/lib/cjs/client/shared/components/PageFooter/Paging.js +0 -94
  26. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +0 -82
  27. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +0 -119
  28. package/lib/cjs/client/shared/components/ResultsPage.js +0 -143
  29. package/lib/cjs/client/shared/creeveyClientApi.js +0 -76
  30. package/lib/cjs/client/shared/helpers.js +0 -411
  31. package/lib/cjs/client/shared/viewMode.js +0 -17
  32. package/lib/cjs/client/web/142.js +0 -2
  33. package/lib/cjs/client/web/142.js.LICENSE.txt +0 -12
  34. package/lib/cjs/client/web/32.js +0 -1
  35. package/lib/cjs/client/web/551.js +0 -1
  36. package/lib/cjs/client/web/566.js +0 -2
  37. package/lib/cjs/client/web/566.js.LICENSE.txt +0 -31
  38. package/lib/cjs/client/web/691.js +0 -2
  39. package/lib/cjs/client/web/691.js.LICENSE.txt +0 -8
  40. package/lib/cjs/client/web/725.js +0 -1
  41. package/lib/cjs/client/web/index.html +0 -19
  42. package/lib/cjs/client/web/main.js +0 -2
  43. package/lib/cjs/client/web/main.js.LICENSE.txt +0 -49
  44. package/lib/cjs/creevey.js +0 -69
  45. package/lib/cjs/index.js +0 -39
  46. package/lib/cjs/server/config.js +0 -93
  47. package/lib/cjs/server/docker.js +0 -146
  48. package/lib/cjs/server/extract.js +0 -46
  49. package/lib/cjs/server/index.js +0 -83
  50. package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -86
  51. package/lib/cjs/server/loaders/babel/helpers.js +0 -469
  52. package/lib/cjs/server/loaders/babel/register.js +0 -124
  53. package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
  54. package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
  55. package/lib/cjs/server/loaders/webpack/compile.js +0 -269
  56. package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -172
  57. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -39
  58. package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
  59. package/lib/cjs/server/loaders/webpack/start.js +0 -41
  60. package/lib/cjs/server/logger.js +0 -48
  61. package/lib/cjs/server/master/api.js +0 -71
  62. package/lib/cjs/server/master/index.js +0 -152
  63. package/lib/cjs/server/master/master.js +0 -57
  64. package/lib/cjs/server/master/pool.js +0 -197
  65. package/lib/cjs/server/master/runner.js +0 -281
  66. package/lib/cjs/server/master/server.js +0 -131
  67. package/lib/cjs/server/messages.js +0 -264
  68. package/lib/cjs/server/selenium/browser.js +0 -656
  69. package/lib/cjs/server/selenium/index.js +0 -31
  70. package/lib/cjs/server/selenium/selenoid.js +0 -172
  71. package/lib/cjs/server/stories.js +0 -153
  72. package/lib/cjs/server/storybook/entry.js +0 -53
  73. package/lib/cjs/server/storybook/helpers.js +0 -158
  74. package/lib/cjs/server/storybook/providers/browser.js +0 -74
  75. package/lib/cjs/server/storybook/providers/nodejs.js +0 -237
  76. package/lib/cjs/server/update.js +0 -79
  77. package/lib/cjs/server/utils.js +0 -169
  78. package/lib/cjs/server/worker/chai-image.js +0 -142
  79. package/lib/cjs/server/worker/helpers.js +0 -69
  80. package/lib/cjs/server/worker/index.js +0 -15
  81. package/lib/cjs/server/worker/reporter.js +0 -108
  82. package/lib/cjs/server/worker/worker.js +0 -268
  83. package/lib/cjs/shared/index.js +0 -101
  84. package/lib/cjs/shared/serializeRegExp.js +0 -42
  85. package/lib/cjs/types.js +0 -74
  86. package/lib/esm/cli.js +0 -4
  87. package/lib/esm/client/addon/Manager.js +0 -248
  88. package/lib/esm/client/addon/components/Addon.js +0 -39
  89. package/lib/esm/client/addon/components/Icons.js +0 -31
  90. package/lib/esm/client/addon/components/Panel.js +0 -53
  91. package/lib/esm/client/addon/components/TestSelect.js +0 -51
  92. package/lib/esm/client/addon/components/Tools.js +0 -74
  93. package/lib/esm/client/addon/decorator.js +0 -2
  94. package/lib/esm/client/addon/index.js +0 -2
  95. package/lib/esm/client/addon/preset.ie11.js +0 -59
  96. package/lib/esm/client/addon/preset.js +0 -41
  97. package/lib/esm/client/addon/readyForCapture.js +0 -5
  98. package/lib/esm/client/addon/register.js +0 -51
  99. package/lib/esm/client/addon/utils.js +0 -32
  100. package/lib/esm/client/addon/withCreevey.js +0 -323
  101. package/lib/esm/client/shared/components/ImagesView/BlendView.js +0 -67
  102. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +0 -69
  103. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +0 -131
  104. package/lib/esm/client/shared/components/ImagesView/SlideView.js +0 -143
  105. package/lib/esm/client/shared/components/ImagesView/SwapView.js +0 -71
  106. package/lib/esm/client/shared/components/ImagesView/index.js +0 -5
  107. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +0 -36
  108. package/lib/esm/client/shared/components/PageFooter/Paging.js +0 -80
  109. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +0 -68
  110. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +0 -97
  111. package/lib/esm/client/shared/components/ResultsPage.js +0 -115
  112. package/lib/esm/client/shared/creeveyClientApi.js +0 -67
  113. package/lib/esm/client/shared/helpers.js +0 -353
  114. package/lib/esm/client/shared/viewMode.js +0 -6
  115. package/lib/esm/creevey.js +0 -54
  116. package/lib/esm/index.js +0 -3
  117. package/lib/esm/server/config.js +0 -70
  118. package/lib/esm/server/docker.js +0 -123
  119. package/lib/esm/server/extract.js +0 -32
  120. package/lib/esm/server/index.js +0 -64
  121. package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -72
  122. package/lib/esm/server/loaders/babel/helpers.js +0 -452
  123. package/lib/esm/server/loaders/babel/register.js +0 -103
  124. package/lib/esm/server/loaders/hooks/mdx.js +0 -15
  125. package/lib/esm/server/loaders/hooks/svelte.js +0 -49
  126. package/lib/esm/server/loaders/webpack/compile.js +0 -246
  127. package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -152
  128. package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -32
  129. package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
  130. package/lib/esm/server/loaders/webpack/start.js +0 -27
  131. package/lib/esm/server/logger.js +0 -20
  132. package/lib/esm/server/master/api.js +0 -60
  133. package/lib/esm/server/master/index.js +0 -131
  134. package/lib/esm/server/master/master.js +0 -38
  135. package/lib/esm/server/master/pool.js +0 -176
  136. package/lib/esm/server/master/runner.js +0 -259
  137. package/lib/esm/server/master/server.js +0 -107
  138. package/lib/esm/server/messages.js +0 -232
  139. package/lib/esm/server/selenium/browser.js +0 -623
  140. package/lib/esm/server/selenium/index.js +0 -2
  141. package/lib/esm/server/selenium/selenoid.js +0 -149
  142. package/lib/esm/server/stories.js +0 -135
  143. package/lib/esm/server/storybook/entry.js +0 -27
  144. package/lib/esm/server/storybook/helpers.js +0 -97
  145. package/lib/esm/server/storybook/providers/browser.js +0 -60
  146. package/lib/esm/server/storybook/providers/nodejs.js +0 -216
  147. package/lib/esm/server/update.js +0 -61
  148. package/lib/esm/server/utils.js +0 -128
  149. package/lib/esm/server/worker/chai-image.js +0 -130
  150. package/lib/esm/server/worker/helpers.js +0 -60
  151. package/lib/esm/server/worker/index.js +0 -1
  152. package/lib/esm/server/worker/reporter.js +0 -86
  153. package/lib/esm/server/worker/worker.js +0 -238
  154. package/lib/esm/shared/index.js +0 -78
  155. package/lib/esm/shared/serializeRegExp.js +0 -24
  156. package/lib/esm/types.js +0 -43
  157. package/lib/types/cli.d.ts +0 -1
  158. package/lib/types/client/addon/Manager.d.ts +0 -37
  159. package/lib/types/client/addon/components/Addon.d.ts +0 -8
  160. package/lib/types/client/addon/components/Icons.d.ts +0 -7
  161. package/lib/types/client/addon/components/Panel.d.ts +0 -9
  162. package/lib/types/client/addon/components/TestSelect.d.ts +0 -8
  163. package/lib/types/client/addon/components/Tools.d.ts +0 -6
  164. package/lib/types/client/addon/decorator.d.ts +0 -1
  165. package/lib/types/client/addon/index.d.ts +0 -2
  166. package/lib/types/client/addon/preset.d.ts +0 -23
  167. package/lib/types/client/addon/preset.ie11.d.ts +0 -10
  168. package/lib/types/client/addon/readyForCapture.d.ts +0 -6
  169. package/lib/types/client/addon/register.d.ts +0 -3
  170. package/lib/types/client/addon/utils.d.ts +0 -3
  171. package/lib/types/client/addon/withCreevey.d.ts +0 -24
  172. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +0 -3
  173. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +0 -24
  174. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +0 -3
  175. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +0 -3
  176. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +0 -3
  177. package/lib/types/client/shared/components/ImagesView/index.d.ts +0 -5
  178. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +0 -8
  179. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +0 -7
  180. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +0 -12
  181. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +0 -16
  182. package/lib/types/client/shared/components/ResultsPage.d.ts +0 -18
  183. package/lib/types/client/shared/creeveyClientApi.d.ts +0 -9
  184. package/lib/types/client/shared/helpers.d.ts +0 -46
  185. package/lib/types/client/shared/viewMode.d.ts +0 -4
  186. package/lib/types/client/web/CreeveyApp.d.ts +0 -11
  187. package/lib/types/client/web/CreeveyContext.d.ts +0 -11
  188. package/lib/types/client/web/CreeveyLoader.d.ts +0 -2
  189. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +0 -19
  190. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +0 -6
  191. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +0 -14
  192. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +0 -12
  193. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +0 -33
  194. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +0 -7
  195. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +0 -10
  196. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +0 -9
  197. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +0 -6
  198. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +0 -1
  199. package/lib/types/client/web/KeyboardEventsContext.d.ts +0 -13
  200. package/lib/types/client/web/index.d.ts +0 -4
  201. package/lib/types/creevey.d.ts +0 -1
  202. package/lib/types/index.d.ts +0 -2
  203. package/lib/types/server/config.d.ts +0 -4
  204. package/lib/types/server/docker.d.ts +0 -7
  205. package/lib/types/server/extract.d.ts +0 -2
  206. package/lib/types/server/index.d.ts +0 -2
  207. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
  208. package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
  209. package/lib/types/server/loaders/babel/register.d.ts +0 -5
  210. package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
  211. package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
  212. package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
  213. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -4
  214. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
  215. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
  216. package/lib/types/server/loaders/webpack/start.d.ts +0 -1
  217. package/lib/types/server/logger.d.ts +0 -10
  218. package/lib/types/server/master/api.d.ts +0 -7
  219. package/lib/types/server/master/index.d.ts +0 -3
  220. package/lib/types/server/master/master.d.ts +0 -7
  221. package/lib/types/server/master/pool.d.ts +0 -31
  222. package/lib/types/server/master/runner.d.ts +0 -26
  223. package/lib/types/server/master/server.d.ts +0 -2
  224. package/lib/types/server/messages.d.ts +0 -29
  225. package/lib/types/server/selenium/browser.d.ts +0 -17
  226. package/lib/types/server/selenium/index.d.ts +0 -2
  227. package/lib/types/server/selenium/selenoid.d.ts +0 -3
  228. package/lib/types/server/stories.d.ts +0 -8
  229. package/lib/types/server/storybook/entry.d.ts +0 -17
  230. package/lib/types/server/storybook/helpers.d.ts +0 -24
  231. package/lib/types/server/storybook/providers/browser.d.ts +0 -4
  232. package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
  233. package/lib/types/server/update.d.ts +0 -2
  234. package/lib/types/server/utils.d.ts +0 -23
  235. package/lib/types/server/worker/chai-image.d.ts +0 -6
  236. package/lib/types/server/worker/helpers.d.ts +0 -8
  237. package/lib/types/server/worker/index.d.ts +0 -1
  238. package/lib/types/server/worker/reporter.d.ts +0 -8
  239. package/lib/types/server/worker/worker.d.ts +0 -4
  240. package/lib/types/shared/index.d.ts +0 -7
  241. package/lib/types/shared/serializeRegExp.d.ts +0 -9
  242. package/lib/types/types.d.ts +0 -486
@@ -1,237 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.extractStoriesData = extractStoriesData;
7
- exports.loadStories = loadStories;
8
-
9
- var _path = _interopRequireDefault(require("path"));
10
-
11
- var _cluster = _interopRequireDefault(require("cluster"));
12
-
13
- var _chokidar = _interopRequireDefault(require("chokidar"));
14
-
15
- var _types = require("../../../types");
16
-
17
- var _utils = require("../../utils");
18
-
19
- var _messages = require("../../messages");
20
-
21
- var _helpers = require("../helpers");
22
-
23
- var _logger = require("../../logger");
24
-
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
-
27
- 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); }
28
-
29
- 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; }
30
-
31
- async function initStorybookEnvironment() {
32
- // @ts-expect-error There is no @types/global-jsdom package
33
- (await Promise.resolve().then(() => _interopRequireWildcard(require('global-jsdom')))).default(undefined, {
34
- url: 'http://localhost'
35
- }); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
36
- // https://github.com/storybookjs/storybook/blob/v5.2.8/lib/core/src/client/preview/start.js#L98
37
- // Example: "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/15.2.1"
38
-
39
- Object.defineProperty(window.navigator, 'userAgent', {
40
- value: window.navigator.userAgent.split(' ').filter(token => !token.startsWith('jsdom')).join(' ')
41
- }); // TODO Look at creevey debug flag
42
-
43
- const {
44
- logger
45
- } = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
46
-
47
- if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
48
-
49
- logger.debug = _types.noop;
50
- return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
51
- }
52
-
53
- function watchStories(channel, watcher, initialFiles) {
54
- const watchingFiles = initialFiles;
55
- let storiesByFiles = new Map();
56
- (0, _messages.subscribeOn)('shutdown', () => void watcher.close());
57
- watcher.add(Array.from(watchingFiles));
58
- watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
59
- watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
60
- return data => {
61
- const stories = data.stories;
62
- const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
63
- const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
64
- const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
65
- watcher.add(addedFiles);
66
- addedFiles.forEach(filePath => {
67
- watchingFiles.add(filePath);
68
- storiesByFiles.set(filePath, []);
69
- });
70
- removedFiles.forEach(filePath => watchingFiles.delete(filePath));
71
- Object.values(stories).forEach(story => {
72
- var _storiesByFiles$get;
73
-
74
- return (_storiesByFiles$get = storiesByFiles.get(story.parameters.fileName)) === null || _storiesByFiles$get === void 0 ? void 0 : _storiesByFiles$get.push(story);
75
- });
76
- channel.emit('storiesUpdated', storiesByFiles);
77
- storiesByFiles = new Map();
78
- };
79
- }
80
-
81
- function loadStoriesFromBundle(watch) {
82
- const bundlePath = _path.default.join((0, _utils.getCreeveyCache)(), 'storybook/main.js');
83
-
84
- if (watch) {
85
- (0, _messages.subscribeOn)('webpack', message => {
86
- if (message.type != 'rebuild succeeded') return;
87
- Object.values(global.__CREEVEY_HMR_DATA__).filter(({
88
- callback
89
- }) => callback).forEach(({
90
- data,
91
- callback
92
- }) => callback(data));
93
- delete require.cache[bundlePath];
94
- Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
95
- });
96
- }
97
-
98
- Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
99
- }
100
-
101
- async function loadStoriesDirectly(config, {
102
- watcher,
103
- debug
104
- }) {
105
- const {
106
- toRequireContext,
107
- normalizeStoriesEntry
108
- } = await (0, _helpers.importStorybookCoreCommon)();
109
- const {
110
- addParameters,
111
- configure
112
- } = await Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
113
- const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../loaders/babel/register')))).default(config, debug);
114
-
115
- const preview = (() => {
116
- try {
117
- return require.resolve(`${config.storybookDir}/preview`);
118
- } catch (_) {
119
- /* noop */
120
- }
121
- })();
122
-
123
- const {
124
- stories
125
- } = await (0, _helpers.importStorybookConfig)();
126
- const contexts = stories.map(entry => {
127
- const normalizedEntry = normalizeStoriesEntry(entry, {
128
- configDir: config.storybookDir,
129
- workingDir: process.cwd()
130
- });
131
- const {
132
- path: storiesPath,
133
- recursive,
134
- match
135
- } = toRequireContext(normalizedEntry);
136
- watcher === null || watcher === void 0 ? void 0 : watcher.add(_path.default.resolve(config.storybookDir, storiesPath));
137
- return () => requireContext(storiesPath, recursive, new RegExp(match));
138
- });
139
-
140
- let disposeCallback = data => void data;
141
-
142
- Object.assign(module, {
143
- hot: {
144
- data: {},
145
-
146
- accept() {
147
- /* noop */
148
- },
149
-
150
- dispose(callback) {
151
- disposeCallback = callback;
152
- }
153
-
154
- }
155
- });
156
-
157
- async function startStorybook() {
158
- if (preview) {
159
- const {
160
- parameters,
161
- globals,
162
- globalTypes
163
- } = await Promise.resolve(`${preview}`).then(s => _interopRequireWildcard(require(s)));
164
- if (parameters) addParameters(parameters);
165
- if (globals) addParameters({
166
- globals
167
- });
168
- if (globalTypes) addParameters({
169
- globalTypes
170
- });
171
- }
172
-
173
- try {
174
- configure(contexts.map(ctx => ctx()), module, false);
175
- } catch (error) {
176
- if (_cluster.default.isPrimary) _logger.logger.error(error);
177
- }
178
- }
179
-
180
- watcher === null || watcher === void 0 ? void 0 : watcher.add(config.storybookDir);
181
- watcher === null || watcher === void 0 ? void 0 : watcher.on('all', (_event, filename) => {
182
- var _module$hot;
183
-
184
- disposeCallback((_module$hot = module.hot) === null || _module$hot === void 0 ? void 0 : _module$hot.data);
185
- delete require.cache[filename];
186
- void startStorybook();
187
- });
188
- void startStorybook();
189
- } // TODO Do we need to support multiple storybooks here?
190
-
191
-
192
- async function loadStories(config, {
193
- watch,
194
- debug
195
- }, storiesListener) {
196
- const storybookApi = await initStorybookEnvironment();
197
- const Events = await (0, _helpers.importStorybookCoreEvents)();
198
- const {
199
- channel
200
- } = storybookApi;
201
- channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
202
- channel.on('storiesUpdated', storiesListener);
203
- let watcher;
204
- if (watch) watcher = _chokidar.default.watch([], {
205
- ignoreInitial: true
206
- });
207
- const loadPromise = new Promise(resolve => {
208
- channel.once(Events.SET_STORIES, data => {
209
- const stories = data.stories;
210
- const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
211
- if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
212
- resolve(stories);
213
- });
214
- });
215
- if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
216
- watcher,
217
- debug
218
- });
219
- return loadPromise;
220
- }
221
-
222
- async function extractStoriesData(config, {
223
- watch,
224
- debug
225
- }) {
226
- const storybookApi = await initStorybookEnvironment();
227
- const Events = await (0, _helpers.importStorybookCoreEvents)();
228
- const {
229
- channel
230
- } = storybookApi;
231
- channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
232
- const loadPromise = new Promise(resolve => channel.once(Events.SET_STORIES, resolve));
233
- if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
234
- debug
235
- });
236
- return loadPromise;
237
- }
@@ -1,79 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = update;
7
-
8
- var _path = _interopRequireDefault(require("path"));
9
-
10
- var _fs = _interopRequireWildcard(require("fs"));
11
-
12
- var _micromatch = _interopRequireDefault(require("micromatch"));
13
-
14
- var _types = require("../types");
15
-
16
- 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); }
17
-
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; }
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function tryToLoadTestsData(filename) {
23
- try {
24
- // eslint-disable-next-line @typescript-eslint/no-var-requires
25
- return require(filename);
26
- } catch (_) {
27
- /* noop */
28
- }
29
- }
30
-
31
- const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
32
-
33
- function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
34
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
35
- (0, _fs.mkdirSync)(dstPath, {
36
- recursive: true
37
- });
38
-
39
- _fs.default.copyFileSync(_path.default.join(srcPath, `${imageName}-actual-${retry}.png`), _path.default.join(dstPath, `${imageName}.png`));
40
- });
41
- }
42
-
43
- function traverse(srcPath, dstPath, testPaths, isMatch) {
44
- const dirents = _fs.default.readdirSync(srcPath, {
45
- withFileTypes: true
46
- });
47
-
48
- approve(dirents, srcPath, dstPath, testPaths, isMatch);
49
- dirents.filter(dirent => dirent.isDirectory()).map(dirent => [dirent.name, testPaths === null || testPaths === void 0 ? void 0 : testPaths.map(([token, ...restPath]) => token == dirent.name ? restPath : null).filter(_types.isDefined)]).filter(([, paths]) => !paths || paths.length > 0).forEach(([dirname, paths]) => traverse(_path.default.join(srcPath, dirname), _path.default.join(dstPath, dirname), paths, isMatch));
50
- }
51
-
52
- function update(config, grepPattern) {
53
- const {
54
- reportDir,
55
- screenDir
56
- } = config;
57
- const isMatch = grepPattern ? _micromatch.default.matcher(grepPattern, {
58
- contains: true
59
- }) : () => true;
60
- const testsMeta = tryToLoadTestsData(`${reportDir}/tests.json`);
61
- const testsReport = tryToLoadTestsData(`${reportDir}/data`);
62
- let testPaths = null;
63
-
64
- if (testsMeta && testsReport) {
65
- testPaths = Object.values(testsMeta).filter(_types.isDefined).filter(({
66
- id
67
- }) => {
68
- var _testsReport$id;
69
-
70
- return ((_testsReport$id = testsReport[id]) === null || _testsReport$id === void 0 ? void 0 : _testsReport$id.status) == 'failed';
71
- }).map(({
72
- storyPath,
73
- testName,
74
- browser
75
- }) => [...storyPath, ...(testName ? [testName] : []), browser]);
76
- }
77
-
78
- traverse(reportDir, screenDir, testPaths, value => isMatch(_path.default.relative(reportDir, value)));
79
- }
@@ -1,169 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
7
- exports.getCreeveyCache = getCreeveyCache;
8
- exports.isShuttingDown = exports.isInsideDocker = void 0;
9
- exports.removeProps = removeProps;
10
- exports.runSequence = runSequence;
11
- exports.shouldSkip = shouldSkip;
12
- exports.shouldSkipByOption = shouldSkipByOption;
13
- exports.shutdown = shutdown;
14
- exports.shutdownWorkers = shutdownWorkers;
15
- exports.skipOptionKeys = void 0;
16
- exports.testsToImages = testsToImages;
17
-
18
- var _fs = require("fs");
19
-
20
- var _cluster = _interopRequireDefault(require("cluster"));
21
-
22
- var _types = require("../types");
23
-
24
- var _messages = require("./messages");
25
-
26
- var _findCacheDir = _interopRequireDefault(require("find-cache-dir"));
27
-
28
- var _https = require("https");
29
-
30
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
-
32
- const isShuttingDown = {
33
- current: false
34
- };
35
- exports.isShuttingDown = isShuttingDown;
36
- const LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
37
- exports.LOCALHOST_REGEXP = LOCALHOST_REGEXP;
38
- const extensions = ['.js', '.jsx', '.ts', '.tsx'];
39
- exports.extensions = extensions;
40
- const skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
41
- exports.skipOptionKeys = skipOptionKeys;
42
-
43
- function matchBy(pattern, value) {
44
- return typeof pattern == 'string' && pattern == value || Array.isArray(pattern) && pattern.includes(value) || pattern instanceof RegExp && pattern.test(value) || !(0, _types.isDefined)(pattern);
45
- }
46
-
47
- function shouldSkip(browser, meta, skipOptions, test) {
48
- if (typeof skipOptions != 'object') {
49
- return skipOptions;
50
- }
51
-
52
- for (const skipKey in skipOptions) {
53
- const reason = shouldSkipByOption(browser, meta, skipOptions[skipKey], skipKey, test);
54
- if (reason) return reason;
55
- }
56
-
57
- return false;
58
- }
59
-
60
- function shouldSkipByOption(browser, meta, skipOption, reason, test) {
61
- if (Array.isArray(skipOption)) {
62
- for (const skip of skipOption) {
63
- const result = shouldSkipByOption(browser, meta, skip, reason, test);
64
- if (result) return result;
65
- }
66
-
67
- return false;
68
- }
69
-
70
- const {
71
- in: browsers,
72
- kinds,
73
- stories,
74
- tests
75
- } = skipOption;
76
- const {
77
- kind,
78
- story
79
- } = meta;
80
- const skipByBrowser = matchBy(browsers, browser);
81
- const skipByKind = matchBy(kinds, kind);
82
- const skipByStory = matchBy(stories, story);
83
- const skipByTest = !(0, _types.isDefined)(test) || matchBy(tests, test);
84
- return skipByBrowser && skipByKind && skipByStory && skipByTest && reason;
85
- }
86
-
87
- async function shutdownWorkers() {
88
- isShuttingDown.current = true;
89
- await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
90
- const timeout = setTimeout(() => worker.kill(), 10000);
91
- worker.on('exit', () => {
92
- clearTimeout(timeout);
93
- resolve();
94
- });
95
- (0, _messages.sendShutdownMessage)(worker);
96
- })));
97
- (0, _messages.emitShutdownMessage)();
98
- }
99
-
100
- function shutdown() {
101
- // eslint-disable-next-line no-process-exit
102
- process.exit();
103
- }
104
-
105
- function getCreeveyCache() {
106
- return (0, _findCacheDir.default)({
107
- name: 'creevey',
108
- cwd: __dirname
109
- });
110
- }
111
-
112
- async function runSequence(seq, predicate) {
113
- for (const fn of seq) {
114
- if (predicate()) await fn();
115
- }
116
- }
117
-
118
- function testsToImages(tests) {
119
- return new Set([].concat(...tests.filter(_types.isDefined).map(({
120
- browser,
121
- testName,
122
- storyPath,
123
- results
124
- }) => {
125
- var _results$slice$;
126
-
127
- return Object.keys((results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
128
- })));
129
- } // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
130
-
131
-
132
- const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0, _fs.readFileSync)('/proc/1/cgroup', 'utf8'));
133
- exports.isInsideDocker = isInsideDocker;
134
-
135
- const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
136
- if (response.statusCode == 302) {
137
- const {
138
- location
139
- } = response.headers;
140
- if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
141
- return resolve(downloadBinary(location, destination));
142
- }
143
-
144
- if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
145
- const fileStream = (0, _fs.createWriteStream)(destination);
146
- response.pipe(fileStream);
147
- fileStream.on('finish', () => {
148
- fileStream.close();
149
- resolve();
150
- });
151
- fileStream.on('error', error => {
152
- (0, _fs.unlink)(destination, _types.noop);
153
- reject(error);
154
- });
155
- }));
156
-
157
- exports.downloadBinary = downloadBinary;
158
-
159
- function removeProps(obj, propPath) {
160
- const [prop, ...restPath] = propPath;
161
-
162
- if (restPath.length > 0) {
163
- if (typeof prop == 'string') obj[prop] && removeProps(obj[prop], restPath);
164
- if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => obj[key] && removeProps(obj[key], restPath));
165
- } else {
166
- if (typeof prop == 'string') delete obj[prop];
167
- if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => delete obj[key]);
168
- }
169
- }
@@ -1,142 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
-
8
- var _pngjs = require("pngjs");
9
-
10
- var _pixelmatch = _interopRequireDefault(require("pixelmatch"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function normalizeImageSize(image, width, height) {
15
- const normalizedImage = Buffer.alloc(4 * width * height);
16
-
17
- for (let y = 0; y < height; y++) {
18
- for (let x = 0; x < width; x++) {
19
- const i = (y * width + x) * 4;
20
-
21
- if (x < image.width && y < image.height) {
22
- const j = (y * image.width + x) * 4;
23
- normalizedImage[i + 0] = image.data[j + 0];
24
- normalizedImage[i + 1] = image.data[j + 1];
25
- normalizedImage[i + 2] = image.data[j + 2];
26
- normalizedImage[i + 3] = image.data[j + 3];
27
- } else {
28
- normalizedImage[i + 0] = 0;
29
- normalizedImage[i + 1] = 0;
30
- normalizedImage[i + 2] = 0;
31
- normalizedImage[i + 3] = 0;
32
- }
33
- }
34
- }
35
-
36
- return normalizedImage;
37
- }
38
-
39
- function hasDiffPixels(diff) {
40
- for (let i = 0; i < diff.length; i += 4) {
41
- if (diff[i + 0] == 255 && diff[i + 1] == 0 && diff[i + 2] == 0 && diff[i + 3] == 255) return true;
42
- }
43
-
44
- return false;
45
- }
46
-
47
- function compareImages(expect, actual, diffOptions) {
48
- const expectImage = _pngjs.PNG.sync.read(expect);
49
-
50
- const actualImage = _pngjs.PNG.sync.read(actual);
51
-
52
- const width = Math.max(actualImage.width, expectImage.width);
53
- const height = Math.max(actualImage.height, expectImage.height);
54
- const diffImage = new _pngjs.PNG({
55
- width,
56
- height
57
- });
58
- let actualImageData = actualImage.data;
59
-
60
- if (actualImage.width < width || actualImage.height < height) {
61
- actualImageData = normalizeImageSize(actualImage, width, height);
62
- }
63
-
64
- let expectImageData = expectImage.data;
65
-
66
- if (expectImage.width < width || expectImage.height < height) {
67
- expectImageData = normalizeImageSize(expectImage, width, height);
68
- }
69
-
70
- (0, _pixelmatch.default)(expectImageData, actualImageData, diffImage.data, width, height, diffOptions);
71
- return {
72
- isEqual: !hasDiffPixels(diffImage.data),
73
- diff: _pngjs.PNG.sync.write(diffImage)
74
- };
75
- }
76
-
77
- function _default(getExpected, diffOptions) {
78
- return function chaiImage({
79
- Assertion
80
- }, utils) {
81
- async function assertImage(actual, imageName) {
82
- let onCompare = () => Promise.resolve();
83
-
84
- let expected = await getExpected(imageName);
85
- if (!(expected instanceof Buffer) && expected != null) ({
86
- expected,
87
- onCompare
88
- } = expected);
89
-
90
- if (expected == null) {
91
- await onCompare(actual);
92
- return imageName ? `Expected image '${imageName}' does not exists` : 'Expected image does not exists';
93
- }
94
-
95
- if (actual.equals(expected)) return await onCompare(actual);
96
- const {
97
- isEqual,
98
- diff
99
- } = compareImages(expected, actual, diffOptions);
100
- if (isEqual) return await onCompare(actual);
101
- await onCompare(actual, expected, diff);
102
- return imageName ? `Expected image '${imageName}' to match` : 'Expected image to match';
103
- }
104
-
105
- utils.addMethod(Assertion.prototype, 'matchImage', async function matchImage(imageName) {
106
- const actual = utils.flag(this, 'object');
107
- const errorMessage = await assertImage(typeof actual == 'string' ? Buffer.from(actual, 'base64') : actual, imageName);
108
-
109
- if (errorMessage) {
110
- throw createImageError(imageName ? {
111
- [imageName]: errorMessage
112
- } : errorMessage);
113
- }
114
- });
115
- utils.addMethod(Assertion.prototype, 'matchImages', async function matchImages() {
116
- const errors = {};
117
- await Promise.all(Object.entries(utils.flag(this, 'object')).map(async ([imageName, imageOrBase64]) => {
118
- let errorMessage;
119
-
120
- try {
121
- errorMessage = await assertImage(typeof imageOrBase64 == 'string' ? Buffer.from(imageOrBase64, 'base64') : imageOrBase64, imageName);
122
- } catch (error) {
123
- errorMessage = error.stack;
124
- }
125
-
126
- if (errorMessage) {
127
- errors[imageName] = errorMessage;
128
- }
129
- }));
130
-
131
- if (Object.keys(errors).length > 0) {
132
- throw createImageError(errors);
133
- }
134
- });
135
- };
136
- }
137
-
138
- function createImageError(imageErrors) {
139
- const error = new Error('Expected image to match');
140
- error.images = imageErrors;
141
- return error;
142
- }
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.addTestsFromStories = addTestsFromStories;
7
-
8
- var _mocha = require("mocha");
9
-
10
- var _types = require("../../types");
11
-
12
- var _stories = require("../stories");
13
-
14
- function findOrCreateSuite(name, parent) {
15
- const suite = parent.suites.find(({
16
- title
17
- }) => title == name) || new _mocha.Suite(name, parent.ctx);
18
-
19
- if (!suite.parent) {
20
- suite.parent = parent;
21
- parent.addSuite(suite);
22
- }
23
-
24
- return suite;
25
- }
26
-
27
- function createTest(name, fn, skip = false) {
28
- const test = new _mocha.Test(name, skip ? undefined : fn);
29
- test.pending = Boolean(skip); // NOTE Can't define skip reason in mocha https://github.com/mochajs/mocha/issues/2026
30
-
31
- test.skipReason = skip;
32
- return test;
33
- }
34
-
35
- function addTest(rootSuite, test) {
36
- const [testName, ...suitePath] = [...test.storyPath, test.testName].reverse().filter(_types.isDefined);
37
- const suite = suitePath.reduceRight((subSuite, suiteName) => findOrCreateSuite(suiteName, subSuite), rootSuite);
38
- const mochaTest = createTest(testName, test.fn, test.skip);
39
- suite.addTest(mochaTest);
40
- mochaTest.ctx = Object.setPrototypeOf({
41
- id: test.id,
42
- story: test.story
43
- }, suite.ctx);
44
- return mochaTest;
45
- }
46
-
47
- function removeTestOrSuite(testOrSuite) {
48
- const {
49
- parent
50
- } = testOrSuite;
51
- if (!parent) return;
52
- if (testOrSuite instanceof _mocha.Test) parent.tests = parent.tests.filter(test => test != testOrSuite);
53
- if (testOrSuite instanceof _mocha.Suite) parent.suites = parent.suites.filter(suite => suite != testOrSuite);
54
- if (parent.tests.length == 0 && parent.suites.length == 0) removeTestOrSuite(parent);
55
- }
56
-
57
- async function addTestsFromStories(rootSuite, config, {
58
- browser,
59
- ...options
60
- }) {
61
- const mochaTestsById = new Map();
62
- const tests = await (0, _stories.loadTestsFromStories)([browser], listener => config.storiesProvider(config, options, listener), testsDiff => Object.entries(testsDiff).forEach(([id, newTest]) => {
63
- const oldTest = mochaTestsById.get(id);
64
- mochaTestsById.delete(id);
65
- if (oldTest) removeTestOrSuite(oldTest);
66
- if (newTest) mochaTestsById.set(id, addTest(rootSuite, newTest));
67
- }));
68
- Object.values(tests).filter(_types.isDefined).forEach(test => mochaTestsById.set(test.id, addTest(rootSuite, test)));
69
- }