Skip to content

Commit

Permalink
refactor: Use regex named groups
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Nov 16, 2023
1 parent e266ed2 commit c49f398
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 24 deletions.
5 changes: 3 additions & 2 deletions lib/private/get-metadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const memoizee = require("memoizee")
, npmconf = require("npm/lib/config/core")
, cache = require("./cache");

const scopedNameRe = /^@([^/]+)\/./u;
const scopedNameRe = /^@(?<org>[^/]+)\/./u;

const resolveNpmConf = memoizee(
() =>
Expand All @@ -28,7 +28,8 @@ const resolveRegistryData = async name => {
const npmConf = await resolveNpmConf();
const scopedMatch = name.match(scopedNameRe);
const url =
(scopedMatch && npmConf[`@${ scopedMatch[1] }:registry`]) || "https://registry.npmjs.org/";
(scopedMatch && npmConf[`@${ scopedMatch.groups.org }:registry`]) ||
"https://registry.npmjs.org/";
const trimmedUrl = url.slice(url.indexOf("//"));
return { url, authToken: npmConf[`${ trimmedUrl }:_authToken`] || "" };
};
Expand Down
26 changes: 18 additions & 8 deletions lib/private/resolve-updated-version-range.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
const optionalChaining = require("es5-ext/optional-chaining")
, semver = require("semver");

const versionRangeRe = /^(?:(\^|~)(\d+)(?:\.\d+(?:\.\d+)?)?|(\d+)(\.\d+)?)$/u;
const versionRangeRe = new RegExp(
"^(?:" +
"(?<prefix>\\^|~)" +
"(?<majorPrefixed>\\d+)" +
"(?:\\.\\d+(?:\\.\\d+)?)?" +
"|(?<majorNotPrefixed>\\d+)(?<minorNotPrefixed>\\.\\d+)?" +
")$",
"u"
);

module.exports = dependencyContext => {
const {
Expand All @@ -21,15 +29,15 @@ module.exports = dependencyContext => {
if (versionRange !== "latest") return versionRange;
}

const usedVersionRangePrefix = versionRangeMatch && versionRangeMatch[1];
const usedVersionRangeData = versionRangeMatch && versionRangeMatch.groups;
const targetVersionRangePrefix = (() => {
if (!versionRangeMatch) return "^";
if (usedVersionRangePrefix) {
if (versionRangeMatch[2] === "0") return "^";
return usedVersionRangePrefix;
if (usedVersionRangeData.prefix) {
if (usedVersionRangeData.majorPrefixed === "0") return "^";
return usedVersionRangeData.prefix;
}
if (versionRangeMatch[4]) {
if (versionRangeMatch[3] === "0") return "^";
if (usedVersionRangeData.minorNotPrefixed) {
if (usedVersionRangeData.majorNotPrefixed === "0") return "^";
return "~";
}
return "^";
Expand All @@ -45,7 +53,9 @@ module.exports = dependencyContext => {
return `${ targetVersionRangePrefix }${ latestSupportedPublishedVersion }`;
}
if (!versionRange || versionRange === "latest") return `^${ localVersion }`;
const coercedVersionRange = semver.coerce(versionRange.slice(usedVersionRangePrefix ? 1 : 0));
const coercedVersionRange = semver.coerce(
versionRange.slice(usedVersionRangeData && usedVersionRangeData.prefix ? 1 : 0)
);
if (localVersion && semver.gt(localVersion, coercedVersionRange)) {
return `${ targetVersionRangePrefix }${ localVersion }`;
}
Expand Down
24 changes: 16 additions & 8 deletions lib/private/setup-dependency/install-external/prepare/git.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,20 @@ const memoizee = require("memoizee")
, log = require("log").get("npm-cross-link")
, runProgram = require("../../../../run-program");

const repoDataRe = /^git\+([^#]+)(?:#(.*))?$/u
, refRe = /^refs\/(?:heads|tags)\/(.+)$/u
, githubRepoRe = /^([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)(?:#([a-z0-9]+))?$/u;
const repoDataRe = /^git\+(?<url>[^#]+)(?:#(?<target>.*))?$/u
, refRe = /^refs\/(?:heads|tags)\/(?<target>.+)$/u;

const githubRepoRe = /^(?<owner>[a-zA-Z0-9_-]+)\/(?<repo>[a-zA-Z0-9_-]+)(?:#(?<target>[a-z0-9]+))?$/u;

const resolveRemoteRefs = memoizee(
async repoUrl => {
const { stdoutBuffer } = await runProgram("git", ["ls-remote", repoUrl], {
logger: log.levelRoot.get("git:ls-remote")
});
const result = {};
for (let line of String(stdoutBuffer).trim().split(/[\n\r]+/u)) {
for (let line of String(stdoutBuffer)
.trim()
.split(/[\n\r]+/u)) {
line = line.trim();
if (!line) continue;
const [hash, ref] = line.split("\t");
Expand All @@ -27,7 +30,7 @@ const resolveRemoteRefs = memoizee(
}
const refMatch = ref.match(refRe);
if (!refMatch) continue;
result[refMatch[1]] = hash;
result[refMatch.groups.target] = hash;
}
log.info("resolved %s refs %o", repoUrl, result);
return result;
Expand All @@ -39,13 +42,18 @@ module.exports = {
isApplicable: (name, version) => {
const repoDataMatch = version.match(repoDataRe);
if (repoDataMatch) {
return { repoUrl: repoDataMatch[1], target: repoDataMatch[2] || "HEAD" };
return {
repoUrl: repoDataMatch.groups.url,
target: repoDataMatch.groups.target || "HEAD"
};
}
const githubRepoMatch = version.match(githubRepoRe);
if (githubRepoMatch) {
return {
repoUrl: `https://github.com/${ githubRepoMatch[1] }/${ githubRepoMatch[2] }.git`,
target: githubRepoMatch[3] || "HEAD"
repoUrl: `https://github.com/${ githubRepoMatch.groups.owner }/${
githubRepoMatch.groups.repo
}.git`,
target: githubRepoMatch.groups.target || "HEAD"
};
}
return null;
Expand Down
8 changes: 4 additions & 4 deletions lib/private/setup-dependency/resolve-npm-auth-token.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const memoizee = require("memoizee")
, log = require("log").get("npm-cross-link")
, readFile = require("fs2/read-file");

const scopedPackageUrlRule = /(\/@[^\\]+\/[^\\]+)$/u;
const tokenRe = /^\/\/(.+)\/:_authToken=(.+)$/u;
const scopedPackageUrlRule = /(?<packageName>\/@[^\\]+\/[^\\]+)$/u;
const tokenRe = /^\/\/(?<registryName>.+)\/:_authToken=(?<authToken>.+)$/u;

const resolveRepoTokens = memoizee(
async () => {
Expand All @@ -23,7 +23,7 @@ const resolveRepoTokens = memoizee(
for (const npmRcLine of npmRc.split(/[\n\r]/u)) {
const match = npmRcLine.trim().match(tokenRe);
if (!match) continue;
repoToTokenMap.set(match[1], match[2]);
repoToTokenMap.set(match.groups.registryName, match.groups.authToken);
}
log.info("resolved npm auth tokens for %o", repoToTokenMap.keys());
return repoToTokenMap;
Expand All @@ -39,7 +39,7 @@ const resolveRegistryUrl = registryPackageLatestTarballUrl => {
if (!scopedPackageUrlMatch) {
return registryPackageUrl.slice(0, registryPackageUrl.lastIndexOf("/"));
}
return registryPackageUrl.slice(0, -scopedPackageUrlMatch[1].length);
return registryPackageUrl.slice(0, -scopedPackageUrlMatch.groups.packageName.length);
};

module.exports = memoizee(
Expand Down
4 changes: 2 additions & 2 deletions lib/private/update-package-json.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ const { resolve } = require("path")
const resolveIndentationString = async packageJsonPath => {
const packageJsonString = await readFile(packageJsonPath, { loose: true, encoding: "utf8" });
if (packageJsonString) {
const match = packageJsonString.match(/\n(\s+)[^\s]/u);
if (match) return match[1];
const match = packageJsonString.match(/\n(?<indentString>\s+)[^\s]/u);
if (match) return match.groups.indentString;
}
return " ";
};
Expand Down

0 comments on commit c49f398

Please sign in to comment.