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,78 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.loadStories = loadStories;
7
-
8
- var _cluster = _interopRequireWildcard(require("cluster"));
9
-
10
- var _selenium = require("../../selenium");
11
-
12
- var _messages = require("../../messages");
13
-
14
- var _shared = require("../../../shared");
15
-
16
- var _types = require("../../../types");
17
-
18
- var _logger = require("../../logger");
19
-
20
- 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); }
21
-
22
- 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; }
23
-
24
- async function loadStories(_config, {
25
- port
26
- }, storiesListener) {
27
- if (_cluster.isMaster) {
28
- return new Promise(resolve => {
29
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
30
-
31
- if (worker) {
32
- const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
33
- if (message.type == 'set') {
34
- const {
35
- stories,
36
- oldTests
37
- } = message.payload;
38
- if (oldTests.length > 0) _logger.logger.warn(`If you use browser stories provider of CSFv3 Storybook feature\n` + `Creevey will not load tests defined in story parameters from following stories:\n` + oldTests.join('\n'));
39
- unsubscribe();
40
- resolve(stories);
41
- }
42
- });
43
- (0, _messages.sendStoriesMessage)(worker, {
44
- type: 'get'
45
- });
46
- }
47
-
48
- (0, _messages.subscribeOn)('stories', message => {
49
- // TODO updates only one browser :(
50
- if (message.type == 'update') storiesListener(new Map(message.payload));
51
- });
52
- });
53
- } else {
54
- (0, _messages.subscribeOn)('stories', message => {
55
- if (message.type == 'get') (0, _messages.emitStoriesMessage)({
56
- type: 'set',
57
- payload: {
58
- stories,
59
- oldTests: storiesWithOldTests
60
- }
61
- });
62
- if (message.type == 'update') storiesListener(new Map(message.payload));
63
- });
64
- const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)(port));
65
- const storiesWithOldTests = [];
66
- Object.values(stories).forEach(story => {
67
- var _parameters, _parameters$creevey;
68
-
69
- if ((_parameters = story.parameters) !== null && _parameters !== void 0 && (_parameters$creevey = _parameters.creevey) !== null && _parameters$creevey !== void 0 && _parameters$creevey.tests) {
70
- var _parameters2, _parameters2$creevey;
71
-
72
- (_parameters2 = story.parameters) === null || _parameters2 === void 0 ? true : (_parameters2$creevey = _parameters2.creevey) === null || _parameters2$creevey === void 0 ? true : delete _parameters2$creevey.tests;
73
- storiesWithOldTests.push(`${story.kind}/${story.name}`);
74
- }
75
- });
76
- return stories;
77
- }
78
- }
@@ -1,79 +0,0 @@
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("../../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
- async function loadStories(_config, {
23
- port
24
- }, storiesListener) {
25
- let creeveyParamsByStoryId = {};
26
-
27
- const mergeParamsFromTestsToStory = (story, creeveyParams) => {
28
- if (story.parameters) {
29
- story.parameters.creevey = (0, _shared.combineParameters)(story.parameters.creevey || {}, creeveyParams);
30
- }
31
- };
32
-
33
- const stories = await (0, _browser.loadStories)(_config, {
34
- port
35
- }, updatedStoriesByFiles => {
36
- Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
37
- storiesArray.forEach(story => {
38
- const creeveyParams = creeveyParamsByStoryId[story.id];
39
-
40
- if (creeveyParams) {
41
- mergeParamsFromTestsToStory(story, creeveyParams);
42
- }
43
- });
44
- });
45
- storiesListener(updatedStoriesByFiles);
46
- }); // TODO fix test files hot reloading
47
-
48
- creeveyParamsByStoryId = await parseParams(_config
49
- /*, (data) => console.log(data) */
50
- );
51
- Object.entries(stories).forEach(([storyId, story]) => {
52
- mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
53
- });
54
- return stories;
55
- }
56
-
57
- function parseParams(config, listener) {
58
- if (!config.testDir) {
59
- return Promise.resolve({});
60
- }
61
-
62
- const testFiles = (0, _utils.readDirRecursive)(config.testDir).filter(file => {
63
- var _config$testRegex;
64
-
65
- return (_config$testRegex = config.testRegex) === null || _config$testRegex === void 0 ? void 0 : _config$testRegex.test(file);
66
- });
67
-
68
- if (listener) {
69
- _chokidar.default.watch(testFiles).on('change', filePath => {
70
- _logger.logger.debug(`changed: ${filePath}`); // doesn't work, always returns {} due modules caching
71
- // see https://github.com/nodejs/modules/issues/307
72
-
73
-
74
- void (0, _parser.default)(testFiles).then(data => listener(data));
75
- });
76
- }
77
-
78
- return (0, _parser.default)(testFiles);
79
- }
@@ -1,239 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.loadStories = loadStories;
7
- exports.extractStoriesData = extractStoriesData;
8
-
9
- var _path = _interopRequireDefault(require("path"));
10
-
11
- var _cluster = 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.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.isMaster) _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
- }
@@ -1,83 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = update;
7
-
8
- var _path = _interopRequireDefault(require("path"));
9
-
10
- var _fs = _interopRequireWildcard(require("fs"));
11
-
12
- var _micromatch = _interopRequireDefault(require("micromatch"));
13
-
14
- var _types = require("../types");
15
-
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
-
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function tryToLoadTestsData(filename) {
23
- try {
24
- // eslint-disable-next-line @typescript-eslint/no-var-requires
25
- return require(filename);
26
- } catch (_) {
27
- /* noop */
28
- }
29
- }
30
-
31
- const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
32
-
33
- function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
34
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
35
- var _images$get;
36
-
37
- return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
38
- }, new Map()).forEach((retry, imageName) => {
39
- (0, _fs.mkdirSync)(dstPath, {
40
- recursive: true
41
- });
42
-
43
- _fs.default.copyFileSync(_path.default.join(srcPath, `${imageName}-actual-${retry}.png`), _path.default.join(dstPath, `${imageName}.png`));
44
- });
45
- }
46
-
47
- function traverse(srcPath, dstPath, testPaths, isMatch) {
48
- const dirents = _fs.default.readdirSync(srcPath, {
49
- withFileTypes: true
50
- });
51
-
52
- approve(dirents, srcPath, dstPath, testPaths, isMatch);
53
- 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));
54
- }
55
-
56
- function update(config, grepPattern) {
57
- const {
58
- reportDir,
59
- screenDir
60
- } = config;
61
- const isMatch = grepPattern ? _micromatch.default.matcher(grepPattern, {
62
- contains: true
63
- }) : () => true;
64
- const testsMeta = tryToLoadTestsData(`${reportDir}/tests.json`);
65
- const testsReport = tryToLoadTestsData(`${reportDir}/data`);
66
- let testPaths = null;
67
-
68
- if (testsMeta && testsReport) {
69
- testPaths = Object.values(testsMeta).filter(_types.isDefined).filter(({
70
- id
71
- }) => {
72
- var _testsReport$id;
73
-
74
- return ((_testsReport$id = testsReport[id]) === null || _testsReport$id === void 0 ? void 0 : _testsReport$id.status) == 'failed';
75
- }).map(({
76
- storyPath,
77
- testName,
78
- browser
79
- }) => [...storyPath, ...(testName ? [testName] : []), browser]);
80
- }
81
-
82
- traverse(reportDir, screenDir, testPaths, value => isMatch(_path.default.relative(reportDir, value)));
83
- }
@@ -1,185 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.shouldSkip = shouldSkip;
7
- exports.shutdownWorkers = shutdownWorkers;
8
- exports.shutdown = shutdown;
9
- exports.getCreeveyCache = getCreeveyCache;
10
- exports.runSequence = runSequence;
11
- exports.testsToImages = testsToImages;
12
- exports.removeProps = removeProps;
13
- exports.readDirRecursive = readDirRecursive;
14
- exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
15
-
16
- var _fs = require("fs");
17
-
18
- var _cluster = _interopRequireDefault(require("cluster"));
19
-
20
- var _types = require("../types");
21
-
22
- var _messages = require("./messages");
23
-
24
- var _findCacheDir = _interopRequireDefault(require("find-cache-dir"));
25
-
26
- var _https = require("https");
27
-
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
-
30
- const isShuttingDown = {
31
- current: false
32
- };
33
- exports.isShuttingDown = isShuttingDown;
34
- const LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
35
- exports.LOCALHOST_REGEXP = LOCALHOST_REGEXP;
36
- const extensions = ['.js', '.jsx', '.ts', '.tsx'];
37
- exports.extensions = extensions;
38
- const skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
39
- exports.skipOptionKeys = skipOptionKeys;
40
-
41
- function matchBy(pattern, value) {
42
- return typeof pattern == 'string' && pattern == value || Array.isArray(pattern) && pattern.includes(value) || pattern instanceof RegExp && pattern.test(value) || !(0, _types.isDefined)(pattern);
43
- }
44
-
45
- function shouldSkip(browser, meta, skipOptions, test) {
46
- if (typeof skipOptions != 'object') {
47
- return skipOptions;
48
- }
49
-
50
- if (Array.isArray(skipOptions)) {
51
- for (const skip of skipOptions) {
52
- const reason = shouldSkip(browser, meta, skip, test);
53
- if (reason) return reason;
54
- }
55
-
56
- return false;
57
- }
58
-
59
- let hasSkipOptionKeys = false;
60
-
61
- for (const skipKey in skipOptions) {
62
- if (skipOptionKeys.includes(skipKey)) {
63
- hasSkipOptionKeys = true;
64
- continue;
65
- }
66
-
67
- const reason = shouldSkip(browser, meta, {
68
- reason: skipKey,
69
- ...skipOptions[skipKey]
70
- }, test);
71
- if (reason) return reason;
72
- }
73
-
74
- if (!hasSkipOptionKeys) return false;
75
- const {
76
- in: browsers,
77
- kinds,
78
- stories,
79
- tests,
80
- reason = true
81
- } = skipOptions;
82
- const {
83
- kind,
84
- story
85
- } = meta;
86
- const skipByBrowser = matchBy(browsers, browser);
87
- const skipByKind = matchBy(kinds, kind);
88
- const skipByStory = matchBy(stories, story);
89
- const skipByTest = !(0, _types.isDefined)(test) || matchBy(tests, test);
90
- return skipByBrowser && skipByKind && skipByStory && skipByTest && reason;
91
- }
92
-
93
- async function shutdownWorkers() {
94
- isShuttingDown.current = true;
95
- await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
96
- const timeout = setTimeout(() => worker.kill(), 10000);
97
- worker.on('exit', () => {
98
- clearTimeout(timeout);
99
- resolve();
100
- });
101
- (0, _messages.sendShutdownMessage)(worker);
102
- })));
103
- (0, _messages.emitShutdownMessage)();
104
- }
105
-
106
- function shutdown() {
107
- // eslint-disable-next-line no-process-exit
108
- process.exit();
109
- }
110
-
111
- function getCreeveyCache() {
112
- return (0, _findCacheDir.default)({
113
- name: 'creevey',
114
- cwd: __dirname
115
- });
116
- }
117
-
118
- async function runSequence(seq, predicate) {
119
- for (const fn of seq) {
120
- if (predicate()) await fn();
121
- }
122
- }
123
-
124
- function testsToImages(tests) {
125
- return new Set([].concat(...tests.filter(_types.isDefined).map(({
126
- browser,
127
- testName,
128
- storyPath,
129
- results
130
- }) => {
131
- var _results$slice$0$imag, _results$slice$;
132
-
133
- return Object.keys((_results$slice$0$imag = results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) !== null && _results$slice$0$imag !== void 0 ? _results$slice$0$imag : {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
134
- })));
135
- } // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
136
-
137
-
138
- const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0, _fs.readFileSync)('/proc/1/cgroup', 'utf8'));
139
- exports.isInsideDocker = isInsideDocker;
140
-
141
- const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
142
- var _response$statusCode2;
143
-
144
- if (response.statusCode == 302) {
145
- var _response$statusCode;
146
-
147
- const {
148
- location
149
- } = response.headers;
150
- if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode = response.statusCode) !== null && _response$statusCode !== void 0 ? _response$statusCode : 'UNKNOWN'}`));
151
- return resolve(downloadBinary(location, destination));
152
- }
153
-
154
- if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode2 = response.statusCode) !== null && _response$statusCode2 !== void 0 ? _response$statusCode2 : 'UNKNOWN'}`));
155
- const fileStream = (0, _fs.createWriteStream)(destination);
156
- response.pipe(fileStream);
157
- fileStream.on('finish', () => {
158
- fileStream.close();
159
- resolve();
160
- });
161
- fileStream.on('error', error => {
162
- (0, _fs.unlink)(destination, _types.noop);
163
- reject(error);
164
- });
165
- }));
166
-
167
- exports.downloadBinary = downloadBinary;
168
-
169
- function removeProps(obj, propPath) {
170
- const [prop, ...restPath] = propPath;
171
-
172
- if (restPath.length > 0) {
173
- if (typeof prop == 'string') obj[prop] && removeProps(obj[prop], restPath);
174
- if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => obj[key] && removeProps(obj[key], restPath));
175
- } else {
176
- if (typeof prop == 'string') delete obj[prop];
177
- if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => delete obj[key]);
178
- }
179
- }
180
-
181
- function readDirRecursive(dirPath) {
182
- return [].concat(...(0, _fs.readdirSync)(dirPath, {
183
- withFileTypes: true
184
- }).map(dirent => dirent.isDirectory() ? readDirRecursive(`${dirPath}/${dirent.name}`) : [`${dirPath}/${dirent.name}`]));
185
- }