JezK
Edit File: git-ref-resolver.js.map
{"version":3,"file":"git-ref-resolver.js","names":["semver","require","REF_PREFIX","REF_TAG_PREFIX","REF_BRANCH_PREFIX","REF_PR_PREFIX","GIT_REF_LINE_REGEXP","COMMIT_SHA_REGEXP","REF_NAME_REGEXP","isCommitSha","target","test","tryVersionAsGitCommit","version","refs","git","lowercaseVersion","toLowerCase","Promise","resolve","entries","ref","sha","startsWith","resolveCommit","tryEmptyVersionAsDefaultBranch","trim","resolveDefaultBranch","tryWildcardVersionAsDefaultBranch","tryRef","get","tryVersionAsFullRef","tryVersionAsTagName","tryVersionAsPullRequestNo","tryVersionAsBranchName","tryVersionAsDirectRef","computeSemverNames","config","names","tags","heads","keys","match","exec","type","name","valid","looseSemver","push","findSemver","namesList","resolveConstraints","tryVersionAsTagSemver","replace","result","tryVersionAsBranchSemver","tryVersionAsSemverRange","options","VERSION_RESOLUTION_STEPS","resolveVersion","testFunction","parseRefs","stdout","Map","refLines","split","line","tagName","removeSuffix","set"],"sourceRoot":"../../../src","sources":["util/git/git-ref-resolver.js"],"sourcesContent":["/* @flow */\n\nimport type Config from '../../config.js';\nimport {removeSuffix} from '../misc.js';\n\nconst semver = require('semver');\n\nexport type ResolvedSha = {sha: string, ref: ?string};\nexport interface GitRefResolvingInterface {\n resolveDefaultBranch(): Promise<ResolvedSha>,\n resolveCommit(sha: string): Promise<?ResolvedSha>,\n}\nexport type GitRefs = Map<string, string>;\nexport type ResolveVersionOptions = {\n version: string,\n config: Config,\n git: GitRefResolvingInterface,\n refs: GitRefs,\n};\ntype Names = {tags: Array<string>, heads: Array<string>};\n\nconst REF_PREFIX = 'refs/';\nconst REF_TAG_PREFIX = 'refs/tags/';\nconst REF_BRANCH_PREFIX = 'refs/heads/';\nconst REF_PR_PREFIX = 'refs/pull/';\n\n// This regex is designed to match output from git of the style:\n// ebeb6eafceb61dd08441ffe086c77eb472842494 refs/tags/v0.21.0\n// and extract the hash and ref name as capture groups\nconst GIT_REF_LINE_REGEXP = /^([a-fA-F0-9]+)\\s+(refs\\/(?:tags|heads|pull|remotes)\\/.*)$/;\n\nconst COMMIT_SHA_REGEXP = /^[a-f0-9]{5,40}$/;\nconst REF_NAME_REGEXP = /^refs\\/(tags|heads)\\/(.+)$/;\n\nexport const isCommitSha = (target: string): boolean => COMMIT_SHA_REGEXP.test(target);\n\nconst tryVersionAsGitCommit = ({version, refs, git}: ResolveVersionOptions): Promise<?ResolvedSha> => {\n const lowercaseVersion = version.toLowerCase();\n if (!isCommitSha(lowercaseVersion)) {\n return Promise.resolve(null);\n }\n for (const [ref, sha] of refs.entries()) {\n if (sha.startsWith(lowercaseVersion)) {\n return Promise.resolve({sha, ref});\n }\n }\n return git.resolveCommit(lowercaseVersion);\n};\n\nconst tryEmptyVersionAsDefaultBranch = ({version, git}: ResolveVersionOptions): Promise<?ResolvedSha> =>\n version.trim() === '' ? git.resolveDefaultBranch() : Promise.resolve(null);\n\nconst tryWildcardVersionAsDefaultBranch = ({version, git}: ResolveVersionOptions): Promise<?ResolvedSha> =>\n version === '*' ? git.resolveDefaultBranch() : Promise.resolve(null);\n\nconst tryRef = (refs: GitRefs, ref: string): ?ResolvedSha => {\n const sha = refs.get(ref);\n return sha ? {sha, ref} : null;\n};\n\nconst tryVersionAsFullRef = ({version, refs}: ResolveVersionOptions): ?ResolvedSha =>\n version.startsWith('refs/') ? tryRef(refs, version) : null;\n\nconst tryVersionAsTagName = ({version, refs}: ResolveVersionOptions): ?ResolvedSha =>\n tryRef(refs, `${REF_TAG_PREFIX}${version}`);\n\nconst tryVersionAsPullRequestNo = ({version, refs}: ResolveVersionOptions): ?ResolvedSha =>\n tryRef(refs, `${REF_PR_PREFIX}${version}`);\n\nconst tryVersionAsBranchName = ({version, refs}: ResolveVersionOptions): ?ResolvedSha =>\n tryRef(refs, `${REF_BRANCH_PREFIX}${version}`);\n\nconst tryVersionAsDirectRef = ({version, refs}: ResolveVersionOptions): ?ResolvedSha =>\n tryRef(refs, `${REF_PREFIX}${version}`);\n\nconst computeSemverNames = ({config, refs}: ResolveVersionOptions): Names => {\n const names = {\n tags: [],\n heads: [],\n };\n for (const ref of refs.keys()) {\n const match = REF_NAME_REGEXP.exec(ref);\n if (!match) {\n continue;\n }\n const [, type, name] = match;\n if (semver.valid(name, config.looseSemver)) {\n names[type].push(name);\n }\n }\n return names;\n};\n\nconst findSemver = (version: string, config: Config, namesList: Array<string>): Promise<?string> =>\n config.resolveConstraints(namesList, version);\n\nconst tryVersionAsTagSemver = async (\n {version, config, refs}: ResolveVersionOptions,\n names: Names,\n): Promise<?ResolvedSha> => {\n const result = await findSemver(version.replace(/^semver:/, ''), config, names.tags);\n return result ? tryRef(refs, `${REF_TAG_PREFIX}${result}`) : null;\n};\n\nconst tryVersionAsBranchSemver = async (\n {version, config, refs}: ResolveVersionOptions,\n names: Names,\n): Promise<?ResolvedSha> => {\n const result = await findSemver(version.replace(/^semver:/, ''), config, names.heads);\n return result ? tryRef(refs, `${REF_BRANCH_PREFIX}${result}`) : null;\n};\n\nconst tryVersionAsSemverRange = async (options: ResolveVersionOptions): Promise<?ResolvedSha> => {\n const names = computeSemverNames(options);\n return (await tryVersionAsTagSemver(options, names)) || tryVersionAsBranchSemver(options, names);\n};\n\nconst VERSION_RESOLUTION_STEPS: Array<(ResolveVersionOptions) => ?ResolvedSha | Promise<?ResolvedSha>> = [\n tryEmptyVersionAsDefaultBranch,\n tryVersionAsGitCommit,\n tryVersionAsFullRef,\n tryVersionAsTagName,\n tryVersionAsPullRequestNo,\n tryVersionAsBranchName,\n tryVersionAsSemverRange,\n tryWildcardVersionAsDefaultBranch,\n tryVersionAsDirectRef,\n];\n\n/**\n * Resolve a git-url hash (version) to a git commit sha and branch/tag ref\n * Returns null if the version cannot be resolved to any commit\n */\n\nexport const resolveVersion = async (options: ResolveVersionOptions): Promise<?ResolvedSha> => {\n for (const testFunction of VERSION_RESOLUTION_STEPS) {\n const result = await testFunction(options);\n if (result !== null) {\n return result;\n }\n }\n return null;\n};\n\n/**\n * Parse Git ref lines into hash of ref names to SHA hashes\n */\n\nexport const parseRefs = (stdout: string): GitRefs => {\n // store references\n const refs = new Map();\n\n // line delimited\n const refLines = stdout.split('\\n');\n\n for (const line of refLines) {\n const match = GIT_REF_LINE_REGEXP.exec(line);\n\n if (match) {\n const [, sha, tagName] = match;\n\n // As documented in gitrevisions:\n // https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html#_specifying_revisions\n // \"A suffix ^ followed by an empty brace pair means the object could be a tag,\n // and dereference the tag recursively until a non-tag object is found.\"\n // In other words, the hash without ^{} is the hash of the tag,\n // and the hash with ^{} is the hash of the commit at which the tag was made.\n const name = removeSuffix(tagName, '^{}');\n\n refs.set(name, sha);\n }\n }\n\n return refs;\n};\n"],"mappings":"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"}