renovate 42.19.10 → 42.20.1

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 (122) hide show
  1. package/dist/config/migrate-validate.js +1 -2
  2. package/dist/config/migrate-validate.js.map +1 -1
  3. package/dist/config/migration.js +0 -1
  4. package/dist/config/migration.js.map +1 -1
  5. package/dist/config/options/index.js +1 -1
  6. package/dist/config/options/index.js.map +1 -1
  7. package/dist/instrumentation/index.js +3 -4
  8. package/dist/instrumentation/index.js.map +1 -1
  9. package/dist/modules/datasource/crate/index.js +1 -1
  10. package/dist/modules/datasource/crate/index.js.map +1 -1
  11. package/dist/modules/datasource/docker/common.js +6 -0
  12. package/dist/modules/datasource/docker/common.js.map +1 -1
  13. package/dist/modules/datasource/docker/schema.js +1 -1
  14. package/dist/modules/datasource/docker/schema.js.map +1 -1
  15. package/dist/modules/datasource/go/index.js +1 -2
  16. package/dist/modules/datasource/go/index.js.map +1 -1
  17. package/dist/modules/datasource/maven/index.js +2 -2
  18. package/dist/modules/datasource/maven/index.js.map +1 -1
  19. package/dist/modules/datasource/maven/util.js +2 -2
  20. package/dist/modules/datasource/maven/util.js.map +1 -1
  21. package/dist/modules/manager/bazel/artifacts.js +2 -2
  22. package/dist/modules/manager/bazel/artifacts.js.map +1 -1
  23. package/dist/modules/manager/maven-wrapper/artifacts.js +2 -2
  24. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  25. package/dist/modules/manager/npm/extract/common/package-file.js +2 -2
  26. package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
  27. package/dist/modules/manager/npm/extract/yarn.js +2 -2
  28. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  29. package/dist/modules/manager/npm/post-update/index.js +14 -18
  30. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  31. package/dist/modules/manager/npm/post-update/npm.js +4 -4
  32. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  33. package/dist/modules/manager/npm/post-update/pnpm.js +4 -4
  34. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  35. package/dist/modules/manager/npm/post-update/yarn.js +6 -6
  36. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  37. package/dist/modules/manager/npm/update/dependency/index.js +3 -4
  38. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  39. package/dist/modules/manager/npm/update/dependency/pnpm.js +2 -2
  40. package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
  41. package/dist/modules/manager/npm/update/index.js +1 -0
  42. package/dist/modules/manager/npm/update/index.js.map +1 -1
  43. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js +8 -8
  44. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js.map +1 -1
  45. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js +2 -2
  46. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js.map +1 -1
  47. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js +5 -5
  48. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js.map +1 -1
  49. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js +4 -4
  50. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js.map +1 -1
  51. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js +2 -2
  52. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js.map +1 -1
  53. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +2 -2
  54. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
  55. package/dist/modules/manager/npm/update/package-version/index.js +1 -2
  56. package/dist/modules/manager/npm/update/package-version/index.js.map +1 -1
  57. package/dist/modules/manager/npm/utils.js +8 -8
  58. package/dist/modules/manager/npm/utils.js.map +1 -1
  59. package/dist/modules/platform/azure/azure-helper.js +2 -2
  60. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  61. package/dist/modules/platform/azure/index.js +14 -14
  62. package/dist/modules/platform/azure/index.js.map +1 -1
  63. package/dist/modules/platform/bitbucket/comments.js +4 -4
  64. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  65. package/dist/modules/platform/bitbucket/index.js +31 -31
  66. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  67. package/dist/modules/platform/bitbucket/utils.js +2 -2
  68. package/dist/modules/platform/bitbucket/utils.js.map +1 -1
  69. package/dist/modules/platform/bitbucket-server/index.js +32 -34
  70. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  71. package/dist/modules/platform/bitbucket-server/utils.js +2 -4
  72. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  73. package/dist/modules/platform/codecommit/codecommit-client.js +6 -6
  74. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  75. package/dist/modules/platform/codecommit/index.js +24 -24
  76. package/dist/modules/platform/codecommit/index.js.map +1 -1
  77. package/dist/modules/platform/gitea/index.js +4 -4
  78. package/dist/modules/platform/gitea/index.js.map +1 -1
  79. package/dist/modules/platform/github/index.js +68 -68
  80. package/dist/modules/platform/github/index.js.map +1 -1
  81. package/dist/modules/platform/github/massage-markdown-links.js +2 -2
  82. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  83. package/dist/modules/platform/github/pr.js +2 -2
  84. package/dist/modules/platform/github/pr.js.map +1 -1
  85. package/dist/modules/platform/github/schema.js +1 -2
  86. package/dist/modules/platform/github/schema.js.map +1 -1
  87. package/dist/modules/platform/gitlab/index.js +29 -30
  88. package/dist/modules/platform/gitlab/index.js.map +1 -1
  89. package/dist/modules/platform/utils/pr-body.js +7 -3
  90. package/dist/modules/platform/utils/pr-body.js.map +1 -1
  91. package/dist/proxy.js +1 -2
  92. package/dist/proxy.js.map +1 -1
  93. package/dist/util/cache/package/index.js +2 -2
  94. package/dist/util/cache/package/index.js.map +1 -1
  95. package/dist/util/cache/package/namespaces.js +1 -1
  96. package/dist/util/cache/package/namespaces.js.map +1 -1
  97. package/dist/util/git/error.js +5 -4
  98. package/dist/util/git/error.js.map +1 -1
  99. package/dist/util/git/index.js +10 -12
  100. package/dist/util/git/index.js.map +1 -1
  101. package/dist/util/git/private-key.js +2 -0
  102. package/dist/util/git/private-key.js.map +1 -1
  103. package/dist/util/http/bitbucket.js +1 -2
  104. package/dist/util/http/bitbucket.js.map +1 -1
  105. package/dist/util/http/cache/abstract-http-cache-provider.js +2 -2
  106. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  107. package/dist/util/http/http.js +1 -1
  108. package/dist/util/http/http.js.map +1 -1
  109. package/dist/util/stats.js +1 -1
  110. package/dist/util/stats.js.map +1 -1
  111. package/dist/workers/global/config/parse/codespaces.js +1 -2
  112. package/dist/workers/global/config/parse/codespaces.js.map +1 -1
  113. package/dist/workers/repository/update/branch/auto-replace.js +4 -2
  114. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  115. package/dist/workers/repository/update/branch/automerge.js +4 -1
  116. package/dist/workers/repository/update/branch/automerge.js.map +1 -1
  117. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +1 -0
  118. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  119. package/dist/workers/repository/update/branch/index.js +16 -8
  120. package/dist/workers/repository/update/branch/index.js.map +1 -1
  121. package/package.json +3 -2
  122. package/renovate-schema.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/azure/index.ts"],"names":[],"mappings":";;;AA2FA,oCAwBC;AAED,4BAOC;AAED,gCAoEC;AAED,kCAOC;AAED,4BA2DC;AAED,8BA4BC;AAED,sBAwBC;AAED,wBA4CC;AAED,kCAWC;AAgCD,oDAYC;AAED,0CAyCC;AAgBD,4BAmFC;AAED,4BAuEC;AAED,sCA8DC;AAED,oDAwCC;AAQD,0CA4BC;AAED,0BAyEC;AAED,0CAaC;AAED,sCAEC;AAGD,8BAIC;AAGD,kCAIC;AAGD,gDAEC;AAGD,oCAIC;AAwFD,oCAWC;AAOD,oCAsBC;AAED,kCAOC;;AA7gCD,8CAA6C;AAC7C,yCAA4C;AAQ5C,wFAK2D;AAC3D,sEAI2C;AAC3C,4CAAyC;AAEzC,mFAA8E;AAC9E,iDAAiD;AACjD,+DAAyC;AACzC,4EAAsD;AACtD,+CAA4C;AAC5C,qDAAkD;AAClD,2CAAwD;AAiBxD,kCAA4D;AAC5D,8CAAiD;AACjD,sEAAgD;AAChD,oEAA8C;AAE9C,mCAAsC;AACtC,iCASgB;AAoBhB,IAAI,MAAM,GAAW,EAAS,CAAC;AAE/B,MAAM,QAAQ,GAGV;IACF,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEW,QAAA,EAAE,GAAG,OAAO,CAAC;AAE1B,SAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,QAAQ,GACO;IACf,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,iFAAiF;IACjF,MAAM,GAAG,GAAG;QACV,QAAQ,EAAE,IAAA,yBAAmB,EAAC,QAAQ,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,cAAc,GAAmB;QACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC;AAEM,KAAK,UAAU,QAAQ;IAC5B,eAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;IAClD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAEM,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,QAAiB,EACjB,WAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAE5C,IAAI,MAA0B,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAA,oBAAa,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAyB,CAAC;QAC9B,MAAM,iBAAiB,GAAyB;YAC9C,OAAO,EAAE,WAAW;SACU,CAAC;QACjC,sFAAsF;QACtF,KAAK,MAAM,WAAW,IAAI,CAAC,iCAAc,CAAC,GAAG,EAAE,iCAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;YAE5C,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAC9B,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,iBAAiB;YAC5B,SAAS,EAAE,yBAAyB;YACpC,SAAS,EAAE,wBAAwB;YACnC,SAAS,EAAE,WAAW;YACtB,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAAE,oBAAoB;YACjE,IAAI,CACL,CAAC;YACF,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,6BAA6B;YACtC,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CACV,SAAS,QAAQ,iBAAiB,QAAQ,SAAS,WAAW,KAAK,WAAW,EAAE,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,qBAAqB,CAAC,CAAC;QACnC,IACE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,kDAAkD,CAAC,EACzE,CAAC;YACD,eAAM,CAAC,KAAK,CACV,kGAAkG,CACnG,CAAC;YACF,MAAM,IAAI,uCAAiB,CAAC,GAAG,EAAE,UAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1D,MAAM,IAAI,uCAAiB,CAAC,GAAG,EAAE,UAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YACpE,MAAM,IAAI,uCAAiB,CAAC,GAAG,EAAE,UAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,oBAAoB;AACxB,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,QAAiB,EACjB,WAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,OAAO,IAAA,kBAAS,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,EAC7B,UAAU,EACV,eAAe,EACf,qBAAqB,GACV;IACX,eAAM,CAAC,KAAK,CAAC,aAAa,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,GAAG,EAAE,UAAU,EAAY,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,IAAA,oBAAa,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,kCAAkC,CAAC,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,qCAAoB,CAAC,CAAC;IACxC,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,oCAAmB,CAAC,CAAC;IACvC,CAAC;IACD,qBAAqB;IACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iCAAgB,CAAC,CAAC;IACpC,CAAC,CAAC,oBAAoB;IACtB,cAAc;IACd,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAG,CAAC;IAEzB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAQ,CAAC,IAAK,CAAC;IACrC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,eAAM,CAAC,KAAK,CAAC,GAAG,UAAU,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,eAAM,CAAC,KAAK,CAAC,GAAG,UAAU,qBAAqB,aAAa,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;IAE/B,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,GAAG,EAAE,QAAQ,CAAC,QAAQ;KACvB,CAAC,CAAC;IACH,uBAAuB;IACvB,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,QAAS,GAAG,kBAAkB,CAC1D,WAAW,CACZ,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IACxC,MAAM,GAAG,CAAC,QAAQ,CAAC;QACjB,GAAG,MAAM;QACT,GAAG;QACH,cAAc,EAAE,IAAA,+BAAwB,EAAC,IAAI,CAAC;QAC9C,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,GAAe;QAC7B,aAAa;QACb,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,IAAA,sBAAe,EAAC,IAAI,CAAC,EAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC;KAC9D,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,eAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,GAAG,GAAqB,EAAE,CAAC;QAC/B,IAAI,UAA4B,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,GAAG,CAAC;YACF,UAAU,GAAG,MAAM,WAAW,CAAC,eAAe,CAC5C,MAAM,CAAC,MAAM,EACb;gBACE,MAAM,EAAE,CAAC;gBACT,+DAA+D;gBAC/D,kBAAkB,EAAE,MAAM,CAAC,OAAO;aACnC,EACD,MAAM,CAAC,OAAO,EACd,CAAC,EACD,IAAI,EACJ,GAAG,CACJ,CAAC;YACF,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,IAAI,GAAG,CAAC;QACd,CAAC,QAAQ,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAEhC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,0BAAmB,CAAC,CAAC;QAC7C,eAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,KAAK,CAAC,aAAqB;IAC/C,eAAM,CAAC,KAAK,CAAC,SAAS,aAAa,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CACxC,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,oBAAoB,CACnD,MAAM,CAAC,MAAM,EACb,aAAa,CACd,CAAC;IAEF,OAAO,CAAC,MAAM,GAAG,MAAM;SACpB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;SAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,MAAM,CAAC,aAAQ,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,EAC3B,UAAU,EACV,OAAO,EACP,KAAK,GAAG,KAAK,EACb,YAAY,GACC;IACb,IAAI,WAAW,GAAS,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAE9B,WAAW,GAAG,GAAG,CAAC,MAAM,CACtB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,IAAA,uBAAgB,EAAC,UAAU,CAAC,CAC9D,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAC7D,CAAC;QACJ,CAAC;QAED,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,KAAK;gBACR,8CAA8C;gBAC9C,MAAM;YACR,KAAK,OAAO;gBACV,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;gBAClE,MAAM;YACR;gBACE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACjE,MAAM;QACV,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC;QAC1E,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,YAAqB;IAErB,eAAM,CAAC,KAAK,CAAC,eAAe,UAAU,KAAK,YAAY,GAAG,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC;QAC9B,UAAU;QACV,KAAK,EAAE,MAAM;QACb,YAAY;KACb,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CACxC,MAAM,CAAC,MAAM;IAEb,+BAA+B;IAC/B,IAAA,0CAAmC,EAAC,UAAU,CAAE,CACjD,CAAC;IACF,8DAA8D;IAC9D,OAAO,WAAW,CAAC,WAAW;IAC5B,cAAc;IACd,MAAM,CAAC,MAAO,CAAC,QAAS,EACxB,MAAM,CAAC,MAAM,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,4BAA4B,GAAyC;IACzE,CAAC,iCAAc,CAAC,SAAS,CAAC,EAAE,OAAO;IACnC,CAAC,iCAAc,CAAC,aAAa,CAAC,EAAE,OAAO;IACvC,CAAC,iCAAc,CAAC,MAAM,CAAC,EAAE,QAAQ;IACjC,CAAC,iCAAc,CAAC,OAAO,CAAC,EAAE,QAAQ;IAClC,CAAC,iCAAc,CAAC,kBAAkB,CAAC,EAAE,QAAQ;IAC7C,CAAC,iCAAc,CAAC,KAAK,CAAC,EAAE,KAAK;IAC7B,CAAC,iCAAc,CAAC,MAAM,CAAC,EAAE,KAAK;CAC/B,CAAC;AAEK,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,IAAA,sCAA+B,EAAC,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;YAC/D,cAAc;YACd,OAAO,4BAA4B,CAAC,KAAK,CAAC,KAAM,CAAC,IAAI,QAAQ,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,uBAAgC;IAEhC,eAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,eAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,iCAAc,CAAC,KAAK;QACrC,MAAM,CAAC,KAAK,KAAK,iCAAc,CAAC,MAAM,CACzC,CAAC,MAAM,CAAC;IACT,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CACjC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,iCAAc,CAAC,MAAM;QACtC,MAAM,CAAC,KAAK,KAAK,iCAAc,CAAC,OAAO,CAC1C,CAAC,MAAM,CAAC;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IACE,CAAC,uBAAuB;QACxB,QAAQ,CAAC,KAAK,CACZ,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,iCAAc,CAAC,SAAS;YACzC,MAAM,CAAC,OAAO,EAAE,KAAK,KAAK,UAAU,CACvC,EACD,CAAC;QACD,eAAM,CAAC,KAAK,CACV,2FAA2F,CAC5F,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,aAAqB;IAErB,OAAO,CACL,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC;QAClC,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,MAAM,WAAW,CAAC,cAAc,CACpE,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,aAAa,EACb,MAAM,CAAC,aAAa,CACrB,CAAC,CACH,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,EAC7B,YAAY,EACZ,YAAY,EACZ,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,IAAI,EACZ,MAAM,EACN,OAAO,GAAG,KAAK,EACf,iBAAiB,GACF;IACf,MAAM,aAAa,GAAG,IAAA,uBAAgB,EAAC,YAAY,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,IAAA,uBAAgB,EAAC,YAAY,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAA,mBAAY,EAAC,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG;QACnB;YACE,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE;SACnD;KACF,CAAC;IACF,IAAI,EAAE,GAAmB,MAAM,WAAW,CAAC,iBAAiB,CAC1D;QACE,aAAa;QACb,aAAa;QACb,KAAK;QACL,WAAW;QACX,YAAY;QACZ,OAAO,EAAE,OAAO;KACjB,EACD,MAAM,CAAC,MAAM,CACd,CAAC;IACF,IAAI,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;QAC5C,MAAM,aAAa,GACjB,iBAAiB,CAAC,iBAAiB,KAAK,MAAM;YAC5C,CAAC,CAAC,MAAM,gBAAgB,CAAC,EAAE,CAAC,aAAc,CAAC;YAC3C,CAAC,CAAC,IAAA,uBAAgB,EAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAC5D,EAAE,GAAG,MAAM,WAAW,CAAC,iBAAiB,CACtC;YACE,iBAAiB,EAAE;gBACjB,cAAc;gBACd,EAAE,EAAE,EAAE,CAAC,SAAU,CAAC,EAAE;aACrB;YACD,iBAAiB,EAAE;gBACjB,aAAa;gBACb,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,KAAK;aAC1B;SACF,EACD,MAAM,CAAC,MAAM;QACb,cAAc;QACd,EAAE,CAAC,aAAc,CAClB,CAAC;IACJ,CAAC;IACD,IAAI,iBAAiB,EAAE,WAAW,EAAE,CAAC;QACnC,MAAM,WAAW,CAAC,yBAAyB,CACzC;YACE,WAAW,EAAE,EAAE,CAAC,SAAU,CAAC,GAAG;YAC9B,IAAI,EAAE,mBAAW,CAAC,QAAQ;YAC1B,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;SAClB,EACD,MAAM,CAAC,MAAM;QACb,cAAc;QACd,EAAE,CAAC,aAAc,EACjB,EAAE,CAAC,SAAU,CAAC,EAAG,CAClB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CACf,MAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpB,WAAW,CAAC,sBAAsB,CAChC;QACE,IAAI,EAAE,KAAK;KACZ,EACD,MAAM,CAAC,MAAM;IACb,cAAc;IACd,EAAE,CAAC,aAAc,CAClB,CACF,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,0BAAmB,EAAC,EAAE,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,EAC7B,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,IAAI,EACZ,KAAK,EACL,iBAAiB,EACjB,YAAY,GACG;IACf,eAAM,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAmB;QAClC,KAAK;KACN,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,WAAW,CAAC,aAAa,GAAG,IAAA,uBAAgB,EAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,WAAW,CAAC,WAAW,GAAG,IAAA,mBAAY,EAAC,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,WAAW,CAAC,iBAAiB,CACjC;YACE,MAAM,EAAE,oCAAiB,CAAC,MAAM;SACjC,EACD,MAAM,CAAC,MAAM,EACb,IAAI,CACL,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,WAAW,CAAC,MAAM,GAAG,oCAAiB,CAAC,SAAS,CAAC;IACnD,CAAC;IACD,IAAI,iBAAiB,EAAE,WAAW,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,WAAW,CAAC,yBAAyB,CACzC;YACE,WAAW,EAAE,EAAE,CAAC,SAAU,CAAC,GAAG;YAC9B,IAAI,EAAE,mBAAW,CAAC,QAAQ;YAC1B,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;SAClB,EACD,MAAM,CAAC,MAAM;QACb,cAAc;QACd,EAAE,CAAC,aAAc,EACjB,EAAE,CAAC,SAAU,CAAC,EAAG,CAClB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,iBAAiB,CACnD,WAAW,EACX,MAAM,CAAC,MAAM,EACb,IAAI,CACL,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,IAAA,0BAAmB,EAAC,SAAS,CAAC,CAAC;QACjD,iDAAiD;QACjD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAC/B,CAAC;QACF,wCAAwC;QACxC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC/C,eAAe;YACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,oBAAoB;aAAM,CAAC;YAC3B,iCAAiC;YACjC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,EAClC,MAAM,EACN,KAAK,EACL,OAAO,GACa;IACpB,eAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,KAAK,KAAM,YAAY,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,IAAA,mBAAQ,EAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,aAAiC,CAAC;IACtC,IAAI,cAAkC,CAAC;IACvC,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,IACE,CAAC,KAAK,IAAI,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI;YAC3D,CAAC,CAAC,KAAK,IAAI,mBAAmB,KAAK,IAAI,CAAC,EACxC,CAAC;YACD,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;YAC1B,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,oBAAoB,GAAG,mBAAmB,KAAK,IAAI,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,WAAW,CAAC,YAAY,CAC5B;YACE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,EAAE,CAAC;SACV,EACD,MAAM,CAAC,MAAM,EACb,MAAM,CACP,CAAC;QACF,eAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EACzD,eAAe,CAChB,CAAC;IACJ,CAAC;SAAM,IAAI,oBAAoB,EAAE,CAAC;QAChC,MAAM,WAAW,CAAC,aAAa,CAC7B;YACE,OAAO,EAAE,IAAI;SACd,EACD,MAAM,CAAC,MAAM,EACb,MAAM,EACN,aAAa;QACb,cAAc;QACd,cAAe,CAChB,CAAC;QACF,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EACzD,iBAAiB,CAClB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EACzD,mCAAmC,CACpC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,YAAwC;IAExC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IACzC,MAAM,GAAG,GACP,YAAY,CAAC,IAAI,KAAK,UAAU;QAC9B,CAAC,CAAC,YAAY,CAAC,KAAK;QACpB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;IAC3B,eAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,SAAS,OAAO,aAAa,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErE,IAAI,aAAa,GAA8B,IAAI,CAAC;IACpD,IAAI,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,MAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CACxC,OAAO,YAAY,CAAC,KAAK,MAAM,CAChC,CACJ,CAAC;QACF,aAAa,GAAG,MAAM,EAAE,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,MAAmC,EAAW,EAAE,CAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,CAChE,CAAC;QACF,aAAa,GAAG,MAAM,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,CAAC,YAAY,CAC5B;YACE,MAAM,EAAE,CAAC,EAAE,QAAQ;SACpB,EACD,MAAM,CAAC,MAAM,EACb,OAAO,EACP,aAAa,CACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,4BAA4B,GAAyC;IACzE,CAAC,OAAO,CAAC,EAAE,iCAAc,CAAC,SAAS;IACnC,CAAC,QAAQ,CAAC,EAAE,iCAAc,CAAC,OAAO;IAClC,CAAC,KAAK,CAAC,EAAE,iCAAc,CAAC,MAAM;CAC/B,CAAC;AAEK,KAAK,UAAU,eAAe,CAAC,EACpC,UAAU,EACV,OAAO,EACP,WAAW,EACX,KAAK,EACL,GAAG,EAAE,SAAS,GACK;IACnB,eAAM,CAAC,KAAK,CACV,mBAAmB,UAAU,KAAK,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,SAAU,GAAG,CACtF,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CACxC,MAAM,CAAC,MAAM,EACb,IAAA,0CAAmC,EAAC,UAAU,CAAE,CACjD,CAAC;IACF,MAAM,cAAc,GAAc;QAChC,WAAW;QACX,OAAO,EAAE,IAAA,0CAAmC,EAAC,OAAO,CAAC;QACrD,KAAK,EAAE,4BAA4B,CAAC,KAAK,CAAC;QAC1C,SAAS;KACV,CAAC;IACF,MAAM,WAAW,CAAC,kBAAkB,CAClC,cAAc;IACd,cAAc;IACd,MAAM,CAAC,MAAO,CAAC,QAAS,EACxB,MAAM,CAAC,MAAM,CACd,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,cAAc,UAAU,EAAE,CAAC,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,EAC5B,UAAU,EACV,EAAE,EAAE,aAAa,EACjB,QAAQ,GACM;IACd,eAAM,CAAC,KAAK,CAAC,WAAW,aAAa,KAAK,UAAW,GAAG,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAE5C,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7E,MAAM,aAAa,GACjB,QAAQ,KAAK,MAAM;QACjB,CAAC,CAAC,MAAM,gBAAgB,CAAC,EAAE,CAAC,aAAc,CAAC;QAC3C,CAAC,CAAC,IAAA,uBAAgB,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,WAAW,GAAmB;QAClC,MAAM,EAAE,oCAAiB,CAAC,SAAS;QACnC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB;QAC/C,iBAAiB,EAAE;YACjB,aAAa;YACb,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE,EAAE,CAAC,KAAK;SAC7B;KACF,CAAC;IAEF,eAAM,CAAC,KAAK,CACV,eAAe,aAAa,cAAc,oCAAiB,CAAC,SAAS,KACnE,oCAAiB,CAAC,oCAAiB,CAAC,SAAS,CAC/C,gCAAgC;IAC9B,uBAAuB;IACvB,EAAE,CAAC,qBAAqB,EAAE,QAC5B,wBAAwB,aAAa,KACnC,8CAA2B,CAAC,aAAa,CAC3C,GAAG,CACJ,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAClD,WAAW,EACX,MAAM,CAAC,MAAM,EACb,aAAa,CACd,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,oCAAiB,CAAC,SAAS,CAAC;QAC/D,OAAO,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;YAC/B,eAAM,CAAC,KAAK,CACV,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAC7C,8EAA8E,CAC/E,CAAC;YAEF,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,CAAC;YAC1B,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACzE,QAAQ,GAAG,EAAE,CAAC,MAAM,KAAK,oCAAiB,CAAC,SAAS,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,eAAM,CAAC,IAAI,CACT;gBACE,aAAa;gBACb,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,gBAAgB,EAAE,oCAAiB,CAAC,oCAAiB,CAAC,SAAS,CAAC;gBAChE,cAAc,EAAE,oCAAiB,CAAC,EAAE,CAAC,MAAO,CAAC;aAC9C,EACD,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,yBAAyB;IACzB,OAAO,IAAA,uBAAa,EAAC,KAAK,EAAE,aAAa,EAAE,CAAC;SACzC,OAAO,CACN,oCAAoC,EACpC,uCAAuC,CACxC;SACA,OAAO,CACN,qCAAqC,EACrC,yCAAyC,CAC1C;SACA,OAAO,CAAC,IAAA,aAAK,EAAC,wCAAwC,CAAC,EAAE,EAAE,CAAC;SAC5D,OAAO,CAAC,IAAA,aAAK,EAAC,4CAA4C,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qBAAqB;AACrB,SAAgB,SAAS;IACvB,qCAAqC;IACrC,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC,oBAAoB;AAEtB,qBAAqB;AACrB,SAAgB,WAAW;IACzB,qCAAqC;IACrC,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC,oBAAoB;AAEtB,qBAAqB;AACrB,SAAgB,kBAAkB;IAChC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC,oBAAoB;AAEtB,qBAAqB;AACrB,SAAgB,YAAY;IAC1B,eAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,qCAAqC;IACrC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC,oBAAoB;AAEtB,KAAK,UAAU,UAAU,CAAC,KAAe;IACvC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAE,CAAC;IACxD,MAAM,sBAAsB,GAAG,WAAW,CAAC;IAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,cAAc;IACd,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAQ,CAAC,EAAG,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CACP,KAAK,EAAE,CAAC,EAAE,EAAE,CACV,MAAM,YAAY,CAAC,oCAAoC;IACrD,cAAc;IACd,IAAI,CAAC,OAAQ,CAAC,EAAG,EACjB,CAAC,CAAC,EAAG,CACN,CACJ,CACF,CAAC;IAEF,MAAM,GAAG,GAAwD,EAAE,CAAC;IACpE,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC9B,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,IAAI,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBAChD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBACxD,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;gBACD,IACE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;oBACjE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAChE,CAAC;oBACD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC5D,cAAc;wBACd,GAAG,CAAC,IAAI,CAAC;4BACP,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAG;4BAClB,IAAI,EAAE,QAAQ;4BACd,UAAU;yBACX,CAAC,CAAC;wBAEH,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAClB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAChD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;gBACxD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;gBACrD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClD,cAAc;oBACd,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;oBAEpD,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,eAAM,CAAC,IAAI,CAAC,IAAI,CACd,GAAG,QAAQ,oEAAoE,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,SAAmB;IAEnB,eAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,aAAa,CAAC;QAClB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,SAAmB;IAEnB,eAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAExC,MAAM,OAAO,CAAC,GAAG,CACf,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,WAAW,CAAC,yBAAyB,CACzC;YACE,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,EACD,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,GAAG,CAAC,EAAE,CACP,CAAC;QACF,eAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,KAAa;IAEb,eAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,UAAU,QAAQ,EAAE,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,WAAW,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { setTimeout } from 'timers/promises';\nimport { isString } from '@sindresorhus/is';\nimport type {\n GitItem,\n GitPullRequest,\n GitPullRequestCommentThread,\n GitStatus,\n GitVersionDescriptor,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n GitStatusState,\n GitVersionType,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n REPOSITORY_ARCHIVED,\n REPOSITORY_EMPTY,\n REPOSITORY_NOT_FOUND,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { getNewBranchName, repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport * as azureApi from './azure-got-wrapper';\nimport * as azureHelper from './azure-helper';\nimport type { AzurePr } from './types';\nimport { AzurePrVote } from './types';\nimport {\n getBranchNameWithoutRefsheadsPrefix,\n getGitStatusContextCombinedName,\n getGitStatusContextFromCombinedName,\n getRenovatePRFormat,\n getRepoByName,\n getStorageExtraCloneOpts,\n mapMergeStrategy,\n max4000Chars,\n} from './util';\n\ninterface Config {\n repoForceRebase: boolean;\n mergeMethods: Record<string, GitPullRequestMergeStrategy>;\n owner: string;\n repoId: string;\n project: string;\n prList: AzurePr[];\n fileList: null;\n repository: string;\n defaultBranch: string;\n}\n\ninterface User {\n id: string;\n name: string;\n isRequired: boolean;\n}\n\nlet config: Config = {} as any;\n\nconst defaults: {\n endpoint?: string;\n hostType: string;\n} = {\n hostType: 'azure',\n};\n\nexport const id = 'azure';\n\nexport function initPlatform({\n endpoint,\n token,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n if (!endpoint) {\n throw new Error('Init: You must configure an Azure DevOps endpoint');\n }\n if (!token && !(username && password)) {\n throw new Error(\n 'Init: You must configure an Azure DevOps token, or a username and password',\n );\n }\n // TODO: Add a connection check that endpoint/token combination are valid (#9593)\n const res = {\n endpoint: ensureTrailingSlash(endpoint),\n };\n defaults.endpoint = res.endpoint;\n azureApi.setEndpoint(res.endpoint);\n const platformConfig: PlatformResult = {\n endpoint: defaults.endpoint,\n };\n return Promise.resolve(platformConfig);\n}\n\nexport async function getRepos(): Promise<string[]> {\n logger.debug('Autodiscovering Azure DevOps repositories');\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n return repos\n .filter((repo) => repo.isDisabled !== true)\n .map((repo) => `${repo.project?.name}/${repo.name}`);\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n try {\n const azureApiGit = await azureApi.gitApi();\n\n let repoId: string | undefined;\n if (repoName) {\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repoName, repos);\n repoId = repo?.id;\n } else {\n repoId = config.repoId;\n }\n\n if (!repoId) {\n logger.debug('No repoId so cannot getRawFile');\n return null;\n }\n\n let item: GitItem | undefined;\n const versionDescriptor: GitVersionDescriptor = {\n version: branchOrTag,\n } satisfies GitVersionDescriptor;\n // Try to get file from repo with tag first, if not found, then try with branch #36835\n for (const versionType of [GitVersionType.Tag, GitVersionType.Branch]) {\n versionDescriptor.versionType = versionType;\n\n item = await azureApiGit.getItem(\n repoId, // repositoryId\n fileName, // path\n undefined, // project\n undefined, // scopePath\n undefined, // recursionLevel\n undefined, // includeContentMetadata\n undefined, // latestProcessedChange\n undefined, // download\n branchOrTag ? versionDescriptor : undefined, // versionDescriptor\n true, // includeContent\n );\n if (item) {\n break; // exit loop if item is found\n } else {\n logger.debug(\n `File: ${fileName} not found in ${repoName} with ${versionType}: ${branchOrTag}`,\n );\n }\n }\n return item?.content ?? null;\n } catch (err) /* v8 ignore start */ {\n if (\n err.message?.includes('<title>Azure DevOps Services Unavailable</title>')\n ) {\n logger.debug(\n 'Azure DevOps is currently unavailable when attempting to fetch file - throwing ExternalHostError',\n );\n throw new ExternalHostError(err, id);\n }\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err, id);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err, id);\n }\n throw err;\n } /* v8 ignore stop */\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n config = { repository } as Config;\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repository, repos);\n if (!repo) {\n logger.error({ repos, repo }, 'Could not find repo in repo list');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ repositoryDetails: repo }, 'Repository details');\n if (repo.isDisabled) {\n logger.debug('Repository is disabled- throwing error to abort renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n /* v8 ignore start */\n if (!repo.defaultBranch) {\n logger.debug('Repo is empty');\n throw new Error(REPOSITORY_EMPTY);\n } /* v8 ignore stop */\n // TODO #22198\n config.repoId = repo.id!;\n\n config.project = repo.project!.name!;\n config.owner = '?owner?';\n logger.debug(`${repository} owner = ${config.owner}`);\n const defaultBranch = repo.defaultBranch.replace('refs/heads/', '');\n config.defaultBranch = defaultBranch;\n logger.debug(`${repository} default branch = ${defaultBranch}`);\n config.mergeMethods = {};\n config.repoForceRebase = false;\n\n const [projectName, repoName] = repository.split('/');\n const opts = hostRules.find({\n hostType: defaults.hostType,\n url: defaults.endpoint,\n });\n // TODO: types (#22198)\n const manualUrl = `${defaults.endpoint!}${encodeURIComponent(\n projectName,\n )}/_git/${encodeURIComponent(repoName)}`;\n const url = repo.remoteUrl ?? manualUrl;\n await git.initRepo({\n ...config,\n url,\n extraCloneOpts: getStorageExtraCloneOpts(opts),\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch,\n isFork: false,\n repoFingerprint: repoFingerprint(repo.id!, defaults.endpoint),\n };\n return repoConfig;\n}\n\nexport async function getPrList(): Promise<AzurePr[]> {\n logger.debug('getPrList()');\n if (!config.prList) {\n const azureApiGit = await azureApi.gitApi();\n let prs: GitPullRequest[] = [];\n let fetchedPrs: GitPullRequest[];\n let skip = 0;\n do {\n fetchedPrs = await azureApiGit.getPullRequests(\n config.repoId,\n {\n status: 4,\n // fetch only prs directly created on the repo and not by forks\n sourceRepositoryId: config.project,\n },\n config.project,\n 0,\n skip,\n 100,\n );\n prs = prs.concat(fetchedPrs);\n skip += 100;\n } while (fetchedPrs.length > 0);\n\n config.prList = prs.map(getRenovatePRFormat);\n logger.debug(`Retrieved Pull Requests count: ${config.prList.length}`);\n }\n return config.prList;\n}\n\nexport async function getPr(pullRequestId: number): Promise<Pr | null> {\n logger.debug(`getPr(${pullRequestId})`);\n if (!pullRequestId) {\n return null;\n }\n const azurePr = (await getPrList()).find(\n (item) => item.number === pullRequestId,\n );\n\n if (!azurePr) {\n return null;\n }\n\n const azureApiGit = await azureApi.gitApi();\n const labels = await azureApiGit.getPullRequestLabels(\n config.repoId,\n pullRequestId,\n );\n\n azurePr.labels = labels\n .filter((label) => label.active)\n .map((label) => label.name)\n .filter(isString);\n return azurePr;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n targetBranch,\n}: FindPRConfig): Promise<Pr | null> {\n let prsFiltered: Pr[] = [];\n try {\n const prs = await getPrList();\n\n prsFiltered = prs.filter(\n (item) => item.sourceRefName === getNewBranchName(branchName),\n );\n\n if (prTitle) {\n prsFiltered = prsFiltered.filter(\n (item) => item.title.toUpperCase() === prTitle.toUpperCase(),\n );\n }\n\n switch (state) {\n case 'all':\n // no more filter needed, we can go further...\n break;\n case '!open':\n prsFiltered = prsFiltered.filter((item) => item.state !== 'open');\n break;\n default:\n prsFiltered = prsFiltered.filter((item) => item.state === state);\n break;\n }\n } catch (err) {\n logger.error({ err }, 'findPr error');\n }\n if (prsFiltered.length === 0) {\n return null;\n }\n if (targetBranch && prsFiltered.length > 1) {\n const pr = prsFiltered.find((item) => item.targetBranch === targetBranch);\n if (pr) {\n return pr;\n }\n }\n return prsFiltered[0];\n}\n\nexport async function getBranchPr(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName}, ${targetBranch})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n targetBranch,\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatusCheck(branchName: string): Promise<GitStatus[]> {\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n\n // TODO: fix undefined (#22198)\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n // only grab the latest statuses, it will group any by context\n return azureApiGit.getStatuses(\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n undefined,\n undefined,\n undefined,\n true,\n );\n}\n\nconst azureToRenovateStatusMapping: Record<GitStatusState, BranchStatus> = {\n [GitStatusState.Succeeded]: 'green',\n [GitStatusState.NotApplicable]: 'green',\n [GitStatusState.NotSet]: 'yellow',\n [GitStatusState.Pending]: 'yellow',\n [GitStatusState.PartiallySucceeded]: 'yellow',\n [GitStatusState.Error]: 'red',\n [GitStatusState.Failed]: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (getGitStatusContextCombinedName(check.context) === context) {\n // TODO #22198\n return azureToRenovateStatusMapping[check.state!] ?? 'yellow';\n }\n }\n return null;\n}\n\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const statuses = await getStatusCheck(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status) =>\n status.state === GitStatusState.Error ||\n status.state === GitStatusState.Failed,\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status) =>\n status.state === GitStatusState.NotSet ||\n status.state === GitStatusState.Pending,\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === GitStatusState.Succeeded &&\n status.context?.genre === 'renovate',\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nasync function getMergeStrategy(\n targetRefName: string,\n): Promise<GitPullRequestMergeStrategy> {\n return (\n config.mergeMethods[targetRefName] ??\n (config.mergeMethods[targetRefName] = await azureHelper.getMergeMethod(\n config.repoId,\n config.project,\n targetRefName,\n config.defaultBranch,\n ))\n );\n}\n\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: body,\n labels,\n draftPR = false,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n const sourceRefName = getNewBranchName(sourceBranch);\n const targetRefName = getNewBranchName(targetBranch);\n const description = max4000Chars(sanitize(body));\n const azureApiGit = await azureApi.gitApi();\n const workItemRefs = [\n {\n id: platformPrOptions?.azureWorkItemId?.toString(),\n },\n ];\n let pr: GitPullRequest = await azureApiGit.createPullRequest(\n {\n sourceRefName,\n targetRefName,\n title,\n description,\n workItemRefs,\n isDraft: draftPR,\n },\n config.repoId,\n );\n if (platformPrOptions?.usePlatformAutomerge) {\n const mergeStrategy =\n platformPrOptions.automergeStrategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(platformPrOptions.automergeStrategy);\n pr = await azureApiGit.updatePullRequest(\n {\n autoCompleteSetBy: {\n // TODO #22198\n id: pr.createdBy!.id,\n },\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: title,\n },\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n );\n }\n if (platformPrOptions?.autoApprove) {\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n await Promise.all(\n labels!.map((label) =>\n azureApiGit.createPullRequestLabel(\n {\n name: label,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n ),\n ),\n );\n\n const result = getRenovatePRFormat(pr);\n if (config.prList) {\n config.prList.push(result);\n }\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: body,\n state,\n platformPrOptions,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n\n const azureApiGit = await azureApi.gitApi();\n const objToUpdate: GitPullRequest = {\n title,\n };\n\n if (targetBranch) {\n objToUpdate.targetRefName = getNewBranchName(targetBranch);\n }\n\n if (body) {\n objToUpdate.description = max4000Chars(sanitize(body));\n }\n\n if (state === 'open') {\n await azureApiGit.updatePullRequest(\n {\n status: PullRequestStatus.Active,\n },\n config.repoId,\n prNo,\n );\n } else if (state === 'closed') {\n objToUpdate.status = PullRequestStatus.Abandoned;\n }\n if (platformPrOptions?.autoApprove) {\n const pr = await azureApiGit.getPullRequestById(prNo, config.project);\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n\n const updatedPr = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n prNo,\n );\n if (config.prList) {\n const prToCache = getRenovatePRFormat(updatedPr);\n // We need to update the cached entry for this PR\n const existingIndex = config.prList.findIndex(\n (item) => item.number === prNo,\n );\n /* v8 ignore start: should not happen */\n if (existingIndex === -1) {\n logger.warn({ prNo }, 'PR not found in cache');\n // Add to cache\n config.prList.push(prToCache);\n } /* v8 ignore stop */ else {\n // overwrite existing PR in cache\n config.prList[existingIndex] = prToCache;\n }\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n logger.debug(`ensureComment(${number}, ${topic!}, content)`);\n const header = topic ? `### ${topic}\\n\\n` : '';\n const body = `${header}${sanitize(massageMarkdown(content))}`;\n const azureApiGit = await azureApi.gitApi();\n\n const threads = await azureApiGit.getThreads(config.repoId, number);\n let threadIdFound: number | undefined;\n let commentIdFound: number | undefined;\n let commentNeedsUpdating = false;\n threads.forEach((thread) => {\n const firstCommentContent = thread.comments?.[0].content;\n if (\n (topic && firstCommentContent?.startsWith(header)) === true ||\n (!topic && firstCommentContent === body)\n ) {\n threadIdFound = thread.id;\n commentIdFound = thread.comments?.[0].id;\n commentNeedsUpdating = firstCommentContent !== body;\n }\n });\n\n if (!threadIdFound) {\n await azureApiGit.createThread(\n {\n comments: [{ content: body, commentType: 1, parentCommentId: 0 }],\n status: 1,\n },\n config.repoId,\n number,\n );\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await azureApiGit.updateComment(\n {\n content: body,\n },\n config.repoId,\n number,\n threadIdFound,\n // TODO #22198\n commentIdFound!,\n );\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment updated',\n );\n } else {\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment is already update-to-date',\n );\n }\n\n return true;\n}\n\nexport async function ensureCommentRemoval(\n removeConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = removeConfig;\n const key =\n removeConfig.type === 'by-topic'\n ? removeConfig.topic\n : removeConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n\n const azureApiGit = await azureApi.gitApi();\n const threads = await azureApiGit.getThreads(config.repoId, issueNo);\n\n let threadIdFound: number | null | undefined = null;\n if (removeConfig.type === 'by-topic') {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n !!thread.comments?.[0].content?.startsWith(\n `### ${removeConfig.topic}\\n\\n`,\n ),\n );\n threadIdFound = thread?.id;\n } else {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n thread.comments?.[0].content?.trim() === removeConfig.content,\n );\n threadIdFound = thread?.id;\n }\n\n if (threadIdFound) {\n await azureApiGit.updateThread(\n {\n status: 4, // close\n },\n config.repoId,\n issueNo,\n threadIdFound,\n );\n }\n}\n\nconst renovateToAzureStatusMapping: Record<BranchStatus, GitStatusState> = {\n ['green']: GitStatusState.Succeeded,\n ['yellow']: GitStatusState.Pending,\n ['red']: GitStatusState.Failed,\n};\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n logger.debug(\n `setBranchStatus(${branchName}, ${context}, ${description}, ${state}, ${targetUrl!})`,\n );\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n const statusToCreate: GitStatus = {\n description,\n context: getGitStatusContextFromCombinedName(context),\n state: renovateToAzureStatusMapping[state],\n targetUrl,\n };\n await azureApiGit.createCommitStatus(\n statusToCreate,\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n );\n logger.trace(`Created commit status of ${state} on branch ${branchName}`);\n}\n\nexport async function mergePr({\n branchName,\n id: pullRequestId,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${pullRequestId}, ${branchName!})`);\n const azureApiGit = await azureApi.gitApi();\n\n let pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n\n const mergeStrategy =\n strategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(strategy);\n const objToUpdate: GitPullRequest = {\n status: PullRequestStatus.Completed,\n lastMergeSourceCommit: pr.lastMergeSourceCommit,\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.trace(\n `Updating PR ${pullRequestId} to status ${PullRequestStatus.Completed} (${\n PullRequestStatus[PullRequestStatus.Completed]\n }) with lastMergeSourceCommit ${\n // TODO: types (#22198)\n pr.lastMergeSourceCommit?.commitId\n } using mergeStrategy ${mergeStrategy} (${\n GitPullRequestMergeStrategy[mergeStrategy]\n })`,\n );\n\n try {\n const response = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n pullRequestId,\n );\n\n let retries = 0;\n let isClosed = response.status === PullRequestStatus.Completed;\n while (!isClosed && retries < 5) {\n retries += 1;\n const sleepMs = retries * 1000;\n logger.trace(\n { pullRequestId, status: pr.status, retries },\n `Updated PR to closed status but change has not taken effect yet. Retrying...`,\n );\n\n await setTimeout(sleepMs);\n pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n isClosed = pr.status === PullRequestStatus.Completed;\n }\n\n if (!isClosed) {\n logger.warn(\n {\n pullRequestId,\n status: pr.status,\n expectedPRStatus: PullRequestStatus[PullRequestStatus.Completed],\n actualPRStatus: PullRequestStatus[pr.status!],\n },\n 'Expected PR to have completed status. However, the PR has a different status',\n );\n }\n return true;\n } catch (err) {\n logger.debug({ err }, 'Failed to set the PR as completed.');\n return false;\n }\n}\n\nexport function massageMarkdown(input: string): string {\n // Remove any HTML we use\n return smartTruncate(input, maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'PR is renamed to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n}\n\nexport function maxBodyLength(): number {\n return 4000;\n}\n\n/* v8 ignore start */\nexport function findIssue(): Promise<Issue | null> {\n // TODO: Needs implementation (#9592)\n logger.debug(`findIssue() is not implemented`);\n return Promise.resolve(null);\n} /* v8 ignore stop */\n\n/* v8 ignore start */\nexport function ensureIssue(): Promise<EnsureIssueResult | null> {\n // TODO: Needs implementation (#9592)\n logger.debug(`ensureIssue() is not implemented`);\n return Promise.resolve(null);\n} /* v8 ignore stop */\n\n/* v8 ignore start */\nexport function ensureIssueClosing(): Promise<void> {\n return Promise.resolve();\n} /* v8 ignore stop */\n\n/* v8 ignore start */\nexport function getIssueList(): Promise<Issue[]> {\n logger.debug(`getIssueList()`);\n // TODO: Needs implementation (#9592)\n return Promise.resolve([]);\n} /* v8 ignore stop */\n\nasync function getUserIds(users: string[]): Promise<User[]> {\n const azureApiGit = await azureApi.gitApi();\n const azureApiCore = await azureApi.coreApi();\n const repos = await azureApiGit.getRepositories();\n const repo = repos.find((c) => c.id === config.repoId)!;\n const requiredReviewerPrefix = 'required:';\n const validReviewers = new Set<string>();\n\n // TODO #22198\n const teams = await azureHelper.getAllProjectTeams(repo.project!.id!);\n const members = await Promise.all(\n teams.map(\n async (t) =>\n await azureApiCore.getTeamMembersWithExtendedProperties(\n // TODO #22198\n repo.project!.id!,\n t.id!,\n ),\n ),\n );\n\n const ids: { id: string; name: string; isRequired: boolean }[] = [];\n members.forEach((listMembers) => {\n listMembers.forEach((m) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (\n reviewer.toLowerCase() === m.identity?.displayName?.toLowerCase() ||\n reviewer.toLowerCase() === m.identity?.uniqueName?.toLowerCase()\n ) {\n if (ids.filter((c) => c.id === m.identity?.id).length === 0) {\n // TODO #22198\n ids.push({\n id: m.identity.id!,\n name: reviewer,\n isRequired,\n });\n\n validReviewers.add(reviewer);\n }\n }\n });\n });\n });\n\n teams.forEach((t) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (reviewer.toLowerCase() === t.name?.toLowerCase()) {\n if (ids.filter((c) => c.id === t.id).length === 0) {\n // TODO #22198\n ids.push({ id: t.id!, name: reviewer, isRequired });\n\n validReviewers.add(reviewer);\n }\n }\n });\n });\n\n for (const u of users) {\n const reviewer = u.replace(requiredReviewerPrefix, '');\n if (!validReviewers.has(reviewer)) {\n logger.once.info(\n `${reviewer} is neither an Azure DevOps Team nor a user associated with a Team`,\n );\n }\n }\n\n return ids;\n}\n\n/**\n *\n * @param {number} issueNo\n * @param {string[]} assignees\n */\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.trace(`addAssignees(${issueNo}, [${assignees.join(', ')}])`);\n const ids = await getUserIds(assignees);\n await ensureComment({\n number: issueNo,\n topic: 'Add Assignees',\n content: ids.map((a) => `@<${a.id}>`).join(', '),\n });\n}\n\n/**\n *\n * @param {number} prNo\n * @param {string[]} reviewers\n */\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.trace(`addReviewers(${prNo}, [${reviewers.join(', ')}])`);\n const azureApiGit = await azureApi.gitApi();\n\n const ids = await getUserIds(reviewers);\n\n await Promise.all(\n ids.map(async (obj) => {\n await azureApiGit.createPullRequestReviewer(\n {\n isRequired: obj.isRequired,\n },\n config.repoId,\n prNo,\n obj.id,\n );\n logger.debug(`Reviewer added: ${obj.name}`);\n }),\n );\n}\n\nexport async function deleteLabel(\n prNumber: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${prNumber}`);\n const azureApiGit = await azureApi.gitApi();\n await azureApiGit.deletePullRequestLabels(config.repoId, prNumber, label);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/azure/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { setTimeout } from 'timers/promises';\nimport { isString } from '@sindresorhus/is';\nimport type {\n GitItem,\n GitPullRequest,\n GitPullRequestCommentThread,\n GitStatus,\n GitVersionDescriptor,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n GitStatusState,\n GitVersionType,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n REPOSITORY_ARCHIVED,\n REPOSITORY_EMPTY,\n REPOSITORY_NOT_FOUND,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { getNewBranchName, repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport * as azureApi from './azure-got-wrapper';\nimport * as azureHelper from './azure-helper';\nimport type { AzurePr } from './types';\nimport { AzurePrVote } from './types';\nimport {\n getBranchNameWithoutRefsheadsPrefix,\n getGitStatusContextCombinedName,\n getGitStatusContextFromCombinedName,\n getRenovatePRFormat,\n getRepoByName,\n getStorageExtraCloneOpts,\n mapMergeStrategy,\n max4000Chars,\n} from './util';\n\ninterface Config {\n repoForceRebase: boolean;\n mergeMethods: Record<string, GitPullRequestMergeStrategy>;\n owner: string;\n repoId: string;\n project: string;\n prList: AzurePr[];\n fileList: null;\n repository: string;\n defaultBranch: string;\n}\n\ninterface User {\n id: string;\n name: string;\n isRequired: boolean;\n}\n\nlet config: Config = {} as any;\n\nconst defaults: {\n endpoint?: string;\n hostType: string;\n} = {\n hostType: 'azure',\n};\n\nexport const id = 'azure';\n\nexport function initPlatform({\n endpoint,\n token,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n if (!endpoint) {\n throw new Error('Init: You must configure an Azure DevOps endpoint');\n }\n if (!token && !(username && password)) {\n throw new Error(\n 'Init: You must configure an Azure DevOps token, or a username and password',\n );\n }\n // TODO: Add a connection check that endpoint/token combination are valid (#9593)\n const res = {\n endpoint: ensureTrailingSlash(endpoint),\n };\n defaults.endpoint = res.endpoint;\n azureApi.setEndpoint(res.endpoint);\n const platformConfig: PlatformResult = {\n endpoint: defaults.endpoint,\n };\n return Promise.resolve(platformConfig);\n}\n\nexport async function getRepos(): Promise<string[]> {\n logger.debug('Autodiscovering Azure DevOps repositories');\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n return repos\n .filter((repo) => repo.isDisabled !== true)\n .map((repo) => `${repo.project?.name}/${repo.name}`);\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n try {\n const azureApiGit = await azureApi.gitApi();\n\n let repoId: string | undefined;\n if (repoName) {\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repoName, repos);\n repoId = repo?.id;\n } else {\n repoId = config.repoId;\n }\n\n if (!repoId) {\n logger.debug('No repoId so cannot getRawFile');\n return null;\n }\n\n let item: GitItem | undefined;\n const versionDescriptor: GitVersionDescriptor = {\n version: branchOrTag,\n } satisfies GitVersionDescriptor;\n // Try to get file from repo with tag first, if not found, then try with branch #36835\n for (const versionType of [GitVersionType.Tag, GitVersionType.Branch]) {\n versionDescriptor.versionType = versionType;\n\n item = await azureApiGit.getItem(\n repoId, // repositoryId\n fileName, // path\n undefined, // project\n undefined, // scopePath\n undefined, // recursionLevel\n undefined, // includeContentMetadata\n undefined, // latestProcessedChange\n undefined, // download\n branchOrTag ? versionDescriptor : undefined, // versionDescriptor\n true, // includeContent\n );\n if (item) {\n break; // exit loop if item is found\n } else {\n logger.debug(\n `File: ${fileName} not found in ${repoName} with ${versionType}: ${branchOrTag}`,\n );\n }\n }\n return item?.content ?? null;\n } catch (err) /* v8 ignore next */ {\n if (\n err.message?.includes('<title>Azure DevOps Services Unavailable</title>')\n ) {\n logger.debug(\n 'Azure DevOps is currently unavailable when attempting to fetch file - throwing ExternalHostError',\n );\n throw new ExternalHostError(err, id);\n }\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err, id);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err, id);\n }\n throw err;\n }\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n config = { repository } as Config;\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repository, repos);\n if (!repo) {\n logger.error({ repos, repo }, 'Could not find repo in repo list');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ repositoryDetails: repo }, 'Repository details');\n if (repo.isDisabled) {\n logger.debug('Repository is disabled- throwing error to abort renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n /* v8 ignore next */\n if (!repo.defaultBranch) {\n logger.debug('Repo is empty');\n throw new Error(REPOSITORY_EMPTY);\n }\n // TODO #22198\n config.repoId = repo.id!;\n\n config.project = repo.project!.name!;\n config.owner = '?owner?';\n logger.debug(`${repository} owner = ${config.owner}`);\n const defaultBranch = repo.defaultBranch.replace('refs/heads/', '');\n config.defaultBranch = defaultBranch;\n logger.debug(`${repository} default branch = ${defaultBranch}`);\n config.mergeMethods = {};\n config.repoForceRebase = false;\n\n const [projectName, repoName] = repository.split('/');\n const opts = hostRules.find({\n hostType: defaults.hostType,\n url: defaults.endpoint,\n });\n // TODO: types (#22198)\n const manualUrl = `${defaults.endpoint!}${encodeURIComponent(\n projectName,\n )}/_git/${encodeURIComponent(repoName)}`;\n const url = repo.remoteUrl ?? manualUrl;\n await git.initRepo({\n ...config,\n url,\n extraCloneOpts: getStorageExtraCloneOpts(opts),\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch,\n isFork: false,\n repoFingerprint: repoFingerprint(repo.id!, defaults.endpoint),\n };\n return repoConfig;\n}\n\nexport async function getPrList(): Promise<AzurePr[]> {\n logger.debug('getPrList()');\n if (!config.prList) {\n const azureApiGit = await azureApi.gitApi();\n let prs: GitPullRequest[] = [];\n let fetchedPrs: GitPullRequest[];\n let skip = 0;\n do {\n fetchedPrs = await azureApiGit.getPullRequests(\n config.repoId,\n {\n status: 4,\n // fetch only prs directly created on the repo and not by forks\n sourceRepositoryId: config.project,\n },\n config.project,\n 0,\n skip,\n 100,\n );\n prs = prs.concat(fetchedPrs);\n skip += 100;\n } while (fetchedPrs.length > 0);\n\n config.prList = prs.map(getRenovatePRFormat);\n logger.debug(`Retrieved Pull Requests count: ${config.prList.length}`);\n }\n return config.prList;\n}\n\nexport async function getPr(pullRequestId: number): Promise<Pr | null> {\n logger.debug(`getPr(${pullRequestId})`);\n if (!pullRequestId) {\n return null;\n }\n const azurePr = (await getPrList()).find(\n (item) => item.number === pullRequestId,\n );\n\n if (!azurePr) {\n return null;\n }\n\n const azureApiGit = await azureApi.gitApi();\n const labels = await azureApiGit.getPullRequestLabels(\n config.repoId,\n pullRequestId,\n );\n\n azurePr.labels = labels\n .filter((label) => label.active)\n .map((label) => label.name)\n .filter(isString);\n return azurePr;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n targetBranch,\n}: FindPRConfig): Promise<Pr | null> {\n let prsFiltered: Pr[] = [];\n try {\n const prs = await getPrList();\n\n prsFiltered = prs.filter(\n (item) => item.sourceRefName === getNewBranchName(branchName),\n );\n\n if (prTitle) {\n prsFiltered = prsFiltered.filter(\n (item) => item.title.toUpperCase() === prTitle.toUpperCase(),\n );\n }\n\n switch (state) {\n case 'all':\n // no more filter needed, we can go further...\n break;\n case '!open':\n prsFiltered = prsFiltered.filter((item) => item.state !== 'open');\n break;\n default:\n prsFiltered = prsFiltered.filter((item) => item.state === state);\n break;\n }\n } catch (err) {\n logger.error({ err }, 'findPr error');\n }\n if (prsFiltered.length === 0) {\n return null;\n }\n if (targetBranch && prsFiltered.length > 1) {\n const pr = prsFiltered.find((item) => item.targetBranch === targetBranch);\n if (pr) {\n return pr;\n }\n }\n return prsFiltered[0];\n}\n\nexport async function getBranchPr(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName}, ${targetBranch})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n targetBranch,\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatusCheck(branchName: string): Promise<GitStatus[]> {\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n\n // TODO: fix undefined (#22198)\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n // only grab the latest statuses, it will group any by context\n return azureApiGit.getStatuses(\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n undefined,\n undefined,\n undefined,\n true,\n );\n}\n\nconst azureToRenovateStatusMapping: Record<GitStatusState, BranchStatus> = {\n [GitStatusState.Succeeded]: 'green',\n [GitStatusState.NotApplicable]: 'green',\n [GitStatusState.NotSet]: 'yellow',\n [GitStatusState.Pending]: 'yellow',\n [GitStatusState.PartiallySucceeded]: 'yellow',\n [GitStatusState.Error]: 'red',\n [GitStatusState.Failed]: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (getGitStatusContextCombinedName(check.context) === context) {\n // TODO #22198\n return azureToRenovateStatusMapping[check.state!] ?? 'yellow';\n }\n }\n return null;\n}\n\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const statuses = await getStatusCheck(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status) =>\n status.state === GitStatusState.Error ||\n status.state === GitStatusState.Failed,\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status) =>\n status.state === GitStatusState.NotSet ||\n status.state === GitStatusState.Pending,\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === GitStatusState.Succeeded &&\n status.context?.genre === 'renovate',\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nasync function getMergeStrategy(\n targetRefName: string,\n): Promise<GitPullRequestMergeStrategy> {\n return (\n config.mergeMethods[targetRefName] ??\n (config.mergeMethods[targetRefName] = await azureHelper.getMergeMethod(\n config.repoId,\n config.project,\n targetRefName,\n config.defaultBranch,\n ))\n );\n}\n\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: body,\n labels,\n draftPR = false,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n const sourceRefName = getNewBranchName(sourceBranch);\n const targetRefName = getNewBranchName(targetBranch);\n const description = max4000Chars(sanitize(body));\n const azureApiGit = await azureApi.gitApi();\n const workItemRefs = [\n {\n id: platformPrOptions?.azureWorkItemId?.toString(),\n },\n ];\n let pr: GitPullRequest = await azureApiGit.createPullRequest(\n {\n sourceRefName,\n targetRefName,\n title,\n description,\n workItemRefs,\n isDraft: draftPR,\n },\n config.repoId,\n );\n if (platformPrOptions?.usePlatformAutomerge) {\n const mergeStrategy =\n platformPrOptions.automergeStrategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(platformPrOptions.automergeStrategy);\n pr = await azureApiGit.updatePullRequest(\n {\n autoCompleteSetBy: {\n // TODO #22198\n id: pr.createdBy!.id,\n },\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: title,\n },\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n );\n }\n if (platformPrOptions?.autoApprove) {\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n await Promise.all(\n labels!.map((label) =>\n azureApiGit.createPullRequestLabel(\n {\n name: label,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n ),\n ),\n );\n\n const result = getRenovatePRFormat(pr);\n if (config.prList) {\n config.prList.push(result);\n }\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: body,\n state,\n platformPrOptions,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n\n const azureApiGit = await azureApi.gitApi();\n const objToUpdate: GitPullRequest = {\n title,\n };\n\n if (targetBranch) {\n objToUpdate.targetRefName = getNewBranchName(targetBranch);\n }\n\n if (body) {\n objToUpdate.description = max4000Chars(sanitize(body));\n }\n\n if (state === 'open') {\n await azureApiGit.updatePullRequest(\n {\n status: PullRequestStatus.Active,\n },\n config.repoId,\n prNo,\n );\n } else if (state === 'closed') {\n objToUpdate.status = PullRequestStatus.Abandoned;\n }\n if (platformPrOptions?.autoApprove) {\n const pr = await azureApiGit.getPullRequestById(prNo, config.project);\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n\n const updatedPr = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n prNo,\n );\n if (config.prList) {\n const prToCache = getRenovatePRFormat(updatedPr);\n // We need to update the cached entry for this PR\n const existingIndex = config.prList.findIndex(\n (item) => item.number === prNo,\n );\n /* v8 ignore next: should not happen */\n if (existingIndex === -1) {\n logger.warn({ prNo }, 'PR not found in cache');\n // Add to cache\n config.prList.push(prToCache);\n } else {\n // overwrite existing PR in cache\n config.prList[existingIndex] = prToCache;\n }\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n logger.debug(`ensureComment(${number}, ${topic!}, content)`);\n const header = topic ? `### ${topic}\\n\\n` : '';\n const body = `${header}${sanitize(massageMarkdown(content))}`;\n const azureApiGit = await azureApi.gitApi();\n\n const threads = await azureApiGit.getThreads(config.repoId, number);\n let threadIdFound: number | undefined;\n let commentIdFound: number | undefined;\n let commentNeedsUpdating = false;\n threads.forEach((thread) => {\n const firstCommentContent = thread.comments?.[0].content;\n if (\n (topic && firstCommentContent?.startsWith(header)) === true ||\n (!topic && firstCommentContent === body)\n ) {\n threadIdFound = thread.id;\n commentIdFound = thread.comments?.[0].id;\n commentNeedsUpdating = firstCommentContent !== body;\n }\n });\n\n if (!threadIdFound) {\n await azureApiGit.createThread(\n {\n comments: [{ content: body, commentType: 1, parentCommentId: 0 }],\n status: 1,\n },\n config.repoId,\n number,\n );\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await azureApiGit.updateComment(\n {\n content: body,\n },\n config.repoId,\n number,\n threadIdFound,\n // TODO #22198\n commentIdFound!,\n );\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment updated',\n );\n } else {\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment is already update-to-date',\n );\n }\n\n return true;\n}\n\nexport async function ensureCommentRemoval(\n removeConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = removeConfig;\n const key =\n removeConfig.type === 'by-topic'\n ? removeConfig.topic\n : removeConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n\n const azureApiGit = await azureApi.gitApi();\n const threads = await azureApiGit.getThreads(config.repoId, issueNo);\n\n let threadIdFound: number | null | undefined = null;\n if (removeConfig.type === 'by-topic') {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n !!thread.comments?.[0].content?.startsWith(\n `### ${removeConfig.topic}\\n\\n`,\n ),\n );\n threadIdFound = thread?.id;\n } else {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n thread.comments?.[0].content?.trim() === removeConfig.content,\n );\n threadIdFound = thread?.id;\n }\n\n if (threadIdFound) {\n await azureApiGit.updateThread(\n {\n status: 4, // close\n },\n config.repoId,\n issueNo,\n threadIdFound,\n );\n }\n}\n\nconst renovateToAzureStatusMapping: Record<BranchStatus, GitStatusState> = {\n ['green']: GitStatusState.Succeeded,\n ['yellow']: GitStatusState.Pending,\n ['red']: GitStatusState.Failed,\n};\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n logger.debug(\n `setBranchStatus(${branchName}, ${context}, ${description}, ${state}, ${targetUrl!})`,\n );\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n const statusToCreate: GitStatus = {\n description,\n context: getGitStatusContextFromCombinedName(context),\n state: renovateToAzureStatusMapping[state],\n targetUrl,\n };\n await azureApiGit.createCommitStatus(\n statusToCreate,\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n );\n logger.trace(`Created commit status of ${state} on branch ${branchName}`);\n}\n\nexport async function mergePr({\n branchName,\n id: pullRequestId,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${pullRequestId}, ${branchName!})`);\n const azureApiGit = await azureApi.gitApi();\n\n let pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n\n const mergeStrategy =\n strategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(strategy);\n const objToUpdate: GitPullRequest = {\n status: PullRequestStatus.Completed,\n lastMergeSourceCommit: pr.lastMergeSourceCommit,\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.trace(\n `Updating PR ${pullRequestId} to status ${PullRequestStatus.Completed} (${\n PullRequestStatus[PullRequestStatus.Completed]\n }) with lastMergeSourceCommit ${\n // TODO: types (#22198)\n pr.lastMergeSourceCommit?.commitId\n } using mergeStrategy ${mergeStrategy} (${\n GitPullRequestMergeStrategy[mergeStrategy]\n })`,\n );\n\n try {\n const response = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n pullRequestId,\n );\n\n let retries = 0;\n let isClosed = response.status === PullRequestStatus.Completed;\n while (!isClosed && retries < 5) {\n retries += 1;\n const sleepMs = retries * 1000;\n logger.trace(\n { pullRequestId, status: pr.status, retries },\n `Updated PR to closed status but change has not taken effect yet. Retrying...`,\n );\n\n await setTimeout(sleepMs);\n pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n isClosed = pr.status === PullRequestStatus.Completed;\n }\n\n if (!isClosed) {\n logger.warn(\n {\n pullRequestId,\n status: pr.status,\n expectedPRStatus: PullRequestStatus[PullRequestStatus.Completed],\n actualPRStatus: PullRequestStatus[pr.status!],\n },\n 'Expected PR to have completed status. However, the PR has a different status',\n );\n }\n return true;\n } catch (err) {\n logger.debug({ err }, 'Failed to set the PR as completed.');\n return false;\n }\n}\n\nexport function massageMarkdown(input: string): string {\n // Remove any HTML we use\n return smartTruncate(input, maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'PR is renamed to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n}\n\nexport function maxBodyLength(): number {\n return 4000;\n}\n\n/* v8 ignore next */\nexport function findIssue(): Promise<Issue | null> {\n // TODO: Needs implementation (#9592)\n logger.debug(`findIssue() is not implemented`);\n return Promise.resolve(null);\n}\n\n/* v8 ignore next */\nexport function ensureIssue(): Promise<EnsureIssueResult | null> {\n // TODO: Needs implementation (#9592)\n logger.debug(`ensureIssue() is not implemented`);\n return Promise.resolve(null);\n}\n\n/* v8 ignore next */\nexport function ensureIssueClosing(): Promise<void> {\n return Promise.resolve();\n}\n\n/* v8 ignore next */\nexport function getIssueList(): Promise<Issue[]> {\n logger.debug(`getIssueList()`);\n // TODO: Needs implementation (#9592)\n return Promise.resolve([]);\n}\n\nasync function getUserIds(users: string[]): Promise<User[]> {\n const azureApiGit = await azureApi.gitApi();\n const azureApiCore = await azureApi.coreApi();\n const repos = await azureApiGit.getRepositories();\n const repo = repos.find((c) => c.id === config.repoId)!;\n const requiredReviewerPrefix = 'required:';\n const validReviewers = new Set<string>();\n\n // TODO #22198\n const teams = await azureHelper.getAllProjectTeams(repo.project!.id!);\n const members = await Promise.all(\n teams.map(\n async (t) =>\n await azureApiCore.getTeamMembersWithExtendedProperties(\n // TODO #22198\n repo.project!.id!,\n t.id!,\n ),\n ),\n );\n\n const ids: { id: string; name: string; isRequired: boolean }[] = [];\n members.forEach((listMembers) => {\n listMembers.forEach((m) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (\n reviewer.toLowerCase() === m.identity?.displayName?.toLowerCase() ||\n reviewer.toLowerCase() === m.identity?.uniqueName?.toLowerCase()\n ) {\n if (ids.filter((c) => c.id === m.identity?.id).length === 0) {\n // TODO #22198\n ids.push({\n id: m.identity.id!,\n name: reviewer,\n isRequired,\n });\n\n validReviewers.add(reviewer);\n }\n }\n });\n });\n });\n\n teams.forEach((t) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (reviewer.toLowerCase() === t.name?.toLowerCase()) {\n if (ids.filter((c) => c.id === t.id).length === 0) {\n // TODO #22198\n ids.push({ id: t.id!, name: reviewer, isRequired });\n\n validReviewers.add(reviewer);\n }\n }\n });\n });\n\n for (const u of users) {\n const reviewer = u.replace(requiredReviewerPrefix, '');\n if (!validReviewers.has(reviewer)) {\n logger.once.info(\n `${reviewer} is neither an Azure DevOps Team nor a user associated with a Team`,\n );\n }\n }\n\n return ids;\n}\n\n/**\n *\n * @param {number} issueNo\n * @param {string[]} assignees\n */\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.trace(`addAssignees(${issueNo}, [${assignees.join(', ')}])`);\n const ids = await getUserIds(assignees);\n await ensureComment({\n number: issueNo,\n topic: 'Add Assignees',\n content: ids.map((a) => `@<${a.id}>`).join(', '),\n });\n}\n\n/**\n *\n * @param {number} prNo\n * @param {string[]} reviewers\n */\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.trace(`addReviewers(${prNo}, [${reviewers.join(', ')}])`);\n const azureApiGit = await azureApi.gitApi();\n\n const ids = await getUserIds(reviewers);\n\n await Promise.all(\n ids.map(async (obj) => {\n await azureApiGit.createPullRequestReviewer(\n {\n isRequired: obj.isRequired,\n },\n config.repoId,\n prNo,\n obj.id,\n );\n logger.debug(`Reviewer added: ${obj.name}`);\n }),\n );\n}\n\nexport async function deleteLabel(\n prNumber: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${prNumber}`);\n const azureApiGit = await azureApi.gitApi();\n await azureApiGit.deletePullRequestLabels(config.repoId, prNumber, label);\n}\n"]}
@@ -69,10 +69,10 @@ async function ensureComment({ config, number: prNo, topic, content, }) {
69
69
  }
70
70
  return true;
71
71
  }
72
- catch (err) /* v8 ignore start */ {
72
+ catch (err) /* v8 ignore next */ {
73
73
  logger_1.logger.warn({ err }, 'Error ensuring comment');
74
74
  return false;
75
- } /* v8 ignore stop */
75
+ }
76
76
  }
77
77
  async function reopenComments(config, prNo) {
78
78
  const comments = await getComments(config, prNo);
@@ -100,9 +100,9 @@ async function ensureCommentRemoval(config, deleteConfig) {
100
100
  await deleteComment(config, prNo, commentId);
101
101
  }
102
102
  }
103
- catch (err) /* v8 ignore start */ {
103
+ catch (err) /* v8 ignore next */ {
104
104
  logger_1.logger.warn({ err }, 'Error ensuring comment removal');
105
- } /* v8 ignore stop */
105
+ }
106
106
  }
107
107
  function sanitizeCommentBody(body) {
108
108
  return body
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../../lib/modules/platform/bitbucket/comments.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { BitbucketHttp } from '../../../util/http/bitbucket';\nimport type { EnsureCommentConfig, EnsureCommentRemovalConfig } from '../types';\nimport type { Account, Config, PagedResult } from './types';\n\nexport const REOPEN_PR_COMMENT_KEYWORD = 'reopen!';\n\nconst bitbucketHttp = new BitbucketHttp();\n\ninterface Comment {\n content: { raw: string };\n id: number;\n user: Account;\n}\n\nexport type CommentsConfig = Pick<Config, 'repository'>;\n\ninterface EnsureBitbucketCommentConfig extends EnsureCommentConfig {\n config: CommentsConfig;\n}\n\nasync function getComments(\n config: CommentsConfig,\n prNo: number,\n): Promise<Comment[]> {\n const comments = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<Comment>>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments`,\n {\n paginate: true,\n },\n )\n ).body.values;\n\n logger.debug(`Found ${comments.length} comments`);\n return comments;\n}\n\nasync function addComment(\n config: CommentsConfig,\n prNo: number,\n raw: string,\n): Promise<void> {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments`,\n {\n body: { content: { raw } },\n },\n );\n}\n\nasync function editComment(\n config: CommentsConfig,\n prNo: number,\n commentId: number,\n raw: string,\n): Promise<void> {\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments/${commentId}`,\n {\n body: { content: { raw } },\n },\n );\n}\n\nasync function deleteComment(\n config: CommentsConfig,\n prNo: number,\n commentId: number,\n): Promise<void> {\n await bitbucketHttp.deleteJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments/${commentId}`,\n );\n}\n\nexport async function ensureComment({\n config,\n number: prNo,\n topic,\n content,\n}: EnsureBitbucketCommentConfig): Promise<boolean> {\n try {\n const comments = await getComments(config, prNo);\n let body: string;\n let commentId: number | undefined;\n let commentNeedsUpdating: boolean | undefined;\n if (topic) {\n logger.debug(`Ensuring comment \"${topic}\" in #${prNo}`);\n body = `### ${topic}\\n\\n${content}`;\n comments.forEach((comment) => {\n if (comment.content.raw.startsWith(`### ${topic}\\n\\n`)) {\n commentId = comment.id;\n commentNeedsUpdating = comment.content.raw !== body;\n }\n });\n } else {\n logger.debug(`Ensuring content-only comment in #${prNo}`);\n body = `${content}`;\n comments.forEach((comment) => {\n if (comment.content.raw === body) {\n commentId = comment.id;\n commentNeedsUpdating = false;\n }\n });\n }\n\n // sanitize any language that isn't supported by Bitbucket Cloud\n body = sanitizeCommentBody(body);\n\n if (!commentId) {\n await addComment(config, prNo, body);\n logger.info(\n { repository: config.repository, prNo, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await editComment(config, prNo, commentId, body);\n logger.debug({ repository: config.repository, prNo }, 'Comment updated');\n } else {\n logger.debug('Comment is already update-to-date');\n }\n return true;\n } catch (err) /* v8 ignore start */ {\n logger.warn({ err }, 'Error ensuring comment');\n return false;\n } /* v8 ignore stop */\n}\n\nexport async function reopenComments(\n config: CommentsConfig,\n prNo: number,\n): Promise<Comment[]> {\n const comments = await getComments(config, prNo);\n\n const reopenComments = comments.filter((comment) =>\n comment.content.raw.startsWith(REOPEN_PR_COMMENT_KEYWORD),\n );\n\n return reopenComments;\n}\n\nexport async function ensureCommentRemoval(\n config: CommentsConfig,\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n try {\n const { number: prNo } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${prNo} is removed`);\n const comments = await getComments(config, prNo);\n\n let commentId: number | undefined = undefined;\n\n if (deleteConfig.type === 'by-topic') {\n const byTopic = (comment: Comment): boolean =>\n comment.content.raw.startsWith(`### ${deleteConfig.topic}\\n\\n`);\n commentId = comments.find(byTopic)?.id;\n } else if (deleteConfig.type === 'by-content') {\n const byContent = (comment: Comment): boolean =>\n comment.content.raw.trim() === deleteConfig.content;\n commentId = comments.find(byContent)?.id;\n }\n\n if (commentId) {\n await deleteComment(config, prNo, commentId);\n }\n } catch (err) /* v8 ignore start */ {\n logger.warn({ err }, 'Error ensuring comment removal');\n } /* v8 ignore stop */\n}\n\nfunction sanitizeCommentBody(body: string): string {\n return body\n .replace(\n 'checking the rebase/retry box above',\n 'renaming this PR to start with \"rebase!\"',\n )\n .replace(\n 'rename this PR to get a fresh replacement',\n 'add a comment starting with \"reopen!\" to get a fresh replacement',\n );\n}\n"]}
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../../lib/modules/platform/bitbucket/comments.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { BitbucketHttp } from '../../../util/http/bitbucket';\nimport type { EnsureCommentConfig, EnsureCommentRemovalConfig } from '../types';\nimport type { Account, Config, PagedResult } from './types';\n\nexport const REOPEN_PR_COMMENT_KEYWORD = 'reopen!';\n\nconst bitbucketHttp = new BitbucketHttp();\n\ninterface Comment {\n content: { raw: string };\n id: number;\n user: Account;\n}\n\nexport type CommentsConfig = Pick<Config, 'repository'>;\n\ninterface EnsureBitbucketCommentConfig extends EnsureCommentConfig {\n config: CommentsConfig;\n}\n\nasync function getComments(\n config: CommentsConfig,\n prNo: number,\n): Promise<Comment[]> {\n const comments = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<Comment>>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments`,\n {\n paginate: true,\n },\n )\n ).body.values;\n\n logger.debug(`Found ${comments.length} comments`);\n return comments;\n}\n\nasync function addComment(\n config: CommentsConfig,\n prNo: number,\n raw: string,\n): Promise<void> {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments`,\n {\n body: { content: { raw } },\n },\n );\n}\n\nasync function editComment(\n config: CommentsConfig,\n prNo: number,\n commentId: number,\n raw: string,\n): Promise<void> {\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments/${commentId}`,\n {\n body: { content: { raw } },\n },\n );\n}\n\nasync function deleteComment(\n config: CommentsConfig,\n prNo: number,\n commentId: number,\n): Promise<void> {\n await bitbucketHttp.deleteJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/comments/${commentId}`,\n );\n}\n\nexport async function ensureComment({\n config,\n number: prNo,\n topic,\n content,\n}: EnsureBitbucketCommentConfig): Promise<boolean> {\n try {\n const comments = await getComments(config, prNo);\n let body: string;\n let commentId: number | undefined;\n let commentNeedsUpdating: boolean | undefined;\n if (topic) {\n logger.debug(`Ensuring comment \"${topic}\" in #${prNo}`);\n body = `### ${topic}\\n\\n${content}`;\n comments.forEach((comment) => {\n if (comment.content.raw.startsWith(`### ${topic}\\n\\n`)) {\n commentId = comment.id;\n commentNeedsUpdating = comment.content.raw !== body;\n }\n });\n } else {\n logger.debug(`Ensuring content-only comment in #${prNo}`);\n body = `${content}`;\n comments.forEach((comment) => {\n if (comment.content.raw === body) {\n commentId = comment.id;\n commentNeedsUpdating = false;\n }\n });\n }\n\n // sanitize any language that isn't supported by Bitbucket Cloud\n body = sanitizeCommentBody(body);\n\n if (!commentId) {\n await addComment(config, prNo, body);\n logger.info(\n { repository: config.repository, prNo, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await editComment(config, prNo, commentId, body);\n logger.debug({ repository: config.repository, prNo }, 'Comment updated');\n } else {\n logger.debug('Comment is already update-to-date');\n }\n return true;\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error ensuring comment');\n return false;\n }\n}\n\nexport async function reopenComments(\n config: CommentsConfig,\n prNo: number,\n): Promise<Comment[]> {\n const comments = await getComments(config, prNo);\n\n const reopenComments = comments.filter((comment) =>\n comment.content.raw.startsWith(REOPEN_PR_COMMENT_KEYWORD),\n );\n\n return reopenComments;\n}\n\nexport async function ensureCommentRemoval(\n config: CommentsConfig,\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n try {\n const { number: prNo } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${prNo} is removed`);\n const comments = await getComments(config, prNo);\n\n let commentId: number | undefined = undefined;\n\n if (deleteConfig.type === 'by-topic') {\n const byTopic = (comment: Comment): boolean =>\n comment.content.raw.startsWith(`### ${deleteConfig.topic}\\n\\n`);\n commentId = comments.find(byTopic)?.id;\n } else if (deleteConfig.type === 'by-content') {\n const byContent = (comment: Comment): boolean =>\n comment.content.raw.trim() === deleteConfig.content;\n commentId = comments.find(byContent)?.id;\n }\n\n if (commentId) {\n await deleteComment(config, prNo, commentId);\n }\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error ensuring comment removal');\n }\n}\n\nfunction sanitizeCommentBody(body: string): string {\n return body\n .replace(\n 'checking the rebase/retry box above',\n 'renaming this PR to start with \"rebase!\"',\n )\n .replace(\n 'rename this PR to get a fresh replacement',\n 'add a comment starting with \"reopen!\" to get a fresh replacement',\n );\n}\n"]}
@@ -113,10 +113,10 @@ async function getRepos(config) {
113
113
  }
114
114
  return repos.map(({ owner, name }) => `${owner}/${name}`);
115
115
  }
116
- catch (err) /* v8 ignore start */ {
116
+ catch (err) /* v8 ignore next */ {
117
117
  logger_1.logger.error({ err }, `bitbucket getRepos error`);
118
118
  throw err;
119
- } /* v8 ignore stop */
119
+ }
120
120
  }
