testeranto 0.79.69 → 0.81.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 (252) hide show
  1. package/.aider.chat.history.md +980 -0
  2. package/.aider.input.history +87 -0
  3. package/.aider.tags.cache.v3/1c/30/af1de2ad7a137afeddb1b01e0c27.val +0 -0
  4. package/.aider.tags.cache.v3/1d/63/88318b65ce58b6bb0487e8ce2656.val +0 -0
  5. package/.aider.tags.cache.v3/2e/67/16ae65530b40038e48e00d666c63.val +0 -0
  6. package/.aider.tags.cache.v3/6f/94/80488a232866fcce7ee657da488b.val +0 -0
  7. package/.aider.tags.cache.v3/cache.db +0 -0
  8. package/.eslintrc.js +5 -2
  9. package/README.md +10 -107
  10. package/build-tests.ts +16 -0
  11. package/dist/common/build-tests.js +38 -0
  12. package/dist/common/init-docs.js +8 -0
  13. package/dist/common/run-tests.js +34 -0
  14. package/dist/common/src/Aider.js +143 -0
  15. package/dist/common/src/Init.js +10 -0
  16. package/dist/common/{PM → src/PM}/main.js +58 -49
  17. package/dist/common/{PM → src/PM}/node.js +1 -1
  18. package/dist/common/{Project.js → src/Project.js} +46 -38
  19. package/dist/common/{Puppeteer.js → src/Puppeteer.js} +51 -40
  20. package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/web.js +37 -38
  21. package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.js +17 -2
  22. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +79 -0
  23. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/node.js +5 -3
  24. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/web.js +4 -4
  25. package/dist/common/{lib → src/lib}/abstractBase.js +80 -24
  26. package/dist/common/{lib → src/lib}/basebuilder.js +14 -3
  27. package/dist/common/{lib → src/lib}/core.js +47 -3
  28. package/dist/common/testeranto.js +15 -0
  29. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  30. package/dist/module/build-tests.js +10 -0
  31. package/dist/module/init-docs.js +3 -0
  32. package/dist/module/run-tests.js +6 -0
  33. package/dist/module/src/Aider.js +136 -0
  34. package/dist/module/src/Init.js +5 -0
  35. package/dist/module/{PM → src/PM}/main.js +58 -49
  36. package/dist/module/{PM → src/PM}/node.js +1 -1
  37. package/dist/module/{Project.js → src/Project.js} +46 -38
  38. package/dist/module/{Puppeteer.js → src/Puppeteer.js} +51 -40
  39. package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/web.js +37 -38
  40. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +34 -0
  41. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +74 -0
  42. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/node.js +4 -2
  43. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/web.js +4 -4
  44. package/dist/module/{lib → src/lib}/abstractBase.js +80 -24
  45. package/dist/module/{lib → src/lib}/basebuilder.js +14 -3
  46. package/dist/module/{lib → src/lib}/core.js +47 -3
  47. package/dist/module/testeranto.js +13 -0
  48. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  49. package/dist/types/build-tests.d.ts +3 -0
  50. package/dist/types/init-docs.d.ts +2 -0
  51. package/dist/types/run-tests.d.ts +2 -0
  52. package/dist/types/src/Aider.d.ts +1 -0
  53. package/dist/types/{PM → src/PM}/index.d.ts +1 -1
  54. package/dist/types/{PM → src/PM}/main.d.ts +7 -1
  55. package/dist/types/{Project.d.ts → src/Project.d.ts} +6 -1
  56. package/dist/types/{Types.d.ts → src/Types.d.ts} +3 -2
  57. package/dist/types/{lib → src/lib}/abstractBase.d.ts +1 -0
  58. package/dist/types/testeranto.d.ts +16 -0
  59. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  60. package/init-docs.ts +5 -0
  61. package/package.json +54 -29
  62. package/run-tests.ts +9 -0
  63. package/secret +1 -0
  64. package/secret.env +2 -0
  65. package/src/Aider.ts +168 -0
  66. package/src/Init.ts +0 -31
  67. package/src/PM/index.ts +1 -1
  68. package/src/PM/main.ts +71 -61
  69. package/src/PM/node.ts +1 -1
  70. package/src/Project.ts +55 -48
  71. package/src/Puppeteer.ts +66 -52
  72. package/src/SubPackages/react-dom/jsx/web.ts +46 -49
  73. package/src/SubPackages/react-test-renderer/jsx/index.ts +25 -2
  74. package/src/Types.ts +3 -1
  75. package/src/esbuildConfigs/inputFilesPlugin.ts +78 -31
  76. package/src/esbuildConfigs/node.ts +2 -2
  77. package/src/esbuildConfigs/web.ts +4 -4
  78. package/src/lib/abstractBase.ts +88 -30
  79. package/src/lib/basebuilder.ts +17 -3
  80. package/src/lib/core.ts +55 -13
  81. package/testeranto.ts +13 -0
  82. package/tsconfig.common.json +12 -4
  83. package/tsconfig.json +9 -2
  84. package/tsconfig.module.json +2 -2
  85. package/tsconfig.types.json +1 -1
  86. package/Report.Dockerfile +0 -44
  87. package/dist/common/Features.js +0 -51
  88. package/dist/common/Init.js +0 -30
  89. package/dist/common/Reporter.js +0 -112
  90. package/dist/common/Scheduler.js +0 -1
  91. package/dist/common/TaskManBackEnd.js +0 -167
  92. package/dist/common/esbuildConfigs/inputFilesPlugin.js +0 -49
  93. package/dist/common/mongooseSchemas.js +0 -56
  94. package/dist/common/preload.js +0 -15
  95. package/dist/common/report.html.js +0 -31
  96. package/dist/module/ExampleTab.js +0 -112
  97. package/dist/module/Features.js +0 -41
  98. package/dist/module/Init.js +0 -25
  99. package/dist/module/Reporter.js +0 -107
  100. package/dist/module/Scheduler.js +0 -1
  101. package/dist/module/SubPackages/react-test-renderer/jsx/index.js +0 -19
  102. package/dist/module/TaskManBackEnd.js +0 -162
  103. package/dist/module/TaskManFrontEnd.js +0 -605
  104. package/dist/module/esbuildConfigs/inputFilesPlugin.js +0 -44
  105. package/dist/module/mongooseSchemas.js +0 -50
  106. package/dist/module/preload.js +0 -15
  107. package/dist/module/report.html.js +0 -29
  108. package/dist/prebuild/TaskManBackEnd.mjs +0 -170
  109. package/dist/prebuild/TaskManFrontEnd.css +0 -12301
  110. package/dist/prebuild/TaskManFrontEnd.js +0 -81262
  111. package/dist/types/Features.d.ts +0 -35
  112. package/dist/types/Reporter.d.ts +0 -1
  113. package/dist/types/Scheduler.d.ts +0 -0
  114. package/dist/types/TaskManBackEnd.d.ts +0 -3
  115. package/dist/types/mongooseSchemas.d.ts +0 -124
  116. package/dist/types/preload.d.ts +0 -0
  117. package/dist/types/report.html.d.ts +0 -2
  118. package/src/ExampleTab.tsx +0 -219
  119. package/src/Features.ts +0 -64
  120. package/src/Reporter.ts +0 -126
  121. package/src/Scheduler.ts +0 -0
  122. package/src/TaskManBackEnd.ts +0 -226
  123. package/src/TaskManFrontEnd.tsx +0 -1254
  124. package/src/mongooseSchemas.ts +0 -105
  125. package/src/preload.ts +0 -17
  126. package/src/report.html.ts +0 -29
  127. package/tests/Rectangle.test.ts +0 -189
  128. package/trash/TaskMan.Dockerfile +0 -23
  129. package/trash/TaskMan1.Dockerfile +0 -43
  130. package/trash/devBot.dockerfile +0 -12
  131. package/trash/docker-compose-dev.yml +0 -9
  132. package/trash/docker-compose-prod.yml +0 -18
  133. package/trash/electronBuild.ts +0 -32
  134. /package/dist/common/{Node.js → src/Node.js} +0 -0
  135. /package/dist/common/{PM → src/PM}/index.js +0 -0
  136. /package/dist/common/{PM → src/PM}/web.js +0 -0
  137. /package/dist/common/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  138. /package/dist/common/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  139. /package/dist/common/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  140. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  141. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  142. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  143. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  144. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/web.js +0 -0
  145. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  146. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  147. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  148. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/index.js +0 -0
  149. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/interface.js +0 -0
  150. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +0 -0
  151. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +0 -0
  152. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  153. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  154. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  155. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  156. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  157. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  158. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  159. /package/dist/common/{Types.js → src/Types.js} +0 -0
  160. /package/dist/common/{Web.js → src/Web.js} +0 -0
  161. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  162. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/index.js +0 -0
  163. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/report.js +0 -0
  164. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  165. /package/dist/common/{lib → src/lib}/classBuilder.js +0 -0
  166. /package/dist/common/{lib → src/lib}/index.js +0 -0
  167. /package/dist/common/{lib → src/lib}/types.js +0 -0
  168. /package/dist/common/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  169. /package/dist/common/{utils.js → src/utils.js} +0 -0
  170. /package/dist/common/{web.html.js → src/web.html.js} +0 -0
  171. /package/dist/module/{Node.js → src/Node.js} +0 -0
  172. /package/dist/module/{PM → src/PM}/index.js +0 -0
  173. /package/dist/module/{PM → src/PM}/web.js +0 -0
  174. /package/dist/module/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  175. /package/dist/module/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  176. /package/dist/module/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  177. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  178. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  179. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  180. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  181. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/web.js +0 -0
  182. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  183. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  184. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  185. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/index.js +0 -0
  186. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/interface.js +0 -0
  187. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +0 -0
  188. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +0 -0
  189. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  190. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  191. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  192. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  193. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  194. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  195. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  196. /package/dist/module/{Types.js → src/Types.js} +0 -0
  197. /package/dist/module/{Web.js → src/Web.js} +0 -0
  198. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  199. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/index.js +0 -0
  200. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/report.js +0 -0
  201. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  202. /package/dist/module/{lib → src/lib}/classBuilder.js +0 -0
  203. /package/dist/module/{lib → src/lib}/index.js +0 -0
  204. /package/dist/module/{lib → src/lib}/types.js +0 -0
  205. /package/dist/module/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  206. /package/dist/module/{utils.js → src/utils.js} +0 -0
  207. /package/dist/module/{web.html.js → src/web.html.js} +0 -0
  208. /package/dist/types/{Init.d.ts → src/Init.d.ts} +0 -0
  209. /package/dist/types/{Node.d.ts → src/Node.d.ts} +0 -0
  210. /package/dist/types/{PM → src/PM}/node.d.ts +0 -0
  211. /package/dist/types/{PM → src/PM}/web.d.ts +0 -0
  212. /package/dist/types/{Puppeteer.d.ts → src/Puppeteer.d.ts} +0 -0
  213. /package/dist/types/{SubPackages → src/SubPackages}/puppeteer.d.ts +0 -0
  214. /package/dist/types/{SubPackages → src/SubPackages}/react/component/node.d.ts +0 -0
  215. /package/dist/types/{SubPackages → src/SubPackages}/react/component/web.d.ts +0 -0
  216. /package/dist/types/{SubPackages → src/SubPackages}/react/jsx/index.d.ts +0 -0
  217. /package/dist/types/{SubPackages → src/SubPackages}/react/jsx/node.d.ts +0 -0
  218. /package/dist/types/{SubPackages → src/SubPackages}/react/jsx/web.d.ts +0 -0
  219. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/component/node.d.ts +0 -0
  220. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/component/web.d.ts +0 -0
  221. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/jsx/index.d.ts +0 -0
  222. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/jsx/node.d.ts +0 -0
  223. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/jsx/web.d.ts +0 -0
  224. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.d.ts +0 -0
  225. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/index.d.ts +0 -0
  226. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/interface.d.ts +0 -0
  227. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/node.d.ts +0 -0
  228. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/web.d.ts +0 -0
  229. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.d.ts +0 -0
  230. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.d.ts +0 -0
  231. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.d.ts +0 -0
  232. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.d.ts +0 -0
  233. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.d.ts +0 -0
  234. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.d.ts +0 -0
  235. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.d.ts +0 -0
  236. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.d.ts +0 -0
  237. /package/dist/types/{Web.d.ts → src/Web.d.ts} +0 -0
  238. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/features.d.ts +0 -0
  239. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/index.d.ts +0 -0
  240. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/inputFilesPlugin.d.ts +0 -0
  241. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/node.d.ts +0 -0
  242. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/report.d.ts +0 -0
  243. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/tests.d.ts +0 -0
  244. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/web.d.ts +0 -0
  245. /package/dist/types/{lib → src/lib}/basebuilder.d.ts +0 -0
  246. /package/dist/types/{lib → src/lib}/classBuilder.d.ts +0 -0
  247. /package/dist/types/{lib → src/lib}/core.d.ts +0 -0
  248. /package/dist/types/{lib → src/lib}/index.d.ts +0 -0
  249. /package/dist/types/{lib → src/lib}/types.d.ts +0 -0
  250. /package/dist/types/{puppeteerConfiger.d.ts → src/puppeteerConfiger.d.ts} +0 -0
  251. /package/dist/types/{utils.d.ts → src/utils.d.ts} +0 -0
  252. /package/dist/types/{web.html.d.ts → src/web.html.d.ts} +0 -0
