vite-plugin-react-server 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/virtualRscHmrPlugin.js +23 -23
- package/dist/plugin/environments/createBuildEventPlugin.js +88 -98
- package/dist/plugin/environments/createEnvironmentPlugin.js +222 -250
- package/dist/plugin/helpers/createRscRenderHelpers.js +33 -34
- 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.js +15 -28
- package/dist/plugin/helpers/resolveComponent.d.ts.map +1 -1
- package/dist/plugin/helpers/resolveComponent.js +4 -2
- 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/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/helpers/createRscRenderHelpers.ts +1 -1
- package/plugin/helpers/createSharedLoader.ts +6 -1
- package/plugin/helpers/resolveComponent.ts +6 -1
- package/plugin/index.client.ts +4 -0
- package/plugin/index.server.ts +4 -0
- package/plugin/index.ts +12 -5
- package/plugin/plugin.client.ts +1 -1
- package/plugin/plugin.server.ts +1 -1
- package/plugin/stream/renderRscStream.server.ts +3 -0
- package/plugin/utils/checkReactVersion.ts +28 -0
- package/plugin/vendor/vendor.client.ts +0 -2
- package/plugin/worker/rsc/handleRscRender.ts +2 -0
- package/scripts/generate-toc.mjs +27 -294
|
@@ -1,94 +1,109 @@
|
|
|
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
|
-
|
|
32
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { collectManifestCss } from '../helpers/collectManifestCss.js';
|
|
7
|
+
import { createUnifiedCssProcessor } from '../helpers/createUnifiedCssProcessor.js';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
|
|
10
|
+
function processCssFilesForPages({
|
|
11
|
+
userOptions,
|
|
12
|
+
autoDiscoveredFiles,
|
|
13
|
+
staticManifest,
|
|
14
|
+
serverManifest,
|
|
15
|
+
bundle,
|
|
16
|
+
logger
|
|
17
|
+
}) {
|
|
18
|
+
const cssFilesByPage = /* @__PURE__ */ new Map();
|
|
19
|
+
const indexHtmlCssInputs = collectManifestCss(
|
|
20
|
+
staticManifest ?? {},
|
|
21
|
+
"index.html"
|
|
22
|
+
);
|
|
23
|
+
const clientEntryCssInputs = userOptions.clientEntry ? collectManifestCss(
|
|
24
|
+
staticManifest ?? {},
|
|
25
|
+
userOptions.clientEntry
|
|
26
|
+
) : null;
|
|
27
|
+
const globalCssInputs = {
|
|
28
|
+
...indexHtmlCssInputs,
|
|
29
|
+
...clientEntryCssInputs
|
|
30
|
+
};
|
|
31
|
+
const transformedServerManifest = Object.fromEntries(
|
|
32
|
+
Object.entries(serverManifest ?? {}).map(([key, value]) => {
|
|
33
|
+
const manifestEntry = value;
|
|
34
|
+
if (manifestEntry.isEntry && manifestEntry.file) {
|
|
35
|
+
for (const [, staticValue] of Object.entries(staticManifest ?? {})) {
|
|
36
|
+
if (staticValue && typeof staticValue === "object" && "file" in staticValue) {
|
|
37
|
+
if (staticValue.file === manifestEntry.file && staticValue.css?.length) {
|
|
38
|
+
return [
|
|
39
|
+
key,
|
|
40
|
+
{
|
|
41
|
+
...manifestEntry,
|
|
42
|
+
css: staticValue.css
|
|
33
43
|
}
|
|
44
|
+
];
|
|
34
45
|
}
|
|
46
|
+
}
|
|
35
47
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
for (const [key, value] of Object.entries(transformedServerManifest)) {
|
|
67
|
-
if (value && typeof value === 'object' && 'css' in value && Array.isArray(value.css) && value.css.length > 0) {
|
|
68
|
-
logger.info(`[plugin.server] Found CSS entry: ${key} -> ${JSON.stringify(value.css)}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const cssInputs = collectManifestCss(transformedServerManifest, props ? [page, props] : page);
|
|
73
|
-
if (userOptions.verbose) {
|
|
74
|
-
logger.info(`[plugin.server] CSS inputs for ${url}: ${Object.keys(cssInputs).length} files`);
|
|
75
|
-
for (const [key, value] of Object.entries(cssInputs)) {
|
|
76
|
-
logger.info(`[plugin.server] CSS input: ${key} -> ${value}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Process CSS files using unified CSS processor
|
|
80
|
-
const pageCssMap = cssProcessor.processCssFromStaticBuild(cssInputs);
|
|
81
|
-
// Add global styles if they exist
|
|
82
|
-
if (Object.keys(globalCssInputs).length > 0) {
|
|
83
|
-
const globalCssMap = cssProcessor.processCssFromStaticBuild(globalCssInputs);
|
|
84
|
-
for (const [key, value] of globalCssMap.entries()) {
|
|
85
|
-
globalCss.set(key, value);
|
|
86
|
-
}
|
|
48
|
+
}
|
|
49
|
+
return [key, value];
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
const globalCss = /* @__PURE__ */ new Map();
|
|
53
|
+
const { urlMap = /* @__PURE__ */ new Map() } = autoDiscoveredFiles ?? {};
|
|
54
|
+
const cssProcessor = createUnifiedCssProcessor({
|
|
55
|
+
userOptions,
|
|
56
|
+
logger,
|
|
57
|
+
verbose: userOptions.verbose,
|
|
58
|
+
staticOutDir: staticManifest ? join(userOptions.projectRoot || "", userOptions.build.outDir, userOptions.build.client) : void 0,
|
|
59
|
+
staticManifest});
|
|
60
|
+
for (const [url, { page, props }] of urlMap) {
|
|
61
|
+
if (userOptions.verbose) {
|
|
62
|
+
logger.info(
|
|
63
|
+
`[plugin.server] Processing route: ${url}, page: ${page}, props: ${props}`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
if (userOptions.verbose) {
|
|
67
|
+
logger.info(`[plugin.server] transformedServerManifest keys: ${Object.keys(transformedServerManifest).join(", ")}`);
|
|
68
|
+
logger.info(`[plugin.server] Looking for CSS starting from: ${page} and ${props || "none"}`);
|
|
69
|
+
if (transformedServerManifest[page]) {
|
|
70
|
+
logger.info(`[plugin.server] Page entry: ${JSON.stringify(transformedServerManifest[page], null, 2)}`);
|
|
71
|
+
}
|
|
72
|
+
if (props && transformedServerManifest[props]) {
|
|
73
|
+
logger.info(`[plugin.server] Props entry: ${JSON.stringify(transformedServerManifest[props], null, 2)}`);
|
|
74
|
+
}
|
|
75
|
+
for (const [key, value] of Object.entries(transformedServerManifest)) {
|
|
76
|
+
if (value && typeof value === "object" && "css" in value && Array.isArray(value.css) && value.css.length > 0) {
|
|
77
|
+
logger.info(`[plugin.server] Found CSS entry: ${key} -> ${JSON.stringify(value.css)}`);
|
|
87
78
|
}
|
|
88
|
-
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const cssInputs = collectManifestCss(
|
|
82
|
+
transformedServerManifest,
|
|
83
|
+
props ? [page, props] : page
|
|
84
|
+
);
|
|
85
|
+
if (userOptions.verbose) {
|
|
86
|
+
logger.info(
|
|
87
|
+
`[plugin.server] CSS inputs for ${url}: ${Object.keys(cssInputs).length} files`
|
|
88
|
+
);
|
|
89
|
+
for (const [key, value] of Object.entries(cssInputs)) {
|
|
90
|
+
logger.info(`[plugin.server] CSS input: ${key} -> ${value}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const pageCssMap = cssProcessor.processCssFromStaticBuild(cssInputs);
|
|
94
|
+
if (Object.keys(globalCssInputs).length > 0) {
|
|
95
|
+
const globalCssMap = cssProcessor.processCssFromStaticBuild(globalCssInputs);
|
|
96
|
+
for (const [key, value] of globalCssMap.entries()) {
|
|
97
|
+
globalCss.set(key, value);
|
|
98
|
+
}
|
|
89
99
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
cssFilesByPage.set(url, pageCssMap);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
cssFilesByPage,
|
|
104
|
+
globalCss
|
|
105
|
+
};
|
|
94
106
|
}
|
|
107
|
+
|
|
108
|
+
export { processCssFilesForPages };
|
|
109
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc0Nzc0ZpbGVzRm9yUGFnZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9yZWFjdC1zdGF0aWMvcHJvY2Vzc0Nzc0ZpbGVzRm9yUGFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBdXRvRGlzY292ZXJlZEZpbGVzLFxuICBDc3NDb250ZW50LFxuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgTG9nZ2VyLCBNYW5pZmVzdCB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBjb2xsZWN0TWFuaWZlc3RDc3MgfSBmcm9tIFwiLi4vaGVscGVycy9jb2xsZWN0TWFuaWZlc3RDc3MuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVVuaWZpZWRDc3NQcm9jZXNzb3IgfSBmcm9tIFwiLi4vaGVscGVycy9jcmVhdGVVbmlmaWVkQ3NzUHJvY2Vzc29yLmpzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbnRlcmZhY2UgUHJvY2Vzc0Nzc0ZpbGVzRm9yUGFnZXNPcHRpb25zIHtcbiAgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnM7XG4gIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IEF1dG9EaXNjb3ZlcmVkRmlsZXMgfCBudWxsO1xuICBzdGF0aWNNYW5pZmVzdDogTWFuaWZlc3QgfCB1bmRlZmluZWQ7XG4gIHNlcnZlck1hbmlmZXN0OiBNYW5pZmVzdCB8IHVuZGVmaW5lZDtcbiAgYnVuZGxlOiBhbnk7XG4gIGxvZ2dlcjogTG9nZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Nzc0ZpbGVzRm9yUGFnZXMoe1xuICB1c2VyT3B0aW9ucyxcbiAgYXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgc3RhdGljTWFuaWZlc3QsXG4gIHNlcnZlck1hbmlmZXN0LFxuICBidW5kbGUsXG4gIGxvZ2dlcixcbn06IFByb2Nlc3NDc3NGaWxlc0ZvclBhZ2VzT3B0aW9ucyk6IHtcbiAgY3NzRmlsZXNCeVBhZ2U6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+PjtcbiAgZ2xvYmFsQ3NzOiBNYXA8c3RyaW5nLCBDc3NDb250ZW50Pjtcbn0ge1xuICBjb25zdCBjc3NGaWxlc0J5UGFnZSA9IG5ldyBNYXAoKTtcblxuICAvLyBGaXJzdCBjb2xsZWN0IGdsb2JhbCBzdHlsZXMgZnJvbSBpbmRleC5odG1sXG4gIGNvbnN0IGluZGV4SHRtbENzc0lucHV0cyA9IGNvbGxlY3RNYW5pZmVzdENzcyhcbiAgICBzdGF0aWNNYW5pZmVzdCA/PyB7fSxcbiAgICBcImluZGV4Lmh0bWxcIlxuICApO1xuICBjb25zdCBjbGllbnRFbnRyeUNzc0lucHV0cyA9IHVzZXJPcHRpb25zLmNsaWVudEVudHJ5XG4gICAgPyBjb2xsZWN0TWFuaWZlc3RDc3MoXG4gICAgICAgIHN0YXRpY01hbmlmZXN0ID8/IHt9LFxuICAgICAgICB1c2VyT3B0aW9ucy5jbGllbnRFbnRyeVxuICAgICAgKVxuICAgIDogbnVsbDtcbiAgY29uc3QgZ2xvYmFsQ3NzSW5wdXRzID0ge1xuICAgIC4uLmluZGV4SHRtbENzc0lucHV0cyxcbiAgICAuLi5jbGllbnRFbnRyeUNzc0lucHV0cyxcbiAgfTtcblxuICAvLyB0cmFuc2Zvcm0gdGhlIHNlcnZlciBtYW5pZmVzdCB0byBpbmNsdWRlIHRoZSBjc3MgZmlsZXMgZnJvbSB0aGUgc3RhdGljIG1hbmlmZXN0XG4gIC8vIFRoZSBzZXJ2ZXIgbWFuaWZlc3QgbmVlZHMgQ1NTIGluZm8gZm9yIGlubGluaW5nIG9yIHJlcXVlc3RpbmcgLmpzIG1vZHVsZXMgZm9yIGNsYXNzbmFtZXNcbiAgY29uc3QgdHJhbnNmb3JtZWRTZXJ2ZXJNYW5pZmVzdCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhzZXJ2ZXJNYW5pZmVzdCA/PyB7fSkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0RW50cnkgPSB2YWx1ZSBhcyBhbnk7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3MgYSBidW5kbGUgZW50cnksIGp1c3QgdXNlIHRoZSBmaWxlIHByb3BlcnR5IGRpcmVjdGx5XG4gICAgICBpZiAobWFuaWZlc3RFbnRyeS5pc0VudHJ5ICYmIG1hbmlmZXN0RW50cnkuZmlsZSkge1xuICAgICAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBtYW5pZmVzdCBlbnRyeSBieSBtYXRjaGluZyB0aGUgZmlsZSBwYXRoXG4gICAgICAgIGZvciAoY29uc3QgWywgc3RhdGljVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXRpY01hbmlmZXN0ID8/IHt9KSkge1xuICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZSAmJiB0eXBlb2Ygc3RhdGljVmFsdWUgPT09ICdvYmplY3QnICYmICdmaWxlJyBpbiBzdGF0aWNWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHN0YXRpY1ZhbHVlLmZpbGUgPT09IG1hbmlmZXN0RW50cnkuZmlsZSAmJiBzdGF0aWNWYWx1ZS5jc3M/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5tYW5pZmVzdEVudHJ5LFxuICAgICAgICAgICAgICAgICAgY3NzOiBzdGF0aWNWYWx1ZS5jc3MsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICB9KVxuICApO1xuICBjb25zdCBnbG9iYWxDc3MgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHsgdXJsTWFwID0gbmV3IE1hcCgpIH0gPSBhdXRvRGlzY292ZXJlZEZpbGVzID8/IHt9O1xuXG4gIC8vIENyZWF0ZSB1bmlmaWVkIENTUyBwcm9jZXNzb3JcbiAgY29uc3QgY3NzUHJvY2Vzc29yID0gY3JlYXRlVW5pZmllZENzc1Byb2Nlc3Nvcih7XG4gICAgdXNlck9wdGlvbnMsXG4gICAgbG9nZ2VyLFxuICAgIHZlcmJvc2U6IHVzZXJPcHRpb25zLnZlcmJvc2UsXG4gICAgc3RhdGljT3V0RGlyOiBzdGF0aWNNYW5pZmVzdCA/IGpvaW4odXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgJycsIHVzZXJPcHRpb25zLmJ1aWxkLm91dERpciwgdXNlck9wdGlvbnMuYnVpbGQuY2xpZW50KSA6IHVuZGVmaW5lZCxcbiAgICBzdGF0aWNNYW5pZmVzdCxcbiAgICBidW5kbGUsXG4gIH0pO1xuXG4gIC8vIENvbGxlY3QgQ1NTIGZpbGVzIGZvciBlYWNoIHBhZ2UgYW5kIGl0cyBwcm9wc1xuICBmb3IgKGNvbnN0IFt1cmwsIHsgcGFnZSwgcHJvcHMgfV0gb2YgdXJsTWFwKSB7XG4gICAgaWYgKHVzZXJPcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW3BsdWdpbi5zZXJ2ZXJdIFByb2Nlc3Npbmcgcm91dGU6ICR7dXJsfSwgcGFnZTogJHtwYWdlfSwgcHJvcHM6ICR7cHJvcHN9YFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gVXNlIHRoZSB0cmFuc2Zvcm1lZCBzZXJ2ZXIgbWFuaWZlc3Qgd2hpY2ggbm93IGluY2x1ZGVzIENTUyBpbmZvIGZyb20gdGhlIHN0YXRpYyBtYW5pZmVzdFxuICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gaW5saW5lIENTUyBvciByZXF1ZXN0IC5qcyBtb2R1bGVzIGZvciBjbGFzc25hbWVzXG4gICAgaWYgKHVzZXJPcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBbcGx1Z2luLnNlcnZlcl0gdHJhbnNmb3JtZWRTZXJ2ZXJNYW5pZmVzdCBrZXlzOiAke09iamVjdC5rZXlzKHRyYW5zZm9ybWVkU2VydmVyTWFuaWZlc3QpLmpvaW4oJywgJyl9YCk7XG4gICAgICBsb2dnZXIuaW5mbyhgW3BsdWdpbi5zZXJ2ZXJdIExvb2tpbmcgZm9yIENTUyBzdGFydGluZyBmcm9tOiAke3BhZ2V9IGFuZCAke3Byb3BzIHx8ICdub25lJ31gKTtcbiAgICAgIGlmICh0cmFuc2Zvcm1lZFNlcnZlck1hbmlmZXN0W3BhZ2VdKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbcGx1Z2luLnNlcnZlcl0gUGFnZSBlbnRyeTogJHtKU09OLnN0cmluZ2lmeSh0cmFuc2Zvcm1lZFNlcnZlck1hbmlmZXN0W3BhZ2VdLCBudWxsLCAyKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiB0cmFuc2Zvcm1lZFNlcnZlck1hbmlmZXN0W3Byb3BzXSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgW3BsdWdpbi5zZXJ2ZXJdIFByb3BzIGVudHJ5OiAke0pTT04uc3RyaW5naWZ5KHRyYW5zZm9ybWVkU2VydmVyTWFuaWZlc3RbcHJvcHNdLCBudWxsLCAyKX1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGVidWc6IENoZWNrIHdoYXQgQ1NTIGVudHJpZXMgZXhpc3QgaW4gdGhlIHRyYW5zZm9ybWVkIG1hbmlmZXN0XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2Zvcm1lZFNlcnZlck1hbmlmZXN0KSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnY3NzJyBpbiB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmNzcykgJiYgdmFsdWUuY3NzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgW3BsdWdpbi5zZXJ2ZXJdIEZvdW5kIENTUyBlbnRyeTogJHtrZXl9IC0+ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUuY3NzKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBjc3NJbnB1dHMgPSBjb2xsZWN0TWFuaWZlc3RDc3MoXG4gICAgICB0cmFuc2Zvcm1lZFNlcnZlck1hbmlmZXN0LFxuICAgICAgcHJvcHMgPyBbcGFnZSwgcHJvcHNdIDogcGFnZVxuICAgICk7XG4gICAgaWYgKHVzZXJPcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW3BsdWdpbi5zZXJ2ZXJdIENTUyBpbnB1dHMgZm9yICR7dXJsfTogJHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhjc3NJbnB1dHMpLmxlbmd0aFxuICAgICAgICB9IGZpbGVzYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNzc0lucHV0cykpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtwbHVnaW4uc2VydmVyXSBDU1MgaW5wdXQ6ICR7a2V5fSAtPiAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgQ1NTIGZpbGVzIHVzaW5nIHVuaWZpZWQgQ1NTIHByb2Nlc3NvclxuICAgIGNvbnN0IHBhZ2VDc3NNYXAgPSBjc3NQcm9jZXNzb3IucHJvY2Vzc0Nzc0Zyb21TdGF0aWNCdWlsZChjc3NJbnB1dHMpO1xuXG4gICAgLy8gQWRkIGdsb2JhbCBzdHlsZXMgaWYgdGhleSBleGlzdFxuICAgIGlmIChPYmplY3Qua2V5cyhnbG9iYWxDc3NJbnB1dHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdsb2JhbENzc01hcCA9IGNzc1Byb2Nlc3Nvci5wcm9jZXNzQ3NzRnJvbVN0YXRpY0J1aWxkKGdsb2JhbENzc0lucHV0cyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBnbG9iYWxDc3NNYXAuZW50cmllcygpKSB7XG4gICAgICAgIGdsb2JhbENzcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNzc0ZpbGVzQnlQYWdlLnNldCh1cmwsIHBhZ2VDc3NNYXApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBj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
|