JezK
Edit File: tarball-fetcher.js.map
{"version":3,"file":"tarball-fetcher.js","names":["crypto","require","path","tarFs","url","fs","stream","gunzip","invariant","ssri","RE_URL_NAME_MATCH","isHashAlgorithmSupported","name","cachedResult","__cache","supported","createHash","error","message","TarballFetcher","tarballMirrorPath","getTarballMirrorPath","tarballCachePath","getTarballCachePath","fsUtil","exists","mkdirp","dirname","copy","reporter","join","dest","constants","TARBALL_FILENAME","parse","reference","pathname","match","packageFilename","scope","tarballBasename","basename","config","getOfflineMirrorPath","resolve","reject","tarballPath","hashInfo","_supportedIntegrity","hashOnly","integrityInfo","now","Date","patchedFs","Object","assign","utimes","atime","mtime","cb","stat","err","isDirectory","open","fd","futimes","close","hashValidateStream","integrityStream","integrityValidateStream","untarStream","extract","strip","dmode","fmode","chown","map","header","linkname","basePath","posix","jailPath","relative","extractorStream","once","validateError","sri","validateIntegrity","on","MessageError","lang","pipe","hexDigest","updateChecksums","remote","integrity","toString","cacheIntegrity","keys","length","SecurityError","packageName","found","expected","hash","override","paths","cwd","filter","tarPaths","getLocalPaths","readFirstAvailableStream","Promise","createExtractor","registry","registries","headers","requestHeaders","request","buffer","process","req","createWriteStream","unlink","yarn","requestParts","urlParts","reduce","option","parts","split","registryParts","host","startsWith","headerName","headerValue","isFilePath","removePrefix","urlParse","isRelativePath","protocol","fetchFromLocal","fetchFromExternal","fromHex","expectedIntegrity","_findIntegrity","expectedIntegrityAlgorithms","shouldValidateIntegrity","algorithms","Set","algorithm","add","Array","from","BaseFetcher","LocalTarballFetcher","requestUrl","normalizedUrl","normalizeUrl","parsed"],"sourceRoot":"../../src","sources":["fetchers/tarball-fetcher.js"],"sourcesContent":["/* @flow */\n\nimport {SecurityError, MessageError} from '../errors.js';\nimport type {FetchedOverride} from '../types.js';\nimport * as constants from '../constants.js';\nimport BaseFetcher from './base-fetcher.js';\nimport * as fsUtil from '../util/fs.js';\nimport {removePrefix} from '../util/misc.js';\nimport normalizeUrl from 'normalize-url';\n\nconst crypto = require('crypto');\nconst path = require('path');\nconst tarFs = require('tar-fs');\nconst url = require('url');\nconst fs = require('fs');\nconst stream = require('stream');\nconst gunzip = require('gunzip-maybe');\nconst invariant = require('invariant');\nconst ssri = require('ssri');\n\nconst RE_URL_NAME_MATCH = /\\/(?:(@[^/]+)(?:\\/|%2f))?[^/]+\\/(?:-|_attachments)\\/(?:@[^/]+\\/)?([^/]+)$/;\n\nconst isHashAlgorithmSupported = name => {\n const cachedResult = isHashAlgorithmSupported.__cache[name];\n if (cachedResult != null) {\n return cachedResult;\n }\n let supported = true;\n try {\n crypto.createHash(name);\n } catch (error) {\n if (error.message !== 'Digest method not supported') {\n throw error;\n }\n supported = false;\n }\n\n isHashAlgorithmSupported.__cache[name] = supported;\n return supported;\n};\nisHashAlgorithmSupported.__cache = {};\n\nexport default class TarballFetcher extends BaseFetcher {\n validateError: ?Object = null;\n validateIntegrity: ?Object = null;\n async setupMirrorFromCache(): Promise<?string> {\n const tarballMirrorPath = this.getTarballMirrorPath();\n const tarballCachePath = this.getTarballCachePath();\n\n if (tarballMirrorPath == null) {\n return;\n }\n\n if (!await fsUtil.exists(tarballMirrorPath) && (await fsUtil.exists(tarballCachePath))) {\n // The tarball doesn't exists in the offline cache but does in the cache; we import it to the mirror\n await fsUtil.mkdirp(path.dirname(tarballMirrorPath));\n await fsUtil.copy(tarballCachePath, tarballMirrorPath, this.reporter);\n }\n }\n\n getTarballCachePath(): string {\n return path.join(this.dest, constants.TARBALL_FILENAME);\n }\n\n getTarballMirrorPath(): ?string {\n const {pathname} = url.parse(this.reference);\n\n if (pathname == null) {\n return null;\n }\n\n const match = pathname.match(RE_URL_NAME_MATCH);\n\n let packageFilename;\n if (match) {\n const [, scope, tarballBasename] = match;\n packageFilename = scope ? `${scope}-${tarballBasename}` : tarballBasename;\n } else {\n // fallback to base name\n packageFilename = path.basename(pathname);\n }\n\n return this.config.getOfflineMirrorPath(packageFilename);\n }\n\n createExtractor(\n resolve: (fetched: FetchedOverride) => void,\n reject: (error: Error) => void,\n tarballPath?: string,\n ): {\n hashValidateStream: stream.PassThrough,\n integrityValidateStream: stream.PassThrough,\n extractorStream: stream.Transform,\n } {\n const hashInfo = this._supportedIntegrity({hashOnly: true});\n const integrityInfo = this._supportedIntegrity({hashOnly: false});\n\n const now = new Date();\n\n const fs = require('fs');\n const patchedFs = Object.assign({}, fs, {\n utimes: (path, atime, mtime, cb) => {\n fs.stat(path, (err, stat) => {\n if (err) {\n cb(err);\n return;\n }\n if (stat.isDirectory()) {\n fs.utimes(path, atime, mtime, cb);\n return;\n }\n fs.open(path, 'a', (err, fd) => {\n if (err) {\n cb(err);\n return;\n }\n fs.futimes(fd, atime, mtime, err => {\n if (err) {\n fs.close(fd, () => cb(err));\n } else {\n fs.close(fd, err => cb(err));\n }\n });\n });\n });\n },\n });\n\n const hashValidateStream = new ssri.integrityStream(hashInfo);\n const integrityValidateStream = new ssri.integrityStream(integrityInfo);\n\n const untarStream = tarFs.extract(this.dest, {\n strip: 1,\n dmode: 0o755, // all dirs should be readable\n fmode: 0o644, // all files should be readable\n chown: false, // don't chown. just leave as it is\n map: header => {\n header.mtime = now;\n if (header.linkname) {\n const basePath = path.posix.dirname(path.join('/', header.name));\n const jailPath = path.posix.join(basePath, header.linkname);\n header.linkname = path.posix.relative('/', jailPath);\n }\n return header;\n },\n fs: patchedFs,\n });\n const extractorStream = gunzip();\n\n hashValidateStream.once('error', err => {\n this.validateError = err;\n });\n integrityValidateStream.once('error', err => {\n this.validateError = err;\n });\n integrityValidateStream.once('integrity', sri => {\n this.validateIntegrity = sri;\n });\n\n untarStream.on('error', err => {\n reject(new MessageError(this.config.reporter.lang('errorExtractingTarball', err.message, tarballPath)));\n });\n\n extractorStream.pipe(untarStream).on('finish', () => {\n const error = this.validateError;\n const hexDigest = this.validateIntegrity ? this.validateIntegrity.hexDigest() : '';\n if (\n this.config.updateChecksums &&\n this.remote.integrity &&\n this.validateIntegrity &&\n this.remote.integrity !== this.validateIntegrity.toString()\n ) {\n this.remote.integrity = this.validateIntegrity.toString();\n } else if (this.validateIntegrity) {\n this.remote.cacheIntegrity = this.validateIntegrity.toString();\n }\n\n if (integrityInfo.integrity && Object.keys(integrityInfo.integrity).length === 0) {\n return reject(\n new SecurityError(\n this.config.reporter.lang('fetchBadIntegrityAlgorithm', this.packageName, this.remote.reference),\n ),\n );\n }\n\n if (error) {\n if (this.config.updateChecksums) {\n this.remote.integrity = error.found.toString();\n } else {\n return reject(\n new SecurityError(\n this.config.reporter.lang(\n 'fetchBadHashWithPath',\n this.packageName,\n this.remote.reference,\n error.found.toString(),\n error.expected.toString(),\n ),\n ),\n );\n }\n }\n\n return resolve({\n hash: this.hash || hexDigest,\n });\n });\n\n return {hashValidateStream, integrityValidateStream, extractorStream};\n }\n\n getLocalPaths(override: ?string): Array<string> {\n const paths: Array<?string> = [\n override ? path.resolve(this.config.cwd, override) : null,\n this.getTarballMirrorPath(),\n this.getTarballCachePath(),\n ];\n // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n return paths.filter(path => path != null);\n }\n\n async fetchFromLocal(override: ?string): Promise<FetchedOverride> {\n const tarPaths = this.getLocalPaths(override);\n const stream = await fsUtil.readFirstAvailableStream(tarPaths);\n\n return new Promise((resolve, reject) => {\n if (!stream) {\n reject(new MessageError(this.reporter.lang('tarballNotInNetworkOrCache', this.reference, tarPaths)));\n return;\n }\n invariant(stream, 'stream should be available at this point');\n // $FlowFixMe - This is available https://nodejs.org/api/fs.html#fs_readstream_path\n const tarballPath = stream.path;\n const {hashValidateStream, integrityValidateStream, extractorStream} = this.createExtractor(\n resolve,\n reject,\n tarballPath,\n );\n\n stream.pipe(hashValidateStream);\n hashValidateStream.pipe(integrityValidateStream);\n\n integrityValidateStream.pipe(extractorStream).on('error', err => {\n reject(new MessageError(this.config.reporter.lang('fetchErrorCorrupt', err.message, tarballPath)));\n });\n });\n }\n\n async fetchFromExternal(): Promise<FetchedOverride> {\n const registry = this.config.registries[this.registry];\n\n try {\n const headers = this.requestHeaders();\n return await registry.request(\n this.reference,\n {\n headers: {\n 'Accept-Encoding': 'gzip',\n ...headers,\n },\n buffer: true,\n process: (req, resolve, reject) => {\n // should we save this to the offline cache?\n const tarballMirrorPath = this.getTarballMirrorPath();\n const tarballCachePath = this.getTarballCachePath();\n\n const {hashValidateStream, integrityValidateStream, extractorStream} = this.createExtractor(\n resolve,\n reject,\n );\n\n req.pipe(hashValidateStream);\n hashValidateStream.pipe(integrityValidateStream);\n\n if (tarballMirrorPath) {\n integrityValidateStream.pipe(fs.createWriteStream(tarballMirrorPath)).on('error', reject);\n }\n\n if (tarballCachePath) {\n integrityValidateStream.pipe(fs.createWriteStream(tarballCachePath)).on('error', reject);\n }\n\n integrityValidateStream.pipe(extractorStream).on('error', reject);\n },\n },\n this.packageName,\n );\n } catch (err) {\n const tarballMirrorPath = this.getTarballMirrorPath();\n const tarballCachePath = this.getTarballCachePath();\n\n if (tarballMirrorPath && (await fsUtil.exists(tarballMirrorPath))) {\n await fsUtil.unlink(tarballMirrorPath);\n }\n\n if (tarballCachePath && (await fsUtil.exists(tarballCachePath))) {\n await fsUtil.unlink(tarballCachePath);\n }\n\n throw err;\n }\n }\n\n requestHeaders(): {[string]: string} {\n const registry = this.config.registries.yarn;\n const config = registry.config;\n const requestParts = urlParts(this.reference);\n return Object.keys(config).reduce((headers, option) => {\n const parts = option.split(':');\n if (parts.length === 3 && parts[1] === '_header') {\n const registryParts = urlParts(parts[0]);\n if (requestParts.host === registryParts.host && requestParts.path.startsWith(registryParts.path)) {\n const headerName = parts[2];\n const headerValue = config[option];\n headers[headerName] = headerValue;\n }\n }\n return headers;\n }, {});\n }\n\n _fetch(): Promise<FetchedOverride> {\n const isFilePath = this.reference.startsWith('file:');\n this.reference = removePrefix(this.reference, 'file:');\n const urlParse = url.parse(this.reference);\n\n // legacy support for local paths in yarn.lock entries\n const isRelativePath = urlParse.protocol\n ? urlParse.protocol.match(/^[a-z]:$/i)\n : urlParse.pathname ? urlParse.pathname.match(/^(?:\\.{1,2})?[\\\\\\/]/) : false;\n\n if (isFilePath || isRelativePath) {\n return this.fetchFromLocal(this.reference);\n }\n\n return this.fetchFromLocal().catch(err => this.fetchFromExternal());\n }\n\n _findIntegrity({hashOnly}: {hashOnly: boolean}): ?Object {\n if (this.remote.integrity && !hashOnly) {\n return ssri.parse(this.remote.integrity);\n }\n if (this.hash) {\n return ssri.fromHex(this.hash, 'sha1');\n }\n return null;\n }\n\n _supportedIntegrity({hashOnly}: {hashOnly: boolean}): {integrity: ?Object, algorithms: Array<string>} {\n const expectedIntegrity = this._findIntegrity({hashOnly}) || {};\n const expectedIntegrityAlgorithms = Object.keys(expectedIntegrity);\n const shouldValidateIntegrity = (this.hash || this.remote.integrity) && !this.config.updateChecksums;\n\n if (expectedIntegrityAlgorithms.length === 0 && (!shouldValidateIntegrity || hashOnly)) {\n const algorithms = this.config.updateChecksums ? ['sha512'] : ['sha1'];\n // for consistency, return sha1 for packages without a remote integrity (eg. github)\n return {integrity: null, algorithms};\n }\n\n const algorithms = new Set(['sha512', 'sha1']);\n const integrity = {};\n for (const algorithm of expectedIntegrityAlgorithms) {\n if (isHashAlgorithmSupported(algorithm)) {\n algorithms.add(algorithm);\n integrity[algorithm] = expectedIntegrity[algorithm];\n }\n }\n\n return {integrity, algorithms: Array.from(algorithms)};\n }\n}\n\nexport class LocalTarballFetcher extends TarballFetcher {\n _fetch(): Promise<FetchedOverride> {\n return this.fetchFromLocal(this.reference);\n }\n}\n\ntype UrlParts = {\n host: string,\n path: string,\n};\n\nfunction urlParts(requestUrl: string): UrlParts {\n const normalizedUrl = normalizeUrl(requestUrl);\n const parsed = url.parse(normalizedUrl);\n const host = parsed.host || '';\n const path = parsed.path || '';\n return {host, path};\n}\n"],"mappings":"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"}