renovate 39.182.5 → 39.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/config/decrypt.d.ts +1 -1
  2. package/dist/config/decrypt.js +10 -7
  3. package/dist/config/decrypt.js.map +1 -1
  4. package/dist/config/presets/gitlab/index.js +1 -1
  5. package/dist/config/presets/gitlab/index.js.map +1 -1
  6. package/dist/config/presets/http/index.js +1 -1
  7. package/dist/config/presets/http/index.js.map +1 -1
  8. package/dist/data/monorepo.json +2 -1
  9. package/dist/modules/datasource/artifactory/index.js +1 -1
  10. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  11. package/dist/modules/datasource/crate/index.js +1 -1
  12. package/dist/modules/datasource/crate/index.js.map +1 -1
  13. package/dist/modules/datasource/custom/formats/html.js +1 -1
  14. package/dist/modules/datasource/custom/formats/html.js.map +1 -1
  15. package/dist/modules/datasource/custom/formats/yaml.js +1 -1
  16. package/dist/modules/datasource/custom/formats/yaml.js.map +1 -1
  17. package/dist/modules/datasource/deb/index.js +1 -1
  18. package/dist/modules/datasource/deb/index.js.map +1 -1
  19. package/dist/modules/datasource/docker/index.js +1 -1
  20. package/dist/modules/datasource/docker/index.js.map +1 -1
  21. package/dist/modules/datasource/github-release-attachments/index.js +2 -2
  22. package/dist/modules/datasource/github-release-attachments/index.js.map +1 -1
  23. package/dist/modules/datasource/go/base.js +1 -1
  24. package/dist/modules/datasource/go/base.js.map +1 -1
  25. package/dist/modules/datasource/go/releases-goproxy.js +1 -1
  26. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  27. package/dist/modules/datasource/golang-version/index.js +1 -1
  28. package/dist/modules/datasource/golang-version/index.js.map +1 -1
  29. package/dist/modules/datasource/hexpm-bob/index.js +1 -1
  30. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  31. package/dist/modules/datasource/maven/util.js +1 -1
  32. package/dist/modules/datasource/maven/util.js.map +1 -1
  33. package/dist/modules/datasource/nuget/v2.js +1 -1
  34. package/dist/modules/datasource/nuget/v2.js.map +1 -1
  35. package/dist/modules/datasource/nuget/v3.js +1 -1
  36. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  37. package/dist/modules/datasource/pod/index.js +1 -1
  38. package/dist/modules/datasource/pod/index.js.map +1 -1
  39. package/dist/modules/datasource/pypi/index.js +1 -1
  40. package/dist/modules/datasource/pypi/index.js.map +1 -1
  41. package/dist/modules/datasource/ruby-version/index.js +1 -1
  42. package/dist/modules/datasource/ruby-version/index.js.map +1 -1
  43. package/dist/modules/datasource/rubygems/index.js +1 -1
  44. package/dist/modules/datasource/rubygems/index.js.map +1 -1
  45. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +2 -2
  46. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  47. package/dist/modules/datasource/terraform-provider/index.js +1 -1
  48. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  49. package/dist/modules/manager/batect-wrapper/artifacts.js +1 -1
  50. package/dist/modules/manager/batect-wrapper/artifacts.js.map +1 -1
  51. package/dist/modules/manager/gradle-wrapper/artifacts.js +1 -1
  52. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  53. package/dist/modules/platform/bitbucket/index.js +1 -1
  54. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  55. package/dist/modules/platform/gerrit/client.js +1 -1
  56. package/dist/modules/platform/gerrit/client.js.map +1 -1
  57. package/dist/util/http/auth.js +0 -1
  58. package/dist/util/http/auth.js.map +1 -1
  59. package/dist/util/http/bitbucket-server.d.ts +4 -2
  60. package/dist/util/http/bitbucket-server.js +15 -18
  61. package/dist/util/http/bitbucket-server.js.map +1 -1
  62. package/dist/util/http/bitbucket.d.ts +5 -3
  63. package/dist/util/http/bitbucket.js +24 -27
  64. package/dist/util/http/bitbucket.js.map +1 -1
  65. package/dist/util/http/cache/abstract-http-cache-provider.js +1 -1
  66. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  67. package/dist/util/http/gerrit.d.ts +6 -3
  68. package/dist/util/http/gerrit.js +11 -12
  69. package/dist/util/http/gerrit.js.map +1 -1
  70. package/dist/util/http/gitea.d.ts +4 -2
  71. package/dist/util/http/gitea.js +10 -11
  72. package/dist/util/http/gitea.js.map +1 -1
  73. package/dist/util/http/github.d.ts +7 -2
  74. package/dist/util/http/github.js +62 -58
  75. package/dist/util/http/github.js.map +1 -1
  76. package/dist/util/http/gitlab.d.ts +6 -3
  77. package/dist/util/http/gitlab.js +54 -44
  78. package/dist/util/http/gitlab.js.map +1 -1
  79. package/dist/util/http/host-rules.d.ts +2 -1
  80. package/dist/util/http/host-rules.js.map +1 -1
  81. package/dist/util/http/http.d.ts +17 -0
  82. package/dist/util/http/http.js +3 -0
  83. package/dist/util/http/http.js.map +1 -0
  84. package/dist/util/http/index.d.ts +14 -7
  85. package/dist/util/http/index.js +64 -51
  86. package/dist/util/http/index.js.map +1 -1
  87. package/dist/util/http/types.d.ts +5 -9
  88. package/dist/util/http/types.js.map +1 -1
  89. package/dist/util/url.js +3 -8
  90. package/dist/util/url.js.map +1 -1
  91. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js +1 -1
  92. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js.map +1 -1
  93. package/dist/workers/repository/update/pr/changelog/gitlab/index.js +1 -1
  94. package/dist/workers/repository/update/pr/changelog/gitlab/index.js.map +1 -1
  95. package/package.json +3 -3
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Http = exports.EmptyResultError = exports.HttpError = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ // TODO: refactor code to remove this (#9651)
6
+ require("./legacy");
5
7
  const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
6
8
  const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
7
9
  const got_1 = tslib_1.__importStar(require("got"));
@@ -24,8 +26,6 @@ const host_rules_1 = require("./host-rules");
24
26
  const queue_1 = require("./queue");
25
27
  const retry_after_1 = require("./retry-after");
26
28
  const throttle_1 = require("./throttle");
27
- // TODO: refactor code to remove this (#9651)
28
- require("./legacy");
29
29
  const util_1 = require("./util");
30
30
  class EmptyResultError extends Error {
31
31
  }
@@ -38,11 +38,6 @@ function applyDefaultHeaders(options) {
38
38
  `RenovateBot/${renovateVersion} (https://github.com/renovatebot/renovate)`,
39
39
  };
40
40
  }
