Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

native-promise-pool

Package Overview
Dependencies
Maintainers
2
Versions
95
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

native-promise-pool - npm Package Compare versions

Comparing version 3.16.0 to 3.17.0

edition-es2019-esm/index.js

28

compiled-types/index.d.ts
/** Promise Pool */
export default class PromisePool<EveryItemResult extends any> {
/** How many tasks to run at once. */
concurrency: number
/** How many tasks are currently running. */
running: number
/** How many tasks have been started. */
started: number
/** For upcoming tasks, they have a function (a promise resolver) inserted into the queue which starts the task when called. */
protected readonly queue: Array<Function>
/** Instantiate the PromisePool with the desired concurrency. */
constructor(concurrency?: number)
/** Add a task to the pool. */
open<AnyItemResult extends EveryItemResult>(
task: () => Promise<AnyItemResult> | AnyItemResult
): Promise<AnyItemResult>
/** How many tasks to run at once. */
concurrency: number;
/** How many tasks are currently running. */
running: number;
/** How many tasks have been started. */
started: number;
/** For upcoming tasks, they have a function (a promise resolver) inserted into the queue which starts the task when called. */
protected readonly queue: Array<Function>;
/** Instantiate the PromisePool with the desired concurrency. */
constructor(concurrency?: number);
/** Add a task to the pool. */
open<AnyItemResult extends EveryItemResult>(task: () => Promise<AnyItemResult> | AnyItemResult): Promise<AnyItemResult>;
}
//# sourceMappingURL=index.d.ts.map
//# sourceMappingURL=index.d.ts.map
/** Promise Pool */
export default class PromisePool {
/** Instantiate the PromisePool with the desired concurrency. */
constructor(concurrency = 0) {
this.concurrency = concurrency
this.running = 0
this.started = 0
this.queue = []
}
/** Add a task to the pool. */
open(task) {
// Create our promise and push its resolver to the queue.
// This has the effect that we can queue its execution for later, instead of right now.
const p = new Promise((resolve) => this.queue.push(resolve))
// Once the resolver has fired, update the counts accordingly.
.finally(() => {
this.started--
this.running++
})
// Fire our our task and store the result.
.then(task)
// Update our counts accordingly, and start the next queue item if there are any.
.finally(() => {
this.running--
if (this.queue.length) {
this.started++
const resolver = this.queue.shift()
resolver()
}
})
// If our pool is under capacity, then start the first item in the queue.
if (
this.queue.length &&
(!this.concurrency || this.running + this.started < this.concurrency)
) {
this.started++
const resolver = this.queue.shift()
resolver()
}
// Return the the promise that wraps the task,
// such that it resolves once the task has compelted and our wrappers have completed.
// This allows the user to do `Promise.all(Array<Task>.map((task) => pool.open(task)))`,
// so that they can queue something for when all their pooled tasks are completed.
// It also allows the user to do the mandatory `.catch` handling for task failures.
return p
}
/** Instantiate the PromisePool with the desired concurrency. */
constructor(concurrency = 0) {
this.concurrency = concurrency;
this.running = 0;
this.started = 0;
this.queue = [];
}
/** Add a task to the pool. */
open(task) {
// Create our promise and push its resolver to the queue.
// This has the effect that we can queue its execution for later, instead of right now.
const p = new Promise((resolve) => this.queue.push(resolve))
// Once the resolver has fired, update the counts accordingly.
.finally(() => {
this.started--;
this.running++;
})
// Fire our our task and store the result.
.then(task)
// Update our counts accordingly, and start the next queue item if there are any.
.finally(() => {
this.running--;
if (this.queue.length) {
this.started++;
const resolver = this.queue.shift();
resolver();
}
});
// If our pool is under capacity, then start the first item in the queue.
if (this.queue.length &&
(!this.concurrency || this.running + this.started < this.concurrency)) {
this.started++;
const resolver = this.queue.shift();
resolver();
}
// Return the the promise that wraps the task,
// such that it resolves once the task has compelted and our wrappers have completed.
// This allows the user to do `Promise.all(Array<Task>.map((task) => pool.open(task)))`,
// so that they can queue something for when all their pooled tasks are completed.
// It also allows the user to do the mandatory `.catch` handling for task failures.
return p;
}
}
# History
## v3.17.0 2021 July 28
- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation)
## v3.16.0 2020 October 29

@@ -4,0 +8,0 @@

@@ -18,3 +18,3 @@ <!-- LICENSEFILE/ -->

The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

@@ -21,0 +21,0 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

