testeranto 0.74.0 → 0.79.0

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 (257) hide show
  1. package/.eslintrc.js +5 -2
  2. package/Bundle.Dockerfile +52 -0
  3. package/README.md +25 -24
  4. package/build-tests.ts +16 -0
  5. package/dist/common/build-tests.js +38 -0
  6. package/dist/common/init-docs.js +8 -0
  7. package/dist/common/run-tests.js +34 -0
  8. package/dist/common/src/Aider.js +96 -0
  9. package/dist/common/src/Init.js +10 -0
  10. package/dist/common/{Node.js → src/Node.js} +1 -0
  11. package/dist/common/src/PM/index.js +7 -0
  12. package/dist/common/{PM → src/PM}/main.js +287 -10
  13. package/dist/common/{PM → src/PM}/node.js +4 -0
  14. package/dist/common/{PM → src/PM}/web.js +3 -0
  15. package/dist/common/{Project.js → src/Project.js} +15 -57
  16. package/dist/common/{Puppeteer.js → src/Puppeteer.js} +65 -26
  17. package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/web.js +5 -25
  18. package/dist/common/src/SubPackages/react-dom/jsx/web.js +117 -0
  19. package/dist/common/{SubPackages/react-test-renderer/component/index.js → src/SubPackages/react-test-renderer/component/interface.js} +0 -20
  20. package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +2 -2
  21. package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +2 -2
  22. package/dist/common/{Types.js → src/Types.js} +0 -2
  23. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/index.js +1 -0
  24. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +52 -0
  25. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/node.js +5 -1
  26. package/dist/common/src/esbuildConfigs/report.js +14 -0
  27. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/web.js +3 -1
  28. package/dist/common/src/lib/abstractBase.js +581 -0
  29. package/dist/common/{lib → src/lib}/basebuilder.js +12 -38
  30. package/dist/common/{lib → src/lib}/classBuilder.js +1 -3
  31. package/dist/common/{lib → src/lib}/core.js +3 -5
  32. package/dist/common/src/lib/types.js +2 -0
  33. package/dist/common/src/utils.js +16 -0
  34. package/dist/common/testeranto.js +15 -0
  35. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  36. package/dist/module/build-tests.js +10 -0
  37. package/dist/module/init-docs.js +3 -0
  38. package/dist/module/run-tests.js +6 -0
  39. package/dist/module/src/Aider.js +89 -0
  40. package/dist/module/src/Init.js +5 -0
  41. package/dist/module/{Node.js → src/Node.js} +1 -0
  42. package/dist/module/src/PM/index.js +3 -0
  43. package/dist/module/src/PM/main.js +617 -0
  44. package/dist/module/{PM → src/PM}/node.js +4 -0
  45. package/dist/module/{PM → src/PM}/web.js +3 -0
  46. package/dist/module/{Project.js → src/Project.js} +15 -57
  47. package/dist/module/{Puppeteer.js → src/Puppeteer.js} +65 -26
  48. package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/web.js +5 -25
  49. package/dist/module/src/SubPackages/react-dom/jsx/web.js +89 -0
  50. package/dist/module/{SubPackages/react-test-renderer/component/index.js → src/SubPackages/react-test-renderer/component/interface.js} +0 -20
  51. package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +1 -1
  52. package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +1 -1
  53. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/index.js +1 -0
  54. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +47 -0
  55. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/node.js +5 -1
  56. package/dist/module/src/esbuildConfigs/report.js +14 -0
  57. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/web.js +3 -1
  58. package/dist/module/src/lib/abstractBase.js +573 -0
  59. package/dist/module/{lib → src/lib}/basebuilder.js +12 -38
  60. package/dist/module/{lib → src/lib}/classBuilder.js +1 -3
  61. package/dist/module/{lib → src/lib}/core.js +3 -5
  62. package/dist/module/src/utils.js +9 -0
  63. package/dist/module/testeranto.js +13 -0
  64. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  65. package/dist/types/build-tests.d.ts +3 -0
  66. package/dist/types/init-docs.d.ts +2 -0
  67. package/dist/types/run-tests.d.ts +2 -0
  68. package/dist/types/src/Aider.d.ts +1 -0
  69. package/dist/types/src/Init.d.ts +2 -0
  70. package/dist/types/src/Node.d.ts +6 -0
  71. package/dist/types/{PM → src/PM}/index.d.ts +3 -2
  72. package/dist/types/{PM → src/PM}/main.d.ts +8 -3
  73. package/dist/types/{PM → src/PM}/node.d.ts +2 -0
  74. package/dist/types/{PM → src/PM}/web.d.ts +1 -0
  75. package/dist/types/{Project.d.ts → src/Project.d.ts} +1 -1
  76. package/dist/types/src/Puppeteer.d.ts +2 -0
  77. package/dist/types/src/SubPackages/puppeteer.d.ts +6 -0
  78. package/dist/types/{SubPackages → src/SubPackages}/react/component/node.d.ts +1 -1
  79. package/dist/types/{SubPackages → src/SubPackages}/react/component/web.d.ts +1 -1
  80. package/dist/types/src/SubPackages/react/jsx/node.d.ts +4 -0
  81. package/dist/types/src/SubPackages/react/jsx/web.d.ts +4 -0
  82. package/dist/types/{SubPackages → src/SubPackages}/react-dom/component/node.d.ts +2 -2
  83. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +11 -0
  84. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +6 -0
  85. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +5 -0
  86. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  87. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/index.d.ts +0 -7
  88. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +9 -0
  89. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/node.d.ts +1 -2
  90. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +3 -0
  91. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.d.ts +1 -1
  92. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.d.ts +1 -1
  93. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.d.ts +1 -2
  94. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.d.ts +1 -2
  95. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +4 -0
  96. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +4 -0
  97. package/dist/types/src/Types.d.ts +51 -0
  98. package/dist/types/src/Web.d.ts +6 -0
  99. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +5 -0
  100. package/dist/types/{lib → src/lib}/abstractBase.d.ts +8 -8
  101. package/dist/types/{lib → src/lib}/basebuilder.d.ts +1 -1
  102. package/dist/types/{lib → src/lib}/classBuilder.d.ts +1 -1
  103. package/dist/types/{lib → src/lib}/core.d.ts +1 -1
  104. package/dist/types/{lib → src/lib}/index.d.ts +5 -5
  105. package/dist/types/{lib → src/lib}/types.d.ts +15 -15
  106. package/dist/types/src/utils.d.ts +2 -0
  107. package/dist/types/testeranto.d.ts +16 -0
  108. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  109. package/docker-compose.yml +37 -0
  110. package/init-docs.ts +5 -0
  111. package/package.json +72 -25
  112. package/run-tests.ts +9 -0
  113. package/src/Aider.ts +125 -0
  114. package/src/Init.ts +20 -0
  115. package/src/Node.ts +31 -2
  116. package/src/PM/index.ts +7 -84
  117. package/src/PM/main.ts +400 -16
  118. package/src/PM/node.ts +6 -0
  119. package/src/PM/web.ts +4 -0
  120. package/src/Project.ts +33 -84
  121. package/src/Puppeteer.ts +115 -62
  122. package/src/SubPackages/react-dom/component/web.ts +10 -30
  123. package/src/SubPackages/react-dom/jsx/web.ts +110 -76
  124. package/src/SubPackages/react-test-renderer/component/index.ts +0 -66
  125. package/src/SubPackages/react-test-renderer/component/interface.ts +48 -0
  126. package/src/SubPackages/react-test-renderer/component/node.ts +2 -1
  127. package/src/SubPackages/react-test-renderer/component/web.ts +2 -1
  128. package/src/Types.ts +138 -29
  129. package/src/Web.ts +32 -2
  130. package/src/esbuildConfigs/index.ts +1 -0
  131. package/src/esbuildConfigs/inputFilesPlugin.ts +67 -0
  132. package/src/esbuildConfigs/node.ts +4 -2
  133. package/src/esbuildConfigs/report.ts +13 -13
  134. package/src/esbuildConfigs/web.ts +4 -0
  135. package/src/lib/abstractBase.ts +366 -36
  136. package/src/lib/basebuilder.ts +26 -52
  137. package/src/lib/classBuilder.ts +14 -2
  138. package/src/lib/core.ts +18 -7
  139. package/src/lib/index.ts +115 -7
  140. package/src/lib/types.ts +143 -37
  141. package/src/utils.ts +15 -0
  142. package/testeranto.ts +13 -0
  143. package/tsconfig.common.json +12 -4
  144. package/tsconfig.json +9 -3
  145. package/tsconfig.module.json +2 -3
  146. package/tsconfig.types.json +1 -2
  147. package/dist/common/Features.js +0 -84
  148. package/dist/common/PM/index.js +0 -71
  149. package/dist/common/Reporter.js +0 -119
  150. package/dist/common/Scheduler.js +0 -1
  151. package/dist/common/SubPackages/react-dom/jsx/web.js +0 -93
  152. package/dist/common/esbuildConfigs/report.js +0 -13
  153. package/dist/common/lib/abstractBase.js +0 -348
  154. package/dist/common/preload.js +0 -15
  155. package/dist/common/report.html.js +0 -31
  156. package/dist/module/Features.js +0 -73
  157. package/dist/module/PM/index.js +0 -67
  158. package/dist/module/PM/main.js +0 -340
  159. package/dist/module/Reporter.js +0 -114
  160. package/dist/module/Scheduler.js +0 -1
  161. package/dist/module/SubPackages/react-dom/jsx/web.js +0 -65
  162. package/dist/module/Types.js +0 -3
  163. package/dist/module/esbuildConfigs/report.js +0 -11
  164. package/dist/module/lib/abstractBase.js +0 -340
  165. package/dist/module/preload.js +0 -15
  166. package/dist/module/report.html.js +0 -29
  167. package/dist/prebuild/Report.css +0 -11358
  168. package/dist/prebuild/Report.js +0 -37585
  169. package/dist/types/Features.d.ts +0 -68
  170. package/dist/types/Node.d.ts +0 -6
  171. package/dist/types/SubPackages/puppeteer.d.ts +0 -6
  172. package/dist/types/SubPackages/react/jsx/node.d.ts +0 -4
  173. package/dist/types/SubPackages/react/jsx/web.d.ts +0 -4
  174. package/dist/types/SubPackages/react-dom/component/web.d.ts +0 -5
  175. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +0 -6
  176. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +0 -5
  177. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -5
  178. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  179. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  180. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  181. package/dist/types/Types.d.ts +0 -50
  182. package/dist/types/Web.d.ts +0 -6
  183. package/dist/types/esbuildConfigs/report.d.ts +0 -4
  184. package/dist/types/preload.d.ts +0 -0
  185. package/dist/types/report.html.d.ts +0 -2
  186. package/electronBuild.ts +0 -32
  187. package/src/Features.ts +0 -118
  188. package/src/Report.tsx +0 -521
  189. package/src/Reporter.ts +0 -134
  190. package/src/Scheduler.ts +0 -0
  191. package/src/preload.ts +0 -17
  192. package/src/report.html.ts +0 -29
  193. package/tests/Rectangle.test.ts +0 -189
  194. /package/dist/common/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  195. /package/dist/common/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  196. /package/dist/common/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  197. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  198. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  199. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  200. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  201. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  202. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  203. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  204. /package/dist/common/{lib/types.js → src/SubPackages/react-test-renderer/component/index.js} +0 -0
  205. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  206. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  207. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.js +0 -0
  208. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  209. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  210. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  211. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  212. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  213. /package/dist/common/{Web.js → src/Web.js} +0 -0
  214. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  215. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  216. /package/dist/common/{lib → src/lib}/index.js +0 -0
  217. /package/dist/common/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  218. /package/dist/common/{web.html.js → src/web.html.js} +0 -0
  219. /package/dist/module/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  220. /package/dist/module/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  221. /package/dist/module/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  222. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  223. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  224. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  225. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  226. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  227. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  228. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  229. /package/dist/module/{lib/types.js → src/SubPackages/react-test-renderer/component/index.js} +0 -0
  230. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  231. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  232. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.js +0 -0
  233. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  234. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  235. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  236. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  237. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  238. /package/dist/{types/Puppeteer.d.ts → module/src/Types.js} +0 -0
  239. /package/dist/module/{Web.js → src/Web.js} +0 -0
  240. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  241. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  242. /package/dist/module/{lib → src/lib}/index.js +0 -0
  243. /package/dist/{types/Reporter.d.ts → module/src/lib/types.js} +0 -0
  244. /package/dist/module/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  245. /package/dist/module/{web.html.js → src/web.html.js} +0 -0
  246. /package/dist/types/{SubPackages → src/SubPackages}/react/jsx/index.d.ts +0 -0
  247. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/jsx/index.d.ts +0 -0
  248. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.d.ts +0 -0
  249. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.d.ts +0 -0
  250. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/features.d.ts +0 -0
  251. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/index.d.ts +0 -0
  252. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/node.d.ts +0 -0
  253. /package/dist/types/{Scheduler.d.ts → src/esbuildConfigs/report.d.ts} +0 -0
  254. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/tests.d.ts +0 -0
  255. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/web.d.ts +0 -0
  256. /package/dist/types/{puppeteerConfiger.d.ts → src/puppeteerConfiger.d.ts} +0 -0
  257. /package/dist/types/{web.html.d.ts → src/web.html.d.ts} +0 -0
