{"_rev":"5-08dbf083d163b54525646b84de0a32b1","time":{"created":"2023-02-02T06:15:10.499Z","1.0.1":"2022-08-19T02:58:39.147Z","modified":"2023-02-02T06:15:10.927Z","1.0.2":"2022-08-19T03:05:26.436Z","1.0.3":"2023-02-01T10:10:51.968Z","1.0.5":"2023-02-02T06:15:10.730Z"},"_id":"@alius/pool","name":"@alius/pool","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.5":{"name":"@alius/pool","version":"1.0.5","description":"Resource pool","author":{"name":"Aleksandras Novikovas","email":"Aleksandras.Novikovas@gmail.com","url":"http://www.systemtier.com/"},"license":"MIT","type":"module","repository":{"type":"git","url":"git+https://aleksandras-novikovas@bitbucket.org/aleksandras-novikovas/pool.git"},"exports":{".":"./index.js","./index.js":"./index.js"},"types":"./index.d.ts","scripts":{"doc":"npx jsdoc src -c $NODE_PATH/jsdoc-import/jsdoc.json -r -d web/docs","lint":"npx eslint src test","test":"npx mocha --loader=$NODE_PATH/esml/esmLoader.js","types":"npx tsc ./src/* -lib esnext --declaration --allowJs --emitDeclarationOnly --esModuleInterop --outDir types"},"keywords":["pool"],"dependencies":{"@alius/timeout-promise":"^1.0.5"},"eslintConfig":{"env":{"es2021":true,"node":true},"extends":"eslint:recommended","parserOptions":{"ecmaVersion":2022,"sourceType":"module"},"rules":{"indent":["error",2],"linebreak-style":["error","unix"],"quotes":["error","double"],"semi":["error","always"],"padded-blocks":["error",{"blocks":"never","classes":"never","switches":"never"}]}},"mocha":{"recursive":true},"gitHead":"e31797be3cc971ac858a37b7e17df889d277284f","bugs":{"url":"https://bitbucket.org/aleksandras-novikovas/pool/issues"},"homepage":"https://bitbucket.org/aleksandras-novikovas/pool#readme","_id":"@alius/pool@1.0.5","_nodeVersion":"18.13.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-l6AHmzxtyNHdh0xZSVRBEB59Ywdqfka/MgqSkDNIArIKjAjrQ7bv5CdX0/t641cKbC4ryDCkhlBnwp2LOeVlUQ==","shasum":"a4eab3b53d0730ca697f2573e26ae399fbfcc775","tarball":"https://registry.npmjs.org/@alius/pool/-/pool-1.0.5.tgz","fileCount":9,"unpackedSize":66300,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEagZVfly5PiRb9SQ5+QT+bHFL2vcIfsHoNkKdjYhiTlAiEA51ShNZVdnLgl9sY2GZRXeq2RgMI44qQQTBpfSYIZxCA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj21TuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmplew//SAIh7xMcpn7DJUxQjAN3E4GkBB/kQvatESuZ2aU/gjqojXO9\r\nbziaAAlrQOWt12ZgWPRbbhGqOK2WNBCW7MzAsqyEM43t4fZS8lLMUgC7aI1u\r\nac7iJqAvLSbxv8dSibGtNyMLkDy0OvjHvQbOtyBTMlezCzgkSADAIBFRoaIH\r\neWuiHk1OfBpnMwYJpg6V+ecY1HfkxwfEgrnJ+qepKiig5RyS8ctjQ6exPgWb\r\nKMXZ1Rxf0rMPypokNcnLSaSHqvNbFufkPW0ulTZgQUlo8F5nQ7wq4w/SGsMv\r\n+Q/DIHMNa/ZU5wYt59W4OEDVKldIssRjNvOJ0B0GRA/4NaVnAw89Vhg/gt31\r\nlqmq5rpSQH7/oo7xjc49wIdPeb7LxxeudkHIjCzJ965uVnXfwWiPz36mOKRs\r\njNaUYS/Pax2WbBXhSQLl0xReqWyhErutvX6gSWhZthvnrUZ2W8NJholhl8on\r\nKH6Iwfm130JgW90YRO2ayGK2ufLrP5SPWvyV8pYr2UsyITQ+0kuzRkb243uv\r\n0b6hy4lEvtPKuiadjG2KcHjb94cc7PcTGQTNpkm/j4HPsm/hEXrNO7Ujpmo/\r\nY+uNMkWVtblywwabjJRnSf4MeZWaPoxqEwORsebsk/dqzsH1WjK/B4q9BE6R\r\n7svWeakrV3Dj8+64GeT5kuH4qtjhbPCFcwU=\r\n=x4nj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alius","email":"Aleksandras.Novikovas@gmail.com"},"directories":{},"maintainers":[{"name":"alius","email":"Aleksandras.Novikovas@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pool_1.0.5_1675318510572_0.7159257857716677"},"_hasShrinkwrap":false}},"maintainers":[{"name":"alius","email":"Aleksandras.Novikovas@gmail.com"}],"description":"Resource pool","homepage":"https://bitbucket.org/aleksandras-novikovas/pool#readme","keywords":["pool"],"repository":{"type":"git","url":"git+https://aleksandras-novikovas@bitbucket.org/aleksandras-novikovas/pool.git"},"author":{"name":"Aleksandras Novikovas","email":"Aleksandras.Novikovas@gmail.com","url":"http://www.systemtier.com/"},"bugs":{"url":"https://bitbucket.org/aleksandras-novikovas/pool/issues"},"license":"MIT","readme":"Resource pool.\n\n# Installation\n```\nnpm install @alius/pool\n```\n\n# Usage\n```javascript\nimport { Pool, ResourceFactory } from \"@alius/pool\";\n\n// create resource factory class\nclass MyResourceFactory extends ResourceFactory {\n  // used for creating new resource\n  async create() {\n    // for example database connection\n    const res = {};\n    return res;\n  }\n\n  // used for destroying resource\n  async destroy(resource) {\n    // for example disconnect from database\n  }\n\n  // used for validating existing resource\n  async validate(resource) {\n    // validate resource\n    if (resourceIsNotValid) {\n      throw new Error();\n    }\n  }\n}\n\n// create resource factory\nconst resourceFactory = new MyResourceFactory();\n\nconst poolOptions = {\n  max: 10,\n  min: 3,\n  validate: true\n};\n\n// create and start pool\nconst pool = new Pool(resourceFactory, poolOptions);\npool.start();\n\n// acquire and use resource\nlet resource;\ntry {\n  resource = await pool.acquire();\n  // use resource\n} catch(err) {\n  console.error(\"got error\", err);\n} finally {\n  if (resource) {\n    pool.release(resource);\n  }\n}\n\n// shut down pool\nawait pool.shutDown();\n```\n\n# API\n\n## Constructors\n### `Pool(resourceFactory)`\nCreates new pool with specified resource factory.\n### `Pool(resourceFactory, poolOptions)`\nCreates new pool with specified resource factory and options.\n\n## Properties\n### `state`\n* CREATED - pool is just created\n* STARTED - pool is started\n* DOWN - pool is shutting down\n* STOPPED - pool is stopped\n### `stats`\nReturns current pool statistics: requests, creators, destroyers, resources(total, idle, inUse, testing)\n## Methods\n### `acquire()`\nAcquires new resource from pool.\nThis method creates and queues new request (Promise) for resource.\nRequest (Promise) will be resolved with resource as soon as it becomes available.\nIf pool is not started or is shutting down or request queue is full -\nreturns immediately with rejected request (Promise).\n### `release(resource)`\nReturns resource to pool.\n### `start()`\nStarts pool.\nPool will start only if it's state is either `CREATED` or `STOPPED`.\nTrying to start already running pool will be siletly discarded.\n### `shutDown()`\nShuts down pool.\nNew requests for resource acquisition will be immediately rejected.\nAll outstanding requests are rejected.\nReturns promise which will be resolved after all acquired resources\nare released and destroyed.\n\n## Events emitted\n* `started` - pool has been started\n* `stopping` - pool is stopping\n* `stopped` - pool has been stopped\n* `created` - new resource created\n* `createFailed` - failed to create new resource; error passed as event argument\n* `destroyed` - resource destroyed\n* `destroyFailed` - failed to destroy resource; error passed as event argument\n* `acquired` - resource acquired\n* `validationFailed` - failed to validate resource; error passed as event argument\n* `released` - resource released back to pool\n\n## Pool options (passed to constructor)\n* `createTimeout = 0` number of milliseconds to wait for creating resource; 0 - waits indefinitely.\n* `destroyTimeout = 0` number of milliseconds to wait for destroying resource; 0 - waits indefinitely.\n* `max = 1` maximum number of resources in this pool\n* `min = 0` minimum number of resources in this pool\n* `validate = false` should resource be tested before releasing it\n* `validateTimeout = 0` number of milliseconds to wait for testing resource; 0 - waits indefinitely.\n* `acquireTimeout = 0` number of milliseconds to wait for acquiring resource; 0 - waits indefinitely.\n* `maxTries = 0` maximum number of failed tries to create resource before rejecting request; 0 - tries indefinitely.\n* `maxQueue = 0` maximum number of requests in queue. Incomming requests overflowing max queue wil be immediately rejected; 0 - queue size is not restricted.\n* `evictionInterval = 0` how often to run eviction checks; 0 - will not run.\n* `evictionAge = 0` minimum number of milliseconds before resource becomes eligible for evition. Resource can be evicted only if pool size greater than minimum number of reources; 0 - no resource will be evicted.\n","readmeFilename":"README.md"}