testeranto 0.75.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 +6 -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
@@ -31,6 +31,7 @@ const fs_1 = __importDefault(require("fs"));
31
31
  const path_1 = __importDefault(require("path"));
32
32
  const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
33
33
  const index_js_1 = require("./index.js");
34
+ const utils_js_1 = require("../utils.js");
34
35
  const fPaths = [];
35
36
  const fileStreams3 = [];
36
37
  const files = {}; // = new Set<string>();
@@ -62,6 +63,7 @@ class PM_Main extends index_js_1.PM {
62
63
  }
63
64
  else if (testConfigResource.ports > 0) {
64
65
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
66
+ console.log("openPorts", openPorts);
65
67
  if (openPorts.length >= testConfigResource.ports) {
66
68
  for (let i = 0; i < testConfigResource.ports; i++) {
67
69
  portsToUse.push(openPorts[i][0]);
@@ -72,7 +74,7 @@ class PM_Main extends index_js_1.PM {
72
74
  name: src,
73
75
  // ports: [3333],
74
76
  ports: portsToUse,
75
- fs: ".",
77
+ fs: destFolder,
76
78
  browserWSEndpoint: this.browser.wsEndpoint(),
77
79
  });
78
80
  }
@@ -86,6 +88,14 @@ class PM_Main extends index_js_1.PM {
86
88
  process.exit(-1);
87
89
  }
88
90
  const builtfile = dest + ".mjs";
91
+ await Promise.all(testConfig[3].map((sidecar) => {
92
+ if (sidecar[1] === "web") {
93
+ return this.launchWebSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "web", this.configs), sidecar);
94
+ }
95
+ if (sidecar[1] === "node") {
96
+ return this.launchNodeSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "node", this.configs), sidecar);
97
+ }
98
+ }));
89
99
  this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
90
100
  return module.default.then((defaultModule) => {
91
101
  defaultModule
@@ -99,12 +109,231 @@ class PM_Main extends index_js_1.PM {
99
109
  });
100
110
  });
101
111
  });
