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,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,7 +458,7 @@ 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",
@@ -497,34 +500,67 @@ ${addableFiles.map((x) => {
497
500
  )}"
498
501
  `
499
502
  );
500
- this.bigBoard[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
503
+ this.summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
501
504
  this.checkForShutdown();
502
505
  };
506
+ this.typeCheckIsRunning = (src) => {
507
+ this.summary[src].typeErrors = "?";
508
+ };
509
+ this.typeCheckIsNowDone = (src, failures) => {
510
+ this.summary[src].typeErrors = failures;
511
+ this.writeBigBoard();
512
+ this.checkForShutdown();
513
+ };
514
+ this.lintIsRunning = (src) => {
515
+ this.summary[src].staticErrors = "?";
516
+ this.writeBigBoard();
517
+ };
518
+ this.lintIsNowDone = (src, failures) => {
519
+ this.summary[src].staticErrors = failures;
520
+ this.writeBigBoard();
521
+ this.checkForShutdown();
522
+ };
523
+ this.bddTestIsRunning = (src) => {
524
+ this.summary[src].runTimeError = "?";
525
+ this.writeBigBoard();
526
+ };
527
+ this.bddTestIsNowDone = (src, failures) => {
528
+ this.summary[src].runTimeError = failures;
529
+ this.writeBigBoard();
530
+ this.checkForShutdown();
531
+ };
532
+ this.writeBigBoard = () => {
533
+ fs2.writeFileSync(
534
+ `./testeranto/reports/${this.name}/summary.json`,
535
+ JSON.stringify(this.summary, null, 2)
536
+ );
537
+ };
503
538
  this.checkForShutdown = () => {
539
+ console.log(ansiC.inverse(`checkForShutdown`));
504
540
  this.writeBigBoard();
505
541
  if (this.mode === "dev")
506
542
  return;
507
543
  let inflight = false;
508
- Object.keys(this.bigBoard).forEach((k) => {
509
- if (this.bigBoard[k].prompt === "?") {
544
+ Object.keys(this.summary).forEach((k) => {
545
+ if (this.summary[k].prompt === "?") {
510
546
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
511
547
  inflight = true;
512
548
  }
513
549
  });
514
- Object.keys(this.bigBoard).forEach((k) => {
515
- if (this.bigBoard[k].runTimeError === "?") {
550
+ Object.keys(this.summary).forEach((k) => {
551
+ if (this.summary[k].runTimeError === "?") {
516
552
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
517
553
  inflight = true;
518
554
  }
519
555
  });
520
- Object.keys(this.bigBoard).forEach((k) => {
521
- if (this.bigBoard[k].staticErrors === "?") {
556
+ Object.keys(this.summary).forEach((k) => {
557
+ if (this.summary[k].staticErrors === "?") {
522
558
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
523
559
  inflight = true;
524
560
  }
525
561
  });
526
- Object.keys(this.bigBoard).forEach((k) => {
527
- if (this.bigBoard[k].typeErrors === "?") {
562
+ Object.keys(this.summary).forEach((k) => {
563
+ if (this.summary[k].typeErrors === "?") {
528
564
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
529
565
  inflight = true;
530
566
  }
@@ -537,38 +573,113 @@ ${addableFiles.map((x) => {
537
573
  });
538
574
  }
539
575
  };
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();
576
+ this.name = name;
577
+ this.mode = mode2;
578
+ this.configs.tests.forEach(([t, rt, tr, sidecars]) => {
579
+ this.summary[t] = {
580
+ runTimeError: "?",
581
+ typeErrors: "?",
582
+ staticErrors: "?",
583
+ prompt: "?",
584
+ failingFeatures: {}
585
+ };
586
+ sidecars.forEach(([t2]) => {
587
+ this.summary[t2] = {
588
+ // runTimeError: "?",
589
+ typeErrors: "?",
590
+ staticErrors: "?"
591
+ // prompt: "?",
592
+ // failingFeatures: {},
593
+ };
594
+ });
595
+ });
596
+ }
597
+ };
598
+
599
+ // src/PM/main.ts
600
+ var changes = {};
601
+ var fileHashes = {};
602
+ var files2 = {};
603
+ var screenshots2 = {};
604
+ async function fileHash(filePath, algorithm = "md5") {
605
+ return new Promise((resolve, reject) => {
606
+ const hash = crypto.createHash(algorithm);
607
+ const fileStream = fs3.createReadStream(filePath);
608
+ fileStream.on("data", (data) => {
609
+ hash.update(data);
610
+ });
611
+ fileStream.on("end", () => {
612
+ const fileHash2 = hash.digest("hex");
613
+ resolve(fileHash2);
614
+ });
615
+ fileStream.on("error", (error) => {
616
+ reject(`Error reading file: ${error.message}`);
617
+ });
618
+ });
619
+ }
620
+ var statusMessagePretty = (failures, test) => {
621
+ if (failures === 0) {
622
+ console.log(
623
+ ansiC2.green(ansiC2.inverse(`> ${test} completed successfully?!?`))
624
+ );
625
+ } else {
626
+ console.log(ansiC2.red(ansiC2.inverse(`> ${test} failed ${failures} times`)));
627
+ }
628
+ };
629
+ async function writeFileAndCreateDir(filePath, data) {
630
+ const dirPath = path4.dirname(filePath);
631
+ try {
632
+ await fs3.promises.mkdir(dirPath, { recursive: true });
633
+ await fs3.writeFileSync(filePath, data);
634
+ } catch (error) {
635
+ console.error(`Error writing file: ${error}`);
636
+ }
637
+ }
638
+ var filesHash = async (files3, algorithm = "md5") => {
639
+ return new Promise((resolve, reject) => {
640
+ resolve(
641
+ files3.reduce(async (mm, f) => {
642
+ return await mm + await fileHash(f);
643
+ }, Promise.resolve(""))
644
+ );
645
+ });
646
+ };
647
+ function isValidUrl(string) {
648
+ try {
649
+ new URL(string);
650
+ return true;
651
+ } catch (err) {
652
+ return false;
653
+ }
654
+ }
655
+ async function pollForFile(path5, timeout = 2e3) {
656
+ const intervalObj = setInterval(function() {
657
+ const file = path5;
658
+ const fileExists = fs3.existsSync(file);
659
+ if (fileExists) {
660
+ clearInterval(intervalObj);
661
+ }
662
+ }, timeout);
663
+ }
664
+ var PM_Main = class extends PM_WithEslintAndTsc {
665
+ constructor(configs, name, mode2) {
666
+ super(configs, name, mode2);
667
+ this.getRunnables = (tests, testName2, payload = {
668
+ nodeEntryPoints: {},
669
+ nodeEntryPointSidecars: {},
670
+ webEntryPoints: {},
671
+ webEntryPointSidecars: {},
672
+ pureEntryPoints: {},
673
+ pureEntryPointSidecars: {}
674
+ }) => {
675
+ return getRunnables(tests, testName2, payload);
565
676
  };
566
677
  this.launchPure = async (src, dest) => {
567
- console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
678
+ console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
568
679
  this.bddTestIsRunning(src);
569
680
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
570
- if (!fs2.existsSync(reportDest)) {
571
- fs2.mkdirSync(reportDest, { recursive: true });
681
+ if (!fs3.existsSync(reportDest)) {
682
+ fs3.mkdirSync(reportDest, { recursive: true });
572
683
  }
573
684
  const destFolder = dest.replace(".mjs", "");
574
685
  let argz = "";
@@ -576,11 +687,11 @@ ${addableFiles.map((x) => {
576
687
  return t[0] === src;
577
688
  });
578
689
  if (!testConfig) {
579
- console.log(ansiC.inverse("missing test config! Exiting ungracefully!"));
690
+ console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
580
691
  process.exit(-1);
581
692
  }
582
693
  const testConfigResource = testConfig[2];
583
- let portsToUse = [];
694
+ const portsToUse = [];
584
695
  if (testConfigResource.ports === 0) {
585
696
  argz = JSON.stringify({
586
697
  scheduled: true,
@@ -619,21 +730,20 @@ ${addableFiles.map((x) => {
619
730
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
620
731
  return module.default.then((defaultModule) => {
621
732
  defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
622
- this.receiveFeatures(results.features, destFolder, src, "pure");
623
733
  statusMessagePretty(results.fails, src);
624
734
  this.bddTestIsNowDone(src, results.fails);
625
735
  }).catch((e) => {
626
736
  console.log(
627
- ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
737
+ ansiC2.red(
738
+ ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
739
+ )
628
740
  );
629
741
  this.bddTestIsNowDone(src, -1);
630
- }).finally(() => {
631
- webSideCares.forEach((webSideCar) => webSideCar.close());
632
742
  });
633
743
  }).catch((e) => {
634
744
  console.log(
635
- ansiC.red(
636
- ansiC.inverse(
745
+ ansiC2.red(
746
+ ansiC2.inverse(
637
747
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
638
748
  )
639
749
  )
@@ -645,8 +755,8 @@ ${addableFiles.map((x) => {
645
755
  });
646
756
  } catch (e) {
647
757
  console.log(
648
- ansiC.red(
649
- ansiC.inverse(
758
+ ansiC2.red(
759
+ ansiC2.inverse(
650
760
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
651
761
  )
652
762
  )
@@ -657,38 +767,39 @@ ${addableFiles.map((x) => {
657
767
  }
658
768
  for (let i = 0; i <= portsToUse.length; i++) {
659
769
  if (portsToUse[i]) {
660
- this.ports[portsToUse[i]] = "true";
770
+ this.ports[portsToUse[i]] = true;
661
771
  }
662
772
  }
663
773
  };
664
774
  this.launchNode = async (src, dest) => {
665
- console.log(ansiC.green(ansiC.inverse(`! node, ${src}`)));
775
+ console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
666
776
  this.bddTestIsRunning(src);
667
777
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
668
- if (!fs2.existsSync(reportDest)) {
669
- fs2.mkdirSync(reportDest, { recursive: true });
778
+ if (!fs3.existsSync(reportDest)) {
779
+ fs3.mkdirSync(reportDest, { recursive: true });
670
780
  }
671
- const destFolder = dest.replace(".mjs", "");
672
781
  let testResources = "";
673
782
  const testConfig = this.configs.tests.find((t) => {
674
783
  return t[0] === src;
675
784
  });
676
785
  if (!testConfig) {
677
786
  console.log(
678
- ansiC.inverse(`missing test config! Exiting ungracefully for '${src}'`)
787
+ ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
679
788
  );
680
789
  process.exit(-1);
681
790
  }
682
791
  const testConfigResource = testConfig[2];
683
- let portsToUse = [];
792
+ const portsToUse = [];
684
793
  if (testConfigResource.ports === 0) {
685
- testResources = JSON.stringify({
686
- scheduled: true,
794
+ console.error("portsToUse?!", []);
795
+ const t = {
687
796
  name: src,
688
- ports: portsToUse,
797
+ // ports: portsToUse.map((v) => Number(v)),
798
+ ports: [],
689
799
  fs: reportDest,
690
800
  browserWSEndpoint: this.browser.wsEndpoint()
691
- });
801
+ };
802
+ testResources = JSON.stringify(t);
692
803
  } else if (testConfigResource.ports > 0) {
693
804
  const openPorts = Object.entries(this.ports).filter(
694
805
  ([portnumber, portopen]) => portopen
@@ -698,14 +809,16 @@ ${addableFiles.map((x) => {
698
809
  portsToUse.push(openPorts[i][0]);
699
810
  this.ports[openPorts[i][0]] = false;
700
811
  }
812
+ console.error("portsToUse", portsToUse);
701
813
  testResources = JSON.stringify({
702
814
  scheduled: true,
703
815
  name: src,
704
816
  ports: portsToUse,
705
- fs: destFolder,
817
+ fs: reportDest,
706
818
  browserWSEndpoint: this.browser.wsEndpoint()
707
819
  });
708
820
  } else {
821
+ console.log("Not enough ports! Enqueuing test job...");
709
822
  this.queue.push(src);
710
823
  return;
711
824
  }
@@ -715,67 +828,61 @@ ${addableFiles.map((x) => {
715
828
  }
716
829
  const builtfile = dest;
717
830
  let haltReturns = false;
831
+ const ipcfile = "/tmp/tpipe_" + Math.random();
832
+ const child = spawn("node", [builtfile, testResources, ipcfile], {
833
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
834
+ });
718
835
  let buffer = new Buffer("");
719
836
  const server = net.createServer((socket) => {
837
+ const queue = new Queue();
720
838
  socket.on("data", (data) => {
721
839
  buffer = Buffer.concat([buffer, data]);
722
- let messages = [];
723
840
  for (let b = 0; b < buffer.length + 1; b++) {
724
- let c = buffer.slice(0, b);
841
+ const c = buffer.slice(0, b);
725
842
  let d;
726
843
  try {
727
844
  d = JSON.parse(c.toString());
728
- messages.push(d);
845
+ queue.enqueue(d);
729
846
  buffer = buffer.slice(b, buffer.length + 1);
730
847
  b = 0;
731
848
  } catch (e) {
732
849
  }
733
850
  }
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
- );
851
+ while (queue.size() > 0) {
852
+ const message = queue.dequeue();
853
+ if (message) {
854
+ this.mapping().forEach(async ([command, func]) => {
855
+ if (message[0] === command) {
856
+ const x = message.slice(1, -1);
857
+ const r = await this[command](...x);
858
+ if (!haltReturns) {
859
+ child.send(
860
+ JSON.stringify({
861
+ payload: r,
862
+ key: message[message.length - 1]
863
+ })
864
+ );
865
+ }
746
866
  }
747
- }
748
- });
749
- });
867
+ });
868
+ }
869
+ }
750
870
  });
751
871
  });
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";
872
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
762
873
  const errFile = `${reportDest}/error.txt`;
763
- if (fs2.existsSync(errFile)) {
764
- fs2.rmSync(errFile);
874
+ if (fs3.existsSync(errFile)) {
875
+ fs3.rmSync(errFile);
765
876
  }
766
- server.listen(p, () => {
877
+ server.listen(ipcfile, () => {
767
878
  child.stderr?.on("data", (data) => {
768
- oStream.write(`stderr data ${data}`);
879
+ oStream.write(`stderr > ${data}`);
769
880
  });
770
881
  child.stdout?.on("data", (data) => {
771
- oStream.write(`stdout data ${data}`);
882
+ oStream.write(`stdout > ${data}`);
772
883
  });
773
884
  child.on("close", (code) => {
774
885
  console.log("close");
775
- console.log("deleting", p);
776
- if (fs2.existsSync(p)) {
777
- fs2.rmSync(p);
778
- }
779
886
  oStream.close();
780
887
  server.close();
781
888
  if (code === null) {
@@ -792,22 +899,20 @@ ${addableFiles.map((x) => {
792
899
  });
793
900
  child.on("exit", (code) => {
794
901
  console.log("exit");
795
- console.log("deleting", p);
796
- if (fs2.existsSync(p)) {
797
- fs2.rmSync(p);
798
- }
799
902
  haltReturns = true;
903
+ for (let i = 0; i <= portsToUse.length; i++) {
904
+ if (portsToUse[i]) {
905
+ this.ports[portsToUse[i]] = true;
906
+ }
907
+ }
908
+ console.log("exitthis.ports", this.ports);
800
909
  });
801
910
  child.on("error", (e) => {
802
911
  console.log("error");
803
- console.log("deleting", p);
804
- if (fs2.existsSync(p)) {
805
- fs2.rmSync(p);
806
- }
807
912
  haltReturns = true;
808
913
  console.log(
809
- ansiC.red(
810
- ansiC.inverse(
914
+ ansiC2.red(
915
+ ansiC2.inverse(
811
916
  `${src} errored with: ${e.name}. Check ${errFile}for more info`
812
917
  )
813
918
  )
@@ -817,121 +922,241 @@ ${addableFiles.map((x) => {
817
922
  statusMessagePretty(-1, src);
818
923
  });
819
924
  });
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
925
  };
827
- this.launchWebSideCar = async (src, dest, testConfig) => {
828
- const d = dest + ".mjs";
829
- console.log(ansiC.green(ansiC.inverse(`launchWebSideCar ${src}`)));
926
+ this.launchWebSideCar = async (testConfig) => {
927
+ const src = testConfig[0];
928
+ const dest = src.split(".").slice(0, -1).join(".");
929
+ const destFolder = dest.replace(".mjs", "");
930
+ console.log(ansiC2.green(ansiC2.inverse(`launchWebSideCar ${src}`)));
830
931
  const fileStreams2 = [];
831
932
  const doneFileStream2 = [];
933
+ const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
832
934
  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);
935
+ this.browser.newPage().then(async (page) => {
936
+ this.mapping().forEach(async ([command, func]) => {
937
+ page.exposeFunction(command, func);
876
938
  });
877
- page.exposeFunction("mkdirSync", (fp) => {
878
- if (!fs2.existsSync(fp)) {
879
- return fs2.mkdirSync(fp, {
880
- recursive: true
881
- });
939
+ const close = () => {
940
+ if (!files2[src]) {
941
+ files2[src] = /* @__PURE__ */ new Set();
882
942
  }
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
- };
943
+ fs3.writeFileSync(
944
+ destFolder + "/manifest.json",
945
+ JSON.stringify(Array.from(files2[src]))
946
+ );
947
+ delete files2[src];
948
+ Promise.all(screenshots2[src] || []).then(() => {
949
+ delete screenshots2[src];
950
+ page.close();
951
+ oStream.close();
952
+ });
953
+ };
954
+ page.on("pageerror", (err) => {
955
+ console.debug(`Error from ${src}: [${err.name}] `);
956
+ oStream.write(err.name);
957
+ oStream.write("\n");
958
+ if (err.cause) {
959
+ console.debug(`Error from ${src} cause: [${err.cause}] `);
960
+ oStream.write(err.cause);
961
+ oStream.write("\n");
902
962
  }
903
- );
904
- page.exposeFunction(
905
- "write",
906
- async (uid, contents) => {
907
- return fileStreams2[uid].write(contents);
963
+ if (err.stack) {
964
+ console.debug(`Error from stack ${src}: [${err.stack}] `);
965
+ oStream.write(err.stack);
966
+ oStream.write("\n");
908
967
  }
909
- );
910
- page.exposeFunction("end", async (uid) => {
911
- return fileStreams2[uid].end();
968
+ console.debug(`Error from message ${src}: [${err.message}] `);
969
+ oStream.write(err.message);
970
+ oStream.write("\n");
971
+ this.bddTestIsNowDone(src, -1);
972
+ close();
973
+ });
974
+ page.on("console", (log) => {
975
+ oStream.write(log.text());
976
+ oStream.write(JSON.stringify(log.location()));
977
+ oStream.write(JSON.stringify(log.stackTrace()));
978
+ oStream.write("\n");
979
+ });
980
+ await page.goto(`file://${`${destFolder}.html`}`, {});
981
+ const webArgz = JSON.stringify({
982
+ name: dest,
983
+ ports: [].toString(),
984
+ fs: dest,
985
+ browserWSEndpoint: this.browser.wsEndpoint()
986
+ });
987
+ const d = `${dest}?cacheBust=${Date.now()}`;
988
+ const evaluation = `
989
+ import('${d}').then(async (x) => {
990
+
991
+ try {
992
+ return await (await x.default).receiveTestResourceConfig(${webArgz})
993
+ } catch (e) {
994
+ console.log("fail", e.toString())
995
+ }
996
+ })`;
997
+ await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
998
+ statusMessagePretty(fails, src);
999
+ this.bddTestIsNowDone(src, fails);
1000
+ }).catch((e) => {
1001
+ console.log(
1002
+ ansiC2.red(
1003
+ ansiC2.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
1004
+ )
1005
+ );
1006
+ }).finally(() => {
1007
+ this.bddTestIsNowDone(src, -1);
1008
+ close();
912
1009
  });
