UNPKG

kaven-utils

Version:

Utils for Node.js.

58 lines (57 loc) 2.09 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: 2022-05-01 14:12:19.789 * @version: 4.0.1 * @times: 11 * @lines: 77 * @copyright: Copyright © 2022 Kaven. All Rights Reserved. * @description: [description] * @license: [license] ********************************************************************/ import { 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 = Object.values(HttpRequestMethods).Any(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}`; } }