testeranto 0.129.0 → 0.134.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 (386) hide show
  1. package/.aider.chat.history.md +137197 -0
  2. package/.aider.input.history +334 -0
  3. package/.aider.tags.cache.v3/18/8b/7dfca822129dad10b5cacadf7728.val +0 -0
  4. package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
  5. package/.aider.tags.cache.v3/8d/fa/12860238755bcfab9af8a93c52ab.val +0 -0
  6. package/.aider.tags.cache.v3/{b7/e6/5be87b62aeaf2bc244ff41c1b61a.val → a7/97/6d37fce350ad2d588f36729db0cd.val} +0 -0
  7. package/.aider.tags.cache.v3/{e3/e6/3501625caf5d5eb171f0d248462e.val → ad/3c/10f2ab1397f6d544e613d2a6acaf.val} +0 -0
  8. package/.aider.tags.cache.v3/cache.db +0 -0
  9. package/.aider.tags.cache.v3/cache.db-shm +0 -0
  10. package/.aider.tags.cache.v3/cache.db-wal +0 -0
  11. package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
  12. package/README.md +333 -34
  13. package/bundle.js +8 -75
  14. package/dist/common/src/Init.js +6 -1
  15. package/dist/common/src/Node.js +6 -4
  16. package/dist/common/src/NodeSidecar.js +15 -0
  17. package/dist/common/src/PM/PM_WithEslintAndTsc.js +187 -0
  18. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +109 -0
  19. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +94 -0
  20. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +94 -0
  21. package/dist/common/src/PM/base.js +33 -16
  22. package/dist/common/src/PM/main.js +484 -425
  23. package/dist/common/src/PM/node.js +44 -19
  24. package/dist/common/src/PM/nodeSidecar.js +65 -0
  25. package/dist/common/src/PM/pure.js +55 -47
  26. package/dist/common/src/PM/pureSidecar.js +48 -0
  27. package/dist/common/src/PM/sidecar.js +11 -0
  28. package/dist/common/src/PM/web.js +24 -6
  29. package/dist/common/src/PM/webSidecar.js +47 -0
  30. package/dist/common/src/PureSidecar.js +13 -0
  31. package/dist/common/src/SP__Polygon.test.js +10 -0
  32. package/dist/common/src/WebSidecar.js +14 -0
  33. package/dist/common/src/build.js +63 -10
  34. package/dist/common/src/defaultConfig.js +1 -0
  35. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
  36. package/dist/common/src/esbuildConfigs/pure.js +15 -1
  37. package/dist/common/src/esbuildConfigs/web.js +10 -1
  38. package/dist/common/src/{SubPackages/react-dom/jsx/index.js → lib/Sidecar.js} +4 -0
  39. package/dist/common/src/lib/abstractBase.js +7 -5
  40. package/dist/common/src/lib/basebuilder.js +1 -3
  41. package/dist/common/src/lib/classBuilder.js +4 -17
  42. package/dist/common/src/lib/core.js +11 -6
  43. package/dist/common/src/lib/index.js +13 -4
  44. package/dist/common/src/lib/pmProxy.js +1 -1
  45. package/dist/common/src/mothership/index.js +16 -0
  46. package/dist/common/src/mothership/test.js +65 -0
  47. package/dist/common/src/utils/queue.js +36 -0
  48. package/dist/common/src/utils.js +34 -5
  49. package/dist/common/testeranto.config.js +77 -39
  50. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  51. package/dist/module/src/Init.js +6 -1
  52. package/dist/module/src/Node.js +6 -4
  53. package/dist/module/src/NodeSidecar.js +11 -0
  54. package/dist/module/src/PM/PM_WithEslintAndTsc.js +180 -0
  55. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +104 -0
  56. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +89 -0
  57. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +89 -0
  58. package/dist/module/src/PM/base.js +33 -16
  59. package/dist/module/src/PM/main.js +485 -426
  60. package/dist/module/src/PM/node.js +44 -19
  61. package/dist/module/src/PM/nodeSidecar.js +58 -0
  62. package/dist/module/src/PM/pure.js +55 -44
  63. package/dist/module/src/PM/pureSidecar.js +41 -0
  64. package/dist/module/src/PM/sidecar.js +7 -0
  65. package/dist/module/src/PM/web.js +24 -6
  66. package/dist/module/src/PM/webSidecar.js +40 -0
  67. package/dist/module/src/Project.js +154 -75
  68. package/dist/module/src/PureSidecar.js +9 -0
  69. package/dist/module/src/ReportClient.js +132 -97
  70. package/dist/module/src/SP__Polygon.test.js +8 -0
  71. package/dist/module/src/TestReport.js +32 -14
  72. package/dist/module/src/WebSidecar.js +10 -0
  73. package/dist/module/src/build.js +63 -10
  74. package/dist/module/src/defaultConfig.js +1 -0
  75. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
  76. package/dist/module/src/esbuildConfigs/pure.js +15 -1
  77. package/dist/module/src/esbuildConfigs/web.js +10 -1
  78. package/dist/module/src/lib/Sidecar.js +2 -0
  79. package/dist/module/src/lib/abstractBase.js +7 -5
  80. package/dist/module/src/lib/basebuilder.js +1 -3
  81. package/dist/module/src/lib/classBuilder.js +4 -17
  82. package/dist/module/src/lib/core.js +11 -6
  83. package/dist/module/src/lib/index.js +12 -4
  84. package/dist/module/src/lib/pmProxy.js +1 -1
  85. package/dist/module/src/mothership/index.js +11 -0
  86. package/dist/module/src/mothership/test.js +60 -0
  87. package/dist/module/src/utils/queue.js +32 -0
  88. package/dist/module/src/utils.js +34 -5
  89. package/dist/module/testeranto.config.js +77 -36
  90. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  91. package/dist/prebuild/Project.js +3288 -385
  92. package/dist/prebuild/ReportClient.js +0 -24638
  93. package/dist/prebuild/TestReport.js +14 -8
  94. package/dist/prebuild/build.mjs +159 -15
  95. package/dist/prebuild/init-docs.mjs +2 -5
  96. package/dist/prebuild/mothership/index.mjs +17 -0
  97. package/dist/prebuild/run.mjs +693 -412
  98. package/dist/types/src/NodeSidecar.d.ts +6 -0
  99. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +23 -0
  100. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +20 -0
  101. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +20 -0
  102. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +20 -0
  103. package/dist/types/src/PM/base.d.ts +6 -5
  104. package/dist/types/src/PM/index.d.ts +5 -3
  105. package/dist/types/src/PM/main.d.ts +23 -26
  106. package/dist/types/src/PM/node.d.ts +8 -6
  107. package/dist/types/src/PM/nodeSidecar.d.ts +13 -0
  108. package/dist/types/src/PM/pure.d.ts +4 -3
  109. package/dist/types/src/PM/pureSidecar.d.ts +11 -0
  110. package/dist/types/src/PM/sidecar.d.ts +8 -0
  111. package/dist/types/src/PM/web.d.ts +18 -8
  112. package/dist/types/src/PM/webSidecar.d.ts +11 -0
  113. package/dist/types/src/PureSidecar.d.ts +8 -0
  114. package/dist/types/src/Types.d.ts +109 -43
  115. package/dist/types/src/WebSidecar.d.ts +8 -0
  116. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
  117. package/dist/types/src/lib/Sidecar.d.ts +5 -0
  118. package/dist/types/src/lib/abstractBase.d.ts +6 -6
  119. package/dist/types/src/lib/classBuilder.d.ts +7 -1
  120. package/dist/types/src/lib/core.d.ts +7 -1
  121. package/dist/types/src/lib/index.d.ts +10 -4
  122. package/dist/types/src/lib/types.d.ts +12 -2
  123. package/dist/types/src/mothership/index.d.ts +2 -0
  124. package/dist/types/src/mothership/test.d.ts +21 -0
  125. package/dist/types/src/utils/queue.d.ts +11 -0
  126. package/dist/types/src/utils.d.ts +4 -7
  127. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  128. package/package.json +19 -105
  129. package/src/Init.ts +6 -5
  130. package/src/Node.ts +7 -4
  131. package/src/NodeSidecar.ts +22 -0
  132. package/src/PM/PM_WithEslintAndTsc.ts +284 -0
  133. package/src/PM/__tests__/nodeSidecar.testeranto.ts +173 -0
  134. package/src/PM/__tests__/pureSidecar.testeranto.ts +157 -0
  135. package/src/PM/__tests__/webSidecar.testeranto.ts +157 -0
  136. package/src/PM/base.ts +38 -17
  137. package/src/PM/index.ts +9 -3
  138. package/src/PM/main.ts +608 -582
  139. package/src/PM/node.ts +67 -23
  140. package/src/PM/nodeSidecar.ts +73 -0
  141. package/src/PM/pure.ts +68 -58
  142. package/src/PM/pureSidecar.ts +56 -0
  143. package/src/PM/sidecar.ts +48 -0
  144. package/src/PM/web.ts +42 -11
  145. package/src/PM/webSidecar.ts +55 -0
  146. package/src/Project.tsx +312 -109
  147. package/src/Pure.ts +0 -2
  148. package/src/PureSidecar.ts +14 -0
  149. package/src/ReportClient.tsx +164 -170
  150. package/src/SP__Polygon.test.ts +13 -0
  151. package/src/TestReport.tsx +77 -6
  152. package/src/Types.ts +227 -122
  153. package/src/WebSidecar.ts +14 -0
  154. package/src/build.ts +101 -14
  155. package/src/defaultConfig.ts +1 -0
  156. package/src/esbuildConfigs/README.md +46 -0
  157. package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
  158. package/src/esbuildConfigs/pure.ts +22 -1
  159. package/src/esbuildConfigs/web.ts +13 -0
  160. package/src/lib/Sidecar.ts +6 -0
  161. package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
  162. package/src/lib/abstractBase.ts +12 -9
  163. package/src/lib/basebuilder.ts +5 -4
  164. package/src/lib/classBuilder.ts +15 -18
  165. package/src/lib/core.ts +24 -11
  166. package/src/lib/index.ts +38 -18
  167. package/src/lib/pmProxy.ts +3 -1
  168. package/src/lib/types.ts +15 -2
  169. package/src/mothership/index.ts +15 -0
  170. package/src/mothership/test.ts +137 -0
  171. package/src/run.ts +0 -1
  172. package/src/utils/queue.ts +41 -0
  173. package/src/utils.ts +41 -15
  174. package/testeranto/bundles/node/mothership/chunk-PG6KUKNP.mjs +44 -0
  175. package/testeranto/bundles/node/mothership/chunk-V2EQEXU2.mjs +1032 -0
  176. package/testeranto/bundles/node/mothership/metafile.json +389 -0
  177. package/testeranto/bundles/node/mothership/src/PM/__tests__/nodeSidecar.testeranto.mjs +1219 -0
  178. package/testeranto/bundles/node/mothership/src/PM/__tests__/pureSidecar.testeranto.mjs +156 -0
  179. package/testeranto/bundles/node/mothership/src/PM/__tests__/sidecar.testeranto.mjs +1199 -0
  180. package/testeranto/bundles/node/mothership/src/PM/__tests__/webSidecar.testeranto.mjs +156 -0
  181. package/testeranto/bundles/node/mothership/src/mothership/test.mjs +24411 -0
  182. package/testeranto/bundles/pure/mothership/metafile.json +8 -0
  183. package/testeranto/bundles/web/mothership/metafile.json +8 -0
  184. package/testeranto/index.html +4 -4
  185. package/testeranto/reports/mothership/config.json +25 -0
  186. package/testeranto/reports/{redux → mothership}/index.html +8 -8
  187. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/console_log.txt +0 -0
  188. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +20 -0
  189. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +1564 -0
  190. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/log.txt +0 -0
  191. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +22 -0
  192. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +35 -0
  193. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/index.html +20 -0
  194. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +80 -0
  195. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +12 -0
  196. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +26 -0
  197. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/bdd_errors.txt +1 -0
  198. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/console_log.txt +0 -0
  199. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/index.html +20 -0
  200. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/lint_errors.json +1564 -0
  201. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/log.txt +0 -0
  202. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/prompt.txt +22 -0
  203. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/tests.json +56 -0
  204. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/type_errors.txt +29 -0
  205. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/index.html +20 -0
  206. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +80 -0
  207. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +12 -0
  208. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +26 -0
  209. package/testeranto/reports/mothership/src/mothership/test/node/bdd_errors.txt +1 -0
  210. package/testeranto/reports/mothership/src/mothership/test/node/console_log.txt +4 -0
  211. package/testeranto/reports/mothership/src/mothership/test/node/index.html +20 -0
  212. package/testeranto/reports/mothership/src/mothership/test/node/lint_errors.json +1 -0
  213. package/testeranto/reports/mothership/src/mothership/test/node/log.txt +0 -0
  214. package/testeranto/reports/mothership/src/mothership/test/node/prompt.txt +12 -0
  215. package/testeranto/reports/mothership/src/mothership/test/node/tests.json +24 -0
  216. package/testeranto/reports/mothership/src/mothership/test/node/type_errors.txt +18 -0
  217. package/testeranto/reports/mothership/summary.json +9 -0
  218. package/testeranto.config.ts +82 -44
  219. package/tsc.log +78 -81
  220. package/dist/common/src/SubPackages/react/component/index.js +0 -20
  221. package/dist/common/src/SubPackages/react/component/node.js +0 -10
  222. package/dist/common/src/SubPackages/react/component/pure.js +0 -10
  223. package/dist/common/src/SubPackages/react/component/web.js +0 -10
  224. package/dist/common/src/SubPackages/react/jsx/index.js +0 -64
  225. package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
  226. package/dist/common/src/SubPackages/react/jsx/pure.js +0 -10
  227. package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
  228. package/dist/common/src/SubPackages/react-dom/component/dynamic.js +0 -61
  229. package/dist/common/src/SubPackages/react-dom/component/node.js +0 -10
  230. package/dist/common/src/SubPackages/react-dom/component/pure.js +0 -10
  231. package/dist/common/src/SubPackages/react-dom/component/static.js +0 -26
  232. package/dist/common/src/SubPackages/react-dom/component/web.js +0 -16
  233. package/dist/common/src/SubPackages/react-dom/jsx/dynamic.js +0 -31
  234. package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -10
  235. package/dist/common/src/SubPackages/react-dom/jsx/pure.js +0 -10
  236. package/dist/common/src/SubPackages/react-dom/jsx/static.js +0 -59
  237. package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -16
  238. package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -54
  239. package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -15
  240. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -70
  241. package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
  242. package/dist/common/src/SubPackages/react-test-renderer/component/pure.js +0 -8
  243. package/dist/common/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -57
  244. package/dist/common/src/SubPackages/react-test-renderer/component/test/node.js +0 -10
  245. package/dist/common/src/SubPackages/react-test-renderer/component/test/pure.js +0 -10
  246. package/dist/common/src/SubPackages/react-test-renderer/component/test/web.js +0 -10
  247. package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
  248. package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -60
  249. package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -60
  250. package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -67
  251. package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
  252. package/dist/common/src/SubPackages/react-test-renderer/jsx/pure.js +0 -10
  253. package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
  254. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -52
  255. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
  256. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
  257. package/dist/common/src/examples/react/component/index.js +0 -33
  258. package/dist/common/src/examples/react/component/test.js +0 -36
  259. package/dist/module/src/SubPackages/react/component/index.js +0 -13
  260. package/dist/module/src/SubPackages/react/component/node.js +0 -5
  261. package/dist/module/src/SubPackages/react/component/pure.js +0 -5
  262. package/dist/module/src/SubPackages/react/component/web.js +0 -5
  263. package/dist/module/src/SubPackages/react/jsx/index.js +0 -58
  264. package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
  265. package/dist/module/src/SubPackages/react/jsx/pure.js +0 -5
  266. package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
  267. package/dist/module/src/SubPackages/react-dom/component/dynamic.js +0 -54
  268. package/dist/module/src/SubPackages/react-dom/component/node.js +0 -5
  269. package/dist/module/src/SubPackages/react-dom/component/pure.js +0 -5
  270. package/dist/module/src/SubPackages/react-dom/component/static.js +0 -22
  271. package/dist/module/src/SubPackages/react-dom/component/web.js +0 -11
  272. package/dist/module/src/SubPackages/react-dom/jsx/dynamic.js +0 -27
  273. package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -5
  274. package/dist/module/src/SubPackages/react-dom/jsx/pure.js +0 -5
  275. package/dist/module/src/SubPackages/react-dom/jsx/static.js +0 -53
  276. package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -11
  277. package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
  278. package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -14
  279. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
  280. package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
  281. package/dist/module/src/SubPackages/react-test-renderer/component/pure.js +0 -3
  282. package/dist/module/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -54
  283. package/dist/module/src/SubPackages/react-test-renderer/component/test/node.js +0 -5
  284. package/dist/module/src/SubPackages/react-test-renderer/component/test/pure.js +0 -5
  285. package/dist/module/src/SubPackages/react-test-renderer/component/test/web.js +0 -5
  286. package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
  287. package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
  288. package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
  289. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -28
  290. package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
  291. package/dist/module/src/SubPackages/react-test-renderer/jsx/pure.js +0 -5
  292. package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
  293. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
  294. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
  295. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
  296. package/dist/module/src/examples/react/component/index.js +0 -26
  297. package/dist/module/src/examples/react/component/test.js +0 -32
  298. package/dist/prebuild/ReportClient.css +0 -11342
  299. package/dist/tsconfig.tsbuildinfo +0 -1
  300. package/dist/types/src/SubPackages/react/component/index.d.ts +0 -4
  301. package/dist/types/src/SubPackages/react/component/node.d.ts +0 -4
  302. package/dist/types/src/SubPackages/react/component/pure.d.ts +0 -4
  303. package/dist/types/src/SubPackages/react/component/web.d.ts +0 -4
  304. package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -5
  305. package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
  306. package/dist/types/src/SubPackages/react/jsx/pure.d.ts +0 -4
  307. package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
  308. package/dist/types/src/SubPackages/react-dom/component/dynamic.d.ts +0 -20
  309. package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -4
  310. package/dist/types/src/SubPackages/react-dom/component/pure.d.ts +0 -4
  311. package/dist/types/src/SubPackages/react-dom/component/static.d.ts +0 -9
  312. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -4
  313. package/dist/types/src/SubPackages/react-dom/jsx/dynamic.d.ts +0 -5
  314. package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -6
  315. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -4
  316. package/dist/types/src/SubPackages/react-dom/jsx/pure.d.ts +0 -4
  317. package/dist/types/src/SubPackages/react-dom/jsx/static.d.ts +0 -5
  318. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
  319. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -6
  320. package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -5
  321. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -3
  322. package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -4
  323. package/dist/types/src/SubPackages/react-test-renderer/component/pure.d.ts +0 -4
  324. package/dist/types/src/SubPackages/react-test-renderer/component/test/implementation.d.ts +0 -4
  325. package/dist/types/src/SubPackages/react-test-renderer/component/test/node.d.ts +0 -3
  326. package/dist/types/src/SubPackages/react-test-renderer/component/test/pure.d.ts +0 -4
  327. package/dist/types/src/SubPackages/react-test-renderer/component/test/web.d.ts +0 -3
  328. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  329. package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
  330. package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -9
  331. package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -11
  332. package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -4
  333. package/dist/types/src/SubPackages/react-test-renderer/jsx/pure.d.ts +0 -4
  334. package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -4
  335. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -15
  336. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  337. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  338. package/dist/types/src/examples/react/component/index.d.ts +0 -13
  339. package/dist/types/src/examples/react/component/test.d.ts +0 -17
  340. package/src/SubPackages/react/component/index.ts +0 -28
  341. package/src/SubPackages/react/component/node.ts +0 -17
  342. package/src/SubPackages/react/component/pure.ts +0 -17
  343. package/src/SubPackages/react/component/web.ts +0 -17
  344. package/src/SubPackages/react/jsx/index.ts +0 -75
  345. package/src/SubPackages/react/jsx/node.ts +0 -23
  346. package/src/SubPackages/react/jsx/pure.ts +0 -23
  347. package/src/SubPackages/react/jsx/web.ts +0 -24
  348. package/src/SubPackages/react-dom/component/dynamic.ts +0 -107
  349. package/src/SubPackages/react-dom/component/node.ts +0 -17
  350. package/src/SubPackages/react-dom/component/pure.ts +0 -17
  351. package/src/SubPackages/react-dom/component/static.ts +0 -41
  352. package/src/SubPackages/react-dom/component/web.ts +0 -32
  353. package/src/SubPackages/react-dom/jsx/dynamic.ts +0 -46
  354. package/src/SubPackages/react-dom/jsx/index.ts +0 -6
  355. package/src/SubPackages/react-dom/jsx/node.ts +0 -18
  356. package/src/SubPackages/react-dom/jsx/pure.ts +0 -18
  357. package/src/SubPackages/react-dom/jsx/static.ts +0 -87
  358. package/src/SubPackages/react-dom/jsx/web.ts +0 -26
  359. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -54
  360. package/src/SubPackages/react-test-renderer/component/index.ts +0 -32
  361. package/src/SubPackages/react-test-renderer/component/interface.ts +0 -43
  362. package/src/SubPackages/react-test-renderer/component/node.ts +0 -18
  363. package/src/SubPackages/react-test-renderer/component/pure.ts +0 -18
  364. package/src/SubPackages/react-test-renderer/component/test/implementation.ts +0 -63
  365. package/src/SubPackages/react-test-renderer/component/test/node.ts +0 -14
  366. package/src/SubPackages/react-test-renderer/component/test/pure.ts +0 -14
  367. package/src/SubPackages/react-test-renderer/component/test/web.ts +0 -14
  368. package/src/SubPackages/react-test-renderer/component/web.ts +0 -18
  369. package/src/SubPackages/react-test-renderer/fc/node.ts +0 -83
  370. package/src/SubPackages/react-test-renderer/fc/web.ts +0 -80
  371. package/src/SubPackages/react-test-renderer/jsx/index.ts +0 -61
  372. package/src/SubPackages/react-test-renderer/jsx/node.ts +0 -31
  373. package/src/SubPackages/react-test-renderer/jsx/pure.ts +0 -31
  374. package/src/SubPackages/react-test-renderer/jsx/web.ts +0 -32
  375. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +0 -73
  376. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +0 -36
  377. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +0 -36
  378. package/src/examples/react/component/index.tsx +0 -35
  379. package/src/examples/react/component/test.ts +0 -83
  380. package/testeranto/bundles/node/redux/metafile.json +0 -559
  381. package/testeranto/bundles/pure/redux/metafile.json +0 -554
  382. package/testeranto/bundles/web/redux/metafile.json +0 -504
  383. package/testeranto/bundles/web/redux/test/web.html +0 -19
  384. package/testeranto/reports/redux/config.json +0 -38
  385. package/testeranto/reports/redux/summary.json +0 -20
  386. /package/dist/{module/src/SubPackages/react-dom/jsx/index.js → types/src/SP__Polygon.test.d.ts} +0 -0
