creevey 0.9.0-beta.0 → 0.9.0-beta.1

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