kaven-utils
Version:
Utils for Node.js.
58 lines (57 loc) • 2.11 kB
JavaScript
/********************************************************************
* @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}`;
}
}