41
- // Note on types:
42
- // options.requestType can be either 'json' or 'buffer', but `T` should be
43
- // `Buffer` in the latter case.
44
- // We don't declare overload signatures because it's immediately wrapped by
45
- // `request`.
46
41
  async function gotTask(url, options, queueStats) {
47
42
  logger_1.logger.trace({ url, options }, 'got request');
48
43
  let duration = 0;
@@ -53,24 +48,21 @@ async function gotTask(url, options, queueStats) {
53
48
  const resp = await (0, got_1.default)(url, { ...options, hooks: hooks_1.hooks });
54
49
  statusCode = resp.statusCode;
55
50
  duration =
56
- resp.timings.phases.total ??
57
- /* istanbul ignore next: can't be tested */ 0;
51
+ resp.timings.phases.total ?? /* v8 ignore next: can't be tested */ 0;
58
52
  return resp;
59
53
  }
60
54
  catch (error) {
61
55
  if (error instanceof got_1.RequestError) {
62
- statusCode =
63
- error.response?.statusCode ??
64
- /* istanbul ignore next: can't be tested */ -1;
56
+ statusCode = error.response?.statusCode ?? -1;
65
57
  duration =
66
- error.timings?.phases.total ??
67
- /* istanbul ignore next: can't be tested */ -1;
58
+ error.timings?.phases.total ?? /* v8 ignore next: can't be tested */ -1;
68
59
  const method = options.method.toUpperCase();
69
- const code = error.code ?? /* istanbul ignore next */ 'UNKNOWN';
70
- const retryCount = error.request?.retryCount ?? /* istanbul ignore next */ -1;
60
+ const code = error.code ?? /* v8 ignore next */ 'UNKNOWN';
61
+ const retryCount = error.request?.retryCount ?? /* v8 ignore next */ -1;
71
62
  logger_1.logger.debug(`${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`);
72
63
  }
73
64
  throw error;
65
+ /* v8 ignore next: 🐛 https://github.com/bcoe/c8/issues/229 */
74
66
  }
75
67
  finally {
76
68
  stats_1.HttpStats.write({
@@ -85,10 +77,14 @@ async function gotTask(url, options, queueStats) {
85
77
  class Http {
86
78
  hostType;
87
79
  options;
80
+ get baseUrl() {
81
+ return undefined;
82
+ }
88
83
  constructor(hostType, options = {}) {
89
84
  this.hostType = hostType;
90
85
  const retryLimit = process.env.NODE_ENV === 'test' ? 0 : 2;
91
86
  this.options = (0, deepmerge_1.default)(options, {
87
+ method: 'get',
92
88
  context: { hostType },
93
89
  retry: {
94
90
  calculateDelay: (retryObject) => this.calculateRetryDelay(retryObject),
@@ -98,12 +94,10 @@ class Http {
98
94
  }, { isMergeableObject: is_1.default.plainObject });
99
95
  }
100
96
  async request(requestUrl, httpOptions) {
101
- let url = requestUrl.toString();
102
- if (httpOptions?.baseUrl) {
103
- url = (0, url_1.resolveBaseUrl)(httpOptions.baseUrl, url);
104
- }
97
+ const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);
98
+ const url = resolvedUrl.toString();
99
+ this.processOptions(resolvedUrl, httpOptions);
105
100
  let options = (0, deepmerge_1.default)({
106
- method: 'get',
107
101
  ...this.options,
108
102
  hostType: this.hostType,
109
103
  }, httpOptions, { isMergeableObject: is_1.default.plainObject });
@@ -142,7 +136,6 @@ class Http {
142
136
  if (memCacheKey) {
143
137
  resPromise = memCache.get(memCacheKey);
144
138
  }
145
- // istanbul ignore else: no cache tests
146
139
  if (!resPromise) {
147
140
  if (cacheProvider) {
148
141
  await cacheProvider.setCacheHeaders(url, options);
@@ -153,13 +146,9 @@ class Http {
153
146
  return gotTask(url, options, { queueMs });
154
147
  };
155
148
  const throttle = (0, throttle_1.getThrottle)(url);
156
- const throttledTask = throttle
157
- ? () => throttle.add(httpTask)
158
- : httpTask;
149
+ const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;
159
150
  const queue = (0, queue_1.getQueue)(url);
160
- const queuedTask = queue
161
- ? () => queue.add(throttledTask)
162
- : throttledTask;
151
+ const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;
163
152
  const { maxRetryAfter = 60 } = hostRule;
164
153
  resPromise = (0, retry_after_1.wrapWithRetry)(queuedTask, url, retry_after_1.getRetryAfter, maxRetryAfter);
165
154
  if (memCacheKey) {
@@ -186,8 +175,31 @@ class Http {
186
175
  logger_1.logger.debug({ err }, `Request error: returning stale cache instead for ${url}`);
187
176
  return staleResponse;
188
177
  }
189
- throw err;
178
+ this.handleError(requestUrl, httpOptions, err);
179
+ }
180
+ }
181
+ processOptions(_url, _options) {
182
+ // noop
183
+ }
184
+ handleError(_url, _httpOptions, err) {
185
+ throw err;
186
+ }
187
+ resolveUrl(requestUrl, options) {
188
+ let url = requestUrl;
189
+ if (url instanceof URL) {
190
+ // already a aboslute URL
191
+ return url;
192
+ }
193
+ const baseUrl = options?.baseUrl ?? this.baseUrl;
194
+ if (baseUrl) {
195
+ url = (0, url_1.resolveBaseUrl)(baseUrl, url);
196
+ }
197
+ const parsedUrl = (0, url_1.parseUrl)(url);
198
+ if (!parsedUrl || !(0, url_1.isHttpUrl)(parsedUrl)) {
199
+ logger_1.logger.error({ url: requestUrl }, 'Request Error: cannot parse url');
200
+ throw new Error('Invalid URL');
190
201
  }
202
+ return parsedUrl;
191
203
  }
192
204
  calculateRetryDelay({ computedValue }) {
193
205
  return computedValue;
@@ -196,34 +208,40 @@ class Http {
196
208
  return this.request(url, options);
197
209
  }
198
210
  head(url, options = {}) {
199
- return this.request(url, { ...options, method: 'head' });
200
- }
201
- getBuffer(url, options = {}) {
211
+ // to complex to validate
202
212
  return this.request(url, {
203
213
  ...options,
204
- responseType: 'buffer',
214
+ responseType: 'text',
215
+ method: 'head',
205
216
  });
206
217
  }
207
- async requestJson(method, { url, httpOptions: requestOptions, schema }) {
208
- const { body, ...httpOptions } = { ...requestOptions };
218
+ getText(url, options = {}) {
219
+ return this.request(url, { ...options, responseType: 'text' });
220
+ }
221
+ getBuffer(url, options = {}) {
222
+ return this.request(url, { ...options, responseType: 'buffer' });
223
+ }
224
+ requestJsonUnsafe(method, { url, httpOptions: requestOptions }) {
225
+ const { body: json, ...httpOptions } = { ...requestOptions };
209
226
  const opts = {
210
227
  ...httpOptions,
211
228
  method,
212
- responseType: 'json',
213
229
  };
214
230
  // signal that we expect a json response
215
231
  opts.headers = {
216
232
  accept: 'application/json',
217
233
  ...opts.headers,
218
234
  };
219
- if (body) {
220
- opts.json = body;
235
+ if (json) {
236
+ opts.json = json;
221
237
  }
222
- const res = await this.request(url, opts);
223
- if (!schema) {
224
- return res;
238
+ return this.request(url, { ...opts, responseType: 'json' });
239
+ }
240
+ async requestJson(method, options) {
241
+ const res = await this.requestJsonUnsafe(method, options);
242
+ if (options.schema) {
243
+ res.body = await options.schema.parseAsync(res.body);
225
244
  }
226
- res.body = await schema.parseAsync(res.body);
227
245
  return res;
228
246
  }
229
247
  resolveArgs(arg1, arg2, arg3) {
@@ -241,7 +259,7 @@ class Http {
241
259
  }
242
260
  async getPlain(url, options) {
243
261
  const opt = options ?? {};
244
- return await this.get(url, {
262
+ return await this.getText(url, {
245
263
  headers: {
246
264
  Accept: 'text/plain',
247
265
  },
@@ -252,7 +270,7 @@ class Http {
252
270
  * @deprecated use `getYaml` instead
253
271
  */
254
272
  async getYamlUnchecked(url, options) {
255
- const res = await this.get(url, options);
273
+ const res = await this.getText(url, options);
256
274
  const body = (0, yaml_1.parseSingleYaml)(res.body);
257
275
  return { ...res, body };
258
276
  }
@@ -271,7 +289,7 @@ class Http {
271
289
  ...httpOptions,
272
290
  method: 'get',
273
291
  };
274
- const res = await this.get(url, opts);
292
+ const res = await this.getText(url, opts);
275
293
  const body = await schema.parseAsync((0, yaml_1.parseSingleYaml)(res.body));
276
294
  return { ...res, body };
277
295
  }
@@ -338,16 +356,11 @@ class Http {
338
356
  stream(url, options) {
339
357
  // TODO: fix types (#22198)
340
358
  let combinedOptions = {
341
- method: 'get',
342
359
  ...this.options,
343
360
  hostType: this.hostType,
344
361
  ...options,
345
362
  };
346
- let resolvedUrl = url;
347
- // istanbul ignore else: needs test
348
- if (options?.baseUrl) {
349
- resolvedUrl = (0, url_1.resolveBaseUrl)(options.baseUrl, url);
350
- }
363
+ const resolvedUrl = this.resolveUrl(url, options).toString();
351
364
  applyDefaultHeaders(combinedOptions);
352
365
  if (is_1.default.undefined(combinedOptions.readOnly) &&
353
366
  ['head', 'get'].includes(combinedOptions.method)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/http/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, RetryObject } from 'got';\nimport got, { RequestError } from 'got';\nimport type { SetRequired } from 'type-fest';\nimport type { infer as Infer, ZodError } from 'zod';\nimport { ZodType } from 'zod';\nimport { GlobalConfig } from '../../config/global';\nimport { HOST_DISABLED } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../cache/memory';\nimport { hash } from '../hash';\nimport { type AsyncResult, Result } from '../result';\nimport { type HttpRequestStatsDataPoint, HttpStats } from '../stats';\nimport { resolveBaseUrl } from '../url';\nimport { parseSingleYaml } from '../yaml';\nimport { applyAuthorization, removeAuthorization } from './auth';\nimport { hooks } from './hooks';\nimport { applyHostRule, findMatchingRule } from './host-rules';\nimport { getQueue } from './queue';\nimport { getRetryAfter, wrapWithRetry } from './retry-after';\nimport { getThrottle } from './throttle';\nimport type {\n GotJSONOptions,\n GotOptions,\n GotTask,\n HttpOptions,\n HttpResponse,\n InternalHttpOptions,\n} from './types';\n// TODO: refactor code to remove this (#9651)\nimport './legacy';\nimport { copyResponse } from './util';\n\nexport { RequestError as HttpError };\n\nexport class EmptyResultError extends Error {}\nexport type SafeJsonError = RequestError | ZodError | EmptyResultError;\n\ninterface HttpFnArgs<\n Opts extends HttpOptions,\n ResT = unknown,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n> {\n url: string;\n httpOptions?: Opts;\n schema?: Schema;\n}\n\nfunction applyDefaultHeaders(options: Options): void {\n const renovateVersion = pkg.version;\n options.headers = {\n ...options.headers,\n 'user-agent':\n GlobalConfig.get('userAgent') ??\n `RenovateBot/${renovateVersion} (https://github.com/renovatebot/renovate)`,\n };\n}\n\ntype QueueStatsData = Pick<HttpRequestStatsDataPoint, 'queueMs'>;\n\n// Note on types:\n// options.requestType can be either 'json' or 'buffer', but `T` should be\n// `Buffer` in the latter case.\n// We don't declare overload signatures because it's immediately wrapped by\n// `request`.\nasync function gotTask<T>(\n url: string,\n options: SetRequired<GotOptions, 'method'>,\n queueStats: QueueStatsData,\n): Promise<HttpResponse<T>> {\n logger.trace({ url, options }, 'got request');\n\n let duration = 0;\n let statusCode = 0;\n\n try {\n // Cheat the TS compiler using `as` to pick a specific overload.\n // Otherwise it doesn't typecheck.\n const resp = await got<T>(url, { ...options, hooks } as GotJSONOptions);\n statusCode = resp.statusCode;\n duration =\n resp.timings.phases.total ??\n /* istanbul ignore next: can't be tested */ 0;\n return resp;\n } catch (error) {\n if (error instanceof RequestError) {\n statusCode =\n error.response?.statusCode ??\n /* istanbul ignore next: can't be tested */ -1;\n duration =\n error.timings?.phases.total ??\n /* istanbul ignore next: can't be tested */ -1;\n const method = options.method.toUpperCase();\n const code = error.code ?? /* istanbul ignore next */ 'UNKNOWN';\n const retryCount =\n error.request?.retryCount ?? /* istanbul ignore next */ -1;\n logger.debug(\n `${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`,\n );\n }\n\n throw error;\n } finally {\n HttpStats.write({\n method: options.method,\n url,\n reqMs: duration,\n queueMs: queueStats.queueMs,\n status: statusCode,\n });\n }\n}\n\nexport class Http<Opts extends HttpOptions = HttpOptions> {\n private options?: GotOptions;\n\n constructor(\n protected hostType: string,\n options: HttpOptions = {},\n ) {\n const retryLimit = process.env.NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<GotOptions>(\n options,\n {\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n },\n },\n { isMergeableObject: is.plainObject },\n );\n }\n\n protected async request<T>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<T>> {\n let url = requestUrl.toString();\n if (httpOptions?.baseUrl) {\n url = resolveBaseUrl(httpOptions.baseUrl, url);\n }\n\n let options = merge<SetRequired<GotOptions, 'method'>, InternalHttpOptions>(\n {\n method: 'get',\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: is.plainObject },\n );\n\n logger.trace(`HTTP request: ${options.method.toUpperCase()} ${url}`);\n\n options.hooks = {\n beforeRedirect: [removeAuthorization],\n };\n\n applyDefaultHeaders(options);\n\n if (\n is.undefined(options.readOnly) &&\n ['head', 'get'].includes(options.method)\n ) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n options.timeout ??= 60000;\n\n const { cacheProvider } = options;\n const cachedResponse = await cacheProvider?.bypassServer<T>(url);\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const memCacheKey =\n options.memCache !== false &&\n (options.method === 'get' || options.method === 'head')\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method: options.method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<T>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n }\n\n // istanbul ignore else: no cache tests\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask<T> = () => {\n const queueMs = Date.now() - startTime;\n return gotTask(url, options, { queueMs });\n };\n\n const throttle = getThrottle(url);\n const throttledTask: GotTask<T> = throttle\n ? () => throttle.add<HttpResponse<T>>(httpTask)\n : httpTask;\n\n const queue = getQueue(url);\n const queuedTask: GotTask<T> = queue\n ? () => queue.add<HttpResponse<T>>(throttledTask)\n : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<T>(url, true);\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n throw err;\n }\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(url: string, options: HttpOptions = {}): Promise<HttpResponse> {\n return this.request<string>(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse> {\n return this.request<string>(url, { ...options, method: 'head' });\n }\n\n getBuffer(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Buffer>> {\n return this.request<Buffer>(url, {\n ...options,\n responseType: 'buffer',\n });\n }\n\n private async requestJson<ResT = unknown>(\n method: InternalHttpOptions['method'],\n { url, httpOptions: requestOptions, schema }: HttpFnArgs<Opts, ResT>,\n ): Promise<HttpResponse<ResT>> {\n const { body, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n responseType: 'json',\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (body) {\n opts.json = body;\n }\n const res = await this.request<ResT>(url, opts);\n\n if (!schema) {\n return res;\n }\n\n res.body = await schema.parseAsync(res.body);\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: Opts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): HttpFnArgs<Opts, ResT> {\n const res: HttpFnArgs<Opts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = options ?? {};\n return await this.get(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.get(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.get(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<Infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const args = this.resolveArgs<Infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<Infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n headJson(url: string, httpOptions?: Opts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: ZodType,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n // TODO: fix types (#22198)\n let combinedOptions: any = {\n method: 'get',\n ...this.options,\n hostType: this.hostType,\n ...options,\n };\n\n let resolvedUrl = url;\n // istanbul ignore else: needs test\n if (options?.baseUrl) {\n resolvedUrl = resolveBaseUrl(options.baseUrl, url);\n }\n\n applyDefaultHeaders(combinedOptions);\n\n if (\n is.undefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return got.stream(resolvedUrl, combinedOptions);\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/http/index.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO: refactor code to remove this (#9651)\nimport './legacy';\n\nimport is from '@sindresorhus/is';\nimport merge from 'deepmerge';\nimport type { Options, RetryObject } from 'got';\nimport got, { RequestError } from 'got';\nimport type { SetRequired } from 'type-fest';\nimport type { infer as Infer, ZodError } from 'zod';\nimport { ZodType } from 'zod';\nimport { GlobalConfig } from '../../config/global';\nimport { HOST_DISABLED } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../cache/memory';\nimport { hash } from '../hash';\nimport { type AsyncResult, Result } from '../result';\nimport { type HttpRequestStatsDataPoint, HttpStats } from '../stats';\nimport { isHttpUrl, parseUrl, resolveBaseUrl } from '../url';\nimport { parseSingleYaml } from '../yaml';\nimport { applyAuthorization, removeAuthorization } from './auth';\nimport { hooks } from './hooks';\nimport { applyHostRule, findMatchingRule } from './host-rules';\nimport type {\n InternalGotOptions,\n InternalHttpOptions,\n InternalJsonOptions,\n InternalJsonUnsafeOptions,\n} from './http';\nimport { getQueue } from './queue';\nimport { getRetryAfter, wrapWithRetry } from './retry-after';\nimport { getThrottle } from './throttle';\nimport type {\n GotBufferOptions,\n GotOptions,\n GotTask,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types';\nimport { copyResponse } from './util';\n\nexport { RequestError as HttpError };\n\nexport class EmptyResultError extends Error {}\nexport type SafeJsonError = RequestError | ZodError | EmptyResultError;\n\nfunction applyDefaultHeaders(options: Options): void {\n const renovateVersion = pkg.version;\n options.headers = {\n ...options.headers,\n 'user-agent':\n GlobalConfig.get('userAgent') ??\n `RenovateBot/${renovateVersion} (https://github.com/renovatebot/renovate)`,\n };\n}\n\ntype QueueStatsData = Pick<HttpRequestStatsDataPoint, 'queueMs'>;\n\nasync function gotTask(\n url: string,\n options: SetRequired<GotOptions, 'method'>,\n queueStats: QueueStatsData,\n): Promise<HttpResponse<unknown>> {\n logger.trace({ url, options }, 'got request');\n\n let duration = 0;\n let statusCode = 0;\n try {\n // Cheat the TS compiler using `as` to pick a specific overload.\n // Otherwise it doesn't typecheck.\n const resp = await got(url, { ...options, hooks } as GotBufferOptions);\n statusCode = resp.statusCode;\n duration =\n resp.timings.phases.total ?? /* v8 ignore next: can't be tested */ 0;\n return resp;\n } catch (error) {\n if (error instanceof RequestError) {\n statusCode = error.response?.statusCode ?? -1;\n duration =\n error.timings?.phases.total ?? /* v8 ignore next: can't be tested */ -1;\n const method = options.method.toUpperCase();\n const code = error.code ?? /* v8 ignore next */ 'UNKNOWN';\n const retryCount = error.request?.retryCount ?? /* v8 ignore next */ -1;\n logger.debug(\n `${method} ${url} = (code=${code}, statusCode=${statusCode} retryCount=${retryCount}, duration=${duration})`,\n );\n }\n\n throw error;\n /* v8 ignore next: 🐛 https://github.com/bcoe/c8/issues/229 */\n } finally {\n HttpStats.write({\n method: options.method,\n url,\n reqMs: duration,\n queueMs: queueStats.queueMs,\n status: statusCode,\n });\n }\n}\n\nexport class Http<Opts extends HttpOptions = HttpOptions> {\n private readonly options: InternalGotOptions;\n\n protected get baseUrl(): string | undefined {\n return undefined;\n }\n\n constructor(\n protected hostType: string,\n options: HttpOptions = {},\n ) {\n const retryLimit = process.env.NODE_ENV === 'test' ? 0 : 2;\n this.options = merge<InternalGotOptions>(\n options,\n {\n method: 'get',\n context: { hostType },\n retry: {\n calculateDelay: (retryObject) =>\n this.calculateRetryDelay(retryObject),\n limit: retryLimit,\n maxRetryAfter: 0, // Don't rely on `got` retry-after handling, just let it fail and then we'll handle it\n },\n },\n { isMergeableObject: is.plainObject },\n );\n }\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'text' },\n ): Promise<HttpResponse<string>>;\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'buffer' },\n ): Promise<HttpResponse<Buffer>>;\n private async request<T = unknown>(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions & { responseType: 'json' },\n ): Promise<HttpResponse<T>>;\n\n private async request(\n requestUrl: string | URL,\n httpOptions: InternalHttpOptions,\n ): Promise<HttpResponse<unknown>> {\n const resolvedUrl = this.resolveUrl(requestUrl, httpOptions);\n const url = resolvedUrl.toString();\n\n this.processOptions(resolvedUrl, httpOptions);\n\n let options = merge<InternalGotOptions, InternalHttpOptions>(\n {\n ...this.options,\n hostType: this.hostType,\n },\n httpOptions,\n { isMergeableObject: is.plainObject },\n );\n\n logger.trace(`HTTP request: ${options.method.toUpperCase()} ${url}`);\n\n options.hooks = {\n beforeRedirect: [removeAuthorization],\n };\n\n applyDefaultHeaders(options);\n\n if (\n is.undefined(options.readOnly) &&\n ['head', 'get'].includes(options.method)\n ) {\n options.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, options);\n options = applyHostRule(url, options, hostRule);\n if (options.enabled === false) {\n logger.debug(`Host is disabled - rejecting request. HostUrl: ${url}`);\n throw new Error(HOST_DISABLED);\n }\n options = applyAuthorization(options);\n options.timeout ??= 60000;\n\n const { cacheProvider } = options;\n const cachedResponse = await cacheProvider?.bypassServer<string | Buffer>(\n url,\n );\n if (cachedResponse) {\n return cachedResponse;\n }\n\n const memCacheKey =\n options.memCache !== false &&\n (options.method === 'get' || options.method === 'head')\n ? hash(\n `got-${JSON.stringify({\n url,\n headers: options.headers,\n method: options.method,\n })}`,\n )\n : null;\n\n let resPromise: Promise<HttpResponse<unknown>> | null = null;\n\n // Cache GET requests unless memCache=false\n if (memCacheKey) {\n resPromise = memCache.get(memCacheKey);\n }\n\n if (!resPromise) {\n if (cacheProvider) {\n await cacheProvider.setCacheHeaders(url, options);\n }\n\n const startTime = Date.now();\n const httpTask: GotTask = () => {\n const queueMs = Date.now() - startTime;\n return gotTask(url, options, { queueMs });\n };\n\n const throttle = getThrottle(url);\n const throttledTask = throttle ? () => throttle.add(httpTask) : httpTask;\n\n const queue = getQueue(url);\n const queuedTask = queue ? () => queue.add(throttledTask) : throttledTask;\n\n const { maxRetryAfter = 60 } = hostRule;\n resPromise = wrapWithRetry(queuedTask, url, getRetryAfter, maxRetryAfter);\n\n if (memCacheKey) {\n memCache.set(memCacheKey, resPromise);\n }\n }\n\n try {\n const res = await resPromise;\n const deepCopyNeeded = !!memCacheKey && res.statusCode !== 304;\n const resCopy = copyResponse(res, deepCopyNeeded);\n resCopy.authorization = !!options?.headers?.authorization;\n\n if (cacheProvider) {\n return await cacheProvider.wrapServerResponse(url, resCopy);\n }\n\n return resCopy;\n } catch (err) {\n const { abortOnError, abortIgnoreStatusCodes } = options;\n if (abortOnError && !abortIgnoreStatusCodes?.includes(err.statusCode)) {\n throw new ExternalHostError(err);\n }\n\n const staleResponse = await cacheProvider?.bypassServer<string | Buffer>(\n url,\n true,\n );\n if (staleResponse) {\n logger.debug(\n { err },\n `Request error: returning stale cache instead for ${url}`,\n );\n return staleResponse;\n }\n\n this.handleError(requestUrl, httpOptions, err);\n }\n }\n\n protected processOptions(_url: URL, _options: InternalHttpOptions): void {\n // noop\n }\n\n protected handleError(\n _url: string | URL,\n _httpOptions: HttpOptions,\n err: Error,\n ): never {\n throw err;\n }\n\n protected resolveUrl(\n requestUrl: string | URL,\n options: HttpOptions | undefined,\n ): URL {\n let url = requestUrl;\n\n if (url instanceof URL) {\n // already a aboslute URL\n return url;\n }\n\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n if (baseUrl) {\n url = resolveBaseUrl(baseUrl, url);\n }\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl || !isHttpUrl(parsedUrl)) {\n logger.error({ url: requestUrl }, 'Request Error: cannot parse url');\n throw new Error('Invalid URL');\n }\n return parsedUrl;\n }\n\n protected calculateRetryDelay({ computedValue }: RetryObject): number {\n return computedValue;\n }\n\n get(\n url: string,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string | Buffer>> {\n return this.request(url, options);\n }\n\n head(url: string, options: HttpOptions = {}): Promise<HttpResponse<never>> {\n // to complex to validate\n return this.request(url, {\n ...options,\n responseType: 'text',\n method: 'head',\n }) as Promise<HttpResponse<never>>;\n }\n\n getText(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<string>> {\n return this.request(url, { ...options, responseType: 'text' });\n }\n\n getBuffer(\n url: string | URL,\n options: HttpOptions = {},\n ): Promise<HttpResponse<Buffer>> {\n return this.request(url, { ...options, responseType: 'buffer' });\n }\n\n protected requestJsonUnsafe<ResT>(\n method: HttpMethod,\n { url, httpOptions: requestOptions }: InternalJsonUnsafeOptions<Opts>,\n ): Promise<HttpResponse<ResT>> {\n const { body: json, ...httpOptions } = { ...requestOptions };\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method,\n };\n // signal that we expect a json response\n opts.headers = {\n accept: 'application/json',\n ...opts.headers,\n };\n if (json) {\n opts.json = json;\n }\n return this.request<ResT>(url, { ...opts, responseType: 'json' });\n }\n\n private async requestJson<ResT, Schema extends ZodType<ResT> = ZodType<ResT>>(\n method: HttpMethod,\n options: InternalJsonOptions<Opts, ResT, Schema>,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.requestJsonUnsafe<ResT>(method, options);\n\n if (options.schema) {\n res.body = await options.schema.parseAsync(res.body);\n }\n\n return res;\n }\n\n private resolveArgs<ResT = unknown>(\n arg1: string,\n arg2: Opts | ZodType<ResT> | undefined,\n arg3: ZodType<ResT> | undefined,\n ): InternalJsonOptions<Opts, ResT> {\n const res: InternalJsonOptions<Opts, ResT> = { url: arg1 };\n\n if (arg2 instanceof ZodType) {\n res.schema = arg2;\n } else if (arg2) {\n res.httpOptions = arg2;\n }\n\n if (arg3) {\n res.schema = arg3;\n }\n\n return res;\n }\n\n async getPlain(url: string, options?: Opts): Promise<HttpResponse> {\n const opt = options ?? {};\n return await this.getText(url, {\n headers: {\n Accept: 'text/plain',\n },\n ...opt,\n });\n }\n\n /**\n * @deprecated use `getYaml` instead\n */\n async getYamlUnchecked<ResT>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n const res = await this.getText(url, options);\n const body = parseSingleYaml<ResT>(res.body);\n return { ...res, body };\n }\n\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n async getYaml<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n const opts: InternalHttpOptions = {\n ...httpOptions,\n method: 'get',\n };\n\n const res = await this.getText(url, opts);\n const body = await schema.parseAsync(parseSingleYaml(res.body));\n return { ...res, body };\n }\n\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(url: string, schema: Schema): AsyncResult<Infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getYamlSafe<\n ResT extends NonNullable<unknown>,\n Schema extends ZodType<ResT> = ZodType<ResT>,\n >(\n arg1: string,\n arg2: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const url = arg1;\n let schema: Schema;\n let httpOptions: Opts | undefined;\n if (arg3) {\n schema = arg3;\n httpOptions = arg2 as Opts;\n } else {\n schema = arg2 as Schema;\n }\n\n let res: AsyncResult<HttpResponse<ResT>, SafeJsonError>;\n if (httpOptions) {\n res = Result.wrap(this.getYaml(url, httpOptions, schema));\n } else {\n res = Result.wrap(this.getYaml(url, schema));\n }\n\n return res.transform((response) => Result.ok(response.body));\n }\n\n /**\n * Request JSON and return the response without any validation.\n *\n * The usage of this method is discouraged, please use `getJson` instead.\n *\n * If you're new to Zod schema validation library:\n * - consult the [documentation of Zod library](https://github.com/colinhacks/zod?tab=readme-ov-file#basic-usage)\n * - search the Renovate codebase for 'zod' module usage\n * - take a look at the `schema-utils.ts` file for Renovate-specific schemas and utilities\n */\n getJsonUnchecked<ResT = unknown>(\n url: string,\n options?: Opts,\n ): Promise<HttpResponse<ResT>> {\n return this.requestJson<ResT>('get', { url, httpOptions: options });\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * throwing an error if the response is not valid.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n getJson<Schema extends ZodType<any, any, any>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<Infer<Schema>>> {\n const args = this.resolveArgs<Infer<Schema>>(arg1, arg2, arg3);\n return this.requestJson<Infer<Schema>>('get', args);\n }\n\n /**\n * Request JSON with a Zod schema for the response,\n * wrapping response data in a `Result` class.\n *\n * @param url\n * @param schema Zod schema for the response\n */\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): AsyncResult<Infer<Schema>, SafeJsonError>;\n getJsonSafe<ResT extends NonNullable<unknown>, Schema extends ZodType<ResT>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): AsyncResult<ResT, SafeJsonError> {\n const args = this.resolveArgs<ResT>(arg1, arg2, arg3);\n return Result.wrap(this.requestJson<ResT>('get', args)).transform(\n (response) => Result.ok(response.body),\n );\n }\n\n headJson(url: string, httpOptions?: Opts): Promise<HttpResponse<never>> {\n return this.requestJson<never>('head', { url, httpOptions });\n }\n\n postJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n postJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n postJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('post', args);\n }\n\n putJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n putJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n putJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: ZodType,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('put', args);\n }\n\n patchJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n patchJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n patchJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('patch', args);\n }\n\n deleteJson<T>(url: string, options?: Opts): Promise<HttpResponse<T>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n deleteJson<T, Schema extends ZodType<T> = ZodType<T>>(\n url: string,\n options: Opts,\n schema: Schema,\n ): Promise<HttpResponse<Infer<Schema>>>;\n deleteJson<T = unknown, Schema extends ZodType<T> = ZodType<T>>(\n arg1: string,\n arg2?: Opts | Schema,\n arg3?: Schema,\n ): Promise<HttpResponse<T>> {\n const args = this.resolveArgs(arg1, arg2, arg3);\n return this.requestJson<T>('delete', args);\n }\n\n stream(url: string, options?: HttpOptions): NodeJS.ReadableStream {\n // TODO: fix types (#22198)\n let combinedOptions: any = {\n ...this.options,\n hostType: this.hostType,\n ...options,\n };\n\n const resolvedUrl = this.resolveUrl(url, options).toString();\n\n applyDefaultHeaders(combinedOptions);\n\n if (\n is.undefined(combinedOptions.readOnly) &&\n ['head', 'get'].includes(combinedOptions.method)\n ) {\n combinedOptions.readOnly = true;\n }\n\n const hostRule = findMatchingRule(url, combinedOptions);\n combinedOptions = applyHostRule(resolvedUrl, combinedOptions, hostRule);\n if (combinedOptions.enabled === false) {\n throw new Error(HOST_DISABLED);\n }\n combinedOptions = applyAuthorization(combinedOptions);\n\n return got.stream(resolvedUrl, combinedOptions);\n }\n}\n"]}
@@ -1,11 +1,12 @@
1
1
  import type { IncomingHttpHeaders } from 'node:http';
2
- import type { OptionsOfBufferResponseBody, OptionsOfJSONResponseBody, ParseJsonFunction } from 'got';
2
+ import type { OptionsOfBufferResponseBody, OptionsOfJSONResponseBody, OptionsOfTextResponseBody } from 'got';
3
3
  import type { HttpCacheProvider } from './cache/types';
4
4
  export type GotContextOptions = {
5
5
  authType?: string;
6
6
  } & Record<string, unknown>;
7
- export type GotOptions = GotBufferOptions | GotJSONOptions;
7
+ export type GotOptions = GotBufferOptions | GotTextOptions | GotJSONOptions;
8
8
  export type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;
9
+ export type GotTextOptions = OptionsOfTextResponseBody & GotExtraOptions;
9
10
  export type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;
10
11
  export interface GotExtraOptions {
11
12
  abortOnError?: boolean;
@@ -52,15 +53,10 @@ export interface HttpOptions {
52
53
  cacheProvider?: HttpCacheProvider;
53
54
  readOnly?: boolean;
54
55
  }
55
- export interface InternalHttpOptions extends HttpOptions {
56
- json?: HttpOptions['body'];
57
- responseType?: 'json' | 'buffer';
58
- method?: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';
59
- parseJson?: ParseJsonFunction;
60
- }
61
56
  export interface HttpHeaders extends IncomingHttpHeaders {
62
57
  link?: string | undefined;
63
58
  }
59
+ export type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';
64
60
  export interface HttpResponse<T = string> {
65
61
  statusCode: number;
66
62
  body: T;
@@ -68,7 +64,7 @@ export interface HttpResponse<T = string> {
68
64
  authorization?: boolean;
69
65
  }
70
66
  export type Task<T> = () => Promise<T>;
71
- export type GotTask<T> = Task<HttpResponse<T>>;
67
+ export type GotTask<T = unknown> = Task<HttpResponse<T>>;
72
68
  export interface ThrottleLimitRule {
73
69
  matchHost: string;
74
70
  throttleMs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/util/http/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingHttpHeaders } from 'node:http';\nimport type {\n OptionsOfBufferResponseBody,\n OptionsOfJSONResponseBody,\n ParseJsonFunction,\n} from 'got';\nimport type { HttpCacheProvider } from './cache/types';\n\nexport type GotContextOptions = {\n authType?: string;\n} & Record<string, unknown>;\n\n// TODO: Move options to context\nexport type GotOptions = GotBufferOptions | GotJSONOptions;\nexport type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;\nexport type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;\n\nexport interface GotExtraOptions {\n abortOnError?: boolean;\n abortIgnoreStatusCodes?: number[];\n token?: string;\n hostType?: string;\n enabled?: boolean;\n memCache?: boolean;\n noAuth?: boolean;\n context?: GotContextOptions;\n}\n\nexport interface RequestStats {\n method: string;\n url: string;\n duration: number;\n queueDuration: number;\n statusCode: number;\n}\n\nexport type OutgoingHttpHeaders = Record<string, string | string[] | undefined>;\n\nexport type GraphqlVariables = Record<string, unknown>;\n\nexport interface GraphqlOptions {\n variables?: GraphqlVariables;\n paginate?: boolean;\n count?: number;\n limit?: number;\n cursor?: string | null;\n acceptHeader?: string;\n token?: string;\n readOnly?: boolean;\n}\n\nexport interface HttpOptions {\n body?: any;\n username?: string;\n password?: string;\n baseUrl?: string;\n headers?: OutgoingHttpHeaders;\n\n /**\n * Do not use authentication\n */\n noAuth?: boolean;\n\n throwHttpErrors?: boolean;\n\n token?: string;\n memCache?: boolean;\n cacheProvider?: HttpCacheProvider;\n readOnly?: boolean;\n}\n\nexport interface InternalHttpOptions extends HttpOptions {\n json?: HttpOptions['body'];\n responseType?: 'json' | 'buffer';\n method?: 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';\n parseJson?: ParseJsonFunction;\n}\n\nexport interface HttpHeaders extends IncomingHttpHeaders {\n link?: string | undefined;\n}\n\nexport interface HttpResponse<T = string> {\n statusCode: number;\n body: T;\n headers: HttpHeaders;\n authorization?: boolean;\n}\n\nexport type Task<T> = () => Promise<T>;\nexport type GotTask<T> = Task<HttpResponse<T>>;\n\nexport interface ThrottleLimitRule {\n matchHost: string;\n throttleMs: number;\n}\n\nexport interface ConcurrencyLimitRule {\n matchHost: string;\n concurrency: number;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/util/http/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingHttpHeaders } from 'node:http';\nimport type {\n OptionsOfBufferResponseBody,\n OptionsOfJSONResponseBody,\n OptionsOfTextResponseBody,\n} from 'got';\nimport type { HttpCacheProvider } from './cache/types';\n\nexport type GotContextOptions = {\n authType?: string;\n} & Record<string, unknown>;\n\n// TODO: Move options to context\nexport type GotOptions = GotBufferOptions | GotTextOptions | GotJSONOptions;\nexport type GotBufferOptions = OptionsOfBufferResponseBody & GotExtraOptions;\nexport type GotTextOptions = OptionsOfTextResponseBody & GotExtraOptions;\nexport type GotJSONOptions = OptionsOfJSONResponseBody & GotExtraOptions;\n\nexport interface GotExtraOptions {\n abortOnError?: boolean;\n abortIgnoreStatusCodes?: number[];\n token?: string;\n hostType?: string;\n enabled?: boolean;\n memCache?: boolean;\n noAuth?: boolean;\n context?: GotContextOptions;\n}\n\nexport interface RequestStats {\n method: string;\n url: string;\n duration: number;\n queueDuration: number;\n statusCode: number;\n}\n\nexport type OutgoingHttpHeaders = Record<string, string | string[] | undefined>;\n\nexport type GraphqlVariables = Record<string, unknown>;\n\nexport interface GraphqlOptions {\n variables?: GraphqlVariables;\n paginate?: boolean;\n count?: number;\n limit?: number;\n cursor?: string | null;\n acceptHeader?: string;\n token?: string;\n readOnly?: boolean;\n}\n\nexport interface HttpOptions {\n body?: any;\n username?: string;\n password?: string;\n baseUrl?: string;\n headers?: OutgoingHttpHeaders;\n\n /**\n * Do not use authentication\n */\n noAuth?: boolean;\n\n throwHttpErrors?: boolean;\n\n token?: string;\n memCache?: boolean;\n cacheProvider?: HttpCacheProvider;\n readOnly?: boolean;\n}\n\nexport interface HttpHeaders extends IncomingHttpHeaders {\n link?: string | undefined;\n}\n\nexport type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head';\n\nexport interface HttpResponse<T = string> {\n statusCode: number;\n body: T;\n headers: HttpHeaders;\n authorization?: boolean;\n}\n\nexport type Task<T> = () => Promise<T>;\nexport type GotTask<T = unknown> = Task<HttpResponse<T>>;\n\nexport interface ThrottleLimitRule {\n matchHost: string;\n throttleMs: number;\n}\n\nexport interface ConcurrencyLimitRule {\n matchHost: string;\n concurrency: number;\n}\n"]}
package/dist/util/url.js CHANGED
@@ -92,16 +92,11 @@ function getQueryString(params) {
92
92
  return usp.toString();
93
93
  }
94
94
  function isHttpUrl(url) {
95
- if (!is_1.default.nonEmptyString(url)) {
96
- return false;
97
- }
98
- try {
99
- const { protocol } = new URL(url);
100
- return protocol === 'https:' || protocol === 'http:';
101
- }
102
- catch {
95
+ if (!is_1.default.nonEmptyString(url) && !is_1.default.urlInstance(url)) {
103
96
  return false;
104
97
  }
98
+ const protocol = parseUrl(url)?.protocol;
99
+ return protocol === 'https:' || protocol === 'http:';
105
100
  }
106
101
  function parseUrl(url) {
107
102
  if (!url) {
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../lib/util/url.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\n// eslint-disable-next-line no-restricted-imports\nimport _parseLinkHeader from 'parse-link-header';\nimport urlJoin from 'url-join';\nimport { logger } from '../logger';\nimport { regEx } from './regex';\n\nexport function joinUrlParts(...parts: string[]): string {\n return urlJoin(...parts);\n}\n\nexport function ensurePathPrefix(url: string, prefix: string): string {\n const parsed = new URL(url);\n const fullPath = parsed.pathname + parsed.search;\n if (fullPath.startsWith(prefix)) {\n return url;\n }\n return parsed.origin + prefix + fullPath;\n}\n\nexport function ensureTrailingSlash(url: string): string {\n return url.replace(/\\/?$/, '/'); // TODO #12875 adds slash at the front when re2 is used\n}\n\nexport function trimTrailingSlash(url: string): string {\n return url.replace(regEx(/\\/+$/), '');\n}\n\nexport function trimLeadingSlash(path: string): string {\n return path.replace(/^\\/+/, '');\n}\n\nexport function trimSlashes(path: string): string {\n return trimLeadingSlash(trimTrailingSlash(path));\n}\n\n/**\n * Resolves an input path against a base URL\n *\n * @param baseUrl - base URL to resolve against\n * @param input - input path (if this is a full URL, it will be returned)\n */\nexport function resolveBaseUrl(baseUrl: string, input: string | URL): string {\n const inputString = input.toString();\n\n let host;\n let pathname;\n try {\n ({ host, pathname } = new URL(inputString));\n } catch {\n pathname = inputString;\n }\n\n return host ? inputString : urlJoin(baseUrl, pathname || '');\n}\n\n/**\n * Replaces the path of a URL with a new path\n *\n * @param baseUrl - source URL\n * @param path - replacement path (if this is a full URL, it will be returned)\n */\nexport function replaceUrlPath(baseUrl: string | URL, path: string): string {\n if (parseUrl(path)) {\n return path;\n }\n\n const { origin } = is.string(baseUrl) ? new URL(baseUrl) : baseUrl;\n return urlJoin(origin, path);\n}\n\nexport function getQueryString(params: Record<string, any>): string {\n const usp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (is.array<object>(v)) {\n for (const item of v) {\n // TODO: fix me?\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n usp.append(k, item.toString());\n }\n } else {\n usp.append(k, v.toString());\n }\n }\n return usp.toString();\n}\n\nexport function isHttpUrl(url: unknown): boolean {\n if (!is.nonEmptyString(url)) {\n return false;\n }\n try {\n const { protocol } = new URL(url);\n return protocol === 'https:' || protocol === 'http:';\n } catch {\n return false;\n }\n}\n\nexport function parseUrl(url: URL | string | undefined | null): URL | null {\n if (!url) {\n return null;\n }\n\n if (url instanceof URL) {\n return url;\n }\n\n try {\n return new URL(url);\n } catch {\n return null;\n }\n}\n\n/**\n * Tries to create an URL object from either a full URL string or a hostname\n * @param url either the full url or a hostname\n * @returns an URL object or null\n */\nexport function createURLFromHostOrURL(url: string): URL | null {\n return parseUrl(url) ?? parseUrl(`https://${url}`);\n}\n\nexport type LinkHeaderLinks = _parseLinkHeader.Links;\n\nexport function parseLinkHeader(\n linkHeader: string | null | undefined,\n): LinkHeaderLinks | null {\n if (!is.nonEmptyString(linkHeader)) {\n return null;\n }\n if (linkHeader.length > 2000) {\n logger.warn({ linkHeader }, 'Link header too long.');\n return null;\n }\n return _parseLinkHeader(linkHeader);\n}\n\n/**\n * prefix https:// to hosts with port or path\n */\nexport function massageHostUrl(url: string): string {\n if (!url.includes('://') && url.includes('/')) {\n return 'https://' + url;\n } else if (!url.includes('://') && url.includes(':')) {\n return 'https://' + url;\n } else {\n return url;\n }\n}\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../lib/util/url.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\n// eslint-disable-next-line no-restricted-imports\nimport _parseLinkHeader from 'parse-link-header';\nimport urlJoin from 'url-join';\nimport { logger } from '../logger';\nimport { regEx } from './regex';\n\nexport function joinUrlParts(...parts: string[]): string {\n return urlJoin(...parts);\n}\n\nexport function ensurePathPrefix(url: string, prefix: string): string {\n const parsed = new URL(url);\n const fullPath = parsed.pathname + parsed.search;\n if (fullPath.startsWith(prefix)) {\n return url;\n }\n return parsed.origin + prefix + fullPath;\n}\n\nexport function ensureTrailingSlash(url: string): string {\n return url.replace(/\\/?$/, '/'); // TODO #12875 adds slash at the front when re2 is used\n}\n\nexport function trimTrailingSlash(url: string): string {\n return url.replace(regEx(/\\/+$/), '');\n}\n\nexport function trimLeadingSlash(path: string): string {\n return path.replace(/^\\/+/, '');\n}\n\nexport function trimSlashes(path: string): string {\n return trimLeadingSlash(trimTrailingSlash(path));\n}\n\n/**\n * Resolves an input path against a base URL\n *\n * @param baseUrl - base URL to resolve against\n * @param input - input path (if this is a full URL, it will be returned)\n */\nexport function resolveBaseUrl(baseUrl: string, input: string | URL): string {\n const inputString = input.toString();\n\n let host;\n let pathname;\n try {\n ({ host, pathname } = new URL(inputString));\n } catch {\n pathname = inputString;\n }\n\n return host ? inputString : urlJoin(baseUrl, pathname || '');\n}\n\n/**\n * Replaces the path of a URL with a new path\n *\n * @param baseUrl - source URL\n * @param path - replacement path (if this is a full URL, it will be returned)\n */\nexport function replaceUrlPath(baseUrl: string | URL, path: string): string {\n if (parseUrl(path)) {\n return path;\n }\n\n const { origin } = is.string(baseUrl) ? new URL(baseUrl) : baseUrl;\n return urlJoin(origin, path);\n}\n\nexport function getQueryString(params: Record<string, any>): string {\n const usp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (is.array<object>(v)) {\n for (const item of v) {\n // TODO: fix me?\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n usp.append(k, item.toString());\n }\n } else {\n usp.append(k, v.toString());\n }\n }\n return usp.toString();\n}\n\nexport function isHttpUrl(url: unknown): boolean {\n if (!is.nonEmptyString(url) && !is.urlInstance(url)) {\n return false;\n }\n const protocol = parseUrl(url)?.protocol;\n return protocol === 'https:' || protocol === 'http:';\n}\n\nexport function parseUrl(url: URL | string | undefined | null): URL | null {\n if (!url) {\n return null;\n }\n\n if (url instanceof URL) {\n return url;\n }\n\n try {\n return new URL(url);\n } catch {\n return null;\n }\n}\n\n/**\n * Tries to create an URL object from either a full URL string or a hostname\n * @param url either the full url or a hostname\n * @returns an URL object or null\n */\nexport function createURLFromHostOrURL(url: string): URL | null {\n return parseUrl(url) ?? parseUrl(`https://${url}`);\n}\n\nexport type LinkHeaderLinks = _parseLinkHeader.Links;\n\nexport function parseLinkHeader(\n linkHeader: string | null | undefined,\n): LinkHeaderLinks | null {\n if (!is.nonEmptyString(linkHeader)) {\n return null;\n }\n if (linkHeader.length > 2000) {\n logger.warn({ linkHeader }, 'Link header too long.');\n return null;\n }\n return _parseLinkHeader(linkHeader);\n}\n\n/**\n * prefix https:// to hosts with port or path\n */\nexport function massageHostUrl(url: string): string {\n if (!url.includes('://') && url.includes('/')) {\n return 'https://' + url;\n } else if (!url.includes('://') && url.includes(':')) {\n return 'https://' + url;\n } else {\n return url;\n }\n}\n"]}
@@ -32,7 +32,7 @@ async function getReleaseNotesMd(repository, apiBaseUrl, sourceDirectory) {
32
32
  if (files.length !== 0) {
33
33
  logger_1.logger.debug(`Multiple candidates for changelog file, using ${changelogFile.path}`);
34
34
  }
35
- const fileRes = await bitbucketHttp.get((0, url_1.joinUrlParts)(apiBaseUrl, '2.0/repositories', repository, 'src', changelogFile.commit.hash, changelogFile.path));
35
+ const fileRes = await bitbucketHttp.getText((0, url_1.joinUrlParts)(apiBaseUrl, '2.0/repositories', repository, 'src', changelogFile.commit.hash, changelogFile.path));
36
36
  const changelogMd = `${fileRes.body}\n#\n##`;
37
37
  return { changelogFile: changelogFile.path, changelogMd };
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../lib/workers/repository/update/pr/changelog/bitbucket/index.ts"],"names":[],"mappings":";;;AAkBA,8CA0DC;AAED,wCASC;;AAvFD,kEAA6B;AAC7B,kEAAkC;AAClC,gGAA8D;AAC9D,qDAAkD;AAClD,gFAA+F;AAC/F,qEAAsE;AACtE,oDAA0D;AAC1D,sCAAqD;AAQxC,QAAA,EAAE,GAAG,qBAAqB,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,UAAE,CAAC,CAAC;AAErC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,UAAkB,EAClB,eAAwB;IAExB,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE9C,MAAM,mBAAmB,GAAG,IAAA,kBAAY,EACtC,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,eAAe,IAAI,EAAE,CACtB,CAAC;IAEF,MAAM,SAAS,GAAG,CAChB,MAAM,aAAa,CAAC,OAAO,CACzB,mBAAmB,EACnB;QACE,QAAQ,EAAE,IAAI;KACf,EACD,iCAAwB,CACzB,CACF,CAAC,IAAI,CAAC,MAAM,CAAC;IAEd,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,kCAAsB,CAAC,IAAI,CAAC,mBAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACnD,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,iCAAwB,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SACxD,KAAK,EAAE,CAAC;IACX,IAAI,YAAE,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,eAAM,CAAC,KAAK,CACV,iDAAiD,aAAa,CAAC,IAAI,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,CACrC,IAAA,kBAAY,EACV,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,KAAK,EACL,aAAa,CAAC,MAAM,CAAC,IAAI,EACzB,aAAa,CAAC,IAAI,CACnB,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,SAAgB,cAAc,CAC5B,QAA0B,EAC1B,QAA0B;IAE1B,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3C,eAAM,CAAC,IAAI,CACT,kEAAkE,CACnE,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import path from 'node:path';\nimport is from '@sindresorhus/is';\nimport changelogFilenameRegex from 'changelog-filename-regex';\nimport { logger } from '../../../../../../logger';\nimport { PagedSourceResultsSchema } from '../../../../../../modules/platform/bitbucket/schema';\nimport { BitbucketHttp } from '../../../../../../util/http/bitbucket';\nimport { joinUrlParts } from '../../../../../../util/url';\nimport { compareChangelogFilePath } from '../common';\nimport type {\n ChangeLogFile,\n ChangeLogNotes,\n ChangeLogProject,\n ChangeLogRelease,\n} from '../types';\n\nexport const id = 'bitbucket-changelog';\nconst bitbucketHttp = new BitbucketHttp(id);\n\nexport async function getReleaseNotesMd(\n repository: string,\n apiBaseUrl: string,\n sourceDirectory?: string,\n): Promise<ChangeLogFile | null> {\n logger.trace('bitbucket.getReleaseNotesMd()');\n\n const repositorySourceURl = joinUrlParts(\n apiBaseUrl,\n '2.0/repositories',\n repository,\n 'src/HEAD',\n sourceDirectory ?? '',\n );\n\n const rootFiles = (\n await bitbucketHttp.getJson(\n repositorySourceURl,\n {\n paginate: true,\n },\n PagedSourceResultsSchema,\n )\n ).body.values;\n\n const allFiles = rootFiles.filter((f) => f.type === 'commit_file');\n\n const files = allFiles.filter((f) =>\n changelogFilenameRegex.test(path.basename(f.path)),\n );\n\n const changelogFile = files\n .sort((a, b) => compareChangelogFilePath(a.path, b.path))\n .shift();\n if (is.nullOrUndefined(changelogFile)) {\n logger.trace('no changelog file found');\n return null;\n }\n\n if (files.length !== 0) {\n logger.debug(\n `Multiple candidates for changelog file, using ${changelogFile.path}`,\n );\n }\n\n const fileRes = await bitbucketHttp.get(\n joinUrlParts(\n apiBaseUrl,\n '2.0/repositories',\n repository,\n 'src',\n changelogFile.commit.hash,\n changelogFile.path,\n ),\n );\n\n const changelogMd = `${fileRes.body}\\n#\\n##`;\n return { changelogFile: changelogFile.path, changelogMd };\n}\n\nexport function getReleaseList(\n _project: ChangeLogProject,\n _release: ChangeLogRelease,\n): ChangeLogNotes[] {\n logger.trace('bitbucket.getReleaseList()');\n logger.info(\n 'Unsupported Bitbucket Cloud feature. Skipping release fetching.',\n );\n return [];\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../lib/workers/repository/update/pr/changelog/bitbucket/index.ts"],"names":[],"mappings":";;;AAkBA,8CA0DC;AAED,wCASC;;AAvFD,kEAA6B;AAC7B,kEAAkC;AAClC,gGAA8D;AAC9D,qDAAkD;AAClD,gFAA+F;AAC/F,qEAAsE;AACtE,oDAA0D;AAC1D,sCAAqD;AAQxC,QAAA,EAAE,GAAG,qBAAqB,CAAC;AACxC,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,UAAE,CAAC,CAAC;AAErC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,UAAkB,EAClB,eAAwB;IAExB,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE9C,MAAM,mBAAmB,GAAG,IAAA,kBAAY,EACtC,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,eAAe,IAAI,EAAE,CACtB,CAAC;IAEF,MAAM,SAAS,GAAG,CAChB,MAAM,aAAa,CAAC,OAAO,CACzB,mBAAmB,EACnB;QACE,QAAQ,EAAE,IAAI;KACf,EACD,iCAAwB,CACzB,CACF,CAAC,IAAI,CAAC,MAAM,CAAC;IAEd,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,kCAAsB,CAAC,IAAI,CAAC,mBAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACnD,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,iCAAwB,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SACxD,KAAK,EAAE,CAAC;IACX,IAAI,YAAE,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,eAAM,CAAC,KAAK,CACV,iDAAiD,aAAa,CAAC,IAAI,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CACzC,IAAA,kBAAY,EACV,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,KAAK,EACL,aAAa,CAAC,MAAM,CAAC,IAAI,EACzB,aAAa,CAAC,IAAI,CACnB,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,SAAgB,cAAc,CAC5B,QAA0B,EAC1B,QAA0B;IAE1B,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3C,eAAM,CAAC,IAAI,CACT,kEAAkE,CACnE,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import path from 'node:path';\nimport is from '@sindresorhus/is';\nimport changelogFilenameRegex from 'changelog-filename-regex';\nimport { logger } from '../../../../../../logger';\nimport { PagedSourceResultsSchema } from '../../../../../../modules/platform/bitbucket/schema';\nimport { BitbucketHttp } from '../../../../../../util/http/bitbucket';\nimport { joinUrlParts } from '../../../../../../util/url';\nimport { compareChangelogFilePath } from '../common';\nimport type {\n ChangeLogFile,\n ChangeLogNotes,\n ChangeLogProject,\n ChangeLogRelease,\n} from '../types';\n\nexport const id = 'bitbucket-changelog';\nconst bitbucketHttp = new BitbucketHttp(id);\n\nexport async function getReleaseNotesMd(\n repository: string,\n apiBaseUrl: string,\n sourceDirectory?: string,\n): Promise<ChangeLogFile | null> {\n logger.trace('bitbucket.getReleaseNotesMd()');\n\n const repositorySourceURl = joinUrlParts(\n apiBaseUrl,\n '2.0/repositories',\n repository,\n 'src/HEAD',\n sourceDirectory ?? '',\n );\n\n const rootFiles = (\n await bitbucketHttp.getJson(\n repositorySourceURl,\n {\n paginate: true,\n },\n PagedSourceResultsSchema,\n )\n ).body.values;\n\n const allFiles = rootFiles.filter((f) => f.type === 'commit_file');\n\n const files = allFiles.filter((f) =>\n changelogFilenameRegex.test(path.basename(f.path)),\n );\n\n const changelogFile = files\n .sort((a, b) => compareChangelogFilePath(a.path, b.path))\n .shift();\n if (is.nullOrUndefined(changelogFile)) {\n logger.trace('no changelog file found');\n return null;\n }\n\n if (files.length !== 0) {\n logger.debug(\n `Multiple candidates for changelog file, using ${changelogFile.path}`,\n );\n }\n\n const fileRes = await bitbucketHttp.getText(\n joinUrlParts(\n apiBaseUrl,\n '2.0/repositories',\n repository,\n 'src',\n changelogFile.commit.hash,\n changelogFile.path,\n ),\n );\n\n const changelogMd = `${fileRes.body}\\n#\\n##`;\n return { changelogFile: changelogFile.path, changelogMd };\n}\n\nexport function getReleaseList(\n _project: ChangeLogProject,\n _release: ChangeLogRelease,\n): ChangeLogNotes[] {\n logger.trace('bitbucket.getReleaseList()');\n logger.info(\n 'Unsupported Bitbucket Cloud feature. Skipping release fetching.',\n );\n return [];\n}\n"]}
@@ -35,7 +35,7 @@ async function getReleaseNotesMd(repository, apiBaseUrl, sourceDirectory) {
35
35
  logger_1.logger.debug(`Multiple candidates for changelog file, using ${changelogFile}`);
36
36
  }
37
37
  // https://docs.gitlab.com/13.2/ee/api/repositories.html#raw-blob-content
38
- const fileRes = await http.get(`${apiPrefix}blobs/${id}/raw`);
38
+ const fileRes = await http.getText(`${apiPrefix}blobs/${id}/raw`);
39
39
  const changelogMd = fileRes.body + '\n#\n##';
40
40
  return { changelogFile, changelogMd };
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../lib/workers/repository/update/pr/changelog/gitlab/index.ts"],"names":[],"mappings":"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","sourcesContent":["import changelogFilenameRegex from 'changelog-filename-regex';\nimport { logger } from '../../../../../../logger';\nimport type { GitlabRelease } from '../../../../../../modules/datasource/gitlab-releases/types';\nimport type { GitlabTreeNode } from '../../../../../../types/platform/gitlab';\nimport { GitlabHttp } from '../../../../../../util/http/gitlab';\nimport { compareChangelogFilePath } from '../common';\nimport type {\n ChangeLogFile,\n ChangeLogNotes,\n ChangeLogProject,\n ChangeLogRelease,\n} from '../types';\n\nexport const id = 'gitlab-changelog';\nconst http = new GitlabHttp(id);\n\nexport async function getReleaseNotesMd(\n repository: string,\n apiBaseUrl: string,\n sourceDirectory?: string,\n): Promise<ChangeLogFile | null> {\n logger.trace('gitlab.getReleaseNotesMd()');\n const urlEncodedRepo = encodeURIComponent(repository);\n const apiPrefix = `${apiBaseUrl}projects/${urlEncodedRepo}/repository/`;\n\n // https://docs.gitlab.com/13.2/ee/api/repositories.html#list-repository-tree\n const tree = (\n await http.getJsonUnchecked<GitlabTreeNode[]>(\n `${apiPrefix}tree?per_page=100${\n sourceDirectory ? `&path=${sourceDirectory}` : ''\n }`,\n {\n paginate: true,\n },\n )\n ).body;\n const allFiles = tree.filter((f) => f.type === 'blob');\n let files: GitlabTreeNode[] = [];\n if (!files.length) {\n files = allFiles.filter((f) => changelogFilenameRegex.test(f.name));\n }\n if (!files.length) {\n logger.trace('no changelog file found');\n return null;\n }\n const { path: changelogFile, id } = files\n .sort((a, b) => compareChangelogFilePath(a.name, b.name))\n .shift()!;\n /* istanbul ignore if */\n if (files.length !== 0) {\n logger.debug(\n `Multiple candidates for changelog file, using ${changelogFile}`,\n );\n }\n\n // https://docs.gitlab.com/13.2/ee/api/repositories.html#raw-blob-content\n const fileRes = await http.get(`${apiPrefix}blobs/${id}/raw`);\n const changelogMd = fileRes.body + '\\n#\\n##';\n return { changelogFile, changelogMd };\n}\n\nexport async function getReleaseList(\n project: ChangeLogProject,\n _release: ChangeLogRelease,\n): Promise<ChangeLogNotes[]> {\n logger.trace('gitlab.getReleaseNotesMd()');\n const apiBaseUrl = project.apiBaseUrl;\n const repository = project.repository;\n const urlEncodedRepo = encodeURIComponent(repository);\n const apiUrl = `${apiBaseUrl}projects/${urlEncodedRepo}/releases`;\n\n const res = await http.getJsonUnchecked<GitlabRelease[]>(\n `${apiUrl}?per_page=100`,\n {\n paginate: true,\n },\n );\n return res.body.map((release) => ({\n url: `${project.baseUrl}${repository}/-/releases/${release.tag_name}`,\n notesSourceUrl: apiUrl,\n name: release.name,\n body: release.description,\n tag: release.tag_name,\n }));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../lib/workers/repository/update/pr/changelog/gitlab/index.ts"],"names":[],"mappings":"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","sourcesContent":["import changelogFilenameRegex from 'changelog-filename-regex';\nimport { logger } from '../../../../../../logger';\nimport type { GitlabRelease } from '../../../../../../modules/datasource/gitlab-releases/types';\nimport type { GitlabTreeNode } from '../../../../../../types/platform/gitlab';\nimport { GitlabHttp } from '../../../../../../util/http/gitlab';\nimport { compareChangelogFilePath } from '../common';\nimport type {\n ChangeLogFile,\n ChangeLogNotes,\n ChangeLogProject,\n ChangeLogRelease,\n} from '../types';\n\nexport const id = 'gitlab-changelog';\nconst http = new GitlabHttp(id);\n\nexport async function getReleaseNotesMd(\n repository: string,\n apiBaseUrl: string,\n sourceDirectory?: string,\n): Promise<ChangeLogFile | null> {\n logger.trace('gitlab.getReleaseNotesMd()');\n const urlEncodedRepo = encodeURIComponent(repository);\n const apiPrefix = `${apiBaseUrl}projects/${urlEncodedRepo}/repository/`;\n\n // https://docs.gitlab.com/13.2/ee/api/repositories.html#list-repository-tree\n const tree = (\n await http.getJsonUnchecked<GitlabTreeNode[]>(\n `${apiPrefix}tree?per_page=100${\n sourceDirectory ? `&path=${sourceDirectory}` : ''\n }`,\n {\n paginate: true,\n },\n )\n ).body;\n const allFiles = tree.filter((f) => f.type === 'blob');\n let files: GitlabTreeNode[] = [];\n if (!files.length) {\n files = allFiles.filter((f) => changelogFilenameRegex.test(f.name));\n }\n if (!files.length) {\n logger.trace('no changelog file found');\n return null;\n }\n const { path: changelogFile, id } = files\n .sort((a, b) => compareChangelogFilePath(a.name, b.name))\n .shift()!;\n /* istanbul ignore if */\n if (files.length !== 0) {\n logger.debug(\n `Multiple candidates for changelog file, using ${changelogFile}`,\n );\n }\n\n // https://docs.gitlab.com/13.2/ee/api/repositories.html#raw-blob-content\n const fileRes = await http.getText(`${apiPrefix}blobs/${id}/raw`);\n const changelogMd = fileRes.body + '\\n#\\n##';\n return { changelogFile, changelogMd };\n}\n\nexport async function getReleaseList(\n project: ChangeLogProject,\n _release: ChangeLogRelease,\n): Promise<ChangeLogNotes[]> {\n logger.trace('gitlab.getReleaseNotesMd()');\n const apiBaseUrl = project.apiBaseUrl;\n const repository = project.repository;\n const urlEncodedRepo = encodeURIComponent(repository);\n const apiUrl = `${apiBaseUrl}projects/${urlEncodedRepo}/releases`;\n\n const res = await http.getJsonUnchecked<GitlabRelease[]>(\n `${apiUrl}?per_page=100`,\n {\n paginate: true,\n },\n );\n return res.body.map((release) => ({\n url: `${project.baseUrl}${repository}/-/releases/${release.tag_name}`,\n notesSourceUrl: apiUrl,\n name: release.name,\n body: release.description,\n tag: release.tag_name,\n }));\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "39.182.5",
4
+ "version": "39.184.0",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -324,14 +324,14 @@
324
324
  "eslint-plugin-import": "2.31.0",
325
325
  "eslint-plugin-promise": "7.2.1",
326
326
  "expect-more-jest": "5.5.0",
327
- "globals": "15.15.0",
327
+ "globals": "16.0.0",
328
328
  "graphql": "16.10.0",
329
329
  "husky": "9.1.7",
330
330
  "jest-extended": "4.0.2",
331
331
  "lint-staged": "15.4.3",
332
332
  "markdownlint-cli2": "0.17.2",
333
333
  "memfs": "4.17.0",
334
- "nock": "13.5.6",
334
+ "nock": "14.0.1",
335
335
  "npm-run-all2": "7.0.2",
336
336
  "nyc": "17.1.0",
337
337
  "rimraf": "6.0.1",