Permalink
Cannot retrieve contributors at this time
96 lines (80 sloc)
3.04 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@eslint/eslintrc/lib/shared/naming.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @fileoverview Common helpers for naming of plugins, formatters and configs | |
*/ | |
const NAMESPACE_REGEX = /^@.*\//iu; | |
/** | |
* Brings package name to correct format based on prefix | |
* @param {string} name The name of the package. | |
* @param {string} prefix Can be either "eslint-plugin", "eslint-config" or "eslint-formatter" | |
* @returns {string} Normalized name of the package | |
* @private | |
*/ | |
function normalizePackageName(name, prefix) { | |
let normalizedName = name; | |
/** | |
* On Windows, name can come in with Windows slashes instead of Unix slashes. | |
* Normalize to Unix first to avoid errors later on. | |
* https://github.com/eslint/eslint/issues/5644 | |
*/ | |
if (normalizedName.includes("\\")) { | |
normalizedName = normalizedName.replace(/\\/gu, "/"); | |
} | |
if (normalizedName.charAt(0) === "@") { | |
/** | |
* it's a scoped package | |
* package name is the prefix, or just a username | |
*/ | |
const scopedPackageShortcutRegex = new RegExp(`^(@[^/]+)(?:/(?:${prefix})?)?$`, "u"), | |
scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`, "u"); | |
if (scopedPackageShortcutRegex.test(normalizedName)) { | |
normalizedName = normalizedName.replace(scopedPackageShortcutRegex, `$1/${prefix}`); | |
} else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) { | |
/** | |
* for scoped packages, insert the prefix after the first / unless | |
* the path is already @scope/eslint or @scope/eslint-xxx-yyy | |
*/ | |
normalizedName = normalizedName.replace(/^@([^/]+)\/(.*)$/u, `@$1/${prefix}-$2`); | |
} | |
} else if (!normalizedName.startsWith(`${prefix}-`)) { | |
normalizedName = `${prefix}-${normalizedName}`; | |
} | |
return normalizedName; | |
} | |
/** | |
* Removes the prefix from a fullname. | |
* @param {string} fullname The term which may have the prefix. | |
* @param {string} prefix The prefix to remove. | |
* @returns {string} The term without prefix. | |
*/ | |
function getShorthandName(fullname, prefix) { | |
if (fullname[0] === "@") { | |
let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(fullname); | |
if (matchResult) { | |
return matchResult[1]; | |
} | |
matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(fullname); | |
if (matchResult) { | |
return `${matchResult[1]}/${matchResult[2]}`; | |
} | |
} else if (fullname.startsWith(`${prefix}-`)) { | |
return fullname.slice(prefix.length + 1); | |
} | |
return fullname; | |
} | |
/** | |
* Gets the scope (namespace) of a term. | |
* @param {string} term The term which may have the namespace. | |
* @returns {string} The namespace of the term if it has one. | |
*/ | |
function getNamespaceFromTerm(term) { | |
const match = term.match(NAMESPACE_REGEX); | |
return match ? match[0] : ""; | |
} | |
//------------------------------------------------------------------------------ | |
// Public Interface | |
//------------------------------------------------------------------------------ | |
export { | |
normalizePackageName, | |
getShorthandName, | |
getNamespaceFromTerm | |
}; |