{
"name": "native-promise-pool",
"version": "3.16.0",
"version": "3.17.0",
"description": "Create a pool of a specified concurrency that accepts functions that return promises",

@@ -11,7 +11,3 @@ "homepage": "https://github.com/bevry/native-promise-pool",

"concurrency",
"deno",
"deno-edition",
"deno-entry",
"denoland",
"esnext",
"es2019",
"export-default",

@@ -31,3 +27,3 @@ "flow",

"list": [
"travisci",
"githubworkflow",
"npmversion",

@@ -49,2 +45,3 @@ "npmdownloads",

"config": {
"githubWorkflow": "bevry",
"githubSponsorsUsername": "balupton",

@@ -59,3 +56,2 @@ "buymeacoffeeUsername": "balupton",

"wishlistURL": "https://bevry.me/wishlist",
"travisTLD": "com",
"githubUsername": "bevry",

@@ -98,3 +94,3 @@ "githubRepository": "native-promise-pool",

{
"description": "TypeScript compiled against ES2019 for web browsers with Import for modules",
"description": "TypeScript compiled against ES2020 for web browsers with Import for modules",
"directory": "edition-browsers",

@@ -113,4 +109,4 @@ "entry": "index.js",

{
"description": "TypeScript compiled against ESNext for Node.js 10 || 12 || 14 || 15 with Require for modules",
"directory": "edition-esnext",
"description": "TypeScript compiled against ES2019 for Node.js 10 || 12 || 14 with Require for modules",
"directory": "edition-es2019",
"entry": "index.js",

@@ -120,7 +116,7 @@ "tags": [

"javascript",
"esnext",
"es2019",
"require"
],
"engines": {
"node": "10 || 12 || 14 || 15",
"node": "10 || 12 || 14",
"browsers": false

@@ -130,4 +126,4 @@ }

{
"description": "TypeScript compiled against ESNext for Node.js 12 || 14 || 15 with Import for modules",
"directory": "edition-esnext-esm",
"description": "TypeScript compiled against ES2019 for Node.js 12 || 14 with Import for modules",
"directory": "edition-es2019-esm",
"entry": "index.js",

@@ -137,23 +133,9 @@ "tags": [

"javascript",
"esnext",
"es2019",
"import"
],
"engines": {
"node": "12 || 14 || 15",
"node": "12 || 14",
"browsers": false
}
},
{
"description": "TypeScript source code made to be compatible with Deno",
"directory": "edition-deno",
"entry": "index.ts",
"tags": [
"typescript",
"import",
"deno"
],
"engines": {
"deno": true,
"browsers": true
}
}

@@ -163,7 +145,7 @@ ],

"type": "module",
"main": "edition-esnext/index.js",
"main": "edition-es2019/index.js",
"exports": {
"node": {
"import": "./edition-esnext-esm/index.js",
"require": "./edition-esnext/index.js"
"import": "./edition-es2019-esm/index.js",
"require": "./edition-es2019/index.js"
},

@@ -174,31 +156,32 @@ "browser": {

},
"deno": "edition-deno/index.ts",
"browser": "edition-browsers/index.js",
"module": "edition-browsers/index.js",
"devDependencies": {
"@bevry/update-contributors": "^1.17.0",
"@typescript-eslint/eslint-plugin": "^4.6.0",
"@typescript-eslint/parser": "^4.6.0",
"assert-helpers": "^8.1.0",
"eslint": "^7.12.1",
"@bevry/ansi": "^3.0.0",
"@bevry/update-contributors": "^1.18.0",
"@typescript-eslint/eslint-plugin": "^4.28.5",
"@typescript-eslint/parser": "^4.28.5",
"assert-helpers": "^8.2.0",
"eslint": "^7.31.0",
"eslint-config-bevry": "^3.23.0",
"eslint-config-prettier": "^6.15.0",
"eslint-plugin-prettier": "^3.1.4",
"kava": "^5.13.0",
"make-deno-edition": "^1.2.0",
"prettier": "^2.1.2",
"projectz": "^2.16.0",
"surge": "^0.21.6",
"typedoc": "^0.19.2",
"typescript": "^4.0.5",
"valid-directory": "^3.4.0",
"valid-module": "^1.14.0"
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.4.0",
"kava": "^5.14.0",
"logger-clearable": "^3.15.0",
"make-deno-edition": "^1.3.0",
"prettier": "^2.3.2",
"projectz": "^2.18.0",
"surge": "^0.23.0",
"typedoc": "^0.21.4",
"typescript": "4.3.5",
"valid-directory": "^3.7.0",
"valid-module": "^1.15.0"
},
"scripts": {
"our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next",
"our:compile": "npm run our:compile:deno && npm run our:compile:edition-browsers && npm run our:compile:edition-esnext && npm run our:compile:edition-esnext-esm && npm run our:compile:types",
"our:compile": "npm run our:compile:deno && npm run our:compile:edition-browsers && npm run our:compile:edition-es2019 && npm run our:compile:edition-es2019-esm && npm run our:compile:types",
"our:compile:deno": "make-deno-edition --attempt",
"our:compile:edition-browsers": "tsc --module ESNext --target ES2019 --outDir ./edition-browsers --project tsconfig.json && ( test ! -d edition-browsers/source || ( mv edition-browsers/source edition-temp && rm -Rf edition-browsers && mv edition-temp edition-browsers ) )",
"our:compile:edition-esnext": "tsc --module commonjs --target ESNext --outDir ./edition-esnext --project tsconfig.json && ( test ! -d edition-esnext/source || ( mv edition-esnext/source edition-temp && rm -Rf edition-esnext && mv edition-temp edition-esnext ) ) && echo '{\"type\": \"commonjs\"}' > edition-esnext/package.json",
"our:compile:edition-esnext-esm": "tsc --module ESNext --target ESNext --outDir ./edition-esnext-esm --project tsconfig.json && ( test ! -d edition-esnext-esm/source || ( mv edition-esnext-esm/source edition-temp && rm -Rf edition-esnext-esm && mv edition-temp edition-esnext-esm ) ) && echo '{\"type\": \"module\"}' > edition-esnext-esm/package.json",
"our:compile:edition-browsers": "tsc --module ESNext --target ES2020 --outDir ./edition-browsers --project tsconfig.json && ( test ! -d edition-browsers/source || ( mv edition-browsers/source edition-temp && rm -Rf edition-browsers && mv edition-temp edition-browsers ) )",
"our:compile:edition-es2019": "tsc --module commonjs --target ES2019 --outDir ./edition-es2019 --project tsconfig.json && ( test ! -d edition-es2019/source || ( mv edition-es2019/source edition-temp && rm -Rf edition-es2019 && mv edition-temp edition-es2019 ) ) && echo '{\"type\": \"commonjs\"}' > edition-es2019/package.json",
"our:compile:edition-es2019-esm": "tsc --module ESNext --target ES2019 --outDir ./edition-es2019-esm --project tsconfig.json && ( test ! -d edition-es2019-esm/source || ( mv edition-es2019-esm/source edition-temp && rm -Rf edition-es2019-esm && mv edition-temp edition-es2019-esm ) ) && echo '{\"type\": \"module\"}' > edition-es2019-esm/package.json",
"our:compile:types": "tsc --project tsconfig.json --emitDeclarationOnly --declaration --declarationMap --declarationDir ./compiled-types && ( test ! -d compiled-types/source || ( mv compiled-types/source edition-temp && rm -Rf compiled-types && mv edition-temp compiled-types ) )",

@@ -209,3 +192,3 @@ "our:deploy": "echo no need for this project",

"our:meta:docs": "npm run our:meta:docs:typedoc",
"our:meta:docs:typedoc": "rm -Rf ./docs && typedoc --mode file --exclude '**/+(*test*|node_modules)' --excludeExternals --name \"$npm_package_name\" --readme ./README.md --out ./docs ./source",
"our:meta:docs:typedoc": "rm -Rf ./docs && typedoc --exclude '**/+(*test*|node_modules)' --excludeExternals --out ./docs ./source",
"our:meta:projectz": "projectz compile",

@@ -216,3 +199,3 @@ "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push",

"our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta",
"our:release:push": "git push origin master && git push origin --tags",
"our:release:push": "git push origin && git push origin --tags",
"our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"",

@@ -227,3 +210,3 @@ "our:setup": "npm run our:setup:install",

"our:verify:prettier": "prettier --write .",
"test": "node ./edition-esnext/test.js"
"test": "node ./edition-es2019/test.js"
},

@@ -230,0 +213,0 @@ "eslintConfig": {

@@ -10,3 +10,3 @@ <!-- TITLE/ -->

<span class="badge-travisci"><a href="http://travis-ci.com/bevry/native-promise-pool" title="Check this project's build status on TravisCI"><img src="https://img.shields.io/travis/com/bevry/native-promise-pool/master.svg" alt="Travis CI Build Status" /></a></span>
<span class="badge-githubworkflow"><a href="https://github.com/bevry/native-promise-pool/actions?query=workflow%3Abevry" title="View the status of this project's GitHub Workflow: bevry"><img src="https://github.com/bevry/native-promise-pool/workflows/bevry/badge.svg" alt="Status of the GitHub Workflow: bevry" /></a></span>
<span class="badge-npmversion"><a href="https://npmjs.org/package/native-promise-pool" title="View this project on NPM"><img src="https://img.shields.io/npm/v/native-promise-pool.svg" alt="NPM version" /></a></span>

@@ -93,8 +93,2 @@ <span class="badge-npmdownloads"><a href="https://npmjs.org/package/native-promise-pool" title="View this project on NPM"><img src="https://img.shields.io/npm/dm/native-promise-pool.svg" alt="NPM downloads" /></a></span>

<a href="https://deno.land" title="Deno is a secure runtime for JavaScript and TypeScript, it is an alternative for Node.js"><h3>Deno</h3></a>
``` typescript
import pkg from 'https://unpkg.com/native-promise-pool@^3.16.0/edition-deno/index.ts'
```
<a href="https://www.skypack.dev" title="Skypack is a JavaScript Delivery Network for modern web apps"><h3>Skypack</h3></a>

@@ -104,3 +98,3 @@

<script type="module">
import pkg from '//cdn.skypack.dev/native-promise-pool@^3.16.0'
import pkg from '//cdn.skypack.dev/native-promise-pool@^3.17.0'
</script>

@@ -113,3 +107,3 @@ ```

<script type="module">
import pkg from '//unpkg.com/native-promise-pool@^3.16.0'
import pkg from '//unpkg.com/native-promise-pool@^3.17.0'
</script>

@@ -122,3 +116,3 @@ ```

<script type="module">
import pkg from '//dev.jspm.io/native-promise-pool@3.16.0'
import pkg from '//dev.jspm.io/native-promise-pool@3.17.0'
</script>

@@ -132,7 +126,6 @@ ```

<ul><li><code>native-promise-pool/source/index.ts</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> source code with <a href="https://babeljs.io/docs/learn-es2015/#modules" title="ECMAScript Modules">Import</a> for modules</li>
<li><code>native-promise-pool/edition-browsers/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#10th_Edition_-_ECMAScript_2019" title="ECMAScript ES2019">ES2019</a> for web browsers with <a href="https://babeljs.io/docs/learn-es2015/#modules" title="ECMAScript Modules">Import</a> for modules</li>
<li><code>native-promise-pool</code> aliases <code>native-promise-pool/edition-esnext/index.js</code></li>
<li><code>native-promise-pool/edition-esnext/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#ES.Next" title="ECMAScript Next">ESNext</a> for <a href="https://nodejs.org" title="Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine">Node.js</a> 10 || 12 || 14 || 15 with <a href="https://nodejs.org/dist/latest-v5.x/docs/api/modules.html" title="Node/CJS Modules">Require</a> for modules</li>
<li><code>native-promise-pool/edition-esnext-esm/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#ES.Next" title="ECMAScript Next">ESNext</a> for <a href="https://nodejs.org" title="Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine">Node.js</a> 12 || 14 || 15 with <a href="https://babeljs.io/docs/learn-es2015/#modules" title="ECMAScript Modules">Import</a> for modules</li>
<li><code>native-promise-pool/edition-deno/index.ts</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> source code made to be compatible with <a href="https://deno.land" title="Deno is a secure runtime for JavaScript and TypeScript, it is an alternative to Node.js">Deno</a></li></ul>
<li><code>native-promise-pool/edition-browsers/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#11th_Edition_–_ECMAScript_2020" title="ECMAScript ES2020">ES2020</a> for web browsers with <a href="https://babeljs.io/docs/learn-es2015/#modules" title="ECMAScript Modules">Import</a> for modules</li>
<li><code>native-promise-pool</code> aliases <code>native-promise-pool/edition-es2019/index.js</code></li>
<li><code>native-promise-pool/edition-es2019/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#10th_Edition_-_ECMAScript_2019" title="ECMAScript ES2019">ES2019</a> for <a href="https://nodejs.org" title="Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine">Node.js</a> 10 || 12 || 14 with <a href="https://nodejs.org/dist/latest-v5.x/docs/api/modules.html" title="Node/CJS Modules">Require</a> for modules</li>
<li><code>native-promise-pool/edition-es2019-esm/index.js</code> is <a href="https://www.typescriptlang.org/" title="TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. ">TypeScript</a> compiled against <a href="https://en.wikipedia.org/wiki/ECMAScript#10th_Edition_-_ECMAScript_2019" title="ECMAScript ES2019">ES2019</a> for <a href="https://nodejs.org" title="Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine">Node.js</a> 12 || 14 with <a href="https://babeljs.io/docs/learn-es2015/#modules" title="ECMAScript Modules">Import</a> for modules</li></ul>

@@ -139,0 +132,0 @@ <!-- /INSTALL -->

@@ -9,4 +9,3 @@ {

"strict": true,
"target": "ESNext",
"lib": ["ESNext"],
"target": "ES2019",
"module": "ESNext"

@@ -13,0 +12,0 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc