lint+feat: add types + minor ws-ish refactor
This commit is contained in:
parent
e397dcc9cb
commit
750751966e
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
|
||||
my_typedefs="$(
|
||||
grep typedef ./types.js | cut -d ' ' -f5
|
||||
)"
|
||||
|
||||
rm -f ./local-types.js
|
||||
{
|
||||
echo '/**'
|
||||
for my_type in $my_typedefs; do
|
||||
echo " * @typedef {import('./types.js').${my_type}} ${my_type}"
|
||||
done
|
||||
echo ' */'
|
||||
} >> ./local-types.js
|
70
index.js
70
index.js
|
@ -7,6 +7,35 @@ var os = require('os');
|
|||
var pkg = require('./package.json');
|
||||
var fs = require('fs'); // only for streams
|
||||
|
||||
var _defaults = {
|
||||
sendImmediately: true,
|
||||
method: '',
|
||||
headers: {},
|
||||
useQuerystring: false,
|
||||
followRedirect: true,
|
||||
followAllRedirects: false,
|
||||
followOriginalHttpMethod: false,
|
||||
maxRedirects: 10,
|
||||
removeRefererHeader: false,
|
||||
// encoding: undefined,
|
||||
// stream: false, // TODO allow a stream?
|
||||
gzip: false
|
||||
//, body: undefined
|
||||
//, json: undefined
|
||||
};
|
||||
|
||||
var _keys = Object.keys(_defaults).concat([
|
||||
'encoding',
|
||||
'stream',
|
||||
'body',
|
||||
'json',
|
||||
'form',
|
||||
'auth',
|
||||
'formData',
|
||||
'FormData',
|
||||
'userAgent' // non-standard for request.js
|
||||
]);
|
||||
|
||||
function debug() {
|
||||
if (module.exports.debug) {
|
||||
console.log.apply(console, arguments);
|
||||
|
@ -165,10 +194,16 @@ function handleResponse(resp, opts, cb) {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {any} defs - TODO enumerate defaults
|
||||
* @returns {Request}
|
||||
*/
|
||||
function setDefaults(defs) {
|
||||
defs = defs || {};
|
||||
|
||||
/** @type {Request} */
|
||||
function urequestHelper(opts, cb) {
|
||||
//jshint maxcomplexity:42
|
||||
debug('\n[urequest] processed options:');
|
||||
debug(opts);
|
||||
|
||||
|
@ -522,7 +557,7 @@ function setDefaults(defs) {
|
|||
opts = { url: opts };
|
||||
}
|
||||
|
||||
module.exports._keys.forEach(function (key) {
|
||||
_keys.forEach(function (key) {
|
||||
if (key in opts && 'undefined' !== typeof opts[key]) {
|
||||
reqOpts[key] = opts[key];
|
||||
} else if (key in defs) {
|
||||
|
@ -653,35 +688,12 @@ function getUserAgent(additional) {
|
|||
return ua;
|
||||
}
|
||||
|
||||
var _defaults = {
|
||||
sendImmediately: true,
|
||||
method: '',
|
||||
headers: {},
|
||||
useQuerystring: false,
|
||||
followRedirect: true,
|
||||
followAllRedirects: false,
|
||||
followOriginalHttpMethod: false,
|
||||
maxRedirects: 10,
|
||||
removeRefererHeader: false,
|
||||
// encoding: undefined,
|
||||
// stream: false, // TODO allow a stream?
|
||||
gzip: false
|
||||
//, body: undefined
|
||||
//, json: undefined
|
||||
};
|
||||
module.exports = setDefaults(_defaults);
|
||||
exports.request = setDefaults(_defaults);
|
||||
exports._keys = _keys;
|
||||
|
||||
module.exports = exports.request;
|
||||
module.exports._keys = _keys;
|
||||
|
||||
module.exports._keys = Object.keys(_defaults).concat([
|
||||
'encoding',
|
||||
'stream',
|
||||
'body',
|
||||
'json',
|
||||
'form',
|
||||
'auth',
|
||||
'formData',
|
||||
'FormData',
|
||||
'userAgent' // non-standard for request.js
|
||||
]);
|
||||
module.exports.debug =
|
||||
-1 !== (process.env.NODE_DEBUG || '').split(/\s+/g).indexOf('urequest');
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* @typedef {import('./types.js').Response} Response
|
||||
* @typedef {import('./types.js').Headers} Headers
|
||||
*/
|
|
@ -7,13 +7,17 @@
|
|||
"index.js": "browser.js"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
"browser.js",
|
||||
"lib",
|
||||
"local-types.js",
|
||||
"types.js"
|
||||
],
|
||||
"directories": {
|
||||
"example": "examples"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"prepublish": "./bin/localize-types"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
'use strict';
|
||||
|
||||
module.exports._typesOnly = true;
|
||||
|
||||
/**
|
||||
* @callback Request
|
||||
* @param {Object} opts
|
||||
* @param {String} [opts.body]
|
||||
* @param {Object.<String,any>} [opts.form]
|
||||
* @param {Headers} opts.headers
|
||||
* @param {Boolean | String} [opts.json]
|
||||
* @param {String} [opts.method]
|
||||
* @param {String} opts.url
|
||||
* @returns {Response}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Response
|
||||
* @prop {any} body
|
||||
* @prop {Headers} headers
|
||||
* @prop {Boolean} ok
|
||||
* @prop {any} [response] - TODO (browser only)
|
||||
* @prop {any} request - TODO
|
||||
* @prop {String} status
|
||||
* @prop {Number} statusCode
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object.<String,String|Array<String>>} Headers
|
||||
*/
|
Loading…
Reference in New Issue