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
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
6
  var _browser = require("./browser");
8
-
9
7
  Object.keys(_browser).forEach(function (key) {
10
8
  if (key === "default" || key === "__esModule") return;
11
9
  if (key in exports && exports[key] === _browser[key]) return;
@@ -16,9 +14,7 @@ Object.keys(_browser).forEach(function (key) {
16
14
  }
17
15
  });
18
16
  });
19
-
20
17
  var _selenoid = require("./selenoid");
21
-
22
18
  Object.keys(_selenoid).forEach(function (key) {
23
19
  if (key === "default" || key === "__esModule") return;
24
20
  if (key in exports && exports[key] === _selenoid[key]) return;
@@ -3,52 +3,39 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.startSelenoidStandalone = startSelenoidStandalone;
7
6
  exports.startSelenoidContainer = startSelenoidContainer;
8
-
7
+ exports.startSelenoidStandalone = startSelenoidStandalone;
9
8
  var _path = _interopRequireDefault(require("path"));
10
-
11
9
  var _util = require("util");
12
-
13
10
  var _fs = require("fs");
14
-
15
11
  var _utils = require("../utils");
16
-
17
12
  var _docker = require("../docker");
18
-
19
13
  var _core = require("@octokit/core");
20
-
21
14
  var _messages = require("../messages");
22
-
23
- var _cluster = require("cluster");
24
-
15
+ var _cluster = _interopRequireDefault(require("cluster"));
25
16
  var _shelljs = require("shelljs");
26
-
27
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
-
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
18
  const mkdirAsync = (0, _util.promisify)(_fs.mkdir);
30
19
  const writeFileAsync = (0, _util.promisify)(_fs.writeFile);
31
20
  const copyFileAsync = (0, _util.promisify)(_fs.copyFile);
32
-
33
21
  async function createSelenoidConfig(browsers, {
34
22
  useDocker
35
23
  }) {
36
24
  const selenoidConfig = {};
37
-
38
25
  const selenoidConfigDir = _path.default.join((0, _utils.getCreeveyCache)(), 'selenoid');
39
-
40
26
  browsers.forEach(({
41
27
  browserName,
42
28
  version = 'latest',
43
- dockerImage = `selenoid/${browserName}:${version}`,
29
+ browserVersion = version,
30
+ dockerImage = `selenoid/${browserName}:${browserVersion}`,
44
31
  webdriverCommand = []
45
32
  }) => {
46
33
  if (!selenoidConfig[browserName]) selenoidConfig[browserName] = {
47
- default: version,
34
+ default: browserVersion,
48
35
  versions: {}
49
36
  };
50
37
  if (!useDocker && webdriverCommand.length == 0) throw new Error('Please specify "webdriverCommand" browser option with path to browser webdriver');
51
- selenoidConfig[browserName].versions[version] = {
38
+ selenoidConfig[browserName].versions[browserVersion] = {
52
39
  image: useDocker ? dockerImage : webdriverCommand,
53
40
  port: '4444',
54
41
  path: !useDocker || ['chrome', 'opera', 'webkit', 'MicrosoftEdge'].includes(browserName) ? '/' : '/wd/hub'
@@ -60,10 +47,7 @@ async function createSelenoidConfig(browsers, {
60
47
  await writeFileAsync(_path.default.join(selenoidConfigDir, 'browsers.json'), JSON.stringify(selenoidConfig));
61
48
  return selenoidConfigDir;
62
49
  }
63
-
64
50
  async function downloadSelenoidBinary(destination) {
65
- var _assets$find;
66
-
67
51
  const platformNameMapping = {
68
52
  darwin: 'selenoid_darwin_amd64',
69
53
  linux: 'selenoid_linux_amd64',
@@ -80,56 +64,46 @@ async function downloadSelenoidBinary(destination) {
80
64
  const {
81
65
  browser_download_url: downloadUrl,
82
66
  size: binarySize
83
- } = (_assets$find = assets.find(({
67
+ } = assets.find(({
84
68
  name
85
- }) => platformNameMapping[process.platform] == name)) !== null && _assets$find !== void 0 ? _assets$find : {};
69
+ }) => platformNameMapping[process.platform] == name) ?? {};
86
70
  if ((0, _fs.existsSync)(destination) && (0, _fs.lstatSync)(destination).size == binarySize) return;
87
-
88
71
  if (!downloadUrl) {
89
72
  throw new Error(`Couldn't get download url for selenoid binary. Please download it manually from "https://github.com/aerokube/selenoid/releases/latest" and define "selenoidPath" option in the Creevey config`);
90
73
  }
91
-
92
74
  return (0, _utils.downloadBinary)(downloadUrl, destination);
93
75
  }
94
-
95
76
  async function startSelenoidStandalone(config, debug) {
96
77
  config.gridUrl = 'http://localhost:4444/wd/hub';
97
- if (_cluster.isWorker) return;
78
+ if (_cluster.default.isWorker) return;
98
79
  const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
99
80
  const selenoidConfigDir = await createSelenoidConfig(browsers, {
100
81
  useDocker: false
101
82
  });
102
-
103
83
  const binaryPath = _path.default.join(selenoidConfigDir, process.platform == 'win32' ? 'selenoid.exe' : 'selenoid');
104
-
105
84
  if (config.selenoidPath) {
106
85
  await copyFileAsync(_path.default.resolve(config.selenoidPath), binaryPath);
107
86
  } else {
108
87
  await downloadSelenoidBinary(binaryPath);
109
- } // TODO Download browser webdrivers
110
-
88
+ }
111
89
 
90
+ // TODO Download browser webdrivers
112
91
  try {
113
92
  if (process.platform != 'win32') (0, _shelljs.chmod)('+x', binaryPath);
114
93
  } catch (_) {
115
94
  /* noop */
116
95
  }
117
-
118
96
  const selenoidProcess = (0, _shelljs.exec)(`${binaryPath} -conf ./browsers.json -disable-docker`, {
119
97
  async: true,
120
98
  cwd: selenoidConfigDir
121
99
  });
122
-
123
100
  if (debug) {
124
101
  var _selenoidProcess$stdo, _selenoidProcess$stde;
125
-
126
- (_selenoidProcess$stdo = selenoidProcess.stdout) === null || _selenoidProcess$stdo === void 0 ? void 0 : _selenoidProcess$stdo.pipe(process.stdout);
127
- (_selenoidProcess$stde = selenoidProcess.stderr) === null || _selenoidProcess$stde === void 0 ? void 0 : _selenoidProcess$stde.pipe(process.stderr);
102
+ (_selenoidProcess$stdo = selenoidProcess.stdout) === null || _selenoidProcess$stdo === void 0 || _selenoidProcess$stdo.pipe(process.stdout);
103
+ (_selenoidProcess$stde = selenoidProcess.stderr) === null || _selenoidProcess$stde === void 0 || _selenoidProcess$stde.pipe(process.stderr);
128
104
  }
129
-
130
105
  (0, _messages.subscribeOn)('shutdown', () => selenoidProcess.kill());
131
106
  }
132
-
133
107
  async function startSelenoidContainer(config, debug) {
134
108
  const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
135
109
  const images = [];
@@ -137,8 +111,9 @@ async function startSelenoidContainer(config, debug) {
137
111
  browsers.forEach(({
138
112
  browserName,
139
113
  version = 'latest',
114
+ browserVersion = version,
140
115
  limit: browserLimit = 1,
141
- dockerImage = `selenoid/${browserName}:${version}`
116
+ dockerImage = `selenoid/${browserName}:${browserVersion}`
142
117
  }) => {
143
118
  limit += browserLimit;
144
119
  images.push(dockerImage);
@@ -148,13 +123,12 @@ async function startSelenoidContainer(config, debug) {
148
123
  auth: config.dockerAuth,
149
124
  platform: config.dockerImagePlatform
150
125
  };
151
-
152
126
  if (config.pullImages) {
153
127
  await (0, _docker.pullImages)([selenoidImage], pullOptions);
154
128
  await (0, _docker.pullImages)(images, pullOptions);
155
- } // TODO Allow pass custom options
156
-
129
+ }
157
130
 
131
+ // TODO Allow pass custom options
158
132
  const selenoidOptions = {
159
133
  ExposedPorts: {
160
134
  '4444/tcp': {}
@@ -6,37 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.loadTestsFromStories = loadTestsFromStories;
7
7
  exports.saveStoriesJson = saveStoriesJson;
8
8
  exports.saveTestsJson = saveTestsJson;
9
-
10
9
  var _path = _interopRequireDefault(require("path"));
11
-
12
10
  var _fs = require("fs");
13
-
14
11
  var _crypto = require("crypto");
15
-
16
12
  var _lodash = require("lodash");
17
-
18
13
  var _types = require("../types");
19
-
20
14
  var _utils = require("./utils");
21
-
22
- var _helpers = require("./storybook/helpers");
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
16
  function storyTestFabric(delay, testFn) {
27
17
  return async function storyTest() {
28
- var _testFn$call;
29
-
30
18
  delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
31
- await ((_testFn$call = testFn === null || testFn === void 0 ? void 0 : testFn.call(this)) !== null && _testFn$call !== void 0 ? _testFn$call : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
19
+ await (testFn ? testFn.call(this) : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
32
20
  imageName,
33
21
  screenshot
34
- }, index) => ({ ...screenshots,
35
- [imageName !== null && imageName !== void 0 ? imageName : `screenshot_${index}`]: screenshot
22
+ }, index) => ({
23
+ ...screenshots,
24
+ [imageName ?? `screenshot_${index}`]: screenshot
36
25
  }), {})).to.matchImages() : this.expect(await this.takeScreenshot()).to.matchImage());
37
26
  };
38
27
  }
39
-
40
28
  function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
41
29
  const {
42
30
  kind,
@@ -58,37 +46,37 @@ function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
58
46
  storyId
59
47
  };
60
48
  }
61
-
62
49
  function convertStories(browserName, stories) {
63
50
  const tests = {};
64
51
  (Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
65
- var _storyMeta$parameters;
66
-
67
52
  // TODO Skip docsOnly stories for now
68
53
  if (storyMeta.parameters.docsOnly) return;
69
54
  const {
70
55
  delay: delayParam,
71
56
  tests: storyTests,
72
57
  skip
73
- } = (_storyMeta$parameters = storyMeta.parameters.creevey) !== null && _storyMeta$parameters !== void 0 ? _storyMeta$parameters : {};
74
- const delay = typeof delayParam == 'number' ? delayParam : delayParam !== null && delayParam !== void 0 && delayParam.for.includes(browserName) ? delayParam.ms : 0; // typeof tests === "undefined" => rootSuite -> kindSuite -> storyTest -> [browsers.png]
58
+ } = storyMeta.parameters.creevey ?? {};
59
+ const delay = typeof delayParam == 'number' ? delayParam : delayParam !== null && delayParam !== void 0 && delayParam.for.includes(browserName) ? delayParam.ms : 0;
60
+
61
+ // typeof tests === "undefined" => rootSuite -> kindSuite -> storyTest -> [browsers.png]
75
62
  // typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
76
63
  // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
77
64
  // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> browser -> [images.png]
78
65
 
79
66
  if (!storyTests) {
80
67
  const test = createCreeveyTest(browserName, storyMeta, skip);
81
- tests[test.id] = { ...test,
68
+ tests[test.id] = {
69
+ ...test,
82
70
  storyId: storyMeta.id,
83
71
  story: storyMeta,
84
72
  fn: storyTestFabric(delay)
85
73
  };
86
74
  return;
87
75
  }
88
-
89
76
  Object.entries(storyTests).forEach(([testName, testFn]) => {
90
77
  const test = createCreeveyTest(browserName, storyMeta, skip, testName);
91
- tests[test.id] = { ...test,
78
+ tests[test.id] = {
79
+ ...test,
92
80
  storyId: storyMeta.id,
93
81
  story: storyMeta,
94
82
  fn: storyTestFabric(delay, testFn)
@@ -97,7 +85,6 @@ function convertStories(browserName, stories) {
97
85
  });
98
86
  return tests;
99
87
  }
100
-
101
88
  async function loadTestsFromStories(browsers, provider, update) {
102
89
  const testIdsByFiles = new Map();
103
90
  const stories = await provider(storiesByFiles => {
@@ -105,17 +92,16 @@ async function loadTestsFromStories(browsers, provider, update) {
105
92
  const tests = {};
106
93
  browsers.forEach(browser => {
107
94
  Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
108
- var _testIdsByFiles$get$f, _testIdsByFiles$get;
109
-
95
+ var _testIdsByFiles$get;
110
96
  Object.assign(tests, convertStories(browser, stories));
111
97
  const changed = Object.keys(tests);
112
- const removed = (_testIdsByFiles$get$f = (_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) !== null && _testIdsByFiles$get$f !== void 0 ? _testIdsByFiles$get$f : [];
98
+ const removed = ((_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) ?? [];
113
99
  if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
114
100
  Object.assign(testsDiff, tests);
115
101
  removed.forEach(testId => testsDiff[testId] = undefined);
116
102
  });
117
103
  });
118
- update === null || update === void 0 ? void 0 : update(testsDiff);
104
+ update === null || update === void 0 || update(testsDiff);
119
105
  });
120
106
  const tests = browsers.reduce((tests, browser) => Object.assign(tests, convertStories(browser, stories)), {});
121
107
  Object.values(tests).filter(_types.isDefined).forEach(({
@@ -125,46 +111,38 @@ async function loadTestsFromStories(browsers, provider, update) {
125
111
  fileName
126
112
  }
127
113
  }
128
- }) => {
129
- var _testIdsByFiles$get2;
130
-
131
- return (// TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
132
- testIdsByFiles.set(fileName, [...((_testIdsByFiles$get2 = testIdsByFiles.get(fileName)) !== null && _testIdsByFiles$get2 !== void 0 ? _testIdsByFiles$get2 : []), id])
133
- );
134
- });
114
+ }) =>
115
+ // TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
116
+ testIdsByFiles.set(fileName, [...(testIdsByFiles.get(fileName) ?? []), id]));
135
117
  return tests;
136
118
  }
137
-
138
119
  function saveStoriesJson(storiesData, extract) {
139
- var _storiesData$stories;
140
-
141
120
  const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
142
121
 
143
- if (!(0, _helpers.isStorybookVersionLessThan)(6)) {
144
- // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
145
- const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
146
- storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
147
-
148
- storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed)); // @ts-expect-error ignore error
149
-
150
- storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
151
- parameters: (0, _lodash.pick)(v.parameters, allowed)
152
- }));
153
- } // TODO Fix args stories
154
-
155
-
156
- (0, _utils.removeProps)(storiesData !== null && storiesData !== void 0 ? storiesData : {}, ['stories', () => true, 'parameters', '__isArgsStory']);
157
- Object.values((_storiesData$stories = storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) !== null && _storiesData$stories !== void 0 ? _storiesData$stories : {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
122
+ // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
123
+ const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
124
+ storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed);
125
+ // @ts-expect-error ignore error
126
+ storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed));
127
+ // @ts-expect-error ignore error
128
+ storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({
129
+ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
130
+ parameters: (0, _lodash.pick)(v.parameters, allowed)
131
+ }));
132
+
133
+ // TODO Fix args stories
134
+ (0, _utils.removeProps)(storiesData ?? {}, ['stories', () => true, 'parameters', '__isArgsStory']);
135
+ Object.values((storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) ?? {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
158
136
  (0, _fs.mkdirSync)(outputDir, {
159
137
  recursive: true
160
138
  });
161
139
  (0, _fs.writeFileSync)(_path.default.join(outputDir, 'stories.json'), JSON.stringify(storiesData, null, 2));
162
140
  }
163
-
164
141
  function saveTestsJson(tests, dstPath = process.cwd()) {
165
142
  (0, _fs.mkdirSync)(dstPath, {
166
143
  recursive: true
167
144
  });
168
- (0, _fs.writeFileSync)(_path.default.join(dstPath, 'tests.json'), // eslint-disable-next-line @typescript-eslint/no-unsafe-return
145
+ (0, _fs.writeFileSync)(_path.default.join(dstPath, 'tests.json'),
146
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
169
147
  JSON.stringify(tests, (_, value) => (0, _types.isFunction)(value) ? value.toString() : value, 2));
170
148
  }
@@ -3,31 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.loadStories = loadStories;
7
-
8
- var _cluster = _interopRequireWildcard(require("cluster"));
9
-
6
+ exports.loadStories = void 0;
7
+ var _cluster = _interopRequireDefault(require("cluster"));
10
8
  var _selenium = require("../../selenium");
11
-
12
9
  var _messages = require("../../messages");
13
-
14
- var _shared = require("../../../shared");
15
-
16
10
  var _types = require("../../../types");
17
-
18
11
  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) {
12
+ var _shared = require("../../../shared");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ const loadStories = async (_config, _options, storiesListener) => {
15
+ if (_cluster.default.isPrimary) {
28
16
  return new Promise(resolve => {
29
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
30
-
17
+ const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
31
18
  if (worker) {
32
19
  const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
33
20
  if (message.type == 'set') {
@@ -44,7 +31,6 @@ async function loadStories(_config, {
44
31
  type: 'get'
45
32
  });
46
33
  }
47
-
48
34
  (0, _messages.subscribeOn)('stories', message => {
49
35
  // TODO updates only one browser :(
50
36
  if (message.type == 'update') storiesListener(new Map(message.payload));
@@ -61,18 +47,18 @@ async function loadStories(_config, {
61
47
  });
62
48
  if (message.type == 'update') storiesListener(new Map(message.payload));
63
49
  });
64
- const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)(port));
50
+ const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)());
65
51
  const storiesWithOldTests = [];
66
52
  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;
53
+ var _parameters;
54
+ if ((_parameters = story.parameters) !== null && _parameters !== void 0 && (_parameters = _parameters.creevey) !== null && _parameters !== void 0 && _parameters.tests) {
55
+ var _parameters2;
56
+ (_parameters2 = story.parameters) === null || _parameters2 === void 0 || (_parameters2 = _parameters2.creevey) === null || _parameters2 === void 0 || delete _parameters2.tests;
73
57
  storiesWithOldTests.push(`${story.kind}/${story.name}`);
74
58
  }
75
59
  });
76
60
  return stories;
77
61
  }
78
- }
62
+ };
63
+ exports.loadStories = loadStories;
64
+ loadStories.providerName = 'browser';
@@ -3,82 +3,61 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.loadStories = loadStories;
7
-
6
+ exports.loadStories = void 0;
8
7
  var _chokidar = _interopRequireDefault(require("chokidar"));
9
-
10
8
  var _browser = require("./browser");
11
-
12
9
  var _logger = require("../../logger");
13
-
14
10
  var _parser = _interopRequireDefault(require("../../testsFiles/parser"));
15
-
16
11
  var _utils = require("../../../server/utils");
17
-
18
12
  var _shared = require("../../../shared");
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
- async function loadStories(_config, {
27
- port
28
- }, storiesListener) {
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ const loadStories = async (_config, _options, storiesListener) => {
29
17
  let creeveyParamsByStoryId = {};
30
-
31
18
  const mergeParamsFromTestsToStory = (story, creeveyParams) => {
32
19
  if (story.parameters) {
33
20
  story.parameters.creevey = (0, _shared.combineParameters)(story.parameters.creevey || {}, creeveyParams);
34
21
  }
35
22
  };
36
-
37
- const stories = await (0, _browser.loadStories)(_config, {
38
- port
39
- }, updatedStoriesByFiles => {
23
+ const stories = await (0, _browser.loadStories)(_config, {}, updatedStoriesByFiles => {
40
24
  Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
41
25
  storiesArray.forEach(story => {
42
26
  const creeveyParams = creeveyParamsByStoryId[story.id];
43
-
44
27
  if (creeveyParams) {
45
28
  mergeParamsFromTestsToStory(story, creeveyParams);
46
29
  }
47
30
  });
48
31
  });
49
32
  storiesListener(updatedStoriesByFiles);
50
- }); // TODO fix test files hot reloading
33
+ });
51
34
 
52
- creeveyParamsByStoryId = await parseParams(_config
53
- /*, (data) => console.log(data) */
54
- );
35
+ // TODO fix test files hot reloading
36
+ creeveyParamsByStoryId = await parseParams(_config /*, (data) => console.log(data) */);
55
37
  Object.entries(stories).forEach(([storyId, story]) => {
56
38
  mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
57
39
  });
58
40
  return stories;
59
- }
60
-
41
+ };
42
+ exports.loadStories = loadStories;
61
43
  async function parseParams(config, listener) {
62
44
  if (!config.testsDir) {
63
45
  return Promise.resolve({});
64
46
  }
65
-
66
47
  const testFiles = (0, _utils.readDirRecursive)(config.testsDir).filter(file => {
67
48
  var _config$testsRegex;
68
-
69
49
  return (_config$testsRegex = config.testsRegex) === null || _config$testsRegex === void 0 ? void 0 : _config$testsRegex.test(file);
70
50
  });
71
51
  await (await Promise.resolve().then(() => _interopRequireWildcard(require('../../testsFiles/register')))).default(config);
72
-
73
52
  if (listener) {
74
53
  _chokidar.default.watch(testFiles).on('change', filePath => {
75
- _logger.logger.debug(`changed: ${filePath}`); // doesn't work, always returns {} due modules caching
76
- // see https://github.com/nodejs/modules/issues/307
77
-
54
+ _logger.logger.debug(`changed: ${filePath}`);
78
55
 
56
+ // doesn't work, always returns {} due modules caching
57
+ // see https://github.com/nodejs/modules/issues/307
79
58
  void (0, _parser.default)(testFiles).then(data => listener(data));
80
59
  });
81
60
  }
82
-
83
61
  return (0, _parser.default)(testFiles);
84
- }
62
+ }
63
+ loadStories.providerName = 'hybrid';