@adviser/cement 0.2.41 → 0.2.42
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 +355 -44
- 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.42",
|
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
|
+
[Symbol.iterator](): HeadersIterator<[string, string]> {
|
10
|
+
return this.entries();
|
11
|
+
}
|
12
|
+
|
13
|
+
entries(): HeadersIterator<[string, string]> {
|
14
|
+
return this._headers.entries();
|
15
|
+
}
|
16
|
+
keys(): HeadersIterator<string> {
|
17
|
+
return this._headers.keys();
|
18
|
+
}
|
19
|
+
values(): HeadersIterator<string> {
|
20
|
+
return this._headers.values();
|
21
|
+
}
|
22
|
+
|
23
|
+
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[k];
|
61
|
+
if (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](): HeadersIterator<[string, string]>;
|
5
|
+
entries(): HeadersIterator<[string, string]>;
|
6
|
+
keys(): HeadersIterator<string>;
|
7
|
+
values(): HeadersIterator<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;IAKrC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAItD,OAAO,IAAI,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG5C,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC;IAG/B,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC;IAIjC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,WAAW;CAYvE;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
|
+
if (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":""}
|