@@ -1,17 +1,17 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ /* eslint-disable no-async-promise-executor */
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ /* eslint-disable @typescript-eslint/no-unused-vars */
1
5
  import { spawn } from "node:child_process";
2
- import ts from "typescript";
3
6
  import net from "net";
4
7
  import fs, { watch } from "fs";
5
8
  import path from "path";
6
9
  import puppeteer from "puppeteer-core";
7
10
  import ansiC from "ansi-colors";
8
11
  import crypto from "node:crypto";
9
- import { ESLint } from "eslint";
10
- import tsc from "tsc-prog";
11
- import { getRunnables, lintPather, promptPather, tscPather, } from "../utils";
12
- import { PM_Base } from "./base.js";
13
- const eslint = new ESLint();
14
- const formatter = await eslint.loadFormatter("./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs");
12
+ import { getRunnables } from "../utils";
13
+ import { Queue } from "../utils/queue.js";
14
+ import { PM_WithEslintAndTsc } from "./PM_WithEslintAndTsc.js";
15
15
  const changes = {};
16
16
  const fileHashes = {};
17
17
  const files = {};
@@ -44,7 +44,7 @@ async function writeFileAndCreateDir(filePath, data) {
44
44
  const dirPath = path.dirname(filePath);
45
45
  try {
46
46
  await fs.promises.mkdir(dirPath, { recursive: true });
47
- await fs.appendFileSync(filePath, data);
47
+ await fs.writeFileSync(filePath, data);
48
48
  }
49
49
  catch (error) {
50
50
  console.error(`Error writing file: ${error}`);
@@ -67,7 +67,7 @@ function isValidUrl(string) {
67
67
  }
68
68
  }
69
69
  // Wait for file to exist, checks every 2 seconds by default
70
- function pollForFile(path, timeout = 2000) {
70
+ async function pollForFile(path, timeout = 2000) {
71
71
  const intervalObj = setInterval(function () {
72
72
  const file = path;
73
73
  const fileExists = fs.existsSync(file);
@@ -78,153 +78,19 @@ function pollForFile(path, timeout = 2000) {
78
78
  }
79
79
  }, timeout);
80
80
  }
81
- export class PM_Main extends PM_Base {
81
+ export class PM_Main extends PM_WithEslintAndTsc {
82
82
  constructor(configs, name, mode) {
83
- super(configs);
84
- this.bigBoard = {};
83
+ super(configs, name, mode);
85
84
  this.getRunnables = (tests, testName, payload = {
86
85
  nodeEntryPoints: {},
86
+ nodeEntryPointSidecars: {},
87
87
  webEntryPoints: {},
88
- importEntryPoints: {},
88
+ webEntryPointSidecars: {},
89
+ pureEntryPoints: {},
90
+ pureEntryPointSidecars: {},
89
91
  }) => {
90
92
  return getRunnables(tests, testName, payload);
91
93
  };
92
- this.tscCheck = async ({ entrypoint, addableFiles, platform, }) => {
93
- console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
94
- this.typeCheckIsRunning(entrypoint);
95
- const program = tsc.createProgramFromConfig({
96
- basePath: process.cwd(), // always required, used for relative paths
97
- configFilePath: "tsconfig.json", // config to inherit from (optional)
98
- compilerOptions: {
99
- outDir: tscPather(entrypoint, platform, this.name),
100
- // declaration: true,
101
- // skipLibCheck: true,
102
- noEmit: true,
103
- },
104
- include: addableFiles, //["src/**/*"],
105
- // exclude: ["node_modules", "../testeranto"],
106
- // exclude: ["**/*.test.ts", "**/*.spec.ts"],
107
- });
108
- const tscPath = tscPather(entrypoint, platform, this.name);
109
- let allDiagnostics = program.getSemanticDiagnostics();
110
- const results = [];
111
- allDiagnostics.forEach((diagnostic) => {
112
- if (diagnostic.file) {
113
- let { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
114
- let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
115
- results.push(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
116
- }
117
- else {
118
- results.push(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"));
119
- }
120
- });
121
- fs.writeFileSync(tscPath, results.join("\n"));
122
- this.typeCheckIsNowDone(entrypoint, results.length);
123
- };
124
- this.eslintCheck = async (entrypoint, platform, addableFiles) => {
125
- console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
126
- this.lintIsRunning(entrypoint);
127
- const results = (await eslint.lintFiles(addableFiles))
128
- .filter((r) => r.messages.length)
129
- .filter((r) => {
130
- return r.messages[0].ruleId !== null;
131
- })
132
- .map((r) => {
133
- delete r.source;
134
- return r;
135
- });
136
- fs.writeFileSync(lintPather(entrypoint, platform, this.name), await formatter.format(results));
137
- this.lintIsNowDone(entrypoint, results.length);
138
- };
139
- this.makePrompt = async (entryPoint, addableFiles, platform) => {
140
- this.bigBoard[entryPoint].prompt = "?";
141
- const promptPath = promptPather(entryPoint, platform, this.name);
142
- const testPaths = path.join("testeranto", "reports", this.name, platform, entryPoint.split(".").slice(0, -1).join("."), `tests.json`);
143
- const featuresPath = path.join("testeranto", "reports", this.name, platform, entryPoint.split(".").slice(0, -1).join("."), `featurePrompt.txt`);
144
- fs.writeFileSync(promptPath, `
145
- ${addableFiles
146
- .map((x) => {
147
- return `/add ${x}`;
148
- })
149
- .join("\n")}
150
-
151
- /read ${lintPather(entryPoint, platform, this.name)}
152
- /read ${tscPather(entryPoint, platform, this.name)}
153
- /read ${testPaths}
154
-
155
- /load ${featuresPath}
156
-
157
- /code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(entryPoint, platform, this.name)}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(entryPoint, platform, this.name)}"
158
- `);
159
- this.bigBoard[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint
160
- .split(".")
161
- .slice(0, -1)
162
- .join(".")}/prompt.txt`;
163
- this.checkForShutdown();
164
- };
165
- this.checkForShutdown = () => {
166
- this.writeBigBoard();
167
- if (this.mode === "dev")
168
- return;
169
- let inflight = false;
170
- Object.keys(this.bigBoard).forEach((k) => {
171
- if (this.bigBoard[k].prompt === "?") {
172
- console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
173
- inflight = true;
174
- }
175
- });
176
- Object.keys(this.bigBoard).forEach((k) => {
177
- if (this.bigBoard[k].runTimeError === "?") {
178
- console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
179
- inflight = true;
180
- }
181
- });
182
- Object.keys(this.bigBoard).forEach((k) => {
183
- if (this.bigBoard[k].staticErrors === "?") {
184
- console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
185
- inflight = true;
186
- }
187
- });
188
- Object.keys(this.bigBoard).forEach((k) => {
189
- if (this.bigBoard[k].typeErrors === "?") {
190
- console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
191
- inflight = true;
192
- }
193
- });
194
- this.writeBigBoard();
195
- if (!inflight) {
196
- this.browser.disconnect().then(() => {
197
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
198
- process.exit();
199
- });
200
- }
201
- };
202
- this.typeCheckIsRunning = (src) => {
203
- this.bigBoard[src].typeErrors = "?";
204
- };
205
- this.typeCheckIsNowDone = (src, failures) => {
206
- this.bigBoard[src].typeErrors = failures;
207
- this.writeBigBoard();
208
- this.checkForShutdown();
209
- };
210
- this.lintIsRunning = (src) => {
211
- this.bigBoard[src].staticErrors = "?";
212
- this.writeBigBoard();
213
- };
214
- this.lintIsNowDone = (src, failures) => {
215
- this.bigBoard[src].staticErrors = failures;
216
- this.writeBigBoard();
217
- this.checkForShutdown();
218
- };
219
- this.bddTestIsRunning = (src) => {
220
- this.bigBoard[src].runTimeError = "?";
221
- this.writeBigBoard();
222
- };
223
- this.bddTestIsNowDone = (src, failures) => {
224
- this.bigBoard[src].runTimeError = failures;
225
- this.writeBigBoard();
226
- this.checkForShutdown();
227
- };
228
94
  this.launchPure = async (src, dest) => {
229
95
  console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
230
96
  this.bddTestIsRunning(src);
@@ -245,7 +111,7 @@ ${addableFiles
245
111
  process.exit(-1);
246
112
  }
247
113
  const testConfigResource = testConfig[2];
248
- let portsToUse = [];
114
+ const portsToUse = [];
249
115
  if (testConfigResource.ports === 0) {
250
116
  argz = JSON.stringify({
251
117
  scheduled: true,
@@ -312,17 +178,18 @@ ${addableFiles
312
178
  defaultModule
313
179
  .receiveTestResourceConfig(argz)
314
180
  .then(async (results) => {
315
- this.receiveFeatures(results.features, destFolder, src, "pure");
181
+ // this.receiveFeatures(results.features, destFolder, src, "pure");
182
+ // this.receiveFeaturesV2(reportDest, src, "pure");
316
183
  statusMessagePretty(results.fails, src);
317
184
  this.bddTestIsNowDone(src, results.fails);
318
185
  })
319
186
  .catch((e) => {
320
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
187
+ console.log(ansiC.red(ansiC.inverse(`launchPure - ${src} errored with: ${e}`)));
321
188
  this.bddTestIsNowDone(src, -1);
322
- })
323
- .finally(() => {
324
- webSideCares.forEach((webSideCar) => webSideCar.close());
325
189
  });
190
+ // .finally(() => {
191
+ // // webSideCares.forEach((webSideCar) => webSideCar.close());
192
+ // });
326
193
  })
327
194
  .catch((e) => {
328
195
  console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`)));
@@ -339,10 +206,9 @@ ${addableFiles
339
206
  this.bddTestIsNowDone(src, -1);
340
207
  statusMessagePretty(-1, src);
341
208
  }
342
- // console.log("portsToUse", portsToUse);
343
209
  for (let i = 0; i <= portsToUse.length; i++) {
344
210
  if (portsToUse[i]) {
345
- this.ports[portsToUse[i]] = "true"; //port is open again
211
+ this.ports[portsToUse[i]] = true; //port is open again
346
212
  }
347
213
  }
348
214
  };
@@ -356,7 +222,7 @@ ${addableFiles
356
222
  if (!fs.existsSync(reportDest)) {
357
223
  fs.mkdirSync(reportDest, { recursive: true });
358
224
  }
359
- const destFolder = dest.replace(".mjs", "");
225
+ // const destFolder = dest.replace(".mjs", "");
360
226
  let testResources = "";
361
227
  const testConfig = this.configs.tests.find((t) => {
362
228
  return t[0] === src;
@@ -366,15 +232,17 @@ ${addableFiles
366
232
  process.exit(-1);
367
233
  }
368
234
  const testConfigResource = testConfig[2];
369
- let portsToUse = [];
235
+ const portsToUse = [];
370
236
  if (testConfigResource.ports === 0) {
371
- testResources = JSON.stringify({
372
- scheduled: true,
237
+ console.error("portsToUse?!", []);
238
+ const t = {
373
239
  name: src,
374
- ports: portsToUse,
240
+ // ports: portsToUse.map((v) => Number(v)),
241
+ ports: [],
375
242
  fs: reportDest,
376
243
  browserWSEndpoint: this.browser.wsEndpoint(),
377
- });
244
+ };
245
+ testResources = JSON.stringify(t);
378
246
  }
379
247
  else if (testConfigResource.ports > 0) {
380
248
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
@@ -383,15 +251,17 @@ ${addableFiles
383
251
  portsToUse.push(openPorts[i][0]);
384
252
  this.ports[openPorts[i][0]] = false; // port is now closed
385
253
  }
254
+ console.error("portsToUse", portsToUse);
386
255
  testResources = JSON.stringify({
387
256
  scheduled: true,
388
257
  name: src,
389
258
  ports: portsToUse,
390
- fs: destFolder,
259
+ fs: reportDest,
391
260
  browserWSEndpoint: this.browser.wsEndpoint(),
392
261
  });
393
262
  }
394
263
  else {
264
+ console.log("Not enough ports! Enqueuing test job...");
395
265
  this.queue.push(src);
396
266
  return;
397
267
  }
@@ -401,44 +271,22 @@ ${addableFiles
401
271
  process.exit(-1);
402
272
  }
403
273
  const builtfile = dest;
404
- // const webSideCares: Page[] = [];
405
- // await Promise.all(
406
- // testConfig[3].map(async (sidecar) => {
407
- // if (sidecar[1] === "web") {
408
- // const s = await this.launchWebSideCar(
409
- // sidecar[0],
410
- // destinationOfRuntime(sidecar[0], "web", this.configs),
411
- // sidecar
412
- // );
413
- // webSideCares.push(s);
414
- // return s;
415
- // }
416
- // if (sidecar[1] === "node") {
417
- // return this.launchNodeSideCar(
418
- // sidecar[0],
419
- // destinationOfRuntime(sidecar[0], "node", this.configs),
420
- // sidecar
421
- // );
422
- // }
423
- // })
424
- // );
425
- // const f = fork(builtfile, [testResources], {
426
- // silent: true,
427
- // // detached: true,
428
- // // stdio: "ignore",
429
- // });
430
274
  let haltReturns = false;
275
+ const ipcfile = "/tmp/tpipe_" + Math.random();
276
+ const child = spawn("node", [builtfile, testResources, ipcfile], {
277
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
278
+ });
431
279
  let buffer = new Buffer("");
432
280
  const server = net.createServer((socket) => {
281
+ const queue = new Queue();
433
282
  socket.on("data", (data) => {
434
283
  buffer = Buffer.concat([buffer, data]);
435
- let messages = [];
436
284
  for (let b = 0; b < buffer.length + 1; b++) {
437
- let c = buffer.slice(0, b);
285
+ const c = buffer.slice(0, b);
438
286
  let d;
439
287
  try {
440
288
  d = JSON.parse(c.toString());
441
- messages.push(d);
289
+ queue.enqueue(d);
442
290
  buffer = buffer.slice(b, buffer.length + 1);
443
291
  b = 0;
444
292
  }
@@ -446,66 +294,44 @@ ${addableFiles
446
294
  // b++;
447
295
  }
448
296
  }
449
- messages.forEach(async (payload) => {
450
- // set up the "node" listeners
451
- this.mapping().forEach(async ([command, func]) => {
452
- if (payload[0] === command) {
453
- const x = payload.slice(1, -1);
454
- const r = await this[command](...x);
455
- if (!haltReturns) {
456
- child.send(JSON.stringify({
457
- payload: r,
458
- key: payload[payload.length - 1],
459
- }));
297
+ while (queue.size() > 0) {
298
+ const message = queue.dequeue();
299
+ if (message) {
300
+ // set up the "node" listeners
301
+ this.mapping().forEach(async ([command, func]) => {
302
+ if (message[0] === command) {
303
+ const x = message.slice(1, -1);
304
+ const r = await this[command](...x);
305
+ if (!haltReturns) {
306
+ child.send(JSON.stringify({
307
+ payload: r,
308
+ key: message[message.length - 1],
309
+ }));
310
+ }
460
311
  }
461
- }
462
- });
463
- });
312
+ });
313
+ }
314
+ }
464
315
  });
465
316
  });
466
317
  const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
467
- const child = spawn("node", [builtfile, testResources, "--trace-warnings"], {
468
- stdio: ["pipe", "pipe", "pipe", "ipc"],
469
- // silent: true
470
- });
471
- const p = destFolder + "/tpipe";
472
- // exec(`lsof`, (ec, out, err) => {
473
- // console.log(ec, out, err);
474
- // });
475
- // if (fs.existsSync(p)) {
476
- // fs.rmSync(p);
477
- // }
478
318
  const errFile = `${reportDest}/error.txt`;
479
319
  if (fs.existsSync(errFile)) {
480
320
  fs.rmSync(errFile);
481
321
  }
482
- // server.on("error", (e) => {
483
- // if (e.code === "EADDRINUSE") {
484
- // console.error(e);
485
- // process.exit(-1);
486
- // // console.error("Address in use, retrying...");
487
- // // setTimeout(() => {
488
- // // server.close();
489
- // // server.listen(p);
490
- // // }, 1000);
491
- // }
492
- // });
493
- server.listen(p, () => {
322
+ server.listen(ipcfile, () => {
494
323
  var _a, _b;
495
324
  (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
496
- oStream.write(`stderr data ${data}`);
325
+ oStream.write(`stderr > ${data}`);
497
326
  });
498
327
  (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
499
- oStream.write(`stdout data ${data}`);
328
+ oStream.write(`stdout > ${data}`);
500
329
  });
501
330
  child.on("close", (code) => {
502
331
  console.log("close");
503
- console.log("deleting", p);
504
- if (fs.existsSync(p)) {
505
- fs.rmSync(p);
506
- }
507
332
  oStream.close();
508
333
  server.close();
334
+ // this.receiveFeaturesV2(reportDest, src, "node");
509
335
  if (code === null) {
510
336
  this.bddTestIsNowDone(src, -1);
511
337
  statusMessagePretty(-1, src);
@@ -522,133 +348,274 @@ ${addableFiles
522
348
  });
523
349
  child.on("exit", (code) => {
524
350
  console.log("exit");
525
- console.log("deleting", p);
526
- if (fs.existsSync(p)) {
527
- fs.rmSync(p);
528
- }
529
351
  haltReturns = true;
352
+ for (let i = 0; i <= portsToUse.length; i++) {
353
+ if (portsToUse[i]) {
354
+ this.ports[portsToUse[i]] = true; //port is open again
355
+ }
356
+ }
357
+ console.log("exitthis.ports", this.ports);
530
358
  });
531
359
  child.on("error", (e) => {
532
360
  console.log("error");
533
- console.log("deleting", p);
534
- if (fs.existsSync(p)) {
535
- fs.rmSync(p);
536
- }
537
361
  haltReturns = true;
538
362
  console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e.name}. Check ${errFile}for more info`)));
539
363
  this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
540
364
  this.bddTestIsNowDone(src, -1);
541
365
  statusMessagePretty(-1, src);
542
- // this.bddTestIsNowDone(src, -1);
543
- // statusMessagePretty(-1, src);
544
366
  });
545
367
  });
546
- child.send({ path: p });
547
- for (let i = 0; i <= portsToUse.length; i++) {
548
- if (portsToUse[i]) {
549
- this.ports[portsToUse[i]] = "true"; //port is open again
550
- }
551
- }
552
368
  };
553
- this.launchWebSideCar = async (src, dest, testConfig) => {
554
- const d = dest + ".mjs";
369
+ this.launchWebSideCar = async (
370
+ // src: string,
371
+ // dest: string,
372
+ testConfig) => {
373
+ const src = testConfig[0];
374
+ const dest = src.split(".").slice(0, -1).join(".");
375
+ // const d = dest + ".mjs";
376
+ const destFolder = dest.replace(".mjs", "");
555
377
  console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
556
378
  const fileStreams2 = [];
557
379
  const doneFileStream2 = [];
380
+ const oStream = fs.createWriteStream(`${destFolder}/console_log.txt`);
558
381
  return new Promise((res, rej) => {
559
382
  this.browser
560
383
  .newPage()
561
- .then((page) => {
562
- // page.on("console", (msg) => {
563
- // console.log("web > ", msg.args(), msg.text());
564
- // // for (let i = 0; i < msg._args.length; ++i)
565
- // // console.log(`${i}: ${msg._args[i]}`);
566
- // });
567
- page.exposeFunction("custom-screenshot", async (ssOpts, testName) => {
568
- const p = ssOpts.path;
569
- const dir = path.dirname(p);
570
- fs.mkdirSync(dir, {
571
- recursive: true,
572
- });
573
- files[testName].add(ssOpts.path);
574
- const sPromise = page.screenshot(Object.assign(Object.assign({}, ssOpts), { path: p }));
575
- if (!screenshots[testName]) {
576
- screenshots[testName] = [];
577
- }
578
- screenshots[testName].push(sPromise);
579
- await sPromise;
580
- return sPromise;
384
+ .then(async (page) => {
385
+ this.mapping().forEach(async ([command, func]) => {
386
+ page.exposeFunction(command, func);
581
387
  });
582
- page.exposeFunction("writeFileSync", (fp, contents, testName) => {
583
- const dir = path.dirname(fp);
584
- fs.mkdirSync(dir, {
585
- recursive: true,
586
- });
587
- const p = new Promise(async (res, rej) => {
588
- fs.writeFileSync(fp, contents);
589
- res(fp);
388
+ const close = () => {
389
+ if (!files[src]) {
390
+ files[src] = new Set();
391
+ }
392
+ // files[t].add(filepath);
393
+ fs.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[src])));
394
+ delete files[src];
395
+ Promise.all(screenshots[src] || []).then(() => {
396
+ delete screenshots[src];
397
+ page.close();
398
+ oStream.close();
590
399
  });
591
- doneFileStream2.push(p);
592
- if (!files[testName]) {
593
- files[testName] = new Set();
400
+ };
401
+ page.on("pageerror", (err) => {
402
+ console.debug(`Error from ${src}: [${err.name}] `);
403
+ oStream.write(err.name);
404
+ oStream.write("\n");
405
+ if (err.cause) {
406
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
407
+ oStream.write(err.cause);
408
+ oStream.write("\n");
594
409
  }
595
- files[testName].add(fp);
596
- return p;
597
- });
598
- page.exposeFunction("existsSync", (fp, contents) => {
599
- return fs.existsSync(fp);
600
- });
601
- page.exposeFunction("mkdirSync", (fp) => {
602
- if (!fs.existsSync(fp)) {
603
- return fs.mkdirSync(fp, {
604
- recursive: true,
605
- });
410
+ if (err.stack) {
411
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
412
+ oStream.write(err.stack);
413
+ oStream.write("\n");
606
414
  }
607
- return false;
415
+ console.debug(`Error from message ${src}: [${err.message}] `);
416
+ oStream.write(err.message);
417
+ oStream.write("\n");
418
+ this.bddTestIsNowDone(src, -1);
419
+ close();
608
420
  });
609
- page.exposeFunction("createWriteStream", (fp, testName) => {
610
- const f = fs.createWriteStream(fp);
611
- files[testName].add(fp);
612
- const p = new Promise((res, rej) => {
613
- res(fp);
614
- });
615
- doneFileStream2.push(p);
616
- f.on("close", async () => {
617
- await p;
618
- });
619
- fileStreams2.push(f);
620
- return Object.assign(Object.assign({}, JSON.parse(JSON.stringify(f))), { uid: fileStreams2.length - 1 });
421
+ page.on("console", (log) => {
422
+ oStream.write(log.text());
423
+ oStream.write(JSON.stringify(log.location()));
424
+ oStream.write(JSON.stringify(log.stackTrace()));
425
+ oStream.write("\n");
621
426
  });
622
- page.exposeFunction("write", async (uid, contents) => {
623
- return fileStreams2[uid].write(contents);
427
+ await page.goto(`file://${`${destFolder}.html`}`, {});
428
+ const webArgz = JSON.stringify({
429
+ name: dest,
430
+ ports: [].toString(),
431
+ fs: dest,
432
+ browserWSEndpoint: this.browser.wsEndpoint(),
624
433
  });
625
- page.exposeFunction("end", async (uid) => {
626
- return fileStreams2[uid].end();
434
+ const d = `${dest}?cacheBust=${Date.now()}`;
435
+ const evaluation = `
436
+ import('${d}').then(async (x) => {
437
+
438
+ try {
439
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
440
+ } catch (e) {
441
+ console.log("fail", e.toString())
442
+ }
443
+ })`;
444
+ await page
445
+ .evaluate(evaluation)
446
+ .then(async ({ fails, failed, features }) => {
447
+ // this.receiveFeatures(features, destFolder, src, "web");
448
+ // this.receiveFeaturesV2(reportDest, src, "web");
449
+ statusMessagePretty(fails, src);
450
+ this.bddTestIsNowDone(src, fails);
451
+ })
452
+ .catch((e) => {
453
+ console.log(ansiC.red(ansiC.inverse(`launchWebSidecar - ${src} errored with: ${e}`)));
454
+ })
455
+ .finally(() => {
456
+ this.bddTestIsNowDone(src, -1);
457
+ close();
627
458
  });
628
459
  return page;
460
+ // return page;
629
461
  })
630
462
  .then(async (page) => {
631
463
  await page.goto(`file://${`${dest}.html`}`, {});
632
464
  /* @ts-ignore:next-line */
633
- res(page);
465
+ res([Math.random(), page]);
634
466
  });
635
467
  });
636
468
  };
637
- this.launchNodeSideCar = async (src, dest, testConfig) => {
469
+ this.launchNodeSideCar = async (sidecar) => {
470
+ const src = sidecar[0];
471
+ const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
638
472
  const d = dest + ".mjs";
639
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
473
+ console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${sidecar[0]}`)));
474
+ const destFolder = dest.replace(".ts", "");
475
+ const reportDest = `testeranto/reports/${this.name}/${src
476
+ .split(".")
477
+ .slice(0, -1)
478
+ .join(".")}/node`;
479
+ const argz = {
480
+ name: sidecar[0],
481
+ ports: [],
482
+ fs: destFolder,
483
+ browserWSEndpoint: this.browser.wsEndpoint(),
484
+ };
485
+ const testReq = sidecar[2];
486
+ const portsToUse = [];
487
+ if (testReq.ports === 0) {
488
+ // argz = {
489
+ // name: sidecar[0],
490
+ // ports: portsToUse,
491
+ // fs: destFolder,
492
+ // browserWSEndpoint: this.browser.wsEndpoint(),
493
+ // };
494
+ }
495
+ else if (testReq.ports > 0) {
496
+ const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
497
+ if (openPorts.length >= testReq.ports) {
498
+ for (let i = 0; i < testReq.ports; i++) {
499
+ portsToUse.push(openPorts[i][0]);
500
+ this.ports[openPorts[i][0]] = false; // port is now closed
501
+ }
502
+ console.log("nodeSideCar portsToUse", portsToUse);
503
+ argz.ports = portsToUse;
504
+ const builtfile = destFolder + ".mjs";
505
+ let haltReturns = false;
506
+ let buffer = new Buffer("");
507
+ const server = net.createServer((socket) => {
508
+ socket.on("data", (data) => {
509
+ buffer = Buffer.concat([buffer, data]);
510
+ const messages = [];
511
+ for (let b = 0; b < buffer.length + 1; b++) {
512
+ const c = buffer.slice(0, b);
513
+ let d;
514
+ try {
515
+ d = JSON.parse(c.toString());
516
+ messages.push(d);
517
+ buffer = buffer.slice(b, buffer.length + 1);
518
+ b = 0;
519
+ }
520
+ catch (e) {
521
+ // b++;
522
+ }
523
+ }
524
+ messages.forEach(async (payload) => {
525
+ this.mapping().forEach(async ([command, func]) => {
526
+ if (payload[0] === command) {
527
+ const x = payload.slice(1, -1);
528
+ const r = await this[command](...x);
529
+ if (!haltReturns) {
530
+ child.send(JSON.stringify({
531
+ payload: r,
532
+ key: payload[payload.length - 1],
533
+ }));
534
+ }
535
+ }
536
+ });
537
+ });
538
+ });
539
+ });
540
+ const oStream = fs.createWriteStream(`${reportDest}/console_log.txt`);
541
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
542
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
543
+ // silent: true
544
+ });
545
+ const p = "/tmp/tpipe" + Math.random();
546
+ const errFile = `${reportDest}/error.txt`;
547
+ server.listen(p, () => {
548
+ var _a, _b;
549
+ (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
550
+ oStream.write(`stderr > ${data}`);
551
+ });
552
+ (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
553
+ oStream.write(`stdout > ${data}`);
554
+ });
555
+ child.on("close", (code) => {
556
+ oStream.close();
557
+ server.close();
558
+ haltReturns = true;
559
+ });
560
+ child.on("exit", (code) => {
561
+ haltReturns = true;
562
+ for (let i = 0; i <= portsToUse.length; i++) {
563
+ if (portsToUse[i]) {
564
+ this.ports[portsToUse[i]] = true; //port is open again
565
+ }
566
+ }
567
+ });
568
+ child.on("error", (e) => {
569
+ if (fs.existsSync(p)) {
570
+ fs.rmSync(p);
571
+ }
572
+ haltReturns = true;
573
+ console.log(ansiC.red(ansiC.inverse(`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`)));
574
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
575
+ // this.bddTestIsNowDone(src, -1);
576
+ // statusMessagePretty(-1, src);
577
+ });
578
+ });
579
+ child.send({ path: p });
580
+ const r = Math.random();
581
+ this.nodeSidecars[r] = child;
582
+ return [r, argz];
583
+ }
584
+ else {
585
+ console.log("Not enough open ports!", openPorts, testReq.ports);
586
+ this.queue.push(sidecar[0]);
587
+ return [Math.random(), argz];
588
+ }
589
+ }
590
+ else {
591
+ console.error("negative port makes no sense", sidecar[0]);
592
+ process.exit(-1);
593
+ }
594
+ };
595
+ this.stopPureSideCar = async (uid) => {
596
+ console.log(ansiC.green(ansiC.inverse(`stopPureSideCar ${uid}`)));
597
+ await this.sidecars[uid].shutdown();
598
+ return;
599
+ };
600
+ this.launchPureSideCar = async (sidecar) => {
601
+ console.log(ansiC.green(ansiC.inverse(`launchPureSideCar ${sidecar[0]}`)));
602
+ const r = Math.random();
603
+ const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
604
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
640
605
  const destFolder = dest.replace(".mjs", "");
641
- let argz = "";
642
- const testConfigResource = testConfig[2];
643
- let portsToUse = [];
606
+ let argz;
607
+ const z = sidecar[2];
608
+ const testConfigResource = sidecar[2];
609
+ const src = sidecar[0];
610
+ const portsToUse = [];
644
611
  if (testConfigResource.ports === 0) {
645
- argz = JSON.stringify({
646
- scheduled: true,
612
+ argz = {
613
+ // scheduled: true,
647
614
  name: src,
648
615
  ports: portsToUse,
649
616
  fs: destFolder,
650
617
  browserWSEndpoint: this.browser.wsEndpoint(),
651
- });
618
+ };
652
619
  }
653
620
  else if (testConfigResource.ports > 0) {
654
621
  const openPorts = Object.entries(this.ports).filter(([portnumber, portopen]) => portopen);
@@ -658,14 +625,14 @@ ${addableFiles
658
625
  portsToUse.push(openPorts[i][0]);
659
626
  this.ports[openPorts[i][0]] = false; // port is now closed
660
627
  }
661
- argz = JSON.stringify({
662
- scheduled: true,
628
+ argz = {
629
+ // scheduled: true,
663
630
  name: src,
664
631
  // ports: [3333],
665
632
  ports: portsToUse,
666
633
  fs: ".",
667
634
  browserWSEndpoint: this.browser.wsEndpoint(),
668
- });
635
+ };
669
636
  }
670
637
  else {
671
638
  this.queue.push(src);
@@ -676,29 +643,17 @@ ${addableFiles
676
643
  console.error("negative port makes no sense", src);
677
644
  process.exit(-1);
678
645
  }
679
- const builtfile = dest + ".mjs";
646
+ // const builtfile = dest + ".mjs";
680
647
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
681
- return module.default.then((defaultModule) => {
682
- // console.log("defaultModule", defaultModule);
683
- const s = new defaultModule();
684
- s.receiveTestResourceConfig(argz);
685
- // Object.create(defaultModule);
686
- // defaultModule
687
- // .receiveTestResourceConfig(argz)
688
- // .then((x) => {
689
- // console.log("then", x);
690
- // return x;
691
- // })
692
- // .catch((e) => {
693
- // console.log("catch", e);
694
- // });
695
- });
648
+ this.pureSidecars[r] = module.default;
649
+ this.pureSidecars[r].start(argz);
696
650
  });
697
- for (let i = 0; i <= portsToUse.length; i++) {
698
- if (portsToUse[i]) {
699
- this.ports[portsToUse[i]] = "true"; //port is open again
700
- }
701
- }
651
+ return [r, argz];
652
+ // for (let i = 0; i <= portsToUse.length; i++) {
653
+ // if (portsToUse[i]) {
654
+ // this.ports[portsToUse[i]] = "true"; //port is open again
655
+ // }
656
+ // }
702
657
  };
703
658
  this.launchWeb = async (src, dest) => {
704
659
  console.log(ansiC.green(ansiC.inverse(`! web ${src}`)));
@@ -712,7 +667,7 @@ ${addableFiles
712
667
  }
713
668
  const destFolder = dest.replace(".mjs", "");
714
669
  const webArgz = JSON.stringify({
715
- name: dest,
670
+ name: src,
716
671
  ports: [].toString(),
717
672
  fs: reportDest,
718
673
  browserWSEndpoint: this.browser.wsEndpoint(),
@@ -732,9 +687,20 @@ ${addableFiles
732
687
  this.browser
733
688
  .newPage()
734
689
  .then((page) => {
735
- // set up the "node" listeners
736
690
  this.mapping().forEach(async ([command, func]) => {
737
- page.exposeFunction(command, func);
691
+ if (command === "page") {
692
+ page.exposeFunction(command, (x) => {
693
+ if (x) {
694
+ return func(x);
695
+ }
696
+ else {
697
+ return func(page.mainFrame()._id);
698
+ }
699
+ });
700
+ }
701
+ else {
702
+ return page.exposeFunction(command, func);
703
+ }
738
704
  });
739
705
  return page;
740
706
  })
@@ -774,48 +740,55 @@ ${addableFiles
774
740
  });
775
741
  page.on("console", (log) => {
776
742
  oStream.write(log.text());
743
+ oStream.write("\n");
777
744
  oStream.write(JSON.stringify(log.location()));
745
+ oStream.write("\n");
778
746
  oStream.write(JSON.stringify(log.stackTrace()));
779
747
  oStream.write("\n");
780
748
  });
781
749
  await page.goto(`file://${`${destFolder}.html`}`, {});
750
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
782
751
  await page
783
752
  .evaluate(evaluation)
784
753
  .then(async ({ fails, failed, features }) => {
785
- this.receiveFeatures(features, destFolder, src, "web");
754
+ // this.receiveFeatures(features, destFolder, src, "web");
755
+ // this.receiveFeaturesV2(reportDest, src, "web");
786
756
  statusMessagePretty(fails, src);
787
757
  this.bddTestIsNowDone(src, fails);
788
758
  })
789
759
  .catch((e) => {
790
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
760
+ console.log(ansiC.red(ansiC.inverse(`launchweb - ${src} errored with: ${e}`)));
791
761
  })
792
762
  .finally(() => {
793
763
  this.bddTestIsNowDone(src, -1);
764
+ // process.exit(-1);
794
765
  close();
795
766
  });
796
767
  return page;
797
768
  });
798
769
  };
799
- this.receiveFeatures = (features, destFolder, srcTest, platform) => {
770
+ this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
800
771
  const featureDestination = path.resolve(process.cwd(), "reports", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
801
- features
772
+ const testReport = JSON.parse(fs.readFileSync(`${reportDest}/tests.json`).toString());
773
+ // console.log("mark2", testReport);
774
+ testReport.features
802
775
  .reduce(async (mm, featureStringKey) => {
776
+ // console.log("mark4", featureStringKey);
803
777
  const accum = await mm;
804
778
  const isUrl = isValidUrl(featureStringKey);
805
779
  if (isUrl) {
806
780
  const u = new URL(featureStringKey);
807
781
  if (u.protocol === "file:") {
808
782
  const newPath = `${process.cwd()}/testeranto/features/internal/${path.relative(process.cwd(), u.pathname)}`;
809
- await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
810
- try {
811
- await fs.unlinkSync(newPath);
812
- // console.log(`Removed existing link at ${newPath}`);
813
- }
814
- catch (error) {
815
- if (error.code !== "ENOENT") {
816
- // throw error;
817
- }
818
- }
783
+ // await fs.promises.mkdir(path.dirname(newPath), { recursive: true });
784
+ // try {
785
+ // await fs.unlinkSync(newPath);
786
+ // // console.log(`Removed existing link at ${newPath}`);
787
+ // } catch (error) {
788
+ // if (error.code !== "ENOENT") {
789
+ // // throw error;
790
+ // }
791
+ // }
819
792
  // fs.symlink(u.pathname, newPath, (err) => {
820
793
  // if (err) {
821
794
  // // console.error("Error creating symlink:", err);
@@ -823,10 +796,10 @@ ${addableFiles
823
796
  // // console.log("Symlink created successfully");
824
797
  // }
825
798
  // });
826
- accum.files.push(newPath);
799
+ accum.files.push(u.pathname);
827
800
  }
828
801
  else if (u.protocol === "http:" || u.protocol === "https:") {
829
- const newPath = `${process.cwd()}/testeranto/features/external${u.hostname}${u.pathname}`;
802
+ const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
830
803
  const body = await this.configs.featureIngestor(featureStringKey);
831
804
  writeFileAndCreateDir(newPath, body);
832
805
  accum.files.push(newPath);
@@ -841,6 +814,7 @@ ${addableFiles
841
814
  return accum;
842
815
  }, Promise.resolve({ files: [], strings: [] }))
843
816
  .then(({ files, strings }) => {
817
+ // Markdown files must be referenced in the prompt but string style features are already present in the test.json file
844
818
  fs.writeFileSync(`testeranto/reports/${this.name}/${srcTest
845
819
  .split(".")
846
820
  .slice(0, -1)
@@ -850,24 +824,68 @@ ${addableFiles
850
824
  })
851
825
  .join("\n"));
852
826
  });
827
+ // const f: Record<string, string> = {};
828
+ testReport.givens.forEach((g) => {
829
+ if (g.failed === true) {
830
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
831
+ }
832
+ });
833
+ // this.summary[srcTest].failingFeatures = f;
834
+ this.writeBigBoard();
853
835
  };
854
- this.writeBigBoard = () => {
855
- fs.writeFileSync(`./testeranto/reports/${this.name}/summary.json`, JSON.stringify(this.bigBoard, null, 2));
856
- };
857
- this.name = name;
858
- this.mode = mode;
859
836
  this.ports = {};
860
- this.configs.tests.forEach(([t]) => {
861
- this.bigBoard[t] = {
862
- runTimeError: "?",
863
- typeErrors: "?",
864
- staticErrors: "?",
865
- prompt: "?",
866
- };
867
- });
837
+ this.queue = [];
838
+ this.nodeSidecars = {};
839
+ this.webSidecars = {};
840
+ this.pureSidecars = {};
868
841
  this.configs.ports.forEach((element) => {
869
- this.ports[element] = "true"; // set ports as open
842
+ this.ports[element] = true; // set ports as open
843
+ });
844
+ }
845
+ async stopSideCar(uid) {
846
+ console.log(ansiC.green(ansiC.inverse(`stopSideCar ${uid}`)));
847
+ Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
848
+ if (Number(k) === uid) {
849
+ await this.pureSidecars[Number(k)].stop();
850
+ delete this.pureSidecars[Number(k)];
851
+ }
852
+ });
853
+ Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
854
+ if (Number(k) === uid) {
855
+ await this.nodeSidecars[Number(k)].send("stop");
856
+ delete this.nodeSidecars[Number(k)];
857
+ }
858
+ });
859
+ Object.entries(this.webSidecars).forEach(async ([k, v]) => {
860
+ if (Number(k) === uid) {
861
+ (await this.browser.pages()).forEach(async (p) => {
862
+ if (p.mainFrame()._id === k) {
863
+ await this.webSidecars[Number(k)].close();
864
+ delete this.webSidecars[Number(k)];
865
+ }
866
+ });
867
+ }
870
868
  });
869
+ return;
870
+ }
871
+ async launchSideCar(n, name) {
872
+ const c = this.configs.tests.find(([v, r]) => {
873
+ return v === name;
874
+ });
875
+ const s = c[3][n];
876
+ const r = s[1];
877
+ if (r === "node") {
878
+ return this.launchNodeSideCar(s);
879
+ }
880
+ else if (r === "web") {
881
+ return this.launchWebSideCar(s);
882
+ }
883
+ else if (r === "pure") {
884
+ return this.launchPureSideCar(s);
885
+ }
886
+ else {
887
+ throw `unknown runtime ${r}`;
888
+ }
871
889
  }
872
890
  mapping() {
873
891
  return [
@@ -876,20 +894,23 @@ ${addableFiles
876
894
  ["closePage", this.closePage],
877
895
  ["createWriteStream", this.createWriteStream],
878
896
  ["customclose", this.customclose],
879
- ["customScreenShot", this.customScreenShot],
897
+ ["customScreenShot", this.customScreenShot.bind(this)],
880
898
  ["end", this.end],
881
899
  ["existsSync", this.existsSync],
882
900
  ["focusOn", this.focusOn],
883
901
  ["getAttribute", this.getAttribute],
884
- ["getValue", this.getValue],
885
- ["goto", this.goto],
902
+ ["getInnerHtml", this.getInnerHtml],
903
+ // ["setValue", this.setValue],
904
+ ["goto", this.goto.bind(this)],
886
905
  ["isDisabled", this.isDisabled],
906
+ ["launchSideCar", this.launchSideCar.bind(this)],
887
907
  ["mkdirSync", this.mkdirSync],
888
908
  ["newPage", this.newPage],
889
909
  ["page", this.page],
890
910
  ["pages", this.pages],
891
911
  ["screencast", this.screencast],
892
912
  ["screencastStop", this.screencastStop],
913
+ ["stopSideCar", this.stopSideCar.bind(this)],
893
914
  ["typeInto", this.typeInto],
894
915
  ["waitForSelector", this.waitForSelector],
895
916
  ["write", this.write],
@@ -899,54 +920,57 @@ ${addableFiles
899
920
  async start() {
900
921
  // set up the "pure" listeners
901
922
  this.mapping().forEach(async ([command, func]) => {
902
- // page.exposeFunction(command, func);
903
923
  globalThis[command] = func;
904
924
  });
905
925
  if (!fs.existsSync(`testeranto/reports/${this.name}`)) {
906
926
  fs.mkdirSync(`testeranto/reports/${this.name}`);
907
927
  }
908
- // await pollForFile();
909
- this.browser = (await puppeteer.launch({
910
- slowMo: 1,
911
- waitForInitialPage: false,
912
- executablePath:
913
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
914
- "/opt/homebrew/bin/chromium",
915
- headless: true,
916
- dumpio: false,
917
- devtools: false,
918
- args: [
919
- "--allow-file-access-from-files",
920
- "--allow-insecure-localhost",
921
- "--allow-running-insecure-content",
922
- "--auto-open-devtools-for-tabs",
923
- "--disable-dev-shm-usage",
924
- "--disable-extensions",
925
- "--disable-gpu",
926
- "--disable-setuid-sandbox",
927
- "--disable-site-isolation-trials",
928
- "--disable-site-isolation-trials",
929
- "--disable-web-security",
930
- "--no-first-run",
931
- "--no-sandbox",
932
- "--no-startup-window",
933
- "--reduce-security-for-testing",
934
- "--remote-allow-origins=*",
935
- `--remote-debugging-port=3234`,
936
- "--unsafely-treat-insecure-origin-as-secure=*",
937
- // "--disable-features=IsolateOrigins,site-per-process",
938
- // "--disable-features=IsolateOrigins",
939
- // "--disk-cache-dir=/dev/null",
940
- // "--disk-cache-size=1",
941
- // "--no-zygote",
942
- // "--remote-allow-origins=ws://localhost:3234",
943
- // "--single-process",
944
- // "--start-maximized",
945
- // "--unsafely-treat-insecure-origin-as-secure",
946
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
947
- ],
948
- }));
949
- const { nodeEntryPoints, webEntryPoints, importEntryPoints } = this.getRunnables(this.configs.tests, this.name);
928
+ const executablePath = "/opt/homebrew/bin/chromium";
929
+ try {
930
+ this.browser = await puppeteer.launch({
931
+ slowMo: 1,
932
+ waitForInitialPage: false,
933
+ executablePath,
934
+ headless: false,
935
+ dumpio: false,
936
+ devtools: false,
937
+ args: [
938
+ "--disable-features=site-per-process",
939
+ "--allow-file-access-from-files",
940
+ "--allow-insecure-localhost",
941
+ "--allow-running-insecure-content",
942
+ "--auto-open-devtools-for-tabs",
943
+ "--disable-dev-shm-usage",
944
+ "--disable-extensions",
945
+ "--disable-gpu",
946
+ "--disable-setuid-sandbox",
947
+ "--disable-site-isolation-trials",
948
+ "--disable-web-security",
949
+ "--no-first-run",
950
+ "--no-sandbox",
951
+ "--no-startup-window",
952
+ "--reduce-security-for-testing",
953
+ "--remote-allow-origins=*",
954
+ "--unsafely-treat-insecure-origin-as-secure=*",
955
+ `--remote-debugging-port=3234`,
956
+ // "--disable-features=IsolateOrigins,site-per-process",
957
+ // "--disable-features=IsolateOrigins",
958
+ // "--disk-cache-dir=/dev/null",
959
+ // "--disk-cache-size=1",
960
+ // "--no-zygote",
961
+ // "--remote-allow-origins=ws://localhost:3234",
962
+ // "--single-process",
963
+ // "--start-maximized",
964
+ // "--unsafely-treat-insecure-origin-as-secure",
965
+ // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
966
+ ],
967
+ });
968
+ }
969
+ catch (e) {
970
+ console.error(e);
971
+ console.error("could not start chrome via puppeter. Check this path: ", executablePath);
972
+ }
973
+ const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
950
974
  [
951
975
  [
952
976
  nodeEntryPoints,
@@ -965,7 +989,7 @@ ${addableFiles
965
989
  },
966
990
  ],
967
991
  [
968
- importEntryPoints,
992
+ pureEntryPoints,
969
993
  this.launchPure,
970
994
  "pure",
971
995
  (w) => {
@@ -998,6 +1022,35 @@ ${addableFiles
998
1022
  this.metafileOutputs(runtime);
999
1023
  }));
1000
1024
  });
1025
+ // Object.keys(this.configs.externalTests).forEach((et) => {
1026
+ // this.launchExternalTest(et, this.configs.externalTests[et]);
1027
+ // });
1028
+ }
1029
+ async launchExternalTest(externalTestName, externalTest) {
1030
+ // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
1031
+ // exec(externalTest.exec, (error, stdout, stderr) => {
1032
+ // if (error) {
1033
+ // fs.writeFileSync(
1034
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1035
+ // `${error.name}\n${error.message}\n${error.code}\n`
1036
+ // );
1037
+ // } else {
1038
+ // fs.writeFileSync(
1039
+ // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1040
+ // `0`
1041
+ // );
1042
+ // }
1043
+ // fs.writeFileSync(
1044
+ // `testeranto/externalTests/${externalTestName}/stdout.txt`,
1045
+ // stdout
1046
+ // );
1047
+ // fs.writeFileSync(
1048
+ // `testeranto/externalTests/${externalTestName}/stderr.txt`,
1049
+ // stderr
1050
+ // );
1051
+ // // console.log(`externalTest stdout: ${stdout}`);
1052
+ // // console.error(`externalTest stderr: ${stderr}`);
1053
+ // });
1001
1054
  }
1002
1055
  async stop() {
1003
1056
  console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
@@ -1015,11 +1068,17 @@ ${addableFiles
1015
1068
  return;
1016
1069
  const outputs = metafile.outputs;
1017
1070
  Object.keys(outputs).forEach(async (k) => {
1071
+ const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
1072
+ if (!k.startsWith(pattern)) {
1073
+ return false;
1074
+ }
1018
1075
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1019
1076
  if (!fs.existsSync(i))
1020
1077
  return false;
1021
1078
  if (i.startsWith("node_modules"))
1022
1079
  return false;
1080
+ if (i.startsWith("./node_modules"))
1081
+ return false;
1023
1082
  return true;
1024
1083
  });
1025
1084
  const f = `${k.split(".").slice(0, -1).join(".")}/`;