renovate 43.264.2 → 43.265.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/config-validator.js.map +1 -1
  2. package/dist/modules/datasource/bitrise/index.js +1 -1
  3. package/dist/modules/datasource/bitrise/index.js.map +1 -1
  4. package/dist/modules/datasource/custom/index.js +8 -2
  5. package/dist/modules/datasource/custom/index.js.map +1 -1
  6. package/dist/modules/datasource/postprocess-release.js +4 -1
  7. package/dist/modules/datasource/postprocess-release.js.map +1 -1
  8. package/dist/modules/manager/bazel-module/lockfile.js +1 -1
  9. package/dist/modules/manager/bazel-module/lockfile.js.map +1 -1
  10. package/dist/modules/manager/deno/artifacts.js +5 -1
  11. package/dist/modules/manager/deno/artifacts.js.map +1 -1
  12. package/dist/modules/manager/deno/post.js +1 -1
  13. package/dist/modules/manager/deno/post.js.map +1 -1
  14. package/dist/modules/manager/fingerprint.generated.js +2 -2
  15. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  16. package/dist/modules/manager/gradle/artifacts.js +1 -1
  17. package/dist/modules/manager/gradle/artifacts.js.map +1 -1
  18. package/dist/modules/manager/mise/artifacts.js +4 -1
  19. package/dist/modules/manager/mise/artifacts.js.map +1 -1
  20. package/dist/modules/platform/azure/issue.js +4 -1
  21. package/dist/modules/platform/azure/issue.js.map +1 -1
  22. package/dist/modules/platform/bitbucket/index.js +4 -1
  23. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  24. package/dist/modules/platform/codecommit/index.js +2 -2
  25. package/dist/modules/platform/codecommit/index.js.map +1 -1
  26. package/dist/modules/platform/gitlab/http.js +1 -1
  27. package/dist/modules/platform/gitlab/http.js.map +1 -1
  28. package/dist/modules/platform/scm-manager/index.js +5 -2
  29. package/dist/modules/platform/scm-manager/index.js.map +1 -1
  30. package/dist/util/emoji.js +2 -2
  31. package/dist/util/emoji.js.map +1 -1
  32. package/dist/util/http/github.js +2 -2
  33. package/dist/util/http/github.js.map +1 -1
  34. package/dist/util/interpolator.js +4 -1
  35. package/dist/util/interpolator.js.map +1 -1
  36. package/dist/workers/global/config/parse/additional-config-file.js +1 -1
  37. package/dist/workers/global/config/parse/additional-config-file.js.map +1 -1
  38. package/dist/workers/global/config/parse/env.js +4 -1
  39. package/dist/workers/global/config/parse/env.js.map +1 -1
  40. package/dist/workers/global/config/parse/file.js +1 -1
  41. package/dist/workers/global/config/parse/file.js.map +1 -1
  42. package/dist/workers/repository/error.js +3 -3
  43. package/dist/workers/repository/error.js.map +1 -1
  44. package/dist/workers/repository/process/extract-update.js +2 -2
  45. package/dist/workers/repository/process/extract-update.js.map +1 -1
  46. package/dist/workers/repository/update/branch/bump-versions.js +5 -1
  47. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
  48. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +1 -1
  49. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  50. package/dist/workers/repository/update/branch/get-updated.js +3 -3
  51. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  52. package/dist/workers/repository/updates/branch-name.js +1 -1
  53. package/dist/workers/repository/updates/branch-name.js.map +1 -1
  54. package/package.json +1 -1
  55. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"config-validator.js","names":["getFileConfig"],"sources":["../lib/config-validator.ts"],"sourcesContent":["#!/usr/bin/env node\nimport 'source-map-support/register.js';\nimport './punycode.cjs';\n\nimport { styleText } from 'node:util';\nimport { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { Command, CommanderError } from 'commander';\nimport { dequal } from 'dequal';\nimport { diffLines } from 'diff';\nimport fs from 'fs-extra';\nimport { getConfigFileNames } from './config/app-strings.ts';\nimport { GlobalConfig } from './config/global.ts';\nimport { massageConfig } from './config/massage.ts';\nimport { migrateConfig } from './config/migration.ts';\nimport type { RenovateConfig } from './config/types.ts';\nimport { validateConfig } from './config/validation.ts';\nimport { pkg } from './expose.ts';\nimport { init, logger } from './logger/index.ts';\nimport { getEnv } from './util/env.ts';\nimport { add as addHostRule } from './util/host-rules.ts';\nimport { regEx } from './util/regex.ts';\nimport { getConfig as getFileConfig } from './workers/global/config/parse/file.ts';\nimport { parseConfigs } from './workers/global/config/parse/index.ts';\nimport { getParsedContent } from './workers/global/config/parse/util.ts';\n\nawait init();\n\nconst { pathExists, readFile } = fs;\n\nlet returnVal = 0;\n\n/**\n * Make sure that we've resolved configuration from the different places that Renovate users would expect them to be specified\n *\n * This then allows a `configType=repo` config to i.e. be validated alongside a `config.js` or `env RENOVATE_ALLOWED_COMMANDS=...`\n *\n * Note that we intentionally don't fully initialize Renovate and its modules, as we're not fully running, and it would require a Platform to be configured\n * */\nasync function partiallyGlobalInitialize(): Promise<void> {\n // NOTE that this doesn't allow command-line arguments\n const globalConfig = await parseConfigs(getEnv(), []);\n GlobalConfig.set(globalConfig);\n\n if (globalConfig.hostRules) {\n for (const hostRule of globalConfig.hostRules) {\n addHostRule(hostRule);\n }\n }\n}\n\nasync function validate(\n configType: 'global' | 'repo',\n desc: string,\n config: RenovateConfig,\n strict: boolean,\n isPreset = false,\n): Promise<void> {\n if (config.hostRules) {\n for (const hostRule of config.hostRules) {\n addHostRule(hostRule);\n }\n }\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n {\n oldConfig: config,\n newConfig: migratedConfig,\n },\n 'Config migration necessary',\n );\n const changedObjects = diffLines(\n JSON.stringify(config, null, 2),\n JSON.stringify(migratedConfig, null, 2),\n { ignoreWhitespace: false, newlineIsToken: false },\n );\n const added = styleText('green', '+ ');\n const removed = styleText('red', '- ');\n const msg = changedObjects\n .flatMap((part) => {\n let linePrefix: string;\n if (part.added) {\n linePrefix = added;\n } else if (part.removed) {\n linePrefix = removed;\n } else {\n linePrefix = ' ';\n }\n return part.value\n .split('\\n')\n .filter(isNonEmptyStringAndNotWhitespace)\n .map((line) =>\n line.replace(regEx(/^(?<ws> *)/), `${linePrefix}$<ws>`),\n );\n })\n .join('\\n');\n logger.warn(`Config migration diff:\\n${msg}`);\n if (strict) {\n returnVal = 1;\n }\n }\n const massagedConfig = massageConfig(migratedConfig);\n const res = await validateConfig(configType, massagedConfig, isPreset);\n if (res.errors.length) {\n logger.error(\n { file: desc, errors: res.errors },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n if (res.warnings.length) {\n logger.warn(\n { file: desc, warnings: res.warnings },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n}\n\ninterface PackageJson {\n renovate?: RenovateConfig;\n 'renovate-config'?: Record<string, RenovateConfig>;\n}\n\n(async () => {\n await partiallyGlobalInitialize();\n\n const program = new Command('renovate-config-validator')\n .summary('Validate Renovate configuration files')\n .description(\n `Validate your Renovate configuration (repo config, shared presets or global configuration) files\\n` +\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- CLI help text, no config available\n 'If no [config-files...] are given, renovate-config-validator will look at the default config file locations (https://docs.renovatebot.com/configuration-options/)',\n )\n .addHelpText(\n 'after',\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- CLI help text, no config available\n `\nWhen specifying [config-files...], Renovate will treat them as global self-hosted configuration files. You can disable this behaviour with --no-global\n\nExamples:\n\n $ renovate-config-validator\n $ renovate-config-validator --strict\n $ renovate-config-validator first_config.json\n $ renovate-config-validator --strict config.js\n $ renovate-config-validator --no-global renovate.json5\n $ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator\n\nGlobal configuration:\n\nIf you have specified global self-hosted configuration (https://docs.renovatebot.com/self-hosted-configuration/) in environment variables or in a \\`config.js\\`, this will be detected:\n\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator\n # if passing the filename, make sure it's not validating as a global config\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator --no-global renovate.json`,\n )\n .argument('[config-files...]')\n .version(pkg.version, '-v, --version')\n .option(\n '--strict',\n 'Fail command if any configuration warnings, errors, or a migration is needed',\n )\n .option(\n '--no-global',\n 'When specifying [config-files], do not treat them as global self-hosted configuration file(s)',\n true,\n )\n // allow us to manage the exit code\n .exitOverride();\n\n program.action(async (files, opts) => {\n const strict = opts.strict ?? false;\n let filesValidated = 0;\n\n if (files.length) {\n let isGlobalConfig = true;\n if (opts.global === false) {\n isGlobalConfig = false;\n }\n const configType = isGlobalConfig ? 'global' : 'repo';\n for (const file of files) {\n try {\n if (!(await pathExists(file))) {\n returnVal = 1;\n logger.error({ file }, 'File does not exist');\n break;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file} as ${configType} config`);\n await validate(configType, file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n\n filesValidated++;\n }\n } else {\n for (const file of getConfigFileNames().filter(\n (name) => name !== 'package.json',\n )) {\n try {\n if (!(await pathExists(file))) {\n continue;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file}`);\n await validate('repo', file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n\n filesValidated++;\n }\n try {\n const pkgJson = JSON.parse(\n await readFile('package.json', 'utf8'),\n ) as PackageJson;\n if (pkgJson.renovate) {\n logger.info(`Validating package.json > renovate`);\n await validate(\n 'repo',\n 'package.json > renovate',\n pkgJson.renovate,\n strict,\n );\n\n filesValidated++;\n }\n if (pkgJson['renovate-config']) {\n logger.info(`Validating package.json > renovate-config`);\n for (const presetConfig of Object.values(\n pkgJson['renovate-config'],\n )) {\n await validate(\n 'repo',\n 'package.json > renovate-config',\n presetConfig,\n strict,\n true,\n );\n\n filesValidated++;\n }\n }\n } catch {\n // ignore\n }\n try {\n const env = getEnv();\n const fileConfig = await getFileConfig(env);\n if (!dequal(fileConfig, {})) {\n const file = env.RENOVATE_CONFIG_FILE ?? 'config.js';\n logger.info(`Validating ${file}`);\n try {\n await validate('global', file, fileConfig, strict);\n } catch (err) {\n logger.error({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n filesValidated++;\n }\n } catch {\n // ignore\n }\n }\n if (returnVal === 0 && filesValidated) {\n logger.info(\n `Config validated successfully against ${filesValidated} file(s)`,\n );\n } else if (!filesValidated) {\n logger.warn(`No files to perform configuration validation against`);\n }\n // Use exitCode (not process.exit) so async log streams can flush\n process.exitCode = returnVal;\n });\n\n await program.parseAsync();\n})().catch((e) => {\n // Commander throws an error at the end of Action execution i.e. as part of the `help` and `version` commands, and so we don't want to return an error code in this case\n if (\n e instanceof CommanderError &&\n (e.code === 'commander.helpDisplayed' || e.code === 'commander.version')\n ) {\n return;\n }\n\n // oxlint-disable-next-line no-console -- intentional: display critical error on CLI\n console.error(e);\n process.exit(99);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"config-validator.js","names":["getFileConfig"],"sources":["../lib/config-validator.ts"],"sourcesContent":["#!/usr/bin/env node\nimport 'source-map-support/register.js';\nimport './punycode.cjs';\n\nimport { styleText } from 'node:util';\nimport { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { Command, CommanderError } from 'commander';\nimport { dequal } from 'dequal';\nimport { diffLines } from 'diff';\nimport fs from 'fs-extra';\nimport { getConfigFileNames } from './config/app-strings.ts';\nimport { GlobalConfig } from './config/global.ts';\nimport { massageConfig } from './config/massage.ts';\nimport { migrateConfig } from './config/migration.ts';\nimport type { RenovateConfig } from './config/types.ts';\nimport { validateConfig } from './config/validation.ts';\nimport { pkg } from './expose.ts';\nimport { init, logger } from './logger/index.ts';\nimport { getEnv } from './util/env.ts';\nimport { add as addHostRule } from './util/host-rules.ts';\nimport { regEx } from './util/regex.ts';\nimport { getConfig as getFileConfig } from './workers/global/config/parse/file.ts';\nimport { parseConfigs } from './workers/global/config/parse/index.ts';\nimport { getParsedContent } from './workers/global/config/parse/util.ts';\n\nawait init();\n\nconst { pathExists, readFile } = fs;\n\nlet returnVal = 0;\n\n/**\n * Make sure that we've resolved configuration from the different places that Renovate users would expect them to be specified\n *\n * This then allows a `configType=repo` config to i.e. be validated alongside a `config.js` or `env RENOVATE_ALLOWED_COMMANDS=...`\n *\n * Note that we intentionally don't fully initialize Renovate and its modules, as we're not fully running, and it would require a Platform to be configured\n * */\nasync function partiallyGlobalInitialize(): Promise<void> {\n // NOTE that this doesn't allow command-line arguments\n const globalConfig = await parseConfigs(getEnv(), []);\n GlobalConfig.set(globalConfig);\n\n if (globalConfig.hostRules) {\n for (const hostRule of globalConfig.hostRules) {\n addHostRule(hostRule);\n }\n }\n}\n\nasync function validate(\n configType: 'global' | 'repo',\n desc: string,\n config: RenovateConfig,\n strict: boolean,\n isPreset = false,\n): Promise<void> {\n if (config.hostRules) {\n for (const hostRule of config.hostRules) {\n addHostRule(hostRule);\n }\n }\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n {\n oldConfig: config,\n newConfig: migratedConfig,\n },\n 'Config migration necessary',\n );\n const changedObjects = diffLines(\n JSON.stringify(config, null, 2),\n JSON.stringify(migratedConfig, null, 2),\n { ignoreWhitespace: false, newlineIsToken: false },\n );\n const added = styleText('green', '+ ');\n const removed = styleText('red', '- ');\n const msg = changedObjects\n .flatMap((part) => {\n let linePrefix: string;\n if (part.added) {\n linePrefix = added;\n } else if (part.removed) {\n linePrefix = removed;\n } else {\n linePrefix = ' ';\n }\n return part.value\n .split('\\n')\n .filter(isNonEmptyStringAndNotWhitespace)\n .map((line) =>\n line.replace(regEx(/^(?<ws> *)/), `${linePrefix}$<ws>`),\n );\n })\n .join('\\n');\n // oxlint-disable-next-line renovate/logger-static-message -- the multi-line, colorized diff must be interpolated to stay readable; as a metadata field it is JSON-escaped onto one line\n logger.warn(`Config migration diff:\\n${msg}`);\n if (strict) {\n returnVal = 1;\n }\n }\n const massagedConfig = massageConfig(migratedConfig);\n const res = await validateConfig(configType, massagedConfig, isPreset);\n if (res.errors.length) {\n logger.error(\n { file: desc, errors: res.errors },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n if (res.warnings.length) {\n logger.warn(\n { file: desc, warnings: res.warnings },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n}\n\ninterface PackageJson {\n renovate?: RenovateConfig;\n 'renovate-config'?: Record<string, RenovateConfig>;\n}\n\n(async () => {\n await partiallyGlobalInitialize();\n\n const program = new Command('renovate-config-validator')\n .summary('Validate Renovate configuration files')\n .description(\n `Validate your Renovate configuration (repo config, shared presets or global configuration) files\\n` +\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- CLI help text, no config available\n 'If no [config-files...] are given, renovate-config-validator will look at the default config file locations (https://docs.renovatebot.com/configuration-options/)',\n )\n .addHelpText(\n 'after',\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- CLI help text, no config available\n `\nWhen specifying [config-files...], Renovate will treat them as global self-hosted configuration files. You can disable this behaviour with --no-global\n\nExamples:\n\n $ renovate-config-validator\n $ renovate-config-validator --strict\n $ renovate-config-validator first_config.json\n $ renovate-config-validator --strict config.js\n $ renovate-config-validator --no-global renovate.json5\n $ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator\n\nGlobal configuration:\n\nIf you have specified global self-hosted configuration (https://docs.renovatebot.com/self-hosted-configuration/) in environment variables or in a \\`config.js\\`, this will be detected:\n\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator\n # if passing the filename, make sure it's not validating as a global config\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator --no-global renovate.json`,\n )\n .argument('[config-files...]')\n .version(pkg.version, '-v, --version')\n .option(\n '--strict',\n 'Fail command if any configuration warnings, errors, or a migration is needed',\n )\n .option(\n '--no-global',\n 'When specifying [config-files], do not treat them as global self-hosted configuration file(s)',\n true,\n )\n // allow us to manage the exit code\n .exitOverride();\n\n program.action(async (files, opts) => {\n const strict = opts.strict ?? false;\n let filesValidated = 0;\n\n if (files.length) {\n let isGlobalConfig = true;\n if (opts.global === false) {\n isGlobalConfig = false;\n }\n const configType = isGlobalConfig ? 'global' : 'repo';\n for (const file of files) {\n try {\n if (!(await pathExists(file))) {\n returnVal = 1;\n logger.error({ file }, 'File does not exist');\n break;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file} as ${configType} config`);\n await validate(configType, file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n\n filesValidated++;\n }\n } else {\n for (const file of getConfigFileNames().filter(\n (name) => name !== 'package.json',\n )) {\n try {\n if (!(await pathExists(file))) {\n continue;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file}`);\n await validate('repo', file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n\n filesValidated++;\n }\n try {\n const pkgJson = JSON.parse(\n await readFile('package.json', 'utf8'),\n ) as PackageJson;\n if (pkgJson.renovate) {\n logger.info(`Validating package.json > renovate`);\n await validate(\n 'repo',\n 'package.json > renovate',\n pkgJson.renovate,\n strict,\n );\n\n filesValidated++;\n }\n if (pkgJson['renovate-config']) {\n logger.info(`Validating package.json > renovate-config`);\n for (const presetConfig of Object.values(\n pkgJson['renovate-config'],\n )) {\n await validate(\n 'repo',\n 'package.json > renovate-config',\n presetConfig,\n strict,\n true,\n );\n\n filesValidated++;\n }\n }\n } catch {\n // ignore\n }\n try {\n const env = getEnv();\n const fileConfig = await getFileConfig(env);\n if (!dequal(fileConfig, {})) {\n const file = env.RENOVATE_CONFIG_FILE ?? 'config.js';\n logger.info(`Validating ${file}`);\n try {\n await validate('global', file, fileConfig, strict);\n } catch (err) {\n logger.error({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n filesValidated++;\n }\n } catch {\n // ignore\n }\n }\n if (returnVal === 0 && filesValidated) {\n logger.info(\n `Config validated successfully against ${filesValidated} file(s)`,\n );\n } else if (!filesValidated) {\n logger.warn(`No files to perform configuration validation against`);\n }\n // Use exitCode (not process.exit) so async log streams can flush\n process.exitCode = returnVal;\n });\n\n await program.parseAsync();\n})().catch((e) => {\n // Commander throws an error at the end of Action execution i.e. as part of the `help` and `version` commands, and so we don't want to return an error code in this case\n if (\n e instanceof CommanderError &&\n (e.code === 'commander.helpDisplayed' || e.code === 'commander.version')\n ) {\n return;\n }\n\n // oxlint-disable-next-line no-console -- intentional: display critical error on CLI\n console.error(e);\n process.exit(99);\n});\n"],"mappings":"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"}
@@ -29,7 +29,7 @@ var BitriseDatasource = class BitriseDatasource extends Datasource {
29
29
  if (!registryUrl) return null;
30
30
  const parsedUrl = parseGitUrl(registryUrl);
31
31
  if (detectPlatform(registryUrl) !== "github") {
32
- logger.once.warn(`${parsedUrl.source} is not a supported Git hoster for this datasource`);
32
+ logger.once.warn({ source: parsedUrl.source }, "Unsupported Git hoster for this datasource");
33
33
  return null;
34
34
  }
35
35
  const result = { releases: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["semver"],"sources":["../../../../lib/modules/datasource/bitrise/index.ts"],"sourcesContent":["import { isArray } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { detectPlatform } from '../../../util/common.ts';\nimport { parseGitUrl } from '../../../util/git/url.ts';\nimport { GithubHttp } from '../../../util/http/github.ts';\nimport { fromBase64 } from '../../../util/string.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { GithubContentResponse } from '../../platform/github/schema.ts';\nimport semver from '../../versioning/semver/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport { BitriseStepFile } from './schema.ts';\n\nexport class BitriseDatasource extends Datasource {\n static readonly id = 'bitrise';\n\n override readonly http: GithubHttp;\n\n constructor() {\n super(BitriseDatasource.id);\n\n this.http = new GithubHttp(this.id);\n }\n\n override readonly customRegistrySupport = true;\n\n override readonly defaultRegistryUrls = [\n 'https://github.com/bitrise-io/bitrise-steplib.git',\n ];\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `published_at` field in the results.';\n override readonly sourceUrlSupport = 'release';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `source_code_url` field of the release object in the results.';\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const parsedUrl = parseGitUrl(registryUrl);\n if (detectPlatform(registryUrl) !== 'github') {\n logger.once.warn(\n `${parsedUrl.source} is not a supported Git hoster for this datasource`,\n );\n return null;\n }\n\n const result: ReleaseResult = {\n releases: [],\n };\n\n const massagedPackageName = encodeURIComponent(packageName);\n const baseApiURL =\n parsedUrl.resource === 'github.com'\n ? 'https://api.github.com'\n : `https://${parsedUrl.resource}/api/v3`;\n const packageUrl = joinUrlParts(\n baseApiURL,\n 'repos',\n parsedUrl.full_name,\n 'contents/steps',\n massagedPackageName,\n );\n\n const { body: packageRaw } = await this.http.getJson(\n packageUrl,\n GithubContentResponse,\n );\n\n if (!isArray(packageRaw)) {\n logger.warn(\n { data: packageRaw, url: packageUrl },\n 'Got unexpected response for Bitrise package location',\n );\n return null;\n }\n\n for (const versionDir of packageRaw.filter((element) =>\n semver.isValid(element.name),\n )) {\n const stepUrl = joinUrlParts(packageUrl, versionDir.name, 'step.yml');\n // TODO use getRawFile when ready #30155\n const { body } = await this.http.getJson(stepUrl, GithubContentResponse);\n if (!('content' in body)) {\n logger.warn(\n { data: body, url: stepUrl },\n 'Got unexpected response for Bitrise step location',\n );\n return null;\n }\n if (body.encoding !== 'base64') {\n logger.warn(\n { encoding: body.encoding, data: body, url: stepUrl },\n `Got unexpected encoding for Bitrise step location`,\n );\n return null;\n }\n\n const content = fromBase64(body.content);\n const { published_at, source_code_url } = BitriseStepFile.parse(content);\n\n result.releases.push({\n version: versionDir.name,\n releaseTimestamp: published_at,\n sourceUrl: source_code_url,\n });\n }\n\n // if we have no releases return null\n if (!result.releases.length) {\n return null;\n }\n\n return {\n ...result,\n homepage: `https://bitrise.io/integrations/steps/${packageName}`,\n };\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${BitriseDatasource.id}`,\n key: `${config.registryUrl}/${config.packageName}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,IAAa,oBAAb,MAAa,0BAA0B,WAAW;CAChD,OAAgB,KAAK;CAErB;CAEA,cAAc;EACZ,MAAM,kBAAkB,EAAE;EAE1B,KAAK,OAAO,IAAI,WAAW,KAAK,EAAE;CACpC;CAEA,wBAA0C;CAE1C,sBAAwC,CACtC,mDACF;CAEA,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,MAAc,aAAa,EACzB,aACA,eACmD;;EAEnD,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,YAAY,YAAY,WAAW;EACzC,IAAI,eAAe,WAAW,MAAM,UAAU;GAC5C,OAAO,KAAK,KACV,GAAG,UAAU,OAAO,mDACtB;GACA,OAAO;EACT;EAEA,MAAM,SAAwB,EAC5B,UAAU,CAAC,EACb;EAEA,MAAM,sBAAsB,mBAAmB,WAAW;EAK1D,MAAM,aAAa,aAHjB,UAAU,aAAa,eACnB,2BACA,WAAW,UAAU,SAAS,UAGlC,SACA,UAAU,WACV,kBACA,mBACF;EAEA,MAAM,EAAE,MAAM,eAAe,MAAM,KAAK,KAAK,QAC3C,YACA,qBACF;EAEA,IAAI,CAAC,QAAQ,UAAU,GAAG;GACxB,OAAO,KACL;IAAE,MAAM;IAAY,KAAK;GAAW,GACpC,sDACF;GACA,OAAO;EACT;EAEA,KAAK,MAAM,cAAc,WAAW,QAAQ,YAC1CA,IAAO,QAAQ,QAAQ,IAAI,CAC7B,GAAG;GACD,MAAM,UAAU,aAAa,YAAY,WAAW,MAAM,UAAU;GAEpE,MAAM,EAAE,SAAS,MAAM,KAAK,KAAK,QAAQ,SAAS,qBAAqB;GACvE,IAAI,EAAE,aAAa,OAAO;IACxB,OAAO,KACL;KAAE,MAAM;KAAM,KAAK;IAAQ,GAC3B,mDACF;IACA,OAAO;GACT;GACA,IAAI,KAAK,aAAa,UAAU;IAC9B,OAAO,KACL;KAAE,UAAU,KAAK;KAAU,MAAM;KAAM,KAAK;IAAQ,GACpD,mDACF;IACA,OAAO;GACT;GAEA,MAAM,UAAU,WAAW,KAAK,OAAO;GACvC,MAAM,EAAE,cAAc,oBAAoB,gBAAgB,MAAM,OAAO;GAEvE,OAAO,SAAS,KAAK;IACnB,SAAS,WAAW;IACpB,kBAAkB;IAClB,WAAW;GACb,CAAC;EACH;EAGA,IAAI,CAAC,OAAO,SAAS,QACnB,OAAO;EAGT,OAAO;GACL,GAAG;GACH,UAAU,yCAAyC;EACrD;CACF;CAEA,YAAY,QAA0D;EACpE,OAAO,UACL;GACE,WAAW,cAAc,kBAAkB;GAC3C,KAAK,GAAG,OAAO,YAAY,GAAG,OAAO;GACrC,UAAU;EACZ,SACM,KAAK,aAAa,MAAM,CAChC;CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":["semver"],"sources":["../../../../lib/modules/datasource/bitrise/index.ts"],"sourcesContent":["import { isArray } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { detectPlatform } from '../../../util/common.ts';\nimport { parseGitUrl } from '../../../util/git/url.ts';\nimport { GithubHttp } from '../../../util/http/github.ts';\nimport { fromBase64 } from '../../../util/string.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { GithubContentResponse } from '../../platform/github/schema.ts';\nimport semver from '../../versioning/semver/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, ReleaseResult } from '../types.ts';\nimport { BitriseStepFile } from './schema.ts';\n\nexport class BitriseDatasource extends Datasource {\n static readonly id = 'bitrise';\n\n override readonly http: GithubHttp;\n\n constructor() {\n super(BitriseDatasource.id);\n\n this.http = new GithubHttp(this.id);\n }\n\n override readonly customRegistrySupport = true;\n\n override readonly defaultRegistryUrls = [\n 'https://github.com/bitrise-io/bitrise-steplib.git',\n ];\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `published_at` field in the results.';\n override readonly sourceUrlSupport = 'release';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `source_code_url` field of the release object in the results.';\n\n private async _getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const parsedUrl = parseGitUrl(registryUrl);\n if (detectPlatform(registryUrl) !== 'github') {\n logger.once.warn(\n { source: parsedUrl.source },\n 'Unsupported Git hoster for this datasource',\n );\n return null;\n }\n\n const result: ReleaseResult = {\n releases: [],\n };\n\n const massagedPackageName = encodeURIComponent(packageName);\n const baseApiURL =\n parsedUrl.resource === 'github.com'\n ? 'https://api.github.com'\n : `https://${parsedUrl.resource}/api/v3`;\n const packageUrl = joinUrlParts(\n baseApiURL,\n 'repos',\n parsedUrl.full_name,\n 'contents/steps',\n massagedPackageName,\n );\n\n const { body: packageRaw } = await this.http.getJson(\n packageUrl,\n GithubContentResponse,\n );\n\n if (!isArray(packageRaw)) {\n logger.warn(\n { data: packageRaw, url: packageUrl },\n 'Got unexpected response for Bitrise package location',\n );\n return null;\n }\n\n for (const versionDir of packageRaw.filter((element) =>\n semver.isValid(element.name),\n )) {\n const stepUrl = joinUrlParts(packageUrl, versionDir.name, 'step.yml');\n // TODO use getRawFile when ready #30155\n const { body } = await this.http.getJson(stepUrl, GithubContentResponse);\n if (!('content' in body)) {\n logger.warn(\n { data: body, url: stepUrl },\n 'Got unexpected response for Bitrise step location',\n );\n return null;\n }\n if (body.encoding !== 'base64') {\n logger.warn(\n { encoding: body.encoding, data: body, url: stepUrl },\n `Got unexpected encoding for Bitrise step location`,\n );\n return null;\n }\n\n const content = fromBase64(body.content);\n const { published_at, source_code_url } = BitriseStepFile.parse(content);\n\n result.releases.push({\n version: versionDir.name,\n releaseTimestamp: published_at,\n sourceUrl: source_code_url,\n });\n }\n\n // if we have no releases return null\n if (!result.releases.length) {\n return null;\n }\n\n return {\n ...result,\n homepage: `https://bitrise.io/integrations/steps/${packageName}`,\n };\n }\n\n getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {\n return withCache(\n {\n namespace: `datasource-${BitriseDatasource.id}`,\n key: `${config.registryUrl}/${config.packageName}`,\n fallback: true,\n },\n () => this._getReleases(config),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,IAAa,oBAAb,MAAa,0BAA0B,WAAW;CAChD,OAAgB,KAAK;CAErB;CAEA,cAAc;EACZ,MAAM,kBAAkB,EAAE;EAE1B,KAAK,OAAO,IAAI,WAAW,KAAK,EAAE;CACpC;CAEA,wBAA0C;CAE1C,sBAAwC,CACtC,mDACF;CAEA,0BAA4C;CAC5C,uBACE;CACF,mBAAqC;CACrC,gBACE;CAEF,MAAc,aAAa,EACzB,aACA,eACmD;;EAEnD,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,YAAY,YAAY,WAAW;EACzC,IAAI,eAAe,WAAW,MAAM,UAAU;GAC5C,OAAO,KAAK,KACV,EAAE,QAAQ,UAAU,OAAO,GAC3B,4CACF;GACA,OAAO;EACT;EAEA,MAAM,SAAwB,EAC5B,UAAU,CAAC,EACb;EAEA,MAAM,sBAAsB,mBAAmB,WAAW;EAK1D,MAAM,aAAa,aAHjB,UAAU,aAAa,eACnB,2BACA,WAAW,UAAU,SAAS,UAGlC,SACA,UAAU,WACV,kBACA,mBACF;EAEA,MAAM,EAAE,MAAM,eAAe,MAAM,KAAK,KAAK,QAC3C,YACA,qBACF;EAEA,IAAI,CAAC,QAAQ,UAAU,GAAG;GACxB,OAAO,KACL;IAAE,MAAM;IAAY,KAAK;GAAW,GACpC,sDACF;GACA,OAAO;EACT;EAEA,KAAK,MAAM,cAAc,WAAW,QAAQ,YAC1CA,IAAO,QAAQ,QAAQ,IAAI,CAC7B,GAAG;GACD,MAAM,UAAU,aAAa,YAAY,WAAW,MAAM,UAAU;GAEpE,MAAM,EAAE,SAAS,MAAM,KAAK,KAAK,QAAQ,SAAS,qBAAqB;GACvE,IAAI,EAAE,aAAa,OAAO;IACxB,OAAO,KACL;KAAE,MAAM;KAAM,KAAK;IAAQ,GAC3B,mDACF;IACA,OAAO;GACT;GACA,IAAI,KAAK,aAAa,UAAU;IAC9B,OAAO,KACL;KAAE,UAAU,KAAK;KAAU,MAAM;KAAM,KAAK;IAAQ,GACpD,mDACF;IACA,OAAO;GACT;GAEA,MAAM,UAAU,WAAW,KAAK,OAAO;GACvC,MAAM,EAAE,cAAc,oBAAoB,gBAAgB,MAAM,OAAO;GAEvE,OAAO,SAAS,KAAK;IACnB,SAAS,WAAW;IACpB,kBAAkB;IAClB,WAAW;GACb,CAAC;EACH;EAGA,IAAI,CAAC,OAAO,SAAS,QACnB,OAAO;EAGT,OAAO;GACL,GAAG;GACH,UAAU,yCAAyC;EACrD;CACF;CAEA,YAAY,QAA0D;EACpE,OAAO,UACL;GACE,WAAW,cAAc,kBAAkB;GAC3C,KAAK,GAAG,OAAO,YAAY,GAAG,OAAO;GACrC,UAAU;EACZ,SACM,KAAK,aAAa,MAAM,CAChC;CACF;AACF"}
@@ -30,7 +30,10 @@ var CustomDatasource = class CustomDatasource extends Datasource {
30
30
  for (const transformTemplate of transformTemplates) {
31
31
  const expression = getExpression(transformTemplate);
32
32
  if (expression instanceof Error) {
33
- logger.once.warn({ errorMessage: expression.message }, `Invalid JSONata expression: ${transformTemplate}`);
33
+ logger.once.warn({
34
+ errorMessage: expression.message,
35
+ transformTemplate
36
+ }, "Invalid JSONata expression");
34
37
  return null;
35
38
  }
36
39
  try {
@@ -41,7 +44,10 @@ var CustomDatasource = class CustomDatasource extends Datasource {
41
44
  }, `Custom datasource transformed data.`);
42
45
  data = modifiedData;
43
46
  } catch (err) {
44
- logger.once.warn({ err }, `Error while evaluating JSONata expression: ${transformTemplate}`);
47
+ logger.once.warn({
48
+ err,
49
+ transformTemplate
50
+ }, "Error while evaluating JSONata expression");
45
51
  return null;
46
52
  }
47
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/custom/index.ts"],"sourcesContent":["import { isNullOrUndefined } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { getExpression } from '../../../util/jsonata.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { fetchers } from './formats/index.ts';\nimport { ReleaseResultZod } from './schema.ts';\nimport { getCustomConfig } from './utils.ts';\n\nexport class CustomDatasource extends Datasource {\n static readonly id = 'custom';\n\n override customRegistrySupport = true;\n\n constructor() {\n super(CustomDatasource.id);\n }\n\n async getReleases(\n getReleasesConfig: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const config = getCustomConfig(getReleasesConfig);\n if (isNullOrUndefined(config)) {\n return null;\n }\n\n const { defaultRegistryUrlTemplate, transformTemplates, format } = config;\n\n const fetcher = fetchers[format];\n const isLocalRegistry = defaultRegistryUrlTemplate.startsWith('file://');\n\n let data: unknown;\n try {\n if (isLocalRegistry) {\n data = await fetcher.readFile(\n defaultRegistryUrlTemplate.replace('file://', ''),\n );\n } else {\n data = await fetcher.fetch(this.http, defaultRegistryUrlTemplate);\n }\n } catch (e) {\n this.handleHttpErrors(e);\n return null;\n }\n\n logger.trace(\n { data },\n `Custom datasource API fetcher '${format}' received data. Starting transformation.`,\n );\n\n for (const transformTemplate of transformTemplates) {\n const expression = getExpression(transformTemplate);\n\n if (expression instanceof Error) {\n logger.once.warn(\n { errorMessage: expression.message },\n `Invalid JSONata expression: ${transformTemplate}`,\n );\n return null;\n }\n\n try {\n const modifiedData = await expression.evaluate(data);\n\n logger.trace(\n { before: data, after: modifiedData },\n `Custom datasource transformed data.`,\n );\n\n data = modifiedData;\n } catch (err) {\n logger.once.warn(\n { err },\n `Error while evaluating JSONata expression: ${transformTemplate}`,\n );\n return null;\n }\n }\n\n try {\n const parsed = ReleaseResultZod.parse(data);\n return structuredClone(parsed);\n } catch (err) {\n logger.debug({ err }, `Response has failed validation`);\n logger.trace({ data }, 'Response that has failed validation');\n return null;\n }\n }\n\n override getDigest(\n _cfg: DigestConfig,\n _newValue?: string,\n ): Promise<string | null> {\n // Return null here to support setting a digest: value can be provided digest in getReleases\n return Promise.resolve(null);\n }\n}\n"],"mappings":";;;;;;;;AAaA,IAAa,mBAAb,MAAa,yBAAyB,WAAW;CAC/C,OAAgB,KAAK;CAErB,wBAAiC;CAEjC,cAAc;EACZ,MAAM,iBAAiB,EAAE;CAC3B;CAEA,MAAM,YACJ,mBAC+B;EAC/B,MAAM,SAAS,gBAAgB,iBAAiB;EAChD,IAAI,kBAAkB,MAAM,GAC1B,OAAO;EAGT,MAAM,EAAE,4BAA4B,oBAAoB,WAAW;EAEnE,MAAM,UAAU,SAAS;EACzB,MAAM,kBAAkB,2BAA2B,WAAW,SAAS;EAEvE,IAAI;EACJ,IAAI;GACF,IAAI,iBACF,OAAO,MAAM,QAAQ,SACnB,2BAA2B,QAAQ,WAAW,EAAE,CAClD;QAEA,OAAO,MAAM,QAAQ,MAAM,KAAK,MAAM,0BAA0B;EAEpE,SAAS,GAAG;GACV,KAAK,iBAAiB,CAAC;GACvB,OAAO;EACT;EAEA,OAAO,MACL,EAAE,KAAK,GACP,kCAAkC,OAAO,0CAC3C;EAEA,KAAK,MAAM,qBAAqB,oBAAoB;GAClD,MAAM,aAAa,cAAc,iBAAiB;GAElD,IAAI,sBAAsB,OAAO;IAC/B,OAAO,KAAK,KACV,EAAE,cAAc,WAAW,QAAQ,GACnC,+BAA+B,mBACjC;IACA,OAAO;GACT;GAEA,IAAI;IACF,MAAM,eAAe,MAAM,WAAW,SAAS,IAAI;IAEnD,OAAO,MACL;KAAE,QAAQ;KAAM,OAAO;IAAa,GACpC,qCACF;IAEA,OAAO;GACT,SAAS,KAAK;IACZ,OAAO,KAAK,KACV,EAAE,IAAI,GACN,8CAA8C,mBAChD;IACA,OAAO;GACT;EACF;EAEA,IAAI;GACF,MAAM,SAAS,iBAAiB,MAAM,IAAI;GAC1C,OAAO,gBAAgB,MAAM;EAC/B,SAAS,KAAK;GACZ,OAAO,MAAM,EAAE,IAAI,GAAG,gCAAgC;GACtD,OAAO,MAAM,EAAE,KAAK,GAAG,qCAAqC;GAC5D,OAAO;EACT;CACF;CAEA,UACE,MACA,WACwB;EAExB,OAAO,QAAQ,QAAQ,IAAI;CAC7B;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/datasource/custom/index.ts"],"sourcesContent":["import { isNullOrUndefined } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { getExpression } from '../../../util/jsonata.ts';\nimport { Datasource } from '../datasource.ts';\nimport type {\n DigestConfig,\n GetReleasesConfig,\n ReleaseResult,\n} from '../types.ts';\nimport { fetchers } from './formats/index.ts';\nimport { ReleaseResultZod } from './schema.ts';\nimport { getCustomConfig } from './utils.ts';\n\nexport class CustomDatasource extends Datasource {\n static readonly id = 'custom';\n\n override customRegistrySupport = true;\n\n constructor() {\n super(CustomDatasource.id);\n }\n\n async getReleases(\n getReleasesConfig: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const config = getCustomConfig(getReleasesConfig);\n if (isNullOrUndefined(config)) {\n return null;\n }\n\n const { defaultRegistryUrlTemplate, transformTemplates, format } = config;\n\n const fetcher = fetchers[format];\n const isLocalRegistry = defaultRegistryUrlTemplate.startsWith('file://');\n\n let data: unknown;\n try {\n if (isLocalRegistry) {\n data = await fetcher.readFile(\n defaultRegistryUrlTemplate.replace('file://', ''),\n );\n } else {\n data = await fetcher.fetch(this.http, defaultRegistryUrlTemplate);\n }\n } catch (e) {\n this.handleHttpErrors(e);\n return null;\n }\n\n logger.trace(\n { data },\n `Custom datasource API fetcher '${format}' received data. Starting transformation.`,\n );\n\n for (const transformTemplate of transformTemplates) {\n const expression = getExpression(transformTemplate);\n\n if (expression instanceof Error) {\n logger.once.warn(\n { errorMessage: expression.message, transformTemplate },\n 'Invalid JSONata expression',\n );\n return null;\n }\n\n try {\n const modifiedData = await expression.evaluate(data);\n\n logger.trace(\n { before: data, after: modifiedData },\n `Custom datasource transformed data.`,\n );\n\n data = modifiedData;\n } catch (err) {\n logger.once.warn(\n { err, transformTemplate },\n 'Error while evaluating JSONata expression',\n );\n return null;\n }\n }\n\n try {\n const parsed = ReleaseResultZod.parse(data);\n return structuredClone(parsed);\n } catch (err) {\n logger.debug({ err }, `Response has failed validation`);\n logger.trace({ data }, 'Response that has failed validation');\n return null;\n }\n }\n\n override getDigest(\n _cfg: DigestConfig,\n _newValue?: string,\n ): Promise<string | null> {\n // Return null here to support setting a digest: value can be provided digest in getReleases\n return Promise.resolve(null);\n }\n}\n"],"mappings":";;;;;;;;AAaA,IAAa,mBAAb,MAAa,yBAAyB,WAAW;CAC/C,OAAgB,KAAK;CAErB,wBAAiC;CAEjC,cAAc;EACZ,MAAM,iBAAiB,EAAE;CAC3B;CAEA,MAAM,YACJ,mBAC+B;EAC/B,MAAM,SAAS,gBAAgB,iBAAiB;EAChD,IAAI,kBAAkB,MAAM,GAC1B,OAAO;EAGT,MAAM,EAAE,4BAA4B,oBAAoB,WAAW;EAEnE,MAAM,UAAU,SAAS;EACzB,MAAM,kBAAkB,2BAA2B,WAAW,SAAS;EAEvE,IAAI;EACJ,IAAI;GACF,IAAI,iBACF,OAAO,MAAM,QAAQ,SACnB,2BAA2B,QAAQ,WAAW,EAAE,CAClD;QAEA,OAAO,MAAM,QAAQ,MAAM,KAAK,MAAM,0BAA0B;EAEpE,SAAS,GAAG;GACV,KAAK,iBAAiB,CAAC;GACvB,OAAO;EACT;EAEA,OAAO,MACL,EAAE,KAAK,GACP,kCAAkC,OAAO,0CAC3C;EAEA,KAAK,MAAM,qBAAqB,oBAAoB;GAClD,MAAM,aAAa,cAAc,iBAAiB;GAElD,IAAI,sBAAsB,OAAO;IAC/B,OAAO,KAAK,KACV;KAAE,cAAc,WAAW;KAAS;IAAkB,GACtD,4BACF;IACA,OAAO;GACT;GAEA,IAAI;IACF,MAAM,eAAe,MAAM,WAAW,SAAS,IAAI;IAEnD,OAAO,MACL;KAAE,QAAQ;KAAM,OAAO;IAAa,GACpC,qCACF;IAEA,OAAO;GACT,SAAS,KAAK;IACZ,OAAO,KAAK,KACV;KAAE;KAAK;IAAkB,GACzB,2CACF;IACA,OAAO;GACT;EACF;EAEA,IAAI;GACF,MAAM,SAAS,iBAAiB,MAAM,IAAI;GAC1C,OAAO,gBAAgB,MAAM;EAC/B,SAAS,KAAK;GACZ,OAAO,MAAM,EAAE,IAAI,GAAG,gCAAgC;GACtD,OAAO,MAAM,EAAE,KAAK,GAAG,qCAAqC;GAC5D,OAAO;EACT;CACF;CAEA,UACE,MACA,WACwB;EAExB,OAAO,QAAQ,QAAQ,IAAI;CAC7B;AACF"}
@@ -33,7 +33,10 @@ async function postprocessRelease(config, release) {
33
33
  }
34
34
  return result;
35
35
  } catch (err) {
36
- logger.once.warn({ err }, `Release interceptor failed for "${datasource}"`);
36
+ logger.once.warn({
37
+ err,
38
+ datasource
39
+ }, "Release interceptor failed");
37
40
  return release;
38
41
  }
39
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"postprocess-release.js","names":[],"sources":["../../../lib/modules/datasource/postprocess-release.ts"],"sourcesContent":["import { logger } from '../../logger/index.ts';\nimport type {\n LookupUpdateConfig,\n UpdateResult,\n} from '../../workers/repository/process/lookup/types.ts';\nimport { getDatasourceFor } from './common.ts';\nimport { Datasource } from './datasource.ts';\nimport type { Release } from './types.ts';\n\ntype Config = Partial<LookupUpdateConfig & UpdateResult>;\n\nexport async function postprocessRelease(\n config: Config,\n release: Release,\n): Promise<Release | null> {\n const { datasource } = config;\n\n const ds = datasource && getDatasourceFor(datasource);\n if (!ds) {\n logger.once.warn(\n { datasource },\n 'Failed to resolve datasource during release postprocessing',\n );\n return release;\n }\n\n if (\n ds.constructor.prototype.postprocessRelease ===\n Datasource.prototype.postprocessRelease\n ) {\n return release;\n }\n\n const { packageName } = config;\n if (!packageName) {\n logger.once.warn(\n { datasource },\n 'Release postprocessing is not supported for empty `packageName` field',\n );\n return release;\n }\n\n const registryUrl = config.registryUrl ?? config.registryUrls?.at(0) ?? null;\n\n try {\n const result = await ds.postprocessRelease(\n { packageName, registryUrl },\n release,\n );\n\n if (result === 'reject') {\n logger.debug(\n {\n datasource,\n packageName,\n registryUrl,\n version: release.version,\n versionOrig: release.versionOrig,\n },\n 'Rejected release',\n );\n return null;\n }\n\n return result;\n } catch (err) {\n logger.once.warn({ err }, `Release interceptor failed for \"${datasource}\"`);\n return release;\n }\n}\n"],"mappings":";;;;AAWA,eAAsB,mBACpB,QACA,SACyB;CACzB,MAAM,EAAE,eAAe;CAEvB,MAAM,KAAK,cAAc,iBAAiB,UAAU;CACpD,IAAI,CAAC,IAAI;EACP,OAAO,KAAK,KACV,EAAE,WAAW,GACb,4DACF;EACA,OAAO;CACT;CAEA,IACE,GAAG,YAAY,UAAU,uBACzB,WAAW,UAAU,oBAErB,OAAO;CAGT,MAAM,EAAE,gBAAgB;CACxB,IAAI,CAAC,aAAa;EAChB,OAAO,KAAK,KACV,EAAE,WAAW,GACb,uEACF;EACA,OAAO;CACT;CAEA,MAAM,cAAc,OAAO,eAAe,OAAO,cAAc,GAAG,CAAC,KAAK;CAExE,IAAI;EACF,MAAM,SAAS,MAAM,GAAG,mBACtB;GAAE;GAAa;EAAY,GAC3B,OACF;EAEA,IAAI,WAAW,UAAU;GACvB,OAAO,MACL;IACE;IACA;IACA;IACA,SAAS,QAAQ;IACjB,aAAa,QAAQ;GACvB,GACA,kBACF;GACA,OAAO;EACT;EAEA,OAAO;CACT,SAAS,KAAK;EACZ,OAAO,KAAK,KAAK,EAAE,IAAI,GAAG,mCAAmC,WAAW,EAAE;EAC1E,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"postprocess-release.js","names":[],"sources":["../../../lib/modules/datasource/postprocess-release.ts"],"sourcesContent":["import { logger } from '../../logger/index.ts';\nimport type {\n LookupUpdateConfig,\n UpdateResult,\n} from '../../workers/repository/process/lookup/types.ts';\nimport { getDatasourceFor } from './common.ts';\nimport { Datasource } from './datasource.ts';\nimport type { Release } from './types.ts';\n\ntype Config = Partial<LookupUpdateConfig & UpdateResult>;\n\nexport async function postprocessRelease(\n config: Config,\n release: Release,\n): Promise<Release | null> {\n const { datasource } = config;\n\n const ds = datasource && getDatasourceFor(datasource);\n if (!ds) {\n logger.once.warn(\n { datasource },\n 'Failed to resolve datasource during release postprocessing',\n );\n return release;\n }\n\n if (\n ds.constructor.prototype.postprocessRelease ===\n Datasource.prototype.postprocessRelease\n ) {\n return release;\n }\n\n const { packageName } = config;\n if (!packageName) {\n logger.once.warn(\n { datasource },\n 'Release postprocessing is not supported for empty `packageName` field',\n );\n return release;\n }\n\n const registryUrl = config.registryUrl ?? config.registryUrls?.at(0) ?? null;\n\n try {\n const result = await ds.postprocessRelease(\n { packageName, registryUrl },\n release,\n );\n\n if (result === 'reject') {\n logger.debug(\n {\n datasource,\n packageName,\n registryUrl,\n version: release.version,\n versionOrig: release.versionOrig,\n },\n 'Rejected release',\n );\n return null;\n }\n\n return result;\n } catch (err) {\n logger.once.warn({ err, datasource }, 'Release interceptor failed');\n return release;\n }\n}\n"],"mappings":";;;;AAWA,eAAsB,mBACpB,QACA,SACyB;CACzB,MAAM,EAAE,eAAe;CAEvB,MAAM,KAAK,cAAc,iBAAiB,UAAU;CACpD,IAAI,CAAC,IAAI;EACP,OAAO,KAAK,KACV,EAAE,WAAW,GACb,4DACF;EACA,OAAO;CACT;CAEA,IACE,GAAG,YAAY,UAAU,uBACzB,WAAW,UAAU,oBAErB,OAAO;CAGT,MAAM,EAAE,gBAAgB;CACxB,IAAI,CAAC,aAAa;EAChB,OAAO,KAAK,KACV,EAAE,WAAW,GACb,uEACF;EACA,OAAO;CACT;CAEA,MAAM,cAAc,OAAO,eAAe,OAAO,cAAc,GAAG,CAAC,KAAK;CAExE,IAAI;EACF,MAAM,SAAS,MAAM,GAAG,mBACtB;GAAE;GAAa;EAAY,GAC3B,OACF;EAEA,IAAI,WAAW,UAAU;GACvB,OAAO,MACL;IACE;IACA;IACA;IACA,SAAS,QAAQ;IACjB,aAAa,QAAQ;GACvB,GACA,kBACF;GACA,OAAO;EACT;EAEA,OAAO;CACT,SAAS,KAAK;EACZ,OAAO,KAAK,KAAK;GAAE;GAAK;EAAW,GAAG,4BAA4B;EAClE,OAAO;CACT;AACF"}
@@ -10,7 +10,7 @@ async function updateBazelLockfile(lockFileName, cwdFile, isLockFileMaintenance,
10
10
  const allowlist = GlobalConfig.get("allowedUnsafeExecutions");
11
11
  const command = "bazel mod deps --lockfile_mode=update";
12
12
  if (!allowlist.includes("bazelModDeps")) {
13
- logger.once.warn(`Bazel command, \`${command}\`, was requested to run, but \`bazelModDeps\` is not permitted in the allowedUnsafeExecutions`);
13
+ logger.once.warn({ command }, "Bazel command was requested to run, but `bazelModDeps` is not permitted in the allowedUnsafeExecutions");
14
14
  return null;
15
15
  }
16
16
  if (isLockFileMaintenance) await deleteLocalFile(lockFileName);
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/bazel-module/lockfile.ts"],"sourcesContent":["import { 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 { deleteLocalFile, readLocalFile } from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport type { UpdateArtifactsResult } from '../types.ts';\n\nexport async function updateBazelLockfile(\n lockFileName: string,\n cwdFile: string,\n isLockFileMaintenance: boolean | undefined,\n bazeliskConstraint: string | undefined,\n): Promise<UpdateArtifactsResult[] | null> {\n try {\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n\n const command = 'bazel mod deps --lockfile_mode=update';\n\n if (!allowlist.includes('bazelModDeps')) {\n logger.once.warn(\n `Bazel command, \\`${command}\\`, was requested to run, but \\`bazelModDeps\\` is not permitted in the allowedUnsafeExecutions`,\n );\n return null;\n }\n\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n const execOptions: ExecOptions = {\n cwdFile,\n docker: {},\n toolConstraints: [\n { toolName: 'bazelisk', constraint: bazeliskConstraint },\n ],\n };\n await exec(command, execOptions);\n\n const status = await getRepoStatus();\n if (\n !status.modified.includes(lockFileName) &&\n !status.not_added?.includes(lockFileName)\n ) {\n return null;\n }\n\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.warn(\n { lockFile: lockFileName, err },\n 'Failed to update MODULE.bazel.lock',\n );\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;AASA,eAAsB,oBACpB,cACA,SACA,uBACA,oBACyC;CACzC,IAAI;EACF,MAAM,YAAY,aAAa,IAAI,yBAAyB;EAE5D,MAAM,UAAU;EAEhB,IAAI,CAAC,UAAU,SAAS,cAAc,GAAG;GACvC,OAAO,KAAK,KACV,oBAAoB,QAAQ,+FAC9B;GACA,OAAO;EACT;EAEA,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAUpC,MAAM,KAAK,SAAS;GANlB;GACA,QAAQ,CAAC;GACT,iBAAiB,CACf;IAAE,UAAU;IAAY,YAAY;GAAmB,CACzD;EAE4B,CAAC;EAE/B,MAAM,SAAS,MAAM,cAAc;EACnC,IACE,CAAC,OAAO,SAAS,SAAS,YAAY,KACtC,CAAC,OAAO,WAAW,SAAS,YAAY,GAExC,OAAO;EAIT,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU,MANa,cAAc,cAAc,MAAM;EAO3D,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,KACL;GAAE,UAAU;GAAc;EAAI,GAC9B,oCACF;EACA,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,IAAI;EACd,EACF,CACF;CACF;AACF"}
1
+ {"version":3,"file":"lockfile.js","names":[],"sources":["../../../../lib/modules/manager/bazel-module/lockfile.ts"],"sourcesContent":["import { 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 { deleteLocalFile, readLocalFile } from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport type { UpdateArtifactsResult } from '../types.ts';\n\nexport async function updateBazelLockfile(\n lockFileName: string,\n cwdFile: string,\n isLockFileMaintenance: boolean | undefined,\n bazeliskConstraint: string | undefined,\n): Promise<UpdateArtifactsResult[] | null> {\n try {\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n\n const command = 'bazel mod deps --lockfile_mode=update';\n\n if (!allowlist.includes('bazelModDeps')) {\n logger.once.warn(\n { command },\n 'Bazel command was requested to run, but `bazelModDeps` is not permitted in the allowedUnsafeExecutions',\n );\n return null;\n }\n\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n const execOptions: ExecOptions = {\n cwdFile,\n docker: {},\n toolConstraints: [\n { toolName: 'bazelisk', constraint: bazeliskConstraint },\n ],\n };\n await exec(command, execOptions);\n\n const status = await getRepoStatus();\n if (\n !status.modified.includes(lockFileName) &&\n !status.not_added?.includes(lockFileName)\n ) {\n return null;\n }\n\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.warn(\n { lockFile: lockFileName, err },\n 'Failed to update MODULE.bazel.lock',\n );\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;AASA,eAAsB,oBACpB,cACA,SACA,uBACA,oBACyC;CACzC,IAAI;EACF,MAAM,YAAY,aAAa,IAAI,yBAAyB;EAE5D,MAAM,UAAU;EAEhB,IAAI,CAAC,UAAU,SAAS,cAAc,GAAG;GACvC,OAAO,KAAK,KACV,EAAE,QAAQ,GACV,wGACF;GACA,OAAO;EACT;EAEA,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAUpC,MAAM,KAAK,SAAS;GANlB;GACA,QAAQ,CAAC;GACT,iBAAiB,CACf;IAAE,UAAU;IAAY,YAAY;GAAmB,CACzD;EAE4B,CAAC;EAE/B,MAAM,SAAS,MAAM,cAAc;EACnC,IACE,CAAC,OAAO,SAAS,SAAS,YAAY,KACtC,CAAC,OAAO,WAAW,SAAS,YAAY,GAExC,OAAO;EAIT,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU,MANa,cAAc,cAAc,MAAM;EAO3D,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,KACL;GAAE,UAAU;GAAc;EAAI,GAC9B,oCACF;EACA,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,IAAI;EACd,EACF,CACF;CACF;AACF"}
@@ -30,7 +30,11 @@ async function updateArtifacts(updateArtifact) {
30
30
  } }];
31
31
  }
32
32
  for (const updateDep of updatedDeps) if (updateDep.depType === "tasks" || updateDep.depType === "tasks.command") {
33
- logger.warn(`depType: "${updateDep.depType}", depName: "${updateDep.depName}" can't be updated with a lock file: "${lockFileName}"`);
33
+ logger.warn({
34
+ depType: updateDep.depType,
35
+ depName: updateDep.depName,
36
+ lockFileName
37
+ }, "Dependency can't be updated with a lock file");
34
38
  return [{ artifactError: {
35
39
  fileName: lockFileName,
36
40
  stderr: `depType: "${updateDep.depType}", depName: "${updateDep.depName}" can't be updated with a lock file: "${lockFileName}"`
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":["hostRules\n .findAll"],"sources":["../../../../lib/modules/manager/deno/artifacts.ts"],"sourcesContent":["import { isEmptyArray } from '@sindresorhus/is';\nimport upath from 'upath';\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 readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { processHostRules } from '../npm/post-update/rules.ts';\nimport {\n getNpmrcContent,\n resetNpmrcContent,\n updateNpmrcContent,\n} from '../npm/utils.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport type { DenoManagerData } from './types.ts';\n\nexport async function updateArtifacts(\n updateArtifact: UpdateArtifact<DenoManagerData>,\n): Promise<UpdateArtifactsResult[] | null> {\n const { packageFileName, updatedDeps, newPackageFileContent, config } =\n updateArtifact;\n logger.debug(`deno.updateArtifacts(${packageFileName})`);\n const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';\n\n if (isEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated deno deps - returning null');\n return null;\n }\n\n // falling back for lockFileMaintenance\n const lockFileName = updatedDeps[0]?.lockFiles?.[0] ?? config.lockFiles?.[0];\n\n if (!lockFileName) {\n logger.debug('No lock file found. Skipping artifact update.');\n return null;\n }\n\n const oldLockFileContent = await readLocalFile(lockFileName);\n if (!oldLockFileContent) {\n logger.debug(`Failed to read ${lockFileName}. Skipping artifact update.`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `Failed to read \"${lockFileName}\"`,\n },\n },\n ];\n }\n\n for (const updateDep of updatedDeps) {\n if (\n updateDep.depType === 'tasks' ||\n updateDep.depType === 'tasks.command'\n ) {\n logger.warn(\n `depType: \"${updateDep.depType}\", depName: \"${updateDep.depName}\" can't be updated with a lock file: \"${lockFileName}\"`,\n );\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `depType: \"${updateDep.depType}\", depName: \"${updateDep.depName}\" can't be updated with a lock file: \"${lockFileName}\"`,\n },\n },\n ];\n }\n }\n\n const pkgFileDir = upath.dirname(packageFileName);\n const { additionalNpmrcContent } = processHostRules();\n const npmrcContent = await getNpmrcContent(pkgFileDir);\n await updateNpmrcContent(pkgFileDir, npmrcContent, additionalNpmrcContent);\n\n try {\n await writeLocalFile(packageFileName, newPackageFileContent);\n\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n // run from its referred deno.json/deno.jsonc location if import map is used\n const importMapReferrerDep = updatedDeps.find(\n (dep) => dep.managerData?.importMapReferrer,\n );\n const cwdFile =\n importMapReferrerDep?.managerData?.importMapReferrer ?? packageFileName;\n\n const execOptions: ExecOptions = {\n cwdFile,\n docker: {},\n toolConstraints: [\n {\n toolName: 'deno',\n constraint: config.constraints?.deno,\n },\n ],\n };\n\n // \"deno install\" don't execute lifecycle scripts of package.json by default\n // https://docs.deno.com/runtime/reference/cli/install/#native-node.js-addons\n // deno.json(c) could have the `lock.frozen` field\n // we should always override the `frozen` flag due to if it would be specified true\n let command = 'deno install --frozen=false';\n\n // defaults as per https://docs.deno.com/runtime/fundamentals/security/#importing-from-the-web\n const defaultImportHosts = [\n 'deno.land:443',\n 'esm.sh:443',\n 'jsr.io:443',\n 'cdn.jsdelivr.net:443',\n 'raw.githubusercontent.com:443',\n 'gist.githubusercontent.com:443',\n ];\n const additionalImportHosts = hostRules\n .findAll({ hostType: 'npm' })\n .filter((rule) => rule.resolvedHost)\n .map((rule) => rule.resolvedHost);\n\n if (additionalImportHosts.length > 0) {\n // combine default and additional import hosts, removing duplicates\n const importHosts = [\n ...new Set([...defaultImportHosts, ...additionalImportHosts]),\n ].join(',');\n\n command += ` --allow-import=${importHosts}`;\n }\n\n // TODO: appending `--lockfile-only` is better to reduce disk usage\n // https://docs.deno.com/runtime/reference/cli/install/#options-lockfile-only\n await exec(command, execOptions);\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n\n const newLockFileContent = await readLocalFile(lockFileName);\n if (\n !newLockFileContent ||\n Buffer.compare(oldLockFileContent, newLockFileContent) === 0\n ) {\n return null;\n }\n\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockFileContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.warn({ lockfile: lockFileName, err }, `Failed to update lock file`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;;;;AAqBA,eAAsB,gBACpB,gBACyC;CACzC,MAAM,EAAE,iBAAiB,aAAa,uBAAuB,WAC3D;CACF,OAAO,MAAM,wBAAwB,gBAAgB,EAAE;CACvD,MAAM,wBAAwB,OAAO,eAAe;CAEpD,IAAI,aAAa,WAAW,KAAK,CAAC,uBAAuB;EACvD,OAAO,MAAM,uCAAuC;EACpD,OAAO;CACT;CAGA,MAAM,eAAe,YAAY,EAAE,EAAE,YAAY,MAAM,OAAO,YAAY;CAE1E,IAAI,CAAC,cAAc;EACjB,OAAO,MAAM,+CAA+C;EAC5D,OAAO;CACT;CAEA,MAAM,qBAAqB,MAAM,cAAc,YAAY;CAC3D,IAAI,CAAC,oBAAoB;EACvB,OAAO,MAAM,kBAAkB,aAAa,4BAA4B;EACxE,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,mBAAmB,aAAa;EAC1C,EACF,CACF;CACF;CAEA,KAAK,MAAM,aAAa,aACtB,IACE,UAAU,YAAY,WACtB,UAAU,YAAY,iBACtB;EACA,OAAO,KACL,aAAa,UAAU,QAAQ,eAAe,UAAU,QAAQ,wCAAwC,aAAa,EACvH;EACA,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,aAAa,UAAU,QAAQ,eAAe,UAAU,QAAQ,wCAAwC,aAAa;EAC/H,EACF,CACF;CACF;CAGF,MAAM,aAAa,MAAM,QAAQ,eAAe;CAChD,MAAM,EAAE,2BAA2B,iBAAiB;CACpD,MAAM,eAAe,MAAM,gBAAgB,UAAU;CACrD,MAAM,mBAAmB,YAAY,cAAc,sBAAsB;CAEzE,IAAI;EACF,MAAM,eAAe,iBAAiB,qBAAqB;EAE3D,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAUpC,MAAM,cAA2B;GAC/B,SAP2B,YAAY,MACtC,QAAQ,IAAI,aAAa,iBAGP,CAAC,EAAE,aAAa,qBAAqB;GAIxD,QAAQ,CAAC;GACT,iBAAiB,CACf;IACE,UAAU;IACV,YAAY,OAAO,aAAa;GAClC,CACF;EACF;EAMA,IAAI,UAAU;EAGd,MAAM,qBAAqB;GACzB;GACA;GACA;GACA;GACA;GACA;EACF;EACA,MAAM,wBAAwBA,QACnB,EAAE,UAAU,MAAM,CAAC,CAAC,CAC5B,QAAQ,SAAS,KAAK,YAAY,CAAC,CACnC,KAAK,SAAS,KAAK,YAAY;EAElC,IAAI,sBAAsB,SAAS,GAAG;GAEpC,MAAM,cAAc,CAClB,mBAAG,IAAI,IAAI,CAAC,GAAG,oBAAoB,GAAG,qBAAqB,CAAC,CAC9D,CAAC,CAAC,KAAK,GAAG;GAEV,WAAW,mBAAmB;EAChC;EAIA,MAAM,KAAK,SAAS,WAAW;EAC/B,MAAM,kBAAkB,YAAY,YAAY;EAEhD,MAAM,qBAAqB,MAAM,cAAc,YAAY;EAC3D,IACE,CAAC,sBACD,OAAO,QAAQ,oBAAoB,kBAAkB,MAAM,GAE3D,OAAO;EAGT,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,KAAK;GAAE,UAAU;GAAc;EAAI,GAAG,4BAA4B;EACzE,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,IAAI;EACd,EACF,CACF;CACF;AACF"}
1
+ {"version":3,"file":"artifacts.js","names":["hostRules\n .findAll"],"sources":["../../../../lib/modules/manager/deno/artifacts.ts"],"sourcesContent":["import { isEmptyArray } from '@sindresorhus/is';\nimport upath from 'upath';\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 readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { processHostRules } from '../npm/post-update/rules.ts';\nimport {\n getNpmrcContent,\n resetNpmrcContent,\n updateNpmrcContent,\n} from '../npm/utils.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport type { DenoManagerData } from './types.ts';\n\nexport async function updateArtifacts(\n updateArtifact: UpdateArtifact<DenoManagerData>,\n): Promise<UpdateArtifactsResult[] | null> {\n const { packageFileName, updatedDeps, newPackageFileContent, config } =\n updateArtifact;\n logger.debug(`deno.updateArtifacts(${packageFileName})`);\n const isLockFileMaintenance = config.updateType === 'lockFileMaintenance';\n\n if (isEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated deno deps - returning null');\n return null;\n }\n\n // falling back for lockFileMaintenance\n const lockFileName = updatedDeps[0]?.lockFiles?.[0] ?? config.lockFiles?.[0];\n\n if (!lockFileName) {\n logger.debug('No lock file found. Skipping artifact update.');\n return null;\n }\n\n const oldLockFileContent = await readLocalFile(lockFileName);\n if (!oldLockFileContent) {\n logger.debug(`Failed to read ${lockFileName}. Skipping artifact update.`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `Failed to read \"${lockFileName}\"`,\n },\n },\n ];\n }\n\n for (const updateDep of updatedDeps) {\n if (\n updateDep.depType === 'tasks' ||\n updateDep.depType === 'tasks.command'\n ) {\n logger.warn(\n {\n depType: updateDep.depType,\n depName: updateDep.depName,\n lockFileName,\n },\n \"Dependency can't be updated with a lock file\",\n );\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `depType: \"${updateDep.depType}\", depName: \"${updateDep.depName}\" can't be updated with a lock file: \"${lockFileName}\"`,\n },\n },\n ];\n }\n }\n\n const pkgFileDir = upath.dirname(packageFileName);\n const { additionalNpmrcContent } = processHostRules();\n const npmrcContent = await getNpmrcContent(pkgFileDir);\n await updateNpmrcContent(pkgFileDir, npmrcContent, additionalNpmrcContent);\n\n try {\n await writeLocalFile(packageFileName, newPackageFileContent);\n\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n\n // run from its referred deno.json/deno.jsonc location if import map is used\n const importMapReferrerDep = updatedDeps.find(\n (dep) => dep.managerData?.importMapReferrer,\n );\n const cwdFile =\n importMapReferrerDep?.managerData?.importMapReferrer ?? packageFileName;\n\n const execOptions: ExecOptions = {\n cwdFile,\n docker: {},\n toolConstraints: [\n {\n toolName: 'deno',\n constraint: config.constraints?.deno,\n },\n ],\n };\n\n // \"deno install\" don't execute lifecycle scripts of package.json by default\n // https://docs.deno.com/runtime/reference/cli/install/#native-node.js-addons\n // deno.json(c) could have the `lock.frozen` field\n // we should always override the `frozen` flag due to if it would be specified true\n let command = 'deno install --frozen=false';\n\n // defaults as per https://docs.deno.com/runtime/fundamentals/security/#importing-from-the-web\n const defaultImportHosts = [\n 'deno.land:443',\n 'esm.sh:443',\n 'jsr.io:443',\n 'cdn.jsdelivr.net:443',\n 'raw.githubusercontent.com:443',\n 'gist.githubusercontent.com:443',\n ];\n const additionalImportHosts = hostRules\n .findAll({ hostType: 'npm' })\n .filter((rule) => rule.resolvedHost)\n .map((rule) => rule.resolvedHost);\n\n if (additionalImportHosts.length > 0) {\n // combine default and additional import hosts, removing duplicates\n const importHosts = [\n ...new Set([...defaultImportHosts, ...additionalImportHosts]),\n ].join(',');\n\n command += ` --allow-import=${importHosts}`;\n }\n\n // TODO: appending `--lockfile-only` is better to reduce disk usage\n // https://docs.deno.com/runtime/reference/cli/install/#options-lockfile-only\n await exec(command, execOptions);\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n\n const newLockFileContent = await readLocalFile(lockFileName);\n if (\n !newLockFileContent ||\n Buffer.compare(oldLockFileContent, newLockFileContent) === 0\n ) {\n return null;\n }\n\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockFileContent,\n },\n },\n ];\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.warn({ lockfile: lockFileName, err }, `Failed to update lock file`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;;;;AAqBA,eAAsB,gBACpB,gBACyC;CACzC,MAAM,EAAE,iBAAiB,aAAa,uBAAuB,WAC3D;CACF,OAAO,MAAM,wBAAwB,gBAAgB,EAAE;CACvD,MAAM,wBAAwB,OAAO,eAAe;CAEpD,IAAI,aAAa,WAAW,KAAK,CAAC,uBAAuB;EACvD,OAAO,MAAM,uCAAuC;EACpD,OAAO;CACT;CAGA,MAAM,eAAe,YAAY,EAAE,EAAE,YAAY,MAAM,OAAO,YAAY;CAE1E,IAAI,CAAC,cAAc;EACjB,OAAO,MAAM,+CAA+C;EAC5D,OAAO;CACT;CAEA,MAAM,qBAAqB,MAAM,cAAc,YAAY;CAC3D,IAAI,CAAC,oBAAoB;EACvB,OAAO,MAAM,kBAAkB,aAAa,4BAA4B;EACxE,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,mBAAmB,aAAa;EAC1C,EACF,CACF;CACF;CAEA,KAAK,MAAM,aAAa,aACtB,IACE,UAAU,YAAY,WACtB,UAAU,YAAY,iBACtB;EACA,OAAO,KACL;GACE,SAAS,UAAU;GACnB,SAAS,UAAU;GACnB;EACF,GACA,8CACF;EACA,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,aAAa,UAAU,QAAQ,eAAe,UAAU,QAAQ,wCAAwC,aAAa;EAC/H,EACF,CACF;CACF;CAGF,MAAM,aAAa,MAAM,QAAQ,eAAe;CAChD,MAAM,EAAE,2BAA2B,iBAAiB;CACpD,MAAM,eAAe,MAAM,gBAAgB,UAAU;CACrD,MAAM,mBAAmB,YAAY,cAAc,sBAAsB;CAEzE,IAAI;EACF,MAAM,eAAe,iBAAiB,qBAAqB;EAE3D,IAAI,uBACF,MAAM,gBAAgB,YAAY;EAUpC,MAAM,cAA2B;GAC/B,SAP2B,YAAY,MACtC,QAAQ,IAAI,aAAa,iBAGP,CAAC,EAAE,aAAa,qBAAqB;GAIxD,QAAQ,CAAC;GACT,iBAAiB,CACf;IACE,UAAU;IACV,YAAY,OAAO,aAAa;GAClC,CACF;EACF;EAMA,IAAI,UAAU;EAGd,MAAM,qBAAqB;GACzB;GACA;GACA;GACA;GACA;GACA;EACF;EACA,MAAM,wBAAwBA,QACnB,EAAE,UAAU,MAAM,CAAC,CAAC,CAC5B,QAAQ,SAAS,KAAK,YAAY,CAAC,CACnC,KAAK,SAAS,KAAK,YAAY;EAElC,IAAI,sBAAsB,SAAS,GAAG;GAEpC,MAAM,cAAc,CAClB,mBAAG,IAAI,IAAI,CAAC,GAAG,oBAAoB,GAAG,qBAAqB,CAAC,CAC9D,CAAC,CAAC,KAAK,GAAG;GAEV,WAAW,mBAAmB;EAChC;EAIA,MAAM,KAAK,SAAS,WAAW;EAC/B,MAAM,kBAAkB,YAAY,YAAY;EAEhD,MAAM,qBAAqB,MAAM,cAAc,YAAY;EAC3D,IACE,CAAC,sBACD,OAAO,QAAQ,oBAAoB,kBAAkB,MAAM,GAE3D,OAAO;EAGT,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;EACZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAER,OAAO,KAAK;GAAE,UAAU;GAAc;EAAI,GAAG,4BAA4B;EACzE,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ,IAAI;EACd,EACF,CACF;CACF;AACF"}
@@ -23,7 +23,7 @@ async function getDenoLock(filePath) {
23
23
  return { lockedVersions: {} };
24
24
  }
25
25
  if (parsedLockfile.data.lockfileVersion < 5) {
26
- logger.warn({ filePath }, `Deno: unsupported lockfile version. Please update ${filePath} on your own.`);
26
+ logger.warn({ filePath }, "Deno: unsupported lockfile version. Please update the lock file on your own.");
27
27
  return { lockedVersions: {} };
28
28
  }
29
29
  return parsedLockfile.data;
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","names":["semver"],"sources":["../../../../lib/modules/manager/deno/post.ts"],"sourcesContent":["import {\n isEmptyObject,\n isNonEmptyArray,\n isNonEmptyObject,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { minimatch } from '../../../util/minimatch.ts';\nimport { api as semver } from '../../versioning/deno/index.ts';\nimport type { PackageDependency, PackageFile } from '../types.ts';\nimport {\n detectNodeCompatWorkspaces,\n extractDenoCompatiblePackageJson,\n} from './compat.ts';\nimport { DenoLock } from './schema.ts';\nimport type { DenoManagerData, LockFile, WorkspaceContext } from './types.ts';\nimport { denoLandRegex, depValueRegex } from './utils.ts';\n\nexport async function getDenoLock(filePath: string): Promise<LockFile> {\n const lockfileContent = await readLocalFile(filePath, 'utf8');\n if (!lockfileContent) {\n logger.debug({ filePath }, 'Deno: unable to read lockfile');\n return { lockedVersions: {} };\n }\n const parsedLockfile = DenoLock.safeParse(lockfileContent);\n if (!parsedLockfile.success) {\n logger.debug(\n { filePath, err: parsedLockfile.error },\n 'Deno: unable to parse lockfile',\n );\n return { lockedVersions: {} };\n }\n if (parsedLockfile.data.lockfileVersion < 5) {\n logger.warn(\n { filePath },\n `Deno: unsupported lockfile version. Please update ${filePath} on your own.`,\n );\n return { lockedVersions: {} };\n }\n\n return parsedLockfile.data;\n}\n\nexport function getLockedVersion(\n deps: PackageDependency<DenoManagerData>,\n lockFileContent: LockFile,\n): string | undefined | null {\n if (isEmptyObject(lockFileContent)) {\n return null;\n }\n const { datasource, currentRawValue, currentValue, depName } = deps;\n\n if (datasource === 'deno') {\n // \"remote\": {\n // \"https://deno.land/std@0.223.0/fs/mod.ts\": \"c25e6802cbf27f3050f60b26b00c2d8dba1cb7fcdafe34c66006a7473b7b34d4\",\n // },\n if (\n lockFileContent.remoteVersions &&\n lockFileContent.remoteVersions.size > 0 &&\n currentRawValue &&\n lockFileContent.remoteVersions.has(currentRawValue)\n ) {\n const match = denoLandRegex.exec(currentRawValue);\n return match?.groups?.currentValue;\n }\n\n // \"redirects\": {\n // \"https://deno.land/std\": \"https://deno.land/std@0.224.0\"\n // },\n const key =\n currentValue && depName ? `${depName}@${currentValue}` : depName;\n if (\n lockFileContent.redirectVersions &&\n isNonEmptyObject(lockFileContent.redirectVersions) &&\n key &&\n lockFileContent.redirectVersions[key]\n ) {\n const match = denoLandRegex.exec(\n // SAFETY: checked above\n lockFileContent.redirectVersions[key],\n );\n return match?.groups?.currentValue;\n }\n }\n\n // jsr and npm datasource\n if (datasource === 'jsr' || datasource === 'npm') {\n if (\n !lockFileContent.lockedVersions ||\n isEmptyObject(lockFileContent.lockedVersions)\n ) {\n return null;\n }\n\n // find \"jsr:@scope/name@1.2.3\" from \"jsr:@scope/name@1.2.3\"\n if (currentRawValue && lockFileContent.lockedVersions[currentRawValue]) {\n return lockFileContent.lockedVersions[currentRawValue];\n }\n\n // find \"jsr:@scope/name@*\" from \"jsr:@scope/name\"\n if (\n currentRawValue &&\n lockFileContent.lockedVersions[`${currentRawValue}@*`]\n ) {\n return lockFileContent.lockedVersions[`${currentRawValue}@*`];\n }\n\n for (const [key, value] of Object.entries(lockFileContent.lockedVersions)) {\n const match = depValueRegex.exec(key);\n // find \"jsr:@scope/name@1\" intersects \"jsr:@scope/name@^1.0.0\"\n if (\n typeof depName === 'string' &&\n match?.groups?.depName === depName &&\n match?.groups?.datasource === datasource &&\n currentValue &&\n match?.groups?.currentValue &&\n // SAFETY: npm semver define it\n semver.intersects!(match.groups.currentValue, currentValue)\n ) {\n return value;\n }\n }\n return null;\n }\n\n return null;\n}\n\nexport async function collectPackageJsonAsWorkspaceMember(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n // detect package.json as members of a deno workspace\n const workspaceRoots = packageFiles.filter(\n (pkg) =>\n isNonEmptyArray(pkg.managerData?.workspaces) &&\n upath.basename(pkg.packageFile).startsWith('deno.json'),\n );\n for (const workspaceRoot of workspaceRoots) {\n const result = await detectNodeCompatWorkspaces(workspaceRoot);\n const { packagePaths } = result;\n for (const packagePath of packagePaths) {\n const packageFile = await extractDenoCompatiblePackageJson(packagePath);\n if (packageFile) {\n const pkg = {\n ...packageFile,\n lockFiles: workspaceRoot.lockFiles,\n };\n packageFiles.push(pkg);\n }\n }\n }\n}\n\nexport function normalizeWorkspace(\n packageFiles: PackageFile<DenoManagerData>[],\n): void {\n // determine workspace root to collect lock files of workspace members\n const workspaceContexts: WorkspaceContext[] = [];\n\n // create reference map for packageFile object\n const packageMap: Record<string, PackageFile<DenoManagerData>> = {};\n for (const pkg of packageFiles) {\n packageMap[pkg.packageFile] = pkg;\n }\n\n for (const pkg of packageFiles) {\n const workspaces = pkg.managerData?.workspaces;\n if (isNonEmptyArray(workspaces)) {\n const rootDir = upath.dirname(pkg.packageFile);\n const matchers = workspaces.map((pattern) =>\n // allow ./sub/* to match sub\n minimatch(upath.normalize(pattern), {\n dot: true,\n partial: true,\n }),\n );\n workspaceContexts.push({\n lockFiles: pkg.lockFiles,\n rootDir,\n packageFile: pkg.packageFile,\n matchers,\n });\n }\n }\n\n // remove nested workspace\n // if the workspace is a subdirectory of another workspace, the nested is invalid\n const validContexts: typeof workspaceContexts = [];\n const invalidPackageFiles = new Set<string>();\n for (const [i, currentContext] of workspaceContexts.entries()) {\n let isNested = false;\n\n for (const [j, otherContext] of workspaceContexts.entries()) {\n if (i === j) {\n continue;\n }\n\n const found = otherContext.matchers.some((matcher) =>\n matcher.match(currentContext.rootDir),\n );\n if (found) {\n isNested = true;\n invalidPackageFiles.add(currentContext.packageFile);\n break;\n }\n }\n\n if (!isNested) {\n validContexts.push(currentContext);\n }\n }\n for (const packageFile of invalidPackageFiles) {\n const pkg = packageMap[packageFile];\n // remove invalid workspace\n delete pkg?.managerData?.workspaces;\n }\n\n // supply lock files to workspace members from their root\n const workspaceRootFiles = new Set<string>();\n for (const pkg of packageFiles) {\n const workspaces = pkg.managerData?.workspaces;\n if (isNonEmptyArray(workspaces)) {\n workspaceRootFiles.add(pkg.packageFile);\n }\n }\n\n for (const pkg of packageFiles) {\n if (workspaceRootFiles.has(pkg.packageFile)) {\n continue;\n }\n\n for (const context of workspaceContexts) {\n const { rootDir, matchers, lockFiles } = context;\n const pkgRelativePath = upath.relative(rootDir, pkg.packageFile);\n const pkgDir = upath.dirname(pkgRelativePath);\n const isMatch = matchers.some((matcher) => matcher.match(pkgDir));\n if (isMatch) {\n pkg.lockFiles = lockFiles;\n break;\n }\n }\n }\n}\n\nasync function applyLockedVersion(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n // apply locked versions from lock files\n // use cache to avoid reading the same lock file multiple times\n const lockFileCache: Record<string, LockFile> = {};\n for (const pkg of packageFiles) {\n if (!isNonEmptyArray(pkg.lockFiles)) {\n continue;\n }\n const lockFile = pkg.lockFiles[0];\n let lockFileContent = lockFileCache[lockFile];\n\n if (!lockFileContent) {\n lockFileContent = await getDenoLock(lockFile);\n lockFileCache[lockFile] = lockFileContent;\n }\n\n const withLockedVersionDeps = pkg.deps.map((dep) => {\n const lockedVersion = getLockedVersion(dep, lockFileContent);\n return lockedVersion\n ? {\n ...dep,\n lockedVersion,\n }\n : dep;\n });\n\n pkg.deps = withLockedVersionDeps;\n }\n}\n\nexport async function postExtract(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n await collectPackageJsonAsWorkspaceMember(packageFiles);\n normalizeWorkspace(packageFiles);\n await applyLockedVersion(packageFiles);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"post.js","names":["semver"],"sources":["../../../../lib/modules/manager/deno/post.ts"],"sourcesContent":["import {\n isEmptyObject,\n isNonEmptyArray,\n isNonEmptyObject,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { minimatch } from '../../../util/minimatch.ts';\nimport { api as semver } from '../../versioning/deno/index.ts';\nimport type { PackageDependency, PackageFile } from '../types.ts';\nimport {\n detectNodeCompatWorkspaces,\n extractDenoCompatiblePackageJson,\n} from './compat.ts';\nimport { DenoLock } from './schema.ts';\nimport type { DenoManagerData, LockFile, WorkspaceContext } from './types.ts';\nimport { denoLandRegex, depValueRegex } from './utils.ts';\n\nexport async function getDenoLock(filePath: string): Promise<LockFile> {\n const lockfileContent = await readLocalFile(filePath, 'utf8');\n if (!lockfileContent) {\n logger.debug({ filePath }, 'Deno: unable to read lockfile');\n return { lockedVersions: {} };\n }\n const parsedLockfile = DenoLock.safeParse(lockfileContent);\n if (!parsedLockfile.success) {\n logger.debug(\n { filePath, err: parsedLockfile.error },\n 'Deno: unable to parse lockfile',\n );\n return { lockedVersions: {} };\n }\n if (parsedLockfile.data.lockfileVersion < 5) {\n logger.warn(\n { filePath },\n 'Deno: unsupported lockfile version. Please update the lock file on your own.',\n );\n return { lockedVersions: {} };\n }\n\n return parsedLockfile.data;\n}\n\nexport function getLockedVersion(\n deps: PackageDependency<DenoManagerData>,\n lockFileContent: LockFile,\n): string | undefined | null {\n if (isEmptyObject(lockFileContent)) {\n return null;\n }\n const { datasource, currentRawValue, currentValue, depName } = deps;\n\n if (datasource === 'deno') {\n // \"remote\": {\n // \"https://deno.land/std@0.223.0/fs/mod.ts\": \"c25e6802cbf27f3050f60b26b00c2d8dba1cb7fcdafe34c66006a7473b7b34d4\",\n // },\n if (\n lockFileContent.remoteVersions &&\n lockFileContent.remoteVersions.size > 0 &&\n currentRawValue &&\n lockFileContent.remoteVersions.has(currentRawValue)\n ) {\n const match = denoLandRegex.exec(currentRawValue);\n return match?.groups?.currentValue;\n }\n\n // \"redirects\": {\n // \"https://deno.land/std\": \"https://deno.land/std@0.224.0\"\n // },\n const key =\n currentValue && depName ? `${depName}@${currentValue}` : depName;\n if (\n lockFileContent.redirectVersions &&\n isNonEmptyObject(lockFileContent.redirectVersions) &&\n key &&\n lockFileContent.redirectVersions[key]\n ) {\n const match = denoLandRegex.exec(\n // SAFETY: checked above\n lockFileContent.redirectVersions[key],\n );\n return match?.groups?.currentValue;\n }\n }\n\n // jsr and npm datasource\n if (datasource === 'jsr' || datasource === 'npm') {\n if (\n !lockFileContent.lockedVersions ||\n isEmptyObject(lockFileContent.lockedVersions)\n ) {\n return null;\n }\n\n // find \"jsr:@scope/name@1.2.3\" from \"jsr:@scope/name@1.2.3\"\n if (currentRawValue && lockFileContent.lockedVersions[currentRawValue]) {\n return lockFileContent.lockedVersions[currentRawValue];\n }\n\n // find \"jsr:@scope/name@*\" from \"jsr:@scope/name\"\n if (\n currentRawValue &&\n lockFileContent.lockedVersions[`${currentRawValue}@*`]\n ) {\n return lockFileContent.lockedVersions[`${currentRawValue}@*`];\n }\n\n for (const [key, value] of Object.entries(lockFileContent.lockedVersions)) {\n const match = depValueRegex.exec(key);\n // find \"jsr:@scope/name@1\" intersects \"jsr:@scope/name@^1.0.0\"\n if (\n typeof depName === 'string' &&\n match?.groups?.depName === depName &&\n match?.groups?.datasource === datasource &&\n currentValue &&\n match?.groups?.currentValue &&\n // SAFETY: npm semver define it\n semver.intersects!(match.groups.currentValue, currentValue)\n ) {\n return value;\n }\n }\n return null;\n }\n\n return null;\n}\n\nexport async function collectPackageJsonAsWorkspaceMember(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n // detect package.json as members of a deno workspace\n const workspaceRoots = packageFiles.filter(\n (pkg) =>\n isNonEmptyArray(pkg.managerData?.workspaces) &&\n upath.basename(pkg.packageFile).startsWith('deno.json'),\n );\n for (const workspaceRoot of workspaceRoots) {\n const result = await detectNodeCompatWorkspaces(workspaceRoot);\n const { packagePaths } = result;\n for (const packagePath of packagePaths) {\n const packageFile = await extractDenoCompatiblePackageJson(packagePath);\n if (packageFile) {\n const pkg = {\n ...packageFile,\n lockFiles: workspaceRoot.lockFiles,\n };\n packageFiles.push(pkg);\n }\n }\n }\n}\n\nexport function normalizeWorkspace(\n packageFiles: PackageFile<DenoManagerData>[],\n): void {\n // determine workspace root to collect lock files of workspace members\n const workspaceContexts: WorkspaceContext[] = [];\n\n // create reference map for packageFile object\n const packageMap: Record<string, PackageFile<DenoManagerData>> = {};\n for (const pkg of packageFiles) {\n packageMap[pkg.packageFile] = pkg;\n }\n\n for (const pkg of packageFiles) {\n const workspaces = pkg.managerData?.workspaces;\n if (isNonEmptyArray(workspaces)) {\n const rootDir = upath.dirname(pkg.packageFile);\n const matchers = workspaces.map((pattern) =>\n // allow ./sub/* to match sub\n minimatch(upath.normalize(pattern), {\n dot: true,\n partial: true,\n }),\n );\n workspaceContexts.push({\n lockFiles: pkg.lockFiles,\n rootDir,\n packageFile: pkg.packageFile,\n matchers,\n });\n }\n }\n\n // remove nested workspace\n // if the workspace is a subdirectory of another workspace, the nested is invalid\n const validContexts: typeof workspaceContexts = [];\n const invalidPackageFiles = new Set<string>();\n for (const [i, currentContext] of workspaceContexts.entries()) {\n let isNested = false;\n\n for (const [j, otherContext] of workspaceContexts.entries()) {\n if (i === j) {\n continue;\n }\n\n const found = otherContext.matchers.some((matcher) =>\n matcher.match(currentContext.rootDir),\n );\n if (found) {\n isNested = true;\n invalidPackageFiles.add(currentContext.packageFile);\n break;\n }\n }\n\n if (!isNested) {\n validContexts.push(currentContext);\n }\n }\n for (const packageFile of invalidPackageFiles) {\n const pkg = packageMap[packageFile];\n // remove invalid workspace\n delete pkg?.managerData?.workspaces;\n }\n\n // supply lock files to workspace members from their root\n const workspaceRootFiles = new Set<string>();\n for (const pkg of packageFiles) {\n const workspaces = pkg.managerData?.workspaces;\n if (isNonEmptyArray(workspaces)) {\n workspaceRootFiles.add(pkg.packageFile);\n }\n }\n\n for (const pkg of packageFiles) {\n if (workspaceRootFiles.has(pkg.packageFile)) {\n continue;\n }\n\n for (const context of workspaceContexts) {\n const { rootDir, matchers, lockFiles } = context;\n const pkgRelativePath = upath.relative(rootDir, pkg.packageFile);\n const pkgDir = upath.dirname(pkgRelativePath);\n const isMatch = matchers.some((matcher) => matcher.match(pkgDir));\n if (isMatch) {\n pkg.lockFiles = lockFiles;\n break;\n }\n }\n }\n}\n\nasync function applyLockedVersion(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n // apply locked versions from lock files\n // use cache to avoid reading the same lock file multiple times\n const lockFileCache: Record<string, LockFile> = {};\n for (const pkg of packageFiles) {\n if (!isNonEmptyArray(pkg.lockFiles)) {\n continue;\n }\n const lockFile = pkg.lockFiles[0];\n let lockFileContent = lockFileCache[lockFile];\n\n if (!lockFileContent) {\n lockFileContent = await getDenoLock(lockFile);\n lockFileCache[lockFile] = lockFileContent;\n }\n\n const withLockedVersionDeps = pkg.deps.map((dep) => {\n const lockedVersion = getLockedVersion(dep, lockFileContent);\n return lockedVersion\n ? {\n ...dep,\n lockedVersion,\n }\n : dep;\n });\n\n pkg.deps = withLockedVersionDeps;\n }\n}\n\nexport async function postExtract(\n packageFiles: PackageFile<DenoManagerData>[],\n): Promise<void> {\n await collectPackageJsonAsWorkspaceMember(packageFiles);\n normalizeWorkspace(packageFiles);\n await applyLockedVersion(packageFiles);\n}\n"],"mappings":";;;;;;;;;;AAmBA,eAAsB,YAAY,UAAqC;CACrE,MAAM,kBAAkB,MAAM,cAAc,UAAU,MAAM;CAC5D,IAAI,CAAC,iBAAiB;EACpB,OAAO,MAAM,EAAE,SAAS,GAAG,+BAA+B;EAC1D,OAAO,EAAE,gBAAgB,CAAC,EAAE;CAC9B;CACA,MAAM,iBAAiB,SAAS,UAAU,eAAe;CACzD,IAAI,CAAC,eAAe,SAAS;EAC3B,OAAO,MACL;GAAE;GAAU,KAAK,eAAe;EAAM,GACtC,gCACF;EACA,OAAO,EAAE,gBAAgB,CAAC,EAAE;CAC9B;CACA,IAAI,eAAe,KAAK,kBAAkB,GAAG;EAC3C,OAAO,KACL,EAAE,SAAS,GACX,8EACF;EACA,OAAO,EAAE,gBAAgB,CAAC,EAAE;CAC9B;CAEA,OAAO,eAAe;AACxB;AAEA,SAAgB,iBACd,MACA,iBAC2B;CAC3B,IAAI,cAAc,eAAe,GAC/B,OAAO;CAET,MAAM,EAAE,YAAY,iBAAiB,cAAc,YAAY;CAE/D,IAAI,eAAe,QAAQ;EAIzB,IACE,gBAAgB,kBAChB,gBAAgB,eAAe,OAAO,KACtC,mBACA,gBAAgB,eAAe,IAAI,eAAe,GAGlD,OADc,cAAc,KAAK,eACtB,CAAC,EAAE,QAAQ;EAMxB,MAAM,MACJ,gBAAgB,UAAU,GAAG,QAAQ,GAAG,iBAAiB;EAC3D,IACE,gBAAgB,oBAChB,iBAAiB,gBAAgB,gBAAgB,KACjD,OACA,gBAAgB,iBAAiB,MAMjC,OAJc,cAAc,KAE1B,gBAAgB,iBAAiB,IAExB,CAAC,EAAE,QAAQ;CAE1B;CAGA,IAAI,eAAe,SAAS,eAAe,OAAO;EAChD,IACE,CAAC,gBAAgB,kBACjB,cAAc,gBAAgB,cAAc,GAE5C,OAAO;EAIT,IAAI,mBAAmB,gBAAgB,eAAe,kBACpD,OAAO,gBAAgB,eAAe;EAIxC,IACE,mBACA,gBAAgB,eAAe,GAAG,gBAAgB,MAElD,OAAO,gBAAgB,eAAe,GAAG,gBAAgB;EAG3D,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,gBAAgB,cAAc,GAAG;GACzE,MAAM,QAAQ,cAAc,KAAK,GAAG;GAEpC,IACE,OAAO,YAAY,YACnB,OAAO,QAAQ,YAAY,WAC3B,OAAO,QAAQ,eAAe,cAC9B,gBACA,OAAO,QAAQ,gBAEfA,IAAO,WAAY,MAAM,OAAO,cAAc,YAAY,GAE1D,OAAO;EAEX;EACA,OAAO;CACT;CAEA,OAAO;AACT;AAEA,eAAsB,oCACpB,cACe;CAEf,MAAM,iBAAiB,aAAa,QACjC,QACC,gBAAgB,IAAI,aAAa,UAAU,KAC3C,MAAM,SAAS,IAAI,WAAW,CAAC,CAAC,WAAW,WAAW,CAC1D;CACA,KAAK,MAAM,iBAAiB,gBAAgB;EAE1C,MAAM,EAAE,iBAAiB,MADJ,2BAA2B,aAAa;EAE7D,KAAK,MAAM,eAAe,cAAc;GACtC,MAAM,cAAc,MAAM,iCAAiC,WAAW;GACtE,IAAI,aAAa;IACf,MAAM,MAAM;KACV,GAAG;KACH,WAAW,cAAc;IAC3B;IACA,aAAa,KAAK,GAAG;GACvB;EACF;CACF;AACF;AAEA,SAAgB,mBACd,cACM;CAEN,MAAM,oBAAwC,CAAC;CAG/C,MAAM,aAA2D,CAAC;CAClE,KAAK,MAAM,OAAO,cAChB,WAAW,IAAI,eAAe;CAGhC,KAAK,MAAM,OAAO,cAAc;EAC9B,MAAM,aAAa,IAAI,aAAa;EACpC,IAAI,gBAAgB,UAAU,GAAG;GAC/B,MAAM,UAAU,MAAM,QAAQ,IAAI,WAAW;GAC7C,MAAM,WAAW,WAAW,KAAK,YAE/B,UAAU,MAAM,UAAU,OAAO,GAAG;IAClC,KAAK;IACL,SAAS;GACX,CAAC,CACH;GACA,kBAAkB,KAAK;IACrB,WAAW,IAAI;IACf;IACA,aAAa,IAAI;IACjB;GACF,CAAC;EACH;CACF;CAIA,MAAM,gBAA0C,CAAC;CACjD,MAAM,sCAAsB,IAAI,IAAY;CAC5C,KAAK,MAAM,CAAC,GAAG,mBAAmB,kBAAkB,QAAQ,GAAG;EAC7D,IAAI,WAAW;EAEf,KAAK,MAAM,CAAC,GAAG,iBAAiB,kBAAkB,QAAQ,GAAG;GAC3D,IAAI,MAAM,GACR;GAMF,IAHc,aAAa,SAAS,MAAM,YACxC,QAAQ,MAAM,eAAe,OAAO,CAE9B,GAAG;IACT,WAAW;IACX,oBAAoB,IAAI,eAAe,WAAW;IAClD;GACF;EACF;EAEA,IAAI,CAAC,UACH,cAAc,KAAK,cAAc;CAErC;CACA,KAAK,MAAM,eAAe,qBAAqB;EAC7C,MAAM,MAAM,WAAW;EAEvB,OAAO,KAAK,aAAa;CAC3B;CAGA,MAAM,qCAAqB,IAAI,IAAY;CAC3C,KAAK,MAAM,OAAO,cAAc;EAC9B,MAAM,aAAa,IAAI,aAAa;EACpC,IAAI,gBAAgB,UAAU,GAC5B,mBAAmB,IAAI,IAAI,WAAW;CAE1C;CAEA,KAAK,MAAM,OAAO,cAAc;EAC9B,IAAI,mBAAmB,IAAI,IAAI,WAAW,GACxC;EAGF,KAAK,MAAM,WAAW,mBAAmB;GACvC,MAAM,EAAE,SAAS,UAAU,cAAc;GACzC,MAAM,kBAAkB,MAAM,SAAS,SAAS,IAAI,WAAW;GAC/D,MAAM,SAAS,MAAM,QAAQ,eAAe;GAE5C,IADgB,SAAS,MAAM,YAAY,QAAQ,MAAM,MAAM,CACrD,GAAG;IACX,IAAI,YAAY;IAChB;GACF;EACF;CACF;AACF;AAEA,eAAe,mBACb,cACe;CAGf,MAAM,gBAA0C,CAAC;CACjD,KAAK,MAAM,OAAO,cAAc;EAC9B,IAAI,CAAC,gBAAgB,IAAI,SAAS,GAChC;EAEF,MAAM,WAAW,IAAI,UAAU;EAC/B,IAAI,kBAAkB,cAAc;EAEpC,IAAI,CAAC,iBAAiB;GACpB,kBAAkB,MAAM,YAAY,QAAQ;GAC5C,cAAc,YAAY;EAC5B;EAYA,IAAI,OAV0B,IAAI,KAAK,KAAK,QAAQ;GAClD,MAAM,gBAAgB,iBAAiB,KAAK,eAAe;GAC3D,OAAO,gBACH;IACE,GAAG;IACH;GACF,IACA;EACN,CAE+B;CACjC;AACF;AAEA,eAAsB,YACpB,cACe;CACf,MAAM,oCAAoC,YAAY;CACtD,mBAAmB,YAAY;CAC/B,MAAM,mBAAmB,YAAY;AACvC"}
@@ -9,7 +9,7 @@ hashMap.set("azure-pipelines", "4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1c
9
9
  hashMap.set("batect", "fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21");
10
10
  hashMap.set("batect-wrapper", "d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939");
11
11
  hashMap.set("bazel", "c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb");
12
- hashMap.set("bazel-module", "8d5314f630038df8a974a285ab5066a0b4d69bc4dcd0a4fa2e9e6c6747073229");
12
+ hashMap.set("bazel-module", "b1324dc15e77012a667d33c48c14dec90aa25832593c6c47c219d57931bd1def");
13
13
  hashMap.set("bazelisk", "49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8");
14
14
  hashMap.set("bicep", "7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db");
15
15
  hashMap.set("bitbucket-pipelines", "59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd");
@@ -48,7 +48,7 @@ hashMap.set("gitlabci-include", "ef696c478c2ac1723b3aca070ba9779be0e702fff084405
48
48
  hashMap.set("glasskube", "253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70");
49
49
  hashMap.set("gleam", "e7ee3392d1f900fc1299308c8e930db9288790c6d0b6c35f1a62e55683090d34");
50
50
  hashMap.set("gomod", "9ab033fb37fbf3b212232019ba2d36e247acc9831f7c17818a40cb155606abfe");
51
- hashMap.set("gradle", "1108234b4fcfebf95c453111f652ab75f5c6cc6c4472efb60b7bc29cbe683612");
51
+ hashMap.set("gradle", "65487851c4592d9f6b7889137576c4e2dd6a98b8bee6db9c999d67bfc13d5247");
52
52
  hashMap.set("gradle-wrapper", "f85031e7feb4e811aa5f29c589a30f8076a078e5bbf366fb65fb28b5a47d2c44");
53
53
  hashMap.set("haskell-cabal", "f232d0e883235f74ed71fd9de4a7468e5fcbda9a1af5beb56c24657f7bf2e891");
54
54
  hashMap.set("helm-requirements", "4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b");
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1d3568f42393d697f8f96d461b72077ee7a1044b654e87667a12f861b3083111');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','0407066010ebb3d7ad4c1afe6b9a3615a3c11d64dc3cf0674cb9dfc3ea272273');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','8d5314f630038df8a974a285ab5066a0b4d69bc4dcd0a4fa2e9e6c6747073229');\nhashMap.set('bazelisk','49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','2df1756b14b3d690e5ad1295bc1e78d8a8d7b967a552fd7b8e3274866a5acf3e');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','a2fbfa9f12971e70e740b362d0cd488f6489e7c65bc9617b52b2ac67e6040551');\nhashMap.set('cake','65ad4f28c318675b9edb49dbd11d677f42c762b01b3f5a25dd3b2f345ecd387e');\nhashMap.set('cargo','23fcc425ccd3a50559210e0ab8c84c1d47cf5c617cd5d58afdcf258ab862bafa');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','08310c39254947632d42058f74f755e9d3f3019c2edeeaf52b5142917085e2df');\nhashMap.set('composer','991a845be7ede562df4abfb005caf5e22cded077cec46711f8c008e468fbd633');\nhashMap.set('conan','b846e8812d65d4201dc0bf7c1d5c344e3a1edaaff6441010875171028be2f0fb');\nhashMap.set('copier','3ff250122cf49d52f23fcd3686274b0e86a99d0cb8bfa7e3e2ee3dd3b3babd56');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','9fbc30b9ee7b8eb6ccbc1ef459b3c983bdb1dff38f43b51013056ce7b94ceced');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','ac472ae4897dc1df85326dbd89a8c3488579ae2b180014ffcf085ce422e19dbd');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','22de4afb277e579dcbc7ec765eca2ddc5e4b1bb39d49e762e8af026fa062c53f');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','4b633aedb8a792727f5e5d0b123a6b5a1b01429ea3153c567e2258523816205c');\nhashMap.set('github-actions','100d3ecacf720978aef32ec929d879b6392485ecaab0cb395d497f24a0ab3850');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','ef696c478c2ac1723b3aca070ba9779be0e702fff0844054251ba0029523d0eb');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','e7ee3392d1f900fc1299308c8e930db9288790c6d0b6c35f1a62e55683090d34');\nhashMap.set('gomod','9ab033fb37fbf3b212232019ba2d36e247acc9831f7c17818a40cb155606abfe');\nhashMap.set('gradle','1108234b4fcfebf95c453111f652ab75f5c6cc6c4472efb60b7bc29cbe683612');\nhashMap.set('gradle-wrapper','f85031e7feb4e811aa5f29c589a30f8076a078e5bbf366fb65fb28b5a47d2c44');\nhashMap.set('haskell-cabal','f232d0e883235f74ed71fd9de4a7468e5fcbda9a1af5beb56c24657f7bf2e891');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','5bbc18bf059640191e2237408ca3b442556834e5c1c05d3317e82e7e097ae1f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','86799a6d3fba17b1f4c8017d308cba44a1efcf6d6290371263b8cf14be9e16ae');\nhashMap.set('hermit','f30ba5fe8ee46997c1f3d15235e6ff64c96d7ce5e439ee99f8008580348fe0da');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','f918a7f378dc207cadf291e7481006008c69623f690902ed921e1e33db270b78');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','c6ee547378d5c5619a0fe94be35f9838e0f006b4807a896e9caefefa20efacf7');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','2bf7b65d51718daf3eec4f30c0fc7f2f045f4f8f24862bebe17c2174abb606b9');\nhashMap.set('maven-wrapper','976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d0deb49647d10e3');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','633e7e325055c9a39413dbce346c32cda6dec83ed9f20d6cdfc7d1255b94bafb');\nhashMap.set('mix','ead2078c33550ec8695298c053f549866e1701fa096440d4228e3e51f8f1e49c');\nhashMap.set('nix','95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','8c173b17fcce19d1be44d0d548809de5fb3d7e45adf3ce5fd6d7ebe699e94d6c');\nhashMap.set('nuget','54c1e149b47e4f588e99857e3e62b420f50649a868a28944a0c82a7b7fb530e7');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','fffd093eaf6de3cab7b2f6b57e57715aa240fcd958954f31fbc47f18e1730a4d');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','fd26981e4e865b8fece492ff78faf34701af62bb8f39397445780eb81b66b7db');\nhashMap.set('pip_requirements','edaf5ec21e63fd252e6737b294f215d59068b0bba1dea92b9d4510dbb872c837');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','1d0af710667f6dce377feae9aa238b21fe5e0e75e75758a70f5e9758c6cb6678');\nhashMap.set('pixi','7d183aaae4370a0c62496bbff60ad12fd4dd46822630541f712f437dcea021e1');\nhashMap.set('poetry','0211739556f8193c70fa69cbf66c60e688042fd7dc7a2fe08f9f328b35ad1f82');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','aad0dd6524158fda5345d75662f337b275c6c46b29f051ba94201d42c22b0da8');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config','2a4e4fb671aed5d0c900b8d54c31bfef46ca36d0f4e16b00ff73377b9c09fb69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','e957f1f1563af4e5fbd1c552ca15632b7808d9d2e51ec0da6022a1f84372caec');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','56cdc6fe4cd00519f953459f94323c71677f6bde007537eef891154fb8696db1');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','045931e1d5ae5607fb7fbcdfe6d2cd9cf45020432de7c78fbb3432579c8b3310');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','142c3f0549c4152297615b5bbf3a78ba8f7ce6a0cebcea63b81e9815dca40494');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','dfd7b905577b362093ce72e6ee597308f97c83678ddb15d6455a1627969b8b7d');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','46efac5bda6737cccacf2d89ce1d384ee410876c5557b4c02be2275b7c1d862d');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1d3568f42393d697f8f96d461b72077ee7a1044b654e87667a12f861b3083111');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','0407066010ebb3d7ad4c1afe6b9a3615a3c11d64dc3cf0674cb9dfc3ea272273');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','b1324dc15e77012a667d33c48c14dec90aa25832593c6c47c219d57931bd1def');\nhashMap.set('bazelisk','49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','2df1756b14b3d690e5ad1295bc1e78d8a8d7b967a552fd7b8e3274866a5acf3e');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','a2fbfa9f12971e70e740b362d0cd488f6489e7c65bc9617b52b2ac67e6040551');\nhashMap.set('cake','65ad4f28c318675b9edb49dbd11d677f42c762b01b3f5a25dd3b2f345ecd387e');\nhashMap.set('cargo','23fcc425ccd3a50559210e0ab8c84c1d47cf5c617cd5d58afdcf258ab862bafa');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','08310c39254947632d42058f74f755e9d3f3019c2edeeaf52b5142917085e2df');\nhashMap.set('composer','991a845be7ede562df4abfb005caf5e22cded077cec46711f8c008e468fbd633');\nhashMap.set('conan','b846e8812d65d4201dc0bf7c1d5c344e3a1edaaff6441010875171028be2f0fb');\nhashMap.set('copier','3ff250122cf49d52f23fcd3686274b0e86a99d0cb8bfa7e3e2ee3dd3b3babd56');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','9fbc30b9ee7b8eb6ccbc1ef459b3c983bdb1dff38f43b51013056ce7b94ceced');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','ac472ae4897dc1df85326dbd89a8c3488579ae2b180014ffcf085ce422e19dbd');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','22de4afb277e579dcbc7ec765eca2ddc5e4b1bb39d49e762e8af026fa062c53f');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','4b633aedb8a792727f5e5d0b123a6b5a1b01429ea3153c567e2258523816205c');\nhashMap.set('github-actions','100d3ecacf720978aef32ec929d879b6392485ecaab0cb395d497f24a0ab3850');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','ef696c478c2ac1723b3aca070ba9779be0e702fff0844054251ba0029523d0eb');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','e7ee3392d1f900fc1299308c8e930db9288790c6d0b6c35f1a62e55683090d34');\nhashMap.set('gomod','9ab033fb37fbf3b212232019ba2d36e247acc9831f7c17818a40cb155606abfe');\nhashMap.set('gradle','65487851c4592d9f6b7889137576c4e2dd6a98b8bee6db9c999d67bfc13d5247');\nhashMap.set('gradle-wrapper','f85031e7feb4e811aa5f29c589a30f8076a078e5bbf366fb65fb28b5a47d2c44');\nhashMap.set('haskell-cabal','f232d0e883235f74ed71fd9de4a7468e5fcbda9a1af5beb56c24657f7bf2e891');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','5bbc18bf059640191e2237408ca3b442556834e5c1c05d3317e82e7e097ae1f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','86799a6d3fba17b1f4c8017d308cba44a1efcf6d6290371263b8cf14be9e16ae');\nhashMap.set('hermit','f30ba5fe8ee46997c1f3d15235e6ff64c96d7ce5e439ee99f8008580348fe0da');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','f918a7f378dc207cadf291e7481006008c69623f690902ed921e1e33db270b78');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','c6ee547378d5c5619a0fe94be35f9838e0f006b4807a896e9caefefa20efacf7');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','2bf7b65d51718daf3eec4f30c0fc7f2f045f4f8f24862bebe17c2174abb606b9');\nhashMap.set('maven-wrapper','976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d0deb49647d10e3');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','633e7e325055c9a39413dbce346c32cda6dec83ed9f20d6cdfc7d1255b94bafb');\nhashMap.set('mix','ead2078c33550ec8695298c053f549866e1701fa096440d4228e3e51f8f1e49c');\nhashMap.set('nix','95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','8c173b17fcce19d1be44d0d548809de5fb3d7e45adf3ce5fd6d7ebe699e94d6c');\nhashMap.set('nuget','54c1e149b47e4f588e99857e3e62b420f50649a868a28944a0c82a7b7fb530e7');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','fffd093eaf6de3cab7b2f6b57e57715aa240fcd958954f31fbc47f18e1730a4d');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','fd26981e4e865b8fece492ff78faf34701af62bb8f39397445780eb81b66b7db');\nhashMap.set('pip_requirements','edaf5ec21e63fd252e6737b294f215d59068b0bba1dea92b9d4510dbb872c837');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','1d0af710667f6dce377feae9aa238b21fe5e0e75e75758a70f5e9758c6cb6678');\nhashMap.set('pixi','7d183aaae4370a0c62496bbff60ad12fd4dd46822630541f712f437dcea021e1');\nhashMap.set('poetry','0211739556f8193c70fa69cbf66c60e688042fd7dc7a2fe08f9f328b35ad1f82');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','aad0dd6524158fda5345d75662f337b275c6c46b29f051ba94201d42c22b0da8');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config','2a4e4fb671aed5d0c900b8d54c31bfef46ca36d0f4e16b00ff73377b9c09fb69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','e957f1f1563af4e5fbd1c552ca15632b7808d9d2e51ec0da6022a1f84372caec');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','56cdc6fe4cd00519f953459f94323c71677f6bde007537eef891154fb8696db1');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','045931e1d5ae5607fb7fbcdfe6d2cd9cf45020432de7c78fbb3432579c8b3310');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','142c3f0549c4152297615b5bbf3a78ba8f7ce6a0cebcea63b81e9815dca40494');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','dfd7b905577b362093ce72e6ee597308f97c83678ddb15d6455a1627969b8b7d');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','46efac5bda6737cccacf2d89ce1d384ee410876c5557b4c02be2275b7c1d862d');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"mappings":"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"}
@@ -15,7 +15,7 @@ import upath from "upath";
15
15
  //#region lib/modules/manager/gradle/artifacts.ts
