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