UNPKG

lightning-pool

Version:

Fastest generic Pool written with TypeScript

125 lines (124 loc) 4.11 kB
import { EventEmitter } from 'events'; const defaultValues = { acquireMaxRetries: 0, acquireRetryWait: 2000, acquireTimeoutMillis: 0, fifo: true, idleTimeoutMillis: 30000, houseKeepInterval: 1000, min: 0, minIdle: 0, max: 10, maxQueue: 1000, validation: true, }; export class PoolOptions extends EventEmitter { constructor(pool) { super(); this.pool = pool; this._acquireMaxRetries = defaultValues.acquireMaxRetries; this._acquireRetryWait = defaultValues.acquireRetryWait; this._acquireTimeoutMillis = defaultValues.acquireTimeoutMillis; this._fifo = defaultValues.fifo; this._idleTimeoutMillis = defaultValues.idleTimeoutMillis; this._houseKeepInterval = defaultValues.houseKeepInterval; this._min = defaultValues.min; this._minIdle = defaultValues.minIdle; this._max = defaultValues.max; this._maxQueue = defaultValues.maxQueue; this._validation = defaultValues.validation; this.pool = pool; } get acquireMaxRetries() { return this._acquireMaxRetries; } set acquireMaxRetries(val) { this._acquireMaxRetries = val >= 0 ? val : defaultValues.acquireMaxRetries; this.emit('change', 'acquireMaxRetries', this._acquireMaxRetries); } get acquireRetryWait() { return this._acquireRetryWait; } set acquireRetryWait(val) { this._acquireRetryWait = val >= 0 ? val : defaultValues.acquireRetryWait; this.emit('change', 'acquireRetryWait', this._acquireRetryWait); } get acquireTimeoutMillis() { return this._acquireTimeoutMillis; } set acquireTimeoutMillis(val) { this._acquireTimeoutMillis = val >= 0 ? val : defaultValues.acquireTimeoutMillis; this.emit('change', 'acquireTimeoutMillis', this._acquireTimeoutMillis); } get fifo() { return this._fifo; } set fifo(val) { // noinspection PointlessBooleanExpressionJS this._fifo = !!val; this.emit('change', 'fifo', this.fifo); } get idleTimeoutMillis() { return this._idleTimeoutMillis; } set idleTimeoutMillis(val) { this._idleTimeoutMillis = val >= 0 ? val : defaultValues.idleTimeoutMillis; this.emit('change', 'idleTimeoutMillis', this._idleTimeoutMillis); } get houseKeepInterval() { return this._houseKeepInterval; } set houseKeepInterval(val) { this._houseKeepInterval = val >= 0 ? val : defaultValues.houseKeepInterval; this.emit('change', 'houseKeepInterval', this._houseKeepInterval); } get min() { return this._min; } set min(val) { this._min = val >= 0 ? val : defaultValues.min; if (this._min > this._max) this._max = this._min; this.emit('change', 'min', this._min); } get minIdle() { return this._minIdle; } set minIdle(val) { this._minIdle = val >= 0 ? val : defaultValues.minIdle; this.emit('change', 'minIdle', this.minIdle); } get max() { return this._max; } set max(val) { this._max = val >= 0 ? Math.max(val, 1) : defaultValues.max; if (this._min > this._max) this._min = this._max; this.emit('change', 'max', this._max); } get maxQueue() { return this._maxQueue; } set maxQueue(val) { this._maxQueue = val >= 0 ? Math.max(val, 1) : defaultValues.maxQueue; this.emit('change', 'maxQueue', this._maxQueue); } get validation() { return this._validation; } set validation(val) { // noinspection PointlessBooleanExpressionJS this._validation = !!val; this.emit('change', 'validation', this._validation); } assign(values) { const proto = Object.getPrototypeOf(this); for (const k of Object.keys(values)) { const desc = Object.getOwnPropertyDescriptor(proto, k); if (desc && desc.set) this[k] = values[k]; } } }