182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
type ParserType =
 | 
						|
  | 'REQUEST'
 | 
						|
  | 'RESPONSE'
 | 
						|
 | 
						|
type RequestMethod =
 | 
						|
  | 'DELETE'
 | 
						|
  | 'GET'
 | 
						|
  | 'HEAD'
 | 
						|
  | 'POST'
 | 
						|
  | 'PUT'
 | 
						|
  | 'CONNECT'
 | 
						|
  | 'OPTIONS'
 | 
						|
  | 'TRACE'
 | 
						|
  | 'COPY'
 | 
						|
  | 'LOCK'
 | 
						|
  | 'MKCOL'
 | 
						|
  | 'MOVE'
 | 
						|
  | 'PROPFIND'
 | 
						|
  | 'PROPPATCH'
 | 
						|
  | 'SEARCH'
 | 
						|
  | 'UNLOCK'
 | 
						|
  | 'BIND'
 | 
						|
  | 'REBIND'
 | 
						|
  | 'UNBIND'
 | 
						|
  | 'ACL'
 | 
						|
  | 'REPORT'
 | 
						|
  | 'MKACTIVITY'
 | 
						|
  | 'CHECKOUT'
 | 
						|
  | 'MERGE'
 | 
						|
  | 'M-SEARCH'
 | 
						|
  | 'NOTIFY'
 | 
						|
  | 'SUBSCRIBE'
 | 
						|
  | 'UNSUBSCRIBE'
 | 
						|
  | 'PATCH'
 | 
						|
  | 'PURGE'
 | 
						|
  | 'MKCALENDAR'
 | 
						|
  | 'LINK'
 | 
						|
  | 'UNLINK'
 | 
						|
  | string
 | 
						|
 | 
						|
type StateHeaderKey =
 | 
						|
  | 'REQUEST_LINE'
 | 
						|
  | 'RESPONSE_LINE'
 | 
						|
  | 'HEADER'
 | 
						|
 | 
						|
type StateFinishAllowedKey =
 | 
						|
  | 'REQUEST_LINE'
 | 
						|
  | 'RESPONSE_LINE'
 | 
						|
  | 'BODY_RAW'
 | 
						|
 | 
						|
type HeaderObject = Array<string>
 | 
						|
type noop<T = void> = ()=> T
 | 
						|
 | 
						|
type HeaderInfo<HEADER = HeaderObject> = {
 | 
						|
  versionMajor: number
 | 
						|
  versionMinor: number
 | 
						|
  headers: HEADER
 | 
						|
  method: number
 | 
						|
  url: string
 | 
						|
  statusCode: number
 | 
						|
  statusMessage: string
 | 
						|
  upgrade: boolean
 | 
						|
  shouldKeepAlive: boolean
 | 
						|
}
 | 
						|
export type OnHeadersCompleteParser<HEADER = HeaderObject, Mode_0_12 extends boolean = true> = Mode_0_12 extends true
 | 
						|
  ? (info: HeaderInfo<HEADER>)=> number | void
 | 
						|
  : (
 | 
						|
    versionMajor: number,
 | 
						|
    versionMinor: number,
 | 
						|
    headers: HEADER,
 | 
						|
    method: number,
 | 
						|
    url: string,
 | 
						|
    statusCode: number,
 | 
						|
    statusMessage: string,
 | 
						|
    upgrade: boolean,
 | 
						|
    shouldKeepAlive: boolean,
 | 
						|
  )=> number | void
 | 
						|
export type OnBodyParser = (chunk: Buffer, offset: number, length: number)=> void
 | 
						|
// Only called in the slow case where slow means
 | 
						|
// that the request headers were either fragmented
 | 
						|
// across multiple TCP packets or too large to be
 | 
						|
// processed in a single run. This method is also
 | 
						|
// called to process trailing HTTP headers.
 | 
						|
export type OnHeadersParser = (headers: string[], url: string)=> void
 | 
						|
 | 
						|
