renovate 44.48.0 → 44.48.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/config/options/index.js +1 -1
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/global-config-option-defaults.generated.js +1 -1
  4. package/dist/global-config-option-defaults.generated.js.map +1 -1
  5. package/dist/modules/datasource/docker/dockerhub-cache.js.map +1 -1
  6. package/dist/modules/datasource/go/common.js.map +1 -1
  7. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  8. package/dist/modules/datasource/rust-version/index.js.map +1 -1
  9. package/dist/modules/datasource/rust-version/parse.js.map +1 -1
  10. package/dist/modules/manager/asdf/extract.js.map +1 -1
  11. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  12. package/dist/modules/manager/bazel-module/extract.js.map +1 -1
  13. package/dist/modules/manager/bazel-module/parser/context.js.map +1 -1
  14. package/dist/modules/manager/bazel-module/parser/fragments.js +1 -1
  15. package/dist/modules/manager/bazel-module/parser/fragments.js.map +1 -1
  16. package/dist/modules/manager/bazel-module/parser/index.js.map +1 -1
  17. package/dist/modules/manager/bazel-module/rules.js.map +1 -1
  18. package/dist/modules/manager/custom/jsonata/utils.js.map +1 -1
  19. package/dist/modules/manager/custom/regex/utils.js.map +1 -1
  20. package/dist/modules/manager/custom/types.d.ts +1 -0
  21. package/dist/modules/manager/custom/utils.d.ts +1 -0
  22. package/dist/modules/manager/custom/utils.js.map +1 -1
  23. package/dist/modules/manager/devbox/tool-versioning.js.map +1 -1
  24. package/dist/modules/manager/fingerprint.generated.js +2 -2
  25. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  26. package/dist/modules/manager/github-actions/community.js.map +1 -1
  27. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  28. package/dist/modules/manager/github-actions/parse.js.map +1 -1
  29. package/dist/modules/manager/github-actions/schema.js.map +1 -1
  30. package/dist/modules/manager/haskell-cabal/extract.js.map +1 -1
  31. package/dist/modules/manager/haskell-cabal/index.js.map +1 -1
  32. package/dist/modules/manager/homebrew/handlers/github.js.map +1 -1
  33. package/dist/modules/manager/homebrew/handlers/npm.js.map +1 -1
  34. package/dist/modules/manager/mise/backends.js.map +1 -1
  35. package/dist/modules/manager/mise/extract.js.map +1 -1
  36. package/dist/modules/manager/mise/lockfile.js.map +1 -1
  37. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  38. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  39. package/dist/modules/manager/npm/post-update/node-version.js.map +1 -1
  40. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  41. package/dist/modules/manager/npm/post-update/rules.js.map +1 -1
  42. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  43. package/dist/modules/manager/pixi/lockfile.js.map +1 -1
  44. package/dist/modules/manager/proto/extract.js.map +1 -1
  45. package/dist/modules/manager/proto/upgradeable-tooling.js.map +1 -1
  46. package/dist/modules/manager/terragrunt/util.js.map +1 -1
  47. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  48. package/dist/modules/platform/azure/types.js.map +1 -1
  49. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  50. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  51. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  52. package/dist/modules/platform/codecommit/index.js.map +1 -1
  53. package/dist/modules/versioning/apk/index.js.map +1 -1
  54. package/dist/modules/versioning/aws-machine-image/index.js.map +1 -1
  55. package/dist/modules/versioning/azure-rest-api/index.js.map +1 -1
  56. package/dist/modules/versioning/deb/index.js.map +1 -1
  57. package/dist/modules/versioning/debian/common.js.map +1 -1
  58. package/dist/modules/versioning/debian/index.js.map +1 -1
  59. package/dist/modules/versioning/devbox/index.js.map +1 -1
  60. package/dist/modules/versioning/distro.js.map +1 -1
  61. package/dist/modules/versioning/docker/index.js.map +1 -1
  62. package/dist/modules/versioning/generic.d.ts +2 -10
  63. package/dist/modules/versioning/generic.js.map +1 -1
  64. package/dist/modules/versioning/git/index.js.map +1 -1
  65. package/dist/modules/versioning/glasskube/index.js.map +1 -1
  66. package/dist/modules/versioning/gradle/compare.js.map +1 -1
  67. package/dist/modules/versioning/hermit/index.js.map +1 -1
  68. package/dist/modules/versioning/index.d.ts +2 -2
  69. package/dist/modules/versioning/ivy/parse.js.map +1 -1
  70. package/dist/modules/versioning/lambda-node/schedule.js.map +1 -1
  71. package/dist/modules/versioning/loose/index.js.map +1 -1
  72. package/dist/modules/versioning/maven/compare.js.map +1 -1
  73. package/dist/modules/versioning/nixpkgs/index.js.map +1 -1
  74. package/dist/modules/versioning/node/schedule.js.map +1 -1
  75. package/dist/modules/versioning/paket/index.js.map +1 -1
  76. package/dist/modules/versioning/paket/range.js.map +1 -1
  77. package/dist/modules/versioning/perl/index.js.map +1 -1
  78. package/dist/modules/versioning/redhat/index.js.map +1 -1
  79. package/dist/modules/versioning/regex/index.js.map +1 -1
  80. package/dist/modules/versioning/rpm/index.js.map +1 -1
  81. package/dist/modules/versioning/ruby/range.js.map +1 -1
  82. package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
  83. package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
  84. package/dist/modules/versioning/ruby/strategies/widen.js.map +1 -1
  85. package/dist/modules/versioning/semver/common.js.map +1 -1
  86. package/dist/modules/versioning/types.d.ts +25 -1
  87. package/dist/modules/versioning/unity3d/index.js.map +1 -1
  88. package/dist/modules/versioning/unity3d-packages/index.js.map +1 -1
  89. package/package.json +1 -1
  90. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","names":[],"sources":["../../../../../lib/modules/manager/homebrew/handlers/github.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport semver from 'semver';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { GithubReleasesDatasource } from '../../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../../datasource/github-tags/index.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport { HomebrewUrlHandler } from './base.ts';\n\nexport type GitHubUrlType = 'archive' | 'releases';\n\n// URL parsing result with urlType for datasource selection\nexport interface GitHubUrlParsedResult {\n type: 'github';\n currentValue: string;\n ownerName: string;\n repoName: string;\n urlType: GitHubUrlType;\n}\n\n// Manager data with type discriminator\nexport interface GitHubManagerData {\n type: 'github';\n ownerName: string;\n repoName: string;\n sha256: string | null;\n url: string | null;\n}\n\nexport class GitHubUrlHandler extends HomebrewUrlHandler {\n readonly type = 'github';\n\n parseUrl(urlStr: string): GitHubUrlParsedResult | null {\n if (!is.nonEmptyString(urlStr)) {\n return null;\n }\n const url = parseUrl(urlStr);\n if (url?.hostname !== 'github.com') {\n return null;\n }\n let s = url.pathname.split('/');\n s = s.filter((val) => val);\n const ownerName = s[0];\n const repoName = s[1];\n let currentValue: string | undefined;\n let urlType: GitHubUrlType | undefined;\n\n if (s[2] === 'archive') {\n urlType = 'archive';\n // old archive url in form: [...]/archive/<tag>.tar.gz\n currentValue = s[3];\n if (currentValue === 'refs') {\n // new archive url in form: [...]/archive/refs/tags/<tag>.tar.gz\n currentValue = s[5];\n }\n const targz = currentValue.slice(\n currentValue.length - 7,\n currentValue.length,\n );\n if (targz === '.tar.gz') {\n currentValue = currentValue.substring(0, currentValue.length - 7);\n }\n } else if (s[2] === 'releases' && s[3] === 'download') {\n urlType = 'releases';\n currentValue = s[4];\n }\n\n if (!currentValue || !urlType) {\n return null;\n }\n\n return { type: 'github', currentValue, ownerName, repoName, urlType };\n }\n\n createDependency(\n parsed: GitHubUrlParsedResult,\n sha256: string | null,\n url: string,\n ): PackageDependency<GitHubManagerData> {\n return {\n depName: `${parsed.ownerName}/${parsed.repoName}`,\n currentValue: parsed.currentValue,\n datasource:\n parsed.urlType === 'releases'\n ? GithubReleasesDatasource.id\n : GithubTagsDatasource.id,\n managerData: {\n type: 'github',\n ownerName: parsed.ownerName,\n repoName: parsed.repoName,\n sha256,\n url,\n },\n };\n }\n\n buildArchiveUrls(\n managerData: GitHubManagerData,\n newVersion: string,\n ): string[] | null {\n const ownerName = managerData.ownerName;\n const repoName = managerData.repoName;\n\n // Use semver.coerce to get version without 'v' prefix for filename\n const coercedVersion = semver.coerce(newVersion);\n const versionForFilename = coercedVersion?.version ?? newVersion;\n\n return [\n `https://github.com/${ownerName}/${repoName}/releases/download/${newVersion}/${repoName}-${versionForFilename}.tar.gz`,\n `https://github.com/${ownerName}/${repoName}/archive/refs/tags/${newVersion}.tar.gz`,\n ];\n }\n}\n"],"mappings":";;;;;;;AA4BA,IAAa,mBAAb,cAAsC,mBAAmB;CACvD,OAAgB;CAEhB,SAAS,QAA8C;EACrD,IAAI,CAAC,GAAG,eAAe,MAAM,GAC3B,OAAO;EAET,MAAM,MAAM,SAAS,MAAM;EAC3B,IAAI,KAAK,aAAa,cACpB,OAAO;EAET,IAAI,IAAI,IAAI,SAAS,MAAM,GAAG;EAC9B,IAAI,EAAE,QAAQ,QAAQ,GAAG;EACzB,MAAM,YAAY,EAAE;EACpB,MAAM,WAAW,EAAE;EACnB,IAAI;EACJ,IAAI;EAEJ,IAAI,EAAE,OAAO,WAAW;GACtB,UAAU;GAEV,eAAe,EAAE;GACjB,IAAI,iBAAiB,QAEnB,eAAe,EAAE;GAMnB,IAJc,aAAa,MACzB,aAAa,SAAS,GACtB,aAAa,MAEP,MAAM,WACZ,eAAe,aAAa,UAAU,GAAG,aAAa,SAAS,CAAC;EAEpE,OAAO,IAAI,EAAE,OAAO,cAAc,EAAE,OAAO,YAAY;GACrD,UAAU;GACV,eAAe,EAAE;EACnB;EAEA,IAAI,CAAC,gBAAgB,CAAC,SACpB,OAAO;EAGT,OAAO;GAAE,MAAM;GAAU;GAAc;GAAW;GAAU;EAAQ;CACtE;CAEA,iBACE,QACA,QACA,KACsC;EACtC,OAAO;GACL,SAAS,GAAG,OAAO,UAAU,GAAG,OAAO;GACvC,cAAc,OAAO;GACrB,YACE,OAAO,YAAY,aACf,yBAAyB,KACzB,qBAAqB;GAC3B,aAAa;IACX,MAAM;IACN,WAAW,OAAO;IAClB,UAAU,OAAO;IACjB;IACA;GACF;EACF;CACF;CAEA,iBACE,aACA,YACiB;EACjB,MAAM,YAAY,YAAY;EAC9B,MAAM,WAAW,YAAY;EAM7B,OAAO,CACL,sBAAsB,UAAU,GAAG,SAAS,qBAAqB,WAAW,GAAG,SAAS,GAJnE,OAAO,OAAO,UACG,CAAC,EAAE,WAAW,WAG0D,UAC9G,sBAAsB,UAAU,GAAG,SAAS,qBAAqB,WAAW,QAC9E;CACF;AACF"}
