creevey 0.9.0-beta.1 → 0.9.0-non-webpack.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 (267) hide show
  1. package/AUTHORS +15 -15
  2. package/CHANGELOG.md +1275 -1275
  3. package/LICENSE +21 -21
  4. package/README.md +7 -0
  5. package/addon/README.md +3 -0
  6. package/addon/package.json +4 -0
  7. package/docs/config.md +212 -212
  8. package/docs/grid.md +10 -10
  9. package/docs/tests.md +63 -63
  10. package/jest.config.js +6 -0
  11. package/lib/cjs/cli.js +5 -0
  12. package/lib/cjs/client/addon/Manager.js +418 -0
  13. package/lib/cjs/client/addon/components/Addon.js +76 -0
  14. package/lib/cjs/client/addon/components/Icons.js +42 -0
  15. package/lib/cjs/client/addon/components/Panel.js +68 -0
  16. package/lib/cjs/client/addon/components/TestSelect.js +63 -0
  17. package/lib/cjs/client/addon/components/Tools.js +114 -0
  18. package/lib/cjs/client/addon/decorator.js +11 -0
  19. package/lib/cjs/client/addon/index.js +31 -0
  20. package/lib/cjs/client/addon/preset.js +81 -0
  21. package/lib/cjs/client/addon/readyForCapture.js +12 -0
  22. package/lib/cjs/client/addon/register.js +100 -0
  23. package/lib/cjs/client/addon/utils.js +38 -0
  24. package/lib/cjs/client/addon/withCreevey.js +558 -0
  25. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +85 -0
  26. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +88 -0
  27. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +176 -0
  28. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +179 -0
  29. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +110 -0
  30. package/lib/cjs/client/shared/components/ImagesView/index.js +45 -0
  31. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +46 -0
  32. package/lib/cjs/client/shared/components/PageFooter/Paging.js +98 -0
  33. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +78 -0
  34. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +144 -0
  35. package/lib/cjs/client/shared/components/ResultsPage.js +173 -0
  36. package/lib/cjs/client/shared/creeveyClientApi.js +107 -0
  37. package/lib/cjs/client/shared/helpers.js +482 -0
  38. package/lib/cjs/client/shared/viewMode.js +17 -0
  39. package/lib/cjs/client/web/142.js +2 -0
  40. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  41. package/lib/cjs/client/web/32.js +1 -0
  42. package/lib/cjs/client/web/551.js +1 -0
  43. package/lib/cjs/client/web/566.js +2 -0
  44. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  45. package/lib/cjs/client/web/691.js +2 -0
  46. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  47. package/lib/cjs/client/web/725.js +1 -0
  48. package/lib/cjs/client/web/index.html +19 -0
  49. package/lib/cjs/client/web/main.js +2 -38
  50. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  51. package/lib/cjs/creevey.js +69 -0
  52. package/lib/cjs/index.js +62 -0
  53. package/lib/cjs/server/config.js +96 -0
  54. package/lib/cjs/server/docker.js +146 -0
  55. package/lib/cjs/server/extract.js +50 -0
  56. package/lib/cjs/server/index.js +83 -0
  57. package/lib/cjs/server/loaders/babel/creevey-plugin.js +86 -0
  58. package/lib/cjs/server/loaders/babel/helpers.js +469 -0
  59. package/lib/cjs/server/loaders/babel/register.js +124 -0
  60. package/lib/cjs/server/loaders/hooks/mdx.js +30 -0
  61. package/lib/cjs/server/loaders/hooks/svelte.js +65 -0
  62. package/lib/cjs/server/loaders/webpack/compile.js +293 -0
  63. package/lib/cjs/server/loaders/webpack/creevey-loader.js +179 -0
  64. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +39 -0
  65. package/lib/cjs/server/loaders/webpack/mdx-loader.js +72 -0
  66. package/lib/cjs/server/loaders/webpack/start.js +41 -0
  67. package/lib/cjs/server/logger.js +48 -0
  68. package/lib/cjs/server/master/api.js +71 -0
  69. package/lib/cjs/server/master/index.js +146 -0
  70. package/lib/cjs/server/master/master.js +57 -0
  71. package/lib/cjs/server/master/pool.js +197 -0
  72. package/lib/cjs/server/master/runner.js +281 -0
  73. package/lib/cjs/server/master/server.js +129 -0
  74. package/lib/cjs/server/messages.js +264 -0
  75. package/lib/cjs/server/selenium/browser.js +672 -0
  76. package/lib/cjs/server/selenium/index.js +31 -0
  77. package/lib/cjs/server/selenium/selenoid.js +172 -0
  78. package/lib/cjs/server/stories.js +159 -0
  79. package/lib/cjs/server/storybook/entry.js +70 -0
  80. package/lib/cjs/server/storybook/helpers.js +159 -0
  81. package/lib/cjs/server/storybook/providers/browser.js +74 -0
  82. package/lib/cjs/server/storybook/providers/hybrid.js +84 -0
  83. package/lib/cjs/server/storybook/providers/nodejs.js +239 -0
  84. package/lib/cjs/server/testsFiles/parser.js +72 -0
  85. package/lib/cjs/server/testsFiles/register.js +48 -0
  86. package/lib/cjs/server/update.js +79 -0
  87. package/lib/cjs/server/utils.js +183 -0
  88. package/lib/cjs/server/worker/chai-image.js +142 -0
  89. package/lib/cjs/server/worker/helpers.js +69 -0
  90. package/lib/cjs/server/worker/index.js +15 -0
  91. package/lib/cjs/server/worker/reporter.js +108 -0
  92. package/lib/cjs/server/worker/worker.js +268 -0
  93. package/lib/cjs/shared/index.js +89 -0
  94. package/lib/cjs/shared/serializeRegExp.js +41 -0
  95. package/lib/cjs/types.js +74 -0
  96. package/lib/esm/cli.js +4 -0
  97. package/lib/esm/client/addon/Manager.js +402 -0
  98. package/lib/esm/client/addon/components/Addon.js +58 -0
  99. package/lib/esm/client/addon/components/Icons.js +27 -0
  100. package/lib/esm/client/addon/components/Panel.js +49 -0
  101. package/lib/esm/client/addon/components/TestSelect.js +49 -0
  102. package/lib/esm/client/addon/components/Tools.js +91 -0
  103. package/lib/esm/client/addon/decorator.js +2 -0
  104. package/lib/esm/client/addon/index.js +2 -0
  105. package/lib/esm/client/addon/preset.js +56 -0
  106. package/lib/esm/client/addon/readyForCapture.js +5 -0
  107. package/lib/esm/client/addon/register.js +79 -0
  108. package/lib/esm/client/addon/utils.js +31 -0
  109. package/lib/esm/client/addon/withCreevey.js +534 -0
  110. package/lib/esm/client/shared/components/ImagesView/BlendView.js +63 -0
  111. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +65 -0
  112. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +151 -0
  113. package/lib/esm/client/shared/components/ImagesView/SlideView.js +154 -0
  114. package/lib/esm/client/shared/components/ImagesView/SwapView.js +88 -0
  115. package/lib/esm/client/shared/components/ImagesView/index.js +5 -0
  116. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +32 -0
  117. package/lib/esm/client/shared/components/PageFooter/Paging.js +84 -0
  118. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +64 -0
  119. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +120 -0
  120. package/lib/esm/client/shared/components/ResultsPage.js +143 -0
  121. package/lib/esm/client/shared/creeveyClientApi.js +98 -0
  122. package/lib/esm/client/shared/helpers.js +424 -0
  123. package/lib/esm/client/shared/viewMode.js +6 -0
  124. package/lib/esm/creevey.js +54 -0
  125. package/lib/esm/index.js +5 -0
  126. package/lib/esm/server/config.js +73 -0
  127. package/lib/esm/server/docker.js +123 -0
  128. package/lib/esm/server/extract.js +34 -0
  129. package/lib/esm/server/index.js +64 -0
  130. package/lib/esm/server/loaders/babel/creevey-plugin.js +72 -0
  131. package/lib/esm/server/loaders/babel/helpers.js +452 -0
  132. package/lib/esm/server/loaders/babel/register.js +103 -0
  133. package/lib/esm/server/loaders/hooks/mdx.js +15 -0
  134. package/lib/esm/server/loaders/hooks/svelte.js +49 -0
  135. package/lib/esm/server/loaders/webpack/compile.js +270 -0
  136. package/lib/esm/server/loaders/webpack/creevey-loader.js +158 -0
  137. package/lib/esm/server/loaders/webpack/dummy-hmr.js +32 -0
  138. package/lib/esm/server/loaders/webpack/mdx-loader.js +58 -0
  139. package/lib/esm/server/loaders/webpack/start.js +27 -0
  140. package/lib/esm/server/logger.js +20 -0
  141. package/lib/esm/server/master/api.js +60 -0
  142. package/lib/esm/server/master/index.js +125 -0
  143. package/lib/esm/server/master/master.js +38 -0
  144. package/lib/esm/server/master/pool.js +176 -0
  145. package/lib/esm/server/master/runner.js +259 -0
  146. package/lib/esm/server/master/server.js +105 -0
  147. package/lib/esm/server/messages.js +232 -0
  148. package/lib/esm/server/selenium/browser.js +639 -0
  149. package/lib/esm/server/selenium/index.js +2 -0
  150. package/lib/esm/server/selenium/selenoid.js +149 -0
  151. package/lib/esm/server/stories.js +140 -0
  152. package/lib/esm/server/storybook/entry.js +46 -0
  153. package/lib/esm/server/storybook/helpers.js +98 -0
  154. package/lib/esm/server/storybook/providers/browser.js +60 -0
  155. package/lib/esm/server/storybook/providers/hybrid.js +64 -0
  156. package/lib/esm/server/storybook/providers/nodejs.js +217 -0
  157. package/lib/esm/server/testsFiles/parser.js +50 -0
  158. package/lib/esm/server/testsFiles/register.js +35 -0
  159. package/lib/esm/server/update.js +61 -0
  160. package/lib/esm/server/utils.js +142 -0
  161. package/lib/esm/server/worker/chai-image.js +130 -0
  162. package/lib/esm/server/worker/helpers.js +60 -0
  163. package/lib/esm/server/worker/index.js +1 -0
  164. package/lib/esm/server/worker/reporter.js +86 -0
  165. package/lib/esm/server/worker/worker.js +238 -0
  166. package/lib/esm/shared/index.js +66 -0
  167. package/lib/esm/shared/serializeRegExp.js +23 -0
  168. package/lib/esm/types.js +43 -0
  169. package/lib/types/cli.d.ts +1 -1
  170. package/lib/types/client/addon/Manager.d.ts +37 -37
  171. package/lib/types/client/addon/components/Addon.d.ts +8 -8
  172. package/lib/types/client/addon/components/Icons.d.ts +7 -7
  173. package/lib/types/client/addon/components/Panel.d.ts +9 -9
  174. package/lib/types/client/addon/components/TestSelect.d.ts +8 -9
  175. package/lib/types/client/addon/components/Tools.d.ts +6 -6
  176. package/lib/types/client/addon/decorator.d.ts +1 -1
  177. package/lib/types/client/addon/index.d.ts +2 -0
  178. package/lib/types/client/addon/preset.d.ts +23 -24
  179. package/lib/types/client/addon/readyForCapture.d.ts +6 -6
  180. package/lib/types/client/addon/register.d.ts +3 -3
  181. package/lib/types/client/addon/utils.d.ts +2 -2
  182. package/lib/types/client/addon/withCreevey.d.ts +24 -24
  183. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
  184. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -25
  185. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
  186. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
  187. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
  188. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
  189. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +8 -9
  190. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
  191. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
  192. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -17
  193. package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
  194. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
  195. package/lib/types/client/shared/helpers.d.ts +46 -46
  196. package/lib/types/client/shared/viewMode.d.ts +4 -4
  197. package/lib/types/client/web/CreeveyApp.d.ts +11 -12
  198. package/lib/types/client/web/CreeveyContext.d.ts +11 -11
  199. package/lib/types/client/web/CreeveyLoader.d.ts +2 -3
  200. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
  201. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
  202. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
  203. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +12 -13
  204. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
  205. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -8
  206. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
  207. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
  208. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
  209. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
  210. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
  211. package/lib/types/client/web/index.d.ts +4 -4
  212. package/lib/types/creevey.d.ts +1 -1
  213. package/lib/types/index.d.ts +1 -4
  214. package/lib/types/server/config.d.ts +4 -4
  215. package/lib/types/server/docker.d.ts +7 -7
  216. package/lib/types/server/extract.d.ts +2 -2
  217. package/lib/types/server/index.d.ts +2 -2
  218. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
  219. package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
  220. package/lib/types/server/loaders/babel/register.d.ts +5 -5
  221. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
  222. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
  223. package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
  224. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  225. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
  226. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
  227. package/lib/types/server/loaders/webpack/start.d.ts +1 -1
  228. package/lib/types/server/logger.d.ts +10 -6
  229. package/lib/types/server/master/api.d.ts +7 -7
  230. package/lib/types/server/master/index.d.ts +3 -3
  231. package/lib/types/server/master/master.d.ts +7 -7
  232. package/lib/types/server/master/pool.d.ts +31 -31
  233. package/lib/types/server/master/runner.d.ts +26 -26
  234. package/lib/types/server/master/server.d.ts +2 -2
  235. package/lib/types/server/messages.d.ts +27 -27
  236. package/lib/types/server/selenium/browser.d.ts +17 -17
  237. package/lib/types/server/selenium/index.d.ts +2 -2
  238. package/lib/types/server/selenium/selenoid.d.ts +3 -3
  239. package/lib/types/server/stories.d.ts +8 -8
  240. package/lib/types/server/storybook/entry.d.ts +18 -18
  241. package/lib/types/server/storybook/helpers.d.ts +24 -24
  242. package/lib/types/server/storybook/providers/browser.d.ts +4 -4
  243. package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
  244. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
  245. package/lib/types/server/testsFiles/parser.d.ts +12 -12
  246. package/lib/types/server/testsFiles/register.d.ts +2 -2
  247. package/lib/types/server/update.d.ts +2 -2
  248. package/lib/types/server/utils.d.ts +20 -20
  249. package/lib/types/server/worker/chai-image.d.ts +6 -6
  250. package/lib/types/server/worker/helpers.d.ts +8 -8
  251. package/lib/types/server/worker/index.d.ts +1 -1
  252. package/lib/types/server/worker/reporter.d.ts +8 -8
  253. package/lib/types/server/worker/worker.d.ts +4 -4
  254. package/lib/types/{shared.d.ts → shared/index.d.ts} +7 -16
  255. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  256. package/lib/types/types.d.ts +490 -489
  257. package/package.json +115 -102
  258. package/preset.js +9 -9
  259. package/types/babel__register.d.ts +1 -1
  260. package/types/chai.d.ts +12 -12
  261. package/types/event-source-polyfill.d.ts +6 -6
  262. package/types/mdx.d.ts +3 -2
  263. package/types/mocha.d.ts +20 -20
  264. package/types/png.d.ts +4 -4
  265. package/lib/cjs/client/web/1.js +0 -13
  266. package/lib/cjs/client/web/2.js +0 -1
  267. package/storybook-static/stories.json +0 -21
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.loadStories = loadStories;
7
+
8
+ var _chokidar = _interopRequireDefault(require("chokidar"));
9
+
10
+ var _browser = require("./browser");
11
+
12
+ var _logger = require("../../logger");
13
+
14
+ var _parser = _interopRequireDefault(require("../../testsFiles/parser"));
15
+
16
+ var _utils = require("../../../server/utils");
17
+
18
+ var _shared = require("../../../shared");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ 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
+
24
+ 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
+
26
+ async function loadStories(_config, {
27
+ port
28
+ }, storiesListener) {
29
+ let creeveyParamsByStoryId = {};
30
+
31
+ const mergeParamsFromTestsToStory = (story, creeveyParams) => {
32
+ if (story.parameters) {
33
+ story.parameters.creevey = (0, _shared.combineParameters)(story.parameters.creevey || {}, creeveyParams);
34
+ }
35
+ };
36
+
37
+ const stories = await (0, _browser.loadStories)(_config, {
38
+ port
39
+ }, updatedStoriesByFiles => {
40
+ Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
41
+ storiesArray.forEach(story => {
42
+ const creeveyParams = creeveyParamsByStoryId[story.id];
43
+
44
+ if (creeveyParams) {
45
+ mergeParamsFromTestsToStory(story, creeveyParams);
46
+ }
47
+ });
48
+ });
49
+ storiesListener(updatedStoriesByFiles);
50
+ }); // TODO fix test files hot reloading
51
+
52
+ creeveyParamsByStoryId = await parseParams(_config
53
+ /*, (data) => console.log(data) */
54
+ );
55
+ Object.entries(stories).forEach(([storyId, story]) => {
56
+ mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
57
+ });
58
+ return stories;
59
+ }
60
+
61
+ async function parseParams(config, listener) {
62
+ if (!config.testsDir) {
63
+ return Promise.resolve({});
64
+ }
65
+
66
+ const testFiles = (0, _utils.readDirRecursive)(config.testsDir).filter(file => {
67
+ var _config$testsRegex;
68
+
69
+ return (_config$testsRegex = config.testsRegex) === null || _config$testsRegex === void 0 ? void 0 : _config$testsRegex.test(file);
70
+ });
71
+ await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../testsFiles/register')))).default(config);
72
+
73
+ if (listener) {
74
+ _chokidar.default.watch(testFiles).on('change', filePath => {
75
+ _logger.logger.debug(`changed: ${filePath}`); // doesn't work, always returns {} due modules caching
76
+ // see https://github.com/nodejs/modules/issues/307
77
+
78
+
79
+ void (0, _parser.default)(testFiles).then(data => listener(data));
80
+ });
81
+ }
82
+
83
+ return (0, _parser.default)(testFiles);
84
+ }
@@ -0,0 +1,239 @@
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
+ var _shared = require("../../../shared");
26
+
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+
29
+ 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); }
30
+
31
+ 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; }
32
+
33
+ async function initStorybookEnvironment() {
34
+ // @ts-expect-error There is no @types/global-jsdom package
35
+ (await Promise.resolve().then(() => _interopRequireWildcard(require('global-jsdom')))).default(undefined, {
36
+ url: 'http://localhost'
37
+ }); // NOTE Cutoff `jsdom` part from userAgent, because storybook check enviroment and create events channel if runs in browser
38
+ // https://github.com/storybookjs/storybook/blob/v5.2.8/lib/core/src/client/preview/start.js#L98
39
+ // Example: "Mozilla/5.0 (linux) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/15.2.1"
40
+
41
+ Object.defineProperty(window.navigator, 'userAgent', {
42
+ value: window.navigator.userAgent.split(' ').filter(token => !token.startsWith('jsdom')).join(' ')
43
+ }); // TODO Look at creevey debug flag
44
+
45
+ const {
46
+ logger
47
+ } = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
48
+
49
+ if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
50
+
51
+ logger.debug = _types.noop;
52
+ return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
53
+ }
54
+
55
+ function watchStories(channel, watcher, initialFiles) {
56
+ const watchingFiles = initialFiles;
57
+ let storiesByFiles = new Map();
58
+ (0, _messages.subscribeOn)('shutdown', () => void watcher.close());
59
+ watcher.add(Array.from(watchingFiles));
60
+ watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
61
+ watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
62
+ return data => {
63
+ const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
64
+ const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
65
+ const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
66
+ const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
67
+ watcher.add(addedFiles);
68
+ addedFiles.forEach(filePath => {
69
+ watchingFiles.add(filePath);
70
+ storiesByFiles.set(filePath, []);
71
+ });
72
+ removedFiles.forEach(filePath => watchingFiles.delete(filePath));
73
+ Object.values(stories).forEach(story => {
74
+ var _storiesByFiles$get;
75
+
76
+ return (_storiesByFiles$get = storiesByFiles.get(story.parameters.fileName)) === null || _storiesByFiles$get === void 0 ? void 0 : _storiesByFiles$get.push(story);
77
+ });
78
+ channel.emit('storiesUpdated', storiesByFiles);
79
+ storiesByFiles = new Map();
80
+ };
81
+ }
82
+
83
+ function loadStoriesFromBundle(watch) {
84
+ const bundlePath = _path.default.join((0, _utils.getCreeveyCache)(), 'storybook/main.js');
85
+
86
+ if (watch) {
87
+ (0, _messages.subscribeOn)('webpack', message => {
88
+ if (message.type != 'rebuild succeeded') return;
89
+ Object.values(global.__CREEVEY_HMR_DATA__).filter(({
90
+ callback
91
+ }) => callback).forEach(({
92
+ data,
93
+ callback
94
+ }) => callback(data));
95
+ delete require.cache[bundlePath];
96
+ Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
97
+ });
98
+ }
99
+
100
+ Promise.resolve(`${bundlePath}`).then(s => _interopRequireWildcard(require(s)));
101
+ }
102
+
103
+ async function loadStoriesDirectly(config, {
104
+ watcher,
105
+ debug
106
+ }) {
107
+ const {
108
+ toRequireContext,
109
+ normalizeStoriesEntry
110
+ } = await (0, _helpers.importStorybookCoreCommon)();
111
+ const {
112
+ addParameters,
113
+ configure
114
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
115
+ const requireContext = await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../loaders/babel/register')))).default(config, debug);
116
+
117
+ const preview = (() => {
118
+ try {
119
+ return require.resolve(`${config.storybookDir}/preview`);
120
+ } catch (_) {
121
+ /* noop */
122
+ }
123
+ })();
124
+
125
+ const {
126
+ stories
127
+ } = await (0, _helpers.importStorybookConfig)();
128
+ const contexts = stories.map(entry => {
129
+ const normalizedEntry = (0, _helpers.isStorybookVersionLessThan)(6, 4) ? entry : normalizeStoriesEntry(entry, {
130
+ configDir: config.storybookDir,
131
+ workingDir: process.cwd()
132
+ });
133
+ const {
134
+ path: storiesPath,
135
+ recursive,
136
+ match
137
+ } = toRequireContext(normalizedEntry);
138
+ watcher === null || watcher === void 0 ? void 0 : watcher.add(_path.default.resolve(config.storybookDir, storiesPath));
139
+ return () => requireContext(storiesPath, recursive, new RegExp(match));
140
+ });
141
+
142
+ let disposeCallback = data => void data;
143
+
144
+ Object.assign(module, {
145
+ hot: {
146
+ data: {},
147
+
148
+ accept() {
149
+ /* noop */
150
+ },
151
+
152
+ dispose(callback) {
153
+ disposeCallback = callback;
154
+ }
155
+
156
+ }
157
+ });
158
+
159
+ async function startStorybook() {
160
+ if (preview) {
161
+ const {
162
+ parameters,
163
+ globals,
164
+ globalTypes
165
+ } = await Promise.resolve(`${preview}`).then(s => _interopRequireWildcard(require(s)));
166
+ if (parameters) addParameters(parameters);
167
+ if (globals) addParameters({
168
+ globals
169
+ });
170
+ if (globalTypes) addParameters({
171
+ globalTypes
172
+ });
173
+ }
174
+
175
+ try {
176
+ configure(contexts.map(ctx => ctx()), module, false);
177
+ } catch (error) {
178
+ if (_cluster.default.isPrimary) _logger.logger.error(error);
179
+ }
180
+ }
181
+
182
+ watcher === null || watcher === void 0 ? void 0 : watcher.add(config.storybookDir);
183
+ watcher === null || watcher === void 0 ? void 0 : watcher.on('all', (_event, filename) => {
184
+ var _module$hot;
185
+
186
+ disposeCallback((_module$hot = module.hot) === null || _module$hot === void 0 ? void 0 : _module$hot.data);
187
+ delete require.cache[filename];
188
+ void startStorybook();
189
+ });
190
+ void startStorybook();
191
+ } // TODO Do we need to support multiple storybooks here?
192
+
193
+
194
+ async function loadStories(config, {
195
+ watch,
196
+ debug
197
+ }, storiesListener) {
198
+ const storybookApi = await initStorybookEnvironment();
199
+ const Events = await (0, _helpers.importStorybookCoreEvents)();
200
+ const {
201
+ channel
202
+ } = storybookApi;
203
+ channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
204
+ channel.on('storiesUpdated', storiesListener);
205
+ let watcher;
206
+ if (watch) watcher = _chokidar.default.watch([], {
207
+ ignoreInitial: true
208
+ });
209
+ const loadPromise = new Promise(resolve => {
210
+ channel.once(Events.SET_STORIES, data => {
211
+ const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
212
+ const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
213
+ if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
214
+ resolve(stories);
215
+ });
216
+ });
217
+ if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
218
+ watcher,
219
+ debug
220
+ });
221
+ return loadPromise;
222
+ }
223
+
224
+ async function extractStoriesData(config, {
225
+ watch,
226
+ debug
227
+ }) {
228
+ const storybookApi = await initStorybookEnvironment();
229
+ const Events = await (0, _helpers.importStorybookCoreEvents)();
230
+ const {
231
+ channel
232
+ } = storybookApi;
233
+ channel.removeAllListeners(Events.CURRENT_STORY_WAS_SET);
234
+ const loadPromise = new Promise(resolve => channel.once(Events.SET_STORIES, resolve));
235
+ if (config.useWebpackToExtractTests) loadStoriesFromBundle(watch);else void loadStoriesDirectly(config, {
236
+ debug
237
+ });
238
+ return loadPromise;
239
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = parse;
7
+ exports.test = exports.story = exports.kind = void 0;
8
+
9
+ var _csf = require("@storybook/csf");
10
+
11
+ 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); }
12
+
13
+ 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; }
14
+
15
+ async function parse(files) {
16
+ result = {};
17
+ await Promise.all(files.map(async file => Promise.resolve(`${file}`).then(s => _interopRequireWildcard(require(s)))));
18
+ return result;
19
+ }
20
+
21
+ let result = {};
22
+ let kindTitle = '';
23
+ let storyTitle = '';
24
+ let storyParams = null;
25
+
26
+ const setStoryParameters = params => {
27
+ storyParams = params;
28
+ };
29
+
30
+ const getStoryId = (kindTitle, storyTitle) => {
31
+ return (0, _csf.toId)(kindTitle, (0, _csf.storyNameFromExport)(storyTitle));
32
+ };
33
+
34
+ const kind = (title, kindFn) => {
35
+ kindTitle = title;
36
+ kindFn();
37
+ kindTitle = '';
38
+ };
39
+
40
+ exports.kind = kind;
41
+
42
+ const story = (title, storyFn) => {
43
+ var _result$storyId;
44
+
45
+ storyTitle = title;
46
+ storyParams = null;
47
+ storyFn({
48
+ setStoryParameters
49
+ });
50
+ const storyId = getStoryId(kindTitle, storyTitle);
51
+ result[storyId] = Object.assign({}, storyParams, {
52
+ tests: (_result$storyId = result[storyId]) === null || _result$storyId === void 0 ? void 0 : _result$storyId.tests
53
+ });
54
+ storyTitle = '';
55
+ storyParams = null;
56
+ };
57
+
58
+ exports.story = story;
59
+
60
+ const test = (title, testFn) => {
61
+ const storyId = getStoryId(kindTitle, storyTitle);
62
+
63
+ if (!result[storyId]) {
64
+ result[storyId] = {};
65
+ }
66
+
67
+ result[storyId].tests = Object.assign({}, result[storyId].tests, {
68
+ [title]: testFn
69
+ });
70
+ };
71
+
72
+ exports.test = test;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = register;
7
+
8
+ var _pirates = require("pirates");
9
+
10
+ var _getTsconfig = require("get-tsconfig");
11
+
12
+ 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); }
13
+
14
+ 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; }
15
+
16
+ async function register(config) {
17
+ (0, _pirates.addHook)(() => '', {
18
+ exts: ['.jpg', '.jpeg', '.png', '.gif', '.eot', '.otf', '.svg', '.ttf', '.woff', '.woff2', '.css', '.less', '.scss', '.styl'],
19
+ ignoreNodeModules: false
20
+ });
21
+ const {
22
+ path: tsConfigPath
23
+ } = (0, _getTsconfig.getTsconfig)(config.tsConfig) || {}; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
24
+
25
+ (await Promise.resolve().then(() => _interopRequireWildcard(require('@babel/register')))).default(config.babelOptions({
26
+ babelrc: false,
27
+ rootMode: 'upward-optional',
28
+ ignore: [/node_modules/],
29
+ extensions: ['.js', '.jsx', '.ts', '.tsx'],
30
+ parserOpts: {
31
+ sourceType: 'module',
32
+ plugins: ['jsx', 'typescript']
33
+ },
34
+ presets: ['@babel/preset-typescript', ['@babel/preset-env', {
35
+ targets: {
36
+ node: '10'
37
+ },
38
+ modules: 'commonjs'
39
+ }]],
40
+ plugins: [['@babel/plugin-transform-runtime'], ['babel-plugin-tsconfig-paths', {
41
+ tsconfig: tsConfigPath
42
+ }]]
43
+ }));
44
+ (await Promise.resolve().then(() => _interopRequireWildcard(require('ts-node')))).register({
45
+ project: tsConfigPath,
46
+ transpileOnly: true
47
+ });
48
+ }
@@ -0,0 +1,79 @@
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
+ }