913
1010
  return page;
914
1011
  }).then(async (page) => {
915
1012
  await page.goto(`file://${`${dest}.html`}`, {});
916
- res(page);
1013
+ res([Math.random(), page]);
917
1014
  });
918
1015
  });
919
1016
  };
920
- this.launchNodeSideCar = async (src, dest, testConfig) => {
1017
+ this.launchNodeSideCar = async (sidecar) => {
1018
+ const src = sidecar[0];
1019
+ const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
921
1020
  const d = dest + ".mjs";
922
- console.log(ansiC.green(ansiC.inverse(`launchNodeSideCar ${src}`)));
1021
+ console.log(ansiC2.green(ansiC2.inverse(`launchNodeSideCar ${sidecar[0]}`)));
1022
+ const destFolder = dest.replace(".ts", "");
1023
+ const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
1024
+ const argz = {
1025
+ name: sidecar[0],
1026
+ ports: [],
1027
+ fs: destFolder,
1028
+ browserWSEndpoint: this.browser.wsEndpoint()
1029
+ };
1030
+ const testReq = sidecar[2];
1031
+ const portsToUse = [];
1032
+ if (testReq.ports === 0) {
1033
+ } else if (testReq.ports > 0) {
1034
+ const openPorts = Object.entries(this.ports).filter(
1035
+ ([portnumber, portopen]) => portopen
1036
+ );
1037
+ if (openPorts.length >= testReq.ports) {
1038
+ for (let i = 0; i < testReq.ports; i++) {
1039
+ portsToUse.push(openPorts[i][0]);
1040
+ this.ports[openPorts[i][0]] = false;
1041
+ }
1042
+ console.log("nodeSideCar portsToUse", portsToUse);
1043
+ argz.ports = portsToUse;
1044
+ const builtfile = destFolder + ".mjs";
1045
+ let haltReturns = false;
1046
+ let buffer = new Buffer("");
1047
+ const server = net.createServer((socket) => {
1048
+ socket.on("data", (data) => {
1049
+ buffer = Buffer.concat([buffer, data]);
1050
+ const messages = [];
1051
+ for (let b = 0; b < buffer.length + 1; b++) {
1052
+ const c = buffer.slice(0, b);
1053
+ let d2;
1054
+ try {
1055
+ d2 = JSON.parse(c.toString());
1056
+ messages.push(d2);
1057
+ buffer = buffer.slice(b, buffer.length + 1);
1058
+ b = 0;
1059
+ } catch (e) {
1060
+ }
1061
+ }
1062
+ messages.forEach(async (payload) => {
1063
+ this.mapping().forEach(async ([command, func]) => {
1064
+ if (payload[0] === command) {
1065
+ const x = payload.slice(1, -1);
1066
+ const r2 = await this[command](...x);
1067
+ if (!haltReturns) {
1068
+ child.send(
1069
+ JSON.stringify({
1070
+ payload: r2,
1071
+ key: payload[payload.length - 1]
1072
+ })
1073
+ );
1074
+ }
1075
+ }
1076
+ });
1077
+ });
1078
+ });
1079
+ });
1080
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
1081
+ const child = spawn("node", [builtfile, JSON.stringify(argz)], {
1082
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
1083
+ // silent: true
1084
+ });
1085
+ const p = "/tmp/tpipe" + Math.random();
1086
+ const errFile = `${reportDest}/error.txt`;
1087
+ server.listen(p, () => {
1088
+ child.stderr?.on("data", (data) => {
1089
+ oStream.write(`stderr > ${data}`);
1090
+ });
1091
+ child.stdout?.on("data", (data) => {
1092
+ oStream.write(`stdout > ${data}`);
1093
+ });
1094
+ child.on("close", (code) => {
1095
+ oStream.close();
1096
+ server.close();
1097
+ haltReturns = true;
1098
+ });
1099
+ child.on("exit", (code) => {
1100
+ haltReturns = true;
1101
+ for (let i = 0; i <= portsToUse.length; i++) {
1102
+ if (portsToUse[i]) {
1103
+ this.ports[portsToUse[i]] = true;
1104
+ }
1105
+ }
1106
+ });
1107
+ child.on("error", (e) => {
1108
+ if (fs3.existsSync(p)) {
1109
+ fs3.rmSync(p);
1110
+ }
1111
+ haltReturns = true;
1112
+ console.log(
1113
+ ansiC2.red(
1114
+ ansiC2.inverse(
1115
+ `launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
1116
+ )
1117
+ )
1118
+ );
1119
+ this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
1120
+ });
1121
+ });
1122
+ child.send({ path: p });
1123
+ const r = Math.random();
1124
+ this.nodeSidecars[r] = child;
1125
+ return [r, argz];
1126
+ } else {
1127
+ console.log("Not enough open ports!", openPorts, testReq.ports);
1128
+ this.queue.push(sidecar[0]);
1129
+ return [Math.random(), argz];
1130
+ }
1131
+ } else {
1132
+ console.error("negative port makes no sense", sidecar[0]);
1133
+ process.exit(-1);
1134
+ }
1135
+ };
1136
+ this.stopPureSideCar = async (uid) => {
1137
+ console.log(ansiC2.green(ansiC2.inverse(`stopPureSideCar ${uid}`)));
1138
+ await this.sidecars[uid].shutdown();
1139
+ return;
1140
+ };
1141
+ this.launchPureSideCar = async (sidecar) => {
1142
+ console.log(ansiC2.green(ansiC2.inverse(`launchPureSideCar ${sidecar[0]}`)));
1143
+ const r = Math.random();
1144
+ const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
1145
+ const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
923
1146
  const destFolder = dest.replace(".mjs", "");
924
- let argz = "";
925
- const testConfigResource = testConfig[2];
926
- let portsToUse = [];
1147
+ let argz;
1148
+ const z = sidecar[2];
1149
+ const testConfigResource = sidecar[2];
1150
+ const src = sidecar[0];
1151
+ const portsToUse = [];
927
1152
  if (testConfigResource.ports === 0) {
928
- argz = JSON.stringify({
929
- scheduled: true,
1153
+ argz = {
1154
+ // scheduled: true,
930
1155
  name: src,
931
1156
  ports: portsToUse,
932
1157
  fs: destFolder,
933
1158
  browserWSEndpoint: this.browser.wsEndpoint()
934
- });
1159
+ };
935
1160
  } else if (testConfigResource.ports > 0) {
936
1161
  const openPorts = Object.entries(this.ports).filter(
937
1162
  ([portnumber, portopen]) => portopen
@@ -941,14 +1166,14 @@ ${addableFiles.map((x) => {
941
1166
  portsToUse.push(openPorts[i][0]);
942
1167
  this.ports[openPorts[i][0]] = false;
943
1168
  }
944
- argz = JSON.stringify({
945
- scheduled: true,
1169
+ argz = {
1170
+ // scheduled: true,
946
1171
  name: src,
947
1172
  // ports: [3333],
948
1173
  ports: portsToUse,
949
1174
  fs: ".",
950
1175
  browserWSEndpoint: this.browser.wsEndpoint()
951
- });
1176
+ };
952
1177
  } else {
953
1178
  this.queue.push(src);
954
1179
  return;
@@ -957,29 +1182,22 @@ ${addableFiles.map((x) => {
957
1182
  console.error("negative port makes no sense", src);
958
1183
  process.exit(-1);
959
1184
  }
960
- const builtfile = dest + ".mjs";
961
1185
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
962
- return module.default.then((defaultModule) => {
963
- const s = new defaultModule();
964
- s.receiveTestResourceConfig(argz);
965
- });
1186
+ this.pureSidecars[r] = module.default;
1187
+ this.pureSidecars[r].start(argz);
966
1188
  });
967
- for (let i = 0; i <= portsToUse.length; i++) {
968
- if (portsToUse[i]) {
969
- this.ports[portsToUse[i]] = "true";
970
- }
971
- }
1189
+ return [r, argz];
972
1190
  };
973
1191
  this.launchWeb = async (src, dest) => {
974
- console.log(ansiC.green(ansiC.inverse(`! web ${src}`)));
1192
+ console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
975
1193
  this.bddTestIsRunning(src);
976
1194
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
977
- if (!fs2.existsSync(reportDest)) {
978
- fs2.mkdirSync(reportDest, { recursive: true });
1195
+ if (!fs3.existsSync(reportDest)) {
1196
+ fs3.mkdirSync(reportDest, { recursive: true });
979
1197
  }
980
1198
  const destFolder = dest.replace(".mjs", "");
981
1199
  const webArgz = JSON.stringify({
982
- name: dest,
1200
+ name: src,
983
1201
  ports: [].toString(),
984
1202
  fs: reportDest,
985
1203
  browserWSEndpoint: this.browser.wsEndpoint()
@@ -995,10 +1213,20 @@ ${addableFiles.map((x) => {
995
1213
  console.log("fail", e)
996
1214
  }
997
1215
  })`;
998
- const oStream = fs2.createWriteStream(`${reportDest}/console_log.txt`);
1216
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
999
1217
  this.browser.newPage().then((page) => {
1000
1218
  this.mapping().forEach(async ([command, func]) => {
1001
- page.exposeFunction(command, func);
1219
+ if (command === "page") {
1220
+ page.exposeFunction(command, (x) => {
1221
+ if (x) {
1222
+ return func(x);
1223
+ } else {
1224
+ return func(page.mainFrame()._id);
1225
+ }
1226
+ });
1227
+ } else {
1228
+ return page.exposeFunction(command, func);
1229
+ }
1002
1230
  });
1003
1231
  return page;
1004
1232
  }).then(async (page) => {
@@ -1006,7 +1234,7 @@ ${addableFiles.map((x) => {
1006
1234
  if (!files2[src]) {
1007
1235
  files2[src] = /* @__PURE__ */ new Set();
1008
1236
  }
1009
- fs2.writeFileSync(
1237
+ fs3.writeFileSync(
1010
1238
  destFolder + "/manifest.json",
1011
1239
  JSON.stringify(Array.from(files2[src]))
1012
1240
  );
@@ -1039,17 +1267,21 @@ ${addableFiles.map((x) => {
1039
1267
  });
1040
1268
  page.on("console", (log) => {
1041
1269
  oStream.write(log.text());
1270
+ oStream.write("\n");
1042
1271
  oStream.write(JSON.stringify(log.location()));
1272
+ oStream.write("\n");
1043
1273
  oStream.write(JSON.stringify(log.stackTrace()));
1044
1274
  oStream.write("\n");
1045
1275
  });
1046
1276
  await page.goto(`file://${`${destFolder}.html`}`, {});
1277
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1047
1278
  await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
1048
- this.receiveFeatures(features, destFolder, src, "web");
1049
1279
  statusMessagePretty(fails, src);
1050
1280
  this.bddTestIsNowDone(src, fails);
1051
1281
  }).catch((e) => {
1052
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1282
+ console.log(
1283
+ ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
1284
+ );
1053
1285
  }).finally(() => {
1054
1286
  this.bddTestIsNowDone(src, -1);
1055
1287
  close();
@@ -1057,74 +1289,106 @@ ${addableFiles.map((x) => {
1057
1289
  return page;
1058
1290
  });
1059
1291
  };
1060
- this.receiveFeatures = (features, destFolder, srcTest, platform) => {
1061
- const featureDestination = path3.resolve(
1292
+ this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
1293
+ const featureDestination = path4.resolve(
1062
1294
  process.cwd(),
1063
1295
  "reports",
1064
1296
  "features",
1065
1297
  "strings",
1066
1298
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1067
1299
  );
1068
- features.reduce(async (mm, featureStringKey) => {
1300
+ const testReport = JSON.parse(
1301
+ fs3.readFileSync(`${reportDest}/tests.json`).toString()
1302
+ );
1303
+ testReport.features.reduce(async (mm, featureStringKey) => {
1069
1304
  const accum = await mm;
1070
1305
  const isUrl = isValidUrl(featureStringKey);
1071
1306
  if (isUrl) {
1072
1307
  const u = new URL(featureStringKey);
1073
1308
  if (u.protocol === "file:") {
1074
- const newPath = `${process.cwd()}/testeranto/features/internal/${path3.relative(
1309
+ const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
1075
1310
  process.cwd(),
1076
1311
  u.pathname
1077
1312
  )}`;
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);
1313
+ accum.files.push(u.pathname);
1086
1314
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1087
- const newPath = `${process.cwd()}/testeranto/features/external${u.hostname}${u.pathname}`;
1315
+ const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
1088
1316
  const body = await this.configs.featureIngestor(featureStringKey);
1089
1317
  writeFileAndCreateDir(newPath, body);
1090
1318
  accum.files.push(newPath);
1091
1319
  }
1092
1320
  } else {
1093
- await fs2.promises.mkdir(path3.dirname(featureDestination), {
1321
+ await fs3.promises.mkdir(path4.dirname(featureDestination), {
1094
1322
  recursive: true
1095
1323
  });
1096
1324
  accum.strings.push(featureStringKey);
1097
1325
  }
1098
1326
  return accum;
1099
1327
  }, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
1100
- fs2.writeFileSync(
1328
+ fs3.writeFileSync(
1101
1329
  `testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
1102
1330
  files3.map((f) => {
1103
1331
  return `/read ${f}`;
1104
1332
  }).join("\n")
1105
1333
  );
1106
1334
  });
1335
+ testReport.givens.forEach((g) => {
1336
+ if (g.failed === true) {
1337
+ this.summary[srcTest].failingFeatures[g.key] = g.features;
1338
+ }
1339
+ });
1340
+ this.writeBigBoard();
1107
1341
  };
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
1342
  this.ports = {};
1117
- this.configs.tests.forEach(([t]) => {
1118
- this.bigBoard[t] = {
1119
- runTimeError: "?",
1120
- typeErrors: "?",
1121
- staticErrors: "?",
1122
- prompt: "?"
1123
- };
1124
- });
1343
+ this.queue = [];
1344
+ this.nodeSidecars = {};
1345
+ this.webSidecars = {};
1346
+ this.pureSidecars = {};
1125
1347
  this.configs.ports.forEach((element) => {
1126
- this.ports[element] = "true";
1348
+ this.ports[element] = true;
1349
+ });
1350
+ }
1351
+ async stopSideCar(uid) {
1352
+ console.log(ansiC2.green(ansiC2.inverse(`stopSideCar ${uid}`)));
1353
+ Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
1354
+ if (Number(k) === uid) {
1355
+ await this.pureSidecars[Number(k)].stop();
1356
+ delete this.pureSidecars[Number(k)];
1357
+ }
1358
+ });
1359
+ Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
1360
+ if (Number(k) === uid) {
1361
+ await this.nodeSidecars[Number(k)].send("stop");
1362
+ delete this.nodeSidecars[Number(k)];
1363
+ }
1364
+ });
1365
+ Object.entries(this.webSidecars).forEach(async ([k, v]) => {
1366
+ if (Number(k) === uid) {
1367
+ (await this.browser.pages()).forEach(async (p) => {
1368
+ if (p.mainFrame()._id === k) {
1369
+ await this.webSidecars[Number(k)].close();
1370
+ delete this.webSidecars[Number(k)];
1371
+ }
1372
+ });
1373
+ }
1374
+ });
1375
+ return;
1376
+ }
1377
+ async launchSideCar(n, name) {
1378
+ const c = this.configs.tests.find(([v, r2]) => {
1379
+ return v === name;
1127
1380
  });
1381
+ const s = c[3][n];
1382
+ const r = s[1];
1383
+ if (r === "node") {
1384
+ return this.launchNodeSideCar(s);
1385
+ } else if (r === "web") {
1386
+ return this.launchWebSideCar(s);
1387
+ } else if (r === "pure") {
1388
+ return this.launchPureSideCar(s);
1389
+ } else {
1390
+ throw `unknown runtime ${r}`;
1391
+ }
1128
1392
  }
1129
1393
  mapping() {
1130
1394
  return [
@@ -1133,20 +1397,23 @@ ${addableFiles.map((x) => {
1133
1397
  ["closePage", this.closePage],
1134
1398
  ["createWriteStream", this.createWriteStream],
1135
1399
  ["customclose", this.customclose],
1136
- ["customScreenShot", this.customScreenShot],
1400
+ ["customScreenShot", this.customScreenShot.bind(this)],
1137
1401
  ["end", this.end],
1138
1402
  ["existsSync", this.existsSync],
1139
1403
  ["focusOn", this.focusOn],
1140
1404
  ["getAttribute", this.getAttribute],
1141
- ["getValue", this.getValue],
1142
- ["goto", this.goto],
1405
+ ["getInnerHtml", this.getInnerHtml],
1406
+ // ["setValue", this.setValue],
1407
+ ["goto", this.goto.bind(this)],
1143
1408
  ["isDisabled", this.isDisabled],
1409
+ ["launchSideCar", this.launchSideCar.bind(this)],
1144
1410
  ["mkdirSync", this.mkdirSync],
1145
1411
  ["newPage", this.newPage],
1146
1412
  ["page", this.page],
1147
1413
  ["pages", this.pages],
1148
1414
  ["screencast", this.screencast],
1149
1415
  ["screencastStop", this.screencastStop],
1416
+ ["stopSideCar", this.stopSideCar.bind(this)],
1150
1417
  ["typeInto", this.typeInto],
1151
1418
  ["waitForSelector", this.waitForSelector],
1152
1419
  ["write", this.write],
@@ -1157,51 +1424,57 @@ ${addableFiles.map((x) => {
1157
1424
  this.mapping().forEach(async ([command, func]) => {
1158
1425
  globalThis[command] = func;
1159
1426
  });
1160
- if (!fs2.existsSync(`testeranto/reports/${this.name}`)) {
1161
- fs2.mkdirSync(`testeranto/reports/${this.name}`);
1427
+ if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
1428
+ fs3.mkdirSync(`testeranto/reports/${this.name}`);
1162
1429
  }
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);
1430
+ const executablePath = "/opt/homebrew/bin/chromium";
1431
+ try {
1432
+ this.browser = await puppeteer.launch({
1433
+ slowMo: 1,
1434
+ waitForInitialPage: false,
1435
+ executablePath,
1436
+ headless: false,
1437
+ dumpio: false,
1438
+ devtools: false,
1439
+ args: [
1440
+ "--disable-features=site-per-process",
1441
+ "--allow-file-access-from-files",
1442
+ "--allow-insecure-localhost",
1443
+ "--allow-running-insecure-content",
1444
+ "--auto-open-devtools-for-tabs",
1445
+ "--disable-dev-shm-usage",
1446
+ "--disable-extensions",
1447
+ "--disable-gpu",
1448
+ "--disable-setuid-sandbox",
1449
+ "--disable-site-isolation-trials",
1450
+ "--disable-web-security",
1451
+ "--no-first-run",
1452
+ "--no-sandbox",
1453
+ "--no-startup-window",
1454
+ "--reduce-security-for-testing",
1455
+ "--remote-allow-origins=*",
1456
+ "--unsafely-treat-insecure-origin-as-secure=*",
1457
+ `--remote-debugging-port=3234`
1458
+ // "--disable-features=IsolateOrigins,site-per-process",
1459
+ // "--disable-features=IsolateOrigins",
1460
+ // "--disk-cache-dir=/dev/null",
1461
+ // "--disk-cache-size=1",
1462
+ // "--no-zygote",
1463
+ // "--remote-allow-origins=ws://localhost:3234",
1464
+ // "--single-process",
1465
+ // "--start-maximized",
1466
+ // "--unsafely-treat-insecure-origin-as-secure",
1467
+ // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
1468
+ ]
1469
+ });
1470
+ } catch (e) {
1471
+ console.error(e);
1472
+ console.error(
1473
+ "could not start chrome via puppeter. Check this path: ",
1474
+ executablePath
1475
+ );
1476
+ }
1477
+ const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
1205
1478
  [
1206
1479
  [
1207
1480
  nodeEntryPoints,
@@ -1220,7 +1493,7 @@ ${addableFiles.map((x) => {
1220
1493
  }
1221
1494
  ],
1222
1495
  [
1223
- importEntryPoints,
1496
+ pureEntryPoints,
1224
1497
  this.launchPure,
1225
1498
  "pure",
1226
1499
  (w) => {
@@ -1240,7 +1513,7 @@ ${addableFiles.map((x) => {
1240
1513
  if (fileHashes[k] !== hash) {
1241
1514
  fileHashes[k] = hash;
1242
1515
  console.log(
1243
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename}`))
1516
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
1244
1517
  );
1245
1518
  launcher(k, outputFile);
1246
1519
  }
@@ -1254,7 +1527,7 @@ ${addableFiles.map((x) => {
1254
1527
  watcher(
1255
1528
  watch(metafile, async (e, filename) => {
1256
1529
  console.log(
1257
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename} (${runtime})`))
1530
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
1258
1531
  );
1259
1532
  this.metafileOutputs(runtime);
1260
1533
  })
@@ -1262,8 +1535,10 @@ ${addableFiles.map((x) => {
1262
1535
  }
1263
1536
  );
1264
1537
  }
1538
+ async launchExternalTest(externalTestName, externalTest) {
1539
+ }
1265
1540
  async stop() {
1266
- console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
1541
+ console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
1267
1542
  this.mode = "once";
1268
1543
  this.nodeMetafileWatcher.close();
1269
1544
  this.webMetafileWatcher.close();
@@ -1272,7 +1547,7 @@ ${addableFiles.map((x) => {
1272
1547
  }
1273
1548
  async metafileOutputs(platform) {
1274
1549
  const metafile = JSON.parse(
1275
- fs2.readFileSync(
1550
+ fs3.readFileSync(
1276
1551
  `./testeranto/bundles/${platform}/${this.name}/metafile.json`
1277
1552
  ).toString()
1278
1553
  ).metafile;
@@ -1280,16 +1555,22 @@ ${addableFiles.map((x) => {
1280
1555
  return;
1281
1556
  const outputs = metafile.outputs;
1282
1557
  Object.keys(outputs).forEach(async (k) => {
1558
+ const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
1559
+ if (!k.startsWith(pattern)) {
1560
+ return false;
1561
+ }
1283
1562
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1284
- if (!fs2.existsSync(i))
1563
+ if (!fs3.existsSync(i))
1285
1564
  return false;
1286
1565
  if (i.startsWith("node_modules"))
1287
1566
  return false;
1567
+ if (i.startsWith("./node_modules"))
1568
+ return false;
1288
1569
  return true;
1289
1570
  });
1290
1571
  const f = `${k.split(".").slice(0, -1).join(".")}/`;
1291
- if (!fs2.existsSync(f)) {
1292
- fs2.mkdirSync(f);
1572
+ if (!fs3.existsSync(f)) {
1573
+ fs3.mkdirSync(f);
1293
1574
  }
1294
1575
  const entrypoint = outputs[k].entryPoint;
1295
1576
  if (entrypoint) {
@@ -1314,10 +1595,10 @@ ${addableFiles.map((x) => {
1314
1595
  readline.emitKeypressEvents(process.stdin);
1315
1596
  if (process.stdin.isTTY)
1316
1597
  process.stdin.setRawMode(true);
1317
- console.log(ansiC2.inverse("Press 'x' to shutdown forcefully."));
1598
+ console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
1318
1599
  process.stdin.on("keypress", (str, key) => {
1319
1600
  if (key.name === "x") {
1320
- console.log(ansiC2.inverse("Shutting down forcefully..."));
1601
+ console.log(ansiC3.inverse("Shutting down forcefully..."));
1321
1602
  process.exit(-1);
1322
1603
  }
1323
1604
  });