creevey 0.10.0-beta.1 → 0.10.0-beta.11

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 (137) hide show
  1. package/dist/client/addon/components/Panel.js +2 -2
  2. package/dist/client/addon/components/Panel.js.map +1 -1
  3. package/dist/client/addon/controller.js +4 -5
  4. package/dist/client/addon/controller.js.map +1 -1
  5. package/dist/client/addon/withCreevey.js +18 -34
  6. package/dist/client/addon/withCreevey.js.map +1 -1
  7. package/dist/client/shared/components/ImagesView/SwapView.js +12 -0
  8. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  9. package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -0
  10. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  11. package/dist/client/shared/components/ResultsPage.js +23 -5
  12. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  13. package/dist/client/web/CreeveyApp.js +22 -6
  14. package/dist/client/web/CreeveyApp.js.map +1 -1
  15. package/dist/client/web/CreeveyContext.d.ts +5 -0
  16. package/dist/client/web/CreeveyContext.js +3 -0
  17. package/dist/client/web/CreeveyContext.js.map +1 -1
  18. package/dist/client/web/CreeveyView/SideBar/Search.js +2 -2
  19. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  20. package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -0
  21. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  22. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +49 -6
  23. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  24. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +1 -3
  25. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  26. package/dist/client/web/CreeveyView/SideBar/TestLink.js +1 -3
  27. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  28. package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
  29. package/dist/client/web/KeyboardEventsContext.js +62 -57
  30. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  31. package/dist/client/web/assets/{index-DkmZfG9C.js → index-BE9CL5_G.js} +94 -94
  32. package/dist/client/web/index.html +1 -1
  33. package/dist/creevey.js +13 -5
  34. package/dist/creevey.js.map +1 -1
  35. package/dist/server/config.js +4 -3
  36. package/dist/server/config.js.map +1 -1
  37. package/dist/server/docker.js +2 -2
  38. package/dist/server/docker.js.map +1 -1
  39. package/dist/server/index.js +29 -3
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/server/logger.d.ts +2 -1
  42. package/dist/server/logger.js +7 -3
  43. package/dist/server/logger.js.map +1 -1
  44. package/dist/server/master/api.js +1 -1
  45. package/dist/server/master/api.js.map +1 -1
  46. package/dist/server/master/pool.d.ts +3 -3
  47. package/dist/server/master/pool.js +10 -63
  48. package/dist/server/master/pool.js.map +1 -1
  49. package/dist/server/master/queue.d.ts +13 -0
  50. package/dist/server/master/queue.js +64 -0
  51. package/dist/server/master/queue.js.map +1 -0
  52. package/dist/server/master/runner.d.ts +1 -0
  53. package/dist/server/master/runner.js +4 -1
  54. package/dist/server/master/runner.js.map +1 -1
  55. package/dist/server/master/server.js +1 -1
  56. package/dist/server/master/server.js.map +1 -1
  57. package/dist/server/master/start.js +4 -4
  58. package/dist/server/master/start.js.map +1 -1
  59. package/dist/server/playwright/docker-file.js +12 -2
  60. package/dist/server/playwright/docker-file.js.map +1 -1
  61. package/dist/server/playwright/internal.d.ts +2 -2
  62. package/dist/server/playwright/internal.js +56 -44
  63. package/dist/server/playwright/internal.js.map +1 -1
  64. package/dist/server/playwright/webdriver.js +1 -1
  65. package/dist/server/playwright/webdriver.js.map +1 -1
  66. package/dist/server/providers/browser.js +2 -1
  67. package/dist/server/providers/browser.js.map +1 -1
  68. package/dist/server/providers/hybrid.js +1 -1
  69. package/dist/server/providers/hybrid.js.map +1 -1
  70. package/dist/server/reporter.js +8 -4
  71. package/dist/server/reporter.js.map +1 -1
  72. package/dist/server/selenium/internal.d.ts +2 -3
  73. package/dist/server/selenium/internal.js +116 -90
  74. package/dist/server/selenium/internal.js.map +1 -1
  75. package/dist/server/selenium/selenoid.js +2 -2
  76. package/dist/server/selenium/selenoid.js.map +1 -1
  77. package/dist/server/selenium/webdriver.js +1 -1
  78. package/dist/server/selenium/webdriver.js.map +1 -1
  79. package/dist/server/telemetry.js +7 -3
  80. package/dist/server/telemetry.js.map +1 -1
  81. package/dist/server/utils.d.ts +2 -1
  82. package/dist/server/utils.js +13 -3
  83. package/dist/server/utils.js.map +1 -1
  84. package/dist/server/webdriver.d.ts +2 -3
  85. package/dist/server/webdriver.js +10 -9
  86. package/dist/server/webdriver.js.map +1 -1
  87. package/dist/server/worker/chai-image.d.ts +1 -2
  88. package/dist/server/worker/chai-image.js +4 -3
  89. package/dist/server/worker/chai-image.js.map +1 -1
  90. package/dist/server/worker/start.js +24 -14
  91. package/dist/server/worker/start.js.map +1 -1
  92. package/dist/types.d.ts +30 -11
  93. package/dist/types.js +13 -1
  94. package/dist/types.js.map +1 -1
  95. package/package.json +36 -42
  96. package/src/client/addon/components/Panel.tsx +2 -2
  97. package/src/client/addon/controller.ts +13 -6
  98. package/src/client/addon/withCreevey.ts +25 -13
  99. package/src/client/shared/components/ImagesView/SwapView.tsx +18 -0
  100. package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -0
  101. package/src/client/shared/components/ResultsPage.tsx +28 -7
  102. package/src/client/web/CreeveyApp.tsx +25 -7
  103. package/src/client/web/CreeveyContext.tsx +9 -0
  104. package/src/client/web/CreeveyView/SideBar/Search.tsx +3 -3
  105. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +1 -0
  106. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +37 -6
  107. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +3 -5
  108. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +2 -4
  109. package/src/client/web/KeyboardEventsContext.tsx +61 -73
  110. package/src/creevey.ts +13 -6
  111. package/src/server/config.ts +4 -3
  112. package/src/server/docker.ts +2 -2
  113. package/src/server/index.ts +27 -4
  114. package/src/server/logger.ts +6 -2
  115. package/src/server/master/api.ts +1 -1
  116. package/src/server/master/pool.ts +18 -56
  117. package/src/server/master/queue.ts +64 -0
  118. package/src/server/master/runner.ts +4 -1
  119. package/src/server/master/server.ts +1 -1
  120. package/src/server/master/start.ts +7 -4
  121. package/src/server/playwright/docker-file.ts +14 -2
  122. package/src/server/playwright/internal.ts +76 -49
  123. package/src/server/playwright/webdriver.ts +1 -1
  124. package/src/server/providers/browser.ts +2 -1
  125. package/src/server/providers/hybrid.ts +1 -1
  126. package/src/server/reporter.ts +9 -3
  127. package/src/server/selenium/internal.ts +119 -92
  128. package/src/server/selenium/selenoid.ts +2 -2
  129. package/src/server/selenium/webdriver.ts +1 -1
  130. package/src/server/telemetry.ts +7 -3
  131. package/src/server/utils.ts +14 -4
  132. package/src/server/webdriver.ts +10 -15
  133. package/src/server/worker/chai-image.ts +4 -4
  134. package/src/server/worker/start.ts +25 -16
  135. package/src/types.ts +32 -13
  136. package/.yarnrc.yml +0 -1
  137. package/chromatic.config.json +0 -5
