diff options
Diffstat (limited to 'deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src')
8 files changed, 0 insertions, 1402 deletions
diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/blob.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/blob.js deleted file mode 100644 index 0a4462abd6..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/blob.js +++ /dev/null @@ -1,109 +0,0 @@ -'use strict' -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js -// (MIT licensed) - -const Buffer = require('safe-buffer').Buffer - -const BUFFER = Symbol('buffer') -const TYPE = Symbol('type') -const CLOSED = Symbol('closed') - -class Blob { - constructor () { - Object.defineProperty(this, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true - }) - - this[CLOSED] = false - this[TYPE] = '' - - const blobParts = arguments[0] - const options = arguments[1] - - const buffers = [] - - if (blobParts) { - const a = blobParts - const length = Number(a.length) - for (let i = 0; i < length; i++) { - const element = a[i] - let buffer - if (Buffer.isBuffer(element)) { - buffer = element - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(new Uint8Array(element.buffer, element.byteOffset, element.byteLength)) - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(new Uint8Array(element)) - } else if (element instanceof Blob) { - buffer = element[BUFFER] - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)) - } - buffers.push(buffer) - } - } - - this[BUFFER] = Buffer.concat(buffers) - - let type = options && options.type !== undefined && String(options.type).toLowerCase() - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type - } - } - get size () { - return this[CLOSED] ? 0 : this[BUFFER].length - } - get type () { - return this[TYPE] - } - get isClosed () { - return this[CLOSED] - } - slice () { - const size = this.size - - const start = arguments[0] - const end = arguments[1] - let relativeStart, relativeEnd - if (start === undefined) { - relativeStart = 0 - } else if (start < 0) { - relativeStart = Math.max(size + start, 0) - } else { - relativeStart = Math.min(start, size) - } - if (end === undefined) { - relativeEnd = size - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0) - } else { - relativeEnd = 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: arguments[2] }) - blob[BUFFER] = slicedBuffer - blob[CLOSED] = this[CLOSED] - return blob - } - close () { - this[CLOSED] = true - } -} -exports = module.exports = Blob -exports.BUFFER = BUFFER - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'BlobPrototype', - writable: false, - enumerable: false, - configurable: true -}) diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/body.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/body.js deleted file mode 100644 index 9e7481857a..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/body.js +++ /dev/null @@ -1,411 +0,0 @@ -'use strict' - -/** - * body.js - * - * Body interface provides common methods for Request and Response - */ - -const Buffer = require('safe-buffer').Buffer - -const Blob = require('./blob.js') -const BUFFER = Blob.BUFFER -const convert = require('encoding').convert -const parseJson = require('json-parse-better-errors') -const FetchError = require('./fetch-error.js') -const Stream = require('stream') - -const PassThrough = Stream.PassThrough -const DISTURBED = Symbol('disturbed') - -/** - * Body class - * - * Cannot use ES6 class because Body must be called with .call(). - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -exports = module.exports = Body - -function Body (body, opts) { - if (!opts) opts = {} - const size = opts.size == null ? 0 : opts.size - const timeout = opts.timeout == null ? 0 : opts.timeout - if (body == null) { - // body is undefined or null - body = null - } else if (typeof body === 'string') { - // body is string - } else if (body instanceof Blob) { - // body is blob - } else if (Buffer.isBuffer(body)) { - // body is buffer - } else if (body instanceof Stream) { - // body is stream - } else { - // none of the above - // coerce to string - body = String(body) - } - this.body = body - this[DISTURBED] = false - this.size = size - this.timeout = timeout -} - -Body.prototype = { - get bodyUsed () { - return this[DISTURBED] - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer () { - return consumeBody.call(this).then(buf => buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)) - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob () { - let ct = (this.headers && this.headers.get('content-type')) || '' - return consumeBody.call(this).then(buf => Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), - { - [BUFFER]: buf - } - )) - }, - - /** - * Decode response as json - * - * @return Promise - */ - json () { - return consumeBody.call(this).then(buffer => parseJson(buffer.toString())) - }, - - /** - * Decode response as text - * - * @return Promise - */ - text () { - return consumeBody.call(this).then(buffer => buffer.toString()) - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer () { - return consumeBody.call(this) - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted () { - return consumeBody.call(this).then(buffer => convertBody(buffer, this.headers)) - } - -} - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name) - Object.defineProperty(proto, name, desc) - } - } -} - -/** - * Decode buffers into utf-8 string - * - * @return Promise - */ -function consumeBody (body) { - if (this[DISTURBED]) { - return Body.Promise.reject(new Error(`body used already for: ${this.url}`)) - } - - this[DISTURBED] = true - - // body is null - if (this.body === null) { - return Body.Promise.resolve(Buffer.alloc(0)) - } - - // body is string - if (typeof this.body === 'string') { - return Body.Promise.resolve(Buffer.from(this.body)) - } - - // body is blob - if (this.body instanceof Blob) { - return Body.Promise.resolve(this.body[BUFFER]) - } - - // body is buffer - if (Buffer.isBuffer(this.body)) { - return Body.Promise.resolve(this.body) - } - - // istanbul ignore if: should never happen - if (!(this.body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)) - } - - // body is stream - // get ready to actually consume the body - let accum = [] - let accumBytes = 0 - let abort = false - - return new Body.Promise((resolve, reject) => { - let resTimeout - - // allow timeout on slow response body - if (this.timeout) { - resTimeout = setTimeout(() => { - abort = true - reject(new FetchError(`Response timeout while trying to fetch ${this.url} (over ${this.timeout}ms)`, 'body-timeout')) - }, this.timeout) - } - - // handle stream error, such as incorrect content-encoding - this.body.on('error', err => { - reject(new FetchError(`Invalid response body while trying to fetch ${this.url}: ${err.message}`, 'system', err)) - }) - - this.body.on('data', chunk => { - if (abort || chunk === null) { - return - } - - if (this.size && accumBytes + chunk.length > this.size) { - abort = true - reject(new FetchError(`content size at ${this.url} over limit: ${this.size}`, 'max-size')) - return - } - - accumBytes += chunk.length - accum.push(chunk) - }) - - this.body.on('end', () => { - if (abort) { - return - } - - clearTimeout(resTimeout) - resolve(Buffer.concat(accum)) - }) - }) -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody (buffer, headers) { - const ct = 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 = /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() -} - -/** - * Clone body given Res/Req instance - * - * @param Mixed instance Response or Request instance - * @return Mixed - */ -exports.clone = function clone (instance) { - let p1, p2 - let body = instance.body - - // don't allow cloning a used body - if (instance.bodyUsed) { - throw new Error('cannot clone body after it is used') - } - - // check that body is a stream and not form-data object - // note: we can't clone the form-data object without having it as a dependency - if ((body instanceof Stream) && (typeof body.getBoundary !== 'function')) { - // tee instance body - p1 = new PassThrough() - p2 = new PassThrough() - body.pipe(p1) - body.pipe(p2) - // set instance body to teed body and return the other teed body - instance.body = p1 - body = p2 - } - - return body -} - -/** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present and non-null. - * - * @param Mixed instance Response or Request instance - */ -exports.extractContentType = function extractContentType (instance) { - const body = instance.body - - // istanbul ignore if: Currently, because of a guard in Request, body - // can never be null. Included here for completeness. - if (body === null) { - // body is null - return null - } else if (typeof body === 'string') { - // body is string - return 'text/plain;charset=UTF-8' - } else if (body instanceof Blob) { - // body is blob - return body.type || null - } else if (Buffer.isBuffer(body)) { - // body is buffer - return null - } else if (typeof body.getBoundary === 'function') { - // detect form data input from form-data module - return `multipart/form-data;boundary=${body.getBoundary()}` - } else { - // body is stream - // can't really do much about this - return null - } -} - -exports.getTotalBytes = function getTotalBytes (instance) { - const body = instance.body - - // istanbul ignore if: included for completion - if (body === null) { - // body is null - return 0 - } else if (typeof body === 'string') { - // body is string - return Buffer.byteLength(body) - } else if (body instanceof Blob) { - // body is blob - return body.size - } else if (Buffer.isBuffer(body)) { - // body is buffer - return body.length - } else if (body && typeof body.getLengthSync === 'function') { - // detect form data input from form-data module - if (( - // 1.x - body._lengthRetrievers && - body._lengthRetrievers.length === 0 - ) || ( - // 2.x - body.hasKnownLength && body.hasKnownLength() - )) { - return body.getLengthSync() - } - return null - } else { - // body is stream - // can't really do much about this - return null - } -} - -exports.writeToStream = function writeToStream (dest, instance) { - const body = instance.body - - if (body === null) { - // body is null - dest.end() - } else if (typeof body === 'string') { - // body is string - dest.write(body) - dest.end() - } else if (body instanceof Blob) { - // body is blob - dest.write(body[BUFFER]) - dest.end() - } else if (Buffer.isBuffer(body)) { - // body is buffer - dest.write(body) - dest.end() - } else { - // body is stream - body.pipe(dest) - } -} - -// expose Promise -Body.Promise = global.Promise diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js deleted file mode 100644 index 47b57c794c..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js +++ /dev/null @@ -1,92 +0,0 @@ -'use strict' -/** - * A set of utilities borrowed from Node.js' _http_common.js - */ - -/** - * Verifies that the given val is a valid HTTP token - * per the rules defined in RFC 7230 - * See https://tools.ietf.org/html/rfc7230#section-3.2.6 - * - * Allowed characters in an HTTP token: - * ^_`a-z 94-122 - * A-Z 65-90 - * - 45 - * 0-9 48-57 - * ! 33 - * #$%&' 35-39 - * *+ 42-43 - * . 46 - * | 124 - * ~ 126 - * - * This implementation of checkIsHttpToken() loops over the string instead of - * using a regular expression since the former is up to 180% faster with v8 4.9 - * depending on the string length (the shorter the string, the larger the - * performance difference) - * - * Additionally, checkIsHttpToken() is currently designed to be inlinable by v8, - * so take care when making changes to the implementation so that the source - * code size does not exceed v8's default max_inlined_source_size setting. - **/ -/* istanbul ignore next */ -function isValidTokenChar (ch) { - if (ch >= 94 && ch <= 122) { return true } - if (ch >= 65 && ch <= 90) { return true } - if (ch === 45) { return true } - if (ch >= 48 && ch <= 57) { return true } - if (ch === 34 || ch === 40 || ch === 41 || ch === 44) { return false } - if (ch >= 33 && ch <= 46) { return true } - if (ch === 124 || ch === 126) { return true } - return false -} -/* istanbul ignore next */ -function checkIsHttpToken (val) { - if (typeof val !== 'string' || val.length === 0) { return false } - if (!isValidTokenChar(val.charCodeAt(0))) { return false } - const len = val.length - if (len > 1) { - if (!isValidTokenChar(val.charCodeAt(1))) { return false } - if (len > 2) { - if (!isValidTokenChar(val.charCodeAt(2))) { return false } - if (len > 3) { - if (!isValidTokenChar(val.charCodeAt(3))) { return false } - for (var i = 4; i < len; i++) { - if (!isValidTokenChar(val.charCodeAt(i))) { return false } - } - } - } - } - return true -} -exports.checkIsHttpToken = checkIsHttpToken - -/** - * True if val contains an invalid field-vchar - * field-value = *( field-content / obs-fold ) - * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] - * field-vchar = VCHAR / obs-text - * - * checkInvalidHeaderChar() is currently designed to be inlinable by v8, - * so take care when making changes to the implementation so that the source - * code size does not exceed v8's default max_inlined_source_size setting. - **/ -/* istanbul ignore next */ -function checkInvalidHeaderChar (val) { - val += '' - if (val.length < 1) { return false } - var c = val.charCodeAt(0) - if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true } - if (val.length < 2) { return false } - c = val.charCodeAt(1) - if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true } - if (val.length < 3) { return false } - c = val.charCodeAt(2) - if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true } - for (var i = 3; i < val.length; ++i) { - c = val.charCodeAt(i) - if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true } - } - return false -} -exports.checkInvalidHeaderChar = checkInvalidHeaderChar diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/fetch-error.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/fetch-error.js deleted file mode 100644 index 338e1e2729..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/fetch-error.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict' - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -module.exports = FetchError -function FetchError (message, type, systemError) { - Error.call(this, message) - - this.message = message - this.type = type - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor) -} - -FetchError.prototype = Object.create(Error.prototype) -FetchError.prototype.constructor = FetchError -FetchError.prototype.name = 'FetchError' diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/headers.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/headers.js deleted file mode 100644 index 28f71cd9b8..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/headers.js +++ /dev/null @@ -1,296 +0,0 @@ -'use strict' - -/** - * headers.js - * - * Headers class offers convenient helpers - */ - -const common = require('./common.js') -const checkInvalidHeaderChar = common.checkInvalidHeaderChar -const checkIsHttpToken = common.checkIsHttpToken - -function sanitizeName (name) { - name += '' - if (!checkIsHttpToken(name)) { - throw new TypeError(`${name} is not a legal HTTP header name`) - } - return name.toLowerCase() -} - -function sanitizeValue (value) { - value += '' - if (checkInvalidHeaderChar(value)) { - throw new TypeError(`${value} is not a legal HTTP header value`) - } - return value -} - -const MAP = Symbol('map') -class Headers { - /** - * Headers class - * - * @param Object headers Response headers - * @return Void - */ - constructor (init) { - 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 - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) { - // no op - } else if (typeof init === 'object') { - const method = init[Symbol.iterator] - if (method != null) { - 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') - } - pairs.push(Array.from(pair)) - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple') - } - this.append(pair[0], pair[1]) - } - } else { - // record<ByteString, ByteString> - for (const key of Object.keys(init)) { - const value = init[key] - this.append(key, value) - } - } - } else { - throw new TypeError('Provided initializer must be an object') - } - - Object.defineProperty(this, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true - }) - } - - /** - * Return first header value given name - * - * @param String name Header name - * @return Mixed - */ - get (name) { - const list = this[MAP][sanitizeName(name)] - if (!list) { - return null - } - - return list.join(', ') - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach (callback, thisArg) { - let pairs = getHeaderPairs(this) - let i = 0 - while (i < pairs.length) { - const name = pairs[i][0] - const value = pairs[i][1] - callback.call(thisArg, value, name, this) - pairs = getHeaderPairs(this) - i++ - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set (name, value) { - this[MAP][sanitizeName(name)] = [sanitizeValue(value)] - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append (name, value) { - if (!this.has(name)) { - this.set(name, value) - return - } - - this[MAP][sanitizeName(name)].push(sanitizeValue(value)) - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has (name) { - return !!this[MAP][sanitizeName(name)] - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete (name) { - delete this[MAP][sanitizeName(name)] - }; - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw () { - return this[MAP] - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys () { - return createHeadersIterator(this, 'key') - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values () { - return createHeadersIterator(this, 'value') - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator] () { - return createHeadersIterator(this, 'key+value') - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator] - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'HeadersPrototype', - writable: false, - enumerable: false, - configurable: true -}) - -function getHeaderPairs (headers, kind) { - const keys = Object.keys(headers[MAP]).sort() - return keys.map( - kind === 'key' - ? k => [k] - : k => [k, headers.get(k)] - ) -} - -const INTERNAL = Symbol('internal') - -function createHeadersIterator (target, kind) { - const iterator = Object.create(HeadersIteratorPrototype) - iterator[INTERNAL] = { - target, - kind, - index: 0 - } - return iterator -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next () { - // istanbul ignore if - if (!this || - Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator') - } - - const target = this[INTERNAL].target - const kind = this[INTERNAL].kind - const index = this[INTERNAL].index - const values = getHeaderPairs(target, kind) - const len = values.length - if (index >= len) { - return { - value: undefined, - done: true - } - } - - const pair = values[index] - this[INTERNAL].index = index + 1 - - let result - if (kind === 'key') { - result = pair[0] - } else if (kind === 'value') { - result = pair[1] - } else { - result = pair - } - - return { - value: result, - done: false - } - } -}, Object.getPrototypeOf( - Object.getPrototypeOf([][Symbol.iterator]()) -)) - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}) - -module.exports = Headers diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/index.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/index.js deleted file mode 100644 index b2cf80f9ec..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/index.js +++ /dev/null @@ -1,214 +0,0 @@ -'use strict' - -/** - * index.js - * - * a request API compatible with window.fetch - */ - -const url = require('url') -const http = require('http') -const https = require('https') -const zlib = require('zlib') -const PassThrough = require('stream').PassThrough - -const Body = require('./body.js') -const writeToStream = Body.writeToStream -const Response = require('./response') -const Headers = require('./headers') -const Request = require('./request') -const getNodeRequestOptions = Request.getNodeRequestOptions -const FetchError = require('./fetch-error') -const isURL = /^https?:/ - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -exports = module.exports = fetch -function fetch (uri, opts) { - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative') - } - - Body.Promise = fetch.Promise - - // wrap http.request into fetch - return new fetch.Promise((resolve, reject) => { - // build request object - const request = new Request(uri, opts) - const options = getNodeRequestOptions(request) - - const send = (options.protocol === 'https:' ? https : http).request - - // http.request only support string as host header, this hack make custom host header possible - if (options.headers.host) { - options.headers.host = options.headers.host[0] - } - - // send request - const req = send(options) - let reqTimeout - - if (request.timeout) { - req.once('socket', socket => { - reqTimeout = setTimeout(() => { - req.abort() - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')) - }, request.timeout) - }) - } - - req.on('error', err => { - clearTimeout(reqTimeout) - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)) - }) - - req.on('response', res => { - clearTimeout(reqTimeout) - - // handle redirect - if (fetch.isRedirect(res.statusCode) && request.redirect !== 'manual') { - if (request.redirect === 'error') { - reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect')) - return - } - - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')) - return - } - - if (!res.headers.location) { - reject(new FetchError(`redirect location header missing at: ${request.url}`, 'invalid-redirect')) - return - } - // Remove authorization if changing hostnames (but not if just - // changing ports or protocols). This matches the behavior of request: - // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138 - const resolvedUrl = url.resolve(request.url, res.headers.location) - let redirectURL = '' - if (!isURL.test(res.headers.location)) { - redirectURL = url.parse(resolvedUrl) - } else { - redirectURL = url.parse(res.headers.location) - } - if (url.parse(request.url).hostname !== redirectURL.hostname) { - request.headers.delete('authorization') - } - - // per fetch spec, for POST request with 301/302 response, or any request with 303 response, use GET when following redirect - if (res.statusCode === 303 || - ((res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST')) { - request.method = 'GET' - request.body = null - request.headers.delete('content-length') - } - - request.counter++ - - resolve(fetch(resolvedUrl, request)) - return - } - - // normalize location header for manual redirect mode - const headers = new Headers() - for (const name of Object.keys(res.headers)) { - if (Array.isArray(res.headers[name])) { - for (const val of res.headers[name]) { - headers.append(name, val) - } - } else { - headers.append(name, res.headers[name]) - } - } - if (request.redirect === 'manual' && headers.has('location')) { - headers.set('location', url.resolve(request.url, headers.get('location'))) - } - - // prepare response - let body = res.pipe(new PassThrough()) - const responseOptions = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout - } - - // HTTP-network fetch step 16.1.2 - const codings = headers.get('Content-Encoding') - - // HTTP-network fetch step 16.1.3: 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) { - resolve(new Response(body, responseOptions)) - 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.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - } - - // for gzip - if (codings === 'gzip' || codings === 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)) - resolve(new Response(body, responseOptions)) - 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 PassThrough()) - raw.once('data', chunk => { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate(zlibOptions)) - } else { - body = body.pipe(zlib.createInflateRaw(zlibOptions)) - } - resolve(new Response(body, responseOptions)) - }) - return - } - - // otherwise, use response as-is - resolve(new Response(body, responseOptions)) - }) - - writeToStream(req, request) - }) -}; - -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = code => code === 301 || code === 302 || code === 303 || code === 307 || code === 308 - -// expose Promise -fetch.Promise = global.Promise -exports.Headers = Headers -exports.Request = Request -exports.Response = Response -exports.FetchError = FetchError diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/request.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/request.js deleted file mode 100644 index 326dc4606f..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/request.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict' - -/** - * request.js - * - * Request class contains server only options - */ - -const url = require('url') -const Headers = require('./headers.js') -const Body = require('./body.js') -const clone = Body.clone -const extractContentType = Body.extractContentType -const getTotalBytes = Body.getTotalBytes - -const PARSED_URL = Symbol('url') - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor (input, init) { - if (!init) init = {} - let parsedURL - - // normalize input - if (!(input instanceof Request)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = url.parse(input.href) - } else { - // coerce input to a string before attempting to parse - parsedURL = url.parse(`${input}`) - } - input = {} - } else { - parsedURL = url.parse(input.url) - } - - let method = init.method || input.method || 'GET' - - if ((init.body != null || (input instanceof Request && input.body !== null)) && - (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body') - } - - let inputBody = init.body != null - ? init.body - : input instanceof Request && input.body !== null - ? clone(input) - : null - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }) - - // fetch spec options - this.method = method.toUpperCase() - this.redirect = init.redirect || input.redirect || 'follow' - this.headers = new Headers(init.headers || input.headers || {}) - - if (init.body != null) { - const contentType = extractContentType(this) - if (contentType !== null && !this.headers.has('Content-Type')) { - this.headers.append('Content-Type', contentType) - } - } - - // server 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 - - this[PARSED_URL] = parsedURL - Object.defineProperty(this, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true - }) - } - - get url () { - return url.format(this[PARSED_URL]) - } - - /** - * Clone this request - * - * @return Request - */ - clone () { - return new Request(this) - } -} - -Body.mixIn(Request.prototype) - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'RequestPrototype', - writable: false, - enumerable: false, - configurable: true -}) - -exports = module.exports = Request - -exports.getNodeRequestOptions = function getNodeRequestOptions (request) { - const parsedURL = request[PARSED_URL] - const headers = new Headers(request.headers) - - // fetch step 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') - } - - // HTTP-network-or-cache fetch steps 5-9 - let contentLengthValue = null - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0' - } - if (request.body != null) { - const totalBytes = getTotalBytes(request) - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes) - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue) - } - - // HTTP-network-or-cache fetch step 12 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)') - } - - // HTTP-network-or-cache fetch step 16 - if (request.compress) { - headers.set('Accept-Encoding', 'gzip,deflate') - } - if (!headers.has('Connection') && !request.agent) { - headers.set('Connection', 'close') - } - - // HTTP-network fetch step 4 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: headers.raw(), - agent: request.agent - }) -} diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/response.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/response.js deleted file mode 100644 index 6fb050d74c..0000000000 --- a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/response.js +++ /dev/null @@ -1,71 +0,0 @@ -'use strict' - -/** - * response.js - * - * Response class provides content decoding - */ - -const STATUS_CODES = require('http').STATUS_CODES -const Headers = require('./headers.js') -const Body = require('./body.js') -const clone = Body.clone - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor (body, opts) { - if (!opts) opts = {} - Body.call(this, body, opts) - - this.url = opts.url - this.status = opts.status || 200 - this.statusText = opts.statusText || STATUS_CODES[this.status] - - this.headers = new Headers(opts.headers) - - Object.defineProperty(this, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true - }) - } - - /** - * Convenience property representing if the request ended normally - */ - get ok () { - return this.status >= 200 && this.status < 300 - } - - /** - * Clone this response - * - * @return Response - */ - clone () { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok - }) - } -} - -Body.mixIn(Response.prototype) - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'ResponsePrototype', - writable: false, - enumerable: false, - configurable: true -}) -module.exports = Response |