Spaces:
Runtime error
Runtime error
| const { | |
| PoolBase, | |
| kClients, | |
| kNeedDrain, | |
| kAddClient, | |
| kGetDispatcher | |
| } = require('./pool-base') | |
| const Client = require('./client') | |
| const { | |
| InvalidArgumentError | |
| } = require('./core/errors') | |
| const util = require('./core/util') | |
| const { kUrl, kInterceptors } = require('./core/symbols') | |
| const buildConnector = require('./core/connect') | |
| const kOptions = Symbol('options') | |
| const kConnections = Symbol('connections') | |
| const kFactory = Symbol('factory') | |
| function defaultFactory (origin, opts) { | |
| return new Client(origin, opts) | |
| } | |
| class Pool extends PoolBase { | |
| constructor (origin, { | |
| connections, | |
| factory = defaultFactory, | |
| connect, | |
| connectTimeout, | |
| tls, | |
| maxCachedSessions, | |
| socketPath, | |
| autoSelectFamily, | |
| autoSelectFamilyAttemptTimeout, | |
| allowH2, | |
| ...options | |
| } = {}) { | |
| super() | |
| if (connections != null && (!Number.isFinite(connections) || connections < 0)) { | |
| throw new InvalidArgumentError('invalid connections') | |
| } | |
| if (typeof factory !== 'function') { | |
| throw new InvalidArgumentError('factory must be a function.') | |
| } | |
| if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { | |
| throw new InvalidArgumentError('connect must be a function or an object') | |
| } | |
| if (typeof connect !== 'function') { | |
| connect = buildConnector({ | |
| ...tls, | |
| maxCachedSessions, | |
| allowH2, | |
| socketPath, | |
| timeout: connectTimeout, | |
| ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), | |
| ...connect | |
| }) | |
| } | |
| this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool) | |
| ? options.interceptors.Pool | |
| : [] | |
| this[kConnections] = connections || null | |
| this[kUrl] = util.parseOrigin(origin) | |
| this[kOptions] = { ...util.deepClone(options), connect, allowH2 } | |
| this[kOptions].interceptors = options.interceptors | |
| ? { ...options.interceptors } | |
| : undefined | |
| this[kFactory] = factory | |
| } | |
| [kGetDispatcher] () { | |
| let dispatcher = this[kClients].find(dispatcher => !dispatcher[kNeedDrain]) | |
| if (dispatcher) { | |
| return dispatcher | |
| } | |
| if (!this[kConnections] || this[kClients].length < this[kConnections]) { | |
| dispatcher = this[kFactory](this[kUrl], this[kOptions]) | |
| this[kAddClient](dispatcher) | |
| } | |
| return dispatcher | |
| } | |
| } | |
| module.exports = Pool | |