@jcoreio/async-throttle
Advanced tools
Comparing version
@@ -1,16 +0,16 @@ | ||
"use strict"; | ||
'use strict'; | ||
var _regenerator = require("babel-runtime/regenerator"); | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator"); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); | ||
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); | ||
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); | ||
var _promise = require("babel-runtime/core-js/promise"); | ||
var _promise = require('babel-runtime/core-js/promise'); | ||
@@ -28,6 +28,5 @@ var _promise2 = _interopRequireDefault(_promise); | ||
module.exports = function throttle(fn, wait) { | ||
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, | ||
getNextArgs = _ref.getNextArgs; | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
if (!getNextArgs) getNextArgs = function getNextArgs(prev, next) { | ||
var getNextArgs = options.getNextArgs || function (prev, next) { | ||
return next; | ||
@@ -45,2 +44,3 @@ }; | ||
var args = nextArgs; | ||
if (!args) throw new Error('unexpected error: nextArgs is null'); | ||
nextArgs = null; | ||
@@ -50,21 +50,30 @@ return lastPromise = fn.apply(undefined, (0, _toConsumableArray3.default)(args)); | ||
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { | ||
var _args = arguments; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
nextArgs = nextArgs ? getNextArgs(nextArgs, [].concat(Array.prototype.slice.call(_args))) : [].concat(Array.prototype.slice.call(_args)); | ||
if (!nextPromise) { | ||
nextPromise = _promise2.default.all([lastPromise, delay(lastInvokeTime + wait - Date.now())]).then(invoke, invoke); | ||
} | ||
return _context.abrupt("return", nextPromise); | ||
return function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
case 3: | ||
case "end": | ||
return _context.stop(); | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
nextArgs = nextArgs ? getNextArgs(nextArgs, args) : args; | ||
if (!nextPromise) { | ||
nextPromise = _promise2.default.all([lastPromise, delay(lastInvokeTime + wait - Date.now())]).then(invoke, invoke); | ||
} | ||
return _context.abrupt('return', nextPromise); | ||
case 3: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
}, _callee, this); | ||
})); | ||
return function () { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
}; |
{ | ||
"name": "@jcoreio/async-throttle", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"description": "throttle async and promise-returning functions. Other packages don't do it right.", | ||
"main": "lib/index.js", | ||
"scripts": { | ||
"lint": "eslint src test", | ||
"lint:fix": "eslint --fix src test", | ||
"lint:watch": "esw --watch src test", | ||
"lint": "eslint src test --cache", | ||
"lint:fix": "eslint --fix src test --cache", | ||
"lint:watch": "esw --watch src test --cache", | ||
"flow": "flow", | ||
"flow:coverage": "for file in src/**.js test/**.js; do echo $file; flow coverage $file; done", | ||
"flow:watch": "flow-watch -e js,js.flow,flowconfig --ignore lib/ --ignore node_modules/ --watch .flowconfig --watch src/ --watch test/", | ||
"gen-flow-files": "flow gen-flow-files src/ --out-dir lib", | ||
"copy-flow-files": "cd src; copy *.js.flow **/*.js.flow ../lib", | ||
"build": "rimraf lib && babel src --out-dir lib", | ||
"build": "rimraf lib && babel src --out-dir lib && flow-copy-source -v src/ lib", | ||
"test": "NODE_ENV=production BABEL_ENV=test nyc --reporter=lcov --reporter=text mocha $npm_package_config_mocha", | ||
"test:watch": "mocha --watch $npm_package_config_mocha", | ||
"commitmsg": "validate-commit-msg", | ||
"codecov": "nyc report --reporter=text-lcov > coverage.lcov; codecov", | ||
"commitmsg": "commitlint -e $GIT_PARAMS", | ||
"precommit": "npm run lint && flow", | ||
"prepush": "npm test", | ||
"prepublish": "npm run lint && flow && npm test && npm run build && npm run copy-flow-files", | ||
"prepublishOnly": "npm run lint && flow && npm test && npm run build", | ||
"open:coverage": "open coverage/lcov-report/index.html", | ||
"semantic-release": "semantic-release pre && npm publish && semantic-release post" | ||
"semantic-release": "semantic-release", | ||
"travis-deploy-once": "travis-deploy-once" | ||
}, | ||
"config": { | ||
"mocha": "--compilers js:babel-core/register ./test/**/*.js", | ||
"mocha": "-r babel-register ./test/**/*.js", | ||
"commitizen": { | ||
@@ -58,32 +58,35 @@ "path": "cz-conventional-changelog" | ||
"devDependencies": { | ||
"@jedwards1211/eslint-config": "^1.0.0", | ||
"@commitlint/cli": "^6.0.2", | ||
"@commitlint/config-conventional": "^6.0.2", | ||
"@jedwards1211/commitlint-config": "^1.0.0", | ||
"@jedwards1211/eslint-config": "^2.0.0", | ||
"@jedwards1211/eslint-config-flow": "^1.0.0", | ||
"babel-cli": "^6.22.2", | ||
"babel-core": "^6.22.1", | ||
"babel-cli": "^6.23.0", | ||
"babel-core": "^6.23.1", | ||
"babel-eslint": "^7.1.1", | ||
"babel-plugin-istanbul": "^4.0.0", | ||
"babel-plugin-transform-runtime": "^6.22.0", | ||
"babel-plugin-transform-runtime": "^6.23.0", | ||
"babel-preset-es2015": "^6.22.0", | ||
"babel-preset-flow": "^6.23.0", | ||
"babel-preset-stage-1": "^6.22.0", | ||
"babel-register": "^6.22.0", | ||
"babel-runtime": "^6.22.0", | ||
"bluebird": "^3.5.0", | ||
"chai": "^3.5.0", | ||
"babel-register": "^6.23.0", | ||
"babel-runtime": "^6.23.0", | ||
"chai": "^4.1.2", | ||
"codecov": "^3.0.0", | ||
"copy": "^0.3.0", | ||
"coveralls": "^2.11.16", | ||
"eslint": "^3.13.1", | ||
"eslint": "^3.15.0", | ||
"eslint-plugin-flowtype": "^2.30.0", | ||
"eslint-watch": "^3.0.0", | ||
"flow-bin": "^0.56.0", | ||
"flow-bin": "^0.72.0", | ||
"flow-copy-source": "^1.2.1", | ||
"flow-watch": "^1.1.0", | ||
"husky": "^0.13.1", | ||
"husky": "^0.14.3", | ||
"istanbul": "^0.4.5", | ||
"mocha": "^3.2.0", | ||
"nyc": "^10.1.2", | ||
"rimraf": "^2.5.4", | ||
"semantic-release": "^6.3.6", | ||
"sinon": "^2.1.0", | ||
"validate-commit-msg": "^2.8.2" | ||
"mocha": "^4.1.0", | ||
"nyc": "^11.4.1", | ||
"rimraf": "^2.6.0", | ||
"semantic-release": "^15.1.4", | ||
"sinon": "^5.0.7", | ||
"travis-deploy-once": "^4.3.1" | ||
} | ||
} | ||
} |
# async-throttle | ||
[](https://travis-ci.org/jcoreio/async-throttle) | ||
[](https://coveralls.io/github/jcoreio/async-throttle?branch=master) | ||
-[](https://codecov.io/gh/jcoreio/async-throttle) | ||
[](https://github.com/semantic-release/semantic-release) | ||
@@ -6,0 +6,0 @@ [](http://commitizen.github.io/cz-cli/) |
@@ -1,15 +0,24 @@ | ||
const delay = ms => new Promise(resolve => setTimeout(resolve, Math.max(ms, 0) || 0)) | ||
// @flow | ||
module.exports = function throttle(fn, wait, {getNextArgs} = {}) { | ||
if (!getNextArgs) getNextArgs = (prev, next) => next | ||
const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, Math.max(ms, 0) || 0)) | ||
let nextArgs | ||
let lastPromise = delay(0) | ||
let nextPromise = null | ||
let lastInvokeTime = NaN | ||
module.exports = function throttle<Args: Array<any>, Value>( | ||
fn: (...args: Args) => Promise<Value>, | ||
wait: ?number, | ||
options: { | ||
getNextArgs?: (args0: Args, args1: Args) => Args, | ||
} = {} | ||
): (...args: Args) => Promise<Value> { | ||
const getNextArgs = options.getNextArgs || ((prev, next) => next) | ||
function invoke() { | ||
let nextArgs: ?Args | ||
let lastPromise: Promise<any> = delay(0) | ||
let nextPromise: ?Promise<Value> = null | ||
let lastInvokeTime: number = NaN | ||
function invoke(): Promise<Value> { | ||
lastInvokeTime = Date.now() | ||
nextPromise = null | ||
const args = nextArgs | ||
if (!args) throw new Error('unexpected error: nextArgs is null') | ||
nextArgs = null | ||
@@ -19,6 +28,6 @@ return lastPromise = fn(...args) | ||
return async function () { | ||
return async function (...args: Args): Promise<Value> { | ||
nextArgs = nextArgs | ||
? getNextArgs(nextArgs, [...arguments]) | ||
: [...arguments] | ||
? getNextArgs(nextArgs, args) | ||
: args | ||
if (!nextPromise) { | ||
@@ -25,0 +34,0 @@ nextPromise = Promise.all([ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
214471
-49.69%32
10.34%9
-18.18%92
-98.91%