@modern-js/runtime 2.69.7 → 2.70.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/dist/cjs/core/server/stream/createReadableStream.js +1 -3
- package/dist/cjs/core/server/stream/createReadableStream.worker.js +4 -14
- package/dist/cjs/core/server/stream/shared.js +52 -2
- package/dist/esm/core/server/stream/createReadableStream.js +3 -5
- package/dist/esm/core/server/stream/createReadableStream.worker.js +5 -5
- package/dist/esm/core/server/stream/shared.js +40 -1
- package/dist/esm-node/core/server/stream/createReadableStream.js +2 -4
- package/dist/esm-node/core/server/stream/createReadableStream.worker.js +5 -5
- package/dist/esm-node/core/server/stream/shared.js +40 -1
- package/dist/types/core/server/stream/shared.d.ts +4 -0
- package/package.json +12 -12
|
@@ -33,7 +33,6 @@ __export(createReadableStream_exports, {
|
|
|
33
33
|
module.exports = __toCommonJS(createReadableStream_exports);
|
|
34
34
|
var import_stream = require("stream");
|
|
35
35
|
var import_node = require("@modern-js/runtime-utils/node");
|
|
36
|
-
var import_isbot = __toESM(require("isbot"));
|
|
37
36
|
var import_styled_components = require("styled-components");
|
|
38
37
|
var import_common = require("../../../common");
|
|
39
38
|
var import_constants = require("../../constants");
|
|
@@ -47,8 +46,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
47
46
|
let shellChunkStatus = import_shared.ShellChunkStatus.START;
|
|
48
47
|
let renderLevel = import_constants.RenderLevel.SERVER_RENDER;
|
|
49
48
|
const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
50
|
-
const
|
|
51
|
-
const onReady = isbot || forceStream2String ? "onAllReady" : "onShellReady";
|
|
49
|
+
const { onReady } = (0, import_shared.resolveStreamingMode)(request, forceStream2String);
|
|
52
50
|
const sheet = new import_styled_components.ServerStyleSheet();
|
|
53
51
|
const chunkVec = [];
|
|
54
52
|
const root = sheet.collectStyles(rootElement);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
var createReadableStream_worker_exports = {};
|
|
30
20
|
__export(createReadableStream_worker_exports, {
|
|
@@ -33,7 +23,6 @@ __export(createReadableStream_worker_exports, {
|
|
|
33
23
|
module.exports = __toCommonJS(createReadableStream_worker_exports);
|
|
34
24
|
var import_ssr = require("@modern-js/render/ssr");
|
|
35
25
|
var import_node = require("@modern-js/runtime-utils/node");
|
|
36
|
-
var import_isbot = __toESM(require("isbot"));
|
|
37
26
|
var import_common = require("../../../common");
|
|
38
27
|
var import_constants = require("../../constants");
|
|
39
28
|
var import_deferredScript = require("./deferredScript");
|
|
@@ -52,7 +41,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
52
41
|
entryName
|
|
53
42
|
});
|
|
54
43
|
try {
|
|
55
|
-
var _options_onShellReady;
|
|
44
|
+
var _options_onShellReady, _process_env;
|
|
56
45
|
const readableOriginal = await (0, import_ssr.renderSSRStream)(rootElement, {
|
|
57
46
|
request,
|
|
58
47
|
clientManifest: options.rscClientManifest,
|
|
@@ -69,8 +58,9 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
69
58
|
var _options_onAllReady;
|
|
70
59
|
options === null || options === void 0 ? void 0 : (_options_onAllReady = options.onAllReady) === null || _options_onAllReady === void 0 ? void 0 : _options_onAllReady.call(options);
|
|
71
60
|
});
|
|
72
|
-
const
|
|
73
|
-
|
|
61
|
+
const forceStreamToString = Boolean(typeof process !== "undefined" && ((_process_env = process.env) === null || _process_env === void 0 ? void 0 : _process_env.MODERN_JS_STREAM_TO_STRING));
|
|
62
|
+
const { waitForAllReady } = (0, import_shared.resolveStreamingMode)(request, forceStreamToString);
|
|
63
|
+
if (waitForAllReady) {
|
|
74
64
|
await readableOriginal.allReady;
|
|
75
65
|
}
|
|
76
66
|
const reader = readableOriginal.getReader();
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,17 +17,27 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var shared_exports = {};
|
|
20
30
|
__export(shared_exports, {
|
|
21
31
|
ShellChunkStatus: () => ShellChunkStatus,
|
|
22
32
|
createRenderStreaming: () => createRenderStreaming,
|
|
23
33
|
encodeForWebStream: () => encodeForWebStream,
|
|
24
|
-
getReadableStreamFromString: () => getReadableStreamFromString
|
|
34
|
+
getReadableStreamFromString: () => getReadableStreamFromString,
|
|
35
|
+
resolveStreamingMode: () => resolveStreamingMode
|
|
25
36
|
});
|
|
26
37
|
module.exports = __toCommonJS(shared_exports);
|
|
27
38
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
28
39
|
var import_time = require("@modern-js/runtime-utils/time");
|
|
40
|
+
var import_isbot = __toESM(require("isbot"));
|
|
29
41
|
var import_common = require("../../../common");
|
|
30
42
|
var import_wrapper = require("../../react/wrapper");
|
|
31
43
|
var import_tracer = require("../tracer");
|
|
@@ -35,6 +47,43 @@ var ShellChunkStatus;
|
|
|
35
47
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
36
48
|
ShellChunkStatus2[ShellChunkStatus2["FINISH"] = 1] = "FINISH";
|
|
37
49
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
50
|
+
const SHOULD_STREAM_ALL_HEADER = "x-should-stream-all";
|
|
51
|
+
function parseShouldStreamAllFlag(value) {
|
|
52
|
+
if (!value) {
|
|
53
|
+
return void 0;
|
|
54
|
+
}
|
|
55
|
+
const normalized = value.trim().toLowerCase();
|
|
56
|
+
if (normalized === "false") {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
function resolveStreamingMode(request, forceStreamToString) {
|
|
62
|
+
const shouldStreamAll = parseShouldStreamAllFlag(request.headers.get(SHOULD_STREAM_ALL_HEADER));
|
|
63
|
+
const isBot = (0, import_isbot.default)(request.headers.get("user-agent"));
|
|
64
|
+
if (shouldStreamAll) {
|
|
65
|
+
return {
|
|
66
|
+
onReady: "onAllReady",
|
|
67
|
+
waitForAllReady: true
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (forceStreamToString) {
|
|
71
|
+
return {
|
|
72
|
+
onReady: "onAllReady",
|
|
73
|
+
waitForAllReady: true
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (isBot) {
|
|
77
|
+
return {
|
|
78
|
+
onReady: "onAllReady",
|
|
79
|
+
waitForAllReady: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
onReady: "onShellReady",
|
|
84
|
+
waitForAllReady: false
|
|
85
|
+
};
|
|
86
|
+
}
|
|
38
87
|
let encoder;
|
|
39
88
|
function encodeForWebStream(thing) {
|
|
40
89
|
if (!encoder) {
|
|
@@ -109,5 +158,6 @@ function createRenderStreaming(createReadableStreamPromise) {
|
|
|
109
158
|
ShellChunkStatus,
|
|
110
159
|
createRenderStreaming,
|
|
111
160
|
encodeForWebStream,
|
|
112
|
-
getReadableStreamFromString
|
|
161
|
+
getReadableStreamFromString,
|
|
162
|
+
resolveStreamingMode
|
|
113
163
|
});
|
|
@@ -4,17 +4,16 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
5
|
import { PassThrough, Transform } from "stream";
|
|
6
6
|
import { createReadableStreamFromReadable, storage } from "@modern-js/runtime-utils/node";
|
|
7
|
-
import checkIsBot from "isbot";
|
|
8
7
|
import { ServerStyleSheet } from "styled-components";
|
|
9
8
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
10
9
|
import { RenderLevel } from "../../constants";
|
|
11
10
|
import { getMonitors } from "../../context/monitors";
|
|
12
11
|
import { enqueueFromEntries } from "./deferredScript";
|
|
13
|
-
import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
|
|
12
|
+
import { ShellChunkStatus, getReadableStreamFromString, resolveStreamingMode } from "./shared";
|
|
14
13
|
import { getTemplates } from "./template";
|
|
15
14
|
var createReadableStreamFromElement = function() {
|
|
16
15
|
var _ref = _async_to_generator(function(request, rootElement, options) {
|
|
17
|
-
var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, entryName, shellChunkStatus, renderLevel, forceStream2String,
|
|
16
|
+
var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, entryName, shellChunkStatus, renderLevel, forceStream2String, onReady, sheet, chunkVec, root;
|
|
18
17
|
return _ts_generator(this, function(_state) {
|
|
19
18
|
switch (_state.label) {
|
|
20
19
|
case 0:
|
|
@@ -28,8 +27,7 @@ var createReadableStreamFromElement = function() {
|
|
|
28
27
|
shellChunkStatus = ShellChunkStatus.START;
|
|
29
28
|
renderLevel = RenderLevel.SERVER_RENDER;
|
|
30
29
|
forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
31
|
-
|
|
32
|
-
onReady = isbot || forceStream2String ? "onAllReady" : "onShellReady";
|
|
30
|
+
onReady = resolveStreamingMode(request, forceStream2String).onReady;
|
|
33
31
|
sheet = new ServerStyleSheet();
|
|
34
32
|
chunkVec = [];
|
|
35
33
|
root = sheet.collectStyles(rootElement);
|
|
@@ -3,15 +3,14 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
3
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
4
4
|
import { renderSSRStream } from "@modern-js/render/ssr";
|
|
5
5
|
import { storage } from "@modern-js/runtime-utils/node";
|
|
6
|
-
import checkIsBot from "isbot";
|
|
7
6
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
8
7
|
import { RenderLevel } from "../../constants";
|
|
9
8
|
import { enqueueFromEntries } from "./deferredScript";
|
|
10
|
-
import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString } from "./shared";
|
|
9
|
+
import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString, resolveStreamingMode } from "./shared";
|
|
11
10
|
import { getTemplates } from "./template";
|
|
12
11
|
var createReadableStreamFromElement = function() {
|
|
13
12
|
var _ref = _async_to_generator(function(request, rootElement, options) {
|
|
14
|
-
var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, entryName, rscRoot, _ref2, shellBefore, shellAfter, _options_onShellReady, readableOriginal,
|
|
13
|
+
var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, entryName, rscRoot, _ref2, shellBefore, shellAfter, _options_onShellReady, _process_env, readableOriginal, forceStreamToString, waitForAllReady, reader, stream, e, fallbackHtml, stream1;
|
|
15
14
|
return _ts_generator(this, function(_state) {
|
|
16
15
|
switch (_state.label) {
|
|
17
16
|
case 0:
|
|
@@ -60,8 +59,9 @@ var createReadableStreamFromElement = function() {
|
|
|
60
59
|
var _options_onAllReady;
|
|
61
60
|
options === null || options === void 0 ? void 0 : (_options_onAllReady = options.onAllReady) === null || _options_onAllReady === void 0 ? void 0 : _options_onAllReady.call(options);
|
|
62
61
|
});
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
forceStreamToString = Boolean(typeof process !== "undefined" && ((_process_env = process.env) === null || _process_env === void 0 ? void 0 : _process_env.MODERN_JS_STREAM_TO_STRING));
|
|
63
|
+
waitForAllReady = resolveStreamingMode(request, forceStreamToString).waitForAllReady;
|
|
64
|
+
if (!waitForAllReady)
|
|
65
65
|
return [
|
|
66
66
|
3,
|
|
67
67
|
5
|
|
@@ -2,6 +2,7 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
|
2
2
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
3
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
4
|
import { time } from "@modern-js/runtime-utils/time";
|
|
5
|
+
import checkIsBot from "isbot";
|
|
5
6
|
import { JSX_SHELL_STREAM_END_MARK } from "../../../common";
|
|
6
7
|
import { wrapRuntimeContextProvider } from "../../react/wrapper";
|
|
7
8
|
import { SSRErrors, SSRTimings } from "../tracer";
|
|
@@ -11,6 +12,43 @@ var ShellChunkStatus;
|
|
|
11
12
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
12
13
|
ShellChunkStatus2[ShellChunkStatus2["FINISH"] = 1] = "FINISH";
|
|
13
14
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
15
|
+
var SHOULD_STREAM_ALL_HEADER = "x-should-stream-all";
|
|
16
|
+
function parseShouldStreamAllFlag(value) {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return void 0;
|
|
19
|
+
}
|
|
20
|
+
var normalized = value.trim().toLowerCase();
|
|
21
|
+
if (normalized === "false") {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
function resolveStreamingMode(request, forceStreamToString) {
|
|
27
|
+
var shouldStreamAll = parseShouldStreamAllFlag(request.headers.get(SHOULD_STREAM_ALL_HEADER));
|
|
28
|
+
var isBot = checkIsBot(request.headers.get("user-agent"));
|
|
29
|
+
if (shouldStreamAll) {
|
|
30
|
+
return {
|
|
31
|
+
onReady: "onAllReady",
|
|
32
|
+
waitForAllReady: true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (forceStreamToString) {
|
|
36
|
+
return {
|
|
37
|
+
onReady: "onAllReady",
|
|
38
|
+
waitForAllReady: true
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (isBot) {
|
|
42
|
+
return {
|
|
43
|
+
onReady: "onAllReady",
|
|
44
|
+
waitForAllReady: true
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
onReady: "onShellReady",
|
|
49
|
+
waitForAllReady: false
|
|
50
|
+
};
|
|
51
|
+
}
|
|
14
52
|
var encoder;
|
|
15
53
|
function encodeForWebStream(thing) {
|
|
16
54
|
if (!encoder) {
|
|
@@ -109,5 +147,6 @@ export {
|
|
|
109
147
|
ShellChunkStatus,
|
|
110
148
|
createRenderStreaming,
|
|
111
149
|
encodeForWebStream,
|
|
112
|
-
getReadableStreamFromString
|
|
150
|
+
getReadableStreamFromString,
|
|
151
|
+
resolveStreamingMode
|
|
113
152
|
};
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { PassThrough, Transform } from "stream";
|
|
2
2
|
import { createReadableStreamFromReadable, storage } from "@modern-js/runtime-utils/node";
|
|
3
|
-
import checkIsBot from "isbot";
|
|
4
3
|
import { ServerStyleSheet } from "styled-components";
|
|
5
4
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
6
5
|
import { RenderLevel } from "../../constants";
|
|
7
6
|
import { getMonitors } from "../../context/monitors";
|
|
8
7
|
import { enqueueFromEntries } from "./deferredScript";
|
|
9
|
-
import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
|
|
8
|
+
import { ShellChunkStatus, getReadableStreamFromString, resolveStreamingMode } from "./shared";
|
|
10
9
|
import { getTemplates } from "./template";
|
|
11
10
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
12
11
|
const { renderToPipeableStream } = await import("react-dom/server");
|
|
@@ -14,8 +13,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
14
13
|
let shellChunkStatus = ShellChunkStatus.START;
|
|
15
14
|
let renderLevel = RenderLevel.SERVER_RENDER;
|
|
16
15
|
const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
17
|
-
const
|
|
18
|
-
const onReady = isbot || forceStream2String ? "onAllReady" : "onShellReady";
|
|
16
|
+
const { onReady } = resolveStreamingMode(request, forceStream2String);
|
|
19
17
|
const sheet = new ServerStyleSheet();
|
|
20
18
|
const chunkVec = [];
|
|
21
19
|
const root = sheet.collectStyles(rootElement);
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { renderSSRStream } from "@modern-js/render/ssr";
|
|
2
2
|
import { storage } from "@modern-js/runtime-utils/node";
|
|
3
|
-
import checkIsBot from "isbot";
|
|
4
3
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
5
4
|
import { RenderLevel } from "../../constants";
|
|
6
5
|
import { enqueueFromEntries } from "./deferredScript";
|
|
7
|
-
import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString } from "./shared";
|
|
6
|
+
import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString, resolveStreamingMode } from "./shared";
|
|
8
7
|
import { getTemplates } from "./template";
|
|
9
8
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
10
9
|
let shellChunkStatus = ShellChunkStatus.START;
|
|
@@ -19,7 +18,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
19
18
|
entryName
|
|
20
19
|
});
|
|
21
20
|
try {
|
|
22
|
-
var _options_onShellReady;
|
|
21
|
+
var _options_onShellReady, _process_env;
|
|
23
22
|
const readableOriginal = await renderSSRStream(rootElement, {
|
|
24
23
|
request,
|
|
25
24
|
clientManifest: options.rscClientManifest,
|
|
@@ -36,8 +35,9 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
36
35
|
var _options_onAllReady;
|
|
37
36
|
options === null || options === void 0 ? void 0 : (_options_onAllReady = options.onAllReady) === null || _options_onAllReady === void 0 ? void 0 : _options_onAllReady.call(options);
|
|
38
37
|
});
|
|
39
|
-
const
|
|
40
|
-
|
|
38
|
+
const forceStreamToString = Boolean(typeof process !== "undefined" && ((_process_env = process.env) === null || _process_env === void 0 ? void 0 : _process_env.MODERN_JS_STREAM_TO_STRING));
|
|
39
|
+
const { waitForAllReady } = resolveStreamingMode(request, forceStreamToString);
|
|
40
|
+
if (waitForAllReady) {
|
|
41
41
|
await readableOriginal.allReady;
|
|
42
42
|
}
|
|
43
43
|
const reader = readableOriginal.getReader();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { time } from "@modern-js/runtime-utils/time";
|
|
3
|
+
import checkIsBot from "isbot";
|
|
3
4
|
import { JSX_SHELL_STREAM_END_MARK } from "../../../common";
|
|
4
5
|
import { wrapRuntimeContextProvider } from "../../react/wrapper";
|
|
5
6
|
import { SSRErrors, SSRTimings } from "../tracer";
|
|
@@ -9,6 +10,43 @@ var ShellChunkStatus;
|
|
|
9
10
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
10
11
|
ShellChunkStatus2[ShellChunkStatus2["FINISH"] = 1] = "FINISH";
|
|
11
12
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
13
|
+
const SHOULD_STREAM_ALL_HEADER = "x-should-stream-all";
|
|
14
|
+
function parseShouldStreamAllFlag(value) {
|
|
15
|
+
if (!value) {
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
18
|
+
const normalized = value.trim().toLowerCase();
|
|
19
|
+
if (normalized === "false") {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
function resolveStreamingMode(request, forceStreamToString) {
|
|
25
|
+
const shouldStreamAll = parseShouldStreamAllFlag(request.headers.get(SHOULD_STREAM_ALL_HEADER));
|
|
26
|
+
const isBot = checkIsBot(request.headers.get("user-agent"));
|
|
27
|
+
if (shouldStreamAll) {
|
|
28
|
+
return {
|
|
29
|
+
onReady: "onAllReady",
|
|
30
|
+
waitForAllReady: true
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (forceStreamToString) {
|
|
34
|
+
return {
|
|
35
|
+
onReady: "onAllReady",
|
|
36
|
+
waitForAllReady: true
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (isBot) {
|
|
40
|
+
return {
|
|
41
|
+
onReady: "onAllReady",
|
|
42
|
+
waitForAllReady: true
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
onReady: "onShellReady",
|
|
47
|
+
waitForAllReady: false
|
|
48
|
+
};
|
|
49
|
+
}
|
|
12
50
|
let encoder;
|
|
13
51
|
function encodeForWebStream(thing) {
|
|
14
52
|
if (!encoder) {
|
|
@@ -82,5 +120,6 @@ export {
|
|
|
82
120
|
ShellChunkStatus,
|
|
83
121
|
createRenderStreaming,
|
|
84
122
|
encodeForWebStream,
|
|
85
|
-
getReadableStreamFromString
|
|
123
|
+
getReadableStreamFromString,
|
|
124
|
+
resolveStreamingMode
|
|
86
125
|
};
|
|
@@ -24,6 +24,10 @@ export declare enum ShellChunkStatus {
|
|
|
24
24
|
START = 0,
|
|
25
25
|
FINISH = 1
|
|
26
26
|
}
|
|
27
|
+
export declare function resolveStreamingMode(request: Request, forceStreamToString: boolean): {
|
|
28
|
+
onReady: 'onAllReady' | 'onShellReady';
|
|
29
|
+
waitForAllReady: boolean;
|
|
30
|
+
};
|
|
27
31
|
export declare function encodeForWebStream(thing: unknown): unknown;
|
|
28
32
|
export declare function getReadableStreamFromString(content: string): ReadableStream;
|
|
29
33
|
export declare function createRenderStreaming(createReadableStreamPromise: Promise<CreateReadableStreamFromElement>): RenderStreaming;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.70.1",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -219,13 +219,13 @@
|
|
|
219
219
|
"react-is": "^18",
|
|
220
220
|
"react-side-effect": "^2.1.2",
|
|
221
221
|
"styled-components": "^5.3.1",
|
|
222
|
-
"@modern-js/plugin
|
|
223
|
-
"@modern-js/plugin": "2.
|
|
224
|
-
"@modern-js/
|
|
225
|
-
"@modern-js/render": "2.
|
|
226
|
-
"@modern-js/
|
|
227
|
-
"@modern-js/types": "2.
|
|
228
|
-
"@modern-js/utils": "2.
|
|
222
|
+
"@modern-js/plugin": "2.70.1",
|
|
223
|
+
"@modern-js/plugin-v2": "2.70.1",
|
|
224
|
+
"@modern-js/plugin-data-loader": "2.70.1",
|
|
225
|
+
"@modern-js/render": "2.70.1",
|
|
226
|
+
"@modern-js/runtime-utils": "2.70.1",
|
|
227
|
+
"@modern-js/types": "2.70.1",
|
|
228
|
+
"@modern-js/utils": "2.70.1"
|
|
229
229
|
},
|
|
230
230
|
"peerDependencies": {
|
|
231
231
|
"react": ">=17",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
},
|
|
234
234
|
"devDependencies": {
|
|
235
235
|
"@remix-run/web-fetch": "^4.1.3",
|
|
236
|
-
"@rsbuild/core": "1.7.
|
|
236
|
+
"@rsbuild/core": "1.7.2",
|
|
237
237
|
"@testing-library/react": "^13.4.0",
|
|
238
238
|
"@types/cookie": "0.6.0",
|
|
239
239
|
"@types/invariant": "^2.2.30",
|
|
@@ -249,10 +249,10 @@
|
|
|
249
249
|
"ts-node": "^10.9.1",
|
|
250
250
|
"typescript": "^5",
|
|
251
251
|
"webpack": "^5.103.0",
|
|
252
|
-
"@modern-js/app-tools": "2.
|
|
252
|
+
"@modern-js/app-tools": "2.70.1",
|
|
253
253
|
"@scripts/build": "2.66.0",
|
|
254
|
-
"@
|
|
255
|
-
"@
|
|
254
|
+
"@modern-js/core": "2.70.1",
|
|
255
|
+
"@scripts/jest-config": "2.66.0"
|
|
256
256
|
},
|
|
257
257
|
"sideEffects": false,
|
|
258
258
|
"publishConfig": {
|