121
121
  async function getRawFile(fileName, repoName, branchOrTag) {
122
122
  // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D
@@ -174,13 +174,13 @@ async function initRepo({ repository, cloneSubmodules, cloneSubmodulesFilter, ig
174
174
  };
175
175
  logger_1.logger.debug(`${repository} owner = ${config.owner}`);
176
176
  }
177
- catch (err) /* v8 ignore start */ {
177
+ catch (err) /* v8 ignore next */ {
178
178
  if (err.statusCode === 404) {
179
179
  throw new Error(error_messages_1.REPOSITORY_NOT_FOUND);
180
180
  }
181
181
  logger_1.logger.debug({ err }, 'Unknown Bitbucket initRepo error');
182
182
  throw err;
183
- } /* v8 ignore stop */
183
+ }
184
184
  const { hostname } = node_url_1.default.parse(defaults.endpoint);
185
185
  // Converts API hostnames to their respective HTTP git hosts:
186
186
  // `api.bitbucket.org` to `bitbucket.org`
@@ -216,7 +216,7 @@ async function initRepo({ repository, cloneSubmodules, cloneSubmodulesFilter, ig
216
216
  };
217
217
  return repoConfig;
218
218
  }
219
- /* v8 ignore start */
219
+ /* v8 ignore next */
220
220
  function matchesState(state, desiredState) {
221
221
  if (desiredState === 'all') {
222
222
  return true;
@@ -225,7 +225,7 @@ function matchesState(state, desiredState) {
225
225
  return state !== desiredState.substring(1);
226
226
  }
227
227
  return state === desiredState;
228
- } /* v8 ignore stop */
228
+ }
229
229
  async function getPrList() {
230
230
  logger_1.logger.trace('getPrList()');
231
231
  return await pr_cache_1.BitbucketPrCache.getPrs(bitbucketHttp, config.repository, renovateUserUuid);
@@ -274,10 +274,10 @@ async function findPr({ branchName, prTitle, state = 'all', includeOtherAuthors,
274
274
  // Gets details for a PR
275
275
  async function getPr(prNo) {
276
276
  const pr = (await bitbucketHttp.getJsonUnchecked(`/2.0/repositories/${config.repository}/pullrequests/${prNo}`, { cacheProvider: repository_http_cache_provider_1.aggressiveRepoCacheProvider })).body;
277
- /* v8 ignore start */
277
+ /* v8 ignore next */
278
278
  if (!pr) {
279
279
  return null;
280
- } /* v8 ignore stop */
280
+ }
281
281
  const res = {
282
282
  ...utils.prInfo(pr),
283
283
  };
@@ -295,10 +295,10 @@ async function getBranchCommit(branchName) {
295
295
  const branch = (await bitbucketHttp.getJsonUnchecked(`/2.0/repositories/${config.repository}/refs/branches/${escapeHash(branchName)}`, { cacheProvider: repository_http_cache_provider_1.aggressiveRepoCacheProvider })).body;
296
296
  return branch.target.hash;
297
297
  }
298
- catch (err) /* v8 ignore start */ {
298
+ catch (err) /* v8 ignore next */ {
299
299
  logger_1.logger.debug({ err }, `getBranchCommit('${branchName}') failed'`);
300
300
  return undefined;
301
- } /* v8 ignore stop */
301
+ }
302
302
  }
303
303
  // Returns the Pull Request for a branch. Null if not exists.
304
304
  async function getBranchPr(branchName) {
@@ -312,13 +312,13 @@ async function getBranchPr(branchName) {
312
312
  async function getStatus(branchName, memCache = true) {
313
313
  const sha = await getBranchCommit(branchName);
314
314
  const opts = { paginate: true };
315
- /* v8 ignore start: temporary code */
315
+ /* v8 ignore next: temporary code */
316
316
  if (memCache) {
317
317
  opts.cacheProvider = repository_http_cache_provider_1.aggressiveRepoCacheProvider;
318
318
  }
319
319
  else {
320
320
  opts.memCache = false;
321
- } /* v8 ignore stop */
321
+ }
322
322
  return (await bitbucketHttp.getJsonUnchecked(`/2.0/repositories/${config.repository}/commit/${sha}/statuses`, opts)).body.values;
323
323
  }
324
324
  // Returns the combined status for a branch.
@@ -385,20 +385,20 @@ async function findOpenIssues(title) {
385
385
  filters.push(`reporter.uuid="${renovateUserUuid}"`);
386
386
  }
387
387
  const filter = encodeURIComponent(filters.join(' AND '));
388
- return ((await bitbucketHttp.getJsonUnchecked(`/2.0/repositories/${config.repository}/issues?q=${filter}`, { cacheProvider: repository_http_cache_provider_1.aggressiveRepoCacheProvider })).body.values /* v8 ignore start */ || [] /* v8 ignore stop */);
388
+ return ((await bitbucketHttp.getJsonUnchecked(`/2.0/repositories/${config.repository}/issues?q=${filter}`, { cacheProvider: repository_http_cache_provider_1.aggressiveRepoCacheProvider })).body.values /* v8 ignore next */ || []);
389
389
  }
390
- catch (err) /* v8 ignore start */ {
390
+ catch (err) /* v8 ignore next */ {
391
391
  logger_1.logger.warn({ err }, 'Error finding issues');
392
392
  return [];
393
- } /* v8 ignore stop */
393
+ }
394
394
  }
395
395
  async function findIssue(title) {
396
396
  logger_1.logger.debug(`findIssue(${title})`);
397
- /* v8 ignore start */
397
+ /* v8 ignore next */
398
398
  if (!config.has_issues) {
399
399
  logger_1.logger.debug('Issues are disabled - cannot findIssue');
400
400
  return null;
401
- } /* v8 ignore stop */
401
+ }
402
402
  const issues = await findOpenIssues(title);
403
403
  if (!issues.length) {
404
404
  return null;
@@ -430,12 +430,12 @@ function maxBodyLength() {
430
430
  }
431
431
  async function ensureIssue({ title, reuseTitle, body, }) {
432
432
  logger_1.logger.debug(`ensureIssue()`);
433
- /* v8 ignore start */
433
+ /* v8 ignore next */
434
434
  if (!config.has_issues) {
435
435
  logger_1.logger.debug('Issues are disabled - cannot ensureIssue');
436
436
  logger_1.logger.debug(`Failed to ensure Issue with title:${title}`);
437
437
  return null;
438
- } /* v8 ignore stop */
438
+ }
439
439
  try {
440
440
  let issues = await findOpenIssues(title);
441
441
  const description = massageMarkdown((0, sanitize_1.sanitize)(body));
@@ -476,17 +476,17 @@ async function ensureIssue({ title, reuseTitle, body, }) {
476
476
  return 'created';
477
477
  }
478
478
  }
479
- catch (err) /* v8 ignore start */ {
479
+ catch (err) /* v8 ignore next */ {
480
480
  if (err.message.startsWith('Repository has no issue tracker.')) {
481
481
  logger_1.logger.debug(`Issues are disabled, so could not create issue: ${title}`);
482
482
  }
483
483
  else {
484
484
  logger_1.logger.warn({ err }, 'Could not ensure issue');
485
485
  }
486
- } /* v8 ignore stop */
486
+ }
487
487
  return null;
488
488
  }
489
- /* v8 ignore start */
489
+ /* v8 ignore next */
490
490
  async function getIssueList() {
491
491
  logger_1.logger.debug(`getIssueList()`);
492
492
  if (!config.has_issues) {
@@ -509,13 +509,13 @@ async function getIssueList() {
509
509
  logger_1.logger.warn({ err }, 'Error finding issues');
510
510
  return [];
511
511
  }
512
- } /* v8 ignore stop */
512
+ }
513
513
  async function ensureIssueClosing(title) {
514
- /* v8 ignore start */
514
+ /* v8 ignore next */
515
515
  if (!config.has_issues) {
516
516
  logger_1.logger.debug('Issues are disabled - cannot ensureIssueClosing');
517
517
  return;
518
- } /* v8 ignore stop */
518
+ }
519
519
  const issues = await findOpenIssues(title);
520
520
  for (const issue of issues) {
521
521
  await closeIssue(issue.id);
@@ -546,10 +546,10 @@ async function addReviewers(prId, reviewers) {
546
546
  body,
547
547
  });
548
548
  }
549
- /* v8 ignore start */
549
+ /* v8 ignore next */
550
550
  function deleteLabel() {
551
551
  throw new Error('deleteLabel not implemented');
552
- } /* v8 ignore stop */
552
+ }
553
553
  function ensureComment({ number, topic, content, }) {
554
554
  // https://developer.atlassian.com/bitbucket/api/2/reference/search?q=pullrequest+comment
555
555
  return comments.ensureComment({
@@ -668,7 +668,7 @@ async function createPr({ sourceBranch, targetBranch, prTitle: title, prBody: de
668
668
  }
669
669
  return pr;
670
670
  }
671
- catch (err) /* v8 ignore start */ {
671
+ catch (err) /* v8 ignore next */ {
672
672
  // Try sanitizing reviewers
673
673
  const sanitizedReviewers = await sanitizeReviewers(reviewers, err);
674
674
  if (sanitizedReviewers === undefined) {
@@ -689,7 +689,7 @@ async function createPr({ sourceBranch, targetBranch, prTitle: title, prBody: de
689
689
  }
690
690
  return pr;
691
691
  }
692
- } /* v8 ignore stop */
692
+ }
693
693
  }
694
694
  async function autoResolvePrTasks(pr) {
695
695
  logger_1.logger.debug(`Auto resolve PR tasks in #${pr.number}`);
@@ -773,11 +773,11 @@ async function mergePr({ branchName, id: prNo, strategy: mergeStrategy, }) {
773
773
  });
774
774
  logger_1.logger.debug('Automerging succeeded');
775
775
  }
776
- catch (err) /* v8 ignore start */ {
776
+ catch (err) /* v8 ignore next */ {
777
777
  logger_1.logger.debug({ err }, `PR merge error`);
778
778
  logger_1.logger.info({ pr: prNo }, 'PR automerge failed');
779
779
  return false;
780
- } /* v8 ignore stop */
780
+ }
781
781
  return true;
782
782
  }
783
783
  //# sourceMappingURL=index.js.map