renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
102 lines (101 loc) • 3.11 kB
JavaScript
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