kaven-utils
Version:
Utils for Node.js.
58 lines (57 loc) • 2.09 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: 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}`;
}
}