renovate 40.49.3 → 40.49.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,6 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.GithubGraphqlDatasourceFetcher = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
|
-
const aggregate_error_1 = tslib_1.__importDefault(require("aggregate-error"));
|
6
5
|
const global_1 = require("../../../config/global");
|
7
6
|
const logger_1 = require("../../../logger");
|
8
7
|
const external_host_error_1 = require("../../../types/errors/external-host-error");
|
@@ -22,7 +21,7 @@ function isUnknownGraphqlError(err) {
|
|
22
21
|
return message.startsWith('Something went wrong while executing your query.');
|
23
22
|
}
|
24
23
|
function canBeSolvedByShrinking(err) {
|
25
|
-
const errors = err instanceof
|
24
|
+
const errors = err instanceof AggregateError ? err.errors : [err];
|
26
25
|
return errors.some((e) => err instanceof external_host_error_1.ExternalHostError || isUnknownGraphqlError(e));
|
27
26
|
}
|
28
27
|
class GithubGraphqlDatasourceFetcher {
|
@@ -89,7 +88,7 @@ class GithubGraphqlDatasourceFetcher {
|
|
89
88
|
}
|
90
89
|
else {
|
91
90
|
const errorInstances = errors.map(({ message }) => new Error(message));
|
92
|
-
const err = new
|
91
|
+
const err = new AggregateError(errorInstances);
|
93
92
|
return [null, err];
|
94
93
|
}
|
95
94
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"datasource-fetcher.js","sourceRoot":"","sources":["../../../../lib/util/github/graphql/datasource-fetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import AggregateError from 'aggregate-error';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport * as memCache from '../../cache/memory';\nimport * as packageCache from '../../cache/package';\nimport type { PackageCacheNamespace } from '../../cache/package/types';\nimport type {\n GithubGraphqlResponse,\n GithubHttp,\n GithubHttpOptions,\n} from '../../http/github';\nimport type { HttpResponse } from '../../http/types';\nimport { getApiBaseUrl } from '../url';\nimport { GithubGraphqlMemoryCacheStrategy } from './cache-strategies/memory-cache-strategy';\nimport { GithubGraphqlPackageCacheStrategy } from './cache-strategies/package-cache-strategy';\nimport type {\n GithubDatasourceItem,\n GithubGraphqlCacheStrategy,\n GithubGraphqlDatasourceAdapter,\n GithubGraphqlPayload,\n GithubGraphqlRepoParams,\n GithubGraphqlRepoResponse,\n GithubPackageConfig,\n RawQueryResponse,\n} from './types';\n\n/**\n * We know empirically that certain type of GraphQL errors\n * can be fixed by shrinking page size.\n *\n * @see https://github.com/renovatebot/renovate/issues/16343\n */\nfunction isUnknownGraphqlError(err: Error): boolean {\n const { message } = err;\n return message.startsWith('Something went wrong while executing your query.');\n}\n\nfunction canBeSolvedByShrinking(err: Error): boolean {\n const errors: Error[] = err instanceof AggregateError ? [...err] : [err];\n return errors.some(\n (e) => err instanceof ExternalHostError || isUnknownGraphqlError(e),\n );\n}\n\nexport class GithubGraphqlDatasourceFetcher<\n GraphqlItem,\n ResultItem extends GithubDatasourceItem,\n> {\n static async query<T, U extends GithubDatasourceItem>(\n config: GithubPackageConfig,\n http: GithubHttp,\n adapter: GithubGraphqlDatasourceAdapter<T, U>,\n ): Promise<U[]> {\n const instance = new GithubGraphqlDatasourceFetcher<T, U>(\n config,\n http,\n adapter,\n );\n const items = await instance.getItems();\n return items;\n }\n\n private readonly baseUrl: string;\n private readonly repoOwner: string;\n private readonly repoName: string;\n\n private itemsPerQuery: 100 | 50 | 25 = 100;\n\n private queryCount = 0;\n\n private cursor: string | null = null;\n\n private isPersistent: boolean | undefined;\n\n constructor(\n packageConfig: GithubPackageConfig,\n private http: GithubHttp,\n private datasourceAdapter: GithubGraphqlDatasourceAdapter<\n GraphqlItem,\n ResultItem\n >,\n ) {\n const { packageName, registryUrl } = packageConfig;\n [this.repoOwner, this.repoName] = packageName.split('/');\n this.baseUrl = getApiBaseUrl(registryUrl).replace(/\\/v3\\/$/, '/'); // Replace for GHE\n }\n\n private getCacheNs(): PackageCacheNamespace {\n return this.datasourceAdapter.key;\n }\n\n private getCacheKey(): string {\n return [this.baseUrl, this.repoOwner, this.repoName].join(':');\n }\n\n private getRawQueryOptions(): GithubHttpOptions {\n const baseUrl = this.baseUrl;\n const repository = `${this.repoOwner}/${this.repoName}`;\n const query = this.datasourceAdapter.query;\n const variables: GithubGraphqlRepoParams = {\n owner: this.repoOwner,\n name: this.repoName,\n count: this.itemsPerQuery,\n cursor: this.cursor,\n };\n\n return {\n baseUrl,\n repository,\n readOnly: true,\n body: { query, variables },\n };\n }\n\n private async doRawQuery(): Promise<\n RawQueryResponse<GithubGraphqlPayload<GraphqlItem>>\n > {\n const requestOptions = this.getRawQueryOptions();\n\n type GraphqlData = GithubGraphqlRepoResponse<GraphqlItem>;\n type HttpBody = GithubGraphqlResponse<GraphqlData>;\n let httpRes: HttpResponse<HttpBody>;\n try {\n httpRes = await this.http.postJson<HttpBody>('/graphql', requestOptions);\n } catch (err) {\n return [null, err];\n }\n\n const { body } = httpRes;\n const { data, errors } = body;\n\n if (errors?.length) {\n if (errors.length === 1) {\n const { message } = errors[0];\n const err = new Error(message);\n return [null, err];\n } else {\n const errorInstances = errors.map(({ message }) => new Error(message));\n const err = new AggregateError(errorInstances);\n return [null, err];\n }\n }\n\n if (!data) {\n const msg = 'GitHub GraphQL datasource: failed to obtain data';\n const err = new Error(msg);\n return [null, err];\n }\n\n if (!data.repository) {\n const msg = 'GitHub GraphQL datasource: failed to obtain repository data';\n const err = new Error(msg);\n return [null, err];\n }\n\n if (!data.repository.payload) {\n const msg =\n 'GitHub GraphQL datasource: failed to obtain repository payload data';\n const err = new Error(msg);\n return [null, err];\n }\n\n this.queryCount += 1;\n\n // For values other than explicit `false`,\n // we assume that items can not be cached.\n this.isPersistent ??= data.repository.isRepoPrivate === false;\n\n const res = data.repository.payload;\n return [res, null];\n }\n\n private shrinkPageSize(): boolean {\n if (this.itemsPerQuery === 100) {\n this.itemsPerQuery = 50;\n return true;\n }\n\n if (this.itemsPerQuery === 50) {\n this.itemsPerQuery = 25;\n return true;\n }\n\n return false;\n }\n\n private hasReachedQueryLimit(): boolean {\n return this.queryCount >= 100;\n }\n\n private async doShrinkableQuery(): Promise<\n GithubGraphqlPayload<GraphqlItem>\n > {\n let res: GithubGraphqlPayload<GraphqlItem> | null = null;\n let err: Error | null = null;\n\n while (!res) {\n [res, err] = await this.doRawQuery();\n if (err) {\n if (!canBeSolvedByShrinking(err)) {\n throw err;\n }\n\n const shrinkResult = this.shrinkPageSize();\n if (!shrinkResult) {\n throw err;\n }\n const { body, ...options } = this.getRawQueryOptions();\n logger.debug(\n { options, newSize: this.itemsPerQuery },\n 'Shrinking GitHub GraphQL page size after error',\n );\n }\n }\n\n return res;\n }\n\n private _cacheStrategy: GithubGraphqlCacheStrategy<ResultItem> | undefined;\n\n private cacheStrategy(): GithubGraphqlCacheStrategy<ResultItem> {\n if (this._cacheStrategy) {\n return this._cacheStrategy;\n }\n const cacheNs = this.getCacheNs();\n const cacheKey = this.getCacheKey();\n const cachePrivatePackages = GlobalConfig.get(\n 'cachePrivatePackages',\n false,\n );\n this._cacheStrategy =\n cachePrivatePackages || this.isPersistent\n ? new GithubGraphqlPackageCacheStrategy<ResultItem>(cacheNs, cacheKey)\n : new GithubGraphqlMemoryCacheStrategy<ResultItem>(cacheNs, cacheKey);\n return this._cacheStrategy;\n }\n\n /**\n * This method is responsible for data synchronization.\n * It also detects persistence of the package, based on the first page result.\n */\n private async doPaginatedFetch(): Promise<void> {\n let hasNextPage = true;\n let isPaginationDone = false;\n let nextCursor: string | undefined;\n while (hasNextPage && !isPaginationDone && !this.hasReachedQueryLimit()) {\n const queryResult = await this.doShrinkableQuery();\n\n const resultItems: ResultItem[] = [];\n for (const node of queryResult.nodes) {\n const item = this.datasourceAdapter.transform(node);\n if (!item) {\n logger.once.info(\n {\n packageName: `${this.repoOwner}/${this.repoName}`,\n baseUrl: this.baseUrl,\n },\n `GitHub GraphQL datasource: skipping empty item`,\n );\n continue;\n }\n resultItems.push(item);\n }\n\n // It's important to call `getCacheStrategy()` after `doShrinkableQuery()`\n // because `doShrinkableQuery()` may change `this.isCacheable`.\n //\n // Otherwise, cache items for public packages will never be persisted\n // in long-term cache.\n isPaginationDone = await this.cacheStrategy().reconcile(resultItems);\n\n hasNextPage = !!queryResult?.pageInfo?.hasNextPage;\n nextCursor = queryResult?.pageInfo?.endCursor;\n if (hasNextPage && nextCursor) {\n this.cursor = nextCursor;\n }\n }\n\n if (this.isPersistent) {\n await this.storePersistenceFlag(30);\n }\n }\n\n private async doCachedQuery(): Promise<ResultItem[]> {\n await this.loadPersistenceFlag();\n if (!this.isPersistent) {\n await this.doPaginatedFetch();\n }\n\n const res = await this.cacheStrategy().finalizeAndReturn();\n if (res.length) {\n return res;\n }\n\n delete this.isPersistent;\n await this.doPaginatedFetch();\n return this.cacheStrategy().finalizeAndReturn();\n }\n\n async loadPersistenceFlag(): Promise<void> {\n const ns = this.getCacheNs();\n const key = `${this.getCacheKey()}:is-persistent`;\n this.isPersistent = await packageCache.get<true>(ns, key);\n }\n\n async storePersistenceFlag(minutes: number): Promise<void> {\n const ns = this.getCacheNs();\n const key = `${this.getCacheKey()}:is-persistent`;\n await packageCache.set(ns, key, true, minutes);\n }\n\n /**\n * This method ensures the only one query is executed\n * to a particular package during single run.\n */\n private doUniqueQuery(): Promise<ResultItem[]> {\n const cacheKey = `github-pending:${this.getCacheNs()}:${this.getCacheKey()}`;\n const resultPromise =\n memCache.get<Promise<ResultItem[]>>(cacheKey) ?? this.doCachedQuery();\n memCache.set(cacheKey, resultPromise);\n return resultPromise;\n }\n\n async getItems(): Promise<ResultItem[]> {\n const res = await this.doUniqueQuery();\n return res;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"datasource-fetcher.js","sourceRoot":"","sources":["../../../../lib/util/github/graphql/datasource-fetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport * as memCache from '../../cache/memory';\nimport * as packageCache from '../../cache/package';\nimport type { PackageCacheNamespace } from '../../cache/package/types';\nimport type {\n GithubGraphqlResponse,\n GithubHttp,\n GithubHttpOptions,\n} from '../../http/github';\nimport type { HttpResponse } from '../../http/types';\nimport { getApiBaseUrl } from '../url';\nimport { GithubGraphqlMemoryCacheStrategy } from './cache-strategies/memory-cache-strategy';\nimport { GithubGraphqlPackageCacheStrategy } from './cache-strategies/package-cache-strategy';\nimport type {\n GithubDatasourceItem,\n GithubGraphqlCacheStrategy,\n GithubGraphqlDatasourceAdapter,\n GithubGraphqlPayload,\n GithubGraphqlRepoParams,\n GithubGraphqlRepoResponse,\n GithubPackageConfig,\n RawQueryResponse,\n} from './types';\n\n/**\n * We know empirically that certain type of GraphQL errors\n * can be fixed by shrinking page size.\n *\n * @see https://github.com/renovatebot/renovate/issues/16343\n */\nfunction isUnknownGraphqlError(err: Error): boolean {\n const { message } = err;\n return message.startsWith('Something went wrong while executing your query.');\n}\n\nfunction canBeSolvedByShrinking(err: Error): boolean {\n const errors: Error[] = err instanceof AggregateError ? err.errors : [err];\n return errors.some(\n (e) => err instanceof ExternalHostError || isUnknownGraphqlError(e),\n );\n}\n\nexport class GithubGraphqlDatasourceFetcher<\n GraphqlItem,\n ResultItem extends GithubDatasourceItem,\n> {\n static async query<T, U extends GithubDatasourceItem>(\n config: GithubPackageConfig,\n http: GithubHttp,\n adapter: GithubGraphqlDatasourceAdapter<T, U>,\n ): Promise<U[]> {\n const instance = new GithubGraphqlDatasourceFetcher<T, U>(\n config,\n http,\n adapter,\n );\n const items = await instance.getItems();\n return items;\n }\n\n private readonly baseUrl: string;\n private readonly repoOwner: string;\n private readonly repoName: string;\n\n private itemsPerQuery: 100 | 50 | 25 = 100;\n\n private queryCount = 0;\n\n private cursor: string | null = null;\n\n private isPersistent: boolean | undefined;\n\n constructor(\n packageConfig: GithubPackageConfig,\n private http: GithubHttp,\n private datasourceAdapter: GithubGraphqlDatasourceAdapter<\n GraphqlItem,\n ResultItem\n >,\n ) {\n const { packageName, registryUrl } = packageConfig;\n [this.repoOwner, this.repoName] = packageName.split('/');\n this.baseUrl = getApiBaseUrl(registryUrl).replace(/\\/v3\\/$/, '/'); // Replace for GHE\n }\n\n private getCacheNs(): PackageCacheNamespace {\n return this.datasourceAdapter.key;\n }\n\n private getCacheKey(): string {\n return [this.baseUrl, this.repoOwner, this.repoName].join(':');\n }\n\n private getRawQueryOptions(): GithubHttpOptions {\n const baseUrl = this.baseUrl;\n const repository = `${this.repoOwner}/${this.repoName}`;\n const query = this.datasourceAdapter.query;\n const variables: GithubGraphqlRepoParams = {\n owner: this.repoOwner,\n name: this.repoName,\n count: this.itemsPerQuery,\n cursor: this.cursor,\n };\n\n return {\n baseUrl,\n repository,\n readOnly: true,\n body: { query, variables },\n };\n }\n\n private async doRawQuery(): Promise<\n RawQueryResponse<GithubGraphqlPayload<GraphqlItem>>\n > {\n const requestOptions = this.getRawQueryOptions();\n\n type GraphqlData = GithubGraphqlRepoResponse<GraphqlItem>;\n type HttpBody = GithubGraphqlResponse<GraphqlData>;\n let httpRes: HttpResponse<HttpBody>;\n try {\n httpRes = await this.http.postJson<HttpBody>('/graphql', requestOptions);\n } catch (err) {\n return [null, err];\n }\n\n const { body } = httpRes;\n const { data, errors } = body;\n\n if (errors?.length) {\n if (errors.length === 1) {\n const { message } = errors[0];\n const err = new Error(message);\n return [null, err];\n } else {\n const errorInstances = errors.map(({ message }) => new Error(message));\n const err = new AggregateError(errorInstances);\n return [null, err];\n }\n }\n\n if (!data) {\n const msg = 'GitHub GraphQL datasource: failed to obtain data';\n const err = new Error(msg);\n return [null, err];\n }\n\n if (!data.repository) {\n const msg = 'GitHub GraphQL datasource: failed to obtain repository data';\n const err = new Error(msg);\n return [null, err];\n }\n\n if (!data.repository.payload) {\n const msg =\n 'GitHub GraphQL datasource: failed to obtain repository payload data';\n const err = new Error(msg);\n return [null, err];\n }\n\n this.queryCount += 1;\n\n // For values other than explicit `false`,\n // we assume that items can not be cached.\n this.isPersistent ??= data.repository.isRepoPrivate === false;\n\n const res = data.repository.payload;\n return [res, null];\n }\n\n private shrinkPageSize(): boolean {\n if (this.itemsPerQuery === 100) {\n this.itemsPerQuery = 50;\n return true;\n }\n\n if (this.itemsPerQuery === 50) {\n this.itemsPerQuery = 25;\n return true;\n }\n\n return false;\n }\n\n private hasReachedQueryLimit(): boolean {\n return this.queryCount >= 100;\n }\n\n private async doShrinkableQuery(): Promise<\n GithubGraphqlPayload<GraphqlItem>\n > {\n let res: GithubGraphqlPayload<GraphqlItem> | null = null;\n let err: Error | null = null;\n\n while (!res) {\n [res, err] = await this.doRawQuery();\n if (err) {\n if (!canBeSolvedByShrinking(err)) {\n throw err;\n }\n\n const shrinkResult = this.shrinkPageSize();\n if (!shrinkResult) {\n throw err;\n }\n const { body, ...options } = this.getRawQueryOptions();\n logger.debug(\n { options, newSize: this.itemsPerQuery },\n 'Shrinking GitHub GraphQL page size after error',\n );\n }\n }\n\n return res;\n }\n\n private _cacheStrategy: GithubGraphqlCacheStrategy<ResultItem> | undefined;\n\n private cacheStrategy(): GithubGraphqlCacheStrategy<ResultItem> {\n if (this._cacheStrategy) {\n return this._cacheStrategy;\n }\n const cacheNs = this.getCacheNs();\n const cacheKey = this.getCacheKey();\n const cachePrivatePackages = GlobalConfig.get(\n 'cachePrivatePackages',\n false,\n );\n this._cacheStrategy =\n cachePrivatePackages || this.isPersistent\n ? new GithubGraphqlPackageCacheStrategy<ResultItem>(cacheNs, cacheKey)\n : new GithubGraphqlMemoryCacheStrategy<ResultItem>(cacheNs, cacheKey);\n return this._cacheStrategy;\n }\n\n /**\n * This method is responsible for data synchronization.\n * It also detects persistence of the package, based on the first page result.\n */\n private async doPaginatedFetch(): Promise<void> {\n let hasNextPage = true;\n let isPaginationDone = false;\n let nextCursor: string | undefined;\n while (hasNextPage && !isPaginationDone && !this.hasReachedQueryLimit()) {\n const queryResult = await this.doShrinkableQuery();\n\n const resultItems: ResultItem[] = [];\n for (const node of queryResult.nodes) {\n const item = this.datasourceAdapter.transform(node);\n if (!item) {\n logger.once.info(\n {\n packageName: `${this.repoOwner}/${this.repoName}`,\n baseUrl: this.baseUrl,\n },\n `GitHub GraphQL datasource: skipping empty item`,\n );\n continue;\n }\n resultItems.push(item);\n }\n\n // It's important to call `getCacheStrategy()` after `doShrinkableQuery()`\n // because `doShrinkableQuery()` may change `this.isCacheable`.\n //\n // Otherwise, cache items for public packages will never be persisted\n // in long-term cache.\n isPaginationDone = await this.cacheStrategy().reconcile(resultItems);\n\n hasNextPage = !!queryResult?.pageInfo?.hasNextPage;\n nextCursor = queryResult?.pageInfo?.endCursor;\n if (hasNextPage && nextCursor) {\n this.cursor = nextCursor;\n }\n }\n\n if (this.isPersistent) {\n await this.storePersistenceFlag(30);\n }\n }\n\n private async doCachedQuery(): Promise<ResultItem[]> {\n await this.loadPersistenceFlag();\n if (!this.isPersistent) {\n await this.doPaginatedFetch();\n }\n\n const res = await this.cacheStrategy().finalizeAndReturn();\n if (res.length) {\n return res;\n }\n\n delete this.isPersistent;\n await this.doPaginatedFetch();\n return this.cacheStrategy().finalizeAndReturn();\n }\n\n async loadPersistenceFlag(): Promise<void> {\n const ns = this.getCacheNs();\n const key = `${this.getCacheKey()}:is-persistent`;\n this.isPersistent = await packageCache.get<true>(ns, key);\n }\n\n async storePersistenceFlag(minutes: number): Promise<void> {\n const ns = this.getCacheNs();\n const key = `${this.getCacheKey()}:is-persistent`;\n await packageCache.set(ns, key, true, minutes);\n }\n\n /**\n * This method ensures the only one query is executed\n * to a particular package during single run.\n */\n private doUniqueQuery(): Promise<ResultItem[]> {\n const cacheKey = `github-pending:${this.getCacheNs()}:${this.getCacheKey()}`;\n const resultPromise =\n memCache.get<Promise<ResultItem[]>>(cacheKey) ?? this.doCachedQuery();\n memCache.set(cacheKey, resultPromise);\n return resultPromise;\n }\n\n async getItems(): Promise<ResultItem[]> {\n const res = await this.doUniqueQuery();\n return res;\n }\n}\n"]}
|
package/dist/util/promises.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import type { Options as PAllOptions } from 'p-all';
|
2
|
+
import type { Mapper, Options as PMapOptions } from 'p-map';
|
3
3
|
type PromiseFactory<T> = () => Promise<T>;
|
4
|
-
export declare function all<T>(tasks: PromiseFactory<T>[], options?:
|
5
|
-
export declare function map<Element, NewElement>(input: Iterable<Element>, mapper:
|
4
|
+
export declare function all<T>(tasks: PromiseFactory<T>[], options?: PAllOptions): Promise<T[]>;
|
5
|
+
export declare function map<Element, NewElement>(input: Iterable<Element>, mapper: Mapper<Element, NewElement>, options?: PMapOptions): Promise<NewElement[]>;
|
6
6
|
export {};
|
package/dist/util/promises.js
CHANGED
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.all = all;
|
4
4
|
exports.map = map;
|
5
5
|
const tslib_1 = require("tslib");
|
6
|
-
const aggregate_error_1 = tslib_1.__importDefault(require("aggregate-error"));
|
7
6
|
const p_all_1 = tslib_1.__importDefault(require("p-all"));
|
8
7
|
const p_map_1 = tslib_1.__importDefault(require("p-map"));
|
9
8
|
const logger_1 = require("../logger");
|
@@ -21,14 +20,14 @@ function handleMultipleErrors(errors) {
|
|
21
20
|
const [error] = errors;
|
22
21
|
throw error;
|
23
22
|
}
|
24
|
-
throw new
|
23
|
+
throw new AggregateError(errors);
|
25
24
|
}
|
26
25
|
function handleError(err) {
|
27
|
-
if (!(err instanceof
|
26
|
+
if (!(err instanceof AggregateError)) {
|
28
27
|
throw err;
|
29
28
|
}
|
30
29
|
logger_1.logger.debug({ err }, 'Aggregate error is thrown');
|
31
|
-
handleMultipleErrors(
|
30
|
+
handleMultipleErrors(err.errors);
|
32
31
|
}
|
33
32
|
async function all(tasks, options) {
|
34
33
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../lib/util/promises.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../lib/util/promises.ts"],"names":[],"mappings":";;AAsCA,kBAcC;AAED,kBAeC;;AApED,0DAAyB;AAEzB,0DAAyB;AACzB,sCAAmC;AACnC,6EAAwE;AAIxE,SAAS,mBAAmB,CAAC,GAAQ;IACnC,OAAO,GAAG,YAAY,uCAAiB,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,CAAC;IAClB,CAAC;IACD,IACE,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EACxD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACvB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,GAAQ;IAC3B,IAAI,CAAC,CAAC,GAAG,YAAY,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;IACnD,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,GAAG,CACvB,KAA0B,EAC1B,OAAqB;IAErB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,eAAI,EAAC,KAAK,EAAE;YAC5B,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,KAAK;YAClB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,GAAG,CACvB,KAAwB,EACxB,MAAmC,EACnC,OAAqB;IAErB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,eAAI,EAAC,KAAK,EAAE,MAAM,EAAE;YACpC,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,KAAK;YAClB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC","sourcesContent":["import type { Options as PAllOptions } from 'p-all';\nimport pAll from 'p-all';\nimport type { Mapper, Options as PMapOptions } from 'p-map';\nimport pMap from 'p-map';\nimport { logger } from '../logger';\nimport { ExternalHostError } from '../types/errors/external-host-error';\n\ntype PromiseFactory<T> = () => Promise<T>;\n\nfunction isExternalHostError(err: any): err is ExternalHostError {\n return err instanceof ExternalHostError;\n}\n\nfunction handleMultipleErrors(errors: Error[]): never {\n const hostError = errors.find(isExternalHostError);\n if (hostError) {\n throw hostError;\n }\n if (\n errors.length === 1 ||\n new Set(errors.map(({ message }) => message)).size === 1\n ) {\n const [error] = errors;\n throw error;\n }\n\n throw new AggregateError(errors);\n}\n\nfunction handleError(err: any): never {\n if (!(err instanceof AggregateError)) {\n throw err;\n }\n\n logger.debug({ err }, 'Aggregate error is thrown');\n handleMultipleErrors(err.errors);\n}\n\nexport async function all<T>(\n tasks: PromiseFactory<T>[],\n options?: PAllOptions,\n): Promise<T[]> {\n try {\n const res = await pAll(tasks, {\n concurrency: 5,\n stopOnError: false,\n ...options,\n });\n return res;\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function map<Element, NewElement>(\n input: Iterable<Element>,\n mapper: Mapper<Element, NewElement>,\n options?: PMapOptions,\n): Promise<NewElement[]> {\n try {\n const res = await pMap(input, mapper, {\n concurrency: 5,\n stopOnError: false,\n ...options,\n });\n return res;\n } catch (err) {\n return handleError(err);\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": "40.49.
|
4
|
+
"version": "40.49.5",
|
5
5
|
"type": "commonjs",
|
6
6
|
"bin": {
|
7
7
|
"renovate": "dist/renovate.js",
|
@@ -181,7 +181,6 @@
|
|
181
181
|
"@yarnpkg/core": "4.4.1",
|
182
182
|
"@yarnpkg/parsers": "3.0.3",
|
183
183
|
"agentkeepalive": "4.6.0",
|
184
|
-
"aggregate-error": "3.1.0",
|
185
184
|
"async-mutex": "0.5.0",
|
186
185
|
"auth-header": "1.0.0",
|
187
186
|
"aws4": "1.13.2",
|
@@ -234,8 +233,8 @@
|
|
234
233
|
"nanoid": "5.1.5",
|
235
234
|
"neotraverse": "0.6.18",
|
236
235
|
"node-html-parser": "7.0.1",
|
237
|
-
"p-all": "
|
238
|
-
"p-map": "
|
236
|
+
"p-all": "5.0.0",
|
237
|
+
"p-map": "7.0.3",
|
239
238
|
"p-queue": "8.1.0",
|
240
239
|
"p-throttle": "7.0.0",
|
241
240
|
"parse-link-header": "2.0.0",
|