From 750751966e40e97f3af554ab01cb22c2543b64d3 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Thu, 1 Sep 2022 00:06:19 -0600 Subject: [PATCH] lint+feat: add types + minor ws-ish refactor --- bin/localize-types | 14 ++++++++++ index.js | 70 +++++++++++++++++++++++++++------------------- local-types.js | 4 +++ package.json | 8 ++++-- types.js | 30 ++++++++++++++++++++ 5 files changed, 95 insertions(+), 31 deletions(-) create mode 100755 bin/localize-types create mode 100644 local-types.js create mode 100644 types.js diff --git a/bin/localize-types b/bin/localize-types new file mode 100755 index 0000000..66f102e --- /dev/null +++ b/bin/localize-types @@ -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 diff --git a/index.js b/index.js index 52de083..f7bba7b 100644 --- a/index.js +++ b/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'); diff --git a/local-types.js b/local-types.js new file mode 100644 index 0000000..bdfbe74 --- /dev/null +++ b/local-types.js @@ -0,0 +1,4 @@ +/** + * @typedef {import('./types.js').Response} Response + * @typedef {import('./types.js').Headers} Headers + */ diff --git a/package.json b/package.json index 242b788..40a5565 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/types.js b/types.js new file mode 100644 index 0000000..9420906 --- /dev/null +++ b/types.js @@ -0,0 +1,30 @@ +'use strict'; + +module.exports._typesOnly = true; + +/** + * @callback Request + * @param {Object} opts + * @param {String} [opts.body] + * @param {Object.} [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.>} Headers + */