Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Perrotte <mike@npmjs.com>2020-01-31 23:59:21 +0300
committerisaacs <i@izs.me>2020-05-08 04:11:51 +0300
commit56e1f868e8634a4bf0f7a7186a68a6f3de9cfb2a (patch)
treef05cdcb56d66480641b6c8f8bb823bc10c6842df /node_modules/minipass-fetch
parent8f6b6204f9cdbfc8e2a27a1c3b3f1591ac7e0d60 (diff)
npm-pick-manifest@6.0.0
Diffstat (limited to 'node_modules/minipass-fetch')
-rw-r--r--node_modules/minipass-fetch/LICENSE28
-rw-r--r--node_modules/minipass-fetch/README.md20
-rw-r--r--node_modules/minipass-fetch/index.js1
-rw-r--r--node_modules/minipass-fetch/lib/abort-error.js17
-rw-r--r--node_modules/minipass-fetch/lib/blob.js97
-rw-r--r--node_modules/minipass-fetch/lib/body.js328
-rw-r--r--node_modules/minipass-fetch/lib/fetch-error.js31
-rw-r--r--node_modules/minipass-fetch/lib/headers.js250
-rw-r--r--node_modules/minipass-fetch/lib/index.js318
-rw-r--r--node_modules/minipass-fetch/lib/request.js186
-rw-r--r--node_modules/minipass-fetch/lib/response.js89
-rw-r--r--node_modules/minipass-fetch/node_modules/minipass/LICENSE15
-rw-r--r--node_modules/minipass-fetch/node_modules/minipass/README.md606
-rw-r--r--node_modules/minipass-fetch/node_modules/minipass/index.js538
-rw-r--r--node_modules/minipass-fetch/node_modules/minipass/package.json73
-rw-r--r--node_modules/minipass-fetch/node_modules/minizlib/LICENSE26
-rw-r--r--node_modules/minipass-fetch/node_modules/minizlib/README.md60
-rw-r--r--node_modules/minipass-fetch/node_modules/minizlib/constants.js115
-rw-r--r--node_modules/minipass-fetch/node_modules/minizlib/index.js338
-rw-r--r--node_modules/minipass-fetch/node_modules/minizlib/package.json75
-rw-r--r--node_modules/minipass-fetch/node_modules/yallist/LICENSE15
-rw-r--r--node_modules/minipass-fetch/node_modules/yallist/README.md204
-rw-r--r--node_modules/minipass-fetch/node_modules/yallist/iterator.js8
-rw-r--r--node_modules/minipass-fetch/node_modules/yallist/package.json63
-rw-r--r--node_modules/minipass-fetch/node_modules/yallist/yallist.js426
-rw-r--r--node_modules/minipass-fetch/package.json85
26 files changed, 4012 insertions, 0 deletions
diff --git a/node_modules/minipass-fetch/LICENSE b/node_modules/minipass-fetch/LICENSE
new file mode 100644
index 000000000..3c3410cdc
--- /dev/null
+++ b/node_modules/minipass-fetch/LICENSE
@@ -0,0 +1,28 @@
+The MIT License (MIT)
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright (c) 2016 David Frank
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---
+
+Note: This is a derivative work based on "node-fetch" by David Frank,
+modified and distributed under the terms of the MIT license above.
+https://github.com/bitinn/node-fetch
diff --git a/node_modules/minipass-fetch/README.md b/node_modules/minipass-fetch/README.md
new file mode 100644
index 000000000..df80d6994
--- /dev/null
+++ b/node_modules/minipass-fetch/README.md
@@ -0,0 +1,20 @@
+# minipass-fetch
+
+An implementation of window.fetch in Node.js using Minipass streams
+
+This is a fork (or more precisely, a reimplementation) of
+[node-fetch](http://npm.im/node-fetch). All streams have been replaced
+with [minipass streams](http://npm.im/minipass).
+
+The goal of this module is to stay in sync with the API presented by
+`node-fetch`, with the exception of the streaming interface provided.
+
+## Why
+
+Minipass streams are faster and more deterministic in their timing contract
+than node-core streams, making them a better fit for many server-side use
+cases.
+
+## API
+
+See [node-fetch](http://npm.im/node-fetch)
diff --git a/node_modules/minipass-fetch/index.js b/node_modules/minipass-fetch/index.js
new file mode 100644
index 000000000..07efc1788
--- /dev/null
+++ b/node_modules/minipass-fetch/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/index.js')
diff --git a/node_modules/minipass-fetch/lib/abort-error.js b/node_modules/minipass-fetch/lib/abort-error.js
new file mode 100644
index 000000000..b18f64326
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/abort-error.js
@@ -0,0 +1,17 @@
+'use strict'
+class AbortError extends Error {
+ constructor (message) {
+ super(message)
+ this.code = 'FETCH_ABORTED'
+ this.type = 'aborted'
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'AbortError'
+ }
+
+ // don't allow name to be overridden, but don't throw either
+ set name (s) {}
+}
+module.exports = AbortError
diff --git a/node_modules/minipass-fetch/lib/blob.js b/node_modules/minipass-fetch/lib/blob.js
new file mode 100644
index 000000000..9225db6f6
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/blob.js
@@ -0,0 +1,97 @@
+'use strict'
+const Minipass = require('minipass')
+const TYPE = Symbol('type')
+const BUFFER = Symbol('buffer')
+
+class Blob {
+ constructor (blobParts, options) {
+ this[TYPE] = ''
+
+ const buffers = []
+ let size = 0
+
+ if (blobParts) {
+ const a = blobParts
+ const length = Number(a.length)
+ for (let i = 0; i < length; i++) {
+ const element = a[i]
+ const buffer = element instanceof Buffer ? element
+ : ArrayBuffer.isView(element)
+ ? Buffer.from(element.buffer, element.byteOffset, element.byteLength)
+ : element instanceof ArrayBuffer ? Buffer.from(element)
+ : element instanceof Blob ? element[BUFFER]
+ : typeof element === 'string' ? Buffer.from(element)
+ : Buffer.from(String(element))
+ size += buffer.length
+ buffers.push(buffer)
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers, size)
+
+ const type = options && options.type !== undefined
+ && String(options.type).toLowerCase()
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type
+ }
+ }
+
+ get size () {
+ return this[BUFFER].length
+ }
+
+ get type () {
+ return this[TYPE]
+ }
+
+ text () {
+ return Promise.resolve(this[BUFFER].toString())
+ }
+
+ arrayBuffer () {
+ const buf = this[BUFFER]
+ const off = buf.byteOffset
+ const len = buf.byteLength
+ const ab = buf.buffer.slice(off, off + len)
+ return Promise.resolve(ab)
+ }
+
+ stream () {
+ return new Minipass().end(this[BUFFER])
+ }
+
+ slice (start, end, type) {
+ const size = this.size
+ const relativeStart = start === undefined ? 0
+ : start < 0 ? Math.max(size + start, 0)
+ : Math.min(start, size)
+ const relativeEnd = end === undefined ? size
+ : end < 0 ? Math.max(size + end, 0)
+ : Math.min(end, size)
+ const span = Math.max(relativeEnd - relativeStart, 0)
+
+ const buffer = this[BUFFER]
+ const slicedBuffer = buffer.slice(
+ relativeStart,
+ relativeStart + span
+ )
+ const blob = new Blob([], { type })
+ blob[BUFFER] = slicedBuffer
+ return blob
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Blob'
+ }
+
+ static get BUFFER () {
+ return BUFFER
+ }
+}
+
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+})
+
+module.exports = Blob
diff --git a/node_modules/minipass-fetch/lib/body.js b/node_modules/minipass-fetch/lib/body.js
new file mode 100644
index 000000000..8a00c550f
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/body.js
@@ -0,0 +1,328 @@
+'use strict'
+const Minipass = require('minipass')
+const MinipassSized = require('minipass-sized')
+
+const Blob = require('./blob.js')
+const {BUFFER} = Blob
+const FetchError = require('./fetch-error.js')
+
+// optional dependency on 'encoding'
+let convert
+try {
+ convert = require('encoding').convert
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals')
+const CONSUME_BODY = Symbol('consumeBody')
+
+class Body {
+ constructor (bodyArg, options = {}) {
+ const { size = 0, timeout = 0 } = options
+ const body = bodyArg === undefined || bodyArg === null ? null
+ : isURLSearchParams(bodyArg) ? Buffer.from(bodyArg.toString())
+ : isBlob(bodyArg) ? bodyArg
+ : Buffer.isBuffer(bodyArg) ? bodyArg
+ : Object.prototype.toString.call(bodyArg) === '[object ArrayBuffer]'
+ ? Buffer.from(bodyArg)
+ : ArrayBuffer.isView(bodyArg)
+ ? Buffer.from(bodyArg.buffer, bodyArg.byteOffset, bodyArg.byteLength)
+ : Minipass.isStream(bodyArg) ? bodyArg
+ : Buffer.from(String(bodyArg))
+
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null,
+ }
+
+ this.size = size
+ this.timeout = timeout
+
+ if (Minipass.isStream(body)) {
+ body.on('error', er => {
+ const error = er.name === 'AbortError' ? er
+ : new FetchError(`Invalid response while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ this[INTERNALS].error = error
+ })
+ }
+ }
+
+ get body () {
+ return this[INTERNALS].body
+ }
+
+ get bodyUsed () {
+ return this[INTERNALS].disturbed
+ }
+
+ arrayBuffer () {
+ return this[CONSUME_BODY]().then(buf =>
+ buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength))
+ }
+
+ blob () {
+ const ct = this.headers && this.headers.get('content-type') || ''
+ return this[CONSUME_BODY]().then(buf => Object.assign(
+ new Blob([], { type: ct.toLowerCase() }),
+ { [BUFFER]: buf }
+ ))
+ }
+
+ json () {
+ return this[CONSUME_BODY]().then(buf => {
+ try {
+ return JSON.parse(buf.toString())
+ } catch (er) {
+ return Promise.reject(new FetchError(
+ `invalid json response body at ${
+ this.url} reason: ${er.message}`, 'invalid-json'))
+ }
+ })
+ }
+
+ text () {
+ return this[CONSUME_BODY]().then(buf => buf.toString())
+ }
+
+ buffer () {
+ return this[CONSUME_BODY]()
+ }
+
+ textConverted () {
+ return this[CONSUME_BODY]().then(buf => convertBody(buf, this.headers))
+ }
+
+ [CONSUME_BODY] () {
+ if (this[INTERNALS].disturbed)
+ return Promise.reject(new TypeError(`body used already for: ${
+ this.url}`))
+
+ this[INTERNALS].disturbed = true
+
+ if (this[INTERNALS].error)
+ return Promise.reject(this[INTERNALS].error)
+
+ // body is null
+ if (this.body === null) {
+ return Promise.resolve(Buffer.alloc(0));
+ }
+
+ if (Buffer.isBuffer(this.body))
+ return Promise.resolve(this.body)
+
+ const upstream = isBlob(this.body) ? this.body.stream() : this.body
+
+ /* istanbul ignore if: should never happen */
+ if (!Minipass.isStream(upstream))
+ return Promise.resolve(Buffer.alloc(0));
+
+ const stream = this.size && upstream instanceof MinipassSized ? upstream
+ : !this.size && upstream instanceof Minipass &&
+ !(upstream instanceof MinipassSized) ? upstream
+ : this.size ? new MinipassSized({ size: this.size })
+ : new Minipass()
+
+ // allow timeout on slow response body
+ const resTimeout = this.timeout ? setTimeout(() => {
+ stream.emit('error', new FetchError(
+ `Response timeout while trying to fetch ${
+ this.url} (over ${this.timeout}ms)`, 'body-timeout'))
+ }, this.timeout) : null
+
+ // do the pipe in the promise, because the pipe() can send too much
+ // data through right away and upset the MP Sized object
+ return new Promise((resolve, reject) => {
+ // if the stream is some other kind of stream, then pipe through a MP
+ // so we can collect it more easily.
+ if (stream !== upstream) {
+ upstream.on('error', er => stream.emit('error', er))
+ upstream.pipe(stream)
+ }
+ resolve()
+ }).then(() => stream.concat()).then(buf => {
+ clearTimeout(resTimeout)
+ return buf
+ }).catch(er => {
+ clearTimeout(resTimeout)
+ // request was aborted, reject with this Error
+ if (er.name === 'AbortError' || er.name === 'FetchError')
+ throw er
+ else if (er.name === 'RangeError')
+ throw new FetchError(`Could not create Buffer from response body for ${
+ this.url}: ${er.message}`, 'system', er)
+ else
+ // other errors, such as incorrect content-encoding or content-length
+ throw new FetchError(`Invalid response body while trying to fetch ${
+ this.url}: ${er.message}`, 'system', er)
+ })
+ }
+
+ static clone (instance) {
+ if (instance.bodyUsed)
+ throw new Error('cannot clone body after it is used')
+
+ const body = instance.body
+
+ // check that body is a stream and not form-data object
+ // NB: can't clone the form-data object without having it as a dependency
+ if (Minipass.isStream(body) && typeof body.getBoundary !== 'function') {
+ // create a dedicated tee stream so that we don't lose data
+ // potentially sitting in the body stream's buffer by writing it
+ // immediately to p1 and not having it for p2.
+ const tee = new Minipass()
+ const p1 = new Minipass()
+ const p2 = new Minipass()
+ tee.on('error', er => {
+ p1.emit('error', er)
+ p2.emit('error', er)
+ })
+ body.on('error', er => tee.emit('error', er))
+ tee.pipe(p1)
+ tee.pipe(p2)
+ body.pipe(tee)
+ // set instance body to one fork, return the other
+ instance[INTERNALS].body = p1
+ return p2
+ } else
+ return instance.body
+ }
+
+ static extractContentType (body) {
+ return body === null || body === undefined ? null
+ : typeof body === 'string' ? 'text/plain;charset=UTF-8'
+ : isURLSearchParams(body)
+ ? 'application/x-www-form-urlencoded;charset=UTF-8'
+ : isBlob(body) ? body.type || null
+ : Buffer.isBuffer(body) ? null
+ : Object.prototype.toString.call(body) === '[object ArrayBuffer]' ? null
+ : ArrayBuffer.isView(body) ? null
+ : typeof body.getBoundary === 'function'
+ ? `multipart/form-data;boundary=${body.getBoundary()}`
+ : Minipass.isStream(body) ? null
+ : 'text/plain;charset=UTF-8'
+ }
+
+ static getTotalBytes (instance) {
+ const {body} = instance
+ return (body === null || body === undefined) ? 0
+ : isBlob(body) ? body.size
+ : Buffer.isBuffer(body) ? body.length
+ : body && typeof body.getLengthSync === 'function' && (
+ // detect form data input from form-data module
+ body._lengthRetrievers &&
+ /* istanbul ignore next */ body._lengthRetrievers.length == 0 || // 1.x
+ body.hasKnownLength && body.hasKnownLength()) // 2.x
+ ? body.getLengthSync()
+ : null
+ }
+
+ static writeToStream (dest, instance) {
+ const {body} = instance;
+
+ if (body === null || body === undefined)
+ dest.end()
+ else if (Buffer.isBuffer(body) || typeof body === 'string')
+ dest.end(body)
+ else {
+ // body is stream or blob
+ const stream = isBlob(body) ? body.stream() : body
+ stream.on('error', er => dest.emit('error', er)).pipe(dest)
+ }
+
+ return dest
+ }
+}
+
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true }
+});
+
+
+const isURLSearchParams = obj =>
+ // Duck-typing as a necessary condition.
+ (typeof obj !== 'object' ||
+ typeof obj.append !== 'function' ||
+ typeof obj.delete !== 'function' ||
+ typeof obj.get !== 'function' ||
+ typeof obj.getAll !== 'function' ||
+ typeof obj.has !== 'function' ||
+ typeof obj.set !== 'function') ? false
+ // Brand-checking and more duck-typing as optional condition.
+ : obj.constructor.name === 'URLSearchParams' ||
+ Object.prototype.toString.call(obj) === '[object URLSearchParams]' ||
+ typeof obj.sort === 'function'
+
+const isBlob = obj =>
+ typeof obj === 'object' &&
+ typeof obj.arrayBuffer === 'function' &&
+ typeof obj.type === 'string' &&
+ typeof obj.stream === 'function' &&
+ typeof obj.constructor === 'function' &&
+ typeof obj.constructor.name === 'string' &&
+ /^(Blob|File)$/.test(obj.constructor.name) &&
+ /^(Blob|File)$/.test(obj[Symbol.toStringTag])
+
+
+const convertBody = (buffer, headers) => {
+ /* istanbul ignore if */
+ if (typeof convert !== 'function')
+ throw new Error('The package `encoding` must be installed to use the textConverted() function')
+
+ const ct = headers && headers.get('content-type')
+ let charset = 'utf-8'
+ let res, str
+
+ // header
+ if (ct)
+ res = /charset=([^;]*)/i.exec(ct)
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ str = buffer.slice(0, 1024).toString()
+
+ // html5
+ if (!res && str)
+ res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str)
+
+ // html4
+ if (!res && str) {
+ res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str)
+
+ if (!res) {
+ res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str)
+ if (res)
+ res.pop() // drop last quote
+ }
+
+ if (res)
+ res = /charset=(.*)/i.exec(res.pop())
+ }
+
+ // xml
+ if (!res && str)
+ res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str)
+
+ // found charset
+ if (res) {
+ charset = res.pop()
+
+ // prevent decode issues when sites use incorrect encoding
+ // ref: https://hsivonen.fi/encoding-menu/
+ if (charset === 'gb2312' || charset === 'gbk')
+ charset = 'gb18030'
+ }
+
+ // turn raw buffers into a single utf-8 buffer
+ return convert(
+ buffer,
+ 'UTF-8',
+ charset
+ ).toString()
+}
+
+module.exports = Body
diff --git a/node_modules/minipass-fetch/lib/fetch-error.js b/node_modules/minipass-fetch/lib/fetch-error.js
new file mode 100644
index 000000000..b0445cf84
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/fetch-error.js
@@ -0,0 +1,31 @@
+'use strict'
+class FetchError extends Error {
+ constructor (message, type, systemError) {
+ super(message)
+ this.code = 'FETCH_ERROR'
+
+ // pick up code, expected, path, ...
+ if (systemError)
+ Object.assign(this, systemError)
+
+ this.errno = this.code
+
+ // override anything the system error might've clobbered
+ this.type = this.code === 'EBADSIZE' && this.found > this.expect
+ ? 'max-size' : type
+ this.message = message
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'FetchError'
+ }
+
+ // don't allow name to be overwritten
+ set name (n) {}
+
+ get [Symbol.toStringTag] () {
+ return 'FetchError'
+ }
+}
+module.exports = FetchError
diff --git a/node_modules/minipass-fetch/lib/headers.js b/node_modules/minipass-fetch/lib/headers.js
new file mode 100644
index 000000000..56c54a41f
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/headers.js
@@ -0,0 +1,250 @@
+'use strict'
+const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/
+const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/
+
+const validateName = name => {
+ name = `${name}`
+ if (invalidTokenRegex.test(name) || name === '')
+ throw new TypeError(`${name} is not a legal HTTP header name`)
+}
+
+const validateValue = value => {
+ value = `${value}`;
+ if (invalidHeaderCharRegex.test(value))
+ throw new TypeError(`${value} is not a legal HTTP header value`)
+}
+
+const find = (map, name) => {
+ name = name.toLowerCase()
+ for (const key in map) {
+ if (key.toLowerCase() === name)
+ return key
+ }
+ return undefined
+}
+
+const MAP = Symbol('map')
+class Headers {
+ constructor (init = undefined) {
+ this[MAP] = Object.create(null)
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw()
+ const headerNames = Object.keys(rawHeaders)
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value)
+ }
+ }
+ return
+ }
+
+ // no-op
+ if (init === undefined || init === null)
+ return
+
+ if (typeof init === 'object') {
+ const method = init[Symbol.iterator]
+ if (method !== null && method !== undefined) {
+ if (typeof method !== 'function')
+ throw new TypeError('Header pairs must be iterable')
+
+ // sequence<sequence<ByteString>>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = []
+ for (const pair of init) {
+ if (typeof pair !== 'object' ||
+ typeof pair[Symbol.iterator] !== 'function')
+ throw new TypeError('Each header pair must be iterable')
+ const arrPair = Array.from(pair)
+ if (arrPair.length !== 2)
+ throw new TypeError('Each header pair must be a name/value tuple')
+ pairs.push(arrPair)
+ }
+
+ for (const pair of pairs) {
+ this.append(pair[0], pair[1])
+ }
+ } else {
+ // record<ByteString, ByteString>
+ for (const key of Object.keys(init)) {
+ this.append(key, init[key])
+ }
+ }
+ } else
+ throw new TypeError('Provided initializer must be an object')
+ }
+
+ get (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key === undefined)
+ return null
+
+ return this[MAP][key].join(', ')
+ }
+
+ forEach (callback, thisArg = undefined) {
+ let pairs = getHeaders(this);
+ for (let i = 0; i < pairs.length; i++) {
+ const [name, value] = pairs[i]
+ callback.call(thisArg, value, name, this)
+ // refresh in case the callback added more headers
+ pairs = getHeaders(this)
+ }
+ }
+
+ set (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ this[MAP][key !== undefined ? key : name] = [value]
+ }
+
+ append (name, value) {
+ name = `${name}`
+ value = `${value}`
+ validateName(name)
+ validateValue(value)
+ const key = find(this[MAP], name)
+ if (key !== undefined)
+ this[MAP][key].push(value)
+ else
+ this[MAP][name] = [value]
+ }
+
+ has (name) {
+ name = `${name}`
+ validateName(name)
+ return find(this[MAP], name) !== undefined
+ }
+
+ delete (name) {
+ name = `${name}`
+ validateName(name)
+ const key = find(this[MAP], name)
+ if (key !== undefined)
+ delete this[MAP][key]
+ }
+
+ raw () {
+ return this[MAP]
+ }
+
+ keys () {
+ return new HeadersIterator(this, 'key')
+ }
+
+ values () {
+ return new HeadersIterator(this, 'value')
+ }
+
+ [Symbol.iterator]() {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ entries () {
+ return new HeadersIterator(this, 'key+value')
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Headers'
+ }
+
+ static exportNodeCompatibleHeaders (headers) {
+ const obj = Object.assign(Object.create(null), headers[MAP])
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host')
+ if (hostHeaderKey !== undefined)
+ obj[hostHeaderKey] = obj[hostHeaderKey][0]
+
+ return obj
+ }
+
+ static createHeadersLenient (obj) {
+ const headers = new Headers()
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name))
+ continue
+
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val))
+ continue
+
+ if (headers[MAP][name] === undefined)
+ headers[MAP][name] = [val]
+ else
+ headers[MAP][name].push(val);
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name]))
+ headers[MAP][name] = [obj[name]]
+ }
+ return headers
+ }
+}
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true },
+})
+
+const getHeaders = (headers, kind = 'key+value') =>
+ Object.keys(headers[MAP]).sort().map(
+ kind === 'key' ? k => k.toLowerCase()
+ : kind === 'value' ? k => headers[MAP][k].join(', ')
+ : k => [k.toLowerCase(), headers[MAP][k].join(', ')]
+ )
+
+const INTERNAL = Symbol('internal')
+
+class HeadersIterator {
+ constructor (target, kind) {
+ this[INTERNAL] = {
+ target,
+ kind,
+ index: 0,
+ }
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'HeadersIterator'
+ }
+
+ next () {
+ /* istanbul ignore if: should be impossible */
+ if (!this || Object.getPrototypeOf(this) !== HeadersIterator.prototype)
+ throw new TypeError('Value of `this` is not a HeadersIterator')
+
+ const { target, kind, index } = this[INTERNAL]
+ const values = getHeaders(target, kind)
+ const len = values.length
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true,
+ }
+ }
+
+ this[INTERNAL].index++
+
+ return { value: values[index], done: false }
+ }
+}
+
+// manually extend because 'extends' requires a ctor
+Object.setPrototypeOf(HeadersIterator.prototype,
+ Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())))
+
+module.exports = Headers
diff --git a/node_modules/minipass-fetch/lib/index.js b/node_modules/minipass-fetch/lib/index.js
new file mode 100644
index 000000000..725846565
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/index.js
@@ -0,0 +1,318 @@
+'use strict'
+const Url = require('url')
+const http = require('http')
+const https = require('https')
+const zlib = require('minizlib')
+const Minipass = require('minipass')
+
+const Body = require('./body.js')
+const { writeToStream, getTotalBytes } = Body
+const Response = require('./response.js')
+const Headers = require('./headers.js')
+const { createHeadersLenient } = Headers
+const Request = require('./request.js')
+const { getNodeRequestOptions } = Request
+const FetchError = require('./fetch-error.js')
+const AbortError = require('./abort-error.js')
+
+const resolveUrl = Url.resolve
+
+const fetch = (url, opts) => {
+ if (/^data:/.test(url)) {
+ const request = new Request(url, opts)
+ try {
+ const split = url.split(',')
+ const data = Buffer.from(split[1], 'base64')
+ const type = split[0].match(/^data:(.*);base64$/)[1]
+ return Promise.resolve(new Response(data, {
+ headers: {
+ 'Content-Type': type,
+ 'Content-Length': data.length,
+ }
+ }))
+ } catch (er) {
+ return Promise.reject(new FetchError(`[${request.method}] ${
+ request.url} invalid URL, ${er.message}`, 'system', er))
+ }
+ }
+
+ return new Promise((resolve, reject) => {
+ // build request object
+ const request = new Request(url, opts)
+ let options
+ try {
+ options = getNodeRequestOptions(request)
+ } catch (er) {
+ return reject(er)
+ }
+
+ const send = (options.protocol === 'https:' ? https : http).request
+ const { signal } = request
+ let response = null
+ const abort = () => {
+ const error = new AbortError('The user aborted a request.')
+ reject(error)
+ if (Minipass.isStream(request.body) &&
+ typeof request.body.destroy === 'function') {
+ request.body.destroy(error)
+ }
+ if (response && response.body) {
+ response.body.emit('error', error)
+ }
+ }
+
+ if (signal && signal.aborted)
+ return abort()
+
+ const abortAndFinalize = () => {
+ abort()
+ finalize()
+ }
+
+ const finalize = () => {
+ req.abort()
+ if (signal)
+ signal.removeEventListener('abort', abortAndFinalize)
+ clearTimeout(reqTimeout)
+ }
+
+ // send request
+ const req = send(options)
+
+ if (signal)
+ signal.addEventListener('abort', abortAndFinalize)
+
+ let reqTimeout = null
+ if (request.timeout) {
+ req.once('socket', socket => {
+ reqTimeout = setTimeout(() => {
+ reject(new FetchError(`network timeout at: ${
+ request.url}`, 'request-timeout'))
+ finalize()
+ }, request.timeout)
+ })
+ }
+
+ req.on('error', er => {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${
+ er.message}`, 'system', er))
+ finalize()
+ })
+
+ req.on('response', res => {
+ clearTimeout(reqTimeout)
+
+ const headers = createHeadersLenient(res.headers)
+
+ // HTTP fetch step 5
+ if (fetch.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location')
+
+ // HTTP fetch step 5.3
+ const locationURL = location === null ? null
+ : resolveUrl(request.url, location)
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${
+ request.url}`, 'no-redirect'))
+ finalize()
+ return
+
+ case 'manual':
+ // node-fetch-specific step: make manual redirect a bit easier to
+ // use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL)
+ } catch (err) {
+ /* istanbul ignore next: nodejs server prevent invalid
+ response headers, we can't test this through normal
+ request */
+ reject(err)
+ }
+ }
+ break
+
+ case 'follow':
+ // HTTP-redirect fetch step 2
+ if (locationURL === null) {
+ break
+ }
+
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${
+ request.url}`, 'max-redirect'));
+ finalize()
+ return
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 &&
+ request.body &&
+ getTotalBytes(request) === null) {
+ reject(new FetchError(
+ 'Cannot follow redirect with body being a readable stream',
+ 'unsupported-redirect'
+ ))
+ finalize()
+ return
+ }
+
+ // Update host due to redirection
+ request.headers.set('host', Url.parse(locationURL).host)
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (
+ (res.statusCode === 301 || res.statusCode === 302) &&
+ request.method === 'POST'
+ )) {
+ requestOpts.method = 'GET'
+ requestOpts.body = undefined
+ requestOpts.headers.delete('content-length')
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch(new Request(locationURL, requestOpts)))
+ finalize()
+ return
+ }
+ } // end if(isRedirect)
+
+
+ // prepare response
+ res.once('end', () =>
+ signal && signal.removeEventListener('abort', abortAndFinalize))
+
+ const body = new Minipass()
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ res.on('error', /* istanbul ignore next */ er => body.emit('error', er)).pipe(body)
+
+ const responseOptions = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter,
+ trailer: new Promise(resolve =>
+ res.on('end', () => resolve(createHeadersLenient(res.trailers))))
+ }
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding')
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress ||
+ request.method === 'HEAD' ||
+ codings === null ||
+ res.statusCode === 204 ||
+ res.statusCode === 304) {
+ response = new Response(body, responseOptions)
+ resolve(response)
+ return
+ }
+
+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH,
+ }
+
+ // for gzip
+ if (codings == 'gzip' || codings == 'x-gzip') {
+ const unzip = new zlib.Gunzip(zlibOptions)
+ response = new Response(
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => unzip.emit('error', er)).pipe(unzip),
+ responseOptions
+ )
+ resolve(response)
+ return
+ }
+
+ // for deflate
+ if (codings == 'deflate' || codings == 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new Minipass())
+ raw.once('data', chunk => {
+ // see http://stackoverflow.com/questions/37519828
+ const decoder = (chunk[0] & 0x0F) === 0x08
+ ? new zlib.Inflate()
+ : new zlib.InflateRaw()
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ })
+ return
+ }
+
+
+ // for br
+ if (codings == 'br' && typeof zlib.BrotliDecompress === 'function') {
+ const decoder = new zlib.BrotliDecompress()
+ // exceedingly rare that the stream would have an error,
+ // but just in case we proxy it to the stream in use.
+ body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder)
+ response = new Response(decoder, responseOptions)
+ resolve(response)
+ return
+ }
+
+ // otherwise, use response as-is
+ response = new Response(body, responseOptions)
+ resolve(response)
+ })
+
+ writeToStream(req, request)
+ })
+}
+
+module.exports = fetch
+
+fetch.isRedirect = code =>
+ code === 301 ||
+ code === 302 ||
+ code === 303 ||
+ code === 307 ||
+ code === 308
+
+fetch.Headers = Headers
+fetch.Request = Request
+fetch.Response = Response
+fetch.FetchError = FetchError
diff --git a/node_modules/minipass-fetch/lib/request.js b/node_modules/minipass-fetch/lib/request.js
new file mode 100644
index 000000000..5602315d7
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/request.js
@@ -0,0 +1,186 @@
+'use strict'
+const Url = require('url')
+const Minipass = require('minipass')
+const Headers = require('./headers.js')
+const { exportNodeCompatibleHeaders } = Headers
+const Body = require('./body.js')
+const { clone, extractContentType, getTotalBytes } = Body
+
+const version = require('../package.json').version
+const defaultUserAgent =
+ `minipass-fetch/${version} (+https://github.com/isaacs/minipass-fetch)`
+
+const INTERNALS = Symbol('Request internals')
+
+const { parse: parseUrl, format: formatUrl } = Url
+
+const isRequest = input =>
+ typeof input === 'object' && typeof input[INTERNALS] === 'object'
+
+const isAbortSignal = signal => {
+ const proto = (
+ signal
+ && typeof signal === 'object'
+ && Object.getPrototypeOf(signal)
+ )
+ return !!(proto && proto.constructor.name === 'AbortSignal')
+}
+
+class Request extends Body {
+ constructor (input, init = {}) {
+ const parsedURL = isRequest(input) ? Url.parse(input.url)
+ : input && input.href ? Url.parse(input.href)
+ : Url.parse(`${input}`)
+
+ if (!isRequest(input))
+ input = {}
+
+ const method = (init.method || input.method || 'GET').toUpperCase()
+ const isGETHEAD = method === 'GET' || method === 'HEAD'
+
+ if ((init.body !== null && init.body !== undefined ||
+ isRequest(input) && input.body !== null) && isGETHEAD)
+ throw new TypeError('Request with GET/HEAD method cannot have body')
+
+ const inputBody = init.body !== null && init.body !== undefined ? init.body
+ : isRequest(input) && input.body !== null ? clone(input)
+ : null
+
+ super(inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0,
+ })
+
+ const headers = new Headers(init.headers || input.headers || {})
+
+ if (inputBody !== null && inputBody !== undefined &&
+ !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody)
+ if (contentType)
+ headers.append('Content-Type', contentType)
+ }
+
+ const signal = 'signal' in init ? init.signal
+ : isRequest(input) ? input.signal
+ : null
+
+ if (signal !== null && signal !== undefined && !isAbortSignal(signal))
+ throw new TypeError('Expected signal must be an instanceof AbortSignal')
+
+ this[INTERNALS] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal,
+ }
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow
+ : input.follow !== undefined ? input.follow
+ : 20
+ this.compress = init.compress !== undefined ? init.compress
+ : input.compress !== undefined ? input.compress
+ : true
+ this.counter = init.counter || input.counter || 0
+ this.agent = init.agent || input.agent
+ }
+
+ get method() {
+ return this[INTERNALS].method;
+ }
+
+ get url() {
+ return formatUrl(this[INTERNALS].parsedURL);
+ }
+
+ get headers() {
+ return this[INTERNALS].headers;
+ }
+
+ get redirect() {
+ return this[INTERNALS].redirect;
+ }
+
+ get signal() {
+ return this[INTERNALS].signal;
+ }
+
+ clone () {
+ return new Request(this)
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Request'
+ }
+
+ static getNodeRequestOptions (request) {
+ const parsedURL = request[INTERNALS].parsedURL
+ const headers = new Headers(request[INTERNALS].headers)
+
+ // fetch step 1.3
+ if (!headers.has('Accept'))
+ headers.set('Accept', '*/*')
+
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname)
+ throw new TypeError('Only absolute URLs are supported')
+
+ if (!/^https?:$/.test(parsedURL.protocol))
+ throw new TypeError('Only HTTP(S) protocols are supported')
+
+ if (request.signal &&
+ Minipass.isStream(request.body) &&
+ typeof request.body.destroy !== 'function') {
+ throw new Error(
+ 'Cancellation of streamed requests with AbortSignal is not supported')
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ const contentLengthValue =
+ (request.body === null || request.body === undefined) &&
+ /^(POST|PUT)$/i.test(request.method) ? '0'
+ : request.body !== null && request.body !== undefined
+ ? getTotalBytes(request)
+ : null
+
+ if (contentLengthValue)
+ headers.set('Content-Length', contentLengthValue + '');
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent'))
+ headers.set('User-Agent', defaultUserAgent)
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding'))
+ headers.set('Accept-Encoding', 'gzip,deflate')
+
+ const agent = typeof request.agent === 'function'
+ ? request.agent(parsedURL)
+ : request.agent
+
+ if (!headers.has('Connection') && !agent)
+ headers.set('Connection', 'close');
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ return {
+ ...parsedURL,
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent,
+ }
+ }
+}
+
+module.exports = Request
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true },
+})
diff --git a/node_modules/minipass-fetch/lib/response.js b/node_modules/minipass-fetch/lib/response.js
new file mode 100644
index 000000000..854f789f8
--- /dev/null
+++ b/node_modules/minipass-fetch/lib/response.js
@@ -0,0 +1,89 @@
+'use strict'
+const http = require('http')
+const { STATUS_CODES } = http
+
+const Headers = require('./headers.js')
+const Body = require('./body.js')
+const { clone, extractContentType } = Body
+
+const INTERNALS = Symbol('Response internals')
+
+class Response extends Body {
+ constructor (body = null, opts = {}) {
+ super(body, opts)
+
+ const status = opts.status || 200
+ const headers = new Headers(opts.headers)
+
+ if (body !== null && body !== undefined && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body)
+ if (contentType)
+ headers.append('Content-Type', contentType)
+ }
+
+ this[INTERNALS] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter,
+ trailer: Promise.resolve(opts.trailer || new Headers()),
+ }
+ }
+
+ get trailer () {
+ return this[INTERNALS].trailer
+ }
+
+ get url () {
+ return this[INTERNALS].url || ''
+ }
+
+ get status () {
+ return this[INTERNALS].status
+ }
+
+ get ok () {
+ return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300
+ }
+
+ get redirected () {
+ return this[INTERNALS].counter > 0
+ }
+
+ get statusText () {
+ return this[INTERNALS].statusText
+ }
+
+ get headers () {
+ return this[INTERNALS].headers
+ }
+
+ clone () {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected,
+ trailer: this.trailer,
+ })
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Response'
+ }
+}
+
+module.exports = Response
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true },
+})
diff --git a/node_modules/minipass-fetch/node_modules/minipass/LICENSE b/node_modules/minipass-fetch/node_modules/minipass/LICENSE
new file mode 100644
index 000000000..20a476254
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minipass/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) npm, Inc. and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/minipass-fetch/node_modules/minipass/README.md b/node_modules/minipass-fetch/node_modules/minipass/README.md
new file mode 100644
index 000000000..32ace2fb9
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minipass/README.md
@@ -0,0 +1,606 @@
+# minipass
+
+A _very_ minimal implementation of a [PassThrough
+stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough)
+
+[It's very
+fast](https://docs.google.com/spreadsheets/d/1oObKSrVwLX_7Ut4Z6g3fZW-AX1j1-k6w-cDsrkaSbHM/edit#gid=0)
+for objects, strings, and buffers.
+
+Supports pipe()ing (including multi-pipe() and backpressure transmission),
+buffering data until either a `data` event handler or `pipe()` is added (so
+you don't lose the first chunk), and most other cases where PassThrough is
+a good idea.
+
+There is a `read()` method, but it's much more efficient to consume data
+from this stream via `'data'` events or by calling `pipe()` into some other
+stream. Calling `read()` requires the buffer to be flattened in some
+cases, which requires copying memory.
+
+There is also no `unpipe()` method. Once you start piping, there is no
+stopping it!
+
+If you set `objectMode: true` in the options, then whatever is written will
+be emitted. Otherwise, it'll do a minimal amount of Buffer copying to
+ensure proper Streams semantics when `read(n)` is called.
+
+`objectMode` can also be set by doing `stream.objectMode = true`, or by
+writing any non-string/non-buffer data. `objectMode` cannot be set to
+false once it is set.
+
+This is not a `through` or `through2` stream. It doesn't transform the
+data, it just passes it right through. If you want to transform the data,
+extend the class, and override the `write()` method. Once you're done
+transforming the data however you want, call `super.write()` with the
+transform output.
+
+For some examples of streams that extend Minipass in various ways, check
+out:
+
+- [minizlib](http://npm.im/minizlib)
+- [fs-minipass](http://npm.im/fs-minipass)
+- [tar](http://npm.im/tar)
+- [minipass-collect](http://npm.im/minipass-collect)
+- [minipass-flush](http://npm.im/minipass-flush)
+- [minipass-pipeline](http://npm.im/minipass-pipeline)
+- [tap](http://npm.im/tap)
+- [tap-parser](http://npm.im/tap)
+- [treport](http://npm.im/tap)
+- [minipass-fetch](http://npm.im/minipass-fetch)
+
+## Differences from Node.js Streams
+
+There are several things that make Minipass streams different from (and in
+some ways superior to) Node.js core streams.
+
+Please read these caveats if you are familiar with noode-core streams and
+intend to use Minipass streams in your programs.
+
+### Timing
+
+Minipass streams are designed to support synchronous use-cases. Thus, data
+is emitted as soon as it is available, always. It is buffered until read,
+but no longer. Another way to look at it is that Minipass streams are
+exactly as synchronous as the logic that writes into them.
+
+This can be surprising if your code relies on `PassThrough.write()` always
+providing data on the next tick rather than the current one, or being able
+to call `resume()` and not have the entire buffer disappear immediately.
+
+However, without this synchronicity guarantee, there would be no way for
+Minipass to achieve the speeds it does, or support the synchronous use
+cases that it does. Simply put, waiting takes time.
+
+This non-deferring approach makes Minipass streams much easier to reason
+about, especially in the context of Promises and other flow-control
+mechanisms.
+
+### No High/Low Water Marks
+
+Node.js core streams will optimistically fill up a buffer, returning `true`
+on all writes until the limit is hit, even if the data has nowhere to go.
+Then, they will not attempt to draw more data in until the buffer size dips
+below a minimum value.
+
+Minipass streams are much simpler. The `write()` method will return `true`
+if the data has somewhere to go (which is to say, given the timing
+guarantees, that the data is already there by the time `write()` returns).
+
+If the data has nowhere to go, then `write()` returns false, and the data
+sits in a buffer, to be drained out immediately as soon as anyone consumes
+it.
+
+### Hazards of Buffering (or: Why Minipass Is So Fast)
+
+Since data written to a Minipass stream is immediately written all the way
+through the pipeline, and `write()` always returns true/false based on
+whether the data was fully flushed, backpressure is communicated
+immediately to the upstream caller. This minimizes buffering.
+
+Consider this case:
+
+```js
+const {PassThrough} = require('stream')
+const p1 = new PassThrough({ highWaterMark: 1024 })
+const p2 = new PassThrough({ highWaterMark: 1024 })
+const p3 = new PassThrough({ highWaterMark: 1024 })
+const p4 = new PassThrough({ highWaterMark: 1024 })
+
+p1.pipe(p2).pipe(p3).pipe(p4)
+p4.on('data', () => console.log('made it through'))
+
+// this returns false and buffers, then writes to p2 on next tick (1)
+// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2)
+// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3)
+// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain'
+// on next tick (4)
+// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and
+// 'drain' on next tick (5)
+// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6)
+// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next
+// tick (7)
+
+p1.write(Buffer.alloc(2048)) // returns false
+```
+
+Along the way, the data was buffered and deferred at each stage, and
+multiple event deferrals happened, for an unblocked pipeline where it was
+perfectly safe to write all the way through!
+
+Furthermore, setting a `highWaterMark` of `1024` might lead someone reading
+the code to think an advisory maximum of 1KiB is being set for the
+pipeline. However, the actual advisory buffering level is the _sum_ of
+`highWaterMark` values, since each one has its own bucket.
+
+Consider the Minipass case:
+
+```js
+const m1 = new Minipass()
+const m2 = new Minipass()
+const m3 = new Minipass()
+const m4 = new Minipass()
+
+m1.pipe(m2).pipe(m3).pipe(m4)
+m4.on('data', () => console.log('made it through'))
+
+// m1 is flowing, so it writes the data to m2 immediately
+// m2 is flowing, so it writes the data to m3 immediately
+// m3 is flowing, so it writes the data to m4 immediately
+// m4 is flowing, so it fires the 'data' event immediately, returns true
+// m4's write returned true, so m3 is still flowing, returns true
+// m3's write returned true, so m2 is still flowing, returns true
+// m2's write returned true, so m1 is still flowing, returns true
+// No event deferrals or buffering along the way!
+
+m1.write(Buffer.alloc(2048)) // returns true
+```
+
+It is extremely unlikely that you _don't_ want to buffer any data written,
+or _ever_ buffer data that can be flushed all the way through. Neither
+node-core streams nor Minipass ever fail to buffer written data, but
+node-core streams do a lot of unnecessary buffering and pausing.
+
+As always, the faster implementation is the one that does less stuff and
+waits less time to do it.
+
+### Immediately emit `end` for empty streams (when not paused)
+
+If a stream is not paused, and `end()` is called before writing any data
+into it, then it will emit `end` immediately.
+
+If you have logic that occurs on the `end` event which you don't want to
+potentially happen immediately (for example, closing file descriptors,
+moving on to the next entry in an archive parse stream, etc.) then be sure
+to call `stream.pause()` on creation, and then `stream.resume()` once you
+are ready to respond to the `end` event.
+
+### Emit `end` When Asked
+
+One hazard of immediately emitting `'end'` is that you may not yet have had
+a chance to add a listener. In order to avoid this hazard, Minipass
+streams safely re-emit the `'end'` event if a new listener is added after
+`'end'` has been emitted.
+
+Ie, if you do `stream.on('end', someFunction)`, and the stream has already
+emitted `end`, then it will call the handler right away. (You can think of
+this somewhat like attaching a new `.then(fn)` to a previously-resolved
+Promise.)
+
+To prevent calling handlers multiple times who would not expect multiple
+ends to occur, all listeners are removed from the `'end'` event whenever it
+is emitted.
+
+### Impact of "immediate flow" on Tee-streams
+
+A "tee stream" is a stream piping to multiple destinations:
+
+```js
+const tee = new Minipass()
+t.pipe(dest1)
+t.pipe(dest2)
+t.write('foo') // goes to both destinations
+```
+
+Since Minipass streams _immediately_ process any pending data through the
+pipeline when a new pipe destination is added, this can have surprising
+effects, especially when a stream comes in from some other function and may
+or may not have data in its buffer.
+
+```js
+// WARNING! WILL LOSE DATA!
+const src = new Minipass()
+src.write('foo')
+src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone
+src.pipe(dest2) // gets nothing!
+```
+
+The solution is to create a dedicated tee-stream junction that pipes to
+both locations, and then pipe to _that_ instead.
+
+```js
+// Safe example: tee to both places
+const src = new Minipass()
+src.write('foo')
+const tee = new Minipass()
+tee.pipe(dest1)
+tee.pipe(dest2)
+stream.pipe(tee) // tee gets 'foo', pipes to both locations
+```
+
+The same caveat applies to `on('data')` event listeners. The first one
+added will _immediately_ receive all of the data, leaving nothing for the
+second:
+
+```js
+// WARNING! WILL LOSE DATA!
+const src = new Minipass()
+src.write('foo')
+src.on('data', handler1) // receives 'foo' right away
+src.on('data', handler2) // nothing to see here!
+```
+
+Using a dedicated tee-stream can be used in this case as well:
+
+```js
+// Safe example: tee to both data handlers
+const src = new Minipass()
+src.write('foo')
+const tee = new Minipass()
+tee.on('data', handler1)
+tee.on('data', handler2)
+src.pipe(tee)
+```
+
+## USAGE
+
+It's a stream! Use it like a stream and it'll most likely do what you
+want.
+
+```js
+const Minipass = require('minipass')
+const mp = new Minipass(options) // optional: { encoding, objectMode }
+mp.write('foo')
+mp.pipe(someOtherStream)
+mp.end('bar')
+```
+
+### OPTIONS
+
+* `encoding` How would you like the data coming _out_ of the stream to be
+ encoded? Accepts any values that can be passed to `Buffer.toString()`.
+* `objectMode` Emit data exactly as it comes in. This will be flipped on
+ by default if you write() something other than a string or Buffer at any
+ point. Setting `objectMode: true` will prevent setting any encoding
+ value.
+
+### API
+
+Implements the user-facing portions of Node.js's `Readable` and `Writable`
+streams.
+
+### Methods
+
+* `write(chunk, [encoding], [callback])` - Put data in. (Note that, in the
+ base Minipass class, the same data will come out.) Returns `false` if
+ the stream will buffer the next write, or true if it's still in "flowing"
+ mode.
+* `end([chunk, [encoding]], [callback])` - Signal that you have no more
+ data to write. This will queue an `end` event to be fired when all the
+ data has been consumed.
+* `setEncoding(encoding)` - Set the encoding for data coming of the stream.
+ This can only be done once.
+* `pause()` - No more data for a while, please. This also prevents `end`
+ from being emitted for empty streams until the stream is resumed.
+* `resume()` - Resume the stream. If there's data in the buffer, it is all
+ discarded. Any buffered events are immediately emitted.
+* `pipe(dest)` - Send all output to the stream provided. There is no way
+ to unpipe. When data is emitted, it is immediately written to any and
+ all pipe destinations.
+* `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are EventEmitters. Some
+ events are given special treatment, however. (See below under "events".)
+* `promise()` - Returns a Promise that resolves when the stream emits
+ `end`, or rejects if the stream emits `error`.
+* `collect()` - Return a Promise that resolves on `end` with an array
+ containing each chunk of data that was emitted, or rejects if the stream
+ emits `error`. Note that this consumes the stream data.
+* `concat()` - Same as `collect()`, but concatenates the data into a single
+ Buffer object. Will reject the returned promise if the stream is in
+ objectMode, or if it goes into objectMode by the end of the data.
+* `read(n)` - Consume `n` bytes of data out of the buffer. If `n` is not
+ provided, then consume all of it. If `n` bytes are not available, then
+ it returns null. **Note** consuming streams in this way is less
+ efficient, and can lead to unnecessary Buffer copying.
+* `destroy([er])` - Destroy the stream. If an error is provided, then an
+ `'error'` event is emitted. If the stream has a `close()` method, and
+ has not emitted a `'close'` event yet, then `stream.close()` will be
+ called. Any Promises returned by `.promise()`, `.collect()` or
+ `.concat()` will be rejected. After being destroyed, writing to the
+ stream will emit an error. No more data will be emitted if the stream is
+ destroyed, even if it was previously buffered.
+
+### Properties
+
+* `bufferLength` Read-only. Total number of bytes buffered, or in the case
+ of objectMode, the total number of objects.
+* `encoding` The encoding that has been set. (Setting this is equivalent
+ to calling `setEncoding(enc)` and has the same prohibition against
+ setting multiple times.)
+* `flowing` Read-only. Boolean indicating whether a chunk written to the
+ stream will be immediately emitted.
+* `emittedEnd` Read-only. Boolean indicating whether the end-ish events
+ (ie, `end`, `prefinish`, `finish`) have been emitted. Note that
+ listening on any end-ish event will immediateyl re-emit it if it has
+ already been emitted.
+* `writable` Whether the stream is writable. Default `true`. Set to
+ `false` when `end()`
+* `readable` Whether the stream is readable. Default `true`.
+* `buffer` A [yallist](http://npm.im/yallist) linked list of chunks written
+ to the stream that have not yet been emitted. (It's probably a bad idea
+ to mess with this.)
+* `pipes` A [yallist](http://npm.im/yallist) linked list of streams that
+ this stream is piping into. (It's probably a bad idea to mess with
+ this.)
+* `destroyed` A getter that indicates whether the stream was destroyed.
+* `paused` True if the stream has been explicitly paused, otherwise false.
+* `objectMode` Indicates whether the stream is in `objectMode`. Once set
+ to `true`, it cannot be set to `false`.
+
+### Events
+
+* `data` Emitted when there's data to read. Argument is the data to read.
+ This is never emitted while not flowing. If a listener is attached, that
+ will resume the stream.
+* `end` Emitted when there's no more data to read. This will be emitted
+ immediately for empty streams when `end()` is called. If a listener is
+ attached, and `end` was already emitted, then it will be emitted again.
+ All listeners are removed when `end` is emitted.
+* `prefinish` An end-ish event that follows the same logic as `end` and is
+ emitted in the same conditions where `end` is emitted. Emitted after
+ `'end'`.
+* `finish` An end-ish event that follows the same logic as `end` and is
+ emitted in the same conditions where `end` is emitted. Emitted after
+ `'prefinish'`.
+* `close` An indication that an underlying resource has been released.
+ Minipass does not emit this event, but will defer it until after `end`
+ has been emitted, since it throws off some stream libraries otherwise.
+* `drain` Emitted when the internal buffer empties, and it is again
+ suitable to `write()` into the stream.
+* `readable` Emitted when data is buffered and ready to be read by a
+ consumer.
+* `resume` Emitted when stream changes state from buffering to flowing
+ mode. (Ie, when `resume` is called, `pipe` is called, or a `data` event
+ listener is added.)
+
+### Static Methods
+
+* `Minipass.isStream(stream)` Returns `true` if the argument is a stream,
+ and false otherwise. To be considered a stream, the object must be
+ either an instance of Minipass, or an EventEmitter that has either a
+ `pipe()` method, or both `write()` and `end()` methods. (Pretty much any
+ stream in node-land will return `true` for this.)
+
+## EXAMPLES
+
+Here are some examples of things you can do with Minipass streams.
+
+### simple "are you done yet" promise
+
+```js
+mp.promise().then(() => {
+ // stream is finished
+}, er => {
+ // stream emitted an error
+})
+```
+
+### collecting
+
+```js
+mp.collect().then(all => {
+ // all is an array of all the data emitted
+ // encoding is supported in this case, so
+ // so the result will be a collection of strings if
+ // an encoding is specified, or buffers/objects if not.
+ //
+ // In an async function, you may do
+ // const data = await stream.collect()
+})
+```
+
+### collecting into a single blob
+
+This is a bit slower because it concatenates the data into one chunk for
+you, but if you're going to do it yourself anyway, it's convenient this
+way:
+
+```js
+mp.concat().then(onebigchunk => {
+ // onebigchunk is a string if the stream
+ // had an encoding set, or a buffer otherwise.
+})
+```
+
+### iteration
+
+You can iterate over streams synchronously or asynchronously in platforms
+that support it.
+
+Synchronous iteration will end when the currently available data is
+consumed, even if the `end` event has not been reached. In string and
+buffer mode, the data is concatenated, so unless multiple writes are
+occurring in the same tick as the `read()`, sync iteration loops will
+generally only have a single iteration.
+
+To consume chunks in this way exactly as they have been written, with no
+flattening, create the stream with the `{ objectMode: true }` option.
+
+```js
+const mp = new Minipass({ objectMode: true })
+mp.write('a')
+mp.write('b')
+for (let letter of mp) {
+ console.log(letter) // a, b
+}
+mp.write('c')
+mp.write('d')
+for (let letter of mp) {
+ console.log(letter) // c, d
+}
+mp.write('e')
+mp.end()
+for (let letter of mp) {
+ console.log(letter) // e
+}
+for (let letter of mp) {
+ console.log(letter) // nothing
+}
+```
+
+Asynchronous iteration will continue until the end event is reached,
+consuming all of the data.
+
+```js
+const mp = new Minipass({ encoding: 'utf8' })
+
+// some source of some data
+let i = 5
+const inter = setInterval(() => {
+ if (i --> 0)
+ mp.write(Buffer.from('foo\n', 'utf8'))
+ else {
+ mp.end()
+ clearInterval(inter)
+ }
+}, 100)
+
+// consume the data with asynchronous iteration
+async function consume () {
+ for await (let chunk of mp) {
+ console.log(chunk)
+ }
+ return 'ok'
+}
+
+consume().then(res => console.log(res))
+// logs `foo\n` 5 times, and then `ok`
+```
+
+### subclass that `console.log()`s everything written into it
+
+```js
+class Logger extends Minipass {
+ write (chunk, encoding, callback) {
+ console.log('WRITE', chunk, encoding)
+ return super.write(chunk, encoding, callback)
+ }
+ end (chunk, encoding, callback) {
+ console.log('END', chunk, encoding)
+ return super.end(chunk, encoding, callback)
+ }
+}
+
+someSource.pipe(new Logger()).pipe(someDest)
+```
+
+### same thing, but using an inline anonymous class
+
+```js
+// js classes are fun
+someSource
+ .pipe(new (class extends Minipass {
+ emit (ev, ...data) {
+ // let's also log events, because debugging some weird thing
+ console.log('EMIT', ev)
+ return super.emit(ev, ...data)
+ }
+ write (chunk, encoding, callback) {
+ console.log('WRITE', chunk, encoding)
+ return super.write(chunk, encoding, callback)
+ }
+ end (chunk, encoding, callback) {
+ console.log('END', chunk, encoding)
+ return super.end(chunk, encoding, callback)
+ }
+ }))
+ .pipe(someDest)
+```
+
+### subclass that defers 'end' for some reason
+
+```js
+class SlowEnd extends Minipass {
+ emit (ev, ...args) {
+ if (ev === 'end') {
+ console.log('going to end, hold on a sec')
+ setTimeout(() => {
+ console.log('ok, ready to end now')
+ super.emit('end', ...args)
+ }, 100)
+ } else {
+ return super.emit(ev, ...args)
+ }
+ }
+}
+```
+
+### transform that creates newline-delimited JSON
+
+```js
+class NDJSONEncode extends Minipass {
+ write (obj, cb) {
+ try {
+ // JSON.stringify can throw, emit an error on that
+ return super.write(JSON.stringify(obj) + '\n', 'utf8', cb)
+ } catch (er) {
+ this.emit('error', er)
+ }
+ }
+ end (obj, cb) {
+ if (typeof obj === 'function') {
+ cb = obj
+ obj = undefined
+ }
+ if (obj !== undefined) {
+ this.write(obj)
+ }
+ return super.end(cb)
+ }
+}
+```
+
+### transform that parses newline-delimited JSON
+
+```js
+class NDJSONDecode extends Minipass {
+ constructor (options) {
+ // always be in object mode, as far as Minipass is concerned
+ super({ objectMode: true })
+ this._jsonBuffer = ''
+ }
+ write (chunk, encoding, cb) {
+ if (typeof chunk === 'string' &&
+ typeof encoding === 'string' &&
+ encoding !== 'utf8') {
+ chunk = Buffer.from(chunk, encoding).toString()
+ } else if (Buffer.isBuffer(chunk))
+ chunk = chunk.toString()
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding
+ }
+ const jsonData = (this._jsonBuffer + chunk).split('\n')
+ this._jsonBuffer = jsonData.pop()
+ for (let i = 0; i < jsonData.length; i++) {
+ let parsed
+ try {
+ super.write(parsed)
+ } catch (er) {
+ this.emit('error', er)
+ continue
+ }
+ }
+ if (cb)
+ cb()
+ }
+}
+```
diff --git a/node_modules/minipass-fetch/node_modules/minipass/index.js b/node_modules/minipass-fetch/node_modules/minipass/index.js
new file mode 100644
index 000000000..55ea0f3dd
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minipass/index.js
@@ -0,0 +1,538 @@
+'use strict'
+const EE = require('events')
+const Stream = require('stream')
+const Yallist = require('yallist')
+const SD = require('string_decoder').StringDecoder
+
+const EOF = Symbol('EOF')
+const MAYBE_EMIT_END = Symbol('maybeEmitEnd')
+const EMITTED_END = Symbol('emittedEnd')
+const EMITTING_END = Symbol('emittingEnd')
+const CLOSED = Symbol('closed')
+const READ = Symbol('read')
+const FLUSH = Symbol('flush')
+const FLUSHCHUNK = Symbol('flushChunk')
+const ENCODING = Symbol('encoding')
+const DECODER = Symbol('decoder')
+const FLOWING = Symbol('flowing')
+const PAUSED = Symbol('paused')
+const RESUME = Symbol('resume')
+const BUFFERLENGTH = Symbol('bufferLength')
+const BUFFERPUSH = Symbol('bufferPush')
+const BUFFERSHIFT = Symbol('bufferShift')
+const OBJECTMODE = Symbol('objectMode')
+const DESTROYED = Symbol('destroyed')
+
+// TODO remove when Node v8 support drops
+const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1'
+const ASYNCITERATOR = doIter && Symbol.asyncIterator
+ || Symbol('asyncIterator not implemented')
+const ITERATOR = doIter && Symbol.iterator
+ || Symbol('iterator not implemented')
+
+// events that mean 'the stream is over'
+// these are treated specially, and re-emitted
+// if they are listened for after emitting.
+const isEndish = ev =>
+ ev === 'end' ||
+ ev === 'finish' ||
+ ev === 'prefinish'
+
+const isArrayBuffer = b => b instanceof ArrayBuffer ||
+ typeof b === 'object' &&
+ b.constructor &&
+ b.constructor.name === 'ArrayBuffer' &&
+ b.byteLength >= 0
+
+const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b)
+
+module.exports = class Minipass extends Stream {
+ constructor (options) {
+ super()
+ this[FLOWING] = false
+ // whether we're explicitly paused
+ this[PAUSED] = false
+ this.pipes = new Yallist()
+ this.buffer = new Yallist()
+ this[OBJECTMODE] = options && options.objectMode || false
+ if (this[OBJECTMODE])
+ this[ENCODING] = null
+ else
+ this[ENCODING] = options && options.encoding || null
+ if (this[ENCODING] === 'buffer')
+ this[ENCODING] = null
+ this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null
+ this[EOF] = false
+ this[EMITTED_END] = false
+ this[EMITTING_END] = false
+ this[CLOSED] = false
+ this.writable = true
+ this.readable = true
+ this[BUFFERLENGTH] = 0
+ this[DESTROYED] = false
+ }
+
+ get bufferLength () { return this[BUFFERLENGTH] }
+
+ get encoding () { return this[ENCODING] }
+ set encoding (enc) {
+ if (this[OBJECTMODE])
+ throw new Error('cannot set encoding in objectMode')
+
+ if (this[ENCODING] && enc !== this[ENCODING] &&
+ (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))
+ throw new Error('cannot change encoding')
+
+ if (this[ENCODING] !== enc) {
+ this[DECODER] = enc ? new SD(enc) : null
+ if (this.buffer.length)
+ this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk))
+ }
+
+ this[ENCODING] = enc
+ }
+
+ setEncoding (enc) {
+ this.encoding = enc
+ }
+
+ get objectMode () { return this[OBJECTMODE] }
+ set objectMode (ॐ ) { this[OBJECTMODE] = this[OBJECTMODE] || !!ॐ }
+
+ write (chunk, encoding, cb) {
+ if (this[EOF])
+ throw new Error('write after end')
+
+ if (this[DESTROYED]) {
+ this.emit('error', Object.assign(
+ new Error('Cannot call write after a stream was destroyed'),
+ { code: 'ERR_STREAM_DESTROYED' }
+ ))
+ return true
+ }
+
+ if (typeof encoding === 'function')
+ cb = encoding, encoding = 'utf8'
+
+ if (!encoding)
+ encoding = 'utf8'
+
+ // convert array buffers and typed array views into buffers
+ // at some point in the future, we may want to do the opposite!
+ // leave strings and buffers as-is
+ // anything else switches us into object mode
+ if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+ if (isArrayBufferView(chunk))
+ chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)
+ else if (isArrayBuffer(chunk))
+ chunk = Buffer.from(chunk)
+ else if (typeof chunk !== 'string')
+ // use the setter so we throw if we have encoding set
+ this.objectMode = true
+ }
+
+ // this ensures at this point that the chunk is a buffer or string
+ // don't buffer it up or send it to the decoder
+ if (!this.objectMode && !chunk.length) {
+ const ret = this.flowing
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit('readable')
+ if (cb)
+ cb()
+ return ret
+ }
+
+ // fast-path writing strings of same encoding to a stream with
+ // an empty buffer, skipping the buffer/decoder dance
+ if (typeof chunk === 'string' && !this[OBJECTMODE] &&
+ // unless it is a string already ready for us to use
+ !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) {
+ chunk = Buffer.from(chunk, encoding)
+ }
+
+ if (Buffer.isBuffer(chunk) && this[ENCODING])
+ chunk = this[DECODER].write(chunk)
+
+ try {
+ return this.flowing
+ ? (this.emit('data', chunk), this.flowing)
+ : (this[BUFFERPUSH](chunk), false)
+ } finally {
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit('readable')
+ if (cb)
+ cb()
+ }
+ }
+
+ read (n) {
+ if (this[DESTROYED])
+ return null
+
+ try {
+ if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH])
+ return null
+
+ if (this[OBJECTMODE])
+ n = null
+
+ if (this.buffer.length > 1 && !this[OBJECTMODE]) {
+ if (this.encoding)
+ this.buffer = new Yallist([
+ Array.from(this.buffer).join('')
+ ])
+ else
+ this.buffer = new Yallist([
+ Buffer.concat(Array.from(this.buffer), this[BUFFERLENGTH])
+ ])
+ }
+
+ return this[READ](n || null, this.buffer.head.value)
+ } finally {
+ this[MAYBE_EMIT_END]()
+ }
+ }
+
+ [READ] (n, chunk) {
+ if (n === chunk.length || n === null)
+ this[BUFFERSHIFT]()
+ else {
+ this.buffer.head.value = chunk.slice(n)
+ chunk = chunk.slice(0, n)
+ this[BUFFERLENGTH] -= n
+ }
+
+ this.emit('data', chunk)
+
+ if (!this.buffer.length && !this[EOF])
+ this.emit('drain')
+
+ return chunk
+ }
+
+ end (chunk, encoding, cb) {
+ if (typeof chunk === 'function')
+ cb = chunk, chunk = null
+ if (typeof encoding === 'function')
+ cb = encoding, encoding = 'utf8'
+ if (chunk)
+ this.write(chunk, encoding)
+ if (cb)
+ this.once('end', cb)
+ this[EOF] = true
+ this.writable = false
+
+ // if we haven't written anything, then go ahead and emit,
+ // even if we're not reading.
+ // we'll re-emit if a new 'end' listener is added anyway.
+ // This makes MP more suitable to write-only use cases.
+ if (this.flowing || !this[PAUSED])
+ this[MAYBE_EMIT_END]()
+ return this
+ }
+
+ // don't let the internal resume be overwritten
+ [RESUME] () {
+ if (this[DESTROYED])
+ return
+
+ this[PAUSED] = false
+ this[FLOWING] = true
+ this.emit('resume')
+ if (this.buffer.length)
+ this[FLUSH]()
+ else if (this[EOF])
+ this[MAYBE_EMIT_END]()
+ else
+ this.emit('drain')
+ }
+
+ resume () {
+ return this[RESUME]()
+ }
+
+ pause () {
+ this[FLOWING] = false
+ this[PAUSED] = true
+ }
+
+ get destroyed () {
+ return this[DESTROYED]
+ }
+
+ get flowing () {
+ return this[FLOWING]
+ }
+
+ get paused () {
+ return this[PAUSED]
+ }
+
+ [BUFFERPUSH] (chunk) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] += 1
+ else
+ this[BUFFERLENGTH] += chunk.length
+ return this.buffer.push(chunk)
+ }
+
+ [BUFFERSHIFT] () {
+ if (this.buffer.length) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] -= 1
+ else
+ this[BUFFERLENGTH] -= this.buffer.head.value.length
+ }
+ return this.buffer.shift()
+ }
+
+ [FLUSH] () {
+ do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]()))
+
+ if (!this.buffer.length && !this[EOF])
+ this.emit('drain')
+ }
+
+ [FLUSHCHUNK] (chunk) {
+ return chunk ? (this.emit('data', chunk), this.flowing) : false
+ }
+
+ pipe (dest, opts) {
+ if (this[DESTROYED])
+ return
+
+ const ended = this[EMITTED_END]
+ opts = opts || {}
+ if (dest === process.stdout || dest === process.stderr)
+ opts.end = false
+ else
+ opts.end = opts.end !== false
+
+ const p = { dest: dest, opts: opts, ondrain: _ => this[RESUME]() }
+ this.pipes.push(p)
+
+ dest.on('drain', p.ondrain)
+ this[RESUME]()
+ // piping an ended stream ends immediately
+ if (ended && p.opts.end)
+ p.dest.end()
+ return dest
+ }
+
+ addListener (ev, fn) {
+ return this.on(ev, fn)
+ }
+
+ on (ev, fn) {
+ try {
+ return super.on(ev, fn)
+ } finally {
+ if (ev === 'data' && !this.pipes.length && !this.flowing)
+ this[RESUME]()
+ else if (isEndish(ev) && this[EMITTED_END]) {
+ super.emit(ev)
+ this.removeAllListeners(ev)
+ }
+ }
+ }
+
+ get emittedEnd () {
+ return this[EMITTED_END]
+ }
+
+ [MAYBE_EMIT_END] () {
+ if (!this[EMITTING_END] &&
+ !this[EMITTED_END] &&
+ !this[DESTROYED] &&
+ this.buffer.length === 0 &&
+ this[EOF]) {
+ this[EMITTING_END] = true
+ this.emit('end')
+ this.emit('prefinish')
+ this.emit('finish')
+ if (this[CLOSED])
+ this.emit('close')
+ this[EMITTING_END] = false
+ }
+ }
+
+ emit (ev, data) {
+ // error and close are only events allowed after calling destroy()
+ if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED])
+ return
+ else if (ev === 'data') {
+ if (!data)
+ return
+
+ if (this.pipes.length)
+ this.pipes.forEach(p =>
+ p.dest.write(data) === false && this.pause())
+ } else if (ev === 'end') {
+ // only actual end gets this treatment
+ if (this[EMITTED_END] === true)
+ return
+
+ this[EMITTED_END] = true
+ this.readable = false
+
+ if (this[DECODER]) {
+ data = this[DECODER].end()
+ if (data) {
+ this.pipes.forEach(p => p.dest.write(data))
+ super.emit('data', data)
+ }
+ }
+
+ this.pipes.forEach(p => {
+ p.dest.removeListener('drain', p.ondrain)
+ if (p.opts.end)
+ p.dest.end()
+ })
+ } else if (ev === 'close') {
+ this[CLOSED] = true
+ // don't emit close before 'end' and 'finish'
+ if (!this[EMITTED_END] && !this[DESTROYED])
+ return
+ }
+
+ // TODO: replace with a spread operator when Node v4 support drops
+ const args = new Array(arguments.length)
+ args[0] = ev
+ args[1] = data
+ if (arguments.length > 2) {
+ for (let i = 2; i < arguments.length; i++) {
+ args[i] = arguments[i]
+ }
+ }
+
+ try {
+ return super.emit.apply(this, args)
+ } finally {
+ if (!isEndish(ev))
+ this[MAYBE_EMIT_END]()
+ else
+ this.removeAllListeners(ev)
+ }
+ }
+
+ // const all = await stream.collect()
+ collect () {
+ const buf = []
+ if (!this[OBJECTMODE])
+ buf.dataLength = 0
+ // set the promise first, in case an error is raised
+ // by triggering the flow here.
+ const p = this.promise()
+ this.on('data', c => {
+ buf.push(c)
+ if (!this[OBJECTMODE])
+ buf.dataLength += c.length
+ })
+ return p.then(() => buf)
+ }
+
+ // const data = await stream.concat()
+ concat () {
+ return this[OBJECTMODE]
+ ? Promise.reject(new Error('cannot concat in objectMode'))
+ : this.collect().then(buf =>
+ this[OBJECTMODE]
+ ? Promise.reject(new Error('cannot concat in objectMode'))
+ : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength))
+ }
+
+ // stream.promise().then(() => done, er => emitted error)
+ promise () {
+ return new Promise((resolve, reject) => {
+ this.on(DESTROYED, () => reject(new Error('stream destroyed')))
+ this.on('end', () => resolve())
+ this.on('error', er => reject(er))
+ })
+ }
+
+ // for await (let chunk of stream)
+ [ASYNCITERATOR] () {
+ const next = () => {
+ const res = this.read()
+ if (res !== null)
+ return Promise.resolve({ done: false, value: res })
+
+ if (this[EOF])
+ return Promise.resolve({ done: true })
+
+ let resolve = null
+ let reject = null
+ const onerr = er => {
+ this.removeListener('data', ondata)
+ this.removeListener('end', onend)
+ reject(er)
+ }
+ const ondata = value => {
+ this.removeListener('error', onerr)
+ this.removeListener('end', onend)
+ this.pause()
+ resolve({ value: value, done: !!this[EOF] })
+ }
+ const onend = () => {
+ this.removeListener('error', onerr)
+ this.removeListener('data', ondata)
+ resolve({ done: true })
+ }
+ const ondestroy = () => onerr(new Error('stream destroyed'))
+ return new Promise((res, rej) => {
+ reject = rej
+ resolve = res
+ this.once(DESTROYED, ondestroy)
+ this.once('error', onerr)
+ this.once('end', onend)
+ this.once('data', ondata)
+ })
+ }
+
+ return { next }
+ }
+
+ // for (let chunk of stream)
+ [ITERATOR] () {
+ const next = () => {
+ const value = this.read()
+ const done = value === null
+ return { value, done }
+ }
+ return { next }
+ }
+
+ destroy (er) {
+ if (this[DESTROYED]) {
+ if (er)
+ this.emit('error', er)
+ else
+ this.emit(DESTROYED)
+ return this
+ }
+
+ this[DESTROYED] = true
+
+ // throw away all buffered data, it's never coming out
+ this.buffer = new Yallist()
+ this[BUFFERLENGTH] = 0
+
+ if (typeof this.close === 'function' && !this[CLOSED])
+ this.close()
+
+ if (er)
+ this.emit('error', er)
+ else // if no error to emit, still reject pending promises
+ this.emit(DESTROYED)
+
+ return this
+ }
+
+ static isStream (s) {
+ return !!s && (s instanceof Minipass || s instanceof Stream ||
+ s instanceof EE && (
+ typeof s.pipe === 'function' || // readable
+ (typeof s.write === 'function' && typeof s.end === 'function') // writable
+ ))
+ }
+}
diff --git a/node_modules/minipass-fetch/node_modules/minipass/package.json b/node_modules/minipass-fetch/node_modules/minipass/package.json
new file mode 100644
index 000000000..15bbedd51
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minipass/package.json
@@ -0,0 +1,73 @@
+{
+ "_from": "minipass@^3.1.0",
+ "_id": "minipass@3.1.1",
+ "_inBundle": false,
+ "_integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
+ "_location": "/minipass-fetch/minipass",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "minipass@^3.1.0",
+ "name": "minipass",
+ "escapedName": "minipass",
+ "rawSpec": "^3.1.0",
+ "saveSpec": null,
+ "fetchSpec": "^3.1.0"
+ },
+ "_requiredBy": [
+ "/minipass-fetch",
+ "/minipass-fetch/minizlib"
+ ],
+ "_resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
+ "_shasum": "7607ce778472a185ad6d89082aa2070f79cedcd5",
+ "_spec": "minipass@^3.1.0",
+ "_where": "/Users/mperrotte/npminc/cli/node_modules/minipass-fetch",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/minipass/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "deprecated": false,
+ "description": "minimal implementation of a PassThrough stream",
+ "devDependencies": {
+ "end-of-stream": "^1.4.0",
+ "tap": "^14.6.5",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "files": [
+ "index.js"
+ ],
+ "homepage": "https://github.com/isaacs/minipass#readme",
+ "keywords": [
+ "passthrough",
+ "stream"
+ ],
+ "license": "ISC",
+ "main": "index.js",
+ "name": "minipass",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/minipass.git"
+ },
+ "scripts": {
+ "postpublish": "git push origin --follow-tags",
+ "postversion": "npm publish --tag=next",
+ "preversion": "npm test",
+ "test": "tap"
+ },
+ "tap": {
+ "check-coverage": true
+ },
+ "version": "3.1.1"
+}
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/LICENSE b/node_modules/minipass-fetch/node_modules/minizlib/LICENSE
new file mode 100644
index 000000000..ffce7383f
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minizlib/LICENSE
@@ -0,0 +1,26 @@
+Minizlib was created by Isaac Z. Schlueter.
+It is a derivative work of the Node.js project.
+
+"""
+Copyright Isaac Z. Schlueter and Contributors
+Copyright Node.js contributors. All rights reserved.
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/README.md b/node_modules/minipass-fetch/node_modules/minizlib/README.md
new file mode 100644
index 000000000..80e067ab3
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minizlib/README.md
@@ -0,0 +1,60 @@
+# minizlib
+
+A fast zlib stream built on [minipass](http://npm.im/minipass) and
+Node.js's zlib binding.
+
+This module was created to serve the needs of
+[node-tar](http://npm.im/tar) and
+[minipass-fetch](http://npm.im/minipass-fetch).
+
+Brotli is supported in versions of node with a Brotli binding.
+
+## How does this differ from the streams in `require('zlib')`?
+
+First, there are no convenience methods to compress or decompress a
+buffer. If you want those, use the built-in `zlib` module. This is
+only streams. That being said, Minipass streams to make it fairly easy to
+use as one-liners: `new zlib.Deflate().end(data).read()` will return the
+deflate compressed result.
+
+This module compresses and decompresses the data as fast as you feed
+it in. It is synchronous, and runs on the main process thread. Zlib
+and Brotli operations can be high CPU, but they're very fast, and doing it
+this way means much less bookkeeping and artificial deferral.
+
+Node's built in zlib streams are built on top of `stream.Transform`.
+They do the maximally safe thing with respect to consistent
+asynchrony, buffering, and backpressure.
+
+See [Minipass](http://npm.im/minipass) for more on the differences between
+Node.js core streams and Minipass streams, and the convenience methods
+provided by that class.
+
+## Classes
+
+- Deflate
+- Inflate
+- Gzip
+- Gunzip
+- DeflateRaw
+- InflateRaw
+- Unzip
+- BrotliCompress (Node v10 and higher)
+- BrotliDecompress (Node v10 and higher)
+
+## USAGE
+
+```js
+const zlib = require('minizlib')
+const input = sourceOfCompressedData()
+const decode = new zlib.BrotliDecompress()
+const output = whereToWriteTheDecodedData()
+input.pipe(decode).pipe(output)
+```
+
+## REPRODUCIBLE BUILDS
+
+To create reproducible gzip compressed files across different operating
+systems, set `portable: true` in the options. This causes minizlib to set
+the `OS` indicator in byte 9 of the extended gzip header to `0xFF` for
+'unknown'.
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/constants.js b/node_modules/minipass-fetch/node_modules/minizlib/constants.js
new file mode 100644
index 000000000..641ebc731
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minizlib/constants.js
@@ -0,0 +1,115 @@
+// Update with any zlib constants that are added or changed in the future.
+// Node v6 didn't export this, so we just hard code the version and rely
+// on all the other hard-coded values from zlib v4736. When node v6
+// support drops, we can just export the realZlibConstants object.
+const realZlibConstants = require('zlib').constants ||
+ /* istanbul ignore next */ { ZLIB_VERNUM: 4736 }
+
+module.exports = Object.freeze(Object.assign(Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31,
+}, realZlibConstants))
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/index.js b/node_modules/minipass-fetch/node_modules/minizlib/index.js
new file mode 100644
index 000000000..c84bda1b5
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minizlib/index.js
@@ -0,0 +1,338 @@
+'use strict'
+
+const assert = require('assert')
+const Buffer = require('buffer').Buffer
+const realZlib = require('zlib')
+
+const constants = exports.constants = require('./constants.js')
+const Minipass = require('minipass')
+
+const OriginalBufferConcat = Buffer.concat
+
+const _superWrite = Symbol('_superWrite')
+class ZlibError extends Error {
+ constructor (err) {
+ super('zlib: ' + err.message)
+ this.code = err.code
+ this.errno = err.errno
+ /* istanbul ignore if */
+ if (!this.code)
+ this.code = 'ZLIB_ERROR'
+
+ this.message = 'zlib: ' + err.message
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ get name () {
+ return 'ZlibError'
+ }
+}
+
+// the Zlib class they all inherit from
+// This thing manages the queue of requests, and returns
+// true or false if there is anything in the queue when
+// you call the .write() method.
+const _opts = Symbol('opts')
+const _flushFlag = Symbol('flushFlag')
+const _finishFlushFlag = Symbol('finishFlushFlag')
+const _fullFlushFlag = Symbol('fullFlushFlag')
+const _handle = Symbol('handle')
+const _onError = Symbol('onError')
+const _sawError = Symbol('sawError')
+const _level = Symbol('level')
+const _strategy = Symbol('strategy')
+const _ended = Symbol('ended')
+const _defaultFullFlush = Symbol('_defaultFullFlush')
+
+class ZlibBase extends Minipass {
+ constructor (opts, mode) {
+ if (!opts || typeof opts !== 'object')
+ throw new TypeError('invalid options for ZlibBase constructor')
+
+ super(opts)
+ this[_ended] = false
+ this[_opts] = opts
+
+ this[_flushFlag] = opts.flush
+ this[_finishFlushFlag] = opts.finishFlush
+ // this will throw if any options are invalid for the class selected
+ try {
+ this[_handle] = new realZlib[mode](opts)
+ } catch (er) {
+ // make sure that all errors get decorated properly
+ throw new ZlibError(er)
+ }
+
+ this[_onError] = (err) => {
+ this[_sawError] = true
+ // there is no way to cleanly recover.
+ // continuing only obscures problems.
+ this.close()
+ this.emit('error', err)
+ }
+
+ this[_handle].on('error', er => this[_onError](new ZlibError(er)))
+ this.once('end', () => this.close)
+ }
+
+ close () {
+ if (this[_handle]) {
+ this[_handle].close()
+ this[_handle] = null
+ this.emit('close')
+ }
+ }
+
+ reset () {
+ if (!this[_sawError]) {
+ assert(this[_handle], 'zlib binding closed')
+ return this[_handle].reset()
+ }
+ }
+
+ flush (flushFlag) {
+ if (this.ended)
+ return
+
+ if (typeof flushFlag !== 'number')
+ flushFlag = this[_fullFlushFlag]
+ this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }))
+ }
+
+ end (chunk, encoding, cb) {
+ if (chunk)
+ this.write(chunk, encoding)
+ this.flush(this[_finishFlushFlag])
+ this[_ended] = true
+ return super.end(null, null, cb)
+ }
+
+ get ended () {
+ return this[_ended]
+ }
+
+ write (chunk, encoding, cb) {
+ // process the chunk using the sync process
+ // then super.write() all the outputted chunks
+ if (typeof encoding === 'function')
+ cb = encoding, encoding = 'utf8'
+
+ if (typeof chunk === 'string')
+ chunk = Buffer.from(chunk, encoding)
+
+ if (this[_sawError])
+ return
+ assert(this[_handle], 'zlib binding closed')
+
+ // _processChunk tries to .close() the native handle after it's done, so we
+ // intercept that by temporarily making it a no-op.
+ const nativeHandle = this[_handle]._handle
+ const originalNativeClose = nativeHandle.close
+ nativeHandle.close = () => {}
+ const originalClose = this[_handle].close
+ this[_handle].close = () => {}
+ // It also calls `Buffer.concat()` at the end, which may be convenient
+ // for some, but which we are not interested in as it slows us down.
+ Buffer.concat = (args) => args
+ let result
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === 'number'
+ ? chunk[_flushFlag] : this[_flushFlag]
+ result = this[_handle]._processChunk(chunk, flushFlag)
+ // if we don't throw, reset it back how it was
+ Buffer.concat = OriginalBufferConcat
+ } catch (err) {
+ // or if we do, put Buffer.concat() back before we emit error
+ // Error events call into user code, which may call Buffer.concat()
+ Buffer.concat = OriginalBufferConcat
+ this[_onError](new ZlibError(err))
+ } finally {
+ if (this[_handle]) {
+ // Core zlib resets `_handle` to null after attempting to close the
+ // native handle. Our no-op handler prevented actual closure, but we
+ // need to restore the `._handle` property.
+ this[_handle]._handle = nativeHandle
+ nativeHandle.close = originalNativeClose
+ this[_handle].close = originalClose
+ // `_processChunk()` adds an 'error' listener. If we don't remove it
+ // after each call, these handlers start piling up.
+ this[_handle].removeAllListeners('error')
+ }
+ }
+
+ let writeReturn
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ // The first buffer is always `handle._outBuffer`, which would be
+ // re-used for later invocations; so, we always have to copy that one.
+ writeReturn = this[_superWrite](Buffer.from(result[0]))
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i])
+ }
+ } else {
+ writeReturn = this[_superWrite](Buffer.from(result))
+ }
+ }
+
+ if (cb)
+ cb()
+ return writeReturn
+ }
+
+ [_superWrite] (data) {
+ return super.write(data)
+ }
+}
+
+class Zlib extends ZlibBase {
+ constructor (opts, mode) {
+ opts = opts || {}
+
+ opts.flush = opts.flush || constants.Z_NO_FLUSH
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH
+ super(opts, mode)
+
+ this[_fullFlushFlag] = constants.Z_FULL_FLUSH
+ this[_level] = opts.level
+ this[_strategy] = opts.strategy
+ }
+
+ params (level, strategy) {
+ if (this[_sawError])
+ return
+
+ if (!this[_handle])
+ throw new Error('cannot switch params when binding is closed')
+
+ // no way to test this without also not supporting params at all
+ /* istanbul ignore if */
+ if (!this[_handle].params)
+ throw new Error('not supported in this implementation')
+
+ if (this[_level] !== level || this[_strategy] !== strategy) {
+ this.flush(constants.Z_SYNC_FLUSH)
+ assert(this[_handle], 'zlib binding closed')
+ // .params() calls .flush(), but the latter is always async in the
+ // core zlib. We override .flush() temporarily to intercept that and
+ // flush synchronously.
+ const origFlush = this[_handle].flush
+ this[_handle].flush = (flushFlag, cb) => {
+ this.flush(flushFlag)
+ cb()
+ }
+ try {
+ this[_handle].params(level, strategy)
+ } finally {
+ this[_handle].flush = origFlush
+ }
+ /* istanbul ignore else */
+ if (this[_handle]) {
+ this[_level] = level
+ this[_strategy] = strategy
+ }
+ }
+ }
+}
+
+// minimal 2-byte header
+class Deflate extends Zlib {
+ constructor (opts) {
+ super(opts, 'Deflate')
+ }
+}
+
+class Inflate extends Zlib {
+ constructor (opts) {
+ super(opts, 'Inflate')
+ }
+}
+
+// gzip - bigger header, same deflate compression
+const _portable = Symbol('_portable')
+class Gzip extends Zlib {
+ constructor (opts) {
+ super(opts, 'Gzip')
+ this[_portable] = opts && !!opts.portable
+ }
+
+ [_superWrite] (data) {
+ if (!this[_portable])
+ return super[_superWrite](data)
+
+ // we'll always get the header emitted in one first chunk
+ // overwrite the OS indicator byte with 0xFF
+ this[_portable] = false
+ data[9] = 255
+ return super[_superWrite](data)
+ }
+}
+
+class Gunzip extends Zlib {
+ constructor (opts) {
+ super(opts, 'Gunzip')
+ }
+}
+
+// raw - no header
+class DeflateRaw extends Zlib {
+ constructor (opts) {
+ super(opts, 'DeflateRaw')
+ }
+}
+
+class InflateRaw extends Zlib {
+ constructor (opts) {
+ super(opts, 'InflateRaw')
+ }
+}
+
+// auto-detect header.
+class Unzip extends Zlib {
+ constructor (opts) {
+ super(opts, 'Unzip')
+ }
+}
+
+class Brotli extends ZlibBase {
+ constructor (opts, mode) {
+ opts = opts || {}
+
+ opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS
+ opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH
+
+ super(opts, mode)
+
+ this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH
+ }
+}
+
+class BrotliCompress extends Brotli {
+ constructor (opts) {
+ super(opts, 'BrotliCompress')
+ }
+}
+
+class BrotliDecompress extends Brotli {
+ constructor (opts) {
+ super(opts, 'BrotliDecompress')
+ }
+}
+
+exports.Deflate = Deflate
+exports.Inflate = Inflate
+exports.Gzip = Gzip
+exports.Gunzip = Gunzip
+exports.DeflateRaw = DeflateRaw
+exports.InflateRaw = InflateRaw
+exports.Unzip = Unzip
+/* istanbul ignore else */
+if (typeof realZlib.BrotliCompress === 'function') {
+ exports.BrotliCompress = BrotliCompress
+ exports.BrotliDecompress = BrotliDecompress
+} else {
+ exports.BrotliCompress = exports.BrotliDecompress = class {
+ constructor () {
+ throw new Error('Brotli is not supported in this version of Node.js')
+ }
+ }
+}
diff --git a/node_modules/minipass-fetch/node_modules/minizlib/package.json b/node_modules/minipass-fetch/node_modules/minizlib/package.json
new file mode 100644
index 000000000..7d5a9e7ff
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/minizlib/package.json
@@ -0,0 +1,75 @@
+{
+ "_from": "minizlib@^2.0.0",
+ "_id": "minizlib@2.1.0",
+ "_inBundle": false,
+ "_integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==",
+ "_location": "/minipass-fetch/minizlib",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "minizlib@^2.0.0",
+ "name": "minizlib",
+ "escapedName": "minizlib",
+ "rawSpec": "^2.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^2.0.0"
+ },
+ "_requiredBy": [
+ "/minipass-fetch"
+ ],
+ "_resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz",
+ "_shasum": "fd52c645301ef09a63a2c209697c294c6ce02cf3",
+ "_spec": "minizlib@^2.0.0",
+ "_where": "/Users/mperrotte/npminc/cli/node_modules/minipass-fetch",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/minizlib/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "deprecated": false,
+ "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.",
+ "devDependencies": {
+ "tap": "^14.6.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ },
+ "files": [
+ "index.js",
+ "constants.js"
+ ],
+ "homepage": "https://github.com/isaacs/minizlib#readme",
+ "keywords": [
+ "zlib",
+ "gzip",
+ "gunzip",
+ "deflate",
+ "inflate",
+ "compression",
+ "zip",
+ "unzip"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "minizlib",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/minizlib.git"
+ },
+ "scripts": {
+ "postpublish": "git push origin --all; git push origin --tags",
+ "postversion": "npm publish",
+ "preversion": "npm test",
+ "test": "tap test/*.js --100 -J"
+ },
+ "version": "2.1.0"
+}
diff --git a/node_modules/minipass-fetch/node_modules/yallist/LICENSE b/node_modules/minipass-fetch/node_modules/yallist/LICENSE
new file mode 100644
index 000000000..19129e315
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/yallist/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/minipass-fetch/node_modules/yallist/README.md b/node_modules/minipass-fetch/node_modules/yallist/README.md
new file mode 100644
index 000000000..f58610186
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/yallist/README.md
@@ -0,0 +1,204 @@
+# yallist
+
+Yet Another Linked List
+
+There are many doubly-linked list implementations like it, but this
+one is mine.
+
+For when an array would be too big, and a Map can't be iterated in
+reverse order.
+
+
+[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist)
+
+## basic usage
+
+```javascript
+var yallist = require('yallist')
+var myList = yallist.create([1, 2, 3])
+myList.push('foo')
+myList.unshift('bar')
+// of course pop() and shift() are there, too
+console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo']
+myList.forEach(function (k) {
+ // walk the list head to tail
+})
+myList.forEachReverse(function (k, index, list) {
+ // walk the list tail to head
+})
+var myDoubledList = myList.map(function (k) {
+ return k + k
+})
+// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo']
+// mapReverse is also a thing
+var myDoubledListReverse = myList.mapReverse(function (k) {
+ return k + k
+}) // ['foofoo', 6, 4, 2, 'barbar']
+
+var reduced = myList.reduce(function (set, entry) {
+ set += entry
+ return set
+}, 'start')
+console.log(reduced) // 'startfoo123bar'
+```
+
+## api
+
+The whole API is considered "public".
+
+Functions with the same name as an Array method work more or less the
+same way.
+
+There's reverse versions of most things because that's the point.
+
+### Yallist
+
+Default export, the class that holds and manages a list.
+
+Call it with either a forEach-able (like an array) or a set of
+arguments, to initialize the list.
+
+The Array-ish methods all act like you'd expect. No magic length,
+though, so if you change that it won't automatically prune or add
+empty spots.
+
+### Yallist.create(..)
+
+Alias for Yallist function. Some people like factories.
+
+#### yallist.head
+
+The first node in the list
+
+#### yallist.tail
+
+The last node in the list
+
+#### yallist.length
+
+The number of nodes in the list. (Change this at your peril. It is
+not magic like Array length.)
+
+#### yallist.toArray()
+
+Convert the list to an array.
+
+#### yallist.forEach(fn, [thisp])
+
+Call a function on each item in the list.
+
+#### yallist.forEachReverse(fn, [thisp])
+
+Call a function on each item in the list, in reverse order.
+
+#### yallist.get(n)
+
+Get the data at position `n` in the list. If you use this a lot,
+probably better off just using an Array.
+
+#### yallist.getReverse(n)
+
+Get the data at position `n`, counting from the tail.
+
+#### yallist.map(fn, thisp)
+
+Create a new Yallist with the result of calling the function on each
+item.
+
+#### yallist.mapReverse(fn, thisp)
+
+Same as `map`, but in reverse.
+
+#### yallist.pop()
+
+Get the data from the list tail, and remove the tail from the list.
+
+#### yallist.push(item, ...)
+
+Insert one or more items to the tail of the list.
+
+#### yallist.reduce(fn, initialValue)
+
+Like Array.reduce.
+
+#### yallist.reduceReverse
+
+Like Array.reduce, but in reverse.
+
+#### yallist.reverse
+
+Reverse the list in place.
+
+#### yallist.shift()
+
+Get the data from the list head, and remove the head from the list.
+
+#### yallist.slice([from], [to])
+
+Just like Array.slice, but returns a new Yallist.
+
+#### yallist.sliceReverse([from], [to])
+
+Just like yallist.slice, but the result is returned in reverse.
+
+#### yallist.toArray()
+
+Create an array representation of the list.
+
+#### yallist.toArrayReverse()
+
+Create a reversed array representation of the list.
+
+#### yallist.unshift(item, ...)
+
+Insert one or more items to the head of the list.
+
+#### yallist.unshiftNode(node)
+
+Move a Node object to the front of the list. (That is, pull it out of
+wherever it lives, and make it the new head.)
+
+If the node belongs to a different list, then that list will remove it
+first.
+
+#### yallist.pushNode(node)
+
+Move a Node object to the end of the list. (That is, pull it out of
+wherever it lives, and make it the new tail.)
+
+If the node belongs to a list already, then that list will remove it
+first.
+
+#### yallist.removeNode(node)
+
+Remove a node from the list, preserving referential integrity of head
+and tail and other nodes.
+
+Will throw an error if you try to have a list remove a node that
+doesn't belong to it.
+
+### Yallist.Node
+
+The class that holds the data and is actually the list.
+
+Call with `var n = new Node(value, previousNode, nextNode)`
+
+Note that if you do direct operations on Nodes themselves, it's very
+easy to get into weird states where the list is broken. Be careful :)
+
+#### node.next
+
+The next node in the list.
+
+#### node.prev
+
+The previous node in the list.
+
+#### node.value
+
+The data the node contains.
+
+#### node.list
+
+The list to which this node belongs. (Null if it does not belong to
+any list.)
diff --git a/node_modules/minipass-fetch/node_modules/yallist/iterator.js b/node_modules/minipass-fetch/node_modules/yallist/iterator.js
new file mode 100644
index 000000000..d41c97a19
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/yallist/iterator.js
@@ -0,0 +1,8 @@
+'use strict'
+module.exports = function (Yallist) {
+ Yallist.prototype[Symbol.iterator] = function* () {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value
+ }
+ }
+}
diff --git a/node_modules/minipass-fetch/node_modules/yallist/package.json b/node_modules/minipass-fetch/node_modules/yallist/package.json
new file mode 100644
index 000000000..c9f4b90e2
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/yallist/package.json
@@ -0,0 +1,63 @@
+{
+ "_from": "yallist@^4.0.0",
+ "_id": "yallist@4.0.0",
+ "_inBundle": false,
+ "_integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "_location": "/minipass-fetch/yallist",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "yallist@^4.0.0",
+ "name": "yallist",
+ "escapedName": "yallist",
+ "rawSpec": "^4.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^4.0.0"
+ },
+ "_requiredBy": [
+ "/minipass-fetch/minipass",
+ "/minipass-fetch/minizlib"
+ ],
+ "_resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "_shasum": "9bb92790d9c0effec63be73519e11a35019a3a72",
+ "_spec": "yallist@^4.0.0",
+ "_where": "/Users/mperrotte/npminc/cli/node_modules/minipass-fetch/node_modules/minipass",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/yallist/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {},
+ "deprecated": false,
+ "description": "Yet Another Linked List",
+ "devDependencies": {
+ "tap": "^12.1.0"
+ },
+ "directories": {
+ "test": "test"
+ },
+ "files": [
+ "yallist.js",
+ "iterator.js"
+ ],
+ "homepage": "https://github.com/isaacs/yallist#readme",
+ "license": "ISC",
+ "main": "yallist.js",
+ "name": "yallist",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/yallist.git"
+ },
+ "scripts": {
+ "postpublish": "git push origin --all; git push origin --tags",
+ "postversion": "npm publish",
+ "preversion": "npm test",
+ "test": "tap test/*.js --100"
+ },
+ "version": "4.0.0"
+}
diff --git a/node_modules/minipass-fetch/node_modules/yallist/yallist.js b/node_modules/minipass-fetch/node_modules/yallist/yallist.js
new file mode 100644
index 000000000..4e83ab1c5
--- /dev/null
+++ b/node_modules/minipass-fetch/node_modules/yallist/yallist.js
@@ -0,0 +1,426 @@
+'use strict'
+module.exports = Yallist
+
+Yallist.Node = Node
+Yallist.create = Yallist
+
+function Yallist (list) {
+ var self = this
+ if (!(self instanceof Yallist)) {
+ self = new Yallist()
+ }
+
+ self.tail = null
+ self.head = null
+ self.length = 0
+
+ if (list && typeof list.forEach === 'function') {
+ list.forEach(function (item) {
+ self.push(item)
+ })
+ } else if (arguments.length > 0) {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ self.push(arguments[i])
+ }
+ }
+
+ return self
+}
+
+Yallist.prototype.removeNode = function (node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list')
+ }
+
+ var next = node.next
+ var prev = node.prev
+
+ if (next) {
+ next.prev = prev
+ }
+
+ if (prev) {
+ prev.next = next
+ }
+
+ if (node === this.head) {
+ this.head = next
+ }
+ if (node === this.tail) {
+ this.tail = prev
+ }
+
+ node.list.length--
+ node.next = null
+ node.prev = null
+ node.list = null
+
+ return next
+}
+
+Yallist.prototype.unshiftNode = function (node) {
+ if (node === this.head) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node)
+ }
+
+ var head = this.head
+ node.list = this
+ node.next = head
+ if (head) {
+ head.prev = node
+ }
+
+ this.head = node
+ if (!this.tail) {
+ this.tail = node
+ }
+ this.length++
+}
+
+Yallist.prototype.pushNode = function (node) {
+ if (node === this.tail) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node)
+ }
+
+ var tail = this.tail
+ node.list = this
+ node.prev = tail
+ if (tail) {
+ tail.next = node
+ }
+
+ this.tail = node
+ if (!this.head) {
+ this.head = node
+ }
+ this.length++
+}
+
+Yallist.prototype.push = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ push(this, arguments[i])
+ }
+ return this.length
+}
+
+Yallist.prototype.unshift = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ unshift(this, arguments[i])
+ }
+ return this.length
+}
+
+Yallist.prototype.pop = function () {
+ if (!this.tail) {
+ return undefined
+ }
+
+ var res = this.tail.value
+ this.tail = this.tail.prev
+ if (this.tail) {
+ this.tail.next = null
+ } else {
+ this.head = null
+ }
+ this.length--
+ return res
+}
+
+Yallist.prototype.shift = function () {
+ if (!this.head) {
+ return undefined
+ }
+
+ var res = this.head.value
+ this.head = this.head.next
+ if (this.head) {
+ this.head.prev = null
+ } else {
+ this.tail = null
+ }
+ this.length--
+ return res
+}
+
+Yallist.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this
+ for (var walker = this.head, i = 0; walker !== null; i++) {
+ fn.call(thisp, walker.value, i, this)
+ walker = walker.next
+ }
+}
+
+Yallist.prototype.forEachReverse = function (fn, thisp) {
+ thisp = thisp || this
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
+ fn.call(thisp, walker.value, i, this)
+ walker = walker.prev
+ }
+}
+
+Yallist.prototype.get = function (n) {
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.next
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+}
+
+Yallist.prototype.getReverse = function (n) {
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
+ // abort out of the list early if we hit a cycle
+ walker = walker.prev
+ }
+ if (i === n && walker !== null) {
+ return walker.value
+ }
+}
+
+Yallist.prototype.map = function (fn, thisp) {
+ thisp = thisp || this
+ var res = new Yallist()
+ for (var walker = this.head; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this))
+ walker = walker.next
+ }
+ return res
+}
+
+Yallist.prototype.mapReverse = function (fn, thisp) {
+ thisp = thisp || this
+ var res = new Yallist()
+ for (var walker = this.tail; walker !== null;) {
+ res.push(fn.call(thisp, walker.value, this))
+ walker = walker.prev
+ }
+ return res
+}
+
+Yallist.prototype.reduce = function (fn, initial) {
+ var acc
+ var walker = this.head
+ if (arguments.length > 1) {
+ acc = initial
+ } else if (this.head) {
+ walker = this.head.next
+ acc = this.head.value
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = 0; walker !== null; i++) {
+ acc = fn(acc, walker.value, i)
+ walker = walker.next
+ }
+
+ return acc
+}
+
+Yallist.prototype.reduceReverse = function (fn, initial) {
+ var acc
+ var walker = this.tail
+ if (arguments.length > 1) {
+ acc = initial
+ } else if (this.tail) {
+ walker = this.tail.prev
+ acc = this.tail.value
+ } else {
+ throw new TypeError('Reduce of empty list with no initial value')
+ }
+
+ for (var i = this.length - 1; walker !== null; i--) {
+ acc = fn(acc, walker.value, i)
+ walker = walker.prev
+ }
+
+ return acc
+}
+
+Yallist.prototype.toArray = function () {
+ var arr = new Array(this.length)
+ for (var i = 0, walker = this.head; walker !== null; i++) {
+ arr[i] = walker.value
+ walker = walker.next
+ }
+ return arr
+}
+
+Yallist.prototype.toArrayReverse = function () {
+ var arr = new Array(this.length)
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
+ arr[i] = walker.value
+ walker = walker.prev
+ }
+ return arr
+}
+
+Yallist.prototype.slice = function (from, to) {
+ to = to || this.length
+ if (to < 0) {
+ to += this.length
+ }
+ from = from || 0
+ if (from < 0) {
+ from += this.length
+ }
+ var ret = new Yallist()
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0
+ }
+ if (to > this.length) {
+ to = this.length
+ }
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
+ walker = walker.next
+ }
+ for (; walker !== null && i < to; i++, walker = walker.next) {
+ ret.push(walker.value)
+ }
+ return ret
+}
+
+Yallist.prototype.sliceReverse = function (from, to) {
+ to = to || this.length
+ if (to < 0) {
+ to += this.length
+ }
+ from = from || 0
+ if (from < 0) {
+ from += this.length
+ }
+ var ret = new Yallist()
+ if (to < from || to < 0) {
+ return ret
+ }
+ if (from < 0) {
+ from = 0
+ }
+ if (to > this.length) {
+ to = this.length
+ }
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
+ walker = walker.prev
+ }
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value)
+ }
+ return ret
+}
+
+Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
+ walker = walker.next
+ }
+
+ var ret = []
+ for (var i = 0; walker && i < deleteCount; i++) {
+ ret.push(walker.value)
+ walker = this.removeNode(walker)
+ }
+ if (walker === null) {
+ walker = this.tail
+ }
+
+ if (walker !== this.head && walker !== this.tail) {
+ walker = walker.prev
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ walker = insert(this, walker, nodes[i])
+ }
+ return ret;
+}
+
+Yallist.prototype.reverse = function () {
+ var head = this.head
+ var tail = this.tail
+ for (var walker = head; walker !== null; walker = walker.prev) {
+ var p = walker.prev
+ walker.prev = walker.next
+ walker.next = p
+ }
+ this.head = tail
+ this.tail = head
+ return this
+}
+
+function insert (self, node, value) {
+ var inserted = node === self.head ?
+ new Node(value, null, node, self) :
+ new Node(value, node, node.next, self)
+
+ if (inserted.next === null) {
+ self.tail = inserted
+ }
+ if (inserted.prev === null) {
+ self.head = inserted
+ }
+
+ self.length++
+
+ return inserted
+}
+
+function push (self, item) {
+ self.tail = new Node(item, self.tail, null, self)
+ if (!self.head) {
+ self.head = self.tail
+ }
+ self.length++
+}
+
+function unshift (self, item) {
+ self.head = new Node(item, null, self.head, self)
+ if (!self.tail) {
+ self.tail = self.head
+ }
+ self.length++
+}
+
+function Node (value, prev, next, list) {
+ if (!(this instanceof Node)) {
+ return new Node(value, prev, next, list)
+ }
+
+ this.list = list
+ this.value = value
+
+ if (prev) {
+ prev.next = this
+ this.prev = prev
+ } else {
+ this.prev = null
+ }
+
+ if (next) {
+ next.prev = this
+ this.next = next
+ } else {
+ this.next = null
+ }
+}
+
+try {
+ // add if support for Symbol.iterator is present
+ require('./iterator.js')(Yallist)
+} catch (er) {}
diff --git a/node_modules/minipass-fetch/package.json b/node_modules/minipass-fetch/package.json
new file mode 100644
index 000000000..98effa224
--- /dev/null
+++ b/node_modules/minipass-fetch/package.json
@@ -0,0 +1,85 @@
+{
+ "_from": "minipass-fetch@^1.1.2",
+ "_id": "minipass-fetch@1.2.1",
+ "_inBundle": false,
+ "_integrity": "sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg==",
+ "_location": "/minipass-fetch",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "minipass-fetch@^1.1.2",
+ "name": "minipass-fetch",
+ "escapedName": "minipass-fetch",
+ "rawSpec": "^1.1.2",
+ "saveSpec": null,
+ "fetchSpec": "^1.1.2"
+ },
+ "_requiredBy": [
+ "/npm-registry-fetch",
+ "/npm-registry-fetch/make-fetch-happen"
+ ],
+ "_resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.2.1.tgz",
+ "_shasum": "1b97ecb559be56b09812d45b2e9509f1f59ece2f",
+ "_spec": "minipass-fetch@^1.1.2",
+ "_where": "/Users/mperrotte/npminc/cli/node_modules/npm-registry-fetch",
+ "bugs": {
+ "url": "https://github.com/npm/minipass-fetch/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "encoding": "^0.1.12",
+ "minipass": "^3.1.0",
+ "minipass-pipeline": "^1.2.2",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "deprecated": false,
+ "description": "An implementation of window.fetch in Node.js using Minipass streams",
+ "devDependencies": {
+ "@ungap/url-search-params": "^0.1.2",
+ "abort-controller": "^3.0.0",
+ "abortcontroller-polyfill": "^1.3.0",
+ "form-data": "^2.5.1",
+ "parted": "^0.1.1",
+ "string-to-arraybuffer": "^1.0.2",
+ "tap": "^14.6.9",
+ "whatwg-url": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "files": [
+ "index.js",
+ "lib/*.js"
+ ],
+ "homepage": "https://github.com/npm/minipass-fetch#readme",
+ "keywords": [
+ "fetch",
+ "minipass",
+ "node-fetch",
+ "window.fetch"
+ ],
+ "license": "MIT",
+ "main": "lib/index.js",
+ "name": "minipass-fetch",
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/minipass-fetch.git"
+ },
+ "scripts": {
+ "postpublish": "git push origin --follow-tags",
+ "postversion": "npm publish",
+ "preversion": "npm test",
+ "snap": "tap",
+ "test": "tap"
+ },
+ "tap": {
+ "coverage-map": "map.js",
+ "check-coverage": true
+ },
+ "version": "1.2.1"
+}