vite-plugin-react-server 1.4.1 → 1.4.3
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/README.md +48 -313
- package/dist/package.json +123 -13
- package/dist/plugin/bundle/deferredStaticGeneration.js +14 -39
- package/dist/plugin/bundle/manifests.js +30 -48
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +4 -1
- package/dist/plugin/config/envPrefixFromConfig.js +12 -7
- package/dist/plugin/config/getCondition.d.ts.map +1 -1
- package/dist/plugin/config/getCondition.js +7 -5
- package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -1
- package/dist/plugin/dev-server/configureReactServer.server.js +5 -8
- package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
- package/dist/plugin/dev-server/plugin.client.js +2 -1
- package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
- package/dist/plugin/dev-server/plugin.server.js +2 -36
- package/dist/plugin/dev-server/virtualRscHmrPlugin.js +23 -23
- package/dist/plugin/environments/createBuildEventPlugin.js +88 -98
- package/dist/plugin/environments/createEnvironmentPlugin.js +222 -250
- package/dist/plugin/error/index.d.ts +1 -2
- package/dist/plugin/error/index.d.ts.map +1 -1
- package/dist/plugin/error/index.js +2 -3
- package/dist/plugin/error/panicThresholdHandler.js +14 -3
- package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -1
- package/dist/plugin/error/setupGlobalErrorHandler.js +23 -16
- package/dist/plugin/helpers/createRscRenderHelpers.d.ts +0 -5
- package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -1
- package/dist/plugin/helpers/createRscRenderHelpers.js +32 -55
- package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -1
- package/dist/plugin/helpers/createSharedLoader.js +4 -2
- package/dist/plugin/helpers/headlessStreamReuseHandler.js +30 -22
- package/dist/plugin/helpers/headlessStreamState.d.ts +0 -38
- package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -1
- package/dist/plugin/helpers/headlessStreamState.js +15 -76
- package/dist/plugin/helpers/index.d.ts +0 -3
- package/dist/plugin/helpers/index.d.ts.map +1 -1
- package/dist/plugin/helpers/index.js +1 -4
- package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
- package/dist/plugin/helpers/requestInfo.js +3 -3
- package/dist/plugin/helpers/resolveComponent.d.ts.map +1 -1
- package/dist/plugin/helpers/resolveComponent.js +4 -2
- package/dist/plugin/helpers/workerCleanup.d.ts +1 -12
- package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -1
- package/dist/plugin/helpers/workerCleanup.js +1 -1
- package/dist/plugin/index.client.d.ts +5 -0
- package/dist/plugin/index.client.d.ts.map +1 -0
- package/dist/plugin/index.client.js +4 -0
- package/dist/plugin/index.d.ts +4 -3
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +10 -5
- package/dist/plugin/index.server.d.ts +5 -0
- package/dist/plugin/index.server.d.ts.map +1 -0
- package/dist/plugin/index.server.js +4 -0
- package/dist/plugin/loader/directives/index.d.ts +0 -1
- package/dist/plugin/loader/directives/index.d.ts.map +1 -1
- package/dist/plugin/loader/directives/index.js +1 -2
- package/dist/plugin/metrics/createWorkerStartupMetrics.js +31 -13
- package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +41 -38
- package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +43 -46
- package/dist/plugin/plugin.client.js +2 -2
- package/dist/plugin/plugin.server.js +2 -2
- package/dist/plugin/react-static/createBuildLoader.client.js +12 -6
- package/dist/plugin/react-static/createBuildLoader.server.js +255 -235
- package/dist/plugin/react-static/plugin.client.js +684 -770
- package/dist/plugin/react-static/plugin.server.js +517 -603
- package/dist/plugin/react-static/processCssFilesForPages.js +103 -88
- package/dist/plugin/react-static/renderPage.client.js +455 -529
- package/dist/plugin/react-static/renderPage.server.js +485 -508
- package/dist/plugin/react-static/renderPagesBatched.js +277 -275
- package/dist/plugin/react-static/rscToHtmlStream.client.js +48 -29
- package/dist/plugin/react-static/rscToHtmlStream.server.js +62 -37
- package/dist/plugin/react-static/temporaryReferences.server.js +11 -2
- package/dist/plugin/stream/createMainThreadHandlers.js +40 -31
- package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -1
- package/dist/plugin/stream/renderRscStream.server.js +127 -144
- package/dist/plugin/transformer/createTransformerPlugin.js +226 -265
- package/dist/plugin/utils/checkReactVersion.d.ts +7 -0
- package/dist/plugin/utils/checkReactVersion.d.ts.map +1 -0
- package/dist/plugin/utils/checkReactVersion.js +23 -0
- package/dist/plugin/utils/envUrls.node.js +12 -11
- package/dist/plugin/vendor/vendor-alias.js +84 -114
- package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.client.js +1 -3
- package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/handleRscRender.js +3 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +123 -13
- package/plugin/config/autoDiscover/resolveAutoDiscover.ts +4 -0
- package/plugin/config/getCondition.ts +6 -4
- package/plugin/dev-server/configureReactServer.server.ts +7 -10
- package/plugin/dev-server/plugin.client.ts +2 -0
- package/plugin/dev-server/plugin.server.ts +2 -49
- package/plugin/error/index.ts +1 -2
- package/plugin/error/setupGlobalErrorHandler.ts +24 -25
- package/plugin/helpers/createRscRenderHelpers.ts +0 -29
- package/plugin/helpers/createSharedLoader.ts +6 -1
- package/plugin/helpers/headlessStreamState.ts +0 -69
- package/plugin/helpers/index.ts +0 -3
- package/plugin/helpers/requestInfo.ts +1 -2
- package/plugin/helpers/resolveComponent.ts +6 -1
- package/plugin/helpers/workerCleanup.ts +1 -38
- package/plugin/index.client.ts +4 -0
- package/plugin/index.server.ts +4 -0
- package/plugin/index.ts +12 -5
- package/plugin/loader/directives/index.ts +0 -1
- package/plugin/plugin.client.ts +1 -1
- package/plugin/plugin.server.ts +1 -1
- package/plugin/stream/renderRscStream.server.ts +3 -0
- package/plugin/transformer/README.md +1 -1
- package/plugin/utils/checkReactVersion.ts +28 -0
- package/plugin/vendor/vendor.client.ts +0 -2
- package/plugin/worker/html/README.md +1 -1
- package/plugin/worker/rsc/README.md +1 -1
- package/plugin/worker/rsc/handleRscRender.ts +2 -0
- package/scripts/generate-toc.mjs +27 -294
- package/dist/plugin/error/assertPanic.d.ts +0 -2
- package/dist/plugin/error/assertPanic.d.ts.map +0 -1
- package/dist/plugin/error/assertPanic.js +0 -15
- package/dist/plugin/error/directiveError.d.ts +0 -13
- package/dist/plugin/error/directiveError.d.ts.map +0 -1
- package/dist/plugin/error/directiveError.js +0 -21
- package/dist/plugin/error/enhanceError.d.ts +0 -14
- package/dist/plugin/error/enhanceError.d.ts.map +0 -1
- package/dist/plugin/error/enhanceError.js +0 -24
- package/dist/plugin/helpers/createSafePageComponent.d.ts +0 -36
- package/dist/plugin/helpers/createSafePageComponent.d.ts.map +0 -1
- package/dist/plugin/helpers/createSafePageComponent.js +0 -50
- package/dist/plugin/helpers/moduleResolver.d.ts +0 -25
- package/dist/plugin/helpers/moduleResolver.d.ts.map +0 -1
- package/dist/plugin/helpers/moduleResolver.js +0 -64
- package/dist/plugin/helpers/stashReturnValue.d.ts +0 -3
- package/dist/plugin/helpers/stashReturnValue.d.ts.map +0 -1
- package/dist/plugin/helpers/stashReturnValue.js +0 -23
- package/dist/plugin/helpers/workerManager.d.ts +0 -5
- package/dist/plugin/helpers/workerManager.d.ts.map +0 -1
- package/dist/plugin/helpers/workerManager.js +0 -18
- package/dist/plugin/loader/directives/collectExportsFromModule.d.ts +0 -6
- package/dist/plugin/loader/directives/collectExportsFromModule.d.ts.map +0 -1
- package/dist/plugin/loader/directives/collectExportsFromModule.js +0 -24
- package/plugin/error/assertPanic.ts +0 -9
- package/plugin/error/directiveError.ts +0 -29
- package/plugin/error/enhanceError.ts +0 -41
- package/plugin/helpers/createSafePageComponent.ts +0 -64
- package/plugin/helpers/moduleResolver.ts +0 -91
- package/plugin/helpers/stashReturnValue.ts +0 -19
- package/plugin/helpers/workerManager.ts +0 -16
- package/plugin/loader/directives/collectExportsFromModule.ts +0 -25
|
@@ -1,32 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { createHtmlStream } from '../stream/createHtmlStream.client.js';
|
|
7
|
+
|
|
8
|
+
const createRscToHtmlStream = function _createRscToHtmlStream(options) {
|
|
9
|
+
const {
|
|
10
|
+
route,
|
|
11
|
+
verbose,
|
|
12
|
+
signal,
|
|
13
|
+
logger,
|
|
14
|
+
rscStream,
|
|
4
15
|
// Only pass the props the HTML stream actually needs
|
|
5
|
-
moduleRootPath,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
moduleRootPath,
|
|
17
|
+
moduleBasePath,
|
|
18
|
+
moduleBaseURL,
|
|
19
|
+
clientPipeableStreamOptions,
|
|
20
|
+
...otherOptions
|
|
21
|
+
} = options;
|
|
22
|
+
if (verbose) {
|
|
23
|
+
logger?.info(
|
|
24
|
+
`[createRscToHtmlStream:${route}] Creating RSC to HTML transform stream (client-side, using createHtmlStream)`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
const htmlStream = createHtmlStream({
|
|
28
|
+
route,
|
|
29
|
+
rscStream,
|
|
30
|
+
logger,
|
|
31
|
+
verbose,
|
|
32
|
+
// Only pass the essential props
|
|
33
|
+
moduleRootPath,
|
|
34
|
+
moduleBasePath,
|
|
35
|
+
moduleBaseURL,
|
|
36
|
+
clientPipeableStreamOptions,
|
|
37
|
+
...otherOptions
|
|
38
|
+
});
|
|
39
|
+
if (signal) {
|
|
40
|
+
signal.addEventListener("abort", () => {
|
|
41
|
+
if (verbose) {
|
|
42
|
+
logger?.info(`[createRscToHtmlStream:${route}] Abort signal received`);
|
|
43
|
+
}
|
|
44
|
+
htmlStream.abort();
|
|
21
45
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
signal.addEventListener("abort", () => {
|
|
25
|
-
if (verbose) {
|
|
26
|
-
logger?.info(`[createRscToHtmlStream:${route}] Abort signal received`);
|
|
27
|
-
}
|
|
28
|
-
htmlStream.abort();
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return htmlStream;
|
|
46
|
+
}
|
|
47
|
+
return htmlStream;
|
|
32
48
|
};
|
|
49
|
+
|
|
50
|
+
export { createRscToHtmlStream };
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNjVG9IdG1sU3RyZWFtLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3JlYWN0LXN0YXRpYy9yc2NUb0h0bWxTdHJlYW0uY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnNjVG9IdG1sU3RyZWFtLmNsaWVudC50c1xuICpcbiAqIFBVUlBPU0U6IFRyYW5zZm9ybXMgUlNDIHN0cmVhbSB0byBIVE1MIHN0cmVhbSBvbiBjbGllbnQgc2lkZVxuICogXG4gKiBUaGlzIGZvbGxvd3MgdGhlIGNsaWVudC1zaWRlIHBhdHRlcm4gd2hlcmUgdGhlIG1haW4gdGhyZWFkIHJ1bnMgUmVhY3QgQ2xpZW50IENvbXBvbmVudHM6XG4gKiBcbiAqIENsaWVudC1zaWRlIHBhdHRlcm46IFJTQyBjaHVua3Mg4oaSIE1haW4gdGhyZWFkIEhUTUwgY29udmVyc2lvbiAobWFpbiB0aHJlYWQgaXMgdGhlIEhUTUwgd29ya2VyKVxuICovXG5pbXBvcnQgdHlwZSB7IFJzY1RvSHRtbFN0cmVhbUZuIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUh0bWxTdHJlYW0gfSBmcm9tIFwiLi4vc3RyZWFtL2NyZWF0ZUh0bWxTdHJlYW0uY2xpZW50LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSc2NUb0h0bWxTdHJlYW06IFJzY1RvSHRtbFN0cmVhbUZuID0gZnVuY3Rpb24gX2NyZWF0ZVJzY1RvSHRtbFN0cmVhbShcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHtcbiAgICByb3V0ZSxcbiAgICB2ZXJib3NlLFxuICAgIHNpZ25hbCxcbiAgICBsb2dnZXIsXG4gICAgcnNjU3RyZWFtLFxuICAgIC8vIE9ubHkgcGFzcyB0aGUgcHJvcHMgdGhlIEhUTUwgc3RyZWFtIGFjdHVhbGx5IG5lZWRzXG4gICAgbW9kdWxlUm9vdFBhdGgsXG4gICAgbW9kdWxlQmFzZVBhdGgsXG4gICAgbW9kdWxlQmFzZVVSTCxcbiAgICBjbGllbnRQaXBlYWJsZVN0cmVhbU9wdGlvbnMsXG4gICAgLi4ub3RoZXJPcHRpb25zXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgYFtjcmVhdGVSc2NUb0h0bWxTdHJlYW06JHtyb3V0ZX1dIENyZWF0aW5nIFJTQyB0byBIVE1MIHRyYW5zZm9ybSBzdHJlYW0gKGNsaWVudC1zaWRlLCB1c2luZyBjcmVhdGVIdG1sU3RyZWFtKWBcbiAgICApO1xuICB9XG5cbiAgLy8gVXNlIHRoZSBleGlzdGluZyBjbGllbnQtc2lkZSBjcmVhdGVIdG1sU3RyZWFtIHdoaWNoIGhhbmRsZXMgUlNDIHRvIEhUTUwgY29udmVyc2lvblxuICBjb25zdCBodG1sU3RyZWFtID0gY3JlYXRlSHRtbFN0cmVhbSh7XG4gICAgcm91dGUsXG4gICAgcnNjU3RyZWFtLFxuICAgIGxvZ2dlcixcbiAgICB2ZXJib3NlLFxuICAgIC8vIE9ubHkgcGFzcyB0aGUgZXNzZW50aWFsIHByb3BzXG4gICAgbW9kdWxlUm9vdFBhdGgsXG4gICAgbW9kdWxlQmFzZVBhdGgsXG4gICAgbW9kdWxlQmFzZVVSTCxcbiAgICBjbGllbnRQaXBlYWJsZVN0cmVhbU9wdGlvbnMsXG4gICAgLi4ub3RoZXJPcHRpb25zLFxuICB9KTtcblxuICAvLyBIYW5kbGUgYWJvcnQgc2lnbmFsXG4gIGlmIChzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uaW5mbyhgW2NyZWF0ZVJzY1RvSHRtbFN0cmVhbToke3JvdXRlfV0gQWJvcnQgc2lnbmFsIHJlY2VpdmVkYCk7XG4gICAgICB9XG4gICAgICBodG1sU3RyZWFtLmFib3J0KCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaHRtbFN0cmVhbTtcbn07Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFZYSxNQUFBLHFCQUFBLEdBQTJDLFNBQVMsc0JBQUEsQ0FDL0QsT0FDQSxFQUFBO0FBQ0EsRUFBTSxNQUFBO0FBQUEsSUFDSixLQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxNQUFBO0FBQUEsSUFDQSxNQUFBO0FBQUEsSUFDQSxTQUFBO0FBQUE7QUFBQSxJQUVBLGNBQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxJQUNBLDJCQUFBO0FBQUEsSUFDQSxHQUFHO0FBQUEsR0FDRCxHQUFBLE9BQUE7QUFFSixFQUFBLElBQUksT0FBUyxFQUFBO0FBQ1gsSUFBUSxNQUFBLEVBQUEsSUFBQTtBQUFBLE1BQ04sMEJBQTBCLEtBQUssQ0FBQSw2RUFBQTtBQUFBLEtBQ2pDO0FBQUE7QUFJRixFQUFBLE1BQU0sYUFBYSxnQkFBaUIsQ0FBQTtBQUFBLElBQ2xDLEtBQUE7QUFBQSxJQUNBLFNBQUE7QUFBQSxJQUNBLE1BQUE7QUFBQSxJQUNBLE9BQUE7QUFBQTtBQUFBLElBRUEsY0FBQTtBQUFBLElBQ0EsY0FBQTtBQUFBLElBQ0EsYUFBQTtBQUFBLElBQ0EsMkJBQUE7QUFBQSxJQUNBLEdBQUc7QUFBQSxHQUNKLENBQUE7QUFHRCxFQUFBLElBQUksTUFBUSxFQUFBO0FBQ1YsSUFBTyxNQUFBLENBQUEsZ0JBQUEsQ0FBaUIsU0FBUyxNQUFNO0FBQ3JDLE1BQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxRQUFRLE1BQUEsRUFBQSxJQUFBLENBQUssQ0FBMEIsdUJBQUEsRUFBQSxLQUFLLENBQXlCLHVCQUFBLENBQUEsQ0FBQTtBQUFBO0FBRXZFLE1BQUEsVUFBQSxDQUFXLEtBQU0sRUFBQTtBQUFBLEtBQ2xCLENBQUE7QUFBQTtBQUdILEVBQU8sT0FBQSxVQUFBO0FBQ1Q7Ozs7In0=
|
|
@@ -1,39 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { createHtmlStream } from '../stream/createHtmlStream.server.js';
|
|
7
|
+
|
|
8
|
+
const createRscToHtmlStream = function _createRscToHtmlStream(options) {
|
|
9
|
+
const {
|
|
10
|
+
id,
|
|
11
|
+
worker,
|
|
12
|
+
htmlWorker,
|
|
13
|
+
route,
|
|
14
|
+
url,
|
|
15
|
+
moduleBasePath,
|
|
16
|
+
moduleBaseURL,
|
|
17
|
+
moduleRootPath,
|
|
18
|
+
projectRoot,
|
|
19
|
+
verbose,
|
|
20
|
+
panicThreshold,
|
|
21
|
+
clientPipeableStreamOptions,
|
|
22
|
+
signal,
|
|
23
|
+
logger,
|
|
24
|
+
build
|
|
25
|
+
} = options;
|
|
26
|
+
if (!worker) {
|
|
27
|
+
throw new Error("HTML worker is required for RSC to HTML stream");
|
|
28
|
+
}
|
|
29
|
+
if (verbose) {
|
|
30
|
+
logger?.info(
|
|
31
|
+
`[createRscToHtmlStream:${route}] Creating RSC to HTML transform stream`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
const htmlStream = createHtmlStream({
|
|
35
|
+
id,
|
|
36
|
+
url,
|
|
37
|
+
route,
|
|
38
|
+
rscStream: options.rscStream,
|
|
39
|
+
htmlWorker: htmlWorker || worker,
|
|
40
|
+
logger,
|
|
41
|
+
verbose,
|
|
42
|
+
moduleRootPath,
|
|
43
|
+
moduleBasePath,
|
|
44
|
+
moduleBaseURL,
|
|
45
|
+
projectRoot,
|
|
46
|
+
panicThreshold,
|
|
47
|
+
clientPipeableStreamOptions,
|
|
48
|
+
build,
|
|
49
|
+
onMetrics: options.onMetrics,
|
|
50
|
+
onError: options.onError
|
|
51
|
+
});
|
|
52
|
+
if (signal) {
|
|
53
|
+
signal.addEventListener("abort", () => {
|
|
54
|
+
if (verbose) {
|
|
55
|
+
logger?.info(`[createRscToHtmlStream:${route}] Abort signal received`);
|
|
56
|
+
}
|
|
57
|
+
htmlStream.abort();
|
|
28
58
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
signal.addEventListener("abort", () => {
|
|
32
|
-
if (verbose) {
|
|
33
|
-
logger?.info(`[createRscToHtmlStream:${route}] Abort signal received`);
|
|
34
|
-
}
|
|
35
|
-
htmlStream.abort();
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
return htmlStream;
|
|
59
|
+
}
|
|
60
|
+
return htmlStream;
|
|
39
61
|
};
|
|
62
|
+
|
|
63
|
+
export { createRscToHtmlStream };
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNjVG9IdG1sU3RyZWFtLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3JlYWN0LXN0YXRpYy9yc2NUb0h0bWxTdHJlYW0uc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnNjVG9IdG1sU3RyZWFtRm4gfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFN0cmVhbSB9IGZyb20gXCIuLi9zdHJlYW0vY3JlYXRlSHRtbFN0cmVhbS5zZXJ2ZXIuanNcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJzY1RvSHRtbFN0cmVhbTogUnNjVG9IdG1sU3RyZWFtRm4gPSBmdW5jdGlvbiBfY3JlYXRlUnNjVG9IdG1sU3RyZWFtKFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHdvcmtlcixcbiAgICBodG1sV29ya2VyLFxuICAgIHJvdXRlLFxuICAgIHVybCxcbiAgICBtb2R1bGVCYXNlUGF0aCxcbiAgICBtb2R1bGVCYXNlVVJMLFxuICAgIG1vZHVsZVJvb3RQYXRoLFxuICAgIHByb2plY3RSb290LFxuICAgIHZlcmJvc2UsXG4gICAgcGFuaWNUaHJlc2hvbGQsXG4gICAgY2xpZW50UGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBsb2dnZXIsXG4gICAgYnVpbGQsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGlmICghd29ya2VyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSFRNTCB3b3JrZXIgaXMgcmVxdWlyZWQgZm9yIFJTQyB0byBIVE1MIHN0cmVhbVwiKTtcbiAgfVxuXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgYFtjcmVhdGVSc2NUb0h0bWxTdHJlYW06JHtyb3V0ZX1dIENyZWF0aW5nIFJTQyB0byBIVE1MIHRyYW5zZm9ybSBzdHJlYW1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVzZSBjcmVhdGVIdG1sU3RyZWFtIHdoaWNoIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoZSBIVE1MIHdvcmtlclxuICBjb25zdCBodG1sU3RyZWFtID0gY3JlYXRlSHRtbFN0cmVhbSh7XG4gICAgaWQsXG4gICAgdXJsLFxuICAgIHJvdXRlLFxuICAgIHJzY1N0cmVhbTogb3B0aW9ucy5yc2NTdHJlYW0sXG4gICAgaHRtbFdvcmtlcjogaHRtbFdvcmtlciB8fCB3b3JrZXIsXG4gICAgbG9nZ2VyLFxuICAgIHZlcmJvc2UsXG4gICAgbW9kdWxlUm9vdFBhdGgsXG4gICAgbW9kdWxlQmFzZVBhdGgsXG4gICAgbW9kdWxlQmFzZVVSTCxcbiAgICBwcm9qZWN0Um9vdCxcbiAgICBwYW5pY1RocmVzaG9sZCxcbiAgICBjbGllbnRQaXBlYWJsZVN0cmVhbU9wdGlvbnMsXG4gICAgYnVpbGQsXG4gICAgb25NZXRyaWNzOiBvcHRpb25zLm9uTWV0cmljcyxcbiAgICBvbkVycm9yOiBvcHRpb25zLm9uRXJyb3IsXG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBhYm9ydCBzaWduYWxcbiAgaWYgKHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKGBbY3JlYXRlUnNjVG9IdG1sU3RyZWFtOiR7cm91dGV9XSBBYm9ydCBzaWduYWwgcmVjZWl2ZWRgKTtcbiAgICAgIH1cbiAgICAgIGh0bWxTdHJlYW0uYWJvcnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBodG1sU3RyZWFtO1xufTsiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdhLE1BQUEscUJBQUEsR0FBMkMsU0FBUyxzQkFBQSxDQUMvRCxPQUNBLEVBQUE7QUFDQSxFQUFNLE1BQUE7QUFBQSxJQUNKLEVBQUE7QUFBQSxJQUNBLE1BQUE7QUFBQSxJQUNBLFVBQUE7QUFBQSxJQUNBLEtBQUE7QUFBQSxJQUNBLEdBQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLGFBQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLE9BQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLDJCQUFBO0FBQUEsSUFDQSxNQUFBO0FBQUEsSUFDQSxNQUFBO0FBQUEsSUFDQTtBQUFBLEdBQ0UsR0FBQSxPQUFBO0FBRUosRUFBQSxJQUFJLENBQUMsTUFBUSxFQUFBO0FBQ1gsSUFBTSxNQUFBLElBQUksTUFBTSxnREFBZ0QsQ0FBQTtBQUFBO0FBR2xFLEVBQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxJQUFRLE1BQUEsRUFBQSxJQUFBO0FBQUEsTUFDTiwwQkFBMEIsS0FBSyxDQUFBLHVDQUFBO0FBQUEsS0FDakM7QUFBQTtBQUlGLEVBQUEsTUFBTSxhQUFhLGdCQUFpQixDQUFBO0FBQUEsSUFDbEMsRUFBQTtBQUFBLElBQ0EsR0FBQTtBQUFBLElBQ0EsS0FBQTtBQUFBLElBQ0EsV0FBVyxPQUFRLENBQUEsU0FBQTtBQUFBLElBQ25CLFlBQVksVUFBYyxJQUFBLE1BQUE7QUFBQSxJQUMxQixNQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFDQSxhQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFDQSwyQkFBQTtBQUFBLElBQ0EsS0FBQTtBQUFBLElBQ0EsV0FBVyxPQUFRLENBQUEsU0FBQTtBQUFBLElBQ25CLFNBQVMsT0FBUSxDQUFBO0FBQUEsR0FDbEIsQ0FBQTtBQUdELEVBQUEsSUFBSSxNQUFRLEVBQUE7QUFDVixJQUFPLE1BQUEsQ0FBQSxnQkFBQSxDQUFpQixTQUFTLE1BQU07QUFDckMsTUFBQSxJQUFJLE9BQVMsRUFBQTtBQUNYLFFBQVEsTUFBQSxFQUFBLElBQUEsQ0FBSyxDQUEwQix1QkFBQSxFQUFBLEtBQUssQ0FBeUIsdUJBQUEsQ0FBQSxDQUFBO0FBQUE7QUFFdkUsTUFBQSxVQUFBLENBQVcsS0FBTSxFQUFBO0FBQUEsS0FDbEIsQ0FBQTtBQUFBO0FBR0gsRUFBTyxPQUFBLFVBQUE7QUFDVDs7OzsifQ==
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { ReactDOMServer } from '../vendor/vendor.server.js';
|
|
7
|
+
|
|
2
8
|
const { createTemporaryReferenceSet } = ReactDOMServer;
|
|
3
|
-
|
|
9
|
+
const temporaryReferences = createTemporaryReferenceSet();
|
|
10
|
+
|
|
11
|
+
export { temporaryReferences };
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXJ2ZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9yZWFjdC1zdGF0aWMvdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3RET01TZXJ2ZXIgfSBmcm9tIFwiLi4vdmVuZG9yL3ZlbmRvci5zZXJ2ZXIuanNcIjtcblxuY29uc3QgeyBjcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQgfSA9IFJlYWN0RE9NU2VydmVyO1xuXG5leHBvcnQgY29uc3QgdGVtcG9yYXJ5UmVmZXJlbmNlcyA9IGNyZWF0ZVRlbXBvcmFyeVJlZmVyZW5jZVNldCgpO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxNQUFNLEVBQUUsNkJBQWdDLEdBQUEsY0FBQTtBQUVqQyxNQUFNLHNCQUFzQiwyQkFBNEI7Ozs7In0=
|
|
@@ -1,32 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { handleError } from '../error/handleError.js';
|
|
7
|
+
|
|
8
|
+
function createMainThreadHandlers(handlerOptions, onError) {
|
|
9
|
+
return {
|
|
10
|
+
onError: (_id, error, context) => {
|
|
11
|
+
if (handlerOptions.verbose) {
|
|
12
|
+
handlerOptions.logger?.info(
|
|
13
|
+
`[createMainThreadHandlers] onError called for route ${handlerOptions.route}: ${error}`
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
const originalError = error instanceof Error ? error : new Error(String(error ?? "Unknown error"));
|
|
17
|
+
const panicError = handleError({
|
|
18
|
+
error: originalError,
|
|
19
|
+
critical: false,
|
|
20
|
+
logger: handlerOptions.logger,
|
|
21
|
+
panicThreshold: handlerOptions.panicThreshold,
|
|
22
|
+
context: `${context?.context || "Unknown"} for route ${handlerOptions.route}`
|
|
23
|
+
});
|
|
24
|
+
if (handlerOptions.verbose) {
|
|
25
|
+
handlerOptions.logger?.info(
|
|
26
|
+
`[createMainThreadHandlers] Calling onError callback for route ${handlerOptions.route} with panicError: ${!!panicError}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
onError?.(panicError || originalError, !!panicError);
|
|
30
|
+
},
|
|
31
|
+
onData: (_id, _data) => {
|
|
32
|
+
},
|
|
33
|
+
onEnd: (_id) => {
|
|
34
|
+
},
|
|
35
|
+
onPostpone: (_id, _reason) => {
|
|
36
|
+
}
|
|
37
|
+
};
|
|
32
38
|
}
|
|
39
|
+
|
|
40
|
+
export { createMainThreadHandlers };
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlTWFpblRocmVhZEhhbmRsZXJzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vc3RyZWFtL2NyZWF0ZU1haW5UaHJlYWRIYW5kbGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENyZWF0ZUhhbmRsZXJPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFpblRocmVhZEhhbmRsZXJzKFxuICBoYW5kbGVyT3B0aW9uczogQ3JlYXRlSGFuZGxlck9wdGlvbnMsXG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBpc1BhbmljOiBib29sZWFuKSA9PiB2b2lkXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBvbkVycm9yOiAoX2lkOiBzdHJpbmcsIGVycm9yOiB1bmtub3duLCBjb250ZXh0PzogeyByb3V0ZT86IHN0cmluZzsgY29udGV4dD86IHN0cmluZyB9KSA9PiB7XG4gICAgICBpZiAoaGFuZGxlck9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBoYW5kbGVyT3B0aW9ucy5sb2dnZXI/LmluZm8oXG4gICAgICAgICAgYFtjcmVhdGVNYWluVGhyZWFkSGFuZGxlcnNdIG9uRXJyb3IgY2FsbGVkIGZvciByb3V0ZSAke2hhbmRsZXJPcHRpb25zLnJvdXRlfTogJHtlcnJvcn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yID8/IFwiVW5rbm93biBlcnJvclwiKSk7XG4gICAgICBjb25zdCBwYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICBlcnJvcjogb3JpZ2luYWxFcnJvcixcbiAgICAgICAgY3JpdGljYWw6IGZhbHNlLFxuICAgICAgICBsb2dnZXI6IGhhbmRsZXJPcHRpb25zLmxvZ2dlcixcbiAgICAgICAgcGFuaWNUaHJlc2hvbGQ6IGhhbmRsZXJPcHRpb25zLnBhbmljVGhyZXNob2xkLFxuICAgICAgICBjb250ZXh0OiBgJHtjb250ZXh0Py5jb250ZXh0IHx8IFwiVW5rbm93blwifSBmb3Igcm91dGUgJHtoYW5kbGVyT3B0aW9ucy5yb3V0ZX1gLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChoYW5kbGVyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGhhbmRsZXJPcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICBgW2NyZWF0ZU1haW5UaHJlYWRIYW5kbGVyc10gQ2FsbGluZyBvbkVycm9yIGNhbGxiYWNrIGZvciByb3V0ZSAke2hhbmRsZXJPcHRpb25zLnJvdXRlfSB3aXRoIHBhbmljRXJyb3I6ICR7ISFwYW5pY0Vycm9yfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZXJyb3IgYW5kIHBhbmljIHN0YXR1c1xuICAgICAgb25FcnJvcj8uKHBhbmljRXJyb3IgfHwgb3JpZ2luYWxFcnJvciwgISFwYW5pY0Vycm9yKTtcbiAgICB9LFxuICAgIG9uRGF0YTogKF9pZDogc3RyaW5nLCBfZGF0YTogVWludDhBcnJheSkgPT4ge1xuICAgICAgLy8gTm8tb3AgZm9yIG1haW4gdGhyZWFkXG4gICAgfSxcbiAgICBvbkVuZDogKF9pZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBOby1vcCBmb3IgbWFpbiB0aHJlYWRcbiAgICB9LFxuICAgIG9uUG9zdHBvbmU6IChfaWQ6IHN0cmluZywgX3JlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBOby1vcCBmb3IgbWFpbiB0aHJlYWRcbiAgICB9LFxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHTyxTQUFTLHdCQUFBLENBQ2QsZ0JBQ0EsT0FDQSxFQUFBO0FBQ0EsRUFBTyxPQUFBO0FBQUEsSUFDTCxPQUFTLEVBQUEsQ0FBQyxHQUFhLEVBQUEsS0FBQSxFQUFnQixPQUFtRCxLQUFBO0FBQ3hGLE1BQUEsSUFBSSxlQUFlLE9BQVMsRUFBQTtBQUMxQixRQUFBLGNBQUEsQ0FBZSxNQUFRLEVBQUEsSUFBQTtBQUFBLFVBQ3JCLENBQXVELG9EQUFBLEVBQUEsY0FBQSxDQUFlLEtBQUssQ0FBQSxFQUFBLEVBQUssS0FBSyxDQUFBO0FBQUEsU0FDdkY7QUFBQTtBQUdGLE1BQU0sTUFBQSxhQUFBLEdBQWdCLGlCQUFpQixLQUFRLEdBQUEsS0FBQSxHQUFRLElBQUksS0FBTSxDQUFBLE1BQUEsQ0FBTyxLQUFTLElBQUEsZUFBZSxDQUFDLENBQUE7QUFDakcsTUFBQSxNQUFNLGFBQWEsV0FBWSxDQUFBO0FBQUEsUUFDN0IsS0FBTyxFQUFBLGFBQUE7QUFBQSxRQUNQLFFBQVUsRUFBQSxLQUFBO0FBQUEsUUFDVixRQUFRLGNBQWUsQ0FBQSxNQUFBO0FBQUEsUUFDdkIsZ0JBQWdCLGNBQWUsQ0FBQSxjQUFBO0FBQUEsUUFDL0IsU0FBUyxDQUFHLEVBQUEsT0FBQSxFQUFTLFdBQVcsU0FBUyxDQUFBLFdBQUEsRUFBYyxlQUFlLEtBQUssQ0FBQTtBQUFBLE9BQzVFLENBQUE7QUFFRCxNQUFBLElBQUksZUFBZSxPQUFTLEVBQUE7QUFDMUIsUUFBQSxjQUFBLENBQWUsTUFBUSxFQUFBLElBQUE7QUFBQSxVQUNyQixpRUFBaUUsY0FBZSxDQUFBLEtBQUssQ0FBcUIsa0JBQUEsRUFBQSxDQUFDLENBQUMsVUFBVSxDQUFBO0FBQUEsU0FDeEg7QUFBQTtBQUlGLE1BQUEsT0FBQSxHQUFVLFVBQWMsSUFBQSxhQUFBLEVBQWUsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtBQUFBLEtBQ3JEO0FBQUEsSUFDQSxNQUFBLEVBQVEsQ0FBQyxHQUFBLEVBQWEsS0FBc0IsS0FBQTtBQUFBLEtBRTVDO0FBQUEsSUFDQSxLQUFBLEVBQU8sQ0FBQyxHQUFnQixLQUFBO0FBQUEsS0FFeEI7QUFBQSxJQUNBLFVBQUEsRUFBWSxDQUFDLEdBQUEsRUFBYSxPQUFvQixLQUFBO0FBQUE7QUFFOUMsR0FDRjtBQUNGOzs7OyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRscStream.server.d.ts","sourceRoot":"","sources":["../../../plugin/stream/renderRscStream.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"renderRscStream.server.d.ts","sourceRoot":"","sources":["../../../plugin/stream/renderRscStream.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC,GACvF,eAAe,CAwJjB"}
|
|
@@ -1,153 +1,136 @@
|
|
|
1
|
-
import { PassThrough } from "node:stream";
|
|
2
|
-
import { createStreamMetrics } from "../metrics/createStreamMetrics.js";
|
|
3
|
-
import { createReactElement } from "../helpers/createRscRenderHelpers.js";
|
|
4
|
-
import { ReactDOMServer } from "../vendor/vendor.server.js";
|
|
5
1
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* const result = renderRscStream(options, handlers);
|
|
10
|
-
*
|
|
11
|
-
* // Pipe to any destination
|
|
12
|
-
* result.rscStream.pipe(fileStream);
|
|
13
|
-
* result.pipe(response); // convenience method
|
|
14
|
-
*
|
|
15
|
-
* // Access the stream directly
|
|
16
|
-
* result.stream.on('data', (chunk) => console.log(chunk));
|
|
17
|
-
*
|
|
18
|
-
* // Abort if needed
|
|
19
|
-
* result.abort('User cancelled');
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
20
5
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
6
|
+
import { PassThrough } from 'node:stream';
|
|
7
|
+
import { createStreamMetrics } from '../metrics/createStreamMetrics.js';
|
|
8
|
+
import { createReactElement } from '../helpers/createRscRenderHelpers.js';
|
|
9
|
+
import { checkReactExperimental } from '../utils/checkReactVersion.js';
|
|
10
|
+
import { ReactDOMServer } from '../vendor/vendor.server.js';
|
|
11
|
+
|
|
12
|
+
function renderRscStream(options, handlers) {
|
|
13
|
+
const id = options.id || "";
|
|
14
|
+
const route = options.route;
|
|
15
|
+
const verbose = options.verbose || false;
|
|
16
|
+
const logger = options.logger;
|
|
17
|
+
try {
|
|
18
|
+
let reactElement;
|
|
26
19
|
try {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
reactElement = createReactElement(options, {
|
|
21
|
+
id,
|
|
22
|
+
route,
|
|
23
|
+
verbose,
|
|
24
|
+
logger,
|
|
25
|
+
reuseHeadlessStreamId: options.reuseHeadlessStreamId,
|
|
26
|
+
headlessStreamElements: options.headlessStreamElements,
|
|
27
|
+
headlessStreamErrors: options.headlessStreamErrors
|
|
28
|
+
});
|
|
29
|
+
} catch (elementError) {
|
|
30
|
+
if (verbose) {
|
|
31
|
+
logger?.error(`[renderRscStream:${route}] Error creating React element: ${elementError}`);
|
|
32
|
+
}
|
|
33
|
+
handlers?.onError?.(id, elementError, {
|
|
34
|
+
route,
|
|
35
|
+
context: "React Element Creation Error"
|
|
36
|
+
});
|
|
37
|
+
const errorStream = new PassThrough();
|
|
38
|
+
errorStream.end();
|
|
39
|
+
return {
|
|
40
|
+
type: "server",
|
|
41
|
+
rscStream: errorStream,
|
|
42
|
+
pipe: (destination) => errorStream.pipe(destination),
|
|
43
|
+
abort: () => {
|
|
44
|
+
},
|
|
45
|
+
metrics: createStreamMetrics()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const rscStream = new PassThrough();
|
|
49
|
+
const metrics = createStreamMetrics();
|
|
50
|
+
if (verbose) {
|
|
51
|
+
logger?.info(`[renderRscStream:${route}] Creating React stream for element`);
|
|
52
|
+
}
|
|
53
|
+
checkReactExperimental();
|
|
54
|
+
const reactStream = ReactDOMServer.renderToPipeableStream(
|
|
55
|
+
reactElement,
|
|
56
|
+
options.moduleBasePath || "",
|
|
57
|
+
{
|
|
58
|
+
...options.serverPipeableStreamOptions,
|
|
59
|
+
onError: (error) => {
|
|
60
|
+
if (verbose) {
|
|
61
|
+
logger?.error(`[renderRscStream:${route}] React stream error: ${error}`);
|
|
62
|
+
}
|
|
63
|
+
handlers?.onError?.(id, error, {
|
|
64
|
+
route,
|
|
65
|
+
context: "React Stream Error"
|
|
66
|
+
});
|
|
67
|
+
if (options.onEvent) {
|
|
68
|
+
options.onEvent({
|
|
69
|
+
type: "route.error",
|
|
70
|
+
data: {
|
|
71
|
+
error,
|
|
32
72
|
route,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
reuseHeadlessStreamId: options.reuseHeadlessStreamId,
|
|
36
|
-
headlessStreamElements: options.headlessStreamElements,
|
|
37
|
-
headlessStreamErrors: options.headlessStreamErrors,
|
|
73
|
+
panicThreshold: options.panicThreshold
|
|
74
|
+
}
|
|
38
75
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
logger?.error(`[renderRscStream:${route}] Error creating React element: ${elementError}`);
|
|
76
|
+
}
|
|
77
|
+
setImmediate(() => {
|
|
78
|
+
if (!rscStream.destroyed) {
|
|
79
|
+
rscStream.end();
|
|
44
80
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
route,
|
|
48
|
-
context: "React Element Creation Error",
|
|
49
|
-
});
|
|
50
|
-
// Return empty stream on error - API remains consistent
|
|
51
|
-
const errorStream = new PassThrough();
|
|
52
|
-
errorStream.end();
|
|
53
|
-
return {
|
|
54
|
-
type: "server",
|
|
55
|
-
rscStream: errorStream,
|
|
56
|
-
pipe: (destination) => errorStream.pipe(destination),
|
|
57
|
-
abort: () => { },
|
|
58
|
-
metrics: createStreamMetrics(),
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
// Create the output stream - this is what users will pipe to destinations
|
|
62
|
-
const rscStream = new PassThrough();
|
|
63
|
-
const metrics = createStreamMetrics();
|
|
64
|
-
if (verbose) {
|
|
65
|
-
logger?.info(`[renderRscStream:${route}] Creating React stream for element`);
|
|
66
|
-
}
|
|
67
|
-
// Render React to stream - let it flow naturally like the RSC worker
|
|
68
|
-
const reactStream = ReactDOMServer.renderToPipeableStream(reactElement, options.moduleBasePath || "", {
|
|
69
|
-
...options.serverPipeableStreamOptions,
|
|
70
|
-
onError: (error) => {
|
|
71
|
-
if (verbose) {
|
|
72
|
-
logger?.error(`[renderRscStream:${route}] React stream error: ${error}`);
|
|
73
|
-
}
|
|
74
|
-
// Call our error handler to process the error
|
|
75
|
-
handlers?.onError?.(id, error, {
|
|
76
|
-
route,
|
|
77
|
-
context: "React Stream Error",
|
|
78
|
-
});
|
|
79
|
-
// Emit route.error event to allow main thread to handle panic threshold logic (like client)
|
|
80
|
-
if (options.onEvent) {
|
|
81
|
-
options.onEvent({
|
|
82
|
-
type: "route.error",
|
|
83
|
-
data: {
|
|
84
|
-
error: error,
|
|
85
|
-
route: route,
|
|
86
|
-
panicThreshold: options.panicThreshold
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
// CRITICAL: Don't let the error propagate further - this prevents uncaught exceptions
|
|
91
|
-
// The error has been handled by our error handler, so we don't need to re-throw it
|
|
92
|
-
// Ensure stream is ended when error occurs to prevent hanging (like RSC worker does)
|
|
93
|
-
// Use setImmediate to ensure the error handler completes before ending the stream
|
|
94
|
-
setImmediate(() => {
|
|
95
|
-
if (!rscStream.destroyed) {
|
|
96
|
-
rscStream.end();
|
|
97
|
-
}
|
|
98
|
-
// Also abort the React stream to ensure it stops producing data
|
|
99
|
-
if (reactStream && typeof reactStream.abort === 'function') {
|
|
100
|
-
reactStream.abort();
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
},
|
|
104
|
-
onPostpone: (reason) => {
|
|
105
|
-
if (verbose) {
|
|
106
|
-
logger?.info(`[renderRscStream:${route}] Stream postponed: ${reason}`);
|
|
107
|
-
}
|
|
108
|
-
handlers?.onPostpone?.(id, reason);
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
// Pipe React output to our stream - let streams end naturally like the RSC worker does
|
|
112
|
-
reactStream.pipe(rscStream);
|
|
113
|
-
// Handle stream errors naturally - don't force completion
|
|
114
|
-
rscStream.on("error", (error) => {
|
|
115
|
-
if (verbose) {
|
|
116
|
-
logger?.error(`[renderRscStream:${route}] Stream error: ${error}`);
|
|
81
|
+
if (reactStream && typeof reactStream.abort === "function") {
|
|
82
|
+
reactStream.abort();
|
|
117
83
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
onPostpone: (reason) => {
|
|
87
|
+
if (verbose) {
|
|
88
|
+
logger?.info(`[renderRscStream:${route}] Stream postponed: ${reason}`);
|
|
89
|
+
}
|
|
90
|
+
handlers?.onPostpone?.(id, reason);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
reactStream.pipe(rscStream);
|
|
95
|
+
rscStream.on("error", (error) => {
|
|
96
|
+
if (verbose) {
|
|
97
|
+
logger?.error(`[renderRscStream:${route}] Stream error: ${error}`);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
type: "server",
|
|
102
|
+
rscStream,
|
|
103
|
+
// Alias for compatibility with existing code
|
|
104
|
+
pipe: (destination) => rscStream.pipe(destination),
|
|
105
|
+
// Convenience method
|
|
106
|
+
abort: (reason) => {
|
|
107
|
+
if (handlers?.onError) {
|
|
108
|
+
handlers.onError(id, new Error(String(reason || "Stream aborted")), {
|
|
139
109
|
route,
|
|
140
|
-
context: "
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
110
|
+
context: "Stream Aborted"
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
rscStream.end();
|
|
114
|
+
},
|
|
115
|
+
metrics
|
|
116
|
+
};
|
|
117
|
+
} catch (error) {
|
|
118
|
+
handlers?.onError?.(id, error, {
|
|
119
|
+
route,
|
|
120
|
+
context: "RSC Render Error"
|
|
121
|
+
});
|
|
122
|
+
const errorStream = new PassThrough();
|
|
123
|
+
errorStream.end();
|
|
124
|
+
return {
|
|
125
|
+
type: "server",
|
|
126
|
+
rscStream: errorStream,
|
|
127
|
+
pipe: (destination) => errorStream.pipe(destination),
|
|
128
|
+
abort: () => {
|
|
129
|
+
},
|
|
130
|
+
metrics: createStreamMetrics()
|
|
131
|
+
};
|
|
132
|
+
}
|
|
153
133
|
}
|
|
134
|
+
|
|
135
|
+
export { renderRscStream };
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyUnNjU3RyZWFtLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3N0cmVhbS9yZW5kZXJSc2NTdHJlYW0uc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhc3NUaHJvdWdoIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUhhbmRsZXJPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJzY1JlbmRlclJlc3VsdCB9IGZyb20gXCIuL3JlbmRlclJzY1N0cmVhbS50eXBlcy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RyZWFtTWV0cmljcyB9IGZyb20gXCIuLi9tZXRyaWNzL2NyZWF0ZVN0cmVhbU1ldHJpY3MuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlYWN0RWxlbWVudCB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZVJzY1JlbmRlckhlbHBlcnMuanNcIjtcbmltcG9ydCB7IGNoZWNrUmVhY3RFeHBlcmltZW50YWwgfSBmcm9tIFwiLi4vdXRpbHMvY2hlY2tSZWFjdFZlcnNpb24uanNcIjtcbmltcG9ydCB7IFJlYWN0RE9NU2VydmVyIH0gZnJvbSBcIi4uL3ZlbmRvci92ZW5kb3Iuc2VydmVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0cmVhbUhhbmRsZXJzIH0gZnJvbSBcIi4uL3dvcmtlci90eXBlcy5qc1wiO1xuXG5cbi8qKlxuICogSW50dWl0aXZlIFJTQyBzdHJlYW0gcmVuZGVyZXIgdGhhdCB3b3JrcyBvbiBib3RoIGNsaWVudCBhbmQgc2VydmVyXG4gKiBcbiAqIFVzYWdlOlxuICogY29uc3QgcmVzdWx0ID0gcmVuZGVyUnNjU3RyZWFtKG9wdGlvbnMsIGhhbmRsZXJzKTtcbiAqIFxuICogLy8gUGlwZSB0byBhbnkgZGVzdGluYXRpb25cbiAqIHJlc3VsdC5yc2NTdHJlYW0ucGlwZShmaWxlU3RyZWFtKTtcbiAqIHJlc3VsdC5waXBlKHJlc3BvbnNlKTsgLy8gY29udmVuaWVuY2UgbWV0aG9kXG4gKiBcbiAqIC8vIEFjY2VzcyB0aGUgc3RyZWFtIGRpcmVjdGx5XG4gKiByZXN1bHQuc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiBjb25zb2xlLmxvZyhjaHVuaykpO1xuICogXG4gKiAvLyBBYm9ydCBpZiBuZWVkZWRcbiAqIHJlc3VsdC5hYm9ydCgnVXNlciBjYW5jZWxsZWQnKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclJzY1N0cmVhbShcbiAgb3B0aW9uczogQ3JlYXRlSGFuZGxlck9wdGlvbnMsXG4gIGhhbmRsZXJzPzogUGljazxTdHJlYW1IYW5kbGVyczxcInNlcnZlclwiPiwgXCJvbkVycm9yXCIgfCBcIm9uUG9zdHBvbmVcIiB8IFwib25FbmRcIiB8IFwib25EYXRhXCI+XG4pOiBSc2NSZW5kZXJSZXN1bHQge1xuICBjb25zdCBpZCA9IG9wdGlvbnMuaWQgfHwgXCJcIjtcbiAgY29uc3Qgcm91dGUgPSBvcHRpb25zLnJvdXRlO1xuICBjb25zdCB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlIHx8IGZhbHNlO1xuICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlcjtcblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBSZWFjdCBlbGVtZW50IGZyb20gb3B0aW9ucyAtIHdyYXAgaW4gdHJ5LWNhdGNoIHRvIGhhbmRsZSBlcnJvcnMgZHVyaW5nIGVsZW1lbnQgY3JlYXRpb25cbiAgICBsZXQgcmVhY3RFbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICByZWFjdEVsZW1lbnQgPSBjcmVhdGVSZWFjdEVsZW1lbnQob3B0aW9ucywge1xuICAgICAgICBpZCxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHZlcmJvc2UsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgcmV1c2VIZWFkbGVzc1N0cmVhbUlkOiAob3B0aW9ucyBhcyBhbnkpLnJldXNlSGVhZGxlc3NTdHJlYW1JZCxcbiAgICAgICAgaGVhZGxlc3NTdHJlYW1FbGVtZW50czogKG9wdGlvbnMgYXMgYW55KS5oZWFkbGVzc1N0cmVhbUVsZW1lbnRzLFxuICAgICAgICBoZWFkbGVzc1N0cmVhbUVycm9yczogKG9wdGlvbnMgYXMgYW55KS5oZWFkbGVzc1N0cmVhbUVycm9ycyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVsZW1lbnRFcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9ycyBkdXJpbmcgUmVhY3QgZWxlbWVudCBjcmVhdGlvblxuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5lcnJvcihgW3JlbmRlclJzY1N0cmVhbToke3JvdXRlfV0gRXJyb3IgY3JlYXRpbmcgUmVhY3QgZWxlbWVudDogJHtlbGVtZW50RXJyb3J9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENhbGwgb3VyIGVycm9yIGhhbmRsZXIgdG8gcHJvY2VzcyB0aGUgZXJyb3JcbiAgICAgIGhhbmRsZXJzPy5vbkVycm9yPy4oaWQsIGVsZW1lbnRFcnJvciwge1xuICAgICAgICByb3V0ZSxcbiAgICAgICAgY29udGV4dDogXCJSZWFjdCBFbGVtZW50IENyZWF0aW9uIEVycm9yXCIsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGVtcHR5IHN0cmVhbSBvbiBlcnJvciAtIEFQSSByZW1haW5zIGNvbnNpc3RlbnRcbiAgICAgIGNvbnN0IGVycm9yU3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoKCk7XG4gICAgICBlcnJvclN0cmVhbS5lbmQoKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJzZXJ2ZXJcIiBhcyBjb25zdCxcbiAgICAgICAgcnNjU3RyZWFtOiBlcnJvclN0cmVhbSxcbiAgICAgICAgcGlwZTogKGRlc3RpbmF0aW9uOiBhbnkpID0+IGVycm9yU3RyZWFtLnBpcGUoZGVzdGluYXRpb24pLFxuICAgICAgICBhYm9ydDogKCkgPT4ge30sXG4gICAgICAgIG1ldHJpY3M6IGNyZWF0ZVN0cmVhbU1ldHJpY3MoKSxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSB0aGUgb3V0cHV0IHN0cmVhbSAtIHRoaXMgaXMgd2hhdCB1c2VycyB3aWxsIHBpcGUgdG8gZGVzdGluYXRpb25zXG4gICAgY29uc3QgcnNjU3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoKCk7XG4gICAgY29uc3QgbWV0cmljcyA9IGNyZWF0ZVN0cmVhbU1ldHJpY3MoKTtcblxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oYFtyZW5kZXJSc2NTdHJlYW06JHtyb3V0ZX1dIENyZWF0aW5nIFJlYWN0IHN0cmVhbSBmb3IgZWxlbWVudGApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja1JlYWN0RXhwZXJpbWVudGFsKCk7XG5cbiAgICAvLyBSZW5kZXIgUmVhY3QgdG8gc3RyZWFtIC0gbGV0IGl0IGZsb3cgbmF0dXJhbGx5IGxpa2UgdGhlIFJTQyB3b3JrZXJcbiAgICBjb25zdCByZWFjdFN0cmVhbSA9IFJlYWN0RE9NU2VydmVyLnJlbmRlclRvUGlwZWFibGVTdHJlYW0oXG4gICAgICByZWFjdEVsZW1lbnQsXG4gICAgICBvcHRpb25zLm1vZHVsZUJhc2VQYXRoIHx8IFwiXCIsXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMuc2VydmVyUGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgICAgICBvbkVycm9yOiAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyPy5lcnJvcihgW3JlbmRlclJzY1N0cmVhbToke3JvdXRlfV0gUmVhY3Qgc3RyZWFtIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDYWxsIG91ciBlcnJvciBoYW5kbGVyIHRvIHByb2Nlc3MgdGhlIGVycm9yXG4gICAgICAgICAgaGFuZGxlcnM/Lm9uRXJyb3I/LihpZCwgZXJyb3IsIHtcbiAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgY29udGV4dDogXCJSZWFjdCBTdHJlYW0gRXJyb3JcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbWl0IHJvdXRlLmVycm9yIGV2ZW50IHRvIGFsbG93IG1haW4gdGhyZWFkIHRvIGhhbmRsZSBwYW5pYyB0aHJlc2hvbGQgbG9naWMgKGxpa2UgY2xpZW50KVxuICAgICAgICAgIGlmIChvcHRpb25zLm9uRXZlbnQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub25FdmVudCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwicm91dGUuZXJyb3JcIixcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgICAgcGFuaWNUaHJlc2hvbGQ6IG9wdGlvbnMucGFuaWNUaHJlc2hvbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBEb24ndCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZSBmdXJ0aGVyIC0gdGhpcyBwcmV2ZW50cyB1bmNhdWdodCBleGNlcHRpb25zXG4gICAgICAgICAgLy8gVGhlIGVycm9yIGhhcyBiZWVuIGhhbmRsZWQgYnkgb3VyIGVycm9yIGhhbmRsZXIsIHNvIHdlIGRvbid0IG5lZWQgdG8gcmUtdGhyb3cgaXRcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbnN1cmUgc3RyZWFtIGlzIGVuZGVkIHdoZW4gZXJyb3Igb2NjdXJzIHRvIHByZXZlbnQgaGFuZ2luZyAobGlrZSBSU0Mgd29ya2VyIGRvZXMpXG4gICAgICAgICAgLy8gVXNlIHNldEltbWVkaWF0ZSB0byBlbnN1cmUgdGhlIGVycm9yIGhhbmRsZXIgY29tcGxldGVzIGJlZm9yZSBlbmRpbmcgdGhlIHN0cmVhbVxuICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJzY1N0cmVhbS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgcnNjU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWxzbyBhYm9ydCB0aGUgUmVhY3Qgc3RyZWFtIHRvIGVuc3VyZSBpdCBzdG9wcyBwcm9kdWNpbmcgZGF0YVxuICAgICAgICAgICAgaWYgKHJlYWN0U3RyZWFtICYmIHR5cGVvZiByZWFjdFN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICByZWFjdFN0cmVhbS5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblBvc3Rwb25lOiAocmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nZ2VyPy5pbmZvKGBbcmVuZGVyUnNjU3RyZWFtOiR7cm91dGV9XSBTdHJlYW0gcG9zdHBvbmVkOiAke3JlYXNvbn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlcnM/Lm9uUG9zdHBvbmU/LihpZCwgcmVhc29uKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGlwZSBSZWFjdCBvdXRwdXQgdG8gb3VyIHN0cmVhbSAtIGxldCBzdHJlYW1zIGVuZCBuYXR1cmFsbHkgbGlrZSB0aGUgUlNDIHdvcmtlciBkb2VzXG4gICAgcmVhY3RTdHJlYW0ucGlwZShyc2NTdHJlYW0pO1xuICAgIFxuICAgIC8vIEhhbmRsZSBzdHJlYW0gZXJyb3JzIG5hdHVyYWxseSAtIGRvbid0IGZvcmNlIGNvbXBsZXRpb25cbiAgICByc2NTdHJlYW0ub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlcj8uZXJyb3IoYFtyZW5kZXJSc2NTdHJlYW06JHtyb3V0ZX1dIFN0cmVhbSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFJldHVybiBpbnR1aXRpdmUgaW50ZXJmYWNlIHRoYXQgd29ya3MgdGhlIHNhbWUgb24gY2xpZW50IGFuZCBzZXJ2ZXJcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzZXJ2ZXJcIiBhcyBjb25zdCxcbiAgICAgIHJzY1N0cmVhbTogcnNjU3RyZWFtLCAvLyBBbGlhcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGVcbiAgICAgIHBpcGU6IChkZXN0aW5hdGlvbjogYW55KSA9PiByc2NTdHJlYW0ucGlwZShkZXN0aW5hdGlvbiksIC8vIENvbnZlbmllbmNlIG1ldGhvZFxuICAgICAgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChoYW5kbGVycz8ub25FcnJvcikge1xuICAgICAgICAgIGhhbmRsZXJzLm9uRXJyb3IoaWQsIG5ldyBFcnJvcihTdHJpbmcocmVhc29uIHx8IFwiU3RyZWFtIGFib3J0ZWRcIikpLCB7XG4gICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiU3RyZWFtIEFib3J0ZWRcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByc2NTdHJlYW0uZW5kKCk7XG4gICAgICB9LFxuICAgICAgbWV0cmljcyxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseSAtIGFsd2F5cyByZXR1cm4gYSB2YWxpZCBzdHJlYW1cbiAgICBoYW5kbGVycz8ub25FcnJvcj8uKGlkLCBlcnJvciwge1xuICAgICAgcm91dGUsXG4gICAgICBjb250ZXh0OiBcIlJTQyBSZW5kZXIgRXJyb3JcIixcbiAgICB9KTtcblxuICAgIC8vIFJldHVybiBlbXB0eSBzdHJlYW0gb24gZXJyb3IgLSBBUEkgcmVtYWlucyBjb25zaXN0ZW50XG4gICAgY29uc3QgZXJyb3JTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICBlcnJvclN0cmVhbS5lbmQoKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzZXJ2ZXJcIiBhcyBjb25zdCxcbiAgICAgIHJzY1N0cmVhbTogZXJyb3JTdHJlYW0sXG4gICAgICBwaXBlOiAoZGVzdGluYXRpb246IGFueSkgPT4gZXJyb3JTdHJlYW0ucGlwZShkZXN0aW5hdGlvbiksXG4gICAgICBhYm9ydDogKCkgPT4ge30sXG4gICAgICBtZXRyaWNzOiBjcmVhdGVTdHJlYW1NZXRyaWNzKCksXG4gICAgfTtcbiAgfVxufVxuXG5cblxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBMEJPLFNBQVMsZUFBQSxDQUNkLFNBQ0EsUUFDaUIsRUFBQTtBQUNqQixFQUFNLE1BQUEsRUFBQSxHQUFLLFFBQVEsRUFBTSxJQUFBLEVBQUE7QUFDekIsRUFBQSxNQUFNLFFBQVEsT0FBUSxDQUFBLEtBQUE7QUFDdEIsRUFBTSxNQUFBLE9BQUEsR0FBVSxRQUFRLE9BQVcsSUFBQSxLQUFBO0FBQ25DLEVBQUEsTUFBTSxTQUFTLE9BQVEsQ0FBQSxNQUFBO0FBRXZCLEVBQUksSUFBQTtBQUVGLElBQUksSUFBQSxZQUFBO0FBQ0osSUFBSSxJQUFBO0FBQ0YsTUFBQSxZQUFBLEdBQWUsbUJBQW1CLE9BQVMsRUFBQTtBQUFBLFFBQ3pDLEVBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLHVCQUF3QixPQUFnQixDQUFBLHFCQUFBO0FBQUEsUUFDeEMsd0JBQXlCLE9BQWdCLENBQUEsc0JBQUE7QUFBQSxRQUN6QyxzQkFBdUIsT0FBZ0IsQ0FBQTtBQUFBLE9BQ3hDLENBQUE7QUFBQSxhQUNNLFlBQWMsRUFBQTtBQUVyQixNQUFBLElBQUksT0FBUyxFQUFBO0FBQ1gsUUFBQSxNQUFBLEVBQVEsS0FBTSxDQUFBLENBQUEsaUJBQUEsRUFBb0IsS0FBSyxDQUFBLGdDQUFBLEVBQW1DLFlBQVksQ0FB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
|