@@ -0,0 +1,10 @@
1
+ // import { ITProject } from "./src/Project.js";
2
+ // import Project from "./testeranto.js";
3
+ import process from "process";
4
+ import { ITProject } from "./src/Project";
5
+ // import { ITProject } from "testeranto/src/Project";
6
+ // process.chdir(__dirname);
7
+ // import Puppeteer from "./src/Puppeteer.js";
8
+ console.log(process.argv);
9
+ const Project = await import(process.argv[2]);
10
+ export default new ITProject(Project);
@@ -0,0 +1,3 @@
1
+ import Init from "./src/Init.js";
2
+ import Project from "./testeranto.js";
3
+ export default Init(Project);
@@ -0,0 +1,6 @@
1
+ import process from "process";
2
+ process.chdir(__dirname);
3
+ import Puppeteer from "./src/Puppeteer.js";
4
+ console.log(process.argv);
5
+ const Project = await import(process.argv[2]);
6
+ export default Puppeteer(Project);
@@ -0,0 +1,136 @@
1
+ import fs from "fs";
2
+ import { spawn } from "child_process";
3
+ export const execCommand = async (command) => {
4
+ const ls = spawn(command.split(" ")[0], command.split(" ").slice(1, -1));
5
+ process.stdin.pipe(ls.stdin);
6
+ ls.stdout.pipe(process.stdout);
7
+ ls.stderr.pipe(process.stdout);
8
+ // ls.stdout.on("data", function (data) {
9
+ // console.log("stdout: " + data.toString());
10
+ // });
11
+ // ls.stderr.on("data", function (data) {
12
+ // console.log("stderr: " + data.toString());
13
+ // });
14
+ ls.on("exit", function (code) {
15
+ console.log("child process exited with code " + (code === null || code === void 0 ? void 0 : code.toString()) || -1);
16
+ });
17
+ // return new Promise<void>((resolve, reject) => {
18
+ // const [cmd, ...args] = command.split(" ");
19
+ // const childProcess = spawn(cmd, args);
20
+ // childProcess.stdout.on("data", (data) => {
21
+ // process.stdout.write(data.toString());
22
+ // });
23
+ // childProcess.stderr.on("data", (data) => {
24
+ // process.stderr.write(data.toString());
25
+ // });
26
+ // childProcess.on("error", (error) => {
27
+ // reject(error);
28
+ // });
29
+ // childProcess.on("exit", (code) => {
30
+ // if (code === 0) {
31
+ // resolve();
32
+ // } else {
33
+ // reject(new Error(`Command exited with code ${code}.`));
34
+ // }
35
+ // });
36
+ // });
37
+ };
38
+ const key = process.argv[2];
39
+ console.log(key);
40
+ const exitcode = fs.readFileSync(`${key}/exitcode`).toString();
41
+ console.log("exitcode", exitcode);
42
+ // if (exitcode != "0") {
43
+ if (exitcode != "0") {
44
+ const inputFiles = JSON.parse(fs.readFileSync(`${key}/inputFiles.json`).toString());
45
+ inputFiles.push(`${key}/tests.json`);
46
+ // const features = await await Promise.all(
47
+ // Array.from(
48
+ // new Set(
49
+ // JSON.parse(fs.readFileSync(`${key}/tests.json`).toString())
50
+ // .givens.reduce((mm: any[], lm: { features: any[] }) => {
51
+ // mm.push(
52
+ // lm.features.reduce((mm2: any[], lm2: any) => {
53
+ // mm2.push(lm2);
54
+ // return mm2;
55
+ // }, [])
56
+ // );
57
+ // return mm;
58
+ // }, [])
59
+ // .flat()
60
+ // .flat()
61
+ // )
62
+ // ) as string[]
63
+ // );
64
+ // const final = features.reduce((mm, [k, v], ndx) => {
65
+ // mm[k] = v;
66
+ // return mm;
67
+ // }, {});
68
+ // const as = JSON.stringify(final);
69
+ // const scriptCommand = `aider --model deepseek --api-key deepseek=${
70
+ // process.env.DEEPSEEK_KEY
71
+ // } --message "Fix the failing tests" --read ${key}/inputFiles.json ${inputFiles
72
+ // .map((i) => `--file ${i}`)
73
+ // .join(" ")}`;
74
+ const scriptCommand = `aider --message "Fix the failing tests" --model deepseek --api-key deepseek=${process.env.DEEPSEEK_KEY} --file ./${inputFiles.join(" ./")}`;
75
+ console.log("scriptCommand", scriptCommand);
76
+ execCommand(scriptCommand);
77
+ // fs.writeFile(`./${key}/features.json`, as, () => {
78
+ // inputFiles.push(`./${key}/features.json`);
79
+ // // itermTab(scriptCommand).then(() => console.log("yay"));
80
+ // // const child = spawn("xterm -e", scriptCommand.split(" "), {
81
+ // // detached: true,
82
+ // // stdio: "ignore",
83
+ // // });
84
+ // // runCommandInITerm(scriptCommand);
85
+ // });
86
+ // .reduce(async (mm, feature) => {
87
+ // const req = await octokit.request(
88
+ // `GET /repos/adamwong246/kokomobay-taskman/contents/Task/${feature}.json`,
89
+ // {
90
+ // owner: "adamwong246",
91
+ // repo: "kokomoBay-taskman",
92
+ // path: `Task/${feature}.json`,
93
+ // headers: {
94
+ // "X-GitHub-Api-Version": "2022-11-28",
95
+ // },
96
+ // }
97
+ // );
98
+ // const j = JSON.parse(atob(req.data.content));
99
+ // (await mm).push([
100
+ // feature,
101
+ // JSON.stringify({
102
+ // name: j.name,
103
+ // body: j.body,
104
+ // }),
105
+ // ]);
106
+ // return mm;
107
+ // }, Promise.resolve<[string, string][]>([]))
108
+ // .then((z) => {
109
+ // const final = z.reduce((mm, [k, v], ndx) => {
110
+ // mm[k] = v;
111
+ // return mm;
112
+ // }, {});
113
+ // const as = JSON.stringify(final);
114
+ // fs.writeFile(`./${key}/features.json`, as, () => {
115
+ // inputFiles.push(`./${key}/features.json`);
116
+ // const scriptCommand = `aider --model deepseek --api-key deepseek=${
117
+ // process.env.DEEPSEEK_KEY
118
+ // } --message "Fix the failing tests" ${inputFiles.join(" ")}`;
119
+ // console.log("scriptCommand", scriptCommand);
120
+ // execCommand(scriptCommand);
121
+ // // itermTab(scriptCommand).then(() => console.log("yay"));
122
+ // // const child = spawn("xterm -e", scriptCommand.split(" "), {
123
+ // // detached: true,
124
+ // // stdio: "ignore",
125
+ // // });
126
+ // // runCommandInITerm(scriptCommand);
127
+ // });
128
+ // //
129
+ // });
130
+ // features.then((x) => {
131
+ // console.log("done", x);
132
+ // });
133
+ }
134
+ else {
135
+ console.log("that test is not failing");
136
+ }
@@ -0,0 +1,5 @@
1
+ import fs from "fs";
2
+ export default async (partialConfig) => {
3
+ const config = Object.assign(Object.assign({}, partialConfig), { buildDir: process.cwd() + "/" + partialConfig.outdir });
4
+ fs.writeFileSync(`${config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, config), { buildDir: process.cwd() + "/" + config.outdir }), null, 2));
5
+ };
@@ -10,8 +10,32 @@ const screenshots = {};
10
10
  export class PM_Main extends PM {
11
11
  constructor(configs) {
12
12
  super();
13
+ this.shutdownMode = false;
14
+ this.checkForShutdown = () => {
15
+ const anyRunning = Object.values(this.registry).filter((x) => x === false).length > 0;
16
+ if (anyRunning) {
17
+ }
18
+ else {
19
+ this.browser.disconnect().then(() => {
20
+ console.log("Goodbye");
21
+ process.exit();
22
+ });
23
+ }
24
+ };
25
+ this.register = (src) => {
26
+ // console.log("register", src);
27
+ this.registry[src] = false;
28
+ };
29
+ this.deregister = (src) => {
30
+ // console.log("deregister", src, this.shutdownMode);
31
+ this.registry[src] = true;
32
+ if (this.shutdownMode) {
33
+ this.checkForShutdown();
34
+ }
35
+ };
13
36
  this.launchNode = async (src, dest) => {
14
37
  console.log("launchNode", src);
38
+ this.register(src);
15
39
  const destFolder = dest.replace(".mjs", "");
16
40
  let argz = "";
17
41
  const testConfig = this.configs.tests.find((t) => {
@@ -34,7 +58,6 @@ export class PM_Main extends PM {
34
58
  }
35
59
  else if (testConfigResource.ports > 0) {
36
60
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
37
- console.log("openPorts", openPorts);
38
61
  if (openPorts.length >= testConfigResource.ports) {
39
62
  for (let i = 0; i < testConfigResource.ports; i++) {
40
63
  portsToUse.push(openPorts[i][0]);
@@ -71,16 +94,15 @@ export class PM_Main extends PM {
71
94
  return module.default.then((defaultModule) => {
72
95
  defaultModule
73
96
  .receiveTestResourceConfig(argz)
74
- .then((x) => {
75
- console.log("then", x);
76
- return x;
77
- })
78
97
  .catch((e) => {
79
98
  console.log("catch", e);
99
+ })
100
+ .finally(() => {
101
+ this.deregister(src);
80
102
  });
81
103
  });
82
104
  });
83
- console.log("portsToUse", portsToUse);
105
+ // console.log("portsToUse", portsToUse);
84
106
  for (let i = 0; i <= portsToUse.length; i++) {
85
107
  if (portsToUse[i]) {
86
108
  this.ports[portsToUse[i]] = "true"; //port is open again
@@ -114,7 +136,7 @@ export class PM_Main extends PM {
114
136
  // console.log(`${i}: ${msg._args[i]}`);
115
137
  });
116
138
  page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
117
- console.log("main.ts browser custom-screenshot", testName);
139
+ // console.log("main.ts browser custom-screenshot", testName);
118
140
  const p = ssOpts.path;
119
141
  const dir = path.dirname(p);
120
142
  fs.mkdirSync(dir, {
@@ -185,7 +207,7 @@ export class PM_Main extends PM {
185
207
  delete files[testName];
186
208
  Promise.all(screenshots[testName] || []).then(() => {
187
209
  delete screenshots[testName];
188
- page.close();
210
+ // page.close();
189
211
  });
190
212
  // globalThis["writeFileSync"](
191
213
  // p + "/manifest.json",
@@ -219,7 +241,6 @@ export class PM_Main extends PM {
219
241
  });
220
242
  });
221
243
  };
222
- // launchNodeSideCar = async (src: string, dest: string) => {};
223
244
  this.launchNodeSideCar = async (src, dest, testConfig) => {
224
245
  const d = dest + ".mjs";
225
246
  console.log("launchNodeSideCar", src, dest, d);
@@ -245,7 +266,7 @@ export class PM_Main extends PM {
245
266
  }
246
267
  else if (testConfigResource.ports > 0) {
247
268
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
248
- console.log("openPorts", openPorts);
269
+ // console.log("openPorts", openPorts);
249
270
  if (openPorts.length >= testConfigResource.ports) {
250
271
  for (let i = 0; i < testConfigResource.ports; i++) {
251
272
  portsToUse.push(openPorts[i][0]);
@@ -276,7 +297,7 @@ export class PM_Main extends PM {
276
297
  // );
277
298
  this.server[builtfile] = await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
278
299
  return module.default.then((defaultModule) => {
279
- console.log("defaultModule", defaultModule);
300
+ // console.log("defaultModule", defaultModule);
280
301
  const s = new defaultModule();
281
302
  s.receiveTestResourceConfig(argz);
282
303
  // Object.create(defaultModule);
@@ -291,7 +312,7 @@ export class PM_Main extends PM {
291
312
  // });
292
313
  });
293
314
  });
294
- console.log("portsToUse", portsToUse);
315
+ // console.log("portsToUse", portsToUse);
295
316
  for (let i = 0; i <= portsToUse.length; i++) {
296
317
  if (portsToUse[i]) {
297
318
  this.ports[portsToUse[i]] = "true"; //port is open again
@@ -300,6 +321,7 @@ export class PM_Main extends PM {
300
321
  };
301
322
  this.launchWeb = (t, dest, sidecars) => {
302
323
  console.log("launchWeb", t, dest);
324
+ this.register(t);
303
325
  sidecars.map((sidecar) => {
304
326
  if (sidecar[1] === "node") {
305
327
  return this.launchNodeSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "node", this.configs), sidecar);
@@ -333,7 +355,7 @@ export class PM_Main extends PM {
333
355
  // console.log(`${i}: ${msg._args[i]}`);
334
356
  });
335
357
  page.exposeFunction("customScreenShot", async (ssOpts, testName) => {
336
- console.log("main.ts browser custom-screenshot", testName);
358
+ // console.log("main.ts browser custom-screenshot", testName);
337
359
  const p = ssOpts.path;
338
360
  const dir = path.dirname(p);
339
361
  fs.mkdirSync(dir, {
@@ -403,12 +425,15 @@ export class PM_Main extends PM {
403
425
  return fileStreams2[uid].end();
404
426
  });
405
427
  page.exposeFunction("customclose", (p, testName) => {
406
- console.log("\t closing", p);
428
+ // console.log("closing", p);
407
429
  fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
408
430
  delete files[testName];
431
+ // console.log("screenshots[testName]", screenshots[testName]);
409
432
  Promise.all(screenshots[testName] || []).then(() => {
410
433
  delete screenshots[testName];
411
- page.close();
434
+ // page.close();
435
+ // console.log("\t GOODBYE");
436
+ // whyIsNodeRunning();
412
437
  });
413
438
  // globalThis["writeFileSync"](
414
439
  // p + "/manifest.json",
@@ -434,8 +459,17 @@ export class PM_Main extends PM {
434
459
  .then(async (page) => {
435
460
  page.on("console", (log) => console.debug(`Log from client: [${log.text()}] `));
436
461
  await page.goto(`file://${`${dest}.html`}`, {});
437
- page.evaluate(evaluation).finally(() => {
462
+ page
463
+ .evaluate(evaluation)
464
+ .catch((e) => {
438
465
  console.log("evaluation failed.", dest);
466
+ console.log(e);
467
+ })
468
+ .finally(() => {
469
+ console.log("evaluation complete.", dest);
470
+ // page.close();
471
+ this.deregister(t);
472
+ // whyIsNodeRunning();
439
473
  });
440
474
  return page;
441
475
  });
@@ -443,6 +477,7 @@ export class PM_Main extends PM {
443
477
  this.server = {};
444
478
  this.configs = configs;
445
479
  this.ports = {};
480
+ this.registry = {};
446
481
  this.configs.ports.forEach((element) => {
447
482
  this.ports[element] = "true"; // set ports as open
448
483
  });
@@ -455,7 +490,7 @@ export class PM_Main extends PM {
455
490
  return false;
456
491
  };
457
492
  globalThis["writeFileSync"] = (filepath, contents, testName) => {
458
- console.log("globalThis-writeFileSync", filepath);
493
+ // console.log("globalThis-writeFileSync", filepath);
459
494
  // Create directories if they don't exist
460
495
  const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
461
496
  fs.mkdirSync(dir, {
@@ -484,15 +519,6 @@ export class PM_Main extends PM {
484
519
  fileStreams3[uid].end();
485
520
  };
486
521
  globalThis["customScreenShot"] = async (opts, page) => {
487
- // // fileStreams3[uid].write(contents);
488
- // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
489
- // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
490
- // // console.log("dir", dir);
491
- // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
492
- // recursive: true,
493
- // });
494
- // return page.screenshot(opts);
495
- console.log("main.ts node custom-screenshot", page);
496
522
  const p = opts.path;
497
523
  const dir = path.dirname(p);
498
524
  fs.mkdirSync(dir, {
@@ -516,35 +542,18 @@ export class PM_Main extends PM {
516
542
  }
517
543
  fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
518
544
  delete files[testName];
519
- // globalThis["writeFileSync"](
520
- // p + "/manifest.json",
521
- // // files.entries()
522
- // JSON.stringify(Array.from(files[testName]))
523
- // );
524
- // fileStreams3[uid].end();
525
545
  };
526
- // page.exposeFunction("customclose", () => {
527
- // console.log("closing doneFileStream2", doneFileStream2);
528
- // // console.log("closing doneFileStream2", doneFileStream2);
529
- // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
530
- // page.close();
531
- // });
532
- // // page.close();
533
- // // Promise.all(screenshots).then(() => {
534
- // // page.close();
535
- // // });
536
- // // setTimeout(() => {
537
- // // console.log("Delayed for 1 second.");
538
- // // page.close();
539
- // // }, 5000);
540
- // // return page.close();
541
- // });
546
+ }
547
+ shutDown() {
548
+ console.log("shutting down...");
549
+ this.shutdownMode = true;
550
+ this.checkForShutdown();
542
551
  }
543
552
  customScreenShot(opts) {
544
553
  throw new Error("Method not implemented.");
545
554
  }
546
555
  async startPuppeteer(options, destfolder) {
547
- this.browser = await puppeteer.launch(options);
556
+ this.browser = (await puppeteer.launch(options));
548
557
  return this.browser;
549
558
  }
550
559
  end(accessObject) {
@@ -22,7 +22,7 @@ export class PM_Node extends PM {
22
22
  return globalThis["write"](writeObject.uid, contents);
23
23
  }
24
24
  writeFileSync(filepath, contents) {
25
- console.log("pm_node-writeFileSync", this.testResourceConfiguration);
25
+ // console.log("pm_node-writeFileSync", this.testResourceConfiguration);
26
26
  return globalThis["writeFileSync"](this.testResourceConfiguration.fs + "/" + filepath, contents, this.testResourceConfiguration.name);
27
27
  }
28
28
  createWriteStream(filepath) {
@@ -6,44 +6,52 @@ import { glob } from "glob";
6
6
  import esbuildNodeConfiger from "./esbuildConfigs/node.js";
7
7
  import esbuildWebConfiger from "./esbuildConfigs/web.js";
8
8
  import webHtmlFrame from "./web.html.js";
9
- var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
9
+ // var mode: "DEV" | "PROD" = process.argv[2] === "-dev" ? "DEV" : "PROD";
10
10
  readline.emitKeypressEvents(process.stdin);
11
11
  if (process.stdin.isTTY)
12
12
  process.stdin.setRawMode(true);
13
- process.stdin.on("keypress", (str, key) => {
14
- if (key.name === "q") {
15
- console.log("Testeranto-EsBuild is shutting down...");
16
- mode = "PROD";
17
- onDone();
18
- }
19
- });
20
- let nodeDone, webDone = false;
21
- const onNodeDone = () => {
22
- nodeDone = true;
23
- onDone();
24
- };
25
- const onWebDone = () => {
26
- webDone = true;
27
- onDone();
28
- };
29
- const onDone = () => {
30
- console.log(JSON.stringify({
31
- nodeDone,
32
- webDone,
33
- mode,
34
- }, null, 2));
35
- if (nodeDone && webDone && mode === "PROD") {
36
- console.log("Testeranto-EsBuild is all done. Goodbye!");
37
- process.exit();
38
- }
39
- else {
40
- console.log("Testeranto-EsBuild is still working...");
41
- }
42
- };
43
13
  export class ITProject {
44
14
  constructor(configs) {
45
- this.mode = `up`;
15
+ this.nodeDone = false;
16
+ this.webDone = false;
17
+ this.onNodeDone = () => {
18
+ this.nodeDone = true;
19
+ this.onDone();
20
+ };
21
+ this.onWebDone = () => {
22
+ this.webDone = true;
23
+ this.onDone();
24
+ };
25
+ this.onDone = () => {
26
+ // console.log(this.nodeDone && this.webDone && this.mode === "PROD");
27
+ if (this.nodeDone && this.webDone && this.mode === "PROD") {
28
+ console.log("Testeranto-EsBuild is all done. Goodbye!");
29
+ process.exit();
30
+ }
31
+ else {
32
+ if (this.mode === "PROD") {
33
+ console.log("waiting for tests to finish");
34
+ console.log(JSON.stringify({
35
+ nodeDone: this.nodeDone,
36
+ webDone: this.webDone,
37
+ mode: this.mode,
38
+ }, null, 2));
39
+ }
40
+ else {
41
+ console.log("waiting for tests to change");
42
+ }
43
+ console.log("press 'q' to quit");
44
+ }
45
+ };
46
46
  this.config = configs;
47
+ this.mode = this.config.devMode ? "DEV" : "PROD";
48
+ process.stdin.on("keypress", (str, key) => {
49
+ if (key.name === "q") {
50
+ console.log("Testeranto-EsBuild is shutting down...");
51
+ this.mode = "PROD";
52
+ this.onDone();
53
+ }
54
+ });
47
55
  fs.writeFileSync(`${this.config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, this.config), { buildDir: process.cwd() + "/" + this.config.outdir }), null, 2));
48
56
  Promise.resolve(Promise.all([...this.getSecondaryEndpointsPoints("web")].map(async (sourceFilePath) => {
49
57
  const sourceFileSplit = sourceFilePath.split("/");
@@ -72,14 +80,14 @@ export class ITProject {
72
80
  esbuild
73
81
  .context(esbuildNodeConfiger(this.config, nodeEntryPoints))
74
82
  .then(async (nodeContext) => {
75
- if (mode == "DEV") {
83
+ if (this.config.devMode) {
76
84
  await nodeContext.watch().then((v) => {
77
- onNodeDone();
85
+ this.onNodeDone();
78
86
  });
79
87
  }
80
88
  else {
81
89
  nodeContext.rebuild().then((v) => {
82
- onNodeDone();
90
+ this.onNodeDone();
83
91
  });
84
92
  }
85
93
  return nodeContext;
@@ -87,14 +95,14 @@ export class ITProject {
87
95
  esbuild
88
96
  .context(esbuildWebConfiger(this.config, webEntryPoints))
89
97
  .then(async (webContext) => {
90
- if (mode == "DEV") {
98
+ if (this.config.devMode) {
91
99
  await webContext.watch().then((v) => {
92
- onWebDone();
100
+ this.onWebDone();
93
101
  });
94
102
  }
95
103
  else {
96
104
  webContext.rebuild().then((v) => {
97
- onWebDone();
105
+ this.onWebDone();
98
106
  });
99
107
  }
100
108
  return webContext;
@@ -3,36 +3,34 @@ import fs from "fs";
3
3
  import watch from "recursive-watch";
4
4
  import { PM_Main } from "./PM/main.js";
5
5
  import { destinationOfRuntime } from "./utils.js";
6
- var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
7
- const node2web = {};
8
- const web2node = {};
9
- const childProcesses = {};
6
+ // var mode: "DEV" | "PROD" = process.argv[2] === "-dev" ? "DEV" : "PROD";
7
+ // const node2web: Record<string, string[]> = {};
8
+ // const web2node: Record<string, string[]> = {};
9
+ // const childProcesses: Record<string, "loaded" | "running" | "done"> = {};
10
10
  readline.emitKeypressEvents(process.stdin);
11
11
  if (process.stdin.isTTY)
12
12
  process.stdin.setRawMode(true);
13
- console.log("hello Puppeteer", process.env);
14
- console.log("\n Puppeteer is running. Press 'q' to quit\n");
15
- process.stdin.on("keypress", (str, key) => {
16
- if (key.name === "q") {
17
- process.exit();
18
- }
19
- });
13
+ // let shutDownMode = false;
20
14
  export default async (partialConfig) => {
21
15
  const config = Object.assign(Object.assign({}, partialConfig), { buildDir: process.cwd() + "/" + partialConfig.outdir });
22
16
  fs.writeFileSync(`${config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, config), { buildDir: process.cwd() + "/" + config.outdir }), null, 2));
23
17
  const pm = new PM_Main(config);
24
18
  await pm.startPuppeteer({
19
+ // timeout: 1,
25
20
  waitForInitialPage: false,
26
- executablePath: process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
21
+ executablePath:
22
+ // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
23
+ "/opt/homebrew/bin/chromium",
27
24
  headless: true,
28
- // dumpio: true,
25
+ dumpio: true,
26
+ // timeout: 0,
29
27
  args: [
28
+ // "--auto-open-devtools-for-tabs",
30
29
  "--disable-features=IsolateOrigins,site-per-process",
31
30
  "--disable-site-isolation-trials",
32
31
  "--allow-insecure-localhost",
33
32
  "--allow-file-access-from-files",
34
33
  "--allow-running-insecure-content",
35
- // "--auto-open-devtools-for-tabs",
36
34
  "--disable-dev-shm-usage",
37
35
  "--disable-extensions",
38
36
  "--disable-gpu",
@@ -57,6 +55,13 @@ export default async (partialConfig) => {
57
55
  // "--start-maximized",
58
56
  ],
59
57
  }, ".");
58
+ console.log("\n Puppeteer is running. Press 'q' to quit\n");
59
+ process.stdin.on("keypress", (str, key) => {
60
+ if (key.name === "q") {
61
+ pm.shutDown();
62
+ // process.exit();
63
+ }
64
+ });
60
65
  config.tests.forEach(([test, runtime, tr, sidecars]) => {
61
66
  if (runtime === "node") {
62
67
  pm.launchNode(test, destinationOfRuntime(test, "node", config));
@@ -68,33 +73,39 @@ export default async (partialConfig) => {
68
73
  console.error("runtime makes no sense", runtime);
69
74
  }
70
75
  });
71
- console.log("ready and watching for changes...", config.buildDir);
72
- watch(config.buildDir, (eventType, changedFile) => {
73
- if (changedFile) {
74
- config.tests.forEach(([test, runtime, tr, sidecars]) => {
75
- if (eventType === "change" || eventType === "rename") {
76
- if (changedFile ===
77
- test
78
- .replace("./", "node/")
79
- .split(".")
80
- .slice(0, -1)
81
- .concat("mjs")
82
- .join(".")) {
83
- pm.launchNode(test, destinationOfRuntime(test, "node", config));
76
+ if (config.devMode) {
77
+ console.log("ready and watching for changes...", config.buildDir);
78
+ watch(config.buildDir, (eventType, changedFile) => {
79
+ if (changedFile) {
80
+ config.tests.forEach(([test, runtime, tr, sidecars]) => {
81
+ if (eventType === "change" || eventType === "rename") {
82
+ if (changedFile ===
83
+ test
84
+ .replace("./", "node/")
85
+ .split(".")
86
+ .slice(0, -1)
87
+ .concat("mjs")
88
+ .join(".")) {
89
+ pm.launchNode(test, destinationOfRuntime(test, "node", config));
90
+ }
91
+ if (changedFile ===
92
+ test
93
+ .replace("./", "web/")
94
+ .split(".")
95
+ .slice(0, -1)
96
+ .concat("mjs")
97
+ .join(".")) {
98
+ pm.launchWeb(test, destinationOfRuntime(test, "web", config), sidecars);
99
+ }
84
100
  }
85
- if (changedFile ===
86
- test
87
- .replace("./", "web/")
88
- .split(".")
89
- .slice(0, -1)
90
- .concat("mjs")
91
- .join(".")) {
92
- pm.launchWeb(test, destinationOfRuntime(test, "web", config), sidecars);
93
- }
94
- }
95
- });
96
- }
97
- });
101
+ });
102
+ }
103
+ });
104
+ }
105
+ else {
106
+ pm.shutDown();
107
+ }
108
+ // pm.browser.close();
98
109
  // does not work on linux
99
110
  // fs.watch(
100
111
  // config.buildDir,