@adviser/cement 0.2.41 → 0.2.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{chunk-USQXEZHL.js → chunk-3RHIVQAA.js} +2 -2
- package/{chunk-W2GV5KXV.js → chunk-N3NUTN4B.js} +3 -3
- package/{chunk-F5W6VELE.js → chunk-N5LQQXOU.js} +2 -2
- package/chunk-PPS4L4VW.js +38 -0
- package/{chunk-GES3MUGV.js.map → chunk-PPS4L4VW.js.map} +1 -1
- package/index.cjs +352 -86
- package/index.cjs.map +1 -1
- package/index.d.cts +31 -1
- package/index.d.ts +31 -1
- package/index.js +359 -48
- package/index.js.map +1 -1
- package/node/index.js +2 -2
- package/package.json +2 -2
- package/src/http_header.ts +161 -0
- package/src/index.ts +1 -0
- package/src/jsr.json +1 -1
- package/src/uri.ts +31 -9
- package/src/utils/relative-path.ts +161 -0
- package/ts/http_header.d.ts +29 -0
- package/ts/http_header.d.ts.map +1 -0
- package/ts/http_header.js +155 -0
- package/ts/http_header.js.map +1 -0
- package/ts/http_header.test.d.ts +2 -0
- package/ts/http_header.test.d.ts.map +1 -0
- package/ts/http_header.test.js +90 -0
- package/ts/http_header.test.js.map +1 -0
- package/ts/index.d.ts +1 -0
- package/ts/index.d.ts.map +1 -1
- package/ts/index.js +1 -0
- package/ts/index.js.map +1 -1
- package/ts/logger-impl.js +8 -5
- package/ts/logger-impl.js.map +1 -1
- package/ts/logger.js +9 -3
- package/ts/logger.js.map +1 -1
- package/ts/tracer.js +24 -6
- package/ts/tracer.js.map +1 -1
- package/ts/uri.d.ts +1 -0
- package/ts/uri.d.ts.map +1 -1
- package/ts/uri.js +26 -10
- package/ts/uri.js.map +1 -1
- package/ts/uri.test.js +34 -5
- package/ts/uri.test.js.map +1 -1
- package/ts/utils/relative-path.d.ts +17 -0
- package/ts/utils/relative-path.d.ts.map +1 -0
- package/ts/utils/relative-path.js +148 -0
- package/ts/utils/relative-path.js.map +1 -0
- package/ts/utils/relative-path.test.d.ts +2 -0
- package/ts/utils/relative-path.test.d.ts.map +1 -0
- package/ts/utils/relative-path.test.js +187 -0
- package/ts/utils/relative-path.test.js.map +1 -0
- package/ts/utils/stripper.js +1 -1
- package/ts/utils/stripper.js.map +1 -1
- package/utils/index.js +2 -2
- package/web/index.js +3 -3
- package/chunk-GES3MUGV.js +0 -92
- /package/{chunk-USQXEZHL.js.map → chunk-3RHIVQAA.js.map} +0 -0
- /package/{chunk-W2GV5KXV.js.map → chunk-N3NUTN4B.js.map} +0 -0
- /package/{chunk-F5W6VELE.js.map → chunk-N5LQQXOU.js.map} +0 -0
package/node/index.js
CHANGED
@@ -2,10 +2,10 @@ import {
|
|
2
2
|
BaseSysAbstraction,
|
3
3
|
WrapperSysAbstraction,
|
4
4
|
envFactory
|
5
|
-
} from "../chunk-
|
5
|
+
} from "../chunk-N5LQQXOU.js";
|
6
6
|
import {
|
7
7
|
Utf8EnDecoderSingleton
|
8
|
-
} from "../chunk-
|
8
|
+
} from "../chunk-PPS4L4VW.js";
|
9
9
|
|
10
10
|
// src/node/node-file-service.ts
|
11
11
|
import path from "node:path";
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@adviser/cement",
|
3
|
-
"version": "0.2.
|
3
|
+
"version": "0.2.43",
|
4
4
|
"description": "better try/catch/finally handling",
|
5
5
|
"main": "index.js",
|
6
6
|
"type": "module",
|
@@ -49,7 +49,7 @@
|
|
49
49
|
"@vitest/browser": "^2.1.1",
|
50
50
|
"esbuild-plugin-replace": "^1.4.0",
|
51
51
|
"esbuild-plugin-resolve": "^2.0.0",
|
52
|
-
"eslint": "9.
|
52
|
+
"eslint": "9.17.0",
|
53
53
|
"prettier": "^3.3.3",
|
54
54
|
"tsup": "^8.3.0",
|
55
55
|
"tsx": "^4.19.1",
|
@@ -0,0 +1,161 @@
|
|
1
|
+
export class HeadersImpl extends Headers {
|
2
|
+
readonly _headers: Map<string, string>;
|
3
|
+
|
4
|
+
constructor(init: Map<string, string>) {
|
5
|
+
super();
|
6
|
+
this._headers = init;
|
7
|
+
}
|
8
|
+
|
9
|
+
override [Symbol.iterator](): IterableIterator<[string, string]> {
|
10
|
+
return this.entries();
|
11
|
+
}
|
12
|
+
|
13
|
+
override entries(): IterableIterator<[string, string]> {
|
14
|
+
return this._headers.entries();
|
15
|
+
}
|
16
|
+
override keys(): IterableIterator<string> {
|
17
|
+
return this._headers.keys();
|
18
|
+
}
|
19
|
+
override values(): IterableIterator<string> {
|
20
|
+
return this._headers.values();
|
21
|
+
}
|
22
|
+
|
23
|
+
override append(key: string, value: string | string[] | undefined): HeadersImpl {
|
24
|
+
const values = this._headers.get(key);
|
25
|
+
if (typeof value === "undefined") {
|
26
|
+
value = "";
|
27
|
+
}
|
28
|
+
if (Array.isArray(value)) {
|
29
|
+
this._headers.set(key, [values, ...value].filter((i) => i).join(", "));
|
30
|
+
} else {
|
31
|
+
this._headers.set(key, [values, value].filter((i) => i).join(", "));
|
32
|
+
}
|
33
|
+
return this;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
export class HttpHeader {
|
38
|
+
readonly _headers: Map<string, string[]> = new Map<string, string[]>();
|
39
|
+
|
40
|
+
static from(headers?: HeadersInit | NodeJS.Dict<string | string[]> | Headers): HttpHeader {
|
41
|
+
const h = new HttpHeader();
|
42
|
+
if (headers) {
|
43
|
+
if (Array.isArray(headers)) {
|
44
|
+
for (const [k, v] of headers) {
|
45
|
+
if (v) {
|
46
|
+
h.Add(k, v);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
} else if (headers instanceof Headers) {
|
50
|
+
for (const [k, v] of headers.entries()) {
|
51
|
+
if (v) {
|
52
|
+
h.Add(
|
53
|
+
k,
|
54
|
+
v.split(",").map((v) => v.trim()),
|
55
|
+
);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
} else {
|
59
|
+
for (const k in headers) {
|
60
|
+
const v = (headers as Record<string, string | string[]>)[k];
|
61
|
+
(Array.isArray(v) ? v : [v]).forEach((v) => {
|
62
|
+
h.Add(k, v);
|
63
|
+
});
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
return h;
|
68
|
+
}
|
69
|
+
|
70
|
+
_asStringString(): Map<string, string> {
|
71
|
+
const ret = new Map<string, string>();
|
72
|
+
for (const [key, values] of this._headers) {
|
73
|
+
ret.set(key, values.join(", "));
|
74
|
+
}
|
75
|
+
return ret;
|
76
|
+
}
|
77
|
+
|
78
|
+
_key(key: string): string {
|
79
|
+
return key.toLowerCase();
|
80
|
+
}
|
81
|
+
Values(key: string): string[] {
|
82
|
+
const values = this._headers.get(this._key(key));
|
83
|
+
return values || [];
|
84
|
+
}
|
85
|
+
Get(key: string): string | undefined {
|
86
|
+
const values = this._headers.get(this._key(key));
|
87
|
+
if (values === undefined || values.length === 0) {
|
88
|
+
return undefined;
|
89
|
+
}
|
90
|
+
return values[0];
|
91
|
+
}
|
92
|
+
Set(key: string, valueOr: string | string[]): HttpHeader {
|
93
|
+
const value = Array.isArray(valueOr) ? valueOr : [valueOr];
|
94
|
+
this._headers.set(this._key(key), value);
|
95
|
+
return this;
|
96
|
+
}
|
97
|
+
Add(key: string, value: string | string[] | undefined): HttpHeader {
|
98
|
+
if (typeof value === "undefined") {
|
99
|
+
return this;
|
100
|
+
}
|
101
|
+
const vs = Array.isArray(value) ? value : [value];
|
102
|
+
const values = this._headers.get(this._key(key));
|
103
|
+
if (values === undefined) {
|
104
|
+
this._headers.set(this._key(key), vs);
|
105
|
+
} else {
|
106
|
+
values.push(...vs);
|
107
|
+
}
|
108
|
+
return this;
|
109
|
+
}
|
110
|
+
Del(ey: string): HttpHeader {
|
111
|
+
this._headers.delete(this._key(ey));
|
112
|
+
return this;
|
113
|
+
}
|
114
|
+
Items(): [string, string[]][] {
|
115
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
116
|
+
return Array.from(this._headers).filter(([_, vs]) => vs.length > 0);
|
117
|
+
}
|
118
|
+
SortItems(): [string, string[]][] {
|
119
|
+
return this.Items().sort(([[a]], [[b]]) => a.localeCompare(b));
|
120
|
+
}
|
121
|
+
Clone(): HttpHeader {
|
122
|
+
const clone = new HttpHeader();
|
123
|
+
for (const [key, values] of this._headers.entries()) {
|
124
|
+
clone._headers.set(key, values.slice());
|
125
|
+
}
|
126
|
+
return clone;
|
127
|
+
}
|
128
|
+
AsRecordStringStringArray(): Record<string, string[]> {
|
129
|
+
const obj: Record<string, string[]> = {};
|
130
|
+
for (const [key, values] of this._headers.entries()) {
|
131
|
+
obj[key] = [...values];
|
132
|
+
}
|
133
|
+
return obj;
|
134
|
+
}
|
135
|
+
AsRecordStringString(): Record<string, string> {
|
136
|
+
const obj: Record<string, string> = {};
|
137
|
+
for (const [key, values] of this._headers.entries()) {
|
138
|
+
obj[key] = values.join(", ");
|
139
|
+
}
|
140
|
+
return obj;
|
141
|
+
}
|
142
|
+
AsHeaderInit(): HeadersInit {
|
143
|
+
const obj: HeadersInit = {};
|
144
|
+
for (const [key, values] of this._headers.entries()) {
|
145
|
+
obj[key] = values[0];
|
146
|
+
}
|
147
|
+
return obj;
|
148
|
+
}
|
149
|
+
AsHeaders(): Headers {
|
150
|
+
return new HeadersImpl(this._asStringString());
|
151
|
+
}
|
152
|
+
Merge(other?: HttpHeader): HttpHeader {
|
153
|
+
const ret = this.Clone();
|
154
|
+
if (other) {
|
155
|
+
for (const [key, values] of other.Items()) {
|
156
|
+
ret.Add(key, values);
|
157
|
+
}
|
158
|
+
}
|
159
|
+
return ret;
|
160
|
+
}
|
161
|
+
}
|
package/src/index.ts
CHANGED
package/src/jsr.json
CHANGED
package/src/uri.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { exception2Result, Result } from "./result.js";
|
2
|
+
import { relativePath } from "./utils/relative-path.js";
|
2
3
|
import { StripCommand, stripper } from "./utils/stripper.js";
|
3
4
|
|
4
5
|
type NullOrUndef = null | undefined;
|
@@ -337,10 +338,30 @@ export class BuildURI implements URIInterface<BuildURI> {
|
|
337
338
|
return this;
|
338
339
|
}
|
339
340
|
|
341
|
+
// could pass a relative path or a full URL
|
342
|
+
// if relative path, it will be appended to the current path
|
343
|
+
resolve(p: CoerceURI): BuildURI {
|
344
|
+
if (!p) {
|
345
|
+
return this;
|
346
|
+
}
|
347
|
+
if (typeof p === "string") {
|
348
|
+
// relative path
|
349
|
+
if (!p.match(/^[a-zA-Z0-9]+:/)) {
|
350
|
+
if (p.startsWith("/")) {
|
351
|
+
this.pathname(p);
|
352
|
+
return this;
|
353
|
+
}
|
354
|
+
return this.appendRelative(p);
|
355
|
+
}
|
356
|
+
}
|
357
|
+
this._url = new MutableURL(p.toString());
|
358
|
+
return this;
|
359
|
+
}
|
360
|
+
|
340
361
|
appendRelative(p: CoerceURI): BuildURI {
|
341
362
|
const appendUrl = URI.from(p);
|
342
|
-
|
343
|
-
|
363
|
+
const pathname = "./" + appendUrl.pathname;
|
364
|
+
const basePath = this._url.pathname;
|
344
365
|
/*
|
345
366
|
* cases
|
346
367
|
* pathname "" basePAth "" -> ""
|
@@ -352,13 +373,14 @@ export class BuildURI implements URIInterface<BuildURI> {
|
|
352
373
|
* pathname "ab" basePath "/ab/" -> "/ab/ab"
|
353
374
|
* pathname "/ab/" basePath "/ab/" -> "/ab/ab/"
|
354
375
|
*/
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
376
|
+
this.pathname(relativePath(basePath, pathname));
|
377
|
+
// if (pathname.startsWith("/")) {
|
378
|
+
// pathname = pathname.replace(/^\//, "");
|
379
|
+
// }
|
380
|
+
// if (basePath.length > 0) {
|
381
|
+
// basePath = basePath.replace(/\/$/, "");
|
382
|
+
// }
|
383
|
+
// this.pathname(basePath + "/" + pathname);
|
362
384
|
for (const [key, value] of appendUrl.getParams) {
|
363
385
|
this.setParam(key, value);
|
364
386
|
}
|
@@ -0,0 +1,161 @@
|
|
1
|
+
export enum PartType {
|
2
|
+
Slash = 0x1,
|
3
|
+
Root = 0x3,
|
4
|
+
Up = 0x4 /* /../ */,
|
5
|
+
Noop = 0x8 /* ./ */,
|
6
|
+
// RootUp = 0x8 /* ../ */,
|
7
|
+
}
|
8
|
+
|
9
|
+
export type PathItem = string | PartType;
|
10
|
+
|
11
|
+
export class Path {
|
12
|
+
readonly parts: PathItem[];
|
13
|
+
constructor(parts: PathItem[] = []) {
|
14
|
+
this.parts = parts;
|
15
|
+
}
|
16
|
+
|
17
|
+
toString(): string {
|
18
|
+
return this.parts
|
19
|
+
.map((part) => {
|
20
|
+
if (typeof part === "string") {
|
21
|
+
return part;
|
22
|
+
} else {
|
23
|
+
switch (part) {
|
24
|
+
case PartType.Slash:
|
25
|
+
case PartType.Root:
|
26
|
+
return "/";
|
27
|
+
case PartType.Up:
|
28
|
+
return "..";
|
29
|
+
default:
|
30
|
+
return part;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
})
|
34
|
+
.join("");
|
35
|
+
}
|
36
|
+
|
37
|
+
add(part: PathItem): void {
|
38
|
+
if (this.parts.includes(PartType.Root) && part === PartType.Root) {
|
39
|
+
throw new Error("Cannot add absolute part to absolute path");
|
40
|
+
}
|
41
|
+
const last = this.parts[this.parts.length - 1] as number;
|
42
|
+
if (last & PartType.Slash && part === PartType.Slash) {
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
switch (part) {
|
46
|
+
case ".":
|
47
|
+
this.parts.push(PartType.Noop);
|
48
|
+
return;
|
49
|
+
case "..":
|
50
|
+
part = PartType.Up;
|
51
|
+
}
|
52
|
+
|
53
|
+
// if (part === PartType.Up && last === PartType.Slash) {
|
54
|
+
// this.parts[this.parts.length - 1] = PartType.Up
|
55
|
+
// return
|
56
|
+
// }
|
57
|
+
if (last === PartType.Noop && part === PartType.Slash) {
|
58
|
+
if (last === PartType.Noop) {
|
59
|
+
this.parts.pop();
|
60
|
+
}
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
this.parts.push(part);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
export function splitPath(path: string): Path {
|
68
|
+
const p = new Path();
|
69
|
+
if (path === "") {
|
70
|
+
return p;
|
71
|
+
}
|
72
|
+
for (let count = 0; path.length; count++) {
|
73
|
+
// const ipath = path
|
74
|
+
if (path.match(/^\/+/)) {
|
75
|
+
if (count === 0) {
|
76
|
+
p.add(PartType.Root);
|
77
|
+
} else {
|
78
|
+
p.add(PartType.Slash);
|
79
|
+
}
|
80
|
+
path = path.replace(/^\/+/, "");
|
81
|
+
} else {
|
82
|
+
const part = path.replace(/\/.*$/, "");
|
83
|
+
p.add(part);
|
84
|
+
path = path.replace(/^[^/]+/, "");
|
85
|
+
}
|
86
|
+
}
|
87
|
+
return p;
|
88
|
+
}
|
89
|
+
|
90
|
+
export function pathJoin(...paths: string[]): string {
|
91
|
+
let prev = "";
|
92
|
+
const res: string[] = [];
|
93
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
94
|
+
for (let i = 0; i < paths.length; i++) {
|
95
|
+
const path = paths[i];
|
96
|
+
if (path === "") {
|
97
|
+
continue;
|
98
|
+
}
|
99
|
+
// i + 1 !== paths.length &&
|
100
|
+
if (!(prev.endsWith("/") || path.startsWith("/"))) {
|
101
|
+
if (prev !== "") {
|
102
|
+
res.push("/");
|
103
|
+
}
|
104
|
+
res.push(path);
|
105
|
+
} else {
|
106
|
+
res.push(path);
|
107
|
+
}
|
108
|
+
prev = path;
|
109
|
+
}
|
110
|
+
return res.join("");
|
111
|
+
}
|
112
|
+
|
113
|
+
export function relativePath(path: string, relative: string): string {
|
114
|
+
const relativeParts = splitPath(relative);
|
115
|
+
let result: string;
|
116
|
+
if (relativeParts.parts[0] === PartType.Root) {
|
117
|
+
result = relative;
|
118
|
+
} else {
|
119
|
+
result = pathJoin(path, relative);
|
120
|
+
}
|
121
|
+
const unoptPath = splitPath(result);
|
122
|
+
// console.log("What", result, unoptPath.parts)
|
123
|
+
const out: PathItem[] = [];
|
124
|
+
let topUp = false;
|
125
|
+
for (const part of unoptPath.parts) {
|
126
|
+
switch (part) {
|
127
|
+
case PartType.Root:
|
128
|
+
out.push(PartType.Root);
|
129
|
+
break;
|
130
|
+
case PartType.Up:
|
131
|
+
if (out.length && !topUp) {
|
132
|
+
const last = out.length - 1;
|
133
|
+
if (typeof out[last] === "string" && (out[last - 1] as PartType) == PartType.Root) {
|
134
|
+
out.pop();
|
135
|
+
} else {
|
136
|
+
out.pop();
|
137
|
+
out.pop();
|
138
|
+
}
|
139
|
+
if (out.length === 0) {
|
140
|
+
topUp = !topUp ? true : topUp;
|
141
|
+
out.push(PartType.Up);
|
142
|
+
}
|
143
|
+
} else {
|
144
|
+
out.push(PartType.Up);
|
145
|
+
}
|
146
|
+
break;
|
147
|
+
case PartType.Slash:
|
148
|
+
if (!((out[out.length - 1] as PartType) & PartType.Slash)) {
|
149
|
+
out.push(PartType.Slash);
|
150
|
+
}
|
151
|
+
break;
|
152
|
+
default:
|
153
|
+
out.push(part);
|
154
|
+
break;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
return new Path(out).toString();
|
158
|
+
// return pathParts
|
159
|
+
// .filter((part, index) => part !== relativeParts[index])
|
160
|
+
// .join("")
|
161
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
export declare class HeadersImpl extends Headers {
|
2
|
+
readonly _headers: Map<string, string>;
|
3
|
+
constructor(init: Map<string, string>);
|
4
|
+
[Symbol.iterator](): IterableIterator<[string, string]>;
|
5
|
+
entries(): IterableIterator<[string, string]>;
|
6
|
+
keys(): IterableIterator<string>;
|
7
|
+
values(): IterableIterator<string>;
|
8
|
+
append(key: string, value: string | string[] | undefined): HeadersImpl;
|
9
|
+
}
|
10
|
+
export declare class HttpHeader {
|
11
|
+
readonly _headers: Map<string, string[]>;
|
12
|
+
static from(headers?: HeadersInit | NodeJS.Dict<string | string[]> | Headers): HttpHeader;
|
13
|
+
_asStringString(): Map<string, string>;
|
14
|
+
_key(key: string): string;
|
15
|
+
Values(key: string): string[];
|
16
|
+
Get(key: string): string | undefined;
|
17
|
+
Set(key: string, valueOr: string | string[]): HttpHeader;
|
18
|
+
Add(key: string, value: string | string[] | undefined): HttpHeader;
|
19
|
+
Del(ey: string): HttpHeader;
|
20
|
+
Items(): [string, string[]][];
|
21
|
+
SortItems(): [string, string[]][];
|
22
|
+
Clone(): HttpHeader;
|
23
|
+
AsRecordStringStringArray(): Record<string, string[]>;
|
24
|
+
AsRecordStringString(): Record<string, string>;
|
25
|
+
AsHeaderInit(): HeadersInit;
|
26
|
+
AsHeaders(): Headers;
|
27
|
+
Merge(other?: HttpHeader): HttpHeader;
|
28
|
+
}
|
29
|
+
//# sourceMappingURL=http_header.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"http_header.d.ts","sourceRoot":"","sources":["../../src/http_header.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,OAAO;IACtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE3B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAK5B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIvD,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG7C,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAGhC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIlC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,WAAW;CAYhF;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAEvE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,OAAO,GAAG,UAAU;IA8BzF,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAQtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAGzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAI7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU;IAKxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,UAAU;IAalE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU;IAI3B,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAI7B,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;IAGjC,KAAK,IAAI,UAAU;IAOnB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAOrD,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO9C,YAAY,IAAI,WAAW;IAO3B,SAAS,IAAI,OAAO;IAGpB,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU;CAStC"}
|
@@ -0,0 +1,155 @@
|
|
1
|
+
export class HeadersImpl extends Headers {
|
2
|
+
constructor(init) {
|
3
|
+
super();
|
4
|
+
this._headers = init;
|
5
|
+
}
|
6
|
+
[Symbol.iterator]() {
|
7
|
+
return this.entries();
|
8
|
+
}
|
9
|
+
entries() {
|
10
|
+
return this._headers.entries();
|
11
|
+
}
|
12
|
+
keys() {
|
13
|
+
return this._headers.keys();
|
14
|
+
}
|
15
|
+
values() {
|
16
|
+
return this._headers.values();
|
17
|
+
}
|
18
|
+
append(key, value) {
|
19
|
+
const values = this._headers.get(key);
|
20
|
+
if (typeof value === "undefined") {
|
21
|
+
value = "";
|
22
|
+
}
|
23
|
+
if (Array.isArray(value)) {
|
24
|
+
this._headers.set(key, [values, ...value].filter((i) => i).join(", "));
|
25
|
+
}
|
26
|
+
else {
|
27
|
+
this._headers.set(key, [values, value].filter((i) => i).join(", "));
|
28
|
+
}
|
29
|
+
return this;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
export class HttpHeader {
|
33
|
+
constructor() {
|
34
|
+
this._headers = new Map();
|
35
|
+
}
|
36
|
+
static from(headers) {
|
37
|
+
const h = new HttpHeader();
|
38
|
+
if (headers) {
|
39
|
+
if (Array.isArray(headers)) {
|
40
|
+
for (const [k, v] of headers) {
|
41
|
+
if (v) {
|
42
|
+
h.Add(k, v);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
else if (headers instanceof Headers) {
|
47
|
+
for (const [k, v] of headers.entries()) {
|
48
|
+
if (v) {
|
49
|
+
h.Add(k, v.split(",").map((v) => v.trim()));
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
for (const k in headers) {
|
55
|
+
const v = headers[k];
|
56
|
+
(Array.isArray(v) ? v : [v]).forEach((v) => {
|
57
|
+
h.Add(k, v);
|
58
|
+
});
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
return h;
|
63
|
+
}
|
64
|
+
_asStringString() {
|
65
|
+
const ret = new Map();
|
66
|
+
for (const [key, values] of this._headers) {
|
67
|
+
ret.set(key, values.join(", "));
|
68
|
+
}
|
69
|
+
return ret;
|
70
|
+
}
|
71
|
+
_key(key) {
|
72
|
+
return key.toLowerCase();
|
73
|
+
}
|
74
|
+
Values(key) {
|
75
|
+
const values = this._headers.get(this._key(key));
|
76
|
+
return values || [];
|
77
|
+
}
|
78
|
+
Get(key) {
|
79
|
+
const values = this._headers.get(this._key(key));
|
80
|
+
if (values === undefined || values.length === 0) {
|
81
|
+
return undefined;
|
82
|
+
}
|
83
|
+
return values[0];
|
84
|
+
}
|
85
|
+
Set(key, valueOr) {
|
86
|
+
const value = Array.isArray(valueOr) ? valueOr : [valueOr];
|
87
|
+
this._headers.set(this._key(key), value);
|
88
|
+
return this;
|
89
|
+
}
|
90
|
+
Add(key, value) {
|
91
|
+
if (typeof value === "undefined") {
|
92
|
+
return this;
|
93
|
+
}
|
94
|
+
const vs = Array.isArray(value) ? value : [value];
|
95
|
+
const values = this._headers.get(this._key(key));
|
96
|
+
if (values === undefined) {
|
97
|
+
this._headers.set(this._key(key), vs);
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
values.push(...vs);
|
101
|
+
}
|
102
|
+
return this;
|
103
|
+
}
|
104
|
+
Del(ey) {
|
105
|
+
this._headers.delete(this._key(ey));
|
106
|
+
return this;
|
107
|
+
}
|
108
|
+
Items() {
|
109
|
+
return Array.from(this._headers).filter(([_, vs]) => vs.length > 0);
|
110
|
+
}
|
111
|
+
SortItems() {
|
112
|
+
return this.Items().sort(([[a]], [[b]]) => a.localeCompare(b));
|
113
|
+
}
|
114
|
+
Clone() {
|
115
|
+
const clone = new HttpHeader();
|
116
|
+
for (const [key, values] of this._headers.entries()) {
|
117
|
+
clone._headers.set(key, values.slice());
|
118
|
+
}
|
119
|
+
return clone;
|
120
|
+
}
|
121
|
+
AsRecordStringStringArray() {
|
122
|
+
const obj = {};
|
123
|
+
for (const [key, values] of this._headers.entries()) {
|
124
|
+
obj[key] = [...values];
|
125
|
+
}
|
126
|
+
return obj;
|
127
|
+
}
|
128
|
+
AsRecordStringString() {
|
129
|
+
const obj = {};
|
130
|
+
for (const [key, values] of this._headers.entries()) {
|
131
|
+
obj[key] = values.join(", ");
|
132
|
+
}
|
133
|
+
return obj;
|
134
|
+
}
|
135
|
+
AsHeaderInit() {
|
136
|
+
const obj = {};
|
137
|
+
for (const [key, values] of this._headers.entries()) {
|
138
|
+
obj[key] = values[0];
|
139
|
+
}
|
140
|
+
return obj;
|
141
|
+
}
|
142
|
+
AsHeaders() {
|
143
|
+
return new HeadersImpl(this._asStringString());
|
144
|
+
}
|
145
|
+
Merge(other) {
|
146
|
+
const ret = this.Clone();
|
147
|
+
if (other) {
|
148
|
+
for (const [key, values] of other.Items()) {
|
149
|
+
ret.Add(key, values);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
return ret;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
//# sourceMappingURL=http_header.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"http_header.js","sourceRoot":"","sources":["../../src/http_header.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"http_header.test.d.ts","sourceRoot":"","sources":["../../src/http_header.test.ts"],"names":[],"mappings":""}
|