From 770cb04a7b26631cd6d033bd1024fa774c9df2de Mon Sep 17 00:00:00 2001 From: Kevin Raynel Date: Sat, 11 Jan 2020 15:46:19 +0100 Subject: [PATCH] Add helpers and remove lodash dependency --- configure/request-next.js | 5 ++-- configure/request2.js | 5 ++-- lib/helpers.js | 51 +++++++++++++++++++++++++++++++++++++++ lib/plumbing.js | 10 ++++---- package.json | 7 +----- 5 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 lib/helpers.js diff --git a/configure/request-next.js b/configure/request-next.js index fd3d80b..a720c42 100644 --- a/configure/request-next.js +++ b/configure/request-next.js @@ -1,9 +1,10 @@ 'use strict'; var core = require('../'), + helpers = require('../lib/helpers'), isArray = Array.isArray, - isFunction = require('lodash.isfunction'), - isObjectLike = require('lodash.isobjectlike'); + isFunction = helpers.isFunction, + isObjectLike = helpers.isObjectLike; module.exports = function (options) { diff --git a/configure/request2.js b/configure/request2.js index 5979f63..0ac839a 100644 --- a/configure/request2.js +++ b/configure/request2.js @@ -1,9 +1,10 @@ 'use strict'; var core = require('../'), + helpers = require('../lib/helpers'), isArray = Array.isArray, - isFunction = require('lodash.isfunction'), - isObjectLike = require('lodash.isobjectlike'); + isFunction = helpers.isFunction, + isObjectLike = helpers.isObjectLike; module.exports = function (options) { diff --git a/lib/helpers.js b/lib/helpers.js new file mode 100644 index 0000000..be93790 --- /dev/null +++ b/lib/helpers.js @@ -0,0 +1,51 @@ +'use strict'; + +var + asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]', + nullTag = '[object Null]', + stringTag = '[object String]', + undefinedTag = '[object Undefined]'; + +function baseGetTag(value) { + if (value === undefined) { + return undefinedTag; + } + + if (value === null) { + return nullTag; + } + + return Object.prototype.toString.call(value); +} + +function isObject(value) { + var type = typeof value; + return value !== undefined && value !== null && (type === 'object' || type === 'function'); +} + +function isFunction(value) { + if (!isObject(value)) { + return false; + } + + var tag = baseGetTag(value); + return tag === funcTag || tag === genTag || tag === asyncTag || tag === proxyTag; +} + +function isObjectLike(value) { + return value !== undefined && value !== null && typeof value === 'object'; +} + +function isString(value) { + return typeof value === 'string' || + !Array.isArray(value) && isObjectLike(value) && baseGetTag(value) === stringTag; +} + +module.exports = { + isFunction: isFunction, + isString: isString, + isObjectLike: isObjectLike +}; diff --git a/lib/plumbing.js b/lib/plumbing.js index f7b8cb5..4eceda4 100644 --- a/lib/plumbing.js +++ b/lib/plumbing.js @@ -1,10 +1,10 @@ 'use strict'; var errors = require('./errors.js'), - isFunction = require('lodash.isfunction'), - isObjectLike = require('lodash.isobjectlike'), - isString = require('lodash.isstring'), - isUndefined = require('lodash.isundefined'); + helpers = require('./helpers'), + isFunction = helpers.isFunction, + isObjectLike = helpers.isObjectLike, + isString = helpers.isString; module.exports = function (options) { @@ -19,7 +19,7 @@ module.exports = function (options) { throw new TypeError(errorText + '.PromiseImpl'); } - if (!isUndefined(options.constructorMixin) && !isFunction(options.constructorMixin)) { + if (options.constructorMixin !== undefined && !isFunction(options.constructorMixin)) { throw new TypeError(errorText + '.PromiseImpl'); } diff --git a/package.json b/package.json index 706ff1f..bb4ad24 100644 --- a/package.json +++ b/package.json @@ -32,12 +32,6 @@ "engines": { "node": ">=0.10.0" }, - "dependencies": { - "lodash.isfunction": "^3.0.9", - "lodash.isobjectlike": "^4.0.0", - "lodash.isstring": "^4.0.1", - "lodash.isundefined": "^3.0.1" - }, "peerDependencies": { "request": "^2.34" }, @@ -54,6 +48,7 @@ "gulp-istanbul": "~1.0.0", "gulp-mocha": "~2.2.0", "lodash.flatten": "^4.4.0", + "lodash.isfunction": "^3.0.9", "node-version": "~1.0.0", "publish-please": "~2.4.1", "request": "^2.34.0",