@npy/fetch 0.1.3 → 0.1.4

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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/_internal/consts.cjs +4 -0
  3. package/_internal/consts.d.cts +3 -0
  4. package/_internal/consts.d.ts +3 -0
  5. package/_internal/consts.js +4 -0
  6. package/_internal/decode-stream-error.cjs +18 -0
  7. package/{src/_internal/decode-stream-error.ts → _internal/decode-stream-error.d.cts} +2 -7
  8. package/_internal/decode-stream-error.d.ts +11 -0
  9. package/_internal/decode-stream-error.js +18 -0
  10. package/_internal/error-mapping.cjs +44 -0
  11. package/_internal/error-mapping.d.cts +15 -0
  12. package/_internal/error-mapping.d.ts +15 -0
  13. package/_internal/error-mapping.js +41 -0
  14. package/_internal/guards.cjs +23 -0
  15. package/_internal/guards.d.cts +15 -0
  16. package/_internal/guards.d.ts +15 -0
  17. package/_internal/guards.js +15 -0
  18. package/_internal/net.cjs +95 -0
  19. package/_internal/net.d.cts +11 -0
  20. package/_internal/net.d.ts +11 -0
  21. package/_internal/net.js +92 -0
  22. package/_internal/promises.cjs +18 -0
  23. package/_internal/promises.d.cts +1 -0
  24. package/_internal/promises.d.ts +1 -0
  25. package/_internal/promises.js +18 -0
  26. package/_internal/streams.cjs +37 -0
  27. package/_internal/streams.d.cts +21 -0
  28. package/_internal/streams.d.ts +21 -0
  29. package/_internal/streams.js +36 -0
  30. package/_internal/symbols.cjs +4 -0
  31. package/_internal/symbols.d.cts +1 -0
  32. package/_internal/symbols.d.ts +1 -0
  33. package/_internal/symbols.js +4 -0
  34. package/_virtual/_rolldown/runtime.cjs +23 -0
  35. package/agent-pool.cjs +96 -0
  36. package/agent-pool.d.cts +2 -0
  37. package/agent-pool.d.ts +2 -0
  38. package/agent-pool.js +95 -0
  39. package/agent.cjs +260 -0
  40. package/agent.d.cts +3 -0
  41. package/agent.d.ts +3 -0
  42. package/agent.js +259 -0
  43. package/body.cjs +105 -0
  44. package/body.d.cts +12 -0
  45. package/body.d.ts +12 -0
  46. package/body.js +102 -0
  47. package/dialers/index.d.cts +3 -0
  48. package/dialers/index.d.ts +3 -0
  49. package/dialers/proxy.cjs +56 -0
  50. package/dialers/proxy.d.cts +27 -0
  51. package/dialers/proxy.d.ts +27 -0
  52. package/dialers/proxy.js +55 -0
  53. package/dialers/tcp.cjs +92 -0
  54. package/dialers/tcp.d.cts +57 -0
  55. package/dialers/tcp.d.ts +57 -0
  56. package/dialers/tcp.js +89 -0
  57. package/encoding.cjs +114 -0
  58. package/encoding.d.cts +35 -0
  59. package/encoding.d.ts +35 -0
  60. package/encoding.js +110 -0
  61. package/errors.cjs +275 -0
  62. package/errors.d.cts +110 -0
  63. package/errors.d.ts +110 -0
  64. package/errors.js +259 -0
  65. package/fetch.cjs +353 -0
  66. package/fetch.d.cts +58 -0
  67. package/fetch.d.ts +58 -0
  68. package/fetch.js +350 -0
  69. package/http-client.cjs +75 -0
  70. package/http-client.d.cts +39 -0
  71. package/http-client.d.ts +39 -0
  72. package/http-client.js +75 -0
  73. package/index.cjs +49 -0
  74. package/index.d.cts +14 -0
  75. package/index.d.ts +14 -0
  76. package/index.js +11 -0
  77. package/io/_utils.cjs +56 -0
  78. package/io/_utils.d.cts +10 -0
  79. package/io/_utils.d.ts +10 -0
  80. package/io/_utils.js +51 -0
  81. package/io/buf-writer.cjs +149 -0
  82. package/io/buf-writer.d.cts +13 -0
  83. package/io/buf-writer.d.ts +13 -0
  84. package/io/buf-writer.js +148 -0
  85. package/io/io.cjs +199 -0
  86. package/io/io.d.cts +5 -0
  87. package/io/io.d.ts +5 -0
  88. package/io/io.js +198 -0
  89. package/io/readers.cjs +337 -0
  90. package/io/readers.d.cts +69 -0
  91. package/io/readers.d.ts +69 -0
  92. package/io/readers.js +333 -0
  93. package/io/writers.cjs +196 -0
  94. package/io/writers.d.cts +22 -0
  95. package/io/writers.d.ts +22 -0
  96. package/io/writers.js +195 -0
  97. package/package.json +30 -25
  98. package/{src/types/agent.ts → types/agent.d.cts} +21 -47
  99. package/types/agent.d.ts +72 -0
  100. package/{src/types/dialer.ts → types/dialer.d.cts} +9 -19
  101. package/types/dialer.d.ts +30 -0
  102. package/types/index.d.cts +2 -0
  103. package/types/index.d.ts +2 -0
  104. package/bun.lock +0 -68
  105. package/examples/custom-proxy-client.ts +0 -32
  106. package/examples/http-client.ts +0 -47
  107. package/examples/proxy.ts +0 -16
  108. package/examples/simple.ts +0 -15
  109. package/src/_internal/consts.ts +0 -3
  110. package/src/_internal/error-mapping.ts +0 -160
  111. package/src/_internal/guards.ts +0 -78
  112. package/src/_internal/net.ts +0 -173
  113. package/src/_internal/promises.ts +0 -22
  114. package/src/_internal/streams.ts +0 -52
  115. package/src/_internal/symbols.ts +0 -1
  116. package/src/agent-pool.ts +0 -157
  117. package/src/agent.ts +0 -408
  118. package/src/body.ts +0 -179
  119. package/src/dialers/index.ts +0 -3
  120. package/src/dialers/proxy.ts +0 -102
  121. package/src/dialers/tcp.ts +0 -162
  122. package/src/encoding.ts +0 -222
  123. package/src/errors.ts +0 -357
  124. package/src/fetch.ts +0 -626
  125. package/src/http-client.ts +0 -111
  126. package/src/index.ts +0 -14
  127. package/src/io/_utils.ts +0 -82
  128. package/src/io/buf-writer.ts +0 -183
  129. package/src/io/io.ts +0 -322
  130. package/src/io/readers.ts +0 -576
  131. package/src/io/writers.ts +0 -331
  132. package/src/types/index.ts +0 -2
  133. package/tests/agent-pool.test.ts +0 -111
  134. package/tests/agent.test.ts +0 -134
  135. package/tests/body.test.ts +0 -228
  136. package/tests/errors.test.ts +0 -152
  137. package/tests/fetch.test.ts +0 -421
  138. package/tests/io-options.test.ts +0 -127
  139. package/tests/multipart.test.ts +0 -348
  140. package/tests/test-utils.ts +0 -335
  141. package/tsconfig.json +0 -15
