testeranto 0.129.0 → 0.135.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 (403) hide show
  1. package/.aider.chat.history.md +137798 -0
  2. package/.aider.input.history +370 -0
  3. package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
  4. package/.aider.tags.cache.v3/8e/ec/2d4659a1589a0187a757ab1cbefa.val +0 -0
  5. package/.aider.tags.cache.v3/{b7/e6/5be87b62aeaf2bc244ff41c1b61a.val → a7/97/6d37fce350ad2d588f36729db0cd.val} +0 -0
  6. package/.aider.tags.cache.v3/{e3/e6/3501625caf5d5eb171f0d248462e.val → ad/3c/10f2ab1397f6d544e613d2a6acaf.val} +0 -0
  7. package/.aider.tags.cache.v3/cache.db +0 -0
  8. package/.aider.tags.cache.v3/d8/b0/a8966fcd65890fd9f70d7afe8141.val +0 -0
  9. package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
  10. package/README.md +194 -182
  11. package/bundle.js +8 -75
  12. package/dist/common/src/Init.js +6 -1
  13. package/dist/common/src/Node.js +6 -4
  14. package/dist/common/src/NodeSidecar.js +15 -0
  15. package/dist/common/src/PM/PM_WithEslintAndTsc.js +189 -0
  16. package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +109 -0
  17. package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +94 -0
  18. package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +94 -0
  19. package/dist/common/src/PM/base.js +33 -16
  20. package/dist/common/src/PM/main.js +492 -428
  21. package/dist/common/src/PM/node.js +54 -22
  22. package/dist/common/src/PM/nodeSidecar.js +65 -0
  23. package/dist/common/src/PM/pure.js +55 -47
  24. package/dist/common/src/PM/pureSidecar.js +48 -0
  25. package/dist/common/src/PM/sidecar.js +11 -0
  26. package/dist/common/src/PM/web.js +24 -6
  27. package/dist/common/src/PM/webSidecar.js +47 -0
  28. package/dist/common/src/PureSidecar.js +13 -0
  29. package/dist/common/src/SP__Polygon.test.js +10 -0
  30. package/dist/common/src/WebSidecar.js +14 -0
  31. package/dist/common/src/build.js +66 -12
  32. package/dist/common/src/defaultConfig.js +1 -0
  33. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
  34. package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
  35. package/dist/common/src/esbuildConfigs/node.js +2 -16
  36. package/dist/common/src/esbuildConfigs/pure.js +12 -12
  37. package/dist/common/src/esbuildConfigs/rebuildPlugin.js +22 -0
  38. package/dist/common/src/esbuildConfigs/web.js +12 -17
  39. package/dist/common/src/lib/Sidecar.js +6 -0
  40. package/dist/common/src/lib/abstractBase.js +13 -6
  41. package/dist/common/src/lib/basebuilder.js +1 -3
  42. package/dist/common/src/lib/classBuilder.js +6 -20
  43. package/dist/common/src/lib/core.js +11 -6
  44. package/dist/common/src/lib/index.js +13 -4
  45. package/dist/common/src/lib/pmProxy.js +1 -1
  46. package/dist/common/src/mothership/index.js +16 -0
  47. package/dist/common/src/mothership/test.js +65 -0
  48. package/dist/common/src/utils/queue.js +36 -0
  49. package/dist/common/src/utils.js +34 -5
  50. package/dist/common/testeranto.config.js +77 -39
  51. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  52. package/dist/module/src/Init.js +6 -1
  53. package/dist/module/src/Node.js +6 -4
  54. package/dist/module/src/NodeSidecar.js +11 -0
  55. package/dist/module/src/PM/PM_WithEslintAndTsc.js +182 -0
  56. package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +104 -0
  57. package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +89 -0
  58. package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +89 -0
  59. package/dist/module/src/PM/base.js +33 -16
  60. package/dist/module/src/PM/main.js +493 -429
  61. package/dist/module/src/PM/node.js +54 -22
  62. package/dist/module/src/PM/nodeSidecar.js +58 -0
  63. package/dist/module/src/PM/pure.js +55 -44
  64. package/dist/module/src/PM/pureSidecar.js +41 -0
  65. package/dist/module/src/PM/sidecar.js +7 -0
  66. package/dist/module/src/PM/web.js +24 -6
  67. package/dist/module/src/PM/webSidecar.js +40 -0
  68. package/dist/module/src/Project.js +154 -75
  69. package/dist/module/src/PureSidecar.js +9 -0
  70. package/dist/module/src/ReportClient.js +132 -97
  71. package/dist/module/src/SP__Polygon.test.js +8 -0
  72. package/dist/module/src/TestReport.js +32 -14
  73. package/dist/module/src/WebSidecar.js +10 -0
  74. package/dist/module/src/build.js +66 -12
  75. package/dist/module/src/defaultConfig.js +1 -0
  76. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
  77. package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
  78. package/dist/module/src/esbuildConfigs/node.js +2 -16
  79. package/dist/module/src/esbuildConfigs/pure.js +12 -12
  80. package/dist/module/src/esbuildConfigs/rebuildPlugin.js +17 -0
  81. package/dist/module/src/esbuildConfigs/web.js +12 -17
  82. package/dist/module/src/lib/Sidecar.js +2 -0
  83. package/dist/module/src/lib/abstractBase.js +13 -6
  84. package/dist/module/src/lib/basebuilder.js +1 -3
  85. package/dist/module/src/lib/classBuilder.js +6 -20
  86. package/dist/module/src/lib/core.js +11 -6
  87. package/dist/module/src/lib/index.js +12 -4
  88. package/dist/module/src/lib/pmProxy.js +1 -1
  89. package/dist/module/src/mothership/index.js +11 -0
  90. package/dist/module/src/mothership/test.js +60 -0
  91. package/dist/module/src/utils/queue.js +32 -0
  92. package/dist/module/src/utils.js +34 -5
  93. package/dist/module/testeranto.config.js +77 -36
  94. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  95. package/dist/prebuild/Project.js +3287 -385
  96. package/dist/prebuild/ReportClient.js +0 -24638
  97. package/dist/prebuild/TestReport.js +26 -22
  98. package/dist/prebuild/build.mjs +192 -70
  99. package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +14 -1
  100. package/dist/prebuild/init-docs.mjs +2 -5
  101. package/dist/prebuild/mothership/index.mjs +17 -0
  102. package/dist/prebuild/run.mjs +733 -433
  103. package/dist/types/src/CoreTypes.d.ts +51 -0
  104. package/dist/types/src/Node.d.ts +2 -2
  105. package/dist/types/src/NodeSidecar.d.ts +6 -0
  106. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +23 -0
  107. package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +2 -0
  108. package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +2 -0
  109. package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +2 -0
  110. package/dist/types/src/PM/base.d.ts +6 -5
  111. package/dist/types/src/PM/index.d.ts +6 -4
  112. package/dist/types/src/PM/main.d.ts +23 -26
  113. package/dist/types/src/PM/node.d.ts +8 -6
  114. package/dist/types/src/PM/nodeSidecar.d.ts +13 -0
  115. package/dist/types/src/PM/pure.d.ts +4 -3
  116. package/dist/types/src/PM/pureSidecar.d.ts +11 -0
  117. package/dist/types/src/PM/sidecar.d.ts +8 -0
  118. package/dist/types/src/PM/web.d.ts +18 -8
  119. package/dist/types/src/PM/webSidecar.d.ts +11 -0
  120. package/dist/types/src/PureSidecar.d.ts +8 -0
  121. package/dist/types/src/SP__Polygon.test.d.ts +1 -0
  122. package/dist/types/src/Types.d.ts +80 -58
  123. package/dist/types/src/Web.d.ts +1 -1
  124. package/dist/types/src/WebSidecar.d.ts +8 -0
  125. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
  126. package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +6 -0
  127. package/dist/types/src/lib/Sidecar.d.ts +5 -0
  128. package/dist/types/src/lib/abstractBase.d.ts +6 -12
  129. package/dist/types/src/lib/classBuilder.d.ts +7 -1
  130. package/dist/types/src/lib/core.d.ts +8 -2
  131. package/dist/types/src/lib/index.d.ts +10 -4
  132. package/dist/types/src/lib/types.d.ts +12 -2
  133. package/dist/types/src/mothership/index.d.ts +2 -0
  134. package/dist/types/src/mothership/test.d.ts +2 -0
  135. package/dist/types/src/utils/queue.d.ts +11 -0
  136. package/dist/types/src/utils.d.ts +4 -7
  137. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  138. package/docs/index.md +277 -0
  139. package/package.json +23 -104
  140. package/src/CoreTypes.ts +171 -0
  141. package/src/Init.ts +6 -5
  142. package/src/Node.ts +32 -15
  143. package/src/NodeSidecar.ts +22 -0
  144. package/src/PM/PM_WithEslintAndTsc.ts +315 -0
  145. package/src/PM/__tests__/nodeSidecar.testeranto.ts +173 -0
  146. package/src/PM/__tests__/pureSidecar.testeranto.ts +157 -0
  147. package/src/PM/__tests__/webSidecar.testeranto.ts +157 -0
  148. package/src/PM/base.ts +38 -17
  149. package/src/PM/index.ts +10 -4
  150. package/src/PM/main.ts +616 -589
  151. package/src/PM/node.ts +77 -33
  152. package/src/PM/nodeSidecar.ts +73 -0
  153. package/src/PM/pure.ts +68 -58
  154. package/src/PM/pureSidecar.ts +56 -0
  155. package/src/PM/sidecar.ts +48 -0
  156. package/src/PM/web.ts +42 -11
  157. package/src/PM/webSidecar.ts +55 -0
  158. package/src/Project.tsx +312 -109
  159. package/src/Pure.ts +0 -2
  160. package/src/PureSidecar.ts +14 -0
  161. package/src/ReportClient.tsx +164 -170
  162. package/src/SP__Polygon.test.ts +13 -0
  163. package/src/TestReport.tsx +77 -6
  164. package/src/Types.ts +278 -157
  165. package/src/Web.ts +0 -3
  166. package/src/WebSidecar.ts +14 -0
  167. package/src/build.ts +104 -16
  168. package/src/defaultConfig.ts +1 -0
  169. package/src/esbuildConfigs/README.md +46 -0
  170. package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
  171. package/src/esbuildConfigs/eslint-formatter-testeranto.ts +17 -1
  172. package/src/esbuildConfigs/node.ts +2 -18
  173. package/src/esbuildConfigs/pure.ts +19 -14
  174. package/src/esbuildConfigs/rebuildPlugin.ts +23 -0
  175. package/src/esbuildConfigs/web.ts +15 -18
  176. package/src/lib/Sidecar.ts +6 -0
  177. package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
  178. package/src/lib/abstractBase.ts +18 -10
  179. package/src/lib/basebuilder.ts +5 -4
  180. package/src/lib/classBuilder.ts +19 -21
  181. package/src/lib/core.ts +28 -19
  182. package/src/lib/index.ts +38 -18
  183. package/src/lib/pmProxy.ts +3 -1
  184. package/src/lib/types.ts +15 -2
  185. package/src/mothership/index.ts +15 -0
  186. package/src/mothership/test.ts +137 -0
  187. package/src/run.ts +0 -1
  188. package/src/utils/queue.ts +41 -0
  189. package/src/utils.ts +41 -15
  190. package/testeranto/bundles/node/mothership/chunk-PG6KUKNP.mjs +44 -0
  191. package/testeranto/bundles/node/mothership/chunk-V2EQEXU2.mjs +1032 -0
  192. package/testeranto/bundles/node/mothership/metafile.json +389 -0
  193. package/testeranto/bundles/node/mothership/src/PM/__tests__/nodeSidecar.testeranto.mjs +1219 -0
  194. package/testeranto/bundles/node/mothership/src/PM/__tests__/pureSidecar.testeranto.mjs +156 -0
  195. package/testeranto/bundles/node/mothership/src/PM/__tests__/sidecar.testeranto.mjs +1199 -0
  196. package/testeranto/bundles/node/mothership/src/PM/__tests__/webSidecar.testeranto.mjs +156 -0
  197. package/testeranto/bundles/node/mothership/src/mothership/test.mjs +24411 -0
  198. package/testeranto/bundles/pure/mothership/metafile.json +8 -0
  199. package/testeranto/bundles/web/mothership/metafile.json +8 -0
  200. package/testeranto/index.html +4 -4
  201. package/testeranto/reports/mothership/config.json +25 -0
  202. package/testeranto/reports/{redux → mothership}/index.html +8 -8
  203. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/console_log.txt +0 -0
  204. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +20 -0
  205. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +1564 -0
  206. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/log.txt +0 -0
  207. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +22 -0
  208. package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +35 -0
  209. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/index.html +20 -0
  210. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +80 -0
  211. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +12 -0
  212. package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +26 -0
  213. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/bdd_errors.txt +1 -0
  214. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/console_log.txt +0 -0
  215. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/index.html +20 -0
  216. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/lint_errors.json +1564 -0
  217. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/log.txt +0 -0
  218. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/prompt.txt +22 -0
  219. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/tests.json +56 -0
  220. package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/type_errors.txt +29 -0
  221. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/index.html +20 -0
  222. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +80 -0
  223. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +12 -0
  224. package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +26 -0
  225. package/testeranto/reports/mothership/src/mothership/test/node/bdd_errors.txt +1 -0
  226. package/testeranto/reports/mothership/src/mothership/test/node/console_log.txt +4 -0
  227. package/testeranto/reports/mothership/src/mothership/test/node/index.html +20 -0
  228. package/testeranto/reports/mothership/src/mothership/test/node/lint_errors.json +1 -0
  229. package/testeranto/reports/mothership/src/mothership/test/node/log.txt +0 -0
  230. package/testeranto/reports/mothership/src/mothership/test/node/prompt.txt +12 -0
  231. package/testeranto/reports/mothership/src/mothership/test/node/tests.json +24 -0
  232. package/testeranto/reports/mothership/src/mothership/test/node/type_errors.txt +18 -0
  233. package/testeranto/reports/mothership/summary.json +9 -0
  234. package/testeranto.config.ts +82 -44
  235. package/tsc.log +78 -81
  236. package/dist/common/src/SubPackages/react/component/index.js +0 -20
  237. package/dist/common/src/SubPackages/react/component/node.js +0 -10
  238. package/dist/common/src/SubPackages/react/component/pure.js +0 -10
  239. package/dist/common/src/SubPackages/react/component/web.js +0 -10
  240. package/dist/common/src/SubPackages/react/jsx/index.js +0 -64
  241. package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
  242. package/dist/common/src/SubPackages/react/jsx/pure.js +0 -10
  243. package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
  244. package/dist/common/src/SubPackages/react-dom/component/dynamic.js +0 -61
  245. package/dist/common/src/SubPackages/react-dom/component/node.js +0 -10
  246. package/dist/common/src/SubPackages/react-dom/component/pure.js +0 -10
  247. package/dist/common/src/SubPackages/react-dom/component/static.js +0 -26
  248. package/dist/common/src/SubPackages/react-dom/component/web.js +0 -16
  249. package/dist/common/src/SubPackages/react-dom/jsx/dynamic.js +0 -31
  250. package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -10
  251. package/dist/common/src/SubPackages/react-dom/jsx/pure.js +0 -10
  252. package/dist/common/src/SubPackages/react-dom/jsx/static.js +0 -59
  253. package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -16
  254. package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -54
  255. package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -15
  256. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -70
  257. package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
  258. package/dist/common/src/SubPackages/react-test-renderer/component/pure.js +0 -8
  259. package/dist/common/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -57
  260. package/dist/common/src/SubPackages/react-test-renderer/component/test/node.js +0 -10
  261. package/dist/common/src/SubPackages/react-test-renderer/component/test/pure.js +0 -10
  262. package/dist/common/src/SubPackages/react-test-renderer/component/test/web.js +0 -10
  263. package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
  264. package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -60
  265. package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -60
  266. package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -67
  267. package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
  268. package/dist/common/src/SubPackages/react-test-renderer/jsx/pure.js +0 -10
  269. package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
  270. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -52
  271. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
  272. package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
  273. package/dist/common/src/examples/react/component/index.js +0 -33
  274. package/dist/common/src/examples/react/component/test.js +0 -36
  275. package/dist/module/src/SubPackages/react/component/index.js +0 -13
  276. package/dist/module/src/SubPackages/react/component/node.js +0 -5
  277. package/dist/module/src/SubPackages/react/component/pure.js +0 -5
  278. package/dist/module/src/SubPackages/react/component/web.js +0 -5
  279. package/dist/module/src/SubPackages/react/jsx/index.js +0 -58
  280. package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
  281. package/dist/module/src/SubPackages/react/jsx/pure.js +0 -5
  282. package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
  283. package/dist/module/src/SubPackages/react-dom/component/dynamic.js +0 -54
  284. package/dist/module/src/SubPackages/react-dom/component/node.js +0 -5
  285. package/dist/module/src/SubPackages/react-dom/component/pure.js +0 -5
  286. package/dist/module/src/SubPackages/react-dom/component/static.js +0 -22
  287. package/dist/module/src/SubPackages/react-dom/component/web.js +0 -11
  288. package/dist/module/src/SubPackages/react-dom/jsx/dynamic.js +0 -27
  289. package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -5
  290. package/dist/module/src/SubPackages/react-dom/jsx/pure.js +0 -5
  291. package/dist/module/src/SubPackages/react-dom/jsx/static.js +0 -53
  292. package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -11
  293. package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
  294. package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -14
  295. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
  296. package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
  297. package/dist/module/src/SubPackages/react-test-renderer/component/pure.js +0 -3
  298. package/dist/module/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -54
  299. package/dist/module/src/SubPackages/react-test-renderer/component/test/node.js +0 -5
  300. package/dist/module/src/SubPackages/react-test-renderer/component/test/pure.js +0 -5
  301. package/dist/module/src/SubPackages/react-test-renderer/component/test/web.js +0 -5
  302. package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
  303. package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
  304. package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
  305. package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -28
  306. package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
  307. package/dist/module/src/SubPackages/react-test-renderer/jsx/pure.js +0 -5
  308. package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
  309. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
  310. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
  311. package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
  312. package/dist/module/src/examples/react/component/index.js +0 -26
  313. package/dist/module/src/examples/react/component/test.js +0 -32
  314. package/dist/prebuild/ReportClient.css +0 -11342
  315. package/dist/tsconfig.tsbuildinfo +0 -1
  316. package/dist/types/src/SubPackages/react/component/index.d.ts +0 -4
  317. package/dist/types/src/SubPackages/react/component/node.d.ts +0 -4
  318. package/dist/types/src/SubPackages/react/component/pure.d.ts +0 -4
  319. package/dist/types/src/SubPackages/react/component/web.d.ts +0 -4
  320. package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -5
  321. package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
  322. package/dist/types/src/SubPackages/react/jsx/pure.d.ts +0 -4
  323. package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
  324. package/dist/types/src/SubPackages/react-dom/component/dynamic.d.ts +0 -20
  325. package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -4
  326. package/dist/types/src/SubPackages/react-dom/component/pure.d.ts +0 -4
  327. package/dist/types/src/SubPackages/react-dom/component/static.d.ts +0 -9
  328. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -4
  329. package/dist/types/src/SubPackages/react-dom/jsx/dynamic.d.ts +0 -5
  330. package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -6
  331. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -4
  332. package/dist/types/src/SubPackages/react-dom/jsx/pure.d.ts +0 -4
  333. package/dist/types/src/SubPackages/react-dom/jsx/static.d.ts +0 -5
  334. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
  335. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -6
  336. package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -5
  337. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -3
  338. package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -4
  339. package/dist/types/src/SubPackages/react-test-renderer/component/pure.d.ts +0 -4
  340. package/dist/types/src/SubPackages/react-test-renderer/component/test/implementation.d.ts +0 -4
  341. package/dist/types/src/SubPackages/react-test-renderer/component/test/node.d.ts +0 -3
  342. package/dist/types/src/SubPackages/react-test-renderer/component/test/pure.d.ts +0 -4
  343. package/dist/types/src/SubPackages/react-test-renderer/component/test/web.d.ts +0 -3
  344. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  345. package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
  346. package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -9
  347. package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -11
  348. package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -4
  349. package/dist/types/src/SubPackages/react-test-renderer/jsx/pure.d.ts +0 -4
  350. package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -4
  351. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -15
  352. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  353. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  354. package/dist/types/src/examples/react/component/index.d.ts +0 -13
  355. package/dist/types/src/examples/react/component/test.d.ts +0 -17
  356. package/src/SubPackages/react/component/index.ts +0 -28
  357. package/src/SubPackages/react/component/node.ts +0 -17
  358. package/src/SubPackages/react/component/pure.ts +0 -17
  359. package/src/SubPackages/react/component/web.ts +0 -17
  360. package/src/SubPackages/react/jsx/index.ts +0 -75
  361. package/src/SubPackages/react/jsx/node.ts +0 -23
  362. package/src/SubPackages/react/jsx/pure.ts +0 -23
  363. package/src/SubPackages/react/jsx/web.ts +0 -24
  364. package/src/SubPackages/react-dom/component/dynamic.ts +0 -107
  365. package/src/SubPackages/react-dom/component/node.ts +0 -17
  366. package/src/SubPackages/react-dom/component/pure.ts +0 -17
  367. package/src/SubPackages/react-dom/component/static.ts +0 -41
  368. package/src/SubPackages/react-dom/component/web.ts +0 -32
  369. package/src/SubPackages/react-dom/jsx/dynamic.ts +0 -46
  370. package/src/SubPackages/react-dom/jsx/index.ts +0 -6
  371. package/src/SubPackages/react-dom/jsx/node.ts +0 -18
  372. package/src/SubPackages/react-dom/jsx/pure.ts +0 -18
  373. package/src/SubPackages/react-dom/jsx/static.ts +0 -87
  374. package/src/SubPackages/react-dom/jsx/web.ts +0 -26
  375. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -54
  376. package/src/SubPackages/react-test-renderer/component/index.ts +0 -32
  377. package/src/SubPackages/react-test-renderer/component/interface.ts +0 -43
  378. package/src/SubPackages/react-test-renderer/component/node.ts +0 -18
  379. package/src/SubPackages/react-test-renderer/component/pure.ts +0 -18
  380. package/src/SubPackages/react-test-renderer/component/test/implementation.ts +0 -63
  381. package/src/SubPackages/react-test-renderer/component/test/node.ts +0 -14
  382. package/src/SubPackages/react-test-renderer/component/test/pure.ts +0 -14
  383. package/src/SubPackages/react-test-renderer/component/test/web.ts +0 -14
  384. package/src/SubPackages/react-test-renderer/component/web.ts +0 -18
  385. package/src/SubPackages/react-test-renderer/fc/node.ts +0 -83
  386. package/src/SubPackages/react-test-renderer/fc/web.ts +0 -80
  387. package/src/SubPackages/react-test-renderer/jsx/index.ts +0 -61
  388. package/src/SubPackages/react-test-renderer/jsx/node.ts +0 -31
  389. package/src/SubPackages/react-test-renderer/jsx/pure.ts +0 -31
  390. package/src/SubPackages/react-test-renderer/jsx/web.ts +0 -32
  391. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +0 -73
  392. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +0 -36
  393. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +0 -36
  394. package/src/examples/react/component/index.tsx +0 -35
  395. package/src/examples/react/component/test.ts +0 -83
  396. package/testeranto/bundles/node/redux/metafile.json +0 -559
  397. package/testeranto/bundles/pure/redux/metafile.json +0 -554
  398. package/testeranto/bundles/web/redux/metafile.json +0 -504
  399. package/testeranto/bundles/web/redux/test/web.html +0 -19
  400. package/testeranto/reports/redux/config.json +0 -38
  401. package/testeranto/reports/redux/summary.json +0 -20
  402. /package/dist/common/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +0 -0
  403. /package/dist/module/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +0 -0
