@hyperttp/transport-bun 0.1.5 → 0.2.1
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/bun.d.ts +7 -7
- package/bun.d.ts.map +1 -1
- package/bun.js +152 -151
- package/bun.js.map +1 -1
- package/package.json +2 -2
package/bun.d.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import type { HttpClientOptions, HyperTransport, TransportRequest, TransportResponse } from "@hyperttp/types";
|
|
2
2
|
export declare function fastGetHostname(url: string): string;
|
|
3
|
-
export declare function fastStreamDump(this: ReadableStream<Uint8Array>): Promise<void>;
|
|
4
3
|
export declare function getAbortError(signal?: AbortSignal): unknown;
|
|
5
|
-
export declare function throwIfAborted(signal?: AbortSignal): void;
|
|
6
|
-
export declare function normalizeCookieHeader(value: string | string[] | undefined): string;
|
|
7
|
-
export declare function normalizeHeaderValue(name: string, value: string | string[]): string;
|
|
8
4
|
export declare class BunTransport implements HyperTransport {
|
|
9
5
|
config: HttpClientOptions;
|
|
10
|
-
private cookieJar;
|
|
11
|
-
private cookieCache;
|
|
6
|
+
private readonly cookieJar;
|
|
7
|
+
private readonly cookieCache;
|
|
12
8
|
private activeRequests;
|
|
13
|
-
private concurrencyQueue;
|
|
9
|
+
private readonly concurrencyQueue;
|
|
10
|
+
private queueHead;
|
|
14
11
|
private hasCookies;
|
|
15
12
|
private _maxConcurrent;
|
|
16
13
|
private _timeout;
|
|
@@ -20,7 +17,10 @@ export declare class BunTransport implements HyperTransport {
|
|
|
20
17
|
constructor(config: HttpClientOptions);
|
|
21
18
|
private invalidateConfig;
|
|
22
19
|
execute(req: TransportRequest): Promise<TransportResponse>;
|
|
20
|
+
private waitForSlot;
|
|
21
|
+
private releaseSlot;
|
|
23
22
|
private prepareHeaders;
|
|
23
|
+
private maybeStoreCookies;
|
|
24
24
|
private getCookiesForDomain;
|
|
25
25
|
private updateCookies;
|
|
26
26
|
close(): Promise<void>;
|
package/bun.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AA0BzB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkDnD;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAK3D;AAED,qBAAa,YAAa,YAAW,cAAc;IAC1C,MAAM,EAAE,iBAAiB,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAmC;gBAEzC,MAAM,EAAE,iBAAiB;IAKrC,OAAO,CAAC,gBAAgB;IASX,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAgEzD,WAAW;IAkBzB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,aAAa;IA8CR,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
|
package/bun.js
CHANGED
|
@@ -1,117 +1,68 @@
|
|
|
1
|
+
const hostnameCache = new Map();
|
|
2
|
+
async function streamDump() {
|
|
3
|
+
return this.cancel().catch(() => { });
|
|
4
|
+
}
|
|
5
|
+
function attachDump(stream) {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
stream.dump = streamDump;
|
|
8
|
+
return stream;
|
|
9
|
+
}
|
|
1
10
|
export function fastGetHostname(url) {
|
|
2
11
|
if (!url)
|
|
3
12
|
return "localhost";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
const cached = hostnameCache.get(url);
|
|
14
|
+
if (cached)
|
|
15
|
+
return cached;
|
|
16
|
+
let start = 0;
|
|
17
|
+
if (url.charCodeAt(0) === 47) {
|
|
18
|
+
if (url.charCodeAt(1) === 47) {
|
|
19
|
+
start = 2;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
hostnameCache.set(url, "localhost");
|
|
23
|
+
return "localhost";
|
|
24
|
+
}
|
|
9
25
|
}
|
|
10
26
|
else {
|
|
11
|
-
|
|
27
|
+
const schemeIdx = url.indexOf("://");
|
|
28
|
+
if (schemeIdx !== -1) {
|
|
29
|
+
start = schemeIdx + 3;
|
|
30
|
+
}
|
|
12
31
|
}
|
|
13
|
-
let end = url.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end = portIdx;
|
|
32
|
+
let end = url.length;
|
|
33
|
+
for (let i = start; i < url.length; i++) {
|
|
34
|
+
const code = url.charCodeAt(i);
|
|
35
|
+
if (code === 47 || code === 63 || code === 35) {
|
|
36
|
+
end = i;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
21
39
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
40
|
+
const atIdx = url.indexOf("@", start);
|
|
41
|
+
if (atIdx !== -1 && atIdx < end) {
|
|
42
|
+
start = atIdx + 1;
|
|
43
|
+
}
|
|
44
|
+
const colonIdx = url.indexOf(":", start);
|
|
45
|
+
if (colonIdx !== -1 && colonIdx < end) {
|
|
46
|
+
end = colonIdx;
|
|
29
47
|
}
|
|
30
|
-
|
|
31
|
-
|
|
48
|
+
const host = url.slice(start, end) || "localhost";
|
|
49
|
+
if (hostnameCache.size > 512) {
|
|
50
|
+
hostnameCache.clear();
|
|
32
51
|
}
|
|
52
|
+
hostnameCache.set(url, host);
|
|
53
|
+
return host;
|
|
33
54
|
}
|
|
34
55
|
export function getAbortError(signal) {
|
|
35
56
|
return (signal?.reason ??
|
|
36
57
|
new DOMException("The operation was aborted.", "AbortError"));
|
|
37
58
|
}
|
|
38
|
-
export function throwIfAborted(signal) {
|
|
39
|
-
if (!signal)
|
|
40
|
-
return;
|
|
41
|
-
if (typeof signal.throwIfAborted === "function") {
|
|
42
|
-
signal.throwIfAborted();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (signal.aborted) {
|
|
46
|
-
throw getAbortError(signal);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export function normalizeCookieHeader(value) {
|
|
50
|
-
if (value === undefined)
|
|
51
|
-
return "";
|
|
52
|
-
return Array.isArray(value) ? value.join("; ") : String(value).trim();
|
|
53
|
-
}
|
|
54
|
-
export function normalizeHeaderValue(name, value) {
|
|
55
|
-
if (Array.isArray(value)) {
|
|
56
|
-
const lower = name.toLowerCase();
|
|
57
|
-
if (lower === "cookie") {
|
|
58
|
-
return value.join("; ");
|
|
59
|
-
}
|
|
60
|
-
return value.join(", ");
|
|
61
|
-
}
|
|
62
|
-
return value;
|
|
63
|
-
}
|
|
64
|
-
class BunTransportResponse {
|
|
65
|
-
_nativeResponse;
|
|
66
|
-
_cachedText = null;
|
|
67
|
-
_cachedJson = null;
|
|
68
|
-
_cachedHeaders = null;
|
|
69
|
-
constructor(nativeResponse) {
|
|
70
|
-
this._nativeResponse = nativeResponse;
|
|
71
|
-
}
|
|
72
|
-
get status() {
|
|
73
|
-
return this._nativeResponse.status;
|
|
74
|
-
}
|
|
75
|
-
get url() {
|
|
76
|
-
return this._nativeResponse.url;
|
|
77
|
-
}
|
|
78
|
-
get body() {
|
|
79
|
-
const body = this._nativeResponse.body;
|
|
80
|
-
if (body && body.dump === undefined) {
|
|
81
|
-
body.dump = fastStreamDump;
|
|
82
|
-
}
|
|
83
|
-
return body;
|
|
84
|
-
}
|
|
85
|
-
async dump() {
|
|
86
|
-
const body = this._nativeResponse.body;
|
|
87
|
-
if (body) {
|
|
88
|
-
await fastStreamDump.call(body);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async text() {
|
|
92
|
-
if (this._cachedText !== null)
|
|
93
|
-
return this._cachedText;
|
|
94
|
-
this._cachedText = await this._nativeResponse.text();
|
|
95
|
-
return this._cachedText;
|
|
96
|
-
}
|
|
97
|
-
async json() {
|
|
98
|
-
return (this._cachedJson ?? (this._cachedJson = await this._nativeResponse.json()));
|
|
99
|
-
}
|
|
100
|
-
get headers() {
|
|
101
|
-
if (this._cachedHeaders === null) {
|
|
102
|
-
const rawHeaders = this._nativeResponse.headers;
|
|
103
|
-
this._cachedHeaders =
|
|
104
|
-
rawHeaders.toJSON?.() || Object.fromEntries(rawHeaders.entries());
|
|
105
|
-
}
|
|
106
|
-
return this._cachedHeaders;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
59
|
export class BunTransport {
|
|
110
60
|
config;
|
|
111
61
|
cookieJar = new Map();
|
|
112
62
|
cookieCache = new Map();
|
|
113
63
|
activeRequests = 0;
|
|
114
64
|
concurrencyQueue = [];
|
|
65
|
+
queueHead = 0;
|
|
115
66
|
hasCookies = false;
|
|
116
67
|
_maxConcurrent = 0;
|
|
117
68
|
_timeout = 0;
|
|
@@ -132,32 +83,24 @@ export class BunTransport {
|
|
|
132
83
|
}
|
|
133
84
|
async execute(req) {
|
|
134
85
|
const maxConcurrent = this._maxConcurrent;
|
|
135
|
-
let signal = req.signal;
|
|
136
86
|
const timeoutMs = this._timeout;
|
|
87
|
+
let signal = req.signal;
|
|
137
88
|
if (timeoutMs > 0) {
|
|
138
89
|
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
139
90
|
signal = req.signal
|
|
140
91
|
? AbortSignal.any([req.signal, timeoutSignal])
|
|
141
92
|
: timeoutSignal;
|
|
142
93
|
}
|
|
143
|
-
|
|
94
|
+
if (signal?.aborted)
|
|
95
|
+
throw getAbortError(signal);
|
|
144
96
|
if (maxConcurrent > 0 && this.activeRequests >= maxConcurrent) {
|
|
145
|
-
await
|
|
146
|
-
const onAbort = () => {
|
|
147
|
-
signal?.removeEventListener("abort", onAbort);
|
|
148
|
-
reject(getAbortError(signal));
|
|
149
|
-
};
|
|
150
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
151
|
-
this.concurrencyQueue.push(() => {
|
|
152
|
-
signal?.removeEventListener("abort", onAbort);
|
|
153
|
-
resolve();
|
|
154
|
-
});
|
|
155
|
-
});
|
|
97
|
+
await this.waitForSlot(signal);
|
|
156
98
|
}
|
|
157
|
-
|
|
99
|
+
if (signal?.aborted)
|
|
100
|
+
throw getAbortError(signal);
|
|
158
101
|
this.activeRequests++;
|
|
159
102
|
try {
|
|
160
|
-
const
|
|
103
|
+
const init = {
|
|
161
104
|
method: req.method,
|
|
162
105
|
headers: this.prepareHeaders(req),
|
|
163
106
|
body: req.body,
|
|
@@ -165,62 +108,124 @@ export class BunTransport {
|
|
|
165
108
|
keepalive: this._keepalive,
|
|
166
109
|
redirect: "manual",
|
|
167
110
|
tls: this._tlsConfig,
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.updateCookies(fastGetHostname(req.url), setCookies);
|
|
173
|
-
}
|
|
111
|
+
};
|
|
112
|
+
const nativeRes = await fetch(req.url, init);
|
|
113
|
+
if (nativeRes.headers.has("set-cookie")) {
|
|
114
|
+
this.maybeStoreCookies(req.url, nativeRes.headers);
|
|
174
115
|
}
|
|
175
|
-
|
|
116
|
+
const body = nativeRes.body ? attachDump(nativeRes.body) : null;
|
|
117
|
+
// ОПТИМИЗАЦИЯ: Высокопроизводительный нативный экспорт без Proxy.
|
|
118
|
+
// Коллбэк внутри `.forEach()` в Bun вызывается напрямую из C++ обертки.
|
|
119
|
+
// На выходе получаем чистый, полностью мутабельный объект со склеенными заголовками.
|
|
120
|
+
const headers = {};
|
|
121
|
+
nativeRes.headers.forEach((value, key) => {
|
|
122
|
+
headers[key] = value;
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
status: nativeRes.status,
|
|
126
|
+
headers,
|
|
127
|
+
url: nativeRes.url,
|
|
128
|
+
body,
|
|
129
|
+
};
|
|
176
130
|
}
|
|
177
131
|
finally {
|
|
178
132
|
this.activeRequests--;
|
|
179
133
|
if (maxConcurrent > 0) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
134
|
+
this.releaseSlot();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async waitForSlot(signal) {
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const onAbort = () => {
|
|
141
|
+
signal?.removeEventListener("abort", onAbort);
|
|
142
|
+
reject(getAbortError(signal));
|
|
143
|
+
};
|
|
144
|
+
if (signal) {
|
|
145
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
146
|
+
}
|
|
147
|
+
this.concurrencyQueue.push(() => {
|
|
148
|
+
signal?.removeEventListener("abort", onAbort);
|
|
149
|
+
resolve();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
releaseSlot() {
|
|
154
|
+
const len = this.concurrencyQueue.length;
|
|
155
|
+
while (this.queueHead < len) {
|
|
156
|
+
const next = this.concurrencyQueue[this.queueHead++];
|
|
157
|
+
if (next) {
|
|
158
|
+
next();
|
|
159
|
+
break;
|
|
183
160
|
}
|
|
184
161
|
}
|
|
162
|
+
if (this.queueHead === len) {
|
|
163
|
+
this.concurrencyQueue.length = 0;
|
|
164
|
+
this.queueHead = 0;
|
|
165
|
+
}
|
|
166
|
+
else if (this.queueHead > 128) {
|
|
167
|
+
this.concurrencyQueue.splice(0, this.queueHead);
|
|
168
|
+
this.queueHead = 0;
|
|
169
|
+
}
|
|
185
170
|
}
|
|
186
171
|
prepareHeaders(req) {
|
|
187
|
-
const original = req.headers;
|
|
188
172
|
const headers = {};
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
173
|
+
const original = req.headers;
|
|
174
|
+
if (original != null) {
|
|
175
|
+
for (const key in original) {
|
|
176
|
+
const value = original[key];
|
|
177
|
+
if (value == null)
|
|
178
|
+
continue;
|
|
179
|
+
if (typeof value === "string") {
|
|
180
|
+
headers[key] = value;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
headers[key] =
|
|
184
|
+
key.length === 6 && (key === "Cookie" || key === "cookie")
|
|
185
|
+
? value.join("; ")
|
|
186
|
+
: value.join(", ");
|
|
187
|
+
}
|
|
192
188
|
}
|
|
193
189
|
}
|
|
194
190
|
const ua = this._userAgent;
|
|
195
|
-
if (ua
|
|
191
|
+
if (ua !== undefined &&
|
|
192
|
+
headers["User-Agent"] === undefined &&
|
|
193
|
+
headers["user-agent"] === undefined) {
|
|
196
194
|
headers["User-Agent"] = ua;
|
|
197
195
|
}
|
|
198
|
-
const userCookie = normalizeCookieHeader(headers["Cookie"]);
|
|
199
|
-
const hasUserCookie = userCookie.length > 0;
|
|
200
196
|
if (!this.hasCookies) {
|
|
201
|
-
|
|
202
|
-
|
|
197
|
+
const userCookie = headers["Cookie"];
|
|
198
|
+
if (userCookie !== undefined) {
|
|
199
|
+
headers["Cookie"] = userCookie.trim();
|
|
203
200
|
}
|
|
204
201
|
return headers;
|
|
205
202
|
}
|
|
206
203
|
const domain = fastGetHostname(req.url);
|
|
207
204
|
const savedCookies = this.getCookiesForDomain(domain);
|
|
208
205
|
const hasSavedCookies = savedCookies.length > 0;
|
|
206
|
+
const userCookie = headers["Cookie"];
|
|
207
|
+
const hasUserCookie = userCookie !== undefined && userCookie.length > 0;
|
|
209
208
|
if (hasUserCookie && hasSavedCookies) {
|
|
210
|
-
headers["Cookie"] = `${userCookie}; ${savedCookies}`;
|
|
209
|
+
headers["Cookie"] = `${userCookie.trim()}; ${savedCookies}`;
|
|
211
210
|
}
|
|
212
211
|
else if (hasUserCookie) {
|
|
213
|
-
headers["Cookie"] = userCookie;
|
|
212
|
+
headers["Cookie"] = userCookie.trim();
|
|
214
213
|
}
|
|
215
214
|
else if (hasSavedCookies) {
|
|
216
215
|
headers["Cookie"] = savedCookies;
|
|
217
216
|
}
|
|
218
217
|
return headers;
|
|
219
218
|
}
|
|
219
|
+
maybeStoreCookies(requestUrl, headers) {
|
|
220
|
+
const setCookies = headers.getSetCookie?.();
|
|
221
|
+
if (!setCookies || setCookies.length === 0)
|
|
222
|
+
return;
|
|
223
|
+
this.updateCookies(fastGetHostname(requestUrl), setCookies);
|
|
224
|
+
}
|
|
220
225
|
getCookiesForDomain(requestDomain) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
const cached = this.cookieCache.get(requestDomain);
|
|
227
|
+
if (cached !== undefined)
|
|
228
|
+
return cached;
|
|
224
229
|
const matchedCookies = [];
|
|
225
230
|
for (const [storedDomain, cookiesMap] of this.cookieJar) {
|
|
226
231
|
if (requestDomain === storedDomain ||
|
|
@@ -236,8 +241,7 @@ export class BunTransport {
|
|
|
236
241
|
}
|
|
237
242
|
updateCookies(requestDomain, setCookies) {
|
|
238
243
|
this.hasCookies = true;
|
|
239
|
-
for (
|
|
240
|
-
const cookieStr = setCookies[i];
|
|
244
|
+
for (const cookieStr of setCookies) {
|
|
241
245
|
if (!cookieStr)
|
|
242
246
|
continue;
|
|
243
247
|
const parts = cookieStr.split(";");
|
|
@@ -252,16 +256,15 @@ export class BunTransport {
|
|
|
252
256
|
if (!key)
|
|
253
257
|
continue;
|
|
254
258
|
let targetDomain = requestDomain;
|
|
255
|
-
for (let
|
|
256
|
-
const attr = parts[
|
|
259
|
+
for (let i = 1; i < parts.length; i++) {
|
|
260
|
+
const attr = parts[i];
|
|
257
261
|
if (!attr)
|
|
258
262
|
continue;
|
|
259
|
-
const
|
|
260
|
-
if (
|
|
261
|
-
let domVal =
|
|
262
|
-
if (domVal.startsWith("."))
|
|
263
|
+
const trimmed = attr.trim();
|
|
264
|
+
if (trimmed.toLowerCase().startsWith("domain=")) {
|
|
265
|
+
let domVal = trimmed.slice(7).trim();
|
|
266
|
+
if (domVal.startsWith("."))
|
|
263
267
|
domVal = domVal.slice(1);
|
|
264
|
-
}
|
|
265
268
|
if (domVal)
|
|
266
269
|
targetDomain = domVal;
|
|
267
270
|
break;
|
|
@@ -273,20 +276,18 @@ export class BunTransport {
|
|
|
273
276
|
this.cookieJar.set(targetDomain, domainMap);
|
|
274
277
|
}
|
|
275
278
|
domainMap.set(key, val);
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
cachedDomain.endsWith("." + targetDomain)) {
|
|
280
|
-
this.cookieCache.delete(cachedDomain);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
279
|
+
}
|
|
280
|
+
if (this.cookieCache.size > 0) {
|
|
281
|
+
this.cookieCache.clear();
|
|
284
282
|
}
|
|
285
283
|
}
|
|
286
284
|
async close() {
|
|
287
|
-
this.concurrencyQueue =
|
|
285
|
+
this.concurrencyQueue.length = 0;
|
|
286
|
+
this.queueHead = 0;
|
|
288
287
|
this.cookieJar.clear();
|
|
289
288
|
this.cookieCache.clear();
|
|
289
|
+
this.activeRequests = 0;
|
|
290
|
+
this.hasCookies = false;
|
|
290
291
|
}
|
|
291
292
|
async destroy() {
|
|
292
293
|
await this.close();
|
package/bun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAkBA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEhD,KAAK,UAAU,UAAU;IACvB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CACjB,MAAkC;IAElC,8DAA8D;IAC7D,MAAc,CAAC,IAAI,GAAG,UAAU,CAAC;IAClC,OAAO,MAA6C,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,WAAW,CAAC;IAE7B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACpC,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAC9C,GAAG,GAAG,CAAC,CAAC;YACR,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QACtC,GAAG,GAAG,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC;IAElD,IAAI,aAAa,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;QAC7B,aAAa,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,CACL,MAAM,EAAE,MAAM;QACd,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAY;IAChB,MAAM,CAAoB;IAEhB,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACnD,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,cAAc,GAAG,CAAC,CAAC;IACV,gBAAgB,GAAsB,EAAE,CAAC;IAClD,SAAS,GAAG,CAAC,CAAC;IAEd,UAAU,GAAG,KAAK,CAAC;IAEnB,cAAc,GAAG,CAAC,CAAC;IACnB,QAAQ,GAAG,CAAC,CAAC;IACb,UAAU,GAAuB,SAAS,CAAC;IAC3C,UAAU,GAAG,KAAK,CAAC;IACnB,UAAU,CAAmC;IAErD,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,aAAa,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,kBAAkB,IAAI,IAAI,EAAE,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAqB;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAExB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,CAAC,MAAM;gBACjB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC9C,CAAC,CAAC,aAAa,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,EAAE,CAAC;YAC9D,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAmB;gBAC3B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBACjC,IAAI,EAAE,GAAG,CAAC,IAAuB;gBACjC,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,GAAG,EAAE,IAAI,CAAC,UAAU;aACrB,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhE,kEAAkE;YAClE,wEAAwE;YACxE,qFAAqF;YACrF,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACvC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,OAAO;gBACP,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,IAAI;aACL,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAoB;QAC5C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACzC,OAAO,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACrD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,GAAqB;QAC1C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAE7B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,KAAK,IAAI,IAAI;oBAAE,SAAS;gBAE5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC;wBACV,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAC;4BACxD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;4BAClB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IACE,EAAE,KAAK,SAAS;YAChB,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS;YACnC,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS,EACnC,CAAC;YACD,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAExE,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;QAC9D,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;QACnC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,UAAkB,EAAE,OAAgB;QAC5D,MAAM,UAAU,GAAI,OAAsB,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEnD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAEO,mBAAmB,CAAC,aAAqB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,KAAK,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxD,IACE,aAAa,KAAK,YAAY;gBAC9B,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,CAAC,EAC1C,CAAC;gBACD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;oBACpC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,aAAqB,EAAE,UAAoB;QAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,SAAS;YAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,IAAI,YAAY,GAAG,aAAa,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChD,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,MAAM;wBAAE,YAAY,GAAG,MAAM,CAAC;oBAClC,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC9C,CAAC;YAED,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperttp/transport-bun",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "High-performance, extensible HTTP client for Bun",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"url": "git+https://github.com/IT-IF-OR/hyperttp-transport-bun.git"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@hyperttp/types": "^0.
|
|
28
|
+
"@hyperttp/types": "^0.2.0"
|
|
29
29
|
},
|
|
30
30
|
"private": false
|
|
31
31
|
}
|