build(deps-dev): apply updates
[poolifier.git] / README.md
index ad2fa0c4e199c220ad4db8baa3fc347d80e99528..43bc095f4631fa39fe72120ef98fb6945c63a9ea 100644 (file)
--- a/README.md
+++ b/README.md
@@ -2,29 +2,27 @@
   <img src="./images/logo.png" width="340px" height="266px"/>
 </div>
 
-<h1 align="center">Node.js Worker_Threads and Cluster Worker Pool</h1>
+<div align="center">
+
+# Node.js Worker_Threads and Cluster Worker Pool
+
+</div>
 
 <div align="center">
-  <a href="https://github.com/poolifier/poolifier/graphs/commit-activity">
-    <img alt="GitHub commit activity (master)" src="https://img.shields.io/github/commit-activity/m/poolifier/poolifier/master?color=brightgreen"></a>
-  <a href="https://www.npmjs.com/package/poolifier">
-    <img alt="Weekly Downloads" src="https://badgen.net/npm/dw/poolifier"></a>
-  <a href="https://github.com/poolifier/poolifier/actions/workflows/ci.yml">
-    <img alt="Actions Status" src="https://github.com/poolifier/poolifier/actions/workflows/ci.yml/badge.svg"></a>
-  <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
-    <img alt="Code Coverage" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=coverage"></a>
-  <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
-    <img alt="Quality Gate Status" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=alert_status"></a>
-  <a href="https://standardjs.com">
-    <img alt="Javascript Standard Style Guide" src="https://badgen.net/static/code style/standard/green"></a>
-  <a href="https://discord.gg/85VrP8m8">
-    <img alt="Discord" src="https://badgen.net/discord/online-members/85VrP8m8?icon=discord&label=discord&color=green"></a>
-  <a href="https://opencollective.com/poolifier">
-    <img alt="Open Collective" src="https://opencollective.com/poolifier/tiers/badge.svg"></a>
-  <a href="http://makeapullrequest.com">
-    <img alt="PRs welcome" src="https://badgen.net/static/PRs/welcome/green"></a>
-  <a href="https://badgen.net/static/code style/standard/green">
-    <img alt="No dependencies" src="https://badgen.net/static/dependencies/no dependencies/green"></a>
+
+[![GitHub commit activity (master)](https://img.shields.io/github/commit-activity/m/poolifier/poolifier/master?color=brightgreen&logo=github)](https://github.com/poolifier/poolifier/graphs/commit-activity)
+[![Npm Version](https://badgen.net/npm/v/poolifier?icon=npm)](https://www.npmjs.com/package/poolifier)
+[![Npm Weekly Downloads](https://badgen.net/npm/dw/poolifier?icon=npm)](https://www.npmjs.com/package/poolifier)
+[![JSR Version](https://jsr.io/badges/@poolifier/poolifier)](https://jsr.io/@poolifier/poolifier)
+[![CI Workflow](https://github.com/poolifier/poolifier/actions/workflows/ci.yml/badge.svg)](https://github.com/poolifier/poolifier/actions/workflows/ci.yml)
+[![Code Coverage](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=coverage)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=alert_status)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+[![Javascript Standard Style Guide](<https://badgen.net/static/code style/standard/green>)](https://standardjs.com)
+[![Discord](https://badgen.net/discord/online-members/vXxZhyb3b6?icon=discord&label=discord&color=green)](https://discord.gg/vXxZhyb3b6)
+[![Open Collective](https://opencollective.com/poolifier/tiers/badge.svg)](https://opencollective.com/poolifier)
+[![PRs Welcome](https://badgen.net/static/PRs/welcome/green)](https://makeapullrequest.com)
+[![No Dependencies](<https://badgen.net/static/dependencies/no dependencies/green>)](<https://badgen.net/static/dependencies/no dependencies/green>)
+
 </div>
 
 ## Why Poolifier?
@@ -40,28 +38,28 @@ Please consult our [general guidelines](#general-guidelines).
 - Performance [benchmarks](./benchmarks/README.md) :white_check_mark:
 - No runtime dependencies :white_check_mark:
 - Proper integration with Node.js [async_hooks](https://nodejs.org/api/async_hooks.html) :white_check_mark:
-- Support for CommonJS, ESM, and TypeScript :white_check_mark:
+- Support for CommonJS, ESM and TypeScript :white_check_mark:
 - Support for [worker_threads](https://nodejs.org/api/worker_threads.html) and [cluster](https://nodejs.org/api/cluster.html) Node.js modules :white_check_mark:
-- Support for multiple task functions :white_check_mark:
-- Support for task functions CRUD operations at runtime :white_check_mark:
-- Support for sync and async task functions :white_check_mark:
 - Tasks distribution strategies :white_check_mark:
 - Lockless tasks queueing :white_check_mark:
 - Queued tasks rescheduling:
-  - Task stealing :white_check_mark:
+  - Task stealing on idle :white_check_mark:
   - Tasks stealing under back pressure :white_check_mark:
   - Tasks redistribution on worker error :white_check_mark:
+- Support for sync and async task function :white_check_mark:
+- Support for multiple task functions with per task function queuing priority and tasks distribution strategy :white_check_mark:
+- Support for task functions [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations at runtime :white_check_mark:
 - General guidelines on pool choice :white_check_mark:
 - Error handling out of the box :white_check_mark:
 - Widely tested :white_check_mark:
 - Active community :white_check_mark:
-- Code quality [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=bugs)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-  [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=code_smells)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-  [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-  [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-  [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-  [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=sqale_index)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-- Code security [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=security_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
+- Code quality [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=bugs)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+  [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=code_smells)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+  [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+  [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+  [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+  [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=sqale_index)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
+- Code security [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=security_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=poolifier_poolifier)
 
 ## Table of contents
 
@@ -85,17 +83,24 @@ You have to implement your worker by extending the _ThreadWorker_ or _ClusterWor
 
 ## Installation
 
+### npmjs
+
 ```shell
 npm install poolifier --save
 ```
 
+### JSR
+
+```shell
+npx jsr add @poolifier/poolifier
+```
+
 ## Usage
 
-You can implement a [worker_threads](https://nodejs.org/api/worker_threads.html#class-worker) worker in a simple way by extending the class _ThreadWorker_:
+You can implement a poolifier [worker_threads](https://nodejs.org/api/worker_threads.html#class-worker) worker in a simple way by extending the class _ThreadWorker_:
 
 ```js
-'use strict'
-const { ThreadWorker } = require('poolifier')
+import { ThreadWorker } from 'poolifier'
 
 function yourFunction(data) {
   // this will be executed in the worker thread,
@@ -111,36 +116,35 @@ module.exports = new ThreadWorker(yourFunction, {
 Instantiate your pool based on your needs :
 
 ```js
-'use strict'
-const { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } = require('poolifier')
+import { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } from 'poolifier'
 
 // a fixed worker_threads pool
 const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
-  errorHandler: (e) => console.error(e),
-  onlineHandler: () => console.info('worker is online')
+  onlineHandler: () => console.info('worker is online'),
+  errorHandler: e => console.error(e)
 })
 
-pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
-pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
+pool.emitter?.on(PoolEvents.ready, () => console.info('Pool is ready'))
+pool.emitter?.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // or a dynamic worker_threads pool
 const pool = new DynamicThreadPool(Math.floor(availableParallelism() / 2), availableParallelism(), './yourWorker.js', {
-  errorHandler: (e) => console.error(e),
-  onlineHandler: () => console.info('worker is online')
+  onlineHandler: () => console.info('worker is online'),
+  errorHandler: e => console.error(e)
 })
 
-pool.emitter.on(PoolEvents.full, () => console.info('Pool is full'))
-pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
-pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
+pool.emitter?.on(PoolEvents.full, () => console.info('Pool is full'))
+pool.emitter?.on(PoolEvents.ready, () => console.info('Pool is ready'))
+pool.emitter?.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // the execute method signature is the same for both implementations,
 // so you can easily switch from one to another
 pool
   .execute()
-  .then((res) => {
+  .then(res => {
     console.info(res)
   })
-  .catch((err) => {
+  .catch(err => {
     console.error(err)
   })
 ```
@@ -169,7 +173,7 @@ Remember that workers can only send and receive structured-cloneable data.
 
 ## Node.js versions
 
-Node.js versions >= 16.14.x are supported.
+Node.js versions >= 18.x.x are supported.
 
 ## [API](./docs/api.md)