Skip to content

Commit

Permalink
Documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
teintinu committed Oct 28, 2021
1 parent 15bdca8 commit d4d0e73
Show file tree
Hide file tree
Showing 20 changed files with 5,208 additions and 32 deletions.
31 changes: 31 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"env": {
"browser": true,
"es2021": true,
"node": true,
"jest": true
},
"extends": [
"plugin:react/recommended",
"standard"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": [
"react",
"@typescript-eslint"
],
"rules": {
},
"settings": {
"react": {
"version": "detect"
}
}
}
14 changes: 3 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
# monoclean

node_modules
.nvm.rc
package.json
package-lock.json
yarn-lock.*
yarn.lock
tsconfig.**
jest.config.js
yarn-error.log
tmp
out
.eslintrc.json
dist
coverage
.vscode

6 changes: 6 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"recommendations": [
"dbaeumer.vscode-eslint",
"redhat.vscode-yaml"
]
}
22 changes: 22 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/env": true,
"**/venv": true
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/**": true,
"**/env/**": true,
"**/venv/**": true,
"env-*": true
},
"yaml.schemas": {
"https://teintinu.github.io/monoclean/monoclean-schema.json": [
"monoclean.yml"
]
},
"typescript.disableAutomaticTypeAcquisition": true
}
57 changes: 56 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,57 @@
# pjobs
Efficient promise queue job manager
A simple and efficient queue job executor using promises. And some promise's utilities.

# install

```bash
npm install --save pjobs
```

# usage

## `queuePromises`
defines an executor for jobs. A job is just a function that returns a Promise. You can also control concurrency and promises.
```typescript
import { queuePromises } from 'pjobs'
const queue = queuePromises({
concurrency: 1, // maximum of promises running concurrently
onProgress (status) { // allow you to inform users about execution progress
console.log('queue status: ', status)
}
})
queue.enqueue(async () => { // add a job to the queue
console.log('task 1')
})
queue.enqueue(async () => { // add another job to the queue
console.log('task 2')
})

await queue.waitFor() // wait for all jobs to be finished.
```

## `defer`
allow you to defer promise's resolving or rejecting.

```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()
```

## `sleep`
allow you pause execution flow for some miliseconds

```typescript
import { sleep } from 'pjobs'
await sleep(100) // pause execution flow for 100 miliseconds
```
45 changes: 45 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
const { pathsToModuleNameMapper } = require('ts-jest/utils')
const { compilerOptions } = require('./tsconfig.test')

const moduleNameMapper = pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' })

module.exports = {
preset: 'ts-jest',
modulePathIgnorePatterns: ['dist'],
testPathIgnorePatterns: ['node_modules', 'dist'],
testRegex: '(\\.(test|spec|steps))\\.(ts|tsx)$',
globals: {
'ts-jest': {
tsConfig: 'tsconfig.test.json'
}
},
moduleNameMapper,
transform: {
'^.+\\.tsx?$': [
'esbuild-jest',
{
sourcemap: 'inline',
target: ['es6','node12'],
loaders: {
'.spec.ts': 'tsx',
'.test.ts': 'tsx',
'.steps.ts': 'tsx',
}
}
]
},
coverageReporters: [
'text',
'html',
'cobertura',
'json-summary'
],
coverageThreshold: {
global: {
lines: 90,
statements: 90,
functions: 90,
branches: 90
}
}
}
7 changes: 0 additions & 7 deletions monoclean.yml

This file was deleted.

35 changes: 35 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "pjobs",
"description": "A simple and efficient queue job executor using promises. And some promise's utilities.",
"version": "1.0.1",
"private": true,
"devDependencies": {
"@types/jest": "^27.0.2",
"@types/source-map-support": "^0.5.4",
"@typescript-eslint/eslint-plugin": "^5.2.0",
"@typescript-eslint/parser": "^5.2.0",
"dts-bundle-generator": "^5.9.0",
"esbuild": "^0.13.9",
"esbuild-jest": "^0.5.0",
"eslint": "^8.1.0",
"eslint-config-standard": "^16.0.3",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-react": "^7.26.1",
"jest": "^27.3.1",
"source-map-support": "^0.5.20",
"ts-jest": "^27.0.7",
"typescript": "^4.4.4"
},
"scripts": {
"build": "monoclean build",
"clean": "monoclean clean",
"publish": "monoclean publish",
"start": "monoclean run",
"tsc-watch": "tsc -p . --watch"
},
"workspaces": [
"package"
]
}
3 changes: 3 additions & 0 deletions package/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
src
*.map

57 changes: 57 additions & 0 deletions package/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# pjobs
A simple and efficient queue job executor using promises. And some promise's utilities.

# install

```bash
npm install --save pjobs
```

# usage

## `queuePromises`
defines an executor for jobs. A job is just a function that returns a Promise. You can also control concurrency and promises.
```typescript
import { queuePromises } from 'pjobs'
const queue = queuePromises({
concurrency: 1, // maximum of promises running concurrently
onProgress (status) { // allow you to inform users about execution progress
console.log('queue status: ', status)
}
})
queue.enqueue(async () => { // add a job to the queue
console.log('task 1')
})
queue.enqueue(async () => { // add another job to the queue
console.log('task 2')
})

await queue.waitFor() // wait for all jobs to be finished.
```

## `defer`
allow you to defer promise's resolving or rejecting.

```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()
```

## `sleep`
allow you pause execution flow for some miliseconds

```typescript
import { sleep } from 'pjobs'
await sleep(100) // pause execution flow for 100 miliseconds
```
26 changes: 26 additions & 0 deletions package/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"name": "pjobs",
"description": "A simple and efficient queue job executor using promises. And some promise's utilities.",
"version": "1.0.1",
"private": false,
"main": "dist/index.js",
"types": "dist/index.d.ts",
"devDependencies": {
"@types/jest": "^27.0.2",
"@types/source-map-support": "^0.5.4",
"dts-bundle-generator": "^5.9.0",
"esbuild": "^0.13.9",
"esbuild-jest": "^0.5.0",
"jest": "^27.3.1",
"source-map-support": "^0.5.20",
"ts-jest": "^27.0.7",
"typescript": "^4.4.4"
},
"scripts": {
"buildDTS": "dts-bundle-generator --project ./tsconfig.build.json --verbose",
"buildWithTSC": "tsc -p ./tsconfig.build.json",
"prepublish": "yarn test && yarn buildWithTSC",
"test": "jest --config ../jest.config.js .",
"clean": "monoclean clean"
}
}
18 changes: 17 additions & 1 deletion package/src/defer.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
import { defer } from './defer'
import { queuePromises } from './queue'

describe('defer', () => {
it('usage sample', async () => {
const taskOne = defer<void>()
const queue = queuePromises()
queue.enqueue(async () => {
console.log('task 1')
taskOne.resolve()
})
queue.enqueue(async () => {
console.log('task 2')
})
expect(queue.state()).not.toBe('idle')
await taskOne.promise
await queue.waitFor()
expect(queue.state()).toBe('idle')
})
it('resolving', async () => {
const p = defer<number>()
setTimeout(() => p.resolve(1), 1)
Expand All @@ -14,7 +30,7 @@ describe('defer', () => {
try {
const v = await p.promise
expect(v).toBeUndefined()
} catch (e) {
} catch (e: any) {
expect(e.message).toBe('error')
}
})
Expand Down
22 changes: 20 additions & 2 deletions package/src/queue.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@ import { queuePromises } from './queue'
import { sleep } from './sleep'

describe('queuePromises', () => {
it('usage sample', async () => {
const queue = queuePromises({
concurrency: 1,
onProgress (status) {
console.log('queue status: ', status)
}
})
queue.enqueue(async () => {
console.log('task 1')
})
queue.enqueue(async () => {
console.log('task 2')
})
expect(queue.state()).not.toBe('idle')
await queue.waitFor()
expect(queue.state()).toBe('idle')
})

it('should wait close method be finish', async () => {
const history: number[] = []

Expand All @@ -27,7 +45,7 @@ describe('queuePromises', () => {

expect(queue.state()).not.toBe('idle')

await sleep(50)
await queue.waitFor()
expect(queue.state()).toBe('idle')

for (let i = 30; i < 60; i++) {
Expand All @@ -43,7 +61,7 @@ describe('queuePromises', () => {

expect(queue.state()).not.toBe('idle')

await sleep(50)
await queue.waitFor()
expect(queue.state()).toBe('idle')

expect(count).toBe(60)
Expand Down
Loading

0 comments on commit d4d0e73

Please sign in to comment.