@@ -1,47 +0,0 @@
1
- import { HttpClient } from "../src/http-client";
2
-
3
- const client = new HttpClient({
4
- poolMaxPerHost: 32,
5
- poolMaxIdlePerHost: 8,
6
- connect: {
7
- keepAlive: true,
8
- noDelay: true,
9
- },
10
- io: {
11
- reader: {
12
- highWaterMark: 16 * 1024,
13
- maxHeaderSize: 64 * 1024,
14
- maxLineSize: 64 * 1024,
15
- maxBufferedBytes: 256 * 1024,
16
- decompress: true,
17
- },
18
- writer: {
19
- highWaterMark: 16 * 1024,
20
- directWriteThreshold: 64 * 1024,
21
- coalesceBodyMaxBytes: 64 * 1024,
22
- },
23
- },
24
- });
25
-
26
- try {
27
- const response = await client.send({
28
- url: "https://httpbin.org/anything",
29
- method: "POST",
30
- headers: new Headers({
31
- "content-type": "application/json",
32
- "x-example": "advanced-http-client",
33
- }),
34
- body: JSON.stringify({
35
- source: "HttpClient.send",
36
- features: ["pooling", "custom I/O", "raw Response access"],
37
- }),
38
- });
39
-
40
- console.log("status:", response.status);
41
- console.log("headers:", Object.fromEntries(response.headers.entries()));
42
-
43
- const data = await response.json();
44
- console.log("echoed json:", data.json);
45
- } finally {
46
- await client.close();
47
- }
package/examples/proxy.ts DELETED
@@ -1,16 +0,0 @@
1
- import { fetch } from "../src/fetch";
2
-
3
- const proxyUrl = "http://V0rk3M:phA3fT@186.179.61.64:9183";
4
-
5
- const response = await fetch("https://httpbin.org/ip", { proxy: proxyUrl });
6
-
7
- if (!response.ok) {
8
- throw new Error(`HTTP ${response.status}`);
9
- }
10
-
11
- const data = await response.json();
12
-
13
- console.log("proxy:", proxyUrl);
14
- console.log("origin seen by server:", data.origin);
15
-
16
- await fetch.close();
@@ -1,15 +0,0 @@
1
- import { fetch } from "../src/fetch";
2
-
3
- const response = await fetch("https://httpbin.org/anything");
4
-
5
- if (!response.ok) {
6
- throw new Error(`HTTP ${response.status}`);
7
- }
8
-
9
- const data = await response.json();
10
-
11
- console.log("status:", response.status);
12
- console.log("url:", data.url);
13
- console.log("headers sent:", data.headers);
14
-
15
- await fetch.close();
@@ -1,3 +0,0 @@
1
- export const CRLF_BYTES = new Uint8Array([0x0d, 0x0a]);
2
- export const CRLF_STR = "\r\n";
3
- export const CRLF_LENGTH = 2;
@@ -1,160 +0,0 @@
1
- import { DecodeStreamError } from "../_internal/decode-stream-error";
2
- import {
3
- ConnectionError,
4
- ConnectTimeoutError,
5
- FetchError,
6
- type FetchErrorContext,
7
- RequestAbortedError,
8
- RequestWriteError,
9
- ResponseBodyError,
10
- ResponseDecodeError,
11
- ResponseHeaderError,
12
- } from "../errors";
13
-
14
- /** Casts or converts the unknown into an Error */
15
- export function unknownToError(err: unknown): Error {
16
- if (err instanceof Error) {
17
- return err;
18
- }
19
-
20
- if (typeof err === "string") {
21
- return new Error(err);
22
- }
23
-
24
- return new Error("unknown error", { cause: err });
25
- }
26
-
27
- function isAbortOrTimeoutError(error: unknown): boolean {
28
- if (!error || typeof error !== "object") {
29
- return false;
30
- }
31
-
32
- const name = String((error as { name?: unknown }).name ?? "");
33
- return name === "AbortError" || name === "TimeoutError";
34
- }
35
-
36
- export function toConnectError(
37
- error: unknown,
38
- {
39
- signal,
40
- context,
41
- timedOut,
42
- }: {
43
- signal?: AbortSignal;
44
- context?: FetchErrorContext;
45
- timedOut?: boolean;
46
- },
47
- ): FetchError {
48
- if (error instanceof FetchError) return error;
49
-
50
- if (timedOut || signal?.reason?.name === "TimeoutError") {
51
- return new ConnectTimeoutError(
52
- unknownToError(error),
53
- context,
54
- "Connection timeout",
55
- );
56
- }
57
-
58
- if (signal?.aborted || isAbortOrTimeoutError(error)) {
59
- return new RequestAbortedError(
60
- unknownToError(
61
- signal?.reason ??
62
- error ??
63
- new DOMException(
64
- "This operation was aborted",
65
- "AbortError",
66
- ),
67
- ),
68
- context,
69
- "The request was aborted while connecting",
70
- );
71
- }
72
-
73
- return new ConnectionError(
74
- unknownToError(error),
75
- context,
76
- "Connection failed",
77
- );
78
- }
79
-
80
- export function toSendError(
81
- error: unknown,
82
- {
83
- signal,
84
- context,
85
- phase,
86
- }: {
87
- signal?: AbortSignal;
88
- context?: FetchErrorContext;
89
- phase: "request" | "response" | "body";
90
- },
91
- ): FetchError {
92
- if (error instanceof FetchError) return error;
93
-
94
- if (signal?.aborted || isAbortOrTimeoutError(error)) {
95
- return new RequestAbortedError(
96
- unknownToError(
97
- signal?.reason ??
98
- error ??
99
- new DOMException(
100
- "This operation was aborted",
101
- "AbortError",
102
- ),
103
- ),
104
- context,
105
- phase === "body"
106
- ? "The request was aborted while reading the response body"
107
- : "The request was aborted",
108
- );
109
- }
110
-
111
- const cause = unknownToError(error);
112
-
113
- if (phase === "request") return new RequestWriteError(cause, context);
114
- if (phase === "response") return new ResponseHeaderError(cause, context);
115
-
116
- if (error instanceof DecodeStreamError) {
117
- return new ResponseDecodeError(unknownToError(error.cause), context);
118
- }
119
-
120
- return new ResponseBodyError(cause, context);
121
- }
122
-
123
- export function toWebFetchError(error: unknown, signal?: AbortSignal): unknown {
124
- if (signal?.aborted) {
125
- return (
126
- signal.reason ??
127
- new DOMException("This operation was aborted", "AbortError")
128
- );
129
- }
130
-
131
- if (error instanceof DOMException || error instanceof TypeError) {
132
- return error;
133
- }
134
-
135
- return new TypeError("fetch failed", { cause: unknownToError(error) });
136
- }
137
-
138
- export function toWebBodyReadError(
139
- error: unknown,
140
- signal?: AbortSignal,
141
- ): unknown {
142
- if (signal?.aborted) {
143
- return (
144
- signal.reason ??
145
- new DOMException("This operation was aborted", "AbortError")
146
- );
147
- }
148
-
149
- if (
150
- error instanceof DOMException ||
151
- error instanceof TypeError ||
152
- error instanceof RangeError
153
- ) {
154
- return error;
155
- }
156
-
157
- return new TypeError("Failed to read response body", {
158
- cause: unknownToError(error),
159
- });
160
- }
@@ -1,78 +0,0 @@
1
- import { Readable } from "node:stream";
2
- import type { IClosable, IReadable } from "@fuman/io";
3
-
4
- export interface FormDataPolyfill extends Readable {
5
- getBoundary(): string;
6
- getLengthSync(): number;
7
- hasKnownLength(): boolean;
8
- }
9
-
10
- export const isReadable = (object: any): object is Readable =>
11
- Boolean(Readable.isReadable(object));
12
-
13
- export const isIterable = (
14
- object: any,
15
- ): object is AsyncIterable<any> | Iterable<any> =>
16
- typeof object?.[Symbol.asyncIterator] === "function" ||
17
- typeof object?.[Symbol.iterator] === "function";
18
-
19
- export const isMultipartFormDataStream = (
20
- object: any,
21
- ): object is FormDataPolyfill =>
22
- typeof object?.getBoundary === "function" &&
23
- typeof object?.hasKnownLength === "function" &&
24
- typeof object?.getLengthSync === "function" &&
25
- Boolean(Readable.isReadable(object));
26
-
27
- export const isFormData = (object: any): object is FormData =>
28
- typeof object === "object" &&
29
- typeof object?.append === "function" &&
30
- typeof object?.set === "function" &&
31
- typeof object?.get === "function" &&
32
- typeof object?.getAll === "function" &&
33
- typeof object?.delete === "function" &&
34
- typeof object?.keys === "function" &&
35
- typeof object?.values === "function" &&
36
- typeof object?.entries === "function" &&
37
- typeof object?.constructor === "function" &&
38
- object?.[Symbol.toStringTag] === "FormData";
39
-
40
- export const isURLSearchParameters = (object: any): object is URLSearchParams =>
41
- typeof object === "object" &&
42
- typeof object?.append === "function" &&
43
- typeof object?.delete === "function" &&
44
- typeof object?.get === "function" &&
45
- typeof object?.getAll === "function" &&
46
- typeof object?.has === "function" &&
47
- typeof object?.set === "function" &&
48
- typeof object?.sort === "function" &&
49
- object?.[Symbol.toStringTag] === "URLSearchParams";
50
-
51
- export const isReadableStream = (object: any): object is ReadableStream =>
52
- typeof object === "object" &&
53
- typeof object?.getReader === "function" &&
54
- typeof object?.cancel === "function" &&
55
- typeof object?.tee === "function";
56
-
57
- export const isFumanReadable = (object: any): object is IReadable & IClosable =>
58
- typeof object?.read === "function" &&
59
- typeof object?.close === "function" &&
60
- !isReadable(object) &&
61
- !isReadableStream(object);
62
-
63
- export const isBlob = (object: any): object is Blob => {
64
- if (
65
- typeof object === "object" &&
66
- object !== null &&
67
- typeof object.arrayBuffer === "function" &&
68
- typeof object.size === "number" &&
69
- typeof object.slice === "function" &&
70
- typeof object.stream === "function" &&
71
- typeof object.text === "function" &&
72
- typeof object.type === "string"
73
- ) {
74
- return true;
75
- }
76
-
77
- return false;
78
- };
@@ -1,173 +0,0 @@
1
- import { createConnection } from "node:net";
2
- import { connect as nodeTlsConnect } from "node:tls";
3
- import type {
4
- ConnectFunction,
5
- TcpEndpoint,
6
- TlsUpgradeFunction,
7
- } from "@fuman/net";
8
- import {
9
- type NodeTlsConnectOptions,
10
- type NodeTlsUpgradeOptions,
11
- TcpConnection,
12
- TlsConnection,
13
- } from "@fuman/node";
14
-
15
- export type WithSignal<T = {}> = T & { signal?: AbortSignal };
16
-
17
- type SocketLike = {
18
- on(event: string, handler: (...args: any[]) => void): void;
19
- removeListener(event: string, handler: (...args: any[]) => void): void;
20
- destroy(error?: Error): void;
21
- };
22
-
23
- export interface AbortError extends Error {
24
- name: "AbortError";
25
- }
26
-
27
- function toAbortError(reason: unknown): AbortError {
28
- if (reason instanceof Error && reason.name === "AbortError") {
29
- return reason as AbortError;
30
- }
31
-
32
- const message =
33
- reason instanceof Error
34
- ? reason.message
35
- : typeof reason === "string"
36
- ? reason
37
- : "The operation was aborted";
38
-
39
- if (typeof DOMException !== "undefined") {
40
- return new DOMException(message, "AbortError") as AbortError;
41
- }
42
-
43
- const error = new Error(message) as AbortError;
44
- error.name = "AbortError";
45
- return error;
46
- }
47
-
48
- function throwIfAborted(signal?: AbortSignal): void {
49
- if (signal?.aborted) {
50
- throw toAbortError(signal.reason);
51
- }
52
- }
53
-
54
- async function withSocketSignal<T extends SocketLike, R>(
55
- createSocket: () => T,
56
- wrapConnection: (socket: T) => R,
57
- signal?: AbortSignal,
58
- readyEvent = "connect",
59
- onFailureCleanup?: () => void,
60
- ): Promise<R> {
61
- return new Promise<R>((resolve, reject) => {
62
- throwIfAborted(signal);
63
-
64
- const socket = createSocket();
65
- let settled = false;
66
-
67
- const cleanup = () => {
68
- socket.removeListener("error", onError);
69
- socket.removeListener("timeout", onError);
70
- socket.removeListener(readyEvent, onReady);
71
- signal?.removeEventListener("abort", onAbort);
72
- };
73
-
74
- const safeCleanup = () => {
75
- try {
76
- onFailureCleanup?.();
77
- } catch {}
78
- };
79
-
80
- const resolveOnce = (value: R) => {
81
- if (settled) return;
82
- settled = true;
83
- cleanup();
84
- resolve(value);
85
- };
86
-
87
- const rejectOnce = (error: unknown) => {
88
- if (settled) return;
89
- settled = true;
90
- cleanup();
91
- reject(error);
92
- };
93
-
94
- const onError = (error: unknown) => {
95
- safeCleanup();
96
- rejectOnce(error);
97
- };
98
-
99
- const onAbort = () => {
100
- const error = toAbortError(signal?.reason);
101
- safeCleanup();
102
- rejectOnce(error);
103
-
104
- try {
105
- socket.destroy(error);
106
- } catch {}
107
- };
108
-
109
- const onReady = () => {
110
- resolveOnce(wrapConnection(socket));
111
- };
112
-
113
- signal?.addEventListener("abort", onAbort, { once: true });
114
- socket.on("error", onError);
115
- socket.on("timeout", onError);
116
- socket.on(readyEvent, onReady);
117
- });
118
- }
119
-
120
- export const connectTcp: ConnectFunction<
121
- WithSignal<TcpEndpoint>,
122
- TcpConnection
123
- > = async ({ address, port, signal }) => {
124
- return withSocketSignal(
125
- () => createConnection({ host: address, port }),
126
- (socket) => new TcpConnection(socket),
127
- signal,
128
- );
129
- };
130
-
131
- export const connectTls: ConnectFunction<
132
- WithSignal<NodeTlsConnectOptions>,
133
- TlsConnection
134
- > = async (options) => {
135
- const { address, port, signal, sni, caCerts, alpnProtocols, extraOptions } =
136
- options;
137
-
138
- return withSocketSignal(
139
- () =>
140
- nodeTlsConnect({
141
- host: address,
142
- port,
143
- ca: caCerts,
144
- ALPNProtocols: alpnProtocols,
145
- servername: sni,
146
- ...extraOptions,
147
- }),
148
- (socket) => new TlsConnection(socket),
149
- signal,
150
- "secureConnect",
151
- );
152
- };
153
-
154
- export const upgradeTls: TlsUpgradeFunction<
155
- WithSignal<NodeTlsUpgradeOptions>,
156
- TcpConnection,
157
- TlsConnection
158
- > = async (conn, options) => {
159
- return withSocketSignal(
160
- () =>
161
- nodeTlsConnect({
162
- socket: conn.socket,
163
- ca: options.caCerts,
164
- ALPNProtocols: options.alpnProtocols,
165
- servername: options.sni,
166
- ...options.extraOptions,
167
- }),
168
- (socket) => new TlsConnection(socket),
169
- options.signal,
170
- "secureConnect",
171
- () => conn.close(),
172
- );
173
- };
@@ -1,22 +0,0 @@
1
- export function raceSignal<T>(
2
- promise: PromiseLike<T>,
3
- signal: AbortSignal,
4
- ): Promise<T> {
5
- return Promise.race([
6
- promise,
7
- new Promise<never>((_, reject) => {
8
- function onAbort() {
9
- reject(signal.reason);
10
- }
11
- if (signal.aborted) {
12
- onAbort();
13
- } else {
14
- signal.addEventListener("abort", onAbort, { once: true });
15
- function cleanup() {
16
- signal.removeEventListener("abort", onAbort);
17
- }
18
- promise.then(cleanup, cleanup);
19
- }
20
- }),
21
- ]);
22
- }
@@ -1,52 +0,0 @@
1
- /**
2
- * Create a ReadableStream from a Uint8Array.
3
- *
4
- * The stream will emit the entire byte array as a single chunk,
5
- * then close immediately.
6
- *
7
- * @param bytes - The byte array to wrap.
8
- * @returns A ReadableStream that emits the bytes.
9
- */
10
- export function bytesToStream(bytes: Uint8Array) {
11
- return new ReadableStream<Uint8Array>({
12
- start(controller) {
13
- controller.enqueue(bytes);
14
- controller.close();
15
- },
16
- });
17
- }
18
-
19
- /**
20
- * A TransformStream that limits the total number of bytes passed through.
21
- *
22
- * It accumulates the byte count from incoming chunks and enqueues them
23
- * if the total remains within the limit; otherwise, it errors.
24
- *
25
- * @param maxBytes - The maximum allowed bytes before erroring.
26
- */
27
- export class MaxBytesTransformStream extends TransformStream<
28
- Uint8Array,
29
- Uint8Array
30
- > {
31
- constructor(maxBytes: number) {
32
- // Note: negation accounts for invalid value types (NaN, non numbers)
33
- if (!(maxBytes >= 0)) {
34
- throw new TypeError("maxBytes must be a non-negative number");
35
- }
36
-
37
- let bytesRead = 0;
38
-
39
- super({
40
- transform: (
41
- chunk: Uint8Array,
42
- ctrl: TransformStreamDefaultController<Uint8Array>,
43
- ) => {
44
- if ((bytesRead += chunk.length) <= maxBytes) {
45
- ctrl.enqueue(chunk);
46
- } else {
47
- ctrl.error(new Error("Response too large"));
48
- }
49
- },
50
- });
51
- }
52
- }
@@ -1 +0,0 @@
1
- export const bodyErrorMapperSymbol = Symbol("fetch.bodyErrorMapper");