renovate 39.189.0 → 39.190.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/decrypt.js +1 -1
- package/dist/config/decrypt.js.map +1 -1
- package/dist/config/migrate-validate.js +2 -2
- package/dist/config/migrate-validate.js.map +1 -1
- package/dist/config/migration.js +1 -1
- package/dist/config/migration.js.map +1 -1
- package/dist/config/validation.js +2 -2
- package/dist/config/validation.js.map +1 -1
- package/dist/instrumentation/index.js +2 -2
- package/dist/instrumentation/index.js.map +1 -1
- package/dist/logger/once.js +2 -2
- package/dist/logger/once.js.map +1 -1
- package/dist/logger/renovate-logger.js +1 -1
- package/dist/logger/renovate-logger.js.map +1 -1
- package/dist/logger/utils.js +1 -1
- package/dist/logger/utils.js.map +1 -1
- package/dist/modules/datasource/artifactory/index.js +0 -1
- package/dist/modules/datasource/artifactory/index.js.map +1 -1
- package/dist/modules/datasource/aws-machine-image/index.js +6 -5
- package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
- package/dist/modules/datasource/bazel/index.js +0 -1
- package/dist/modules/datasource/bazel/index.js.map +1 -1
- package/dist/modules/datasource/bitrise/index.js +1 -1
- package/dist/modules/datasource/bitrise/index.js.map +1 -1
- package/dist/modules/datasource/conda/index.js +0 -1
- package/dist/modules/datasource/conda/index.js.map +1 -1
- package/dist/modules/datasource/cpan/index.js +1 -1
- package/dist/modules/datasource/cpan/index.js.map +1 -1
- package/dist/modules/datasource/crate/index.js +2 -2
- package/dist/modules/datasource/crate/index.js.map +1 -1
- package/dist/modules/datasource/dart/index.js +1 -1
- package/dist/modules/datasource/dart/index.js.map +1 -1
- package/dist/modules/datasource/dart-version/index.js +1 -1
- package/dist/modules/datasource/dart-version/index.js.map +1 -1
- package/dist/modules/datasource/datasource.js +0 -1
- package/dist/modules/datasource/datasource.js.map +1 -1
- package/dist/modules/datasource/deb/index.js +1 -1
- package/dist/modules/datasource/deb/index.js.map +1 -1
- package/dist/modules/datasource/deno/index.js +1 -1
- package/dist/modules/datasource/deno/index.js.map +1 -1
- package/dist/modules/datasource/devbox/index.js +0 -1
- package/dist/modules/datasource/devbox/index.js.map +1 -1
- package/dist/modules/datasource/docker/common.js +1 -1
- package/dist/modules/datasource/docker/common.js.map +1 -1
- package/dist/modules/datasource/docker/index.js +5 -5
- package/dist/modules/datasource/docker/index.js.map +1 -1
- package/dist/modules/datasource/docker/schema.js +2 -1
- package/dist/modules/datasource/docker/schema.js.map +1 -1
- package/dist/modules/datasource/flutter-version/index.js +1 -1
- package/dist/modules/datasource/flutter-version/index.js.map +1 -1
- package/dist/modules/datasource/git-refs/index.js +1 -1
- package/dist/modules/datasource/git-refs/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-packages/index.js +1 -1
- package/dist/modules/datasource/gitlab-packages/index.js.map +1 -1
- package/dist/modules/datasource/gitlab-releases/index.js +1 -3
- package/dist/modules/datasource/gitlab-releases/index.js.map +1 -1
- package/dist/modules/datasource/go/index.js +1 -1
- package/dist/modules/datasource/go/index.js.map +1 -1
- package/dist/modules/datasource/go/releases-direct.js +2 -2
- package/dist/modules/datasource/go/releases-direct.js.map +1 -1
- package/dist/modules/datasource/golang-version/index.js +1 -1
- package/dist/modules/datasource/golang-version/index.js.map +1 -1
- package/dist/modules/datasource/gradle-version/index.js +1 -1
- package/dist/modules/datasource/gradle-version/index.js.map +1 -1
- package/dist/modules/datasource/helm/index.js +1 -1
- package/dist/modules/datasource/helm/index.js.map +1 -1
- package/dist/modules/datasource/hex/index.js +1 -1
- package/dist/modules/datasource/hex/index.js.map +1 -1
- package/dist/modules/datasource/java-version/index.js +0 -1
- package/dist/modules/datasource/java-version/index.js.map +1 -1
- package/dist/modules/datasource/jenkins-plugins/index.js +1 -1
- package/dist/modules/datasource/jenkins-plugins/index.js.map +1 -1
- package/dist/modules/datasource/maven/index.js +3 -3
- package/dist/modules/datasource/maven/index.js.map +1 -1
- package/dist/modules/datasource/maven/util.js +2 -2
- package/dist/modules/datasource/maven/util.js.map +1 -1
- package/dist/modules/datasource/node-version/index.js +1 -1
- package/dist/modules/datasource/node-version/index.js.map +1 -1
- package/dist/modules/datasource/npm/index.js +1 -1
- package/dist/modules/datasource/npm/index.js.map +1 -1
- package/dist/modules/datasource/npm/npmrc.js +1 -1
- package/dist/modules/datasource/npm/npmrc.js.map +1 -1
- package/dist/modules/datasource/nuget/index.js +1 -1
- package/dist/modules/datasource/nuget/index.js.map +1 -1
- package/dist/modules/datasource/nuget/v3.js +1 -3
- package/dist/modules/datasource/nuget/v3.js.map +1 -1
- package/dist/modules/datasource/orb/index.js +1 -1
- package/dist/modules/datasource/orb/index.js.map +1 -1
- package/dist/modules/datasource/packagist/index.js +1 -1
- package/dist/modules/datasource/packagist/index.js.map +1 -1
- package/dist/modules/datasource/pod/index.js +1 -1
- package/dist/modules/datasource/pod/index.js.map +1 -1
- package/dist/modules/datasource/python-version/index.js +1 -1
- package/dist/modules/datasource/python-version/index.js.map +1 -1
- package/dist/modules/datasource/repology/index.js +1 -1
- package/dist/modules/datasource/repology/index.js.map +1 -1
- package/dist/modules/datasource/rubygems/index.js +1 -1
- package/dist/modules/datasource/rubygems/index.js.map +1 -1
- package/dist/modules/datasource/sbt-package/index.js +1 -1
- package/dist/modules/datasource/sbt-package/index.js.map +1 -1
- package/dist/modules/datasource/sbt-plugin/index.js +1 -1
- package/dist/modules/datasource/sbt-plugin/index.js.map +1 -1
- package/dist/modules/datasource/terraform-module/index.js +1 -1
- package/dist/modules/datasource/terraform-module/index.js.map +1 -1
- package/dist/modules/datasource/terraform-provider/index.js +1 -2
- package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
- package/dist/modules/manager/api.js +2 -0
- package/dist/modules/manager/api.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +2 -1
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/gomod/update.js +2 -2
- package/dist/modules/manager/gomod/update.js.map +1 -1
- package/dist/modules/manager/helmv3/utils.js +3 -1
- package/dist/modules/manager/helmv3/utils.js.map +1 -1
- package/dist/modules/manager/homebrew/extract.js +0 -1
- package/dist/modules/manager/homebrew/extract.js.map +1 -1
- package/dist/modules/manager/pep621/schema.d.ts +5 -0
- package/dist/modules/manager/pep621/schema.js +2 -0
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/manager/pixi/artifacts.d.ts +3 -0
- package/dist/modules/manager/pixi/artifacts.js +85 -0
- package/dist/modules/manager/pixi/artifacts.js.map +1 -0
- package/dist/modules/manager/pixi/extract.d.ts +2 -0
- package/dist/modules/manager/pixi/extract.js +53 -0
- package/dist/modules/manager/pixi/extract.js.map +1 -0
- package/dist/modules/manager/pixi/index.d.ts +11 -0
- package/dist/modules/manager/pixi/index.js +22 -0
- package/dist/modules/manager/pixi/index.js.map +1 -0
- package/dist/modules/manager/pixi/lockfile.d.ts +6 -0
- package/dist/modules/manager/pixi/lockfile.js +25 -0
- package/dist/modules/manager/pixi/lockfile.js.map +1 -0
- package/dist/modules/manager/pixi/schema.d.ts +14 -0
- package/dist/modules/manager/pixi/schema.js +14 -0
- package/dist/modules/manager/pixi/schema.js.map +1 -0
- package/dist/modules/platform/index.js +0 -1
- package/dist/modules/platform/index.js.map +1 -1
- package/dist/proxy.js +1 -1
- package/dist/proxy.js.map +1 -1
- package/dist/renovate.js +2 -2
- package/dist/renovate.js.map +1 -1
- package/dist/util/exec/containerbase.js +5 -0
- package/dist/util/exec/containerbase.js.map +1 -1
- package/dist/util/http/bitbucket.js +1 -1
- package/dist/util/http/bitbucket.js.map +1 -1
- package/dist/util/http/cache/abstract-http-cache-provider.js +1 -1
- package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
- package/dist/workers/global/config/parse/file.js +1 -1
- package/dist/workers/global/config/parse/file.js.map +1 -1
- package/dist/workers/repository/process/extract-update.js +0 -1
- package/dist/workers/repository/process/extract-update.js.map +1 -1
- package/dist/workers/repository/updates/flatten.js +0 -1
- package/dist/workers/repository/updates/flatten.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +0 -1
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +11 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/node-version/index.ts"],"names":[],"mappings":";;;;AAAA,qEAA8D;AAC9D,uDAAsD;AACtD,2CAAiD;AACjD,gDAAyD;AACzD,8CAA2C;AAE3C,qCAA0D;AAG1D,MAAa,qBAAsB,SAAQ,uBAAU;IACnD,MAAM,CAAU,EAAE,GAAG,mBAAU,CAAC;IAEhC;QACE,KAAK,CAAC,mBAAU,CAAC,CAAC;IACpB,CAAC;IAEiB,mBAAmB,GAAG,CAAC,2BAAkB,CAAC,CAAC;IAE3C,iBAAiB,GAAG,SAAU,CAAC;IAE/B,OAAO,GAAG,IAAI,CAAC;IAEf,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,4DAA4D,CAAC;IAC7C,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,gDAAgD,CAAC;IAO7C,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,GACO;QAClB,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/node-version/index.ts"],"names":[],"mappings":";;;;AAAA,qEAA8D;AAC9D,uDAAsD;AACtD,2CAAiD;AACjD,gDAAyD;AACzD,8CAA2C;AAE3C,qCAA0D;AAG1D,MAAa,qBAAsB,SAAQ,uBAAU;IACnD,MAAM,CAAU,EAAE,GAAG,mBAAU,CAAC;IAEhC;QACE,KAAK,CAAC,mBAAU,CAAC,CAAC;IACpB,CAAC;IAEiB,mBAAmB,GAAG,CAAC,2BAAkB,CAAC,CAAC;IAE3C,iBAAiB,GAAG,SAAU,CAAC;IAE/B,OAAO,GAAG,IAAI,CAAC;IAEf,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,4DAA4D,CAAC;IAC7C,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,gDAAgD,CAAC;IAO7C,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAkB;YAC5B,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,gCAAgC;YAC3C,WAAW;YACX,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CACX,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC9B,IAAA,kBAAY,EAAC,WAAW,EAAE,YAAY,CAAC,CACxC,CACF,CAAC,IAAI,CAAC;YACP,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO;gBACP,gBAAgB,EAAE,IAAA,uBAAW,EAAC,IAAI,CAAC;gBACnC,QAAQ,EAAE,GAAG,KAAK,KAAK;aACxB,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;;AAxDH,sDAyDC;AAhCO;IALL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,mBAAU,EAAE;QACrC,uBAAuB;QACvB,GAAG,EAAE,CAAC,EAAE,WAAW,EAAqB,EAAE,EAAE,CAAC,GAAG,WAAW,EAAE;KAC9D,CAAC;wDAgCD","sourcesContent":["import { cache } from '../../../util/cache/package/decorator';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { joinUrlParts } from '../../../util/url';\nimport { id as versioning } from '../../versioning/node';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { datasource, defaultRegistryUrl } from './common';\nimport type { NodeRelease } from './types';\n\nexport class NodeVersionDatasource extends Datasource {\n static readonly id = datasource;\n\n constructor() {\n super(datasource);\n }\n\n override readonly defaultRegistryUrls = [defaultRegistryUrl];\n\n override readonly defaultVersioning = versioning;\n\n override readonly caching = true;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `date` field.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'We use the URL: https://github.com/nodejs/node';\n\n @cache({\n namespace: `datasource-${datasource}`,\n // TODO: types (#22198)\n key: ({ registryUrl }: GetReleasesConfig) => `${registryUrl}`,\n })\n async getReleases({\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n const result: ReleaseResult = {\n homepage: 'https://nodejs.org',\n sourceUrl: 'https://github.com/nodejs/node',\n registryUrl,\n releases: [],\n };\n try {\n const resp = (\n await this.http.getJsonUnchecked<NodeRelease[]>(\n joinUrlParts(registryUrl, 'index.json'),\n )\n ).body;\n result.releases.push(\n ...resp.map(({ version, date, lts }) => ({\n version,\n releaseTimestamp: asTimestamp(date),\n isStable: lts !== false,\n })),\n );\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n return result.releases.length ? result : null;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/npm/index.ts"],"names":[],"mappings":";;;;AAAA,4EAAsD;AACtD,8CAA2C;AAE3C,qCAAwE;AACxE,+BAAsC;AAEtC,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,MAAa,aAAc,SAAQ,uBAAU;IAC3C,MAAM,CAAU,EAAE,GAAG,KAAK,CAAC;IAET,qBAAqB,GAAG,IAAI,CAAC;IAE7B,gBAAgB,GAAG,OAAO,CAAC;IAE3B,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC;IAErC,mBAAmB,GAAG,4BAAqB,CAAC;IAE5C,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,2EAA2E,CAAC;IAC5D,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,0EAA0E,CAAC;IAE7E;QACE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/npm/index.ts"],"names":[],"mappings":";;;;AAAA,4EAAsD;AACtD,8CAA2C;AAE3C,qCAAwE;AACxE,+BAAsC;AAEtC,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,MAAa,aAAc,SAAQ,uBAAU;IAC3C,MAAM,CAAU,EAAE,GAAG,KAAK,CAAC;IAET,qBAAqB,GAAG,IAAI,CAAC;IAE7B,gBAAgB,GAAG,OAAO,CAAC;IAE3B,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC;IAErC,mBAAmB,GAAG,4BAAqB,CAAC;IAE5C,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,2EAA2E,CAAC;IAC5D,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,0EAA0E,CAAC;IAE7E;QACE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC;IACb,CAAC;;AAjCH,sCAkCC","sourcesContent":["import * as npmVersioning from '../../versioning/npm';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { defaultRegistryUrls as npmDefaultRegistryUrl } from './common';\nimport { getDependency } from './get';\n\nexport { setNpmrc } from './npmrc';\n\nexport class NpmDatasource extends Datasource {\n static readonly id = 'npm';\n\n override readonly customRegistrySupport = true;\n\n override readonly registryStrategy = 'first';\n\n override readonly defaultVersioning = npmVersioning.id;\n\n override readonly defaultRegistryUrls = npmDefaultRegistryUrl;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `time` field in the results.';\n override readonly sourceUrlSupport = 'release';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n constructor() {\n super(NpmDatasource.id);\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const res = await getDependency(this.http, registryUrl, packageName);\n return res;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"npmrc.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/npm/npmrc.ts"],"names":[],"mappings":"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","sourcesContent":["import url from 'node:url';\nimport is from '@sindresorhus/is';\nimport ini from 'ini';\nimport { GlobalConfig } from '../../../config/global';\nimport type { PackageRule } from '../../../config/types';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport { fromBase64 } from '../../../util/string';\nimport { ensureTrailingSlash, isHttpUrl } from '../../../util/url';\nimport { defaultRegistryUrls } from './common';\nimport type { NpmrcRules } from './types';\n\nlet npmrc: Record<string, any> = {};\nlet npmrcRaw = '';\nlet packageRules: PackageRule[] = [];\n\nfunction envReplace(value: any, env = process.env): any {\n // istanbul ignore if\n if (!is.string(value)) {\n return value;\n }\n\n const ENV_EXPR = regEx(/(\\\\*)\\$\\{([^}]+)\\}/g);\n\n return value.replace(ENV_EXPR, (match, _esc, envVarName) => {\n if (env[envVarName] === undefined) {\n logger.warn({ match }, 'Failed to replace env in config');\n throw new Error('env-replace');\n }\n return env[envVarName];\n });\n}\n\nexport function getMatchHostFromNpmrcHost(input: string): string {\n if (input.startsWith('//')) {\n const matchHost = input.replace('//', '');\n if (matchHost.includes('/')) {\n return 'https://' + matchHost;\n }\n return matchHost;\n }\n return input;\n}\n\nexport function convertNpmrcToRules(npmrc: Record<string, any>): NpmrcRules {\n const rules: NpmrcRules = {\n hostRules: [],\n packageRules: [],\n };\n // Generate hostRules\n const hostType = 'npm';\n const hosts: Record<string, HostRule> = {};\n for (const [key, value] of Object.entries(npmrc)) {\n if (!is.nonEmptyString(value)) {\n continue;\n }\n const keyParts = key.split(':');\n const keyType = keyParts.pop();\n let matchHost = '';\n if (keyParts.length) {\n matchHost = getMatchHostFromNpmrcHost(keyParts.join(':'));\n }\n const rule: HostRule = hosts[matchHost] || {};\n if (keyType === '_authToken' || keyType === '_auth') {\n rule.token = value;\n if (keyType === '_auth') {\n rule.authType = 'Basic';\n }\n } else if (keyType === 'username') {\n rule.username = value;\n } else if (keyType === '_password') {\n rule.password = fromBase64(value);\n } else {\n continue; // don't add the rule\n }\n hosts[matchHost] = rule;\n }\n for (const [matchHost, rule] of Object.entries(hosts)) {\n const hostRule = { ...rule, hostType };\n if (matchHost) {\n hostRule.matchHost = matchHost;\n }\n rules.hostRules?.push(hostRule);\n }\n // Generate packageRules\n const matchDatasources = ['npm'];\n const { registry } = npmrc;\n // packageRules order matters, so look for a default registry first\n if (is.nonEmptyString(registry)) {\n if (isHttpUrl(registry)) {\n // Default registry\n rules.packageRules?.push({\n matchDatasources,\n registryUrls: [registry],\n });\n } else {\n logger.warn({ registry }, 'Invalid npmrc registry= URL');\n }\n }\n // Now look for scoped registries\n for (const [key, value] of Object.entries(npmrc)) {\n if (!is.nonEmptyString(value)) {\n continue;\n }\n const keyParts = key.split(':');\n const keyType = keyParts.pop();\n if (keyType === 'registry' && keyParts.length && is.nonEmptyString(value)) {\n const scope = keyParts.join(':');\n if (isHttpUrl(value)) {\n rules.packageRules?.push({\n matchDatasources,\n matchPackageNames: [`${scope}/**`],\n registryUrls: [value],\n });\n } else {\n logger.warn({ scope, registry: value }, 'Invalid npmrc registry= URL');\n }\n }\n }\n return rules;\n}\n\nexport function setNpmrc(input?: string): void {\n if (input) {\n if (input === npmrcRaw) {\n return;\n }\n const existingNpmrc = npmrc;\n npmrcRaw = input;\n logger.debug('Setting npmrc');\n npmrc = ini.parse(input.replace(regEx(/\\\\n/g), '\\n'));\n const exposeAllEnv = GlobalConfig.get('exposeAllEnv');\n for (const [key, val] of Object.entries(npmrc)) {\n if (\n !exposeAllEnv &&\n key.endsWith('registry') &&\n is.string(val) &&\n val.includes('localhost')\n ) {\n logger.debug(\n { key, val },\n 'Detected localhost registry - rejecting npmrc file',\n );\n npmrc = existingNpmrc;\n return;\n }\n }\n if (exposeAllEnv) {\n for (const key of Object.keys(npmrc)) {\n npmrc[key] = envReplace(npmrc[key]);\n }\n }\n const npmrcRules = convertNpmrcToRules(npmrc);\n if (npmrcRules.hostRules?.length) {\n npmrcRules.hostRules.forEach((hostRule) => hostRules.add(hostRule));\n }\n packageRules = npmrcRules.packageRules;\n } else if (npmrc) {\n logger.debug('Resetting npmrc');\n npmrc = {};\n npmrcRaw = '';\n packageRules = [];\n }\n}\n\nexport function resolveRegistryUrl(packageName: string): string {\n let registryUrl = defaultRegistryUrls[0];\n for (const rule of packageRules) {\n const { matchPackageNames, registryUrls } = rule;\n if (\n !matchPackageNames ||\n packageName.startsWith(matchPackageNames[0].replace(regEx(/\\*\\*$/), ''))\n ) {\n // TODO: fix types #22198\n registryUrl = registryUrls![0];\n }\n }\n return registryUrl;\n}\n\nexport function resolvePackageUrl(\n registryUrl: string,\n packageName: string,\n): string {\n return url.resolve(\n ensureTrailingSlash(registryUrl),\n encodeURIComponent(packageName).replace(regEx(/^%40/), '@'),\n );\n}\n"]}
|
1
|
+
{"version":3,"file":"npmrc.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/npm/npmrc.ts"],"names":[],"mappings":"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","sourcesContent":["import url from 'node:url';\nimport is from '@sindresorhus/is';\nimport ini from 'ini';\nimport { GlobalConfig } from '../../../config/global';\nimport type { PackageRule } from '../../../config/types';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport { fromBase64 } from '../../../util/string';\nimport { ensureTrailingSlash, isHttpUrl } from '../../../util/url';\nimport { defaultRegistryUrls } from './common';\nimport type { NpmrcRules } from './types';\n\nlet npmrc: Record<string, any> = {};\nlet npmrcRaw = '';\nlet packageRules: PackageRule[] = [];\n\nfunction envReplace(value: any, env = process.env): any {\n /* v8 ignore next 3 -- TODO: add test */\n if (!is.string(value)) {\n return value;\n }\n\n const ENV_EXPR = regEx(/(\\\\*)\\$\\{([^}]+)\\}/g);\n\n return value.replace(ENV_EXPR, (match, _esc, envVarName) => {\n if (env[envVarName] === undefined) {\n logger.warn({ match }, 'Failed to replace env in config');\n throw new Error('env-replace');\n }\n return env[envVarName];\n });\n}\n\nexport function getMatchHostFromNpmrcHost(input: string): string {\n if (input.startsWith('//')) {\n const matchHost = input.replace('//', '');\n if (matchHost.includes('/')) {\n return 'https://' + matchHost;\n }\n return matchHost;\n }\n return input;\n}\n\nexport function convertNpmrcToRules(npmrc: Record<string, any>): NpmrcRules {\n const rules: NpmrcRules = {\n hostRules: [],\n packageRules: [],\n };\n // Generate hostRules\n const hostType = 'npm';\n const hosts: Record<string, HostRule> = {};\n for (const [key, value] of Object.entries(npmrc)) {\n if (!is.nonEmptyString(value)) {\n continue;\n }\n const keyParts = key.split(':');\n const keyType = keyParts.pop();\n let matchHost = '';\n if (keyParts.length) {\n matchHost = getMatchHostFromNpmrcHost(keyParts.join(':'));\n }\n const rule: HostRule = hosts[matchHost] || {};\n if (keyType === '_authToken' || keyType === '_auth') {\n rule.token = value;\n if (keyType === '_auth') {\n rule.authType = 'Basic';\n }\n } else if (keyType === 'username') {\n rule.username = value;\n } else if (keyType === '_password') {\n rule.password = fromBase64(value);\n } else {\n continue; // don't add the rule\n }\n hosts[matchHost] = rule;\n }\n for (const [matchHost, rule] of Object.entries(hosts)) {\n const hostRule = { ...rule, hostType };\n if (matchHost) {\n hostRule.matchHost = matchHost;\n }\n rules.hostRules?.push(hostRule);\n }\n // Generate packageRules\n const matchDatasources = ['npm'];\n const { registry } = npmrc;\n // packageRules order matters, so look for a default registry first\n if (is.nonEmptyString(registry)) {\n if (isHttpUrl(registry)) {\n // Default registry\n rules.packageRules?.push({\n matchDatasources,\n registryUrls: [registry],\n });\n } else {\n logger.warn({ registry }, 'Invalid npmrc registry= URL');\n }\n }\n // Now look for scoped registries\n for (const [key, value] of Object.entries(npmrc)) {\n if (!is.nonEmptyString(value)) {\n continue;\n }\n const keyParts = key.split(':');\n const keyType = keyParts.pop();\n if (keyType === 'registry' && keyParts.length && is.nonEmptyString(value)) {\n const scope = keyParts.join(':');\n if (isHttpUrl(value)) {\n rules.packageRules?.push({\n matchDatasources,\n matchPackageNames: [`${scope}/**`],\n registryUrls: [value],\n });\n } else {\n logger.warn({ scope, registry: value }, 'Invalid npmrc registry= URL');\n }\n }\n }\n return rules;\n}\n\nexport function setNpmrc(input?: string): void {\n if (input) {\n if (input === npmrcRaw) {\n return;\n }\n const existingNpmrc = npmrc;\n npmrcRaw = input;\n logger.debug('Setting npmrc');\n npmrc = ini.parse(input.replace(regEx(/\\\\n/g), '\\n'));\n const exposeAllEnv = GlobalConfig.get('exposeAllEnv');\n for (const [key, val] of Object.entries(npmrc)) {\n if (\n !exposeAllEnv &&\n key.endsWith('registry') &&\n is.string(val) &&\n val.includes('localhost')\n ) {\n logger.debug(\n { key, val },\n 'Detected localhost registry - rejecting npmrc file',\n );\n npmrc = existingNpmrc;\n return;\n }\n }\n if (exposeAllEnv) {\n for (const key of Object.keys(npmrc)) {\n npmrc[key] = envReplace(npmrc[key]);\n }\n }\n const npmrcRules = convertNpmrcToRules(npmrc);\n if (npmrcRules.hostRules?.length) {\n npmrcRules.hostRules.forEach((hostRule) => hostRules.add(hostRule));\n }\n packageRules = npmrcRules.packageRules;\n } else if (npmrc) {\n logger.debug('Resetting npmrc');\n npmrc = {};\n npmrcRaw = '';\n packageRules = [];\n }\n}\n\nexport function resolveRegistryUrl(packageName: string): string {\n let registryUrl = defaultRegistryUrls[0];\n for (const rule of packageRules) {\n const { matchPackageNames, registryUrls } = rule;\n if (\n !matchPackageNames ||\n packageName.startsWith(matchPackageNames[0].replace(regEx(/\\*\\*$/), ''))\n ) {\n // TODO: fix types #22198\n registryUrl = registryUrls![0];\n }\n }\n return registryUrl;\n}\n\nexport function resolvePackageUrl(\n registryUrl: string,\n packageName: string,\n): string {\n return url.resolve(\n ensureTrailingSlash(registryUrl),\n encodeURIComponent(packageName).replace(regEx(/^%40/), '@'),\n );\n}\n"]}
|
@@ -26,7 +26,7 @@ class NugetDatasource extends datasource_1.Datasource {
|
|
26
26
|
}
|
27
27
|
async getReleases({ packageName, registryUrl, }) {
|
28
28
|
logger_1.logger.trace(`nuget.getReleases(${packageName})`);
|
29
|
-
|
29
|
+
/* v8 ignore next 3 -- should never happen */
|
30
30
|
if (!registryUrl) {
|
31
31
|
return null;
|
32
32
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/nuget/index.ts"],"names":[],"mappings":";;;;AAAA,4CAAyC;AACzC,gFAA0D;AAC1D,8CAA2C;AAE3C,qCAA4C;AAC5C,6BAAkC;AAClC,6BAAkC;AAElC,uEAAuE;AAC1D,QAAA,QAAQ,GAAG,qCAAqC,CAAC;AAE9D,MAAa,eAAgB,SAAQ,uBAAU;IAC7C,MAAM,CAAU,EAAE,GAAG,OAAO,CAAC;IAEX,mBAAmB,GAAG,CAAC,gBAAQ,CAAC,CAAC;IAEjC,iBAAiB,GAAG,eAAe,CAAC,EAAE,CAAC;IAEvC,gBAAgB,GAAG,OAAO,CAAC;IAE3B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,mLAAmL,CAAC;IACpK,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,oLAAoL,CAAC;IAE9K,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;IAEzB,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;IAElC;QACE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,eAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,GAAG,CAAC,CAAC;QAClD,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/nuget/index.ts"],"names":[],"mappings":";;;;AAAA,4CAAyC;AACzC,gFAA0D;AAC1D,8CAA2C;AAE3C,qCAA4C;AAC5C,6BAAkC;AAClC,6BAAkC;AAElC,uEAAuE;AAC1D,QAAA,QAAQ,GAAG,qCAAqC,CAAC;AAE9D,MAAa,eAAgB,SAAQ,uBAAU;IAC7C,MAAM,CAAU,EAAE,GAAG,OAAO,CAAC;IAEX,mBAAmB,GAAG,CAAC,gBAAQ,CAAC,CAAC;IAEjC,iBAAiB,GAAG,eAAe,CAAC,EAAE,CAAC;IAEvC,gBAAgB,GAAG,OAAO,CAAC;IAE3B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,mLAAmL,CAAC;IACpK,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,oLAAoL,CAAC;IAE9K,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;IAEzB,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;IAElC;QACE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,eAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,GAAG,CAAC,CAAC;QAClD,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAA,yBAAgB,EAAC,WAAW,CAAC,CAAC;QACnE,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAC3B,IAAI,CAAC,IAAI,EACT,OAAO,EACP,QAAQ,EACR,WAAW,CACZ,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAjDH,0CAkDC","sourcesContent":["import { logger } from '../../../logger';\nimport * as nugetVersioning from '../../versioning/nuget';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { parseRegistryUrl } from './common';\nimport { NugetV2Api } from './v2';\nimport { NugetV3Api } from './v3';\n\n// https://api.nuget.org/v3/index.json is a default official nuget feed\nexport const nugetOrg = 'https://api.nuget.org/v3/index.json';\n\nexport class NugetDatasource extends Datasource {\n static readonly id = 'nuget';\n\n override readonly defaultRegistryUrls = [nugetOrg];\n\n override readonly defaultVersioning = nugetVersioning.id;\n\n override readonly registryStrategy = 'merge';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'For the v2 API, the release timestamp is determined from the `Published` tag. And, for the v3 API, the release timestamp is determined from the `published` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'For the v2 API, the source URL is determined from the `ProjectUrl` tag. And, for the v3 API, the source URL is determined from the `metadata.repository@url` field in the results.';\n\n readonly v2Api = new NugetV2Api();\n\n readonly v3Api = new NugetV3Api();\n\n constructor() {\n super(NugetDatasource.id);\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n logger.trace(`nuget.getReleases(${packageName})`);\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n const { feedUrl, protocolVersion } = parseRegistryUrl(registryUrl);\n if (protocolVersion === 2) {\n return this.v2Api.getReleases(this.http, feedUrl, packageName);\n }\n if (protocolVersion === 3) {\n const queryUrl = await this.v3Api.getResourceUrl(this.http, feedUrl);\n if (queryUrl) {\n return this.v3Api.getReleases(\n this.http,\n feedUrl,\n queryUrl,\n packageName,\n );\n }\n }\n return null;\n }\n}\n"]}
|
@@ -26,7 +26,7 @@ class NugetV3Api {
|
|
26
26
|
// https://docs.microsoft.com/en-us/nuget/api/service-index
|
27
27
|
const resultCacheKey = `${url}:${resourceType}`;
|
28
28
|
const cachedResult = await packageCache.get(NugetV3Api.cacheNamespace, resultCacheKey);
|
29
|
-
|
29
|
+
/* v8 ignore next 3 -- TODO: add test */
|
30
30
|
if (cachedResult) {
|
31
31
|
return cachedResult;
|
32
32
|
}
|
@@ -34,7 +34,6 @@ class NugetV3Api {
|
|
34
34
|
try {
|
35
35
|
const responseCacheKey = url;
|
36
36
|
servicesIndexRaw = await packageCache.get(NugetV3Api.cacheNamespace, responseCacheKey);
|
37
|
-
// istanbul ignore else: currently not testable
|
38
37
|
if (!servicesIndexRaw) {
|
39
38
|
servicesIndexRaw = (await http.getJsonUnchecked(url))
|
40
39
|
.body;
|
@@ -159,7 +158,6 @@ class NugetV3Api {
|
|
159
158
|
logger_1.logger.debug({ err, registryUrl, pkgName, pkgVersion: latestStable }, `Cannot obtain sourceUrl`);
|
160
159
|
}
|
161
160
|
}
|
162
|
-
// istanbul ignore else: not easy testable
|
163
161
|
if (homepage) {
|
164
162
|
// only assign if not assigned
|
165
163
|
dep.sourceUrl ??= homepage;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"v3.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/nuget/v3.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport extract from 'extract-zip';\nimport semver from 'semver';\nimport upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport * as packageCache from '../../../util/cache/package';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { ensureCacheDir } from '../../../util/fs';\nimport type { Http } from '../../../util/http';\nimport { HttpError } from '../../../util/http';\nimport * as p from '../../../util/promises';\nimport { regEx } from '../../../util/regex';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { api as versioning } from '../../versioning/nuget';\nimport type { Release, ReleaseResult } from '../types';\nimport { massageUrl, removeBuildMeta, sortNugetVersions } from './common';\nimport type {\n CatalogEntry,\n CatalogPage,\n PackageRegistration,\n ServicesIndexRaw,\n} from './types';\n\nexport class NugetV3Api {\n static readonly cacheNamespace = 'datasource-nuget-v3';\n\n async getResourceUrl(\n http: Http,\n url: string,\n resourceType = 'RegistrationsBaseUrl',\n ): Promise<string | null> {\n // https://docs.microsoft.com/en-us/nuget/api/service-index\n const resultCacheKey = `${url}:${resourceType}`;\n const cachedResult = await packageCache.get<string>(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n );\n\n // istanbul ignore if\n if (cachedResult) {\n return cachedResult;\n }\n let servicesIndexRaw: ServicesIndexRaw | undefined;\n try {\n const responseCacheKey = url;\n servicesIndexRaw = await packageCache.get<ServicesIndexRaw>(\n NugetV3Api.cacheNamespace,\n responseCacheKey,\n );\n // istanbul ignore else: currently not testable\n if (!servicesIndexRaw) {\n servicesIndexRaw = (await http.getJsonUnchecked<ServicesIndexRaw>(url))\n .body;\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n responseCacheKey,\n servicesIndexRaw,\n 3 * 24 * 60,\n );\n }\n\n const services = servicesIndexRaw.resources\n .map(({ '@id': serviceId, '@type': t }) => ({\n serviceId,\n type: t?.split('/')?.shift(),\n version: t?.split('/')?.pop(),\n }))\n .filter(\n ({ type, version }) => type === resourceType && semver.valid(version),\n )\n .sort((x, y) =>\n x.version && y.version\n ? semver.compare(x.version, y.version)\n : /* istanbul ignore next: hard to test */ 0,\n );\n\n if (services.length === 0) {\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n null,\n 60,\n );\n logger.debug(\n { url, servicesIndexRaw },\n `no ${resourceType} services found`,\n );\n return null;\n }\n\n const { serviceId, version } = services.pop()!;\n\n // istanbul ignore if\n if (\n resourceType === 'RegistrationsBaseUrl' &&\n version &&\n !version.startsWith('3.0.0-') &&\n !semver.satisfies(version, '^3.0.0')\n ) {\n logger.warn(\n { url, version },\n `Nuget: Unknown version returned. Only v3 is supported`,\n );\n }\n\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n serviceId,\n 60,\n );\n return serviceId;\n } catch (err) {\n // istanbul ignore if: not easy testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, url, servicesIndexRaw },\n `nuget registry failure: can't get ${resourceType}`,\n );\n return null;\n }\n }\n\n async getCatalogEntry(\n http: Http,\n catalogPage: CatalogPage,\n ): Promise<CatalogEntry[]> {\n let items = catalogPage.items;\n if (!items) {\n const url = catalogPage['@id'];\n const catalogPageFull = await http.getJsonUnchecked<CatalogPage>(url);\n items = catalogPageFull.body.items;\n }\n return items.map(({ catalogEntry }) => catalogEntry);\n }\n\n async getReleases(\n http: Http,\n registryUrl: string,\n feedUrl: string,\n pkgName: string,\n ): Promise<ReleaseResult | null> {\n const baseUrl = feedUrl.replace(regEx(/\\/*$/), '');\n const url = `${baseUrl}/${pkgName.toLowerCase()}/index.json`;\n const packageRegistration =\n await http.getJsonUnchecked<PackageRegistration>(url);\n const catalogPages = packageRegistration.body.items || [];\n const catalogPagesQueue = catalogPages.map(\n (page) => (): Promise<CatalogEntry[]> => this.getCatalogEntry(http, page),\n );\n const catalogEntries = (await p.all(catalogPagesQueue))\n .flat()\n .sort((a, b) => sortNugetVersions(a.version, b.version));\n\n let homepage: string | null = null;\n let latestStable: string | null = null;\n let nupkgUrl: string | null = null;\n const releases = catalogEntries.map(\n ({ version, published, projectUrl, listed, packageContent }) => {\n const release: Release = { version: removeBuildMeta(version) };\n const releaseTimestamp = asTimestamp(published);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n if (versioning.isValid(version) && versioning.isStable(version)) {\n latestStable = removeBuildMeta(version);\n homepage = projectUrl ? massageUrl(projectUrl) : homepage;\n nupkgUrl = massageUrl(packageContent);\n }\n if (listed === false) {\n release.isDeprecated = true;\n }\n return release;\n },\n );\n\n if (!releases.length) {\n return null;\n }\n\n // istanbul ignore next: only happens when no stable version exists\n if (latestStable === null && catalogPages.length) {\n const last = catalogEntries.pop()!;\n latestStable = removeBuildMeta(last.version);\n homepage ??= last.projectUrl ?? null;\n nupkgUrl ??= massageUrl(last.packageContent);\n }\n\n const dep: ReleaseResult = {\n releases,\n };\n\n try {\n const packageBaseAddress = await this.getResourceUrl(\n http,\n registryUrl,\n 'PackageBaseAddress',\n );\n if (is.nonEmptyString(packageBaseAddress)) {\n const nuspecUrl = `${ensureTrailingSlash(\n packageBaseAddress,\n )}${pkgName.toLowerCase()}/${\n // TODO: types (#22198)\n latestStable\n }/${pkgName.toLowerCase()}.nuspec`;\n const metaresult = await http.getText(nuspecUrl);\n const nuspec = new XmlDocument(metaresult.body);\n const sourceUrl = nuspec.valueWithPath('metadata.repository@url');\n if (sourceUrl) {\n dep.sourceUrl = massageUrl(sourceUrl);\n }\n } else if (nupkgUrl) {\n const sourceUrl = await this.getSourceUrlFromNupkg(\n http,\n registryUrl,\n pkgName,\n latestStable,\n nupkgUrl,\n );\n if (sourceUrl) {\n dep.sourceUrl = massageUrl(sourceUrl);\n logger.debug(`Determined sourceUrl ${sourceUrl} from ${nupkgUrl}`);\n }\n }\n } catch (err) {\n // istanbul ignore if: not easy testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n // ignore / silence 404. Seen on proget, if remote connector is used and package is not yet cached\n if (err instanceof HttpError && err.response?.statusCode === 404) {\n logger.debug(\n { registryUrl, pkgName, pkgVersion: latestStable },\n `package manifest (.nuspec) not found`,\n );\n } else {\n logger.debug(\n { err, registryUrl, pkgName, pkgVersion: latestStable },\n `Cannot obtain sourceUrl`,\n );\n }\n }\n\n // istanbul ignore else: not easy testable\n if (homepage) {\n // only assign if not assigned\n dep.sourceUrl ??= homepage;\n dep.homepage ??= homepage;\n }\n\n return dep;\n }\n\n @cache({\n namespace: NugetV3Api.cacheNamespace,\n key: (\n _http: Http,\n registryUrl: string,\n packageName: string,\n _packageVersion: string | null,\n _nupkgUrl: string,\n ) => `source-url:${registryUrl}:${packageName}`,\n ttlMinutes: 10080, // 1 week\n })\n async getSourceUrlFromNupkg(\n http: Http,\n _registryUrl: string,\n packageName: string,\n packageVersion: string | null,\n nupkgUrl: string,\n ): Promise<string | null> {\n // istanbul ignore if: experimental feature\n if (!process.env.RENOVATE_X_NUGET_DOWNLOAD_NUPKGS) {\n logger.once.debug('RENOVATE_X_NUGET_DOWNLOAD_NUPKGS is not set');\n return null;\n }\n const cacheDir = await ensureCacheDir('nuget');\n const nupkgFile = upath.join(\n cacheDir,\n `${packageName}.${packageVersion}.nupkg`,\n );\n const nupkgContentsDir = upath.join(\n cacheDir,\n `${packageName}.${packageVersion}`,\n );\n const readStream = http.stream(nupkgUrl);\n try {\n const writeStream = fs.createCacheWriteStream(nupkgFile);\n await fs.pipeline(readStream, writeStream);\n await extract(nupkgFile, { dir: nupkgContentsDir });\n const nuspecFile = upath.join(nupkgContentsDir, `${packageName}.nuspec`);\n const nuspec = new XmlDocument(\n await fs.readCacheFile(nuspecFile, 'utf8'),\n );\n return nuspec.valueWithPath('metadata.repository@url') ?? null;\n } finally {\n await fs.rmCache(nupkgFile);\n await fs.rmCache(nupkgContentsDir);\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"v3.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/nuget/v3.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport extract from 'extract-zip';\nimport semver from 'semver';\nimport upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport * as packageCache from '../../../util/cache/package';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { ensureCacheDir } from '../../../util/fs';\nimport type { Http } from '../../../util/http';\nimport { HttpError } from '../../../util/http';\nimport * as p from '../../../util/promises';\nimport { regEx } from '../../../util/regex';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { api as versioning } from '../../versioning/nuget';\nimport type { Release, ReleaseResult } from '../types';\nimport { massageUrl, removeBuildMeta, sortNugetVersions } from './common';\nimport type {\n CatalogEntry,\n CatalogPage,\n PackageRegistration,\n ServicesIndexRaw,\n} from './types';\n\nexport class NugetV3Api {\n static readonly cacheNamespace = 'datasource-nuget-v3';\n\n async getResourceUrl(\n http: Http,\n url: string,\n resourceType = 'RegistrationsBaseUrl',\n ): Promise<string | null> {\n // https://docs.microsoft.com/en-us/nuget/api/service-index\n const resultCacheKey = `${url}:${resourceType}`;\n const cachedResult = await packageCache.get<string>(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n );\n\n /* v8 ignore next 3 -- TODO: add test */\n if (cachedResult) {\n return cachedResult;\n }\n let servicesIndexRaw: ServicesIndexRaw | undefined;\n try {\n const responseCacheKey = url;\n servicesIndexRaw = await packageCache.get<ServicesIndexRaw>(\n NugetV3Api.cacheNamespace,\n responseCacheKey,\n );\n if (!servicesIndexRaw) {\n servicesIndexRaw = (await http.getJsonUnchecked<ServicesIndexRaw>(url))\n .body;\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n responseCacheKey,\n servicesIndexRaw,\n 3 * 24 * 60,\n );\n }\n\n const services = servicesIndexRaw.resources\n .map(({ '@id': serviceId, '@type': t }) => ({\n serviceId,\n type: t?.split('/')?.shift(),\n version: t?.split('/')?.pop(),\n }))\n .filter(\n ({ type, version }) => type === resourceType && semver.valid(version),\n )\n .sort((x, y) =>\n x.version && y.version\n ? semver.compare(x.version, y.version)\n : /* istanbul ignore next: hard to test */ 0,\n );\n\n if (services.length === 0) {\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n null,\n 60,\n );\n logger.debug(\n { url, servicesIndexRaw },\n `no ${resourceType} services found`,\n );\n return null;\n }\n\n const { serviceId, version } = services.pop()!;\n\n // istanbul ignore if\n if (\n resourceType === 'RegistrationsBaseUrl' &&\n version &&\n !version.startsWith('3.0.0-') &&\n !semver.satisfies(version, '^3.0.0')\n ) {\n logger.warn(\n { url, version },\n `Nuget: Unknown version returned. Only v3 is supported`,\n );\n }\n\n await packageCache.set(\n NugetV3Api.cacheNamespace,\n resultCacheKey,\n serviceId,\n 60,\n );\n return serviceId;\n } catch (err) {\n // istanbul ignore if: not easy testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { err, url, servicesIndexRaw },\n `nuget registry failure: can't get ${resourceType}`,\n );\n return null;\n }\n }\n\n async getCatalogEntry(\n http: Http,\n catalogPage: CatalogPage,\n ): Promise<CatalogEntry[]> {\n let items = catalogPage.items;\n if (!items) {\n const url = catalogPage['@id'];\n const catalogPageFull = await http.getJsonUnchecked<CatalogPage>(url);\n items = catalogPageFull.body.items;\n }\n return items.map(({ catalogEntry }) => catalogEntry);\n }\n\n async getReleases(\n http: Http,\n registryUrl: string,\n feedUrl: string,\n pkgName: string,\n ): Promise<ReleaseResult | null> {\n const baseUrl = feedUrl.replace(regEx(/\\/*$/), '');\n const url = `${baseUrl}/${pkgName.toLowerCase()}/index.json`;\n const packageRegistration =\n await http.getJsonUnchecked<PackageRegistration>(url);\n const catalogPages = packageRegistration.body.items || [];\n const catalogPagesQueue = catalogPages.map(\n (page) => (): Promise<CatalogEntry[]> => this.getCatalogEntry(http, page),\n );\n const catalogEntries = (await p.all(catalogPagesQueue))\n .flat()\n .sort((a, b) => sortNugetVersions(a.version, b.version));\n\n let homepage: string | null = null;\n let latestStable: string | null = null;\n let nupkgUrl: string | null = null;\n const releases = catalogEntries.map(\n ({ version, published, projectUrl, listed, packageContent }) => {\n const release: Release = { version: removeBuildMeta(version) };\n const releaseTimestamp = asTimestamp(published);\n if (releaseTimestamp) {\n release.releaseTimestamp = releaseTimestamp;\n }\n if (versioning.isValid(version) && versioning.isStable(version)) {\n latestStable = removeBuildMeta(version);\n homepage = projectUrl ? massageUrl(projectUrl) : homepage;\n nupkgUrl = massageUrl(packageContent);\n }\n if (listed === false) {\n release.isDeprecated = true;\n }\n return release;\n },\n );\n\n if (!releases.length) {\n return null;\n }\n\n // istanbul ignore next: only happens when no stable version exists\n if (latestStable === null && catalogPages.length) {\n const last = catalogEntries.pop()!;\n latestStable = removeBuildMeta(last.version);\n homepage ??= last.projectUrl ?? null;\n nupkgUrl ??= massageUrl(last.packageContent);\n }\n\n const dep: ReleaseResult = {\n releases,\n };\n\n try {\n const packageBaseAddress = await this.getResourceUrl(\n http,\n registryUrl,\n 'PackageBaseAddress',\n );\n if (is.nonEmptyString(packageBaseAddress)) {\n const nuspecUrl = `${ensureTrailingSlash(\n packageBaseAddress,\n )}${pkgName.toLowerCase()}/${\n // TODO: types (#22198)\n latestStable\n }/${pkgName.toLowerCase()}.nuspec`;\n const metaresult = await http.getText(nuspecUrl);\n const nuspec = new XmlDocument(metaresult.body);\n const sourceUrl = nuspec.valueWithPath('metadata.repository@url');\n if (sourceUrl) {\n dep.sourceUrl = massageUrl(sourceUrl);\n }\n } else if (nupkgUrl) {\n const sourceUrl = await this.getSourceUrlFromNupkg(\n http,\n registryUrl,\n pkgName,\n latestStable,\n nupkgUrl,\n );\n if (sourceUrl) {\n dep.sourceUrl = massageUrl(sourceUrl);\n logger.debug(`Determined sourceUrl ${sourceUrl} from ${nupkgUrl}`);\n }\n }\n } catch (err) {\n // istanbul ignore if: not easy testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n // ignore / silence 404. Seen on proget, if remote connector is used and package is not yet cached\n if (err instanceof HttpError && err.response?.statusCode === 404) {\n logger.debug(\n { registryUrl, pkgName, pkgVersion: latestStable },\n `package manifest (.nuspec) not found`,\n );\n } else {\n logger.debug(\n { err, registryUrl, pkgName, pkgVersion: latestStable },\n `Cannot obtain sourceUrl`,\n );\n }\n }\n\n if (homepage) {\n // only assign if not assigned\n dep.sourceUrl ??= homepage;\n dep.homepage ??= homepage;\n }\n\n return dep;\n }\n\n @cache({\n namespace: NugetV3Api.cacheNamespace,\n key: (\n _http: Http,\n registryUrl: string,\n packageName: string,\n _packageVersion: string | null,\n _nupkgUrl: string,\n ) => `source-url:${registryUrl}:${packageName}`,\n ttlMinutes: 10080, // 1 week\n })\n async getSourceUrlFromNupkg(\n http: Http,\n _registryUrl: string,\n packageName: string,\n packageVersion: string | null,\n nupkgUrl: string,\n ): Promise<string | null> {\n // istanbul ignore if: experimental feature\n if (!process.env.RENOVATE_X_NUGET_DOWNLOAD_NUPKGS) {\n logger.once.debug('RENOVATE_X_NUGET_DOWNLOAD_NUPKGS is not set');\n return null;\n }\n const cacheDir = await ensureCacheDir('nuget');\n const nupkgFile = upath.join(\n cacheDir,\n `${packageName}.${packageVersion}.nupkg`,\n );\n const nupkgContentsDir = upath.join(\n cacheDir,\n `${packageName}.${packageVersion}`,\n );\n const readStream = http.stream(nupkgUrl);\n try {\n const writeStream = fs.createCacheWriteStream(nupkgFile);\n await fs.pipeline(readStream, writeStream);\n await extract(nupkgFile, { dir: nupkgContentsDir });\n const nuspecFile = upath.join(nupkgContentsDir, `${packageName}.nuspec`);\n const nuspec = new XmlDocument(\n await fs.readCacheFile(nuspecFile, 'utf8'),\n );\n return nuspec.valueWithPath('metadata.repository@url') ?? null;\n } finally {\n await fs.rmCache(nupkgFile);\n await fs.rmCache(nupkgContentsDir);\n }\n }\n}\n"]}
|
@@ -32,7 +32,7 @@ class OrbDatasource extends datasource_1.Datasource {
|
|
32
32
|
releaseTimestampSupport = true;
|
33
33
|
releaseTimestampNote = 'The release timestamp is determined from the `createdAt` field in the results.';
|
34
34
|
async getReleases({ packageName, registryUrl, }) {
|
35
|
-
|
35
|
+
/* v8 ignore next 3 -- should never happen */
|
36
36
|
if (!registryUrl) {
|
37
37
|
return null;
|
38
38
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/orb/index.ts"],"names":[],"mappings":";;;;AAAA,4CAAyC;AACzC,qEAA8D;AAC9D,uDAAsD;AACtD,2CAAiD;AACjD,8CAA2C;AAI3C,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYb,CAAC;AAEF,MAAa,aAAc,SAAQ,uBAAU;IAC3C,MAAM,CAAU,EAAE,GAAG,KAAK,CAAC;IAE3B;QACE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEiB,qBAAqB,GAAG,IAAI,CAAC;IAE7B,mBAAmB,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAChD,gBAAgB,GAAG,MAAM,CAAC;IAE1B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,gFAAgF,CAAC;IAM7E,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/orb/index.ts"],"names":[],"mappings":";;;;AAAA,4CAAyC;AACzC,qEAA8D;AAC9D,uDAAsD;AACtD,2CAAiD;AACjD,8CAA2C;AAI3C,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYb,CAAC;AAEF,MAAa,aAAc,SAAQ,uBAAU;IAC3C,MAAM,CAAU,EAAE,GAAG,KAAK,CAAC;IAE3B;QACE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEiB,qBAAqB,GAAG,IAAI,CAAC;IAE7B,mBAAmB,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAChD,gBAAgB,GAAG,MAAM,CAAC;IAE1B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,gFAAgF,CAAC;IAM7E,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG;YACX,KAAK;YACL,SAAS,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE;SACtD,CAAC;QACF,MAAM,GAAG,GAAG,CACV,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAc,GAAG,EAAE;YACzC,IAAI;SACL,CAAC,CACH,CAAC,IAAI,CAAC;QACP,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,yBAAyB,WAAW,EAAE,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM;YAClC,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,2CAA2C,WAAW,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO;YACP,gBAAgB,EAAE,IAAA,uBAAW,EAAC,SAAS,CAAC;SACzC,CAAC,CAAC,CAAC;QAEJ,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC/D,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;;AAxDH,sCAyDC;AArCO;IAJL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,aAAa,CAAC,EAAE,EAAE;QAC3C,GAAG,EAAE,CAAC,EAAE,WAAW,EAAqB,EAAE,EAAE,CAAC,WAAW;KACzD,CAAC;gDAqCD","sourcesContent":["import { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { OrbResponse } from './types';\n\nconst MAX_VERSIONS = 100;\n\nconst query = `\nquery($packageName: String!, $maxVersions: Int!) {\n orb(name: $packageName) {\n name,\n homeUrl,\n isPrivate,\n versions(count: $maxVersions) {\n version,\n createdAt\n }\n }\n}\n`;\n\nexport class OrbDatasource extends Datasource {\n static readonly id = 'orb';\n\n constructor() {\n super(OrbDatasource.id);\n }\n\n override readonly customRegistrySupport = true;\n\n override readonly defaultRegistryUrls = ['https://circleci.com/'];\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `createdAt` field in the results.';\n\n @cache({\n namespace: `datasource-${OrbDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => packageName,\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n const url = joinUrlParts(registryUrl, 'graphql-unstable');\n const body = {\n query,\n variables: { packageName, maxVersions: MAX_VERSIONS },\n };\n const res = (\n await this.http.postJson<OrbResponse>(url, {\n body,\n })\n ).body;\n if (!res?.data?.orb) {\n logger.debug({ res }, `Failed to look up orb ${packageName}`);\n return null;\n }\n\n const { orb } = res.data;\n // Simplify response before caching and returning\n const homepage = orb.homeUrl?.length\n ? orb.homeUrl\n : `https://circleci.com/developer/orbs/orb/${packageName}`;\n const releases = orb.versions.map(({ version, createdAt }) => ({\n version,\n releaseTimestamp: asTimestamp(createdAt),\n }));\n\n const dep = { homepage, isPrivate: !!orb.isPrivate, releases };\n logger.trace({ dep }, 'dep');\n return dep;\n }\n}\n"]}
|
@@ -103,7 +103,7 @@ class PackagistDatasource extends datasource_1.Datasource {
|
|
103
103
|
}
|
104
104
|
async getReleases({ packageName, registryUrl, }) {
|
105
105
|
logger_1.logger.trace(`getReleases(${packageName})`);
|
106
|
-
|
106
|
+
/* v8 ignore next 3 -- should never happen */
|
107
107
|
if (!registryUrl) {
|
108
108
|
return null;
|
109
109
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/packagist/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as hostRules from '../../../util/host-rules';\nimport type { HttpOptions } from '../../../util/http/types';\nimport * as p from '../../../util/promises';\nimport { replaceUrlPath, resolveBaseUrl } from '../../../util/url';\nimport * as composerVersioning from '../../versioning/composer';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RegistryFile } from './schema';\nimport {\n PackagesResponse,\n PackagistFile,\n RegistryMeta,\n extractDepReleases,\n parsePackagesResponses,\n} from './schema';\n\nexport class PackagistDatasource extends Datasource {\n static readonly id = 'packagist';\n\n constructor() {\n super(PackagistDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://packagist.org'];\n\n override readonly defaultVersioning = composerVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `time` field in the results.';\n // Note: this can be changed to 'release', as the source is present in each release but we remove it while processing\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from `source` field in the results.';\n\n // We calculate auth at this datasource layer so that we can know whether it's safe to cache or not\n private static getHostOpts(url: string): HttpOptions {\n const { username, password } = hostRules.find({\n hostType: PackagistDatasource.id,\n url,\n });\n return username && password ? { username, password } : {};\n }\n\n private async getJson<Schema extends z.ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<z.infer<Schema>> {\n const opts = PackagistDatasource.getHostOpts(url);\n const { body } = await this.http.getJson(url, opts, schema);\n return body;\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (regUrl: string) => `getRegistryMeta:${regUrl}`,\n })\n async getRegistryMeta(regUrl: string): Promise<RegistryMeta> {\n const url = resolveBaseUrl(regUrl, 'packages.json');\n const result = await this.getJson(url, RegistryMeta);\n return result;\n }\n\n private static isPrivatePackage(regUrl: string): boolean {\n const opts = PackagistDatasource.getHostOpts(regUrl);\n return !!opts.password;\n }\n\n private static getPackagistFileUrl(\n regUrl: string,\n regFile: RegistryFile,\n ): string {\n const { key, hash } = regFile;\n const fileName = hash\n ? key.replace('%hash%', hash)\n : /* istanbul ignore next: hard to test */ key;\n const url = resolveBaseUrl(regUrl, fileName);\n return url;\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (regUrl: string, regFile: RegistryFile) =>\n `getPackagistFile:${PackagistDatasource.getPackagistFileUrl(regUrl, regFile)}`,\n cacheable: (regUrl: string) =>\n !PackagistDatasource.isPrivatePackage(regUrl),\n ttlMinutes: 1440,\n })\n async getPackagistFile(\n regUrl: string,\n regFile: RegistryFile,\n ): Promise<PackagistFile> {\n const url = PackagistDatasource.getPackagistFileUrl(regUrl, regFile);\n const packagistFile = await this.getJson(url, PackagistFile);\n return packagistFile;\n }\n\n async fetchProviderPackages(\n regUrl: string,\n meta: RegistryMeta,\n ): Promise<void> {\n await p.map(meta.files, async (file) => {\n const res = await this.getPackagistFile(regUrl, file);\n Object.assign(meta.providerPackages, res.providers);\n });\n }\n\n async fetchIncludesPackages(\n regUrl: string,\n meta: RegistryMeta,\n ): Promise<void> {\n await p.map(meta.includesFiles, async (file) => {\n const res = await this.getPackagistFile(regUrl, file);\n for (const [key, val] of Object.entries(res.packages)) {\n meta.includesPackages[key] = extractDepReleases(val);\n }\n });\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (registryUrl: string, metadataUrl: string, packageName: string) =>\n `packagistV2Lookup:${registryUrl}:${metadataUrl}:${packageName}`,\n ttlMinutes: 10,\n })\n async packagistV2Lookup(\n registryUrl: string,\n metadataUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const pkgUrl = replaceUrlPath(\n registryUrl,\n metadataUrl.replace('%package%', packageName),\n );\n const pkgPromise = this.getJson(pkgUrl, z.unknown());\n\n const devUrl = replaceUrlPath(\n registryUrl,\n metadataUrl.replace('%package%', `${packageName}~dev`),\n );\n const devPromise = this.getJson(devUrl, z.unknown()).then(\n (x) => x,\n () => null,\n );\n\n const responses: NonNullable<unknown>[] = await Promise.all([\n pkgPromise,\n devPromise,\n ]).then((responses) => responses.filter(is.object));\n return parsePackagesResponses(packageName, responses);\n }\n\n public getPkgUrl(\n packageName: string,\n registryUrl: string,\n registryMeta: RegistryMeta,\n ): string | null {\n if (\n registryMeta.providersUrl &&\n packageName in registryMeta.providerPackages\n ) {\n let url = registryMeta.providersUrl.replace('%package%', packageName);\n const hash = registryMeta.providerPackages[packageName];\n if (hash) {\n url = url.replace('%hash%', hash);\n }\n return replaceUrlPath(registryUrl, url);\n }\n\n if (registryMeta.providersLazyUrl) {\n return replaceUrlPath(\n registryUrl,\n registryMeta.providersLazyUrl.replace('%package%', packageName),\n );\n }\n\n return null;\n }\n\n public override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n logger.trace(`getReleases(${packageName})`);\n\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n try {\n const meta = await this.getRegistryMeta(registryUrl);\n\n if (\n meta.availablePackages &&\n !meta.availablePackages.includes(packageName)\n ) {\n return null;\n }\n\n if (meta.metadataUrl) {\n const packagistResult = await this.packagistV2Lookup(\n registryUrl,\n meta.metadataUrl,\n packageName,\n );\n return packagistResult;\n }\n\n if (meta.packages[packageName]) {\n const result = extractDepReleases(meta.packages[packageName]);\n return result;\n }\n\n await this.fetchIncludesPackages(registryUrl, meta);\n if (meta.includesPackages[packageName]) {\n return meta.includesPackages[packageName];\n }\n\n await this.fetchProviderPackages(registryUrl, meta);\n const pkgUrl = this.getPkgUrl(packageName, registryUrl, meta);\n if (!pkgUrl) {\n return null;\n }\n\n const pkgRes = await this.getJson(pkgUrl, PackagesResponse);\n const dep = extractDepReleases(pkgRes.packages[packageName]);\n logger.trace({ dep }, 'dep');\n return dep;\n } catch (err) /* istanbul ignore next */ {\n if (err.host === 'packagist.org') {\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n }\n throw err;\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/packagist/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAClC,6BAAwB;AACxB,4CAAyC;AACzC,mFAA8E;AAC9E,qEAA8D;AAC9D,4EAAsD;AAEtD,kEAA4C;AAC5C,2CAAmE;AACnE,sFAAgE;AAChE,8CAA2C;AAG3C,qCAMkB;AAElB,MAAa,mBAAoB,SAAQ,uBAAU;IACjD,MAAM,CAAU,EAAE,GAAG,WAAW,CAAC;IAEjC;QACE,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAEiB,mBAAmB,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAEhD,iBAAiB,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAE1C,gBAAgB,GAAG,MAAM,CAAC;IAE1B,uBAAuB,GAAG,IAAI,CAAC;IAC/B,oBAAoB,GACpC,2EAA2E,CAAC;IAC9E,qHAAqH;IACnG,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,kEAAkE,CAAC;IAErE,mGAAmG;IAC3F,MAAM,CAAC,WAAW,CAAC,GAAW;QACpC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5C,QAAQ,EAAE,mBAAmB,CAAC,EAAE;YAChC,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,GAAW,EACX,MAAc;QAEd,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAMK,AAAN,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,GAAG,GAAG,IAAA,oBAAc,EAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAY,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,MAAc;QAC5C,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAChC,MAAc,EACd,OAAqB;QAErB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI;YACnB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC7B,CAAC,CAAC,wCAAwC,CAAC,GAAG,CAAC;QACjD,MAAM,GAAG,GAAG,IAAA,oBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC;IAUK,AAAN,KAAK,CAAC,gBAAgB,CACpB,MAAc,EACd,OAAqB;QAErB,MAAM,GAAG,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,sBAAa,CAAC,CAAC;QAC7D,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,IAAkB;QAElB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,IAAkB;QAElB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAA,2BAAkB,EAAC,GAAG,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAQK,AAAN,KAAK,CAAC,iBAAiB,CACrB,WAAmB,EACnB,WAAmB,EACnB,WAAmB;QAEnB,MAAM,MAAM,GAAG,IAAA,oBAAc,EAC3B,WAAW,EACX,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAC9C,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,IAAA,oBAAc,EAC3B,WAAW,EACX,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,WAAW,MAAM,CAAC,CACvD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EACR,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;QAEF,MAAM,SAAS,GAA2B,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1D,UAAU;YACV,UAAU;SACX,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,IAAA,+BAAsB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAEM,SAAS,CACd,WAAmB,EACnB,WAAmB,EACnB,YAA0B;QAE1B,IACE,YAAY,CAAC,YAAY;YACzB,WAAW,IAAI,YAAY,CAAC,gBAAgB,EAC5C,CAAC;YACD,IAAI,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAA,oBAAc,EAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAClC,OAAO,IAAA,oBAAc,EACnB,WAAW,EACX,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,EAChC,WAAW,EACX,WAAW,GACO;QAClB,eAAM,CAAC,KAAK,CAAC,eAAe,WAAW,GAAG,CAAC,CAAC;QAE5C,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAErD,IACE,IAAI,CAAC,iBAAiB;gBACtB,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC7C,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAClD,WAAW,EACX,IAAI,CAAC,WAAW,EAChB,WAAW,CACZ,CAAC;gBACF,OAAO,eAAe,CAAC;YACzB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC9D,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAgB,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAA,2BAAkB,EAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7D,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC1D,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;gBACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpE,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;;AAlOH,kDAmOC;AAxLO;IAJL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,mBAAmB,CAAC,EAAE,EAAE;QACjD,GAAG,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;KACrD,CAAC;0DAKD;AA2BK;IARL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,mBAAmB,CAAC,EAAE,EAAE;QACjD,GAAG,EAAE,CAAC,MAAc,EAAE,OAAqB,EAAE,EAAE,CAC7C,oBAAoB,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QAChF,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAC5B,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/C,UAAU,EAAE,IAAI;KACjB,CAAC;2DAQD;AA8BK;IANL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,mBAAmB,CAAC,EAAE,EAAE;QACjD,GAAG,EAAE,CAAC,WAAmB,EAAE,WAAmB,EAAE,WAAmB,EAAE,EAAE,CACrE,qBAAqB,WAAW,IAAI,WAAW,IAAI,WAAW,EAAE;QAClE,UAAU,EAAE,EAAE;KACf,CAAC;4DA0BD","sourcesContent":["import is from '@sindresorhus/is';\nimport { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as hostRules from '../../../util/host-rules';\nimport type { HttpOptions } from '../../../util/http/types';\nimport * as p from '../../../util/promises';\nimport { replaceUrlPath, resolveBaseUrl } from '../../../util/url';\nimport * as composerVersioning from '../../versioning/composer';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RegistryFile } from './schema';\nimport {\n PackagesResponse,\n PackagistFile,\n RegistryMeta,\n extractDepReleases,\n parsePackagesResponses,\n} from './schema';\n\nexport class PackagistDatasource extends Datasource {\n static readonly id = 'packagist';\n\n constructor() {\n super(PackagistDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://packagist.org'];\n\n override readonly defaultVersioning = composerVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `time` field in the results.';\n // Note: this can be changed to 'release', as the source is present in each release but we remove it while processing\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from `source` field in the results.';\n\n // We calculate auth at this datasource layer so that we can know whether it's safe to cache or not\n private static getHostOpts(url: string): HttpOptions {\n const { username, password } = hostRules.find({\n hostType: PackagistDatasource.id,\n url,\n });\n return username && password ? { username, password } : {};\n }\n\n private async getJson<Schema extends z.ZodType<any, any, any>>(\n url: string,\n schema: Schema,\n ): Promise<z.infer<Schema>> {\n const opts = PackagistDatasource.getHostOpts(url);\n const { body } = await this.http.getJson(url, opts, schema);\n return body;\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (regUrl: string) => `getRegistryMeta:${regUrl}`,\n })\n async getRegistryMeta(regUrl: string): Promise<RegistryMeta> {\n const url = resolveBaseUrl(regUrl, 'packages.json');\n const result = await this.getJson(url, RegistryMeta);\n return result;\n }\n\n private static isPrivatePackage(regUrl: string): boolean {\n const opts = PackagistDatasource.getHostOpts(regUrl);\n return !!opts.password;\n }\n\n private static getPackagistFileUrl(\n regUrl: string,\n regFile: RegistryFile,\n ): string {\n const { key, hash } = regFile;\n const fileName = hash\n ? key.replace('%hash%', hash)\n : /* istanbul ignore next: hard to test */ key;\n const url = resolveBaseUrl(regUrl, fileName);\n return url;\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (regUrl: string, regFile: RegistryFile) =>\n `getPackagistFile:${PackagistDatasource.getPackagistFileUrl(regUrl, regFile)}`,\n cacheable: (regUrl: string) =>\n !PackagistDatasource.isPrivatePackage(regUrl),\n ttlMinutes: 1440,\n })\n async getPackagistFile(\n regUrl: string,\n regFile: RegistryFile,\n ): Promise<PackagistFile> {\n const url = PackagistDatasource.getPackagistFileUrl(regUrl, regFile);\n const packagistFile = await this.getJson(url, PackagistFile);\n return packagistFile;\n }\n\n async fetchProviderPackages(\n regUrl: string,\n meta: RegistryMeta,\n ): Promise<void> {\n await p.map(meta.files, async (file) => {\n const res = await this.getPackagistFile(regUrl, file);\n Object.assign(meta.providerPackages, res.providers);\n });\n }\n\n async fetchIncludesPackages(\n regUrl: string,\n meta: RegistryMeta,\n ): Promise<void> {\n await p.map(meta.includesFiles, async (file) => {\n const res = await this.getPackagistFile(regUrl, file);\n for (const [key, val] of Object.entries(res.packages)) {\n meta.includesPackages[key] = extractDepReleases(val);\n }\n });\n }\n\n @cache({\n namespace: `datasource-${PackagistDatasource.id}`,\n key: (registryUrl: string, metadataUrl: string, packageName: string) =>\n `packagistV2Lookup:${registryUrl}:${metadataUrl}:${packageName}`,\n ttlMinutes: 10,\n })\n async packagistV2Lookup(\n registryUrl: string,\n metadataUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const pkgUrl = replaceUrlPath(\n registryUrl,\n metadataUrl.replace('%package%', packageName),\n );\n const pkgPromise = this.getJson(pkgUrl, z.unknown());\n\n const devUrl = replaceUrlPath(\n registryUrl,\n metadataUrl.replace('%package%', `${packageName}~dev`),\n );\n const devPromise = this.getJson(devUrl, z.unknown()).then(\n (x) => x,\n () => null,\n );\n\n const responses: NonNullable<unknown>[] = await Promise.all([\n pkgPromise,\n devPromise,\n ]).then((responses) => responses.filter(is.object));\n return parsePackagesResponses(packageName, responses);\n }\n\n public getPkgUrl(\n packageName: string,\n registryUrl: string,\n registryMeta: RegistryMeta,\n ): string | null {\n if (\n registryMeta.providersUrl &&\n packageName in registryMeta.providerPackages\n ) {\n let url = registryMeta.providersUrl.replace('%package%', packageName);\n const hash = registryMeta.providerPackages[packageName];\n if (hash) {\n url = url.replace('%hash%', hash);\n }\n return replaceUrlPath(registryUrl, url);\n }\n\n if (registryMeta.providersLazyUrl) {\n return replaceUrlPath(\n registryUrl,\n registryMeta.providersLazyUrl.replace('%package%', packageName),\n );\n }\n\n return null;\n }\n\n public override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n logger.trace(`getReleases(${packageName})`);\n\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n try {\n const meta = await this.getRegistryMeta(registryUrl);\n\n if (\n meta.availablePackages &&\n !meta.availablePackages.includes(packageName)\n ) {\n return null;\n }\n\n if (meta.metadataUrl) {\n const packagistResult = await this.packagistV2Lookup(\n registryUrl,\n meta.metadataUrl,\n packageName,\n );\n return packagistResult;\n }\n\n if (meta.packages[packageName]) {\n const result = extractDepReleases(meta.packages[packageName]);\n return result;\n }\n\n await this.fetchIncludesPackages(registryUrl, meta);\n if (meta.includesPackages[packageName]) {\n return meta.includesPackages[packageName];\n }\n\n await this.fetchProviderPackages(registryUrl, meta);\n const pkgUrl = this.getPkgUrl(packageName, registryUrl, meta);\n if (!pkgUrl) {\n return null;\n }\n\n const pkgRes = await this.getJson(pkgUrl, PackagesResponse);\n const dep = extractDepReleases(pkgRes.packages[packageName]);\n logger.trace({ dep }, 'dep');\n return dep;\n } catch (err) /* istanbul ignore next */ {\n if (err.host === 'packagist.org') {\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err);\n }\n }\n throw err;\n }\n }\n}\n"]}
|
@@ -135,7 +135,7 @@ class PodDatasource extends datasource_1.Datasource {
|
|
135
135
|
return null;
|
136
136
|
}
|
137
137
|
async getReleases({ packageName, registryUrl, }) {
|
138
|
-
|
138
|
+
/* v8 ignore next 3 -- should never happen */
|
139
139
|
if (!registryUrl) {
|
140
140
|
return null;
|
141
141
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/pod/index.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { GithubHttp } from '../../../util/http/github';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { Datasource } from '../datasource';\nimport { massageGithubUrl } from '../metadata';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\n\ntype URLFormatOptions =\n | 'withShardWithSpec'\n | 'withShardWithoutSpec'\n | 'withSpecsWithoutShard'\n | 'withoutSpecsWithoutShard';\n\nfunction shardParts(packageName: string): string[] {\n return crypto\n .createHash('md5')\n .update(packageName)\n .digest('hex')\n .slice(0, 3)\n .split('');\n}\n\nconst githubRegex = regEx(\n /(?<hostURL>^https:\\/\\/[a-zA-Z0-9-.]+)\\/(?<account>[^/]+)\\/(?<repo>[^/]+?)(?:\\.git|\\/.*)?$/,\n);\n\nfunction releasesGithubUrl(\n packageName: string,\n opts: {\n hostURL: string;\n account: string;\n repo: string;\n useShard: boolean;\n useSpecs: boolean;\n },\n): string {\n const { hostURL, account, repo, useShard, useSpecs } = opts;\n const prefix =\n hostURL && hostURL !== 'https://github.com'\n ? `${hostURL}/api/v3/repos`\n : 'https://api.github.com/repos';\n const shard = shardParts(packageName).join('/');\n // `Specs` in the pods repo URL is a new requirement for legacy support also allow pod repo URL without `Specs`\n const packageNamePath = useSpecs ? `Specs/${packageName}` : packageName;\n const shardPath = useSpecs\n ? `Specs/${shard}/${packageName}`\n : `${shard}/${packageName}`;\n const suffix = useShard ? shardPath : packageNamePath;\n return `${prefix}/${account}/${repo}/contents/${suffix}`;\n}\n\nfunction handleError(packageName: string, err: HttpError): void {\n const errorData = { packageName, err };\n\n const statusCode = err.response?.statusCode ?? 0;\n if (statusCode === 429 || (statusCode >= 500 && statusCode < 600)) {\n logger.warn({ packageName, err }, `CocoaPods registry failure`);\n throw new ExternalHostError(err);\n }\n\n if (statusCode === 401) {\n logger.debug(errorData, 'Authorization error');\n } else if (statusCode === 404) {\n logger.debug(errorData, 'Package lookup error');\n } else if (err.message === HOST_DISABLED) {\n logger.trace(errorData, 'Host disabled');\n } else {\n logger.warn(errorData, 'CocoaPods lookup failure: Unknown error');\n }\n}\n\nfunction isDefaultRepo(url: string): boolean {\n const match = githubRegex.exec(url);\n if (match?.groups) {\n const { account, repo } = match.groups;\n return (\n account.toLowerCase() === 'cocoapods' && repo.toLowerCase() === 'specs'\n ); // https://github.com/CocoaPods/Specs.git\n }\n return false;\n}\n\nfunction releasesCDNUrl(packageName: string, registryUrl: string): string {\n const shard = shardParts(packageName).join('_');\n return `${registryUrl}/all_pods_versions_${shard}.txt`;\n}\n\nexport class PodDatasource extends Datasource {\n static readonly id = 'pod';\n\n override readonly defaultRegistryUrls = ['https://cdn.cocoapods.org'];\n\n override readonly registryStrategy = 'hunt';\n\n githubHttp: GithubHttp;\n\n constructor() {\n super(PodDatasource.id);\n this.githubHttp = new GithubHttp(PodDatasource.id);\n }\n\n private async requestCDN(\n url: string,\n packageName: string,\n ): Promise<string | null> {\n try {\n const resp = await this.http.getText(url);\n if (resp?.body) {\n return resp.body;\n }\n } catch (err) {\n handleError(packageName, err);\n }\n\n return null;\n }\n\n private async requestGithub<T = unknown>(\n url: string,\n packageName: string,\n ): Promise<T | null> {\n try {\n const resp = await this.githubHttp.getJsonUnchecked<T>(url);\n if (resp?.body) {\n return resp.body;\n }\n } catch (err) {\n handleError(packageName, err);\n }\n\n return null;\n }\n\n private async getReleasesFromGithub(\n packageName: string,\n opts: { hostURL: string; account: string; repo: string },\n useShard = true,\n useSpecs = true,\n urlFormatOptions: URLFormatOptions = 'withShardWithSpec',\n ): Promise<ReleaseResult | null> {\n const url = releasesGithubUrl(packageName, { ...opts, useShard, useSpecs });\n const resp = await this.requestGithub<{ name: string }[]>(url, packageName);\n if (resp) {\n const releases = resp.map(({ name }) => ({ version: name }));\n return { releases };\n }\n\n // support different url formats\n switch (urlFormatOptions) {\n case 'withShardWithSpec':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n true,\n false,\n 'withShardWithoutSpec',\n );\n case 'withShardWithoutSpec':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n false,\n true,\n 'withSpecsWithoutShard',\n );\n case 'withSpecsWithoutShard':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n false,\n false,\n 'withoutSpecsWithoutShard',\n );\n case 'withoutSpecsWithoutShard':\n default:\n return null;\n }\n }\n\n private async getReleasesFromCDN(\n packageName: string,\n registryUrl: string,\n ): Promise<ReleaseResult | null> {\n const url = releasesCDNUrl(packageName, registryUrl);\n const resp = await this.requestCDN(url, packageName);\n if (resp) {\n const lines = resp.split(newlineRegex);\n for (const line of lines) {\n const [name, ...versions] = line.split('/');\n if (name === packageName.replace(regEx(/\\/.*$/), '')) {\n const releases = versions.map((version) => ({ version }));\n return { releases };\n }\n }\n }\n return null;\n }\n\n @cache({\n ttlMinutes: 30,\n namespace: `datasource-${PodDatasource.id}`,\n key: ({ packageName, registryUrl }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const podName = packageName.replace(regEx(/\\/.*$/), '');\n let baseUrl = registryUrl.replace(regEx(/\\/+$/), '');\n // In order to not abuse github API limits, query CDN instead\n if (isDefaultRepo(baseUrl)) {\n [baseUrl] = this.defaultRegistryUrls;\n }\n\n let result: ReleaseResult | null = null;\n const match = githubRegex.exec(baseUrl);\n if (match?.groups) {\n baseUrl = massageGithubUrl(baseUrl);\n const { hostURL, account, repo } = match.groups;\n const opts = { hostURL, account, repo };\n result = await this.getReleasesFromGithub(podName, opts);\n } else {\n result = await this.getReleasesFromCDN(podName, baseUrl);\n }\n\n return result;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/pod/index.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport type { HttpError } from '../../../util/http';\nimport { GithubHttp } from '../../../util/http/github';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { Datasource } from '../datasource';\nimport { massageGithubUrl } from '../metadata';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\n\ntype URLFormatOptions =\n | 'withShardWithSpec'\n | 'withShardWithoutSpec'\n | 'withSpecsWithoutShard'\n | 'withoutSpecsWithoutShard';\n\nfunction shardParts(packageName: string): string[] {\n return crypto\n .createHash('md5')\n .update(packageName)\n .digest('hex')\n .slice(0, 3)\n .split('');\n}\n\nconst githubRegex = regEx(\n /(?<hostURL>^https:\\/\\/[a-zA-Z0-9-.]+)\\/(?<account>[^/]+)\\/(?<repo>[^/]+?)(?:\\.git|\\/.*)?$/,\n);\n\nfunction releasesGithubUrl(\n packageName: string,\n opts: {\n hostURL: string;\n account: string;\n repo: string;\n useShard: boolean;\n useSpecs: boolean;\n },\n): string {\n const { hostURL, account, repo, useShard, useSpecs } = opts;\n const prefix =\n hostURL && hostURL !== 'https://github.com'\n ? `${hostURL}/api/v3/repos`\n : 'https://api.github.com/repos';\n const shard = shardParts(packageName).join('/');\n // `Specs` in the pods repo URL is a new requirement for legacy support also allow pod repo URL without `Specs`\n const packageNamePath = useSpecs ? `Specs/${packageName}` : packageName;\n const shardPath = useSpecs\n ? `Specs/${shard}/${packageName}`\n : `${shard}/${packageName}`;\n const suffix = useShard ? shardPath : packageNamePath;\n return `${prefix}/${account}/${repo}/contents/${suffix}`;\n}\n\nfunction handleError(packageName: string, err: HttpError): void {\n const errorData = { packageName, err };\n\n const statusCode = err.response?.statusCode ?? 0;\n if (statusCode === 429 || (statusCode >= 500 && statusCode < 600)) {\n logger.warn({ packageName, err }, `CocoaPods registry failure`);\n throw new ExternalHostError(err);\n }\n\n if (statusCode === 401) {\n logger.debug(errorData, 'Authorization error');\n } else if (statusCode === 404) {\n logger.debug(errorData, 'Package lookup error');\n } else if (err.message === HOST_DISABLED) {\n logger.trace(errorData, 'Host disabled');\n } else {\n logger.warn(errorData, 'CocoaPods lookup failure: Unknown error');\n }\n}\n\nfunction isDefaultRepo(url: string): boolean {\n const match = githubRegex.exec(url);\n if (match?.groups) {\n const { account, repo } = match.groups;\n return (\n account.toLowerCase() === 'cocoapods' && repo.toLowerCase() === 'specs'\n ); // https://github.com/CocoaPods/Specs.git\n }\n return false;\n}\n\nfunction releasesCDNUrl(packageName: string, registryUrl: string): string {\n const shard = shardParts(packageName).join('_');\n return `${registryUrl}/all_pods_versions_${shard}.txt`;\n}\n\nexport class PodDatasource extends Datasource {\n static readonly id = 'pod';\n\n override readonly defaultRegistryUrls = ['https://cdn.cocoapods.org'];\n\n override readonly registryStrategy = 'hunt';\n\n githubHttp: GithubHttp;\n\n constructor() {\n super(PodDatasource.id);\n this.githubHttp = new GithubHttp(PodDatasource.id);\n }\n\n private async requestCDN(\n url: string,\n packageName: string,\n ): Promise<string | null> {\n try {\n const resp = await this.http.getText(url);\n if (resp?.body) {\n return resp.body;\n }\n } catch (err) {\n handleError(packageName, err);\n }\n\n return null;\n }\n\n private async requestGithub<T = unknown>(\n url: string,\n packageName: string,\n ): Promise<T | null> {\n try {\n const resp = await this.githubHttp.getJsonUnchecked<T>(url);\n if (resp?.body) {\n return resp.body;\n }\n } catch (err) {\n handleError(packageName, err);\n }\n\n return null;\n }\n\n private async getReleasesFromGithub(\n packageName: string,\n opts: { hostURL: string; account: string; repo: string },\n useShard = true,\n useSpecs = true,\n urlFormatOptions: URLFormatOptions = 'withShardWithSpec',\n ): Promise<ReleaseResult | null> {\n const url = releasesGithubUrl(packageName, { ...opts, useShard, useSpecs });\n const resp = await this.requestGithub<{ name: string }[]>(url, packageName);\n if (resp) {\n const releases = resp.map(({ name }) => ({ version: name }));\n return { releases };\n }\n\n // support different url formats\n switch (urlFormatOptions) {\n case 'withShardWithSpec':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n true,\n false,\n 'withShardWithoutSpec',\n );\n case 'withShardWithoutSpec':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n false,\n true,\n 'withSpecsWithoutShard',\n );\n case 'withSpecsWithoutShard':\n return this.getReleasesFromGithub(\n packageName,\n opts,\n false,\n false,\n 'withoutSpecsWithoutShard',\n );\n case 'withoutSpecsWithoutShard':\n default:\n return null;\n }\n }\n\n private async getReleasesFromCDN(\n packageName: string,\n registryUrl: string,\n ): Promise<ReleaseResult | null> {\n const url = releasesCDNUrl(packageName, registryUrl);\n const resp = await this.requestCDN(url, packageName);\n if (resp) {\n const lines = resp.split(newlineRegex);\n for (const line of lines) {\n const [name, ...versions] = line.split('/');\n if (name === packageName.replace(regEx(/\\/.*$/), '')) {\n const releases = versions.map((version) => ({ version }));\n return { releases };\n }\n }\n }\n return null;\n }\n\n @cache({\n ttlMinutes: 30,\n namespace: `datasource-${PodDatasource.id}`,\n key: ({ packageName, registryUrl }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const podName = packageName.replace(regEx(/\\/.*$/), '');\n let baseUrl = registryUrl.replace(regEx(/\\/+$/), '');\n // In order to not abuse github API limits, query CDN instead\n if (isDefaultRepo(baseUrl)) {\n [baseUrl] = this.defaultRegistryUrls;\n }\n\n let result: ReleaseResult | null = null;\n const match = githubRegex.exec(baseUrl);\n if (match?.groups) {\n baseUrl = massageGithubUrl(baseUrl);\n const { hostURL, account, repo } = match.groups;\n const opts = { hostURL, account, repo };\n result = await this.getReleasesFromGithub(podName, opts);\n } else {\n result = await this.getReleasesFromCDN(podName, baseUrl);\n }\n\n return result;\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/python-version/index.ts"],"names":[],"mappings":";;;;AAAA,qEAA8D;AAC9D,oDAA2D;AAC3D,8CAA2C;AAC3C,sDAA4D;AAC5D,qDAAyE;AACzE,wDAA8D;AAE9D,qCAAyE;AACzE,qCAAyC;AAEzC,MAAa,uBAAwB,SAAQ,uBAAU;IACrD,MAAM,CAAU,EAAE,GAAG,mBAAU,CAAC;IAChC,wBAAwB,CAA2B;IACnD,mBAAmB,CAA0B;IAE7C;QACE,KAAK,CAAC,mBAAU,CAAC,CAAC;QAClB,IAAI,CAAC,wBAAwB,GAAG,IAAI,0CAAwB,EAAE,CAAC;QAC/D,IAAI,CAAC,mBAAmB,GAAG,IAAI,wCAAuB,EAAE,CAAC;IAC3D,CAAC;IAEiB,qBAAqB,GAAG,KAAK,CAAC;IAE9B,mBAAmB,GAAG,CAAC,2BAAkB,CAAC,CAAC;IAE3C,iBAAiB,GAAG,WAAU,CAAC;IAE/B,OAAO,GAAG,IAAI,CAAC;IAEjC,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;YACrD,WAAW,EAAE,sBAAa;YAC1B,WAAW,EAAE,+BAA+B;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;YAChD,WAAW,EAAE,oBAAc;YAC3B,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IAMK,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,GACO;QAClB,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/python-version/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { cache } from '../../../util/cache/package/decorator';\nimport { id as versioning } from '../../versioning/python';\nimport { Datasource } from '../datasource';\nimport { EndoflifeDateDatasource } from '../endoflife-date';\nimport { registryUrl as eolRegistryUrl } from '../endoflife-date/common';\nimport { GithubReleasesDatasource } from '../github-releases';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { datasource, defaultRegistryUrl, githubBaseUrl } from './common';\nimport { PythonRelease } from './schema';\n\nexport class PythonVersionDatasource extends Datasource {\n static readonly id = datasource;\n pythonPrebuildDatasource: GithubReleasesDatasource;\n pythonEolDatasource: EndoflifeDateDatasource;\n\n constructor() {\n super(datasource);\n this.pythonPrebuildDatasource = new GithubReleasesDatasource();\n this.pythonEolDatasource = new EndoflifeDateDatasource();\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = [defaultRegistryUrl];\n\n override readonly defaultVersioning = versioning;\n\n override readonly caching = true;\n\n async getPrebuildReleases(): Promise<ReleaseResult | null> {\n return await this.pythonPrebuildDatasource.getReleases({\n registryUrl: githubBaseUrl,\n packageName: 'containerbase/python-prebuild',\n });\n }\n\n async getEolReleases(): Promise<ReleaseResult | null> {\n return await this.pythonEolDatasource.getReleases({\n registryUrl: eolRegistryUrl,\n packageName: 'python',\n });\n }\n\n @cache({\n namespace: `datasource-${datasource}`,\n key: ({ registryUrl }: GetReleasesConfig) => `${registryUrl}`,\n })\n async getReleases({\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n const pythonPrebuildReleases = await this.getPrebuildReleases();\n const pythonPrebuildVersions = new Set<string>(\n pythonPrebuildReleases?.releases.map((release) => release.version),\n );\n const pythonEolReleases = await this.getEolReleases();\n const pythonEolVersions = new Map(\n pythonEolReleases?.releases\n .filter((release) => release.isDeprecated !== undefined)\n .map((release) => [\n release.version.split('.').slice(0, 2).join('.'),\n release.isDeprecated,\n ]),\n );\n const result: ReleaseResult = {\n homepage: 'https://python.org',\n sourceUrl: 'https://github.com/python/cpython',\n registryUrl,\n releases: [],\n };\n try {\n const response = await this.http.getJson(registryUrl, PythonRelease);\n result.releases.push(\n ...response.body\n .filter((release) => release.isStable)\n .filter((release) => pythonPrebuildVersions.has(release.version)),\n );\n } catch (err) {\n this.handleGenericErrors(err);\n }\n for (const release of result.releases) {\n release.isDeprecated = pythonEolVersions.get(\n release.version.split('.').slice(0, 2).join('.'),\n );\n }\n\n return result.releases.length ? result : null;\n }\n}\n"]}
|
@@ -121,7 +121,7 @@ class RepologyDatasource extends datasource_1.Datasource {
|
|
121
121
|
return undefined;
|
122
122
|
}
|
123
123
|
async getReleases({ packageName, registryUrl, }) {
|
124
|
-
|
124
|
+
/* v8 ignore next 3 -- should never happen */
|
125
125
|
if (!registryUrl) {
|
126
126
|
return null;
|
127
127
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/repology/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getQueryString, joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RepologyPackage, RepologyPackageType } from './types';\n\nconst packageTypes: RepologyPackageType[] = ['binname', 'srcname'];\n\nfunction findPackageInResponse(\n response: RepologyPackage[],\n repoName: string,\n pkgName: string,\n types: RepologyPackageType[],\n): RepologyPackage[] | null {\n const repoPackages = response.filter((pkg) => pkg.repo === repoName);\n\n if (repoPackages.length === 0) {\n // no packages associated with repoName\n return null;\n }\n\n if (repoPackages.length === 1) {\n // repo contains exactly one package, so we can return them safely\n return repoPackages;\n }\n\n // In some cases Repology bundles multiple packages into a single project, which might result in ambiguous results.\n // We need to do additional filtering by matching allowed package types passed as params with package description.\n // Remaining packages are the one we are looking for\n const packagesWithType = repoPackages.filter((pkg) => {\n for (const pkgType of types) {\n if (pkg[pkgType] && pkg[pkgType] === pkgName) {\n return true;\n }\n }\n return false;\n });\n\n return packagesWithType.length > 0 ? packagesWithType : null;\n}\n\nexport class RepologyDatasource extends Datasource {\n static readonly id = 'repology';\n\n override readonly defaultRegistryUrls = ['https://repology.org/'];\n\n override readonly registryStrategy = 'hunt';\n\n constructor() {\n super(RepologyDatasource.id);\n }\n\n private async queryPackages(url: string): Promise<RepologyPackage[]> {\n try {\n const res = await this.http.getJsonUnchecked<RepologyPackage[]>(url);\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n // Return an array here because the api does not return proper http codes\n // and instead of an 404 error an empty array with code 200 is returned\n // When querying the resolver 404 is thrown if package could not be resolved\n // and 403 if the repo is not supported\n // 403 is handled later because in this case we are trying the API\n return [];\n }\n\n throw err;\n }\n }\n\n private async queryPackagesViaResolver(\n registryUrl: string,\n repoName: string,\n packageName: string,\n packageType: RepologyPackageType,\n ): Promise<RepologyPackage[]> {\n const query = getQueryString({\n repo: repoName,\n name_type: packageType,\n target_page: 'api_v1_project',\n noautoresolve: 'on',\n name: packageName,\n });\n\n // Retrieve list of packages by looking up Repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `tools/project-by?${query}`),\n );\n\n return packages;\n }\n\n private async queryPackagesViaAPI(\n registryUrl: string,\n packageName: string,\n ): Promise<RepologyPackage[]> {\n // Directly query the package via the API. This will only work if `packageName` has the\n // same name as the repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `api/v1/project`, packageName),\n );\n\n return packages;\n }\n\n @cache({\n ttlMinutes: 60,\n namespace: `datasource-${RepologyDatasource.id}`,\n key: (registryUrl: string, repoName: string, pkgName: string) =>\n joinUrlParts(registryUrl, repoName, pkgName),\n })\n async queryPackage(\n registryUrl: string,\n repoName: string,\n pkgName: string,\n ): Promise<RepologyPackage[] | undefined> {\n let response: RepologyPackage[];\n // Try getting the packages from tools/project-by first for type binname and\n // afterwards for srcname. This needs to be done first, because some packages\n // resolve to repology projects which have a different name than the package\n // e.g. `pulseaudio-utils` resolves to project `pulseaudio`, BUT there is also\n // a project called `pulseaudio-utils` but it does not contain the package we\n // are looking for.\n try {\n for (const pkgType of packageTypes) {\n response = await this.queryPackagesViaResolver(\n registryUrl,\n repoName,\n pkgName,\n pkgType,\n );\n\n if (response) {\n const pkg = findPackageInResponse(response, repoName, pkgName, [\n pkgType,\n ]);\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n }\n }\n } catch (err) {\n if (err.statusCode === 403) {\n logger.debug(\n { repoName, pkgName },\n 'Repology does not support tools/project-by lookups for repository. Will try direct API access now',\n );\n\n // If the repository is not supported in tools/project-by we try directly accessing the\n // API. This will support all repositories but requires that the project name is equal to the\n // package name. This won't be always the case but for a good portion we might be able to resolve\n // the package this way.\n response = await this.queryPackagesViaAPI(registryUrl, pkgName);\n const pkg = findPackageInResponse(\n response,\n repoName,\n pkgName,\n packageTypes,\n );\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n } else if (err.statusCode === 300) {\n logger.warn(\n { repoName, pkgName },\n 'Ambiguous redirection from package name to project name in Repology. Skipping this package',\n );\n return undefined;\n }\n\n throw err;\n }\n\n logger.debug(\n { repoName, pkgName },\n 'Repository or package not found on Repology',\n );\n\n return undefined;\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n // Ensure lookup name contains both repository and package\n const [repoName, pkgName] = packageName.split('/', 2);\n if (!repoName || !pkgName) {\n throw new ExternalHostError(\n new Error(\n 'Repology lookup name must contain repository and package separated by slash (<repo>/<pkg>)',\n ),\n );\n }\n\n logger.trace(`repology.getReleases(${repoName}, ${pkgName})`);\n try {\n // Try to retrieve (cached) package information from Repology\n const pkg = await this.queryPackage(registryUrl, repoName, pkgName);\n if (!pkg) {\n return null;\n }\n\n // Always prefer origversion if available, otherwise default to version\n // This is required as source packages usually have no origversion\n const releases = pkg.map((item) => ({\n version: item.origversion ?? item.version,\n }));\n return { releases };\n } catch (err) {\n if (err.message === HOST_DISABLED) {\n logger.trace({ packageName, err }, 'Host disabled');\n } else {\n logger.warn(\n { packageName, err },\n 'Repology lookup failed with unexpected error',\n );\n }\n\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/repology/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getQueryString, joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RepologyPackage, RepologyPackageType } from './types';\n\nconst packageTypes: RepologyPackageType[] = ['binname', 'srcname'];\n\nfunction findPackageInResponse(\n response: RepologyPackage[],\n repoName: string,\n pkgName: string,\n types: RepologyPackageType[],\n): RepologyPackage[] | null {\n const repoPackages = response.filter((pkg) => pkg.repo === repoName);\n\n if (repoPackages.length === 0) {\n // no packages associated with repoName\n return null;\n }\n\n if (repoPackages.length === 1) {\n // repo contains exactly one package, so we can return them safely\n return repoPackages;\n }\n\n // In some cases Repology bundles multiple packages into a single project, which might result in ambiguous results.\n // We need to do additional filtering by matching allowed package types passed as params with package description.\n // Remaining packages are the one we are looking for\n const packagesWithType = repoPackages.filter((pkg) => {\n for (const pkgType of types) {\n if (pkg[pkgType] && pkg[pkgType] === pkgName) {\n return true;\n }\n }\n return false;\n });\n\n return packagesWithType.length > 0 ? packagesWithType : null;\n}\n\nexport class RepologyDatasource extends Datasource {\n static readonly id = 'repology';\n\n override readonly defaultRegistryUrls = ['https://repology.org/'];\n\n override readonly registryStrategy = 'hunt';\n\n constructor() {\n super(RepologyDatasource.id);\n }\n\n private async queryPackages(url: string): Promise<RepologyPackage[]> {\n try {\n const res = await this.http.getJsonUnchecked<RepologyPackage[]>(url);\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n // Return an array here because the api does not return proper http codes\n // and instead of an 404 error an empty array with code 200 is returned\n // When querying the resolver 404 is thrown if package could not be resolved\n // and 403 if the repo is not supported\n // 403 is handled later because in this case we are trying the API\n return [];\n }\n\n throw err;\n }\n }\n\n private async queryPackagesViaResolver(\n registryUrl: string,\n repoName: string,\n packageName: string,\n packageType: RepologyPackageType,\n ): Promise<RepologyPackage[]> {\n const query = getQueryString({\n repo: repoName,\n name_type: packageType,\n target_page: 'api_v1_project',\n noautoresolve: 'on',\n name: packageName,\n });\n\n // Retrieve list of packages by looking up Repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `tools/project-by?${query}`),\n );\n\n return packages;\n }\n\n private async queryPackagesViaAPI(\n registryUrl: string,\n packageName: string,\n ): Promise<RepologyPackage[]> {\n // Directly query the package via the API. This will only work if `packageName` has the\n // same name as the repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `api/v1/project`, packageName),\n );\n\n return packages;\n }\n\n @cache({\n ttlMinutes: 60,\n namespace: `datasource-${RepologyDatasource.id}`,\n key: (registryUrl: string, repoName: string, pkgName: string) =>\n joinUrlParts(registryUrl, repoName, pkgName),\n })\n async queryPackage(\n registryUrl: string,\n repoName: string,\n pkgName: string,\n ): Promise<RepologyPackage[] | undefined> {\n let response: RepologyPackage[];\n // Try getting the packages from tools/project-by first for type binname and\n // afterwards for srcname. This needs to be done first, because some packages\n // resolve to repology projects which have a different name than the package\n // e.g. `pulseaudio-utils` resolves to project `pulseaudio`, BUT there is also\n // a project called `pulseaudio-utils` but it does not contain the package we\n // are looking for.\n try {\n for (const pkgType of packageTypes) {\n response = await this.queryPackagesViaResolver(\n registryUrl,\n repoName,\n pkgName,\n pkgType,\n );\n\n if (response) {\n const pkg = findPackageInResponse(response, repoName, pkgName, [\n pkgType,\n ]);\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n }\n }\n } catch (err) {\n if (err.statusCode === 403) {\n logger.debug(\n { repoName, pkgName },\n 'Repology does not support tools/project-by lookups for repository. Will try direct API access now',\n );\n\n // If the repository is not supported in tools/project-by we try directly accessing the\n // API. This will support all repositories but requires that the project name is equal to the\n // package name. This won't be always the case but for a good portion we might be able to resolve\n // the package this way.\n response = await this.queryPackagesViaAPI(registryUrl, pkgName);\n const pkg = findPackageInResponse(\n response,\n repoName,\n pkgName,\n packageTypes,\n );\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n } else if (err.statusCode === 300) {\n logger.warn(\n { repoName, pkgName },\n 'Ambiguous redirection from package name to project name in Repology. Skipping this package',\n );\n return undefined;\n }\n\n throw err;\n }\n\n logger.debug(\n { repoName, pkgName },\n 'Repository or package not found on Repology',\n );\n\n return undefined;\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n // Ensure lookup name contains both repository and package\n const [repoName, pkgName] = packageName.split('/', 2);\n if (!repoName || !pkgName) {\n throw new ExternalHostError(\n new Error(\n 'Repology lookup name must contain repository and package separated by slash (<repo>/<pkg>)',\n ),\n );\n }\n\n logger.trace(`repology.getReleases(${repoName}, ${pkgName})`);\n try {\n // Try to retrieve (cached) package information from Repology\n const pkg = await this.queryPackage(registryUrl, repoName, pkgName);\n if (!pkg) {\n return null;\n }\n\n // Always prefer origversion if available, otherwise default to version\n // This is required as source packages usually have no origversion\n const releases = pkg.map((item) => ({\n version: item.origversion ?? item.version,\n }));\n return { releases };\n } catch (err) {\n if (err.message === HOST_DISABLED) {\n logger.trace({ packageName, err }, 'Host disabled');\n } else {\n logger.warn(\n { packageName, err },\n 'Repology lookup failed with unexpected error',\n );\n }\n\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
|
@@ -41,7 +41,7 @@ class RubygemsDatasource extends datasource_1.Datasource {
|
|
41
41
|
sourceUrlSupport = 'release';
|
42
42
|
sourceUrlNote = 'The source URL is determined from the `source_code_uri` field in the results.';
|
43
43
|
async getReleases({ packageName, registryUrl, }) {
|
44
|
-
|
44
|
+
/* v8 ignore next 3 -- should never happen */
|
45
45
|
if (!registryUrl) {
|
46
46
|
return null;
|
47
47
|
}
|