testeranto 0.128.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 +560 -19
  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 +488 -422
  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 +489 -423
  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 +696 -404
  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 +617 -578
  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,91 +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(ansiC.green(ansiC.inverse(`> ${test} completed successfully`)));
342
- } else {
343
- console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
344
- }
345
- };
346
- async function writeFileAndCreateDir(filePath, data) {
347
- const dirPath = path3.dirname(filePath);
348
- try {
349
- await fs2.promises.mkdir(dirPath, { recursive: true });
350
- await fs2.appendFileSync(filePath, data);
351
- } catch (error) {
352
- console.error(`Error writing file: ${error}`);
353
- }
354
- }
355
- var filesHash = async (files3, algorithm = "md5") => {
356
- return new Promise((resolve, reject) => {
357
- resolve(
358
- files3.reduce(async (mm, f) => {
359
- return await mm + await fileHash(f);
360
- }, Promise.resolve(""))
361
- );
362
- });
363
- };
364
- function isValidUrl(string) {
365
- try {
366
- new URL(string);
367
- return true;
368
- } catch (err) {
369
- return false;
370
- }
371
- }
372
- function pollForFile(path4, timeout = 2e3) {
373
- const intervalObj = setInterval(function() {
374
- const file = path4;
375
- const fileExists = fs2.existsSync(file);
376
- if (fileExists) {
377
- clearInterval(intervalObj);
378
- }
379
- }, timeout);
380
- }
381
- var PM_Main = class extends PM_Base {
393
+ var PM_WithEslintAndTsc = class extends PM_Base {
382
394
  constructor(configs, name, mode2) {
383
395
  super(configs);
384
- this.bigBoard = {};
385
- this.getRunnables = (tests, testName2, payload = {
386
- nodeEntryPoints: {},
387
- webEntryPoints: {},
388
- importEntryPoints: {}
389
- }) => {
390
- return getRunnables(tests, testName2, payload);
391
- };
396
+ this.summary = {};
392
397
  this.tscCheck = async ({
393
398
  entrypoint,
394
399
  addableFiles,
@@ -413,15 +418,15 @@ var PM_Main = class extends PM_Base {
413
418
  // exclude: ["**/*.test.ts", "**/*.spec.ts"],
414
419
  });
415
420
  const tscPath = tscPather(entrypoint, platform, this.name);
416
- let allDiagnostics = program.getSemanticDiagnostics();
421
+ const allDiagnostics = program.getSemanticDiagnostics();
417
422
  const results = [];
418
423
  allDiagnostics.forEach((diagnostic) => {
419
424
  if (diagnostic.file) {
420
- let { line, character } = ts.getLineAndCharacterOfPosition(
425
+ const { line, character } = ts.getLineAndCharacterOfPosition(
421
426
  diagnostic.file,
422
427
  diagnostic.start
423
428
  );
424
- let message = ts.flattenDiagnosticMessageText(
429
+ const message = ts.flattenDiagnosticMessageText(
425
430
  diagnostic.messageText,
426
431
  "\n"
427
432
  );
@@ -453,7 +458,7 @@ var PM_Main = class extends PM_Base {
453
458
  this.lintIsNowDone(entrypoint, results.length);
454
459
  };
455
460
  this.makePrompt = async (entryPoint, addableFiles, platform) => {
456
- this.bigBoard[entryPoint].prompt = "?";
461
+ this.summary[entryPoint].prompt = "?";
457
462
  const promptPath = promptPather(entryPoint, platform, this.name);
458
463
  const testPaths = path3.join(
459
464
  "testeranto",
@@ -495,34 +500,67 @@ ${addableFiles.map((x) => {
495
500
  )}"
496
501
  `
497
502
  );
498
- 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`;
504
+ this.checkForShutdown();
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();
499
530
  this.checkForShutdown();
500
531
  };
532
+ this.writeBigBoard = () => {
533
+ fs2.writeFileSync(
534
+ `./testeranto/reports/${this.name}/summary.json`,
535
+ JSON.stringify(this.summary, null, 2)
536
+ );
537
+ };
501
538
  this.checkForShutdown = () => {
539
+ console.log(ansiC.inverse(`checkForShutdown`));
502
540
  this.writeBigBoard();
503
541
  if (this.mode === "dev")
504
542
  return;
505
543
  let inflight = false;
506
- Object.keys(this.bigBoard).forEach((k) => {
507
- if (this.bigBoard[k].prompt === "?") {
544
+ Object.keys(this.summary).forEach((k) => {
545
+ if (this.summary[k].prompt === "?") {
508
546
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
509
547
  inflight = true;
510
548
  }
511
549
  });
512
- Object.keys(this.bigBoard).forEach((k) => {
513
- if (this.bigBoard[k].runTimeError === "?") {
550
+ Object.keys(this.summary).forEach((k) => {
551
+ if (this.summary[k].runTimeError === "?") {
514
552
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
515
553
  inflight = true;
516
554
  }
517
555
  });
518
- Object.keys(this.bigBoard).forEach((k) => {
519
- if (this.bigBoard[k].staticErrors === "?") {
556
+ Object.keys(this.summary).forEach((k) => {
557
+ if (this.summary[k].staticErrors === "?") {
520
558
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
521
559
  inflight = true;
522
560
  }
523
561
  });
524
- Object.keys(this.bigBoard).forEach((k) => {
525
- if (this.bigBoard[k].typeErrors === "?") {
562
+ Object.keys(this.summary).forEach((k) => {
563
+ if (this.summary[k].typeErrors === "?") {
526
564
  console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
527
565
  inflight = true;
528
566
  }
@@ -535,38 +573,113 @@ ${addableFiles.map((x) => {
535
573
  });
536
574
  }
537
575
  };
538
- this.typeCheckIsRunning = (src) => {
539
- this.bigBoard[src].typeErrors = "?";
540
- };
541
- this.typeCheckIsNowDone = (src, failures) => {
542
- this.bigBoard[src].typeErrors = failures;
543
- this.writeBigBoard();
544
- this.checkForShutdown();
545
- };
546
- this.lintIsRunning = (src) => {
547
- this.bigBoard[src].staticErrors = "?";
548
- this.writeBigBoard();
549
- };
550
- this.lintIsNowDone = (src, failures) => {
551
- this.bigBoard[src].staticErrors = failures;
552
- this.writeBigBoard();
553
- this.checkForShutdown();
554
- };
555
- this.bddTestIsRunning = (src) => {
556
- this.bigBoard[src].runTimeError = "?";
557
- this.writeBigBoard();
558
- };
559
- this.bddTestIsNowDone = (src, failures) => {
560
- this.bigBoard[src].runTimeError = failures;
561
- this.writeBigBoard();
562
- 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);
563
676
  };
564
677
  this.launchPure = async (src, dest) => {
565
- console.log(ansiC.green(ansiC.inverse(`! pure, ${src}`)));
678
+ console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
566
679
  this.bddTestIsRunning(src);
567
680
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
568
- if (!fs2.existsSync(reportDest)) {
569
- fs2.mkdirSync(reportDest, { recursive: true });
681
+ if (!fs3.existsSync(reportDest)) {
682
+ fs3.mkdirSync(reportDest, { recursive: true });
570
683
  }
571
684
  const destFolder = dest.replace(".mjs", "");
572
685
  let argz = "";
@@ -574,11 +687,11 @@ ${addableFiles.map((x) => {
574
687
  return t[0] === src;
575
688
  });
576
689
  if (!testConfig) {
577
- console.log(ansiC.inverse("missing test config! Exiting ungracefully!"));
690
+ console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
578
691
  process.exit(-1);
579
692
  }
580
693
  const testConfigResource = testConfig[2];
581
- let portsToUse = [];
694
+ const portsToUse = [];
582
695
  if (testConfigResource.ports === 0) {
583
696
  argz = JSON.stringify({
584
697
  scheduled: true,
@@ -617,21 +730,20 @@ ${addableFiles.map((x) => {
617
730
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
618
731
  return module.default.then((defaultModule) => {
619
732
  defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
620
- this.receiveFeatures(results.features, destFolder, src, "pure");
621
733
  statusMessagePretty(results.fails, src);
622
734
  this.bddTestIsNowDone(src, results.fails);
623
735
  }).catch((e) => {
624
736
  console.log(
625
- ansiC.red(ansiC.inverse(`${src} errored with: ${e}`))
737
+ ansiC2.red(
738
+ ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
739
+ )
626
740
  );
627
741
  this.bddTestIsNowDone(src, -1);
628
- }).finally(() => {
629
- webSideCares.forEach((webSideCar) => webSideCar.close());
630
742
  });
631
743
  }).catch((e) => {
632
744
  console.log(
633
- ansiC.red(
634
- ansiC.inverse(
745
+ ansiC2.red(
746
+ ansiC2.inverse(
635
747
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
636
748
  )
637
749
  )
@@ -643,8 +755,8 @@ ${addableFiles.map((x) => {
643
755
  });
644
756
  } catch (e) {
645
757
  console.log(
646
- ansiC.red(
647
- ansiC.inverse(
758
+ ansiC2.red(
759
+ ansiC2.inverse(
648
760
  `${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
649
761
  )
650
762
  )
@@ -655,38 +767,39 @@ ${addableFiles.map((x) => {
655
767
  }
656
768
  for (let i = 0; i <= portsToUse.length; i++) {
657
769
  if (portsToUse[i]) {
658
- this.ports[portsToUse[i]] = "true";
770
+ this.ports[portsToUse[i]] = true;
659
771
  }
660
772
  }
661
773
  };
662
774
  this.launchNode = async (src, dest) => {
663
- console.log(ansiC.green(ansiC.inverse(`! node, ${src}`)));
775
+ console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
664
776
  this.bddTestIsRunning(src);
665
777
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
666
- if (!fs2.existsSync(reportDest)) {
667
- fs2.mkdirSync(reportDest, { recursive: true });
778
+ if (!fs3.existsSync(reportDest)) {
779
+ fs3.mkdirSync(reportDest, { recursive: true });
668
780
  }
669
- const destFolder = dest.replace(".mjs", "");
670
781
  let testResources = "";
671
782
  const testConfig = this.configs.tests.find((t) => {
672
783
  return t[0] === src;
673
784
  });
674
785
  if (!testConfig) {
675
786
  console.log(
676
- ansiC.inverse(`missing test config! Exiting ungracefully for '${src}'`)
787
+ ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
677
788
  );
678
789
  process.exit(-1);
679
790
  }
680
791
  const testConfigResource = testConfig[2];
681
- let portsToUse = [];
792
+ const portsToUse = [];
682
793
  if (testConfigResource.ports === 0) {
683
- testResources = JSON.stringify({
684
- scheduled: true,
794
+ console.error("portsToUse?!", []);
795
+ const t = {
685
796
  name: src,
686
- ports: portsToUse,
797
+ // ports: portsToUse.map((v) => Number(v)),
798
+ ports: [],
687
799
  fs: reportDest,
688
800
  browserWSEndpoint: this.browser.wsEndpoint()
689
- });
801
+ };
802
+ testResources = JSON.stringify(t);
690
803
  } else if (testConfigResource.ports > 0) {
691
804
  const openPorts = Object.entries(this.ports).filter(
692
805
  ([portnumber, portopen]) => portopen
@@ -696,14 +809,16 @@ ${addableFiles.map((x) => {
696
809
  portsToUse.push(openPorts[i][0]);
697
810
  this.ports[openPorts[i][0]] = false;
698
811
  }
812
+ console.error("portsToUse", portsToUse);
699
813
  testResources = JSON.stringify({
700
814
  scheduled: true,
701
815
  name: src,
702
816
  ports: portsToUse,
703
- fs: destFolder,
817
+ fs: reportDest,
704
818
  browserWSEndpoint: this.browser.wsEndpoint()
705
819
  });
706
820
  } else {
821
+ console.log("Not enough ports! Enqueuing test job...");
707
822
  this.queue.push(src);
708
823
  return;
709
824
  }
@@ -713,62 +828,61 @@ ${addableFiles.map((x) => {
713
828
  }
714
829
  const builtfile = dest;
715
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
+ });
716
835
  let buffer = new Buffer("");
717
836
  const server = net.createServer((socket) => {
837
+ const queue = new Queue();
718
838
  socket.on("data", (data) => {
719
839
  buffer = Buffer.concat([buffer, data]);
720
- let messages = [];
721
840
  for (let b = 0; b < buffer.length + 1; b++) {
722
- let c = buffer.slice(0, b);
841
+ const c = buffer.slice(0, b);
723
842
  let d;
724
843
  try {
725
844
  d = JSON.parse(c.toString());
726
- messages.push(d);
845
+ queue.enqueue(d);
727
846
  buffer = buffer.slice(b, buffer.length + 1);
728
847
  b = 0;
729
848
  } catch (e) {
730
849
  }
731
850
  }
732
- messages.forEach(async (payload) => {
733
- this.mapping().forEach(async ([command, func]) => {
734
- if (payload[0] === command) {
735
- const x = payload.slice(1, -1);
736
- const r = await this[command](...x);
737
- if (!haltReturns) {
738
- child.send(
739
- JSON.stringify({
740
- payload: r,
741
- key: payload[payload.length - 1]
742
- })
743
- );
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
+ }
744
866
  }
745
- }
746
- });
747
- });
867
+ });
868
+ }
869
+ }
748
870
  });
749
871
  });
750
- const oStream = fs2.createWriteStream(`${reportDest}/console_log.txt`);
751
- const child = spawn(
752
- "node",
753
- [builtfile, testResources, "--trace-warnings"],
754
- {
755
- stdio: ["pipe", "pipe", "pipe", "ipc"]
756
- // silent: true
757
- }
758
- );
759
- const p = destFolder + "/pipe";
872
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
760
873
  const errFile = `${reportDest}/error.txt`;
761
- if (fs2.existsSync(errFile)) {
762
- fs2.rmSync(errFile);
874
+ if (fs3.existsSync(errFile)) {
875
+ fs3.rmSync(errFile);
763
876
  }
764
- server.listen(p, () => {
877
+ server.listen(ipcfile, () => {
765
878
  child.stderr?.on("data", (data) => {
766
- oStream.write(`stderr data ${data}`);
879
+ oStream.write(`stderr > ${data}`);
767
880
  });
768
881
  child.stdout?.on("data", (data) => {
769
- oStream.write(`stdout data ${data}`);
882
+ oStream.write(`stdout > ${data}`);
770
883
  });
771
884
  child.on("close", (code) => {
885
+ console.log("close");
772
886
  oStream.close();
773
887
  server.close();
774
888
  if (code === null) {
@@ -781,22 +895,24 @@ ${addableFiles.map((x) => {
781
895
  this.bddTestIsNowDone(src, code);
782
896
  statusMessagePretty(code, src);
783
897
  }
784
- if (fs2.existsSync(p)) {
785
- fs2.rmSync(p);
786
- }
787
898
  haltReturns = true;
788
899
  });
789
900
  child.on("exit", (code) => {
901
+ console.log("exit");
790
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);
791
909
  });
792
910
  child.on("error", (e) => {
911
+ console.log("error");
793
912
  haltReturns = true;
794
- if (fs2.existsSync(p)) {
795
- fs2.rmSync(p);
796
- }
797
913
  console.log(
798
- ansiC.red(
799
- ansiC.inverse(
914
+ ansiC2.red(
915
+ ansiC2.inverse(
800
916
  `${src} errored with: ${e.name}. Check ${errFile}for more info`
801
917
  )
802
918
  )
@@ -806,121 +922,241 @@ ${addableFiles.map((x) => {
806
922
  statusMessagePretty(-1, src);
807
923
  });
808
924
  });
809
- child.send({ path: p });
810
- for (let i = 0; i <= portsToUse.length; i++) {
811
- if (portsToUse[i]) {
812
- this.ports[portsToUse[i]] = "true";
813
- }
814
- }
815
925
  };
816
- this.launchWebSideCar = async (src, dest, testConfig) => {
817
- const d = dest + ".mjs";
818
- 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}`)));
819
931
  const fileStreams2 = [];
820
932
  const doneFileStream2 = [];
933
+ const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
821
934
  return new Promise((res, rej) => {
822
- this.browser.newPage().then((page) => {
823
- page.exposeFunction(
824
- "custom-screenshot",
825
- async (ssOpts, testName2) => {
826
- const p = ssOpts.path;
827
- const dir = path3.dirname(p);
828
- fs2.mkdirSync(dir, {
829
- recursive: true
830
- });
831
- files2[testName2].add(ssOpts.path);
832
- const sPromise = page.screenshot({
833
- ...ssOpts,
834
- path: p
835
- });
836
- if (!screenshots2[testName2]) {
837
- screenshots2[testName2] = [];
838
- }
839
- screenshots2[testName2].push(sPromise);
840
- await sPromise;
841
- return sPromise;
842
- }
843
- );
844
- page.exposeFunction(
845
- "writeFileSync",
846
- (fp, contents, testName2) => {
847
- const dir = path3.dirname(fp);
848
- fs2.mkdirSync(dir, {
849
- recursive: true
850
- });
851
- const p = new Promise(async (res2, rej2) => {
852
- fs2.writeFileSync(fp, contents);
853
- res2(fp);
854
- });
855
- doneFileStream2.push(p);
856
- if (!files2[testName2]) {
857
- files2[testName2] = /* @__PURE__ */ new Set();
858
- }
859
- files2[testName2].add(fp);
860
- return p;
861
- }
862
- );
863
- page.exposeFunction("existsSync", (fp, contents) => {
864
- return fs2.existsSync(fp);
935
+ this.browser.newPage().then(async (page) => {
936
+ this.mapping().forEach(async ([command, func]) => {
937
+ page.exposeFunction(command, func);
865
938
  });
866
- page.exposeFunction("mkdirSync", (fp) => {
867
- if (!fs2.existsSync(fp)) {
868
- return fs2.mkdirSync(fp, {
869
- recursive: true
870
- });
939
+ const close = () => {
940
+ if (!files2[src]) {
941
+ files2[src] = /* @__PURE__ */ new Set();
871
942
  }
872
- return false;
873
- });
874
- page.exposeFunction(
875
- "createWriteStream",
876
- (fp, testName2) => {
877
- const f = fs2.createWriteStream(fp);
878
- files2[testName2].add(fp);
879
- const p = new Promise((res2, rej2) => {
880
- res2(fp);
881
- });
882
- doneFileStream2.push(p);
883
- f.on("close", async () => {
884
- await p;
885
- });
886
- fileStreams2.push(f);
887
- return {
888
- ...JSON.parse(JSON.stringify(f)),
889
- uid: fileStreams2.length - 1
890
- };
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");
891
962
  }
892
- );
893
- page.exposeFunction(
894
- "write",
895
- async (uid, contents) => {
896
- 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");
897
967
  }
898
- );
899
- page.exposeFunction("end", async (uid) => {
900
- 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();
901
1009
  });
902
1010
  return page;
903
1011
  }).then(async (page) => {
904
1012
  await page.goto(`file://${`${dest}.html`}`, {});
905
- res(page);
1013
+ res([Math.random(), page]);
906
1014
  });
907
1015
  });
908
1016
  };
909
- 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]}`;
910
1020
  const d = dest + ".mjs";
911
- 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(".");
912
1146
  const destFolder = dest.replace(".mjs", "");
913
- let argz = "";
914
- const testConfigResource = testConfig[2];
915
- let portsToUse = [];
1147
+ let argz;
1148
+ const z = sidecar[2];
1149
+ const testConfigResource = sidecar[2];
1150
+ const src = sidecar[0];
1151
+ const portsToUse = [];
916
1152
  if (testConfigResource.ports === 0) {
917
- argz = JSON.stringify({
918
- scheduled: true,
1153
+ argz = {
1154
+ // scheduled: true,
919
1155
  name: src,
920
1156
  ports: portsToUse,
921
1157
  fs: destFolder,
922
1158
  browserWSEndpoint: this.browser.wsEndpoint()
923
- });
1159
+ };
924
1160
  } else if (testConfigResource.ports > 0) {
925
1161
  const openPorts = Object.entries(this.ports).filter(
926
1162
  ([portnumber, portopen]) => portopen
@@ -930,14 +1166,14 @@ ${addableFiles.map((x) => {
930
1166
  portsToUse.push(openPorts[i][0]);
931
1167
  this.ports[openPorts[i][0]] = false;
932
1168
  }
933
- argz = JSON.stringify({
934
- scheduled: true,
1169
+ argz = {
1170
+ // scheduled: true,
935
1171
  name: src,
936
1172
  // ports: [3333],
937
1173
  ports: portsToUse,
938
1174
  fs: ".",
939
1175
  browserWSEndpoint: this.browser.wsEndpoint()
940
- });
1176
+ };
941
1177
  } else {
942
1178
  this.queue.push(src);
943
1179
  return;
@@ -946,29 +1182,22 @@ ${addableFiles.map((x) => {
946
1182
  console.error("negative port makes no sense", src);
947
1183
  process.exit(-1);
948
1184
  }
949
- const builtfile = dest + ".mjs";
950
1185
  await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
951
- return module.default.then((defaultModule) => {
952
- const s = new defaultModule();
953
- s.receiveTestResourceConfig(argz);
954
- });
1186
+ this.pureSidecars[r] = module.default;
1187
+ this.pureSidecars[r].start(argz);
955
1188
  });
956
- for (let i = 0; i <= portsToUse.length; i++) {
957
- if (portsToUse[i]) {
958
- this.ports[portsToUse[i]] = "true";
959
- }
960
- }
1189
+ return [r, argz];
961
1190
  };
962
1191
  this.launchWeb = async (src, dest) => {
963
- console.log(ansiC.green(ansiC.inverse(`! web ${src}`)));
1192
+ console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
964
1193
  this.bddTestIsRunning(src);
965
1194
  const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
966
- if (!fs2.existsSync(reportDest)) {
967
- fs2.mkdirSync(reportDest, { recursive: true });
1195
+ if (!fs3.existsSync(reportDest)) {
1196
+ fs3.mkdirSync(reportDest, { recursive: true });
968
1197
  }
969
1198
  const destFolder = dest.replace(".mjs", "");
970
1199
  const webArgz = JSON.stringify({
971
- name: dest,
1200
+ name: src,
972
1201
  ports: [].toString(),
973
1202
  fs: reportDest,
974
1203
  browserWSEndpoint: this.browser.wsEndpoint()
@@ -984,10 +1213,20 @@ ${addableFiles.map((x) => {
984
1213
  console.log("fail", e)
985
1214
  }
986
1215
  })`;
987
- const oStream = fs2.createWriteStream(`${reportDest}/console_log.txt`);
1216
+ const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
988
1217
  this.browser.newPage().then((page) => {
989
1218
  this.mapping().forEach(async ([command, func]) => {
990
- 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
+ }
991
1230
  });
992
1231
  return page;
993
1232
  }).then(async (page) => {
@@ -995,7 +1234,7 @@ ${addableFiles.map((x) => {
995
1234
  if (!files2[src]) {
996
1235
  files2[src] = /* @__PURE__ */ new Set();
997
1236
  }
998
- fs2.writeFileSync(
1237
+ fs3.writeFileSync(
999
1238
  destFolder + "/manifest.json",
1000
1239
  JSON.stringify(Array.from(files2[src]))
1001
1240
  );
@@ -1028,17 +1267,21 @@ ${addableFiles.map((x) => {
1028
1267
  });
1029
1268
  page.on("console", (log) => {
1030
1269
  oStream.write(log.text());
1270
+ oStream.write("\n");
1031
1271
  oStream.write(JSON.stringify(log.location()));
1272
+ oStream.write("\n");
1032
1273
  oStream.write(JSON.stringify(log.stackTrace()));
1033
1274
  oStream.write("\n");
1034
1275
  });
1035
1276
  await page.goto(`file://${`${destFolder}.html`}`, {});
1277
+ this.webSidecars[Math.random()] = page.mainFrame()._id;
1036
1278
  await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
1037
- this.receiveFeatures(features, destFolder, src, "web");
1038
1279
  statusMessagePretty(fails, src);
1039
1280
  this.bddTestIsNowDone(src, fails);
1040
1281
  }).catch((e) => {
1041
- console.log(ansiC.red(ansiC.inverse(`${src} errored with: ${e}`)));
1282
+ console.log(
1283
+ ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
1284
+ );
1042
1285
  }).finally(() => {
1043
1286
  this.bddTestIsNowDone(src, -1);
1044
1287
  close();
@@ -1046,74 +1289,106 @@ ${addableFiles.map((x) => {
1046
1289
  return page;
1047
1290
  });
1048
1291
  };
1049
- this.receiveFeatures = (features, destFolder, srcTest, platform) => {
1050
- const featureDestination = path3.resolve(
1292
+ this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
1293
+ const featureDestination = path4.resolve(
1051
1294
  process.cwd(),
1052
1295
  "reports",
1053
1296
  "features",
1054
1297
  "strings",
1055
1298
  srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
1056
1299
  );
1057
- 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) => {
1058
1304
  const accum = await mm;
1059
1305
  const isUrl = isValidUrl(featureStringKey);
1060
1306
  if (isUrl) {
1061
1307
  const u = new URL(featureStringKey);
1062
1308
  if (u.protocol === "file:") {
1063
- const newPath = `${process.cwd()}/testeranto/features/internal/${path3.relative(
1309
+ const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
1064
1310
  process.cwd(),
1065
1311
  u.pathname
1066
1312
  )}`;
1067
- await fs2.promises.mkdir(path3.dirname(newPath), { recursive: true });
1068
- try {
1069
- await fs2.unlinkSync(newPath);
1070
- } catch (error) {
1071
- if (error.code !== "ENOENT") {
1072
- }
1073
- }
1074
- accum.files.push(newPath);
1313
+ accum.files.push(u.pathname);
1075
1314
  } else if (u.protocol === "http:" || u.protocol === "https:") {
1076
- const newPath = `${process.cwd()}/testeranto/features/external${u.hostname}${u.pathname}`;
1315
+ const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
1077
1316
  const body = await this.configs.featureIngestor(featureStringKey);
1078
1317
  writeFileAndCreateDir(newPath, body);
1079
1318
  accum.files.push(newPath);
1080
1319
  }
1081
1320
  } else {
1082
- await fs2.promises.mkdir(path3.dirname(featureDestination), {
1321
+ await fs3.promises.mkdir(path4.dirname(featureDestination), {
1083
1322
  recursive: true
1084
1323
  });
1085
1324
  accum.strings.push(featureStringKey);
1086
1325
  }
1087
1326
  return accum;
1088
1327
  }, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
1089
- fs2.writeFileSync(
1328
+ fs3.writeFileSync(
1090
1329
  `testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
1091
1330
  files3.map((f) => {
1092
1331
  return `/read ${f}`;
1093
1332
  }).join("\n")
1094
1333
  );
1095
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();
1096
1341
  };
1097
- this.writeBigBoard = () => {
1098
- fs2.writeFileSync(
1099
- `./testeranto/reports/${this.name}/summary.json`,
1100
- JSON.stringify(this.bigBoard, null, 2)
1101
- );
1102
- };
1103
- this.name = name;
1104
- this.mode = mode2;
1105
1342
  this.ports = {};
1106
- this.configs.tests.forEach(([t]) => {
1107
- this.bigBoard[t] = {
1108
- runTimeError: "?",
1109
- typeErrors: "?",
1110
- staticErrors: "?",
1111
- prompt: "?"
1112
- };
1113
- });
1343
+ this.queue = [];
1344
+ this.nodeSidecars = {};
1345
+ this.webSidecars = {};
1346
+ this.pureSidecars = {};
1114
1347
  this.configs.ports.forEach((element) => {
1115
- 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;
1116
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
+ }
1117
1392
  }
1118
1393
  mapping() {
1119
1394
  return [
@@ -1122,20 +1397,23 @@ ${addableFiles.map((x) => {
1122
1397
  ["closePage", this.closePage],
1123
1398
  ["createWriteStream", this.createWriteStream],
1124
1399
  ["customclose", this.customclose],
1125
- ["customScreenShot", this.customScreenShot],
1400
+ ["customScreenShot", this.customScreenShot.bind(this)],
1126
1401
  ["end", this.end],
1127
1402
  ["existsSync", this.existsSync],
1128
1403
  ["focusOn", this.focusOn],
1129
1404
  ["getAttribute", this.getAttribute],
1130
- ["getValue", this.getValue],
1131
- ["goto", this.goto],
1405
+ ["getInnerHtml", this.getInnerHtml],
1406
+ // ["setValue", this.setValue],
1407
+ ["goto", this.goto.bind(this)],
1132
1408
  ["isDisabled", this.isDisabled],
1409
+ ["launchSideCar", this.launchSideCar.bind(this)],
1133
1410
  ["mkdirSync", this.mkdirSync],
1134
1411
  ["newPage", this.newPage],
1135
1412
  ["page", this.page],
1136
1413
  ["pages", this.pages],
1137
1414
  ["screencast", this.screencast],
1138
1415
  ["screencastStop", this.screencastStop],
1416
+ ["stopSideCar", this.stopSideCar.bind(this)],
1139
1417
  ["typeInto", this.typeInto],
1140
1418
  ["waitForSelector", this.waitForSelector],
1141
1419
  ["write", this.write],
@@ -1146,51 +1424,57 @@ ${addableFiles.map((x) => {
1146
1424
  this.mapping().forEach(async ([command, func]) => {
1147
1425
  globalThis[command] = func;
1148
1426
  });
1149
- if (!fs2.existsSync(`testeranto/reports/${this.name}`)) {
1150
- fs2.mkdirSync(`testeranto/reports/${this.name}`);
1427
+ if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
1428
+ fs3.mkdirSync(`testeranto/reports/${this.name}`);
1151
1429
  }
1152
- this.browser = await puppeteer.launch({
1153
- slowMo: 1,
1154
- waitForInitialPage: false,
1155
- executablePath: (
1156
- // process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
1157
- "/opt/homebrew/bin/chromium"
1158
- ),
1159
- headless: true,
1160
- dumpio: false,
1161
- devtools: false,
1162
- args: [
1163
- "--allow-file-access-from-files",
1164
- "--allow-insecure-localhost",
1165
- "--allow-running-insecure-content",
1166
- "--auto-open-devtools-for-tabs",
1167
- "--disable-dev-shm-usage",
1168
- "--disable-extensions",
1169
- "--disable-gpu",
1170
- "--disable-setuid-sandbox",
1171
- "--disable-site-isolation-trials",
1172
- "--disable-site-isolation-trials",
1173
- "--disable-web-security",
1174
- "--no-first-run",
1175
- "--no-sandbox",
1176
- "--no-startup-window",
1177
- "--reduce-security-for-testing",
1178
- "--remote-allow-origins=*",
1179
- `--remote-debugging-port=3234`,
1180
- "--unsafely-treat-insecure-origin-as-secure=*"
1181
- // "--disable-features=IsolateOrigins,site-per-process",
1182
- // "--disable-features=IsolateOrigins",
1183
- // "--disk-cache-dir=/dev/null",
1184
- // "--disk-cache-size=1",
1185
- // "--no-zygote",
1186
- // "--remote-allow-origins=ws://localhost:3234",
1187
- // "--single-process",
1188
- // "--start-maximized",
1189
- // "--unsafely-treat-insecure-origin-as-secure",
1190
- // "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
1191
- ]
1192
- });
1193
- 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);
1194
1478
  [
1195
1479
  [
1196
1480
  nodeEntryPoints,
@@ -1209,7 +1493,7 @@ ${addableFiles.map((x) => {
1209
1493
  }
1210
1494
  ],
1211
1495
  [
1212
- importEntryPoints,
1496
+ pureEntryPoints,
1213
1497
  this.launchPure,
1214
1498
  "pure",
1215
1499
  (w) => {
@@ -1229,7 +1513,7 @@ ${addableFiles.map((x) => {
1229
1513
  if (fileHashes[k] !== hash) {
1230
1514
  fileHashes[k] = hash;
1231
1515
  console.log(
1232
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename}`))
1516
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
1233
1517
  );
1234
1518
  launcher(k, outputFile);
1235
1519
  }
@@ -1243,7 +1527,7 @@ ${addableFiles.map((x) => {
1243
1527
  watcher(
1244
1528
  watch(metafile, async (e, filename) => {
1245
1529
  console.log(
1246
- ansiC.yellow(ansiC.inverse(`< ${e} ${filename} (${runtime})`))
1530
+ ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
1247
1531
  );
1248
1532
  this.metafileOutputs(runtime);
1249
1533
  })
@@ -1251,8 +1535,10 @@ ${addableFiles.map((x) => {
1251
1535
  }
1252
1536
  );
1253
1537
  }
1538
+ async launchExternalTest(externalTestName, externalTest) {
1539
+ }
1254
1540
  async stop() {
1255
- console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
1541
+ console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
1256
1542
  this.mode = "once";
1257
1543
  this.nodeMetafileWatcher.close();
1258
1544
  this.webMetafileWatcher.close();
@@ -1261,7 +1547,7 @@ ${addableFiles.map((x) => {
1261
1547
  }
1262
1548
  async metafileOutputs(platform) {
1263
1549
  const metafile = JSON.parse(
1264
- fs2.readFileSync(
1550
+ fs3.readFileSync(
1265
1551
  `./testeranto/bundles/${platform}/${this.name}/metafile.json`
1266
1552
  ).toString()
1267
1553
  ).metafile;
@@ -1269,16 +1555,22 @@ ${addableFiles.map((x) => {
1269
1555
  return;
1270
1556
  const outputs = metafile.outputs;
1271
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
+ }
1272
1562
  const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
1273
- if (!fs2.existsSync(i))
1563
+ if (!fs3.existsSync(i))
1274
1564
  return false;
1275
1565
  if (i.startsWith("node_modules"))
1276
1566
  return false;
1567
+ if (i.startsWith("./node_modules"))
1568
+ return false;
1277
1569
  return true;
1278
1570
  });
1279
1571
  const f = `${k.split(".").slice(0, -1).join(".")}/`;
1280
- if (!fs2.existsSync(f)) {
1281
- fs2.mkdirSync(f);
1572
+ if (!fs3.existsSync(f)) {
1573
+ fs3.mkdirSync(f);
1282
1574
  }
1283
1575
  const entrypoint = outputs[k].entryPoint;
1284
1576
  if (entrypoint) {
@@ -1303,10 +1595,10 @@ ${addableFiles.map((x) => {
1303
1595
  readline.emitKeypressEvents(process.stdin);
1304
1596
  if (process.stdin.isTTY)
1305
1597
  process.stdin.setRawMode(true);
1306
- console.log(ansiC2.inverse("Press 'x' to shutdown forcefully."));
1598
+ console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
1307
1599
  process.stdin.on("keypress", (str, key) => {
1308
1600
  if (key.name === "x") {
1309
- console.log(ansiC2.inverse("Shutting down forcefully..."));
1601
+ console.log(ansiC3.inverse("Shutting down forcefully..."));
1310
1602
  process.exit(-1);
1311
1603
  }
1312
1604
  });