1
+ {"version":3,"file":"github.js","names":[],"sources":["../../../../../lib/modules/manager/homebrew/handlers/github.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport semver from 'semver';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { GithubReleasesDatasource } from '../../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../../datasource/github-tags/index.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type {\n GitHubManagerData,\n GitHubUrlParsedResult,\n GitHubUrlType,\n} from '../types.ts';\nimport { HomebrewUrlHandler } from './base.ts';\n\nexport class GitHubUrlHandler extends HomebrewUrlHandler {\n readonly type = 'github';\n\n parseUrl(urlStr: string): GitHubUrlParsedResult | null {\n if (!is.nonEmptyString(urlStr)) {\n return null;\n }\n const url = parseUrl(urlStr);\n if (url?.hostname !== 'github.com') {\n return null;\n }\n let s = url.pathname.split('/');\n s = s.filter((val) => val);\n const ownerName = s[0];\n const repoName = s[1];\n let currentValue: string | undefined;\n let urlType: GitHubUrlType | undefined;\n\n if (s[2] === 'archive') {\n urlType = 'archive';\n // old archive url in form: [...]/archive/<tag>.tar.gz\n currentValue = s[3];\n if (currentValue === 'refs') {\n // new archive url in form: [...]/archive/refs/tags/<tag>.tar.gz\n currentValue = s[5];\n }\n const targz = currentValue.slice(\n currentValue.length - 7,\n currentValue.length,\n );\n if (targz === '.tar.gz') {\n currentValue = currentValue.substring(0, currentValue.length - 7);\n }\n } else if (s[2] === 'releases' && s[3] === 'download') {\n urlType = 'releases';\n currentValue = s[4];\n }\n\n if (!currentValue || !urlType) {\n return null;\n }\n\n return { type: 'github', currentValue, ownerName, repoName, urlType };\n }\n\n createDependency(\n parsed: GitHubUrlParsedResult,\n sha256: string | null,\n url: string,\n ): PackageDependency<GitHubManagerData> {\n return {\n depName: `${parsed.ownerName}/${parsed.repoName}`,\n currentValue: parsed.currentValue,\n datasource:\n parsed.urlType === 'releases'\n ? GithubReleasesDatasource.id\n : GithubTagsDatasource.id,\n managerData: {\n type: 'github',\n ownerName: parsed.ownerName,\n repoName: parsed.repoName,\n sha256,\n url,\n },\n };\n }\n\n buildArchiveUrls(\n managerData: GitHubManagerData,\n newVersion: string,\n ): string[] | null {\n const ownerName = managerData.ownerName;\n const repoName = managerData.repoName;\n\n // Use semver.coerce to get version without 'v' prefix for filename\n const coercedVersion = semver.coerce(newVersion);\n const versionForFilename = coercedVersion?.version ?? newVersion;\n\n return [\n `https://github.com/${ownerName}/${repoName}/releases/download/${newVersion}/${repoName}-${versionForFilename}.tar.gz`,\n `https://github.com/${ownerName}/${repoName}/archive/refs/tags/${newVersion}.tar.gz`,\n ];\n }\n}\n"],"mappings":";;;;;;;AAaA,IAAa,mBAAb,cAAsC,mBAAmB;CACvD,OAAgB;CAEhB,SAAS,QAA8C;EACrD,IAAI,CAAC,GAAG,eAAe,MAAM,GAC3B,OAAO;EAET,MAAM,MAAM,SAAS,MAAM;EAC3B,IAAI,KAAK,aAAa,cACpB,OAAO;EAET,IAAI,IAAI,IAAI,SAAS,MAAM,GAAG;EAC9B,IAAI,EAAE,QAAQ,QAAQ,GAAG;EACzB,MAAM,YAAY,EAAE;EACpB,MAAM,WAAW,EAAE;EACnB,IAAI;EACJ,IAAI;EAEJ,IAAI,EAAE,OAAO,WAAW;GACtB,UAAU;GAEV,eAAe,EAAE;GACjB,IAAI,iBAAiB,QAEnB,eAAe,EAAE;GAMnB,IAJc,aAAa,MACzB,aAAa,SAAS,GACtB,aAAa,MAEP,MAAM,WACZ,eAAe,aAAa,UAAU,GAAG,aAAa,SAAS,CAAC;EAEpE,OAAO,IAAI,EAAE,OAAO,cAAc,EAAE,OAAO,YAAY;GACrD,UAAU;GACV,eAAe,EAAE;EACnB;EAEA,IAAI,CAAC,gBAAgB,CAAC,SACpB,OAAO;EAGT,OAAO;GAAE,MAAM;GAAU;GAAc;GAAW;GAAU;EAAQ;CACtE;CAEA,iBACE,QACA,QACA,KACsC;EACtC,OAAO;GACL,SAAS,GAAG,OAAO,UAAU,GAAG,OAAO;GACvC,cAAc,OAAO;GACrB,YACE,OAAO,YAAY,aACf,yBAAyB,KACzB,qBAAqB;GAC3B,aAAa;IACX,MAAM;IACN,WAAW,OAAO;IAClB,UAAU,OAAO;IACjB;IACA;GACF;EACF;CACF;CAEA,iBACE,aACA,YACiB;EACjB,MAAM,YAAY,YAAY;EAC9B,MAAM,WAAW,YAAY;EAM7B,OAAO,CACL,sBAAsB,UAAU,GAAG,SAAS,qBAAqB,WAAW,GAAG,SAAS,GAJnE,OAAO,OAAO,UACG,CAAC,EAAE,WAAW,WAG0D,UAC9G,sBAAsB,UAAU,GAAG,SAAS,qBAAqB,WAAW,QAC9E;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"npm.js","names":[],"sources":["../../../../../lib/modules/manager/homebrew/handlers/npm.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport { HomebrewUrlHandler } from './base.ts';\n\n// URL parsing result\nexport interface NpmUrlParsedResult {\n type: 'npm';\n currentValue: string;\n packageName: string;\n}\n\n// Manager data with type discriminator\nexport interface NpmManagerData {\n type: 'npm';\n packageName: string;\n sha256: string | null;\n url: string | null;\n}\n\nexport class NpmUrlHandler extends HomebrewUrlHandler {\n readonly type = 'npm';\n\n parseUrl(urlStr: string): NpmUrlParsedResult | null {\n if (!is.nonEmptyString(urlStr)) {\n logger.debug({ urlStr }, 'Invalid URL string');\n return null;\n }\n\n const url = parseUrl(urlStr);\n if (url?.hostname !== 'registry.npmjs.org') {\n logger.once.debug(\n { hostname: url?.hostname },\n 'Homebrew only support NPM packages hosted on registry.npmjs.org',\n );\n return null;\n }\n\n // Pattern: /<packageName>/-/<filename>-<version>.tgz\n // For scoped: /@scope/name/-/name-version.tgz\n // For unscoped: /name/-/name-version.tgz\n const pattern = regEx(\n /^\\/(?<packageName>(?:@[^/]+\\/)?[^/]+)\\/-\\/[^/]+-(?<version>[\\d.]+(?:-[a-zA-Z0-9.-]*)?)\\.tgz$/,\n );\n\n const match = pattern.exec(url.pathname);\n\n const version = match?.groups?.version;\n const packageName = match?.groups?.packageName;\n if (!packageName || !version) {\n logger.debug(\n { pathname: url.pathname },\n 'Path does not contain a valid NPM package name or version',\n );\n return null;\n }\n\n return {\n type: 'npm',\n currentValue: version,\n packageName,\n };\n }\n\n createDependency(\n parsed: NpmUrlParsedResult,\n sha256: string | null,\n url: string,\n ): PackageDependency<NpmManagerData> {\n return {\n depName: parsed.packageName,\n currentValue: parsed.currentValue,\n datasource: NpmDatasource.id,\n managerData: {\n type: 'npm',\n packageName: parsed.packageName,\n sha256,\n url,\n },\n };\n }\n\n buildArchiveUrls(\n managerData: NpmManagerData,\n newVersion: string,\n ): string[] | null {\n const { packageName } = managerData;\n\n // Extract filename from package name\n // Scoped: @foo/bar -> bar\n // Unscoped: bar -> bar\n const filename = packageName.includes('/')\n ? packageName.split('/')[1]\n : packageName;\n\n return [\n `https://registry.npmjs.org/${packageName}/-/${filename}-${newVersion}.tgz`,\n ];\n }\n}\n"],"mappings":";;;;;;;AAuBA,IAAa,gBAAb,cAAmC,mBAAmB;CACpD,OAAgB;CAEhB,SAAS,QAA2C;EAClD,IAAI,CAAC,GAAG,eAAe,MAAM,GAAG;GAC9B,OAAO,MAAM,EAAE,OAAO,GAAG,oBAAoB;GAC7C,OAAO;EACT;EAEA,MAAM,MAAM,SAAS,MAAM;EAC3B,IAAI,KAAK,aAAa,sBAAsB;GAC1C,OAAO,KAAK,MACV,EAAE,UAAU,KAAK,SAAS,GAC1B,iEACF;GACA,OAAO;EACT;EASA,MAAM,QAJU,MACd,8FAGkB,CAAC,CAAC,KAAK,IAAI,QAAQ;EAEvC,MAAM,UAAU,OAAO,QAAQ;EAC/B,MAAM,cAAc,OAAO,QAAQ;EACnC,IAAI,CAAC,eAAe,CAAC,SAAS;GAC5B,OAAO,MACL,EAAE,UAAU,IAAI,SAAS,GACzB,2DACF;GACA,OAAO;EACT;EAEA,OAAO;GACL,MAAM;GACN,cAAc;GACd;EACF;CACF;CAEA,iBACE,QACA,QACA,KACmC;EACnC,OAAO;GACL,SAAS,OAAO;GAChB,cAAc,OAAO;GACrB,YAAY,cAAc;GAC1B,aAAa;IACX,MAAM;IACN,aAAa,OAAO;IACpB;IACA;GACF;EACF;CACF;CAEA,iBACE,aACA,YACiB;EACjB,MAAM,EAAE,gBAAgB;EASxB,OAAO,CACL,8BAA8B,YAAY,KAL3B,YAAY,SAAS,GAAG,IACrC,YAAY,MAAM,GAAG,CAAC,CAAC,KACvB,YAGsD,GAAG,WAAW,KACxE;CACF;AACF"}
1
+ {"version":3,"file":"npm.js","names":[],"sources":["../../../../../lib/modules/manager/homebrew/handlers/npm.ts"],"sourcesContent":["import is from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\nimport type { PackageDependency } from '../../types.ts';\nimport type { NpmManagerData, NpmUrlParsedResult } from '../types.ts';\nimport { HomebrewUrlHandler } from './base.ts';\n\nexport class NpmUrlHandler extends HomebrewUrlHandler {\n readonly type = 'npm';\n\n parseUrl(urlStr: string): NpmUrlParsedResult | null {\n if (!is.nonEmptyString(urlStr)) {\n logger.debug({ urlStr }, 'Invalid URL string');\n return null;\n }\n\n const url = parseUrl(urlStr);\n if (url?.hostname !== 'registry.npmjs.org') {\n logger.once.debug(\n { hostname: url?.hostname },\n 'Homebrew only support NPM packages hosted on registry.npmjs.org',\n );\n return null;\n }\n\n // Pattern: /<packageName>/-/<filename>-<version>.tgz\n // For scoped: /@scope/name/-/name-version.tgz\n // For unscoped: /name/-/name-version.tgz\n const pattern = regEx(\n /^\\/(?<packageName>(?:@[^/]+\\/)?[^/]+)\\/-\\/[^/]+-(?<version>[\\d.]+(?:-[a-zA-Z0-9.-]*)?)\\.tgz$/,\n );\n\n const match = pattern.exec(url.pathname);\n\n const version = match?.groups?.version;\n const packageName = match?.groups?.packageName;\n if (!packageName || !version) {\n logger.debug(\n { pathname: url.pathname },\n 'Path does not contain a valid NPM package name or version',\n );\n return null;\n }\n\n return {\n type: 'npm',\n currentValue: version,\n packageName,\n };\n }\n\n createDependency(\n parsed: NpmUrlParsedResult,\n sha256: string | null,\n url: string,\n ): PackageDependency<NpmManagerData> {\n return {\n depName: parsed.packageName,\n currentValue: parsed.currentValue,\n datasource: NpmDatasource.id,\n managerData: {\n type: 'npm',\n packageName: parsed.packageName,\n sha256,\n url,\n },\n };\n }\n\n buildArchiveUrls(\n managerData: NpmManagerData,\n newVersion: string,\n ): string[] | null {\n const { packageName } = managerData;\n\n // Extract filename from package name\n // Scoped: @foo/bar -> bar\n // Unscoped: bar -> bar\n const filename = packageName.includes('/')\n ? packageName.split('/')[1]\n : packageName;\n\n return [\n `https://registry.npmjs.org/${packageName}/-/${filename}-${newVersion}.tgz`,\n ];\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,gBAAb,cAAmC,mBAAmB;CACpD,OAAgB;CAEhB,SAAS,QAA2C;EAClD,IAAI,CAAC,GAAG,eAAe,MAAM,GAAG;GAC9B,OAAO,MAAM,EAAE,OAAO,GAAG,oBAAoB;GAC7C,OAAO;EACT;EAEA,MAAM,MAAM,SAAS,MAAM;EAC3B,IAAI,KAAK,aAAa,sBAAsB;GAC1C,OAAO,KAAK,MACV,EAAE,UAAU,KAAK,SAAS,GAC1B,iEACF;GACA,OAAO;EACT;EASA,MAAM,QAJU,MACd,8FAGkB,CAAC,CAAC,KAAK,IAAI,QAAQ;EAEvC,MAAM,UAAU,OAAO,QAAQ;EAC/B,MAAM,cAAc,OAAO,QAAQ;EACnC,IAAI,CAAC,eAAe,CAAC,SAAS;GAC5B,OAAO,MACL,EAAE,UAAU,IAAI,SAAS,GACzB,2DACF;GACA,OAAO;EACT;EAEA,OAAO;GACL,MAAM;GACN,cAAc;GACd;EACF;CACF;CAEA,iBACE,QACA,QACA,KACmC;EACnC,OAAO;GACL,SAAS,OAAO;GAChB,cAAc,OAAO;GACrB,YAAY,cAAc;GAC1B,aAAa;IACX,MAAM;IACN,aAAa,OAAO;IACpB;IACA;GACF;EACF;CACF;CAEA,iBACE,aACA,YACiB;EACjB,MAAM,EAAE,gBAAgB;EASxB,OAAO,CACL,8BAA8B,YAAY,KAL3B,YAAY,SAAS,GAAG,IACrC,YAAY,MAAM,GAAG,CAAC,CAAC,KACvB,YAGsD,GAAG,WAAW,KACxE;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"backends.js","names":["semverVersioning.id"],"sources":["../../../../lib/modules/manager/mise/backends.ts"],"sourcesContent":["import {\n isNonEmptyString,\n isString,\n isUndefined,\n isUrlString,\n} from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { CrateDatasource } from '../../datasource/crate/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GoDatasource } from '../../datasource/go/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { NugetDatasource } from '../../datasource/nuget/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport { RubygemsDatasource } from '../../datasource/rubygems/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport type { MiseToolOptions } from './schema.ts';\n\nexport type BackendToolingConfig = Omit<PackageDependency, 'depName'> &\n Required<\n | Pick<PackageDependency, 'packageName' | 'datasource'>\n | Pick<PackageDependency, 'packageName' | 'skipReason'>\n >;\n\n/**\n * Create a tooling config for aqua backend\n * @link https://mise.jdx.dev/dev-tools/backends/aqua.html\n */\nexport function createAquaToolConfig(\n name: string,\n version: string,\n): BackendToolingConfig {\n // mise supports http aqua package type but we cannot determine it from the tool name\n // An error will be thrown afterwards if the package type is http\n // ref: https://github.com/jdx/mise/blob/d1b9749d8f3e13ef705c1ea471d96c5935b79136/src/aqua/aqua_registry.rs#L39-L45\n return {\n packageName: name,\n datasource: GithubTagsDatasource.id,\n // Trim the leading 'v' from both the current and extracted version\n currentValue: version.replace(regEx(/^v/), ''),\n extractVersion: '^v?(?<version>.+)',\n };\n}\n\nconst cargoGitVersionRegex = regEx(/^(?<type>tag|branch|rev):(?<version>.+)$/);\n\n/**\n * Create a tooling config for cargo backend\n * @link https://mise.jdx.dev/dev-tools/backends/cargo.html\n */\nexport function createCargoToolConfig(\n name: string,\n version: string,\n): BackendToolingConfig {\n if (!isUrlString(name)) {\n return {\n packageName: name,\n datasource: CrateDatasource.id,\n // A mise tool version is a concrete version, not a Cargo dependency requirement,\n // so the crate datasource default of cargo versioning does not apply\n versioning: semverVersioning.id,\n };\n }\n // tag: branch: or rev: is required for git repository url\n // e.g. branch:main, tag:0.1.0, rev:abcdef\n const matchGroups = cargoGitVersionRegex.exec(version)?.groups;\n if (isUndefined(matchGroups)) {\n return {\n packageName: name,\n skipReason: 'invalid-version',\n };\n }\n const { type, version: gitVersion } = matchGroups;\n switch (type as 'tag' | 'branch' | 'rev') {\n case 'tag':\n return {\n packageName: name,\n datasource: GitTagsDatasource.id,\n currentValue: gitVersion,\n };\n case 'branch':\n return {\n packageName: name,\n datasource: GitRefsDatasource.id,\n currentValue: gitVersion,\n };\n case 'rev':\n return {\n packageName: name,\n datasource: GitRefsDatasource.id,\n currentValue: gitVersion,\n };\n }\n}\n\n/**\n * Create a tooling config for dotnet backend\n * @link https://mise.jdx.dev/dev-tools/backends/dotnet.html\n */\nexport function createDotnetToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: NugetDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for gem backend\n * @link https://mise.jdx.dev/dev-tools/backends/gem.html\n */\nexport function createGemToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: RubygemsDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for github backend\n * @link https://mise.jdx.dev/dev-tools/backends/github.html\n */\nexport function createGithubToolConfig(\n name: string,\n version: string,\n toolOptions: MiseToolOptions,\n): BackendToolingConfig {\n let extractVersion: string | undefined = undefined;\n const prefix = toolOptions.version_prefix;\n\n if (isNonEmptyString(prefix)) {\n extractVersion = `^${RegExp.escape(prefix)}(?<version>.+)`;\n }\n\n return {\n packageName: name,\n datasource: GithubReleasesDatasource.id,\n currentValue: version,\n ...(extractVersion && { extractVersion }),\n };\n}\n\n/**\n * Create a tooling config for go backend\n * @link https://mise.jdx.dev/dev-tools/backends/go.html\n */\nexport function createGoToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: GoDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for npm backend\n * @link https://mise.jdx.dev/dev-tools/backends/npm.html\n */\nexport function createNpmToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: NpmDatasource.id,\n };\n}\n\nconst pipxGitHubRegex = regEx(/^git\\+https:\\/\\/github\\.com\\/(?<repo>.+)\\.git$/);\n\n/**\n * Create a tooling config for pipx backend\n * @link https://mise.jdx.dev/dev-tools/backends/pipx.html\n */\nexport function createPipxToolConfig(name: string): BackendToolingConfig {\n const isGitSyntax = name.startsWith('git+');\n // Does not support zip file url\n // Avoid type narrowing to prevent type error\n if (!isGitSyntax && (isUrlString as (value: unknown) => boolean)(name)) {\n return {\n packageName: name,\n skipReason: 'unsupported-url',\n };\n }\n if (isGitSyntax || name.includes('/')) {\n let repoName: string | undefined;\n if (isGitSyntax) {\n repoName = pipxGitHubRegex.exec(name)?.groups?.repo;\n // If the url is not a github repo, treat the version as a git ref\n if (isUndefined(repoName)) {\n return {\n packageName: name\n .replace(regEx(/^git\\+/g), '')\n .replaceAll(regEx(/\\.git$/g), ''),\n datasource: GitRefsDatasource.id,\n };\n }\n } else {\n repoName = name;\n }\n return {\n packageName: repoName,\n datasource: GithubTagsDatasource.id,\n };\n }\n return {\n packageName: normalizePythonDepName(name),\n datasource: PypiDatasource.id,\n };\n}\n\nconst spmGitHubRegex = regEx(/^https:\\/\\/github.com\\/(?<repo>.+).git$/);\n\n/**\n * Create a tooling config for spm backend\n * @link https://mise.jdx.dev/dev-tools/backends/spm.html\n */\nexport function createSpmToolConfig(name: string): BackendToolingConfig {\n let repoName: string | undefined;\n // Avoid type narrowing to prevent type error\n if ((isUrlString as (value: unknown) => boolean)(name)) {\n repoName = spmGitHubRegex.exec(name)?.groups?.repo;\n // spm backend only supports github repos\n if (!repoName) {\n return {\n packageName: name,\n skipReason: 'unsupported-url',\n };\n }\n }\n return {\n packageName: repoName ?? name,\n datasource: GithubReleasesDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for ubi backend\n * @link https://mise.jdx.dev/dev-tools/backends/ubi.html\n */\nexport function createUbiToolConfig(\n name: string,\n version: string,\n toolOptions: MiseToolOptions,\n): BackendToolingConfig {\n let extractVersion: string | undefined = undefined;\n\n const hasVPrefix = version.startsWith('v');\n const setsTagRegex = !hasVPrefix || isString(toolOptions.tag_regex);\n\n if (setsTagRegex) {\n // By default, use a regex that matches any tag\n let tagRegex = '.+';\n // Filter versions by tag_regex if it is specified\n // ref: https://mise.jdx.dev/dev-tools/backends/ubi.html#ubi-uses-weird-versions\n if (isString(toolOptions.tag_regex)) {\n // Remove the leading '^' if it exists to avoid duplication\n tagRegex = toolOptions.tag_regex.replace(regEx(/^\\^/), '');\n if (!hasVPrefix) {\n // Remove the leading 'v?' if it exists to avoid duplication\n tagRegex = tagRegex.replace(regEx(/^v\\??/), '');\n }\n }\n\n // Trim the 'v' prefix if the current version does not have it\n extractVersion = `^${hasVPrefix ? '' : 'v?'}(?<version>${tagRegex})`;\n }\n\n return {\n packageName: name,\n datasource: GithubReleasesDatasource.id,\n currentValue: version,\n ...(isString(extractVersion) ? { extractVersion } : {}),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"backends.js","names":["semverVersioning.id"],"sources":["../../../../lib/modules/manager/mise/backends.ts"],"sourcesContent":["import {\n isNonEmptyString,\n isString,\n isUndefined,\n isUrlString,\n} from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { CrateDatasource } from '../../datasource/crate/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GoDatasource } from '../../datasource/go/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { NugetDatasource } from '../../datasource/nuget/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport { RubygemsDatasource } from '../../datasource/rubygems/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport type { MiseToolOptions } from './schema.ts';\nimport type { BackendToolingConfig } from './types.ts';\n\n/**\n * Create a tooling config for aqua backend\n * @link https://mise.jdx.dev/dev-tools/backends/aqua.html\n */\nexport function createAquaToolConfig(\n name: string,\n version: string,\n): BackendToolingConfig {\n // mise supports http aqua package type but we cannot determine it from the tool name\n // An error will be thrown afterwards if the package type is http\n // ref: https://github.com/jdx/mise/blob/d1b9749d8f3e13ef705c1ea471d96c5935b79136/src/aqua/aqua_registry.rs#L39-L45\n return {\n packageName: name,\n datasource: GithubTagsDatasource.id,\n // Trim the leading 'v' from both the current and extracted version\n currentValue: version.replace(regEx(/^v/), ''),\n extractVersion: '^v?(?<version>.+)',\n };\n}\n\nconst cargoGitVersionRegex = regEx(/^(?<type>tag|branch|rev):(?<version>.+)$/);\n\n/**\n * Create a tooling config for cargo backend\n * @link https://mise.jdx.dev/dev-tools/backends/cargo.html\n */\nexport function createCargoToolConfig(\n name: string,\n version: string,\n): BackendToolingConfig {\n if (!isUrlString(name)) {\n return {\n packageName: name,\n datasource: CrateDatasource.id,\n // A mise tool version is a concrete version, not a Cargo dependency requirement,\n // so the crate datasource default of cargo versioning does not apply\n versioning: semverVersioning.id,\n };\n }\n // tag: branch: or rev: is required for git repository url\n // e.g. branch:main, tag:0.1.0, rev:abcdef\n const matchGroups = cargoGitVersionRegex.exec(version)?.groups;\n if (isUndefined(matchGroups)) {\n return {\n packageName: name,\n skipReason: 'invalid-version',\n };\n }\n const { type, version: gitVersion } = matchGroups;\n switch (type as 'tag' | 'branch' | 'rev') {\n case 'tag':\n return {\n packageName: name,\n datasource: GitTagsDatasource.id,\n currentValue: gitVersion,\n };\n case 'branch':\n return {\n packageName: name,\n datasource: GitRefsDatasource.id,\n currentValue: gitVersion,\n };\n case 'rev':\n return {\n packageName: name,\n datasource: GitRefsDatasource.id,\n currentValue: gitVersion,\n };\n }\n}\n\n/**\n * Create a tooling config for dotnet backend\n * @link https://mise.jdx.dev/dev-tools/backends/dotnet.html\n */\nexport function createDotnetToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: NugetDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for gem backend\n * @link https://mise.jdx.dev/dev-tools/backends/gem.html\n */\nexport function createGemToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: RubygemsDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for github backend\n * @link https://mise.jdx.dev/dev-tools/backends/github.html\n */\nexport function createGithubToolConfig(\n name: string,\n version: string,\n toolOptions: MiseToolOptions,\n): BackendToolingConfig {\n let extractVersion: string | undefined = undefined;\n const prefix = toolOptions.version_prefix;\n\n if (isNonEmptyString(prefix)) {\n extractVersion = `^${RegExp.escape(prefix)}(?<version>.+)`;\n }\n\n return {\n packageName: name,\n datasource: GithubReleasesDatasource.id,\n currentValue: version,\n ...(extractVersion && { extractVersion }),\n };\n}\n\n/**\n * Create a tooling config for go backend\n * @link https://mise.jdx.dev/dev-tools/backends/go.html\n */\nexport function createGoToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: GoDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for npm backend\n * @link https://mise.jdx.dev/dev-tools/backends/npm.html\n */\nexport function createNpmToolConfig(name: string): BackendToolingConfig {\n return {\n packageName: name,\n datasource: NpmDatasource.id,\n };\n}\n\nconst pipxGitHubRegex = regEx(/^git\\+https:\\/\\/github\\.com\\/(?<repo>.+)\\.git$/);\n\n/**\n * Create a tooling config for pipx backend\n * @link https://mise.jdx.dev/dev-tools/backends/pipx.html\n */\nexport function createPipxToolConfig(name: string): BackendToolingConfig {\n const isGitSyntax = name.startsWith('git+');\n // Does not support zip file url\n // Avoid type narrowing to prevent type error\n if (!isGitSyntax && (isUrlString as (value: unknown) => boolean)(name)) {\n return {\n packageName: name,\n skipReason: 'unsupported-url',\n };\n }\n if (isGitSyntax || name.includes('/')) {\n let repoName: string | undefined;\n if (isGitSyntax) {\n repoName = pipxGitHubRegex.exec(name)?.groups?.repo;\n // If the url is not a github repo, treat the version as a git ref\n if (isUndefined(repoName)) {\n return {\n packageName: name\n .replace(regEx(/^git\\+/g), '')\n .replaceAll(regEx(/\\.git$/g), ''),\n datasource: GitRefsDatasource.id,\n };\n }\n } else {\n repoName = name;\n }\n return {\n packageName: repoName,\n datasource: GithubTagsDatasource.id,\n };\n }\n return {\n packageName: normalizePythonDepName(name),\n datasource: PypiDatasource.id,\n };\n}\n\nconst spmGitHubRegex = regEx(/^https:\\/\\/github.com\\/(?<repo>.+).git$/);\n\n/**\n * Create a tooling config for spm backend\n * @link https://mise.jdx.dev/dev-tools/backends/spm.html\n */\nexport function createSpmToolConfig(name: string): BackendToolingConfig {\n let repoName: string | undefined;\n // Avoid type narrowing to prevent type error\n if ((isUrlString as (value: unknown) => boolean)(name)) {\n repoName = spmGitHubRegex.exec(name)?.groups?.repo;\n // spm backend only supports github repos\n if (!repoName) {\n return {\n packageName: name,\n skipReason: 'unsupported-url',\n };\n }\n }\n return {\n packageName: repoName ?? name,\n datasource: GithubReleasesDatasource.id,\n };\n}\n\n/**\n * Create a tooling config for ubi backend\n * @link https://mise.jdx.dev/dev-tools/backends/ubi.html\n */\nexport function createUbiToolConfig(\n name: string,\n version: string,\n toolOptions: MiseToolOptions,\n): BackendToolingConfig {\n let extractVersion: string | undefined = undefined;\n\n const hasVPrefix = version.startsWith('v');\n const setsTagRegex = !hasVPrefix || isString(toolOptions.tag_regex);\n\n if (setsTagRegex) {\n // By default, use a regex that matches any tag\n let tagRegex = '.+';\n // Filter versions by tag_regex if it is specified\n // ref: https://mise.jdx.dev/dev-tools/backends/ubi.html#ubi-uses-weird-versions\n if (isString(toolOptions.tag_regex)) {\n // Remove the leading '^' if it exists to avoid duplication\n tagRegex = toolOptions.tag_regex.replace(regEx(/^\\^/), '');\n if (!hasVPrefix) {\n // Remove the leading 'v?' if it exists to avoid duplication\n tagRegex = tagRegex.replace(regEx(/^v\\??/), '');\n }\n }\n\n // Trim the 'v' prefix if the current version does not have it\n extractVersion = `^${hasVPrefix ? '' : 'v?'}(?<version>${tagRegex})`;\n }\n\n return {\n packageName: name,\n datasource: GithubReleasesDatasource.id,\n currentValue: version,\n ...(isString(extractVersion) ? { extractVersion } : {}),\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/mise/extract.ts"],"sourcesContent":["import {\n isArray,\n isFunction,\n isNonEmptyObject,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { StaticTooling } from '../asdf/upgradeable-tooling.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { BackendToolingConfig } from './backends.ts';\nimport {\n createAquaToolConfig,\n createCargoToolConfig,\n createDotnetToolConfig,\n createGemToolConfig,\n createGithubToolConfig,\n createGoToolConfig,\n createNpmToolConfig,\n createPipxToolConfig,\n createSpmToolConfig,\n createUbiToolConfig,\n} from './backends.ts';\nimport { getLockFileName, getLockedVersion } from './lockfile.ts';\nimport type { MiseTool, MiseToolOptions } from './schema.ts';\nimport { MiseLockFile } from './schema.ts';\nimport type { ToolingDefinition } from './upgradeable-tooling.ts';\nimport {\n asdfTooling,\n getOrderedMiseRegistryBackends,\n miseTooling,\n} from './upgradeable-tooling.ts';\nimport { parseTomlFile } from './utils.ts';\n\n// Tool names can have options in the tool name\n// e.g. ubi:tamasfe/taplo[matching=full,exe=taplo]\nconst optionInToolNameRegex = regEx(/^(?<name>.+?)(?:\\[(?<options>.+)\\])?$/);\n\n/**\n * Extracts mise tool dependencies from a mise configuration file.\n * Supports various backends (core, asdf, aqua, cargo, etc.) and\n * extracts locked versions when a corresponding lock file exists.\n */\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`mise.extractPackageFile(${packageFile})`);\n\n const misefile = parseTomlFile(content, packageFile);\n if (!misefile) {\n return null;\n }\n\n const deps: PackageDependency[] = [];\n\n for (const [name, toolData] of Object.entries(misefile.tools)) {\n deps.push(extractToolEntry(name, toolData, 'tools'));\n }\n\n for (const [taskName, taskData] of Object.entries(misefile.tasks)) {\n for (const [name, toolData] of Object.entries(taskData.tools ?? {})) {\n deps.push(extractToolEntry(name, toolData, `task-${taskName}-tools`));\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const result: PackageFileContent = { deps };\n\n const lockFileName = getLockFileName(packageFile);\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n\n if (lockFileContent) {\n const lockFileParsed = MiseLockFile.safeParse(lockFileContent);\n if (lockFileParsed.success) {\n result.lockFiles = [lockFileName];\n for (const dep of deps) {\n const lockedVersion = getLockedVersion(\n lockFileParsed.data,\n dep.depName!,\n );\n if (lockedVersion) {\n dep.lockedVersion = lockedVersion;\n }\n }\n } else {\n logger.debug(\n { lockFileName, error: lockFileParsed.error },\n 'Failed to parse mise lock file',\n );\n }\n }\n\n return result;\n}\n\nfunction parseVersion(toolData: MiseTool): string | null {\n if (isNonEmptyString(toolData)) {\n // Handle the string case\n // e.g. 'erlang = \"23.3\"'\n return toolData;\n }\n if (isArray(toolData, isString)) {\n // Handle the array case\n // e.g. 'erlang = [\"23.3\", \"24.0\"]'\n return toolData.length ? toolData[0] : null; // Get the first version in the array\n }\n if (isObject(toolData) && isNonEmptyString(toolData.version)) {\n // Handle the object case with a string version\n // e.g. 'python = { version = \"3.11.2\" }'\n return toolData.version;\n }\n return null; // Return null if no version is found\n}\n\nfunction parseOptions(\n optionsInName: string,\n toolOptions: MiseToolOptions,\n): MiseToolOptions {\n const options = isNonEmptyString(optionsInName)\n ? Object.fromEntries(\n optionsInName.split(',').map((option) => option.split('=', 2)),\n )\n : {};\n // Options in toolOptions will override options in the tool name\n return {\n ...options,\n ...toolOptions,\n };\n}\n\nfunction getToolConfig(\n backend: string,\n toolName: string,\n version: string,\n toolOptions: MiseToolOptions,\n): StaticTooling | BackendToolingConfig | null {\n switch (backend) {\n case '': {\n // If the tool name does not specify a backend, it should be a short name or an alias defined by users\n const staticResult = getRegistryToolConfig(toolName, version);\n if (staticResult) {\n return staticResult;\n }\n\n // Otherwise, see if we have any known short tool names that are in the `mise-registry.json` data file\n const backends = getOrderedMiseRegistryBackends(toolName);\n\n // prioritise the github backend as the best source for data\n if (backends.github) {\n const result = getToolConfig(\n 'github',\n backends.github,\n version,\n toolOptions,\n );\n // v8 ignore else -- TODO: add test #40625\n if (result !== null) {\n return result;\n }\n }\n\n for (const [backendType, backendName] of Object.entries(backends)) {\n const result = getToolConfig(\n backendType,\n backendName,\n version,\n toolOptions,\n );\n // v8 ignore else -- TODO: add test #40625\n if (result !== null) {\n return result;\n }\n }\n return null;\n }\n // We can specify core, asdf, vfox, aqua backends for tools in the default registry\n // e.g. 'core:rust', 'asdf:rust', 'vfox:clang', 'aqua:act'\n case 'core':\n return getConfigFromTooling(miseTooling, toolName, version);\n case 'asdf':\n return getConfigFromTooling(asdfTooling, toolName, version);\n case 'vfox':\n return getRegistryToolConfig(toolName, version);\n case 'aqua':\n return (\n getRegistryToolConfig(toolName, version) ??\n createAquaToolConfig(toolName, version)\n );\n case 'cargo':\n return createCargoToolConfig(toolName, version);\n case 'dotnet':\n return createDotnetToolConfig(toolName);\n case 'gem':\n return createGemToolConfig(toolName);\n case 'github':\n return createGithubToolConfig(toolName, version, toolOptions);\n case 'go':\n return createGoToolConfig(toolName);\n case 'npm':\n return createNpmToolConfig(toolName);\n case 'pipx':\n return createPipxToolConfig(toolName);\n case 'spm':\n return createSpmToolConfig(toolName);\n case 'ubi':\n return createUbiToolConfig(toolName, version, toolOptions);\n default:\n // Unsupported backend\n return null;\n }\n}\n\n/**\n * Get the tooling config for a short name defined in the default registry\n * @link https://mise.jdx.dev/registry.html\n */\nfunction getRegistryToolConfig(\n short: string,\n version: string,\n): StaticTooling | null {\n // Try to get the config from miseTooling first, then asdfTooling\n return (\n getConfigFromTooling(miseTooling, short, version) ??\n getConfigFromTooling(asdfTooling, short, version)\n );\n}\n\nfunction getConfigFromTooling(\n toolingSource: Record<string, ToolingDefinition>,\n name: string,\n version: string,\n): StaticTooling | null {\n const toolDefinition = toolingSource[name];\n if (!toolDefinition) {\n return null;\n } // Return null if no toolDefinition is found\n\n return (\n (isFunction(toolDefinition.config)\n ? toolDefinition.config(version)\n : toolDefinition.config) ?? null\n ); // Ensure null is returned instead of undefined\n}\n\nfunction extractToolEntry(\n name: string,\n toolData: MiseTool,\n depType: string,\n): PackageDependency {\n const version = parseVersion(toolData);\n const { name: depName, options: optionsInName } = optionInToolNameRegex.exec(\n name.trim(),\n )!.groups!;\n const delimiterIndex = depName.indexOf(':');\n const backend = depName.substring(0, delimiterIndex);\n const toolName = depName.substring(delimiterIndex + 1);\n const options = parseOptions(\n optionsInName,\n isNonEmptyObject(toolData) ? toolData : {},\n );\n const toolConfig =\n version === null\n ? null\n : getToolConfig(backend, toolName, version, options);\n return createDependency(depName, version, toolConfig, depType);\n}\n\nfunction createDependency(\n name: string,\n version: string | null,\n config: StaticTooling | BackendToolingConfig | null,\n depType: string,\n): PackageDependency {\n if (version === null) {\n return {\n depName: name,\n depType,\n skipReason: 'unspecified-version',\n };\n }\n if (config === null) {\n return {\n depName: name,\n depType,\n skipReason: 'unsupported-datasource',\n };\n }\n\n return {\n depName: name,\n depType,\n currentValue: version,\n // Spread the config last to override other properties\n ...config,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/mise/extract.ts"],"sourcesContent":["import {\n isArray,\n isFunction,\n isNonEmptyObject,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport type { StaticTooling } from '../asdf/types.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport {\n createAquaToolConfig,\n createCargoToolConfig,\n createDotnetToolConfig,\n createGemToolConfig,\n createGithubToolConfig,\n createGoToolConfig,\n createNpmToolConfig,\n createPipxToolConfig,\n createSpmToolConfig,\n createUbiToolConfig,\n} from './backends.ts';\nimport { getLockFileName, getLockedVersion } from './lockfile.ts';\nimport type { MiseTool, MiseToolOptions } from './schema.ts';\nimport { MiseLockFile } from './schema.ts';\nimport type { BackendToolingConfig, ToolingDefinition } from './types.ts';\nimport {\n asdfTooling,\n getOrderedMiseRegistryBackends,\n miseTooling,\n} from './upgradeable-tooling.ts';\nimport { parseTomlFile } from './utils.ts';\n\n// Tool names can have options in the tool name\n// e.g. ubi:tamasfe/taplo[matching=full,exe=taplo]\nconst optionInToolNameRegex = regEx(/^(?<name>.+?)(?:\\[(?<options>.+)\\])?$/);\n\n/**\n * Extracts mise tool dependencies from a mise configuration file.\n * Supports various backends (core, asdf, aqua, cargo, etc.) and\n * extracts locked versions when a corresponding lock file exists.\n */\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`mise.extractPackageFile(${packageFile})`);\n\n const misefile = parseTomlFile(content, packageFile);\n if (!misefile) {\n return null;\n }\n\n const deps: PackageDependency[] = [];\n\n for (const [name, toolData] of Object.entries(misefile.tools)) {\n deps.push(extractToolEntry(name, toolData, 'tools'));\n }\n\n for (const [taskName, taskData] of Object.entries(misefile.tasks)) {\n for (const [name, toolData] of Object.entries(taskData.tools ?? {})) {\n deps.push(extractToolEntry(name, toolData, `task-${taskName}-tools`));\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const result: PackageFileContent = { deps };\n\n const lockFileName = getLockFileName(packageFile);\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n\n if (lockFileContent) {\n const lockFileParsed = MiseLockFile.safeParse(lockFileContent);\n if (lockFileParsed.success) {\n result.lockFiles = [lockFileName];\n for (const dep of deps) {\n const lockedVersion = getLockedVersion(\n lockFileParsed.data,\n dep.depName!,\n );\n if (lockedVersion) {\n dep.lockedVersion = lockedVersion;\n }\n }\n } else {\n logger.debug(\n { lockFileName, error: lockFileParsed.error },\n 'Failed to parse mise lock file',\n );\n }\n }\n\n return result;\n}\n\nfunction parseVersion(toolData: MiseTool): string | null {\n if (isNonEmptyString(toolData)) {\n // Handle the string case\n // e.g. 'erlang = \"23.3\"'\n return toolData;\n }\n if (isArray(toolData, isString)) {\n // Handle the array case\n // e.g. 'erlang = [\"23.3\", \"24.0\"]'\n return toolData.length ? toolData[0] : null; // Get the first version in the array\n }\n if (isObject(toolData) && isNonEmptyString(toolData.version)) {\n // Handle the object case with a string version\n // e.g. 'python = { version = \"3.11.2\" }'\n return toolData.version;\n }\n return null; // Return null if no version is found\n}\n\nfunction parseOptions(\n optionsInName: string,\n toolOptions: MiseToolOptions,\n): MiseToolOptions {\n const options = isNonEmptyString(optionsInName)\n ? Object.fromEntries(\n optionsInName.split(',').map((option) => option.split('=', 2)),\n )\n : {};\n // Options in toolOptions will override options in the tool name\n return {\n ...options,\n ...toolOptions,\n };\n}\n\nfunction getToolConfig(\n backend: string,\n toolName: string,\n version: string,\n toolOptions: MiseToolOptions,\n): StaticTooling | BackendToolingConfig | null {\n switch (backend) {\n case '': {\n // If the tool name does not specify a backend, it should be a short name or an alias defined by users\n const staticResult = getRegistryToolConfig(toolName, version);\n if (staticResult) {\n return staticResult;\n }\n\n // Otherwise, see if we have any known short tool names that are in the `mise-registry.json` data file\n const backends = getOrderedMiseRegistryBackends(toolName);\n\n // prioritise the github backend as the best source for data\n if (backends.github) {\n const result = getToolConfig(\n 'github',\n backends.github,\n version,\n toolOptions,\n );\n // v8 ignore else -- TODO: add test #40625\n if (result !== null) {\n return result;\n }\n }\n\n for (const [backendType, backendName] of Object.entries(backends)) {\n const result = getToolConfig(\n backendType,\n backendName,\n version,\n toolOptions,\n );\n // v8 ignore else -- TODO: add test #40625\n if (result !== null) {\n return result;\n }\n }\n return null;\n }\n // We can specify core, asdf, vfox, aqua backends for tools in the default registry\n // e.g. 'core:rust', 'asdf:rust', 'vfox:clang', 'aqua:act'\n case 'core':\n return getConfigFromTooling(miseTooling, toolName, version);\n case 'asdf':\n return getConfigFromTooling(asdfTooling, toolName, version);\n case 'vfox':\n return getRegistryToolConfig(toolName, version);\n case 'aqua':\n return (\n getRegistryToolConfig(toolName, version) ??\n createAquaToolConfig(toolName, version)\n );\n case 'cargo':\n return createCargoToolConfig(toolName, version);\n case 'dotnet':\n return createDotnetToolConfig(toolName);\n case 'gem':\n return createGemToolConfig(toolName);\n case 'github':\n return createGithubToolConfig(toolName, version, toolOptions);\n case 'go':\n return createGoToolConfig(toolName);\n case 'npm':\n return createNpmToolConfig(toolName);\n case 'pipx':\n return createPipxToolConfig(toolName);\n case 'spm':\n return createSpmToolConfig(toolName);\n case 'ubi':\n return createUbiToolConfig(toolName, version, toolOptions);\n default:\n // Unsupported backend\n return null;\n }\n}\n\n/**\n * Get the tooling config for a short name defined in the default registry\n * @link https://mise.jdx.dev/registry.html\n */\nfunction getRegistryToolConfig(\n short: string,\n version: string,\n): StaticTooling | null {\n // Try to get the config from miseTooling first, then asdfTooling\n return (\n getConfigFromTooling(miseTooling, short, version) ??\n getConfigFromTooling(asdfTooling, short, version)\n );\n}\n\nfunction getConfigFromTooling(\n toolingSource: Record<string, ToolingDefinition>,\n name: string,\n version: string,\n): StaticTooling | null {\n const toolDefinition = toolingSource[name];\n if (!toolDefinition) {\n return null;\n } // Return null if no toolDefinition is found\n\n return (\n (isFunction(toolDefinition.config)\n ? toolDefinition.config(version)\n : toolDefinition.config) ?? null\n ); // Ensure null is returned instead of undefined\n}\n\nfunction extractToolEntry(\n name: string,\n toolData: MiseTool,\n depType: string,\n): PackageDependency {\n const version = parseVersion(toolData);\n const { name: depName, options: optionsInName } = optionInToolNameRegex.exec(\n name.trim(),\n )!.groups!;\n const delimiterIndex = depName.indexOf(':');\n const backend = depName.substring(0, delimiterIndex);\n const toolName = depName.substring(delimiterIndex + 1);\n const options = parseOptions(\n optionsInName,\n isNonEmptyObject(toolData) ? toolData : {},\n );\n const toolConfig =\n version === null\n ? null\n : getToolConfig(backend, toolName, version, options);\n return createDependency(depName, version, toolConfig, depType);\n}\n\nfunction createDependency(\n name: string,\n version: string | null,\n config: StaticTooling | BackendToolingConfig | null,\n depType: string,\n): PackageDependency {\n if (version === null) {\n return {\n depName: name,\n depType,\n skipReason: 'unspecified-version',\n };\n }\n if (config === null) {\n return {\n depName: name,\n depType,\n skipReason: 'unsupported-datasource',\n };\n }\n\n return {\n depName: name,\n depType,\n currentValue: version,\n // Spread the config last to override other properties\n ...config,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/mise/lockfile.ts"],"sourcesContent":["import upath from 'upath';\nimport { regEx } from '../../../util/regex.ts';\nimport type { MiseLockFile } from './schema.ts';\n\nexport interface MiseConfigType {\n /** True when config filename contains `.local.` (e.g. mise.local.toml) */\n isLocal: boolean;\n /** Environment name extracted from filename, e.g. 'test' for mise.test.toml */\n env?: string;\n}\n\n/**\n * Parses the config file name to determine its type (local, env-specific, or default).\n * Used to derive the correct lock file name and `mise lock` flags.\n */\nexport function getConfigType(configPath: string): MiseConfigType {\n const filename = upath.basename(configPath);\n const isLocal = filename.endsWith('.local.toml');\n // Patterns: mise.{env}.toml, mise.{env}.local.toml, .mise.{env}.toml, config.{env}.toml\n const envMatch = regEx(\n /^(?:\\.?mise|config)\\.(?<env>[^.]+)(?:\\.local)?\\.toml$/,\n ).exec(filename);\n const env =\n envMatch?.groups?.env === 'local' ? undefined : envMatch?.groups?.env;\n return { isLocal, env };\n}\n\n/**\n * Derives the lock file path from a mise config file path.\n * Matches mise's lockfile_path_for_config() logic from src/lockfile.rs\n */\nexport function getLockFileName(configPath: string): string {\n const dirname = upath.dirname(configPath);\n const parentDirname = upath.basename(dirname);\n\n // For conf.d files, lock file goes in parent directory\n const lockDir = parentDirname === 'conf.d' ? upath.dirname(dirname) : dirname;\n\n const { isLocal, env } = getConfigType(configPath);\n\n let lockFileName: string;\n if (env && isLocal) {\n lockFileName = `mise.${env}.local.lock`;\n } else if (env) {\n lockFileName = `mise.${env}.lock`;\n } else if (isLocal) {\n lockFileName = 'mise.local.lock';\n } else {\n lockFileName = 'mise.lock';\n }\n\n return upath.join(lockDir, lockFileName);\n}\n\n/**\n * Get the locked version for a dependency from the parsed lock file.\n *\n * Mise lock files use different key formats depending on whether a tool is in\n * the mise registry:\n * - Registry tools (e.g., node, python): key is the short name (\"node\")\n * - Non-registry tools (e.g., ubi:owner/repo): key is the full name (\"ubi:owner/repo\")\n *\n * When a user specifies \"core:node\" in their config, mise resolves it to the\n * registry short name \"node\" in the lock file. But \"aqua:cli/cli\" (not in\n * registry) stays as \"aqua:cli/cli\" in the lock file.\n *\n * We use a fallback approach (Option A) rather than checking the registry (Option B):\n *\n * Option A (implemented): Try full depName first, then try stripped short name.\n * Pros: Simple, no registry dependency, works even if Renovate's registry\n * is out of sync with mise's registry.\n * Cons: Theoretical collision risk if both \"foo\" and \"backend:foo\" exist\n * in the same lock file (practically impossible - mise wouldn't generate this).\n *\n * Option B (not implemented): Check miseTooling/asdfTooling to determine if\n * the tool is in the registry, then use short name or full name accordingly.\n * Pros: Matches mise's exact logic.\n * Cons: More complex, requires passing registry data, fails if Renovate's\n * registry doesn't include a tool that mise's registry does.\n *\n * Option A is preferred because it's simpler, has no practical downsides, and\n * doesn't couple lock file parsing to Renovate's registry coverage.\n */\nexport function getLockedVersion(\n lockFileData: MiseLockFile,\n depName: string,\n): string | undefined {\n // Try full name first (for non-registry tools like ubi:, aqua:)\n let lockedTools = lockFileData.tools[depName];\n\n // If not found and has backend prefix, try stripped name (for registry tools)\n if (!lockedTools) {\n const delimiterIndex = depName.indexOf(':');\n if (delimiterIndex !== -1) {\n const shortName = depName.substring(delimiterIndex + 1);\n lockedTools = lockFileData.tools[shortName];\n }\n }\n\n return lockedTools?.[0]?.version;\n}\n"],"mappings":";;;;;;;AAeA,SAAgB,cAAc,YAAoC;CAChE,MAAM,WAAW,MAAM,SAAS,UAAU;CAC1C,MAAM,UAAU,SAAS,SAAS,aAAa;CAE/C,MAAM,WAAW,MACf,uDACF,CAAC,CAAC,KAAK,QAAQ;CAGf,OAAO;EAAE;EAAS,KADhB,UAAU,QAAQ,QAAQ,UAAU,KAAA,IAAY,UAAU,QAAQ;CAC9C;AACxB;;;;;AAMA,SAAgB,gBAAgB,YAA4B;CAC1D,MAAM,UAAU,MAAM,QAAQ,UAAU;CAIxC,MAAM,UAHgB,MAAM,SAAS,OAGT,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI;CAEtE,MAAM,EAAE,SAAS,QAAQ,cAAc,UAAU;CAEjD,IAAI;CACJ,IAAI,OAAO,SACT,eAAe,QAAQ,IAAI;MACtB,IAAI,KACT,eAAe,QAAQ,IAAI;MACtB,IAAI,SACT,eAAe;MAEf,eAAe;CAGjB,OAAO,MAAM,KAAK,SAAS,YAAY;AACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAgB,iBACd,cACA,SACoB;CAEpB,IAAI,cAAc,aAAa,MAAM;CAGrC,IAAI,CAAC,aAAa;EAChB,MAAM,iBAAiB,QAAQ,QAAQ,GAAG;EAC1C,IAAI,mBAAmB,IAAI;GACzB,MAAM,YAAY,QAAQ,UAAU,iBAAiB,CAAC;GACtD,cAAc,aAAa,MAAM;EACnC;CACF;CAEA,OAAO,cAAc,EAAE,EAAE;AAC3B"}
1
+ {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/mise/lockfile.ts"],"sourcesContent":["import upath from 'upath';\nimport { regEx } from '../../../util/regex.ts';\nimport type { MiseLockFile } from './schema.ts';\nimport type { MiseConfigType } from './types.ts';\n\n/**\n * Parses the config file name to determine its type (local, env-specific, or default).\n * Used to derive the correct lock file name and `mise lock` flags.\n */\nexport function getConfigType(configPath: string): MiseConfigType {\n const filename = upath.basename(configPath);\n const isLocal = filename.endsWith('.local.toml');\n // Patterns: mise.{env}.toml, mise.{env}.local.toml, .mise.{env}.toml, config.{env}.toml\n const envMatch = regEx(\n /^(?:\\.?mise|config)\\.(?<env>[^.]+)(?:\\.local)?\\.toml$/,\n ).exec(filename);\n const env =\n envMatch?.groups?.env === 'local' ? undefined : envMatch?.groups?.env;\n return { isLocal, env };\n}\n\n/**\n * Derives the lock file path from a mise config file path.\n * Matches mise's lockfile_path_for_config() logic from src/lockfile.rs\n */\nexport function getLockFileName(configPath: string): string {\n const dirname = upath.dirname(configPath);\n const parentDirname = upath.basename(dirname);\n\n // For conf.d files, lock file goes in parent directory\n const lockDir = parentDirname === 'conf.d' ? upath.dirname(dirname) : dirname;\n\n const { isLocal, env } = getConfigType(configPath);\n\n let lockFileName: string;\n if (env && isLocal) {\n lockFileName = `mise.${env}.local.lock`;\n } else if (env) {\n lockFileName = `mise.${env}.lock`;\n } else if (isLocal) {\n lockFileName = 'mise.local.lock';\n } else {\n lockFileName = 'mise.lock';\n }\n\n return upath.join(lockDir, lockFileName);\n}\n\n/**\n * Get the locked version for a dependency from the parsed lock file.\n *\n * Mise lock files use different key formats depending on whether a tool is in\n * the mise registry:\n * - Registry tools (e.g., node, python): key is the short name (\"node\")\n * - Non-registry tools (e.g., ubi:owner/repo): key is the full name (\"ubi:owner/repo\")\n *\n * When a user specifies \"core:node\" in their config, mise resolves it to the\n * registry short name \"node\" in the lock file. But \"aqua:cli/cli\" (not in\n * registry) stays as \"aqua:cli/cli\" in the lock file.\n *\n * We use a fallback approach (Option A) rather than checking the registry (Option B):\n *\n * Option A (implemented): Try full depName first, then try stripped short name.\n * Pros: Simple, no registry dependency, works even if Renovate's registry\n * is out of sync with mise's registry.\n * Cons: Theoretical collision risk if both \"foo\" and \"backend:foo\" exist\n * in the same lock file (practically impossible - mise wouldn't generate this).\n *\n * Option B (not implemented): Check miseTooling/asdfTooling to determine if\n * the tool is in the registry, then use short name or full name accordingly.\n * Pros: Matches mise's exact logic.\n * Cons: More complex, requires passing registry data, fails if Renovate's\n * registry doesn't include a tool that mise's registry does.\n *\n * Option A is preferred because it's simpler, has no practical downsides, and\n * doesn't couple lock file parsing to Renovate's registry coverage.\n */\nexport function getLockedVersion(\n lockFileData: MiseLockFile,\n depName: string,\n): string | undefined {\n // Try full name first (for non-registry tools like ubi:, aqua:)\n let lockedTools = lockFileData.tools[depName];\n\n // If not found and has backend prefix, try stripped name (for registry tools)\n if (!lockedTools) {\n const delimiterIndex = depName.indexOf(':');\n if (delimiterIndex !== -1) {\n const shortName = depName.substring(delimiterIndex + 1);\n lockedTools = lockFileData.tools[shortName];\n }\n }\n\n return lockedTools?.[0]?.version;\n}\n"],"mappings":";;;;;;;AASA,SAAgB,cAAc,YAAoC;CAChE,MAAM,WAAW,MAAM,SAAS,UAAU;CAC1C,MAAM,UAAU,SAAS,SAAS,aAAa;CAE/C,MAAM,WAAW,MACf,uDACF,CAAC,CAAC,KAAK,QAAQ;CAGf,OAAO;EAAE;EAAS,KADhB,UAAU,QAAQ,QAAQ,UAAU,KAAA,IAAY,UAAU,QAAQ;CAC9C;AACxB;;;;;AAMA,SAAgB,gBAAgB,YAA4B;CAC1D,MAAM,UAAU,MAAM,QAAQ,UAAU;CAIxC,MAAM,UAHgB,MAAM,SAAS,OAGT,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI;CAEtE,MAAM,EAAE,SAAS,QAAQ,cAAc,UAAU;CAEjD,IAAI;CACJ,IAAI,OAAO,SACT,eAAe,QAAQ,IAAI;MACtB,IAAI,KACT,eAAe,QAAQ,IAAI;MACtB,IAAI,SACT,eAAe;MAEf,eAAe;CAGjB,OAAO,MAAM,KAAK,SAAS,YAAY;AACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAgB,iBACd,cACA,SACoB;CAEpB,IAAI,cAAc,aAAa,MAAM;CAGrC,IAAI,CAAC,aAAa;EAChB,MAAM,iBAAiB,QAAQ,QAAQ,GAAG;EAC1C,IAAI,mBAAmB,IAAI;GACzB,MAAM,YAAY,QAAQ,UAAU,iBAAiB,CAAC;GACtD,cAAc,aAAa,MAAM;EACnC;CACF;CAEA,OAAO,cAAc,EAAE,EAAE;AAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeable-tooling.js","names":["semverPartialVersioning.id","regexVersioning.id","semverVersioning.id","miseRegistry"],"sources":["../../../../lib/modules/manager/mise/upgradeable-tooling.ts"],"sourcesContent":["import miseRegistry from '../../../data/mise-registry.json' with { type: 'json' };\nimport { regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexpmBobDatasource } from '../../datasource/hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from '../../datasource/java-version/index.ts';\nimport { NodeVersionDatasource } from '../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RustVersionDatasource } from '../../datasource/rust-version/index.ts';\nimport * as regexVersioning from '../../versioning/regex/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport * as semverPartialVersioning from '../../versioning/semver-partial/index.ts';\nimport type { ToolingConfig } from '../asdf/upgradeable-tooling.ts';\nimport { upgradeableTooling } from '../asdf/upgradeable-tooling.ts';\nimport { MiseRegistryJson } from './schema.ts';\nimport type { MiseRegistryData } from './types.ts';\n\nexport interface ToolingDefinition {\n config: ToolingConfig;\n misePluginUrl?: string;\n}\n\nexport const asdfTooling = upgradeableTooling;\n\nfunction shortJavaVersioning(version: string): { versioning?: string } {\n if (regEx(/^\\d+(\\.\\d+)?$/).test(version)) {\n return { versioning: semverPartialVersioning.id };\n }\n return {};\n}\n\nconst miseCoreTooling: Record<string, ToolingDefinition> = {\n bun: {\n misePluginUrl: 'https://mise.jdx.dev/lang/bun.html',\n config: {\n packageName: 'oven-sh/bun',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^bun-v(?<version>\\\\S+)',\n },\n },\n deno: {\n misePluginUrl: 'https://mise.jdx.dev/lang/deno.html',\n config: {\n packageName: 'denoland/deno',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n elixir: {\n misePluginUrl: 'https://mise.jdx.dev/lang/elixir.html',\n config: {\n datasource: HexpmBobDatasource.id,\n },\n },\n erlang: {\n misePluginUrl: 'https://mise.jdx.dev/lang/erlang.html',\n config: {\n packageName: 'erlang/otp',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^OTP-(?<version>\\\\S+)',\n versioning: `${regexVersioning.id}:^(?<major>\\\\d+?)\\\\.(?<minor>\\\\d+?)(\\\\.(?<patch>\\\\d+))?$`,\n },\n },\n go: {\n misePluginUrl: 'https://mise.jdx.dev/lang/go.html',\n config: {\n packageName: 'golang/go',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^go(?<version>\\\\S+)',\n },\n },\n java: {\n misePluginUrl: 'https://mise.jdx.dev/lang/java.html',\n config: (version) => {\n // no prefix is shorthand for openjdk\n const versionMatch = regEx(/^(\\d\\S+)/).exec(version)?.[1];\n if (versionMatch) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: versionMatch,\n ...shortJavaVersioning(versionMatch),\n };\n }\n const openJdkMatches = regEx(/^openjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (openJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: openJdkMatches.version,\n ...shortJavaVersioning(openJdkMatches.version),\n };\n }\n const adoptOpenJdkMatches = regEx(/^adoptopenjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (adoptOpenJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: adoptOpenJdkMatches.version,\n ...shortJavaVersioning(adoptOpenJdkMatches.version),\n };\n }\n const temurinJdkMatches = regEx(/^temurin-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (temurinJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: temurinJdkMatches.version,\n ...shortJavaVersioning(temurinJdkMatches.version),\n };\n }\n const correttoJdkMatches = regEx(/^corretto-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (correttoJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: correttoJdkMatches.version,\n ...shortJavaVersioning(correttoJdkMatches.version),\n };\n }\n const zuluJdkMatches = regEx(/^zulu-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (zuluJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: zuluJdkMatches.version,\n ...shortJavaVersioning(zuluJdkMatches.version),\n };\n }\n const oracleGraalvmJdkMatches = regEx(\n /^oracle-graalvm-(?<version>\\d\\S+)/,\n ).exec(version)?.groups;\n if (oracleGraalvmJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: oracleGraalvmJdkMatches.version,\n ...shortJavaVersioning(oracleGraalvmJdkMatches.version),\n };\n }\n\n return undefined;\n },\n },\n node: {\n misePluginUrl: 'https://mise.jdx.dev/lang/node.html',\n config: {\n packageName: 'node',\n datasource: NodeVersionDatasource.id,\n },\n },\n python: {\n misePluginUrl: 'https://mise.jdx.dev/lang/python.html',\n config: {\n packageName: 'python/cpython',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ruby: {\n misePluginUrl: 'https://mise.jdx.dev/lang/ruby.html',\n config: {\n packageName: 'ruby-version',\n datasource: RubyVersionDatasource.id,\n versioning: semverVersioning.id,\n },\n },\n rust: {\n misePluginUrl: 'https://mise.jdx.dev/lang/rust.html',\n config: {\n packageName: 'rust',\n datasource: RustVersionDatasource.id,\n },\n },\n swift: {\n misePluginUrl: 'https://mise.jdx.dev/lang/swift.html',\n config: {\n packageName: 'swift-lang/swift',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^swift-(?<version>\\\\S+)',\n },\n },\n zig: {\n misePluginUrl: 'https://mise.jdx.dev/lang/zig.html',\n config: {\n packageName: 'ziglang/zig',\n datasource: GithubTagsDatasource.id,\n },\n },\n};\n\nconst miseRegistryTooling: Record<string, ToolingDefinition> = {\n actionlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rhysd/actionlint',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n astro: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astronomer/astro-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'aws-cli': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubTagsDatasource.id,\n packageName: 'aws/aws-cli',\n },\n },\n 'aws-vault': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubReleasesDatasource.id,\n packageName: '99designs/aws-vault',\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n buf: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'bufbuild/buf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n caddy: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'caddyserver/caddy',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ccache: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'ccache/ccache',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'clang-format': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'llvm/llvm-project',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^llvmorg-(?<version>\\\\S+)',\n },\n },\n committed: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'crate-ci/committed',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n conan: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'conan-io/conan',\n datasource: GithubReleasesDatasource.id,\n },\n },\n consul: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/consul',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n gh: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cli/cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'dotenv-linter': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'dotenv-linter/dotenv-linter',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hivemind: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'DarthSim/hivemind',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hk: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/hk',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n jq: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jqlang/jq',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^jq-(?<version>\\\\S+)',\n },\n },\n kafka: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: (version) => {\n const apacheMatches = regEx(/^apache-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (apacheMatches) {\n return {\n datasource: GithubTagsDatasource.id,\n packageName: 'apache/kafka',\n currentValue: apacheMatches.version,\n };\n }\n\n return undefined;\n },\n },\n lefthook: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'evilmartians/lefthook',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n localstack: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'localstack/localstack',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n lychee: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'lycheeverse/lychee',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^lychee-v(?<version>\\\\S+)',\n },\n },\n npm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'npm',\n datasource: NpmDatasource.id,\n },\n },\n opentofu: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'opentofu/opentofu',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n openfga: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'openfga/openfga',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n packer: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/packer',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pipx: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pypa/pipx',\n datasource: GithubReleasesDatasource.id,\n },\n },\n pkl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'apple/pkl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n prettier: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'prettier/prettier',\n datasource: GithubReleasesDatasource.id,\n },\n },\n protoc: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'protocolbuffers/protobuf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pnpm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pnpm',\n datasource: NpmDatasource.id,\n },\n },\n redis: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'redis/redis',\n datasource: GithubReleasesDatasource.id,\n },\n },\n ruff: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astral-sh/ruff',\n datasource: GithubReleasesDatasource.id,\n },\n },\n rumdl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rvben/rumdl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n shellcheck: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'koalaman/shellcheck',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n skeema: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'skeema/skeema',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sops: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'getsops/sops',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sqlite: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'sqlite/sqlite',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^version-(?<version>\\\\S+)',\n },\n },\n stripe: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'stripe/stripe-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n swiftformat: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'nicklockwood/SwiftFormat',\n datasource: GithubReleasesDatasource.id,\n },\n },\n swiftlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'realm/SwiftLint',\n datasource: GithubReleasesDatasource.id,\n },\n },\n taplo: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tamasfe/taplo',\n datasource: GithubReleasesDatasource.id,\n },\n },\n tart: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cirruslabs/tart',\n datasource: GithubReleasesDatasource.id,\n },\n },\n terragrunt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'gruntwork-io/terragrunt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tilt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tilt-dev/tilt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tusd: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tus/tusd',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n usage: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/usage',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n yarn: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: '@yarnpkg/cli',\n datasource: NpmDatasource.id,\n },\n },\n};\n\nexport const miseTooling: Record<string, ToolingDefinition> = {\n ...miseCoreTooling,\n ...miseRegistryTooling,\n};\n\nexport const parsedMiseRegistry: MiseRegistryData = Object.freeze(\n MiseRegistryJson.parse(miseRegistry),\n);\n\nexport function getOrderedMiseRegistryBackends(\n toolName: string,\n): Record<string, string> {\n return parsedMiseRegistry.tools[toolName] ?? [];\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"upgradeable-tooling.js","names":["semverPartialVersioning.id","regexVersioning.id","semverVersioning.id","miseRegistry"],"sources":["../../../../lib/modules/manager/mise/upgradeable-tooling.ts"],"sourcesContent":["import miseRegistry from '../../../data/mise-registry.json' with { type: 'json' };\nimport { regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexpmBobDatasource } from '../../datasource/hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from '../../datasource/java-version/index.ts';\nimport { NodeVersionDatasource } from '../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RustVersionDatasource } from '../../datasource/rust-version/index.ts';\nimport * as regexVersioning from '../../versioning/regex/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport * as semverPartialVersioning from '../../versioning/semver-partial/index.ts';\nimport { upgradeableTooling } from '../asdf/upgradeable-tooling.ts';\nimport { MiseRegistryJson } from './schema.ts';\nimport type { MiseRegistryData, ToolingDefinition } from './types.ts';\n\nexport const asdfTooling = upgradeableTooling;\n\nfunction shortJavaVersioning(version: string): { versioning?: string } {\n if (regEx(/^\\d+(\\.\\d+)?$/).test(version)) {\n return { versioning: semverPartialVersioning.id };\n }\n return {};\n}\n\nconst miseCoreTooling: Record<string, ToolingDefinition> = {\n bun: {\n misePluginUrl: 'https://mise.jdx.dev/lang/bun.html',\n config: {\n packageName: 'oven-sh/bun',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^bun-v(?<version>\\\\S+)',\n },\n },\n deno: {\n misePluginUrl: 'https://mise.jdx.dev/lang/deno.html',\n config: {\n packageName: 'denoland/deno',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n elixir: {\n misePluginUrl: 'https://mise.jdx.dev/lang/elixir.html',\n config: {\n datasource: HexpmBobDatasource.id,\n },\n },\n erlang: {\n misePluginUrl: 'https://mise.jdx.dev/lang/erlang.html',\n config: {\n packageName: 'erlang/otp',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^OTP-(?<version>\\\\S+)',\n versioning: `${regexVersioning.id}:^(?<major>\\\\d+?)\\\\.(?<minor>\\\\d+?)(\\\\.(?<patch>\\\\d+))?$`,\n },\n },\n go: {\n misePluginUrl: 'https://mise.jdx.dev/lang/go.html',\n config: {\n packageName: 'golang/go',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^go(?<version>\\\\S+)',\n },\n },\n java: {\n misePluginUrl: 'https://mise.jdx.dev/lang/java.html',\n config: (version) => {\n // no prefix is shorthand for openjdk\n const versionMatch = regEx(/^(\\d\\S+)/).exec(version)?.[1];\n if (versionMatch) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: versionMatch,\n ...shortJavaVersioning(versionMatch),\n };\n }\n const openJdkMatches = regEx(/^openjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (openJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: openJdkMatches.version,\n ...shortJavaVersioning(openJdkMatches.version),\n };\n }\n const adoptOpenJdkMatches = regEx(/^adoptopenjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (adoptOpenJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: adoptOpenJdkMatches.version,\n ...shortJavaVersioning(adoptOpenJdkMatches.version),\n };\n }\n const temurinJdkMatches = regEx(/^temurin-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (temurinJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: temurinJdkMatches.version,\n ...shortJavaVersioning(temurinJdkMatches.version),\n };\n }\n const correttoJdkMatches = regEx(/^corretto-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (correttoJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: correttoJdkMatches.version,\n ...shortJavaVersioning(correttoJdkMatches.version),\n };\n }\n const zuluJdkMatches = regEx(/^zulu-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (zuluJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: zuluJdkMatches.version,\n ...shortJavaVersioning(zuluJdkMatches.version),\n };\n }\n const oracleGraalvmJdkMatches = regEx(\n /^oracle-graalvm-(?<version>\\d\\S+)/,\n ).exec(version)?.groups;\n if (oracleGraalvmJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: oracleGraalvmJdkMatches.version,\n ...shortJavaVersioning(oracleGraalvmJdkMatches.version),\n };\n }\n\n return undefined;\n },\n },\n node: {\n misePluginUrl: 'https://mise.jdx.dev/lang/node.html',\n config: {\n packageName: 'node',\n datasource: NodeVersionDatasource.id,\n },\n },\n python: {\n misePluginUrl: 'https://mise.jdx.dev/lang/python.html',\n config: {\n packageName: 'python/cpython',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ruby: {\n misePluginUrl: 'https://mise.jdx.dev/lang/ruby.html',\n config: {\n packageName: 'ruby-version',\n datasource: RubyVersionDatasource.id,\n versioning: semverVersioning.id,\n },\n },\n rust: {\n misePluginUrl: 'https://mise.jdx.dev/lang/rust.html',\n config: {\n packageName: 'rust',\n datasource: RustVersionDatasource.id,\n },\n },\n swift: {\n misePluginUrl: 'https://mise.jdx.dev/lang/swift.html',\n config: {\n packageName: 'swift-lang/swift',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^swift-(?<version>\\\\S+)',\n },\n },\n zig: {\n misePluginUrl: 'https://mise.jdx.dev/lang/zig.html',\n config: {\n packageName: 'ziglang/zig',\n datasource: GithubTagsDatasource.id,\n },\n },\n};\n\nconst miseRegistryTooling: Record<string, ToolingDefinition> = {\n actionlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rhysd/actionlint',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n astro: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astronomer/astro-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'aws-cli': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubTagsDatasource.id,\n packageName: 'aws/aws-cli',\n },\n },\n 'aws-vault': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubReleasesDatasource.id,\n packageName: '99designs/aws-vault',\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n buf: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'bufbuild/buf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n caddy: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'caddyserver/caddy',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ccache: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'ccache/ccache',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'clang-format': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'llvm/llvm-project',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^llvmorg-(?<version>\\\\S+)',\n },\n },\n committed: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'crate-ci/committed',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n conan: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'conan-io/conan',\n datasource: GithubReleasesDatasource.id,\n },\n },\n consul: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/consul',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n gh: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cli/cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'dotenv-linter': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'dotenv-linter/dotenv-linter',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hivemind: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'DarthSim/hivemind',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hk: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/hk',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n jq: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jqlang/jq',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^jq-(?<version>\\\\S+)',\n },\n },\n kafka: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: (version) => {\n const apacheMatches = regEx(/^apache-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (apacheMatches) {\n return {\n datasource: GithubTagsDatasource.id,\n packageName: 'apache/kafka',\n currentValue: apacheMatches.version,\n };\n }\n\n return undefined;\n },\n },\n lefthook: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'evilmartians/lefthook',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n localstack: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'localstack/localstack',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n lychee: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'lycheeverse/lychee',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^lychee-v(?<version>\\\\S+)',\n },\n },\n npm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'npm',\n datasource: NpmDatasource.id,\n },\n },\n opentofu: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'opentofu/opentofu',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n openfga: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'openfga/openfga',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n packer: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/packer',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pipx: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pypa/pipx',\n datasource: GithubReleasesDatasource.id,\n },\n },\n pkl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'apple/pkl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n prettier: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'prettier/prettier',\n datasource: GithubReleasesDatasource.id,\n },\n },\n protoc: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'protocolbuffers/protobuf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pnpm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pnpm',\n datasource: NpmDatasource.id,\n },\n },\n redis: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'redis/redis',\n datasource: GithubReleasesDatasource.id,\n },\n },\n ruff: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astral-sh/ruff',\n datasource: GithubReleasesDatasource.id,\n },\n },\n rumdl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rvben/rumdl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n shellcheck: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'koalaman/shellcheck',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n skeema: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'skeema/skeema',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sops: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'getsops/sops',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sqlite: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'sqlite/sqlite',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^version-(?<version>\\\\S+)',\n },\n },\n stripe: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'stripe/stripe-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n swiftformat: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'nicklockwood/SwiftFormat',\n datasource: GithubReleasesDatasource.id,\n },\n },\n swiftlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'realm/SwiftLint',\n datasource: GithubReleasesDatasource.id,\n },\n },\n taplo: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tamasfe/taplo',\n datasource: GithubReleasesDatasource.id,\n },\n },\n tart: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cirruslabs/tart',\n datasource: GithubReleasesDatasource.id,\n },\n },\n terragrunt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'gruntwork-io/terragrunt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tilt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tilt-dev/tilt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tusd: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tus/tusd',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n usage: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/usage',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n yarn: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: '@yarnpkg/cli',\n datasource: NpmDatasource.id,\n },\n },\n};\n\nexport const miseTooling: Record<string, ToolingDefinition> = {\n ...miseCoreTooling,\n ...miseRegistryTooling,\n};\n\nexport const parsedMiseRegistry: MiseRegistryData = Object.freeze(\n MiseRegistryJson.parse(miseRegistry),\n);\n\nexport function getOrderedMiseRegistryBackends(\n toolName: string,\n): Record<string, string> {\n return parsedMiseRegistry.tools[toolName] ?? [];\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"npmrc.js","names":[],"sources":["../../../../lib/modules/manager/npm/npmrc.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\n\nexport interface NpmrcResult {\n npmrc: string | undefined;\n npmrcFileName: string | null;\n}\n\nexport async function resolveNpmrc(\n packageFile: string,\n config: { npmrc?: string; npmrcMerge?: boolean },\n): Promise<NpmrcResult> {\n let npmrc: string | undefined;\n const npmrcFileName = await findLocalSiblingOrParent(packageFile, '.npmrc');\n if (npmrcFileName) {\n let repoNpmrc = await readLocalFile(npmrcFileName, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(repoNpmrc)) {\n if (isString(config.npmrc) && !config.npmrcMerge) {\n logger.debug(\n { npmrcFileName },\n 'Repo .npmrc file is ignored due to config.npmrc with config.npmrcMerge=false',\n );\n npmrc = config.npmrc;\n } else {\n npmrc = config.npmrc ?? '';\n if (npmrc.length && !npmrc.endsWith('\\n')) {\n npmrc += '\\n';\n }\n if (repoNpmrc?.includes('package-lock')) {\n logger.debug('Stripping package-lock setting from .npmrc');\n repoNpmrc = repoNpmrc.replace(\n regEx(/(^|\\n)package-lock.*?(\\n|$)/g),\n '\\n',\n );\n }\n if (repoNpmrc.includes('=${') && !GlobalConfig.get('exposeAllEnv')) {\n logger.debug(\n { npmrcFileName },\n 'Stripping .npmrc file of lines with variables',\n );\n repoNpmrc = repoNpmrc\n .split(newlineRegex)\n .filter((line) => !line.includes('=${'))\n .join('\\n');\n }\n npmrc += repoNpmrc;\n }\n }\n } else if (isString(config.npmrc)) {\n npmrc = config.npmrc;\n }\n return { npmrc, npmrcFileName };\n}\n"],"mappings":";;;;;;AAcA,eAAsB,aACpB,aACA,QACsB;CACtB,IAAI;CACJ,MAAM,gBAAgB,MAAM,yBAAyB,aAAa,QAAQ;CAC1E,IAAI,eAAe;EACjB,IAAI,YAAY,MAAM,cAAc,eAAe,MAAM;;EAEzD,IAAI,SAAS,SAAS,GAAG;GACvB,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,OAAO,YAAY;IAChD,OAAO,MACL,EAAE,cAAc,GAChB,8EACF;IACA,QAAQ,OAAO;GACjB,OAAO;IACL,QAAQ,OAAO,SAAS;IACxB,IAAI,MAAM,UAAU,CAAC,MAAM,SAAS,IAAI,GACtC,SAAS;IAEX,IAAI,WAAW,SAAS,cAAc,GAAG;KACvC,OAAO,MAAM,4CAA4C;KACzD,YAAY,UAAU,QACpB,MAAM,8BAA8B,GACpC,IACF;IACF;IACA,IAAI,UAAU,SAAS,KAAK,KAAK,CAAC,aAAa,IAAI,cAAc,GAAG;KAClE,OAAO,MACL,EAAE,cAAc,GAChB,+CACF;KACA,YAAY,UACT,MAAM,YAAY,CAAC,CACnB,QAAQ,SAAS,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,CACvC,KAAK,IAAI;IACd;IACA,SAAS;GACX;EACF;CACF,OAAO,IAAI,SAAS,OAAO,KAAK,GAC9B,QAAQ,OAAO;CAEjB,OAAO;EAAE;EAAO;CAAc;AAChC"}
1
+ {"version":3,"file":"npmrc.js","names":[],"sources":["../../../../lib/modules/manager/npm/npmrc.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport type { NpmrcResult } from './types.ts';\n\nexport async function resolveNpmrc(\n packageFile: string,\n config: { npmrc?: string; npmrcMerge?: boolean },\n): Promise<NpmrcResult> {\n let npmrc: string | undefined;\n const npmrcFileName = await findLocalSiblingOrParent(packageFile, '.npmrc');\n if (npmrcFileName) {\n let repoNpmrc = await readLocalFile(npmrcFileName, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isString(repoNpmrc)) {\n if (isString(config.npmrc) && !config.npmrcMerge) {\n logger.debug(\n { npmrcFileName },\n 'Repo .npmrc file is ignored due to config.npmrc with config.npmrcMerge=false',\n );\n npmrc = config.npmrc;\n } else {\n npmrc = config.npmrc ?? '';\n if (npmrc.length && !npmrc.endsWith('\\n')) {\n npmrc += '\\n';\n }\n if (repoNpmrc?.includes('package-lock')) {\n logger.debug('Stripping package-lock setting from .npmrc');\n repoNpmrc = repoNpmrc.replace(\n regEx(/(^|\\n)package-lock.*?(\\n|$)/g),\n '\\n',\n );\n }\n if (repoNpmrc.includes('=${') && !GlobalConfig.get('exposeAllEnv')) {\n logger.debug(\n { npmrcFileName },\n 'Stripping .npmrc file of lines with variables',\n );\n repoNpmrc = repoNpmrc\n .split(newlineRegex)\n .filter((line) => !line.includes('=${'))\n .join('\\n');\n }\n npmrc += repoNpmrc;\n }\n }\n } else if (isString(config.npmrc)) {\n npmrc = config.npmrc;\n }\n return { npmrc, npmrcFileName };\n}\n"],"mappings":";;;;;;AAUA,eAAsB,aACpB,aACA,QACsB;CACtB,IAAI;CACJ,MAAM,gBAAgB,MAAM,yBAAyB,aAAa,QAAQ;CAC1E,IAAI,eAAe;EACjB,IAAI,YAAY,MAAM,cAAc,eAAe,MAAM;;EAEzD,IAAI,SAAS,SAAS,GAAG;GACvB,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC,OAAO,YAAY;IAChD,OAAO,MACL,EAAE,cAAc,GAChB,8EACF;IACA,QAAQ,OAAO;GACjB,OAAO;IACL,QAAQ,OAAO,SAAS;IACxB,IAAI,MAAM,UAAU,CAAC,MAAM,SAAS,IAAI,GACtC,SAAS;IAEX,IAAI,WAAW,SAAS,cAAc,GAAG;KACvC,OAAO,MAAM,4CAA4C;KACzD,YAAY,UAAU,QACpB,MAAM,8BAA8B,GACpC,IACF;IACF;IACA,IAAI,UAAU,SAAS,KAAK,KAAK,CAAC,aAAa,IAAI,cAAc,GAAG;KAClE,OAAO,MACL,EAAE,cAAc,GAChB,+CACF;KACA,YAAY,UACT,MAAM,YAAY,CAAC,CACnB,QAAQ,SAAS,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC,CACvC,KAAK,IAAI;IACd;IACA,SAAS;GACX;EACF;CACF,OAAO,IAAI,SAAS,OAAO,KAAK,GAC9B,QAAQ,OAAO;CAEjB,OAAO;EAAE;EAAO;CAAc;AAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-version.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/node-version.ts"],"sourcesContent":["import semver from 'semver';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport type { ToolConstraint } from '../../../../util/exec/types.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../../util/regex.ts';\nimport type { PostUpdateConfig, Upgrade } from '../../types.ts';\nimport type { LazyPackageJson } from './utils.ts';\n\nasync function getNodeFile(filename: string): Promise<string | null> {\n try {\n // TODO #22198\n const constraint = (await readLocalFile(filename, 'utf8'))!\n .split(newlineRegex)[0]\n .replace(regEx(/^v/), '');\n if (semver.validRange(constraint)) {\n logger.debug(`Using node constraint \"${constraint}\" from ${filename}`);\n return constraint;\n }\n } catch {\n // do nothing\n }\n return null;\n}\n\nasync function getPackageJsonConstraint(\n pkg: LazyPackageJson,\n): Promise<string | null> {\n const pkgJson = await pkg.getValue();\n if (pkgJson.volta?.node) {\n const constraint = pkgJson.volta.node;\n // v8 ignore else -- TODO: add test #40625\n if (semver.validRange(constraint)) {\n logger.debug(\n `Using node constraint \"${constraint}\" from package.json volta`,\n );\n return constraint;\n }\n }\n if (pkgJson.engines?.node) {\n const constraint = pkgJson.engines.node;\n // v8 ignore else -- TODO: add test #40625\n if (semver.validRange(constraint)) {\n logger.debug(\n `Using node constraint \"${constraint}\" from package.json engines`,\n );\n return constraint;\n }\n }\n return null;\n}\n\n// export only for testing\nexport async function getNodeConstraint(\n config: Partial<PostUpdateConfig>,\n upgrades: Upgrade[],\n lockFileDir: string,\n pkg: LazyPackageJson,\n): Promise<string | null> {\n const constraint =\n getNodeUpdate(upgrades) ??\n config.constraints?.node ??\n (await getNodeFile(upath.join(lockFileDir, '.nvmrc'))) ??\n (await getNodeFile(upath.join(lockFileDir, '.node-version'))) ??\n (await getPackageJsonConstraint(pkg));\n if (!constraint) {\n logger.debug('No node constraint found - using latest');\n }\n return constraint;\n}\n\nexport function getNodeUpdate(upgrades: Upgrade[]): string | undefined {\n return upgrades.find((u) => u.depName === 'node')?.newValue;\n}\n\nexport async function getNodeToolConstraint(\n config: Partial<PostUpdateConfig>,\n upgrades: Upgrade[],\n lockFileDir: string,\n pkg: LazyPackageJson,\n): Promise<ToolConstraint> {\n const constraint = await getNodeConstraint(\n config,\n upgrades,\n lockFileDir,\n pkg,\n );\n\n return {\n toolName: 'node',\n constraint,\n };\n}\n"],"mappings":";;;;;;AASA,eAAe,YAAY,UAA0C;CACnE,IAAI;EAEF,MAAM,cAAc,MAAM,cAAc,UAAU,MAAM,EAAA,CACrD,MAAM,YAAY,CAAC,CAAC,EAAE,CACtB,QAAQ,MAAM,IAAI,GAAG,EAAE;EAC1B,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MAAM,0BAA0B,WAAW,SAAS,UAAU;GACrE,OAAO;EACT;CACF,QAAQ,CAER;CACA,OAAO;AACT;AAEA,eAAe,yBACb,KACwB;CACxB,MAAM,UAAU,MAAM,IAAI,SAAS;CACnC,IAAI,QAAQ,OAAO,MAAM;EACvB,MAAM,aAAa,QAAQ,MAAM;;EAEjC,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MACL,0BAA0B,WAAW,0BACvC;GACA,OAAO;EACT;CACF;CACA,IAAI,QAAQ,SAAS,MAAM;EACzB,MAAM,aAAa,QAAQ,QAAQ;;EAEnC,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MACL,0BAA0B,WAAW,4BACvC;GACA,OAAO;EACT;CACF;CACA,OAAO;AACT;AAGA,eAAsB,kBACpB,QACA,UACA,aACA,KACwB;CACxB,MAAM,aACJ,cAAc,QAAQ,KACtB,OAAO,aAAa,QACnB,MAAM,YAAY,MAAM,KAAK,aAAa,QAAQ,CAAC,KACnD,MAAM,YAAY,MAAM,KAAK,aAAa,eAAe,CAAC,KAC1D,MAAM,yBAAyB,GAAG;CACrC,IAAI,CAAC,YACH,OAAO,MAAM,yCAAyC;CAExD,OAAO;AACT;AAEA,SAAgB,cAAc,UAAyC;CACrE,OAAO,SAAS,MAAM,MAAM,EAAE,YAAY,MAAM,CAAC,EAAE;AACrD;AAEA,eAAsB,sBACpB,QACA,UACA,aACA,KACyB;CAQzB,OAAO;EACL,UAAU;EACV,YAAA,MATuB,kBACvB,QACA,UACA,aACA,GACF;CAKA;AACF"}
1
+ {"version":3,"file":"node-version.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/node-version.ts"],"sourcesContent":["import semver from 'semver';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport type { ToolConstraint } from '../../../../util/exec/types.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../../util/regex.ts';\nimport type { PostUpdateConfig, Upgrade } from '../../types.ts';\nimport type { LazyPackageJson } from './types.ts';\n\nasync function getNodeFile(filename: string): Promise<string | null> {\n try {\n // TODO #22198\n const constraint = (await readLocalFile(filename, 'utf8'))!\n .split(newlineRegex)[0]\n .replace(regEx(/^v/), '');\n if (semver.validRange(constraint)) {\n logger.debug(`Using node constraint \"${constraint}\" from ${filename}`);\n return constraint;\n }\n } catch {\n // do nothing\n }\n return null;\n}\n\nasync function getPackageJsonConstraint(\n pkg: LazyPackageJson,\n): Promise<string | null> {\n const pkgJson = await pkg.getValue();\n if (pkgJson.volta?.node) {\n const constraint = pkgJson.volta.node;\n // v8 ignore else -- TODO: add test #40625\n if (semver.validRange(constraint)) {\n logger.debug(\n `Using node constraint \"${constraint}\" from package.json volta`,\n );\n return constraint;\n }\n }\n if (pkgJson.engines?.node) {\n const constraint = pkgJson.engines.node;\n // v8 ignore else -- TODO: add test #40625\n if (semver.validRange(constraint)) {\n logger.debug(\n `Using node constraint \"${constraint}\" from package.json engines`,\n );\n return constraint;\n }\n }\n return null;\n}\n\n// export only for testing\nexport async function getNodeConstraint(\n config: Partial<PostUpdateConfig>,\n upgrades: Upgrade[],\n lockFileDir: string,\n pkg: LazyPackageJson,\n): Promise<string | null> {\n const constraint =\n getNodeUpdate(upgrades) ??\n config.constraints?.node ??\n (await getNodeFile(upath.join(lockFileDir, '.nvmrc'))) ??\n (await getNodeFile(upath.join(lockFileDir, '.node-version'))) ??\n (await getPackageJsonConstraint(pkg));\n if (!constraint) {\n logger.debug('No node constraint found - using latest');\n }\n return constraint;\n}\n\nexport function getNodeUpdate(upgrades: Upgrade[]): string | undefined {\n return upgrades.find((u) => u.depName === 'node')?.newValue;\n}\n\nexport async function getNodeToolConstraint(\n config: Partial<PostUpdateConfig>,\n upgrades: Upgrade[],\n lockFileDir: string,\n pkg: LazyPackageJson,\n): Promise<ToolConstraint> {\n const constraint = await getNodeConstraint(\n config,\n upgrades,\n lockFileDir,\n pkg,\n );\n\n return {\n toolName: 'node',\n constraint,\n };\n}\n"],"mappings":";;;;;;AASA,eAAe,YAAY,UAA0C;CACnE,IAAI;EAEF,MAAM,cAAc,MAAM,cAAc,UAAU,MAAM,EAAA,CACrD,MAAM,YAAY,CAAC,CAAC,EAAE,CACtB,QAAQ,MAAM,IAAI,GAAG,EAAE;EAC1B,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MAAM,0BAA0B,WAAW,SAAS,UAAU;GACrE,OAAO;EACT;CACF,QAAQ,CAER;CACA,OAAO;AACT;AAEA,eAAe,yBACb,KACwB;CACxB,MAAM,UAAU,MAAM,IAAI,SAAS;CACnC,IAAI,QAAQ,OAAO,MAAM;EACvB,MAAM,aAAa,QAAQ,MAAM;;EAEjC,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MACL,0BAA0B,WAAW,0BACvC;GACA,OAAO;EACT;CACF;CACA,IAAI,QAAQ,SAAS,MAAM;EACzB,MAAM,aAAa,QAAQ,QAAQ;;EAEnC,IAAI,OAAO,WAAW,UAAU,GAAG;GACjC,OAAO,MACL,0BAA0B,WAAW,4BACvC;GACA,OAAO;EACT;CACF;CACA,OAAO;AACT;AAGA,eAAsB,kBACpB,QACA,UACA,aACA,KACwB;CACxB,MAAM,aACJ,cAAc,QAAQ,KACtB,OAAO,aAAa,QACnB,MAAM,YAAY,MAAM,KAAK,aAAa,QAAQ,CAAC,KACnD,MAAM,YAAY,MAAM,KAAK,aAAa,eAAe,CAAC,KAC1D,MAAM,yBAAyB,GAAG;CACrC,IAAI,CAAC,YACH,OAAO,MAAM,yCAAyC;CAExD,OAAO;AACT;AAEA,SAAgB,cAAc,UAAyC;CACrE,OAAO,SAAS,MAAM,MAAM,EAAE,YAAY,MAAM,CAAC,EAAE;AACrD;AAEA,eAAsB,sBACpB,QACA,UACA,aACA,KACyB;CAQzB,OAAO;EACL,UAAU;EACV,YAAA,MATuB,kBACvB,QACA,UACA,aACA,GACF;CAKA;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"npm.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/npm.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { isNonEmptyString, isNumber, isString } from '@sindresorhus/is';\nimport ini from 'ini';\nimport { DateTime } from 'luxon';\nimport semver from 'semver';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport {\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { exec, getToolSettingsOptions } from '../../../../util/exec/index.ts';\nimport type {\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n localPathExists,\n readLocalFile,\n renameLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { minimatch } from '../../../../util/minimatch.ts';\nimport { toMs } from '../../../../util/pretty-time.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { trimSlashes } from '../../../../util/url.ts';\nimport type { PostUpdateConfig, Upgrade } from '../../types.ts';\nimport { PackageLock } from '../schema.ts';\nimport { composeLockFile, parseLockFile } from '../utils.ts';\nimport { getNodeToolConstraint } from './node-version.ts';\nimport type { GenerateLockFileResult } from './types.ts';\nimport {\n getNodeOptions,\n getPackageManagerVersion,\n lazyLoadPackageJson,\n} from './utils.ts';\n\nexport interface NpmrcCooldownResult {\n date: DateTime<true>;\n source: 'before' | 'min-release-age';\n}\n\nexport function parseNpmrcCooldownDate(\n npmrcContent: string | null,\n): NpmrcCooldownResult | null {\n if (!npmrcContent) {\n return null;\n }\n\n const parsed = ini.parse(npmrcContent);\n\n const before = parsed.before;\n if (isNonEmptyString(before)) {\n const dt = DateTime.fromISO(before, { zone: 'utc' });\n if (dt.isValid) {\n return { date: dt, source: 'before' };\n }\n logger.debug(`Invalid before date in .npmrc: ${before}, ignoring`);\n }\n\n const minReleaseAge = parsed['min-release-age'];\n if (isNonEmptyString(minReleaseAge)) {\n const days = parseInt(minReleaseAge, 10);\n if (isNumber(days) && days >= 0) {\n return {\n date: DateTime.now().minus({ days }).toUTC(),\n source: 'min-release-age',\n };\n }\n logger.debug(\n `Invalid min-release-age in .npmrc: ${minReleaseAge}, ignoring`,\n );\n }\n\n return null;\n}\n\nasync function getNpmConstraintFromPackageLock(\n lockFileDir: string,\n filename: string,\n): Promise<string | null> {\n const packageLockFileName = upath.join(lockFileDir, filename);\n const packageLockContents = await readLocalFile(packageLockFileName, 'utf8');\n const packageLockJson = Result.parse(\n packageLockContents,\n PackageLock,\n ).unwrapOrNull();\n if (!packageLockJson) {\n logger.debug(`Could not parse ${packageLockFileName}`);\n return null;\n }\n const { lockfileVersion } = packageLockJson;\n if (lockfileVersion === 1) {\n logger.debug(`Using npm constraint <7 for lockfileVersion=1`);\n return `<7`;\n }\n if (lockfileVersion === 2) {\n logger.debug(`Using npm constraint <9 for lockfileVersion=2`);\n return `<9`;\n }\n return null;\n}\n\nexport async function generateLockFile(\n lockFileDir: string,\n env: NodeJS.ProcessEnv,\n filename: string,\n config: Partial<PostUpdateConfig> = {},\n upgrades: Upgrade[] = [],\n npmrcContent: string | null = null,\n): Promise<GenerateLockFileResult> {\n // TODO: don't assume package-lock.json is in the same directory\n const lockFileName = upath.join(lockFileDir, filename);\n\n logger.debug(`Spawning npm install to create ${lockFileDir}/${filename}`);\n const { skipInstalls, postUpdateOptions } = config;\n\n let lockFile: string | null = null;\n let beforeFallback = false;\n try {\n const lazyPkgJson = lazyLoadPackageJson(lockFileDir);\n const npmToolConstraint: ToolConstraint = {\n toolName: 'npm',\n constraint:\n config.constraints?.npm ??\n getPackageManagerVersion('npm', await lazyPkgJson.getValue()) ??\n (await getNpmConstraintFromPackageLock(lockFileDir, filename)) ??\n null,\n };\n const supportsPreferDedupeFlag =\n !npmToolConstraint.constraint ||\n semver.intersects('>=7.0.0', npmToolConstraint.constraint);\n let commands: string[] = [];\n let cmdOptions = '';\n if (\n (postUpdateOptions?.includes('npmDedupe') === true &&\n !supportsPreferDedupeFlag) ||\n skipInstalls === false\n ) {\n logger.debug('Performing node_modules install');\n cmdOptions += '--no-audit';\n } else {\n logger.debug('Updating lock file only');\n cmdOptions += '--package-lock-only --no-audit';\n }\n\n if (postUpdateOptions?.includes('npmDedupe') && supportsPreferDedupeFlag) {\n logger.debug('Deduplicate dependencies on installation');\n cmdOptions += ' --prefer-dedupe';\n }\n\n if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) {\n cmdOptions += ' --ignore-scripts';\n }\n\n let beforeFlag = '';\n if (config.minimumReleaseAge) {\n const ms = toMs(config.minimumReleaseAge);\n if (ms === null) {\n logger.debug(\n {\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Invalid minimumReleaseAge, skipping --before for npm install',\n );\n } else {\n const npmrcCooldown = parseNpmrcCooldownDate(npmrcContent);\n\n // npm rejects --before when min-release-age is set in .npmrc,\n // so let the .npmrc handle cooldown natively in that case\n if (npmrcCooldown?.source === 'min-release-age') {\n logger.debug(\n {\n npmrcMinReleaseAge: npmrcCooldown.date.toISO(),\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Skipping --before flag because .npmrc already contains min-release-age',\n );\n } else {\n let beforeDate = DateTime.now().minus(ms).toUTC();\n\n if (npmrcCooldown && npmrcCooldown.date < beforeDate) {\n logger.debug(\n {\n npmrcDate: npmrcCooldown.date.toISO(),\n beforeDate: beforeDate.toISO(),\n },\n 'Using stricter .npmrc cooldown date over minimumReleaseAge date',\n );\n beforeDate = npmrcCooldown.date;\n }\n\n const beforeISO = beforeDate.toISO();\n logger.debug(\n {\n beforeISO,\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Setting npm --before based on minimumReleaseAge',\n );\n beforeFlag = ` --before=${beforeISO}`;\n }\n }\n }\n\n const extraEnv: ExtraEnv = {\n NPM_CONFIG_CACHE: env.NPM_CONFIG_CACHE,\n npm_config_store: env.npm_config_store,\n };\n\n const { nodeMaxMemory } = getToolSettingsOptions(config.toolSettings);\n if (nodeMaxMemory) {\n extraEnv.NODE_OPTIONS = getNodeOptions(nodeMaxMemory);\n }\n\n const execOptions: ExecOptions = {\n cwdFile: lockFileName,\n extraEnv,\n toolConstraints: [\n await getNodeToolConstraint(config, upgrades, lockFileDir, lazyPkgJson),\n ...(isNonEmptyString(npmToolConstraint.constraint)\n ? [npmToolConstraint]\n : []),\n ],\n docker: {},\n };\n /* v8 ignore next -- needs test */\n if (GlobalConfig.get('exposeAllEnv')) {\n extraEnv.NPM_AUTH = env.NPM_AUTH;\n extraEnv.NPM_EMAIL = env.NPM_EMAIL;\n }\n\n if (!upgrades.every((upgrade) => upgrade.isLockfileUpdate)) {\n // This command updates the lock file based on package.json\n commands.push(`npm install ${cmdOptions}${beforeFlag}`.trim());\n }\n\n // rangeStrategy = update-lockfile\n const lockUpdates = upgrades.filter((upgrade) => upgrade.isLockfileUpdate);\n\n // divide the deps in two categories: workspace and root\n const { lockRootUpdates, lockWorkspacesUpdates, workspaces, rootDeps } =\n divideWorkspaceAndRootDeps(lockFileDir, lockUpdates);\n\n if (workspaces.size && lockWorkspacesUpdates.length) {\n logger.debug('Performing lockfileUpdate (npm-workspaces)');\n for (const workspace of workspaces) {\n const currentWorkspaceUpdates = lockWorkspacesUpdates\n .filter((update) => update.workspace === workspace)\n .map((update) => update.managerData?.packageKey)\n .filter((packageKey) => !rootDeps.has(packageKey));\n\n // v8 ignore else -- TODO: add test #40625\n if (currentWorkspaceUpdates.length) {\n const updateCmd = `npm install ${cmdOptions}${beforeFlag} --workspace=${quote(workspace)} ${currentWorkspaceUpdates\n .map(quote)\n .join(' ')}`;\n commands.push(updateCmd);\n }\n }\n }\n\n if (lockRootUpdates.length) {\n logger.debug('Performing lockfileUpdate (npm)');\n const updateCmd = `npm install ${cmdOptions}${beforeFlag} ${lockRootUpdates\n .map((update) => update.managerData?.packageKey)\n .map(quote)\n .join(' ')}`;\n commands.push(updateCmd);\n }\n\n if (upgrades.some((upgrade) => upgrade.isRemediation)) {\n // We need to run twice to get the correct lock file\n commands.push(`npm install ${cmdOptions}${beforeFlag}`.trim());\n }\n\n // postUpdateOptions\n if (\n config.postUpdateOptions?.includes('npmDedupe') &&\n !supportsPreferDedupeFlag\n ) {\n logger.debug('Performing npm dedupe after installation');\n commands.push('npm dedupe');\n }\n\n if (upgrades.find((upgrade) => upgrade.isLockFileMaintenance)) {\n logger.debug(\n `Removing ${lockFileName} first due to lock file maintenance upgrade`,\n );\n try {\n await deleteLocalFile(lockFileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug(\n { err, lockFileName },\n 'Error removing `package-lock.json` for lock file maintenance',\n );\n }\n }\n\n if (postUpdateOptions?.includes('npmInstallTwice')) {\n logger.debug('Running npm install twice');\n // Run the install command twice to ensure the lock file is up to date\n // iterate through commands and if any command starts with `npm install`, add it again\n const existingCommands = [...commands];\n commands = [];\n for (const command of existingCommands) {\n commands.push(command);\n // v8 ignore else -- TODO: add test #40625\n if (command.startsWith('npm install')) {\n commands.push(command);\n }\n }\n }\n\n // Run the commands, retrying without --before on ETARGET if needed\n await exec(commands, execOptions).catch(async (err) => {\n if (beforeFlag && err.stderr?.includes('with a date before')) {\n logger.debug('npm --before caused ETARGET, retrying without --before');\n const commandsWithoutBefore = commands.map((cmd) =>\n cmd.replace(beforeFlag, ''),\n );\n beforeFallback = true;\n return exec(commandsWithoutBefore, execOptions);\n }\n throw err;\n });\n\n // massage to shrinkwrap if necessary\n if (\n filename === 'npm-shrinkwrap.json' &&\n (await localPathExists(upath.join(lockFileDir, 'package-lock.json')))\n ) {\n await renameLocalFile(\n upath.join(lockFileDir, 'package-lock.json'),\n upath.join(lockFileDir, 'npm-shrinkwrap.json'),\n );\n }\n\n // Read the result\n // TODO #22198\n lockFile = (await readLocalFile(\n upath.join(lockFileDir, filename),\n 'utf8',\n ))!;\n\n // Massage lockfile counterparts of package.json that were modified\n // because npm install was called with an explicit version for rangeStrategy=update-lockfile\n if (lockUpdates.length) {\n const { detectedIndent, lockFileParsed } = parseLockFile(lockFile);\n if (\n lockFileParsed?.lockfileVersion === 2 ||\n lockFileParsed?.lockfileVersion === 3\n ) {\n lockUpdates.forEach((lockUpdate) => {\n const depType = lockUpdate.depType as\n | 'dependencies'\n | 'optionalDependencies';\n\n // TODO #22198\n // v8 ignore else -- TODO: add test #40625\n if (\n lockFileParsed.packages?.['']?.[depType]?.[lockUpdate.packageName!]\n ) {\n lockFileParsed.packages[''][depType][lockUpdate.packageName!] =\n lockUpdate.newValue!;\n }\n });\n lockFile = composeLockFile(lockFileParsed, detectedIndent);\n }\n }\n } catch (err) {\n // v8 ignore if -- TODO: add test #40625\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug(\n {\n err,\n type: 'npm',\n },\n 'lock file error',\n );\n // v8 ignore if -- TODO: add test #40625\n if (err.stderr?.includes('ENOSPC: no space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n return { error: true, stderr: err.stderr };\n }\n return { error: !lockFile, lockFile, beforeFallback };\n}\n\nexport function divideWorkspaceAndRootDeps(\n lockFileDir: string,\n lockUpdates: Upgrade[],\n): {\n lockRootUpdates: Upgrade[];\n lockWorkspacesUpdates: Upgrade[];\n workspaces: Set<string>;\n rootDeps: Set<string>;\n} {\n const lockRootUpdates: Upgrade[] = []; // stores all upgrades which are present in root package.json\n const lockWorkspacesUpdates: Upgrade[] = []; // stores all upgrades which are present in workspaces package.json\n const workspaces = new Set<string>(); // name of all workspaces\n const rootDeps = new Set<string>(); // packageName of all upgrades in root package.json (makes it check duplicate deps in root)\n\n // divide the deps in two categories: workspace and root\n for (const upgrade of lockUpdates) {\n upgrade.managerData ??= {};\n upgrade.managerData.packageKey = generatePackageKey(\n upgrade.packageName!,\n upgrade.newVersion!,\n );\n if (\n upgrade.managerData.workspacesPackages?.length &&\n isString(upgrade.packageFile)\n ) {\n const workspacePatterns = upgrade.managerData.workspacesPackages; // glob pattern or directory name/path\n const packageFileDir = trimSlashes(\n upgrade.packageFile.replace('package.json', ''),\n );\n\n // workspaceDir = packageFileDir - lockFileDir\n const workspaceDir = trimSlashes(\n packageFileDir.startsWith(lockFileDir)\n ? packageFileDir.slice(lockFileDir.length)\n : packageFileDir,\n );\n\n if (isNonEmptyString(workspaceDir)) {\n let workspaceName: string | undefined;\n // compare workspaceDir to workspace patterns\n // stop when the first match is found and\n // add workspaceDir to workspaces set and upgrade object\n for (const workspacePattern of workspacePatterns) {\n const massagedPattern = (workspacePattern as string).replace(\n regEx(/^\\.\\//),\n '',\n );\n if (minimatch(massagedPattern).match(workspaceDir)) {\n workspaceName = workspaceDir;\n break;\n }\n }\n if (workspaceName) {\n // v8 ignore else -- TODO: add test #40625\n if (\n !rootDeps.has(upgrade.managerData.packageKey) // prevent same dep from existing in root and workspace\n ) {\n workspaces.add(workspaceName);\n upgrade.workspace = workspaceName;\n lockWorkspacesUpdates.push(upgrade);\n }\n } else {\n logger.warn(\n { workspacePatterns, workspaceDir },\n 'workspaceDir not found',\n );\n }\n continue;\n }\n }\n lockRootUpdates.push(upgrade);\n rootDeps.add(upgrade.managerData.packageKey);\n }\n\n return { lockRootUpdates, lockWorkspacesUpdates, workspaces, rootDeps };\n}\n\nfunction generatePackageKey(packageName: string, version: string): string {\n return `${packageName}@${version}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"npm.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/npm.ts"],"sourcesContent":["// TODO: types (#22198)\nimport { isNonEmptyString, isNumber, isString } from '@sindresorhus/is';\nimport ini from 'ini';\nimport { DateTime } from 'luxon';\nimport semver from 'semver';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport {\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { exec, getToolSettingsOptions } from '../../../../util/exec/index.ts';\nimport type {\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n localPathExists,\n readLocalFile,\n renameLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { minimatch } from '../../../../util/minimatch.ts';\nimport { toMs } from '../../../../util/pretty-time.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { trimSlashes } from '../../../../util/url.ts';\nimport type { PostUpdateConfig, Upgrade } from '../../types.ts';\nimport { PackageLock } from '../schema.ts';\nimport { composeLockFile, parseLockFile } from '../utils.ts';\nimport { getNodeToolConstraint } from './node-version.ts';\nimport type { GenerateLockFileResult, NpmrcCooldownResult } from './types.ts';\nimport {\n getNodeOptions,\n getPackageManagerVersion,\n lazyLoadPackageJson,\n} from './utils.ts';\n\nexport function parseNpmrcCooldownDate(\n npmrcContent: string | null,\n): NpmrcCooldownResult | null {\n if (!npmrcContent) {\n return null;\n }\n\n const parsed = ini.parse(npmrcContent);\n\n const before = parsed.before;\n if (isNonEmptyString(before)) {\n const dt = DateTime.fromISO(before, { zone: 'utc' });\n if (dt.isValid) {\n return { date: dt, source: 'before' };\n }\n logger.debug(`Invalid before date in .npmrc: ${before}, ignoring`);\n }\n\n const minReleaseAge = parsed['min-release-age'];\n if (isNonEmptyString(minReleaseAge)) {\n const days = parseInt(minReleaseAge, 10);\n if (isNumber(days) && days >= 0) {\n return {\n date: DateTime.now().minus({ days }).toUTC(),\n source: 'min-release-age',\n };\n }\n logger.debug(\n `Invalid min-release-age in .npmrc: ${minReleaseAge}, ignoring`,\n );\n }\n\n return null;\n}\n\nasync function getNpmConstraintFromPackageLock(\n lockFileDir: string,\n filename: string,\n): Promise<string | null> {\n const packageLockFileName = upath.join(lockFileDir, filename);\n const packageLockContents = await readLocalFile(packageLockFileName, 'utf8');\n const packageLockJson = Result.parse(\n packageLockContents,\n PackageLock,\n ).unwrapOrNull();\n if (!packageLockJson) {\n logger.debug(`Could not parse ${packageLockFileName}`);\n return null;\n }\n const { lockfileVersion } = packageLockJson;\n if (lockfileVersion === 1) {\n logger.debug(`Using npm constraint <7 for lockfileVersion=1`);\n return `<7`;\n }\n if (lockfileVersion === 2) {\n logger.debug(`Using npm constraint <9 for lockfileVersion=2`);\n return `<9`;\n }\n return null;\n}\n\nexport async function generateLockFile(\n lockFileDir: string,\n env: NodeJS.ProcessEnv,\n filename: string,\n config: Partial<PostUpdateConfig> = {},\n upgrades: Upgrade[] = [],\n npmrcContent: string | null = null,\n): Promise<GenerateLockFileResult> {\n // TODO: don't assume package-lock.json is in the same directory\n const lockFileName = upath.join(lockFileDir, filename);\n\n logger.debug(`Spawning npm install to create ${lockFileDir}/${filename}`);\n const { skipInstalls, postUpdateOptions } = config;\n\n let lockFile: string | null = null;\n let beforeFallback = false;\n try {\n const lazyPkgJson = lazyLoadPackageJson(lockFileDir);\n const npmToolConstraint: ToolConstraint = {\n toolName: 'npm',\n constraint:\n config.constraints?.npm ??\n getPackageManagerVersion('npm', await lazyPkgJson.getValue()) ??\n (await getNpmConstraintFromPackageLock(lockFileDir, filename)) ??\n null,\n };\n const supportsPreferDedupeFlag =\n !npmToolConstraint.constraint ||\n semver.intersects('>=7.0.0', npmToolConstraint.constraint);\n let commands: string[] = [];\n let cmdOptions = '';\n if (\n (postUpdateOptions?.includes('npmDedupe') === true &&\n !supportsPreferDedupeFlag) ||\n skipInstalls === false\n ) {\n logger.debug('Performing node_modules install');\n cmdOptions += '--no-audit';\n } else {\n logger.debug('Updating lock file only');\n cmdOptions += '--package-lock-only --no-audit';\n }\n\n if (postUpdateOptions?.includes('npmDedupe') && supportsPreferDedupeFlag) {\n logger.debug('Deduplicate dependencies on installation');\n cmdOptions += ' --prefer-dedupe';\n }\n\n if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) {\n cmdOptions += ' --ignore-scripts';\n }\n\n let beforeFlag = '';\n if (config.minimumReleaseAge) {\n const ms = toMs(config.minimumReleaseAge);\n if (ms === null) {\n logger.debug(\n {\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Invalid minimumReleaseAge, skipping --before for npm install',\n );\n } else {\n const npmrcCooldown = parseNpmrcCooldownDate(npmrcContent);\n\n // npm rejects --before when min-release-age is set in .npmrc,\n // so let the .npmrc handle cooldown natively in that case\n if (npmrcCooldown?.source === 'min-release-age') {\n logger.debug(\n {\n npmrcMinReleaseAge: npmrcCooldown.date.toISO(),\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Skipping --before flag because .npmrc already contains min-release-age',\n );\n } else {\n let beforeDate = DateTime.now().minus(ms).toUTC();\n\n if (npmrcCooldown && npmrcCooldown.date < beforeDate) {\n logger.debug(\n {\n npmrcDate: npmrcCooldown.date.toISO(),\n beforeDate: beforeDate.toISO(),\n },\n 'Using stricter .npmrc cooldown date over minimumReleaseAge date',\n );\n beforeDate = npmrcCooldown.date;\n }\n\n const beforeISO = beforeDate.toISO();\n logger.debug(\n {\n beforeISO,\n minimumReleaseAge: config.minimumReleaseAge,\n },\n 'Setting npm --before based on minimumReleaseAge',\n );\n beforeFlag = ` --before=${beforeISO}`;\n }\n }\n }\n\n const extraEnv: ExtraEnv = {\n NPM_CONFIG_CACHE: env.NPM_CONFIG_CACHE,\n npm_config_store: env.npm_config_store,\n };\n\n const { nodeMaxMemory } = getToolSettingsOptions(config.toolSettings);\n if (nodeMaxMemory) {\n extraEnv.NODE_OPTIONS = getNodeOptions(nodeMaxMemory);\n }\n\n const execOptions: ExecOptions = {\n cwdFile: lockFileName,\n extraEnv,\n toolConstraints: [\n await getNodeToolConstraint(config, upgrades, lockFileDir, lazyPkgJson),\n ...(isNonEmptyString(npmToolConstraint.constraint)\n ? [npmToolConstraint]\n : []),\n ],\n docker: {},\n };\n /* v8 ignore next -- needs test */\n if (GlobalConfig.get('exposeAllEnv')) {\n extraEnv.NPM_AUTH = env.NPM_AUTH;\n extraEnv.NPM_EMAIL = env.NPM_EMAIL;\n }\n\n if (!upgrades.every((upgrade) => upgrade.isLockfileUpdate)) {\n // This command updates the lock file based on package.json\n commands.push(`npm install ${cmdOptions}${beforeFlag}`.trim());\n }\n\n // rangeStrategy = update-lockfile\n const lockUpdates = upgrades.filter((upgrade) => upgrade.isLockfileUpdate);\n\n // divide the deps in two categories: workspace and root\n const { lockRootUpdates, lockWorkspacesUpdates, workspaces, rootDeps } =\n divideWorkspaceAndRootDeps(lockFileDir, lockUpdates);\n\n if (workspaces.size && lockWorkspacesUpdates.length) {\n logger.debug('Performing lockfileUpdate (npm-workspaces)');\n for (const workspace of workspaces) {\n const currentWorkspaceUpdates = lockWorkspacesUpdates\n .filter((update) => update.workspace === workspace)\n .map((update) => update.managerData?.packageKey)\n .filter((packageKey) => !rootDeps.has(packageKey));\n\n // v8 ignore else -- TODO: add test #40625\n if (currentWorkspaceUpdates.length) {\n const updateCmd = `npm install ${cmdOptions}${beforeFlag} --workspace=${quote(workspace)} ${currentWorkspaceUpdates\n .map(quote)\n .join(' ')}`;\n commands.push(updateCmd);\n }\n }\n }\n\n if (lockRootUpdates.length) {\n logger.debug('Performing lockfileUpdate (npm)');\n const updateCmd = `npm install ${cmdOptions}${beforeFlag} ${lockRootUpdates\n .map((update) => update.managerData?.packageKey)\n .map(quote)\n .join(' ')}`;\n commands.push(updateCmd);\n }\n\n if (upgrades.some((upgrade) => upgrade.isRemediation)) {\n // We need to run twice to get the correct lock file\n commands.push(`npm install ${cmdOptions}${beforeFlag}`.trim());\n }\n\n // postUpdateOptions\n if (\n config.postUpdateOptions?.includes('npmDedupe') &&\n !supportsPreferDedupeFlag\n ) {\n logger.debug('Performing npm dedupe after installation');\n commands.push('npm dedupe');\n }\n\n if (upgrades.find((upgrade) => upgrade.isLockFileMaintenance)) {\n logger.debug(\n `Removing ${lockFileName} first due to lock file maintenance upgrade`,\n );\n try {\n await deleteLocalFile(lockFileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug(\n { err, lockFileName },\n 'Error removing `package-lock.json` for lock file maintenance',\n );\n }\n }\n\n if (postUpdateOptions?.includes('npmInstallTwice')) {\n logger.debug('Running npm install twice');\n // Run the install command twice to ensure the lock file is up to date\n // iterate through commands and if any command starts with `npm install`, add it again\n const existingCommands = [...commands];\n commands = [];\n for (const command of existingCommands) {\n commands.push(command);\n // v8 ignore else -- TODO: add test #40625\n if (command.startsWith('npm install')) {\n commands.push(command);\n }\n }\n }\n\n // Run the commands, retrying without --before on ETARGET if needed\n await exec(commands, execOptions).catch(async (err) => {\n if (beforeFlag && err.stderr?.includes('with a date before')) {\n logger.debug('npm --before caused ETARGET, retrying without --before');\n const commandsWithoutBefore = commands.map((cmd) =>\n cmd.replace(beforeFlag, ''),\n );\n beforeFallback = true;\n return exec(commandsWithoutBefore, execOptions);\n }\n throw err;\n });\n\n // massage to shrinkwrap if necessary\n if (\n filename === 'npm-shrinkwrap.json' &&\n (await localPathExists(upath.join(lockFileDir, 'package-lock.json')))\n ) {\n await renameLocalFile(\n upath.join(lockFileDir, 'package-lock.json'),\n upath.join(lockFileDir, 'npm-shrinkwrap.json'),\n );\n }\n\n // Read the result\n // TODO #22198\n lockFile = (await readLocalFile(\n upath.join(lockFileDir, filename),\n 'utf8',\n ))!;\n\n // Massage lockfile counterparts of package.json that were modified\n // because npm install was called with an explicit version for rangeStrategy=update-lockfile\n if (lockUpdates.length) {\n const { detectedIndent, lockFileParsed } = parseLockFile(lockFile);\n if (\n lockFileParsed?.lockfileVersion === 2 ||\n lockFileParsed?.lockfileVersion === 3\n ) {\n lockUpdates.forEach((lockUpdate) => {\n const depType = lockUpdate.depType as\n | 'dependencies'\n | 'optionalDependencies';\n\n // TODO #22198\n // v8 ignore else -- TODO: add test #40625\n if (\n lockFileParsed.packages?.['']?.[depType]?.[lockUpdate.packageName!]\n ) {\n lockFileParsed.packages[''][depType][lockUpdate.packageName!] =\n lockUpdate.newValue!;\n }\n });\n lockFile = composeLockFile(lockFileParsed, detectedIndent);\n }\n }\n } catch (err) {\n // v8 ignore if -- TODO: add test #40625\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug(\n {\n err,\n type: 'npm',\n },\n 'lock file error',\n );\n // v8 ignore if -- TODO: add test #40625\n if (err.stderr?.includes('ENOSPC: no space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n return { error: true, stderr: err.stderr };\n }\n return { error: !lockFile, lockFile, beforeFallback };\n}\n\nexport function divideWorkspaceAndRootDeps(\n lockFileDir: string,\n lockUpdates: Upgrade[],\n): {\n lockRootUpdates: Upgrade[];\n lockWorkspacesUpdates: Upgrade[];\n workspaces: Set<string>;\n rootDeps: Set<string>;\n} {\n const lockRootUpdates: Upgrade[] = []; // stores all upgrades which are present in root package.json\n const lockWorkspacesUpdates: Upgrade[] = []; // stores all upgrades which are present in workspaces package.json\n const workspaces = new Set<string>(); // name of all workspaces\n const rootDeps = new Set<string>(); // packageName of all upgrades in root package.json (makes it check duplicate deps in root)\n\n // divide the deps in two categories: workspace and root\n for (const upgrade of lockUpdates) {\n upgrade.managerData ??= {};\n upgrade.managerData.packageKey = generatePackageKey(\n upgrade.packageName!,\n upgrade.newVersion!,\n );\n if (\n upgrade.managerData.workspacesPackages?.length &&\n isString(upgrade.packageFile)\n ) {\n const workspacePatterns = upgrade.managerData.workspacesPackages; // glob pattern or directory name/path\n const packageFileDir = trimSlashes(\n upgrade.packageFile.replace('package.json', ''),\n );\n\n // workspaceDir = packageFileDir - lockFileDir\n const workspaceDir = trimSlashes(\n packageFileDir.startsWith(lockFileDir)\n ? packageFileDir.slice(lockFileDir.length)\n : packageFileDir,\n );\n\n if (isNonEmptyString(workspaceDir)) {\n let workspaceName: string | undefined;\n // compare workspaceDir to workspace patterns\n // stop when the first match is found and\n // add workspaceDir to workspaces set and upgrade object\n for (const workspacePattern of workspacePatterns) {\n const massagedPattern = (workspacePattern as string).replace(\n regEx(/^\\.\\//),\n '',\n );\n if (minimatch(massagedPattern).match(workspaceDir)) {\n workspaceName = workspaceDir;\n break;\n }\n }\n if (workspaceName) {\n // v8 ignore else -- TODO: add test #40625\n if (\n !rootDeps.has(upgrade.managerData.packageKey) // prevent same dep from existing in root and workspace\n ) {\n workspaces.add(workspaceName);\n upgrade.workspace = workspaceName;\n lockWorkspacesUpdates.push(upgrade);\n }\n } else {\n logger.warn(\n { workspacePatterns, workspaceDir },\n 'workspaceDir not found',\n );\n }\n continue;\n }\n }\n lockRootUpdates.push(upgrade);\n rootDeps.add(upgrade.managerData.packageKey);\n }\n\n return { lockRootUpdates, lockWorkspacesUpdates, workspaces, rootDeps };\n}\n\nfunction generatePackageKey(packageName: string, version: string): string {\n return `${packageName}@${version}`;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","names":["hostRules.findAll","hostRules\n .getAll"],"sources":["../../../../../lib/modules/manager/npm/post-update/rules.ts"],"sourcesContent":["import { isNullOrUndefined, isString } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport * as hostRules from '../../../../util/host-rules.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { toBase64 } from '../../../../util/string.ts';\nimport { isHttpUrl } from '../../../../util/url.ts';\nimport type { YarnRcYmlFile } from './types.ts';\n\nexport interface HostRulesResult {\n additionalNpmrcContent: string[];\n additionalYarnRcYml?: any;\n}\n\nexport function processHostRules(): HostRulesResult {\n const additionalYarnRcYml: YarnRcYmlFile = { npmRegistries: {} };\n\n // Determine the additional npmrc content to add based on host rules\n const additionalNpmrcContent = [];\n const npmHostRules = hostRules.findAll({\n hostType: 'npm',\n });\n logger.debug(`Found ${npmHostRules.length} npm host rule(s)`);\n // Include host rules without specific type to mimic the behavior used when determining dependencies with updates.\n const noTypeHostRules = hostRules\n .getAll()\n .filter((rule) => isNullOrUndefined(rule.hostType));\n logger.debug(\n `Found ${noTypeHostRules.length} host rule(s) without host type`,\n );\n // Drop duplicates for the same matchHost while prefering the more specific rules with hostType npm.\n const noTypeHostRulesWithoutDuplicates = noTypeHostRules.filter(\n (rule) => !npmHostRules.some((elem) => elem.matchHost === rule.matchHost),\n );\n logger.debug(\n `Found ${noTypeHostRulesWithoutDuplicates.length} host rule(s) without host type after dropping duplicates`,\n );\n const effectiveHostRules = npmHostRules.concat(\n noTypeHostRulesWithoutDuplicates,\n );\n logger.trace(\n `Found ${effectiveHostRules.length} effective npm host rule(s) after deduplication`,\n );\n for (const hostRule of effectiveHostRules) {\n if (!hostRule.resolvedHost) {\n logger.debug('Skipping host rule without resolved host');\n continue;\n }\n\n const matchedHost = hostRule.matchHost;\n // Should never be necessary as if we have a resolvedHost, there has to be a matchHost\n /* v8 ignore if -- unreachable: a resolvedHost implies matchHost is set (see comment above) */\n if (!matchedHost) {\n logger.debug('Skipping host rule without matchHost');\n continue;\n }\n\n const uri = `//${matchedHost}/`;\n let cleanedUri = uri;\n if (isHttpUrl(matchedHost)) {\n cleanedUri = matchedHost.replace(regEx(/^https?:/), '');\n }\n\n if (hostRule.token) {\n const key = hostRule.authType === 'Basic' ? '_auth' : '_authToken';\n logger.debug(`Adding npmrc entry for ${cleanedUri} with key ${key}`);\n additionalNpmrcContent.push(`${cleanedUri}:${key}=${hostRule.token}`);\n\n if (hostRule.authType === 'Basic') {\n const registry = {\n npmAuthIdent: hostRule.token,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registry;\n additionalYarnRcYml.npmRegistries[uri] = registry;\n\n continue;\n }\n\n const registry = {\n npmAuthToken: hostRule.token,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registry;\n additionalYarnRcYml.npmRegistries[uri] = registry;\n\n continue;\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (isString(hostRule.username) && isString(hostRule.password)) {\n logger.debug(\n `Adding npmrc entry for ${cleanedUri} with username/password`,\n );\n const password = toBase64(hostRule.password);\n additionalNpmrcContent.push(\n `${cleanedUri}:username=${hostRule.username}`,\n );\n additionalNpmrcContent.push(`${cleanedUri}:_password=${password}`);\n\n const registries = {\n npmAuthIdent: `${hostRule.username}:${hostRule.password}`,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registries;\n additionalYarnRcYml.npmRegistries[uri] = registries;\n }\n }\n\n const hasYarnRcNpmRegistries =\n Object.keys(additionalYarnRcYml.npmRegistries).length > 0;\n return {\n additionalNpmrcContent,\n additionalYarnRcYml: hasYarnRcNpmRegistries\n ? additionalYarnRcYml\n : undefined,\n };\n}\n"],"mappings":";;;;;;;AAaA,SAAgB,mBAAoC;CAClD,MAAM,sBAAqC,EAAE,eAAe,CAAC,EAAE;CAG/D,MAAM,yBAAyB,CAAC;CAChC,MAAM,eAAeA,QAAkB,EACrC,UAAU,MACZ,CAAC;CACD,OAAO,MAAM,SAAS,aAAa,OAAO,kBAAkB;CAE5D,MAAM,kBAAkBC,OACd,CAAC,CACR,QAAQ,SAAS,kBAAkB,KAAK,QAAQ,CAAC;CACpD,OAAO,MACL,SAAS,gBAAgB,OAAO,gCAClC;CAEA,MAAM,mCAAmC,gBAAgB,QACtD,SAAS,CAAC,aAAa,MAAM,SAAS,KAAK,cAAc,KAAK,SAAS,CAC1E;CACA,OAAO,MACL,SAAS,iCAAiC,OAAO,0DACnD;CACA,MAAM,qBAAqB,aAAa,OACtC,gCACF;CACA,OAAO,MACL,SAAS,mBAAmB,OAAO,gDACrC;CACA,KAAK,MAAM,YAAY,oBAAoB;EACzC,IAAI,CAAC,SAAS,cAAc;GAC1B,OAAO,MAAM,0CAA0C;GACvD;EACF;EAEA,MAAM,cAAc,SAAS;;EAG7B,IAAI,CAAC,aAAa;GAChB,OAAO,MAAM,sCAAsC;GACnD;EACF;EAEA,MAAM,MAAM,KAAK,YAAY;EAC7B,IAAI,aAAa;EACjB,IAAI,UAAU,WAAW,GACvB,aAAa,YAAY,QAAQ,MAAM,UAAU,GAAG,EAAE;EAGxD,IAAI,SAAS,OAAO;GAClB,MAAM,MAAM,SAAS,aAAa,UAAU,UAAU;GACtD,OAAO,MAAM,0BAA0B,WAAW,YAAY,KAAK;GACnE,uBAAuB,KAAK,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,OAAO;GAEpE,IAAI,SAAS,aAAa,SAAS;IACjC,MAAM,WAAW,EACf,cAAc,SAAS,MACzB;IACA,oBAAoB,cAAc,cAAc;IAChD,oBAAoB,cAAc,OAAO;IAEzC;GACF;GAEA,MAAM,WAAW,EACf,cAAc,SAAS,MACzB;GACA,oBAAoB,cAAc,cAAc;GAChD,oBAAoB,cAAc,OAAO;GAEzC;EACF;;EAGA,IAAI,SAAS,SAAS,QAAQ,KAAK,SAAS,SAAS,QAAQ,GAAG;GAC9D,OAAO,MACL,0BAA0B,WAAW,wBACvC;GACA,MAAM,WAAW,SAAS,SAAS,QAAQ;GAC3C,uBAAuB,KACrB,GAAG,WAAW,YAAY,SAAS,UACrC;GACA,uBAAuB,KAAK,GAAG,WAAW,aAAa,UAAU;GAEjE,MAAM,aAAa,EACjB,cAAc,GAAG,SAAS,SAAS,GAAG,SAAS,WACjD;GACA,oBAAoB,cAAc,cAAc;GAChD,oBAAoB,cAAc,OAAO;EAC3C;CACF;CAIA,OAAO;EACL;EACA,qBAHA,OAAO,KAAK,oBAAoB,aAAa,CAAC,CAAC,SAAS,IAIpD,sBACA,KAAA;CACN;AACF"}
1
+ {"version":3,"file":"rules.js","names":["hostRules.findAll","hostRules\n .getAll"],"sources":["../../../../../lib/modules/manager/npm/post-update/rules.ts"],"sourcesContent":["import { isNullOrUndefined, isString } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport * as hostRules from '../../../../util/host-rules.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { toBase64 } from '../../../../util/string.ts';\nimport { isHttpUrl } from '../../../../util/url.ts';\nimport type { HostRulesResult, YarnRcYmlFile } from './types.ts';\nexport function processHostRules(): HostRulesResult {\n const additionalYarnRcYml: YarnRcYmlFile = { npmRegistries: {} };\n\n // Determine the additional npmrc content to add based on host rules\n const additionalNpmrcContent = [];\n const npmHostRules = hostRules.findAll({\n hostType: 'npm',\n });\n logger.debug(`Found ${npmHostRules.length} npm host rule(s)`);\n // Include host rules without specific type to mimic the behavior used when determining dependencies with updates.\n const noTypeHostRules = hostRules\n .getAll()\n .filter((rule) => isNullOrUndefined(rule.hostType));\n logger.debug(\n `Found ${noTypeHostRules.length} host rule(s) without host type`,\n );\n // Drop duplicates for the same matchHost while prefering the more specific rules with hostType npm.\n const noTypeHostRulesWithoutDuplicates = noTypeHostRules.filter(\n (rule) => !npmHostRules.some((elem) => elem.matchHost === rule.matchHost),\n );\n logger.debug(\n `Found ${noTypeHostRulesWithoutDuplicates.length} host rule(s) without host type after dropping duplicates`,\n );\n const effectiveHostRules = npmHostRules.concat(\n noTypeHostRulesWithoutDuplicates,\n );\n logger.trace(\n `Found ${effectiveHostRules.length} effective npm host rule(s) after deduplication`,\n );\n for (const hostRule of effectiveHostRules) {\n if (!hostRule.resolvedHost) {\n logger.debug('Skipping host rule without resolved host');\n continue;\n }\n\n const matchedHost = hostRule.matchHost;\n // Should never be necessary as if we have a resolvedHost, there has to be a matchHost\n /* v8 ignore if -- unreachable: a resolvedHost implies matchHost is set (see comment above) */\n if (!matchedHost) {\n logger.debug('Skipping host rule without matchHost');\n continue;\n }\n\n const uri = `//${matchedHost}/`;\n let cleanedUri = uri;\n if (isHttpUrl(matchedHost)) {\n cleanedUri = matchedHost.replace(regEx(/^https?:/), '');\n }\n\n if (hostRule.token) {\n const key = hostRule.authType === 'Basic' ? '_auth' : '_authToken';\n logger.debug(`Adding npmrc entry for ${cleanedUri} with key ${key}`);\n additionalNpmrcContent.push(`${cleanedUri}:${key}=${hostRule.token}`);\n\n if (hostRule.authType === 'Basic') {\n const registry = {\n npmAuthIdent: hostRule.token,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registry;\n additionalYarnRcYml.npmRegistries[uri] = registry;\n\n continue;\n }\n\n const registry = {\n npmAuthToken: hostRule.token,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registry;\n additionalYarnRcYml.npmRegistries[uri] = registry;\n\n continue;\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (isString(hostRule.username) && isString(hostRule.password)) {\n logger.debug(\n `Adding npmrc entry for ${cleanedUri} with username/password`,\n );\n const password = toBase64(hostRule.password);\n additionalNpmrcContent.push(\n `${cleanedUri}:username=${hostRule.username}`,\n );\n additionalNpmrcContent.push(`${cleanedUri}:_password=${password}`);\n\n const registries = {\n npmAuthIdent: `${hostRule.username}:${hostRule.password}`,\n };\n additionalYarnRcYml.npmRegistries[cleanedUri] = registries;\n additionalYarnRcYml.npmRegistries[uri] = registries;\n }\n }\n\n const hasYarnRcNpmRegistries =\n Object.keys(additionalYarnRcYml.npmRegistries).length > 0;\n return {\n additionalNpmrcContent,\n additionalYarnRcYml: hasYarnRcNpmRegistries\n ? additionalYarnRcYml\n : undefined,\n };\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,mBAAoC;CAClD,MAAM,sBAAqC,EAAE,eAAe,CAAC,EAAE;CAG/D,MAAM,yBAAyB,CAAC;CAChC,MAAM,eAAeA,QAAkB,EACrC,UAAU,MACZ,CAAC;CACD,OAAO,MAAM,SAAS,aAAa,OAAO,kBAAkB;CAE5D,MAAM,kBAAkBC,OACd,CAAC,CACR,QAAQ,SAAS,kBAAkB,KAAK,QAAQ,CAAC;CACpD,OAAO,MACL,SAAS,gBAAgB,OAAO,gCAClC;CAEA,MAAM,mCAAmC,gBAAgB,QACtD,SAAS,CAAC,aAAa,MAAM,SAAS,KAAK,cAAc,KAAK,SAAS,CAC1E;CACA,OAAO,MACL,SAAS,iCAAiC,OAAO,0DACnD;CACA,MAAM,qBAAqB,aAAa,OACtC,gCACF;CACA,OAAO,MACL,SAAS,mBAAmB,OAAO,gDACrC;CACA,KAAK,MAAM,YAAY,oBAAoB;EACzC,IAAI,CAAC,SAAS,cAAc;GAC1B,OAAO,MAAM,0CAA0C;GACvD;EACF;EAEA,MAAM,cAAc,SAAS;;EAG7B,IAAI,CAAC,aAAa;GAChB,OAAO,MAAM,sCAAsC;GACnD;EACF;EAEA,MAAM,MAAM,KAAK,YAAY;EAC7B,IAAI,aAAa;EACjB,IAAI,UAAU,WAAW,GACvB,aAAa,YAAY,QAAQ,MAAM,UAAU,GAAG,EAAE;EAGxD,IAAI,SAAS,OAAO;GAClB,MAAM,MAAM,SAAS,aAAa,UAAU,UAAU;GACtD,OAAO,MAAM,0BAA0B,WAAW,YAAY,KAAK;GACnE,uBAAuB,KAAK,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,OAAO;GAEpE,IAAI,SAAS,aAAa,SAAS;IACjC,MAAM,WAAW,EACf,cAAc,SAAS,MACzB;IACA,oBAAoB,cAAc,cAAc;IAChD,oBAAoB,cAAc,OAAO;IAEzC;GACF;GAEA,MAAM,WAAW,EACf,cAAc,SAAS,MACzB;GACA,oBAAoB,cAAc,cAAc;GAChD,oBAAoB,cAAc,OAAO;GAEzC;EACF;;EAGA,IAAI,SAAS,SAAS,QAAQ,KAAK,SAAS,SAAS,QAAQ,GAAG;GAC9D,OAAO,MACL,0BAA0B,WAAW,wBACvC;GACA,MAAM,WAAW,SAAS,SAAS,QAAQ;GAC3C,uBAAuB,KACrB,GAAG,WAAW,YAAY,SAAS,UACrC;GACA,uBAAuB,KAAK,GAAG,WAAW,aAAa,UAAU;GAEjE,MAAM,aAAa,EACjB,cAAc,GAAG,SAAS,SAAS,GAAG,SAAS,WACjD;GACA,oBAAoB,cAAc,cAAc;GAChD,oBAAoB,cAAc,OAAO;EAC3C;CACF;CAIA,OAAO;EACL;EACA,qBAHA,OAAO,KAAK,oBAAoB,aAAa,CAAC,CAAC,SAAS,IAIpD,sBACA,KAAA;CACN;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/utils.ts"],"sourcesContent":["import { isArray } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { logger } from '../../../../logger/index.ts';\nimport { Lazy } from '../../../../util/lazy.ts';\nimport type { PackageJson } from '../schema.ts';\nimport { loadPackageJson } from '../utils.ts';\n\nexport function lazyLoadPackageJson(\n lockFileDir: string,\n): Lazy<Promise<PackageJson>> {\n return new Lazy(() => loadPackageJson(lockFileDir));\n}\nexport type LazyPackageJson = ReturnType<typeof lazyLoadPackageJson>;\n\nexport function getPackageManagerVersion(\n name: string,\n pkg: PackageJson,\n): string | null {\n if (pkg.volta?.[name]) {\n const version = pkg.volta[name];\n logger.debug(`Found ${name} constraint in package.json volta: ${version}`);\n\n return version;\n }\n if (pkg.devEngines?.packageManager) {\n const packageManagers = isArray(pkg.devEngines.packageManager)\n ? pkg.devEngines.packageManager\n : [pkg.devEngines.packageManager];\n const packageMgr = packageManagers.find((pm) => pm.name === name);\n const version = packageMgr?.version;\n // v8 ignore else -- TODO: add test #40625\n if (version) {\n logger.debug(\n `Found ${name} constraint in package.json devEngines: ${version}`,\n );\n return version;\n }\n }\n if (pkg.packageManager?.name === name) {\n const version = pkg.packageManager.version;\n logger.debug(\n `Found ${name} constraint in package.json packageManager: ${version}`,\n );\n if (semver.valid(version)) {\n return version;\n }\n return null;\n }\n if (pkg.engines?.[name]) {\n const version = pkg.engines[name];\n logger.debug(\n `Found ${name} constraint in package.json engines: ${version}`,\n );\n return version;\n }\n return null;\n}\n\nexport function getNodeOptions(nodeMaxMemory: number): string {\n return `--max-old-space-size=${nodeMaxMemory}`;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,oBACd,aAC4B;CAC5B,OAAO,IAAI,WAAW,gBAAgB,WAAW,CAAC;AACpD;AAGA,SAAgB,yBACd,MACA,KACe;CACf,IAAI,IAAI,QAAQ,OAAO;EACrB,MAAM,UAAU,IAAI,MAAM;EAC1B,OAAO,MAAM,SAAS,KAAK,qCAAqC,SAAS;EAEzE,OAAO;CACT;CACA,IAAI,IAAI,YAAY,gBAAgB;EAKlC,MAAM,WAJkB,QAAQ,IAAI,WAAW,cAAc,IACzD,IAAI,WAAW,iBACf,CAAC,IAAI,WAAW,cAAc,EAAA,CACC,MAAM,OAAO,GAAG,SAAS,IACnC,CAAC,EAAE;;EAE5B,IAAI,SAAS;GACX,OAAO,MACL,SAAS,KAAK,0CAA0C,SAC1D;GACA,OAAO;EACT;CACF;CACA,IAAI,IAAI,gBAAgB,SAAS,MAAM;EACrC,MAAM,UAAU,IAAI,eAAe;EACnC,OAAO,MACL,SAAS,KAAK,8CAA8C,SAC9D;EACA,IAAI,OAAO,MAAM,OAAO,GACtB,OAAO;EAET,OAAO;CACT;CACA,IAAI,IAAI,UAAU,OAAO;EACvB,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,MACL,SAAS,KAAK,uCAAuC,SACvD;EACA,OAAO;CACT;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,eAA+B;CAC5D,OAAO,wBAAwB;AACjC"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../../lib/modules/manager/npm/post-update/utils.ts"],"sourcesContent":["import { isArray } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { logger } from '../../../../logger/index.ts';\nimport { Lazy } from '../../../../util/lazy.ts';\nimport type { PackageJson } from '../schema.ts';\nimport { loadPackageJson } from '../utils.ts';\n\nexport function lazyLoadPackageJson(\n lockFileDir: string,\n): Lazy<Promise<PackageJson>> {\n return new Lazy(() => loadPackageJson(lockFileDir));\n}\n\nexport function getPackageManagerVersion(\n name: string,\n pkg: PackageJson,\n): string | null {\n if (pkg.volta?.[name]) {\n const version = pkg.volta[name];\n logger.debug(`Found ${name} constraint in package.json volta: ${version}`);\n\n return version;\n }\n if (pkg.devEngines?.packageManager) {\n const packageManagers = isArray(pkg.devEngines.packageManager)\n ? pkg.devEngines.packageManager\n : [pkg.devEngines.packageManager];\n const packageMgr = packageManagers.find((pm) => pm.name === name);\n const version = packageMgr?.version;\n // v8 ignore else -- TODO: add test #40625\n if (version) {\n logger.debug(\n `Found ${name} constraint in package.json devEngines: ${version}`,\n );\n return version;\n }\n }\n if (pkg.packageManager?.name === name) {\n const version = pkg.packageManager.version;\n logger.debug(\n `Found ${name} constraint in package.json packageManager: ${version}`,\n );\n if (semver.valid(version)) {\n return version;\n }\n return null;\n }\n if (pkg.engines?.[name]) {\n const version = pkg.engines[name];\n logger.debug(\n `Found ${name} constraint in package.json engines: ${version}`,\n );\n return version;\n }\n return null;\n}\n\nexport function getNodeOptions(nodeMaxMemory: number): string {\n return `--max-old-space-size=${nodeMaxMemory}`;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,oBACd,aAC4B;CAC5B,OAAO,IAAI,WAAW,gBAAgB,WAAW,CAAC;AACpD;AAEA,SAAgB,yBACd,MACA,KACe;CACf,IAAI,IAAI,QAAQ,OAAO;EACrB,MAAM,UAAU,IAAI,MAAM;EAC1B,OAAO,MAAM,SAAS,KAAK,qCAAqC,SAAS;EAEzE,OAAO;CACT;CACA,IAAI,IAAI,YAAY,gBAAgB;EAKlC,MAAM,WAJkB,QAAQ,IAAI,WAAW,cAAc,IACzD,IAAI,WAAW,iBACf,CAAC,IAAI,WAAW,cAAc,EAAA,CACC,MAAM,OAAO,GAAG,SAAS,IACnC,CAAC,EAAE;;EAE5B,IAAI,SAAS;GACX,OAAO,MACL,SAAS,KAAK,0CAA0C,SAC1D;GACA,OAAO;EACT;CACF;CACA,IAAI,IAAI,gBAAgB,SAAS,MAAM;EACrC,MAAM,UAAU,IAAI,eAAe;EACnC,OAAO,MACL,SAAS,KAAK,8CAA8C,SAC9D;EACA,IAAI,OAAO,MAAM,OAAO,GACtB,OAAO;EAET,OAAO;CACT;CACA,IAAI,IAAI,UAAU,OAAO;EACvB,MAAM,UAAU,IAAI,QAAQ;EAC5B,OAAO,MACL,SAAS,KAAK,uCAAuC,SACvD;EACA,OAAO;CACT;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,eAA+B;CAC5D,OAAO,wBAAwB;AACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/pixi/lockfile.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n getSiblingFileName,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport type { PackageDependency, UpdateArtifactsResult } from '../types.ts';\n\nexport const commandLock = 'pixi lock --no-progress --color=never --quiet';\n\nexport interface UpdatePixiLockfile {\n packageFileName: string;\n updatedDeps: PackageDependency[] | undefined;\n isLockFileMaintenance: boolean | undefined;\n /** `pixi` version constraint passed to the tool installer. */\n constraint: string | undefined;\n /**\n * When set, the content is written to `packageFileName` before running\n * `pixi lock`. Callers that have already written the package file to disk\n * (e.g. the `pep621` manager) should leave this `undefined`.\n */\n newPackageFileContent?: string;\n}\n\n/**\n * Regenerate the sibling `pixi.lock` of a package file by running `pixi lock`.\n *\n * Shared by the standalone `pixi` manager and the `pep621` pixi processor.\n */\nexport async function updatePixiLockfile({\n packageFileName,\n updatedDeps,\n isLockFileMaintenance,\n constraint,\n newPackageFileContent,\n}: UpdatePixiLockfile): Promise<UpdateArtifactsResult[] | null> {\n if (!isNonEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated pixi deps - returning null');\n return null;\n }\n\n const lockFileName = getSiblingFileName(packageFileName, 'pixi.lock');\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No pixi.lock found');\n return null;\n }\n\n // `pixi lock` can execute arbitrary code from conda package hooks, so it is\n // gated behind `allowedUnsafeExecutions`.\n // https://pixi.prefix.dev/latest/security/#4-treat-package-hooks-as-code-execution\n if (!GlobalConfig.get('allowedUnsafeExecutions').includes('pixi')) {\n logger.once.warn(\n '`pixi lock` was requested to run, but `pixi` is not permitted in the allowedUnsafeExecutions',\n );\n return null;\n }\n\n try {\n if (newPackageFileContent !== undefined) {\n await writeLocalFile(packageFileName, newPackageFileContent);\n }\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n // https://pixi.sh/latest/features/environment/#caching-packages\n const PIXI_CACHE_DIR = await ensureCacheDir('pixi');\n const extraEnv = {\n PIXI_CACHE_DIR,\n RATTLER_CACHE_DIR: PIXI_CACHE_DIR,\n };\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [{ toolName: 'pixi', constraint }],\n };\n await exec([commandLock], execOptions);\n\n const newPixiLockContent = await readLocalFile(lockFileName, 'utf8');\n if (existingLockFileContent === newPixiLockContent) {\n logger.debug(`${lockFileName} is unchanged`);\n return null;\n }\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newPixiLockContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, `Failed to update ${lockFileName} file`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `${err}`,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAa,cAAc;;;;;;AAqB3B,eAAsB,mBAAmB,EACvC,iBACA,aACA,uBACA,YACA,yBAC8D;CAC9D,IAAI,CAAC,gBAAgB,WAAW,KAAK,CAAC,uBAAuB;EAC3D,OAAO,MAAM,uCAAuC;EACpD,OAAO;CACT;CAEA,MAAM,eAAe,mBAAmB,iBAAiB,WAAW;CACpE,MAAM,0BAA0B,MAAM,cAAc,cAAc,MAAM;CACxE,IAAI,CAAC,yBAAyB;EAC5B,OAAO,MAAM,oBAAoB;EACjC,OAAO;CACT;CAKA,IAAI,CAAC,aAAa,IAAI,yBAAyB,CAAC,CAAC,SAAS,MAAM,GAAG;EACjE,OAAO,KAAK,KACV,8FACF;EACA,OAAO;CACT;CAEA,IAAI;EACF,IAAI,0BAA0B,KAAA,GAC5B,MAAM,eAAe,iBAAiB,qBAAqB;EAE7D,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAIpC,MAAM,iBAAiB,MAAM,eAAe,MAAM;EAYlD,MAAM,KAAK,CAAC,WAAW,GAAG;GALxB,SAAS;GACT,UAAA;IANA;IACA,mBAAmB;GAKZ;GACP,QAAQ,CAAC;GACT,iBAAiB,CAAC;IAAE,UAAU;IAAQ;GAAW,CAAC;EAEhB,CAAC;EAErC,MAAM,qBAAqB,MAAM,cAAc,cAAc,MAAM;EACnE,IAAI,4BAA4B,oBAAoB;GAClD,OAAO,MAAM,GAAG,aAAa,cAAc;GAC3C,OAAO;EACT;EACA,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,MAAM,EAAE,IAAI,GAAG,oBAAoB,aAAa,MAAM;EAC7D,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,GAAG;EACb,EACF,CACF;CACF;AACF"}
1
+ {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/pixi/lockfile.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n getSiblingFileName,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport type { UpdateArtifactsResult } from '../types.ts';\nimport type { UpdatePixiLockfile } from './types.ts';\n\nexport const commandLock = 'pixi lock --no-progress --color=never --quiet';\n\n/**\n * Regenerate the sibling `pixi.lock` of a package file by running `pixi lock`.\n *\n * Shared by the standalone `pixi` manager and the `pep621` pixi processor.\n */\nexport async function updatePixiLockfile({\n packageFileName,\n updatedDeps,\n isLockFileMaintenance,\n constraint,\n newPackageFileContent,\n}: UpdatePixiLockfile): Promise<UpdateArtifactsResult[] | null> {\n if (!isNonEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated pixi deps - returning null');\n return null;\n }\n\n const lockFileName = getSiblingFileName(packageFileName, 'pixi.lock');\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No pixi.lock found');\n return null;\n }\n\n // `pixi lock` can execute arbitrary code from conda package hooks, so it is\n // gated behind `allowedUnsafeExecutions`.\n // https://pixi.prefix.dev/latest/security/#4-treat-package-hooks-as-code-execution\n if (!GlobalConfig.get('allowedUnsafeExecutions').includes('pixi')) {\n logger.once.warn(\n '`pixi lock` was requested to run, but `pixi` is not permitted in the allowedUnsafeExecutions',\n );\n return null;\n }\n\n try {\n if (newPackageFileContent !== undefined) {\n await writeLocalFile(packageFileName, newPackageFileContent);\n }\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n // https://pixi.sh/latest/features/environment/#caching-packages\n const PIXI_CACHE_DIR = await ensureCacheDir('pixi');\n const extraEnv = {\n PIXI_CACHE_DIR,\n RATTLER_CACHE_DIR: PIXI_CACHE_DIR,\n };\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [{ toolName: 'pixi', constraint }],\n };\n await exec([commandLock], execOptions);\n\n const newPixiLockContent = await readLocalFile(lockFileName, 'utf8');\n if (existingLockFileContent === newPixiLockContent) {\n logger.debug(`${lockFileName} is unchanged`);\n return null;\n }\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newPixiLockContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, `Failed to update ${lockFileName} file`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `${err}`,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;AAgBA,MAAa,cAAc;;;;;;AAO3B,eAAsB,mBAAmB,EACvC,iBACA,aACA,uBACA,YACA,yBAC8D;CAC9D,IAAI,CAAC,gBAAgB,WAAW,KAAK,CAAC,uBAAuB;EAC3D,OAAO,MAAM,uCAAuC;EACpD,OAAO;CACT;CAEA,MAAM,eAAe,mBAAmB,iBAAiB,WAAW;CACpE,MAAM,0BAA0B,MAAM,cAAc,cAAc,MAAM;CACxE,IAAI,CAAC,yBAAyB;EAC5B,OAAO,MAAM,oBAAoB;EACjC,OAAO;CACT;CAKA,IAAI,CAAC,aAAa,IAAI,yBAAyB,CAAC,CAAC,SAAS,MAAM,GAAG;EACjE,OAAO,KAAK,KACV,8FACF;EACA,OAAO;CACT;CAEA,IAAI;EACF,IAAI,0BAA0B,KAAA,GAC5B,MAAM,eAAe,iBAAiB,qBAAqB;EAE7D,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAIpC,MAAM,iBAAiB,MAAM,eAAe,MAAM;EAYlD,MAAM,KAAK,CAAC,WAAW,GAAG;GALxB,SAAS;GACT,UAAA;IANA;IACA,mBAAmB;GAKZ;GACP,QAAQ,CAAC;GACT,iBAAiB,CAAC;IAAE,UAAU;IAAQ;GAAW,CAAC;EAEhB,CAAC;EAErC,MAAM,qBAAqB,MAAM,cAAc,cAAc,MAAM;EACnE,IAAI,4BAA4B,oBAAoB;GAClD,OAAO,MAAM,GAAG,aAAa,cAAc;GAC3C,OAAO;EACT;EACA,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,MAAM,EAAE,IAAI,GAAG,oBAAoB,aAAa,MAAM;EAC7D,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,GAAG;EACb,EACF,CACF;CACF;AACF"}