112
+ console.log("portsToUse", portsToUse);
113
+ for (let i = 0; i <= portsToUse.length; i++) {
114
+ if (portsToUse[i]) {
115
+ this.ports[portsToUse[i]] = "true"; //port is open again
116
+ }
117
+ }
118
+ };
119
+ this.launchWebSideCar = async (src, dest, testConfig) => {
120
+ const d = dest + ".mjs";
121
+ console.log("launchWebSideCar", src, dest, d);
122
+ const destFolder = dest.replace(".mjs", "");
123
+ const webArgz = JSON.stringify({
124
+ name: dest,
125
+ ports: [].toString(),
126
+ fs: destFolder,
127
+ browserWSEndpoint: this.browser.wsEndpoint(),
128
+ });
129
+ const evaluation = `
130
+ console.log("importing ${dest}.mjs");
131
+ import('${dest}.mjs').then(async (x) => {
132
+ console.log("imported", x.default);
133
+ })`;
134
+ const fileStreams2 = [];
135
+ const doneFileStream2 = [];
136
+ return new Promise((res, rej) => {
137
+ this.browser
138
+ .newPage()
139
+ .then((page) => {
140
+ page.on("console", (msg) => {
141
+ console.log("web > ", msg.args(), msg.text());
142
+ // for (let i = 0; i < msg._args.length; ++i)
143
+ // console.log(`${i}: ${msg._args[i]}`);
144
+ });
145
+ page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
146
+ console.log("main.ts browser custom-screenshot", testName);
147
+ const p = ssOpts.path;
148
+ const dir = path_1.default.dirname(p);
149
+ fs_1.default.mkdirSync(dir, {
150
+ recursive: true,
151
+ });
152
+ files[testName].add(ssOpts.path);
153
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
154
+ if (!screenshots[testName]) {
155
+ screenshots[testName] = [];
156
+ }
157
+ screenshots[testName].push(sPromise);
158
+ // sPromise.then(())
159
+ await sPromise;
160
+ return sPromise;
161
+ // page.evaluate(`window["screenshot done"]`);
162
+ });
163
+ page.exposeFunction("writeFileSync", (fp, contents, testName) => {
164
+ const dir = path_1.default.dirname(fp);
165
+ fs_1.default.mkdirSync(dir, {
166
+ recursive: true,
167
+ });
168
+ const p = new Promise(async (res, rej) => {
169
+ fs_1.default.writeFileSync(fp, contents);
170
+ res(fp);
171
+ });
172
+ doneFileStream2.push(p);
173
+ if (!files[testName]) {
174
+ files[testName] = new Set();
175
+ }
176
+ files[testName].add(fp);
177
+ return p;
178
+ });
179
+ page.exposeFunction("existsSync", (fp, contents) => {
180
+ return fs_1.default.existsSync(fp);
181
+ });
182
+ page.exposeFunction("mkdirSync", (fp) => {
183
+ if (!fs_1.default.existsSync(fp)) {
184
+ return fs_1.default.mkdirSync(fp, {
185
+ recursive: true,
186
+ });
187
+ }
188
+ return false;
189
+ });
190
+ page.exposeFunction("createWriteStream", (fp, testName) => {
191
+ const f = fs_1.default.createWriteStream(fp);
192
+ if (!files[testName]) {
193
+ files[testName] = new Set();
194
+ }
195
+ files[testName].add(fp);
196
+ const p = new Promise((res, rej) => {
197
+ res(fp);
198
+ });
199
+ doneFileStream2.push(p);
200
+ f.on("close", async () => {
201
+ await p;
202
+ });
203
+ fileStreams2.push(f);
204
+ return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
205
+ });
206
+ page.exposeFunction("write", async (uid, contents) => {
207
+ return fileStreams2[uid].write(contents);
208
+ });
209
+ page.exposeFunction("end", async (uid) => {
210
+ return fileStreams2[uid].end();
211
+ });
212
+ page.exposeFunction("customclose", (p, testName) => {
213
+ fs_1.default.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
214
+ delete files[testName];
215
+ Promise.all(screenshots[testName] || []).then(() => {
216
+ delete screenshots[testName];
217
+ page.close();
218
+ });
219
+ // globalThis["writeFileSync"](
220
+ // p + "/manifest.json",
221
+ // // files.entries()
222
+ // JSON.stringify(Array.from(files[testName]))
223
+ // );
224
+ // console.log("closing doneFileStream2", doneFileStream2);
225
+ // console.log("closing doneFileStream2", doneFileStream2);
226
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
227
+ // page.close();
228
+ // });
229
+ // Promise.all(screenshots).then(() => {
230
+ // page.close();
231
+ // });
232
+ // setTimeout(() => {
233
+ // console.log("Delayed for 1 second.");
234
+ // page.close();
235
+ // }, 5000);
236
+ // return page.close();
237
+ });
238
+ return page;
239
+ })
240
+ .then(async (page) => {
241
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
242
+ await page.goto(`file://${`${dest}.html`}`, {});
243
+ res(page);
244
+ // page.evaluate(evaluation).finally(() => {
245
+ // console.log("evaluation failed.", dest);
246
+ // });
247
+ // return page;
248
+ });
249
+ });
250
+ };
251
+ // launchNodeSideCar = async (src: string, dest: string) => {};
252
+ this.launchNodeSideCar = async (src, dest, testConfig) => {
253
+ const d = dest + ".mjs";
254
+ console.log("launchNodeSideCar", src, dest, d);
255
+ const destFolder = dest.replace(".mjs", "");
256
+ let argz = "";
257
+ // const testConfig = this.configs.tests.find((t) => {
258
+ // return t[0] === src;
259
+ // });
260
+ // if (!testConfig) {
261
+ // console.error("missing test config");
262
+ // process.exit(-1);
263
+ // }
264
+ const testConfigResource = testConfig[2];
265
+ let portsToUse = [];
266
+ if (testConfigResource.ports === 0) {
267
+ argz = JSON.stringify({
268
+ scheduled: true,
269
+ name: src,
270
+ ports: portsToUse,
271
+ fs: destFolder,
272
+ browserWSEndpoint: this.browser.wsEndpoint(),
273
+ });
274
+ }
275
+ else if (testConfigResource.ports > 0) {
276
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
277
+ console.log("openPorts", openPorts);
278
+ if (openPorts.length >= testConfigResource.ports) {
279
+ for (let i = 0; i < testConfigResource.ports; i++) {
280
+ portsToUse.push(openPorts[i][0]);
281
+ this.ports[openPorts[i][0]] = false; // port is now closed
282
+ }
283
+ argz = JSON.stringify({
284
+ scheduled: true,
285
+ name: src,
286
+ // ports: [3333],
287
+ ports: portsToUse,
288
+ fs: ".",
289
+ browserWSEndpoint: this.browser.wsEndpoint(),
290
+ });
291
+ }
292
+ else {
293
+ this.queue.push(src);
294
+ return;
295
+ }
296
+ }
297
+ else {
298
+ console.error("negative port makes no sense", src);
299
+ process.exit(-1);
300
+ }
301
+ const builtfile = dest + ".mjs";
302
+ // console.log(
303
+ // "node builtfile",
304
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
305
+ // );
306
+ this.server[builtfile] = await Promise.resolve().then(() => __importStar(require(`${builtfile}?cacheBust=${Date.now()}`))).then((module) => {
307
+ return module.default.then((defaultModule) => {
308
+ console.log("defaultModule", defaultModule);
309
+ const s = new defaultModule();
310
+ s.receiveTestResourceConfig(argz);
311
+ // Object.create(defaultModule);
312
+ // defaultModule
313
+ // .receiveTestResourceConfig(argz)
314
+ // .then((x) => {
315
+ // console.log("then", x);
316
+ // return x;
317
+ // })
318
+ // .catch((e) => {
319
+ // console.log("catch", e);
320
+ // });
321
+ });
322
+ });
323
+ console.log("portsToUse", portsToUse);
102
324
  for (let i = 0; i <= portsToUse.length; i++) {
103
- this.ports[i] = true; //port is open again
325
+ if (portsToUse[i]) {
326
+ this.ports[portsToUse[i]] = "true"; //port is open again
327
+ }
104
328
  }
105
329
  };
