UNPKG

kaven-utils

Version:

Utils for Node.js.

58 lines (57 loc) 2.11 kB
/******************************************************************** * @author: Kaven * @email: kaven@wuwenkai.com * @website: http://blog.kaven.xyz * @file: [Kaven-Utils] /src/net/http/HttpRequestStartLine.ts * @create: 2022-04-15 11:13:05.127 * @modify: 2025-06-21 13:47:58.567 * @version: 5.5.2 * @times: 12 * @lines: 78 * @copyright: Copyright © 2022-2025 Kaven. All Rights Reserved. * @description: [description] * @license: [license] ********************************************************************/ import { ArrayAny, HttpRequestMethods, KavenUrl, Strings_Empty, Strings_WhiteSpace, } from "kaven-basic"; export class HttpRequestStartLine { isHttpRequest = false; Method; RequestTarget; HttpVersion; UseCompleteTarget = true; get RequestTargetString() { if (this.RequestTarget === undefined) { return ""; } if (this.UseCompleteTarget) { return this.RequestTarget.ToString(); } return this.RequestTarget.PathAndParameters; } get IsHttpRequest() { return this.isHttpRequest; } Parse(line) { const messageHeaderStartLineParts = line.split(Strings_WhiteSpace); this.isHttpRequest = messageHeaderStartLineParts.length === 3; if (this.isHttpRequest) { const httpMethod = messageHeaderStartLineParts[0].toUpperCase(); this.isHttpRequest = ArrayAny(Object.values(HttpRequestMethods), p => httpMethod === p); if (this.isHttpRequest) { this.Method = httpMethod; this.RequestTarget = new KavenUrl(messageHeaderStartLineParts[1]); this.HttpVersion = messageHeaderStartLineParts[2]; } } return this.isHttpRequest; } get IsHttpConnect() { return this.Method === HttpRequestMethods.CONNECT; } ToString() { if (!this.IsHttpRequest) { return Strings_Empty; } return `${this.Method} ${this.RequestTargetString} ${this.HttpVersion}`; } }