@@ -0,0 +1,617 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import puppeteer from "puppeteer-core";
4
+ import { PM } from "./index.js";
5
+ import { destinationOfRuntime } from "../utils.js";
6
+ const fPaths = [];
7
+ const fileStreams3 = [];
8
+ const files = {}; // = new Set<string>();
9
+ const screenshots = {};
10
+ export class PM_Main extends PM {
11
+ constructor(configs) {
12
+ super();
13
+ this.launchNode = async (src, dest) => {
14
+ console.log("launchNode", src);
15
+ const destFolder = dest.replace(".mjs", "");
16
+ let argz = "";
17
+ const testConfig = this.configs.tests.find((t) => {
18
+ return t[0] === src;
19
+ });
20
+ if (!testConfig) {
21
+ console.error("missing test config");
22
+ process.exit(-1);
23
+ }
24
+ const testConfigResource = testConfig[2];
25
+ let portsToUse = [];
26
+ if (testConfigResource.ports === 0) {
27
+ argz = JSON.stringify({
28
+ scheduled: true,
29
+ name: src,
30
+ ports: portsToUse,
31
+ fs: destFolder,
32
+ browserWSEndpoint: this.browser.wsEndpoint(),
33
+ });
34
+ }
35
+ else if (testConfigResource.ports > 0) {
36
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
37
+ console.log("openPorts", openPorts);
38
+ if (openPorts.length >= testConfigResource.ports) {
39
+ for (let i = 0; i < testConfigResource.ports; i++) {
40
+ portsToUse.push(openPorts[i][0]);
41
+ this.ports[openPorts[i][0]] = false; // port is now closed
42
+ }
43
+ argz = JSON.stringify({
44
+ scheduled: true,
45
+ name: src,
46
+ // ports: [3333],
47
+ ports: portsToUse,
48
+ fs: destFolder,
49
+ browserWSEndpoint: this.browser.wsEndpoint(),
50
+ });
51
+ }
52
+ else {
53
+ this.queue.push(src);
54
+ return;
55
+ }
56
+ }
57
+ else {
58
+ console.error("negative port makes no sense", src);
59
+ process.exit(-1);
60
+ }
61
+ const builtfile = dest + ".mjs";
62
+ await Promise.all(testConfig[3].map((sidecar) => {
63
+ if (sidecar[1] === "web") {
64
+ return this.launchWebSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "web", this.configs), sidecar);
65
+ }
66
+ if (sidecar[1] === "node") {
67
+ return this.launchNodeSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "node", this.configs), sidecar);
68
+ }
69
+ }));
70
+ this.server[builtfile] = await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
71
+ return module.default.then((defaultModule) => {
72
+ defaultModule
73
+ .receiveTestResourceConfig(argz)
74
+ .then((x) => {
75
+ console.log("then", x);
76
+ return x;
77
+ })
78
+ .catch((e) => {
79
+ console.log("catch", e);
80
+ });
81
+ });
82
+ });
83
+ console.log("portsToUse", portsToUse);
84
+ for (let i = 0; i <= portsToUse.length; i++) {
85
+ if (portsToUse[i]) {
86
+ this.ports[portsToUse[i]] = "true"; //port is open again
87
+ }
88
+ }
89
+ };
90
+ this.launchWebSideCar = async (src, dest, testConfig) => {
91
+ const d = dest + ".mjs";
92
+ console.log("launchWebSideCar", src, dest, d);
93
+ const destFolder = dest.replace(".mjs", "");
94
+ const webArgz = JSON.stringify({
95
+ name: dest,
96
+ ports: [].toString(),
97
+ fs: destFolder,
98
+ browserWSEndpoint: this.browser.wsEndpoint(),
99
+ });
100
+ const evaluation = `
101
+ console.log("importing ${dest}.mjs");
102
+ import('${dest}.mjs').then(async (x) => {
103
+ console.log("imported", x.default);
104
+ })`;
105
+ const fileStreams2 = [];
106
+ const doneFileStream2 = [];
107
+ return new Promise((res, rej) => {
108
+ this.browser
109
+ .newPage()
110
+ .then((page) => {
111
+ page.on("console", (msg) => {
112
+ console.log("web > ", msg.args(), msg.text());
113
+ // for (let i = 0; i < msg._args.length; ++i)
114
+ // console.log(`${i}: ${msg._args[i]}`);
115
+ });
116
+ page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
117
+ console.log("main.ts browser custom-screenshot", testName);
118
+ const p = ssOpts.path;
119
+ const dir = path.dirname(p);
120
+ fs.mkdirSync(dir, {
121
+ recursive: true,
122
+ });
123
+ files[testName].add(ssOpts.path);
124
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
125
+ if (!screenshots[testName]) {
126
+ screenshots[testName] = [];
127
+ }
128
+ screenshots[testName].push(sPromise);
129
+ // sPromise.then(())
130
+ await sPromise;
131
+ return sPromise;
132
+ // page.evaluate(`window["screenshot done"]`);
133
+ });
134
+ page.exposeFunction("writeFileSync", (fp, contents, testName) => {
135
+ const dir = path.dirname(fp);
136
+ fs.mkdirSync(dir, {
137
+ recursive: true,
138
+ });
139
+ const p = new Promise(async (res, rej) => {
140
+ fs.writeFileSync(fp, contents);
141
+ res(fp);
142
+ });
143
+ doneFileStream2.push(p);
144
+ if (!files[testName]) {
145
+ files[testName] = new Set();
146
+ }
147
+ files[testName].add(fp);
148
+ return p;
149
+ });
150
+ page.exposeFunction("existsSync", (fp, contents) => {
151
+ return fs.existsSync(fp);
152
+ });
153
+ page.exposeFunction("mkdirSync", (fp) => {
154
+ if (!fs.existsSync(fp)) {
155
+ return fs.mkdirSync(fp, {
156
+ recursive: true,
157
+ });
158
+ }
159
+ return false;
160
+ });
161
+ page.exposeFunction("createWriteStream", (fp, testName) => {
162
+ const f = fs.createWriteStream(fp);
163
+ if (!files[testName]) {
164
+ files[testName] = new Set();
165
+ }
166
+ files[testName].add(fp);
167
+ const p = new Promise((res, rej) => {
168
+ res(fp);
169
+ });
170
+ doneFileStream2.push(p);
171
+ f.on("close", async () => {
172
+ await p;
173
+ });
174
+ fileStreams2.push(f);
175
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
176
+ });
177
+ page.exposeFunction("write", async (uid, contents) => {
178
+ return fileStreams2[uid].write(contents);
179
+ });
180
+ page.exposeFunction("end", async (uid) => {
181
+ return fileStreams2[uid].end();
182
+ });
183
+ page.exposeFunction("customclose", (p, testName) => {
184
+ fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
185
+ delete files[testName];
186
+ Promise.all(screenshots[testName] || []).then(() => {
187
+ delete screenshots[testName];
188
+ page.close();
189
+ });
190
+ // globalThis["writeFileSync"](
191
+ // p + "/manifest.json",
192
+ // // files.entries()
193
+ // JSON.stringify(Array.from(files[testName]))
194
+ // );
195
+ // console.log("closing doneFileStream2", doneFileStream2);
196
+ // console.log("closing doneFileStream2", doneFileStream2);
197
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
198
+ // page.close();
199
+ // });
200
+ // Promise.all(screenshots).then(() => {
201
+ // page.close();
202
+ // });
203
+ // setTimeout(() => {
204
+ // console.log("Delayed for 1 second.");
205
+ // page.close();
206
+ // }, 5000);
207
+ // return page.close();
208
+ });
209
+ return page;
210
+ })
211
+ .then(async (page) => {
212
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
213
+ await page.goto(`file://${`${dest}.html`}`, {});
214
+ res(page);
215
+ // page.evaluate(evaluation).finally(() => {
216
+ // console.log("evaluation failed.", dest);
217
+ // });
218
+ // return page;
219
+ });
220
+ });
221
+ };
222
+ // launchNodeSideCar = async (src: string, dest: string) => {};
223
+ this.launchNodeSideCar = async (src, dest, testConfig) => {
224
+ const d = dest + ".mjs";
225
+ console.log("launchNodeSideCar", src, dest, d);
226
+ const destFolder = dest.replace(".mjs", "");
227
+ let argz = "";
228
+ // const testConfig = this.configs.tests.find((t) => {
229
+ // return t[0] === src;
230
+ // });
231
+ // if (!testConfig) {
232
+ // console.error("missing test config");
233
+ // process.exit(-1);
234
+ // }
235
+ const testConfigResource = testConfig[2];
236
+ let portsToUse = [];
237
+ if (testConfigResource.ports === 0) {
238
+ argz = JSON.stringify({
239
+ scheduled: true,
240
+ name: src,
241
+ ports: portsToUse,
242
+ fs: destFolder,
243
+ browserWSEndpoint: this.browser.wsEndpoint(),
244
+ });
245
+ }
246
+ else if (testConfigResource.ports > 0) {
247
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
248
+ console.log("openPorts", openPorts);
249
+ if (openPorts.length >= testConfigResource.ports) {
250
+ for (let i = 0; i < testConfigResource.ports; i++) {
251
+ portsToUse.push(openPorts[i][0]);
252
+ this.ports[openPorts[i][0]] = false; // port is now closed
253
+ }
254
+ argz = JSON.stringify({
255
+ scheduled: true,
256
+ name: src,
257
+ // ports: [3333],
258
+ ports: portsToUse,
259
+ fs: ".",
260
+ browserWSEndpoint: this.browser.wsEndpoint(),
261
+ });
262
+ }
263
+ else {
264
+ this.queue.push(src);
265
+ return;
266
+ }
267
+ }
268
+ else {
269
+ console.error("negative port makes no sense", src);
270
+ process.exit(-1);
271
+ }
272
+ const builtfile = dest + ".mjs";
273
+ // console.log(
274
+ // "node builtfile",
275
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
276
+ // );
277
+ this.server[builtfile] = await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
278
+ return module.default.then((defaultModule) => {
279
+ console.log("defaultModule", defaultModule);
280
+ const s = new defaultModule();
281
+ s.receiveTestResourceConfig(argz);
282
+ // Object.create(defaultModule);
283
+ // defaultModule
284
+ // .receiveTestResourceConfig(argz)
285
+ // .then((x) => {
286
+ // console.log("then", x);
287
+ // return x;
288
+ // })
289
+ // .catch((e) => {
290
+ // console.log("catch", e);
291
+ // });
292
+ });
293
+ });
294
+ console.log("portsToUse", portsToUse);
295
+ for (let i = 0; i <= portsToUse.length; i++) {
296
+ if (portsToUse[i]) {
297
+ this.ports[portsToUse[i]] = "true"; //port is open again
298
+ }
299
+ }
300
+ };
301
+ this.launchWeb = (t, dest, sidecars) => {
302
+ console.log("launchWeb", t, dest);
303
+ sidecars.map((sidecar) => {
304
+ if (sidecar[1] === "node") {
305
+ return this.launchNodeSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "node", this.configs), sidecar);
306
+ }
307
+ });
308
+ const destFolder = dest.replace(".mjs", "");
309
+ const webArgz = JSON.stringify({
310
+ name: dest,
311
+ ports: [].toString(),
312
+ fs: destFolder,
313
+ browserWSEndpoint: this.browser.wsEndpoint(),
314
+ });
315
+ const evaluation = `
316
+ console.log("importing ${dest}.mjs");
317
+ import('${dest}.mjs').then(async (x) => {
318
+ console.log("imported", x.default);
319
+ try {
320
+ await (await x.default).receiveTestResourceConfig(${webArgz})
321
+ } catch (e) {
322
+ console.log("fail", e)
323
+ }
324
+ })`;
325
+ const fileStreams2 = [];
326
+ const doneFileStream2 = [];
327
+ this.browser
328
+ .newPage()
329
+ .then((page) => {
330
+ page.on("console", (msg) => {
331
+ console.log("web > ", msg.args(), msg.text());
332
+ // for (let i = 0; i < msg._args.length; ++i)
333
+ // console.log(`${i}: ${msg._args[i]}`);
334
+ });
335
+ page.exposeFunction("customScreenShot", async (ssOpts, testName) => {
336
+ console.log("main.ts browser custom-screenshot", testName);
337
+ const p = ssOpts.path;
338
+ const dir = path.dirname(p);
339
+ fs.mkdirSync(dir, {
340
+ recursive: true,
341
+ });
342
+ if (!files[testName]) {
343
+ files[testName] = new Set();
344
+ }
345
+ files[testName].add(ssOpts.path);
346
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
347
+ if (!screenshots[testName]) {
348
+ screenshots[testName] = [];
349
+ }
350
+ screenshots[testName].push(sPromise);
351
+ // sPromise.then(())
352
+ await sPromise;
353
+ return sPromise;
354
+ // page.evaluate(`window["screenshot done"]`);
355
+ });
356
+ page.exposeFunction("writeFileSync", (fp, contents, testName) => {
357
+ const dir = path.dirname(fp);
358
+ fs.mkdirSync(dir, {
359
+ recursive: true,
360
+ });
361
+ const p = new Promise(async (res, rej) => {
362
+ fs.writeFileSync(fp, contents);
363
+ res(fp);
364
+ });
365
+ doneFileStream2.push(p);
366
+ if (!files[testName]) {
367
+ files[testName] = new Set();
368
+ }
369
+ files[testName].add(fp);
370
+ return p;
371
+ });
372
+ page.exposeFunction("existsSync", (fp, contents) => {
373
+ return fs.existsSync(fp);
374
+ });
375
+ page.exposeFunction("mkdirSync", (fp) => {
376
+ if (!fs.existsSync(fp)) {
377
+ return fs.mkdirSync(fp, {
378
+ recursive: true,
379
+ });
380
+ }
381
+ return false;
382
+ });
383
+ page.exposeFunction("createWriteStream", (fp, testName) => {
384
+ const f = fs.createWriteStream(fp);
385
+ if (!files[testName]) {
386
+ files[testName] = new Set();
387
+ }
388
+ files[testName].add(fp);
389
+ const p = new Promise((res, rej) => {
390
+ res(fp);
391
+ });
392
+ doneFileStream2.push(p);
393
+ f.on("close", async () => {
394
+ await p;
395
+ });
396
+ fileStreams2.push(f);
397
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
398
+ });
399
+ page.exposeFunction("write", async (uid, contents) => {
400
+ return fileStreams2[uid].write(contents);
401
+ });
402
+ page.exposeFunction("end", async (uid) => {
403
+ return fileStreams2[uid].end();
404
+ });
405
+ page.exposeFunction("customclose", (p, testName) => {
406
+ console.log("\t closing", p);
407
+ fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
408
+ delete files[testName];
409
+ Promise.all(screenshots[testName] || []).then(() => {
410
+ delete screenshots[testName];
411
+ // page.close();
412
+ });
413
+ // globalThis["writeFileSync"](
414
+ // p + "/manifest.json",
415
+ // // files.entries()
416
+ // JSON.stringify(Array.from(files[testName]))
417
+ // );
418
+ // console.log("closing doneFileStream2", doneFileStream2);
419
+ // console.log("closing doneFileStream2", doneFileStream2);
420
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
421
+ // page.close();
422
+ // });
423
+ // Promise.all(screenshots).then(() => {
424
+ // page.close();
425
+ // });
426
+ // setTimeout(() => {
427
+ // console.log("Delayed for 1 second.");
428
+ // page.close();
429
+ // }, 5000);
430
+ // return page.close();
431
+ });
432
+ return page;
433
+ })
434
+ .then(async (page) => {
435
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
436
+ await page.goto(`file://${`${dest}.html`}`, {});
437
+ page
438
+ .evaluate(evaluation)
439
+ .catch((e) => {
440
+ console.log("evaluation failed.", dest);
441
+ console.log(e);
442
+ })
443
+ .finally(() => {
444
+ console.log("evaluation complete.", dest);
445
+ });
446
+ return page;
447
+ });
448
+ };
449
+ this.server = {};
450
+ this.configs = configs;
451
+ this.ports = {};
452
+ this.configs.ports.forEach((element) => {
453
+ this.ports[element] = "true"; // set ports as open
454
+ });
455
+ globalThis["mkdirSync"] = (fp) => {
456
+ if (!fs.existsSync(fp)) {
457
+ return fs.mkdirSync(fp, {
458
+ recursive: true,
459
+ });
460
+ }
461
+ return false;
462
+ };
463
+ globalThis["writeFileSync"] = (filepath, contents, testName) => {
464
+ console.log("globalThis-writeFileSync", filepath);
465
+ // Create directories if they don't exist
466
+ const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
467
+ fs.mkdirSync(dir, {
468
+ recursive: true,
469
+ });
470
+ if (!files[testName]) {
471
+ files[testName] = new Set();
472
+ }
473
+ files[testName].add(filepath);
474
+ return fs.writeFileSync(filepath, contents);
475
+ };
476
+ globalThis["createWriteStream"] = (filepath, testName) => {
477
+ const f = fs.createWriteStream(filepath);
478
+ fileStreams3.push(f);
479
+ // files.add(filepath);
480
+ if (!files[testName]) {
481
+ files[testName] = new Set();
482
+ }
483
+ files[testName].add(filepath);
484
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams3.length - 1 });
485
+ };
486
+ globalThis["write"] = (uid, contents) => {
487
+ fileStreams3[uid].write(contents);
488
+ };
489
+ globalThis["end"] = (uid) => {
490
+ fileStreams3[uid].end();
491
+ };
492
+ globalThis["customScreenShot"] = async (opts, page) => {
493
+ // // fileStreams3[uid].write(contents);
494
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
495
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
496
+ // // console.log("dir", dir);
497
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
498
+ // recursive: true,
499
+ // });
500
+ // return page.screenshot(opts);
501
+ console.log("main.ts node custom-screenshot", page);
502
+ const p = opts.path;
503
+ const dir = path.dirname(p);
504
+ fs.mkdirSync(dir, {
505
+ recursive: true,
506
+ });
507
+ if (!files[opts.path]) {
508
+ files[opts.path] = new Set();
509
+ }
510
+ files[opts.path].add(opts.path);
511
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, opts), { path: p }));
512
+ if (!screenshots[opts.path]) {
513
+ screenshots[opts.path] = [];
514
+ }
515
+ screenshots[opts.path].push(sPromise);
516
+ await sPromise;
517
+ return sPromise;
518
+ };
519
+ globalThis["customclose"] = (p, testName) => {
520
+ if (!files[testName]) {
521
+ files[testName] = new Set();
522
+ }
523
+ fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
524
+ delete files[testName];
525
+ // globalThis["writeFileSync"](
526
+ // p + "/manifest.json",
527
+ // // files.entries()
528
+ // JSON.stringify(Array.from(files[testName]))
529
+ // );
530
+ // fileStreams3[uid].end();
531
+ };
532
+ // page.exposeFunction("customclose", () => {
533
+ // console.log("closing doneFileStream2", doneFileStream2);
534
+ // // console.log("closing doneFileStream2", doneFileStream2);
535
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
536
+ // page.close();
537
+ // });
538
+ // // page.close();
539
+ // // Promise.all(screenshots).then(() => {
540
+ // // page.close();
541
+ // // });
542
+ // // setTimeout(() => {
543
+ // // console.log("Delayed for 1 second.");
544
+ // // page.close();
545
+ // // }, 5000);
546
+ // // return page.close();
547
+ // });
548
+ }
549
+ customScreenShot(opts) {
550
+ throw new Error("Method not implemented.");
551
+ }
552
+ async startPuppeteer(options, destfolder) {
553
+ this.browser = (await puppeteer.launch(options));
554
+ return this.browser;
555
+ }
556
+ end(accessObject) {
557
+ throw new Error("Method not implemented.");
558
+ }
559
+ existsSync(destFolder) {
560
+ return fs.existsSync(destFolder);
561
+ }
562
+ async mkdirSync(fp) {
563
+ if (!fs.existsSync(fp)) {
564
+ return fs.mkdirSync(fp, {
565
+ recursive: true,
566
+ });
567
+ }
568
+ return false;
569
+ }
570
+ writeFileSync(fp, contents) {
571
+ fs.writeFileSync(fp, contents);
572
+ }
573
+ createWriteStream(filepath) {
574
+ return fs.createWriteStream(filepath);
575
+ }
576
+ testArtiFactoryfileWriter(tLog, callback) {
577
+ return (fPath, value) => {
578
+ callback(new Promise((res, rej) => {
579
+ tLog("testArtiFactory =>", fPath);
580
+ const cleanPath = path.resolve(fPath);
581
+ fPaths.push(cleanPath.replace(process.cwd(), ``));
582
+ const targetDir = cleanPath.split("/").slice(0, -1).join("/");
583
+ fs.mkdir(targetDir, { recursive: true }, async (error) => {
584
+ if (error) {
585
+ console.error(`❗️testArtiFactory failed`, targetDir, error);
586
+ }
587
+ fs.writeFileSync(path.resolve(targetDir.split("/").slice(0, -1).join("/"), "manifest"), fPaths.join(`\n`), {
588
+ encoding: "utf-8",
589
+ });
590
+ if (Buffer.isBuffer(value)) {
591
+ fs.writeFileSync(fPath, value, "binary");
592
+ res();
593
+ }
594
+ else if (`string` === typeof value) {
595
+ fs.writeFileSync(fPath, value.toString(), {
596
+ encoding: "utf-8",
597
+ });
598
+ res();
599
+ }
600
+ else {
601
+ /* @ts-ignore:next-line */
602
+ const pipeStream = value;
603
+ const myFile = fs.createWriteStream(fPath);
604
+ pipeStream.pipe(myFile);
605
+ pipeStream.on("close", () => {
606
+ myFile.close();
607
+ res();
608
+ });
609
+ }
610
+ });
611
+ }));
612
+ };
613
+ }
614
+ write(accessObject, contents) {
615
+ throw new Error("Method not implemented.");
616
+ }
617
+ }
@@ -9,6 +9,9 @@ export class PM_Node extends PM {
9
9
  this.server = {};
10
10
  this.testResourceConfiguration = t;
11
11
  }
12
+ customScreenShot(opts, page) {
13
+ return globalThis["customScreenShot"](opts, page);
14
+ }
12
15
  existsSync(destFolder) {
13
16
  return globalThis["existsSync"](this.testResourceConfiguration.fs + "/" + destFolder);
14
17
  }
@@ -19,6 +22,7 @@ export class PM_Node extends PM {
19
22
  return globalThis["write"](writeObject.uid, contents);
20
23
  }
21
24
  writeFileSync(filepath, contents) {
25
+ console.log("pm_node-writeFileSync", this.testResourceConfiguration);
22
26
  return globalThis["writeFileSync"](this.testResourceConfiguration.fs + "/" + filepath, contents, this.testResourceConfiguration.name);
23
27
  }
24
28
  createWriteStream(filepath) {
@@ -6,6 +6,9 @@ export class PM_Web extends PM {
6
6
  this.server = {};
7
7
  this.testResourceConfiguration = t;
8
8
  }
9
+ customScreenShot(opts) {
10
+ window["customScreenShot"](opts);
11
+ }
9
12
  existsSync(destFolder) {
10
13
  return window["existsSync"](destFolder);
11
14
  }