106
- this.launchWeb = (t, dest) => {
330
+ this.launchWeb = (t, dest, sidecars) => {
107
331
  console.log("launchWeb", t, dest);
332
+ sidecars.map((sidecar) => {
333
+ if (sidecar[1] === "node") {
334
+ return this.launchNodeSideCar(sidecar[0], (0, utils_js_1.destinationOfRuntime)(sidecar[0], "node", this.configs), sidecar);
335
+ }
336
+ });
108
337
  const destFolder = dest.replace(".mjs", "");
109
338
  const webArgz = JSON.stringify({
110
339
  name: dest,
@@ -112,8 +341,10 @@ class PM_Main extends index_js_1.PM {
112
341
  fs: destFolder,
113
342
  browserWSEndpoint: this.browser.wsEndpoint(),
114
343
  });
115
- const evaluation = `import('${dest}.mjs').then(async (x) => {
116
- console.log("imported", x, (x.default));
344
+ const evaluation = `
345
+ console.log("importing ${dest}.mjs");
346
+ import('${dest}.mjs').then(async (x) => {
347
+ console.log("imported", x.default);
117
348
  try {
118
349
  await (await x.default).receiveTestResourceConfig(${webArgz})
119
350
  } catch (e) {
@@ -121,18 +352,25 @@ class PM_Main extends index_js_1.PM {
121
352
  }
122
353
  })`;
123
354
  const fileStreams2 = [];
124
- // const screenshots2: Promise<any>[] = [];
125
355
  const doneFileStream2 = [];
126
356
  this.browser
127
357
  .newPage()
128
358
  .then((page) => {
129
- page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
359
+ page.on("console", (msg) => {
360
+ console.log("web > ", msg.args(), msg.text());
361
+ // for (let i = 0; i < msg._args.length; ++i)
362
+ // console.log(`${i}: ${msg._args[i]}`);
363
+ });
364
+ page.exposeFunction("customScreenShot", async (ssOpts, testName) => {
130
365
  console.log("main.ts browser custom-screenshot", testName);
131
366
  const p = ssOpts.path;
132
367
  const dir = path_1.default.dirname(p);
133
368
  fs_1.default.mkdirSync(dir, {
134
369
  recursive: true,
135
370
  });
371
+ if (!files[testName]) {
372
+ files[testName] = new Set();
373
+ }
136
374
  files[testName].add(ssOpts.path);
137
375
  const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
138
376
  if (!screenshots[testName]) {
@@ -194,11 +432,12 @@ class PM_Main extends index_js_1.PM {
194
432
  return fileStreams2[uid].end();
195
433
  });
196
434
  page.exposeFunction("customclose", (p, testName) => {
435
+ console.log("\t closing", p);
197
436
  fs_1.default.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
198
437
  delete files[testName];
199
438
  Promise.all(screenshots[testName] || []).then(() => {
200
439
  delete screenshots[testName];
201
- page.close();
440
+ // page.close();
202
441
  });
203
442
  // globalThis["writeFileSync"](
204
443
  // p + "/manifest.json",
@@ -222,9 +461,16 @@ class PM_Main extends index_js_1.PM {
222
461
  return page;
223
462
  })
224
463
  .then(async (page) => {
464
+ page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
225
465
  await page.goto(`file://${`${dest}.html`}`, {});
226
- page.evaluate(evaluation).finally(() => {
466
+ page
467
+ .evaluate(evaluation)
468
+ .catch((e) => {
227
469
  console.log("evaluation failed.", dest);
470
+ console.log(e);
471
+ })
472
+ .finally(() => {
473
+ console.log("evaluation complete.", dest);
228
474
  });
229
475
  return page;
230
476
  });
@@ -244,6 +490,7 @@ class PM_Main extends index_js_1.PM {
244
490
  return false;
245
491
  };
246
492
  globalThis["writeFileSync"] = (filepath, contents, testName) => {
493
+ console.log("globalThis-writeFileSync", filepath);
247
494
  // Create directories if they don't exist
248
495
  const dir = path_1.default.dirname(filepath.split("/").slice(0, -1).join("/"));
249
496
  fs_1.default.mkdirSync(dir, {
@@ -271,6 +518,33 @@ class PM_Main extends index_js_1.PM {
271
518
  globalThis["end"] = (uid) => {
272
519
  fileStreams3[uid].end();
273
520
  };
521
+ globalThis["customScreenShot"] = async (opts, page) => {
522
+ // // fileStreams3[uid].write(contents);
523
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
524
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
525
+ // // console.log("dir", dir);
526
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
527
+ // recursive: true,
528
+ // });
529
+ // return page.screenshot(opts);
530
+ console.log("main.ts node custom-screenshot", page);
531
+ const p = opts.path;
532
+ const dir = path_1.default.dirname(p);
533
+ fs_1.default.mkdirSync(dir, {
534
+ recursive: true,
535
+ });
536
+ if (!files[opts.path]) {
537
+ files[opts.path] = new Set();
538
+ }
539
+ files[opts.path].add(opts.path);
540
+ const sPromise = page.screenshot(Object.assign(Object.assign({}, opts), { path: p }));
541
+ if (!screenshots[opts.path]) {
542
+ screenshots[opts.path] = [];
543
+ }
544
+ screenshots[opts.path].push(sPromise);
545
+ await sPromise;
546
+ return sPromise;
547
+ };
274
548
  globalThis["customclose"] = (p, testName) => {
275
549
  if (!files[testName]) {
276
550
  files[testName] = new Set();
@@ -301,8 +575,11 @@ class PM_Main extends index_js_1.PM {
301
575
  // // return page.close();
302
576
  // });
303
577
  }
578
+ customScreenShot(opts) {
579
+ throw new Error("Method not implemented.");
580
+ }
304
581
  async startPuppeteer(options, destfolder) {
305
- this.browser = await puppeteer_core_1.default.launch(options);
582
+ this.browser = (await puppeteer_core_1.default.launch(options));
306
583
  return this.browser;
307
584
  }
308
585
  end(accessObject) {
@@ -15,6 +15,9 @@ class PM_Node extends index_js_1.PM {
15
15
  this.server = {};
16
16
  this.testResourceConfiguration = t;
17
17
  }
18
+ customScreenShot(opts, page) {
19
+ return globalThis["customScreenShot"](opts, page);
20
+ }
18
21
  existsSync(destFolder) {
19
22
  return globalThis["existsSync"](this.testResourceConfiguration.fs + "/" + destFolder);
20
23
  }
@@ -25,6 +28,7 @@ class PM_Node extends index_js_1.PM {
25
28
  return globalThis["write"](writeObject.uid, contents);
26
29
  }
27
30
  writeFileSync(filepath, contents) {
31
+ console.log("pm_node-writeFileSync", this.testResourceConfiguration);
28
32
  return globalThis["writeFileSync"](this.testResourceConfiguration.fs + "/" + filepath, contents, this.testResourceConfiguration.name);
29
33
  }
30
34
  createWriteStream(filepath) {
@@ -12,6 +12,9 @@ class PM_Web extends index_js_1.PM {
12
12
  this.server = {};
13
13
  this.testResourceConfiguration = t;
14
14
  }
15
+ customScreenShot(opts) {
16
+ window["customScreenShot"](opts);
17
+ }
15
18
  existsSync(destFolder) {
16
19
  return window["existsSync"](destFolder);
17
20
  }
@@ -11,9 +11,7 @@ const readline_1 = __importDefault(require("readline"));
11
11
  const glob_1 = require("glob");
12
12
  const node_js_1 = __importDefault(require("./esbuildConfigs/node.js"));
13
13
  const web_js_1 = __importDefault(require("./esbuildConfigs/web.js"));
14
- const features_js_1 = __importDefault(require("./esbuildConfigs/features.js"));
15
14
  const web_html_js_1 = __importDefault(require("./web.html.js"));
16
- const report_html_js_1 = __importDefault(require("./report.html.js"));
17
15
  var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
18
16
  readline_1.default.emitKeypressEvents(process.stdin);
19
17
  if (process.stdin.isTTY)
@@ -25,15 +23,7 @@ process.stdin.on("keypress", (str, key) => {
25
23
  onDone();
26
24
  }
27
25
  });
28
- // setInterval(() => {
29
- // const memoryUsage = process.memoryUsage();
30
- // console.log("Memory usage:", memoryUsage);
31
- // }, 10000); // Check every 10 seconds
32
- let featuresDone, nodeDone, webDone = false;
33
- const onFeaturesDone = () => {
34
- featuresDone = true;
35
- onDone();
36
- };
26
+ let nodeDone, webDone = false;
37
27
  const onNodeDone = () => {
38
28
  nodeDone = true;
39
29
  onDone();
@@ -44,12 +34,11 @@ const onWebDone = () => {
44
34
  };
45
35
  const onDone = () => {
46
36
  console.log(JSON.stringify({
47
- featuresDone,
48
37
  nodeDone,
49
38
  webDone,
50
39
  mode,
51
40
  }, null, 2));
52
- if (featuresDone && nodeDone && webDone && mode === "PROD") {
41
+ if (nodeDone && webDone && mode === "PROD") {
53
42
  console.log("Testeranto-EsBuild is all done. Goodbye!");
54
43
  process.exit();
55
44
  }
@@ -58,9 +47,10 @@ const onDone = () => {
58
47
  }
59
48
  };
60
49
  class ITProject {
61
- constructor(config) {
50
+ constructor(configs) {
62
51
  this.mode = `up`;
63
- this.config = config;
52
+ this.config = configs;
53
+ fs_1.default.writeFileSync(`${this.config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, this.config), { buildDir: process.cwd() + "/" + this.config.outdir }), null, 2));
64
54
  Promise.resolve(Promise.all([...this.getSecondaryEndpointsPoints("web")].map(async (sourceFilePath) => {
65
55
  const sourceFileSplit = sourceFilePath.split("/");
66
56
  const sourceDir = sourceFileSplit.slice(0, -1);
@@ -69,57 +59,24 @@ class ITProject {
69
59
  .split(".")
70
60
  .slice(0, -1)
71
61
  .join(".");
72
- const htmlFilePath = path_1.default.normalize(`${process.cwd()}/${config.outdir}/web/${sourceDir.join("/")}/${sourceFileNameMinusJs}.html`);
62
+ const htmlFilePath = path_1.default.normalize(`${process.cwd()}/${this.config.outdir}/web/${sourceDir.join("/")}/${sourceFileNameMinusJs}.html`);
73
63
  const jsfilePath = `./${sourceFileNameMinusJs}.mjs`;
74
64
  return fs_1.default.promises
75
65
  .mkdir(path_1.default.dirname(htmlFilePath), { recursive: true })
76
66
  .then((x) => fs_1.default.writeFileSync(htmlFilePath, (0, web_html_js_1.default)(jsfilePath, htmlFilePath)));
77
67
  })));
78
68
  const [nodeEntryPoints, webEntryPoints] = getRunnables(this.config.tests);
79
- // nodeEntryPoints.forEach((nep) => {
80
- // const f = `${process.cwd()}/${nep}`;
81
- // console.log("nep", f);
82
- // import(f).then((module) => {
83
- // return module.default.then((defaultModule) => {
84
- // console.log("defaultModule", defaultModule);
85
- // // defaultModule
86
- // // .receiveTestResourceConfig(argz)
87
- // // .then((x) => {
88
- // // console.log("then", x);
89
- // // return x;
90
- // // })
91
- // // .catch((e) => {
92
- // // console.log("catch", e);
93
- // // });
94
- // });
95
- // });
96
- // });
97
- (0, glob_1.glob)(`./${config.outdir}/chunk-*.mjs`, { ignore: "node_modules/**" }).then((chunks) => {
69
+ console.log(`this.getSecondaryEndpointsPoints("web")`, this.getSecondaryEndpointsPoints("web"));
70
+ (0, glob_1.glob)(`./${this.config.outdir}/chunk-*.mjs`, {
71
+ ignore: "node_modules/**",
72
+ }).then((chunks) => {
98
73
  chunks.forEach((chunk) => {
99
74
  fs_1.default.unlinkSync(chunk);
100
75
  });
101
76
  });
102
- fs_1.default.copyFileSync("./node_modules/testeranto/dist/prebuild/Report.js", "./docs/Report.js");
103
- fs_1.default.copyFileSync("./node_modules/testeranto/dist/prebuild/Report.css", "./docs/Report.css");
104
- fs_1.default.writeFileSync(`${config.outdir}/report.html`, (0, report_html_js_1.default)());
105
77
  Promise.all([
106
- fs_1.default.promises.writeFile(`${config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, config), { buildDir: process.cwd() + "/" + config.outdir }), null, 2)),
107
- esbuild_1.default
108
- .context((0, features_js_1.default)(config))
109
- .then(async (featuresContext) => {
110
- if (mode == "DEV") {
111
- await featuresContext.watch();
112
- onFeaturesDone();
113
- }
114
- else {
115
- featuresContext.rebuild().then((v) => {
116
- onFeaturesDone();
117
- });
118
- }
119
- return featuresContext;
120
- }),
121
78
  esbuild_1.default
122
- .context((0, node_js_1.default)(config, nodeEntryPoints))
79
+ .context((0, node_js_1.default)(this.config, nodeEntryPoints))
123
80
  .then(async (nodeContext) => {
124
81
  if (mode == "DEV") {
125
82
  await nodeContext.watch().then((v) => {
@@ -134,7 +91,7 @@ class ITProject {
134
91
  return nodeContext;
135
92
  }),
136
93
  esbuild_1.default
137
- .context((0, web_js_1.default)(config, webEntryPoints))
94
+ .context((0, web_js_1.default)(this.config, webEntryPoints))
138
95
  .then(async (webContext) => {
139
96
  if (mode == "DEV") {
140
97
  await webContext.watch().then((v) => {
@@ -153,11 +110,12 @@ class ITProject {
153
110
  getSecondaryEndpointsPoints(runtime) {
154
111
  const meta = (ts, st) => {
155
112
  ts.forEach((t) => {
113
+ console.log("getSecondaryEndpointsPoints", t);
156
114
  if (t[1] === runtime) {
157
115
  st.add(t[0]);
158
116
  }
159
- if (Array.isArray(t[2])) {
160
- meta(t[2], st);
117
+ if (Array.isArray(t[3])) {
118
+ meta(t[3], st);
161
119
  }
162
120
  });
163
121
  return st;