creevey 0.9.0-beta.2 → 0.9.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/.yarnrc.yml +1 -0
  3. package/CHANGELOG.md +51 -0
  4. package/README.md +9 -1
  5. package/addon/README.md +3 -0
  6. package/addon/package.json +5 -0
  7. package/docs/config.md +29 -26
  8. package/jest.config.js +6 -0
  9. package/lib/cjs/cli.js +1 -0
  10. package/lib/cjs/client/addon/Manager.js +170 -390
  11. package/lib/cjs/client/addon/components/Addon.js +17 -45
  12. package/lib/cjs/client/addon/components/Icons.js +12 -14
  13. package/lib/cjs/client/addon/components/Panel.js +21 -30
  14. package/lib/cjs/client/addon/components/TestSelect.js +20 -31
  15. package/lib/cjs/client/addon/components/Tools.js +35 -65
  16. package/lib/cjs/client/addon/decorator.js +1 -4
  17. package/lib/cjs/client/addon/index.js +27 -0
  18. package/lib/cjs/client/addon/preset.js +3 -76
  19. package/lib/cjs/client/addon/preview.js +11 -0
  20. package/lib/cjs/client/addon/readyForCapture.js +1 -4
  21. package/lib/cjs/client/addon/register.js +43 -82
  22. package/lib/cjs/client/addon/utils.js +4 -8
  23. package/lib/cjs/client/addon/withCreevey.js +145 -404
  24. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +25 -35
  25. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +29 -41
  26. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +46 -83
  27. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +39 -67
  28. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +26 -57
  29. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -14
  30. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +13 -16
  31. package/lib/cjs/client/shared/components/PageFooter/Paging.js +16 -37
  32. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +42 -34
  33. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +40 -84
  34. package/lib/cjs/client/shared/components/ResultsPage.js +42 -99
  35. package/lib/cjs/client/shared/creeveyClientApi.js +56 -93
  36. package/lib/cjs/client/shared/helpers.js +149 -274
  37. package/lib/cjs/client/shared/viewMode.js +5 -9
  38. package/lib/cjs/client/web/192.js +1 -0
  39. package/lib/cjs/client/web/632.js +43 -0
  40. package/lib/cjs/client/web/794.js +1 -0
  41. package/lib/cjs/client/web/main.js +79 -38
  42. package/lib/cjs/client/web/main.js.LICENSE.txt +34 -0
  43. package/lib/cjs/creevey.js +15 -30
  44. package/lib/cjs/index.js +0 -15
  45. package/lib/cjs/server/config.js +16 -36
  46. package/lib/cjs/server/docker.js +8 -34
  47. package/lib/cjs/server/index.js +9 -34
  48. package/lib/cjs/server/logger.js +7 -20
  49. package/lib/cjs/server/master/api.js +1 -14
  50. package/lib/cjs/server/master/index.js +25 -49
  51. package/lib/cjs/server/master/master.js +6 -21
  52. package/lib/cjs/server/master/pool.js +10 -53
  53. package/lib/cjs/server/master/runner.js +65 -105
  54. package/lib/cjs/server/master/server.js +10 -29
  55. package/lib/cjs/server/messages.js +14 -62
  56. package/lib/cjs/server/selenium/browser.js +149 -185
  57. package/lib/cjs/server/selenium/index.js +0 -4
  58. package/lib/cjs/server/selenium/selenoid.js +18 -44
  59. package/lib/cjs/server/stories.js +35 -57
  60. package/lib/cjs/server/storybook/providers/browser.js +15 -29
  61. package/lib/cjs/server/storybook/providers/hybrid.js +16 -37
  62. package/lib/cjs/server/telemetry.js +167 -0
  63. package/lib/cjs/server/testsFiles/parser.js +3 -19
  64. package/lib/cjs/server/testsFiles/register.js +8 -14
  65. package/lib/cjs/server/update.js +4 -25
  66. package/lib/cjs/server/utils.js +35 -76
  67. package/lib/cjs/server/worker/chai-image.js +1 -27
  68. package/lib/cjs/server/worker/helpers.js +2 -12
  69. package/lib/cjs/server/worker/index.js +1 -3
  70. package/lib/cjs/server/worker/reporter.js +16 -43
  71. package/lib/cjs/server/worker/worker.js +32 -72
  72. package/lib/cjs/shared/index.js +87 -0
  73. package/lib/cjs/shared/serializeRegExp.js +34 -0
  74. package/lib/cjs/types.js +11 -20
  75. package/lib/esm/cli.js +1 -1
  76. package/lib/esm/client/addon/Manager.js +170 -381
  77. package/lib/esm/client/addon/components/Addon.js +15 -34
  78. package/lib/esm/client/addon/components/Icons.js +10 -6
  79. package/lib/esm/client/addon/components/Panel.js +20 -18
  80. package/lib/esm/client/addon/components/TestSelect.js +19 -23
  81. package/lib/esm/client/addon/components/Tools.js +33 -49
  82. package/lib/esm/client/addon/decorator.js +1 -1
  83. package/lib/esm/client/addon/index.js +2 -0
  84. package/lib/esm/client/addon/preset.js +2 -56
  85. package/lib/esm/client/addon/preview.js +5 -0
  86. package/lib/esm/client/addon/readyForCapture.js +1 -3
  87. package/lib/esm/client/addon/register.js +41 -67
  88. package/lib/esm/client/addon/utils.js +3 -7
  89. package/lib/esm/client/addon/withCreevey.js +142 -388
  90. package/lib/esm/client/shared/components/ImagesView/BlendView.js +22 -18
  91. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +27 -25
  92. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +43 -63
  93. package/lib/esm/client/shared/components/ImagesView/SlideView.js +36 -47
  94. package/lib/esm/client/shared/components/ImagesView/SwapView.js +23 -40
  95. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  96. package/lib/esm/client/shared/components/PageFooter/Paging.js +15 -29
  97. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +40 -25
  98. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +38 -66
  99. package/lib/esm/client/shared/components/ResultsPage.js +39 -75
  100. package/lib/esm/client/shared/creeveyClientApi.js +56 -90
  101. package/lib/esm/client/shared/helpers.js +133 -230
  102. package/lib/esm/client/shared/viewMode.js +4 -4
  103. package/lib/esm/client/web/192.js +1 -0
  104. package/lib/esm/client/web/632.js +43 -0
  105. package/lib/esm/client/web/794.js +1 -0
  106. package/lib/esm/client/web/index.html +19 -0
  107. package/lib/esm/client/web/main.js +79 -0
  108. package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
  109. package/lib/esm/creevey.js +13 -16
  110. package/lib/esm/index.js +1 -4
  111. package/lib/esm/server/config.js +9 -16
  112. package/lib/esm/server/docker.js +6 -14
  113. package/lib/esm/server/index.js +8 -22
  114. package/lib/esm/server/logger.js +0 -1
  115. package/lib/esm/server/master/api.js +0 -9
  116. package/lib/esm/server/master/index.js +25 -35
  117. package/lib/esm/server/master/master.js +2 -7
  118. package/lib/esm/server/master/pool.js +8 -41
  119. package/lib/esm/server/master/runner.js +64 -90
  120. package/lib/esm/server/master/server.js +9 -11
  121. package/lib/esm/server/messages.js +8 -42
  122. package/lib/esm/server/selenium/browser.js +147 -163
  123. package/lib/esm/server/selenium/selenoid.js +16 -27
  124. package/lib/esm/server/stories.js +34 -46
  125. package/lib/esm/server/storybook/providers/browser.js +12 -17
  126. package/lib/esm/server/storybook/providers/hybrid.js +11 -22
  127. package/lib/esm/server/telemetry.js +160 -0
  128. package/lib/esm/server/testsFiles/parser.js +0 -6
  129. package/lib/esm/server/testsFiles/register.js +6 -7
  130. package/lib/esm/server/update.js +1 -13
  131. package/lib/esm/server/utils.js +20 -41
  132. package/lib/esm/server/worker/chai-image.js +0 -21
  133. package/lib/esm/server/worker/helpers.js +2 -9
  134. package/lib/esm/server/worker/reporter.js +15 -29
  135. package/lib/esm/server/worker/worker.js +31 -48
  136. package/lib/esm/shared/index.js +77 -0
  137. package/lib/esm/shared/serializeRegExp.js +24 -0
  138. package/lib/esm/types.js +5 -1
  139. package/lib/types/client/addon/Manager.d.ts +3 -3
  140. package/lib/types/client/addon/components/Addon.d.ts +1 -0
  141. package/lib/types/client/addon/components/Icons.d.ts +1 -0
  142. package/lib/types/client/addon/components/Panel.d.ts +1 -0
  143. package/lib/types/client/addon/components/Tools.d.ts +1 -0
  144. package/lib/types/client/addon/decorator.d.ts +1 -1
  145. package/lib/types/client/addon/index.d.ts +2 -0
  146. package/lib/types/client/addon/preset.d.ts +2 -24
  147. package/lib/types/client/addon/preview.d.ts +4 -0
  148. package/lib/types/client/addon/utils.d.ts +1 -0
  149. package/lib/types/client/addon/withCreevey.d.ts +4 -3
  150. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
  151. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
  152. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
  153. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
  154. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
  155. package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
  156. package/lib/types/client/web/CreeveyLoader.d.ts +1 -1
  157. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +6 -3
  158. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
  159. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
  160. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
  161. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
  162. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
  163. package/lib/types/client/web/KeyboardEventsContext.d.ts +4 -2
  164. package/lib/types/index.d.ts +4 -1
  165. package/lib/types/server/logger.d.ts +6 -2
  166. package/lib/types/server/messages.d.ts +14 -12
  167. package/lib/types/server/selenium/browser.d.ts +5 -3
  168. package/lib/types/server/storybook/providers/browser.d.ts +2 -4
  169. package/lib/types/server/storybook/providers/hybrid.d.ts +2 -4
  170. package/lib/types/server/telemetry.d.ts +2 -0
  171. package/lib/types/server/utils.d.ts +5 -1
  172. package/lib/types/shared/index.d.ts +7 -0
  173. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  174. package/lib/types/types.d.ts +29 -36
  175. package/package.json +132 -133
  176. package/types/global.d.ts +5 -0
  177. package/lib/cjs/client/web/1.js +0 -13
  178. package/lib/cjs/client/web/2.js +0 -1
  179. package/lib/cjs/server/extract.js +0 -50
  180. package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
  181. package/lib/cjs/server/loaders/babel/helpers.js +0 -479
  182. package/lib/cjs/server/loaders/babel/register.js +0 -126
  183. package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
  184. package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
  185. package/lib/cjs/server/loaders/webpack/compile.js +0 -286
  186. package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
  187. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
  188. package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
  189. package/lib/cjs/server/loaders/webpack/start.js +0 -41
  190. package/lib/cjs/server/storybook/entry.js +0 -68
  191. package/lib/cjs/server/storybook/helpers.js +0 -165
  192. package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
  193. package/lib/cjs/shared.js +0 -124
  194. package/lib/esm/server/extract.js +0 -34
  195. package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
  196. package/lib/esm/server/loaders/babel/helpers.js +0 -462
  197. package/lib/esm/server/loaders/babel/register.js +0 -105
  198. package/lib/esm/server/loaders/hooks/mdx.js +0 -15
  199. package/lib/esm/server/loaders/hooks/svelte.js +0 -49
  200. package/lib/esm/server/loaders/webpack/compile.js +0 -263
  201. package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
  202. package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
  203. package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
  204. package/lib/esm/server/loaders/webpack/start.js +0 -27
  205. package/lib/esm/server/storybook/entry.js +0 -44
  206. package/lib/esm/server/storybook/helpers.js +0 -106
  207. package/lib/esm/server/storybook/providers/nodejs.js +0 -217
  208. package/lib/esm/shared.js +0 -93
  209. package/lib/types/server/extract.d.ts +0 -2
  210. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
  211. package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
  212. package/lib/types/server/loaders/babel/register.d.ts +0 -5
  213. package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
  214. package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
  215. package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
  216. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -2
  217. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
  218. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
  219. package/lib/types/server/loaders/webpack/start.d.ts +0 -1
  220. package/lib/types/server/storybook/entry.d.ts +0 -18
  221. package/lib/types/server/storybook/helpers.d.ts +0 -24
  222. package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
  223. package/lib/types/shared.d.ts +0 -16
  224. package/preset.js +0 -9
  225. package/storybook-static/stories.json +0 -21
  226. package/types/mdx.d.ts +0 -6
