Comparing version 1.0.0 to 1.0.1
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); | ||
var _setImmediate2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set-immediate")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); | ||
var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign")); | ||
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); | ||
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise")); | ||
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); | ||
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn")); | ||
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits")); | ||
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof")); | ||
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")); | ||
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array")); | ||
var _events = _interopRequireDefault(require("events")); | ||
@@ -40,2 +52,3 @@ | ||
error: 'error', | ||
redirect: 'redirect', | ||
request: 'request', | ||
@@ -45,2 +58,8 @@ response: 'response', | ||
}, | ||
HTTP_HEADERS = { | ||
CONNECTION: 'Connection', | ||
CONTENT_LENGTH: 'Content-Length', | ||
CONTENT_TYPE: 'Content-Type', | ||
LOCATION: 'Location' | ||
}, | ||
// reference: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection | ||
@@ -59,5 +78,6 @@ HTTP_STATUS_CODES = { | ||
RE_URL_PARAMETERS = /(\/\:([a-z0-9\_\-\~\.]*))*/gi, | ||
SUPPORTED_REQUEST_OPTIONS = ['agent', 'auth', 'family', 'headers', 'host', 'hostname', //'keepAlive', // custom | ||
//'keepAliveMsecs', // custom | ||
'localAddress', 'maxRetryCount', // custom | ||
SUPPORTED_REQUEST_OPTIONS = ['agent', 'auth', 'family', 'headers', 'host', 'hostname', // 'keepAlive', // custom | ||
// 'keepAliveMsecs', // custom | ||
'localAddress', 'maxRedirectCount', // custom | ||
'maxRetryCount', // custom | ||
'method', 'path', 'pathname', 'port', 'protocol', // use to determine HTTPS or HTTP | ||
@@ -77,4 +97,16 @@ 'query', // custom | ||
function ensureOptions(value) { | ||
if (!isObject(value) && typeof value === 'string') { | ||
return _url.default.parse(value); | ||
} | ||
return value; | ||
} | ||
function headerExists(headers, name) { | ||
return !isEmpty(headers[name]) || !isEmpty(headers[name.toLowerCase()]); | ||
} | ||
function isEmpty(value) { | ||
return value === null || [typeof value === 'undefined', typeof value === 'string' && !value.length, Array.isArray(value) && !value.length, isObject(value) && !Object.keys(value).length].some(function (result) { | ||
return value === null || [typeof value === 'undefined', typeof value === 'string' && !value.length, (0, _isArray.default)(value) && !value.length, isObject(value) && !(0, _keys.default)(value).length].some(function (result) { | ||
return result; | ||
@@ -85,3 +117,3 @@ }); | ||
function isObject(value) { | ||
return ![value === null, typeof value === 'undefined', (0, _typeof2.default)(value) !== 'object', Array.isArray(value), value && value.toString && !/^\[object\sObject\]$/.test(value.toString())].some(function (result) { | ||
return ![value === null, typeof value === 'undefined', (0, _typeof2.default)(value) !== 'object', (0, _isArray.default)(value), value && value.toString && !/^\[object\sObject\]$/.test(value.toString())].some(function (result) { | ||
return result; | ||
@@ -104,4 +136,6 @@ }); | ||
}); // TODO: apply keep-alive | ||
// apply retry | ||
// apply redirect | ||
result.maxRedirectCount = coalesce(result.maxRedirectCount, DEFAULTS.MAX_REDIRECT_COUNT); // apply retry | ||
result.maxRetryCount = coalesce(result.maxRetryCount, DEFAULTS.MAX_RETRY_COUNT); // apply timeout | ||
@@ -115,5 +149,5 @@ | ||
Object.keys(result.query).forEach(function (param) { | ||
(0, _keys.default)(result.query).forEach(function (param) { | ||
// ensure arrays in querystring are properly serialized... | ||
if (Array.isArray(result.query[param]) && result.query[param].length > 1) { | ||
if ((0, _isArray.default)(result.query[param]) && result.query[param].length > 1) { | ||
result.query[param] = result.query[param].join(','); | ||
@@ -140,3 +174,3 @@ return; | ||
parts.path.match(RE_URL_PARAMETERS) //.filter((match) => RE_URL_PARAMETERS.test(match)) | ||
parts.path.match(RE_URL_PARAMETERS) // .filter((match) => RE_URL_PARAMETERS.test(match)) | ||
.forEach(function (match) { | ||
@@ -174,3 +208,3 @@ var parameters = match.split(RE_URL_PARAMETERS); | ||
var serializedKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; | ||
return Object.keys(document).forEach(function (key) { | ||
return (0, _keys.default)(document).forEach(function (key) { | ||
if (isEmpty(document[key])) { | ||
@@ -233,3 +267,3 @@ return; | ||
if (isObject(state.data)) { | ||
state.data = JSON.stringify(state.data); | ||
state.data = (0, _stringify.default)(state.data); | ||
} // ensure default values for all request options | ||
@@ -241,14 +275,14 @@ | ||
options.headers['Content-Length'] = Buffer.byteLength(state.data); // apply application/json header as default | ||
options.headers[HTTP_HEADERS.CONTENT_LENGTH] = options.headers[HTTP_HEADERS.CONTENT_LENGTH] || Buffer.byteLength(state.data); // apply application/json header as default | ||
if (!options.headers['Content-Type']) { | ||
options.headers['Content-Type'] = 'application/json'; | ||
if (!headerExists(options.headers, HTTP_HEADERS.CONTENT_TYPE)) { | ||
options.headers[HTTP_HEADERS.CONTENT_TYPE] = 'application/json'; | ||
} // apply keep-alive header when specified | ||
if (options.keepAlive && !options.headers['Connection']) { | ||
options.headers['Connection'] = 'keep-alive'; | ||
if (options.keepAlive && !headerExists(options.headers, HTTP_HEADERS.CONNECTION)) { | ||
options.headers[HTTP_HEADERS.CONNECTION] = 'keep-alive'; | ||
} | ||
executeRequest = new Promise(function (resolve, reject) { | ||
executeRequest = new _promise.default(function (resolve, reject) { | ||
// emit request event | ||
@@ -263,3 +297,3 @@ self.emit(EVENTS.request, { | ||
var chunks = [], | ||
contentType = response.headers['content-type'], | ||
contentType = coalesce(response.headers[HTTP_HEADERS.CONTENT_TYPE], response.headers[HTTP_HEADERS.CONTENT_TYPE.toLowerCase()]), | ||
json = RE_CONTENT_TYPE_JSON.test(contentType), | ||
@@ -287,3 +321,3 @@ redirect = [HTTP_STATUS_CODES.REDIRECT_CODE_PERM, HTTP_STATUS_CODES.REDIRECT_CODE_TEMP, HTTP_STATUS_CODES.REDIRECT_NEW_CODE_PERM, HTTP_STATUS_CODES.REDIRECT_NEW_CODE_TEMP].some(function (code) { | ||
if (redirect) { | ||
if (isEmpty(state.headers.location)) { | ||
if (isEmpty(state.headers[HTTP_HEADERS.LOCATION])) { | ||
var _err = new Error('redirect requested with no location'); | ||
@@ -296,3 +330,3 @@ | ||
if (state.redirects >= DEFAULTS.MAX_REDIRECT_COUNT) { | ||
if (state.redirects >= options.maxRedirectCount) { | ||
var _err2 = new Error('maximum redirect limit exceeded'); | ||
@@ -306,5 +340,5 @@ | ||
var redirectUrl = _url.default.parse(state.headers.location); | ||
var redirectUrl = _url.default.parse(state.headers[HTTP_HEADERS.LOCATION]); | ||
Object.assign(options, redirectUrl); // increment number of redirects (to avoid endless looping) | ||
(0, _assign.default)(options, redirectUrl); // increment number of redirects (to avoid endless looping) | ||
@@ -318,3 +352,3 @@ state.redirects++; // emit redirect event | ||
return setImmediate(clientRequest); | ||
return (0, _setImmediate2.default)(clientRequest); | ||
} // utilize content-type to understand if response should be a stream | ||
@@ -342,3 +376,6 @@ // assume missing content-type header indicates text value | ||
if (contentParts.length > 1) { | ||
response.setEncoding(contentParts[contentParts.length - 1]); | ||
try { | ||
response.setEncoding(contentParts[contentParts.length - 1]); | ||
} catch (ex) {// TODO: handle warning... | ||
} | ||
} | ||
@@ -352,3 +389,3 @@ } | ||
var body = chunks.join(''), | ||
error = state.statusCode >= DEFAULTS.HTTP_ERROR_CODE_THRESHOLD, | ||
error = state.statusCode >= DEFAULTS.HTTP_ERROR_CODE_THRESHHOLD, | ||
retry = state.statusCode >= DEFAULTS.HTTP_ERROR_CODE_RETRY_THRESHHOLD && state.tries <= options.maxRetryCount; | ||
@@ -398,3 +435,3 @@ | ||
state.tries += 1; | ||
return setImmediate(clientRequest); | ||
return (0, _setImmediate2.default)(clientRequest); | ||
} | ||
@@ -452,10 +489,17 @@ | ||
callback = _args.length > 1 ? _args[1] : undefined; | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'DELETE'; | ||
_context.next = 5; | ||
_context.next = 7; | ||
return this.call(options, callback); | ||
case 5: | ||
case 7: | ||
return _context.abrupt("return", _context.sent); | ||
case 6: | ||
case 8: | ||
case "end": | ||
@@ -490,10 +534,17 @@ return _context.stop(); | ||
callback = _args2.length > 1 ? _args2[1] : undefined; | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'GET'; | ||
_context2.next = 5; | ||
_context2.next = 7; | ||
return this.call(options, callback); | ||
case 5: | ||
case 7: | ||
return _context2.abrupt("return", _context2.sent); | ||
case 6: | ||
case 8: | ||
case "end": | ||
@@ -528,10 +579,17 @@ return _context2.stop(); | ||
callback = _args3.length > 1 ? _args3[1] : undefined; | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'HEAD'; | ||
_context3.next = 5; | ||
_context3.next = 7; | ||
return this.call(options, callback); | ||
case 5: | ||
case 7: | ||
return _context3.abrupt("return", _context3.sent); | ||
case 6: | ||
case 8: | ||
case "end": | ||
@@ -568,10 +626,22 @@ return _context3.stop(); | ||
callback = _args4.length > 2 ? _args4[2] : undefined; | ||
if (typeof data === 'function' && isEmpty(callback)) { | ||
callback = data; | ||
data = null; | ||
} | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'PATCH'; | ||
_context4.next = 6; | ||
_context4.next = 9; | ||
return this.call(options, data, callback); | ||
case 6: | ||
case 9: | ||
return _context4.abrupt("return", _context4.sent); | ||
case 7: | ||
case 10: | ||
case "end": | ||
@@ -608,10 +678,22 @@ return _context4.stop(); | ||
callback = _args5.length > 2 ? _args5[2] : undefined; | ||
if (typeof data === 'function' && isEmpty(callback)) { | ||
callback = data; | ||
data = null; | ||
} | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'POST'; | ||
_context5.next = 6; | ||
_context5.next = 9; | ||
return this.call(options, data, callback); | ||
case 6: | ||
case 9: | ||
return _context5.abrupt("return", _context5.sent); | ||
case 7: | ||
case 10: | ||
case "end": | ||
@@ -648,10 +730,22 @@ return _context5.stop(); | ||
callback = _args6.length > 2 ? _args6[2] : undefined; | ||
if (typeof data === 'function' && isEmpty(callback)) { | ||
callback = data; | ||
data = null; | ||
} | ||
if (typeof options === 'function' && isEmpty(callback)) { | ||
callback = options; | ||
options = {}; | ||
} | ||
options = ensureOptions(options); | ||
options.method = 'PUT'; | ||
_context6.next = 6; | ||
_context6.next = 9; | ||
return this.call(options, data, callback); | ||
case 6: | ||
case 9: | ||
return _context6.abrupt("return", _context6.sent); | ||
case 7: | ||
case 10: | ||
case "end": | ||
@@ -658,0 +752,0 @@ return _context6.stop(); |
{ | ||
"name": "reqlib", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "A library to simplify REST API requests and to provide utilities for handling common REST API consumer scenarios ", | ||
@@ -9,7 +9,6 @@ "main": "dist", | ||
"posttest": "nyc report --reporter=text-lcov | coveralls", | ||
"prepare": "gulp build", | ||
"prepublish": "check-node-version --npm \">=4\" || npm run prepare", | ||
"prepublish": "gulp build", | ||
"pretest": "gulp clean && gulp lint", | ||
"test": "nyc mocha ./test/src", | ||
"test-unit": "nyc mocha ./test/src" | ||
"test": "NODE_ENV=test nyc mocha ./test/src", | ||
"test:unit": "NODE_ENV=test nyc mocha ./test/src" | ||
}, | ||
@@ -35,6 +34,6 @@ "repository": { | ||
"dependencies": { | ||
"@babel/polyfill": "^7.2.5", | ||
"@babel/runtime": "^7.2.0" | ||
"@babel/runtime-corejs2": "^7.3.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.2.3", | ||
"@babel/core": "^7.2.2", | ||
@@ -44,4 +43,4 @@ "@babel/plugin-transform-runtime": "^7.2.0", | ||
"@babel/register": "^7.0.0", | ||
"babel-cli": "^6.26.0", | ||
"babel-eslint": "^10.0.1", | ||
"babel-plugin-istanbul": "^5.1.0", | ||
"chai": "^4.2.0", | ||
@@ -56,2 +55,3 @@ "coveralls": "^3.0.2", | ||
"mocha": "^5.2.0", | ||
"nock": "^10.0.6", | ||
"nyc": "^13.1.0" | ||
@@ -64,3 +64,3 @@ }, | ||
], | ||
"instrument": true, | ||
"instrument": false, | ||
"report-dir": "./reports", | ||
@@ -75,4 +75,4 @@ "reporter": [ | ||
], | ||
"sourceMap": true | ||
"sourceMap": false | ||
} | ||
} |
# Simple Request Library | ||
[![Build Status](https://travis-ci.org/brozeph/reqlib.svg?branch=master)](https://travis-ci.org/brozeph/reqlib) [![Coverage Status](https://coveralls.io/repos/github/brozeph/reqlib/badge.svg)](https://coveralls.io/github/brozeph/reqlib) | ||
## Request | ||
`new Request(options)` | ||
```javascript | ||
import { Request } from 'reqlib'; | ||
const | ||
options = { | ||
maxRedirectCount : 5, // # of redirects to follow | ||
maxRetryCount : 3, // # of times to retry in the event of a 5xx | ||
timeout : 1000 // milliseconds | ||
}, | ||
req = new Request(options); | ||
(async () => { | ||
try { | ||
let result = await req.get('https://test.api.io/v1/tests'); | ||
console.log(result); | ||
} catch (ex) { | ||
console.error(ex); | ||
} | ||
})(); | ||
``` | ||
### delete | ||
### get | ||
### head | ||
### patch | ||
### post | ||
### put | ||
## Resource |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
69936
1
6
735
45
18
+ Added@babel/runtime-corejs2@7.25.6(transitive)
- Removed@babel/polyfill@^7.2.5
- Removed@babel/runtime@^7.2.0
- Removed@babel/polyfill@7.12.1(transitive)
- Removed@babel/runtime@7.25.6(transitive)
- Removedregenerator-runtime@0.13.11(transitive)