16
16
  function isGradleExecutionAllowed(command) {
17
17
  if (!GlobalConfig.get("allowedUnsafeExecutions").includes("gradleWrapper")) {
18
- logger.once.warn(`Gradle wrapper command, \`${command}\`, was requested to run, but \`gradleWrapper\` is not permitted in the allowedUnsafeExecutions`);
18
+ logger.once.warn({ command }, "Gradle wrapper command was requested to run, but `gradleWrapper` is not permitted in the allowedUnsafeExecutions");
19
19
  return false;
20
20
  }
21
21
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":[],"sources":["../../../../lib/modules/manager/gradle/artifacts.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n exec,\n getToolSettingsOptions,\n gradleJvmArg,\n} from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n findUpLocal,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getFiles, getRepoStatus } from '../../../util/git/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { scm } from '../../platform/scm.ts';\nimport {\n extraEnv,\n extractGradleVersion,\n getJavaConstraint,\n gradleWrapperFileName,\n prepareGradleCommand,\n} from '../gradle-wrapper/utils.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport {\n isGcvLockFile,\n isGcvPropsFile,\n} from './extract/consistent-versions-plugin.ts';\nimport { isGradleBuildFile } from './utils.ts';\n\nexport function isGradleExecutionAllowed(command: string): boolean {\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n\n if (!allowlist.includes('gradleWrapper')) {\n logger.once.warn(\n `Gradle wrapper command, \\`${command}\\`, was requested to run, but \\`gradleWrapper\\` is not permitted in the allowedUnsafeExecutions`,\n );\n return false;\n }\n\n return true;\n}\n\n// .lockfile is gradle default lockfile, /versions.lock is gradle-consistent-versions plugin lockfile\nfunction isLockFile(fileName: string): boolean {\n return fileName.endsWith('.lockfile') || isGcvLockFile(fileName);\n}\n\nasync function getUpdatedLockfiles(\n oldLockFileContentMap: Record<string, string | null>,\n): Promise<UpdateArtifactsResult[]> {\n const res: UpdateArtifactsResult[] = [];\n\n const status = await getRepoStatus();\n\n for (const modifiedFile of status.modified) {\n if (\n isLockFile(modifiedFile) ||\n modifiedFile.endsWith('gradle/verification-metadata.xml')\n ) {\n const newContent = await readLocalFile(modifiedFile, 'utf8');\n if (oldLockFileContentMap[modifiedFile] !== newContent) {\n res.push({\n file: {\n type: 'addition',\n path: modifiedFile,\n contents: newContent,\n },\n });\n }\n }\n }\n\n return res;\n}\n\nasync function getSubProjectList(\n cmd: string,\n execOptions: ExecOptions,\n): Promise<string[]> {\n const subprojects = ['']; // = root project\n const subprojectsRegex = regEx(/^[ \\t]*subprojects: \\[(?<subprojects>.+)\\]/m);\n\n const gradleProperties = await exec(`${cmd} properties`, execOptions);\n const subprojectsMatch = gradleProperties.stdout.match(subprojectsRegex);\n if (subprojectsMatch?.groups?.subprojects) {\n const projectRegex = regEx(/project '(?<name>.+?)'/g);\n const matches = subprojectsMatch.groups.subprojects.matchAll(projectRegex);\n for (const match of matches) {\n if (match?.groups?.name) {\n subprojects.push(match.groups.name);\n }\n }\n }\n\n return subprojects;\n}\n\nasync function getGradleVersion(gradlewFile: string): Promise<string | null> {\n const propertiesFile = upath.join(\n upath.dirname(gradlewFile),\n 'gradle/wrapper/gradle-wrapper.properties',\n );\n const properties = await readLocalFile(propertiesFile, 'utf8');\n const extractResult = extractGradleVersion(properties ?? '');\n\n return extractResult ? extractResult.version : null;\n}\n\nasync function buildUpdateVerificationMetadataCmd(\n verificationMetadataFile: string | undefined,\n baseCmd: string,\n): Promise<string | null> {\n if (!verificationMetadataFile) {\n return null;\n }\n\n const verificationMetadata = await readLocalFile(verificationMetadataFile);\n const verifiesChecksums = verificationMetadata?.includes(\n '<verify-metadata>true</verify-metadata>',\n );\n const verifiesSignatures = verificationMetadata?.includes(\n '<verify-signatures>true</verify-signatures>',\n );\n\n const hashTypes = ['sha256', 'sha512'].filter((type) =>\n verificationMetadata?.includes(`<${type} `),\n );\n\n if (verifiesChecksums || hashTypes.length) {\n logger.debug(\n 'Dependency metadata verification enabled or checksums present - generating checksums',\n );\n }\n\n if ((verifiesChecksums || verifiesSignatures) && !hashTypes.length) {\n // fallback algorithm for pgp and in case a weak algorithm (md5, sha1) is used for checksums\n hashTypes.push('sha256');\n }\n\n if (verifiesSignatures) {\n logger.debug(\n 'Dependency signature verification enabled - generating PGP signatures',\n );\n hashTypes.push('pgp');\n }\n\n if (!hashTypes.length) {\n return null;\n }\n\n return `${baseCmd} --write-verification-metadata ${hashTypes.join(',')} dependencies`;\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`gradle.updateArtifacts(${packageFileName})`);\n\n const fileList = await scm.getFileList();\n const lockFiles = fileList.filter((file) => isLockFile(file));\n const verificationMetadataFile = fileList.find((fileName) =>\n fileName.endsWith('gradle/verification-metadata.xml'),\n );\n if (!lockFiles.length && !verificationMetadataFile) {\n logger.debug(\n 'No Gradle dependency lockfiles or verification metadata found - skipping update',\n );\n return null;\n }\n\n const gradlewName = gradleWrapperFileName();\n const gradlewFile = await findUpLocal(\n gradlewName,\n upath.dirname(packageFileName),\n );\n if (!gradlewFile) {\n logger.debug(\n 'Found Gradle dependency lockfiles but no gradlew - aborting update',\n );\n return null;\n }\n\n if (\n config.isLockFileMaintenance &&\n (!isGradleBuildFile(packageFileName) ||\n upath.dirname(packageFileName) !== upath.dirname(gradlewFile))\n ) {\n logger.trace(\n 'No build.gradle(.kts) file or not in root project - skipping lock file maintenance',\n );\n return null;\n }\n\n if (!isGradleExecutionAllowed(gradlewFile)) {\n logger.trace(\n 'Not allowed to execute gradle due to allowedUnsafeExecutions - aborting update',\n );\n return null;\n }\n\n logger.debug('Updating found Gradle dependency lockfiles');\n\n try {\n const oldLockFileContentMap = await getFiles(lockFiles);\n await prepareGradleCommand(gradlewFile);\n\n const baseCmd = `${gradlewName}${gradleJvmArg(getToolSettingsOptions(config.toolSettings))} --console=plain --dependency-verification lenient -q`;\n const execOptions: ExecOptions = {\n cwdFile: gradlewFile,\n docker: {},\n extraEnv,\n toolConstraints: [\n {\n toolName: 'java',\n constraint:\n config.constraints?.java ??\n (await getJavaConstraint(\n await getGradleVersion(gradlewFile),\n gradlewFile,\n )),\n },\n ],\n };\n\n const cmds = [];\n if (lockFiles.length) {\n const subprojects = await getSubProjectList(baseCmd, execOptions);\n let lockfileCmd = `${baseCmd} ${subprojects\n .map((project) => `${project}:dependencies`)\n .map(quote)\n .join(' ')}`;\n\n if (\n config.isLockFileMaintenance === true ||\n !updatedDeps.length ||\n isGcvPropsFile(packageFileName)\n ) {\n lockfileCmd += ' --write-locks';\n } else {\n const updatedDepNames = updatedDeps\n .map(({ depName, packageName }) => packageName ?? depName)\n .filter(isNonEmptyStringAndNotWhitespace);\n\n lockfileCmd += ` --update-locks ${updatedDepNames\n .map(quote)\n .join(',')}`;\n }\n cmds.push(lockfileCmd);\n }\n\n const updateVerificationMetadataCmd =\n await buildUpdateVerificationMetadataCmd(\n verificationMetadataFile,\n baseCmd,\n );\n if (updateVerificationMetadataCmd) {\n cmds.push(updateVerificationMetadataCmd);\n }\n\n if (!cmds.length) {\n logger.debug('No lockfile or verification metadata update necessary');\n return null;\n }\n\n await writeLocalFile(packageFileName, newPackageFileContent);\n await exec(cmds, { ...execOptions, ignoreStdout: true });\n\n const res = await getUpdatedLockfiles(oldLockFileContentMap);\n logger.debug('Returning updated Gradle dependency lockfiles');\n\n return res.length > 0 ? res : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n\n logger.debug({ err }, 'Error while updating Gradle dependency lockfiles');\n return [\n {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","names":[],"sources":["../../../../lib/modules/manager/gradle/artifacts.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport {\n exec,\n getToolSettingsOptions,\n gradleJvmArg,\n} from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n findUpLocal,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getFiles, getRepoStatus } from '../../../util/git/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { scm } from '../../platform/scm.ts';\nimport {\n extraEnv,\n extractGradleVersion,\n getJavaConstraint,\n gradleWrapperFileName,\n prepareGradleCommand,\n} from '../gradle-wrapper/utils.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport {\n isGcvLockFile,\n isGcvPropsFile,\n} from './extract/consistent-versions-plugin.ts';\nimport { isGradleBuildFile } from './utils.ts';\n\nexport function isGradleExecutionAllowed(command: string): boolean {\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n\n if (!allowlist.includes('gradleWrapper')) {\n logger.once.warn(\n { command },\n 'Gradle wrapper command was requested to run, but `gradleWrapper` is not permitted in the allowedUnsafeExecutions',\n );\n return false;\n }\n\n return true;\n}\n\n// .lockfile is gradle default lockfile, /versions.lock is gradle-consistent-versions plugin lockfile\nfunction isLockFile(fileName: string): boolean {\n return fileName.endsWith('.lockfile') || isGcvLockFile(fileName);\n}\n\nasync function getUpdatedLockfiles(\n oldLockFileContentMap: Record<string, string | null>,\n): Promise<UpdateArtifactsResult[]> {\n const res: UpdateArtifactsResult[] = [];\n\n const status = await getRepoStatus();\n\n for (const modifiedFile of status.modified) {\n if (\n isLockFile(modifiedFile) ||\n modifiedFile.endsWith('gradle/verification-metadata.xml')\n ) {\n const newContent = await readLocalFile(modifiedFile, 'utf8');\n if (oldLockFileContentMap[modifiedFile] !== newContent) {\n res.push({\n file: {\n type: 'addition',\n path: modifiedFile,\n contents: newContent,\n },\n });\n }\n }\n }\n\n return res;\n}\n\nasync function getSubProjectList(\n cmd: string,\n execOptions: ExecOptions,\n): Promise<string[]> {\n const subprojects = ['']; // = root project\n const subprojectsRegex = regEx(/^[ \\t]*subprojects: \\[(?<subprojects>.+)\\]/m);\n\n const gradleProperties = await exec(`${cmd} properties`, execOptions);\n const subprojectsMatch = gradleProperties.stdout.match(subprojectsRegex);\n if (subprojectsMatch?.groups?.subprojects) {\n const projectRegex = regEx(/project '(?<name>.+?)'/g);\n const matches = subprojectsMatch.groups.subprojects.matchAll(projectRegex);\n for (const match of matches) {\n if (match?.groups?.name) {\n subprojects.push(match.groups.name);\n }\n }\n }\n\n return subprojects;\n}\n\nasync function getGradleVersion(gradlewFile: string): Promise<string | null> {\n const propertiesFile = upath.join(\n upath.dirname(gradlewFile),\n 'gradle/wrapper/gradle-wrapper.properties',\n );\n const properties = await readLocalFile(propertiesFile, 'utf8');\n const extractResult = extractGradleVersion(properties ?? '');\n\n return extractResult ? extractResult.version : null;\n}\n\nasync function buildUpdateVerificationMetadataCmd(\n verificationMetadataFile: string | undefined,\n baseCmd: string,\n): Promise<string | null> {\n if (!verificationMetadataFile) {\n return null;\n }\n\n const verificationMetadata = await readLocalFile(verificationMetadataFile);\n const verifiesChecksums = verificationMetadata?.includes(\n '<verify-metadata>true</verify-metadata>',\n );\n const verifiesSignatures = verificationMetadata?.includes(\n '<verify-signatures>true</verify-signatures>',\n );\n\n const hashTypes = ['sha256', 'sha512'].filter((type) =>\n verificationMetadata?.includes(`<${type} `),\n );\n\n if (verifiesChecksums || hashTypes.length) {\n logger.debug(\n 'Dependency metadata verification enabled or checksums present - generating checksums',\n );\n }\n\n if ((verifiesChecksums || verifiesSignatures) && !hashTypes.length) {\n // fallback algorithm for pgp and in case a weak algorithm (md5, sha1) is used for checksums\n hashTypes.push('sha256');\n }\n\n if (verifiesSignatures) {\n logger.debug(\n 'Dependency signature verification enabled - generating PGP signatures',\n );\n hashTypes.push('pgp');\n }\n\n if (!hashTypes.length) {\n return null;\n }\n\n return `${baseCmd} --write-verification-metadata ${hashTypes.join(',')} dependencies`;\n}\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`gradle.updateArtifacts(${packageFileName})`);\n\n const fileList = await scm.getFileList();\n const lockFiles = fileList.filter((file) => isLockFile(file));\n const verificationMetadataFile = fileList.find((fileName) =>\n fileName.endsWith('gradle/verification-metadata.xml'),\n );\n if (!lockFiles.length && !verificationMetadataFile) {\n logger.debug(\n 'No Gradle dependency lockfiles or verification metadata found - skipping update',\n );\n return null;\n }\n\n const gradlewName = gradleWrapperFileName();\n const gradlewFile = await findUpLocal(\n gradlewName,\n upath.dirname(packageFileName),\n );\n if (!gradlewFile) {\n logger.debug(\n 'Found Gradle dependency lockfiles but no gradlew - aborting update',\n );\n return null;\n }\n\n if (\n config.isLockFileMaintenance &&\n (!isGradleBuildFile(packageFileName) ||\n upath.dirname(packageFileName) !== upath.dirname(gradlewFile))\n ) {\n logger.trace(\n 'No build.gradle(.kts) file or not in root project - skipping lock file maintenance',\n );\n return null;\n }\n\n if (!isGradleExecutionAllowed(gradlewFile)) {\n logger.trace(\n 'Not allowed to execute gradle due to allowedUnsafeExecutions - aborting update',\n );\n return null;\n }\n\n logger.debug('Updating found Gradle dependency lockfiles');\n\n try {\n const oldLockFileContentMap = await getFiles(lockFiles);\n await prepareGradleCommand(gradlewFile);\n\n const baseCmd = `${gradlewName}${gradleJvmArg(getToolSettingsOptions(config.toolSettings))} --console=plain --dependency-verification lenient -q`;\n const execOptions: ExecOptions = {\n cwdFile: gradlewFile,\n docker: {},\n extraEnv,\n toolConstraints: [\n {\n toolName: 'java',\n constraint:\n config.constraints?.java ??\n (await getJavaConstraint(\n await getGradleVersion(gradlewFile),\n gradlewFile,\n )),\n },\n ],\n };\n\n const cmds = [];\n if (lockFiles.length) {\n const subprojects = await getSubProjectList(baseCmd, execOptions);\n let lockfileCmd = `${baseCmd} ${subprojects\n .map((project) => `${project}:dependencies`)\n .map(quote)\n .join(' ')}`;\n\n if (\n config.isLockFileMaintenance === true ||\n !updatedDeps.length ||\n isGcvPropsFile(packageFileName)\n ) {\n lockfileCmd += ' --write-locks';\n } else {\n const updatedDepNames = updatedDeps\n .map(({ depName, packageName }) => packageName ?? depName)\n .filter(isNonEmptyStringAndNotWhitespace);\n\n lockfileCmd += ` --update-locks ${updatedDepNames\n .map(quote)\n .join(',')}`;\n }\n cmds.push(lockfileCmd);\n }\n\n const updateVerificationMetadataCmd =\n await buildUpdateVerificationMetadataCmd(\n verificationMetadataFile,\n baseCmd,\n );\n if (updateVerificationMetadataCmd) {\n cmds.push(updateVerificationMetadataCmd);\n }\n\n if (!cmds.length) {\n logger.debug('No lockfile or verification metadata update necessary');\n return null;\n }\n\n await writeLocalFile(packageFileName, newPackageFileContent);\n await exec(cmds, { ...execOptions, ignoreStdout: true });\n\n const res = await getUpdatedLockfiles(oldLockFileContentMap);\n logger.debug('Returning updated Gradle dependency lockfiles');\n\n return res.length > 0 ? res : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n\n logger.debug({ err }, 'Error while updating Gradle dependency lockfiles');\n return [\n {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n"],"mappings":"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"}
@@ -98,7 +98,10 @@ async function updateArtifacts({ packageFileName, updatedDeps, config }) {
98
98
  err.stderr,
99
99
  err.message
100
100
  ].filter(isString).join("\n");
