@remix-run/node 1.4.3 → 1.5.0-pre.2
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 +1 -1
- package/crypto.js +1 -1
- package/fetch.d.ts +21 -22
- package/fetch.js +32 -109
- package/globals.d.ts +2 -0
- package/globals.js +11 -9
- package/implementations.js +1 -1
- package/index.d.ts +4 -7
- package/index.js +28 -12
- package/magicExports/esm/remix.js +1 -1
- package/magicExports/remix.d.ts +1 -1
- package/magicExports/remix.js +1 -1
- package/package.json +8 -11
- package/sessions/fileStorage.js +1 -1
- package/stream.d.ts +8 -0
- package/stream.js +167 -0
- package/upload/fileUploadHandler.d.ts +15 -10
- package/upload/fileUploadHandler.js +107 -52
- package/formData.d.ts +0 -27
- package/formData.js +0 -108
- package/parseMultipartFormData.d.ts +0 -11
- package/parseMultipartFormData.js +0 -114
- package/upload/memoryUploadHandler.d.ts +0 -21
- package/upload/memoryUploadHandler.js +0 -80
- package/upload/meter.d.ts +0 -15
- package/upload/meter.js +0 -47
package/base64.js
CHANGED
package/crypto.js
CHANGED
package/fetch.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
import type {
|
|
3
|
-
import { Request as
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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.
|
|
2
|
+
* @remix-run/node v1.5.0-pre.2
|
|
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
|
|
16
|
-
var
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
+
class NodeResponse extends webFetch.Response {
|
|
34
|
+
get headers() {
|
|
35
|
+
return super.headers;
|
|
104
36
|
}
|
|
105
37
|
|
|
106
38
|
clone() {
|
|
107
|
-
return
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
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, '
|
|
65
|
+
Object.defineProperty(exports, 'File', {
|
|
144
66
|
enumerable: true,
|
|
145
|
-
get: function () { return
|
|
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
package/globals.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @remix-run/node v1.
|
|
2
|
+
* @remix-run/node v1.5.0-pre.2
|
|
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
|
|
15
|
+
var webStream = require('@remix-run/web-stream');
|
|
16
16
|
var base64 = require('./base64.js');
|
|
17
17
|
var fetch = require('./fetch.js');
|
|
18
|
-
var
|
|
19
|
-
var
|
|
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 =
|
|
25
|
-
global.File =
|
|
26
|
-
global.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 =
|
|
28
|
+
global.Response = fetch.Response;
|
|
29
29
|
global.fetch = fetch.fetch;
|
|
30
|
-
global.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;
|
package/implementations.js
CHANGED
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
|
|
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 {
|
|
13
|
-
export
|
|
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.
|
|
2
|
+
* @remix-run/node v1.5.0-pre.2
|
|
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
|
|
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, '
|
|
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
|
|
85
|
+
get: function () { return serverRuntime.unstable_createMemoryUploadHandler; }
|
|
78
86
|
});
|
|
79
|
-
Object.defineProperty(exports, '
|
|
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
|
|
97
|
+
get: function () { return webFetch.Headers; }
|
|
82
98
|
});
|
package/magicExports/remix.d.ts
CHANGED
|
@@ -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,
|
|
2
|
+
export type { UploadHandler, UploadHandlerPart } from "@remix-run/node";
|
package/magicExports/remix.js
CHANGED
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
|
+
"version": "1.5.0-pre.2",
|
|
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.
|
|
16
|
-
"@
|
|
17
|
-
"@
|
|
18
|
-
"@web-
|
|
15
|
+
"@remix-run/server-runtime": "1.5.0-pre.2",
|
|
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
|
-
"
|
|
24
|
-
"
|
|
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
|
},
|
package/sessions/fileStorage.js
CHANGED
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.2
|
|
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;
|