pjobs
Advanced tools
Comparing version 1.0.6 to 1.0.8
@@ -1,2 +0,2 @@ | ||
// Generated by dts-bundle-generator v5.9.0 | ||
// Generated by dts-bundle-generator v6.2.0 | ||
@@ -27,3 +27,10 @@ export declare function sleep(timeout: number): Promise<void>; | ||
enqueue<T>(item: Job<T>): void; | ||
promise<T>(item: Job<T>): Promise<T>; | ||
waitFor(): Promise<void>; | ||
forceState(opts: { | ||
start: number; | ||
canRate: number; | ||
canRefresh: number; | ||
size: number; | ||
}): void; | ||
} | ||
@@ -30,0 +37,0 @@ export declare function queuePromises(opts?: QueryPromisesOpts): QueuePromises; |
@@ -1,1 +0,1 @@ | ||
var v=Object.defineProperty;var b=t=>v(t,"__esModule",{value:!0});var D=(t,o)=>{b(t);for(var s in o)v(t,s,{get:o[s],enumerable:!0})};D(exports,{asap:()=>f,defer:()=>F,queuePromises:()=>q,sleep:()=>Q});function Q(t){return new Promise(o=>{setTimeout(o,t)})}function F(){let t,o;return{promise:new Promise((e,r)=>{t=e,o=r}),resolve(e){t&&t(e)},reject(e){o&&o(e)}}}function f(t){setTimeout(()=>t(),1)}function q(t){let o=t?.concurrency||1,s=t?.onProgress,e=[],r=0,l=!0,m=Date.now(),u=0,p=0,y=0,a,h=0,T={get size(){return r},get pending(){return e.length},get done(){return r-e.length},get percent(){return Math.round((r-e.length)/r*1e3)/10},get rate(){let n=Date.now();if(n<p)return"-";let i=(n-m)/1e3;return(r-e.length)/i},get timeRemaining(){let n=Date.now();if(n<p)return"-";let i=(n-m)/1e3,c=(r-e.length)/i,d=(r-e.length)/c;if(d<50)return d.toFixed(0)+" seconds";if(d<120)return"one minute";let g=d/60;if(g<60)return g.toFixed(0)+" minutes";let w=g/60;return w<120?"one hour":w.toFixed(0)+" hours"}};return{get runned(){return h},state(){return l?"idle":T},enqueue(n){e.push(n),r++,p=Date.now()+1e3,x()},waitFor(){return new Promise((n,i)=>{setTimeout(c,100);function c(){u+e.length===0?(a?i(a):n(),a=void 0):setTimeout(c,100)}})}};function x(){l&&(m=Date.now(),l=!1);let n=Date.now();n>y&&(y=n+1e3,s&&setTimeout(()=>{r>0&&s(T)},1)),e.length?f(P):u<1&&(r=0,s&&f(()=>s("finished")),l=!0,setTimeout(()=>{a=void 0},2e3))}async function P(){for(;u<o;){let n=e.shift();if(!n)break;u++;try{await n()}catch(i){a=i}finally{h++,u--,x()}}}}0&&(module.exports={asap,defer,queuePromises,sleep}); | ||
var g=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var F=e=>g(e,"__esModule",{value:!0});var z=(e,t)=>{for(var s in t)g(e,s,{get:t[s],enumerable:!0})},J=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of D(t))!Q.call(e,o)&&(s||o!=="default")&&g(e,o,{get:()=>t[o],enumerable:!(n=R(t,o))||n.enumerable});return e};var S=(e=>(t,s)=>e&&e.get(t)||(s=J(F({}),t,1),e&&e.set(t,s),s))(typeof WeakMap!="undefined"?new WeakMap:0);var k={};z(k,{asap:()=>h,defer:()=>y,queuePromises:()=>j,sleep:()=>q});function q(e){return new Promise(t=>{setTimeout(t,e)})}function y(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve(n){e&&e(n)},reject(n){t&&t(n)}}}function h(e){setTimeout(()=>e(),1)}function j(e){let t=e?.concurrency||1,s=e?.onProgress,n=[],o=0,f=!0,d=Date.now(),u=0,l=0,T=0,a,b=0,v={get size(){return o},get pending(){return n.length},get done(){return o-n.length},get percent(){return Math.round((o-n.length)/o*1e3)/10},get rate(){let r=Date.now();if(r<l)return"-";let i=(r-d)/1e3;return(o-n.length)/i},get timeRemaining(){let r=Date.now();if(r<l)return"-";let i=(r-d)/1e3,c=(o-n.length)/i,m=(o-n.length)/c;if(m<2)return"one second";if(m<50)return m.toFixed(0)+" seconds";if(m<120)return"one minute";let p=m/60;if(p<60)return p.toFixed(0)+" minutes";let P=p/60;return p<120?"one hour":P.toFixed(0)+" hours"}};return{get runned(){return b},state(){return f?"idle":v},enqueue(r){n.push(r),o++,l=Date.now()+1e3,x()},promise(r){let i=y();return this.enqueue(()=>r().then(i.resolve,i.reject)),i.promise},waitFor(){return new Promise((r,i)=>{setTimeout(c,100);function c(){u+n.length===0?(a?i(a):r(),a=void 0):setTimeout(c,100)}})},forceState(r){d=r.start,l=r.canRate,T=r.canRefresh,o=r.size}};function x(){f&&(d=Date.now(),f=!1);let r=Date.now();r>T&&(T=r+1e3,s&&setTimeout(()=>{o>0&&s(v)},1)),n.length?h(w):u<1&&(o=0,s&&h(()=>s("finished")),f=!0,setTimeout(()=>{a=void 0},2e3))}async function w(){for(;u<t;){let r=n.shift();if(!r)break;u++;try{await r()}catch(i){a=i}finally{b++,u--,x()}}}}module.exports=S(k);0&&(module.exports={asap,defer,queuePromises,sleep}); |
{ | ||
"name": "pjobs", | ||
"description": "A simple and efficient queue job executor using promises. And some promise's utilities.", | ||
"version": "1.0.6", | ||
"version": "1.0.8", | ||
"private": false, | ||
@@ -9,11 +9,18 @@ "main": "dist/index.js", | ||
"devDependencies": { | ||
"@types/jest": "^27.0.2", | ||
"@types/jest": "^27.0.3", | ||
"@types/source-map-support": "^0.5.4", | ||
"dts-bundle-generator": "^5.9.0", | ||
"esbuild": "^0.13.9", | ||
"@typescript-eslint/eslint-plugin": "^5.7.0", | ||
"@typescript-eslint/parser": "^5.7.0", | ||
"dts-bundle-generator": "^6.2.0", | ||
"esbuild": "^0.14.5", | ||
"esbuild-jest": "^0.5.0", | ||
"jest": "^27.3.1", | ||
"source-map-support": "^0.5.20", | ||
"ts-jest": "^27.0.7", | ||
"typescript": "^4.4.4" | ||
"eslint": "^8.5.0", | ||
"eslint-config-standard": "^16.0.3", | ||
"eslint-plugin-import": "^2.25.3", | ||
"eslint-plugin-node": "^11.1.0", | ||
"eslint-plugin-promise": "^6.0.0", | ||
"jest": "^27.4.5", | ||
"source-map-support": "^0.5.21", | ||
"ts-jest": "^27.1.2", | ||
"typescript": "^4.5.4" | ||
}, | ||
@@ -25,5 +32,7 @@ "scripts": { | ||
"buildWithTSC": "tsc -p ./tsconfig.build.json", | ||
"test": "yarn buildWithEsbuild ; jest --config ../jest.config.js .", | ||
"prepublishOnly": "yarn buildWithEsbuild && yarn test && yarn build" | ||
"test": "jest", | ||
"prepublishOnly": "yarn buildWithEsbuild && yarn test && yarn build", | ||
"test-coverage": "jest --coverage", | ||
"lint": "eslint --fix --config .eslintrc.js" | ||
} | ||
} |
@@ -22,5 +22,3 @@ [![Node.js CI](https://github.com/teintinu/pjobs/actions/workflows/test.yml/badge.svg)](https://github.com/teintinu/pjobs/actions/workflows/test.yml) | ||
onProgress (status) { // allow you to inform users about execution progress | ||
console.log('done: ', status.percent, '%') | ||
console.log('speed: ', status.rate) // jobs runned per second | ||
console.log('estimated time remaining to finish: ', status.timeRemaining) | ||
console.log('queue status: ', status) | ||
} | ||
@@ -31,26 +29,21 @@ }) | ||
}) | ||
queue.enqueue(async () => { // add another job to the queue | ||
const promiseForTask2 = queue.promise(async () => { // add another job but returns a promise to this | ||
console.log('task 2') | ||
return 'OK' | ||
}) | ||
await queue.waitFor() // wait for all jobs to be finished. | ||
await promiseForTask2 // returns 'OK' | ||
``` | ||
## `defer` | ||
allow you to defer promise's resolving or rejecting. | ||
allow you to deferred promise. Like [promise-deferred NPM](https://www.npmjs.com/package/promise-deferred) but lighter. | ||
```typescript | ||
import { queuePromises, defer } from 'pjobs' | ||
const taskOne = defer<void>() // defines the deferred promise | ||
const queue = queuePromises() | ||
queue.enqueue(async () => { | ||
console.log('task 1') | ||
taskOne.resolve() // resolves the deferred promise | ||
}) | ||
queue.enqueue(async () => { | ||
console.log('task 2') | ||
}) | ||
expect(queue.state()).not.toBe('idle') | ||
await taskOne.promise // wait for the deferred promise to be resolved | ||
await queue.waitFor() | ||
import { defer } from 'pjobs' | ||
const deffered = defer<number>() | ||
setTimeout( ()=> deffered.resolve(1), 10) // | ||
setTimeout( ()=> deffered.reject(new Error('timeout')), 100) | ||
await deffered.promise | ||
``` | ||
@@ -63,3 +56,3 @@ | ||
import { sleep } from 'pjobs' | ||
await sleep(100) // pause execution flow for 100 miliseconds | ||
await sleep(100) // pauses execution flow for 100 miliseconds | ||
``` | ||
@@ -72,3 +65,3 @@ ## `asap` | ||
asap(()=>console.log('b')) // 'b' will be logged after 'a' | ||
console.log('a') | ||
console.log('a'); | ||
``` |
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
Copyleft License
License(Experimental) Copyleft license information was found
Found 1 instance in 1 package
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found
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
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found
Found 1 instance in 1 package
217741
46
1205
16
3
70
63