mirror of https://github.com/lukechilds/got.git
committed by
Sindre Sorhus
3 changed files with 96 additions and 85 deletions
@ -0,0 +1,92 @@ |
|||
'use strict'; |
|||
const urlLib = require('url'); |
|||
const http = require('http'); |
|||
const PCancelable = require('p-cancelable'); |
|||
const is = require('@sindresorhus/is'); |
|||
|
|||
class GotError extends Error { |
|||
constructor(message, error, opts) { |
|||
super(message); |
|||
Error.captureStackTrace(this, this.constructor); |
|||
this.name = 'GotError'; |
|||
|
|||
if (!is.undefined(error.code)) { |
|||
this.code = error.code; |
|||
} |
|||
|
|||
Object.assign(this, { |
|||
host: opts.host, |
|||
hostname: opts.hostname, |
|||
method: opts.method, |
|||
path: opts.path, |
|||
protocol: opts.protocol, |
|||
url: opts.href |
|||
}); |
|||
} |
|||
} |
|||
|
|||
module.exports.GotError = GotError; |
|||
|
|||
module.exports.CacheError = class extends GotError { |
|||
constructor(error, opts) { |
|||
super(error.message, error, opts); |
|||
this.name = 'CacheError'; |
|||
} |
|||
}; |
|||
|
|||
module.exports.RequestError = class extends GotError { |
|||
constructor(error, opts) { |
|||
super(error.message, error, opts); |
|||
this.name = 'RequestError'; |
|||
} |
|||
}; |
|||
|
|||
module.exports.ReadError = class extends GotError { |
|||
constructor(error, opts) { |
|||
super(error.message, error, opts); |
|||
this.name = 'ReadError'; |
|||
} |
|||
}; |
|||
|
|||
module.exports.ParseError = class extends GotError { |
|||
constructor(error, statusCode, opts, data) { |
|||
super(`${error.message} in "${urlLib.format(opts)}": \n${data.slice(0, 77)}...`, error, opts); |
|||
this.name = 'ParseError'; |
|||
this.statusCode = statusCode; |
|||
this.statusMessage = http.STATUS_CODES[this.statusCode]; |
|||
} |
|||
}; |
|||
|
|||
module.exports.HTTPError = class extends GotError { |
|||
constructor(statusCode, statusMessage, headers, opts) { |
|||
if (statusMessage) { |
|||
statusMessage = statusMessage.replace(/\r?\n/g, ' ').trim(); |
|||
} else { |
|||
statusMessage = http.STATUS_CODES[statusCode]; |
|||
} |
|||
super(`Response code ${statusCode} (${statusMessage})`, {}, opts); |
|||
this.name = 'HTTPError'; |
|||
this.statusCode = statusCode; |
|||
this.statusMessage = statusMessage; |
|||
this.headers = headers; |
|||
} |
|||
}; |
|||
|
|||
module.exports.MaxRedirectsError = class extends GotError { |
|||
constructor(statusCode, redirectUrls, opts) { |
|||
super('Redirected 10 times. Aborting.', {}, opts); |
|||
this.name = 'MaxRedirectsError'; |
|||
this.statusCode = statusCode; |
|||
this.statusMessage = http.STATUS_CODES[this.statusCode]; |
|||
this.redirectUrls = redirectUrls; |
|||
} |
|||
}; |
|||
|
|||
module.exports.UnsupportedProtocolError = class extends GotError { |
|||
constructor(opts) { |
|||
super(`Unsupported protocol "${opts.protocol}"`, {}, opts); |
|||
this.name = 'UnsupportedProtocolError'; |
|||
} |
|||
}; |
|||
|
|||
module.exports.CancelError = PCancelable.CancelError; |
Loading…
Reference in new issue