JezK
Edit File: hosted-git-resolver.js.map
{"version":3,"file":"hosted-git-resolver.js","names":["parseHash","fragment","hashPosition","indexOf","substr","explodeHostedGitFragment","reporter","hash","preParts","split","length","parts","replace","user","repo","undefined","MessageError","lang","HostedGitResolver","request","exploded","url","gitUrl","Git","npmUrlToGitUrl","client","config","requestManager","queue","resolver","fetchingQueue","out","lines","trim","slice","pop","map","line","join","Error","setRefHosted","getRefOverHTTP","commit","tarballUrl","constructor","getTarballUrl","tryRegistry","registry","filename","registries","href","getHTTPFileUrl","file","readJson","JSON","parse","json","_uid","_remote","resolved","type","reference","name","guessName","version","method","followRedirect","shrunk","getLocked","httpUrl","getGitHTTPUrl","httpBaseUrl","getGitHTTPBaseUrl","sshUrl","getGitSSHUrl","hasHTTPCapability","resolveOverHTTP","sshGitUrl","hasArchiveCapability","archiveClient","init","fork","GitResolver","ExoticResolver"],"sourceRoot":"../../../src","sources":["resolvers/exotics/hosted-git-resolver.js"],"sourcesContent":["/* @flow */\n\nimport type {Reporter} from '../../reporters/index.js';\nimport type {Manifest} from '../../types.js';\nimport type PackageRequest from '../../package-request.js';\nimport {MessageError} from '../../errors.js';\nimport {registries} from '../../registries/index.js';\nimport GitResolver from './git-resolver.js';\nimport ExoticResolver from './exotic-resolver.js';\nimport Git from '../../util/git.js';\nimport guessName from '../../util/guess-name.js';\n\nexport type ExplodedFragment = {\n user: string,\n repo: string,\n hash: string,\n};\n\nfunction parseHash(fragment: string): string {\n const hashPosition = fragment.indexOf('#');\n return hashPosition === -1 ? '' : fragment.substr(hashPosition + 1);\n}\n\nexport function explodeHostedGitFragment(fragment: string, reporter: Reporter): ExplodedFragment {\n const hash = parseHash(fragment);\n\n const preParts = fragment.split('@');\n if (preParts.length > 2) {\n fragment = preParts[1] + '@' + preParts[2];\n }\n\n const parts = fragment\n .replace(/(.*?)#.*/, '$1') // Strip hash\n .replace(/.*:(.*)/, '$1') // Strip prefixed protocols\n .replace(/.git$/, '') // Strip the .git suffix\n .split('/');\n\n const user = parts[parts.length - 2];\n const repo = parts[parts.length - 1];\n\n if (user === undefined || repo === undefined) {\n throw new MessageError(reporter.lang('invalidHostedGitFragment', fragment));\n }\n\n return {\n user,\n repo,\n hash,\n };\n}\n\nexport default class HostedGitResolver extends ExoticResolver {\n constructor(request: PackageRequest, fragment: string) {\n super(request, fragment);\n\n const exploded = (this.exploded = explodeHostedGitFragment(fragment, this.reporter));\n const {user, repo, hash} = exploded;\n this.user = user;\n this.repo = repo;\n this.hash = hash;\n }\n\n exploded: ExplodedFragment;\n url: string;\n user: string;\n repo: string;\n hash: string;\n\n static getTarballUrl(exploded: ExplodedFragment, commit: string): string {\n exploded;\n commit;\n throw new Error('Not implemented');\n }\n\n static getGitHTTPUrl(exploded: ExplodedFragment): string {\n exploded;\n throw new Error('Not implemented');\n }\n\n static getGitHTTPBaseUrl(exploded: ExplodedFragment): string {\n exploded;\n throw new Error('Not implemented');\n }\n\n static getGitSSHUrl(exploded: ExplodedFragment): string {\n exploded;\n throw new Error('Not implemented');\n }\n\n static getHTTPFileUrl(exploded: ExplodedFragment, filename: string, commit: string) {\n exploded;\n filename;\n commit;\n throw new Error('Not implemented');\n }\n\n async getRefOverHTTP(url: string): Promise<string> {\n const gitUrl = Git.npmUrlToGitUrl(url);\n const client = new Git(this.config, gitUrl, this.hash);\n\n let out = await this.config.requestManager.request({\n url: `${url}/info/refs?service=git-upload-pack`,\n queue: this.resolver.fetchingQueue,\n });\n\n if (out) {\n // clean up output\n let lines = out.trim().split('\\n');\n\n // remove first two lines which contains compatibility info etc\n lines = lines.slice(2);\n\n // remove last line which contains the terminator \"0000\"\n lines.pop();\n\n // remove line lengths from start of each line\n lines = lines.map((line): string => line.slice(4));\n\n out = lines.join('\\n');\n } else {\n throw new Error(this.reporter.lang('hostedGitResolveError'));\n }\n\n return client.setRefHosted(out);\n }\n\n async resolveOverHTTP(url: string): Promise<Manifest> {\n const commit = await this.getRefOverHTTP(url);\n const {config} = this;\n\n const tarballUrl = this.constructor.getTarballUrl(this.exploded, commit);\n\n const tryRegistry = async (registry): Promise<?Manifest> => {\n const {filename} = registries[registry];\n\n const href = this.constructor.getHTTPFileUrl(this.exploded, filename, commit);\n const file = await config.requestManager.request({\n url: href,\n queue: this.resolver.fetchingQueue,\n });\n if (!file) {\n return null;\n }\n\n const json = await config.readJson(href, () => JSON.parse(file));\n json._uid = commit;\n json._remote = {\n resolved: tarballUrl,\n type: 'tarball',\n reference: tarballUrl,\n registry,\n };\n return json;\n };\n\n const file = await tryRegistry(this.registry);\n if (file) {\n return file;\n }\n\n for (const registry in registries) {\n if (registry === this.registry) {\n continue;\n }\n\n const file = await tryRegistry(registry);\n if (file) {\n return file;\n }\n }\n\n return {\n name: guessName(url),\n version: '0.0.0',\n _uid: commit,\n _remote: {\n resolved: tarballUrl,\n type: 'tarball',\n reference: tarballUrl,\n registry: 'npm',\n hash: undefined,\n },\n };\n }\n\n async hasHTTPCapability(url: string): Promise<boolean> {\n return (\n (await this.config.requestManager.request({\n url,\n method: 'HEAD',\n queue: this.resolver.fetchingQueue,\n followRedirect: false,\n })) !== false\n );\n }\n\n async resolve(): Promise<Manifest> {\n // If we already have the tarball, just return it without having to make any HTTP requests.\n const shrunk = this.request.getLocked('tarball');\n if (shrunk) {\n return shrunk;\n }\n\n const httpUrl = this.constructor.getGitHTTPUrl(this.exploded);\n const httpBaseUrl = this.constructor.getGitHTTPBaseUrl(this.exploded);\n const sshUrl = this.constructor.getGitSSHUrl(this.exploded);\n\n // If we can access the files over HTTP then we should as it's MUCH faster than git\n // archive and tarball unarchiving. The HTTP API is only available for public repos\n // though.\n if (await this.hasHTTPCapability(httpBaseUrl)) {\n return this.resolveOverHTTP(httpUrl);\n }\n\n // If the url is accessible over git archive then we should immediately delegate to\n // the git resolver.\n //\n // NOTE: Here we use a different url than when we delegate to the git resolver later on.\n // This is because `git archive` requires access over ssh and github only allows that\n // if you have write permissions\n const sshGitUrl = Git.npmUrlToGitUrl(sshUrl);\n if (await Git.hasArchiveCapability(sshGitUrl)) {\n const archiveClient = new Git(this.config, sshGitUrl, this.hash);\n const commit = await archiveClient.init();\n return this.fork(GitResolver, true, `${sshUrl}#${commit}`);\n }\n\n // fallback to the plain git resolver\n return this.fork(GitResolver, true, sshUrl);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAiD;AAAA;AAQjD,SAASA,SAAS,CAACC,QAAgB,EAAU;EAC3C,IAAMC,YAAY,GAAGD,QAAQ,CAACE,OAAO,CAAC,GAAG,CAAC;EAC1C,OAAOD,YAAY,KAAK,CAAC,CAAC,GAAG,EAAE,GAAGD,QAAQ,CAACG,MAAM,CAACF,YAAY,GAAG,CAAC,CAAC;AACrE;AAEO,SAASG,wBAAwB,CAACJ,QAAgB,EAAEK,QAAkB,EAAoB;EAC/F,IAAMC,IAAI,GAAGP,SAAS,CAACC,QAAQ,CAAC;EAEhC,IAAMO,QAAQ,GAAGP,QAAQ,CAACQ,KAAK,CAAC,GAAG,CAAC;EACpC,IAAID,QAAQ,CAACE,MAAM,GAAG,CAAC,EAAE;IACvBT,QAAQ,GAAGO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,GAAGA,QAAQ,CAAC,CAAC,CAAC;EAC5C;EAEA,IAAMG,KAAK,GAAGV,QAAQ,CACnBW,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;EAAA,CAC1BA,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EAAA,CACzBA,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;EAAA,CACrBH,KAAK,CAAC,GAAG,CAAC;EAEb,IAAMI,IAAI,GAAGF,KAAK,CAACA,KAAK,CAACD,MAAM,GAAG,CAAC,CAAC;EACpC,IAAMI,IAAI,GAAGH,KAAK,CAACA,KAAK,CAACD,MAAM,GAAG,CAAC,CAAC;EAEpC,IAAIG,IAAI,KAAKE,SAAS,IAAID,IAAI,KAAKC,SAAS,EAAE;IAC5C,MAAM,KAAIC,sBAAY,EAACV,QAAQ,CAACW,IAAI,CAAC,0BAA0B,EAAEhB,QAAQ,CAAC,CAAC;EAC7E;EAEA,OAAO;IACLY,IAAI,EAAJA,IAAI;IACJC,IAAI,EAAJA,IAAI;IACJP,IAAI,EAAJA;EACF,CAAC;AACH;AAAC,IAEoBW,iBAAiB;EAAA;EAAA;EACpC,2BAAYC,OAAuB,EAAElB,QAAgB,EAAE;IAAA;IAAA;IACrD,0BAAMkB,OAAO,EAAElB,QAAQ;IAAE;IAAA;IAAA;IAAA;IAAA;IAEzB,IAAMmB,QAAQ,GAAI,MAAKA,QAAQ,GAAGf,wBAAwB,CAACJ,QAAQ,EAAE,MAAKK,QAAQ,CAAE;IACpF,IAAOO,IAAI,GAAgBO,QAAQ,CAA5BP,IAAI;MAAEC,IAAI,GAAUM,QAAQ,CAAtBN,IAAI;MAAEP,IAAI,GAAIa,QAAQ,CAAhBb,IAAI;IACvB,MAAKM,IAAI,GAAGA,IAAI;IAChB,MAAKC,IAAI,GAAGA,IAAI;IAChB,MAAKP,IAAI,GAAGA,IAAI;IAAC;EACnB;EAAC;IAAA;IAAA;MAAA,wGAoCD,iBAAqBc,GAAW;QAAA;QAAA;UAAA;YAAA;cACxBC,MAAM,GAAGC,iBAAG,CAACC,cAAc,CAACH,GAAG,CAAC;cAChCI,MAAM,GAAG,KAAIF,iBAAG,EAAC,IAAI,CAACG,MAAM,EAAEJ,MAAM,EAAE,IAAI,CAACf,IAAI,CAAC;cAAA;cAAA,OAEtC,IAAI,CAACmB,MAAM,CAACC,cAAc,CAACR,OAAO,CAAC;gBACjDE,GAAG,YAAKA,GAAG,uCAAoC;gBAC/CO,KAAK,EAAE,IAAI,CAACC,QAAQ,CAACC;cACvB,CAAC,CAAC;YAAA;cAHEC,GAAG;cAAA,KAKHA,GAAG;gBAAA;gBAAA;cAAA;cACL;cACIC,KAAK,GAAGD,GAAG,CAACE,IAAI,EAAE,CAACxB,KAAK,CAAC,IAAI,CAAC,EAElC;cACAuB,KAAK,GAAGA,KAAK,CAACE,KAAK,CAAC,CAAC,CAAC;;cAEtB;cACAF,KAAK,CAACG,GAAG,EAAE;;cAEX;cACAH,KAAK,GAAGA,KAAK,CAACI,GAAG,CAAC,UAACC,IAAI;gBAAA,OAAaA,IAAI,CAACH,KAAK,CAAC,CAAC,CAAC;cAAA,EAAC;cAElDH,GAAG,GAAGC,KAAK,CAACM,IAAI,CAAC,IAAI,CAAC;cAAC;cAAA;YAAA;cAAA,MAEjB,IAAIC,KAAK,CAAC,IAAI,CAACjC,QAAQ,CAACW,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAAA;cAAA,iCAGvDQ,MAAM,CAACe,YAAY,CAACT,GAAG,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CAChC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,yGAED,kBAAsBV,GAAW;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACV,IAAI,CAACoB,cAAc,CAACpB,GAAG,CAAC;YAAA;cAAvCqB,MAAM;cACLhB,MAAM,GAAI,IAAI,CAAdA,MAAM;cAEPiB,UAAU,GAAG,IAAI,CAACC,WAAW,CAACC,aAAa,CAAC,IAAI,CAACzB,QAAQ,EAAEsB,MAAM,CAAC;cAElEI,WAAW;gBAAA,6FAAG,kBAAOC,QAAQ;kBAAA;kBAAA;oBAAA;sBAAA;wBAC1BC,QAAQ,GAAIC,mBAAU,CAACF,QAAQ,CAAC,CAAhCC,QAAQ;wBAETE,IAAI,GAAG,MAAI,CAACN,WAAW,CAACO,cAAc,CAAC,MAAI,CAAC/B,QAAQ,EAAE4B,QAAQ,EAAEN,MAAM,CAAC;wBAAA;wBAAA,OAC1DhB,MAAM,CAACC,cAAc,CAACR,OAAO,CAAC;0BAC/CE,GAAG,EAAE6B,IAAI;0BACTtB,KAAK,EAAE,MAAI,CAACC,QAAQ,CAACC;wBACvB,CAAC,CAAC;sBAAA;wBAHIsB,IAAI;wBAAA,IAILA,IAAI;0BAAA;0BAAA;wBAAA;wBAAA,kCACA,IAAI;sBAAA;wBAAA;wBAAA,OAGM1B,MAAM,CAAC2B,QAAQ,CAACH,IAAI,EAAE;0BAAA,OAAMI,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;wBAAA,EAAC;sBAAA;wBAA1DI,IAAI;wBACVA,IAAI,CAACC,IAAI,GAAGf,MAAM;wBAClBc,IAAI,CAACE,OAAO,GAAG;0BACbC,QAAQ,EAAEhB,UAAU;0BACpBiB,IAAI,EAAE,SAAS;0BACfC,SAAS,EAAElB,UAAU;0BACrBI,QAAQ,EAARA;wBACF,CAAC;wBAAC,kCACKS,IAAI;sBAAA;sBAAA;wBAAA;oBAAA;kBAAA;gBAAA,CACZ;gBAAA,gBArBKV,WAAW;kBAAA;gBAAA;cAAA;cAAA;cAAA,OAuBEA,WAAW,CAAC,IAAI,CAACC,QAAQ,CAAC;YAAA;cAAvCK,IAAI;cAAA,KACNA,IAAI;gBAAA;gBAAA;cAAA;cAAA,kCACCA,IAAI;YAAA;cAAA,8CAGUH,mBAAU;YAAA;cAAA;gBAAA;gBAAA;cAAA;cAAtBF,QAAQ;cAAA,MACbA,QAAQ,KAAK,IAAI,CAACA,QAAQ;gBAAA;gBAAA;cAAA;cAAA;YAAA;cAAA;cAAA,OAIXD,WAAW,CAACC,QAAQ,CAAC;YAAA;cAAlCK,KAAI;cAAA,KACNA,KAAI;gBAAA;gBAAA;cAAA;cAAA,kCACCA,KAAI;YAAA;cAAA;cAAA;YAAA;cAAA,kCAIR;gBACLU,IAAI,EAAE,IAAAC,uBAAS,EAAC1C,GAAG,CAAC;gBACpB2C,OAAO,EAAE,OAAO;gBAChBP,IAAI,EAAEf,MAAM;gBACZgB,OAAO,EAAE;kBACPC,QAAQ,EAAEhB,UAAU;kBACpBiB,IAAI,EAAE,SAAS;kBACfC,SAAS,EAAElB,UAAU;kBACrBI,QAAQ,EAAE,KAAK;kBACfxC,IAAI,EAAEQ;gBACR;cACF,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CACF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,2GAED,kBAAwBM,GAAW;QAAA;UAAA;YAAA;cAAA;cAAA,OAExB,IAAI,CAACK,MAAM,CAACC,cAAc,CAACR,OAAO,CAAC;gBACxCE,GAAG,EAAHA,GAAG;gBACH4C,MAAM,EAAE,MAAM;gBACdrC,KAAK,EAAE,IAAI,CAACC,QAAQ,CAACC,aAAa;gBAClCoC,cAAc,EAAE;cAClB,CAAC,CAAC;YAAA;cAAA;cAAA,mDAAM,KAAK;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CAEhB;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,iGAED;QAAA;QAAA;UAAA;YAAA;cACE;cACMC,MAAM,GAAG,IAAI,CAAChD,OAAO,CAACiD,SAAS,CAAC,SAAS,CAAC;cAAA,KAC5CD,MAAM;gBAAA;gBAAA;cAAA;cAAA,kCACDA,MAAM;YAAA;cAGTE,OAAO,GAAG,IAAI,CAACzB,WAAW,CAAC0B,aAAa,CAAC,IAAI,CAAClD,QAAQ,CAAC;cACvDmD,WAAW,GAAG,IAAI,CAAC3B,WAAW,CAAC4B,iBAAiB,CAAC,IAAI,CAACpD,QAAQ,CAAC;cAC/DqD,MAAM,GAAG,IAAI,CAAC7B,WAAW,CAAC8B,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC,EAE3D;cACA;cACA;cAAA;cAAA,OACU,IAAI,CAACuD,iBAAiB,CAACJ,WAAW,CAAC;YAAA;cAAA;gBAAA;gBAAA;cAAA;cAAA,kCACpC,IAAI,CAACK,eAAe,CAACP,OAAO,CAAC;YAAA;cAGtC;cACA;cACA;cACA;cACA;cACA;cACMQ,SAAS,GAAGtD,iBAAG,CAACC,cAAc,CAACiD,MAAM,CAAC;cAAA;cAAA,OAClClD,iBAAG,CAACuD,oBAAoB,CAACD,SAAS,CAAC;YAAA;cAAA;gBAAA;gBAAA;cAAA;cACrCE,aAAa,GAAG,KAAIxD,iBAAG,EAAC,IAAI,CAACG,MAAM,EAAEmD,SAAS,EAAE,IAAI,CAACtE,IAAI,CAAC;cAAA;cAAA,OAC3CwE,aAAa,CAACC,IAAI,EAAE;YAAA;cAAnCtC,MAAM;cAAA,kCACL,IAAI,CAACuC,IAAI,CAACC,yBAAW,EAAE,IAAI,YAAKT,MAAM,cAAI/B,MAAM,EAAG;YAAA;cAAA,kCAIrD,IAAI,CAACuC,IAAI,CAACC,yBAAW,EAAE,IAAI,EAAET,MAAM,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CAC5C;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAjKD,uBAAqBrD,QAA0B,EAAEsB,MAAc,EAAU;MACvEtB,QAAQ;MACRsB,MAAM;MACN,MAAM,IAAIH,KAAK,CAAC,iBAAiB,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,uBAAqBnB,QAA0B,EAAU;MACvDA,QAAQ;MACR,MAAM,IAAImB,KAAK,CAAC,iBAAiB,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,2BAAyBnB,QAA0B,EAAU;MAC3DA,QAAQ;MACR,MAAM,IAAImB,KAAK,CAAC,iBAAiB,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,sBAAoBnB,QAA0B,EAAU;MACtDA,QAAQ;MACR,MAAM,IAAImB,KAAK,CAAC,iBAAiB,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,wBAAsBnB,QAA0B,EAAE4B,QAAgB,EAAEN,MAAc,EAAE;MAClFtB,QAAQ;MACR4B,QAAQ;MACRN,MAAM;MACN,MAAM,IAAIH,KAAK,CAAC,iBAAiB,CAAC;IACpC;EAAC;EAAA;AAAA,EA3C4C4C,4BAAc;AAAA"}