declare class HTTPParserJS {
 | 
						|
  initialize(type: ParserType, async_resource?: unknown): void
 | 
						|
 | 
						|
  // Some handler stubs, needed for compatibility
 | 
						|
  [HTTPParser.kOnHeaders]: OnHeadersParser
 | 
						|
  [HTTPParser.kOnHeadersComplete]: OnHeadersCompleteParser
 | 
						|
  [HTTPParser.kOnBody]: OnBodyParser
 | 
						|
  [HTTPParser.kOnMessageComplete]: noop
 | 
						|
 | 
						|
  /**
 | 
						|
   * Max number of bytes that will be parsed as headers, 80kb by default
 | 
						|
   * @default 81920
 | 
						|
   */
 | 
						|
  maxHeaderSize: number
 | 
						|
 | 
						|
  reinitialize: HTTPParserConstructor
 | 
						|
  close: noop
 | 
						|
  pause: noop
 | 
						|
  resume: noop
 | 
						|
  free: noop
 | 
						|
  private _compatMode0_11: false | boolean
 | 
						|
  getAsyncId: noop<0>
 | 
						|
 | 
						|
  execute(chunk: Buffer, start?: number, length?: number): number | Error
 | 
						|
  finish(): void | Error
 | 
						|
 | 
						|
  // These three methods are used for an internal speed optimization, and it also
 | 
						|
  // works if theses are noops. Basically consume() asks us to read the bytes
 | 
						|
  // ourselves, but if we don't do it we get them through execute().
 | 
						|
  consume: noop
 | 
						|
  unconsume: noop
 | 
						|
  getCurrentBuffer: noop
 | 
						|
 | 
						|
  /**
 | 
						|
   * For correct error handling - see HTTPParser#execute
 | 
						|
   * @example this.userCall()(userFunction('arg'));
 | 
						|
   */
 | 
						|
  userCall<T = unknown>(): (ret?: T)=> T
 | 
						|
  private nextRequest: noop
 | 
						|
  private consumeLine: noop<string|void>
 | 
						|
  parseHeader(line: string, headers: string[]): void
 | 
						|
  private REQUEST_LINE: noop
 | 
						|
  private RESPONSE_LINE: noop
 | 
						|
  shouldKeepAlive(): boolean
 | 
						|
  /**
 | 
						|
   * For older versions of node (v6.x and older?), that return `skipBody=1` or `skipBody=true`, need this `return true;` if it's an upgrade request.
 | 
						|
   */
 | 
						|
  private HEADER(): void | boolean
 | 
						|
  private BODY_CHUNKHEAD(): void
 | 
						|
  private BODY_CHUNK(): void
 | 
						|
  private BODY_CHUNKEMPTYLINE(): void
 | 
						|
  private BODY_CHUNKTRAILERS(): void
 | 
						|
  private BODY_RAW(): void
 | 
						|
  private BODY_SIZED(): void
 | 
						|
 | 
						|
  get onHeaders(): OnHeadersParser
 | 
						|
  set onHeaders(to: OnHeadersParser)
 | 
						|
 | 
						|
  get onHeadersComplete(): OnHeadersCompleteParser
 | 
						|
  set onHeadersComplete(to: OnHeadersCompleteParser)
 | 
						|
 | 
						|
  get onBody(): OnBodyParser
 | 
						|
  set onBody(to: OnBodyParser)
 | 
						|
 | 
						|
  get onMessageComplete(): noop
 | 
						|
  set onMessageComplete(to: noop)
 | 
						|
}
 | 
						|
 | 
						|
interface HTTPParserConstructor extends Function {
 | 
						|
  new(type?: ParserType): HTTPParserJS
 | 
						|
  (type?: ParserType): void
 | 
						|
 | 
						|
  readonly prototype: HTTPParserJS
 | 
						|
 | 
						|
  readonly REQUEST: 'REQUEST'
 | 
						|
  readonly RESPONSE: 'RESPONSE'
 | 
						|
  readonly methods: RequestMethod[]
 | 
						|
 | 
						|
  encoding: 'ascii'|string
 | 
						|
  /**
 | 
						|
   * maxHeaderSize (in bytes) is configurable, but 80kb by default;
 | 
						|
   * @default 80 * 1024 = 80kb
 | 
						|
   */
 | 
						|
  maxHeaderSize: 81920|number
 | 
						|
 | 
						|
  // Note: *not* starting with kOnHeaders=0 line the Node parser, because any
 | 
						|
  // newly added constants (kOnTimeout in Node v12.19.0) will overwrite 0!
 | 
						|
  readonly kOnHeaders: 1
 | 
						|
  readonly kOnHeadersComplete: 2
 | 
						|
  readonly kOnBody: 3
 | 
						|
  readonly kOnMessageComplete: 4
 | 
						|
 | 
						|
  kOnExecute(): void
 | 
						|
}
 | 
						|
export const HTTPParser: HTTPParserConstructor
 | 
						|
export const methods: RequestMethod[]
 |