Files
SnowLuma/.pnpm-store/v11/files/e2/e11e1c30b3acf9cf5e0b20540884c067bc1b5113e70b807b3160517bceeb21ea88cbd48cd39b8ce4082dc078aba22fa4e6a8cefe51db8b52633631903fd339
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

52 lines
1.3 KiB
Plaintext

'use strict'
const { InvalidArgumentError } = require('../core/errors')
const Client = require('./client')
class H2CClient extends Client {
constructor (origin, clientOpts) {
if (typeof origin === 'string') {
origin = new URL(origin)
}
if (origin.protocol !== 'http:') {
throw new InvalidArgumentError(
'h2c-client: Only h2c protocol is supported'
)
}
const { maxConcurrentStreams, pipelining, ...opts } =
clientOpts ?? {}
const defaultMaxConcurrentStreams = maxConcurrentStreams ?? 100
let defaultPipelining = 100
if (
maxConcurrentStreams != null &&
(!Number.isInteger(maxConcurrentStreams) ||
maxConcurrentStreams < 1)
) {
throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')
}
if (pipelining != null && Number.isInteger(pipelining) && pipelining > 0) {
defaultPipelining = pipelining
}
if (defaultPipelining > defaultMaxConcurrentStreams) {
throw new InvalidArgumentError(
'h2c-client: pipelining cannot be greater than maxConcurrentStreams'
)
}
super(origin, {
...opts,
maxConcurrentStreams: defaultMaxConcurrentStreams,
pipelining: defaultPipelining,
allowH2: true,
useH2c: true
})
}
}
module.exports = H2CClient