@@ -17,20 +17,20 @@ class CreeveyReporter {
17
17
  // TODO Output in better way, like vitest, maybe
18
18
  constructor(runner, options) {
19
19
  const { sessionId, browserName } = options.reporterOptions.creevey;
20
- const testLogger = loglevel_1.default.getLogger(browserName);
20
+ const testLogger = loglevel_1.default.getLogger(sessionId);
21
21
  loglevel_plugin_prefix_1.default.apply(testLogger, {
22
22
  format(level) {
23
- return `${testLevels[level]} => (${browserName}:${chalk_1.default.gray(sessionId)})`;
23
+ return `[${browserName}:${chalk_1.default.gray(process.pid)}] ${testLevels[level]} => ${chalk_1.default.gray(sessionId)}`;
24
24
  },
25
25
  });
26
26
  runner.on(types_js_1.TEST_EVENTS.TEST_BEGIN, (test) => {
27
27
  testLogger.warn(chalk_1.default.cyan(test.titlePath().join('/')));
28
28
  });
29
29
  runner.on(types_js_1.TEST_EVENTS.TEST_PASS, (test) => {
30
- testLogger.info(chalk_1.default.cyan(test.titlePath().join('/')));
30
+ testLogger.info(chalk_1.default.cyan(test.titlePath().join('/')), chalk_1.default.gray(`(${test.duration} ms)`));
31
31
  });
32
32
  runner.on(types_js_1.TEST_EVENTS.TEST_FAIL, (test, error) => {
33
- testLogger.error(chalk_1.default.cyan(test.titlePath().join('/')), '\n ', this.getErrors(error, (error, imageName) => `${chalk_1.default.bold(imageName ?? browserName)}:${error}`, (error) => error.stack ?? error.message).join('\n '));
33
+ testLogger.error(chalk_1.default.cyan(test.titlePath().join('/')), chalk_1.default.gray(`(${test.duration} ms)`), '\n ', this.getErrors(error, (error, imageName) => `${chalk_1.default.bold(imageName ?? browserName)}:${error}`, (error) => error.stack ?? error.message).join('\n '));
34
34
  });
35
35
  }
36
36
  getErrors(error, imageErrorToString, errorToString) {
@@ -61,12 +61,16 @@ class TeamcityReporter {
61
61
  runner.on(types_js_1.TEST_EVENTS.TEST_BEGIN, (test) => {
62
62
  console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`);
63
63
  });
64
+ runner.on(types_js_1.TEST_EVENTS.TEST_PASS, (test) => {
65
+ console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`);
66
+ });
64
67
  runner.on(types_js_1.TEST_EVENTS.TEST_FAIL, (test, error) => {
65
68
  Object.entries(reporterOptions.images).forEach(([name, image]) => {
66
69
  if (!image)
67
70
  return;
68
71
  const filePath = test
69
72
  .titlePath()
73
+ .slice(0, -1)
70
74
  .concat(name == browserName ? [] : [browserName])
71
75
  .map(this.escape)
72
76
  .join('/');
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/server/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/server/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAA8B;AAC9B,oFAA4C;AAC5C,0CAAqF;AAWrF,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,EAAE,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3B,KAAK,EAAE,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC;CACzB,CAAC;AAEF,MAAa,eAAe;IAC1B,gDAAgD;IAChD,YAAY,MAAoB,EAAE,OAA0D;QAC1F,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACnE,MAAM,UAAU,GAAG,kBAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/C,gCAAM,CAAC,KAAK,CAAC,UAAU,EAAE;YACvB,MAAM,CAAC,KAAK;gBACV,OAAO,IAAI,WAAW,IAAI,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxG,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,UAAU,EAAE,CAAC,IAAc,EAAE,EAAE;YACnD,UAAU,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,EAAE;YAClD,UAAU,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,KAAK,EAAE,EAAE;YACzD,UAAU,CAAC,KAAK,CACd,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACtC,eAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,EACnC,MAAM,EACN,IAAI,CAAC,SAAS,CACZ,KAAK,EACL,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,EACxE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CACxC,CAAC,IAAI,CAAC,MAAM,CAAC,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACO,SAAS,CACf,KAAc,EACd,kBAAiE,EACjE,aAAuC;QAEvC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,CAAC,IAAA,uBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC7C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAnDD,0CAmDC;AAED,MAAa,gBAAgB;IAC3B,YAAY,MAAoB,EAAE,OAA0D;QAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QAExD,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,UAAU,EAAE,CAAC,IAAc,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,EAAE;YAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,sBAAW,CAAC,SAAS,EAAE,CAAC,IAAc,EAAE,KAAY,EAAE,EAAE;YAChE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/D,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,MAAM,QAAQ,GAAG,IAAI;qBAClB,SAAS,EAAE;qBACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACZ,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;qBAChD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;qBAChB,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEb,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;gBACpC,MAAM,CAAC,MAAM,CAAC,IAAuB,CAAC;qBACnC,MAAM,CAAC,oBAAS,CAAC;qBACjB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACpB,OAAO,CAAC,GAAG,CACT,gCAAgC,eAAe,CAAC,SAAS,IAAI,QAAQ,IAAI,QAAQ,cAAc,QAAQ,IAAI,CAC5G,CAAC;oBACF,OAAO,CAAC,GAAG,CACT,qCAAqC,IAAI,CAAC,MAAM,CAC9C,IAAI,CAAC,KAAK,CACX,gCAAgC,QAAQ,IAAI,QAAQ,aAAa,OAAO,CAAC,GAAG,IAAI,CAClF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,mEAAmE;YACnE,0KAA0K;YAE1K,IAAI,eAAe,CAAC,SAAS;gBAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;;gBAElG,OAAO,CAAC,GAAG,CACT,+BAA+B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,CAC7E,KAAK,CAAC,OAAO,CACd,cAAc,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,OAAO,CAAC,GAAG,IAAI,CAC1E,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,CACL,GAAG;aACA,QAAQ,EAAE;YACX,4CAA4C;aAC3C,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CACvB,CAAC;IACJ,CAAC,CAAC;CACH;AAtED,4CAsEC"}
@@ -1,10 +1,9 @@
1
1
  import { Args } from '@storybook/csf';
2
- import Logger from 'loglevel';
3
2
  import { WebDriver } from 'selenium-webdriver';
4
- import { Config, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
3
+ import { Config, StorybookGlobals, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
5
4
  export declare class InternalBrowser {
6
5
  #private;
7
- constructor(browser: WebDriver, port: number, logger: Logger.Logger);
6
+ constructor(browser: WebDriver, port: number, storybookGlobals?: StorybookGlobals);
8
7
  get browser(): WebDriver;
9
8
  closeBrowser(): Promise<void>;
10
9
  takeScreenshot(captureElement?: string | null, ignoreElements?: string | string[] | null): Promise<Buffer>;
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.InternalBrowser = void 0;
7
- const core_events_1 = require("@storybook/core-events");
8
7
  const chalk_1 = __importDefault(require("chalk"));
9
8
  const http_1 = __importDefault(require("http"));
10
9
  const https_1 = __importDefault(require("https"));
@@ -59,15 +58,19 @@ async function openUrlAndWaitForPageSource(browser, url, predicate) {
59
58
  } while (predicate(source));
60
59
  return source;
61
60
  }
62
- async function buildWebdriver(browserName, gridUrl, config, options) {
63
- const browserConfig = config.browsers[browserName];
64
- const { _storybookGlobals, /*customizeBuilder,*/ ...userCapabilities } = browserConfig;
61
+ async function buildWebdriver(browser, gridUrl, config, options) {
62
+ const browserConfig = config.browsers[browser];
63
+ const { /*customizeBuilder,*/ seleniumCapabilities, browserName } = browserConfig;
65
64
  const url = new URL(gridUrl);
66
65
  url.username = url.username ? '********' : '';
67
66
  url.password = url.password ? '********' : '';
68
- logger_js_1.logger.debug(`(${browserName}) Connecting to Selenium ${chalk_1.default.magenta(url.toString())}`);
67
+ (0, logger_js_1.logger)().debug(`Connecting to Selenium ${chalk_1.default.magenta(url.toString())}`);
69
68
  // TODO Define some capabilities explicitly and define typings
70
- const capabilities = new selenium_webdriver_1.Capabilities({ ...userCapabilities, pageLoadStrategy: capabilities_js_1.PageLoadStrategy.EAGER });
69
+ const capabilities = new selenium_webdriver_1.Capabilities({
70
+ browserName,
71
+ ...seleniumCapabilities,
72
+ pageLoadStrategy: capabilities_js_1.PageLoadStrategy.EAGER,
73
+ });
71
74
  const prefs = new selenium_webdriver_1.logging.Preferences();
72
75
  if (options.trace) {
73
76
  for (const type of Object.values(selenium_webdriver_1.logging.Type)) {
@@ -77,47 +80,74 @@ async function buildWebdriver(browserName, gridUrl, config, options) {
77
80
  // TODO Fetch selenium grid capabilities
78
81
  // TODO Validate browsers, versions, and platform
79
82
  // TODO Use `customizeBuilder`
80
- let browser;
83
+ let webdriver;
81
84
  try {
82
- // const ie = new IeOptions();
83
- // const edge = new EdgeOptions();
84
- // const chrome = new ChromeOptions();
85
- // const safari = new SafariOptions();
86
- // const firefox = new FirefoxOptions();
87
- // edge.enableBidi();
88
- // chrome.enableBidi();
89
- // firefox.enableBidi();
90
- browser = await new selenium_webdriver_1.Builder()
91
- // .setIeOptions(ie)
92
- // .setEdgeOptions(edge)
93
- // .setChromeOptions(chrome)
94
- // .setSafariOptions(safari)
95
- // .setFirefoxOptions(firefox)
96
- .usingServer(gridUrl)
97
- .withCapabilities(capabilities)
98
- .setLoggingPrefs(prefs) // NOTE: Should go last
99
- .build();
100
- // const id = await browser.getWindowHandle();
101
- // context = await BrowsingContext(browser, { browsingContextId: id });
85
+ const maxRetries = 5;
86
+ let retries = 0;
87
+ do {
88
+ webdriver = await Promise.race([
89
+ new Promise((resolve) => {
90
+ setTimeout(() => {
91
+ retries += 1;
92
+ resolve(null);
93
+ }, 120_000);
94
+ }),
95
+ (async () => {
96
+ if (retries > 0) {
97
+ (0, logger_js_1.logger)().debug(`Trying to initialize session to Selenium Grid: retried ${retries} of ${maxRetries}`);
98
+ }
99
+ const retry = retries;
100
+ // const ie = new IeOptions();
101
+ // const edge = new EdgeOptions();
102
+ // const chrome = new ChromeOptions();
103
+ // const safari = new SafariOptions();
104
+ // const firefox = new FirefoxOptions();
105
+ // edge.enableBidi();
106
+ // chrome.enableBidi();
107
+ // firefox.enableBidi();
108
+ const driver = await new selenium_webdriver_1.Builder()
109
+ // .setIeOptions(ie)
110
+ // .setEdgeOptions(edge)
111
+ // .setChromeOptions(chrome)
112
+ // .setSafariOptions(safari)
113
+ // .setFirefoxOptions(firefox)
114
+ .usingServer(gridUrl)
115
+ .withCapabilities(capabilities)
116
+ .setLoggingPrefs(prefs) // NOTE: Should go last
117
+ .build();
118
+ // const id = await driver.getWindowHandle();
119
+ // context = await BrowsingContext(driver, { browsingContextId: id });
120
+ if (retry != retries) {
121
+ void driver.quit();
122
+ return null;
123
+ }
124
+ return driver;
125
+ })(),
126
+ ]);
127
+ if (webdriver)
128
+ break;
129
+ } while (retries < maxRetries);
130
+ if (!webdriver)
131
+ throw new Error('Failed to initialize session to Selenium Grid due to many retries');
102
132
  }
103
133
  catch (error) {
104
- logger_js_1.logger.error(`(${browserName}) Failed to start browser:`, error);
134
+ (0, logger_js_1.logger)().error(`Failed to start browser:`, error);
105
135
  return null;
106
136
  }
107
- return browser;
137
+ return webdriver;
108
138
  }
109
139
  class InternalBrowser {
110
140
  #isShuttingDown = false;
111
141
  #browser;
112
142
  #serverHost = null;
113
143
  #serverPort;
114
- #logger;
144
+ #storybookGlobals;
115
145
  #unsubscribe = types_js_1.noop;
116
146
  #keepAliveInterval = null;
117
- constructor(browser, port, logger) {
147
+ constructor(browser, port, storybookGlobals) {
118
148
  this.#browser = browser;
119
149
  this.#serverPort = port;
120
- this.#logger = logger;
150
+ this.#storybookGlobals = storybookGlobals;
121
151
  this.#unsubscribe = (0, messages_js_1.subscribeOn)('shutdown', () => {
122
152
  void this.closeBrowser();
123
153
  });
@@ -142,23 +172,23 @@ class InternalBrowser {
142
172
  async takeScreenshot(captureElement, ignoreElements) {
143
173
  let screenshot;
144
174
  const ignoreStyles = await this.insertIgnoreStyles(ignoreElements);
145
- if (this.#logger.getLevel() <= loglevel_1.default.levels.DEBUG) {
175
+ if ((0, logger_js_1.logger)().getLevel() <= loglevel_1.default.levels.DEBUG) {
146
176
  const { innerWidth, innerHeight } = await this.#browser.executeScript(function () {
147
177
  return {
148
178
  innerWidth: window.innerWidth,
149
179
  innerHeight: window.innerHeight,
150
180
  };
151
181
  });
152
- this.#logger.debug(`Viewport size is: ${innerWidth}x${innerHeight}`);
182
+ (0, logger_js_1.logger)().debug(`Viewport size is: ${innerWidth}x${innerHeight}`);
153
183
  }
154
184
  try {
155
185
  if (!captureElement) {
156
- this.#logger.debug('Capturing viewport screenshot');
186
+ (0, logger_js_1.logger)().debug('Capturing viewport screenshot');
157
187
  screenshot = await this.#browser.takeScreenshot();
158
- this.#logger.debug('Viewport screenshot is captured');
188
+ (0, logger_js_1.logger)().debug('Viewport screenshot is captured');
159
189
  }
160
190
  else {
161
- this.#logger.debug(`Checking is element ${chalk_1.default.cyan(captureElement)} fit into viewport`);
191
+ (0, logger_js_1.logger)().debug(`Checking is element ${chalk_1.default.cyan(captureElement)} fit into viewport`);
162
192
  const rects = await this.#browser.executeScript(function (selector) {
163
193
  window.scrollTo(0, 0); // TODO Maybe we should remove same code from `resetMousePosition`
164
194
  // eslint-disable-next-line no-var
@@ -191,10 +221,10 @@ class InternalBrowser {
191
221
  const isFitIntoViewport = elementRect.width + elementRect.left <= windowRect.width &&
192
222
  elementRect.height + elementRect.top <= windowRect.height;
193
223
  if (isFitIntoViewport) {
194
- this.#logger.debug(`Capturing ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
224
+ (0, logger_js_1.logger)().debug(`Capturing ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
195
225
  }
196
226
  else
197
- this.#logger.debug(`Capturing composite screenshot image of ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
227
+ (0, logger_js_1.logger)().debug(`Capturing composite screenshot image of ${chalk_1.default.cyan(captureElement)} with size: ${elementRect.width}x${elementRect.height}`);
198
228
  // const element = await browser.findElement(By.css(captureElement));
199
229
  // screenshot = isFitIntoViewport
200
230
  // ? context
@@ -206,7 +236,7 @@ class InternalBrowser {
206
236
  ? await this.#browser.findElement(selenium_webdriver_1.By.css(captureElement)).takeScreenshot()
207
237
  : // TODO pointer-events: none, need to research
208
238
  await this.takeCompositeScreenshot(windowRect, elementRect);
209
- this.#logger.debug(`${chalk_1.default.cyan(captureElement)} is captured`);
239
+ (0, logger_js_1.logger)().debug(`${chalk_1.default.cyan(captureElement)} is captured`);
210
240
  }
211
241
  }
212
242
  finally {
@@ -223,9 +253,10 @@ class InternalBrowser {
223
253
  }
224
254
  async selectStory(id, waitForReady = false) {
225
255
  // NOTE: Global variables might be reset after hot reload. I think it's workaround, maybe we need better solution
256
+ await this.updateStorybookGlobals();
226
257
  await this.updateBrowserGlobalVariables();
227
258
  await this.resetMousePosition();
228
- this.#logger.debug(`Triggering 'SetCurrentStory' event with storyId ${chalk_1.default.magenta(id)}`);
259
+ (0, logger_js_1.logger)().debug(`Triggering 'SetCurrentStory' event with storyId ${chalk_1.default.magenta(id)}`);
229
260
  const result = await this.#browser.executeAsyncScript(function (storyId, shouldWaitForReady, callback) {
230
261
  if (typeof window.__CREEVEY_SELECT_STORY__ == 'undefined') {
231
262
  callback([
@@ -247,7 +278,7 @@ class InternalBrowser {
247
278
  storyId,
248
279
  updatedArgs,
249
280
  });
250
- }, story.id, updatedArgs, core_events_1.UPDATE_STORY_ARGS, core_events_1.STORY_RENDERED);
281
+ }, story.id, updatedArgs, types_js_1.StorybookEvents.UPDATE_STORY_ARGS, types_js_1.StorybookEvents.STORY_RENDERED);
251
282
  }
252
283
  async loadStoriesFromBrowser() {
253
284
  const stories = await this.#browser.executeAsyncScript(function (callback) {
@@ -258,14 +289,14 @@ class InternalBrowser {
258
289
  return stories;
259
290
  }
260
291
  async afterTest(test) {
261
- if (this.#logger.getLevel() === loglevel_1.default.levels.TRACE) {
292
+ if ((0, logger_js_1.logger)().getLevel() === loglevel_1.default.levels.TRACE) {
262
293
  const output = [];
263
294
  const types = await this.#browser.manage().logs().getAvailableLogTypes();
264
295
  for (const type of types) {
265
296
  const logs = await this.#browser.manage().logs().get(type);
266
297
  output.push(logs.map((log) => JSON.stringify(log.toJSON(), null, 2)).join('\n'));
267
298
  }
268
- this.#logger.debug('----------', (0, utils_js_1.getTestPath)(test).join('/'), '----------\n', output.join('\n'), '\n----------------------------------------------------------------------------------------------------');
299
+ (0, logger_js_1.logger)().debug('----------', (0, utils_js_1.getTestPath)(test).join('/'), '----------\n', output.join('\n'), '\n----------------------------------------------------------------------------------------------------');
269
300
  }
270
301
  }
271
302
  static async getBrowser(browserName, gridUrl, config, options) {
@@ -275,7 +306,7 @@ class InternalBrowser {
275
306
  const browser = await buildWebdriver(browserName, gridUrl, config, options);
276
307
  if (!browser)
277
308
  return null;
278
- const internalBrowser = new InternalBrowser(browser, options.port, logger_js_1.logger);
309
+ const internalBrowser = new InternalBrowser(browser, options.port, _storybookGlobals);
279
310
  try {
280
311
  if (utils_js_1.isShuttingDown.current)
281
312
  return null;
@@ -284,22 +315,21 @@ class InternalBrowser {
284
315
  gridUrl,
285
316
  viewport,
286
317
  storybookUrl: address,
287
- storybookGlobals: _storybookGlobals,
288
318
  resolveStorybookUrl: config.resolveStorybookUrl,
289
319
  });
290
320
  return done ? internalBrowser : null;
291
321
  }
292
322
  catch (originalError) {
293
323
  void internalBrowser.closeBrowser();
294
- const message = originalError instanceof Error ? originalError.message : originalError;
295
- const error = new Error(`Can't load storybook root page by URL ${await browser.getCurrentUrl()}: ${message}`);
324
+ const message = originalError instanceof Error ? originalError.message : (originalError ?? 'Unknown error');
325
+ const error = new Error(`Can't load storybook root page: ${message}`);
296
326
  if (originalError instanceof Error)
297
327
  error.stack = originalError.stack;
298
- logger_js_1.logger.error(error);
328
+ (0, logger_js_1.logger)().error(error);
299
329
  return null;
300
330
  }
301
331
  }
302
- async init({ browserName, gridUrl, viewport, storybookUrl, storybookGlobals, resolveStorybookUrl, }) {
332
+ async init({ browserName, gridUrl, viewport, storybookUrl, resolveStorybookUrl, }) {
303
333
  const sessionId = (await this.#browser.getSession()).getId();
304
334
  let browserHost = '';
305
335
  try {
@@ -310,19 +340,18 @@ class InternalBrowser {
310
340
  catch {
311
341
  /* noop */
312
342
  }
313
- this.#logger = loglevel_1.default.getLogger(sessionId);
314
- loglevel_plugin_prefix_1.default.apply(this.#logger, {
343
+ loglevel_plugin_prefix_1.default.apply((0, logger_js_1.logger)(), {
315
344
  format(level) {
316
345
  const levelColor = logger_js_1.colors[level.toUpperCase()];
317
- return `[${browserName}:${chalk_1.default.gray(sessionId)}] ${levelColor(level)} =>`;
346
+ return `[${browserName}:${chalk_1.default.gray(process.pid)}] ${levelColor(level)} => ${chalk_1.default.gray(sessionId)}`;
318
347
  },
319
348
  });
320
- this.#logger.debug(`Connected successful with ${chalk_1.default.green(browserHost)}`);
349
+ (0, logger_js_1.logger)().debug(`Connected successful with ${chalk_1.default.green(browserHost)}`);
321
350
  return await (0, utils_js_1.runSequence)([
322
- () => this.#browser.manage().setTimeouts({ pageLoad: 10000, script: 60000 }),
351
+ () => this.#browser.manage().setTimeouts({ pageLoad: 60000, script: 60000 }),
323
352
  () => this.openStorybookPage(storybookUrl, resolveStorybookUrl),
324
353
  () => this.waitForStorybook(),
325
- () => this.updateStorybookGlobals(storybookGlobals),
354
+ () => this.updateStorybookGlobals(),
326
355
  () => this.resolveCreeveyHost(),
327
356
  () => this.updateBrowserGlobalVariables(),
328
357
  // NOTE: Selenium draws automation toolbar with some delay after webdriver initialization
@@ -340,27 +369,28 @@ class InternalBrowser {
340
369
  }
341
370
  try {
342
371
  if (resolver) {
343
- this.#logger.debug('Resolving storybook url with custom resolver');
372
+ (0, logger_js_1.logger)().debug('Resolving storybook url with custom resolver');
344
373
  const resolvedUrl = await resolver();
345
- this.#logger.debug(`Resolver storybook url ${resolvedUrl}`);
374
+ (0, logger_js_1.logger)().debug(`Resolver storybook url ${resolvedUrl}`);
346
375
  await this.#browser.get((0, webdriver_js_1.appendIframePath)(resolvedUrl));
347
376
  }
348
377
  else {
378
+ // TODO Pageload timeout 10s
349
379
  // NOTE: getUrlChecker already calls `browser.get` so we don't need another one
350
- await (0, webdriver_js_1.resolveStorybookUrl)((0, webdriver_js_1.appendIframePath)(storybookUrl), (url) => this.checkUrl(url), this.#logger);
380
+ await (0, webdriver_js_1.resolveStorybookUrl)((0, webdriver_js_1.appendIframePath)(storybookUrl), (url) => this.checkUrl(url));
351
381
  }
352
382
  }
353
383
  catch (error) {
354
- this.#logger.error('Failed to resolve storybook URL', error instanceof Error ? error.message : '');
384
+ (0, logger_js_1.logger)().error('Failed to resolve storybook URL', error instanceof Error ? error.message : '');
355
385
  throw error;
356
386
  }
357
387
  }
358
388
  async checkUrl(url) {
359
389
  try {
360
390
  // NOTE: Before trying a new url, reset the current one
361
- this.#logger.debug(`Opening ${chalk_1.default.magenta('about:blank')} page`);
391
+ (0, logger_js_1.logger)().debug(`Opening ${chalk_1.default.magenta('about:blank')} page`);
362
392
  await openUrlAndWaitForPageSource(this.#browser, 'about:blank', (source) => !source.includes('<body></body>'));
363
- this.#logger.debug(`Opening ${chalk_1.default.magenta(url)} and checking the page source`);
393
+ (0, logger_js_1.logger)().debug(`Opening ${chalk_1.default.magenta(url)} and checking the page source`);
364
394
  const source = await openUrlAndWaitForPageSource(this.#browser, url,
365
395
  // NOTE: IE11 can return only `head` without body
366
396
  (source) => source.length == 0 || !/<body([^>]*>).+<\/body>/s.test(source));
@@ -369,7 +399,7 @@ class InternalBrowser {
369
399
  // because other add significant delay and some of them don't work in earlier chrome versions
370
400
  // Browsers always load page successful even it's failed
371
401
  // So we just check `root` element
372
- this.#logger.debug(`Checking ${chalk_1.default.cyan(`#${webdriver_js_1.storybookRootID}`)} existence on ${chalk_1.default.magenta(url)}`);
402
+ (0, logger_js_1.logger)().debug(`Checking ${chalk_1.default.cyan(`#${webdriver_js_1.storybookRootID}`)} existence on ${chalk_1.default.magenta(url)}`);
373
403
  return source.includes(`id="${webdriver_js_1.storybookRootID}"`);
374
404
  }
375
405
  catch {
@@ -377,7 +407,7 @@ class InternalBrowser {
377
407
  }
378
408
  }
379
409
  async waitForStorybook() {
380
- this.#logger.debug('Waiting for `setStories` event to make sure that storybook is initiated');
410
+ (0, logger_js_1.logger)().debug('Waiting for `setStories` event to make sure that storybook is initiated');
381
411
  const isTimeout = await Promise.race([
382
412
  new Promise((resolve) => {
383
413
  setTimeout(() => {
@@ -387,22 +417,17 @@ class InternalBrowser {
387
417
  (async () => {
388
418
  let wait = true;
389
419
  do {
390
- try {
391
- // TODO Research a different way to ensure storybook is initiated
392
- wait = await this.#browser.executeScript(function (SET_GLOBALS) {
393
- // TODO Maybe use
394
- // import { global } from '@storybook/global';
395
- // global.IS_STORYBOOK
396
- if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined')
397
- return true;
398
- if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined)
399
- return true;
400
- return false;
401
- }, core_events_1.SET_GLOBALS);
402
- }
403
- catch (e) {
404
- this.#logger.debug('An error has been caught during the script:', e);
405
- }
420
+ // TODO Research a different way to ensure storybook is initiated
421
+ wait = await this.#browser.executeScript(function (SET_GLOBALS) {
422
+ // TODO Maybe use
423
+ // import { global } from '@storybook/global';
424
+ // global.IS_STORYBOOK
425
+ if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined')
426
+ return true;
427
+ if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined)
428
+ return true;
429
+ return false;
430
+ }, types_js_1.StorybookEvents.SET_GLOBALS);
406
431
  } while (wait);
407
432
  return false;
408
433
  })(),
@@ -411,13 +436,13 @@ class InternalBrowser {
411
436
  if (isTimeout)
412
437
  throw new Error('Failed to wait `setStories` event');
413
438
  }
414
- async updateStorybookGlobals(globals) {
415
- if (!globals)
439
+ async updateStorybookGlobals() {
440
+ if (!this.#storybookGlobals)
416
441
  return;
417
- this.#logger.debug('Applying storybook globals');
442
+ (0, logger_js_1.logger)().debug('Applying storybook globals');
418
443
  await this.#browser.executeScript(function (globals) {
419
444
  window.__CREEVEY_UPDATE_GLOBALS__(globals);
420
- }, globals);
445
+ }, this.#storybookGlobals);
421
446
  }
422
447
  async resolveCreeveyHost() {
423
448
  const addresses = (0, webdriver_js_1.getAddresses)();
@@ -464,7 +489,7 @@ class InternalBrowser {
464
489
  innerHeight: window.innerHeight,
465
490
  };
466
491
  });
467
- this.#logger.debug(`Resizing viewport from ${innerWidth}x${innerHeight} to ${viewport.width}x${viewport.height}`);
492
+ (0, logger_js_1.logger)().debug(`Resizing viewport from ${innerWidth}x${innerHeight} to ${viewport.width}x${viewport.height}`);
468
493
  const dWidth = windowRect.width - innerWidth;
469
494
  const dHeight = windowRect.height - innerHeight;
470
495
  await this.#browser
@@ -476,7 +501,7 @@ class InternalBrowser {
476
501
  });
477
502
  }
478
503
  async resetMousePosition() {
479
- this.#logger.debug('Resetting mouse position to the top-left corner');
504
+ (0, logger_js_1.logger)().debug('Resetting mouse position to the top-left corner');
480
505
  const browserName = (await this.#browser.getCapabilities()).getBrowserName();
481
506
  const [browserVersion] = (await this.#browser.getCapabilities()).getBrowserVersion()?.split('.') ??
482
507
  (await this.#browser.getCapabilities()).get('version')?.split('.') ??
@@ -502,8 +527,9 @@ class InternalBrowser {
502
527
  })
503
528
  .perform();
504
529
  }
505
- else if (browserName == 'firefox' && browserVersion == '61') {
530
+ else if (browserName == 'firefox') {
506
531
  // NOTE Firefox for some reason moving by 0 x 0 move cursor in bottom left corner :sad:
532
+ // NOTE In recent versions (eg 128.0) moving by 0 x 0 doesn't work at all
507
533
  await this.#browser.actions().move({ origin: selenium_webdriver_1.Origin.VIEWPORT, x: 0, y: 1 }).perform();
508
534
  }
509
535
  else {
@@ -515,7 +541,7 @@ class InternalBrowser {
515
541
  const ignoreSelectors = Array.prototype.concat(ignoreElements).filter(Boolean);
516
542
  if (!ignoreSelectors.length)
517
543
  return null;
518
- this.#logger.debug('Hiding ignored elements before capturing');
544
+ (0, logger_js_1.logger)().debug('Hiding ignored elements before capturing');
519
545
  return await this.#browser.executeScript(function (ignoreSelectors) {
520
546
  return window.__CREEVEY_INSERT_IGNORE_STYLES__(ignoreSelectors);
521
547
  }, ignoreSelectors);
@@ -576,7 +602,7 @@ class InternalBrowser {
576
602
  }
577
603
  async removeIgnoreStyles(ignoreStyles) {
578
604
  if (ignoreStyles) {
579
- this.#logger.debug('Revert hiding ignored elements');
605
+ (0, logger_js_1.logger)().debug('Revert hiding ignored elements');
580
606
  await this.#browser.executeScript(function (ignoreStyles) {
581
607
  window.__CREEVEY_REMOVE_IGNORE_STYLES__(ignoreStyles);
582
608
  }, ignoreStyles);
@@ -608,7 +634,7 @@ class InternalBrowser {
608
634
  this.#keepAliveInterval = setInterval(() => {
609
635
  // NOTE Simple way to keep session alive
610
636
  void this.#browser.getCurrentUrl().then((url) => {
611
- logger_js_1.logger.debug('current url', chalk_1.default.magenta(url));
637
+ (0, logger_js_1.logger)().debug('current url', chalk_1.default.magenta(url));
612
638
  });
613
639
  }, 10 * 1000);
614
640
  }