101
- logger.warn({ err }, `Error updating ${lockFileName}`);
101
+ logger.warn({
102
+ err,
103
+ lockFileName
104
+ }, "Error updating mise lock file");
102
105
  return [{ artifactError: {
103
106
  fileName: lockFileName,
104
107
  stderr: errorOutput
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":["hostRules.find"],"sources":["../../../../lib/modules/manager/mise/artifacts.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { findGithubToken } from '../../../util/check-token.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type {\n ConstraintName,\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../util/exec/types.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { getConfigType, getLockFileName } from './lockfile.ts';\n\n/**\n * Resolver tools that mise may invoke while running `mise lock`, for instance to convert an inexact version like `1` against the npm registry.\n *\n * NOTE: this will install all relevant tools, regardless of what the given mise configuration uses.\n *\n * @see https://mise.jdx.dev/dev-tools/backends/npm.html\n * @see https://mise.jdx.dev/dev-tools/backends/go.html\n * @see https://mise.jdx.dev/dev-tools/backends/gem.html\n */\nfunction getMiseLockToolConstraints(\n constraints?: Partial<Record<ConstraintName, string>> | null,\n): ToolConstraint[] {\n return [\n { toolName: 'mise', constraint: constraints?.mise },\n { toolName: 'node', constraint: constraints?.node },\n { toolName: 'npm', constraint: constraints?.npm },\n { toolName: 'golang', constraint: constraints?.go },\n { toolName: 'ruby', constraint: constraints?.ruby },\n ];\n}\n\n/**\n * Updates mise lock files when dependencies are updated.\n * Runs `mise lock` for lock file maintenance or `mise lock <tools>` for targeted updates.\n */\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n const lockFileName = getLockFileName(packageFileName);\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug({ lockFileName }, 'No mise lock file found');\n return null;\n }\n\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n if (!allowlist.includes('mise')) {\n logger.once.warn(\n '`mise lock` was requested to run, but `mise` is not permitted in the allowedUnsafeExecutions',\n );\n return null;\n }\n\n const { isLocal, env } = getConfigType(packageFileName);\n const localFlag = isLocal ? ' --local' : '';\n\n let lockCmd: string;\n if (config.isLockFileMaintenance) {\n lockCmd = `mise lock${localFlag}`;\n } else {\n const tools = updatedDeps\n .map(({ depName }) => depName)\n .filter(isNonEmptyStringAndNotWhitespace)\n .map(quote)\n .join(' ');\n lockCmd = tools\n ? `mise lock${localFlag} ${tools}`\n : `mise lock${localFlag}`;\n }\n\n const extraEnv: ExtraEnv = {};\n if (env) {\n extraEnv.MISE_ENV = env;\n }\n const token = findGithubToken(\n hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n }),\n );\n if (token) {\n extraEnv.GITHUB_TOKEN = token;\n }\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n toolConstraints: getMiseLockToolConstraints(config.constraints),\n docker: {},\n };\n\n const trustCmd = `mise trust ${quote(upath.basename(packageFileName))}`;\n\n try {\n await exec([trustCmd, lockCmd], execOptions);\n const newLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!newLockFileContent || existingLockFileContent === newLockFileContent) {\n return null;\n }\n\n logger.debug({ lockFileName }, 'Returning updated mise lock file');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockFileContent,\n },\n },\n ];\n } catch (err) {\n // istanbul ignore if: not worth testing\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n\n const errorOutput = [err.stdout, err.stderr, err.message]\n .filter(isString)\n .join('\\n');\n\n logger.warn({ err }, `Error updating ${lockFileName}`);\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: errorOutput,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,SAAS,2BACP,aACkB;CAClB,OAAO;EACL;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;EAClD;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;EAClD;GAAE,UAAU;GAAO,YAAY,aAAa;EAAI;EAChD;GAAE,UAAU;GAAU,YAAY,aAAa;EAAG;EAClD;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;CACpD;AACF;;;;;AAMA,eAAsB,gBAAgB,EACpC,iBACA,aACA,UAC0D;CAC1D,MAAM,eAAe,gBAAgB,eAAe;CACpD,MAAM,0BAA0B,MAAM,cAAc,cAAc,MAAM;CACxE,IAAI,CAAC,yBAAyB;EAC5B,OAAO,MAAM,EAAE,aAAa,GAAG,yBAAyB;EACxD,OAAO;CACT;CAGA,IAAI,CADc,aAAa,IAAI,yBACtB,CAAC,CAAC,SAAS,MAAM,GAAG;EAC/B,OAAO,KAAK,KACV,8FACF;EACA,OAAO;CACT;CAEA,MAAM,EAAE,SAAS,QAAQ,cAAc,eAAe;CACtD,MAAM,YAAY,UAAU,aAAa;CAEzC,IAAI;CACJ,IAAI,OAAO,uBACT,UAAU,YAAY;MACjB;EACL,MAAM,QAAQ,YACX,KAAK,EAAE,cAAc,OAAO,CAAC,CAC7B,OAAO,gCAAgC,CAAC,CACxC,IAAI,KAAK,CAAC,CACV,KAAK,GAAG;EACX,UAAU,QACN,YAAY,UAAU,GAAG,UACzB,YAAY;CAClB;CAEA,MAAM,WAAqB,CAAC;CAC5B,IAAI,KACF,SAAS,WAAW;CAEtB,MAAM,QAAQ,gBACZA,KAAe;EACb,UAAU;EACV,KAAK;CACP,CAAC,CACH;CACA,IAAI,OACF,SAAS,eAAe;CAG1B,MAAM,cAA2B;EAC/B,SAAS;EACT;EACA,iBAAiB,2BAA2B,OAAO,WAAW;EAC9D,QAAQ,CAAC;CACX;CAEA,MAAM,WAAW,cAAc,MAAM,MAAM,SAAS,eAAe,CAAC;CAEpE,IAAI;EACF,MAAM,KAAK,CAAC,UAAU,OAAO,GAAG,WAAW;EAC3C,MAAM,qBAAqB,MAAM,cAAc,cAAc,MAAM;EACnE,IAAI,CAAC,sBAAsB,4BAA4B,oBACrD,OAAO;EAGT,OAAO,MAAM,EAAE,aAAa,GAAG,kCAAkC;EACjE,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;;EAEZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAGR,MAAM,cAAc;GAAC,IAAI;GAAQ,IAAI;GAAQ,IAAI;EAAO,CAAC,CACtD,OAAO,QAAQ,CAAC,CAChB,KAAK,IAAI;EAEZ,OAAO,KAAK,EAAE,IAAI,GAAG,kBAAkB,cAAc;EACrD,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ;EACV,EACF,CACF;CACF;AACF"}
1
+ {"version":3,"file":"artifacts.js","names":["hostRules.find"],"sources":["../../../../lib/modules/manager/mise/artifacts.ts"],"sourcesContent":["import { isNonEmptyStringAndNotWhitespace, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { findGithubToken } from '../../../util/check-token.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type {\n ConstraintName,\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../util/exec/types.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { getConfigType, getLockFileName } from './lockfile.ts';\n\n/**\n * Resolver tools that mise may invoke while running `mise lock`, for instance to convert an inexact version like `1` against the npm registry.\n *\n * NOTE: this will install all relevant tools, regardless of what the given mise configuration uses.\n *\n * @see https://mise.jdx.dev/dev-tools/backends/npm.html\n * @see https://mise.jdx.dev/dev-tools/backends/go.html\n * @see https://mise.jdx.dev/dev-tools/backends/gem.html\n */\nfunction getMiseLockToolConstraints(\n constraints?: Partial<Record<ConstraintName, string>> | null,\n): ToolConstraint[] {\n return [\n { toolName: 'mise', constraint: constraints?.mise },\n { toolName: 'node', constraint: constraints?.node },\n { toolName: 'npm', constraint: constraints?.npm },\n { toolName: 'golang', constraint: constraints?.go },\n { toolName: 'ruby', constraint: constraints?.ruby },\n ];\n}\n\n/**\n * Updates mise lock files when dependencies are updated.\n * Runs `mise lock` for lock file maintenance or `mise lock <tools>` for targeted updates.\n */\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n const lockFileName = getLockFileName(packageFileName);\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug({ lockFileName }, 'No mise lock file found');\n return null;\n }\n\n const allowlist = GlobalConfig.get('allowedUnsafeExecutions');\n if (!allowlist.includes('mise')) {\n logger.once.warn(\n '`mise lock` was requested to run, but `mise` is not permitted in the allowedUnsafeExecutions',\n );\n return null;\n }\n\n const { isLocal, env } = getConfigType(packageFileName);\n const localFlag = isLocal ? ' --local' : '';\n\n let lockCmd: string;\n if (config.isLockFileMaintenance) {\n lockCmd = `mise lock${localFlag}`;\n } else {\n const tools = updatedDeps\n .map(({ depName }) => depName)\n .filter(isNonEmptyStringAndNotWhitespace)\n .map(quote)\n .join(' ');\n lockCmd = tools\n ? `mise lock${localFlag} ${tools}`\n : `mise lock${localFlag}`;\n }\n\n const extraEnv: ExtraEnv = {};\n if (env) {\n extraEnv.MISE_ENV = env;\n }\n const token = findGithubToken(\n hostRules.find({\n hostType: 'github',\n url: 'https://api.github.com/',\n }),\n );\n if (token) {\n extraEnv.GITHUB_TOKEN = token;\n }\n\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n toolConstraints: getMiseLockToolConstraints(config.constraints),\n docker: {},\n };\n\n const trustCmd = `mise trust ${quote(upath.basename(packageFileName))}`;\n\n try {\n await exec([trustCmd, lockCmd], execOptions);\n const newLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!newLockFileContent || existingLockFileContent === newLockFileContent) {\n return null;\n }\n\n logger.debug({ lockFileName }, 'Returning updated mise lock file');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockFileContent,\n },\n },\n ];\n } catch (err) {\n // istanbul ignore if: not worth testing\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n\n const errorOutput = [err.stdout, err.stderr, err.message]\n .filter(isString)\n .join('\\n');\n\n logger.warn({ err, lockFileName }, 'Error updating mise lock file');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: errorOutput,\n },\n },\n ];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,SAAS,2BACP,aACkB;CAClB,OAAO;EACL;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;EAClD;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;EAClD;GAAE,UAAU;GAAO,YAAY,aAAa;EAAI;EAChD;GAAE,UAAU;GAAU,YAAY,aAAa;EAAG;EAClD;GAAE,UAAU;GAAQ,YAAY,aAAa;EAAK;CACpD;AACF;;;;;AAMA,eAAsB,gBAAgB,EACpC,iBACA,aACA,UAC0D;CAC1D,MAAM,eAAe,gBAAgB,eAAe;CACpD,MAAM,0BAA0B,MAAM,cAAc,cAAc,MAAM;CACxE,IAAI,CAAC,yBAAyB;EAC5B,OAAO,MAAM,EAAE,aAAa,GAAG,yBAAyB;EACxD,OAAO;CACT;CAGA,IAAI,CADc,aAAa,IAAI,yBACtB,CAAC,CAAC,SAAS,MAAM,GAAG;EAC/B,OAAO,KAAK,KACV,8FACF;EACA,OAAO;CACT;CAEA,MAAM,EAAE,SAAS,QAAQ,cAAc,eAAe;CACtD,MAAM,YAAY,UAAU,aAAa;CAEzC,IAAI;CACJ,IAAI,OAAO,uBACT,UAAU,YAAY;MACjB;EACL,MAAM,QAAQ,YACX,KAAK,EAAE,cAAc,OAAO,CAAC,CAC7B,OAAO,gCAAgC,CAAC,CACxC,IAAI,KAAK,CAAC,CACV,KAAK,GAAG;EACX,UAAU,QACN,YAAY,UAAU,GAAG,UACzB,YAAY;CAClB;CAEA,MAAM,WAAqB,CAAC;CAC5B,IAAI,KACF,SAAS,WAAW;CAEtB,MAAM,QAAQ,gBACZA,KAAe;EACb,UAAU;EACV,KAAK;CACP,CAAC,CACH;CACA,IAAI,OACF,SAAS,eAAe;CAG1B,MAAM,cAA2B;EAC/B,SAAS;EACT;EACA,iBAAiB,2BAA2B,OAAO,WAAW;EAC9D,QAAQ,CAAC;CACX;CAEA,MAAM,WAAW,cAAc,MAAM,MAAM,SAAS,eAAe,CAAC;CAEpE,IAAI;EACF,MAAM,KAAK,CAAC,UAAU,OAAO,GAAG,WAAW;EAC3C,MAAM,qBAAqB,MAAM,cAAc,cAAc,MAAM;EACnE,IAAI,CAAC,sBAAsB,4BAA4B,oBACrD,OAAO;EAGT,OAAO,MAAM,EAAE,aAAa,GAAG,kCAAkC;EACjE,OAAO,CACL,EACE,MAAM;GACJ,MAAM;GACN,MAAM;GACN,UAAU;EACZ,EACF,CACF;CACF,SAAS,KAAK;;EAEZ,IAAI,IAAI,YAAA,mBACN,MAAM;EAGR,MAAM,cAAc;GAAC,IAAI;GAAQ,IAAI;GAAQ,IAAI;EAAO,CAAC,CACtD,OAAO,QAAQ,CAAC,CAChB,KAAK,IAAI;EAEZ,OAAO,KAAK;GAAE;GAAK;EAAa,GAAG,+BAA+B;EAClE,OAAO,CACL,EACE,eAAe;GACb,UAAU;GACV,QAAQ;EACV,EACF,CACF;CACF;AACF"}