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,272 +0,0 @@
1
- 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; }
2
-
3
- import path from 'path';
4
- import { copyFile, mkdir } from 'fs';
5
- import { promisify } from 'util';
6
- import { EventEmitter } from 'events';
7
- import { isDefined } from '../../types';
8
- import Pool from './pool';
9
- const copyFileAsync = promisify(copyFile);
10
- const mkdirAsync = promisify(mkdir);
11
- export default class Runner extends EventEmitter {
12
- get isRunning() {
13
- return Object.values(this.pools).some(pool => pool.isRunning);
14
- }
15
-
16
- constructor(config) {
17
- super();
18
-
19
- _defineProperty(this, "failFast", void 0);
20
-
21
- _defineProperty(this, "screenDir", void 0);
22
-
23
- _defineProperty(this, "reportDir", void 0);
24
-
25
- _defineProperty(this, "browsers", void 0);
26
-
27
- _defineProperty(this, "pools", {});
28
-
29
- _defineProperty(this, "tests", {});
30
-
31
- _defineProperty(this, "handlePoolMessage", message => {
32
- const {
33
- id,
34
- status,
35
- result
36
- } = message;
37
- const test = this.tests[id];
38
- if (!test) return;
39
- const {
40
- browser,
41
- testName,
42
- storyPath,
43
- storyId
44
- } = test; // TODO Handle 'retrying' status
45
-
46
- test.status = status == 'retrying' ? 'failed' : status;
47
-
48
- if (!result) {
49
- this.sendUpdate({
50
- tests: {
51
- [id]: {
52
- id,
53
- browser,
54
- testName,
55
- storyPath,
56
- status: test.status,
57
- storyId
58
- }
59
- }
60
- });
61
- return;
62
- }
63
-
64
- if (!test.results) {
65
- test.results = [];
66
- }
67
-
68
- test.results.push(result);
69
- this.sendUpdate({
70
- tests: {
71
- [id]: {
72
- id,
73
- browser,
74
- testName,
75
- storyPath,
76
- status: test.status,
77
- results: [result],
78
- storyId
79
- }
80
- }
81
- });
82
- if (this.failFast && status == 'failed') this.stop();
83
- });
84
-
85
- _defineProperty(this, "handlePoolStop", () => {
86
- if (!this.isRunning) {
87
- this.sendUpdate({
88
- isRunning: false
89
- });
90
- this.emit('stop');
91
- }
92
- });
93
-
94
- this.failFast = config.failFast;
95
- this.screenDir = config.screenDir;
96
- this.reportDir = config.reportDir;
97
- this.browsers = Object.keys(config.browsers);
98
- this.browsers.map(browser => this.pools[browser] = new Pool(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
99
- }
100
-
101
- async init() {
102
- await Promise.all(Object.values(this.pools).map(pool => pool.init()));
103
- }
104
-
105
- updateTests(testsDiff) {
106
- const tests = {};
107
- const removedTests = [];
108
- Object.entries(testsDiff).forEach(([id, newTest]) => {
109
- const oldTest = this.tests[id];
110
-
111
- if (newTest) {
112
- if (oldTest) {
113
- this.tests[id] = { ...newTest,
114
- retries: oldTest.retries,
115
- results: oldTest.results,
116
- approved: oldTest.approved
117
- };
118
- } else this.tests[id] = newTest; // eslint-disable-next-line @typescript-eslint/no-unused-vars
119
-
120
-
121
- const {
122
- story,
123
- fn,
124
- ...restTest
125
- } = newTest;
126
- tests[id] = { ...restTest,
127
- status: 'unknown'
128
- };
129
- } else if (oldTest) {
130
- const {
131
- id,
132
- browser,
133
- testName,
134
- storyPath,
135
- storyId
136
- } = oldTest;
137
- removedTests.push({
138
- id,
139
- browser,
140
- testName,
141
- storyPath,
142
- storyId
143
- });
144
- delete this.tests[id];
145
- }
146
- });
147
- this.sendUpdate({
148
- tests,
149
- removedTests
150
- });
151
- }
152
-
153
- start(ids) {
154
- if (this.isRunning) return;
155
- const testsToStart = ids.map(id => this.tests[id]).filter(isDefined).filter(test => !test.skip);
156
- if (testsToStart.length == 0) return;
157
- this.sendUpdate({
158
- isRunning: true,
159
- tests: testsToStart.reduce((update, {
160
- id,
161
- storyId,
162
- browser,
163
- testName,
164
- storyPath
165
- }) => ({ ...update,
166
- [id]: {
167
- id,
168
- browser,
169
- testName,
170
- storyPath,
171
- status: 'pending',
172
- storyId
173
- }
174
- }), {})
175
- });
176
- const testsByBrowser = testsToStart.reduce((tests, test) => {
177
- const {
178
- id,
179
- browser,
180
- testName,
181
- storyPath
182
- } = test;
183
- const restPath = [...storyPath, testName].filter(isDefined);
184
- test.status = 'pending';
185
- return { ...tests,
186
- [browser]: [...(tests[browser] || []), {
187
- id,
188
- path: restPath
189
- }]
190
- };
191
- }, {});
192
- this.browsers.forEach(browser => {
193
- const pool = this.pools[browser];
194
- const tests = testsByBrowser[browser];
195
-
196
- if (tests && tests.length > 0 && pool.start(tests)) {
197
- pool.once('stop', this.handlePoolStop);
198
- }
199
- });
200
- }
201
-
202
- stop() {
203
- if (!this.isRunning) return;
204
- this.browsers.forEach(browser => this.pools[browser].stop());
205
- }
206
-
207
- get status() {
208
- const tests = {};
209
- Object.values(this.tests).filter(isDefined) // eslint-disable-next-line @typescript-eslint/no-unused-vars
210
- .forEach(({
211
- story,
212
- fn,
213
- ...test
214
- }) => tests[test.id] = test);
215
- return {
216
- isRunning: this.isRunning,
217
- tests,
218
- browsers: this.browsers
219
- };
220
- }
221
-
222
- async approve({
223
- id,
224
- retry,
225
- image
226
- }) {
227
- const test = this.tests[id];
228
- if (!test || !test.results) return;
229
- const result = test.results[retry];
230
- if (!result || !result.images) return;
231
- const images = result.images[image];
232
- if (!images) return;
233
-
234
- if (!test.approved) {
235
- test.approved = {};
236
- }
237
-
238
- const {
239
- browser,
240
- testName,
241
- storyPath
242
- } = test;
243
- const restPath = [...storyPath, testName].filter(isDefined);
244
- const testPath = path.join(...restPath, image == browser ? '' : browser);
245
- const srcImagePath = path.join(this.reportDir, testPath, images.actual);
246
- const dstImagePath = path.join(this.screenDir, testPath, `${image}.png`);
247
- await mkdirAsync(path.join(this.screenDir, testPath), {
248
- recursive: true
249
- });
250
- await copyFileAsync(srcImagePath, dstImagePath);
251
- test.approved[image] = retry;
252
- this.sendUpdate({
253
- tests: {
254
- [id]: {
255
- id,
256
- browser,
257
- testName,
258
- storyPath,
259
- approved: {
260
- [image]: retry
261
- },
262
- storyId: test.storyId
263
- }
264
- }
265
- });
266
- }
267
-
268
- sendUpdate(data) {
269
- this.emit('update', data);
270
- }
271
-
272
- }
@@ -1,105 +0,0 @@
1
- import path from 'path';
2
- import http from 'http';
3
- import cluster from 'cluster';
4
- import Koa from 'koa';
5
- import cors from '@koa/cors';
6
- import serve from 'koa-static';
7
- import mount from 'koa-mount';
8
- import body from 'koa-bodyparser';
9
- import WebSocket from 'ws';
10
- import { emitStoriesMessage, sendStoriesMessage, subscribeOn, subscribeOnWorker } from '../messages';
11
- import { isDefined, noop } from '../../types';
12
- import { logger } from '../logger';
13
- import { deserializeStory } from '../../shared';
14
- export default function server(reportDir, port, ui) {
15
- let resolveApi = noop;
16
- let setStoriesCounter = 0;
17
- const creeveyApi = new Promise(resolve => resolveApi = resolve);
18
- const app = new Koa();
19
- const server = http.createServer(app.callback());
20
- const wss = new WebSocket.Server({
21
- server
22
- });
23
- app.use(cors());
24
- app.use(body());
25
- app.use(async (ctx, next) => {
26
- if (ctx.method == 'GET' && ctx.path == '/ping') {
27
- ctx.body = 'pong';
28
- return;
29
- }
30
-
31
- await next();
32
- });
33
-
34
- if (ui) {
35
- app.use(async (_, next) => {
36
- await creeveyApi;
37
- await next();
38
- });
39
- }
40
-
41
- app.use(async (ctx, next) => {
42
- if (ctx.method == 'POST' && ctx.path == '/stories') {
43
- const {
44
- setStoriesCounter: counter,
45
- stories
46
- } = ctx.request.body;
47
- if (setStoriesCounter >= counter) return;
48
- const deserializedStories = stories.map(([file, stories]) => [file, stories.map(deserializeStory)]);
49
- setStoriesCounter = counter;
50
- emitStoriesMessage({
51
- type: 'update',
52
- payload: deserializedStories
53
- });
54
- Object.values(cluster.workers).filter(isDefined).filter(worker => worker.isConnected()).forEach(worker => sendStoriesMessage(worker, {
55
- type: 'update',
56
- payload: deserializedStories
57
- }));
58
- return;
59
- }
60
-
61
- await next();
62
- });
63
- app.use(async (ctx, next) => {
64
- if (ctx.method == 'POST' && ctx.path == '/capture') {
65
- const {
66
- workerId,
67
- options
68
- } = ctx.request.body;
69
- const worker = Object.values(cluster.workers).filter(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
70
-
71
- if (!worker) return;
72
- await new Promise(resolve => {
73
- const unsubscribe = subscribeOnWorker(worker, 'stories', message => {
74
- if (message.type != 'capture') return;
75
- unsubscribe();
76
- resolve();
77
- });
78
- sendStoriesMessage(worker, {
79
- type: 'capture',
80
- payload: options
81
- });
82
- }); // TODO Pass screenshot result to show it in inspector
83
-
84
- ctx.body = 'Ok';
85
- return;
86
- }
87
-
88
- await next();
89
- });
90
- app.use(serve(path.join(__dirname, '../../client/web')));
91
- app.use(mount('/report', serve(reportDir)));
92
- wss.on('error', error => logger.error(error));
93
- server.listen(port);
94
- subscribeOn('shutdown', () => {
95
- server.close();
96
- wss.close();
97
- });
98
- void creeveyApi.then(api => {
99
- api.subscribe(wss);
100
- wss.on('connection', ws => {
101
- ws.on('message', message => api.handleMessage(ws, message));
102
- });
103
- });
104
- return resolveApi;
105
- }
@@ -1,234 +0,0 @@
1
- import cluster from 'cluster';
2
-
3
- function emitMessage(message) {
4
- var _process$send, _process$send2, _process;
5
-
6
- if (cluster.isWorker && !process.connected) return false;
7
- 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
8
- process.emit('message', message);
9
- }
10
-
11
- export function emitWorkerMessage(message) {
12
- return emitMessage({
13
- scope: 'worker',
14
- ...message
15
- });
16
- }
17
- export function emitStoriesMessage(message) {
18
- return emitMessage({
19
- scope: 'stories',
20
- ...message
21
- });
22
- }
23
- export function emitTestMessage(message) {
24
- return emitMessage({
25
- scope: 'test',
26
- ...message
27
- });
28
- }
29
- export function emitWebpackMessage(message) {
30
- return emitMessage({
31
- scope: 'webpack',
32
- ...message
33
- });
34
- }
35
- export function emitDockerMessage(message) {
36
- return emitMessage({
37
- scope: 'docker',
38
- ...message
39
- });
40
- }
41
- export function emitShutdownMessage() {
42
- return emitMessage({
43
- scope: 'shutdown'
44
- });
45
- }
46
-
47
- function createHandlers() {
48
- return Object.assign(Object.create(null), {
49
- worker: new Set(),
50
- stories: new Set(),
51
- test: new Set(),
52
- webpack: new Set(),
53
- docker: new Set(),
54
- shutdown: new Set()
55
- });
56
- }
57
-
58
- const handlers = createHandlers();
59
-
60
- const handler = message => {
61
- switch (message.scope) {
62
- case 'worker':
63
- return handlers.worker.forEach(h => h(message));
64
-
65
- case 'stories':
66
- return handlers.stories.forEach(h => h(message));
67
-
68
- case 'test':
69
- return handlers.test.forEach(h => h(message));
70
-
71
- case 'webpack':
72
- return handlers.webpack.forEach(h => h(message));
73
-
74
- case 'docker':
75
- return handlers.docker.forEach(h => h(message));
76
-
77
- case 'shutdown':
78
- return handlers.shutdown.forEach(h => h(message));
79
- }
80
- };
81
-
82
- process.on('message', handler);
83
- export function sendStoriesMessage(target, message) {
84
- var _target$send;
85
-
86
- (_target$send = target.send) === null || _target$send === void 0 ? void 0 : _target$send.call(target, {
87
- scope: 'stories',
88
- ...message
89
- });
90
- }
91
- export function sendTestMessage(target, message) {
92
- var _target$send2;
93
-
94
- (_target$send2 = target.send) === null || _target$send2 === void 0 ? void 0 : _target$send2.call(target, {
95
- scope: 'test',
96
- ...message
97
- });
98
- }
99
- export function sendDockerMessage(target, message) {
100
- var _target$send3;
101
-
102
- (_target$send3 = target.send) === null || _target$send3 === void 0 ? void 0 : _target$send3.call(target, {
103
- scope: 'docker',
104
- ...message
105
- });
106
- }
107
- export function sendShutdownMessage(target) {
108
- var _target$send4;
109
-
110
- (_target$send4 = target.send) === null || _target$send4 === void 0 ? void 0 : _target$send4.call(target, {
111
- scope: 'shutdown'
112
- });
113
- }
114
- export function subscribeOn(scope, handler) {
115
- switch (scope) {
116
- case 'worker':
117
- {
118
- const workerHandler = handler;
119
- handlers.worker.add(workerHandler);
120
- return () => handlers.worker.delete(workerHandler);
121
- }
122
-
123
- case 'stories':
124
- {
125
- const storiesHandler = handler;
126
- handlers.stories.add(storiesHandler);
127
- return () => handlers.stories.delete(storiesHandler);
128
- }
129
-
130
- case 'test':
131
- {
132
- const testHandler = handler;
133
- handlers.test.add(testHandler);
134
- return () => handlers.test.delete(testHandler);
135
- }
136
-
137
- case 'webpack':
138
- {
139
- const webpackHandler = handler;
140
- handlers.webpack.add(webpackHandler);
141
- return () => handlers.webpack.delete(webpackHandler);
142
- }
143
-
144
- case 'docker':
145
- {
146
- const dockerHandler = handler;
147
- handlers.docker.add(dockerHandler);
148
- return () => handlers.docker.delete(dockerHandler);
149
- }
150
-
151
- case 'shutdown':
152
- {
153
- const shutdownHandler = handler;
154
- handlers.shutdown.add(shutdownHandler);
155
- return () => handlers.shutdown.delete(shutdownHandler);
156
- }
157
- }
158
- }
159
- const workers = new Map();
160
- export function subscribeOnWorker(worker, scope, handler) {
161
- var _workers$get;
162
-
163
- const workerHandlers = (_workers$get = workers.get(worker)) !== null && _workers$get !== void 0 ? _workers$get : createHandlers();
164
-
165
- if (!workers.has(worker)) {
166
- workers.set(worker, workerHandlers);
167
- worker.once('exit', () => workers.delete(worker));
168
- worker.on('message', message => {
169
- switch (message.scope) {
170
- case 'worker':
171
- return workerHandlers.worker.forEach(h => h(message));
172
-
173
- case 'stories':
174
- return workerHandlers.stories.forEach(h => h(message));
175
-
176
- case 'test':
177
- return workerHandlers.test.forEach(h => h(message));
178
-
179
- case 'webpack':
180
- return workerHandlers.webpack.forEach(h => h(message));
181
-
182
- case 'docker':
183
- return workerHandlers.docker.forEach(h => h(message));
184
-
185
- case 'shutdown':
186
- return workerHandlers.shutdown.forEach(h => h(message));
187
- }
188
- });
189
- }
190
-
191
- switch (scope) {
192
- case 'worker':
193
- {
194
- const workerHandler = handler;
195
- workerHandlers.worker.add(workerHandler);
196
- return () => workerHandlers.worker.delete(workerHandler);
197
- }
198
-
199
- case 'stories':
200
- {
201
- const storiesHandler = handler;
202
- workerHandlers.stories.add(storiesHandler);
203
- return () => workerHandlers.stories.delete(storiesHandler);
204
- }
205
-
206
- case 'test':
207
- {
208
- const testHandler = handler;
209
- workerHandlers.test.add(testHandler);
210
- return () => workerHandlers.test.delete(testHandler);
211
- }
212
-
213
- case 'webpack':
214
- {
215
- const webpackHandler = handler;
216
- workerHandlers.webpack.add(webpackHandler);
217
- return () => workerHandlers.webpack.delete(webpackHandler);
218
- }
219
-
220
- case 'docker':
221
- {
222
- const dockerHandler = handler;
223
- workerHandlers.docker.add(dockerHandler);
224
- return () => workerHandlers.docker.delete(dockerHandler);
225
- }
226
-
227
- case 'shutdown':
228
- {
229
- const shutdownHandler = handler;
230
- workerHandlers.shutdown.add(shutdownHandler);
231
- return () => workerHandlers.shutdown.delete(shutdownHandler);
232
- }
233
- }
234
- }
@@ -1,63 +0,0 @@
1
- import { toId, storyNameFromExport } from '@storybook/csf';
2
- export default async function parse(files) {
3
- result = {}; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
4
-
5
- (await import('@babel/register')).default({
6
- babelrc: false,
7
- rootMode: 'upward-optional',
8
- ignore: [/node_modules/],
9
- extensions: ['.js', '.jsx', '.ts', '.tsx'],
10
- plugins: [['@babel/plugin-transform-runtime']],
11
- presets: ['@babel/preset-typescript', ['@babel/preset-env', {
12
- targets: {
13
- node: '10'
14
- }
15
- }]]
16
- });
17
- await Promise.all(files.map(async file => import(file)));
18
- return result;
19
- }
20
- let result = {};
21
- let kindTitle = '';
22
- let storyTitle = '';
23
- let storyParams = null;
24
-
25
- const setStoryParameters = params => {
26
- storyParams = params;
27
- };
28
-
29
- const getStoryId = (kindTitle, storyTitle) => {
30
- return toId(kindTitle, storyNameFromExport(storyTitle));
31
- };
32
-
33
- export const kind = (title, kindFn) => {
34
- kindTitle = title;
35
- kindFn();
36
- kindTitle = '';
37
- };
38
- export const story = (title, storyFn) => {
39
- var _result$storyId;
40
-
41
- storyTitle = title;
42
- storyParams = null;
43
- storyFn({
44
- setStoryParameters
45
- });
46
- const storyId = getStoryId(kindTitle, storyTitle);
47
- result[storyId] = Object.assign({}, storyParams, {
48
- tests: (_result$storyId = result[storyId]) === null || _result$storyId === void 0 ? void 0 : _result$storyId.tests
49
- });
50
- storyTitle = '';
51
- storyParams = null;
52
- };
53
- export const test = (title, testFn) => {
54
- const storyId = getStoryId(kindTitle, storyTitle);
55
-
56
- if (!result[storyId]) {
57
- result[storyId] = {};
58
- }
59
-
60
- result[storyId].tests = Object.assign({}, result[storyId].tests, {
61
- [title]: testFn
62
- });
63
- };