renovate 44.61.1 → 44.61.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/migration.js +1 -1
- package/dist/config/migration.js.map +1 -1
- package/dist/config/migrations/custom/schedule-migration.js +8 -8
- package/dist/config/migrations/custom/schedule-migration.js.map +1 -1
- package/dist/config/options/env.js +1 -1
- package/dist/config/options/env.js.map +1 -1
- package/dist/config/parse.js +1 -1
- package/dist/config/parse.js.map +1 -1
- package/dist/config/presets/parse.js +1 -1
- package/dist/config/presets/parse.js.map +1 -1
- package/dist/config/validation.js +1 -1
- package/dist/config/validation.js.map +1 -1
- package/dist/logger/utils.js +2 -2
- package/dist/logger/utils.js.map +1 -1
- package/dist/modules/datasource/deno/index.js +1 -1
- package/dist/modules/datasource/deno/index.js.map +1 -1
- package/dist/modules/datasource/docker/ecr.js +1 -1
- package/dist/modules/datasource/docker/ecr.js.map +1 -1
- package/dist/modules/datasource/docker/google.js +1 -1
- package/dist/modules/datasource/docker/google.js.map +1 -1
- package/dist/modules/datasource/go/base.js +1 -1
- package/dist/modules/datasource/go/base.js.map +1 -1
- package/dist/modules/datasource/go/goproxy-parser.js +1 -1
- package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js +1 -1
- package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
- package/dist/modules/datasource/gradle-version/index.js +1 -1
- package/dist/modules/datasource/gradle-version/index.js.map +1 -1
- package/dist/modules/datasource/helm/schema.js +2 -2
- package/dist/modules/datasource/helm/schema.js.map +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js +1 -1
- package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
- package/dist/modules/datasource/npm/get.js +1 -1
- package/dist/modules/datasource/npm/get.js.map +1 -1
- package/dist/modules/datasource/npm/npmrc.js +1 -1
- package/dist/modules/datasource/npm/npmrc.js.map +1 -1
- package/dist/modules/datasource/pypi/common.js +2 -2
- package/dist/modules/datasource/pypi/common.js.map +1 -1
- package/dist/modules/datasource/pypi/index.js +1 -1
- package/dist/modules/datasource/pypi/index.js.map +1 -1
- package/dist/modules/manager/ansible/extract.js +2 -2
- package/dist/modules/manager/ansible/extract.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/collections.js +2 -2
- package/dist/modules/manager/ansible-galaxy/collections.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/roles.js +2 -2
- package/dist/modules/manager/ansible-galaxy/roles.js.map +1 -1
- package/dist/modules/manager/ansible-galaxy/util.js +4 -4
- package/dist/modules/manager/ansible-galaxy/util.js.map +1 -1
- package/dist/modules/manager/ant/properties.js +9 -9
- package/dist/modules/manager/ant/properties.js.map +1 -1
- package/dist/modules/manager/asdf/extract.js +1 -1
- package/dist/modules/manager/asdf/extract.js.map +1 -1
- package/dist/modules/manager/asdf/upgradeable-tooling.js +1 -1
- package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/batect-wrapper/extract.js +2 -2
- package/dist/modules/manager/batect-wrapper/extract.js.map +1 -1
- package/dist/modules/manager/bazel/rules/go.js +1 -1
- package/dist/modules/manager/bazel/rules/go.js.map +1 -1
- package/dist/modules/manager/buildkite/extract.js +1 -1
- package/dist/modules/manager/buildkite/extract.js.map +1 -1
- package/dist/modules/manager/buildpacks/extract.js +1 -1
- package/dist/modules/manager/buildpacks/extract.js.map +1 -1
- package/dist/modules/manager/bundler/common.js +7 -7
- package/dist/modules/manager/bundler/common.js.map +1 -1
- package/dist/modules/manager/bundler/extract.js +4 -4
- package/dist/modules/manager/bundler/extract.js.map +1 -1
- package/dist/modules/manager/deno/utils.js +1 -1
- package/dist/modules/manager/deno/utils.js.map +1 -1
- package/dist/modules/manager/dockerfile/extract.js +11 -4
- package/dist/modules/manager/dockerfile/extract.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +4 -4
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +2 -1
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/git-submodules/extract.js +1 -1
- package/dist/modules/manager/git-submodules/extract.js.map +1 -1
- package/dist/modules/manager/github-actions/common.js +3 -3
- package/dist/modules/manager/github-actions/common.js.map +1 -1
- package/dist/modules/manager/github-actions/parse.js +1 -1
- package/dist/modules/manager/github-actions/parse.js.map +1 -1
- package/dist/modules/manager/gomod/artifacts.js +4 -4
- package/dist/modules/manager/gomod/artifacts.js.map +1 -1
- package/dist/modules/manager/gomod/line-parser.js +1 -1
- package/dist/modules/manager/gomod/line-parser.js.map +1 -1
- package/dist/modules/manager/gomod/update.js +1 -1
- package/dist/modules/manager/gomod/update.js.map +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js +1 -1
- package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
- package/dist/modules/manager/helmv3/utils.js +1 -1
- package/dist/modules/manager/helmv3/utils.js.map +1 -1
- package/dist/modules/manager/html/extract.js +2 -2
- package/dist/modules/manager/html/extract.js.map +1 -1
- package/dist/modules/manager/kustomize/extract.js +3 -3
- package/dist/modules/manager/kustomize/extract.js.map +1 -1
- package/dist/modules/manager/leiningen/extract.js +1 -1
- package/dist/modules/manager/leiningen/extract.js.map +1 -1
- package/dist/modules/manager/maven-wrapper/artifacts.js +6 -6
- package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
- package/dist/modules/manager/meteor/extract.js +2 -2
- package/dist/modules/manager/meteor/extract.js.map +1 -1
- package/dist/modules/manager/mise/upgradeable-tooling.js +2 -2
- package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
- package/dist/modules/manager/mix/extract.js +3 -3
- package/dist/modules/manager/mix/extract.js.map +1 -1
- package/dist/modules/manager/npm/extract/common/dependency.js +4 -4
- package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
- package/dist/modules/manager/npm/extract/yarnrc.js +1 -1
- package/dist/modules/manager/npm/extract/yarnrc.js.map +1 -1
- package/dist/modules/manager/npm/npmrc.js +1 -1
- package/dist/modules/manager/npm/npmrc.js.map +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js.map +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +1 -1
- package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
- package/dist/modules/manager/nuget/extract.js +1 -1
- package/dist/modules/manager/nuget/extract.js.map +1 -1
- package/dist/modules/manager/pep621/utils.js +1 -1
- package/dist/modules/manager/pep621/utils.js.map +1 -1
- package/dist/modules/manager/pep723/utils.js +1 -1
- package/dist/modules/manager/pep723/utils.js.map +1 -1
- package/dist/modules/manager/pip-compile/common.js +2 -2
- package/dist/modules/manager/pip-compile/common.js.map +1 -1
- package/dist/modules/manager/pip_requirements/common.js +1 -1
- package/dist/modules/manager/pip_requirements/common.js.map +1 -1
- package/dist/modules/manager/pip_requirements/extract.js +1 -1
- package/dist/modules/manager/pip_requirements/extract.js.map +1 -1
- package/dist/modules/manager/poetry/artifacts.js +4 -4
- package/dist/modules/manager/poetry/artifacts.js.map +1 -1
- package/dist/modules/manager/puppet/puppetfile-parser.js +5 -5
- package/dist/modules/manager/puppet/puppetfile-parser.js.map +1 -1
- package/dist/modules/manager/sbt/update.js +1 -1
- package/dist/modules/manager/sbt/update.js.map +1 -1
- package/dist/modules/manager/sbt/util.js +2 -2
- package/dist/modules/manager/sbt/util.js.map +1 -1
- package/dist/modules/manager/setup-cfg/extract.js +2 -2
- package/dist/modules/manager/setup-cfg/extract.js.map +1 -1
- package/dist/modules/manager/swift/artifacts.js +4 -4
- package/dist/modules/manager/swift/artifacts.js.map +1 -1
- package/dist/modules/manager/swift/extract.js +1 -1
- package/dist/modules/manager/swift/extract.js.map +1 -1
- package/dist/modules/manager/tekton/extract.js +1 -1
- package/dist/modules/manager/tekton/extract.js.map +1 -1
- package/dist/modules/manager/terraform/extractors/others/modules.js +5 -5
- package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
- package/dist/modules/manager/terraform/util.js +1 -1
- package/dist/modules/manager/terraform/util.js.map +1 -1
- package/dist/modules/manager/terragrunt/modules.js +3 -3
- package/dist/modules/manager/terragrunt/modules.js.map +1 -1
- package/dist/modules/platform/azure/index.js +1 -1
- package/dist/modules/platform/azure/index.js.map +1 -1
- package/dist/modules/platform/bitbucket/index.js +4 -4
- package/dist/modules/platform/bitbucket/index.js.map +1 -1
- package/dist/modules/platform/bitbucket-server/index.js +1 -1
- package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
- package/dist/modules/platform/gerrit/index.js +1 -1
- package/dist/modules/platform/gerrit/index.js.map +1 -1
- package/dist/modules/platform/gerrit/utils.js +3 -3
- package/dist/modules/platform/gerrit/utils.js.map +1 -1
- package/dist/modules/versioning/apk/index.js +3 -3
- package/dist/modules/versioning/apk/index.js.map +1 -1
- package/dist/modules/versioning/composer/index.js +11 -11
- package/dist/modules/versioning/composer/index.js.map +1 -1
- package/dist/modules/versioning/conan/range.js +1 -1
- package/dist/modules/versioning/conan/range.js.map +1 -1
- package/dist/modules/versioning/conda/index.js +1 -1
- package/dist/modules/versioning/conda/index.js.map +1 -1
- package/dist/modules/versioning/devbox/index.js +2 -2
- package/dist/modules/versioning/devbox/index.js.map +1 -1
- package/dist/modules/versioning/distro.js +1 -1
- package/dist/modules/versioning/distro.js.map +1 -1
- package/dist/modules/versioning/github-actions/index.js +2 -2
- package/dist/modules/versioning/github-actions/index.js.map +1 -1
- package/dist/modules/versioning/go-mod-directive/index.js +1 -1
- package/dist/modules/versioning/go-mod-directive/index.js.map +1 -1
- package/dist/modules/versioning/hashicorp/convertor.js +5 -5
- package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
- package/dist/modules/versioning/hex/index.js +4 -4
- package/dist/modules/versioning/hex/index.js.map +1 -1
- package/dist/modules/versioning/lambda-node/schedule.js +2 -2
- package/dist/modules/versioning/lambda-node/schedule.js.map +1 -1
- package/dist/modules/versioning/loose/index.js +2 -2
- package/dist/modules/versioning/loose/index.js.map +1 -1
- package/dist/modules/versioning/pep440/range.js +1 -1
- package/dist/modules/versioning/pep440/range.js.map +1 -1
- package/dist/modules/versioning/perl/index.js +4 -4
- package/dist/modules/versioning/perl/index.js.map +1 -1
- package/dist/modules/versioning/poetry/patterns.js +1 -1
- package/dist/modules/versioning/poetry/patterns.js.map +1 -1
- package/dist/modules/versioning/poetry/transform.js +3 -3
- package/dist/modules/versioning/poetry/transform.js.map +1 -1
- package/dist/modules/versioning/redhat/index.js +1 -1
- package/dist/modules/versioning/redhat/index.js.map +1 -1
- package/dist/modules/versioning/rpm/index.js +1 -1
- package/dist/modules/versioning/rpm/index.js.map +1 -1
- package/dist/modules/versioning/ruby/index.js +2 -2
- package/dist/modules/versioning/ruby/index.js.map +1 -1
- package/dist/modules/versioning/semver/common.js +1 -1
- package/dist/modules/versioning/semver/common.js.map +1 -1
- package/dist/modules/versioning/swift/range.js +13 -13
- package/dist/modules/versioning/swift/range.js.map +1 -1
- package/dist/modules/versioning/ubuntu/index.js +1 -1
- package/dist/modules/versioning/ubuntu/index.js.map +1 -1
- package/dist/modules/versioning/unity3d-packages/index.js +2 -2
- package/dist/modules/versioning/unity3d-packages/index.js.map +1 -1
- package/dist/util/cache/package/impl/redis.js +1 -1
- package/dist/util/cache/package/impl/redis.js.map +1 -1
- package/dist/util/git/author.js +1 -1
- package/dist/util/git/author.js.map +1 -1
- package/dist/util/git/semantic.js +1 -1
- package/dist/util/git/semantic.js.map +1 -1
- package/dist/util/http/www-authenticate.js +4 -4
- package/dist/util/http/www-authenticate.js.map +1 -1
- package/dist/util/ignore.js +1 -1
- package/dist/util/ignore.js.map +1 -1
- package/dist/util/markdown.js +8 -8
- package/dist/util/markdown.js.map +1 -1
- package/dist/util/pretty-time.js +3 -3
- package/dist/util/pretty-time.js.map +1 -1
- package/dist/util/regex.js +1 -1
- package/dist/util/regex.js.map +1 -1
- package/dist/workers/global/config/parse/cli.js +1 -1
- package/dist/workers/global/config/parse/cli.js.map +1 -1
- package/dist/workers/repository/model/semantic-commit-message.js +1 -1
- package/dist/workers/repository/model/semantic-commit-message.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/pr-list.js +2 -2
- package/dist/workers/repository/onboarding/pr/pr-list.js.map +1 -1
- package/dist/workers/repository/update/pr/changelog/release-notes.js +3 -3
- package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
- package/dist/workers/repository/updates/branch-name.js +1 -1
- package/dist/workers/repository/updates/branch-name.js.map +1 -1
- package/dist/workers/repository/updates/flatten.js +1 -1
- package/dist/workers/repository/updates/flatten.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +1 -1
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +2 -2
- package/renovate-schema.json +2 -2
package/dist/config/migration.js
CHANGED
|
@@ -11,7 +11,7 @@ import { dequal } from "dequal";
|
|
|
11
11
|
//#region lib/config/migration.ts
|
|
12
12
|
const options = getOptions();
|
|
13
13
|
function fixShortHours(input) {
|
|
14
|
-
return input.replace(regEx(/( \d?\d)((a|p)m)/g), "
|
|
14
|
+
return input.replace(regEx(/(?<hours> \d?\d)(?<meridiem>(?:a|p)m)/g), "$<hours>:00$<meridiem>");
|
|
15
15
|
}
|
|
16
16
|
let optionTypes;
|
|
17
17
|
function migrateConfig(config, parentKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","names":[],"sources":["../../lib/config/migration.ts"],"sourcesContent":["import {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger/index.ts';\nimport { clone } from '../util/clone.ts';\nimport { coerceObject } from '../util/object.ts';\nimport { regEx } from '../util/regex.ts';\nimport { MigrationsService } from './migrations/index.ts';\nimport { getOptions } from './options/index.ts';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types.ts';\nimport { mergeChildConfig } from './utils.ts';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(regEx(/\\.in$/), '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(regEx(/\\.in\\/$/), '.txt/');\n }\n return pattern.replace(regEx(/\\.in\\$\\/$/), '.txt$/');\n });\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig.matchManagers) &&\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.includes('gradle-lite')\n ) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n coerceObject(migratedConfig.gradle),\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"],"mappings":";;;;;;;;;;;AAwBA,MAAM,UAAU,WAAW;AAC3B,SAAgB,cAAc,OAAuB;CACnD,OAAO,MAAM,QAAQ,MAAM,mBAAmB,GAAG,SAAS;AAC5D;AAEA,IAAI;AAEJ,SAAgB,cACd,QACA,WACgB;CAChB,IAAI;EACF,IAAI,CAAC,aAAa;GAChB,cAAc,CAAC;GACf,QAAQ,SAAS,WAAW;IAC1B,YAAY,OAAO,QAAQ,OAAO;GACpC,CAAC;EACH;EACA,MAAM,YAAY,kBAAkB,IAAI,QAAQ,SAAS;EACzD,MAAM,iBAAiB,MAAM,SAAS;EAEtC,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,SAAS,GAAG;GAClD,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,aAAa,GAE7C,eAAe,OAAO,IAAI,QACxB,MAAM,cAAc,GACpB,oBACF;QACK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,gBAAgB,GAEvD,eAAe,OAAO,IAAI,QACxB,MAAM,iBAAiB,GACvB,iBACF;QACK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,kBAAkB,GAEzD,eAAe,OAAO,IAAI,QACxB,MAAM,mBAAmB,GACzB,aACF;QACK,IAAI,SAAS,GAAG,KAAK,IAAI,WAAW,oBAAoB,GAE7D,eAAe,OAAO,IAAI,QACxB,sBACA,sHACF;QACK,IAAI,YAAY,SAAS,YAAY,UAAU,GAAG,GAEvD,eAAe,OAAO,EAAE,SAAS,IAAI;QAChC,IAAI,YAAY,SAAS,WAAW;IACzC,IAAI,QAAQ,QAEV,eAAe,OAAO;SACjB,IAAI,QAAQ,SAEjB,eAAe,OAAO;GAE1B,OAAO,IACL,YAAY,SAAS,YACrB,QAAQ,GAAG,KACX,IAAI,WAAW,GAGf,eAAe,OAAO,OAAO,IAAI,EAAE;QAC9B,IAAI,QAAQ,GAAG,GAGhB;;QAAA,QAAQ,iBAAiB,IAAI,GAAG;KAClC,MAAM,WAAW,CAAC;KAElB,KAAK,MAAM,QAAQ,eAAe,MAChC,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,GAAG;MACpC,MAAM,aAAa,cAAc,IAAI;MACrC,SAAS,KAAK,WAAW,cAAc;KACzC,OACE,SAAS,KAAK,IAAI;KAItB,eAAe,OAAO;IACxB;UACK,IAAI,SAAS,GAAG,GAAG;IACxB,MAAM,aAAa,cAEjB,eAAe,MACf,GACF;IACA,IAAI,WAAW,YAEb,eAAe,OAAO,WAAW;GAErC;GAEA,MAAM,oBAAoB;IACxB,aAAa;IACb,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;GACb;GAEA,IAAI,SAAS,eAAe,IAAI,GAC9B,KAAK,MAAM,CAAC,MAAM,OAAO,OAAO,QAAQ,iBAAiB,GAEvD,eAAe,OAAQ,eAAe,IAAI,CAAY,QACpD,MAAM,MAAM,GAAG,GACf,EACF;EAGN;EAaA,KAAK,MAAM,YAAY;GAXrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EAE6B,GAE7B,IAAI,iBAAiB,eAAe,SAAS,GAAG;GAC9C,eAAe,iBAAiB,CAAC;GAEjC,MAAM,iBAAiB,eAAe;GACtC,MAAM,cAAc;IAClB,iBAAiB,CAAC,QAAQ;IAC1B,GAAG;GACL;GACA,eAAe,aAAa,QAAQ,WAAW;GAE/C,OAAO,eAAe;EACxB;EAGF,IAAI,gBAAgB,eAAe,YAAY,GAAG;GAChD,MAAM,gBAAgB,eAAe;GACrC,eAAe,eAAe,CAAC;GAC/B,KAAK,MAAM,eAAe,eAExB,IAAI,QAAQ,YAAY,YAAY,GAAG;IACrC,OAAO,MAAM,gCAAgC;IAG7C,KAAK,MAAM,WAAW,YAAY,cAAc;KAE9C,MAAM,eAAe,iBACnB,aACA,OACF;KAEA,OAAO,aAAa;KACpB,eAAe,aAAa,KAAK,YAAY;IAC/C;GACF,OACE,eAAe,aAAa,KAAK,WAAW;EAGlD;EACA,IAEE,iBAAiB,eAAe,cAAc,KAE9C,gBAAgB,eAAe,cAAc,CAAC,mBAAmB,GAGjE,eAAe,cAAc,CAAC,sBAAsB,eAClD,cACD,CAAC,oBAAoB,KAAK,gBAAgB;GACzC,MAAM,UAAU;GAChB,IAAI,QAAQ,SAAS,KAAK,GACxB,OAAO,QAAQ,QAAQ,MAAM,OAAO,GAAG,MAAM;GAE/C,IAAI,QAAQ,SAAS,MAAM,GACzB,OAAO,QAAQ,QAAQ,MAAM,SAAS,GAAG,OAAO;GAElD,OAAO,QAAQ,QAAQ,MAAM,WAAW,GAAG,QAAQ;EACrD,CAAC;EAEH,IAEE,gBAAgB,eAAe,aAAa,KAE5C,eAAe,cAAc,SAAS,aAAa,GACnD;;GAGA,IAAI,CAAC,eAAe,cAAc,SAAS,QAAQ,GAEjD,eAAe,cAAc,KAAK,QAAQ;GAG5C,eAAe,gBAAgB,eAAe,cAAc,QAEzD,YAAY,YAAY,aAC3B;EACF;EAEA,IAAI,iBAAiB,eAAe,cAAc,GAChD,eAAe,SAAS,iBACtB,aAAa,eAAe,MAAM,GAElC,eAAe,cACjB;EAGF,OAAO,eAAe;EACtB,MAAM,aAAa,CAAC,OAAO,QAAQ,cAAc;EACjD,IAAI,YAEF,OAAO;GACL;GACA,gBAAgB,cAAc,cAAc,CAAC,CAAC;EAChD;EAEF,OAAO;GAAE;GAAY;EAAe;CACtC,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAQ;EAAI,GAAG,uBAAuB;EACrD,MAAM;CACR;AACF"}
|
|
1
|
+
{"version":3,"file":"migration.js","names":[],"sources":["../../lib/config/migration.ts"],"sourcesContent":["import {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger/index.ts';\nimport { clone } from '../util/clone.ts';\nimport { coerceObject } from '../util/object.ts';\nimport { regEx } from '../util/regex.ts';\nimport { MigrationsService } from './migrations/index.ts';\nimport { getOptions } from './options/index.ts';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types.ts';\nimport { mergeChildConfig } from './utils.ts';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(\n regEx(/(?<hours> \\d?\\d)(?<meridiem>(?:a|p)m)/g),\n '$<hours>:00$<meridiem>',\n );\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(regEx(/\\.in$/), '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(regEx(/\\.in\\/$/), '.txt/');\n }\n return pattern.replace(regEx(/\\.in\\$\\/$/), '.txt$/');\n });\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig.matchManagers) &&\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.includes('gradle-lite')\n ) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n coerceObject(migratedConfig.gradle),\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@ import { AbstractMigration } from "../base/abstract-migration.js";
|
|
|
3
3
|
import { isArray, isString } from "@sindresorhus/is";
|
|
4
4
|
import later from "@breejs/later";
|
|
5
5
|
//#region lib/config/migrations/custom/schedule-migration.ts
|
|
6
|
-
const shortHoursRegex = regEx(/( \d?\d)((a|p)m)/g);
|
|
7
|
-
const afterBeforeRegex = regEx(/^(
|
|
8
|
-
const dayRegex1 = regEx(/every (mon|tues|wednes|thurs|fri|satur|sun)day$/);
|
|
9
|
-
const dayRegex2 = regEx(/every ([a-z]*day)$/);
|
|
6
|
+
const shortHoursRegex = regEx(/(?<hours> \d?\d)(?<meridiem>(?:a|p)m)/g);
|
|
7
|
+
const afterBeforeRegex = regEx(/^(?<pre>.*?)(?<afterBefore1>after|before) (?<mid1>.*?) and (?<afterBefore2>after|before) (?<mid2>.*?)(?: |$)(?<rest>.*)/);
|
|
8
|
+
const dayRegex1 = regEx(/every (?:mon|tues|wednes|thurs|fri|satur|sun)day$/);
|
|
9
|
+
const dayRegex2 = regEx(/every (?<day>[a-z]*day)$/);
|
|
10
10
|
var ScheduleMigration = class extends AbstractMigration {
|
|
11
11
|
propertyName = "schedule";
|
|
12
12
|
run(value) {
|
|
@@ -16,19 +16,19 @@ var ScheduleMigration = class extends AbstractMigration {
|
|
|
16
16
|
if (isArray(value)) schedules = [...value];
|
|
17
17
|
const schedulesLength = schedules.length;
|
|
18
18
|
for (let i = 0; i < schedulesLength; i += 1) if (schedules[i].includes(" and ") && schedules[i].includes("before ") && schedules[i].includes("after ")) {
|
|
19
|
-
const parsedSchedule = later.parse.text(schedules[i].replace(shortHoursRegex, "
|
|
19
|
+
const parsedSchedule = later.parse.text(schedules[i].replace(shortHoursRegex, "$<hours>:00$<meridiem>")).schedules[0];
|
|
20
20
|
if (!parsedSchedule?.t_a || !parsedSchedule.t_b) continue;
|
|
21
21
|
if (parsedSchedule.t_a[0] > parsedSchedule.t_b[0]) {
|
|
22
22
|
const toSplit = schedules[i];
|
|
23
|
-
schedules[i] = toSplit.replace(afterBeforeRegex, "
|
|
24
|
-
schedules.push(toSplit.replace(afterBeforeRegex, "
|
|
23
|
+
schedules[i] = toSplit.replace(afterBeforeRegex, "$<pre>$<afterBefore1> $<mid1> $<rest>").trim();
|
|
24
|
+
schedules.push(toSplit.replace(afterBeforeRegex, "$<pre>$<afterBefore2> $<mid2> $<rest>").trim());
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
for (let i = 0; i < schedules.length; i += 1) {
|
|
28
28
|
if (schedules[i].includes("on the last day of the month")) schedules[i] = schedules[i].replace("on the last day of the month", "on the first day of the month");
|
|
29
29
|
if (schedules[i].includes("on every weekday")) schedules[i] = schedules[i].replace("on every weekday", "every weekday");
|
|
30
30
|
if (schedules[i].endsWith(" every day")) schedules[i] = schedules[i].replace(" every day", "");
|
|
31
|
-
if (dayRegex1.test(schedules[i])) schedules[i] = schedules[i].replace(dayRegex2, "on
|
|
31
|
+
if (dayRegex1.test(schedules[i])) schedules[i] = schedules[i].replace(dayRegex2, "on $<day>");
|
|
32
32
|
if (schedules[i].endsWith("days")) schedules[i] = schedules[i].replace("days", "day");
|
|
33
33
|
}
|
|
34
34
|
if (isString(value) && schedules.length === 1) this.rewrite(schedules[0]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-migration.js","names":[],"sources":["../../../../lib/config/migrations/custom/schedule-migration.ts"],"sourcesContent":["import later from '@breejs/later';\nimport { isArray, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { AbstractMigration } from '../base/abstract-migration.ts';\n\nconst shortHoursRegex = regEx(/( \\d?\\d)((a|p)m)/g);\nconst afterBeforeRegex = regEx(\n /^(
|
|
1
|
+
{"version":3,"file":"schedule-migration.js","names":[],"sources":["../../../../lib/config/migrations/custom/schedule-migration.ts"],"sourcesContent":["import later from '@breejs/later';\nimport { isArray, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { AbstractMigration } from '../base/abstract-migration.ts';\n\nconst shortHoursRegex = regEx(/(?<hours> \\d?\\d)(?<meridiem>(?:a|p)m)/g);\nconst afterBeforeRegex = regEx(\n /^(?<pre>.*?)(?<afterBefore1>after|before) (?<mid1>.*?) and (?<afterBefore2>after|before) (?<mid2>.*?)(?: |$)(?<rest>.*)/,\n);\nconst dayRegex1 = regEx(/every (?:mon|tues|wednes|thurs|fri|satur|sun)day$/);\nconst dayRegex2 = regEx(/every (?<day>[a-z]*day)$/);\nexport class ScheduleMigration extends AbstractMigration {\n override readonly propertyName = 'schedule';\n\n override run(value: unknown): void {\n if (value) {\n // massage to array first\n let schedules: string[] = [];\n if (isString(value)) {\n schedules = [value];\n }\n if (isArray<string>(value)) {\n schedules = [...value];\n }\n // split 'and'\n const schedulesLength = schedules.length;\n for (let i = 0; i < schedulesLength; i += 1) {\n if (\n schedules[i].includes(' and ') &&\n schedules[i].includes('before ') &&\n schedules[i].includes('after ')\n ) {\n const parsedSchedule = later.parse.text(\n // We need to massage short hours first before we can parse it\n schedules[i].replace(shortHoursRegex, '$<hours>:00$<meridiem>'),\n ).schedules[0];\n // Only migrate if the after time is greater than before, e.g. \"after 10pm and before 5am\"\n if (!parsedSchedule?.t_a || !parsedSchedule.t_b) {\n continue;\n }\n\n if (parsedSchedule.t_a[0] > parsedSchedule.t_b[0]) {\n const toSplit = schedules[i];\n schedules[i] = toSplit\n .replace(\n afterBeforeRegex,\n '$<pre>$<afterBefore1> $<mid1> $<rest>',\n )\n .trim();\n schedules.push(\n toSplit\n .replace(\n afterBeforeRegex,\n '$<pre>$<afterBefore2> $<mid2> $<rest>',\n )\n .trim(),\n );\n }\n }\n }\n for (let i = 0; i < schedules.length; i += 1) {\n if (schedules[i].includes('on the last day of the month')) {\n schedules[i] = schedules[i].replace(\n 'on the last day of the month',\n 'on the first day of the month',\n );\n }\n if (schedules[i].includes('on every weekday')) {\n schedules[i] = schedules[i].replace(\n 'on every weekday',\n 'every weekday',\n );\n }\n if (schedules[i].endsWith(' every day')) {\n schedules[i] = schedules[i].replace(' every day', '');\n }\n if (dayRegex1.test(schedules[i])) {\n schedules[i] = schedules[i].replace(dayRegex2, 'on $<day>');\n }\n if (schedules[i].endsWith('days')) {\n schedules[i] = schedules[i].replace('days', 'day');\n }\n }\n if (isString(value) && schedules.length === 1) {\n this.rewrite(schedules[0]);\n } else {\n this.rewrite(schedules);\n }\n }\n }\n}\n"],"mappings":";;;;;AAKA,MAAM,kBAAkB,MAAM,wCAAwC;AACtE,MAAM,mBAAmB,MACvB,yHACF;AACA,MAAM,YAAY,MAAM,mDAAmD;AAC3E,MAAM,YAAY,MAAM,0BAA0B;AAClD,IAAa,oBAAb,cAAuC,kBAAkB;CACvD,eAAiC;CAEjC,IAAa,OAAsB;EACjC,IAAI,OAAO;GAET,IAAI,YAAsB,CAAC;GAC3B,IAAI,SAAS,KAAK,GAChB,YAAY,CAAC,KAAK;GAEpB,IAAI,QAAgB,KAAK,GACvB,YAAY,CAAC,GAAG,KAAK;GAGvB,MAAM,kBAAkB,UAAU;GAClC,KAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,KAAK,GACxC,IACE,UAAU,EAAE,CAAC,SAAS,OAAO,KAC7B,UAAU,EAAE,CAAC,SAAS,SAAS,KAC/B,UAAU,EAAE,CAAC,SAAS,QAAQ,GAC9B;IACA,MAAM,iBAAiB,MAAM,MAAM,KAEjC,UAAU,EAAE,CAAC,QAAQ,iBAAiB,wBAAwB,CAChE,CAAC,CAAC,UAAU;IAEZ,IAAI,CAAC,gBAAgB,OAAO,CAAC,eAAe,KAC1C;IAGF,IAAI,eAAe,IAAI,KAAK,eAAe,IAAI,IAAI;KACjD,MAAM,UAAU,UAAU;KAC1B,UAAU,KAAK,QACZ,QACC,kBACA,uCACF,CAAC,CACA,KAAK;KACR,UAAU,KACR,QACG,QACC,kBACA,uCACF,CAAC,CACA,KAAK,CACV;IACF;GACF;GAEF,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;IAC5C,IAAI,UAAU,EAAE,CAAC,SAAS,8BAA8B,GACtD,UAAU,KAAK,UAAU,EAAE,CAAC,QAC1B,gCACA,+BACF;IAEF,IAAI,UAAU,EAAE,CAAC,SAAS,kBAAkB,GAC1C,UAAU,KAAK,UAAU,EAAE,CAAC,QAC1B,oBACA,eACF;IAEF,IAAI,UAAU,EAAE,CAAC,SAAS,YAAY,GACpC,UAAU,KAAK,UAAU,EAAE,CAAC,QAAQ,cAAc,EAAE;IAEtD,IAAI,UAAU,KAAK,UAAU,EAAE,GAC7B,UAAU,KAAK,UAAU,EAAE,CAAC,QAAQ,WAAW,WAAW;IAE5D,IAAI,UAAU,EAAE,CAAC,SAAS,MAAM,GAC9B,UAAU,KAAK,UAAU,EAAE,CAAC,QAAQ,QAAQ,KAAK;GAErD;GACA,IAAI,SAAS,KAAK,KAAK,UAAU,WAAW,GAC1C,KAAK,QAAQ,UAAU,EAAE;QAEzB,KAAK,QAAQ,SAAS;EAE1B;CACF;AACF"}
|
|
@@ -3,7 +3,7 @@ import { regEx } from "../../util/regex.js";
|
|
|
3
3
|
function getEnvName(option) {
|
|
4
4
|
if (option.env === false) return "";
|
|
5
5
|
if (option.env) return option.env;
|
|
6
|
-
return `RENOVATE_${option.name.replace(regEx(/([A-Z])/g), "_
|
|
6
|
+
return `RENOVATE_${option.name.replace(regEx(/(?<upper>[A-Z])/g), "_$<upper>").toUpperCase()}`;
|
|
7
7
|
}
|
|
8
8
|
//#endregion
|
|
9
9
|
export { getEnvName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","names":[],"sources":["../../../lib/config/options/env.ts"],"sourcesContent":["import { regEx } from '../../util/regex.ts';\nimport type { RenovateOptions } from '../types.ts';\n\ntype EnvNameOption = Partial<RenovateOptions> & Pick<RenovateOptions, 'name'>;\n\nexport function getEnvName(option: EnvNameOption): string {\n if (option.env === false) {\n return '';\n }\n if (option.env) {\n return option.env;\n }\n const nameWithUnderscores = option.name.replace(regEx(/([A-Z])/g)
|
|
1
|
+
{"version":3,"file":"env.js","names":[],"sources":["../../../lib/config/options/env.ts"],"sourcesContent":["import { regEx } from '../../util/regex.ts';\nimport type { RenovateOptions } from '../types.ts';\n\ntype EnvNameOption = Partial<RenovateOptions> & Pick<RenovateOptions, 'name'>;\n\nexport function getEnvName(option: EnvNameOption): string {\n if (option.env === false) {\n return '';\n }\n if (option.env) {\n return option.env;\n }\n const nameWithUnderscores = option.name.replace(\n regEx(/(?<upper>[A-Z])/g),\n '_$<upper>',\n );\n return `RENOVATE_${nameWithUnderscores.toUpperCase()}`;\n}\n"],"mappings":";;AAKA,SAAgB,WAAW,QAA+B;CACxD,IAAI,OAAO,QAAQ,OACjB,OAAO;CAET,IAAI,OAAO,KACT,OAAO,OAAO;CAMhB,OAAO,YAJqB,OAAO,KAAK,QACtC,MAAM,kBAAkB,GACxB,WAEmC,CAAC,CAAC,YAAY;AACrD"}
|
package/dist/config/parse.js
CHANGED
|
@@ -24,7 +24,7 @@ function parseFileConfig(fileName, fileContents) {
|
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
const jsonString = stripJsonComments(fileContents).replace(regEx(/,(
|
|
27
|
+
const jsonString = stripJsonComments(fileContents).replace(regEx(/,(?<trailing>\s*[}\]])/g), "$<trailing>");
|
|
28
28
|
let allowDuplicateKeys = true;
|
|
29
29
|
let jsonValidationError = jsonValidator.validate(jsonString, allowDuplicateKeys);
|
|
30
30
|
if (jsonValidationError) return {
|
package/dist/config/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","names":[],"sources":["../../lib/config/parse.ts"],"sourcesContent":["import jsonValidator from 'json-dup-key-validator';\nimport JSON5 from 'json5';\nimport stripJsonComments from 'strip-json-comments';\nimport upath from 'upath';\nimport { logger } from '../logger/index.ts';\nimport { parseJson } from '../util/common.ts';\nimport { regEx } from '../util/regex.ts';\n\nexport function parseFileConfig(\n fileName: string,\n fileContents: string,\n):\n | { success: true; parsedContents: unknown }\n | { success: false; validationError: string; validationMessage: string } {\n const fileType = upath.extname(fileName);\n\n if (fileType === '.json5') {\n try {\n return { success: true, parsedContents: JSON5.parse(fileContents) };\n } catch (err) {\n logger.debug({ fileName, fileContents }, 'Error parsing JSON5 file');\n const validationError = 'Invalid JSON5 (parsing failed)';\n const validationMessage = `JSON5.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n } else {\n // `json-dup-key-validator` is strict and rejects trailing commas, so we\n // strip them before validation. The actual parsing is handled by a lenient\n // JSONC parser which tolerates trailing commas.\n const jsonString = stripJsonComments(fileContents).replace(\n regEx(/,(
|
|
1
|
+
{"version":3,"file":"parse.js","names":[],"sources":["../../lib/config/parse.ts"],"sourcesContent":["import jsonValidator from 'json-dup-key-validator';\nimport JSON5 from 'json5';\nimport stripJsonComments from 'strip-json-comments';\nimport upath from 'upath';\nimport { logger } from '../logger/index.ts';\nimport { parseJson } from '../util/common.ts';\nimport { regEx } from '../util/regex.ts';\n\nexport function parseFileConfig(\n fileName: string,\n fileContents: string,\n):\n | { success: true; parsedContents: unknown }\n | { success: false; validationError: string; validationMessage: string } {\n const fileType = upath.extname(fileName);\n\n if (fileType === '.json5') {\n try {\n return { success: true, parsedContents: JSON5.parse(fileContents) };\n } catch (err) {\n logger.debug({ fileName, fileContents }, 'Error parsing JSON5 file');\n const validationError = 'Invalid JSON5 (parsing failed)';\n const validationMessage = `JSON5.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n } else {\n // `json-dup-key-validator` is strict and rejects trailing commas, so we\n // strip them before validation. The actual parsing is handled by a lenient\n // JSONC parser which tolerates trailing commas.\n const jsonString = stripJsonComments(fileContents).replace(\n regEx(/,(?<trailing>\\s*[}\\]])/g),\n '$<trailing>',\n );\n let allowDuplicateKeys = true;\n let jsonValidationError = jsonValidator.validate(\n jsonString,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = jsonValidationError;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n allowDuplicateKeys = false;\n jsonValidationError = jsonValidator.validate(\n jsonString,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Duplicate keys in JSON';\n const validationMessage = JSON.stringify(jsonValidationError);\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n try {\n return {\n success: true,\n parsedContents: parseJson(fileContents, fileName),\n };\n } catch (err) {\n logger.debug({ fileContents }, 'Error parsing renovate config');\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = `JSON.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return { success: false, validationError, validationMessage };\n }\n }\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,gBACd,UACA,cAGyE;CAGzE,IAFiB,MAAM,QAAQ,QAEpB,MAAM,UACf,IAAI;EACF,OAAO;GAAE,SAAS;GAAM,gBAAgB,MAAM,MAAM,YAAY;EAAE;CACpE,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAU;EAAa,GAAG,0BAA0B;EAMnE,OAAO;GACL,SAAS;GACT,iBAAA;GACA,mBAAA,wBAPgD,IAAI,QAAQ,WAC5D,KACA,GACF,EAAE;EAKF;CACF;MACK;EAIL,MAAM,aAAa,kBAAkB,YAAY,CAAC,CAAC,QACjD,MAAM,yBAAyB,GAC/B,aACF;EACA,IAAI,qBAAqB;EACzB,IAAI,sBAAsB,cAAc,SACtC,YACA,kBACF;EACA,IAAI,qBAGF,OAAO;GACL,SAAS;GACT,iBAAA;GACA,mBAAA;EACF;EAEF,qBAAqB;EACrB,sBAAsB,cAAc,SAClC,YACA,kBACF;EACA,IAAI,qBAGF,OAAO;GACL,SAAS;GACT,iBAAA;GACA,mBAJwB,KAAK,UAAU,mBAIvB;EAClB;EAEF,IAAI;GACF,OAAO;IACL,SAAS;IACT,gBAAgB,UAAU,cAAc,QAAQ;GAClD;EACF,SAAS,KAAK;GACZ,OAAO,MAAM,EAAE,aAAa,GAAG,+BAA+B;GAM9D,OAAO;IAAE,SAAS;IAAO,iBAAA;IAAiB,mBAAA,wBAJQ,IAAI,QAAQ,WAC5D,KACA,GACF,EAAE;GAC0D;EAC9D;CACF;AACF"}
|
|
@@ -129,7 +129,7 @@ function parsePreset(input) {
|
|
|
129
129
|
repo = "default";
|
|
130
130
|
presetName = str.slice(1);
|
|
131
131
|
} else if (str.startsWith("@")) {
|
|
132
|
-
|
|
132
|
+
repo = regEx(/(?<scope>@.*?)(?::|$)/).exec(str).groups.scope;
|
|
133
133
|
str = str.slice(repo.length);
|
|
134
134
|
if (!repo.includes("/")) repo += "/renovate-config";
|
|
135
135
|
if (str === "") presetName = "default";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","names":[],"sources":["../../../lib/config/presets/parse.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { regEx } from '../../util/regex.ts';\nimport { isHttpUrl } from '../../util/url.ts';\nimport type { ParsedPreset } from './types.ts';\nimport { PRESET_INVALID, PRESET_PROHIBITED_SUBPRESET } from './util.ts';\n\nconst nonScopedPresetWithSubdirRegex = regEx(\n /^(?<repo>~?[\\w\\-. /%]+?)\\/\\/(?:(?<presetPath>[\\w\\-./]+)\\/)?(?<presetName>[\\w\\-.]+)(?:#(?<tag>[\\w\\-./]+?))?$/,\n);\nconst gitPresetRegex = regEx(\n /^(?<repo>~?[\\w\\-. /%]+)(?::(?<presetName>[\\w\\-.+/]+))?(?:#(?<tag>[\\w\\-./]+?))?$/,\n);\nconst relativePresetRegex = regEx(\n /^(?:\\/|(?:\\.\\.?\\/)+)[\\w\\-.]+(?:\\/[\\w\\-.]+)*$/,\n);\n\n/**\n * Returns true if the given `extends` entry is a relative preset reference,\n * e.g. `./foo`, `../foo` or `/foo`.\n */\nexport function isRelativePresetReference(input: string): boolean {\n return (\n input.startsWith('./') || input.startsWith('../') || input.startsWith('/')\n );\n}\n\n/**\n * Splits the trailing `(...)` parameter list off the given preset reference.\n *\n * The parameters are opaque, so they may contain any character and are split\n * off before the reference itself is validated.\n */\nfunction splitPresetParams(input: string): {\n str: string;\n params: string[] | undefined;\n rawParams: string | undefined;\n} {\n if (!input.includes('(')) {\n return { str: input, params: undefined, rawParams: undefined };\n }\n\n const rawParams = input.slice(input.indexOf('(') + 1, -1);\n return {\n str: input.slice(0, input.indexOf('(')),\n params: rawParams.split(',').map((elem) => elem.trim()),\n rawParams,\n };\n}\n\n/**\n * Returns true if every parenthesis in the given preset parameters is closed in\n * order, which allows Handlebars sub-expressions like `{{ lower (env.TEAM) }}`\n * while still rejecting malformed parameter lists.\n */\nfunction hasBalancedParens(rawParams: string): boolean {\n let depth = 0;\n for (const char of rawParams) {\n if (char === '(') {\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth < 0) {\n return false;\n }\n }\n }\n return depth === 0;\n}\n\nexport function parsePreset(input: string): ParsedPreset {\n let str = input;\n let presetSource: string | undefined;\n let presetPath: string | undefined;\n let repo: string;\n let presetName: string;\n let tag: string | undefined;\n let rawParams: string | undefined;\n let params: string[] | undefined;\n if (str.startsWith('github>')) {\n presetSource = 'github';\n str = str.substring('github>'.length);\n } else if (str.startsWith('gitlab>')) {\n presetSource = 'gitlab';\n str = str.substring('gitlab>'.length);\n } else if (str.startsWith('gitea>')) {\n presetSource = 'gitea';\n str = str.substring('gitea>'.length);\n } else if (str.startsWith('forgejo>')) {\n presetSource = 'forgejo';\n str = str.substring('forgejo>'.length);\n } else if (str.startsWith('local>')) {\n presetSource = 'local';\n str = str.substring('local>'.length);\n } else if (str.startsWith('npm>@')) {\n // only scoped packages are unambiguous, all other `npm>` references are\n // handled by the legacy strip below to stay backwards compatible\n presetSource = 'npm';\n str = str.substring('npm>'.length);\n } else if (isRelativePresetReference(str)) {\n presetSource = 'relative';\n } else if (isHttpUrl(str)) {\n presetSource = 'http';\n } else if (\n !str.startsWith('@') &&\n !str.startsWith(':') &&\n str.includes('/')\n ) {\n presetSource = 'local';\n }\n str = str.replace(regEx(/^npm>/), '');\n if (\n presetSource &&\n presetSource !== 'relative' &&\n isRelativePresetReference(str)\n ) {\n // relative references must not carry a source prefix, because they always\n // inherit the source of the preset which references them\n throw new Error(PRESET_INVALID);\n }\n presetSource = presetSource ?? 'npm';\n if (presetSource === 'relative') {\n if (str.includes('(') && !str.endsWith(')')) {\n throw new Error(PRESET_INVALID);\n }\n ({ str, params, rawParams } = splitPresetParams(str));\n if (isString(rawParams) && !hasBalancedParens(rawParams)) {\n throw new Error(PRESET_INVALID);\n }\n if (!relativePresetRegex.test(str)) {\n throw new Error(PRESET_INVALID);\n }\n const finalSegment = str.split('/').pop();\n if (finalSegment === '.' || finalSegment === '..') {\n // references like `./.`, `./..` or `../a/..` name a directory instead of\n // a preset file\n throw new Error(PRESET_INVALID);\n }\n return { presetSource, repo: '', presetName: str, params, rawParams };\n }\n ({ str, params, rawParams } = splitPresetParams(str));\n if (presetSource === 'http') {\n return { presetSource, repo: str, presetName: '', params, rawParams };\n }\n const presetsPackages = [\n 'abandonments',\n 'compatibility',\n 'config',\n 'customManagers',\n 'default',\n 'docker',\n 'global',\n 'group',\n 'helpers',\n 'mergeConfidence',\n 'monorepo',\n 'npm',\n 'packages',\n 'preview',\n 'replacements',\n 'schedule',\n 'security',\n 'workarounds',\n ];\n if (\n presetsPackages.some((presetPackage) => str.startsWith(`${presetPackage}:`))\n ) {\n presetSource = 'internal';\n [repo, presetName] = str.split(':');\n } else if (str.startsWith(':')) {\n // default namespace\n presetSource = 'internal';\n repo = 'default';\n presetName = str.slice(1);\n } else if (str.startsWith('@')) {\n // scoped namespace\n
|
|
1
|
+
{"version":3,"file":"parse.js","names":[],"sources":["../../../lib/config/presets/parse.ts"],"sourcesContent":["import { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { regEx } from '../../util/regex.ts';\nimport { isHttpUrl } from '../../util/url.ts';\nimport type { ParsedPreset } from './types.ts';\nimport { PRESET_INVALID, PRESET_PROHIBITED_SUBPRESET } from './util.ts';\n\nconst nonScopedPresetWithSubdirRegex = regEx(\n /^(?<repo>~?[\\w\\-. /%]+?)\\/\\/(?:(?<presetPath>[\\w\\-./]+)\\/)?(?<presetName>[\\w\\-.]+)(?:#(?<tag>[\\w\\-./]+?))?$/,\n);\nconst gitPresetRegex = regEx(\n /^(?<repo>~?[\\w\\-. /%]+)(?::(?<presetName>[\\w\\-.+/]+))?(?:#(?<tag>[\\w\\-./]+?))?$/,\n);\nconst relativePresetRegex = regEx(\n /^(?:\\/|(?:\\.\\.?\\/)+)[\\w\\-.]+(?:\\/[\\w\\-.]+)*$/,\n);\n\n/**\n * Returns true if the given `extends` entry is a relative preset reference,\n * e.g. `./foo`, `../foo` or `/foo`.\n */\nexport function isRelativePresetReference(input: string): boolean {\n return (\n input.startsWith('./') || input.startsWith('../') || input.startsWith('/')\n );\n}\n\n/**\n * Splits the trailing `(...)` parameter list off the given preset reference.\n *\n * The parameters are opaque, so they may contain any character and are split\n * off before the reference itself is validated.\n */\nfunction splitPresetParams(input: string): {\n str: string;\n params: string[] | undefined;\n rawParams: string | undefined;\n} {\n if (!input.includes('(')) {\n return { str: input, params: undefined, rawParams: undefined };\n }\n\n const rawParams = input.slice(input.indexOf('(') + 1, -1);\n return {\n str: input.slice(0, input.indexOf('(')),\n params: rawParams.split(',').map((elem) => elem.trim()),\n rawParams,\n };\n}\n\n/**\n * Returns true if every parenthesis in the given preset parameters is closed in\n * order, which allows Handlebars sub-expressions like `{{ lower (env.TEAM) }}`\n * while still rejecting malformed parameter lists.\n */\nfunction hasBalancedParens(rawParams: string): boolean {\n let depth = 0;\n for (const char of rawParams) {\n if (char === '(') {\n depth += 1;\n } else if (char === ')') {\n depth -= 1;\n if (depth < 0) {\n return false;\n }\n }\n }\n return depth === 0;\n}\n\nexport function parsePreset(input: string): ParsedPreset {\n let str = input;\n let presetSource: string | undefined;\n let presetPath: string | undefined;\n let repo: string;\n let presetName: string;\n let tag: string | undefined;\n let rawParams: string | undefined;\n let params: string[] | undefined;\n if (str.startsWith('github>')) {\n presetSource = 'github';\n str = str.substring('github>'.length);\n } else if (str.startsWith('gitlab>')) {\n presetSource = 'gitlab';\n str = str.substring('gitlab>'.length);\n } else if (str.startsWith('gitea>')) {\n presetSource = 'gitea';\n str = str.substring('gitea>'.length);\n } else if (str.startsWith('forgejo>')) {\n presetSource = 'forgejo';\n str = str.substring('forgejo>'.length);\n } else if (str.startsWith('local>')) {\n presetSource = 'local';\n str = str.substring('local>'.length);\n } else if (str.startsWith('npm>@')) {\n // only scoped packages are unambiguous, all other `npm>` references are\n // handled by the legacy strip below to stay backwards compatible\n presetSource = 'npm';\n str = str.substring('npm>'.length);\n } else if (isRelativePresetReference(str)) {\n presetSource = 'relative';\n } else if (isHttpUrl(str)) {\n presetSource = 'http';\n } else if (\n !str.startsWith('@') &&\n !str.startsWith(':') &&\n str.includes('/')\n ) {\n presetSource = 'local';\n }\n str = str.replace(regEx(/^npm>/), '');\n if (\n presetSource &&\n presetSource !== 'relative' &&\n isRelativePresetReference(str)\n ) {\n // relative references must not carry a source prefix, because they always\n // inherit the source of the preset which references them\n throw new Error(PRESET_INVALID);\n }\n presetSource = presetSource ?? 'npm';\n if (presetSource === 'relative') {\n if (str.includes('(') && !str.endsWith(')')) {\n throw new Error(PRESET_INVALID);\n }\n ({ str, params, rawParams } = splitPresetParams(str));\n if (isString(rawParams) && !hasBalancedParens(rawParams)) {\n throw new Error(PRESET_INVALID);\n }\n if (!relativePresetRegex.test(str)) {\n throw new Error(PRESET_INVALID);\n }\n const finalSegment = str.split('/').pop();\n if (finalSegment === '.' || finalSegment === '..') {\n // references like `./.`, `./..` or `../a/..` name a directory instead of\n // a preset file\n throw new Error(PRESET_INVALID);\n }\n return { presetSource, repo: '', presetName: str, params, rawParams };\n }\n ({ str, params, rawParams } = splitPresetParams(str));\n if (presetSource === 'http') {\n return { presetSource, repo: str, presetName: '', params, rawParams };\n }\n const presetsPackages = [\n 'abandonments',\n 'compatibility',\n 'config',\n 'customManagers',\n 'default',\n 'docker',\n 'global',\n 'group',\n 'helpers',\n 'mergeConfidence',\n 'monorepo',\n 'npm',\n 'packages',\n 'preview',\n 'replacements',\n 'schedule',\n 'security',\n 'workarounds',\n ];\n if (\n presetsPackages.some((presetPackage) => str.startsWith(`${presetPackage}:`))\n ) {\n presetSource = 'internal';\n [repo, presetName] = str.split(':');\n } else if (str.startsWith(':')) {\n // default namespace\n presetSource = 'internal';\n repo = 'default';\n presetName = str.slice(1);\n } else if (str.startsWith('@')) {\n // scoped namespace\n repo = regEx(/(?<scope>@.*?)(?::|$)/).exec(str)!.groups!.scope;\n str = str.slice(repo.length);\n if (!repo.includes('/')) {\n repo += '/renovate-config';\n }\n if (str === '') {\n presetName = 'default';\n } else {\n presetName = str.slice(1);\n }\n } else if (str.includes('//')) {\n // non-scoped namespace with a subdirectory preset\n\n // Validation\n if (str.includes(':')) {\n throw new Error(PRESET_PROHIBITED_SUBPRESET);\n }\n if (!nonScopedPresetWithSubdirRegex.test(str)) {\n throw new Error(PRESET_INVALID);\n }\n ({ repo, presetPath, presetName, tag } =\n nonScopedPresetWithSubdirRegex.exec(str)!.groups!);\n } else {\n ({ repo, presetName, tag } = gitPresetRegex.exec(str)!.groups!);\n\n if (presetSource === 'npm' && !repo.startsWith('renovate-config-')) {\n repo = `renovate-config-${repo}`;\n }\n if (!isNonEmptyString(presetName)) {\n presetName = 'default';\n }\n }\n\n return {\n presetSource,\n presetPath,\n repo,\n presetName,\n tag,\n params,\n rawParams,\n };\n}\n"],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ const ignoredNodes = [
|
|
|
57
57
|
"prBody",
|
|
58
58
|
"minimumConfidence"
|
|
59
59
|
];
|
|
60
|
-
const tzRe = regEx(/^:timezone\((
|
|
60
|
+
const tzRe = regEx(/^:timezone\((?<timezone>.+)\)$/);
|
|
61
61
|
const rulesRe = regEx(/p.*Rules\[\d+\]$/);
|
|
62
62
|
const repoEntryRe = regEx(/^repositories\[\d+\]$/);
|
|
63
63
|
function isIgnored(key) {
|