@@ -1,20 +1,17 @@
1
1
  import { createRequire } from 'module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/run.ts
4
- import ansiC2 from "ansi-colors";
4
+ import ansiC3 from "ansi-colors";
5
5
  import readline from "readline";
6
6
 
7
7
  // src/PM/main.ts
8
8
  import { spawn } from "node:child_process";
9
- import ts from "typescript";
10
9
  import net from "net";
11
- import fs2, { watch } from "fs";
12
- import path3 from "path";
10
+ import fs3, { watch } from "fs";
11
+ import path4 from "path";
13
12
  import puppeteer from "puppeteer-core";
14
- import ansiC from "ansi-colors";
13
+ import ansiC2 from "ansi-colors";
15
14
  import crypto from "node:crypto";
16
- import { ESLint } from "eslint";
17
- import tsc from "tsc-prog";
18
15
 
19
16
  // src/utils.ts
20
17
  import path from "path";
@@ -50,8 +47,11 @@ var promptPather = (entryPoint, platform, projectName) => {
50
47
  };
51
48
  var getRunnables = (tests, projectName, payload = {
52
49
  nodeEntryPoints: {},
50
+ nodeEntryPointSidecars: {},
53
51
  webEntryPoints: {},
54
- importEntryPoints: {}
52
+ webEntryPointSidecars: {},
53
+ pureEntryPoints: {},
54
+ pureEntryPointSidecars: {}
55
55
  }) => {
56
56
  return tests.reduce((pt, cv, cndx, cry) => {
57
57
  if (cv[1] === "node") {
@@ -63,14 +63,71 @@ var getRunnables = (tests, projectName, payload = {
63
63
  `./testeranto/bundles/web/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
64
64
  );
65
65
  } else if (cv[1] === "pure") {
66
- pt.importEntryPoints[cv[0]] = path.resolve(
66
+ pt.pureEntryPoints[cv[0]] = path.resolve(
67
67
  `./testeranto/bundles/pure/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
68
68
  );
69
69
  }
70
+ cv[3].filter((t) => t[1] === "node").forEach((t) => {
71
+ pt.nodeEntryPointSidecars[`${t[0]}`] = path.resolve(
72
+ `./testeranto/bundles/node/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
73
+ );
74
+ });
75
+ cv[3].filter((t) => t[1] === "web").forEach((t) => {
76
+ pt.webEntryPointSidecars[`${t[0]}`] = path.resolve(
77
+ `./testeranto/bundles/web/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
78
+ );
79
+ });
80
+ cv[3].filter((t) => t[1] === "pure").forEach((t) => {
81
+ pt.pureEntryPointSidecars[`${t[0]}`] = path.resolve(
82
+ `./testeranto/bundles/pure/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
83
+ );
84
+ });
70
85
  return pt;
71
86
  }, payload);
72
87
  };
73
88
 
89
+ // src/utils/queue.ts
90
+ var Queue = class {
91
+ constructor() {
92
+ this.items = [];
93
+ }
94
+ enqueue(element) {
95
+ this.items.push(element);
96
+ }
97
+ dequeue() {
98
+ if (this.isEmpty()) {
99
+ return "Queue is empty";
100
+ }
101
+ return this.items.shift();
102
+ }
103
+ peek() {
104
+ if (this.isEmpty()) {
105
+ return "Queue is empty";
106
+ }
107
+ return this.items[0];
108
+ }
109
+ isEmpty() {
110
+ return this.items.length === 0;
111
+ }
112
+ size() {
113
+ return this.items.length;
114
+ }
115
+ clear() {
116
+ this.items = [];
117
+ }
118
+ print() {
119
+ console.log(this.items.join(" -> "));
120
+ }
121
+ };
122
+
123
+ // src/PM/PM_WithEslintAndTsc.ts
124
+ import ts from "typescript";
125
+ import fs2 from "fs";
126
+ import path3 from "path";
127
+ import ansiC from "ansi-colors";
128
+ import { ESLint } from "eslint";
129
+ import tsc from "tsc-prog";
130
+
74
131
  // src/PM/base.ts
75
132
  import fs from "fs";
76
133
  import path2 from "path";
@@ -84,7 +141,7 @@ var PM_Base = class {
84
141
  this.configs = configs;
85
142
  }
86
143
  customclose() {
87
- throw new Error("Method not implemented.");
144
+ throw new Error("customclose not implemented.");
88
145
  }
89
146
  waitForSelector(p, s) {
90
147
  return new Promise((res) => {
@@ -103,8 +160,8 @@ var PM_Base = class {
103
160
  });
104
161
  });
105
162
  }
106
- newPage() {
107
- return this.browser.newPage();
163
+ async newPage() {
164
+ return (await this.browser.newPage()).mainFrame()._id;
108
165
  }
109
166
  goto(p, url) {
110
167
  return new Promise((res) => {
@@ -117,9 +174,9 @@ var PM_Base = class {
117
174
  $(selector, p) {
118
175
  return new Promise((res) => {
119
176
  this.doInPage(p, async (page) => {
120
- const x = page.$(selector);
121
- const y = await x;
122
- res(y !== null);
177
+ const x = await page.$(selector);
178
+ const y = await x?.jsonValue();
179
+ res(y);
123
180
  });
124
181
  });
125
182
  }
@@ -149,7 +206,7 @@ var PM_Base = class {
149
206
  await sPromise;
150
207
  return sPromise;
151
208
  }
152
- async customScreenShot(ssOpts, testName2, page) {
209
+ async customScreenShot(ssOpts, testName2, pageUid) {
153
210
  const p = ssOpts.path;
154
211
  const dir = path2.dirname(p);
155
212
  fs.mkdirSync(dir, {
@@ -159,6 +216,9 @@ var PM_Base = class {
159
216
  files[testName2] = /* @__PURE__ */ new Set();
160
217
  }
161
218
  files[testName2].add(ssOpts.path);
219
+ const page = (await this.browser.pages()).find(
220
+ (p2) => p2.mainFrame()._id === pageUid
221
+ );
162
222
  const sPromise = page.screenshot({
163
223
  ...ssOpts,
164
224
  path: p
@@ -266,8 +326,8 @@ var PM_Base = class {
266
326
  res(x);
267
327
  });
268
328
  }
269
- page() {
270
- throw new Error("Method not implemented.");
329
+ page(p) {
330
+ return p;
271
331
  }
272
332
  click(selector, page) {
273
333
  return page.click(selector);
@@ -282,14 +342,27 @@ var PM_Base = class {
282
342
  return page.keyboard.type(value);
283
343
  });
284
344
  }
285
- getValue(value, p) {
345
+ // setValue(value: string, p: string) {
346
+ // this.doInPage(p, (page) => {
347
+ // return page.keyboard.type(value);
348
+ // });
349
+ // }
350
+ getAttribute(selector, attribute, p) {
286
351
  this.doInPage(p, (page) => {
287
- return page.keyboard.type(value);
352
+ return page.$eval(selector, (input) => input.getAttribute(attribute));
288
353
  });
289
354
  }
290
- getAttribute(selector, attribute, p) {
291
- this.doInPage(p, (page) => {
292
- return page.$eval(selector, (input) => input.getAttribute("value"));
355
+ async getInnerHtml(selector, p) {
356
+ return new Promise((res, rej) => {
357
+ this.doInPage(p, async (page) => {
358
+ const e = await page.$(selector);
359
+ if (!e) {
360
+ rej();
361
+ } else {
362
+ const text = await (await e.getProperty("textContent")).jsonValue();
363
+ res(text);
364
+ }
365
+ });
293
366
  });
294
367
  }
295
368
  isDisabled(selector, p) {
@@ -304,93 +377,23 @@ var PM_Base = class {
304
377
  }
305
378
  async doInPage(p, cb) {
306
379
  (await this.browser.pages()).forEach((page) => {
307
- if (page.mainFrame()._id === p) {
380
+ const frame = page.mainFrame();
381
+ if (frame._id === p) {
308
382
  return cb(page);
309
383
  }
310
384
  });
311
385
  }
312
386
  };
313
387
 
314
- // src/PM/main.ts
388
+ // src/PM/PM_WithEslintAndTsc.ts
315
389
  var eslint = new ESLint();
316
390
  var formatter = await eslint.loadFormatter(
317
391
  "./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs"
318
392
  );
319
- var changes = {};
320
- var fileHashes = {};
321
- var files2 = {};
322
- var screenshots2 = {};
323
- async function fileHash(filePath, algorithm = "md5") {
324
- return new Promise((resolve, reject) => {
325
- const hash = crypto.createHash(algorithm);
326
- const fileStream = fs2.createReadStream(filePath);
327
- fileStream.on("data", (data) => {
328
- hash.update(data);
329
- });
330
- fileStream.on("end", () => {
331
- const fileHash2 = hash.digest("hex");
332
- resolve(fileHash2);
333
- });
334
- fileStream.on("error", (error) => {
335
- reject(`Error reading file: ${error.message}`);
336
- });
337
- });
338
- }
339
- var statusMessagePretty = (failures, test) => {
340
- if (failures === 0) {
341
- console.log(
342
- ansiC.green(ansiC.inverse(`> ${test} completed successfully?!?`))
343
- );
344
- } else {
345
- console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
346
- }
347
- };
348
- async function writeFileAndCreateDir(filePath, data) {
349
- const dirPath = path3.dirname(filePath);
350
- try {
351
- await fs2.promises.mkdir(dirPath, { recursive: true });
352
- await fs2.appendFileSync(filePath, data);
353
- } catch (error) {
354
- console.error(`Error writing file: ${error}`);
355
- }
356
- }
357
- var filesHash = async (files3, algorithm = "md5") => {
358
- return new Promise((resolve, reject) => {
359
- resolve(
360
- files3.reduce(async (mm, f) => {
361
- return await mm + await fileHash(f);
362
- }, Promise.resolve(""))
363
- );
364
- });
365
- };
366
- function isValidUrl(string) {
367
- try {
368
- new URL(string);
369
- return true;
370
- } catch (err) {
371
- return false;
372
- }
373
- }
374
- function pollForFile(path4, timeout = 2e3) {
375
- const intervalObj = setInterval(function() {
376
- const file = path4;
377
- const fileExists = fs2.existsSync(file);
378
- if (fileExists) {
379
- clearInterval(intervalObj);
380
- }
381
- }, timeout);
382
- }
383
- var PM_Main = class extends PM_Base {
393
+ var PM_WithEslintAndTsc = class extends PM_Base {
384
394
  constructor(configs, name, mode2) {
385
395
  super(configs);
386
- this.bigBoard = {};
387
- this.getRunnables = (tests, testName2, payload = {
388
- nodeEntryPoints: {},
389
- webEntryPoints: {},
390
- importEntryPoints: {}
391
- }) => {
392
- return getRunnables(tests, testName2, payload);
393
- };
396
+ this.summary = {};
394
397
  this.tscCheck = async ({
395
398
  entrypoint,
396
399
  addableFiles,
@@ -415,15 +418,15 @@ var PM_Main = class extends PM_Base {
415
418
  // exclude: ["**/*.test.ts", "**/*.spec.ts"],
416
419
  });
417
420
  const tscPath = tscPather(entrypoint, platform, this.name);
418
- let allDiagnostics = program.getSemanticDiagnostics();
421
+ const allDiagnostics = program.getSemanticDiagnostics();
419
422
  const results = [];
420
423
  allDiagnostics.forEach((diagnostic) => {
421
424
  if (diagnostic.file) {
422
- let { line, character } = ts.getLineAndCharacterOfPosition(
425
+ const { line, character } = ts.getLineAndCharacterOfPosition(
423
426
  diagnostic.file,
424
427
  diagnostic.start
425
428
  );
426
- let message = ts.flattenDiagnosticMessageText(
429
+ const message = ts.flattenDiagnosticMessageText(
427
430
  diagnostic.messageText,
428
431
  "\n"
429
432
  );
@@ -455,14 +458,14 @@ var PM_Main = class extends PM_Base {
455
458
  this.lintIsNowDone(entrypoint, results.length);
456
459
  };
457
460
  this.makePrompt = async (entryPoint, addableFiles, platform) => {
458
- this.bigBoard[entryPoint].prompt = "?";
461
+ this.summary[entryPoint].prompt = "?";
459
462
  const promptPath = promptPather(entryPoint, platform, this.name);
460
463
  const testPaths = path3.join(
461
464
  "testeranto",
462
465
  "reports",
463
466
  this.name,
464
- platform,
465
467
  entryPoint.split(".").slice(0, -1).join("."),
468
+ platform,
466
469
  `tests.json`
467
470
  );
468
471
  const featuresPath = path3.join(
@@ -473,6 +476,38 @@ var PM_Main = class extends PM_Base {
473
476
  entryPoint.split(".").slice(0, -1).join("."),
474
477
  `featurePrompt.txt`
475
478
  );
479
+ const logPath = path3.join(
480
+ "testeranto",
481
+ "reports",
482
+ this.name,
483
+ entryPoint.split(".").slice(0, -1).join("."),
484
+ platform,
485
+ `console_log.txt`
486
+ );
487
+ const lintPath = path3.join(
488
+ "testeranto",
489
+ "reports",
490
+ this.name,
491
+ entryPoint.split(".").slice(0, -1).join("."),
492
+ platform,
493
+ `lint_errors.json`
494
+ );
495
+ const typePath = path3.join(
496
+ "testeranto",
497
+ "reports",
498
+ this.name,
499
+ entryPoint.split(".").slice(0, -1).join("."),
500
+ platform,
501
+ `type_errors.txt`
502
+ );
503
+ const messagePath = path3.join(
504
+ "testeranto",
505
+ "reports",
506
+ this.name,
507
+ entryPoint.split(".").slice(0, -1).join("."),
508
+ platform,
509
+ `message`
510
+ );
476
511
  fs2.writeFileSync(
477
512
  promptPath,
478
513
  `
@@ -480,51 +515,77 @@ ${addableFiles.map((x) => {
480
515
  return `/add ${x}`;
481
516
  }).join("\n")}
482
517
 
483
- /read ${lintPather(entryPoint, platform, this.name)}
484
- /read ${tscPather(entryPoint, platform, this.name)}
485
518
  /read ${testPaths}
486
-
487
- /load ${featuresPath}
488
-
489
- /code Fix the failing tests described in ${testPaths}. Correct any type signature errors described in the files ${tscPather(
490
- entryPoint,
491
- platform,
492
- this.name
493
- )}. Implement any method which throws "Function not implemented. Resolve the lint errors described in ${lintPather(
494
- entryPoint,
495
- platform,
496
- this.name
497
- )}"
498
- `
519
+ /read ${logPath}
520
+ /read ${typePath}
521
+ /read ${lintPath}
522
+ `
523
+ );
524
+ fs2.writeFileSync(
525
+ messagePath,
526
+ `Fix the failing tests described in ${testPaths} and ${logPath}. DO NOT refactor beyond what is necessary. Always prefer minimal changes, focusing mostly on keeping the BDD tests passing`
499
527
  );
500
- this.bigBoard[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
528
+ this.summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
529
+ this.checkForShutdown();
530
+ };
531
+ this.typeCheckIsRunning = (src) => {
532
+ this.summary[src].typeErrors = "?";
533
+ };
534
+ this.typeCheckIsNowDone = (src, failures) => {
535
+ this.summary[src].typeErrors = failures;
536
+ this.writeBigBoard();
501
537
  this.checkForShutdown();
502
538
  };
539
+ this.lintIsRunning = (src) => {
540
+ this.summary[src].staticErrors = "?";
541
+ this.writeBigBoard();
542
+ };
543
+ this.lintIsNowDone = (src, failures) => {
544
+ this.summary[src].staticErrors = failures;
545
+ this.writeBigBoard();
546
+ this.checkForShutdown();
547
+ };
548
+ this.bddTestIsRunning = (src) => {
549
+ this.summary[src].runTimeError = "?";
550
+ this.writeBigBoard();
551
+ };
552
+ this.bddTestIsNowDone = (src, failures) => {
553
+ this.summary[src].runTimeError = failures;
554
+ this.writeBigBoard();
555
+ this.checkForShutdown();
556
+ };
557
+ this.writeBigBoard = () => {
558
+ fs2.writeFileSync(
559
+ `./testeranto/reports/${this.name}/summary.json`,
560
+ JSON.stringify(this.summary, null, 2)
561
+ );
562
+ };
503
563
  this.checkForShutdown = () => {
564
+ console.log(ansiC.inverse(`checkForShutdown`));
504
565
  this.writeBigBoard();
505
566
  if (this.mode === "dev")
506
567
  return;
507
568
  let inflight = false;
508
- Object.keys(this.bigBoard).forEach((k) => {
509
- if (this.bigBoard[k].prompt === "?") {
569
+ Object.keys(this.summary).forEach((k) => {
570
+ if (this.summary[k].prompt === "?") {
510
571
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
511
572
  inflight = true;
512
573
  }
513
574
  });
514
- Object.keys(this.bigBoard).forEach((k) => {
515
- if (this.bigBoard[k].runTimeError === "?") {
575
+ Object.keys(this.summary).forEach((k) => {
576
+ if (this.summary[k].runTimeError === "?") {
516
577
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
517
578
  inflight = true;
518
579
  }
519
580
  });
520
- Object.keys(this.bigBoard).forEach((k) => {
521
- if (this.bigBoard[k].staticErrors === "?") {
581
+ Object.keys(this.summary).forEach((k) => {
582
+ if (this.summary[k].staticErrors === "?") {
522
583
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
523
584
  inflight = true;
524
585
  }
525
586
  });
526
- Object.keys(this.bigBoard).forEach((k) => {
527
- if (this.bigBoard[k].typeErrors === "?") {
587
+ Object.keys(this.summary).forEach((k) => {
588
+ if (this.summary[k].typeErrors === "?") {
528
589
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
529
590
  inflight = true;
530
591
  }
@@ -537,38 +598,113 @@ ${addableFiles.map((x) => {
537
598
  });
538
599
  }
539
600
  };
540
- this.typeCheckIsRunning = (src) => {
541
- this.bigBoard[src].typeErrors = "?";
542
- };
543
- this.typeCheckIsNowDone = (src, failures) => {
544
- this.bigBoard[src].typeErrors = failures;
545
- this.writeBigBoard();
546
- this.checkForShutdown();
547
- };
548
- this.lintIsRunning = (src) => {
549
- this.bigBoard[src].staticErrors = "?";
550
- this.writeBigBoard();
551
- };
552
- this.lintIsNowDone = (src, failures) => {
553
- this.bigBoard[src].staticErrors = failures;
554
- this.writeBigBoard();
555
- this.checkForShutdown();
556
- };
557
- this.bddTestIsRunning = (src) => {
558
- this.bigBoard[src].runTimeError = "?";
559
- this.writeBigBoard();
560
- };
561
- this.bddTestIsNowDone = (src, failures) => {
562
- this.bigBoard[src].runTimeError = failures;
563
- this.writeBigBoard();
564
- this.checkForShutdown();
601
+ this.name = name;
602
+ this.mode = mode2;
603
+ this.configs.tests.forEach(([t, rt, tr, sidecars]) => {
604
+ this.summary[t] = {
605
+ runTimeError: "?",
606
+ typeErrors: "?",
607
+ staticErrors: "?",
608
+ prompt: "?",
609
+ failingFeatures: {}
610
+ };
611
+ sidecars.forEach(([t2]) => {
612
+ this.summary[t2] = {
613
+ // runTimeError: "?",
614
+ typeErrors: "?",
615
+ staticErrors: "?"
616
+ // prompt: "?",
617
+ // failingFeatures: {},
618
+ };
619
+ });
620
+ });
621
+ }
622
+ };
623
+
624
+ // src/PM/main.ts
625
+ var changes = {};
626
+ var fileHashes = {};
627
+ var files2 = {};
628
+ var screenshots2 = {};
629
+ async function fileHash(filePath, algorithm = "md5") {
630
+ return new Promise((resolve, reject) => {
631
+ const hash = crypto.createHash(algorithm);
632
+ const fileStream = fs3.createReadStream(filePath);
633
+ fileStream.on("data", (data) => {
634
+ hash.update(data);
635
+ });
636
+ fileStream.on("end", () => {
637
+ const fileHash2 = hash.digest("hex");
638
+ resolve(fileHash2);
639
+ });
640
+ fileStream.on("error", (error) => {
641
+ reject(`Error reading file: ${error.message}`);
642
+ });
643
+ });
644
+ }
645
+ var statusMessagePretty = (failures, test) => {
646
+ if (failures === 0) {
647
+ console.log(
648
+ ansiC2.green(ansiC2.inverse(`> ${test} completed successfully?!?`))
649
+ );
650
+ } else {
651
+ console.log(ansiC2.red(ansiC2.inverse(`> ${test} failed ${failures} times`)));
652
+ }
653
+ };
654
+ async function writeFileAndCreateDir(filePath, data) {
655
+ const dirPath = path4.dirname(filePath);
656
+ try {
657
+ await fs3.promises.mkdir(dirPath, { recursive: true });
658
+ await fs3.writeFileSync(filePath, data);
659
+ } catch (error) {
660
+ console.error(`Error writing file: ${error}`);
661
+ }
662
+ }
663
+ var filesHash = async (files3, algorithm = "md5") => {
664
+ return new Promise((resolve, reject) => {
665
+ resolve(
666
+ files3.reduce(async (mm, f) => {
667
+ return await mm + await fileHash(f);
668
+ }, Promise.resolve(""))
669
+ );
670
+ });
671
+ };
672
+ function isValidUrl(string) {
673
+ try {
674
+ new URL(string);
675
+ return true;
676
+ } catch (err) {
677
+ return false;
678
+ }
679
+ }
680
+ async function pollForFile(path5, timeout = 2e3) {
681
+ const intervalObj = setInterval(function() {
682
+ const file = path5;
683
+ const fileExists = fs3.existsSync(file);
684
+ if (fileExists) {
685
+ clearInterval(intervalObj);
686
+ }
687
+ }, timeout);
688
+ }
689
+ var PM_Main = class extends PM_WithEslintAndTsc {
690
+ constructor(configs, name, mode2) {
691
+ super(configs, name, mode2);
692
+ this.getRunnables = (tests, testName2, payload = {
693
+ nodeEntryPoints: {},
694
+ nodeEntryPointSidecars: {},
695
+ webEntryPoints: {},
696
+ webEntryPointSidecars: {},
697
+ pureEntryPoints: {},
698
+ pureEntryPointSidecars: {}
699
+ }) => {
700
+ return getRunnables(tests, testName2, payload);
565
701
  };
566
702
  this.launchPure = async (src, dest) => {
567
- console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
703
+ console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
568
704
  this.bddTestIsRunning(src);
569
705
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
570
- if (!fs2.existsSync(reportDest)) {
571
- fs2.mkdirSync(reportDest, { recursive: true });
706
+ if (!fs3.existsSync(reportDest)) {
707
+ fs3.mkdirSync(reportDest, { recursive: true });
572
708
  }
573
709
  const destFolder = dest.replace(".mjs", "");
574
710
  let argz = "";
@@ -576,11 +712,11 @@ ${addableFiles.map((x) => {
576
712
  return t[0] === src;
577
713
  });
578
714
  if (!testConfig) {
579
- console.log(ansiC.inverse("missing test config! Exiting ungracefully!"));
715
+ console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
580
716
  process.exit(-1);
581
717
  }
582
718
  const testConfigResource = testConfig[2];
583
- let portsToUse = [];
719
+ const portsToUse = [];
584
720
  if (testConfigResource.ports === 0) {
585
721
  argz = JSON.stringify({
586
722
  scheduled: true,
@@ -619,21 +755,20 @@ ${addableFiles.map((x) => {
619
755
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
620
756
  return module.default.then((defaultModule) => {
621
757
  defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
622
- this.receiveFeatures(results.features, destFolder, src, "pure");
623
758
  statusMessagePretty(results.fails, src);
624
759
  this.bddTestIsNowDone(src, results.fails);
625
760
  }).catch((e) => {
626
761
  console.log(
627
- ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
762
+ ansiC2.red(
763
+ ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
764
+ )
628
765
  );
629
766
  this.bddTestIsNowDone(src, -1);
630
- }).finally(() => {
631
- webSideCares.forEach((webSideCar) => webSideCar.close());
632
767
  });
633
768
  }).catch((e) => {
634
769
  console.log(
635
- ansiC.red(
636
- ansiC.inverse(
770
+ ansiC2.red(
771
+ ansiC2.inverse(
637
772
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
638
773
  )
639
774
  )
@@ -645,8 +780,8 @@ ${addableFiles.map((x) => {
645
780
  });
646
781
  } catch (e) {
647
782
  console.log(
648
- ansiC.red(
649
- ansiC.inverse(
783
+ ansiC2.red(
784
+ ansiC2.inverse(
650
785
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
651
786
  )
652
787
  )
@@ -657,38 +792,39 @@ ${addableFiles.map((x) => {
657
792
  }
658
793
  for (let i = 0; i <= portsToUse.length; i++) {
659
794
  if (portsToUse[i]) {
660
- this.ports[portsToUse[i]] = "true";
795
+ this.ports[portsToUse[i]] = true;
661
796
  }
662
797
  }
663
798
  };
664
799
  this.launchNode = async (src, dest) => {
665
- console.log(ansiC.green(ansiC.inverse(`! node, ${src}`)));
800
+ console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
666
801
  this.bddTestIsRunning(src);
667
802
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
668
- if (!fs2.existsSync(reportDest)) {
669
- fs2.mkdirSync(reportDest, { recursive: true });
803
+ if (!fs3.existsSync(reportDest)) {
804
+ fs3.mkdirSync(reportDest, { recursive: true });
670
805
  }
671
- const destFolder = dest.replace(".mjs", "");
672
806
  let testResources = "";
673
807
  const testConfig = this.configs.tests.find((t) => {
674
808
  return t[0] === src;
675
809
  });
676
810
  if (!testConfig) {
677
811
  console.log(
678
- ansiC.inverse(`missing test config! Exiting ungracefully for '${src}'`)
812
+ ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
679
813
  );
680
814
  process.exit(-1);
681
815
  }
682
816
  const testConfigResource = testConfig[2];
683
- let portsToUse = [];
817
+ const portsToUse = [];
684
818
  if (testConfigResource.ports === 0) {
685
- testResources = JSON.stringify({
686
- scheduled: true,
819
+ console.error("portsToUse?!", []);
820
+ const t = {
687
821
  name: src,
688
- ports: portsToUse,
822
+ // ports: portsToUse.map((v) => Number(v)),
823
+ ports: [],
689
824
  fs: reportDest,
690
825
  browserWSEndpoint: this.browser.wsEndpoint()
691
- });
826
+ };
827
+ testResources = JSON.stringify(t);
692
828
  } else if (testConfigResource.ports > 0) {
693
829
  const openPorts = Object.entries(this.ports).filter(
694
830
  ([portnumber, portopen]) => portopen
@@ -698,14 +834,16 @@ ${addableFiles.map((x) => {
698
834
  portsToUse.push(openPorts[i][0]);
699
835
  this.ports[openPorts[i][0]] = false;
700
836
  }
837
+ console.error("portsToUse", portsToUse);
701
838
  testResources = JSON.stringify({
702
839
  scheduled: true,
703
840
  name: src,
704
841
  ports: portsToUse,
705
- fs: destFolder,
842
+ fs: reportDest,
706
843
  browserWSEndpoint: this.browser.wsEndpoint()
707
844
  });
708
845
  } else {
846
+ console.log("Not enough ports! Enqueuing test job...");
709
847
  this.queue.push(src);
710
848
  return;
711
849
  }
@@ -715,67 +853,65 @@ ${addableFiles.map((x) => {
715
853
  }
716
854
  const builtfile = dest;
717
855
  let haltReturns = false;
856
+ const ipcfile = "/tmp/tpipe_" + Math.random();
857
+ const child = spawn(
858
+ "node",
859
+ // "node --inspect-brk ",
860
+ [builtfile, testResources, ipcfile],
861
+ {
862
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
863
+ }
864
+ );
718
865
  let buffer = new Buffer("");
719
866
  const server = net.createServer((socket) => {
867
+ const queue = new Queue();
720
868
  socket.on("data", (data) => {
721
869
  buffer = Buffer.concat([buffer, data]);
722
- let messages = [];
723
870
  for (let b = 0; b < buffer.length + 1; b++) {
724
- let c = buffer.slice(0, b);
871
+ const c = buffer.slice(0, b);
725
872
  let d;
726
873
  try {
727
874
  d = JSON.parse(c.toString());
728
- messages.push(d);
875
+ queue.enqueue(d);
729
876
  buffer = buffer.slice(b, buffer.length + 1);
730
877
  b = 0;
731
878
  } catch (e) {
732
879
  }
733
880
  }
734
- messages.forEach(async (payload) => {
735
- this.mapping().forEach(async ([command, func]) => {
736
- if (payload[0] === command) {
737
- const x = payload.slice(1, -1);
738
- const r = await this[command](...x);
739
- if (!haltReturns) {
740
- child.send(
741
- JSON.stringify({
742
- payload: r,
743
- key: payload[payload.length - 1]
744
- })
745
- );
881
+ while (queue.size() > 0) {
882
+ const message = queue.dequeue();
883
+ if (message) {
884
+ this.mapping().forEach(async ([command, func]) => {
885
+ if (message[0] === command) {
886
+ const x = message.slice(1, -1);
887
+ const r = await this[command](...x);
888
+ if (!haltReturns) {
889
+ child.send(
890
+ JSON.stringify({
891
+ payload: r,
892
+ key: message[message.length - 1]
893
+ })
894
+ );
895
+ }
746
896
  }
747
- }
748
- });
749
- });
897
+ });
898
+ }
899
+ }
750
900
  });
751
901
  });
752
- const oStream = fs2.createWriteStream(`${reportDest}/console_log.txt`);
753
- const child = spawn(
754
- "node",
755
- [builtfile, testResources, "--trace-warnings"],
756
- {
757
- stdio: ["pipe", "pipe", "pipe", "ipc"]
758
- // silent: true
759
- }
760
- );
761
- const p = destFolder + "/tpipe";
902
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
762
903
  const errFile = `${reportDest}/error.txt`;
763
- if (fs2.existsSync(errFile)) {
764
- fs2.rmSync(errFile);
904
+ if (fs3.existsSync(errFile)) {
905
+ fs3.rmSync(errFile);
765
906
  }
766
- server.listen(p, () => {
907
+ server.listen(ipcfile, () => {
767
908
  child.stderr?.on("data", (data) => {
768
- oStream.write(`stderr data ${data}`);
909
+ oStream.write(`stderr > ${data}`);
769
910
  });
770
911
  child.stdout?.on("data", (data) => {
771
- oStream.write(`stdout data ${data}`);
912
+ oStream.write(`stdout > ${data}`);
772
913
  });
773
914
  child.on("close", (code) => {
774
- console.log("close");
775
- console.log("deleting", p);
776
- if (fs2.existsSync(p)) {
777
- fs2.rmSync(p);
778
- }
779
915
  oStream.close();
780
916
  server.close();
781
917
  if (code === null) {
@@ -791,23 +927,19 @@ ${addableFiles.map((x) => {
791
927
  haltReturns = true;
792
928
  });
793
929
  child.on("exit", (code) => {
794
- console.log("exit");
795
- console.log("deleting", p);
796
- if (fs2.existsSync(p)) {
797
- fs2.rmSync(p);
798
- }
799
930
  haltReturns = true;
931
+ for (let i = 0; i <= portsToUse.length; i++) {
932
+ if (portsToUse[i]) {
933
+ this.ports[portsToUse[i]] = true;
934
+ }
935
+ }
800
936
  });
801
937
  child.on("error", (e) => {
802
938
  console.log("error");
803
- console.log("deleting", p);
804
- if (fs2.existsSync(p)) {
805
- fs2.rmSync(p);
806
- }
807
939
  haltReturns = true;
808
940
  console.log(
809
- ansiC.red(
810
- ansiC.inverse(
941
+ ansiC2.red(
942
+ ansiC2.inverse(
811
943
  `${src} errored with: ${e.name}. Check ${errFile}for more info`
812
944
  )
813
945
  )
@@ -817,121 +949,237 @@ ${addableFiles.map((x) => {
817
949
  statusMessagePretty(-1, src);
818
950
  });
819
951
  });
820
- child.send({ path: p });
821
- for (let i = 0; i <= portsToUse.length; i++) {
822
- if (portsToUse[i]) {
823
- this.ports[portsToUse[i]] = "true";
824
- }
825
- }
826
952
  };
827
- this.launchWebSideCar = async (src, dest, testConfig) => {
828
- const d = dest + ".mjs";
829
- console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
953
+ this.launchWebSideCar = async (testConfig) => {
954
+ const src = testConfig[0];
955
+ const dest = src.split(".").slice(0, -1).join(".");
956
+ const destFolder = dest.replace(".mjs", "");
957
+ console.log(ansiC2.green(ansiC2.inverse(`launchWebSideCar ${src}`)));
830
958
  const fileStreams2 = [];
831
959
  const doneFileStream2 = [];
960
+ const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
832
961
  return new Promise((res, rej) => {
833
- this.browser.newPage().then((page) => {
834
- page.exposeFunction(
835
- "custom-screenshot",
836
- async (ssOpts, testName2) => {
837
- const p = ssOpts.path;
838
- const dir = path3.dirname(p);
839
- fs2.mkdirSync(dir, {
840
- recursive: true
841
- });
842
- files2[testName2].add(ssOpts.path);
843
- const sPromise = page.screenshot({
844
- ...ssOpts,
845
- path: p
846
- });
847
- if (!screenshots2[testName2]) {
848
- screenshots2[testName2] = [];
849
- }
850
- screenshots2[testName2].push(sPromise);
851
- await sPromise;
852
- return sPromise;
853
- }
854
- );
855
- page.exposeFunction(
856
- "writeFileSync",
857
- (fp, contents, testName2) => {
858
- const dir = path3.dirname(fp);
859
- fs2.mkdirSync(dir, {
860
- recursive: true
861
- });
862
- const p = new Promise(async (res2, rej2) => {
863
- fs2.writeFileSync(fp, contents);
864
- res2(fp);
865
- });
866
- doneFileStream2.push(p);
867
- if (!files2[testName2]) {
868
- files2[testName2] = /* @__PURE__ */ new Set();
869
- }
870
- files2[testName2].add(fp);
871
- return p;
872
- }
873
- );
874
- page.exposeFunction("existsSync", (fp, contents) => {
875
- return fs2.existsSync(fp);
962
+ this.browser.newPage().then(async (page) => {
963
+ this.mapping().forEach(async ([command, func]) => {
964
+ page.exposeFunction(command, func);
876
965
  });
877
- page.exposeFunction("mkdirSync", (fp) => {
878
- if (!fs2.existsSync(fp)) {
879
- return fs2.mkdirSync(fp, {
880
- recursive: true
881
- });
966
+ const close = () => {
967
+ if (!files2[src]) {
968
+ files2[src] = /* @__PURE__ */ new Set();
882
969
  }
883
- return false;
884
- });
885
- page.exposeFunction(
886
- "createWriteStream",
887
- (fp, testName2) => {
888
- const f = fs2.createWriteStream(fp);
889
- files2[testName2].add(fp);
890
- const p = new Promise((res2, rej2) => {
891
- res2(fp);
892
- });
893
- doneFileStream2.push(p);
894
- f.on("close", async () => {
895
- await p;
896
- });
897
- fileStreams2.push(f);
898
- return {
899
- ...JSON.parse(JSON.stringify(f)),
900
- uid: fileStreams2.length - 1
901
- };
970
+ delete files2[src];
971
+ Promise.all(screenshots2[src] || []).then(() => {
972
+ delete screenshots2[src];
973
+ page.close();
974
+ oStream.close();
975
+ });
976
+ };
977
+ page.on("pageerror", (err) => {
978
+ console.debug(`Error from ${src}: [${err.name}] `);
979
+ oStream.write(err.name);
980
+ oStream.write("\n");
981
+ if (err.cause) {
982
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
983
+ oStream.write(err.cause);
984
+ oStream.write("\n");
902
985
  }
903
- );
904
- page.exposeFunction(
905
- "write",
906
- async (uid, contents) => {
907
- return fileStreams2[uid].write(contents);
986
+ if (err.stack) {
987
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
988
+ oStream.write(err.stack);
989
+ oStream.write("\n");
908
990
  }
909
- );
910
- page.exposeFunction("end", async (uid) => {
911
- return fileStreams2[uid].end();
991
+ console.debug(`Error from message ${src}: [${err.message}] `);
992
+ oStream.write(err.message);
993
+ oStream.write("\n");
994
+ this.bddTestIsNowDone(src, -1);
995
+ close();
996
+ });
997
+ page.on("console", (log) => {
998
+ oStream.write(log.text());
999
+ oStream.write(JSON.stringify(log.location()));
1000
+ oStream.write(JSON.stringify(log.stackTrace()));
1001
+ oStream.write("\n");
1002
+ });
1003
+ await page.goto(`file://${`${destFolder}.html`}`, {});
1004
+ const webArgz = JSON.stringify({
1005
+ name: dest,
1006
+ ports: [].toString(),
1007
+ fs: dest,
1008
+ browserWSEndpoint: this.browser.wsEndpoint()
1009
+ });
1010
+ const d = `${dest}?cacheBust=${Date.now()}`;
1011
+ const evaluation = `
1012
+ import('${d}').then(async (x) => {
1013
+
1014
+ try {
1015
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
1016
+ } catch (e) {
1017
+ console.log("fail", e.toString())
1018
+ }
1019
+ })`;
1020
+ await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
1021
+ statusMessagePretty(fails, src);
1022
+ this.bddTestIsNowDone(src, fails);
1023
+ }).catch((e) => {
1024
+ console.log(
1025
+ ansiC2.red(
1026
+ ansiC2.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
1027
+ )
1028
+ );
1029
+ }).finally(() => {
1030
+ this.bddTestIsNowDone(src, -1);
1031
+ close();
912
1032
  });
913
1033
  return page;
914
1034
  }).then(async (page) => {
915
1035
  await page.goto(`file://${`${dest}.html`}`, {});
916
- res(page);
1036
+ res([Math.random(), page]);
917
1037
  });
918
1038
  });
919
1039
  };
920
- this.launchNodeSideCar = async (src, dest, testConfig) => {
1040
+ this.launchNodeSideCar = async (sidecar) => {
1041
+ const src = sidecar[0];
1042
+ const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
921
1043
  const d = dest + ".mjs";
922
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
1044
+ console.log(ansiC2.green(ansiC2.inverse(`launchNodeSideCar ${sidecar[0]}`)));
1045
+ const destFolder = dest.replace(".ts", "");
1046
+ const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
1047
+ const argz = {
1048
+ name: sidecar[0],
1049
+ ports: [],
1050
+ fs: destFolder,
1051
+ browserWSEndpoint: this.browser.wsEndpoint()
1052
+ };
1053
+ const testReq = sidecar[2];
1054
+ const portsToUse = [];
1055
+ if (testReq.ports === 0) {
1056
+ } else if (testReq.ports > 0) {
1057
+ const openPorts = Object.entries(this.ports).filter(
1058
+ ([portnumber, portopen]) => portopen
1059
+ );
1060
+ if (openPorts.length >= testReq.ports) {
1061
+ for (let i = 0; i < testReq.ports; i++) {
1062
+ portsToUse.push(openPorts[i][0]);
1063
+ this.ports[openPorts[i][0]] = false;
1064
+ }
1065
+ console.log("nodeSideCar portsToUse", portsToUse);
1066
+ argz.ports = portsToUse;
1067
+ const builtfile = destFolder + ".mjs";
1068
+ let haltReturns = false;
1069
+ let buffer = new Buffer("");
1070
+ const server = net.createServer((socket) => {
1071
+ socket.on("data", (data) => {
1072
+ buffer = Buffer.concat([buffer, data]);
1073
+ const messages = [];
1074
+ for (let b = 0; b < buffer.length + 1; b++) {
1075
+ const c = buffer.slice(0, b);
1076
+ let d2;
1077
+ try {
1078
+ d2 = JSON.parse(c.toString());
1079
+ messages.push(d2);
1080
+ buffer = buffer.slice(b, buffer.length + 1);
1081
+ b = 0;
1082
+ } catch (e) {
1083
+ }
1084
+ }
1085
+ messages.forEach(async (payload) => {
1086
+ this.mapping().forEach(async ([command, func]) => {
1087
+ if (payload[0] === command) {
1088
+ const x = payload.slice(1, -1);
1089
+ const r2 = await this[command](...x);
1090
+ if (!haltReturns) {
1091
+ child.send(
1092
+ JSON.stringify({
1093
+ payload: r2,
1094
+ key: payload[payload.length - 1]
1095
+ })
1096
+ );
1097
+ }
1098
+ }
1099
+ });
1100
+ });
1101
+ });
1102
+ });
1103
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
1104
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
1105
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
1106
+ // silent: true
1107
+ });
1108
+ const p = "/tmp/tpipe" + Math.random();
1109
+ const errFile = `${reportDest}/error.txt`;
1110
+ server.listen(p, () => {
1111
+ child.stderr?.on("data", (data) => {
1112
+ oStream.write(`stderr > ${data}`);
1113
+ });
1114
+ child.stdout?.on("data", (data) => {
1115
+ oStream.write(`stdout > ${data}`);
1116
+ });
1117
+ child.on("close", (code) => {
1118
+ oStream.close();
1119
+ server.close();
1120
+ haltReturns = true;
1121
+ });
1122
+ child.on("exit", (code) => {
1123
+ haltReturns = true;
1124
+ for (let i = 0; i <= portsToUse.length; i++) {
1125
+ if (portsToUse[i]) {
1126
+ this.ports[portsToUse[i]] = true;
1127
+ }
1128
+ }
1129
+ });
1130
+ child.on("error", (e) => {
1131
+ if (fs3.existsSync(p)) {
1132
+ fs3.rmSync(p);
1133
+ }
1134
+ haltReturns = true;
1135
+ console.log(
1136
+ ansiC2.red(
1137
+ ansiC2.inverse(
1138
+ `launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
1139
+ )
1140
+ )
1141
+ );
1142
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
1143
+ });
1144
+ });
1145
+ child.send({ path: p });
1146
+ const r = Math.random();
1147
+ this.nodeSidecars[r] = child;
1148
+ return [r, argz];
1149
+ } else {
1150
+ console.log("Not enough open ports!", openPorts, testReq.ports);
1151
+ this.queue.push(sidecar[0]);
1152
+ return [Math.random(), argz];
1153
+ }
1154
+ } else {
1155
+ console.error("negative port makes no sense", sidecar[0]);
1156
+ process.exit(-1);
1157
+ }
1158
+ };
1159
+ this.stopPureSideCar = async (uid) => {
1160
+ console.log(ansiC2.green(ansiC2.inverse(`stopPureSideCar ${uid}`)));
1161
+ await this.sidecars[uid].shutdown();
1162
+ return;
1163
+ };
1164
+ this.launchPureSideCar = async (sidecar) => {
1165
+ console.log(ansiC2.green(ansiC2.inverse(`launchPureSideCar ${sidecar[0]}`)));
1166
+ const r = Math.random();
1167
+ const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
1168
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
923
1169
  const destFolder = dest.replace(".mjs", "");
924
- let argz = "";
925
- const testConfigResource = testConfig[2];
926
- let portsToUse = [];
1170
+ let argz;
1171
+ const z = sidecar[2];
1172
+ const testConfigResource = sidecar[2];
1173
+ const src = sidecar[0];
1174
+ const portsToUse = [];
927
1175
  if (testConfigResource.ports === 0) {
928
- argz = JSON.stringify({
929
- scheduled: true,
1176
+ argz = {
1177
+ // scheduled: true,
930
1178
  name: src,
931
1179
  ports: portsToUse,
932
1180
  fs: destFolder,
933
1181
  browserWSEndpoint: this.browser.wsEndpoint()
934
- });
1182
+ };
935
1183
  } else if (testConfigResource.ports > 0) {
936
1184
  const openPorts = Object.entries(this.ports).filter(
937
1185
  ([portnumber, portopen]) => portopen
@@ -941,14 +1189,14 @@ ${addableFiles.map((x) => {
941
1189
  portsToUse.push(openPorts[i][0]);
942
1190
  this.ports[openPorts[i][0]] = false;
943
1191
  }
944
- argz = JSON.stringify({
945
- scheduled: true,
1192
+ argz = {
1193
+ // scheduled: true,
946
1194
  name: src,
947
1195
  // ports: [3333],
948
1196
  ports: portsToUse,
949
1197
  fs: ".",
950
1198
  browserWSEndpoint: this.browser.wsEndpoint()
951
- });
1199
+ };
952
1200
  } else {
953
1201
  this.queue.push(src);
954
1202
  return;
@@ -957,29 +1205,22 @@ ${addableFiles.map((x) => {
957
1205
  console.error("negative port makes no sense", src);
958
1206
  process.exit(-1);
959
1207
  }
960
- const builtfile = dest + ".mjs";
961
1208
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
962
- return module.default.then((defaultModule) => {
963
- const s = new defaultModule();
964
- s.receiveTestResourceConfig(argz);
965
- });
1209
+ this.pureSidecars[r] = module.default;
1210
+ this.pureSidecars[r].start(argz);
966
1211
  });
967
- for (let i = 0; i <= portsToUse.length; i++) {
968
- if (portsToUse[i]) {
969
- this.ports[portsToUse[i]] = "true";
970
- }
971
- }
1212
+ return [r, argz];
972
1213
  };
973
1214
  this.launchWeb = async (src, dest) => {
974
- console.log(ansiC.green(ansiC.inverse(`! web ${src}`)));
1215
+ console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
975
1216
  this.bddTestIsRunning(src);
976
1217
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
977
- if (!fs2.existsSync(reportDest)) {
978
- fs2.mkdirSync(reportDest, { recursive: true });
1218
+ if (!fs3.existsSync(reportDest)) {
1219
+ fs3.mkdirSync(reportDest, { recursive: true });
979
1220
  }
980
1221
  const destFolder = dest.replace(".mjs", "");
981
1222
  const webArgz = JSON.stringify({
982
- name: dest,
1223
+ name: src,
983
1224
  ports: [].toString(),
984
1225
  fs: reportDest,
985
1226
  browserWSEndpoint: this.browser.wsEndpoint()
@@ -995,10 +1236,20 @@ ${addableFiles.map((x) => {
995
1236
  console.log("fail", e)
996
1237
  }
997
1238
  })`;
998
- const oStream = fs2.createWriteStream(`${reportDest}/console_log.txt`);
1239
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
999
1240
  this.browser.newPage().then((page) => {
1000
1241
  this.mapping().forEach(async ([command, func]) => {
1001
- page.exposeFunction(command, func);
1242
+ if (command === "page") {
1243
+ page.exposeFunction(command, (x) => {
1244
+ if (x) {
1245
+ return func(x);
1246
+ } else {
1247
+ return func(page.mainFrame()._id);
1248
+ }
1249
+ });
1250
+ } else {
1251
+ return page.exposeFunction(command, func);
1252
+ }
1002
1253
  });
1003
1254
  return page;
1004
1255
  }).then(async (page) => {
@@ -1006,10 +1257,6 @@ ${addableFiles.map((x) => {
1006
1257
  if (!files2[src]) {
1007
1258
  files2[src] = /* @__PURE__ */ new Set();
1008
1259
  }
1009
- fs2.writeFileSync(
1010
- destFolder + "/manifest.json",
1011
- JSON.stringify(Array.from(files2[src]))
1012
- );
1013
1260
  delete files2[src];
1014
1261
  Promise.all(screenshots2[src] || []).then(() => {
1015
1262
  delete screenshots2[src];
@@ -1039,17 +1286,21 @@ ${addableFiles.map((x) => {
1039
1286
  });
1040
1287
  page.on("console", (log) => {
1041
1288
  oStream.write(log.text());
1289
+ oStream.write("\n");
1042
1290
  oStream.write(JSON.stringify(log.location()));
1291
+ oStream.write("\n");
1043
1292
  oStream.write(JSON.stringify(log.stackTrace()));
1044
1293
  oStream.write("\n");
1045
1294
  });
1046
1295
  await page.goto(`file://${`${destFolder}.html`}`, {});
1296
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1047
1297
  await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
1048
- this.receiveFeatures(features, destFolder, src, "web");
1049
1298
  statusMessagePretty(fails, src);
1050
1299
  this.bddTestIsNowDone(src, fails);
1051
1300
  }).catch((e) => {
1052
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1301
+ console.log(
1302
+ ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
1303
+ );
1053
1304
  }).finally(() => {
1054
1305
  this.bddTestIsNowDone(src, -1);
1055
1306
  close();
@@ -1057,74 +1308,106 @@ ${addableFiles.map((x) => {
1057
1308
  return page;
1058
1309
  });
1059
1310
  };
1060
- this.receiveFeatures = (features, destFolder, srcTest, platform) => {
1061
- const featureDestination = path3.resolve(
1311
+ this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
1312
+ const featureDestination = path4.resolve(
1062
1313
  process.cwd(),
1063
1314
  "reports",
1064
1315
  "features",
1065
1316
  "strings",
1066
1317
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1067
1318
  );
1068
- features.reduce(async (mm, featureStringKey) => {
1319
+ const testReport = JSON.parse(
1320
+ fs3.readFileSync(`${reportDest}/tests.json`).toString()
1321
+ );
1322
+ testReport.features.reduce(async (mm, featureStringKey) => {
1069
1323
  const accum = await mm;
1070
1324
  const isUrl = isValidUrl(featureStringKey);
1071
1325
  if (isUrl) {
1072
1326
  const u = new URL(featureStringKey);
1073
1327
  if (u.protocol === "file:") {
1074
- const newPath = `${process.cwd()}/testeranto/features/internal/${path3.relative(
1328
+ const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
1075
1329
  process.cwd(),
1076
1330
  u.pathname
1077
1331
  )}`;
1078
- await fs2.promises.mkdir(path3.dirname(newPath), { recursive: true });
1079
- try {
1080
- await fs2.unlinkSync(newPath);
1081
- } catch (error) {
1082
- if (error.code !== "ENOENT") {
1083
- }
1084
- }
1085
- accum.files.push(newPath);
1332
+ accum.files.push(u.pathname);
1086
1333
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1087
- const newPath = `${process.cwd()}/testeranto/features/external${u.hostname}${u.pathname}`;
1334
+ const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
1088
1335
  const body = await this.configs.featureIngestor(featureStringKey);
1089
1336
  writeFileAndCreateDir(newPath, body);
1090
1337
  accum.files.push(newPath);
1091
1338
  }
1092
1339
  } else {
1093
- await fs2.promises.mkdir(path3.dirname(featureDestination), {
1340
+ await fs3.promises.mkdir(path4.dirname(featureDestination), {
1094
1341
  recursive: true
1095
1342
  });
1096
1343
  accum.strings.push(featureStringKey);
1097
1344
  }
1098
1345
  return accum;
1099
1346
  }, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
1100
- fs2.writeFileSync(
1347
+ fs3.writeFileSync(
1101
1348
  `testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
1102
1349
  files3.map((f) => {
1103
1350
  return `/read ${f}`;
1104
1351
  }).join("\n")
1105
1352
  );
1106
1353
  });
1354
+ testReport.givens.forEach((g) => {
1355
+ if (g.failed === true) {
1356
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
1357
+ }
1358
+ });
1359
+ this.writeBigBoard();
1107
1360
  };
1108
- this.writeBigBoard = () => {
1109
- fs2.writeFileSync(
1110
- `./testeranto/reports/${this.name}/summary.json`,
1111
- JSON.stringify(this.bigBoard, null, 2)
1112
- );
1113
- };
1114
- this.name = name;
1115
- this.mode = mode2;
1116
1361
  this.ports = {};
1117
- this.configs.tests.forEach(([t]) => {
1118
- this.bigBoard[t] = {
1119
- runTimeError: "?",
1120
- typeErrors: "?",
1121
- staticErrors: "?",
1122
- prompt: "?"
1123
- };
1124
- });
1362
+ this.queue = [];
1363
+ this.nodeSidecars = {};
1364
+ this.webSidecars = {};
1365
+ this.pureSidecars = {};
1125
1366
  this.configs.ports.forEach((element) => {
1126
- this.ports[element] = "true";
1367
+ this.ports[element] = true;
1368
+ });
1369
+ }
1370
+ async stopSideCar(uid) {
1371
+ console.log(ansiC2.green(ansiC2.inverse(`stopSideCar ${uid}`)));
1372
+ Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
1373
+ if (Number(k) === uid) {
1374
+ await this.pureSidecars[Number(k)].stop();
1375
+ delete this.pureSidecars[Number(k)];
1376
+ }
1377
+ });
1378
+ Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
1379
+ if (Number(k) === uid) {
1380
+ await this.nodeSidecars[Number(k)].send("stop");
1381
+ delete this.nodeSidecars[Number(k)];
1382
+ }
1383
+ });
1384
+ Object.entries(this.webSidecars).forEach(async ([k, v]) => {
1385
+ if (Number(k) === uid) {
1386
+ (await this.browser.pages()).forEach(async (p) => {
1387
+ if (p.mainFrame()._id === k) {
1388
+ await this.webSidecars[Number(k)].close();
1389
+ delete this.webSidecars[Number(k)];
1390
+ }
1391
+ });
1392
+ }
1127
1393
  });
1394
+ return;
1395
+ }
1396
+ async launchSideCar(n, name) {
1397
+ const c = this.configs.tests.find(([v, r2]) => {
1398
+ return v === name;
1399
+ });
1400
+ const s = c[3][n];
1401
+ const r = s[1];
1402
+ if (r === "node") {
1403
+ return this.launchNodeSideCar(s);
1404
+ } else if (r === "web") {
1405
+ return this.launchWebSideCar(s);
1406
+ } else if (r === "pure") {
1407
+ return this.launchPureSideCar(s);
1408
+ } else {
1409
+ throw `unknown runtime ${r}`;
1410
+ }
1128
1411
  }
1129
1412
  mapping() {
1130
1413
  return [
@@ -1133,20 +1416,23 @@ ${addableFiles.map((x) => {
1133
1416
  ["closePage", this.closePage],
1134
1417
  ["createWriteStream", this.createWriteStream],
1135
1418
  ["customclose", this.customclose],
1136
- ["customScreenShot", this.customScreenShot],
1419
+ ["customScreenShot", this.customScreenShot.bind(this)],
1137
1420
  ["end", this.end],
1138
1421
  ["existsSync", this.existsSync],
1139
1422
  ["focusOn", this.focusOn],
1140
1423
  ["getAttribute", this.getAttribute],
1141
- ["getValue", this.getValue],
1142
- ["goto", this.goto],
1424
+ ["getInnerHtml", this.getInnerHtml],
1425
+ // ["setValue", this.setValue],
1426
+ ["goto", this.goto.bind(this)],
1143
1427
  ["isDisabled", this.isDisabled],
1428
+ ["launchSideCar", this.launchSideCar.bind(this)],
1144
1429
  ["mkdirSync", this.mkdirSync],
1145
1430
  ["newPage", this.newPage],
1146
1431
  ["page", this.page],
1147
1432
  ["pages", this.pages],
1148
1433
  ["screencast", this.screencast],
1149
1434
  ["screencastStop", this.screencastStop],
1435
+ ["stopSideCar", this.stopSideCar.bind(this)],
1150
1436
  ["typeInto", this.typeInto],
1151
1437
  ["waitForSelector", this.waitForSelector],
1152
1438
  ["write", this.write],
@@ -1157,51 +1443,57 @@ ${addableFiles.map((x) => {
1157
1443
  this.mapping().forEach(async ([command, func]) => {
1158
1444
  globalThis[command] = func;
1159
1445
  });
1160
- if (!fs2.existsSync(`testeranto/reports/${this.name}`)) {
1161
- fs2.mkdirSync(`testeranto/reports/${this.name}`);
1446
+ if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
1447
+ fs3.mkdirSync(`testeranto/reports/${this.name}`);
1162
1448
  }
1163
- this.browser = await puppeteer.launch({
1164
- slowMo: 1,
1165
- waitForInitialPage: false,
1166
- executablePath: (
1167
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
1168
- "/opt/homebrew/bin/chromium"
1169
- ),
1170
- headless: true,
1171
- dumpio: false,
1172
- devtools: false,
1173
- args: [
1174
- "--allow-file-access-from-files",
1175
- "--allow-insecure-localhost",
1176
- "--allow-running-insecure-content",
1177
- "--auto-open-devtools-for-tabs",
1178
- "--disable-dev-shm-usage",
1179
- "--disable-extensions",
1180
- "--disable-gpu",
1181
- "--disable-setuid-sandbox",
1182
- "--disable-site-isolation-trials",
1183
- "--disable-site-isolation-trials",
1184
- "--disable-web-security",
1185
- "--no-first-run",
1186
- "--no-sandbox",
1187
- "--no-startup-window",
1188
- "--reduce-security-for-testing",
1189
- "--remote-allow-origins=*",
1190
- `--remote-debugging-port=3234`,
1191
- "--unsafely-treat-insecure-origin-as-secure=*"
1192
- // "--disable-features=IsolateOrigins,site-per-process",
1193
- // "--disable-features=IsolateOrigins",
1194
- // "--disk-cache-dir=/dev/null",
1195
- // "--disk-cache-size=1",
1196
- // "--no-zygote",
1197
- // "--remote-allow-origins=ws://localhost:3234",
1198
- // "--single-process",
1199
- // "--start-maximized",
1200
- // "--unsafely-treat-insecure-origin-as-secure",
1201
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
1202
- ]
1203
- });
1204
- const { nodeEntryPoints, webEntryPoints, importEntryPoints } = this.getRunnables(this.configs.tests, this.name);
1449
+ const executablePath = "/opt/homebrew/bin/chromium";
1450
+ try {
1451
+ this.browser = await puppeteer.launch({
1452
+ slowMo: 1,
1453
+ waitForInitialPage: false,
1454
+ executablePath,
1455
+ headless: true,
1456
+ dumpio: false,
1457
+ devtools: false,
1458
+ args: [
1459
+ "--disable-features=site-per-process",
1460
+ "--allow-file-access-from-files",
1461
+ "--allow-insecure-localhost",
1462
+ "--allow-running-insecure-content",
1463
+ "--auto-open-devtools-for-tabs",
1464
+ "--disable-dev-shm-usage",
1465
+ "--disable-extensions",
1466
+ "--disable-gpu",
1467
+ "--disable-setuid-sandbox",
1468
+ "--disable-site-isolation-trials",
1469
+ "--disable-web-security",
1470
+ "--no-first-run",
1471
+ "--no-sandbox",
1472
+ "--no-startup-window",
1473
+ "--reduce-security-for-testing",
1474
+ "--remote-allow-origins=*",
1475
+ "--unsafely-treat-insecure-origin-as-secure=*",
1476
+ `--remote-debugging-port=3234`
1477
+ // "--disable-features=IsolateOrigins,site-per-process",
1478
+ // "--disable-features=IsolateOrigins",
1479
+ // "--disk-cache-dir=/dev/null",
1480
+ // "--disk-cache-size=1",
1481
+ // "--no-zygote",
1482
+ // "--remote-allow-origins=ws://localhost:3234",
1483
+ // "--single-process",
1484
+ // "--start-maximized",
1485
+ // "--unsafely-treat-insecure-origin-as-secure",
1486
+ // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
1487
+ ]
1488
+ });
1489
+ } catch (e) {
1490
+ console.error(e);
1491
+ console.error(
1492
+ "could not start chrome via puppeter. Check this path: ",
1493
+ executablePath
1494
+ );
1495
+ }
1496
+ const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
1205
1497
  [
1206
1498
  [
1207
1499
  nodeEntryPoints,
@@ -1220,7 +1512,7 @@ ${addableFiles.map((x) => {
1220
1512
  }
1221
1513
  ],
1222
1514
  [
1223
- importEntryPoints,
1515
+ pureEntryPoints,
1224
1516
  this.launchPure,
1225
1517
  "pure",
1226
1518
  (w) => {
@@ -1240,7 +1532,7 @@ ${addableFiles.map((x) => {
1240
1532
  if (fileHashes[k] !== hash) {
1241
1533
  fileHashes[k] = hash;
1242
1534
  console.log(
1243
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename}`))
1535
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
1244
1536
  );
1245
1537
  launcher(k, outputFile);
1246
1538
  }
@@ -1254,7 +1546,7 @@ ${addableFiles.map((x) => {
1254
1546
  watcher(
1255
1547
  watch(metafile, async (e, filename) => {
1256
1548
  console.log(
1257
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename} (${runtime})`))
1549
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
1258
1550
  );
1259
1551
  this.metafileOutputs(runtime);
1260
1552
  })
@@ -1262,8 +1554,10 @@ ${addableFiles.map((x) => {
1262
1554
  }
1263
1555
  );
1264
1556
  }
1557
+ async launchExternalTest(externalTestName, externalTest) {
1558
+ }
1265
1559
  async stop() {
1266
- console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
1560
+ console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
1267
1561
  this.mode = "once";
1268
1562
  this.nodeMetafileWatcher.close();
1269
1563
  this.webMetafileWatcher.close();
@@ -1272,7 +1566,7 @@ ${addableFiles.map((x) => {
1272
1566
  }
1273
1567
  async metafileOutputs(platform) {
1274
1568
  const metafile = JSON.parse(
1275
- fs2.readFileSync(
1569
+ fs3.readFileSync(
1276
1570
  `./testeranto/bundles/${platform}/${this.name}/metafile.json`
1277
1571
  ).toString()
1278
1572
  ).metafile;
@@ -1280,16 +1574,22 @@ ${addableFiles.map((x) => {
1280
1574
  return;
1281
1575
  const outputs = metafile.outputs;
1282
1576
  Object.keys(outputs).forEach(async (k) => {
1577
+ const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
1578
+ if (!k.startsWith(pattern)) {
1579
+ return false;
1580
+ }
1283
1581
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1284
- if (!fs2.existsSync(i))
1582
+ if (!fs3.existsSync(i))
1285
1583
  return false;
1286
1584
  if (i.startsWith("node_modules"))
1287
1585
  return false;
1586
+ if (i.startsWith("./node_modules"))
1587
+ return false;
1288
1588
  return true;
1289
1589
  });
1290
1590
  const f = `${k.split(".").slice(0, -1).join(".")}/`;
1291
- if (!fs2.existsSync(f)) {
1292
- fs2.mkdirSync(f);
1591
+ if (!fs3.existsSync(f)) {
1592
+ fs3.mkdirSync(f);
1293
1593
  }
1294
1594
  const entrypoint = outputs[k].entryPoint;
1295
1595
  if (entrypoint) {
@@ -1314,10 +1614,10 @@ ${addableFiles.map((x) => {
1314
1614
  readline.emitKeypressEvents(process.stdin);
1315
1615
  if (process.stdin.isTTY)
1316
1616
  process.stdin.setRawMode(true);
1317
- console.log(ansiC2.inverse("Press 'x' to shutdown forcefully."));
1617
+ console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
1318
1618
  process.stdin.on("keypress", (str, key) => {
1319
1619
  if (key.name === "x") {
1320
- console.log(ansiC2.inverse("Shutting down forcefully..."));
1620
+ console.log(ansiC3.inverse("Shutting down forcefully..."));
1321
1621
  process.exit(-1);
1322
1622
  }
1323
1623
  });