dceky 1.0.5-beta.ky-declarations.13 → 1.0.5

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 (237) hide show
  1. package/README.md +45 -29
  2. package/lib/commands/assertDoesNotHaveClass.d.ts +18 -0
  3. package/lib/commands/assertDoesNotHaveClass.js +17 -0
  4. package/lib/commands/assertDoesNotHaveClass.js.map +1 -0
  5. package/lib/commands/assertHasClass.d.ts +18 -0
  6. package/lib/commands/assertHasClass.js +17 -0
  7. package/lib/commands/assertHasClass.js.map +1 -0
  8. package/lib/commands/assertNumElements.d.ts +18 -0
  9. package/lib/commands/assertNumElements.js +17 -0
  10. package/lib/commands/assertNumElements.js.map +1 -0
  11. package/lib/commands/clickWithRetry.d.ts +19 -0
  12. package/lib/commands/clickWithRetry.js +29 -0
  13. package/lib/commands/clickWithRetry.js.map +1 -0
  14. package/lib/commands/genTextOfLength.d.ts +20 -0
  15. package/lib/commands/genTextOfLength.js +20 -0
  16. package/lib/commands/genTextOfLength.js.map +1 -0
  17. package/lib/commands/getAttribute.d.ts +20 -0
  18. package/lib/commands/getAttribute.js +22 -0
  19. package/lib/commands/getAttribute.js.map +1 -0
  20. package/lib/commands/getClassName.d.ts +15 -0
  21. package/lib/commands/getClassName.js +21 -0
  22. package/lib/commands/getClassName.js.map +1 -0
  23. package/lib/commands/getCurrentDateInfo.d.ts +21 -0
  24. package/lib/commands/getCurrentDateInfo.js +25 -0
  25. package/lib/commands/getCurrentDateInfo.js.map +1 -0
  26. package/lib/commands/getId.d.ts +15 -0
  27. package/lib/commands/getId.js +21 -0
  28. package/lib/commands/getId.js.map +1 -0
  29. package/lib/commands/getNumElements.d.ts +14 -0
  30. package/lib/commands/getNumElements.js +19 -0
  31. package/lib/commands/getNumElements.js.map +1 -0
  32. package/lib/commands/getSpecialChars.d.ts +14 -0
  33. package/lib/commands/getSpecialChars.js +16 -0
  34. package/lib/commands/getSpecialChars.js.map +1 -0
  35. package/lib/commands/getTitle.d.ts +13 -0
  36. package/lib/commands/getTitle.js +20 -0
  37. package/lib/commands/getTitle.js.map +1 -0
  38. package/lib/commands/handleHarvardKey.d.ts +18 -0
  39. package/lib/commands/handleHarvardKey.js +56 -0
  40. package/lib/commands/handleHarvardKey.js.map +1 -0
  41. package/lib/commands/handleHarvardKey2.d.ts +14 -0
  42. package/lib/commands/handleHarvardKey2.js +88 -0
  43. package/lib/commands/handleHarvardKey2.js.map +1 -0
  44. package/lib/commands/launchAs.d.ts +20 -0
  45. package/lib/commands/launchAs.js +60 -0
  46. package/lib/commands/launchAs.js.map +1 -0
  47. package/lib/commands/launchLTIUsingToken.d.ts +19 -0
  48. package/lib/commands/launchLTIUsingToken.js +74 -0
  49. package/lib/commands/launchLTIUsingToken.js.map +1 -0
  50. package/lib/commands/listSelectLabels.d.ts +15 -0
  51. package/lib/commands/listSelectLabels.js +24 -0
  52. package/lib/commands/listSelectLabels.js.map +1 -0
  53. package/lib/commands/listSelectValues.d.ts +15 -0
  54. package/lib/commands/listSelectValues.js +26 -0
  55. package/lib/commands/listSelectValues.js.map +1 -0
  56. package/lib/commands/navigateToHref.d.ts +19 -0
  57. package/lib/commands/navigateToHref.js +23 -0
  58. package/lib/commands/navigateToHref.js.map +1 -0
  59. package/lib/commands/padWithZeros.d.ts +20 -0
  60. package/lib/commands/padWithZeros.js +24 -0
  61. package/lib/commands/padWithZeros.js.map +1 -0
  62. package/lib/commands/runScript.d.ts +16 -0
  63. package/lib/commands/runScript.js +25 -0
  64. package/lib/commands/runScript.js.map +1 -0
  65. package/lib/commands/typeInto.d.ts +20 -0
  66. package/lib/commands/typeInto.js +28 -0
  67. package/lib/commands/typeInto.js.map +1 -0
  68. package/lib/commands/uniquify.d.ts +15 -0
  69. package/lib/commands/uniquify.js +25 -0
  70. package/lib/commands/uniquify.js.map +1 -0
  71. package/lib/commands/visitCanvasEndpoint.d.ts +27 -0
  72. package/lib/commands/visitCanvasEndpoint.js +35 -0
  73. package/lib/commands/visitCanvasEndpoint.js.map +1 -0
  74. package/lib/commands/visitCanvasGETEndpoint.d.ts +20 -0
  75. package/lib/commands/visitCanvasGETEndpoint.js +26 -0
  76. package/lib/commands/visitCanvasGETEndpoint.js.map +1 -0
  77. package/lib/commands/waitForAtLeastOneElementPresent.d.ts +23 -0
  78. package/lib/commands/waitForAtLeastOneElementPresent.js +27 -0
  79. package/lib/commands/waitForAtLeastOneElementPresent.js.map +1 -0
  80. package/lib/commands/waitForElementVisible.d.ts +14 -0
  81. package/lib/commands/waitForElementVisible.js +20 -0
  82. package/lib/commands/waitForElementVisible.js.map +1 -0
  83. package/lib/index.js.map +1 -0
  84. package/lib/init.d.ts +6 -0
  85. package/lib/init.js +69 -0
  86. package/lib/init.js.map +1 -0
  87. package/lib/src/commands/extractDataFromClass.d.ts +7 -4
  88. package/lib/src/commands/extractDataFromClass.js +2 -1
  89. package/lib/src/commands/extractDataFromClass.js.map +1 -1
  90. package/lib/src/commands/extractDataFromClassByContents.d.ts +9 -5
  91. package/lib/src/commands/extractDataFromClassByContents.js +2 -1
  92. package/lib/src/commands/extractDataFromClassByContents.js.map +1 -1
  93. package/lib/src/commands/genTextOfLength.d.ts +20 -0
  94. package/lib/src/commands/genTextOfLength.js +20 -0
  95. package/lib/src/commands/genTextOfLength.js.map +1 -0
  96. package/lib/src/commands/getAttribute.d.ts +20 -0
  97. package/lib/src/commands/getAttribute.js +22 -0
  98. package/lib/src/commands/getAttribute.js.map +1 -0
  99. package/lib/src/commands/getClassName.d.ts +15 -0
  100. package/lib/src/commands/getClassName.js +21 -0
  101. package/lib/src/commands/getClassName.js.map +1 -0
  102. package/lib/src/commands/getCurrentDateInfo.d.ts +21 -0
  103. package/lib/src/commands/getCurrentDateInfo.js +25 -0
  104. package/lib/src/commands/getCurrentDateInfo.js.map +1 -0
  105. package/lib/src/commands/getId.d.ts +15 -0
  106. package/lib/src/commands/getId.js +21 -0
  107. package/lib/src/commands/getId.js.map +1 -0
  108. package/lib/src/commands/getJSON.d.ts +0 -1
  109. package/lib/src/commands/getJSON.js +1 -4
  110. package/lib/src/commands/getJSON.js.map +1 -1
  111. package/lib/src/commands/getSpecialChars.d.ts +14 -0
  112. package/lib/src/commands/getSpecialChars.js +16 -0
  113. package/lib/src/commands/getSpecialChars.js.map +1 -0
  114. package/lib/src/commands/getTitle.d.ts +13 -0
  115. package/lib/src/commands/getTitle.js +20 -0
  116. package/lib/src/commands/getTitle.js.map +1 -0
  117. package/lib/src/commands/index.js +29 -5
  118. package/lib/src/commands/index.js.map +1 -1
  119. package/lib/src/commands/launchLTIUsingToken.js +12 -4
  120. package/lib/src/commands/launchLTIUsingToken.js.map +1 -1
  121. package/lib/src/commands/listSelectLabels.d.ts +15 -0
  122. package/lib/src/commands/listSelectLabels.js +24 -0
  123. package/lib/src/commands/listSelectLabels.js.map +1 -0
  124. package/lib/src/commands/listSelectValues.d.ts +15 -0
  125. package/lib/src/commands/listSelectValues.js +27 -0
  126. package/lib/src/commands/listSelectValues.js.map +1 -0
  127. package/lib/src/commands/padWithZeros.d.ts +20 -0
  128. package/lib/src/commands/padWithZeros.js +24 -0
  129. package/lib/src/commands/padWithZeros.js.map +1 -0
  130. package/lib/src/commands/uniquify.d.ts +15 -0
  131. package/lib/src/commands/uniquify.js +26 -0
  132. package/lib/src/commands/uniquify.js.map +1 -0
  133. package/lib/src/commands/visitCanvasEndpoint.d.ts +26 -0
  134. package/lib/src/commands/visitCanvasEndpoint.js +36 -0
  135. package/lib/src/commands/visitCanvasEndpoint.js.map +1 -0
  136. package/lib/src/commands/waitForAtLeastOneElementPresent.d.ts +23 -0
  137. package/lib/src/commands/waitForAtLeastOneElementPresent.js +28 -0
  138. package/lib/src/commands/waitForAtLeastOneElementPresent.js.map +1 -0
  139. package/lib/src/init.js +28 -2
  140. package/lib/src/init.js.map +1 -1
  141. package/lib/start/constants/DEFAULT_THREADS_PER_COMBO.d.ts +6 -0
  142. package/lib/start/constants/DEFAULT_THREADS_PER_COMBO.js +9 -0
  143. package/lib/start/constants/DEFAULT_THREADS_PER_COMBO.js.map +1 -0
  144. package/lib/start/helpers/collectPngFiles.d.ts +9 -0
  145. package/lib/start/helpers/collectPngFiles.js +31 -0
  146. package/lib/start/helpers/collectPngFiles.js.map +1 -0
  147. package/lib/start/helpers/executeAllHeadlessCombinations.d.ts +15 -0
  148. package/lib/start/helpers/executeAllHeadlessCombinations.js +116 -0
  149. package/lib/start/helpers/executeAllHeadlessCombinations.js.map +1 -0
  150. package/lib/start/helpers/executeCypress.d.ts +17 -0
  151. package/lib/start/helpers/executeCypress.js +103 -0
  152. package/lib/start/helpers/executeCypress.js.map +1 -0
  153. package/lib/start/helpers/generateHtmlReport.d.ts +14 -0
  154. package/lib/start/helpers/generateHtmlReport.js +54 -0
  155. package/lib/start/helpers/generateHtmlReport.js.map +1 -0
  156. package/lib/start/helpers/generateReportHomepage.d.ts +9 -0
  157. package/lib/start/helpers/generateReportHomepage.js +142 -0
  158. package/lib/start/helpers/generateReportHomepage.js.map +1 -0
  159. package/lib/start/helpers/generateReporterConfig.d.ts +17 -0
  160. package/lib/start/helpers/generateReporterConfig.js +32 -0
  161. package/lib/start/helpers/generateReporterConfig.js.map +1 -0
  162. package/lib/start/helpers/getDateLabeledDir.d.ts +7 -0
  163. package/lib/start/helpers/getDateLabeledDir.js +38 -0
  164. package/lib/start/helpers/getDateLabeledDir.js.map +1 -0
  165. package/lib/start/helpers/mergeAllReportsAndGenerateHtml.d.ts +11 -0
  166. package/lib/start/helpers/mergeAllReportsAndGenerateHtml.js +121 -0
  167. package/lib/start/helpers/mergeAllReportsAndGenerateHtml.js.map +1 -0
  168. package/lib/start/helpers/mergeReports.d.ts +14 -0
  169. package/lib/start/helpers/mergeReports.js +63 -0
  170. package/lib/start/helpers/mergeReports.js.map +1 -0
  171. package/lib/start/helpers/reportHomepage.ejs +272 -0
  172. package/lib/start/helpers/runCypressHeadless.d.ts +18 -0
  173. package/lib/start/helpers/runCypressHeadless.js +138 -0
  174. package/lib/start/helpers/runCypressHeadless.js.map +1 -0
  175. package/lib/start/helpers/runCypressVisible.d.ts +8 -0
  176. package/lib/start/helpers/runCypressVisible.js +53 -0
  177. package/lib/start/helpers/runCypressVisible.js.map +1 -0
  178. package/lib/start/index.js +23 -5
  179. package/lib/start/index.js.map +1 -1
  180. package/lib/start/types/MochawesomeReporterConfig.d.ts +15 -0
  181. package/lib/start/types/MochawesomeReporterConfig.js +3 -0
  182. package/lib/start/types/MochawesomeReporterConfig.js.map +1 -0
  183. package/lib/start/types/Profile.d.ts +9 -0
  184. package/lib/start/types/Profile.js +3 -0
  185. package/lib/start/types/Profile.js.map +1 -0
  186. package/lib/start/types/ReportInfo.d.ts +14 -0
  187. package/lib/start/types/ReportInfo.js +3 -0
  188. package/lib/start/types/ReportInfo.js.map +1 -0
  189. package/lib/start/types/RunResult.d.ts +12 -0
  190. package/lib/start/types/RunResult.js +3 -0
  191. package/lib/start/types/RunResult.js.map +1 -0
  192. package/lib/start/types/ScreenshotInfo.d.ts +10 -0
  193. package/lib/start/types/ScreenshotInfo.js +3 -0
  194. package/lib/start/types/ScreenshotInfo.js.map +1 -0
  195. package/lib/start/types/TemplateReportInfo.d.ts +12 -0
  196. package/lib/start/types/TemplateReportInfo.js +3 -0
  197. package/lib/start/types/TemplateReportInfo.js.map +1 -0
  198. package/package.json +10 -8
  199. package/src/commands/extractDataFromClass.ts +17 -6
  200. package/src/commands/extractDataFromClassByContents.ts +21 -8
  201. package/src/commands/genTextOfLength.ts +54 -0
  202. package/src/commands/getAttribute.ts +58 -0
  203. package/src/commands/getClassName.ts +44 -0
  204. package/src/commands/getCurrentDateInfo.ts +57 -0
  205. package/src/commands/getId.ts +44 -0
  206. package/src/commands/getJSON.ts +0 -4
  207. package/src/commands/getSpecialChars.ts +34 -0
  208. package/src/commands/getTitle.ts +39 -0
  209. package/src/commands/index.ts +29 -5
  210. package/src/commands/launchLTIUsingToken.ts +12 -4
  211. package/src/commands/listSelectLabels.ts +47 -0
  212. package/src/commands/listSelectValues.ts +50 -0
  213. package/src/commands/padWithZeros.ts +53 -0
  214. package/src/commands/uniquify.ts +49 -0
  215. package/src/commands/visitCanvasEndpoint.ts +75 -0
  216. package/src/commands/waitForAtLeastOneElementPresent.ts +64 -0
  217. package/start/constants/DEFAULT_THREADS_PER_COMBO.ts +7 -0
  218. package/start/helpers/collectPngFiles.ts +25 -0
  219. package/start/helpers/executeAllHeadlessCombinations.ts +92 -0
  220. package/start/helpers/executeCypress.ts +66 -0
  221. package/start/helpers/generateHtmlReport.ts +71 -0
  222. package/start/helpers/generateReportHomepage.ts +148 -0
  223. package/start/helpers/generateReporterConfig.ts +39 -0
  224. package/start/helpers/getDateLabeledDir.ts +43 -0
  225. package/start/helpers/mergeAllReportsAndGenerateHtml.ts +150 -0
  226. package/start/helpers/mergeReports.ts +82 -0
  227. package/start/helpers/reportHomepage.ejs +272 -0
  228. package/start/helpers/runCypressHeadless.ts +164 -0
  229. package/start/helpers/runCypressVisible.ts +45 -0
  230. package/start/index.ts +23 -5
  231. package/start/types/MochawesomeReporterConfig.ts +23 -0
  232. package/start/types/Profile.ts +12 -0
  233. package/start/types/ReportInfo.ts +22 -0
  234. package/start/types/RunResult.ts +18 -0
  235. package/start/types/ScreenshotInfo.ts +13 -0
  236. package/start/types/TemplateReportInfo.ts +16 -0
  237. package/src/commands/visitCanvasGETEndpoint.ts +0 -61
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForAtLeastOneElementPresent.js","sourceRoot":"","sources":["../../../src/commands/waitForAtLeastOneElementPresent.ts"],"names":[],"mappings":";AAAA,iCAAiC;;AA8BjC,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,IAAM,+BAA+B,GAAG;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,iCAAiC,EACjC,UAAC,IAA8C;QACrC,IAAA,KAAK,GAAiB,IAAI,MAArB,EAAE,UAAU,GAAK,IAAI,WAAT,CAAU;QACnC,6CAA6C;QAC7C,IAAM,SAAS,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAE5C,kCAAkC;QAClC,IAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,6CAA6C;QAC7C,OAAO,CACL,EAAE;aACC,GAAG,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aAC7C,MAAM,CAAC,UAAC,IAAI,IAAO,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,2BAAoB,gBAAgB,cAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrH,IAAI,CAAC,UAAC,IAAI;YACT,IAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAC,GAAG,IAAO,OAAO,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CACL,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,4CAA4C;AAC5C,4CAA4C;AAC5C,4CAA4C;AAE5C,kBAAe,+BAA+B,CAAC"}
package/lib/src/init.js CHANGED
@@ -17,8 +17,21 @@ var launchLTIUsingToken_1 = __importDefault(require("./commands/launchLTIUsingTo
17
17
  var navigateToHref_1 = __importDefault(require("./commands/navigateToHref"));
18
18
  var runScript_1 = __importDefault(require("./commands/runScript"));
19
19
  var typeInto_1 = __importDefault(require("./commands/typeInto"));
20
- var visitCanvasGETEndpoint_1 = __importDefault(require("./commands/visitCanvasGETEndpoint"));
21
20
  var waitForElementVisible_1 = __importDefault(require("./commands/waitForElementVisible"));
21
+ // New commands
22
+ var genTextOfLength_1 = __importDefault(require("./commands/genTextOfLength"));
23
+ var getSpecialChars_1 = __importDefault(require("./commands/getSpecialChars"));
24
+ var uniquify_1 = __importDefault(require("./commands/uniquify"));
25
+ var getAttribute_1 = __importDefault(require("./commands/getAttribute"));
26
+ var getClassName_1 = __importDefault(require("./commands/getClassName"));
27
+ var getId_1 = __importDefault(require("./commands/getId"));
28
+ var getCurrentDateInfo_1 = __importDefault(require("./commands/getCurrentDateInfo"));
29
+ var getTitle_1 = __importDefault(require("./commands/getTitle"));
30
+ var listSelectLabels_1 = __importDefault(require("./commands/listSelectLabels"));
31
+ var listSelectValues_1 = __importDefault(require("./commands/listSelectValues"));
32
+ var padWithZeros_1 = __importDefault(require("./commands/padWithZeros"));
33
+ var visitCanvasEndpoint_1 = __importDefault(require("./commands/visitCanvasEndpoint"));
34
+ var waitForAtLeastOneElementPresent_1 = __importDefault(require("./commands/waitForAtLeastOneElementPresent"));
22
35
  /**
23
36
  * Initialize custom commands
24
37
  * @author Gabe Abrams
@@ -35,11 +48,24 @@ var init = function () {
35
48
  (0, navigateToHref_1.default)();
36
49
  (0, runScript_1.default)();
37
50
  (0, typeInto_1.default)();
38
- (0, visitCanvasGETEndpoint_1.default)();
39
51
  (0, waitForElementVisible_1.default)();
40
52
  (0, extractDataFromClass_1.default)();
41
53
  (0, extractDataFromClassByContents_1.default)();
42
54
  (0, getJSON_1.default)();
55
+ // New commands
56
+ (0, genTextOfLength_1.default)();
57
+ (0, getSpecialChars_1.default)();
58
+ (0, uniquify_1.default)();
59
+ (0, getAttribute_1.default)();
60
+ (0, getClassName_1.default)();
61
+ (0, getId_1.default)();
62
+ (0, getCurrentDateInfo_1.default)();
63
+ (0, getTitle_1.default)();
64
+ (0, listSelectLabels_1.default)();
65
+ (0, listSelectValues_1.default)();
66
+ (0, padWithZeros_1.default)();
67
+ (0, visitCanvasEndpoint_1.default)();
68
+ (0, waitForAtLeastOneElementPresent_1.default)();
43
69
  };
44
70
  exports.default = init;
45
71
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":";;;;;AAAA,sBAAsB;AACtB,6FAAuE;AACvE,6EAAuD;AACvD,mFAA6D;AAC7D,yFAAmE;AACnE,6GAAuF;AACvF,+DAAyC;AACzC,6EAAuD;AACvD,iFAA2D;AAC3D,iEAA2C;AAC3C,uFAAiE;AACjE,6EAAuD;AACvD,mEAA6C;AAC7C,iEAA2C;AAC3C,6FAAuE;AACvE,2FAAqE;AAErE;;;GAGG;AACH,IAAM,IAAI,GAAG;IACX,6BAA6B;IAC7B,IAAA,gCAAsB,GAAE,CAAC;IACzB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,2BAAiB,GAAE,CAAC;IACpB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,6BAAmB,GAAE,CAAC;IACtB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,mBAAS,GAAE,CAAC;IACZ,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,gCAAsB,GAAE,CAAC;IACzB,IAAA,+BAAqB,GAAE,CAAC;IACxB,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,wCAA8B,GAAE,CAAC;IACjC,IAAA,iBAAO,GAAE,CAAC;AACZ,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":";;;;;AAAA,sBAAsB;AACtB,6FAAuE;AACvE,6EAAuD;AACvD,mFAA6D;AAC7D,yFAAmE;AACnE,6GAAuF;AACvF,+DAAyC;AACzC,6EAAuD;AACvD,iFAA2D;AAC3D,iEAA2C;AAC3C,uFAAiE;AACjE,6EAAuD;AACvD,mEAA6C;AAC7C,iEAA2C;AAC3C,2FAAqE;AAErE,eAAe;AACf,+EAAyD;AACzD,+EAAyD;AACzD,iEAA2C;AAC3C,yEAAmD;AACnD,yEAAmD;AACnD,2DAAqC;AACrC,qFAA+D;AAC/D,iEAA2C;AAC3C,iFAA2D;AAC3D,iFAA2D;AAC3D,yEAAmD;AACnD,uFAAiE;AACjE,+GAAyF;AAEzF;;;GAGG;AACH,IAAM,IAAI,GAAG;IACX,6BAA6B;IAC7B,IAAA,gCAAsB,GAAE,CAAC;IACzB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,2BAAiB,GAAE,CAAC;IACpB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,6BAAmB,GAAE,CAAC;IACtB,IAAA,wBAAc,GAAE,CAAC;IACjB,IAAA,mBAAS,GAAE,CAAC;IACZ,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,+BAAqB,GAAE,CAAC;IACxB,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,wCAA8B,GAAE,CAAC;IACjC,IAAA,iBAAO,GAAE,CAAC;IAEV,eAAe;IACf,IAAA,yBAAe,GAAE,CAAC;IAClB,IAAA,yBAAe,GAAE,CAAC;IAClB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,eAAK,GAAE,CAAC;IACR,IAAA,4BAAkB,GAAE,CAAC;IACrB,IAAA,kBAAQ,GAAE,CAAC;IACX,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,0BAAgB,GAAE,CAAC;IACnB,IAAA,sBAAY,GAAE,CAAC;IACf,IAAA,6BAAmB,GAAE,CAAC;IACtB,IAAA,yCAA+B,GAAE,CAAC;AACpC,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Default number of threads per combo
3
+ * @author Yuen Ler Chow
4
+ */
5
+ declare const DEFAULT_THREADS_PER_COMBO = 2;
6
+ export default DEFAULT_THREADS_PER_COMBO;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Default number of threads per combo
5
+ * @author Yuen Ler Chow
6
+ */
7
+ var DEFAULT_THREADS_PER_COMBO = 2;
8
+ exports.default = DEFAULT_THREADS_PER_COMBO;
9
+ //# sourceMappingURL=DEFAULT_THREADS_PER_COMBO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DEFAULT_THREADS_PER_COMBO.js","sourceRoot":"","sources":["../../../start/constants/DEFAULT_THREADS_PER_COMBO.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,IAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC,kBAAe,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Collect all PNG files recursively from a directory
3
+ * @author Yuen Ler Chow
4
+ * @param dir - Directory to search
5
+ * @param prefix - Path prefix for relative paths
6
+ * @returns Array of relative file paths
7
+ */
8
+ declare const collectPngFiles: (dir: string, prefix?: string) => string[];
9
+ export default collectPngFiles;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var fs_1 = __importDefault(require("fs"));
7
+ var path_1 = __importDefault(require("path"));
8
+ /**
9
+ * Collect all PNG files recursively from a directory
10
+ * @author Yuen Ler Chow
11
+ * @param dir - Directory to search
12
+ * @param prefix - Path prefix for relative paths
13
+ * @returns Array of relative file paths
14
+ */
15
+ var collectPngFiles = function (dir, prefix) {
16
+ if (prefix === void 0) { prefix = ''; }
17
+ var files = [];
18
+ var dirEntries = fs_1.default.readdirSync(dir, { withFileTypes: true });
19
+ dirEntries.forEach(function (entry) {
20
+ var fullPath = path_1.default.join(dir, entry.name);
21
+ if (entry.isDirectory()) {
22
+ files.push.apply(files, collectPngFiles(fullPath, path_1.default.join(prefix, entry.name)));
23
+ }
24
+ else if (entry.isFile() && entry.name.toLowerCase().endsWith('.png')) {
25
+ files.push(path_1.default.join(prefix, entry.name));
26
+ }
27
+ });
28
+ return files;
29
+ };
30
+ exports.default = collectPngFiles;
31
+ //# sourceMappingURL=collectPngFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectPngFiles.js","sourceRoot":"","sources":["../../../start/helpers/collectPngFiles.ts"],"names":[],"mappings":";;;;;AAAA,0CAAoB;AACpB,8CAAwB;AAExB;;;;;;GAMG;AACH,IAAM,eAAe,GAAG,UAAC,GAAW,EAAE,MAAW;IAAX,uBAAA,EAAA,WAAW;IAC/C,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAM,UAAU,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,UAAU,CAAC,OAAO,CAAC,UAAC,KAAK;QACvB,IAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,OAAV,KAAK,EAAS,eAAe,CAAC,QAAQ,EAAE,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;QAC1E,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ import Profile from '../types/Profile';
2
+ /**
3
+ * Execute all headless Cypress test combinations in parallel
4
+ * @author Yuen Ler Chow
5
+ * @param opts - object of arguments
6
+ * @param opts.selectedProfiles - Array of selected profiles
7
+ * @param opts.selectedBrowsers - Array of selected browsers
8
+ * @param [opts.threadsPerCombo] - Number of parallel threads per combo (default: 2)
9
+ */
10
+ declare const executeAllHeadlessCombinations: (opts: {
11
+ selectedProfiles: Profile[];
12
+ selectedBrowsers: string[];
13
+ threadsPerCombo?: number;
14
+ }) => Promise<void>;
15
+ export default executeAllHeadlessCombinations;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ /* eslint-disable no-console */
43
+ var fs_1 = __importDefault(require("fs"));
44
+ var path_1 = __importDefault(require("path"));
45
+ // Import helpers
46
+ var runCypressHeadless_1 = __importDefault(require("./runCypressHeadless"));
47
+ var getDateLabeledDir_1 = __importDefault(require("./getDateLabeledDir"));
48
+ var generateReportHomepage_1 = __importDefault(require("./generateReportHomepage"));
49
+ var mergeAllReportsAndGenerateHtml_1 = __importDefault(require("./mergeAllReportsAndGenerateHtml"));
50
+ /**
51
+ * Execute all headless Cypress test combinations in parallel
52
+ * @author Yuen Ler Chow
53
+ * @param opts - object of arguments
54
+ * @param opts.selectedProfiles - Array of selected profiles
55
+ * @param opts.selectedBrowsers - Array of selected browsers
56
+ * @param [opts.threadsPerCombo] - Number of parallel threads per combo (default: 2)
57
+ */
58
+ var executeAllHeadlessCombinations = function (opts) { return __awaiter(void 0, void 0, void 0, function () {
59
+ var selectedProfiles, selectedBrowsers, threadsPerCombo, outputDir, combinations, runPromises, results, reportInfos, passed, failed;
60
+ return __generator(this, function (_a) {
61
+ switch (_a.label) {
62
+ case 0:
63
+ selectedProfiles = opts.selectedProfiles, selectedBrowsers = opts.selectedBrowsers, threadsPerCombo = opts.threadsPerCombo;
64
+ outputDir = (0, getDateLabeledDir_1.default)();
65
+ if (!fs_1.default.existsSync(outputDir)) {
66
+ fs_1.default.mkdirSync(outputDir, { recursive: true });
67
+ }
68
+ console.log("\uD83D\uDCC1 Results will be saved to: ".concat(outputDir, "\n"));
69
+ combinations = [];
70
+ selectedProfiles.forEach(function (profile) {
71
+ selectedBrowsers.forEach(function (browser) {
72
+ combinations.push({
73
+ profileName: profile.profileName,
74
+ browser: browser,
75
+ });
76
+ });
77
+ });
78
+ console.log("\uD83D\uDD04 Running ".concat(combinations.length, " test combination(s) in parallel...\n"));
79
+ runPromises = combinations.map(function (combo) {
80
+ return (0, runCypressHeadless_1.default)({
81
+ profileName: combo.profileName,
82
+ browser: combo.browser,
83
+ outputDir: outputDir,
84
+ numThreads: threadsPerCombo,
85
+ });
86
+ });
87
+ return [4 /*yield*/, Promise.all(runPromises)];
88
+ case 1:
89
+ results = _a.sent();
90
+ // Generate combined HTML report across all profile+browser combinations
91
+ (0, mergeAllReportsAndGenerateHtml_1.default)(outputDir, results);
92
+ reportInfos = results.map(function (result) {
93
+ return {
94
+ profileName: result.profileName,
95
+ browser: result.browser,
96
+ reportPath: result.reportPath || '',
97
+ success: result.success,
98
+ timestamp: new Date().toLocaleString(),
99
+ };
100
+ });
101
+ (0, generateReportHomepage_1.default)(reportInfos, outputDir);
102
+ passed = results.filter(function (r) { return r.success; }).length;
103
+ failed = results.filter(function (r) { return !r.success; }).length;
104
+ console.log('\n═══════════════════════════════════════════════════════════');
105
+ console.log('📊 Execution Summary:');
106
+ console.log(" Total: ".concat(results.length));
107
+ console.log(" \u2705 Passed: ".concat(passed));
108
+ console.log(" \u274C Failed: ".concat(failed));
109
+ console.log(" \uD83D\uDCC4 Report homepage: file://".concat(path_1.default.join(outputDir, 'index.html')));
110
+ console.log('═══════════════════════════════════════════════════════════\n');
111
+ return [2 /*return*/];
112
+ }
113
+ });
114
+ }); };
115
+ exports.default = executeAllHeadlessCombinations;
116
+ //# sourceMappingURL=executeAllHeadlessCombinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeAllHeadlessCombinations.js","sourceRoot":"","sources":["../../../start/helpers/executeAllHeadlessCombinations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import Profile from '../types/Profile';
2
+ /**
3
+ * Execute Cypress tests in either headless or visible mode
4
+ * @author Yuen Ler Chow
5
+ * @param opts - object of arguments
6
+ * @param opts.selectedProfiles - Array of selected profiles
7
+ * @param opts.selectedBrowsers - Array of selected browsers
8
+ * @param opts.isHeadless - Whether to run in headless mode
9
+ * @param [opts.threadsPerCombo] - Number of parallel threads per combo (default: 2)
10
+ */
11
+ declare const executeCypress: (opts: {
12
+ selectedProfiles: Profile[];
13
+ selectedBrowsers: string[];
14
+ isHeadless: boolean;
15
+ threadsPerCombo?: number;
16
+ }) => Promise<void>;
17
+ export default executeCypress;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ var __generator = (this && this.__generator) || function (thisArg, body) {
13
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
14
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15
+ function verb(n) { return function (v) { return step([n, v]); }; }
16
+ function step(op) {
17
+ if (f) throw new TypeError("Generator is already executing.");
18
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
19
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20
+ if (y = 0, t) op = [op[0] & 2, t.value];
21
+ switch (op[0]) {
22
+ case 0: case 1: t = op; break;
23
+ case 4: _.label++; return { value: op[1], done: false };
24
+ case 5: _.label++; y = op[1]; op = [0]; continue;
25
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
26
+ default:
27
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31
+ if (t[2]) _.ops.pop();
32
+ _.trys.pop(); continue;
33
+ }
34
+ op = body.call(thisArg, _);
35
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37
+ }
38
+ };
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ // Import helpers
44
+ var runCypressVisible_1 = __importDefault(require("./runCypressVisible"));
45
+ var executeAllHeadlessCombinations_1 = __importDefault(require("./executeAllHeadlessCombinations"));
46
+ // Import constants
47
+ var DEFAULT_THREADS_PER_COMBO_1 = __importDefault(require("../constants/DEFAULT_THREADS_PER_COMBO"));
48
+ /**
49
+ * Execute Cypress tests in either headless or visible mode
50
+ * @author Yuen Ler Chow
51
+ * @param opts - object of arguments
52
+ * @param opts.selectedProfiles - Array of selected profiles
53
+ * @param opts.selectedBrowsers - Array of selected browsers
54
+ * @param opts.isHeadless - Whether to run in headless mode
55
+ * @param [opts.threadsPerCombo] - Number of parallel threads per combo (default: 2)
56
+ */
57
+ var executeCypress = function (opts) { return __awaiter(void 0, void 0, void 0, function () {
58
+ var selectedProfiles, selectedBrowsers, isHeadless, threadsPerCombo, profileName, error_1;
59
+ return __generator(this, function (_a) {
60
+ switch (_a.label) {
61
+ case 0:
62
+ selectedProfiles = opts.selectedProfiles, selectedBrowsers = opts.selectedBrowsers, isHeadless = opts.isHeadless, threadsPerCombo = opts.threadsPerCombo;
63
+ console.log('\n═══════════════════════════════════════════════════════════');
64
+ console.log('Starting Cypress with the following configuration:');
65
+ console.log("Profile(s): ".concat(selectedProfiles.map(function (p) { return p.profileName; }).join(', ')));
66
+ console.log("Browser(s): ".concat(selectedBrowsers.join(', ')));
67
+ console.log("Headless: ".concat(isHeadless));
68
+ if (isHeadless) {
69
+ console.log("Threads per combo: ".concat(threadsPerCombo !== null && threadsPerCombo !== void 0 ? threadsPerCombo : DEFAULT_THREADS_PER_COMBO_1.default));
70
+ }
71
+ console.log('═══════════════════════════════════════════════════════════\n');
72
+ _a.label = 1;
73
+ case 1:
74
+ _a.trys.push([1, 6, , 7]);
75
+ if (!!isHeadless) return [3 /*break*/, 3];
76
+ profileName = selectedProfiles[0].profileName;
77
+ return [4 /*yield*/, (0, runCypressVisible_1.default)(profileName)];
78
+ case 2:
79
+ _a.sent();
80
+ return [3 /*break*/, 5];
81
+ case 3:
82
+ // Headless mode: run parallel instances for each Profile+Browser combination
83
+ return [4 /*yield*/, (0, executeAllHeadlessCombinations_1.default)({
84
+ selectedProfiles: selectedProfiles,
85
+ selectedBrowsers: selectedBrowsers,
86
+ threadsPerCombo: threadsPerCombo,
87
+ })];
88
+ case 4:
89
+ // Headless mode: run parallel instances for each Profile+Browser combination
90
+ _a.sent();
91
+ _a.label = 5;
92
+ case 5: return [3 /*break*/, 7];
93
+ case 6:
94
+ error_1 = _a.sent();
95
+ console.error('\n❌ Error during execution:', error_1);
96
+ process.exit(1);
97
+ return [3 /*break*/, 7];
98
+ case 7: return [2 /*return*/];
99
+ }
100
+ });
101
+ }); };
102
+ exports.default = executeCypress;
103
+ //# sourceMappingURL=executeCypress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeCypress.js","sourceRoot":"","sources":["../../../start/helpers/executeCypress.ts"],"names":[],"mappings":";AAAA,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAK/B,iBAAiB;AACjB,0EAAoD;AACpD,oGAA8E;AAE9E,mBAAmB;AACnB,qGAA+E;AAE/E;;;;;;;;GAQG;AACH,IAAM,cAAc,GAAG,UACrB,IAKC;;;;;gBAGC,gBAAgB,GAId,IAAI,iBAJU,EAChB,gBAAgB,GAGd,IAAI,iBAHU,EAChB,UAAU,GAER,IAAI,WAFI,EACV,eAAe,GACb,IAAI,gBADS,CACR;gBAET,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,sBAAe,gBAAgB,CAAC,GAAG,CAAC,UAAC,CAAC,IAAO,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;gBAChG,OAAO,CAAC,GAAG,CAAC,sBAAe,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,oBAAa,UAAU,CAAE,CAAC,CAAC;gBACvC,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,6BAAsB,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,mCAAyB,CAAE,CAAC,CAAC;gBACpF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;;;;qBAGvE,CAAC,UAAU,EAAX,wBAAW;gBAEL,WAAW,GAAK,gBAAgB,CAAC,CAAC,CAAC,YAAxB,CAAyB;gBAC5C,qBAAM,IAAA,2BAAiB,EAAC,WAAW,CAAC,EAAA;;gBAApC,SAAoC,CAAC;;;YAErC,6EAA6E;YAC7E,qBAAM,IAAA,wCAA8B,EAAC;oBACnC,gBAAgB,kBAAA;oBAChB,gBAAgB,kBAAA;oBAChB,eAAe,iBAAA;iBAChB,CAAC,EAAA;;gBALF,6EAA6E;gBAC7E,SAIE,CAAC;;;;;gBAGL,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAK,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;;KAEnB,CAAC;AAEF,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Generate HTML report from merged JSON report using mochawesome-report-generator (marge)
3
+ * @author Yuen Ler Chow
4
+ * @param opts - object of arguments
5
+ * @param opts.resultsDir - Results directory
6
+ * @param opts.profileName - Profile name
7
+ * @param opts.browserName - Browser name
8
+ */
9
+ declare const generateHtmlReport: (opts: {
10
+ resultsDir: string;
11
+ profileName: string;
12
+ browserName: string;
13
+ }) => void;
14
+ export default generateHtmlReport;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable no-console */
7
+ var child_process_1 = require("child_process");
8
+ var path_1 = __importDefault(require("path"));
9
+ var fs_1 = require("fs");
10
+ var getRootPath_1 = __importDefault(require("./getRootPath"));
11
+ /**
12
+ * Generate HTML report from merged JSON report using mochawesome-report-generator (marge)
13
+ * @author Yuen Ler Chow
14
+ * @param opts - object of arguments
15
+ * @param opts.resultsDir - Results directory
16
+ * @param opts.profileName - Profile name
17
+ * @param opts.browserName - Browser name
18
+ */
19
+ var generateHtmlReport = function (opts) {
20
+ var resultsDir = opts.resultsDir, profileName = opts.profileName, browserName = opts.browserName;
21
+ var reportDataPath = path_1.default.join(resultsDir, "".concat(profileName, "-").concat(browserName), 'report-data.json');
22
+ var reportDir = path_1.default.join(resultsDir, "".concat(profileName, "-").concat(browserName), 'report');
23
+ var expectedHtmlPath = path_1.default.join(reportDir, 'report-data.html');
24
+ console.log("\n\uD83D\uDCC4 Generate HTML Report Debug for ".concat(profileName, " + ").concat(browserName, ":"));
25
+ console.log(" Report data path: ".concat(reportDataPath));
26
+ console.log(" Report output dir: ".concat(reportDir));
27
+ if (!(0, fs_1.existsSync)(reportDataPath)) {
28
+ var errorMsg = "\u274C ERROR: Report data JSON does not exist: ".concat(reportDataPath);
29
+ console.error(errorMsg);
30
+ throw new Error(errorMsg);
31
+ }
32
+ try {
33
+ var command = "npx marge \"".concat(reportDataPath, "\" --reportDir \"").concat(reportDir, "\"");
34
+ console.log(" Running: ".concat(command));
35
+ console.log("Generating HTML report for ".concat(profileName, " + ").concat(browserName, "..."));
36
+ (0, child_process_1.execSync)(command, {
37
+ stdio: 'inherit',
38
+ cwd: (0, getRootPath_1.default)(),
39
+ });
40
+ // Verify the HTML report was created
41
+ if (!(0, fs_1.existsSync)(expectedHtmlPath)) {
42
+ var errorMsg = "\u274C ERROR: HTML report was not created at: ".concat(expectedHtmlPath);
43
+ console.error(errorMsg);
44
+ throw new Error(errorMsg);
45
+ }
46
+ console.log(" \u2705 HTML report generated successfully at: ".concat(expectedHtmlPath));
47
+ }
48
+ catch (e) {
49
+ console.error("Error generating HTML report for ".concat(profileName, " + ").concat(browserName, ":"), e);
50
+ throw e;
51
+ }
52
+ };
53
+ exports.default = generateHtmlReport;
54
+ //# sourceMappingURL=generateHtmlReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateHtmlReport.js","sourceRoot":"","sources":["../../../start/helpers/generateHtmlReport.ts"],"names":[],"mappings":";;;;;AAAA,+BAA+B;AAC/B,+CAAyC;AACzC,8CAAwB;AACxB,yBAAgC;AAChC,8DAAwC;AAExC;;;;;;;GAOG;AACH,IAAM,kBAAkB,GAAG,UACzB,IAIC;IAEO,IAAA,UAAU,GAA+B,IAAI,WAAnC,EAAE,WAAW,GAAkB,IAAI,YAAtB,EAAE,WAAW,GAAK,IAAI,YAAT,CAAU;IAEtD,IAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAC9B,UAAU,EACV,UAAG,WAAW,cAAI,WAAW,CAAE,EAC/B,kBAAkB,CACnB,CAAC;IACF,IAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CACzB,UAAU,EACV,UAAG,WAAW,cAAI,WAAW,CAAE,EAC/B,QAAQ,CACT,CAAC;IACF,IAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,wDAAuC,WAAW,gBAAM,WAAW,MAAG,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,+BAAwB,cAAc,CAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,gCAAyB,SAAS,CAAE,CAAC,CAAC;IAElD,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;QAChC,IAAM,QAAQ,GAAG,yDAA6C,cAAc,CAAE,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,IAAM,OAAO,GAAG,sBAAc,cAAc,8BAAkB,SAAS,OAAG,CAAC;QAE3E,OAAO,CAAC,GAAG,CAAC,sBAAe,OAAO,CAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qCAA8B,WAAW,gBAAM,WAAW,QAAK,CAAC,CAAC;QAE7E,IAAA,wBAAQ,EAAC,OAAO,EAAE;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,IAAA,qBAAW,GAAE;SACnB,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,CAAC,IAAA,eAAU,EAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,IAAM,QAAQ,GAAG,wDAA4C,gBAAgB,CAAE,CAAC;YAChF,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2DAA+C,gBAAgB,CAAE,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,2CAAoC,WAAW,gBAAM,WAAW,MAAG,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import ReportInfo from '../types/ReportInfo';
2
+ /**
3
+ * Generate an HTML homepage that links to all reports
4
+ * @author Yuen Ler Chow
5
+ * @param reports - Array of report information
6
+ * @param outputDir - The directory where the homepage should be created
7
+ */
8
+ declare const generateReportHomepage: (reports: ReportInfo[], outputDir: string) => void;
9
+ export default generateReportHomepage;
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ /* eslint-disable no-console */
27
+ var fs_1 = __importDefault(require("fs"));
28
+ var path_1 = __importDefault(require("path"));
29
+ var ejs_1 = __importDefault(require("ejs"));
30
+ // Import helpers
31
+ var collectPngFiles_1 = __importDefault(require("./collectPngFiles"));
32
+ /**
33
+ * Generate an HTML homepage that links to all reports
34
+ * @author Yuen Ler Chow
35
+ * @param reports - Array of report information
36
+ * @param outputDir - The directory where the homepage should be created
37
+ */
38
+ var generateReportHomepage = function (reports, outputDir) {
39
+ var homepagePath = path_1.default.join(outputDir, 'index.html');
40
+ var combinedReportPath = path_1.default.join(outputDir, 'all-runs.html');
41
+ var combinedJsonPath = path_1.default.join(outputDir, 'all-report-data.json');
42
+ var hasCombinedReport = fs_1.default.existsSync(combinedReportPath);
43
+ // Try to read combined stats from all-report-data.json
44
+ var combinedTotalTests = null;
45
+ var combinedPassedTests = null;
46
+ if (fs_1.default.existsSync(combinedJsonPath)) {
47
+ try {
48
+ var raw = fs_1.default.readFileSync(combinedJsonPath, 'utf-8');
49
+ var data = JSON.parse(raw);
50
+ var stats = (data && data.stats) || null;
51
+ if (stats && typeof stats.tests === 'number' && typeof stats.passes === 'number') {
52
+ combinedTotalTests = stats.tests;
53
+ combinedPassedTests = stats.passes;
54
+ }
55
+ }
56
+ catch (err) {
57
+ // File exists but couldn't be read/parsed - log warning
58
+ console.warn('⚠️ Could not read combined stats:', err);
59
+ }
60
+ }
61
+ // Try to read per-combination stats from each combo's report-data.json
62
+ reports.forEach(function (report) {
63
+ var comboJsonPath = path_1.default.join(outputDir, "".concat(report.profileName, "-").concat(report.browser), 'report-data.json');
64
+ if (!fs_1.default.existsSync(comboJsonPath)) {
65
+ return;
66
+ }
67
+ try {
68
+ var raw = fs_1.default.readFileSync(comboJsonPath, 'utf-8');
69
+ var data = JSON.parse(raw);
70
+ var stats = (data && data.stats) || null;
71
+ if (stats && typeof stats.tests === 'number' && typeof stats.passes === 'number') {
72
+ // eslint-disable-next-line no-param-reassign
73
+ report.totalTests = stats.tests;
74
+ // eslint-disable-next-line no-param-reassign
75
+ report.passedTests = stats.passes;
76
+ }
77
+ }
78
+ catch (err) {
79
+ // File exists but couldn't be read/parsed - log warning
80
+ console.warn("\u26A0\uFE0F Could not read stats for ".concat(report.profileName, "-").concat(report.browser, ":"), err);
81
+ }
82
+ });
83
+ // Sort reports by profile name, then browser
84
+ var sortedReports = __spreadArray([], reports, true).sort(function (a, b) {
85
+ if (a.profileName !== b.profileName) {
86
+ return a.profileName.localeCompare(b.profileName);
87
+ }
88
+ return a.browser.localeCompare(b.browser);
89
+ });
90
+ // Prepare reports with computed fields for the template
91
+ var templateReports = sortedReports.map(function (report) {
92
+ // Compute relative report path
93
+ var relativeReportPath = null;
94
+ if (report.reportPath && fs_1.default.existsSync(report.reportPath)) {
95
+ relativeReportPath = path_1.default.relative(outputDir, report.reportPath).replace(/\\/g, '/');
96
+ }
97
+ // Collect screenshots
98
+ var screenshots = [];
99
+ var comboScreenshotsDir = path_1.default.join(outputDir, "".concat(report.profileName, "-").concat(report.browser), 'screenshots');
100
+ if (fs_1.default.existsSync(comboScreenshotsDir)) {
101
+ var pngFiles = (0, collectPngFiles_1.default)(comboScreenshotsDir);
102
+ pngFiles.forEach(function (rel) {
103
+ var href = path_1.default
104
+ .relative(outputDir, path_1.default.join(comboScreenshotsDir, rel))
105
+ .replace(/\\/g, '/');
106
+ screenshots.push({ href: href, name: rel });
107
+ });
108
+ }
109
+ return __assign(__assign({}, report), { relativeReportPath: relativeReportPath, screenshots: screenshots });
110
+ });
111
+ // Group by profile
112
+ var reportsByProfile = {};
113
+ templateReports.forEach(function (report) {
114
+ if (!reportsByProfile[report.profileName]) {
115
+ reportsByProfile[report.profileName] = [];
116
+ }
117
+ reportsByProfile[report.profileName].push(report);
118
+ });
119
+ // Calculate summary stats
120
+ var totalRuns = reports.length;
121
+ var passedRuns = reports.filter(function (r) { return r.success; }).length;
122
+ var failedRuns = reports.filter(function (r) { return !r.success; }).length;
123
+ var profileCount = Object.keys(reportsByProfile).length;
124
+ // Load and render EJS template
125
+ var templatePath = path_1.default.join(__dirname, 'reportHomepage.ejs');
126
+ var templateFile = fs_1.default.readFileSync(templatePath, 'utf-8');
127
+ var html = ejs_1.default.render(templateFile, {
128
+ hasCombinedReport: hasCombinedReport,
129
+ combinedTotalTests: combinedTotalTests,
130
+ combinedPassedTests: combinedPassedTests,
131
+ totalRuns: totalRuns,
132
+ passedRuns: passedRuns,
133
+ failedRuns: failedRuns,
134
+ profileCount: profileCount,
135
+ reportsByProfile: reportsByProfile,
136
+ });
137
+ // Write the HTML file
138
+ fs_1.default.writeFileSync(homepagePath, html, 'utf-8');
139
+ console.log("\n\uD83D\uDCC4 Report homepage generated: ".concat(homepagePath));
140
+ };
141
+ exports.default = generateReportHomepage;
142
+ //# sourceMappingURL=generateReportHomepage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateReportHomepage.js","sourceRoot":"","sources":["../../../start/helpers/generateReportHomepage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA+B;AAC/B,0CAAoB;AACpB,8CAAwB;AACxB,4CAAsB;AAEtB,iBAAiB;AACjB,sEAAgD;AAOhD;;;;;GAKG;AACH,IAAM,sBAAsB,GAAG,UAC7B,OAAqB,EACrB,SAAiB;IAEjB,IAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACxD,IAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACjE,IAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAEtE,IAAM,iBAAiB,GAAG,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE5D,uDAAuD;IACvD,IAAI,kBAAkB,GAAkB,IAAI,CAAC;IAC7C,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAC9C,IAAI,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,IAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACvD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAM,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjF,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjC,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;QACrB,IAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAC7B,SAAS,EACT,UAAG,MAAM,CAAC,WAAW,cAAI,MAAM,CAAC,OAAO,CAAE,EACzC,kBAAkB,CACnB,CAAC;QACF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACpD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAM,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjF,6CAA6C;gBAC7C,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;gBAChC,6CAA6C;gBAC7C,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,gDAA+B,MAAM,CAAC,WAAW,cAAI,MAAM,CAAC,OAAO,MAAG,EAAE,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,IAAM,aAAa,GAAG,kBAAI,OAAO,QAAE,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,IAAM,eAAe,GAAyB,aAAa,CAAC,GAAG,CAAC,UAAC,MAAM;QACrE,+BAA+B;QAC/B,IAAI,kBAAkB,GAAkB,IAAI,CAAC;QAC7C,IAAI,MAAM,CAAC,UAAU,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,kBAAkB,GAAG,cAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,sBAAsB;QACtB,IAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,IAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CACnC,SAAS,EACT,UAAG,MAAM,CAAC,WAAW,cAAI,MAAM,CAAC,OAAO,CAAE,EACzC,aAAa,CACd,CAAC;QACF,IAAI,YAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,IAAM,QAAQ,GAAG,IAAA,yBAAe,EAAC,mBAAmB,CAAC,CAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,UAAC,GAAG;gBACnB,IAAM,IAAI,GAAG,cAAI;qBACd,QAAQ,CAAC,SAAS,EAAE,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;qBACxD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,6BACK,MAAM,KACT,kBAAkB,oBAAA,EAClB,WAAW,aAAA,IACX;IACJ,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAM,gBAAgB,GAA4C,EAAE,CAAC;IACrE,eAAe,CAAC,OAAO,CAAC,UAAC,MAAM;QAC7B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;QAC5C,CAAC;QACD,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,IAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAO,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,IAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,IAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC;IAE1D,+BAA+B;IAC/B,IAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAChE,IAAM,YAAY,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAM,IAAI,GAAG,aAAG,CAAC,MAAM,CAAC,YAAY,EAAE;QACpC,iBAAiB,mBAAA;QACjB,kBAAkB,oBAAA;QAClB,mBAAmB,qBAAA;QACnB,SAAS,WAAA;QACT,UAAU,YAAA;QACV,UAAU,YAAA;QACV,YAAY,cAAA;QACZ,gBAAgB,kBAAA;KACjB,CAAC,CAAC;IAEH,sBAAsB;IACtB,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,oDAAmC,YAAY,CAAE,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,kBAAe,sBAAsB,CAAC"}