@remix-run/node 1.4.2 → 1.5.0-pre.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/base64.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/crypto.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/fetch.d.ts CHANGED
@@ -1,24 +1,23 @@
1
- import type AbortController from "abort-controller";
2
- import type { RequestInfo, RequestInit, Response } from "node-fetch";
3
- import { Request as BaseNodeRequest } from "node-fetch";
4
- import type { UploadHandler } from "./formData";
5
- export type { HeadersInit, RequestInfo, ResponseInit } from "node-fetch";
6
- export { Headers, Response } from "node-fetch";
7
- interface NodeRequestInit extends RequestInit {
8
- abortController?: AbortController;
9
- }
10
- declare class NodeRequest extends BaseNodeRequest {
11
- private abortController?;
12
- constructor(input: RequestInfo, init?: NodeRequestInit | undefined);
13
- formData(uploadHandler?: UploadHandler): Promise<FormData>;
1
+ /// <reference types="node" />
2
+ import type { Readable } from "stream";
3
+ import { fetch as webFetch, Headers as WebHeaders, Request as WebRequest, Response as WebResponse } from "@remix-run/web-fetch";
4
+ export { FormData } from "@remix-run/web-fetch";
5
+ export { File, Blob } from "@remix-run/web-file";
6
+ declare type NodeHeadersInit = ConstructorParameters<typeof WebHeaders>[0];
7
+ declare type NodeResponseInit = NonNullable<ConstructorParameters<typeof WebResponse>[1]>;
8
+ declare type NodeRequestInfo = ConstructorParameters<typeof WebRequest>[0] | NodeRequest;
9
+ declare type NodeRequestInit = Omit<NonNullable<ConstructorParameters<typeof WebRequest>[1]>, "body"> & {
10
+ body?: NonNullable<ConstructorParameters<typeof WebRequest>[1]>["body"] | Readable;
11
+ };
12
+ export type { NodeHeadersInit as HeadersInit, NodeRequestInfo as RequestInfo, NodeRequestInit as RequestInit, NodeResponseInit as ResponseInit, };
13
+ declare class NodeRequest extends WebRequest {
14
+ constructor(info: NodeRequestInfo, init?: NodeRequestInit);
15
+ get headers(): WebHeaders;
14
16
  clone(): NodeRequest;
15
17
  }
16
- export { NodeRequest as Request, NodeRequestInit as RequestInit };
17
- /**
18
- * A `fetch` function for node that matches the web Fetch API. Based on
19
- * `node-fetch`.
20
- *
21
- * @see https://github.com/node-fetch/node-fetch
22
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
23
- */
24
- export declare function fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
18
+ declare class NodeResponse extends WebResponse {
19
+ get headers(): WebHeaders;
20
+ clone(): NodeResponse;
21
+ }
22
+ export { WebHeaders as Headers, NodeRequest as Request, NodeResponse as Response, };
23
+ export declare const fetch: typeof webFetch;
package/fetch.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,137 +12,60 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- var stream = require('stream');
16
- var FormStream = require('form-data');
17
- var nodeFetch = require('node-fetch');
18
- var formData = require('./formData.js');
19
- var parseMultipartFormData = require('./parseMultipartFormData.js');
15
+ var webFetch = require('@remix-run/web-fetch');
16
+ var webFile = require('@remix-run/web-file');
20
17
 
21
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
22
-
23
- var FormStream__default = /*#__PURE__*/_interopDefaultLegacy(FormStream);
24
- var nodeFetch__default = /*#__PURE__*/_interopDefaultLegacy(nodeFetch);
25
-
26
- function formDataToStream(formData$1) {
27
- let formStream = new FormStream__default["default"]();
28
-
29
- function toNodeStream(input) {
30
- // The input is either a Node stream or a web stream, if it has
31
- // a `on` method it's a node stream so we can just return it
32
- if (typeof (input === null || input === void 0 ? void 0 : input.on) === "function") {
33
- return input;
34
- }
35
-
36
- let passthrough = new stream.PassThrough();
37
- let stream$1 = input;
38
- let reader = stream$1.getReader();
39
- reader.read().then(async ({
40
- done,
41
- value
42
- }) => {
43
- while (!done) {
44
- passthrough.push(value);
45
- ({
46
- done,
47
- value
48
- } = await reader.read());
49
- }
50
-
51
- passthrough.push(null);
52
- }).catch(error => {
53
- passthrough.emit("error", error);
54
- });
55
- return passthrough;
18
+ class NodeRequest extends webFetch.Request {
19
+ constructor(info, init) {
20
+ super(info, init);
56
21
  }
57
22
 
58
- for (let [key, value] of formData$1.entries()) {
59
- if (typeof value === "string") {
60
- formStream.append(key, value);
61
- } else if (formData.isFile(value)) {
62
- let stream = toNodeStream(value.stream());
63
- formStream.append(key, stream, {
64
- filename: value.name,
65
- contentType: value.type,
66
- knownLength: value.size
67
- });
68
- } else {
69
- let file = value;
70
- let stream = toNodeStream(file.stream());
71
- formStream.append(key, stream, {
72
- filename: "unknown"
73
- });
74
- }
23
+ get headers() {
24
+ return super.headers;
75
25
  }
76
26
 
77
- return formStream;
78
- }
79
-
80
- class NodeRequest extends nodeFetch.Request {
81
- constructor(input, init) {
82
- var _init;
83
-
84
- if (((_init = init) === null || _init === void 0 ? void 0 : _init.body) instanceof formData.FormData) {
85
- init = { ...init,
86
- body: formDataToStream(init.body)
87
- };
88
- }
89
-
90
- super(input, init);
91
- let anyInput = input;
92
- let anyInit = init;
93
- this.abortController = (anyInput === null || anyInput === void 0 ? void 0 : anyInput.abortController) || (anyInit === null || anyInit === void 0 ? void 0 : anyInit.abortController);
27
+ clone() {
28
+ return super.clone();
94
29
  }
95
30
 
96
- async formData(uploadHandler) {
97
- let contentType = this.headers.get("Content-Type");
98
-
99
- if (contentType && (/application\/x-www-form-urlencoded/.test(contentType) || /multipart\/form-data/.test(contentType))) {
100
- return await parseMultipartFormData.internalParseFormData(contentType, this.body, this.abortController, uploadHandler);
101
- }
31
+ }
102
32
 
103
- throw new Error("Invalid MIME type");
33
+ class NodeResponse extends webFetch.Response {
34
+ get headers() {
35
+ return super.headers;
104
36
  }
105
37
 
106
38
  clone() {
107
- return new NodeRequest(this);
39
+ return super.clone();
108
40
  }
109
41
 
110
42
  }
111
- /**
112
- * A `fetch` function for node that matches the web Fetch API. Based on
113
- * `node-fetch`.
114
- *
115
- * @see https://github.com/node-fetch/node-fetch
116
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
117
- */
118
-
119
- function fetch(input, init) {
120
- var _init2;
121
-
43
+ const fetch = (info, init) => {
122
44
  init = {
45
+ // Disable compression handling so people can return the result of a fetch
46
+ // directly in the loader without messing with the Content-Encoding header.
123
47
  compress: false,
124
48
  ...init
125
49
  };
50
+ return webFetch.fetch(info, init);
51
+ };
126
52
 
127
- if (((_init2 = init) === null || _init2 === void 0 ? void 0 : _init2.body) instanceof formData.FormData) {
128
- init = { ...init,
129
- body: formDataToStream(init.body)
130
- };
131
- } // Default to { compress: false } so responses can be proxied through more
132
- // easily in loaders. Otherwise the response stream encoding will not match
133
- // the Content-Encoding response header.
134
-
135
-
136
- return nodeFetch__default["default"](input, init);
137
- }
138
-
53
+ Object.defineProperty(exports, 'FormData', {
54
+ enumerable: true,
55
+ get: function () { return webFetch.FormData; }
56
+ });
139
57
  Object.defineProperty(exports, 'Headers', {
140
58
  enumerable: true,
141
- get: function () { return nodeFetch.Headers; }
59
+ get: function () { return webFetch.Headers; }
60
+ });
61
+ Object.defineProperty(exports, 'Blob', {
62
+ enumerable: true,
63
+ get: function () { return webFile.Blob; }
142
64
  });
143
- Object.defineProperty(exports, 'Response', {
65
+ Object.defineProperty(exports, 'File', {
144
66
  enumerable: true,
145
- get: function () { return nodeFetch.Response; }
67
+ get: function () { return webFile.File; }
146
68
  });
147
69
  exports.Request = NodeRequest;
70
+ exports.Response = NodeResponse;
148
71
  exports.fetch = fetch;
package/globals.d.ts CHANGED
@@ -14,6 +14,8 @@ declare global {
14
14
  Response: typeof Response;
15
15
  fetch: typeof fetch;
16
16
  FormData: typeof FormData;
17
+ ReadableStream: typeof ReadableStream;
18
+ WritableStream: typeof WritableStream;
17
19
  }
18
20
  }
19
21
  }
package/globals.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,22 +12,24 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- var file = require('@web-std/file');
15
+ var webStream = require('@remix-run/web-stream');
16
16
  var base64 = require('./base64.js');
17
17
  var fetch = require('./fetch.js');
18
- var formData = require('./formData.js');
19
- var nodeFetch = require('node-fetch');
18
+ var webFile = require('@remix-run/web-file');
19
+ var webFetch = require('@remix-run/web-fetch');
20
20
 
21
21
  function installGlobals() {
22
22
  global.atob = base64.atob;
23
23
  global.btoa = base64.btoa;
24
- global.Blob = file.Blob;
25
- global.File = file.File;
26
- global.Headers = nodeFetch.Headers;
24
+ global.Blob = webFile.Blob;
25
+ global.File = webFile.File;
26
+ global.Headers = webFetch.Headers;
27
27
  global.Request = fetch.Request;
28
- global.Response = nodeFetch.Response;
28
+ global.Response = fetch.Response;
29
29
  global.fetch = fetch.fetch;
30
- global.FormData = formData.FormData;
30
+ global.FormData = webFetch.FormData;
31
+ global.ReadableStream = webStream.ReadableStream;
32
+ global.WritableStream = webStream.WritableStream;
31
33
  }
32
34
 
33
35
  exports.installGlobals = installGlobals;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/index.d.ts CHANGED
@@ -1,13 +1,10 @@
1
1
  export { AbortController } from "abort-controller";
2
2
  export type { HeadersInit, RequestInfo, RequestInit, ResponseInit, } from "./fetch";
3
- export { Headers, Request, Response, fetch } from "./fetch";
4
- export { FormData } from "./formData";
5
- export type { UploadHandler, UploadHandlerArgs } from "./formData";
3
+ export { fetch, FormData, Headers, Request, Response } from "./fetch";
6
4
  export { installGlobals } from "./globals";
7
- export { parseMultipartFormData as unstable_parseMultipartFormData } from "./parseMultipartFormData";
8
5
  export { createFileSessionStorage } from "./sessions/fileStorage";
9
6
  export { createFileUploadHandler as unstable_createFileUploadHandler, NodeOnDiskFile, } from "./upload/fileUploadHandler";
10
- export { createMemoryUploadHandler as unstable_createMemoryUploadHandler } from "./upload/memoryUploadHandler";
11
7
  export { createCookie, createCookieSessionStorage, createMemorySessionStorage, createSessionStorage, } from "./implementations";
12
- export { createRequestHandler, createSession, isCookie, isSession, json, redirect, } from "@remix-run/server-runtime";
13
- export type { ActionFunction, AppData, AppLoadContext, CreateRequestHandlerFunction, Cookie, CookieOptions, CookieParseOptions, CookieSerializeOptions, CookieSignatureOptions, DataFunctionArgs, EntryContext, ErrorBoundaryComponent, HandleDataRequestFunction, HandleDocumentRequestFunction, HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderFunction, MetaDescriptor, MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, RouteHandle, ServerBuild, ServerEntryModule, Session, SessionData, SessionIdStorageStrategy, SessionStorage, } from "@remix-run/server-runtime";
8
+ export { createReadableStreamFromReadable, readableStreamToString, writeAsyncIterableToWritable, writeReadableStreamToWritable, } from "./stream";
9
+ export { createRequestHandler, createSession, isCookie, isSession, json, MaxPartSizeExceededError, redirect, unstable_composeUploadHandlers, unstable_createMemoryUploadHandler, unstable_parseMultipartFormData, } from "@remix-run/server-runtime";
10
+ export type { ActionFunction, AppData, AppLoadContext, Cookie, CookieOptions, CookieParseOptions, CookieSerializeOptions, CookieSignatureOptions, CreateRequestHandlerFunction, DataFunctionArgs, EntryContext, ErrorBoundaryComponent, HandleDataRequestFunction, HandleDocumentRequestFunction, HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderFunction, MemoryUploadHandlerFilterArgs, MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, RouteHandle, ServerBuild, ServerEntryModule, Session, SessionData, SessionIdStorageStrategy, SessionStorage, UploadHandler, UploadHandlerPart, } from "@remix-run/server-runtime";
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -15,15 +15,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
15
15
  var sourceMapSupport = require('source-map-support');
16
16
  var abortController = require('abort-controller');
17
17
  var fetch = require('./fetch.js');
18
- var formData = require('./formData.js');
19
18
  var globals = require('./globals.js');
20
- var parseMultipartFormData = require('./parseMultipartFormData.js');
21
19
  var fileStorage = require('./sessions/fileStorage.js');
22
20
  var fileUploadHandler = require('./upload/fileUploadHandler.js');
23
- var memoryUploadHandler = require('./upload/memoryUploadHandler.js');
24
21
  var implementations = require('./implementations.js');
22
+ var stream = require('./stream.js');
25
23
  var serverRuntime = require('@remix-run/server-runtime');
26
- var nodeFetch = require('node-fetch');
24
+ var webFetch = require('@remix-run/web-fetch');
27
25
 
28
26
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
29
27
 
@@ -36,18 +34,24 @@ Object.defineProperty(exports, 'AbortController', {
36
34
  get: function () { return abortController.AbortController; }
37
35
  });
38
36
  exports.Request = fetch.Request;
37
+ exports.Response = fetch.Response;
39
38
  exports.fetch = fetch.fetch;
40
- exports.FormData = formData.FormData;
41
39
  exports.installGlobals = globals.installGlobals;
42
- exports.unstable_parseMultipartFormData = parseMultipartFormData.parseMultipartFormData;
43
40
  exports.createFileSessionStorage = fileStorage.createFileSessionStorage;
44
41
  exports.NodeOnDiskFile = fileUploadHandler.NodeOnDiskFile;
45
42
  exports.unstable_createFileUploadHandler = fileUploadHandler.createFileUploadHandler;
46
- exports.unstable_createMemoryUploadHandler = memoryUploadHandler.createMemoryUploadHandler;
47
43
  exports.createCookie = implementations.createCookie;
48
44
  exports.createCookieSessionStorage = implementations.createCookieSessionStorage;
49
45
  exports.createMemorySessionStorage = implementations.createMemorySessionStorage;
50
46
  exports.createSessionStorage = implementations.createSessionStorage;
47
+ exports.createReadableStreamFromReadable = stream.createReadableStreamFromReadable;
48
+ exports.readableStreamToString = stream.readableStreamToString;
49
+ exports.writeAsyncIterableToWritable = stream.writeAsyncIterableToWritable;
50
+ exports.writeReadableStreamToWritable = stream.writeReadableStreamToWritable;
51
+ Object.defineProperty(exports, 'MaxPartSizeExceededError', {
52
+ enumerable: true,
53
+ get: function () { return serverRuntime.MaxPartSizeExceededError; }
54
+ });
51
55
  Object.defineProperty(exports, 'createRequestHandler', {
52
56
  enumerable: true,
53
57
  get: function () { return serverRuntime.createRequestHandler; }
@@ -72,11 +76,23 @@ Object.defineProperty(exports, 'redirect', {
72
76
  enumerable: true,
73
77
  get: function () { return serverRuntime.redirect; }
74
78
  });
75
- Object.defineProperty(exports, 'Headers', {
79
+ Object.defineProperty(exports, 'unstable_composeUploadHandlers', {
80
+ enumerable: true,
81
+ get: function () { return serverRuntime.unstable_composeUploadHandlers; }
82
+ });
83
+ Object.defineProperty(exports, 'unstable_createMemoryUploadHandler', {
76
84
  enumerable: true,
77
- get: function () { return nodeFetch.Headers; }
85
+ get: function () { return serverRuntime.unstable_createMemoryUploadHandler; }
78
86
  });
79
- Object.defineProperty(exports, 'Response', {
87
+ Object.defineProperty(exports, 'unstable_parseMultipartFormData', {
88
+ enumerable: true,
89
+ get: function () { return serverRuntime.unstable_parseMultipartFormData; }
90
+ });
91
+ Object.defineProperty(exports, 'FormData', {
92
+ enumerable: true,
93
+ get: function () { return webFetch.FormData; }
94
+ });
95
+ Object.defineProperty(exports, 'Headers', {
80
96
  enumerable: true,
81
- get: function () { return nodeFetch.Response; }
97
+ get: function () { return webFetch.Headers; }
82
98
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,2 +1,2 @@
1
1
  export { createCookie, createSessionStorage, createCookieSessionStorage, createMemorySessionStorage, createFileSessionStorage, unstable_createFileUploadHandler, unstable_createMemoryUploadHandler, unstable_parseMultipartFormData, } from "@remix-run/node";
2
- export type { UploadHandler, UploadHandlerArgs } from "@remix-run/node";
2
+ export type { UploadHandler, UploadHandlerPart } from "@remix-run/node";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remix-run/node",
3
3
  "description": "Node.js platform abstractions for Remix",
4
- "version": "1.4.2",
4
+ "version": "1.5.0-pre.1",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -12,20 +12,17 @@
12
12
  "url": "https://github.com/remix-run/remix/issues"
13
13
  },
14
14
  "dependencies": {
15
- "@remix-run/server-runtime": "1.4.2",
16
- "@types/busboy": "^0.3.1",
17
- "@types/node-fetch": "^2.5.12",
18
- "@web-std/file": "^3.0.0",
15
+ "@remix-run/server-runtime": "1.5.0-pre.1",
16
+ "@remix-run/web-fetch": "^4.1.3",
17
+ "@remix-run/web-file": "^3.0.2",
18
+ "@remix-run/web-stream": "^1.0.3",
19
+ "@web3-storage/multipart-parser": "^1.0.0",
19
20
  "abort-controller": "^3.0.0",
20
- "blob-stream": "^0.1.3",
21
- "busboy": "^0.3.1",
22
21
  "cookie-signature": "^1.1.0",
23
- "form-data": "^4.0.0",
24
- "node-fetch": "^2.6.1",
25
- "source-map-support": "^0.5.21"
22
+ "source-map-support": "^0.5.21",
23
+ "stream-slice": "^0.1.2"
26
24
  },
27
25
  "devDependencies": {
28
- "@types/blob-stream": "^0.1.30",
29
26
  "@types/cookie-signature": "^1.0.3",
30
27
  "@types/source-map-support": "^0.5.4"
31
28
  },
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @remix-run/node v1.4.2
2
+ * @remix-run/node v1.5.0-pre.1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/stream.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ import type { Readable, Writable } from "stream";
3
+ export declare function writeReadableStreamToWritable(stream: ReadableStream, writable: Writable): Promise<void>;
4
+ export declare function writeAsyncIterableToWritable(iterable: AsyncIterable<Uint8Array>, writable: Writable): Promise<void>;
5
+ export declare function readableStreamToString(stream: ReadableStream<Uint8Array>, encoding?: BufferEncoding): Promise<string>;
6
+ export declare const createReadableStreamFromReadable: (source: Readable & {
7
+ readableHighWaterMark?: number;
8
+ }) => ReadableStream<Uint8Array>;
package/stream.js ADDED
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @remix-run/node v1.5.0-pre.1
3
+ *
4
+ * Copyright (c) Remix Software Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ var stream = require('stream');
16
+
17
+ async function writeReadableStreamToWritable(stream, writable) {
18
+ let reader = stream.getReader();
19
+
20
+ async function read() {
21
+ let {
22
+ done,
23
+ value
24
+ } = await reader.read();
25
+
26
+ if (done) {
27
+ writable.end();
28
+ return;
29
+ }
30
+
31
+ writable.write(value);
32
+ await read();
33
+ }
34
+
35
+ try {
36
+ await read();
37
+ } catch (error) {
38
+ writable.destroy(error);
39
+ throw error;
40
+ }
41
+ }
42
+ async function writeAsyncIterableToWritable(iterable, writable) {
43
+ try {
44
+ for await (let chunk of iterable) {
45
+ writable.write(chunk);
46
+ }
47
+
48
+ writable.end();
49
+ } catch (error) {
50
+ writable.destroy(error);
51
+ throw error;
52
+ }
53
+ }
54
+ async function readableStreamToString(stream, encoding) {
55
+ let reader = stream.getReader();
56
+ let chunks = [];
57
+
58
+ async function read() {
59
+ let {
60
+ done,
61
+ value
62
+ } = await reader.read();
63
+
64
+ if (done) {
65
+ return;
66
+ } else if (value) {
67
+ chunks.push(value);
68
+ }
69
+
70
+ await read();
71
+ }
72
+
73
+ await read();
74
+ return Buffer.concat(chunks).toString(encoding);
75
+ }
76
+ const createReadableStreamFromReadable = source => {
77
+ let pump = new StreamPump(source);
78
+ let stream = new ReadableStream(pump, pump);
79
+ return stream;
80
+ };
81
+
82
+ class StreamPump {
83
+ constructor(stream$1) {
84
+ this.highWaterMark = stream$1.readableHighWaterMark || new stream.Stream.Readable().readableHighWaterMark;
85
+ this.accumalatedSize = 0;
86
+ this.stream = stream$1;
87
+ this.enqueue = this.enqueue.bind(this);
88
+ this.error = this.error.bind(this);
89
+ this.close = this.close.bind(this);
90
+ }
91
+
92
+ size(chunk) {
93
+ return (chunk === null || chunk === void 0 ? void 0 : chunk.byteLength) || 0;
94
+ }
95
+
96
+ start(controller) {
97
+ this.controller = controller;
98
+ this.stream.on("data", this.enqueue);
99
+ this.stream.once("error", this.error);
100
+ this.stream.once("end", this.close);
101
+ this.stream.once("close", this.close);
102
+ }
103
+
104
+ pull() {
105
+ this.resume();
106
+ }
107
+
108
+ cancel(reason) {
109
+ if (this.stream.destroy) {
110
+ this.stream.destroy(reason);
111
+ }
112
+
113
+ this.stream.off("data", this.enqueue);
114
+ this.stream.off("error", this.error);
115
+ this.stream.off("end", this.close);
116
+ this.stream.off("close", this.close);
117
+ }
118
+
119
+ enqueue(chunk) {
120
+ if (this.controller) {
121
+ try {
122
+ let bytes = chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);
123
+ let available = (this.controller.desiredSize || 0) - bytes.byteLength;
124
+ this.controller.enqueue(bytes);
125
+
126
+ if (available <= 0) {
127
+ this.pause();
128
+ }
129
+ } catch (error) {
130
+ this.controller.error(new Error("Could not create Buffer, chunk must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object"));
131
+ this.cancel();
132
+ }
133
+ }
134
+ }
135
+
136
+ pause() {
137
+ if (this.stream.pause) {
138
+ this.stream.pause();
139
+ }
140
+ }
141
+
142
+ resume() {
143
+ if (this.stream.readable && this.stream.resume) {
144
+ this.stream.resume();
145
+ }
146
+ }
147
+
148
+ close() {
149
+ if (this.controller) {
150
+ this.controller.close();
151
+ delete this.controller;
152
+ }
153
+ }
154
+
155
+ error(error) {
156
+ if (this.controller) {
157
+ this.controller.error(error);
158
+ delete this.controller;
159
+ }
160
+ }
161
+
162
+ }
163
+
164
+ exports.createReadableStreamFromReadable = createReadableStreamFromReadable;
165
+ exports.readableStreamToString = readableStreamToString;
166
+ exports.writeAsyncIterableToWritable = writeAsyncIterableToWritable;
167
+ exports.writeReadableStreamToWritable = writeReadableStreamToWritable;