@@ -4,84 +4,46 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _fs = require("fs");
11
-
12
9
  var _util = require("util");
13
-
14
10
  var _events = require("events");
15
-
16
11
  var _types = require("../../types");
17
-
18
12
  var _pool = _interopRequireDefault(require("./pool"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
14
  const copyFileAsync = (0, _util.promisify)(_fs.copyFile);
25
15
  const mkdirAsync = (0, _util.promisify)(_fs.mkdir);
26
-
27
16
  class Runner extends _events.EventEmitter {
17
+ pools = {};
18
+ tests = {};
28
19
  get isRunning() {
29
20
  return Object.values(this.pools).some(pool => pool.isRunning);
30
21
  }
31
-
32
22
  constructor(config) {
33
23
  super();
34
-
35
- _defineProperty(this, "failFast", void 0);
36
-
37
- _defineProperty(this, "screenDir", void 0);
38
-
39
- _defineProperty(this, "reportDir", void 0);
40
-
41
- _defineProperty(this, "browsers", void 0);
42
-
43
- _defineProperty(this, "pools", {});
44
-
45
- _defineProperty(this, "tests", {});
46
-
47
- _defineProperty(this, "handlePoolMessage", message => {
48
- const {
49
- id,
50
- status,
51
- result
52
- } = message;
53
- const test = this.tests[id];
54
- if (!test) return;
55
- const {
56
- browser,
57
- testName,
58
- storyPath,
59
- storyId
60
- } = test; // TODO Handle 'retrying' status
61
-
62
- test.status = status == 'retrying' ? 'failed' : status;
63
-
64
- if (!result) {
65
- this.sendUpdate({
66
- tests: {
67
- [id]: {
68
- id,
69
- browser,
70
- testName,
71
- storyPath,
72
- status: test.status,
73
- storyId
74
- }
75
- }
76
- });
77
- return;
78
- }
79
-
80
- if (!test.results) {
81
- test.results = [];
82
- }
83
-
84
- test.results.push(result);
24
+ this.failFast = config.failFast;
25
+ this.screenDir = config.screenDir;
26
+ this.reportDir = config.reportDir;
27
+ this.browsers = Object.keys(config.browsers);
28
+ this.browsers.map(browser => this.pools[browser] = new _pool.default(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
29
+ }
30
+ handlePoolMessage = message => {
31
+ const {
32
+ id,
33
+ status,
34
+ result
35
+ } = message;
36
+ const test = this.tests[id];
37
+ if (!test) return;
38
+ const {
39
+ browser,
40
+ testName,
41
+ storyPath,
42
+ storyId
43
+ } = test;
44
+ // TODO Handle 'retrying' status
45
+ test.status = status == 'retrying' ? 'failed' : status;
46
+ if (!result) {
85
47
  this.sendUpdate({
86
48
  tests: {
87
49
  [id]: {
@@ -90,56 +52,65 @@ class Runner extends _events.EventEmitter {
90
52
  testName,
91
53
  storyPath,
92
54
  status: test.status,
93
- results: [result],
94
55
  storyId
95
56
  }
96
57
  }
97
58
  });
98
- if (this.failFast && status == 'failed') this.stop();
99
- });
100
-
101
- _defineProperty(this, "handlePoolStop", () => {
102
- if (!this.isRunning) {
103
- this.sendUpdate({
104
- isRunning: false
105
- });
106
- this.emit('stop');
59
+ return;
60
+ }
61
+ if (!test.results) {
62
+ test.results = [];
63
+ }
64
+ test.results.push(result);
65
+ this.sendUpdate({
66
+ tests: {
67
+ [id]: {
68
+ id,
69
+ browser,
70
+ testName,
71
+ storyPath,
72
+ status: test.status,
73
+ results: [result],
74
+ storyId
75
+ }
107
76
  }
108
77
  });
109
-
110
- this.failFast = config.failFast;
111
- this.screenDir = config.screenDir;
112
- this.reportDir = config.reportDir;
113
- this.browsers = Object.keys(config.browsers);
114
- this.browsers.map(browser => this.pools[browser] = new _pool.default(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
115
- }
116
-
78
+ if (this.failFast && status == 'failed') this.stop();
79
+ };
80
+ handlePoolStop = () => {
81
+ if (!this.isRunning) {
82
+ this.sendUpdate({
83
+ isRunning: false
84
+ });
85
+ this.emit('stop');
86
+ }
87
+ };
117
88
  async init() {
118
89
  await Promise.all(Object.values(this.pools).map(pool => pool.init()));
119
90
  }
120
-
121
91
  updateTests(testsDiff) {
122
92
  const tests = {};
123
93
  const removedTests = [];
124
94
  Object.entries(testsDiff).forEach(([id, newTest]) => {
125
95
  const oldTest = this.tests[id];
126
-
127
96
  if (newTest) {
128
97
  if (oldTest) {
129
- this.tests[id] = { ...newTest,
98
+ this.tests[id] = {
99
+ ...newTest,
130
100
  retries: oldTest.retries,
131
101
  results: oldTest.results,
132
102
  approved: oldTest.approved
133
103
  };
134
- } else this.tests[id] = newTest; // eslint-disable-next-line @typescript-eslint/no-unused-vars
135
-
104
+ } else this.tests[id] = newTest;
136
105
 
106
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
137
107
  const {
138
108
  story,
139
109
  fn,
140
110
  ...restTest
141
111
  } = newTest;
142
- tests[id] = { ...restTest,
112
+ tests[id] = {
113
+ ...restTest,
143
114
  status: 'unknown'
144
115
  };
145
116
  } else if (oldTest) {
@@ -165,7 +136,6 @@ class Runner extends _events.EventEmitter {
165
136
  removedTests
166
137
  });
167
138
  }
168
-
169
139
  start(ids) {
170
140
  if (this.isRunning) return;
171
141
  const testsToStart = ids.map(id => this.tests[id]).filter(_types.isDefined).filter(test => !test.skip);
@@ -178,7 +148,8 @@ class Runner extends _events.EventEmitter {
178
148
  browser,
179
149
  testName,
180
150
  storyPath
181
- }) => ({ ...update,
151
+ }) => ({
152
+ ...update,
182
153
  [id]: {
183
154
  id,
184
155
  browser,
@@ -198,7 +169,8 @@ class Runner extends _events.EventEmitter {
198
169
  } = test;
199
170
  const restPath = [...storyPath, testName].filter(_types.isDefined);
200
171
  test.status = 'pending';
201
- return { ...tests,
172
+ return {
173
+ ...tests,
202
174
  [browser]: [...(tests[browser] || []), {
203
175
  id,
204
176
  path: restPath
@@ -208,21 +180,19 @@ class Runner extends _events.EventEmitter {
208
180
  this.browsers.forEach(browser => {
209
181
  const pool = this.pools[browser];
210
182
  const tests = testsByBrowser[browser];
211
-
212
183
  if (tests && tests.length > 0 && pool.start(tests)) {
213
184
  pool.once('stop', this.handlePoolStop);
214
185
  }
215
186
  });
216
187
  }
217
-
218
188
  stop() {
219
189
  if (!this.isRunning) return;
220
190
  this.browsers.forEach(browser => this.pools[browser].stop());
221
191
  }
222
-
223
192
  get status() {
224
193
  const tests = {};
225
- Object.values(this.tests).filter(_types.isDefined) // eslint-disable-next-line @typescript-eslint/no-unused-vars
194
+ Object.values(this.tests).filter(_types.isDefined)
195
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
226
196
  .forEach(({
227
197
  story,
228
198
  fn,
@@ -234,7 +204,6 @@ class Runner extends _events.EventEmitter {
234
204
  browsers: this.browsers
235
205
  };
236
206
  }
237
-
238
207
  async approve({
239
208
  id,
240
209
  retry,
@@ -246,24 +215,18 @@ class Runner extends _events.EventEmitter {
246
215
  if (!result || !result.images) return;
247
216
  const images = result.images[image];
248
217
  if (!images) return;
249
-
250
218
  if (!test.approved) {
251
219
  test.approved = {};
252
220
  }
253
-
254
221
  const {
255
222
  browser,
256
223
  testName,
257
224
  storyPath
258
225
  } = test;
259
226
  const restPath = [...storyPath, testName].filter(_types.isDefined);
260
-
261
227
  const testPath = _path.default.join(...restPath, image == browser ? '' : browser);
262
-
263
228
  const srcImagePath = _path.default.join(this.reportDir, testPath, images.actual);
264
-
265
229
  const dstImagePath = _path.default.join(this.screenDir, testPath, `${image}.png`);
266
-
267
230
  await mkdirAsync(_path.default.join(this.screenDir, testPath), {
268
231
  recursive: true
269
232
  });
@@ -284,11 +247,8 @@ class Runner extends _events.EventEmitter {
284
247
  }
285
248
  });
286
249
  }
287
-
288
250
  sendUpdate(data) {
289
251
  this.emit('update', data);
290
252
  }
291
-
292
253
  }
293
-
294
254
  exports.default = Runner;
@@ -4,43 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = server;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _http = _interopRequireDefault(require("http"));
11
-
12
9
  var _cluster = _interopRequireDefault(require("cluster"));
13
-
14
10
  var _koa = _interopRequireDefault(require("koa"));
15
-
16
11
  var _cors = _interopRequireDefault(require("@koa/cors"));
17
-
18
12
  var _koaStatic = _interopRequireDefault(require("koa-static"));
19
-
20
13
  var _koaMount = _interopRequireDefault(require("koa-mount"));
21
-
22
14
  var _koaBodyparser = _interopRequireDefault(require("koa-bodyparser"));
23
-
24
15
  var _ws = _interopRequireDefault(require("ws"));
25
-
26
16
  var _messages = require("../messages");
27
-
28
17
  var _types = require("../../types");
29
-
30
18
  var _logger = require("../logger");
31
-
32
19
  var _shared = require("../../shared");
33
-
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
-
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
36
21
  function server(reportDir, port, ui) {
37
22
  let resolveApi = _types.noop;
38
23
  let setStoriesCounter = 0;
39
24
  const creeveyApi = new Promise(resolve => resolveApi = resolve);
40
25
  const app = new _koa.default();
41
-
42
26
  const server = _http.default.createServer(app.callback());
43
-
44
27
  const wss = new _ws.default.Server({
45
28
  server
46
29
  });
@@ -51,17 +34,14 @@ function server(reportDir, port, ui) {
51
34
  ctx.body = 'pong';
52
35
  return;
53
36
  }
54
-
55
37
  await next();
56
38
  });
57
-
58
39
  if (ui) {
59
40
  app.use(async (_, next) => {
60
41
  await creeveyApi;
61
42
  await next();
62
43
  });
63
44
  }
64
-
65
45
  app.use(async (ctx, next) => {
66
46
  if (ctx.method == 'POST' && ctx.path == '/stories') {
67
47
  const {
@@ -75,13 +55,12 @@ function server(reportDir, port, ui) {
75
55
  type: 'update',
76
56
  payload: deserializedStories
77
57
  });
78
- Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
58
+ Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
79
59
  type: 'update',
80
60
  payload: deserializedStories
81
61
  }));
82
62
  return;
83
63
  }
84
-
85
64
  await next();
86
65
  });
87
66
  app.use(async (ctx, next) => {
@@ -90,8 +69,8 @@ function server(reportDir, port, ui) {
90
69
  workerId,
91
70
  options
92
71
  } = ctx.request.body;
93
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.process.pid == workerId); // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
94
-
72
+ const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.process.pid == workerId);
73
+ // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
95
74
  if (!worker) return;
96
75
  await new Promise(resolve => {
97
76
  const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
@@ -103,12 +82,11 @@ function server(reportDir, port, ui) {
103
82
  type: 'capture',
104
83
  payload: options
105
84
  });
106
- }); // TODO Pass screenshot result to show it in inspector
107
-
85
+ });
86
+ // TODO Pass screenshot result to show it in inspector
108
87
  ctx.body = 'Ok';
109
88
  return;
110
89
  }
111
-
112
90
  await next();
113
91
  });
114
92
  app.use((0, _koaStatic.default)(_path.default.join(__dirname, '../../client/web')));
@@ -118,11 +96,14 @@ function server(reportDir, port, ui) {
118
96
  (0, _messages.subscribeOn)('shutdown', () => {
119
97
  server.close();
120
98
  wss.close();
99
+ wss.clients.forEach(ws => ws.close());
121
100
  });
122
101
  void creeveyApi.then(api => {
123
102
  api.subscribe(wss);
124
103
  wss.on('connection', ws => {
125
- ws.on('message', message => api.handleMessage(ws, message));
104
+ ws.on('message', (message, isBinary) => {
105
+ api.handleMessage(ws, isBinary ? message : message.toString());
106
+ });
126
107
  });
127
108
  });
128
109
  return resolveApi;
@@ -3,72 +3,62 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.emitWorkerMessage = emitWorkerMessage;
6
+ exports.emitDockerMessage = emitDockerMessage;
7
+ exports.emitShutdownMessage = emitShutdownMessage;
7
8
  exports.emitStoriesMessage = emitStoriesMessage;
8
9
  exports.emitTestMessage = emitTestMessage;
9
10
  exports.emitWebpackMessage = emitWebpackMessage;
10
- exports.emitDockerMessage = emitDockerMessage;
11
- exports.emitShutdownMessage = emitShutdownMessage;
12
- exports.sendStoriesMessage = sendStoriesMessage;
13
- exports.sendTestMessage = sendTestMessage;
11
+ exports.emitWorkerMessage = emitWorkerMessage;
14
12
  exports.sendDockerMessage = sendDockerMessage;
15
13
  exports.sendShutdownMessage = sendShutdownMessage;
14
+ exports.sendStoriesMessage = sendStoriesMessage;
15
+ exports.sendTestMessage = sendTestMessage;
16
16
  exports.subscribeOn = subscribeOn;
17
17
  exports.subscribeOnWorker = subscribeOnWorker;
18
-
19
18
  var _cluster = _interopRequireDefault(require("cluster"));
20
-
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
-
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
20
  function emitMessage(message) {
24
- var _process$send, _process$send2, _process;
25
-
21
+ var _process$send, _process;
26
22
  if (_cluster.default.isWorker && !process.connected) return false;
27
- return (_process$send = (_process$send2 = (_process = process).send) === null || _process$send2 === void 0 ? void 0 : _process$send2.call(_process, message)) !== null && _process$send !== void 0 ? _process$send : // @ts-expect-error: wrong typings `process.emit` return boolean
23
+ return ((_process$send = (_process = process).send) === null || _process$send === void 0 ? void 0 : _process$send.call(_process, message)) ??
24
+ // @ts-expect-error: wrong typings `process.emit` return boolean
28
25
  process.emit('message', message);
29
26
  }
30
-
31
27
  function emitWorkerMessage(message) {
32
28
  return emitMessage({
33
29
  scope: 'worker',
34
30
  ...message
35
31
  });
36
32
  }
37
-
38
33
  function emitStoriesMessage(message) {
39
34
  return emitMessage({
40
35
  scope: 'stories',
41
36
  ...message
42
37
  });
43
38
  }
44
-
45
39
  function emitTestMessage(message) {
46
40
  return emitMessage({
47
41
  scope: 'test',
48
42
  ...message
49
43
  });
50
44
  }
51
-
52
45
  function emitWebpackMessage(message) {
53
46
  return emitMessage({
54
47
  scope: 'webpack',
55
48
  ...message
56
49
  });
57
50
  }
58
-
59
51
  function emitDockerMessage(message) {
60
52
  return emitMessage({
61
53
  scope: 'docker',
62
54
  ...message
63
55
  });
64
56
  }
65
-
66
57
  function emitShutdownMessage() {
67
58
  return emitMessage({
68
59
  scope: 'shutdown'
69
60
  });
70
61
  }
71
-
72
62
  function createHandlers() {
73
63
  return Object.assign(Object.create(null), {
74
64
  worker: new Set(),
@@ -79,68 +69,51 @@ function createHandlers() {
79
69
  shutdown: new Set()
80
70
  });
81
71
  }
82
-
83
72
  const handlers = createHandlers();
84
-
85
73
  const handler = message => {
86
74
  switch (message.scope) {
87
75
  case 'worker':
88
76
  return handlers.worker.forEach(h => h(message));
89
-
90
77
  case 'stories':
91
78
  return handlers.stories.forEach(h => h(message));
92
-
93
79
  case 'test':
94
80
  return handlers.test.forEach(h => h(message));
95
-
96
81
  case 'webpack':
97
82
  return handlers.webpack.forEach(h => h(message));
98
-
99
83
  case 'docker':
100
84
  return handlers.docker.forEach(h => h(message));
101
-
102
85
  case 'shutdown':
103
86
  return handlers.shutdown.forEach(h => h(message));
104
87
  }
105
88
  };
106
-
107
89
  process.on('message', handler);
108
-
109
90
  function sendStoriesMessage(target, message) {
110
91
  var _target$send;
111
-
112
- (_target$send = target.send) === null || _target$send === void 0 ? void 0 : _target$send.call(target, {
92
+ (_target$send = target.send) === null || _target$send === void 0 || _target$send.call(target, {
113
93
  scope: 'stories',
114
94
  ...message
115
95
  });
116
96
  }
117
-
118
97
  function sendTestMessage(target, message) {
119
98
  var _target$send2;
120
-
121
- (_target$send2 = target.send) === null || _target$send2 === void 0 ? void 0 : _target$send2.call(target, {
99
+ (_target$send2 = target.send) === null || _target$send2 === void 0 || _target$send2.call(target, {
122
100
  scope: 'test',
123
101
  ...message
124
102
  });
125
103
  }
126
-
127
104
  function sendDockerMessage(target, message) {
128
105
  var _target$send3;
129
-
130
- (_target$send3 = target.send) === null || _target$send3 === void 0 ? void 0 : _target$send3.call(target, {
106
+ (_target$send3 = target.send) === null || _target$send3 === void 0 || _target$send3.call(target, {
131
107
  scope: 'docker',
132
108
  ...message
133
109
  });
134
110
  }
135
-
136
111
  function sendShutdownMessage(target) {
137
112
  var _target$send4;
138
-
139
- (_target$send4 = target.send) === null || _target$send4 === void 0 ? void 0 : _target$send4.call(target, {
113
+ (_target$send4 = target.send) === null || _target$send4 === void 0 || _target$send4.call(target, {
140
114
  scope: 'shutdown'
141
115
  });
142
116
  }
143
-
144
117
  function subscribeOn(scope, handler) {
145
118
  switch (scope) {
146
119
  case 'worker':
@@ -149,35 +122,30 @@ function subscribeOn(scope, handler) {
149
122
  handlers.worker.add(workerHandler);
150
123
  return () => handlers.worker.delete(workerHandler);
151
124
  }
152
-
153
125
  case 'stories':
154
126
  {
155
127
  const storiesHandler = handler;
156
128
  handlers.stories.add(storiesHandler);
157
129
  return () => handlers.stories.delete(storiesHandler);
158
130
  }
159
-
160
131
  case 'test':
161
132
  {
162
133
  const testHandler = handler;
163
134
  handlers.test.add(testHandler);
164
135
  return () => handlers.test.delete(testHandler);
165
136
  }
166
-
167
137
  case 'webpack':
168
138
  {
169
139
  const webpackHandler = handler;
170
140
  handlers.webpack.add(webpackHandler);
171
141
  return () => handlers.webpack.delete(webpackHandler);
172
142
  }
173
-
174
143
  case 'docker':
175
144
  {
176
145
  const dockerHandler = handler;
177
146
  handlers.docker.add(dockerHandler);
178
147
  return () => handlers.docker.delete(dockerHandler);
179
148
  }
180
-
181
149
  case 'shutdown':
182
150
  {
183
151
  const shutdownHandler = handler;
@@ -186,14 +154,9 @@ function subscribeOn(scope, handler) {
186
154
  }
187
155
  }
188
156
  }
189
-
190
157
  const workers = new Map();
191
-
192
158
  function subscribeOnWorker(worker, scope, handler) {
193
- var _workers$get;
194
-
195
- const workerHandlers = (_workers$get = workers.get(worker)) !== null && _workers$get !== void 0 ? _workers$get : createHandlers();
196
-
159
+ const workerHandlers = workers.get(worker) ?? createHandlers();
197
160
  if (!workers.has(worker)) {
198
161
  workers.set(worker, workerHandlers);
199
162
  worker.once('exit', () => workers.delete(worker));
@@ -201,25 +164,19 @@ function subscribeOnWorker(worker, scope, handler) {
201
164
  switch (message.scope) {
202
165
  case 'worker':
203
166
  return workerHandlers.worker.forEach(h => h(message));
204
-
205
167
  case 'stories':
206
168
  return workerHandlers.stories.forEach(h => h(message));
207
-
208
169
  case 'test':
209
170
  return workerHandlers.test.forEach(h => h(message));
210
-
211
171
  case 'webpack':
212
172
  return workerHandlers.webpack.forEach(h => h(message));
213
-
214
173
  case 'docker':
215
174
  return workerHandlers.docker.forEach(h => h(message));
216
-
217
175
  case 'shutdown':
218
176
  return workerHandlers.shutdown.forEach(h => h(message));
219
177
  }
220
178
  });
221
179
  }
222
-
223
180
  switch (scope) {
224
181
  case 'worker':
225
182
  {
@@ -227,35 +184,30 @@ function subscribeOnWorker(worker, scope, handler) {
227
184
  workerHandlers.worker.add(workerHandler);
228
185
  return () => workerHandlers.worker.delete(workerHandler);
229
186
  }
230
-
231
187
  case 'stories':
232
188
  {
233
189
  const storiesHandler = handler;
234
190
  workerHandlers.stories.add(storiesHandler);
235
191
  return () => workerHandlers.stories.delete(storiesHandler);
236
192
  }
237
-
238
193
  case 'test':
239
194
  {
240
195
  const testHandler = handler;
241
196
  workerHandlers.test.add(testHandler);
242
197
  return () => workerHandlers.test.delete(testHandler);
243
198
  }
244
-
245
199
  case 'webpack':
246
200
  {
247
201
  const webpackHandler = handler;
248
202
  workerHandlers.webpack.add(webpackHandler);
249
203
  return () => workerHandlers.webpack.delete(webpackHandler);
250
204
  }
251
-
252
205
  case 'docker':
253
206
  {
254
207
  const dockerHandler = handler;
255
208
  workerHandlers.docker.add(dockerHandler);
256
209
  return () => workerHandlers.docker.delete(dockerHandler);
257
210
  }
258
-
259
211
  case 'shutdown':
260
212
  {
261
213
  const shutdownHandler = handler;