UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

102 lines (101 loc) 3.11 kB
import { regEx } from "../../util/regex.js"; import { isHttpUrl } from "../../util/url.js"; import { PRESET_INVALID, PRESET_PROHIBITED_SUBPRESET } from "./util.js"; import { isNonEmptyString } from "@sindresorhus/is"; //#region lib/config/presets/parse.ts const nonScopedPresetWithSubdirRegex = regEx(/^(?<repo>~?[\w\-. /%]+?)\/\/(?:(?<presetPath>[\w\-./]+)\/)?(?<presetName>[\w\-.]+)(?:#(?<tag>[\w\-./]+?))?$/); const gitPresetRegex = regEx(/^(?<repo>~?[\w\-. /%]+)(?::(?<presetName>[\w\-.+/]+))?(?:#(?<tag>[\w\-./]+?))?$/); function parsePreset(input) { let str = input; let presetSource; let presetPath; let repo; let presetName; let tag; let rawParams; let params; if (str.startsWith("github>")) { presetSource = "github"; str = str.substring(7); } else if (str.startsWith("gitlab>")) { presetSource = "gitlab"; str = str.substring(7); } else if (str.startsWith("gitea>")) { presetSource = "gitea"; str = str.substring(6); } else if (str.startsWith("forgejo>")) { presetSource = "forgejo"; str = str.substring(8); } else if (str.startsWith("local>")) { presetSource = "local"; str = str.substring(6); } else if (isHttpUrl(str)) presetSource = "http"; else if (!str.startsWith("@") && !str.startsWith(":") && str.includes("/")) presetSource = "local"; str = str.replace(regEx(/^npm>/), ""); presetSource = presetSource ?? "npm"; if (str.includes("(")) { rawParams = str.slice(str.indexOf("(") + 1, -1); params = rawParams.split(",").map((elem) => elem.trim()); str = str.slice(0, str.indexOf("(")); } if (presetSource === "http") return { presetSource, repo: str, presetName: "", params, rawParams }; if ([ "abandonments", "compatibility", "config", "customManagers", "default", "docker", "global", "group", "helpers", "mergeConfidence", "monorepo", "npm", "packages", "preview", "replacements", "schedule", "security", "workarounds" ].some((presetPackage) => str.startsWith(`${presetPackage}:`))) { presetSource = "internal"; [repo, presetName] = str.split(":"); } else if (str.startsWith(":")) { presetSource = "internal"; repo = "default"; presetName = str.slice(1); } else if (str.startsWith("@")) { [, repo] = regEx(/(@.*?)(:|$)/).exec(str); str = str.slice(repo.length); if (!repo.includes("/")) repo += "/renovate-config"; if (str === "") presetName = "default"; else presetName = str.slice(1); } else if (str.includes("//")) { if (str.includes(":")) throw new Error(PRESET_PROHIBITED_SUBPRESET); if (!nonScopedPresetWithSubdirRegex.test(str)) throw new Error(PRESET_INVALID); ({repo, presetPath, presetName, tag} = nonScopedPresetWithSubdirRegex.exec(str).groups); } else { ({repo, presetName, tag} = gitPresetRegex.exec(str).groups); if (presetSource === "npm" && !repo.startsWith("renovate-config-")) repo = `renovate-config-${repo}`; if (!isNonEmptyString(presetName)) presetName = "default"; } return { presetSource, presetPath, repo, presetName, tag, params, rawParams }; } //#endregion export { parsePreset }; //# sourceMappingURL=parse.js.map