@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.
Files changed (58) hide show
  1. package/{chunk-USQXEZHL.js → chunk-3RHIVQAA.js} +2 -2
  2. package/{chunk-W2GV5KXV.js → chunk-N3NUTN4B.js} +3 -3
  3. package/{chunk-F5W6VELE.js → chunk-N5LQQXOU.js} +2 -2
  4. package/chunk-PPS4L4VW.js +38 -0
  5. package/{chunk-GES3MUGV.js.map → chunk-PPS4L4VW.js.map} +1 -1
  6. package/index.cjs +352 -86
  7. package/index.cjs.map +1 -1
  8. package/index.d.cts +31 -1
  9. package/index.d.ts +31 -1
  10. package/index.js +355 -44
  11. package/index.js.map +1 -1
  12. package/node/index.js +2 -2
  13. package/package.json +2 -2
  14. package/src/http_header.ts +161 -0
  15. package/src/index.ts +1 -0
  16. package/src/jsr.json +1 -1
  17. package/src/uri.ts +31 -9
  18. package/src/utils/relative-path.ts +161 -0
  19. package/ts/http_header.d.ts +29 -0
  20. package/ts/http_header.d.ts.map +1 -0
  21. package/ts/http_header.js +155 -0
  22. package/ts/http_header.js.map +1 -0
  23. package/ts/http_header.test.d.ts +2 -0
  24. package/ts/http_header.test.d.ts.map +1 -0
  25. package/ts/http_header.test.js +90 -0
  26. package/ts/http_header.test.js.map +1 -0
  27. package/ts/index.d.ts +1 -0
  28. package/ts/index.d.ts.map +1 -1
  29. package/ts/index.js +1 -0
  30. package/ts/index.js.map +1 -1
  31. package/ts/logger-impl.js +8 -5
  32. package/ts/logger-impl.js.map +1 -1
  33. package/ts/logger.js +9 -3
  34. package/ts/logger.js.map +1 -1
  35. package/ts/tracer.js +24 -6
  36. package/ts/tracer.js.map +1 -1
  37. package/ts/uri.d.ts +1 -0
  38. package/ts/uri.d.ts.map +1 -1
  39. package/ts/uri.js +26 -10
  40. package/ts/uri.js.map +1 -1
  41. package/ts/uri.test.js +34 -5
  42. package/ts/uri.test.js.map +1 -1
  43. package/ts/utils/relative-path.d.ts +17 -0
  44. package/ts/utils/relative-path.d.ts.map +1 -0
  45. package/ts/utils/relative-path.js +148 -0
  46. package/ts/utils/relative-path.js.map +1 -0
  47. package/ts/utils/relative-path.test.d.ts +2 -0
  48. package/ts/utils/relative-path.test.d.ts.map +1 -0
  49. package/ts/utils/relative-path.test.js +187 -0
  50. package/ts/utils/relative-path.test.js.map +1 -0
  51. package/ts/utils/stripper.js +1 -1
  52. package/ts/utils/stripper.js.map +1 -1
  53. package/utils/index.js +2 -2
  54. package/web/index.js +3 -3
  55. package/chunk-GES3MUGV.js +0 -92
  56. /package/{chunk-USQXEZHL.js.map → chunk-3RHIVQAA.js.map} +0 -0
  57. /package/{chunk-W2GV5KXV.js.map → chunk-N3NUTN4B.js.map} +0 -0
  58. /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-F5W6VELE.js";
5
+ } from "../chunk-N5LQQXOU.js";
6
6
  import {
7
7
  Utf8EnDecoderSingleton
8
- } from "../chunk-GES3MUGV.js";
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.41",
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.16.0",
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
@@ -19,4 +19,5 @@ export * from "./crypto.js";
19
19
  export * from "./base-sys-abstraction.js";
20
20
  export * from "./bin2text.js";
21
21
  export * from "./version.js";
22
+ export * from "./http_header.js";
22
23
  export * as utils from "./utils/index.js";
package/src/jsr.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adviser/cement",
3
- "version": "0.2.41",
3
+ "version": "0.2.42",
4
4
  "exports": {
5
5
  ".": "./index.ts",
6
6
  "./web": "./web/index.ts",
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
- let pathname = appendUrl.pathname;
343
- let basePath = this._url.pathname;
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
- if (pathname.startsWith("/")) {
356
- pathname = pathname.replace(/^\//, "");
357
- }
358
- if (basePath.length > 0) {
359
- basePath = basePath.replace(/\/$/, "");
360
- }
361
- this.pathname(basePath + "/" + pathname);
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http_header.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http_header.test.d.ts","sourceRoot":"","sources":["../../src/http_header.test.ts"],"names":[],"mappings":""}